Kaynağa Gözat

[#]调整微信提醒消息

孙伟 3 yıl önce
ebeveyn
işleme
6397b753a9

+ 36 - 30
application-facade/src/main/java/com/factory/util/client/PushWxMessage.java

@@ -8,38 +8,44 @@ import java.util.Map;
 
 public class PushWxMessage {
 
-   public static String  sendMessage(AppEntry appinfo,TemplateEntry template){
-     try {
-         Map params = new HashMap();
-         params.put("secret", appinfo.getSecret());
-         params.put("appid", appinfo.getAppId());
-         params.put("grant_type", "client_credential");
-         String result = HttpCilentUntil.httpGetToString(
-                 "https://api.weixin.qq.com/cgi-bin/token", params);
-         JSONObject jsonObject = JSON.parseObject(result);
-         String access_token = jsonObject.get("access_token").toString();
-         String pushUrl = new StringBuffer("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=").append(access_token).toString();
-         result = HttpCilentUntil.httpJsonToString(pushUrl, JSON.toJSONString(template));
-         jsonObject = JSON.parseObject(result);
-         String errCode = jsonObject.get("errcode").toString();
-         String errMsg = jsonObject.get("errmsg").toString();
-         System.out.println(errCode);
-         return errCode;
-     }catch (Throwable e){
-         e.printStackTrace();
-         return "-1";
-     }
-   }
+    public static String sendMessage(AppEntry appinfo, TemplateEntry template) {
+        try {
+            Map params = new HashMap();
+            params.put("secret", appinfo.getSecret());
+            params.put("appid", appinfo.getAppId());
+            params.put("grant_type", "client_credential");
+            String result = HttpCilentUntil.httpGetToString(
+                    "https://api.weixin.qq.com/cgi-bin/token", params);
+            JSONObject jsonObject = JSON.parseObject(result);
+            String access_token = jsonObject.get("access_token").toString();
+            String pushUrl = new StringBuffer("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=").append(access_token).toString();
+            result = HttpCilentUntil.httpJsonToString(pushUrl, JSON.toJSONString(template));
+            jsonObject = JSON.parseObject(result);
+            String errCode = jsonObject.get("errcode").toString();
+            String errMsg = jsonObject.get("errmsg").toString();
+            System.out.println(errCode);
+            return errCode;
+        } catch (Throwable e) {
+            e.printStackTrace();
+            return "-1";
+        }
+    }
 
     public static void main(String[] args) {
-        AppEntry app=AppEntry.builder().appId("wxfd6e42e05b91163c").secret("7c4e39a33bf8b66beb919b9ad0a15832").build();
-        HashMap<String,ValEntry> dataMap=new HashMap();
-        dataMap.put("thing1",ValEntry.builder().value("this is one").build());
-        dataMap.put("thing2",ValEntry.builder().value("this is two").build());
-        dataMap.put("time3",ValEntry.builder().value("2021-07-23 20:00").build());
-        dataMap.put("thing4",ValEntry.builder().value("Bella").build());
-        TemplateEntry tpl=TemplateEntry.builder().template_id("3RatcsOA-T0Dsgevr-1UGvYzZvhS0UY9A86fnTFax50").touser("oc6xx5Z4DGNuRYKp7EHANCkq5mII").page("pages/login/index").data(dataMap).build();
-        PushWxMessage.sendMessage(app,tpl);
+        AppEntry app = AppEntry.builder().appId("wxfd6e42e05b91163c").secret("7c4e39a33bf8b66beb919b9ad0a15832").build();
+        HashMap<String, ValEntry> dataMap = new HashMap();
+        dataMap.put("thing1", ValEntry.builder().value("this is one").build());
+        dataMap.put("thing2", ValEntry.builder().value("this is two").build());
+        dataMap.put("time3", ValEntry.builder().value("2021-07-23 20:00").build());
+        dataMap.put("thing4", ValEntry.builder().value("Bella").build());
+        TemplateEntry tpl = TemplateEntry.builder()
+                .template_id("3RatcsOA-T0Dsgevr-1UGvYzZvhS0UY9A86fnTFax50")
+                .touser("oc6xx5Z4DGNuRYKp7EHANCkq5mII")
+                .page("pages/login/index")
+//                .miniprogram_state("trial")
+                .data(dataMap)
+                .build();
+        PushWxMessage.sendMessage(app, tpl);
     }
 
 }

+ 20 - 2
application-facade/src/main/java/com/factory/util/client/TemplateEntry.java

@@ -8,10 +8,28 @@ import java.util.HashMap;
 @Data
 @Builder
 public class TemplateEntry {
-    private String touser; //openid
+    /**
+     * 模板id
+     */
     private String template_id; //模板id
-    private HashMap<String,ValEntry> data; //模板数据
+    /**
+     * 跳转小程序页面
+     */
     private String page;//不是必填
+    /**
+     * 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
+     */
     private String miniprogram_state; //不是必填
+    /**
+     * 小程序语言,默认中文
+     */
     private String lang;//不是必填
+    /**
+     * 接收者openid
+     */
+    private String touser; //openid
+    /**
+     * 模板数据
+     */
+    private HashMap<String, ValEntry> data; //模板数据
 }

+ 19 - 0
application-facade/src/main/java/com/factory/web/service/impl/fa/FirstArticleServiceImpl.java

@@ -34,14 +34,18 @@ import com.factory.web.service.impl.FileEntry;
 import com.factory.web.service.pm.OnsiteApprovalPlanService;
 import com.factory.web.service.pm.PlanBindService;
 import com.factory.web.service.pm.PreventMistakeService;
+import com.factory.wx.entity.req.SendMsgReq;
+import com.factory.wx.service.WxService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.*;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -107,6 +111,9 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
     @Autowired
     private FileService fileService;
 
+    @Autowired
+    private WxService wxService;
+
     /**
      * 新建防错计划
      *
@@ -219,6 +226,18 @@ public class FirstArticleServiceImpl extends ServiceImpl<FirstArticleMapper, Ben
                     .status(0) // 0未审批
                     .build();
             onsiteApprovalPlanService.save(onsiteApprovalPlan);
+
+            //向下一级别发送提醒
+            Date date = new Date();
+            SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+            //发送微信消息
+            wxService.sendWechatMessage(SendMsgReq.builder()
+                    .toUserId(approvalUserRes.getUserId())
+                    .title("计划审批提醒")
+                    .content("您有待审批的新建计划,请登录小程序查看【计划审批】")
+                    .endTime(ft.format(date))
+                    .fromUserId(plan.getCreatedUserId())
+                    .build());
         }
 
         return ResponseBeanBuilder.ok();

+ 20 - 0
application-facade/src/main/java/com/factory/web/service/impl/pm/PreventMistakeServiceImpl.java

@@ -4,10 +4,14 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.function.Function;
 
+import com.factory.wx.entity.req.SendMsgReq;
+import com.factory.wx.service.WxService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -164,6 +168,10 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
     private FileService fileService;
 	
 
+	@Autowired
+	private WxService wxService;
+
+
 	/**
 	 * 新建防错计划
 	 *
@@ -254,6 +262,18 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 					.status(0) // 0未审批
 					.build();
 			onsiteApprovalPlanService.save(onsiteApprovalPlan);
+			//向下一级别发送提醒
+
+			Date date = new Date();
+			SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
+			//发送微信消息
+			wxService.sendWechatMessage(SendMsgReq.builder()
+					.toUserId(approvalUserRes.getUserId())
+					.title("计划审批提醒")
+					.content("您有待审批的新建计划,请登录小程序查看【计划审批】")
+					.endTime(ft.format(date))
+					.fromUserId(plan.getCreatedUserId())
+					.build());
 		}
 
 		return ResponseBeanBuilder.ok();

+ 34 - 0
application-facade/src/main/java/com/factory/wx/entity/req/SendMsgReq.java

@@ -0,0 +1,34 @@
+package com.factory.wx.entity.req;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author sMArT
+ * @version 1.0
+ * @date 2021-08-04 10:00 上午
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class SendMsgReq {
+
+    @ApiModelProperty(value = "接收用户id")
+    private Long toUserId;
+
+    @ApiModelProperty(value = "作业名称")
+    private String title;
+
+    @ApiModelProperty(value = "提醒内容")
+    private String content;
+
+    @ApiModelProperty(value = "截止日期")
+    private String endTime;
+
+    @ApiModelProperty(value = "发布人员id")
+    private Long fromUserId;
+}

+ 9 - 0
application-facade/src/main/java/com/factory/wx/service/WxService.java

@@ -1,6 +1,7 @@
 package com.factory.wx.service;
 
 import com.factory.base.entity.aggregates.ResponseBean;
+import com.factory.wx.entity.req.SendMsgReq;
 import com.factory.wx.entity.res.FunctionsRes;
 
 import java.util.List;
@@ -25,9 +26,17 @@ public interface WxService {
 
     /**
      * 查询用户是否绑定
+     *
      * @param openid
      * @param userId
      * @return
      */
     Integer selectBindWeChatUserCount(String openid, Long userId);
+
+    /**
+     * 给微信用户发送消息
+     *
+     * @param sendMsgReq
+     */
+    void sendWechatMessage(SendMsgReq sendMsgReq);
 }

