Browse Source

fix 模板消息

zoujiajian 3 năm trước cách đây
mục cha
commit
2bc5aadc9c

+ 9 - 15
netflix-dao/src/main/java/com/cyksj/model/dto/WxMpTemplateData.java

@@ -1,6 +1,9 @@
 package com.cyksj.model.dto;
 
-import lombok.Data;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
 
 import java.io.Serializable;
 
@@ -8,26 +11,17 @@ import java.io.Serializable;
  * @author chan
  * @date 2022-10-09 10:31 AM
  */
-@Data
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
 public class WxMpTemplateData implements Serializable {
   private static final long serialVersionUID = 6301835292940277870L;
 
-  private String name;
   private String value;
   private String color;
 
-  public WxMpTemplateData() {
-  }
-
-  public WxMpTemplateData(String name, String value) {
-    this.name = name;
-    this.value = value;
-  }
-
-  public WxMpTemplateData(String name, String value, String color) {
-    this.name = name;
+  public WxMpTemplateData(String value) {
     this.value = value;
-    this.color = color;
   }
-
 }

+ 101 - 65
netflix-dao/src/main/java/com/cyksj/model/dto/WxMpTemplateMessage.java

@@ -1,11 +1,12 @@
 package com.cyksj.model.dto;
 
 import com.cyksj.common.util.Jsons;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.*;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
 
 
 /**
@@ -14,70 +15,105 @@ import java.util.List;
  */
 @Getter
 @Setter
-@NoArgsConstructor
 @AllArgsConstructor
-@Builder
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Accessors(chain = true)
 public class WxMpTemplateMessage implements Serializable {
-  private static final long serialVersionUID = 5063374783759519418L;
-
-  /**
-   * 接收者openid.
-   */
-  private String toUser;
-
-  /**
-   * 模板ID.
-   */
-  private String templateId;
-
-  /**
-   * 模板跳转链接.
-   * <pre>
-   * url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。
-   * 开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
-   * </pre>
-   */
-  private String url;
-
-  /**
-   * 跳小程序所需数据,不需跳小程序可不用传该数据.
-   *
-   * @see #url
-   */
-  private MiniProgram miniProgram;
-
-  /**
-   * 模板数据.
-   */
-  @Builder.Default
-  private List<WxMpTemplateData> data = new ArrayList<>();
-
-  public WxMpTemplateMessage addData(WxMpTemplateData datum) {
-    if (this.data == null) {
-      this.data = new ArrayList<>();
-    }
-    this.data.add(datum);
-    return this;
-  }
-
-  public String toJson() throws Exception {
-    return Jsons.toJson(this);
-  }
-
-  @Data
-  @NoArgsConstructor
-  @AllArgsConstructor
-  public static class MiniProgram implements Serializable {
-    private static final long serialVersionUID = -7945254706501974849L;
-
-    private String appid;
-    private String pagePath;
-
-    /**
-     * 是否使用path,否则使用pagepath.
-     * 加入此字段是基于微信官方接口变化多端的考虑
-     */
-    private boolean usePath = false;
-  }
+	private static final long serialVersionUID = 5063374783759519418L;
+
+	public WxMpTemplateMessage() {
+		this.data = new TemplateData();
+	}
+
+	/**
+	 * 接收者openid.
+	 */
+	@JsonProperty("touser")
+	private String toUser;
+
+	/**
+	 * 模板ID.
+	 */
+	@JsonProperty("template_id")
+	private String templateId;
+
+	/**
+	 * 模板跳转链接.
+	 * <pre>
+	 * url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。
+	 * 开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
+	 * </pre>
+	 */
+	private String url;
+
+	/**
+	 * 跳小程序所需数据,不需跳小程序可不用传该数据.
+	 *
+	 * @see #url
+	 */
+	@JsonProperty("miniprogram")
+	private MiniProgram miniProgram;
+
+	/**
+	 * 模板数据.
+	 */
+	private TemplateData data;
+
+	@Getter
+	@Setter
+	public static class TemplateData {
+		/**
+		 * 标题
+		 */
+		private WxMpTemplateData first;
+
+		/**
+		 * 关键词1
+		 */
+		private WxMpTemplateData keyword1;
+		/**
+		 * 2
+		 */
+		private WxMpTemplateData keyword2;
+		/**
+		 * 关键词3
+		 */
+		private WxMpTemplateData keyword3;
+		/**
+		 * 关键词4
+		 */
+		private WxMpTemplateData keyword4;
+		/**
+		 * 关键词WxMpTemplateData
+		 */
+		private WxMpTemplateData keyword5;
+		/**
+		 * remark
+		 */
+		private WxMpTemplateData remark;
+	}
+
+	public String toJson() throws Exception {
+		return Jsons.toJson(this);
+	}
+
+	@Data
+	@NoArgsConstructor
+	@AllArgsConstructor
+	@JsonInclude(JsonInclude.Include.NON_NULL)
+	public static class MiniProgram implements Serializable {
+		private static final long serialVersionUID = -7945254706501974849L;
+
+		private String appid;
+
+		@JsonProperty("pagepath")
+		private String pagePath;
+
+		/**
+		 * 是否使用path,否则使用pagepath.
+		 * 加入此字段是基于微信官方接口变化多端的考虑
+		 */
+		private boolean usePath = false;
+	}
 
 }

+ 12 - 13
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -96,22 +96,21 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             }
             openId = u.getOpenId();
         }
