|
@@ -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);
|
|
|
+ }
|
|
|
}
|