Browse Source

fix 多公众号模板

zoujiajian 3 years ago
parent
commit
828254fe2b

+ 15 - 13
netflix-common/src/main/java/com/cyksj/common/constant/TemplateEnum.java

@@ -12,20 +12,22 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public enum TemplateEnum {
-	ORDER_TRANSPORT_ENV_TEMPLATE("发货通知测试环境模板", "eQ8IXwudD5yJ6HPgyqTq9O9IZBb5Qvd1_BjoztmsbvA", " "),
-	ORDER_TRANSPORT_PRD_TEMPLATE("发货通知正式环境模板", "PEypYNXir9x9mzse31MP-8rjOXQ7_p16UTZgM8yzjHo", " "),
-	NEW_ORDER_ENV_TEMPLATE("新订单通知正式测试模板", "ArZr9oCJYelqCfn0pU7RQqRbRIWuyRNaU7N_Oo6p2vM", " "),
-	NEW_ORDER_PRD_TEMPLATE("新订单通知正式环境模板", "T88yYYsfhBIKALWGmGTY2ZJGWHx91pcAtinoRGZ0krw", " "),
-	EMPTY_ENV_TEMPLATE("空车位通知测试环境模板", "ArZr9oCJYelqCfn0pU7RQqRbRIWuyRNaU7N_Oo6p2vM", " "),
-	EMPTY_PRD_TEMPLATE("正式环境空车位通知模板", "T88yYYsfhBIKALWGmGTY2ZJGWHx91pcAtinoRGZ0krw", " "),
-	SPOTIFY_ENV_TEMPLATE("Spotify注册测试环境模板", "gsGFRefPlGKfvNoqB5Vd43ZOsmCsZNsH4UDWefWG0sg", " "),
-	SPOTIFY_PRD_TEMPLATE("Spotify注册正式环境模板", "VPQ3cYd_OMYpyHzyaa1X5oOeWh9ZcgwZlrBw_cGqEIA", " "),
-	PLAT_ACCOUNT_UPDATE_PRD_TEMPLATE("账号修改密码正式环境通知模板", "imXjz3p0fb08Xq_hrVg0puxTKWaNdTmAYl7T1chQ8S0", " "),
-	SPOTIFY_ACCOUNT_EXPIRED_PRD_TEMPLATE("Spotify账号到期正式环境模板", "pNGASpViLNO9QsVm6nkg7P6XwwzULgdBCgytWlgsrYo", " "),
-	SPOTIFY_ACCOUNT_UN_LIMIT_SUCCESS_PRD_TEMPLATE("Spotify账号解除限制成功正式环境模板", "-K78ZoC2kBBHUVB_bWmLtkV_z98-16G7wIPqryXyTGo", " "),
+	ORDER_TRANSPORT_TEMPLATE("发货通知模板"),
+
+	NEW_ORDER_TEMPLATE("新订单通知模板"),
+
+	EMPTY_TEMPLATE("空车位通知模板"),
+
+	SPOTIFY_TEMPLATE("Spotify注册通知模板"),
+
+	PLAT_ACCOUNT_UPDATE_TEMPLATE("账号修改密码通知模板"),
+
+	SPOTIFY_ACCOUNT_EXPIRED_PRD_TEMPLATE("Spotify账号到期通知模板"),
+
+	SPOTIFY_ACCOUNT_UN_LIMIT_SUCCESS_TEMPLATE("Spotify账号解除限制成功模板"),
+
+	EXPIRY_TEMPLATE("用户平台账号过期通知模板"),
 
 	;
 	private String desc;
-	private String templateId;
-	private String url;
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/gzh/GzhMsgTemplateRelationMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.gzh;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.GzhMsgTemplateRelation;
+
+/*
+ *项目名: netflix
+ *文件名: GzhMsgTemplateRelationMapper
+ *创建者: JavaZou
+ *创建时间:2023/1/16 12:27
+ */
+public interface GzhMsgTemplateRelationMapper extends BaseMapper<GzhMsgTemplateRelation> {
+}

+ 27 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GzhMsgTemplateRelation.java

@@ -0,0 +1,27 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: GzhMsgTemplateRelation
+ *创建者: JavaZou
+ *创建时间:2023/1/16 12:26
+ */
+@Getter
+@Setter
+public class GzhMsgTemplateRelation extends BaseEntity{
+	private Long wxAppId;
+
+	private String templateId;
+
+	private String url;
+
+	private String remark;
+
+	/**
+	 * 测试/线上(dev\prd)
+	 */
+	private String type;
+}

+ 38 - 0
netflix-dao/src/main/java/com/cyksj/model/views/WxAppTemplateView.java

@@ -0,0 +1,38 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: WxAppTemplateView
+ *创建者: JavaZou
+ *创建时间:2023/1/16 13:39
+ */
+@Getter
+@Setter
+@SearchBean(tables = "gzh_msg_template_relation gtr left join wx_app wa on wa.id = gtr.wx_app_id")
+public class WxAppTemplateView {
+	@DbField("gtr.id")
+	private Long id;
+
+	@DbField("gtr.wx_app_id")
+	private Long wxAppId;
+
+	@DbField("gtr.template_id")
+	private String templateId;
+
+	@DbField("gtr.type")
+	private String type;
+
+	@DbField("gtr.remark")
+	private String remark;
+
+	/**
+	 * 公众号appid
+	 */
+	@DbField("wa.appid")
+	private String appId;
+}

+ 2 - 0
netflix-service/src/main/java/com/cyksj/common/EnvCommonService.java

@@ -18,6 +18,8 @@ public class EnvCommonService {
 
 	public static final String active = "dev";
 
+	public static final String active_prd = "prd";
+
 	@Value(value = "${spring.profiles.active}")
 	private String env;
 

+ 21 - 14
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -17,7 +17,9 @@ import com.cyksj.model.entity.User;
 import com.cyksj.model.excel.ExcelAccountData;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.views.ExpiredAccountDataView;
+import com.cyksj.model.views.WxAppTemplateView;
 import com.cyksj.service.mange.CmsAccountService;
+import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.wechat.WeChatService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.param.Operator;
@@ -47,6 +49,8 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 
 	private final UserMapper userMapper;
 
+	private final TemplateCommonService templateCommonService;
+
 	@Override
 	public IPage<ExpiredAccountDataView> getExpiredAccountView(Boolean isCorpWx, String customerService, Integer goodsId, String account, Boolean renewStatus, Boolean handleStatus, String cnAccount, String usAccount, Integer userId, String startTime, String endTime, String now, Long offset, Long limit) {
 		return accountMapper.getExpiredAccountView(isCorpWx, customerService, goodsId, account, renewStatus, handleStatus, cnAccount, usAccount, userId, startTime, endTime, now, new Page<>(offset, limit));
@@ -66,20 +70,23 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 		String url = String.format("%sauth/weChat?url=%syinhe/web/ticket", envCommonService.getHost(), envCommonService.getDomain());
 		log.info("开始发送账号修改密码模板消息,大小:{}", relations.size());
 		for (GroupsRelationView relation : relations) {
-			TemplateEnum templateEnum = TemplateEnum.PLAT_ACCOUNT_UPDATE_PRD_TEMPLATE;
-			User user = userMapper.selectById(relation.getUserId());
-			if (user != null) {
-				WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
-						.setToUser(user.getOpenId())
-						.setTemplateId(templateEnum.getTemplateId())
-						.setUrl(url);
-				WxMpTemplateMessage.TemplateData data = templateMessage.getData();
-				data.setFirst(new WxMpTemplateData(String.format("%s账号密码更改提醒", relation.getTitle())));
-				data.setKeyword1(new WxMpTemplateData(relation.getTripsAccount()));
-				data.setKeyword2(new WxMpTemplateData(DateTime.now().toString("YYYY-MM-mm HH:mm:ss")));
-				data.setRemark(new WxMpTemplateData("您的账号密码已经更新,请到我的车票查看,长期用户请选择拼车/年付。\n" +
-						"如您不是在公众号购买,请在浏览器登录查看我的车票"));
-				weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
+			Long userId = relation.getUserId();
+			WxAppTemplateView wxAppTemplateView = templateCommonService.getWxAppByUserId(userId, TemplateEnum.PLAT_ACCOUNT_UPDATE_TEMPLATE.getDesc());
+			if (wxAppTemplateView != null) {
+				User user = userMapper.selectById(relation.getUserId());
+				if (user != null) {
+					WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+							.setToUser(user.getOpenId())
+							.setTemplateId(wxAppTemplateView.getTemplateId())
+							.setUrl(url);
+					WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+					data.setFirst(new WxMpTemplateData(String.format("%s账号密码更改提醒", relation.getTitle())));
+					data.setKeyword1(new WxMpTemplateData(relation.getTripsAccount()));
+					data.setKeyword2(new WxMpTemplateData(DateTime.now().toString("YYYY-MM-mm HH:mm:ss")));
+					data.setRemark(new WxMpTemplateData("您的账号密码已经更新,请到我的车票查看,长期用户请选择拼车/年付。\n" +
+							"如您不是在公众号购买,请在浏览器登录查看我的车票"));
+					weChatService.sendTemplateMessage(weChatService.getAccessToken(wxAppTemplateView.getAppId()), Jsons.toJson(templateMessage));
+				}
 			}
 		}
 	}

+ 30 - 31
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -9,14 +9,15 @@ import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
-import com.cyksj.mapper.stock.OrderDonStockMapper;
 import com.cyksj.model.dto.WxMpTemplateData;
 import com.cyksj.model.dto.WxMpTemplateMessage;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.excel.ExcelOrderDonInfo;
 import com.cyksj.model.manage.request.ReqSetLogisticsPost;
+import com.cyksj.model.views.WxAppTemplateView;
 import com.cyksj.service.mange.CmsOrderDonService;
 import com.cyksj.service.mange.stock.GoodsDonStockService;
+import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -49,10 +50,10 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final GoodsSkuStockRelateMapper skuStockRelateMapper;
 
-    private final OrderDonStockMapper orderDonStockMapper;
-
     private final GoodsDonStockService goodsDonStockService;
 
+    private final TemplateCommonService templateCommonService;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -108,36 +109,34 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
 
     private void sendTransportMsgNotify(OrderDon orderDon, ReqSetLogisticsPost reqSetLogisticsPost) throws Exception {
-        TemplateEnum templateEnum = null;
-        if (EnvCommonService.active.equals(envCommonService.getEnv())) {
-            templateEnum = TemplateEnum.ORDER_TRANSPORT_ENV_TEMPLATE;
-        }else {
-            templateEnum = TemplateEnum.ORDER_TRANSPORT_PRD_TEMPLATE;
-        }
-        String openId = orderDon.getOpenId();
-        if (openId == null) {
-            User u  = userMapper.selectById(orderDon.getUserId());
-            if (u == null) {
-                throw BusinessRuntimeException.getInstance("用户不存在");
+        Long userId = orderDon.getUserId();
+        WxAppTemplateView wxAppTemplateView = templateCommonService.getWxAppByUserId(userId, TemplateEnum.ORDER_TRANSPORT_TEMPLATE.getDesc());
+        if (wxAppTemplateView != null) {
+            String openId = orderDon.getOpenId();
+            if (openId == null) {
+                User u = userMapper.selectById(orderDon.getUserId());
+                if (u == null) {
+                    throw BusinessRuntimeException.getInstance("用户不存在");
+                }
+                openId = u.getOpenId();
             }
-            openId = u.getOpenId();
+            WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                    .setToUser(openId)
+                    .setTemplateId(wxAppTemplateView.getTemplateId())
+                    //TODO
+                    .setUrl(" ");
+            GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
+            OrderDonTransport transport = transportMapper.selectOne(Wrappers.lambdaQuery(OrderDonTransport.class).eq(OrderDonTransport::getOrderId, reqSetLogisticsPost.getOrderId()).last("limit 1"));
+            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(wxAppTemplateView.getAppId()), Jsons.toJson(templateMessage));
         }
-        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
-                .setToUser(openId)
-                .setTemplateId(templateEnum.getTemplateId())
-                //TODO
-                .setUrl(" ");
-        GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
-        OrderDonTransport transport = transportMapper.selectOne(Wrappers.lambdaQuery(OrderDonTransport.class).eq(OrderDonTransport::getOrderId, reqSetLogisticsPost.getOrderId()).last("limit 1"));
-        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));
     }
 
 }

+ 20 - 12
netflix-service/src/main/java/com/cyksj/service/mange/impl/SpotifySendMsgServiceImpl.java

@@ -10,7 +10,9 @@ import com.cyksj.model.dto.WxMpTemplateData;
 import com.cyksj.model.dto.WxMpTemplateMessage;
 import com.cyksj.model.entity.SpotifyUnLimitRecord;
 import com.cyksj.model.entity.User;
+import com.cyksj.model.views.WxAppTemplateView;
 import com.cyksj.service.mange.SpotifySendMsgService;
+import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -38,6 +40,8 @@ public class SpotifySendMsgServiceImpl implements SpotifySendMsgService {
 
 	private static String spotifyUnLimitSuccessUrl;
 
+	private final TemplateCommonService templateCommonService;
+
 	@PostConstruct
 	public void init() {
 		String host = envCommonService.getHost();
@@ -53,18 +57,22 @@ public class SpotifySendMsgServiceImpl implements SpotifySendMsgService {
 			if (unLimitRecord != null && !unLimitRecord.getIsSend()) {
 				User user = userMapper.selectById(unLimitRecord.getUserId());
 				if (user != null) {
-					WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
-							.setToUser(user.getOpenId())
-							.setTemplateId(TemplateEnum.SPOTIFY_ACCOUNT_UN_LIMIT_SUCCESS_PRD_TEMPLATE.getTemplateId())
-							.setUrl(spotifyUnLimitSuccessUrl);
-					WxMpTemplateMessage.TemplateData data = templateMessage.getData();
-					data.setFirst(new WxMpTemplateData("您的Spotify账号登录限制解除成功"));
-					data.setKeyword1(new WxMpTemplateData(user.getNickname()));
-					data.setKeyword2(new WxMpTemplateData(DateUtil.format(unLimitRecord.getUpdateTime(), "yyyy-MM-dd HH:mm:ss")));
-					data.setRemark(new WxMpTemplateData("建议您购买Spotify年付会员,无需每过14天解除限制,点击了解"));
-					weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
-					unLimitRecord.setIsSend(true);
-					spotifyUnLimitRecordMapper.updateById(unLimitRecord);
+					Long userId = user.getId();
+					WxAppTemplateView wxAppTemplateView = templateCommonService.getWxAppByUserId(userId, TemplateEnum.SPOTIFY_ACCOUNT_UN_LIMIT_SUCCESS_TEMPLATE.getDesc());
+					if (wxAppTemplateView != null) {
+						WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+								.setToUser(user.getOpenId())
+								.setTemplateId(wxAppTemplateView.getTemplateId())
+								.setUrl(spotifyUnLimitSuccessUrl);
+						WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+						data.setFirst(new WxMpTemplateData("您的Spotify账号登录限制解除成功"));
+						data.setKeyword1(new WxMpTemplateData(user.getNickname()));
+						data.setKeyword2(new WxMpTemplateData(DateUtil.format(unLimitRecord.getUpdateTime(), "yyyy-MM-dd HH:mm:ss")));
+						data.setRemark(new WxMpTemplateData("建议您购买Spotify年付会员,无需每过14天解除限制,点击了解"));
+						weChatService.sendTemplateMessage(weChatService.getAccessToken(wxAppTemplateView.getAppId()), Jsons.toJson(templateMessage));
+						unLimitRecord.setIsSend(true);
+						spotifyUnLimitRecordMapper.updateById(unLimitRecord);
+					}
 				}
 			}
 		}

+ 22 - 23
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -50,6 +50,7 @@ import com.cyksj.model.request.ZfbOrderRefundReq;
 import com.cyksj.model.response.AliPayRefundRep;
 import com.cyksj.model.views.CouponNewUserView;
 import com.cyksj.model.views.CouponUserView;
+import com.cyksj.model.views.WxAppTemplateView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.coupon.CouponFontService;
 import com.cyksj.service.exchange.ExchangeCodeService;
@@ -535,29 +536,27 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 	}
 
 	private void emptySendMsgNotify(OrderDon orderDon, String toPeople) throws Exception {
-		TemplateEnum templateEnum = null;
-		if (EnvCommonService.active.equals(envCommonService.getEnv())) {
-			return;
-		} else {
-			templateEnum = TemplateEnum.EMPTY_PRD_TEMPLATE;
-		}
-		User u = userMapper.selectById(orderDon.getUserId());
-		WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
-				.setToUser(toPeople)
-				.setTemplateId(templateEnum.getTemplateId())
-				//TODO
-				.setUrl(" ");
-		GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
-		GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
-		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(orderDon.getMoney().divide(BigDecimal.valueOf(100)).toString()));
-		data.setKeyword5(new WxMpTemplateData(DateUtil.format(orderDon.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
-		data.setRemark(new WxMpTemplateData("请尽快关联账号信息"));
-		weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
+		Long userId = orderDon.getUserId();
+		WxAppTemplateView wxAppTemplateView = templateCommonService.getWxAppByUserId(userId, TemplateEnum.EMPTY_TEMPLATE.getDesc());
+		if (wxAppTemplateView != null) {
+			User u = userMapper.selectById(orderDon.getUserId());
+			WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+					.setToUser(toPeople)
+					.setTemplateId(wxAppTemplateView.getTemplateId())
+					//TODO
+					.setUrl(" ");
+			GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
+			GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
+			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(orderDon.getMoney().divide(BigDecimal.valueOf(100)).toString()));
+			data.setKeyword5(new WxMpTemplateData(DateUtil.format(orderDon.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
+			data.setRemark(new WxMpTemplateData("请尽快关联账号信息"));
+			weChatService.sendTemplateMessage(weChatService.getAccessToken(wxAppTemplateView.getAppId()), Jsons.toJson(templateMessage));
+		}
 	}
 
 	@Override

+ 16 - 14
netflix-service/src/main/java/com/cyksj/service/register/impl/SpotifyServiceImpl.java

@@ -26,10 +26,12 @@ import com.cyksj.model.entity.RegisterOrderDon;
 import com.cyksj.model.entity.SysConfig;
 import com.cyksj.model.request.SpotifyRegisterReq;
 import com.cyksj.model.response.ProxyInfo;
+import com.cyksj.model.views.WxAppTemplateView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.register.SpotifyService;
 import com.cyksj.service.sys.SysConfigService;
+import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -70,6 +72,8 @@ public class SpotifyServiceImpl implements SpotifyService {
 
     private final SysConfigService sysConfigService;
 
+    private final TemplateCommonService templateCommonService;
+
     private static final List<String> User_Agent_LIST =  List.of(
             "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
             "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
@@ -311,21 +315,19 @@ public class SpotifyServiceImpl implements SpotifyService {
     }
 
     private void spotifyTemplateMsg(RegisterOrderDon registerOrderDon, String url, Boolean isSuccess) throws Exception {
-        TemplateEnum templateEnum = null;
-        if (EnvCommonService.active.equals(envCommonService.getEnv())) {
-            templateEnum = TemplateEnum.SPOTIFY_ENV_TEMPLATE;
-        }else {
-            templateEnum = TemplateEnum.SPOTIFY_PRD_TEMPLATE;
+        Long userId = registerOrderDon.getUserId();
+        WxAppTemplateView wxAppTemplateView = templateCommonService.getWxAppByUserId(userId, TemplateEnum.SPOTIFY_TEMPLATE.getDesc());
+        if (wxAppTemplateView != null) {
+            WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                    .setToUser(registerOrderDon.getOpenId())
+                    .setTemplateId(wxAppTemplateView.getTemplateId())
+                    .setUrl(url);
+            WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+            data.setFirst(new WxMpTemplateData(isSuccess ? "Spotify账号已注册成功" : "Spotify账号注册失败,请修改后重新提交"));
+            data.setKeyword1(new WxMpTemplateData(registerOrderDon.getPhone()));
+            data.setKeyword2(new WxMpTemplateData(DateUtil.format(registerOrderDon.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
+            weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
         }
-        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
-                .setToUser(registerOrderDon.getOpenId())
-                .setTemplateId(templateEnum.getTemplateId())
-                .setUrl(url);
-        WxMpTemplateMessage.TemplateData data = templateMessage.getData();
-        data.setFirst(new WxMpTemplateData(isSuccess ? "Spotify账号已注册成功" : "Spotify账号注册失败,请修改后重新提交"));
-        data.setKeyword1(new WxMpTemplateData(registerOrderDon.getPhone()));
-        data.setKeyword2(new WxMpTemplateData(DateUtil.format(registerOrderDon.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
-        weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
     }
 
 }

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/template/TemplateCommonService.java

@@ -4,6 +4,7 @@ import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.entity.User;
+import com.cyksj.model.views.WxAppTemplateView;
 
 /*
  *项目名: netflix
@@ -16,4 +17,9 @@ public interface TemplateCommonService {
 	 * 发送新订单模板消息
 	 */
 	void newOderSendMsgByType(OrderDon order, GoodsDon goodsDon, GoodsDonSku sku, User user, String toPeople) throws Exception;
+
+	/**
+	 * 获取发送模板消息的公众号
+	 */
+	WxAppTemplateView getWxAppByUserId(Long userId, String templateMark);
 }

+ 46 - 22
netflix-service/src/main/java/com/cyksj/service/template/impl/TemplateCommonServiceImpl.java

@@ -1,17 +1,19 @@
 package com.cyksj.service.template.impl;
 
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.EnvCommonService;
 import com.cyksj.common.constant.TemplateEnum;
 import com.cyksj.common.util.Jsons;
+import com.cyksj.mapper.gzh.UserGzhRelationMapper;
 import com.cyksj.model.dto.WxMpTemplateData;
 import com.cyksj.model.dto.WxMpTemplateMessage;
-import com.cyksj.model.entity.GoodsDon;
-import com.cyksj.model.entity.GoodsDonSku;
-import com.cyksj.model.entity.OrderDon;
-import com.cyksj.model.entity.User;
+import com.cyksj.model.entity.*;
+import com.cyksj.model.views.WxAppTemplateView;
 import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.wechat.WeChatService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -32,26 +34,48 @@ public class TemplateCommonServiceImpl implements TemplateCommonService {
 
 	private final WeChatService weChatService;
 
+	private final BeanSearcher beanSearcher;
+
+	private final UserGzhRelationMapper userGzhRelationMapper;
+
 	public void newOderSendMsgByType(OrderDon order, GoodsDon goodsDon, GoodsDonSku sku, User user, String toPeople) throws Exception {
-		TemplateEnum templateEnum = null;
+		Long userId = order.getUserId();
+		WxAppTemplateView wxAppTemplateView = this.getWxAppByUserId(userId, TemplateEnum.NEW_ORDER_TEMPLATE.getDesc());
+		if (wxAppTemplateView != null) {
+			WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+					.setToUser(toPeople)
+					.setTemplateId(wxAppTemplateView.getTemplateId())
+					//TODO
+					.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 == null ? "推广未登录用户" : user.getNickname()));
+			data.setKeyword4(new WxMpTemplateData(order.getMoney().divide(BigDecimal.valueOf(100)).toString()));
+			data.setKeyword5(new WxMpTemplateData(DateUtil.format(order.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
+			data.setRemark(new WxMpTemplateData("点击查看详情"));
+			weChatService.sendTemplateMessage(weChatService.getAccessToken(wxAppTemplateView.getAppId()), Jsons.toJson(templateMessage));
+		}
+	}
+
+	@Override
+	public WxAppTemplateView getWxAppByUserId(Long userId, String templateMark) {
+		UserGzhRelation userGzhRelation = userGzhRelationMapper.selectOne(Wrappers.lambdaQuery(UserGzhRelation.class)
+				.eq(UserGzhRelation::getUserId, userId).last("limit 1"));
+		if (userGzhRelation == null) {
+			return null;
+		}
+		String type;
 		if (EnvCommonService.active.equals(envCommonService.getEnv())) {
-			return;
-		}else {
-			templateEnum = TemplateEnum.NEW_ORDER_PRD_TEMPLATE;
+			type = EnvCommonService.active;
+		} else {
+			type = EnvCommonService.active_prd;
 		}
-		WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
-				.setToUser(toPeople)
-				.setTemplateId(templateEnum.getTemplateId())
-				//TODO
-				.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 == null ? "推广未登录用户" : user.getNickname()));
-		data.setKeyword4(new WxMpTemplateData(order.getMoney().divide(BigDecimal.valueOf(100)).toString()));
-		data.setKeyword5(new WxMpTemplateData(DateUtil.format(order.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
-		data.setRemark(new WxMpTemplateData("点击查看详情"));
-		weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
+		return beanSearcher.searchFirst(WxAppTemplateView.class, MapUtils.builder()
+				.field(WxAppTemplateView::getWxAppId, userGzhRelation.getWxAppId())
+				.field(WxAppTemplateView::getRemark, templateMark)
+				.field(WxAppTemplateView::getType, type)
+				.build());
 	}
 }

+ 52 - 45
netflix-service/src/main/java/com/cyksj/task/Scheduler.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.TemplateEnum;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.RedisKey;
@@ -12,10 +13,12 @@ import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
 import com.cyksj.model.dto.WxMpTemplateData;
 import com.cyksj.model.dto.WxMpTemplateMessage;
 import com.cyksj.model.entity.*;
+import com.cyksj.model.views.WxAppTemplateView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.order.OrderDonService;
 import com.cyksj.service.register.RegisterOrderDonService;
 import com.cyksj.service.register.SpotifyService;
+import com.cyksj.service.template.TemplateCommonService;
 import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -27,8 +30,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.cyksj.common.constant.WeChatTemplateConst.EXPIRY_TEMPLATE;
-
 @Component
 @Slf4j
 @RequiredArgsConstructor
@@ -68,6 +69,8 @@ public class Scheduler {
 
         private final RealGoodsInterestUserMapper realGoodsInterestUserMapper;
 
+        private final TemplateCommonService templateCommonService;
+
 
     /**
      * 每5分钟清理过期账号
@@ -90,49 +93,53 @@ 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 = new WxMpTemplateMessage()
-                    .setToUser(user.getOpenId())
-                    .setTemplateId(EXPIRY_TEMPLATE)
-                    .setUrl(" ");
-
-            /**
-             * 您的账号即将到期
-             * 账号名称:Netflix账号
-             * 平台:Netflix
-             * 失效日期:5天后
-             * 异常原因:账号即将到期
-             * 请尽快续费,以免影响使用
-             */
-            GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
-            GoodsDonSku donSku = skuMapper.selectById(groupsTrips.getSkuId());
-            GoodsDon goodsDon = donMapper.selectById(donSku.getGoodsId());
-            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 HH:mm:ss")));
-            data.setKeyword4(new WxMpTemplateData("账号即将到期"));
-            data.setRemark(new WxMpTemplateData("请尽快续费,以免影响使用"));
-            log.info("发送账号即将到期消息至用户:{}", user.getId());
-            weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
-
-            List<Account> accounts = accountMapper.selectList(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, time));
-            List<CustomerService> customerServices = customerServiceMapper.selectList(null);
-            if(!accounts.isEmpty()){
-                for (CustomerService customerService : customerServices) {
-                    WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
-                            .setToUser(customerService.getOpenId())
-                            .setTemplateId(EXPIRY_TEMPLATE)
-                            .setUrl(" ");
-                    WxMpTemplateMessage.TemplateData data2 = manageMessage.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("请尽快登录后台-在账号管理中查看"));
-                    log.info("发送账号即将到期消息至客服:{}", customerService.getNickName());
-                    weChatService.sendTemplateMessage(weChatService.getAccessToken(),Jsons.toJson(manageMessage));
+            Long userId = user.getId();
+            WxAppTemplateView wxAppTemplateView = templateCommonService.getWxAppByUserId(userId, TemplateEnum.EXPIRY_TEMPLATE.getDesc());
+            if (wxAppTemplateView != null) {
+                WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                        .setToUser(user.getOpenId())
+                        .setTemplateId(wxAppTemplateView.getTemplateId())
+                        .setUrl(" ");
+
+                /**
+                 * 您的账号即将到期
+                 * 账号名称:Netflix账号
+                 * 平台:Netflix
+                 * 失效日期:5天后
+                 * 异常原因:账号即将到期
+                 * 请尽快续费,以免影响使用
+                 */
+                GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+                GoodsDonSku donSku = skuMapper.selectById(groupsTrips.getSkuId());
+                GoodsDon goodsDon = donMapper.selectById(donSku.getGoodsId());
+                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 HH:mm:ss")));
+                data.setKeyword4(new WxMpTemplateData("账号即将到期"));
+                data.setRemark(new WxMpTemplateData("请尽快续费,以免影响使用"));
+                log.info("发送账号即将到期消息至用户:{}", user.getId());
+                weChatService.sendTemplateMessage(weChatService.getAccessToken(wxAppTemplateView.getAppId()), Jsons.toJson(templateMessage));
+
+                List<Account> accounts = accountMapper.selectList(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, time));
+                List<CustomerService> customerServices = customerServiceMapper.selectList(null);
+                if(!accounts.isEmpty()){
+                    for (CustomerService customerService : customerServices) {
+                        WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
+                                .setToUser(customerService.getOpenId())
+                                .setTemplateId(wxAppTemplateView.getTemplateId())
+                                .setUrl(" ");
+                        WxMpTemplateMessage.TemplateData data2 = manageMessage.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("请尽快登录后台-在账号管理中查看"));
+                        log.info("发送账号即将到期消息至客服:{}", customerService.getNickName());
+                        weChatService.sendTemplateMessage(weChatService.getAccessToken(wxAppTemplateView.getAppId()),Jsons.toJson(manageMessage));
+                    }
                 }
             }
         }

+ 2 - 1
netflix-web/src/main/java/com/cyksj/config/SaTokenConfigure.java

@@ -26,7 +26,8 @@ public class SaTokenConfigure implements WebMvcConfigurer {
 						"/manage/coupon/corp/send",
 						"/manage/coupon",
 						"/manage/register/wx/refund/notify",
-						"/manage/register/unLimit"));
+						"/manage/register/unLimit",
+						"/manage/gzh/**"));
 	}
 }
 

+ 15 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/gzh/GzhController.java

@@ -4,7 +4,11 @@ import cn.hutool.core.util.StrUtil;
 import com.cyksj.common.util.IoKit;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.common.util.Xmls;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.gzh.GzhMsgTemplateRelationMapper;
 import com.cyksj.model.dto.MsgEvent;
+import com.cyksj.model.entity.GzhMsgTemplateRelation;
 import com.cyksj.service.gzh.GzhService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -29,6 +33,8 @@ public class GzhController {
 
 	private final GzhService gzhService;
 
+	private final GzhMsgTemplateRelationMapper gzhMsgTemplateRelationMapper;
+
 	@RequestMapping(value = "/msg/notify", method = {RequestMethod.GET, RequestMethod.POST})
 	public String msgNotify(@RequestParam(value = "msg_signature") String msgSignature, String timestamp, String nonce, @RequestParam(value = "echostr", required = false) String echoStr) throws IOException {
 		if (StrUtil.hasEmpty(msgSignature, timestamp, nonce)) {
@@ -65,4 +71,13 @@ public class GzhController {
 
 		return gzhService.gzhMsg(msgEvent);
 	}
+
+	/**
+	 * 插入公众号模板
+	 */
+	@PostMapping("/insert/template")
+	public Result<String> insertTemplate(@RequestBody GzhMsgTemplateRelation gzhMsgTemplateRelation) {
+		gzhMsgTemplateRelationMapper.insert(gzhMsgTemplateRelation);
+		return GatewayResponse.SUCCESS.newBuilder().toResult("操作成功");
+	}
 }