From 30f2f276ca35cae2bde763c58719f05c572f415b Mon Sep 17 00:00:00 2001
From: jyy <935090232@qq.com>
Date: Sat, 09 Jan 2021 16:32:17 +0800
Subject: [PATCH] 模板消息推送完善

---
 zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/MsgDemo3.java                                            |   35 +++
 zq-erp/src/main/resources/templates/views/admin/shop/templateMsg-list.html                                          |    1 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java                             |   20 ++
 zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/TemplateNameConstance.java                               |   15 +
 zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopWxtemplateMsgDao.java                                        |    2 
 zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/templateMsg/AppointmentSuccess.java                           |    2 
 zq-erp/src/main/resources/config/application.properties                                                             |    2 
 zq-erp/src/main/resources/config/test/application.properties                                                        |    9 
 zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java                                                          |    8 
 zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopWxtemplateMsg.java                                          |   89 ++++++++-
 zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java                             |  120 +++++++++++++
 zq-erp/src/main/java/com/matrix/core/tools/rr/GlueFactory.java                                                      |   23 ++
 zq-erp/src/main/java/com/matrix/component/rabbitmq/RabiitMqTemplate.java                                            |    1 
 zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/messageBulderDemo/DefaultTemplateMessageBulder.java |   99 +++++++++++
 zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java                                           |   20 ++
 zq-erp/src/main/resources/config/db/increment/20210109.sql                                                          |    5 
 zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/VipCreateTask.java                                            |    2 
 zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/TemplateMessageBulder.java                          |   19 ++
 zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/MQTaskRouting.java                                            |    6 
 zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopWxtemplateMsgDao.xml                                           |   30 ++
 20 files changed, 478 insertions(+), 30 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/component/rabbitmq/RabiitMqTemplate.java b/zq-erp/src/main/java/com/matrix/component/rabbitmq/RabiitMqTemplate.java
