Преглед изворни кода

1.测试环境现已集成微信公众号模板消息,admin同时赋予了管理员、人才超市、PICC角色,只要微信绑定后即可收到模板消息。
2.手动提交下月投保单时,如果投保单中人员没有变化,则状态为待制单;有变化则为待初审。
3.设置险种每月截止日期,到截止日期时,系统自动将下月状态为待调整的投保单进行提交。

tomatozq пре 5 година
родитељ
комит
fb801dac5a
19 измењених фајлова са 400 додато и 171 уклоњено
  1. 5 4
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/MessageController.java
  2. 15 33
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/InsurancePolicyController.java
  3. 2 2
      picc-admin-server/src/main/resources/application-dev.yml
  4. 6 0
      picc-common/pom.xml
  5. 7 53
      picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/TemplateMessage.java
  6. 3 0
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/TemplateMessageService.java
  7. 146 3
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/TemplateMessageServiceImpl.java
  8. 0 1
      picc-common/src/main/java/com/jpsoft/picc/modules/common/config/WeixinConfig.java
  9. 34 0
      picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/JsonUtil.java
  10. 46 0
      picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/VelocityHelper.java
  11. 2 0
      picc-common/src/main/java/com/jpsoft/picc/modules/sys/dao/UserDAO.java
  12. 70 60
      picc-common/src/main/resources/mapper/base/TemplateMessage.xml
  13. 9 5
      picc-common/src/main/resources/mapper/sys/Menu.xml
  14. 5 0
      picc-common/src/main/resources/mapper/sys/User.xml
  15. 5 0
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsuranceApplicationController.java
  16. 11 2
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsurancePolicyController.java
  17. 14 8
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/MessageController.java
  18. 19 0
      weixin-middleware/src/main/java/com/jpsoft/weixin/config/WebMvcConfig.java
  19. 1 0
      weixin-middleware/src/main/resources/static/MP_verify_k4NGbWsAxQowRkU7.txt

+ 5 - 4
picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/MessageController.java

