ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -16,7 +16,7 @@ import com.ruoyi.common.utils.*; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.common.utils.sign.Md5Utils; import com.ruoyi.common.utils.sms.smsUtils; import com.ruoyi.common.utils.sms.SmsUtils; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.service.ISysConfigService; @@ -691,7 +691,7 @@ } String wxCode = ""; if (active.equals("hzszlyy")) { wxCode = smsUtils.sendChat(url, patArchive.getTelcode(), serviceSubtask.getSfzh()); wxCode = SmsUtils.sendChat(url, patArchive.getTelcode(), serviceSubtask.getSfzh()); log.info("wxCodeçå¼ä¸º:{}", wxCode); } else { wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskName(), patArchive.getTelcode(), patArchive.getName(), patArchive.getPatidHis(), wxqqxx); ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -3,13 +3,15 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.ruoyi.common.annotation.AddOrgId; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.dx.MessageSend; import com.ruoyi.common.utils.HttpUtil; import com.ruoyi.common.utils.RSAPublicKeyExample; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.common.utils.sms.smsUtils; import com.ruoyi.common.utils.sms.SmsUtils; import com.ruoyi.system.service.ISysConfigService; import com.smartor.common.MtSubmitSmUtil; import com.smartor.common.ShiyiSmsUtil; import com.smartor.domain.*; @@ -71,6 +73,8 @@ private IServiceOutPathService iServiceOutPathService; @Autowired private IServiceSubtaskService iServiceSubtaskService; @Autowired private ISysConfigService configService; @Value("${spring.profiles.active}") private String active; @@ -82,7 +86,7 @@ @ApiOperation("çä¿¡åé") @PostMapping("/sendTest") public AjaxResult send(@RequestBody smsVO vo) { String sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), vo.getContent()); String sendMsg = SmsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), vo.getContent()); return AjaxResult.success(sendMsg); } @@ -138,7 +142,7 @@ String sendMsg = "false"; try { if (active.equals("hzszlyy")) { sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), content); sendMsg = SmsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), content); } else if (active.equals("nhfy")) { Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(vo.getPhone(), content); if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) { @@ -223,7 +227,7 @@ serviceOutPath.setOrgid(vo.getOrgid()); iServiceOutPathService.insertServiceOutPath(serviceOutPath); String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format; sendMsg = smsUtils.sendChat(url, vo.getPhone(), vo.getIdCard()); sendMsg = SmsUtils.sendChat(url, vo.getPhone(), vo.getIdCard()); } return AjaxResult.success(sendMsg); } @@ -265,4 +269,19 @@ return AjaxResult.success(content); } /** * @param * @return */ @ApiOperation("çä¿¡åé") @AddOrgId @PostMapping("/sendYunMasSms") public AjaxResult sendYunMasSms(@RequestBody smsVO vo) throws Exception { // String yunMasConfig = configService.selectConfigByKey("ls.msg.yunmas",vo.getOrgid()); SmsUtils.YunMasConfig yunMasConfig = new SmsUtils.YunMasConfig(); SmsUtils.SmsResult smsResult = SmsUtils.sendYunMasSms(yunMasConfig, vo.getPhone(), vo.getContent()); return AjaxResult.success(smsResult); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTelInfoController.java
@@ -1,7 +1,7 @@ package com.ruoyi.web.controller.smartor; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.sms.smsUtils; import com.ruoyi.common.utils.sms.SmsUtils; import com.smartor.domain.smsVO; import com.smartor.service.IServiceTaskoperService; import com.smartor.service.IServiceTelInfoService; ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
@@ -11,7 +11,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.sms.smsUtils; import com.ruoyi.common.utils.sms.SmsUtils; import com.smartor.common.MtSubmitSmUtil; import com.smartor.domain.BaseSmsRequest; import com.smartor.domain.BaseSmsaccount; @@ -135,7 +135,7 @@ try { JSONObject jsTemp = JSON.parseObject(baseSmsRequest.getTemplateParam()); String content = jsTemp.getString("name"); sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, baseSmsRequest.getPhoneNumber(), content); sendMsg = SmsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, baseSmsRequest.getPhoneNumber(), content); } catch (Exception ex) { return AjaxResult.error(ex.getMessage()); } ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
@@ -95,7 +95,26 @@ return httpClient; } /** * jsonçpost请æ±ï¼åªå ³å¿æ¯å¦æåï¼é200ç´æ¥æå¼å¸¸ï¼ * * @param url 请æ±url * @param request è¯·æ±æ¥æ * @return åºå®è¿åtrueï¼httpç¶æé200伿HttpRequestExceptionï¼ */ public static Boolean postJsonRequest(String url, String request) throws HttpRequestException { postJsonRequestForString(url, request); return true; } /** * jsonçpost请æ±ï¼è¿åååºæ¥æå 容ï¼ç¨äºéè¦è§£æè¿åç çåºæ¯ï¼å¦äºMASçä¿¡ï¼ * * @param url 请æ±url * @param request è¯·æ±æ¥æ * @return ååºæ¥æå 容 */ public static String postJsonRequestForString(String url, String request) throws HttpRequestException { Assert.hasLength(url, "请æ±urlä¸è½ä¸ºç©ºå符串ã"); EntityEnclosingMethod httpMethod = new PostMethod(url); @@ -132,8 +151,9 @@ String respJson = stringBuffer.toString(); // String respJson = httpMethod.getResponseBodyAsString(); if (resultCode == OK) { return true; return respJson; } else { log.warn("ãpostJsonRequestForStringã请æ±å¤±è´¥ï¼urlï¼{}ï¼ç¶æç ï¼{}ï¼ååºï¼{}", url, resultCode, respJson); throw new HttpRequestException(resultCode, respJson); } } catch (UnsupportedEncodingException e) { ruoyi-common/src/main/java/com/ruoyi/common/utils/sms/SmsUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,336 @@ package com.ruoyi.common.utils.sms; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.annotation.JSONField; import com.ruoyi.common.utils.HttpUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.common.utils.sign.Md5Utils; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * çä¿¡åéå·¥å ·ç±» * * @author ruoyi */ @Slf4j public final class SmsUtils { private SmsUtils() { } /** * äºMAS æ¯æ¹æ¬¡æå¤ææºå·æ°é */ private static final int YUNMAS_MAX_MOBILES = 5000; /** * äºMAS è¿åç 说æ */ private static final Map<String, String> YUNMAS_RSPCOD_DESC = new HashMap<>(); static { YUNMAS_RSPCOD_DESC.put("success", "æ°æ®éªè¯éè¿"); YUNMAS_RSPCOD_DESC.put("IllegalMac", "macæ ¡éªä¸éè¿"); YUNMAS_RSPCOD_DESC.put("IllegalSignId", "æ æçç¾åç¼ç "); YUNMAS_RSPCOD_DESC.put("InvalidMessage", "éæ³æ¶æ¯ï¼è¯·æ±æ°æ®è§£æå¤±è´¥"); YUNMAS_RSPCOD_DESC.put("InvalidUsrOrPwd", "éæ³ç¨æ·å/å¯ç "); YUNMAS_RSPCOD_DESC.put("NoSignId", "æªå¹é å°å¯¹åºçç¾åä¿¡æ¯"); YUNMAS_RSPCOD_DESC.put("TooManyMobiles", "ææºå·æ°éè¶ é(>5000)"); } /** * äºMAS æ¥å£é ç½®ã * <p> * 注æï¼secretKey åªåä¸ mac 计ç®ï¼ä¸è½æ¾è¿è¯·æ±æ¥æã */ @Data public static class YunMasConfig { /** * æ¥å£å°å */ private String url; /** * ä¼ä¸åç§° */ private String ecName; /** * æ¥å£è´¦å·ç¨æ·å */ private String apId; /** * å¯é¥ï¼ä» åä¸ mac 计ç®ï¼ */ private String secretKey; /** * ç¾åç¼ç */ private String sign; /** * æ©å±ç ï¼ç²¾ç¡®å¹é 填空åç¬¦ä¸²ï¼æ¨¡ç³å¹é å¯å¡«ç©ºå符串æèªå®ä¹æ©å±ç ï¼ä¸æå¡ä»£ç å计ä¸è¶ è¿20ä½ï¼ */ private String addSerial; public String getAddSerial() { return addSerial == null ? "" : addSerial; } /** * 丽水å¦å¹¼é»è®¤é ç½®ï¼æªå¨ sys_config ä¸é ç½®æ¶ä½¿ç¨ï¼ */ public static YunMasConfig defaultLishui() { YunMasConfig config = new YunMasConfig(); config.setUrl("http://9.208.5.35:1992/sms/norsubmit"); config.setEcName("丽水å¸å¦å¹¼ä¿å¥é¢"); config.setApId("dxjkkf"); config.setSecretKey("1q2w3e4r5t6y"); config.setSign("D9gKbwdt7"); config.setAddSerial(""); return config; } /** * æ ¹æ®é ç½®å 容ï¼jsonï¼æå»ºï¼æªé ç½®çåæ®µæ²¿ç¨é»è®¤å¼ * * @param configJson å½¢å¦ {"url":"...","ecName":"...","apId":"...","secretKey":"...","sign":"...","addSerial":""} */ public static YunMasConfig of(String configJson) { YunMasConfig config = defaultLishui(); if (StringUtils.isEmpty(configJson)) { return config; } JSONObject json; try { json = JSON.parseObject(configJson); } catch (Exception e) { log.error("ãäºMASãé 置解æå¤±è´¥ï¼ä½¿ç¨é»è®¤é ç½®ï¼é ç½®å 容ï¼{}", configJson, e); return config; } if (json == null) { return config; } if (StringUtils.isNotEmpty(json.getString("url"))) { config.setUrl(json.getString("url")); } if (StringUtils.isNotEmpty(json.getString("ecName"))) { config.setEcName(json.getString("ecName")); } if (StringUtils.isNotEmpty(json.getString("apId"))) { config.setApId(json.getString("apId")); } if (StringUtils.isNotEmpty(json.getString("secretKey"))) { config.setSecretKey(json.getString("secretKey")); } if (StringUtils.isNotEmpty(json.getString("sign"))) { config.setSign(json.getString("sign")); } if (json.containsKey("addSerial")) { config.setAddSerial(json.getString("addSerial")); } return config; } /** * å ³é®åæ°æ¯å¦é½å ¨ */ public boolean isValid() { return StringUtils.isNotEmpty(url) && StringUtils.isNotEmpty(ecName) && StringUtils.isNotEmpty(apId) && StringUtils.isNotEmpty(secretKey) && StringUtils.isNotEmpty(sign); } } /** * çä¿¡åéç»æ */ @Data public static class SmsResult { /** * å¹³å°è¿åçç¶æç ï¼success è¡¨ç¤ºæ ¡éªéè¿ï¼ */ private String rspcod; /** * æ¶æ¯æ¹æ¬¡å·ï¼å¤±è´¥æ¶ä¸ºç©º */ private String msgGroup; /** * å¹³å°è¿åçæ°æ®æ ¡éªç»æ */ private boolean success; /** * æ¬å°å¼å¸¸/失败æè¿°ï¼ä¾¿äºææ¥ */ private String message; /** * æ¯å¦åéæåï¼å¹³å°æ ¡éªéè¿ï¼ */ @JSONField(serialize = false, deserialize = false) public boolean isOk() { return success && "success".equals(rspcod); } public static SmsResult fail(String message) { SmsResult result = new SmsResult(); result.setSuccess(false); result.setMessage(message); return result; } } /** * æå·å¸ä¸å»é¢å´å±±é¢åºæçä¿¡æ¥å£ * * @param url çä¿¡URL * @param userName çä¿¡å¸å· * @param passWord çä¿¡å¯ç * @param phone ææºå·ç»åå¦ 13500000001,13500000002 * @param content çä¿¡å 容 * @return åéç»æ */ public static String sendSms(String url, String userName, String passWord, String phone, String content) { long timestamp = new Date().getTime(); String sign = Md5Utils.hash(userName + timestamp + Md5Utils.hash(passWord)); content = "ãæå·å¸è¿ç¤å»é¢ã" + content; String jsonMsg = "{" + "\"userName\": \"" + userName + "\"," + "\"content\": \"" + content + "\"," + "\"phoneList\": [" + phone + "]," + "\"timestamp\": " + timestamp + "," + "\"sign\": \"" + sign + "\"" + "}"; Boolean sendMsg = HttpUtil.postJsonRequest(url, jsonMsg); return sendMsg.toString(); } /** * æå·å¸ä¸å»é¢æ¹æ»¨é¢åºæçä¿¡æ¥å£ * * @param url çä¿¡URL * @param userName çä¿¡å¸å· * @param passWord çä¿¡å¯ç * @param phone ææºå·ç»åå¦ 13500000001,13500000002 * @param content çä¿¡å 容 * @return åéç»æ */ public static String sendSms1(String url, String userName, String passWord, String phone, String content) { long timestamp = new Date().getTime(); String sign = Md5Utils.hash(userName + timestamp + Md5Utils.hash(passWord)); content = "ãæå·å¸ç¬¬ä¸äººæ°å»é¢ã" + content; String jsonMsg = "{" + "\"userName\": \"" + userName + "\"," + "\"content\": \"" + content + "\"," + "\"phoneList\": [" + phone + "]," + "\"timestamp\": " + timestamp + "," + "\"sign\": \"" + sign + "\"" + "}"; Boolean sendMsg = HttpUtil.postJsonRequest(url, jsonMsg); return sendMsg.toString(); } /** * ä¸å½ç§»å¨äºMAS æ®éçä¿¡åéï¼ä¸å¯¹ä¸/å¤å¯¹ä¸æ¨¡å¼ï¼ * <p> * æ¥å£ï¼POST {url}ï¼æ¥æä¸º json ç base64 ç¼ç ã * <ul> * <li>mac æ ecNameãapIdãsecretKeyãmobilesãcontentãsignãaddSerial é¡ºåºæ¼æ¥åå MD5ï¼32ä½å°åï¼</li> * <li>secretKey åªåä¸ mac 计ç®ï¼ä¸æ¾è¿è¯·æ±æ¥æ</li> * <li>ç¾åç±å¹³å°æ ¹æ® sign ç¼ç èªå¨è¿½å ï¼content ä¸ä¸è¦åæå·¥æ¼ãç¾åã</li> * </ul> * * @param config äºMAS é ç½® * @param mobiles æ¶ä¿¡ææºå·ï¼è±æéå·åéï¼å¦ 13800138000,13800138001ï¼æ¯æ¹ä¸è¶ è¿ 5000 个 * @param content çä¿¡å 容ï¼mac ç¨æç»å 容计ç®ï¼è®¡ç®åä¸å¾åä¿®æ¹ï¼ * @return åéç»æï¼éè¿ {@link SmsResult#isOk()} 夿æ¯å¦æå */ public static SmsResult sendYunMasSms(YunMasConfig config, String mobiles, String content) { if (config == null || !config.isValid()) { return SmsResult.fail("äºMASé ç½®ä¸å®æ´"); } if (StringUtils.isEmpty(mobiles)) { return SmsResult.fail("æ¶ä¿¡ææºå·ä¸è½ä¸ºç©º"); } if (StringUtils.isEmpty(content)) { return SmsResult.fail("çä¿¡å 容ä¸è½ä¸ºç©º"); } if (mobiles.split(",").length > YUNMAS_MAX_MOBILES) { return SmsResult.fail("ææºå·æ°éè¶ é(>" + YUNMAS_MAX_MOBILES + ")"); } String addSerial = config.getAddSerial(); // 1. mac å¿ é¡»ç¨æ¥æéæç»åéçå å®¹è®¡ç® String mac = Md5Utils.hash(config.getEcName() + config.getApId() + config.getSecretKey() + mobiles + content + config.getSign() + addSerial); // 2. ç¨ json ç»è£ æ¥æï¼é¿å å 容ä¸çå¼å·/åææ ç ´åæ¥æï¼secretKey ä¸è½æ¥æ JSONObject body = new JSONObject(true); body.put("ecName", config.getEcName()); body.put("apId", config.getApId()); body.put("mobiles", mobiles); body.put("content", content); body.put("sign", config.getSign()); body.put("addSerial", addSerial); body.put("mac", mac); String requestBody = Base64.getEncoder() .encodeToString(body.toJSONString().getBytes(StandardCharsets.UTF_8)); try { String resp = HttpUtil.postJsonRequestForString(config.getUrl(), requestBody); log.info("ãäºMASãåéçä¿¡ï¼ææºå·ï¼{}ï¼ååºï¼{}", mobiles, resp); if (StringUtils.isEmpty(resp)) { return SmsResult.fail("äºMASååºä¸ºç©º"); } SmsResult result = JSON.parseObject(resp, SmsResult.class); if (result == null) { return SmsResult.fail("äºMASååºè§£æå¤±è´¥ï¼" + resp); } if (!result.isOk()) { String desc = YUNMAS_RSPCOD_DESC.getOrDefault(result.getRspcod(), "æªç¥é误"); result.setMessage(desc); log.error("ãäºMASãåéå¤±è´¥ï¼ææºå·ï¼{}ï¼rspcodï¼{}ï¼{}ï¼ï¼ååºï¼{}", mobiles, result.getRspcod(), desc, resp); } return result; } catch (Exception e) { log.error("ãäºMASãåéå¼å¸¸ï¼ææºå·ï¼{}ï¼åå ï¼{}", mobiles, e.getMessage(), e); return SmsResult.fail("äºMASåéå¼å¸¸ï¼" + e.getMessage()); } } /** * æå·å¸ä¸å»é¢å´å±±é¢åºå¾®ä¿¡æ¥å£ * * @param url 微信URL * @param phone ææºå· 13500000001 * @param idCard èº«ä»½è¯ * @return åéç»æ */ public static String sendChat(String url, String phone, String idCard) { String urlTemp = "http://192.200.54.14:5003/sfjk/SendMessage?sfzh=" + idCard + "&title=æ¨å¥½ï¼é请æ¨å¡«ååºé¢è°æ¥è¡¨ï¼è¯·ç¹å»å¡«åã&content=å¾ é访&phone=" + phone + "&url=" + url + "&key=ff76f8904f5f32b5ee1739e8ea46e60g"; String sendMsg = ""; try { log.info("ãsendChatãå¸ä¸å¾®ä¿¡å ¬ä¼å·è¯·æ±åæ°ï¼{}", urlTemp); sendMsg = HttpUtils.sendPost(urlTemp); log.info("ãsendChatãå¸ä¸å¾®ä¿¡å ¬ä¼å·è¿åå¼ï¼{}", sendMsg); } catch (Exception ex) { sendMsg = ex.getMessage(); log.error(ex.getMessage()); } return sendMsg; } } ruoyi-common/src/main/java/com/ruoyi/common/utils/sms/smsUtils.java
ÎļþÒÑɾ³ý ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -17,7 +17,7 @@ import com.ruoyi.common.enums.WxGZHEnum; import com.ruoyi.common.utils.*; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.common.utils.sms.smsUtils; import com.ruoyi.common.utils.sms.SmsUtils; import com.ruoyi.quartz.service.ICollectHISService; import com.ruoyi.quartz.util.CreateDataTable; import com.ruoyi.system.domain.SysConfig; @@ -1003,6 +1003,24 @@ } /** * ææºææ¥è¯¢é ç½®å¼ï¼åä¸ key å¨ä¸åæºæä¸å¯é ç½®ä¸åå¼ï¼ * * @param configKey é ç½®key * @param orgid æºæID * @return é ç½®å¼ï¼æªé ç½®è¿å null */ private String getConfigValue(String configKey, String orgid) { SysConfig query = new SysConfig(); query.setConfigKey(configKey); query.setOrgid(orgid); List<SysConfig> sysConfigs = configService.selectConfigList(query); if (CollectionUtils.isNotEmpty(sysConfigs)) { return sysConfigs.get(0).getConfigValue(); } return null; } /** * é访-è¡¥å¿å¤ç * * @param serviceSubtask @@ -1210,33 +1228,48 @@ // String url = configService.selectConfigByKey("token.360", serviceSubtask.getOrgid()); // //丽水ççä¿¡åéæ¹å¼ // Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid()); SysConfig config = new SysConfig(); config.setConfigKey("ls.msg.info"); config.setOrgid(serviceSubtask.getOrgid()); List<SysConfig> sysConfigs = configService.selectConfigList(config); Map<String, String> msgInfo = new HashMap<>(); if (CollectionUtils.isNotEmpty(sysConfigs)) { String configValue = sysConfigs.get(0).getConfigValue(); if ("47226079133110211G1001".equals(serviceSubtask.getOrgid())) { // å¦å¹¼ä¸å½ç§»å¨äºMASï¼ä¸ä¾èµ ls.msg.info ä¸ token SmsUtils.YunMasConfig yunMasConfig = SmsUtils.YunMasConfig.of(getConfigValue("ls.msg.yunmas", serviceSubtask.getOrgid())); SmsUtils.SmsResult smsResult = SmsUtils.sendYunMasSms(yunMasConfig, sendMagParam.getPhone(), sendMagParam.getContent()); log.info("ãsfHandlleãäºMASçä¿¡åéç»æï¼ok={}ï¼rspcod={}ï¼msgGroup={}ï¼message={}", smsResult.isOk(), smsResult.getRspcod(), smsResult.getMsgGroup(), smsResult.getMessage()); if (smsResult.isOk()) { isSuccess = "true"; } else { log.error("ãsfHandlleãäºMASçä¿¡åé失败ï¼subidï¼{}ï¼ææºå·ï¼{}ï¼åå ï¼{}", serviceSubtask.getId(), sendMagParam.getPhone(), smsResult.getMessage()); } } else { SysConfig config = new SysConfig(); config.setConfigKey("ls.msg.info"); config.setOrgid(serviceSubtask.getOrgid()); List<SysConfig> sysConfigs = configService.selectConfigList(config); Map<String, String> msgInfo = new HashMap<>(); if (CollectionUtils.isNotEmpty(sysConfigs)) { String configValue = sysConfigs.get(0).getConfigValue(); ObjectMapper objectMapper = new ObjectMapper(); if (StringUtils.isNotEmpty(configValue)) { msgInfo = objectMapper.readValue(configValue, Map.class); } } log.info("-----------mapçå¼ä¸ºï¼{}", msgInfo); if (ObjectUtils.isEmpty(msgInfo) || StringUtils.isEmpty(msgInfo.get("address"))) { setSuccessPreachForm(serviceSubtask, sendPreachform, "çä¿¡åé失败,è¯¥æºææ²¡æé ç½®çä¿¡å°å, æ¶é´:" + now, "5"); return; } String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(), msgInfo.get("tokenUrl")); log.info("ãsfHandlleã丽水çä¿¡åéï¼å°åï¼{}ï¼åæ°ï¼{}ï¼æºæIDï¼{}", msgInfo.get("address"), sendMagParam, serviceSubtask.getOrgid()); String dxCode = getDXCode(msgInfo.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), msgInfo.get("sendPersonId"), msgInfo.get("sendPersonName"), MsgLSEnum.getHeaderByCode(msgInfo), token); log.info("ãsfHandlleã丽水çä¿¡åéç»æï¼{}", dxCode); ObjectMapper objectMapper = new ObjectMapper(); if (StringUtils.isNotEmpty(configValue)) { msgInfo = objectMapper.readValue(configValue, Map.class); Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class); String code = textParam.get("Code").toString(); if (code.equals("0")) { isSuccess = "true"; } } log.info("-----------mapçå¼ä¸ºï¼{}", msgInfo); String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(), msgInfo.get("tokenUrl")); if (ObjectUtils.isNotEmpty(msgInfo) && StringUtils.isEmpty(msgInfo.get("address"))) { setSuccessPreachForm(serviceSubtask, sendPreachform, "çä¿¡åé失败,è¯¥æºææ²¡æé ç½®çä¿¡å°å, æ¶é´:" + now, "5"); return; } log.info("ãsfHandlleã丽水çä¿¡åéï¼å°åï¼{}ï¼åæ°ï¼{}ï¼æºæIDï¼{}", msgInfo.get("address"), sendMagParam, serviceSubtask.getOrgid()); String dxCode = getDXCode(msgInfo.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), msgInfo.get("sendPersonId"), msgInfo.get("sendPersonName"), MsgLSEnum.getHeaderByCode(msgInfo), token); log.info("ãsfHandlleã丽水çä¿¡åéç»æï¼{}", dxCode); ObjectMapper objectMapper = new ObjectMapper(); Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class); String code = textParam.get("Code").toString(); if (code.equals("0")) { isSuccess = "true"; } } else if (active.equals("sltd") || active.equals("nhfy")) { log.info("sltdè¿æ¥äºåï¼{} ,---sendMagParam.getContent()çåæ°ä¸ºï¼{}", active, sendMagParam.getContent()); if (active.equals("sltd")) { @@ -1284,13 +1317,13 @@ String campusid = ObjectUtils.isNotEmpty(sysDept) ? sysDept.getCampusid() : "2"; //æ¹æ»¨åç¬åéæ¹å¼ if ("1".equals(campusid)) { String result = smsUtils.sendSms1(xhsmsPath, xhsmsAccount, xhsmsPwd, sendMagParam.getPhone(), content); String result = SmsUtils.sendSms1(xhsmsPath, xhsmsAccount, xhsmsPwd, sendMagParam.getPhone(), content); //è¿ééè¦æ ¹æ®resultè¿åçå¼å»å¤æï¼æ¯å¦æåï¼ç¶åå°å¼èµå¼ç»isSuccess if (StringUtils.isNotEmpty(result) && result.contains("å¤çæå")) { isSuccess = "true"; } } else { String result = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, sendMagParam.getPhone(), content); String result = SmsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, sendMagParam.getPhone(), content); //è¿ééè¦æ ¹æ®resultè¿åçå¼å»å¤æï¼æ¯å¦æåï¼ç¶åå°å¼èµå¼ç»isSuccess if (StringUtils.isNotEmpty(result) && result.contains("å¤çæå")) { isSuccess = "true"; @@ -1372,7 +1405,7 @@ //å¸ä¸å»é¢ if (active.equals("hzszlyy")) { //å¤ç䏿乱ç é®é¢ wxCode = smsUtils.sendChat(url, patArchive.getTelcode(), serviceSubtask.getSfzh()); wxCode = SmsUtils.sendChat(url, patArchive.getTelcode(), serviceSubtask.getSfzh()); } else { wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), patArchive.getTelcode(), serviceSubtask.getSendname(), patArchive.getPatidHis(), wxqqxx); } @@ -1874,7 +1907,16 @@ /** * å¤çè¶ æ¶éè®¿ä»»å¡ * @return * <p> * æ«æãåºé¢æ»¡ deadlineDay 天仿ªå®æãç馿¬¡é访任å¡ï¼sendstate=7 + visit_count=1ï¼ï¼ * æå½åä»»å¡ç nexttaskid çæå次é访任å¡å¹¶è½¬å°é访ä¸å¿ã * <p> * 注æï¼æªæ¢æ¶é´å¿ é¡»å¨å¾ªç¯å¤è®¡ç®ä¸æ¬¡ãåå²å®ç°æ {@code deadlineDay = -deadlineDay} * åå¨å¾ªç¯ä½å ï¼æ¯è½®åå䏿¬¡ï¼å¯¼è´å¶æ°è½®ç¨ãä»å¤© + deadlineDayãåæªæ¢æ¶é´ï¼ * æåºé¢ä¸æ»¡ 28 天çè¶ æ¶ä»»å¡ä¹æ«äºè¿æ¥ã * * @param orgid æºæID * @param deadlineDay åºé¢æ»¡å¤å°å¤©ç®è¶ æ¶ï¼æ£æ°ï¼å¦ 28ï¼ */ public void dealSubtaskDeadline(String orgid, Integer deadlineDay){ //è·åä»»å¡ä¿¡æ¯ @@ -1885,24 +1927,16 @@ st.setOrgid(orgid); List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); // é访ä¸å¿ç§å®¤ String centerDept = configService.selectConfigByKey("sys.smartor.center.dept", orgid); SysDept sysDeptVo = new SysDept(); SysDept centerSysDept = null; if(StringUtils.isNotEmpty(centerDept)){ sysDeptVo.setDeptType("1"); sysDeptVo.setOrgid(orgid); sysDeptVo.setDeptCode(centerDept); List<SysDept> sysDepts = sysDeptService.selectDeptList(sysDeptVo); if (CollectionUtils.isNotEmpty(sysDepts)) { centerSysDept = sysDepts.get(0); } } // æªæ¢æ¶é´åªç®ä¸æ¬¡ï¼åºé¢æ¶é´ <= ä»å¤© - deadlineDay int days = Math.abs(ObjectUtils.isEmpty(deadlineDay) ? 28 : deadlineDay); Date deadline = DateUtils.addDays(new Date(), -days); log.info("ãdealSubtaskDeadlineãå¼å§æ«æ, orgid={}, day={}, deadline={}, 任塿°={}", orgid, days, deadline, serviceTasks.size()); String config = configService.selectConfigByKey("visit.early.day"); for (ServiceTask serviceTask : serviceTasks) { deadlineDay = -deadlineDay; Date deadline = DateUtils.addDays(new Date(), deadlineDay); if (ObjectUtils.isEmpty(serviceTask.getNexttaskid())) { continue; } //éè¿ä»»å¡IDæ¿å°æ£è ä¿¡æ¯,å¹¶ä¸é访æ¶é´å¾æ¯ä»å¤©ä¹åç ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity(); serviceSubtaskVO.setOrgid(orgid); @@ -1916,46 +1950,15 @@ = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); log.info("ãdealSubtaskDeadlineãè·åå°{}ä¸ªè¶ æ¶ä»»å¡, taskid={}", serviceSubtaskList.size(), serviceTask.getTaskid()); for (ServiceSubtask serviceSubtask : serviceSubtaskList) { PatMedInhosp patMedInhospVo = new PatMedInhosp(); patMedInhospVo.setOrgid(serviceSubtask.getOrgid()); patMedInhospVo.setInhospid(serviceSubtask.getInhospid()); patMedInhospVo.setCry(1); List<PatMedInhosp> patMedInhospList = iPatMedInhospService.selectPatMedInhospList(patMedInhospVo); PatMedInhosp patMedInhosp = new PatMedInhosp(); if (!patMedInhospList.isEmpty()) { patMedInhosp = patMedInhospList.get(0); }else { continue; } if(ObjectUtils.isEmpty(serviceTask.getNexttaskid())){ continue; } ServiceTask nextServiceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceTask.getNexttaskid()); PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid()); Integer type = 1; //æ°å¢å次éè®¿ä»»å¡ ServiceSubtask serviceSubtaskAgain = iPatMedInhospService.boxedServiceSubtask(nextServiceTask, patMedInhosp, patArchive, config, type); serviceSubtaskAgain.setId(null); serviceSubtaskAgain.setUpid(serviceSubtask.getId().intValue()); serviceSubtaskAgain.setVisitCount(serviceSubtask.getVisitCount() + 1); serviceSubtaskAgain.setSendstate(2L); serviceSubtaskAgain.setCreateTime(new Date()); serviceSubtaskAgain.setUpdateTime(new Date()); serviceSubtaskAgain.setVisitType(serviceSubtask.getVisitType()); if(ObjectUtils.isNotEmpty(centerSysDept)){ serviceSubtaskAgain.setVisitDeptCode(centerSysDept.getDeptCode()); serviceSubtaskAgain.setVisitDeptName(centerSysDept.getDeptName()); }else { serviceSubtaskAgain.setVisitDeptCode(serviceSubtask.getVisitDeptCode()); serviceSubtaskAgain.setVisitDeptName(serviceSubtask.getVisitDeptName()); } int i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtaskAgain); if (i == 1) { //忬¡é访任å¡å建æååï¼å任塿¹ä¸ºå¤±è´¥ç¶æ serviceSubtask.setSendstate(5L); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); try { // çæé»è¾ç»ä¸æ¶å£å° serviceï¼é + å¹ç + äºå¡ + å鿹弿ç»åå§å String result = iServiceSubtaskService.addSubTaskAgainByDeadline(serviceSubtask); log.info("ãdealSubtaskDeadlineãçæå次é访, subId={}, taskid={}, ç»æ={}", serviceSubtask.getId(), serviceTask.getTaskid(), result); } catch (Exception e) { // åæ¡å¤±è´¥ä¸å½±åå ¶ä»æ£è log.error("ãdealSubtaskDeadlineãçæå次é访失败, subId=" + serviceSubtask.getId() + ", taskid=" + serviceTask.getTaskid(), e); } } } smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
@@ -165,6 +165,12 @@ private String excep; /** * 宿æ¶ç¶æ - è¶ é¾æ¥ç»è®¡ï¼1-æ£å¸¸å®æ 2-å»¶æå®æ 3-è¶ æ¶å®æï¼ */ @ApiModelProperty(value = "宿æ¶ç¶æï¼1æ£å¸¸å®æ 2å»¶æå®æ 3è¶ æ¶å®æ") private Long finishState; /** * å½ååéæ¹å¼ - è¶ é¾æ¥ç»è®¡ */ @ApiModelProperty("å½ååéæ¹å¼") smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
@@ -125,6 +125,10 @@ @Excel(name = " 馿¬¡é访失败 ") private Long followUpFail = 0L; @ApiModelProperty(value = "åæ¶é访人次ï¼å·²å®æä¸æªè¶ æ¶ï¼finish_state=1ï¼") @Excel(name = " åæ¶é访人次 ") private Long timelyFollowUp = 0L; @ApiModelProperty(value = "åºé¢äººæ¬¡è¯¦æ ") private List<ServiceSubtask> dischargeCountInfo; @@ -146,6 +150,9 @@ @ApiModelProperty(value = "馿¬¡é访失败详æ ") private List<ServiceSubtask> followUpFailInfo; @ApiModelProperty(value = "åæ¶é访详æ ") private List<ServiceSubtask> timelyFollowUpInfo; @ApiModelProperty(value = "馿¬¡é访人工详æ ") private List<ServiceSubtask> manualInfo; smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -88,6 +88,16 @@ public String addSubTaskAgain(ServiceSubtask ServiceSubtask); /** * 馿¬¡é访任å¡è¶ æ¶åï¼æä¸ä¸ä»»å¡èªå¨çæå次é访任å¡ï¼é访ä¸å¿ï¼ã * <p> * 䏿å¨å ¥å£çå·®å¼ï¼é访ä¸å¿ç§å®¤æªé ç½®æ¶åéåä»»å¡ç§å®¤ï¼åä¸åä»»å¡åªçæä¸æ¡ï¼é + æ¡ä»¶æ´æ°å¹çï¼ã * * @param serviceSubtask å·²è¶ æ¶ç馿¬¡é访åä»»å¡ * @return ç»ææè¿° */ public String addSubTaskAgainByDeadline(ServiceSubtask serviceSubtask); /** * ä¿®æ¹åä¸ä»»å¡ï¼éè®¿ï¼ * * @param ServiceSubtask åä¸ä»»å¡ï¼éè®¿ï¼ smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -14,7 +14,7 @@ import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.*; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.common.utils.sms.smsUtils; import com.ruoyi.common.utils.sms.SmsUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; @@ -964,6 +964,136 @@ } finally { unlockAgainTask(serviceSubtask.getId(), lockToken); } } /** * 馿¬¡é访任å¡è¶ æ¶åï¼æä¸ä¸ä»»å¡èªå¨çæå次é访任å¡ï¼é访ä¸å¿ï¼ã * <p> * 宿¶ä»»å¡å ¥å£ {@code RyTask#dealSubtaskDeadline} 使ç¨ã䏿å¨å ¥å£ä¸è´çé¨åï¼ * 表å/åéæ¹å¼åä¸ä¸ä»»å¡ãé¾è·¯ upid + visit_countãå鿹弿ç»åå§åï¼ * å·®å¼ï¼é访ä¸å¿ç§å®¤æªé ç½®æ¶åéåä»»å¡ç§å®¤ï¼åä»»å¡ç½®ä¸ºåé失败ï¼sendstate=5ï¼ã * <p> * å¹çï¼åä¸åä»»å¡åªå 许çæä¸æ¡å次é访ï¼Redis é + upid æ ¡éª + å任塿¡ä»¶æ´æ°ï¼ï¼ * å¤èç¹/å¤çº¿ç¨åæ¶æ«ææ¶ï¼åå°çäºå¡ä¼å¨æ¡ä»¶æ´æ°å¤æ¿å° 0 è¡å¹¶åæ»æ¬æ¬¡æå ¥ã * * @param serviceSubtask å·²è¶ æ¶ç馿¬¡é访åä»»å¡ * @return ç»ææè¿° */ @Override @Transactional(rollbackFor = Exception.class) public String addSubTaskAgainByDeadline(ServiceSubtask serviceSubtask) { if (ObjectUtils.isEmpty(serviceSubtask) || ObjectUtils.isEmpty(serviceSubtask.getId())) { return "忬¡é访任å¡å建失败ï¼åä»»å¡ä¸åå¨"; } String lockToken = tryLockAgainTask(serviceSubtask.getId()); if (lockToken == null) { return "忬¡éè®¿ä»»å¡æ£å¨å建ä¸ï¼è¯·å¿éå¤æäº¤"; } try { // å¹çæ ¡éªï¼åä¸åä»»å¡åªå 许çæä¸æ¡å次é访 ServiceSubtaskEntity againQuery = new ServiceSubtaskEntity(); againQuery.setUpid(serviceSubtask.getId().intValue()); if (CollectionUtils.isNotEmpty(serviceSubtaskMapper.selectServiceSubtaskList(againQuery))) { return "æ é忬¡é访ï¼è¯¥ä»»å¡å·²ç»å次é访è¿äº"; } // åä»»å¡å·²è¢«æ 记为ä¸åéè®¿ï¼æå¨å ¥å£åè¿ is_visit_again=2ï¼ if (ObjectUtils.isNotEmpty(serviceSubtask.getIsVisitAgain()) && serviceSubtask.getIsVisitAgain() == 2) { return "æ é忬¡é访ï¼è¯¥ä»»å¡å·²ç»å次é访è¿äº"; } ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); if (ObjectUtils.isEmpty(serviceTask)) { return "忬¡é访任å¡åå»ºå¤±è´¥ï¼æ¾ä¸å°å¯¹åºä»»å¡ taskid = " + serviceSubtask.getTaskid(); } if (ObjectUtils.isEmpty(serviceTask.getNexttaskid())) { return "忬¡é访任å¡å建失败ï¼ä»»å¡ç¼ºå° nexttaskid, taskid = " + serviceSubtask.getTaskid(); } ServiceTask nextServiceTask = serviceTaskService.selectServiceTaskByTaskid(serviceTask.getNexttaskid()); if (ObjectUtils.isEmpty(nextServiceTask)) { return "忬¡é访任å¡åå»ºå¤±è´¥ï¼æ¾ä¸å°å¯¹åºä»»å¡ nexttaskid = " + serviceTask.getNexttaskid(); } PatMedInhosp patMedInhosp = selectOutHospRecord(serviceSubtask); if (ObjectUtils.isEmpty(patMedInhosp)) { return "忬¡é访任å¡å建失败ï¼ä»»å¡ç¼ºå°å¯¹åºçåºé¢è®°å½, taskid = " + serviceSubtask.getTaskid(); } PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid()); if (ObjectUtils.isEmpty(patArchive)) { return "忬¡é访任å¡åå»ºå¤±è´¥ï¼æªæ¾å°æ£è æ¡£æ¡, subTaskId = " + serviceSubtask.getId(); } // é访ä¸å¿ç§å®¤ï¼æªé ç½®ï¼æç§å®¤ä¸åå¨ï¼æ¶åéåä»»å¡ç§å®¤ï¼ä¿æè¶ æ¶å ¥å£åæè¡ä¸º SysDept visitDept = selectCenterDept(serviceSubtask.getOrgid()); String config = configService.selectConfigByKey("visit.early.day"); ServiceSubtask serviceSubtaskAgain = patMedInhospService.boxedServiceSubtask(nextServiceTask, patMedInhosp, patArchive, config, 1); if (ObjectUtils.isEmpty(serviceSubtaskAgain) || ObjectUtils.isEmpty(serviceSubtaskAgain.getTaskid())) { return "忬¡é访任å¡åå»ºå¤±è´¥ï¼æ£è åºé¢è®°å½ä¸å®æ´æä¸ä¸ä»»å¡é ç½®å¼å¸¸, subTaskId = " + serviceSubtask.getId(); } Date now = new Date(); serviceSubtaskAgain.setId(null); serviceSubtaskAgain.setUpid(serviceSubtask.getId().intValue()); serviceSubtaskAgain.setVisitCount(ObjectUtils.isNotEmpty(serviceSubtask.getVisitCount()) ? serviceSubtask.getVisitCount() + 1 : 2); serviceSubtaskAgain.setSendstate(2L); serviceSubtaskAgain.setIsVisitAgain(1); serviceSubtaskAgain.setCreateTime(now); serviceSubtaskAgain.setUpdateTime(now); serviceSubtaskAgain.setVisitType(serviceSubtask.getVisitType()); if (ObjectUtils.isNotEmpty(visitDept)) { serviceSubtaskAgain.setVisitDeptCode(visitDept.getDeptCode()); serviceSubtaskAgain.setVisitDeptName(visitDept.getDeptName()); } else { serviceSubtaskAgain.setVisitDeptCode(serviceSubtask.getVisitDeptCode()); serviceSubtaskAgain.setVisitDeptName(serviceSubtask.getVisitDeptName()); } if (serviceSubtaskMapper.insertServiceSubtask(serviceSubtaskAgain) != 1) { return "忬¡é访任å¡å建失败ï¼å请次éè¯"; } // åå§åå鿹弿ç»ï¼è¡¥å¿ï¼compensateTaskï¼åè¶ æ¶å¤æä¾èµè¯¥è¡¨ patMedInhospService.addServiceSubtaskPreachform(serviceSubtaskAgain, null); // æ¡ä»¶æ´æ°åä»»å¡ï¼0 è¡è¯´æå·²è¢«å ¶ä»è¯·æ±çæï¼æå¼å¸¸åæ»æ¬æ¬¡æå ¥çé夿°æ® if (serviceSubtaskMapper.updateIsVisitAgainById(serviceSubtask.getId(), 2) != 1) { throw new BaseException("æ é忬¡é访ï¼è¯¥ä»»å¡å·²ç»å次é访è¿äº"); } // åä»»å¡è¶ æ¶ï¼ç½®ä¸ºåé失败 ServiceSubtask originUpdate = new ServiceSubtask(); originUpdate.setId(serviceSubtask.getId()); originUpdate.setSendstate(5L); originUpdate.setUpdateTime(now); serviceSubtaskMapper.updateServiceSubtask(originUpdate); return "忬¡é访任å¡å建æå"; } finally { unlockAgainTask(serviceSubtask.getId(), lockToken); } } /** * æ orgid + inhospid ååºé¢è®°å½ï¼è¶ æ¶å次é访ç¨ï¼ã */ private PatMedInhosp selectOutHospRecord(ServiceSubtask serviceSubtask) { PatMedInhosp patMedInhospVo = new PatMedInhosp(); patMedInhospVo.setOrgid(serviceSubtask.getOrgid()); patMedInhospVo.setInhospid(serviceSubtask.getInhospid()); patMedInhospVo.setCry(1); List<PatMedInhosp> patMedInhospList = patMedInhospService.selectPatMedInhospList(patMedInhospVo); if (CollectionUtils.isEmpty(patMedInhospList)) { return null; } return patMedInhospList.get(0); } /** * åé访ä¸å¿ç§å®¤ï¼æªé ç½®æç§å®¤ä¸å卿¶è¿å nullï¼ç±è°ç¨æ¹åéåä»»å¡ç§å®¤ï¼ã */ private SysDept selectCenterDept(String orgid) { String centerDept = configService.selectConfigByKey("sys.smartor.center.dept", orgid); if (StringUtils.isEmpty(centerDept)) { return null; } SysDept sysDeptVo = new SysDept(); sysDeptVo.setDeptType("1"); sysDeptVo.setOrgid(orgid); sysDeptVo.setDeptCode(centerDept); List<SysDept> sysDepts = sysDeptService.selectDeptList(sysDeptVo); return CollectionUtils.isEmpty(sysDepts) ? null : sysDepts.get(0); } /** @@ -3488,6 +3618,10 @@ if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) { serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L); } //åæ¶é访人次ï¼å·²å®æä¸æªè¶ æ¶ if (isTimelyFollowUp(serviceSubtask)) { serviceSubtaskStatistic.setTimelyFollowUp(serviceSubtaskStatistic.getTimelyFollowUp() + 1L); } //人工已æ¨éæ»é if (ObjectUtils.isNotEmpty(serviceSubtask.getIsManuallyCalled()) @@ -3756,6 +3890,19 @@ } /** * æ¯å¦å±äºãåæ¶é访ãï¼éè®¿å·²å®æä¸å®ææ¶ç¶æä¸ºæ£å¸¸å®æï¼æªè¶ æ¶ï¼ã * <p> * finish_stateï¼1-æ£å¸¸å®æ 2-å»¶æå®æ 3-è¶ æ¶å®æï¼åªæ 1 è®¡å ¥åæ¶é访ã * * @param serviceSubtask é访åä»»å¡ * @return true-è®¡å ¥åæ¶é访人次 */ private boolean isTimelyFollowUp(ServiceSubtask serviceSubtask) { return serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate().equals(6L) && serviceSubtask.getFinishState() != null && serviceSubtask.getFinishState().equals(1L); } /** * 馿¬¡é访ç»è®¡ * * @param serviceSubtaskList @@ -3786,6 +3933,10 @@ //åºé访人次 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) { serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L); } //åæ¶é访人次ï¼å·²å®æä¸æªè¶ æ¶ if (isTimelyFollowUp(serviceSubtask)) { serviceSubtaskStatistic.setTimelyFollowUp(serviceSubtaskStatistic.getTimelyFollowUp() + 1L); } //馿¬¡åºé¢é访 @@ -3955,6 +4106,10 @@ //åºé访人次 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) { serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L); } //åæ¶é访人次ï¼å·²å®æä¸æªè¶ æ¶ if (isTimelyFollowUp(serviceSubtask)) { serviceSubtaskStatistic.setTimelyFollowUp(serviceSubtaskStatistic.getTimelyFollowUp() + 1L); } //忬¡åºé¢é访 @@ -4486,6 +4641,7 @@ * pendingFollowUpInfo - visitCount = 1 && sendstate = 2 * followUpSuccessInfo - visitCount = 1 && sendstate = 6 * followUpFailInfo - visitCount = 1 && (sendstate = 5 || sendstate = 7) * timelyFollowUpInfo - sendstate = 6 && finish_state = 1ï¼æ²¿ç¨è¯·æ±ç visitCount å£å¾ï¼ * manualInfo - visitCount = 1 && currentPreachForm = "1" * voiceInfo - visitCount = 1 && currentPreachForm = "3" * smsInfo - visitCount = 1 && currentPreachForm = "4" @@ -4544,14 +4700,22 @@ } private void applyHyperLinkInfoType(ServiceSubtaskCountReq serviceSubtaskCountReq, String hyperLinkInfoType) { //åæ¶é访æç»éè¦æ²¿ç¨è¯·æ±ç馿¬¡/忬¡å£å¾ Integer originVisitCount = serviceSubtaskCountReq.getVisitCount(); serviceSubtaskCountReq.setVisitCount(null); serviceSubtaskCountReq.setSendstates(null); serviceSubtaskCountReq.setCurrentPreachform(null); serviceSubtaskCountReq.setExcep(null); serviceSubtaskCountReq.setTaskSituation(null); serviceSubtaskCountReq.setFinishState(null); switch (hyperLinkInfoType) { case "dischargeCountInfo": break; case "timelyFollowUpInfo": serviceSubtaskCountReq.setVisitCount(originVisitCount); serviceSubtaskCountReq.setSendstates(new ArrayList<>(Collections.singletonList(6L))); serviceSubtaskCountReq.setFinishState(1L); break; case "followUpNeededAllInfo": serviceSubtaskCountReq.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 6L, 7L))); @@ -5021,6 +5185,7 @@ total.setPendingFollowUp(0L); total.setFollowUpSuccess(0L); total.setFollowUpFail(0L); total.setTimelyFollowUp(0L); total.setManual(0L); total.setSms(0L); total.setWeChat(0L); @@ -5052,6 +5217,7 @@ total.setPendingFollowUp(total.getPendingFollowUp() + (stat.getPendingFollowUp() != null ? stat.getPendingFollowUp() : 0L)); total.setFollowUpSuccess(total.getFollowUpSuccess() + (stat.getFollowUpSuccess() != null ? stat.getFollowUpSuccess() : 0L)); total.setFollowUpFail(total.getFollowUpFail() + (stat.getFollowUpFail() != null ? stat.getFollowUpFail() : 0L)); total.setTimelyFollowUp(total.getTimelyFollowUp() + (stat.getTimelyFollowUp() != null ? stat.getTimelyFollowUp() : 0L)); total.setManual(total.getManual() + (stat.getManual() != null ? stat.getManual() : 0L)); total.setSms(total.getSms() + (stat.getSms() != null ? stat.getSms() : 0L)); total.setWeChat(total.getWeChat() + (stat.getWeChat() != null ? stat.getWeChat() : 0L)); smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -255,7 +255,7 @@ from service_subtask </sql> <!-- 宿æ¶ç¶æ(finish_state)计ç®ï¼ä» 彿¬æ¬¡æ´æ°æ sendstate 置为 6ï¼éè®¿å®æï¼æ¶ä½¿ç¨ã <!-- è¶ æ¶å®æãå»¶æå®æé»è¾ 宿æ¶ç¶æ(finish_state)计ç®ï¼ä» 彿¬æ¬¡æ´æ°æ sendstate 置为 6ï¼éè®¿å®æï¼æ¶ä½¿ç¨ã åºåæªæ¢æ¶é´ base = endtime + send_day(缺ç1) + (Σ service_subtask_preachform.compensate_time + 1) å¤©ï¼ ä¸ RyTask/RedisMqReceiver ç isSubtaskDeadline å£å¾ä¿æä¸è´ï¼ delay = COALESCE(service_task.delay_finish_days, 0)ï¼ @@ -1681,6 +1681,7 @@ continue_count, continue_time_next, task_situation, finish_state, is_manually_called from service_subtask where 1=1 @@ -1970,6 +1971,7 @@ task_situation, remark, doctor_opinion, finish_state, is_manually_called from service_subtask where 1=1 @@ -2052,6 +2054,9 @@ <if test="taskSituation != null"> AND task_situation = #{taskSituation} </if> <if test="finishState != null"> AND finish_state = #{finishState} </if> <if test="drcode != null and drcode != ''"> AND drcode = #{drcode} </if>