-        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
-                .toUser(openId)
-                .templateId(templateEnum.getTemplateId())
+        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                .setToUser(openId)
+                .setTemplateId(templateEnum.getTemplateId())
                 //TODO
-                .url(" ")
-                .build();
+                .setUrl(" ");
         GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
         OrderDonTransport transport = transportMapper.selectOne(Wrappers.lambdaQuery(OrderDonTransport.class).eq(OrderDonTransport::getOrderId, reqSetLogisticsPost.getOrderId()).last("limit 1"));
-        templateMessage.addData(new WxMpTemplateData("first", "订单发货通知"))
-                .addData(new WxMpTemplateData("keyword1", orderDon.getOrderNo()))
-                .addData(new WxMpTemplateData("keyword2", goodsDon.getTitle()))
-                .addData(new WxMpTemplateData("keyword3", reqSetLogisticsPost.getCodeCn()))
-                .addData(new WxMpTemplateData("keyword4", reqSetLogisticsPost.getTrackingNumber()))
-                .addData(new WxMpTemplateData("keyword5", String.format("%s%s%s%s", transport.getProvince(), transport.getCity(), transport.getDistrict(), transport.getAddress())))
-                .addData(new WxMpTemplateData("remark", "可复制运单编号查询物流信息"));
-
+        WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+        data.setFirst(new WxMpTemplateData("订单发货通知"));
+        data.setKeyword1(new WxMpTemplateData(orderDon.getOrderNo()));
+        data.setKeyword2(new WxMpTemplateData(goodsDon.getTitle()));
+        data.setKeyword3(new WxMpTemplateData(reqSetLogisticsPost.getCodeCn()));
+        data.setKeyword4(new WxMpTemplateData(reqSetLogisticsPost.getTrackingNumber()));
+        data.setKeyword5(new WxMpTemplateData(String.format("%s%s%s%s", transport.getProvince(), transport.getCity(), transport.getDistrict(), transport.getAddress())));
+        data.setRemark(new WxMpTemplateData("可复制运单编号查询物流信息"));
         weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
     }
 }

+ 25 - 27
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -318,24 +318,23 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
     private void newOderSendMsgByType(OrderDon order, GoodsDon goodsDon, GoodsDonSku sku, User user, String toPeople) throws Exception {
         TemplateEnum templateEnum = null;
         if (EnvCommonService.active.equals(envCommonService.getEnv())) {
-            templateEnum = TemplateEnum.ORDER_TRANSPORT_ENV_TEMPLATE;
+            templateEnum = TemplateEnum.NEW_ORDER_ENV_TEMPLATE;
         }else {
-            templateEnum = TemplateEnum.ORDER_TRANSPORT_PRD_TEMPLATE;
+            templateEnum = TemplateEnum.NEW_ORDER_PRD_TEMPLATE;
         }
-        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
-                .toUser(toPeople)
-                .templateId(templateEnum.getTemplateId())
+        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                .setToUser(toPeople)
+                .setTemplateId(templateEnum.getTemplateId())
                 //TODO
-                .url(" ")
-                .build();
-        templateMessage.addData(new WxMpTemplateData("first", "新订单通知!"))
-                .addData(new WxMpTemplateData("keyword1", order.getOrderNo()))
-                .addData(new WxMpTemplateData("keyword2", String.format("%s,%s", goodsDon.getTitle(), sku.getSpecVal())))
-                .addData(new WxMpTemplateData("keyword3", user.getNickname()))
-                .addData(new WxMpTemplateData("keyword4", order.getMoney().divide(BigDecimal.valueOf(100)).toString()))
-                .addData(new WxMpTemplateData("keyword5", DateUtil.format(order.getCreatedTime(),"yyyy-MM-dd")))
-                .addData(new WxMpTemplateData("remark", "点击查看详情"));
-
+                .setUrl(" ");
+        WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+        data.setFirst(new WxMpTemplateData("新订单通知!"));
+        data.setKeyword1(new WxMpTemplateData(order.getOrderNo()));
+        data.setKeyword2(new WxMpTemplateData(String.format("%s,%s", goodsDon.getTitle(), sku.getSpecVal())));
+        data.setKeyword3(new WxMpTemplateData(user.getNickname()));
+        data.setKeyword4(new WxMpTemplateData(order.getMoney().divide(BigDecimal.valueOf(100)).toString()));
+        data.setKeyword5(new WxMpTemplateData(DateUtil.format(order.getCreatedTime(), "yyyy-MM-dd")));
+        data.setRemark(new WxMpTemplateData("点击查看详情"));
         weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
     }
 