+ 13 - 0
application-facade/src/main/java/com/factory/wx/service/impl/PlanPassFAServiceImpl.java

@@ -18,10 +18,12 @@ import com.factory.web.service.pm.PreventMistakeService;
 import com.factory.wx.entity.req.PlanApprovalTaskReq;
 import com.factory.wx.entity.req.PlanPassReq;
 import com.factory.wx.entity.req.SearchPlanPassReq;
+import com.factory.wx.entity.req.SendMsgReq;
 import com.factory.wx.entity.res.*;
 import com.factory.wx.mapper.PlanPassMapper;
 import com.factory.wx.service.PlanPassFAService;
 import com.factory.wx.service.WxPlanService;
+import com.factory.wx.service.WxService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -57,6 +59,8 @@ public class PlanPassFAServiceImpl implements PlanPassFAService {
     private ApprovalRuleMapper approvalRuleMapper;
     @Autowired
     private PreventMistakeService preventMistakeService;
+    @Autowired
+    private WxService wxService;
 
     /**
      * 计划放行详情-首件
@@ -242,6 +246,15 @@ public class PlanPassFAServiceImpl implements PlanPassFAService {
                     .approvalUserId(approvalUserRes.getUserId())
                     .status(0)
                     .build());
+
+            //向下一级别发送提醒
+            wxService.sendWechatMessage(SendMsgReq.builder()
+                    .toUserId(approvalUserRes.getUserId())
+                    .title("计划放行提醒")
+                    .content("您有待放行的计划审批,请登录小程序查看")
+                    .endTime("2021-08-04")
+                    .fromUserId(planApprovalTaskReq.getUserId())
+                    .build());
         } else {
             //如果是最后一个审批级别则设置task状态为不通过
             updateFirstArticleTask(planApprovalTaskReq);

+ 12 - 0
application-facade/src/main/java/com/factory/wx/service/impl/PlanPassPMServiceImpl.java

@@ -13,10 +13,12 @@ import com.factory.web.service.pm.PreventMistakeService;
 import com.factory.wx.entity.req.PlanApprovalTaskReq;
 import com.factory.wx.entity.req.PlanPassReq;
 import com.factory.wx.entity.req.SearchPlanPassReq;
+import com.factory.wx.entity.req.SendMsgReq;
 import com.factory.wx.entity.res.*;
 import com.factory.wx.mapper.PlanPassMapper;
 import com.factory.wx.service.PlanPassPMService;
 import com.factory.wx.service.WxPlanService;
+import com.factory.wx.service.WxService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -50,6 +52,8 @@ public class PlanPassPMServiceImpl implements PlanPassPMService {
     private ApprovalRuleMapper approvalRuleMapper;
     @Autowired
     private PreventMistakeService preventMistakeService;
+    @Autowired
+    private WxService wxService;
 
     /**
      * 计划放行详情-防错
@@ -227,6 +231,14 @@ public class PlanPassPMServiceImpl implements PlanPassPMService {
                     .approvalUserId(approvalUserRes.getUserId())
                     .status(0)
                     .build());
+            //向下一级别发送提醒
+            wxService.sendWechatMessage(SendMsgReq.builder()
+                    .toUserId(approvalUserRes.getUserId())
+                    .title("计划放行提醒")
+                    .content("您有待放行的计划审批,请登录小程序查看")
+                    .endTime("2021-08-04")
+                    .fromUserId(planApprovalTaskReq.getUserId())
+                    .build());
         } else {
             //如果是最后一个审批级别则设置task状态为不通过
             updateOnsiteTask(planApprovalTaskReq);

+ 47 - 0
application-facade/src/main/java/com/factory/wx/service/impl/WxServiceImpl.java

@@ -3,14 +3,22 @@ package com.factory.wx.service.impl;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.factory.base.entity.aggregates.ResponseBean;
 import com.factory.base.util.res.ResponseBeanBuilder;
+import com.factory.util.client.AppEntry;
+import com.factory.util.client.PushWxMessage;
+import com.factory.util.client.TemplateEntry;
+import com.factory.util.client.ValEntry;
 import com.factory.wx.entity.UsUserWechat;
+import com.factory.wx.entity.req.SendMsgReq;
 import com.factory.wx.entity.res.FunctionsRes;
 import com.factory.wx.mapper.WxMapper;
+import com.factory.wx.service.WxPlanService;
 import com.factory.wx.service.WxService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -22,8 +30,25 @@ import java.util.List;
 @Transactional(rollbackFor = Exception.class)
 public class WxServiceImpl implements WxService {
 
+    @Value("${wx.minprogram.appsecret}")
+    private String appsecret;
+
+    @Value("${wx.minprogram.appid}")
+    private String appid;
+
+    @Value("${wx.minprogram.templateId}")
+    private String templateId;
+
+    @Value("${wx.minprogram.page}")
+    private String page;
+
+    @Value("${wx.minprogram.miniprogramState}")
+    private String miniprogramState;
+
     @Autowired
     private WxMapper wxMapper;
+    @Autowired
+    private WxPlanService wxPlanService;
 
     @Override
     public ResponseBean<List<FunctionsRes>> getUserFunction(Long userId) {
@@ -63,4 +88,26 @@ public class WxServiceImpl implements WxService {
     public Integer selectBindWeChatUserCount(String openid, Long userId) {
         return wxMapper.selectCount(Wrappers.<UsUserWechat>lambdaQuery().eq(UsUserWechat::getUserId, userId).eq(UsUserWechat::getOpenid, openid));
     }
+
+    @Override
+    public void sendWechatMessage(SendMsgReq sendMsgReq) {
+        String openId = wxMapper.selectOne(Wrappers.<UsUserWechat>lambdaQuery().eq(UsUserWechat::getUserId, sendMsgReq.getToUserId())).getOpenid();
+        if (!openId.isEmpty()) {
+            AppEntry appEntry = AppEntry.builder().appId(appid).secret(appsecret).build();
+            HashMap<String, ValEntry> dataMap = new HashMap();
+            dataMap.put("thing1", ValEntry.builder().value(sendMsgReq.getContent()).build());
+            dataMap.put("thing2", ValEntry.builder().value(sendMsgReq.getTitle()).build());
+            dataMap.put("time3", ValEntry.builder().value(sendMsgReq.getEndTime()).build());
+            String fromUserName = wxPlanService.getUserNameById(sendMsgReq.getFromUserId());
+            dataMap.put("thing4", ValEntry.builder().value(fromUserName).build());
+            TemplateEntry tpl = TemplateEntry.builder()
+                    .template_id(templateId)
+                    .touser(openId)
+                    .page(page)
+                    .miniprogram_state(miniprogramState)
+                    .data(dataMap)
+                    .build();
+            PushWxMessage.sendMessage(appEntry, tpl);
+        }
+    }
 }

+ 3 - 0
application-facade/src/main/resources/application-dev.yml

@@ -100,3 +100,6 @@ jetcache:
         maxTotal: 50
       host: ${SPRING.REDIS.HOST:192.168.31.14}
       port: ${SPRING.REDIS.PORT:6379}
+wx:
+  minprogram:
+    miniprogramState: trial

+ 3 - 0
application-facade/src/main/resources/application-test.yml

@@ -121,3 +121,6 @@ jetcache:
       host: ${SPRING.REDIS.HOST:39.100.230.190}
       port: ${SPRING.REDIS.PORT:8120}
       password: ${SPRING.REDIS.PASSWORD:jh1q2w3e4r}
+wx:
+  minprogram:
+    miniprogramState: trial

+ 3 - 0
application-facade/src/main/resources/application.yml

@@ -78,6 +78,9 @@ wx:
   minprogram:
     appid: wxfd6e42e05b91163c
     appsecret: 7c4e39a33bf8b66beb919b9ad0a15832
+    templateId: 3RatcsOA-T0Dsgevr-1UGvYzZvhS0UY9A86fnTFax50
+    page: pages/login/index
+    miniprogramState: formal
 download:
    excel:
       imgid: 23