@@ -194,7 +194,7 @@ public class MessageController {
     @ApiOperation(value="列表")
     @RequestMapping(value = "pageList",method = RequestMethod.POST)
     public MessageResult<Map> pageList(
-            String id,
+            @RequestParam(value="status",defaultValue="") Boolean status,
             @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
             @RequestParam(value="pageSize",defaultValue="20") int pageSize,
             @RequestAttribute String subject){
@@ -205,12 +205,13 @@ public class MessageController {
         MessageResult<Map> msgResult = new MessageResult<>();
 
         Map<String,Object> searchParams = new HashMap<>();
+        searchParams.put("recipientId",subject);
 
         List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("id_","asc"));
+        sortList.add(new Sort("create_time","desc"));
 
-        if (StringUtils.isNotEmpty(id)) {
-            searchParams.put("id","%" + id + "%");
+        if (status != null) {
+            searchParams.put("status",status);
         }
 
         Page<Message> page = messageService.pageSearch(searchParams,pageIndex,pageSize,sortList);

+ 15 - 33
picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/InsurancePolicyController.java

@@ -1,6 +1,7 @@
 package com.jpsoft.picc.modules.business.controller;
 
 import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.github.pagehelper.Page;
 import com.jpsoft.picc.modules.base.entity.*;
 import com.jpsoft.picc.modules.base.service.*;
@@ -10,10 +11,11 @@ import com.jpsoft.picc.modules.common.config.WeixinConfig;
 import com.jpsoft.picc.modules.common.constant.PolicyStatus;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
 import com.jpsoft.picc.modules.common.dto.Sort;
-import com.jpsoft.picc.modules.common.utils.NumberToCN;
-import com.jpsoft.picc.modules.common.utils.PojoUtils;
-import com.jpsoft.picc.modules.common.utils.WeixinUtil;
+import com.jpsoft.picc.modules.common.utils.*;
+import com.jpsoft.picc.modules.sys.entity.User;
 import com.jpsoft.picc.modules.sys.service.DataDictionaryService;
+import com.jpsoft.picc.modules.sys.service.UserRoleService;
+import com.jpsoft.picc.modules.sys.service.UserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -31,6 +33,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 @RestController
@@ -66,9 +69,6 @@ public class InsurancePolicyController {
     @Autowired
     private CompanyUserService companyUserService;
 
-    @Autowired
-    private WeixinConfig weixinConfig;
-
     @Autowired
     private InsuranceJobsService insuranceJobsService;
 
@@ -78,6 +78,9 @@ public class InsurancePolicyController {
     @Autowired
     private DataDictionaryService dataDictionaryService;
 
+    @Autowired
+    private TemplateMessageService templateMessageService;
+
     @ApiOperation(value="创建空记录")
     @GetMapping("create")
     public MessageResult<InsurancePolicy> create(){
@@ -403,7 +406,7 @@ public class InsurancePolicyController {
             }
 
             //发送微信通知
-            sendWeixinMessage(applicationId, policyStatus);
+            templateMessageService.sendTemplateMessage(policyId, policyStatus);
 
             msgResult.setResult(true);
             msgResult.setData(affectCount);
@@ -416,29 +419,8 @@ public class InsurancePolicyController {
         return msgResult;
     }
 
-    private void sendWeixinMessage(String applicationId, PolicyStatus policyStatus) {
-        InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
-        Company company = companyService.get(insuranceApplication.getCompanyId());
-        CompanyUser companyUser = companyUserService.findByCompanyId(company.getId());
-
-        if (companyUser!=null && StringUtils.isNotEmpty(companyUser.getOpenId())){
-            JSONObject jsonObject = new JSONObject();
-
-            JSONObject userNameObj = new JSONObject();
-            userNameObj.put("value",companyUser.getUserName());
-
-            jsonObject.put("userName",userNameObj);
-
-            JSONObject statusObj = new JSONObject();
-            statusObj.put("value",policyStatus.getText());
-
-            jsonObject.put("status",statusObj);
-
-            new Thread(()->WeixinUtil.sendTemplateMessage(weixinConfig,
-                    companyUser.getOpenId(),
-                    weixinConfig.getSendTmplId1(), jsonObject)
-            ).start();
-        }
+    private void sendWeixinMessage(String policyId, PolicyStatus policyStatus) {
+        templateMessageService.sendTemplateMessage(policyId,policyStatus);
     }
 
     @ApiOperation(value="PICC复审")
@@ -488,7 +470,7 @@ public class InsurancePolicyController {
             }
 
             //发送微信通知
-            sendWeixinMessage(applicationId, policyStatus);
+            templateMessageService.sendTemplateMessage(policyId, policyStatus);
 
             msgResult.setResult(true);
             msgResult.setData(affectCount);
@@ -542,7 +524,7 @@ public class InsurancePolicyController {
             approveAndGenPolicyInTrans(applicationId, policyId,processStatus,opinion,policyStatus,subject);
 
             //发送微信通知
-            sendWeixinMessage(applicationId, policyStatus);
+            templateMessageService.sendTemplateMessage(policyId, policyStatus);
 
             msgResult.setResult(true);
         }
@@ -648,7 +630,7 @@ public class InsurancePolicyController {
             }
 
             //发送微信通知
-            sendWeixinMessage(applicationId, policyStatus);
+            templateMessageService.sendTemplateMessage(policyId, policyStatus);
 
             msgResult.setResult(true);
             msgResult.setData(affectCount1);

+ 2 - 2
picc-admin-server/src/main/resources/application-dev.yml

@@ -19,7 +19,7 @@ pdf:
 weixin:
   appId: wxc0ddd6a415c535d9
   appSecret: 042fe6c9c970c1d9fe585dccfca89221
-  tokenUrl: "http://localhost:8086/weixin-middleware/token"
-  createQrCodeUrl: "http://localhost:8086/weixin-middleware/qrcode/create"
+  tokenUrl: "http://www.jzrccs.com/weixin-middleware/token"
+  createQrCodeUrl: "http://www.jzrccs.com/weixin-middleware/qrcode/create"
   sendTmplMsgUrl: "https://api.weixin.qq.com/cgi-bin/message/template/send"
   sendTmplId1: "oc6Kh7_ZkANmsUnl2keg-X2nUKRBkAwjnGI3z1gTodo"

+ 6 - 0
picc-common/pom.xml

@@ -20,5 +20,11 @@
             <groupId>org.apache.tomcat.embed</groupId>
             <artifactId>tomcat-embed-core</artifactId>
         </dependency>
+        <!-- veloctiy -->
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity</artifactId>
+            <version>1.7</version>
+        </dependency>
     </dependencies>
 </project>

+ 7 - 53
picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/TemplateMessage.java

@@ -4,6 +4,8 @@ import java.io.Serializable;
 import java.util.Date;
 import java.text.SimpleDateFormat;
 import java.math.BigDecimal;
+
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -12,6 +14,7 @@ import io.swagger.annotations.ApiModel;
 /**
   描述:base_template_message的实体类
  */
+@Data
 @ApiModel(value = "base_template_message的实体类")
 public class TemplateMessage {
     @ApiModelProperty(value = "主键")
@@ -22,57 +25,8 @@ public class TemplateMessage {
 	private String title;
     @ApiModelProperty(value = "内容")
 	private String content;
-
-	/**
-	 *获取主键
-	 */
-    	public String getId(){
-		return id;
-	}
-	
-	/**
-	 *设置主键
-	 */
-	public void setId(String id){
-		this.id = id;
-	}
-	/**
-	 *获取微信模板代码
-	 */
-    	public String getCode(){
-		return code;
-	}
-	
-	/**
-	 *设置微信模板代码
-	 */
-	public void setCode(String code){
-		this.code = code;
-	}
-	/**
-	 *获取标题
-	 */
-    	public String getTitle(){
-		return title;
-	}
-	
-	/**
-	 *设置标题
-	 */
-	public void setTitle(String title){
-		this.title = title;
-	}
-	/**
-	 *获取内容
-	 */
-	public String getContent(){
-		return content;
-	}
-	
-	/**
-	 *设置内容
-	 */
-	public void setContent(String content){
-		this.content = content;
-	}
+	@ApiModelProperty(value = "目标")
+	private String target;
+	@ApiModelProperty(value = "JSON参数")
+	private String json;
 }

+ 3 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/TemplateMessageService.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Map;
 import com.jpsoft.picc.modules.base.entity.TemplateMessage;
 import com.github.pagehelper.Page;
+import com.jpsoft.picc.modules.common.constant.PolicyStatus;
 import com.jpsoft.picc.modules.common.dto.Sort;
 
 public interface TemplateMessageService {
@@ -14,4 +15,6 @@ public interface TemplateMessageService {
 	int delete(String id);
 	List<TemplateMessage> list();
 	Page<TemplateMessage> pageSearch(Map<String, Object> searchParams,int pageNum,int pageSize,List<Sort> sortList);
+
+	boolean sendTemplateMessage(String policyId, PolicyStatus policyStatus);
 }

+ 146 - 3
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/TemplateMessageServiceImpl.java

@@ -1,9 +1,32 @@
 package com.jpsoft.picc.modules.base.service.impl;
 
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import javax.annotation.Resource;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.json.JSONObject;
+import com.jpsoft.picc.modules.base.dao.CompanyDAO;
+import com.jpsoft.picc.modules.base.dao.CompanyUserDAO;
+import com.jpsoft.picc.modules.base.dao.MessageDAO;
+import com.jpsoft.picc.modules.base.entity.Company;
+import com.jpsoft.picc.modules.base.entity.CompanyUser;
+import com.jpsoft.picc.modules.base.entity.Message;
+import com.jpsoft.picc.modules.business.dao.InsuranceApplicationDAO;
+import com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO;
+import com.jpsoft.picc.modules.business.entity.InsuranceApplication;
+import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
+import com.jpsoft.picc.modules.common.config.WeixinConfig;
+import com.jpsoft.picc.modules.common.constant.PolicyStatus;
+import com.jpsoft.picc.modules.common.utils.JsonUtil;
+import com.jpsoft.picc.modules.common.utils.VelocityHelper;
+import com.jpsoft.picc.modules.common.utils.WeixinUtil;
+import com.jpsoft.picc.modules.sys.dao.UserDAO;
+import com.jpsoft.picc.modules.sys.entity.User;
+import com.jpsoft.picc.modules.sys.service.UserService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import com.jpsoft.picc.modules.base.dao.TemplateMessageDAO;
@@ -13,12 +36,34 @@ import com.github.pagehelper.Page;
 import com.jpsoft.picc.modules.common.dto.Sort;
 import com.github.pagehelper.PageHelper;
 
+@Slf4j
 @Transactional
 @Component(value="templateMessageService")
 public class TemplateMessageServiceImpl implements TemplateMessageService {
 	@Resource(name="templateMessageDAO")
 	private TemplateMessageDAO templateMessageDAO;
 
+	@Resource(name="messageDAO")
+	private MessageDAO messageDAO;
+
+	@Autowired
+	private InsurancePolicyDAO insurancePolicyDAO;
+
+	@Autowired
+	private InsuranceApplicationDAO insuranceApplicationDAO;
+
+	@Autowired
+	private WeixinConfig weixinConfig;
+
+	@Autowired
+	private CompanyDAO companyDAO;
+
+	@Autowired
+	private CompanyUserDAO companyUserDAO;
+
+	@Autowired
+	private UserDAO userDAO;
+
 	@Override
 	public TemplateMessage get(String id) {
 		// TODO Auto-generated method stub
@@ -67,4 +112,102 @@ public class TemplateMessageServiceImpl implements TemplateMessageService {
         
         return page;
 	}
+
+	@Override
+	public boolean sendTemplateMessage(String policyId, PolicyStatus policyStatus) {
+		boolean result = false;
+
+		try {
+			InsurancePolicy insurancePolicy = insurancePolicyDAO.get(policyId);
+			InsuranceApplication insuranceApplication = insuranceApplicationDAO.get(insurancePolicy.getLatestApplicationId());
+			Company company = companyDAO.get(insurancePolicy.getCompanyId());
+			CompanyUser companyUser = companyUserDAO.findByCompanyId(company.getId());
+
+			TemplateMessage templateMessage = templateMessageDAO.get(policyStatus.getValue() + "");
+
+			if (templateMessage==null){
+				throw new Exception(policyStatus.getText() + "对应模板消息不存在!");
+			}
+
+			List<Map> targetList = new ArrayList<>();
+
+			if (templateMessage.getTarget().equals("USER")) {
+				//发送给用户
+				Map<String, Object> userMap = new HashMap<>();
+				userMap.put("userId", companyUser.getId());
+				userMap.put("openId", companyUser.getOpenId());
+
+				targetList.add(userMap);
+			} else if (templateMessage.getTarget().equals("JZRCCS") || templateMessage.getTarget().equals("PICC")) {
+				List<User> userList = userDAO.findByRoleName(templateMessage.getTarget());
+
+				for (User user : userList) {
+					Map<String, Object> userMap = new HashMap<>();
+					userMap.put("userId", user.getId());
+					userMap.put("openId", user.getOpenId());
+
+					targetList.add(userMap);
+				}
+			}
+
+			for (Map map : targetList) {
+				String userId = (String) map.get("userId");
+				String openId = (String) map.get("openId");
+
+				sendMessage(userId, openId, templateMessage, insuranceApplication, insurancePolicy, companyUser);
+			}
+
+			result = true;
+		}
+		catch (Exception ex){
+			log.error(ex.getMessage(),ex);
+			result = false;
+		}
+
+		return result;
+	}
+
+	private void sendMessage(String userId,String openId,
+							 TemplateMessage templateMessage,
+							 InsuranceApplication insuranceApplication,
+							 InsurancePolicy insurancePolicy,
+							 CompanyUser companyUser){
+		String content = templateMessage.getContent();
+
+		Map<String,Object> contentVars = new HashMap<>();
+		contentVars.put("userName", companyUser.getUserName());
+		content = VelocityHelper.format(content,contentVars);
+
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+		Map<String,Object> jsonVars = new HashMap<>();
+
+		jsonVars.put("content",content);
+		jsonVars.put("time", DateTime.now().toString("yyyy-MM-dd HH:mm"));
+		jsonVars.put("insuredName",insuranceApplication.getInsuredName());
+		jsonVars.put("insuranceName",insuranceApplication.getDefinitionName());
+		jsonVars.put("duration",sdf.format(insurancePolicy.getStartTime()) + "至" + sdf.format(insurancePolicy.getEndTime()));
+
+		String json = VelocityHelper.format(templateMessage.getJson(),jsonVars);
+		JSONObject jsonObject = new JSONObject(json);
+
+		if (StringUtils.isNotEmpty(openId)) {
+			//发送微信模板消息
+			new Thread(() -> WeixinUtil.sendTemplateMessage(weixinConfig,
+					openId, templateMessage.getCode(), jsonObject)
+			).start();
+		}
+
+		//写站内消息
+		Message message = new Message();
+		message.setId(UUID.randomUUID().toString());
+		message.setStatus(false);
+		message.setDelFlag(false);
+		message.setCreateTime(new Date());
+		message.setContent(content);
+		message.setTitle(templateMessage.getTitle());
+		message.setRecipientId(userId);
+
+		messageDAO.insert(message);
+	}
 }

+ 0 - 1
picc-common/src/main/java/com/jpsoft/picc/modules/common/config/WeixinConfig.java

@@ -13,7 +13,6 @@ public class WeixinConfig {
     private String tokenUrl;
     private String createQrCodeUrl;
     private String sendTmplMsgUrl;
-    private String sendTmplId1;
 
     public final static String SCAN_QRCODE_LOGIN_PREFIX = "SCAN_QRCODE_LOGIN_";
 }

+ 34 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/JsonUtil.java

@@ -0,0 +1,34 @@
+package com.jpsoft.picc.modules.common.utils;
+
+import cn.hutool.json.JSONObject;
+
+public class JsonUtil {
+    public static void putNestValue(JSONObject jsonObject,String name, Object value){
+        String[] arr = name.split("\\.");
+
+        Object curValue = value;
+
+        for (int i=arr.length-1;i>=0;i--) {
+            JSONObject obj;
+
+            if (i==0){
+                obj = jsonObject;
+            }
+            else{
+                obj = new JSONObject();
+            }
+
+            obj.put(arr[i],curValue);
+
+            curValue = obj;
+        }
+    }
+
+    public static void main(String[] args){
+        JSONObject obj = new JSONObject();
+
+        JsonUtil.putNestValue(obj,"first.DATA","测试");
+
+        System.out.println(obj);
+    }
+}

+ 46 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/VelocityHelper.java

@@ -0,0 +1,46 @@
+package com.jpsoft.picc.modules.common.utils;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
+
+public class VelocityHelper {
+	private static VelocityEngine velocityEngine;
+	
+	public static synchronized VelocityEngine getEngine() {
+		if (velocityEngine==null) {
+			Properties properties=new Properties();
+			
+			properties.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
+	        properties.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
+	        properties.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
+	        
+	        velocityEngine = new VelocityEngine(properties);
+		}
+		
+		return velocityEngine;
+	}
+	
+	public static String format(String tmplContent,Map<String,Object> variables) {
+		VelocityEngine velocityEngine = VelocityHelper.getEngine();
+		
+        VelocityContext context=new VelocityContext();
+        
+        for (String key : variables.keySet()) {
+			context.put(key, variables.get(key));
+		}
+        
+        StringWriter writer = new StringWriter();
+        StringReader reader = new StringReader(tmplContent);
+        
+        velocityEngine.evaluate(context, writer, "test", reader);
+        
+        return writer.toString();
+	}
+}

+ 2 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/sys/dao/UserDAO.java

@@ -19,4 +19,6 @@ public interface UserDAO {
 	List<User> search(Map<String,Object> searchParams,List<Sort> sortList);
 	User findByUserName(@Param("userName") String userName);
 	User findByOpenId(@Param("openId") String openId);
+
+    List<User> findByRoleName(String target);
 }

+ 70 - 60
picc-common/src/main/resources/mapper/base/TemplateMessage.xml

@@ -1,71 +1,81 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace必须指向DAO接口 -->
 <mapper namespace="com.jpsoft.picc.modules.base.dao.TemplateMessageDAO">
-	<resultMap id="TemplateMessageMap" type="com.jpsoft.picc.modules.base.entity.TemplateMessage">
-		<id property="id" column="id_" />
-			<result property="code" column="code_" />
-			<result property="title" column="title_" />
-			<result property="content" column="content_" />
-			</resultMap>
-	<insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.TemplateMessage">
-	<!--
-	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
-		select sys_guid() from dual
-	</selectKey>
-	-->
-	<![CDATA[
+    <resultMap id="TemplateMessageMap" type="com.jpsoft.picc.modules.base.entity.TemplateMessage">
+        <id property="id" column="id_"/>
+        <result property="code" column="code_"/>
+        <result property="title" column="title_"/>
+        <result property="content" column="content_"/>
+        <result property="target" column="target_"/>
+        <result property="json" column="json_"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.TemplateMessage">
+        <!--
+        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+            select sys_guid() from dual
+        </selectKey>
+        -->
+        <![CDATA[
 		insert into base_template_message
-	    (id_,code_,title_,content_)
+	    (id_,code_,title_,content_,target_,json_)
 		values
 		(
-#{id,jdbcType=VARCHAR}
-,#{code,jdbcType=VARCHAR}
-,#{title,jdbcType=VARCHAR}
-,#{content,jdbcType=VARCHAR}
+            #{id,jdbcType=VARCHAR}
+            ,#{code,jdbcType=VARCHAR}
+            ,#{title,jdbcType=VARCHAR}
+            ,#{content,jdbcType=VARCHAR}
+            ,#{target,jdbcType=VARCHAR}
+            ,#{json,jdbcType=VARCHAR}
 		)
 	]]>
-	</insert>
-	<delete id="delete" parameterType="string">
-		delete from base_template_message where id_=#{id,jdbcType=VARCHAR}
-	</delete>
-	<update id="update" parameterType="com.jpsoft.picc.modules.base.entity.TemplateMessage">
-		update base_template_message
-		<set>
-				<if test="code!=null">
-		code_=#{code,jdbcType=VARCHAR},
-		</if>
-				<if test="title!=null">
-		title_=#{title,jdbcType=VARCHAR},
-		</if>
-				<if test="content!=null">
-		content_=#{content,jdbcType=VARCHAR},
-		</if>
-		</set>
-	where id_=#{id}
-	</update>
-	<select id="get" parameterType="string" resultMap="TemplateMessageMap">
-		select 
-id_,code_,title_,content_		from base_template_message where id_=#{0}
-	</select>
-	<select id="exist" parameterType="string" resultType="int">
-		select count(*) from base_template_message where id_=#{0}
-	</select>
-	<select id="list" resultMap="TemplateMessageMap">
-		select * from base_template_message
-	</select>
-	<select id="search" parameterType="hashmap" resultMap="TemplateMessageMap">
-		<![CDATA[
+    </insert>
+    <delete id="delete" parameterType="string">
+        delete from base_template_message where id_=#{id,jdbcType=VARCHAR}
+    </delete>
+    <update id="update" parameterType="com.jpsoft.picc.modules.base.entity.TemplateMessage">
+        update base_template_message
+        <set>
+            <if test="code!=null">
+                code_=#{code,jdbcType=VARCHAR},
+            </if>
+            <if test="title!=null">
+                title_=#{title,jdbcType=VARCHAR},
+            </if>
+            <if test="content!=null">
+                content_=#{content,jdbcType=VARCHAR},
+            </if>
+            <if test="target!=null">
+                target_=#{target,jdbcType=VARCHAR},
+            </if>
+            <if test="json!=null">
+                json_=#{json,jdbcType=VARCHAR},
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="get" parameterType="string" resultMap="TemplateMessageMap">
+        select
+        id_,code_,title_,content_,target_,json_ from base_template_message where id_=#{0}
+    </select>
+    <select id="exist" parameterType="string" resultType="int">
+        select count(*) from base_template_message where id_=#{0}
+    </select>
+    <select id="list" resultMap="TemplateMessageMap">
+        select * from base_template_message
+    </select>
+    <select id="search" parameterType="hashmap" resultMap="TemplateMessageMap">
+        <![CDATA[
 			select * from base_template_message
 		]]>
-		<where>
-			<if test="searchParams.id != null">
-				and ID_ like #{searchParams.id}
-			</if>
-		</where>
-		<foreach item="sort" collection="sortList"  open="order by" separator=",">
-	        ${sort.name} ${sort.order}
-	 	</foreach>
-	</select>
+        <where>
+            <if test="searchParams.id != null">
+                and ID_ like #{searchParams.id}
+            </if>
+        </where>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
 </mapper>

+ 9 - 5
picc-common/src/main/resources/mapper/sys/Menu.xml

@@ -122,12 +122,16 @@
         </foreach>
     </select>
     <select id="findAllocMenu"  parameterType="string" resultMap="MenuMap">
-        select * from sys_menu m,sys_role_menu rm,sys_user_role ur
-        where ur.user_id=#{userId}
-        and ur.role_id = rm.role_id
-        and rm.menu_id = m.id_
-        and m.menu_type = 2
+        select * from sys_menu m
+        where m.menu_type = 2
         and m.del_flag=0
+        and m.id_ in(
+            select rm.menu_id from
+            sys_role_menu rm,sys_user_role ur
+            where ur.user_id=#{userId}
+            and ur.role_id = rm.role_id
+            and rm.menu_id = m.id_
+        )
         <if test="parentId==null">
             and (m.parent_id is null or m.parent_id='')
         </if>

+ 5 - 0
picc-common/src/main/resources/mapper/sys/User.xml

@@ -106,4 +106,9 @@
             ${sort.name} ${sort.order}
         </foreach>
     </select>
+    <select id="findByRoleName" resultMap="UserMap">
+        select u.* from sys_user u,sys_user_role ur,sys_role r
+        where u.id_=ur.user_id and ur.role_id=r.id_
+        and r.name_=#{0}
+    </select>
 </mapper>

+ 5 - 0
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsuranceApplicationController.java

@@ -85,6 +85,9 @@ public class InsuranceApplicationController {
     @Autowired
     private DataDictionaryService dataDictionaryService;
 
+    @Autowired
+    private TemplateMessageService templateMessageService;
+
     @ApiOperation(value="投保单列表")
     @RequestMapping(value = "pageList",method = RequestMethod.POST)
     @ApiImplicitParams({
@@ -390,6 +393,8 @@ public class InsuranceApplicationController {
 
             insurancePolicyService.update(insurancePolicy);
 
+            templateMessageService.sendTemplateMessage(policyId,PolicyStatus.PendingTrial);
+
             msgResult.setResult(true);
         }
         catch(Exception ex){

+ 11 - 2
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsurancePolicyController.java

@@ -82,6 +82,9 @@ public class InsurancePolicyController {
     @Autowired
     private DataDictionaryService dataDictionaryService;
 
+    @Autowired
+    private TemplateMessageService templateMessageService;
+
     @ResponseBody
     @ApiOperation(value="附件列表")
     @RequestMapping(value = "attachmentList",method = RequestMethod.GET)
@@ -345,12 +348,16 @@ public class InsurancePolicyController {
                 }
             }
 
+            PolicyStatus policyStatus;
+
             if (isUnChecked) {
                 //有未复核人员,则状态为待初审
-                insurancePolicy.setStatus(PolicyStatus.PendingTrial.getValue() + "");
+                policyStatus = PolicyStatus.PendingTrial;
+                insurancePolicy.setStatus(policyStatus.getValue() + "");
             } else {
                 //所有人员都已复核吗,则状态为待制单
-                insurancePolicy.setStatus(PolicyStatus.PendingMakePolicy.getValue() + "");
+                policyStatus = PolicyStatus.PendingMakePolicy;
+                insurancePolicy.setStatus(policyStatus.getValue() + "");
             }
 
             insurancePolicy.setUpdateBy(principal.getName());
@@ -358,6 +365,8 @@ public class InsurancePolicyController {
 
             insurancePolicyService.update(insurancePolicy);
 
+            templateMessageService.sendTemplateMessage(policyId,policyStatus);
+
             msgResult.setResult(true);
         }
         catch(Exception ex){

+ 14 - 8
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/MessageController.java

@@ -2,8 +2,10 @@ package com.jpsoft.picc.modules.auth.controller;
 
 import com.github.pagehelper.Page;
 import com.jpsoft.picc.modules.base.entity.Company;
+import com.jpsoft.picc.modules.base.entity.CompanyUser;
 import com.jpsoft.picc.modules.base.entity.Message;
 import com.jpsoft.picc.modules.base.service.CompanyService;
+import com.jpsoft.picc.modules.base.service.CompanyUserService;
 import com.jpsoft.picc.modules.base.service.MessageService;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
 import com.jpsoft.picc.modules.common.dto.Sort;
@@ -34,6 +36,9 @@ public class MessageController {
     @Autowired
     private CompanyService companyService;
 
+    @Autowired
+    private CompanyUserService companyUserService;
+
     private Boolean read(String id,String updateBy){
         Boolean bl = false;
         try{
@@ -65,11 +70,12 @@ public class MessageController {
                                        @RequestParam(value="pageSize",defaultValue="20") int pageSize,
                                        HttpServletRequest request){
         AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
-        Company company = companyService.findByCreateBy(principal.getName());
+        CompanyUser companyUser = companyUserService.findByUserName(principal.getName());
+
         MessageResult<Map> msgResult = new MessageResult<>();
 
         Map<String,Object> searchParams = new HashMap<>();
-        searchParams.put("recipientId",company.getId());
+        searchParams.put("recipientId",companyUser.getId());
 
         List<Sort> sortList = new ArrayList<>();
         sortList.add(new Sort("create_time","desc"));
@@ -93,11 +99,11 @@ public class MessageController {
         AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
         MessageResult<Long> msgResult = new MessageResult<>();
 
-        Company company = companyService.findByCreateBy(principal.getName());
+        CompanyUser companyUser = companyUserService.findByUserName(principal.getName());
 
-        if(company!=null) {
+        if(companyUser!=null) {
             Map<String, Object> searchParams = new HashMap<>();
-            searchParams.put("recipientId", company.getId());
+            searchParams.put("recipientId", companyUser.getId());
 
             List<Sort> sortList = new ArrayList<>();
             sortList.add(new Sort("create_time", "desc"));
@@ -120,16 +126,17 @@ public class MessageController {
     @PostMapping("allRead")
     public MessageResult<String> allRead(HttpServletRequest request){
         AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
-        Company company = companyService.findByCreateBy(principal.getName());
+        CompanyUser companyUser = companyUserService.findByUserName(principal.getName());
         MessageResult<String> msgResult = new MessageResult<>();
 
         try {
             int affectCount = 0;
             Map<String,Object> searchParams = new HashMap<>();
-            searchParams.put("recipientId",company.getId());
+            searchParams.put("recipientId",companyUser.getId());
             searchParams.put("status",false);
             List<Sort> sortList = new ArrayList<>();
             sortList.add(new Sort("create_time","desc"));
+
             Page<Message> page = messageService.pageSearch(searchParams,1,1000,sortList);
             for(Message message : page.getResult()){
                 if(read(message.getId(),principal.getName())){
@@ -161,7 +168,6 @@ public class MessageController {
 
         try {
             AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
-            Company company = companyService.findByCreateBy(principal.getName());
 
             Message message = messageService.get(id);
 

+ 19 - 0
weixin-middleware/src/main/java/com/jpsoft/weixin/config/WebMvcConfig.java

@@ -0,0 +1,19 @@
+package com.jpsoft.weixin.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.*;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
+
+        registry.addResourceHandler("swagger-ui.html")
+                .addResourceLocations("classpath:/META-INF/resources/");
+
+        registry.addResourceHandler("/webjars/**")
+                .addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+}

+ 1 - 0
weixin-middleware/src/main/resources/static/MP_verify_k4NGbWsAxQowRkU7.txt

@@ -0,0 +1 @@
+k4NGbWsAxQowRkU7