@@ -385,21 +384,20 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
             templateEnum = TemplateEnum.EMPTY_PRD_TEMPLATE;
         }
         User u = userMapper.selectById(orderDon.getUserId());
-        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
-                .toUser(toPeople)
-                .templateId(templateEnum.getTemplateId())
+        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                .setToUser(toPeople)
+                .setTemplateId(templateEnum.getTemplateId())
                 //TODO
-                .url(" ")
-                .build();
+                .setUrl(" ");
         GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
         GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
-        templateMessage.addData(new WxMpTemplateData("first", "空车位通知!"))
-                .addData(new WxMpTemplateData("keyword1", orderDon.getOrderNo()))
-                .addData(new WxMpTemplateData("keyword2", String.format("%s,%s", goodsDon.getTitle(), goodsDonSku.getSpecVal())))
-                .addData(new WxMpTemplateData("keyword3", u == null ? " " : u.getNickname()))
-                .addData(new WxMpTemplateData("keyword4", DateUtil.format(orderDon.getCreatedTime(), "yyyy-MM-dd")))
-                .addData(new WxMpTemplateData("remark", "请尽快关联账号信息"));
-
+        WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+        data.setFirst(new WxMpTemplateData("空车位通知!"));
+        data.setKeyword1(new WxMpTemplateData(orderDon.getOrderNo()));
+        data.setKeyword2(new WxMpTemplateData(String.format("%s,%s", goodsDon.getTitle(), goodsDonSku.getSpecVal())));
+        data.setKeyword3(new WxMpTemplateData((u == null ? " " : u.getNickname())));
+        data.setKeyword4(new WxMpTemplateData(DateUtil.format(orderDon.getCreatedTime(), "yyyy-MM-dd")));
+        data.setRemark(new WxMpTemplateData("请尽快关联账号信息"));
         weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
     }
 

+ 22 - 24
netflix-service/src/main/java/com/cyksj/task/Scheduler.java