index 89fea6d..bf51909 100644
--- a/zq-erp/src/main/java/com/matrix/component/rabbitmq/RabiitMqTemplate.java
+++ b/zq-erp/src/main/java/com/matrix/component/rabbitmq/RabiitMqTemplate.java
@@ -84,6 +84,7 @@
                 if (task != null) {
                     // 消息内容
                     if (StringUtils.isNotBlank(content)) {
+                        LogUtil.info("本次发送消息task.getExchange()="+task.getExchange()+";routingKey="+routingKey+";content="+content);
                         channel.basicPublish(task.getExchange(), routingKey, false, null, content.getBytes());
                     } else {
                         LogUtil.info("本次发送空消息");
diff --git a/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java b/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java
index 6ff44d6..2effc80 100644
--- a/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java
+++ b/zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java
@@ -5,6 +5,7 @@
 import com.matrix.component.rabbitmq.RabiitMqTemplate;
 import com.matrix.component.rabbitmq.RabiitMqTemplateFactory;
 import com.matrix.system.shopXcx.mqTask.*;
+import com.matrix.system.wechart.templateMsg.Task.UniformMsgSentTask;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -48,6 +49,11 @@
         return new TemplateMsgTask();
     }
 
+  @Bean
+  UniformMsgSentTask UniformMsgSentTask(){
+        return new UniformMsgSentTask();
+    }
+
     @Bean
     OrderOutSotoreTask OrderOutSotoreTask(){
         return new OrderOutSotoreTask();
@@ -67,10 +73,10 @@
 
         //注册RabbitMq任务
         taskList.add(new MqTask(MQ_EXCHANGE_A + evn, MQTaskRouting.CREATE_VIP + evn, MQTaskRouting.CREATE_VIP + evn, VipCreateTask()));
-        taskList.add(new MqTask(MQ_EXCHANGE_A + "cf", MQTaskRouting.CREATE_VIP + evn, MQTaskRouting.CREATE_VIP + evn, null));
         taskList.add(new MqTask(MQ_EXCHANGE_A + evn, MQTaskRouting.CREATE_ORDER + evn,MQTaskRouting.CREATE_ORDER + evn,OrderrCreateTask()));
         taskList.add(new MqTask(MQ_EXCHANGE_A + evn, MQTaskRouting.SEND_TEMPLATE_MSG + evn,MQTaskRouting.SEND_TEMPLATE_MSG + evn, TemplateMsgTask()));
         taskList.add(new MqTask(MQ_EXCHANGE_A + evn, MQTaskRouting.ORDER_OUT_SOTORE + evn,MQTaskRouting.ORDER_OUT_SOTORE + evn, OrderOutSotoreTask()));
+        taskList.add(new MqTask(MQ_EXCHANGE_A + evn, MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG + evn,MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG + evn, UniformMsgSentTask()));
 
         rabiitMqTemplate.binding(taskList);
 
diff --git a/zq-erp/src/main/java/com/matrix/core/tools/rr/GlueFactory.java b/zq-erp/src/main/java/com/matrix/core/tools/rr/GlueFactory.java
index 5f0f32f..d46fe06 100644
--- a/zq-erp/src/main/java/com/matrix/core/tools/rr/GlueFactory.java
+++ b/zq-erp/src/main/java/com/matrix/core/tools/rr/GlueFactory.java
@@ -104,4 +104,27 @@
 		throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadNewInstance error, instance is null");
 	}
 
+
+	/**
+	 * 根据字符串获取几个java实例
+	 * @param codeSource
+	 * @return
+	 * @throws Exception
+	 */
+	public Object loadInstance(String codeSource) throws Exception{
+		if (codeSource!=null && codeSource.trim().length()>0) {
+			Class<?> clazz = groovyClassLoader.parseClass(codeSource);
+			if (clazz != null) {
+				Object instance = clazz.newInstance();
+				if (instance!=null) {
+					this.injectService(instance);
+					return  instance;
+				}
+			}
+		}
+		throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadNewInstance error, instance is null");
+	}
+
+
+
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java b/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java
index b971f6b..0c0ac3c 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/constance/AppConstance.java
@@ -589,4 +589,24 @@
     public static final String QSFY = "QSFY";
 
 
+    /**
+     * 小程序APPID
+     */
+    public static final String MINIPROGRAM_APPID = "miniprogramAppid";
+    /**
+     * 小程序Secret
+     */
+    public static final String MINIPROGRAM_SECRET = "miniprogramSecret";
+    /**
+     * 公众号APPID
+     */
+    public static final String GZH_APPID = "gzhAppId";
+
+
+
+
+
+
+
+
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
index 9749835..cfb58f7 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjServicesServiceImpl.java
@@ -1,5 +1,7 @@
 package com.matrix.system.hive.service.imp;
 
+import com.alibaba.fastjson.JSONObject;
+import com.matrix.component.rabbitmq.RabiitMqTemplate;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.PaginationVO;
@@ -16,9 +18,11 @@
 import com.matrix.system.hive.plugin.util.MoneyUtil;
 import com.matrix.system.hive.pojo.MyBeauticianCount;
 import com.matrix.system.hive.service.*;
+import com.matrix.system.shopXcx.mqTask.MQTaskRouting;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.BeanUtils;
 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;
 
@@ -97,6 +101,13 @@
     WarehouseDao warehouseDao;
     @Resource
     private ShoppingGoodsService shoppingGoodsService;
+
+    @Autowired
+    private RabiitMqTemplate rabiitMqTemplate;
+
+    @Value("${evn}")
+    private String evn;
+
 
     /**
      * 新增服务单 jyy
@@ -561,10 +572,15 @@
         if (!projServices.getState().equals(Dictionary.SERVICE_STATU_FWWC)) {
             throw new GlobleException("该服务单状态为" + projServices.getState() + ",不可以进行当前操作!");
         } else {
-
             projServices.setState(Dictionary.SERVICE_STATU_FFJS);
             projServices.setConsumeTime(new Date());
-            return sysProjServicesDao.update(projServices);
+            int result=sysProjServicesDao.update(projServices);
+            //发送微信公众号提醒
+            JSONObject param=new JSONObject();
+            param.put("companyId",projServices.getCompanyId());
+            param.put("serviceId",projServices.getId());
+            rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG+evn,param.toJSONString());
+            return result;
         }
     }
 
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopWxtemplateMsg.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopWxtemplateMsg.java
index 4c5e2d4..390f897 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopWxtemplateMsg.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopWxtemplateMsg.java
@@ -40,8 +40,15 @@
      */
     private Integer status;
 
+    /**
+     * 模板类型 1,公众号,2,小程序
+     */
+    private Integer tempType;
 
-
+    /**
+     * 取数模板类
+     */
+    private String templateClass;
 
     /**
      * 模板备注
@@ -86,24 +93,76 @@
         }
     }
 
-	public void buildDicMap(Object value) {
-		if (value != null) {
-			STATUS[] statusArray = STATUS.values();
-			for (STATUS s : statusArray) {
-				if (s.getCode().equals(value)) {
-					getDicMap().put("status", s.getName());
-				}
-			}
-		}
-	}
+    public enum TempType {
+
+        MP("公众号", 1),
+
+        APP("小程序", 2);
+
+        private TempType(String name, int code) {
+            this.name = name;
+            this.code = code;
+        }
+
+        private String name;
+        private Integer code;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public Integer getCode() {
+            return code;
+        }
+
+        public void setCode(Integer code) {
+            this.code = code;
+        }
+    }
+
+
+
     public void setStatus(Integer status) {
-        buildDicMap(status);
-
-        buildDicMap("status");
-
+        if (status != null) {
+            STATUS[] statusArray = STATUS.values();
+            for (STATUS s : statusArray) {
+                if (s.getCode().equals(status)) {
+                    getDicMap().put("status", s.getName());
+                }
+            }
+        }
         this.status = status;
     }
 
+    public String getTemplateClass() {
+        return templateClass;
+    }
+
+    public void setTemplateClass(String templateClass) {
+
+        this.templateClass = templateClass;
+    }
+
+    public Integer getTempType() {
+
+        return tempType;
+    }
+
+    public void setTempType(Integer tempType) {
+        if (tempType != null) {
+            TempType[] statusArray = TempType.values();
+            for (TempType s : statusArray) {
+                if (s.getCode().equals(tempType)) {
+                    getDicMap().put("tempType", s.getName());
+                }
+            }
+        }
+        this.tempType = tempType;
+    }
 
     public Integer getId() {
         return id;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopWxtemplateMsgDao.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopWxtemplateMsgDao.java
index 96f20f4..92b583b 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopWxtemplateMsgDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopWxtemplateMsgDao.java
@@ -26,7 +26,7 @@
 	
 	public int deleteById(Integer id);
 
-	public ShopWxtemplateMsg selectByCode(Integer code);
+	public ShopWxtemplateMsg selectByCode(@Param("code") Integer code, @Param("companyId") Long companyId);
 
 	public int deleteByModel(@Param("record") ShopWxtemplateMsg shopWxtemplateMsg);
 	
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/MQTaskRouting.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/MQTaskRouting.java
index 68c94d1..861de97 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/MQTaskRouting.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/MQTaskRouting.java
@@ -12,6 +12,12 @@
      * 发送微信消息
      */
     String SEND_TEMPLATE_MSG = "SEND_TEMPLATE_MSG";
+
+    /**
+     * 发送小程序统一模板消息
+     */
+    String SEND_UNIFORM_TEMPLATE_MSG = "SEND_UNIFORM_TEMPLATE_MSG";
+
     /**
      * 订单出库
      */
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/VipCreateTask.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/VipCreateTask.java
index 5d59638..e650788 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/VipCreateTask.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/VipCreateTask.java
@@ -48,7 +48,7 @@
             } else {
                 SysVipInfo vipInfo = new SysVipInfo();
                 //在备注记下微商城的用户id
-                vipInfo.setRemark(userInfo.getOpenId());
+                vipInfo.setOpenId(userInfo.getOpenId());
                 vipInfo.setAddr(userInfo.getProvince() + " " + userInfo.getCity());
                 vipInfo.setPhone(userInfo.getPhoneNumber());
                 if (userInfo.getGender() != null) {
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/templateMsg/AppointmentSuccess.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/templateMsg/AppointmentSuccess.java
index 69ae1e6..3dbd6f4 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/templateMsg/AppointmentSuccess.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/templateMsg/AppointmentSuccess.java
@@ -48,7 +48,7 @@
         SysShopInfo shopInfo = shopInfoDao.selectById(onlinebooking.getShopId());
 
         //获取模板id
-        ShopWxtemplateMsg wxtemplateMsg = wxtemplateMsgDao.selectByCode(TemplateMsgType.APPOINTMENT_SUCCESS.getCode());
+        ShopWxtemplateMsg wxtemplateMsg = wxtemplateMsgDao.selectByCode(TemplateMsgType.APPOINTMENT_SUCCESS.getCode(), 17L);
 
 
         String page = "pages/yuyue/yyInfo?id=" + orderId + "&model=1";
diff --git a/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/MsgDemo3.java b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/MsgDemo3.java
new file mode 100644
index 0000000..5531bf7
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/MsgDemo3.java
@@ -0,0 +1,35 @@
+package com.matrix.system.wechart.templateMsg;
+
+import com.alibaba.fastjson.JSONObject;
+import com.matrix.component.tools.HttpClientUtil;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.system.hive.plugin.util.HttpUtils;
+import com.matrix.system.shopXcx.api.WeChatGzhApiTools;
+import com.matrix.system.wechart.templateMsg.Task.UniformMsgSentTask;
+import com.rabbitmq.client.Delivery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.IOException;
+
+@Controller
+@RequestMapping(value = "test3")
+public class MsgDemo3 {
+
+
+    @Autowired
+    UniformMsgSentTask uniformMsgSentTask;
+
+    @RequestMapping("/template")
+    @ResponseBody
+    public AjaxResult template() throws IOException {
+
+        uniformMsgSentTask.handle(null,null);
+        return AjaxResult.buildSuccessInstance("1");
+
+    }
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/TemplateMessageBulder.java b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/TemplateMessageBulder.java
new file mode 100644
index 0000000..4c0bafa
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/TemplateMessageBulder.java
@@ -0,0 +1,19 @@
+package com.matrix.system.wechart.templateMsg.Task;
+
+import com.matrix.system.wechart.templateMsg.UniformMsgPojo;
+
+import java.util.Map;
+
+/**
+ * 动态构建消息主体内容
+ * @author jyy
+ *
+ */
+public interface TemplateMessageBulder {
+    /**
+     *  * 返回的map中 如果包含错误消息用error属性来表示
+     * @param param
+     * @return
+     */
+    Map buildMsg(Map param);
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java
new file mode 100644
index 0000000..7094fe9
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/UniformMsgSentTask.java
@@ -0,0 +1,120 @@
+package com.matrix.system.wechart.templateMsg.Task;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.matrix.biz.bean.BizUser;
+import com.matrix.biz.service.BizUserService;
+import com.matrix.component.tools.HttpClientUtil;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.rr.GlueFactory;
+import com.matrix.system.common.bean.BusParameterSettings;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.constance.Dictionary;
+import com.matrix.system.hive.bean.SysProjServices;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysProjServicesDao;
+import com.matrix.system.hive.dao.SysShopInfoDao;
+import com.matrix.system.hive.dao.SysVipInfoDao;
+import com.matrix.system.shopXcx.api.WeChatGzhApiTools;
+import com.matrix.system.shopXcx.bean.ShopWxtemplateMsg;
+import com.matrix.system.shopXcx.dao.ShopWxtemplateMsgDao;
+import com.matrix.system.wechart.templateMsg.GzhTemplateMessagePojo;
+import com.matrix.system.wechart.templateMsg.TemplateNameConstance;
+import com.matrix.system.wechart.templateMsg.UniformMsgPojo;
+import com.rabbitmq.client.DeliverCallback;
+import com.rabbitmq.client.Delivery;
+import org.apache.commons.collections.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 小程序统一消息模板消息发送提醒
+ * @author jyy
+ */
+@Component
+public class UniformMsgSentTask implements DeliverCallback {
+
+    @Autowired
+    private ShopWxtemplateMsgDao shopWxtemplateMsgDao;
+
+    @Autowired
+    private BusParameterSettingsDao busParameterSettingsDao;
+
+    /**
+     * 发送模板消息需要传JSONO字符串作为格式
+     * 例如:{"companyId":17}
+     * companyId 是必须属性
+     * @param consumerTag
+     * @param message
+     * @throws IOException
+     */
+    @Override
+    public void handle(String consumerTag, Delivery message) throws IOException {
+        try {
+
+
+            String messages = new String(message.getBody(), "UTF-8");
+            JSONObject messageJsonParam=JSONObject.parseObject(messages);
+
+            if(!messageJsonParam.containsKey("companyId")){
+                LogUtil.error("小程序消息推送参数格式异常发送模板消息需要传JSONO字符串作为格式 例如:{\"companyId\":17} companyId 是必须属性");
+                return;
+            }
+
+            Long companyId = Long.parseLong( messageJsonParam.get("companyId").toString());
+
+            //获取公司微信配置参数
+            BusParameterSettings xcxAppId = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_APPID, companyId);
+            BusParameterSettings xcxSecret = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.MINIPROGRAM_SECRET, companyId);
+            BusParameterSettings gzhAppid = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.GZH_APPID, companyId);
+            //获取消息模板
+            ShopWxtemplateMsg template = shopWxtemplateMsgDao.selectByCode(TemplateNameConstance.GZH_YYTX,companyId);
+            //校验参数
+            if(xcxAppId==null||xcxSecret==null||gzhAppid==null||template==null){
+                LogUtil.error("小程序消息推送配置缺失xcxAppId="+xcxAppId+";xcxSecret="+xcxSecret+";gzhAppid="+gzhAppid+";template="+template);
+                return;
+            }
+
+            //获取模板动态构建类
+            TemplateMessageBulder templateMessageBulder = (TemplateMessageBulder) GlueFactory.getInstance().loadInstance(template.getTemplateClass());
+            //为模板动态类装备必要的参数
+            Map<String, Object> bulderParam = new HashedMap();
+            bulderParam.put("gzhAppid", gzhAppid.getParamValue());
+            bulderParam.put("template_id", template.getUuid());
+            bulderParam.put("messageJsonParam", messageJsonParam);
+
+
+            //调用模板计算出消息体
+            Map msgResult = templateMessageBulder.buildMsg(bulderParam);
+
+            if(msgResult.containsKey("error")){
+                //错误消息处理
+                LogUtil.error("模板消息发送失败:"+msgResult.get("error"));
+                return;
+            }else{
+                //正常返回消息
+                List msgList = (List) msgResult.get("msgList");
+                //获取acceToken
+                String ACCESS_TOKEN = WeChatGzhApiTools.getAccessToken(xcxAppId.getParamValue(), xcxSecret.getParamValue());
+                String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN".replaceAll("ACCESS_TOKEN", ACCESS_TOKEN);
+                for (Object msg : msgList) {
+                    UniformMsgPojo uniformMsgPojo = (UniformMsgPojo) msg;
+                    //推送消息到微信
+                    JSONObject result = HttpClientUtil.sendPostWithJson(url, JSONObject.toJSON(uniformMsgPojo).toString());
+                    //微信返回值
+                    LogUtil.debug("微信小程序模板消息推送结果:" + result.toString());
+                }
+            }
+
+        } catch (Exception e) {
+            LogUtil.error("消费者执行异常", e);
+        }
+
+    }
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/messageBulderDemo/DefaultTemplateMessageBulder.java b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/messageBulderDemo/DefaultTemplateMessageBulder.java
new file mode 100644
index 0000000..d917a1e
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/Task/messageBulderDemo/DefaultTemplateMessageBulder.java
@@ -0,0 +1,99 @@
+package com.matrix.system.wechart.templateMsg.Task.messageBulderDemo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.matrix.biz.bean.BizUser;
+import com.matrix.biz.dao.BizUserDao;
+import com.matrix.core.tools.DateUtil;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.system.hive.bean.SysBeauticianState;
+import com.matrix.system.hive.bean.SysProjServices;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysBeauticianStateDao;
+import com.matrix.system.hive.dao.SysProjServicesDao;
+import com.matrix.system.hive.dao.SysVipInfoDao;
+import com.matrix.system.wechart.templateMsg.GzhTemplateMessagePojo;
+import com.matrix.system.wechart.templateMsg.Task.TemplateMessageBulder;
+import com.matrix.system.wechart.templateMsg.UniformMsgPojo;
+import io.swagger.models.auth.In;
+import org.apache.commons.collections.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 某个公司客户的定制消息模板
+ */
+@Component
+public class DefaultTemplateMessageBulder implements TemplateMessageBulder {
+
+    @Autowired
+    SysProjServicesDao projServicesDao;
+
+    @Autowired
+    SysVipInfoDao vipInfoDao;
+
+    @Autowired
+    private SysBeauticianStateDao beauticianStateDao;
+
+
+
+    @Override
+    public Map buildMsg(Map param) {
+
+        //返回参数
+        Map builParam=new HashedMap();
+
+
+        //获取基础公共参数
+        String gzhAppid= (String) param.get("gzhAppid");
+        String template_id= (String) param.get("template_id");
+        //触发点传送的json参数
+        JSONObject messageJsonParam= (JSONObject) param.get("messageJsonParam");
+
+        Long serviceId= (Long) messageJsonParam.get("serviceId");
+
+
+        //构建消息主体
+        SysProjServices sysProjServices = projServicesDao.selectById(serviceId);
+
+
+        //补充服务单扩展信息===============
+        List<SysBeauticianState> beauticianStateList = beauticianStateDao.selectBySerIds(sysProjServices.getId());
+
+        SysVipInfo vipInfo=vipInfoDao.selectById(sysProjServices.getVipId());
+        String touser= vipInfo.getOpenId();
+        if(StringUtils.isBlank(touser)){
+            builParam.put("error","未获取到"+vipInfo.getVipName()+"用户小程序openid");
+            return builParam;
+        }
+
+        String time= DateUtil.dateFormatStr(sysProjServices.getConsumeTime(),DateUtil.DATE_FORMAT_MM);
+        List msgList=new ArrayList();
+        //如果一个项目存在多个护理项目则发送多次消息
+        for (SysBeauticianState beauticianState:beauticianStateList){
+            UniformMsgPojo uniformMsgPojo=new UniformMsgPojo();
+            GzhTemplateMessagePojo messagePojo=new GzhTemplateMessagePojo();
+            uniformMsgPojo.setTouser(touser);
+            messagePojo.setTemplate_id(template_id);
+            messagePojo.setAppid(gzhAppid);
+
+
+            //个性参数设置
+            Integer suplerTimes= beauticianState.getProjUse().getSurplusCount();
+            messagePojo.setFirst("尊敬的:"+vipInfo.getVipName(),"#453454");
+            messagePojo.setKeyWord(beauticianState.getProjInfo().getName(),"#453454");
+            messagePojo.setKeyWord(time,"#453454");
+            messagePojo.setRemark("您的护理项目剩余"+suplerTimes+"次。","#453454");
+            uniformMsgPojo.setMp_template_msg(messagePojo);
+
+
+            msgList.add(uniformMsgPojo);
+        }
+
+        builParam.put("msgList",msgList);
+        return builParam;
+    }
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/TemplateNameConstance.java b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/TemplateNameConstance.java
new file mode 100644
index 0000000..d66a4f3
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/wechart/templateMsg/TemplateNameConstance.java
@@ -0,0 +1,15 @@
+package com.matrix.system.wechart.templateMsg;
+
+/**
+ * 模板code定义常量
+ * @author  jyy
+ */
+public interface TemplateNameConstance {
+
+      /**
+       * 公众号预约提醒
+       */
+      Integer GZH_YYTX=10000;
+
+
+}
diff --git a/zq-erp/src/main/resources/config/application.properties b/zq-erp/src/main/resources/config/application.properties
index 0cc9ddf..e14f492 100644
--- a/zq-erp/src/main/resources/config/application.properties
+++ b/zq-erp/src/main/resources/config/application.properties
@@ -1,4 +1,4 @@
-evn=dev
+evn=devbb
 server.port=8080
 
 
diff --git a/zq-erp/src/main/resources/config/db/increment/20210109.sql b/zq-erp/src/main/resources/config/db/increment/20210109.sql
new file mode 100644
index 0000000..2f140ba
--- /dev/null
+++ b/zq-erp/src/main/resources/config/db/increment/20210109.sql
@@ -0,0 +1,5 @@
+ALTER TABLE `shop_wxtemplate_msg`
+ADD COLUMN `temp_type`  int(2) NULL COMMENT ' 模板类型 1,公众号,2,小程序' AFTER `code`,
+ADD COLUMN `template_class`  longtext NULL COMMENT '取数模板类' AFTER `temp_type`;
+
+
diff --git a/zq-erp/src/main/resources/config/test/application.properties b/zq-erp/src/main/resources/config/test/application.properties
index 09b80d4..b5a6726 100644
--- a/zq-erp/src/main/resources/config/test/application.properties
+++ b/zq-erp/src/main/resources/config/test/application.properties
@@ -1,12 +1,13 @@
-evn=dev
+evn=tyytest
 server.port=8080
 
 
 #线上测试环境
 
-spring.datasource.username=chuhuan
-spring.datasource.password=chuhuan
-spring.datasource.url=jdbc:mysql://119.3.52.84:3306/hive_plus_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&allowMultiQueries=true&transformedBitIsBoolean=true&serverTimezone=GMT%2B8
+spring.datasource.username=ct_test
+spring.datasource.password=123456
+spring.datasource.url=jdbc:mysql://120.27.238.55:3306/hive_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&allowMultiQueries=true&transformedBitIsBoolean=true&serverTimezone=GMT%2B8
+
 
 
 
diff --git a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopWxtemplateMsgDao.xml b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopWxtemplateMsgDao.xml
index cb13505..e1aae99 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopWxtemplateMsgDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopWxtemplateMsgDao.xml
@@ -16,6 +16,8 @@
 			<result property="remark" column="remark" />
 			<result property="companyId" column="company_id" />
 			<result property="code" column="code" />
+			<result property="tempType" column="temp_type" />
+			<result property="templateClass" column="template_class" />
 	</resultMap>
 
 	
@@ -32,6 +34,8 @@
 			<result property="remark" column="remark" />
 			<result property="companyId" column="company_id" />
 		<result property="code" column="code" />
+		<result property="tempType" column="temp_type" />
+		<result property="templateClass" column="template_class" />
 	</resultMap>
 	
 	<!-- 字段sql -->
@@ -46,7 +50,9 @@
 			status,
 			remark,
 			company_id,
-			code
+			code,
+			temp_type,
+			template_class
 	</sql>
 	
 	<!-- 属性sql -->
@@ -61,9 +67,10 @@
 			#{item.status},
 			#{item.remark},
 			#{item.companyId},
-			#{item.code}
+			#{item.code},
+			#{item.tempType},
+			#{item.templateClass}
 	</sql>
-	
 	<!-- where sql -->
 	<sql id="where_sql">
 		 
@@ -86,6 +93,12 @@
 			<if test="(record.companyId!=null and record.companyId!='') or  (record.companyId!='' and record.companyId==0)  ">
 				and company_id  = #{record.companyId} 
 			</if>
+
+				<if test="(record.tempType!=null and record.tempType!='') or  (record.tempType!='' and record.tempType==0)  ">
+				and tempType  = #{record.tempType}
+			</if>
+
+
 		</if>
 		 
 	</sql>
@@ -140,6 +153,10 @@
 			<if test="_parameter.containsKey('code')">
 				code = #{code},
 			</if>
+			<if test="_parameter.containsKey('temp_type')">
+				temp_type = #{tempType},
+			</if>
+
 		</set>
 		WHERE id=#{id} 
 	</update> 
@@ -167,6 +184,11 @@
 			<if test="record.code != null and record.code != '' ">
 				code  = #{record.code},
 			</if>
+
+			<if test="record.tempType != null and record.tempType != '' ">
+				temp_type  = #{record.tempType},
+			</if>
+
 		</set>
 		WHERE id=#{record.id} 
 	</update>
@@ -248,7 +270,7 @@
 		select
 		<include refid="columns" ></include>
 		from shop_wxtemplate_msg
-		where  code=#{code}
+		where  code=#{code} and company_id=#{companyId}
 	</select>
 
 
diff --git a/zq-erp/src/main/resources/templates/views/admin/shop/templateMsg-list.html b/zq-erp/src/main/resources/templates/views/admin/shop/templateMsg-list.html
index f3c70ac..6bfb688 100644
--- a/zq-erp/src/main/resources/templates/views/admin/shop/templateMsg-list.html
+++ b/zq-erp/src/main/resources/templates/views/admin/shop/templateMsg-list.html
@@ -86,6 +86,7 @@
                     <th data-field="name">名称</th>
                     <th data-field="uuid">模板ID</th>
                     <th data-field="dicMap.status">是否启用</th>
+                    <th data-field="dicMap.tempType">模板类型</th>
                     <th data-field="remark">备注</th>
                 </tr>
                 </thead>

--
Gitblit v1.9.1