@@ -58,11 +58,10 @@ public class Scheduler {
         List<GroupsRelation> groupsRelations = groupsRelationMapper.selectList(Wrappers.lambdaQuery(GroupsRelation.class).le(GroupsRelation::getExpiryTime, time));
         for (GroupsRelation relation : groupsRelations) {
             User user = userMapper.selectById(relation.getUserId());
-            WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
-                    .toUser(user.getOpenId())
-                    .templateId(EXPIRY_TEMPLATE)
-                    .url(" ")
-                    .build();
+            WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                    .setToUser(user.getOpenId())
+                    .setTemplateId(EXPIRY_TEMPLATE)
+                    .setUrl(" ");
 
             /**
              * 您的账号即将到期
@@ -75,30 +74,29 @@ public class Scheduler {
             GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
             GoodsDonSku donSku = skuMapper.selectById(groupsTrips.getSkuId());
             GoodsDon goodsDon = donMapper.selectById(donSku.getGoodsId());
-            templateMessage.addData(new WxMpTemplateData("first","您的账号即将到期"))
-                    .addData(new WxMpTemplateData("keyword1",goodsDon.getTitle()))
-                    .addData(new WxMpTemplateData("keyword2",goodsDon.getTitle()))
-                    .addData(new WxMpTemplateData("keyword3",DateUtil.format(relation.getExpiryTime(),"yyyy-MM-dd")))
-                    .addData(new WxMpTemplateData("keyword4","账号即将到期"))
-                    .addData(new WxMpTemplateData("remark", "请尽快续费,以免影响使用"));
-            
+            WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+            data.setFirst(new WxMpTemplateData("您的账号即将到期"));
+            data.setKeyword1(new WxMpTemplateData(goodsDon.getTitle()));
+            data.setKeyword2(new WxMpTemplateData(goodsDon.getTitle()));
+            data.setKeyword3(new WxMpTemplateData(DateUtil.format(relation.getExpiryTime(), "yyyy-MM-dd")));
+            data.setKeyword4(new WxMpTemplateData("账号即将到期"));
+            data.setRemark(new WxMpTemplateData("请尽快续费,以免影响使用"));
             weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
 
             List<Account> accounts = accountMapper.selectList(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, time));
             if(!accounts.isEmpty()){
-                WxMpTemplateMessage manageMessage = WxMpTemplateMessage.builder()
+                WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
                         //TODO 管理员账号openId
-                        .toUser("")
-                        .templateId(EXPIRY_TEMPLATE)
-                        .url(" ")
-                        .build();
-                manageMessage.addData(new WxMpTemplateData("first","您有" + accounts.size() + "个主账号即将到期"))
-                        .addData(new WxMpTemplateData("keyword1","车队主账号"))
-                        .addData(new WxMpTemplateData("keyword2","车队账号"))
-                        .addData(new WxMpTemplateData("keyword3","5天后"))
-                        .addData(new WxMpTemplateData("keyword4","账号即将到期"))
-                        .addData(new WxMpTemplateData("remark", "请尽快登录后台-在账号管理中查看"));
-
+                        .setToUser("")
+                        .setTemplateId(EXPIRY_TEMPLATE)
+                        .setUrl(" ");
+                WxMpTemplateMessage.TemplateData data2 = templateMessage.getData();
+                data2.setFirst(new WxMpTemplateData("您有" + accounts.size() + "个主账号即将到期"));
+                data2.setKeyword1(new WxMpTemplateData("车队主账号"));
+                data2.setKeyword2(new WxMpTemplateData("车队主账号"));
+                data2.setKeyword3(new WxMpTemplateData("5天后"));
+                data2.setKeyword4(new WxMpTemplateData("账号即将到期"));
+                data2.setRemark(new WxMpTemplateData("请尽快登录后台-在账号管理中查看"));
                 weChatService.sendTemplateMessage(weChatService.getAccessToken(),Jsons.toJson(manageMessage));
             }
         }

+ 11 - 14
netflix-web/src/main/java/com/cyksj/web/controller/manage/AdminController.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.cyksj.common.constant.WeChatTemplateConst;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Codec;
-import com.cyksj.common.util.IoKit;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
@@ -110,20 +109,18 @@ public class AdminController {
 
     @GetMapping("/send/template")
     public Result<String> sendTemplate(String title, String channel) throws Exception {
-        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
+        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
                 //TODO 管理员账号openId
-                .toUser("")
-                .templateId(WeChatTemplateConst.VDIEO_NOTIFY)
-                .url(" ")
-                .build();
-
-        templateMessage.addData(new WxMpTemplateData("first","youtube频道有更新"))
-                .addData(new WxMpTemplateData("keyword1",title))
-                .addData(new WxMpTemplateData("keyword2",channel))
-                .addData(new WxMpTemplateData("keyword3", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")))
-                .addData(new WxMpTemplateData("keyword4","默认"))
-                .addData(new WxMpTemplateData("remark", "您订阅的频道有新内容发布"));
-
+                .setToUser(" ")
+                .setTemplateId(WeChatTemplateConst.VDIEO_NOTIFY)
+                .setUrl(" ");
+        WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+        data.setFirst(new WxMpTemplateData("youtube频道有更新"));
+        data.setKeyword1(new WxMpTemplateData(title));
+        data.setKeyword2(new WxMpTemplateData(channel));
+        data.setKeyword3(new WxMpTemplateData(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+        data.setKeyword4(new WxMpTemplateData("默认"));
+        data.setRemark(new WxMpTemplateData("您订阅的频道有新内容发布"));
         weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }