已删除16个文件
已重命名34个文件
已修改18个文件
已添加144个文件
已复制1个文件
| | |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- æ¶æ¯åéï¼çä¿¡/微信å
¬ä¼å·ï¼æ¨¡å --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-message</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | </dependencyManagement> |
| | | |
| | |
| | | <module>ruoyi-quartz</module> |
| | | <module>ruoyi-generator</module> |
| | | <module>ruoyi-common</module> |
| | | <module>ruoyi-message</module> |
| | | <module>smartor</module> |
| | | </modules> |
| | | <packaging>pom</packaging> |
| | |
| | | <version>3.8.5</version> |
| | | <scope>compile</scope> |
| | | </dependency> |
| | | <!-- æ¶æ¯åéï¼çä¿¡/微信å
¬ä¼å·ï¼æ¨¡å --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-message</artifactId> |
| | | </dependency> |
| | | <!-- https://mvnrepository.com/artifact/net.glxn.qrgen/javase --> |
| | | <dependency> |
| | | <groupId>net.glxn.qrgen</groupId> |
| | |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.dx.MessageSend; |
| | | import com.ruoyi.common.enums.MsgLSEnum; |
| | | import com.ruoyi.common.enums.ServiceFromEnum; |
| | | import com.ruoyi.common.enums.WxGZHEnum; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | 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.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSenderFactory; |
| | | import com.ruoyi.system.domain.SysConfig; |
| | | import com.ruoyi.system.mapper.SysConfigMapper; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.smartor.common.LSHospTokenUtil; |
| | | import com.smartor.common.MtSubmitSmUtil; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.domain.entity.ServiceSubtaskEntity; |
| | | import com.smartor.mapper.*; |
| | |
| | | import org.springframework.data.redis.listener.RedisMessageListenerContainer; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.IOException; |
| | | import java.net.URLEncoder; |
| | | import java.security.MessageDigest; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.concurrent.ExecutorService; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import static cn.hutool.core.convert.Convert.toHex; |
| | | |
| | | @Slf4j |
| | | @Component//ç嬿¤éå |
| | |
| | | @Autowired |
| | | IBaseSmsaccountService baseSmsaccountService; |
| | | |
| | | @Value("${xhsmsPath}") |
| | | private String xhsmsPath; |
| | | |
| | | @Value("${xhsmsAccount}") |
| | | private String xhsmsAccount; |
| | | |
| | | @Value("${xhsmsPwd}") |
| | | private String xhsmsPwd; |
| | | // èææ¥å
¥ç |
| | | @Value("${xhsmsjrm}") |
| | | private String xhsmsjrm; |
| | | |
| | | @Value("${server.port}") |
| | | private String port; |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | /** |
| | | * æ¶æ¯å鿹工åï¼çä¿¡/微信å
¬ä¼å·ï¼ã |
| | | * <p> |
| | | * 忥çä¿¡ä¸å
¬ä¼å·çåéé»è¾å¨æ¬ç±»éç¨ {@code if (active.equals("xx"))} ç¡¬åæ¯äºçº¦ 300 è¡ï¼ |
| | | * ç°å·²æ¶å£å° {@code ruoyi-message} 模åï¼è¿éåªè´è´£æ {@code active} è·¯ç±ã |
| | | */ |
| | | @Autowired |
| | | private SmsSenderFactory smsSenderFactory; |
| | | |
| | | @Autowired |
| | | private MtSubmitSmUtil mtSubmitSmUtil; |
| | | private WechatSenderFactory wechatSenderFactory; |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | } |
| | | |
| | | //çä¿¡è¿éè¦æ¨¡æ¿ |
| | | String s = null; |
| | | if (active.equals("xh")) { |
| | | //æ°åççä¿¡åéæ¹å¼ |
| | | Map<String, String> map2 = new HashMap<String, String>(); |
| | | map2.put("action", "send"); |
| | | map2.put("account", xhsmsAccount); |
| | | map2.put("password", xhsmsPwd); |
| | | map2.put("mobile", sendMagParam.getPhone()); |
| | | map2.put("content", sendMagParam.getContent()); |
| | | map2.put("extno", xhsmsjrm); |
| | | map2.put("rt", "json"); |
| | | StringBuilder encodedParams = new StringBuilder(); |
| | | |
| | | for (Map.Entry<String, String> entry : map2.entrySet()) { |
| | | if (encodedParams.length() > 0) { |
| | | encodedParams.append("&"); |
| | | } |
| | | // 对é®åå¼è¿è¡URLç¼ç |
| | | String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8"); |
| | | String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8"); |
| | | encodedParams.append(encodedKey).append("=").append(encodedValue); |
| | | } |
| | | Boolean isSuccess = HttpUtil.postJsonRequest(xhsmsPath, encodedParams.toString()); |
| | | if (isSuccess) s = "true"; |
| | | } else if (active.equals("ls")) { |
| | | //丽水ççä¿¡åéæ¹å¼ |
| | | 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.isNotEmpty(msgInfo) && StringUtils.isEmpty(msgInfo.get("address"))) { |
| | | serviceSubtask.setCurrentPreachform(sendPreachform); |
| | | serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform())); |
| | | setFailPreachForm(serviceSubtask, descByCode, "çä¿¡åé失败,è¯¥æºææ²¡æé
ç½®çä¿¡å°å", "5"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | continue; |
| | | } |
| | | |
| | | String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid(), msgInfo.get("tokenUrl")); |
| | | String dxCode = getDXCode(msgInfo.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), msgInfo.get("sendPersonId"), msgInfo.get("sendPersonName"), MsgLSEnum.getHeaderByCode(msgInfo), token); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class); |
| | | String code = textParam.get("Code").toString(); |
| | | if (code.equals("0")) { |
| | | s = "true"; |
| | | } else { |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "çä¿¡åé失败", "5"); |
| | | throw new BaseException("çä¿¡åé失败"); |
| | | } |
| | | } else if (active.equals("sltd") || active.equals("nhfy")) { |
| | | //çç«åå¾·ççä¿¡åéæ¹å¼ |
| | | String data = null; |
| | | Map<String, Object> smsResult = null; |
| | | if (active.equals("sltd")) { |
| | | data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); |
| | | if (StringUtils.isNotEmpty(data)) { |
| | | String[] pairs = data.split("&"); |
| | | String resultVal = null; |
| | | for (String pair : pairs) { |
| | | String[] kv = pair.split("=", 2); |
| | | if ("result".equals(kv[0])) { |
| | | resultVal = kv.length > 1 ? kv[1] : null; |
| | | break; |
| | | } |
| | | } |
| | | if ("0".equals(resultVal)) { |
| | | s = "true"; |
| | | } |
| | | } else { |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "çä¿¡åé失败: " + data, "5"); |
| | | throw new BaseException("çä¿¡åé失败"); |
| | | } |
| | | } else if (active.equals("nhfy")) { |
| | | smsResult = mtSubmitSmUtil.submitSm(sendMagParam.getPhone(), sendMagParam.getContent()); |
| | | if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) { |
| | | s = "true"; |
| | | } else { |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "çä¿¡åé失败", "5"); |
| | | throw new BaseException("çä¿¡åé失败"); |
| | | } |
| | | } |
| | | |
| | | } else if (active.equals("hzszlyy")) { |
| | | //å¸ä¸ |
| | | long timestamp = new Date().getTime(); |
| | | String sign = Md5Utils.hash(xhsmsAccount + timestamp + Md5Utils.hash(xhsmsPwd)); |
| | | String content = sendMagParam.getContent(); |
| | | String jsonMsg = "{" + "\"userName\": \"" + xhsmsAccount + "\"," + "\"content\": \"" + content + "\"," + "\"phoneList\": [" + sendMagParam.getPhone() + "]," + "\"timestamp\": " + timestamp + "," + "\"sign\": \"" + sign + "\"" + "}"; |
| | | Boolean b = HttpUtil.postJsonRequest(xhsmsPath, jsonMsg); |
| | | if (b) s = "true"; |
| | | log.info("------å¸ä¸çä¿¡åéçå¼ä¸ºï¼{}", s); |
| | | if (StringUtils.isNotEmpty(s)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(s); |
| | | Object code = jsonObject.get("code"); |
| | | if (code.equals(0)) { |
| | | s = "true"; |
| | | } else { |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "çä¿¡åé失败", "5"); |
| | | throw new BaseException("çä¿¡åé失败"); |
| | | } |
| | | } |
| | | } |
| | | if (s.equals("true")) { |
| | | //çä¿¡åéï¼åç«ç¹å¯¹æ¥æ¹å¼å·®å¼è¾å¤§ï¼æ¥æ/ç¾å/token/è¿åå¤å®é½ä¸åï¼ï¼ |
| | | //å·²æ¶å£å° ruoyi-message 模åï¼è¿éåªè´è´£ç»è£
å
¥åå¹¶è·¯ç± |
| | | log.info("----activeçå¼ä¸ºï¼{}", active); |
| | | SendResult smsSendResult = sendSmsByActive(serviceSubtask, sendMagParam); |
| | | if (smsSendResult.isOk()) { |
| | | //å¨åä»»å¡è¡¨éè®°å½ä¸ä¸ |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "çä¿¡åéæå", "2"); |
| | | //ä»»å¡åéè®°å½ |
| | |
| | | serviceSubtaskRecord.setResult("success"); |
| | | serviceSubtaskRecord.setRemark("çä¿¡åéæå"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | log.error("serviceSubtaskRecordä¿åæåäºåï¼ï¼{}", serviceSubtaskRecord); |
| | | } else { |
| | | //å¨åä»»å¡è¡¨éè®°å½ä¸ä¸ |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "çä¿¡åé失败", "5"); |
| | | continue; |
| | | } |
| | | } catch (Exception e) { |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | |
| | | serviceOutPath.setUrl(url); |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | } |
| | | if (StringUtils.isEmpty(patArchive.getPatidHis())) { |
| | | serviceSubtask.setCurrentPreachform(sendPreachform); |
| | | serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform())); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | //å¤±è´¥è®°å½ |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "å
¬ä¼å·åé失败,hisç³»ç»çæ£è
id为空", "5"); |
| | | continue; |
| | | } |
| | | |
| | | //è·å微信å
¬ä¼å·è¯·æ±ä¿¡æ¯æ ¹æ®æºæID |
| | | //æºæé
ç½®æ ¡éªï¼WxGZHEnumï¼ä¸ his æ£è
id æ ¡éªå·²æ¶å£å° |
| | | //ruoyi-message ç WechatMpConfigProvider / XinHuaMpSenderï¼è°ç¨ç¹ä¸åé夿 ¡éª |
| | | log.error("è·å微信å
¬ä¼å·è¯·æ±ä¿¡æ¯æ ¹æ®æºæIDï¼{}", patArchive.getOrgid()); |
| | | List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid()); |
| | | //å¸ä¸å»é¢ 䏿 ¡éª |
| | | if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) { |
| | | serviceSubtask.setCurrentPreachform(sendPreachform); |
| | | serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform())); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | |
| | | //å¤±è´¥è®°å½ |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "è¯¥æºæçå
¬ä¼å·é
置信æ¯ä¸å
¨ï¼æ æ³éè¿å
¬ä¼å·åé", "5"); |
| | | continue; |
| | | } |
| | | String wxCode = ""; |
| | | if (active.equals("hzszlyy")) { |
| | | wxCode = smsUtils.sendChat(url, patArchive.getTelcode(), serviceSubtask.getSfzh()); |
| | | log.info("wxCodeçå¼ä¸º:{}", wxCode); |
| | | if (!"xh".equals(active)) { |
| | | //å¸ä¸ï¼èµ°èªæå
¬ä¼å·ç½å
³ï¼ä¸åæºæé
ç½®æ ¡éªãhisæ£è
idæ ¡éªï¼ä¸åå®ç°ä¸è´ï¼ |
| | | sendWechatByActive(serviceSubtask, patArchive, url); |
| | | } else { |
| | | wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskName(), patArchive.getTelcode(), patArchive.getName(), patArchive.getPatidHis(), wxqqxx); |
| | | log.error("wxCodeçå¼ä¸º:{}", wxCode); |
| | | Map<String, Object> map = JSONObject.parseObject(wxCode, Map.class); |
| | | log.error("mapçå¼ä¸º:{}", map); |
| | | if (!map.isEmpty()) { |
| | | serviceSubtask.setResult("success"); |
| | | serviceSubtask.setSendstate(3L); |
| | | log.error("aBooleançå¼ä¸º:{}", aBoolean); |
| | | if (map.get("succ").toString().equals("true")) { |
| | | aBoolean = true; |
| | | } |
| | | if (aBoolean == false) { |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId()); |
| | | serviceSubtaskRecord.setUuid(UUID.randomUUID().toString()); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("5"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setRemark(ObjectUtils.isNotEmpty(map.get("msg")) ? map.get("msg").toString() : null); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | //å¨åä»»å¡è¡¨éè®°å½ä¸ä¸ |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "å
¬ä¼å·åé失败", "5"); |
| | | continue; |
| | | } |
| | | //æ°åï¼hisæ£è
idæ ¡éªå¤±è´¥å³è®°å½å¹¶è¿å
¥ä¸ä¸ç§åéæ¹å¼ |
| | | SendResult wechatSendResult = sendWechatByActive(serviceSubtask, patArchive, url); |
| | | if (!wechatSendResult.isOk()) { |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | | serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId()); |
| | | serviceSubtaskRecord.setUuid(UUID.randomUUID().toString()); |
| | | serviceSubtaskRecord.setTasktype(serviceSubtask.getType()); |
| | | serviceSubtaskRecord.setPreachform("5"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setRemark(wechatSendResult.getMessage()); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | //å¨åä»»å¡è¡¨éè®°å½ä¸ä¸ |
| | | setFailPreachForm(serviceSubtask, sendPreachform, "å
¬ä¼å·åé失败", "5"); |
| | | continue; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æ {@code active}ï¼ç«ç¹ï¼è·¯ç±å°å¯¹åºççä¿¡åéæ¹ã |
| | | * <p> |
| | | * å
¥å沿ç¨å忝éå·²ç»ç»è£
好ç {@code SendMagParam}ï¼ä¿è¯å
容ä¸çº¿ä¸å®å
¨ä¸è´ã |
| | | * åç«ç¹å·®å¼è§ {@code ruoyi-message} 模ååå®ç°ç±»ã |
| | | * <p> |
| | | * â ï¸ æ°åï¼{@code xh}ï¼å¨æ¬å
¥å£åæ¬èµ°ãURL ç¼ç 表åãï¼ |
| | | * ä¸ {@code RyTask}ï¼åç©ºæ¥æï¼/ {@code smsSubTask}ï¼JSONï¼å¹¶ä¸ä¸è´ï¼ |
| | | * è¿éæåæ ·èµ° {@code XinHuaSmsSender#sendForm}ï¼è¡¨å模å¼ï¼ã |
| | | */ |
| | | private SendResult sendSmsByActive(ServiceSubtask serviceSubtask, SendMagParam sendMagParam) { |
| | | SmsSendRequest request = SmsSendRequest.of( |
| | | sendMagParam.getPhone(), sendMagParam.getContent(), serviceSubtask.getOrgid()); |
| | | return smsSenderFactory.send(active, request); |
| | | } |
| | | |
| | | /** |
| | | * æ {@code active}ï¼ç«ç¹ï¼è·¯ç±å°å¯¹åºç微信å
¬ä¼å·åéæ¹ã |
| | | * <p> |
| | | * â ï¸ ç«ç¹å·®å¼ï¼ä¸åå®ç°ä¸ä¸å¯¹åºï¼ï¼ |
| | | * <ul> |
| | | * <li>å¸ä¸ï¼{@code hzszlyy}ï¼ï¼ä¸å his æ£è
id æ ¡éªï¼æ é¢/å
容é½åä»»å¡åç§°ï¼</li> |
| | | * <li>æ°åï¼{@code xh}ï¼ï¼è¦æ± his æ£è
id éç©ºï¼æ£è
å§åå {@code patArchive.getName()}ï¼</li> |
| | | * <li>æ°åç JSON æ¥æä½éè¦ {@code disableHtmlEscaping}ï¼ä¸ {@code RyTask} ä¸åã</li> |
| | | * </ul> |
| | | */ |
| | | private SendResult sendWechatByActive(ServiceSubtask serviceSubtask, PatArchive patArchive, String url) { |
| | | if (StringUtils.isEmpty(patArchive.getPatidHis())) { |
| | | return SendResult.fail(active, MessageChannel.WECHAT, |
| | | "å
¬ä¼å·åé失败,hisç³»ç»çæ£è
id为空", null); |
| | | } |
| | | WechatSendRequest request = new WechatSendRequest(); |
| | | request.setOrgid(patArchive.getOrgid()); |
| | | request.setIdCard(serviceSubtask.getSfzh()); |
| | | request.setUrl(url); |
| | | request.setTitle(serviceSubtask.getTaskName()); |
| | | //åå®ç°æ é¢ä¸å
容é½ä¼ serviceSubtask.getTaskName() |
| | | request.setContent(serviceSubtask.getTaskName()); |
| | | request.setPhone(patArchive.getTelcode()); |
| | | request.setPatientName(patArchive.getName()); |
| | | request.setPatidHis(patArchive.getPatidHis()); |
| | | //å RedisMqReceiver.getWXCode ä½¿ç¨ disableHtmlEscapingï¼ä¸ RyTask ä¸åï¼æ¤å¤ä¿æ |
| | | request.setDisableHtmlEscaping(true); |
| | | return wechatSenderFactory.send(active, request); |
| | | } |
| | | |
| | | private String getSC(ServiceSubtask serviceSubtask, String scriptContent) { |
| | |
| | | return targetKey; |
| | | } |
| | | |
| | | // private String getKey() { |
| | | // Map<String, List> map = new HashMap<>(); |
| | | // for (int i = 0; i < 6; i++) { |
| | | // Boolean aBoolean = redisCache.hasKey("cache-" + i); |
| | | // if (!aBoolean) { |
| | | // redisCache.setCacheList("cache-" + i, new ArrayList<String>()); |
| | | // map.put("cache-" + i, new ArrayList<String>()); |
| | | // } else { |
| | | // map.put("cache-" + i, redisCache.getCacheObject("cache-" + i)); |
| | | // } |
| | | // } |
| | | // |
| | | // String key = null; |
| | | // List<String> value = new ArrayList<String>(); |
| | | // for (Map.Entry<String, List> entry : map.entrySet()) { |
| | | // if (CollectionUtils.isEmpty(value)) { |
| | | // value = entry.getValue(); |
| | | // key = entry.getKey(); |
| | | // } else { |
| | | // value = entry.getValue(); |
| | | // key = entry.getKey(); |
| | | // } |
| | | // } |
| | | // return key; |
| | | // } |
| | | |
| | | private String getWXCode(String idcard, String url, String taskName, String taskDesc, String phone, String patientname, String setPatientid, List<String> wxqqxx) { |
| | | XinHuaWXReq xinHuaWXReq = new XinHuaWXReq(); |
| | | xinHuaWXReq.setIdcard(idcard); |
| | | xinHuaWXReq.setUrl(url); |
| | | xinHuaWXReq.setPatientid(setPatientid); |
| | | xinHuaWXReq.setPatientname(patientname); |
| | | xinHuaWXReq.setMobile(phone); |
| | | xinHuaWXReq.setMedcardno(null); |
| | | xinHuaWXReq.setTitlename(taskName); |
| | | xinHuaWXReq.setContent(taskDesc); |
| | | xinHuaWXReq.setAppid(wxqqxx.get(1)); |
| | | log.error("-----微信å
¬ä¼å·çåºå为----ï¼{}", xinHuaWXReq); |
| | | // new Gson().toJson(xinHuaWXReq); |
| | | GsonBuilder gb = new GsonBuilder(); |
| | | gb.disableHtmlEscaping(); |
| | | String body = gb.create().toJson(xinHuaWXReq); |
| | | |
| | | log.error("encodeçå
¥å为wxqqxx ï¼{}, body:{}", wxqqxx.get(2), body); |
| | | String encode = encode(wxqqxx.get(2).concat(body)); |
| | | log.error("--------encodeçå¼ä¸ºï¼{}-----", encode); |
| | | Map<String, String> headerMap = new HashMap<>(); |
| | | headerMap.put("sign", encode); |
| | | String result = HttpUtils.sendPostByHeader(wxqqxx.get(3), body, headerMap); |
| | | log.error("--------resultçå¼ä¸ºï¼{}-----", result); |
| | | |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | |
| | | |
| | | private String getDXCode(String address, String ShouJiHM, String FaSongNR, String FaSongRID, String FaSongRXM, Map<String, Object> headerMap, String token) { |
| | | Map<String, Object> map = new LinkedHashMap<>(); |
| | | |
| | | Map<String, Object> YeWuXX = new LinkedHashMap<>(); |
| | | Map<String, Object> DuanXinXX = new LinkedHashMap<>(); |
| | | DuanXinXX.put("ShouJiHM", ShouJiHM); |
| | | DuanXinXX.put("FaSongNR", FaSongNR); |
| | | DuanXinXX.put("FaSongRID", FaSongRID); |
| | | DuanXinXX.put("FaSongRXM", FaSongRXM); |
| | | YeWuXX.put("DuanXinXX", DuanXinXX); |
| | | |
| | | map.put("XiaoXiTou", headerMap); |
| | | map.put("YeWuXX", YeWuXX); |
| | | |
| | | String body = new Gson().toJson(map); |
| | | |
| | | String result = null; |
| | | try { |
| | | result = OkHttpExample.sendPostRequest(address, body, token); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | log.info("--------resultçå¼ä¸ºï¼{}-----", result); |
| | | |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | |
| | | |
| | | public String encode(String arg) { |
| | | if (arg == null) { |
| | | arg = ""; |
| | | } |
| | | MessageDigest md5 = null; |
| | | try { |
| | | md5 = MessageDigest.getInstance("MD5"); |
| | | md5.update(arg.getBytes("UTF-8")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return toHex(md5.digest()); |
| | | } |
| | | // --------------------------------------------------------------------- |
| | | // 说æï¼å getWXCode / getDXCode / encode ä¸ä¸ªç§ææ¹æ³å·²éåéæ¹ä¸èµ·æ¶å£å° |
| | | // ruoyi-message 模åï¼XinHuaMpApi / LishuiSmsSenderï¼ï¼æ¤å¤å·²å é¤ï¼é¿å
éå¤å®ç°ã |
| | | // 注æï¼æ¬ç±»ç getWXCode åä½¿ç¨ new GsonBuilder().disableHtmlEscaping()ï¼ |
| | | // ä¸ RyTask.getWXCode ç new Gson() ä¸åï¼è¯¥å·®å¼å·²å¨ XinHuaMpApi 䏿ç«ç¹ä¿çã |
| | | // --------------------------------------------------------------------- |
| | | |
| | | /** |
| | | * éè®¿ä»»å¡æ¯å¦è¶
æ¶ |
| | |
| | | package com.ruoyi.web.controller.common; |
| | | |
| | | import com.fasterxml.jackson.databind.JsonNode; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.google.gson.Gson; |
| | | 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.smartor.common.MtSubmitSmUtil; |
| | | import com.smartor.common.ShiyiSmsUtil; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsRequest; |
| | | import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsResponse; |
| | | import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsUtil; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSenderFactory; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.mapper.UtilsMapper; |
| | | import com.smartor.service.IServiceOutPathService; |
| | | import com.smartor.service.IServiceSubtaskService; |
| | | import io.swagger.annotations.Api; |
| | |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLEncoder; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ç¥ä¿¡æ¥å£ï¼å¯¹å¤çä¿¡ / 微信å
¬ä¼å·åéå
¥å£ï¼ã |
| | | * <p> |
| | | * 说æï¼çä¿¡ä¸å
¬ä¼å·çç«ç¹å·®å¼ï¼æ¥ææ ¼å¼ãç¾åãtokenãè¿åå¤å®ï¼å·²å
¨é¨æ¶å£å° |
| | | * {@code ruoyi-message} 模åï¼æ¬ç±»åªè´è´£åæ°ç»è£
䏿 {@code active} è·¯ç±ã |
| | | */ |
| | | @RestController |
| | | @Api(description = "ç¥ä¿¡æ¥å£") |
| | | @RequestMapping("/sms") |
| | | @Slf4j |
| | | public class SmsController { |
| | | @Value("${xhsmsPath}") |
| | | private String xhsmsPath; |
| | | |
| | | @Autowired |
| | | private MtSubmitSmUtil mtSubmitSmUtil; |
| | | private SmsSenderFactory smsSenderFactory; |
| | | |
| | | @Autowired |
| | | private WechatSenderFactory wechatSenderFactory; |
| | | |
| | | @Autowired |
| | | private ShiyiSmsUtil shiyiSmsUtil; |
| | | |
| | | @Value("${xhsmsAccount}") |
| | | private String xhsmsAccount; |
| | | |
| | | @Value("${xhsmsPwd}") |
| | | private String xhsmsPwd; |
| | | // èææ¥å
¥ç |
| | | @Value("${xhsmsjrm}") |
| | | private String xhsmsjrm; |
| | | |
| | | @Value("${localIP}") |
| | | private String ip; |
| | |
| | | private String active; |
| | | |
| | | /** |
| | | * @param |
| | | * @return |
| | | * çä¿¡åéï¼æµè¯ï¼ |
| | | */ |
| | | @ApiOperation("çä¿¡åé") |
| | | @PostMapping("/sendTest") |
| | | public AjaxResult send(@RequestBody smsVO vo) { |
| | | String sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, vo.getPhone(), vo.getContent()); |
| | | return AjaxResult.success(sendMsg); |
| | | //ä¸åå®ç°ä¸è´ï¼æµè¯æ¥å£åºå®èµ°å¸ä¸ï¼smsUtils.sendSmsï¼å´å±±ç¾åï¼ |
| | | SmsSendRequest request = SmsSendRequest.of(vo.getPhone(), vo.getContent()); |
| | | request.setCampus("2"); |
| | | SendResult sendResult = smsSenderFactory.send("hzszlyy", request); |
| | | return AjaxResult.success(sendResult.getRawResponse()); |
| | | } |
| | | |
| | | @ApiOperation("å¸ä¸HISçä¿¡XMLæµè¯") |
| | |
| | | } |
| | | |
| | | /** |
| | | * @param |
| | | * @return |
| | | * çä¿¡åé |
| | | */ |
| | | @ApiOperation("çä¿¡åé") |
| | | @PostMapping("/send") |
| | |
| | | |
| | | String sendMsg = "false"; |
| | | try { |
| | | if (active.equals("hzszlyy")) { |
| | | 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")) { |
| | | sendMsg = "true"; |
| | | } |
| | | } else if (active.equals("sltd")) { |
| | | String data = MessageSend.sendMsg(content, "6", vo.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); |
| | | if (StringUtils.isNotEmpty(data)) { |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | JsonNode root = mapper.readTree(data); |
| | | String status = root.get("result").get(0).get("status").asText(); |
| | | if (status.equals("00000")) { |
| | | sendMsg = "true"; |
| | | } |
| | | } |
| | | } else if (active.equals("xh")) { |
| | | // Map<String, String> req = new HashMap<>(); |
| | | // req.put("phone", vo.getPhone()); |
| | | // req.put("content", vo.getContent()); |
| | | // Boolean result = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(req)); |
| | | Map<String, String> map2 = new HashMap<String, String>(); |
| | | map2.put("action", "send"); |
| | | map2.put("account", xhsmsAccount); |
| | | map2.put("password", xhsmsPwd); |
| | | map2.put("mobile", vo.getPhone()); |
| | | map2.put("content", vo.getContent()); |
| | | map2.put("extno", xhsmsjrm); |
| | | map2.put("rt", "json"); |
| | | StringBuilder encodedParams = new StringBuilder(); |
| | | |
| | | for (Map.Entry<String, String> entry : map2.entrySet()) { |
| | | if (encodedParams.length() > 0) { |
| | | encodedParams.append("&"); |
| | | } |
| | | // 对é®åå¼è¿è¡URLç¼ç |
| | | String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8"); |
| | | String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8"); |
| | | encodedParams.append(encodedKey).append("=").append(encodedValue); |
| | | } |
| | | Boolean result = HttpUtils.sendPost(xhsmsPath, encodedParams.toString()); |
| | | if (result) { |
| | | sendMsg = "true"; |
| | | } |
| | | } else if (active.equals("ls")) { |
| | | //丽水13å®¶å»é¢ï¼æç¹ä¸æ¹ä¾¿ï¼æç©ºåæ¥ |
| | | if ("ls".equals(active)) { |
| | | //ä¸åå®ç°ä¸è´ï¼ä¸½æ°´13å®¶å»é¢ççä¿¡åè½æ 记为æªå¼é |
| | | return AjaxResult.error("该çä¿¡åè½è¿æªå¼é"); |
| | | } |
| | | SmsSendRequest request = SmsSendRequest.of(vo.getPhone(), content, vo.getOrgid()); |
| | | //å¸ä¸åºåæ¹æ»¨/å´å±±ç¾åï¼æ¤æ¥å£æ é¢åºä¿¡æ¯ï¼ä¸åå®ç°ä¸è´ï¼éæ¹æ»¨å³å´å±±ï¼ |
| | | SendResult sendResult = smsSenderFactory.send(active, request); |
| | | sendMsg = sendResult.asLegacyFlag(); |
| | | log.info(sendMsg); |
| | | } catch (Exception ex) { |
| | | log.error(ex.getMessage()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * @param |
| | | * @return |
| | | * 微信åé |
| | | */ |
| | | @ApiOperation("微信åé") |
| | | @PostMapping("/sendChat") |
| | |
| | | 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()); |
| | | //ä¸åå®ç°ä¸è´ï¼è¯¥æ¥å£åºå®èµ°å¸ä¸å
¬ä¼å· |
| | | WechatSendRequest request = new WechatSendRequest(); |
| | | request.setIdCard(vo.getIdCard()); |
| | | request.setPhone(vo.getPhone()); |
| | | request.setUrl(url); |
| | | request.setOrgid(vo.getOrgid()); |
| | | SendResult sendResult = wechatSenderFactory.send("hzszlyy", request); |
| | | sendMsg = sendResult.getRawResponse(); |
| | | } |
| | | return AjaxResult.success(sendMsg); |
| | | } |
| | | |
| | | /** |
| | | * @param |
| | | * @return |
| | | * çæå¤é¾ |
| | | */ |
| | | @ApiOperation("çæå¤é¾") |
| | | @PostMapping("/getUrl") |
| | |
| | | |
| | | import com.ruoyi.common.core.controller.BaseController; |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.smartor.common.MtSubmitSmUtil; |
| | | import com.smartor.domain.MtSubmitSmResp; |
| | | import com.smartor.domain.ServiceSLTDDeptReqVO; |
| | | import com.smartor.domain.ServiceSLTDInhospReqVO; |
| | | import com.smartor.domain.ServiceSLTDInhospResDTO; |
| | |
| | | |
| | | @Autowired |
| | | private IServiceSLTDHealthcareRecordService serviceSLTDHealthcareRecordService; |
| | | |
| | | @Autowired |
| | | private MtSubmitSmUtil mtSubmitSmUtil; |
| | | |
| | | /** |
| | | * æ¥è¯¢å¨é¢æ£è
å¥åº·è®°å½å表 |
| | |
| | | package com.ruoyi.web.controller.smartor; |
| | | |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.common.utils.sms.smsUtils; |
| | | import com.smartor.domain.smsVO; |
| | | import com.smartor.service.IServiceTaskoperService; |
| | | import com.smartor.service.IServiceTelInfoService; |
| | |
| | | import com.ruoyi.common.core.controller.BaseController; |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.smartor.common.ShiyiSmsUtil; |
| | | import com.smartor.domain.ShiyiSmsRequest; |
| | | import com.smartor.domain.ShiyiSmsResponse; |
| | | import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsRequest; |
| | | import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsResponse; |
| | | import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsUtil; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | 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.smartor.common.MtSubmitSmUtil; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.smartor.domain.BaseSmsRequest; |
| | | import com.smartor.domain.BaseSmsaccount; |
| | | import com.smartor.domain.BatchBaseSmsRequest; |
| | |
| | | @Autowired |
| | | private IBaseSmsaccountService baseSmsaccountService; |
| | | |
| | | @Value("${xhsmsPath}") |
| | | private String xhsmsPath; |
| | | |
| | | @Value("${xhsmsAccount}") |
| | | private String xhsmsAccount; |
| | | |
| | | @Value("${xhsmsPwd}") |
| | | private String xhsmsPwd; |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | | |
| | | /** |
| | | * æ¶æ¯å鿹工åï¼çä¿¡ï¼ï¼æ¿ä»£åæ¥ç´æ¥æ³¨å
¥ xhsms* é
ç½® + åç«ç¹åæ¯çåæ³ |
| | | */ |
| | | @Autowired |
| | | private MtSubmitSmUtil mtSubmitSmUtil; |
| | | private SmsSenderFactory smsSenderFactory; |
| | | |
| | | /** |
| | | * æ¥è¯¢çä¿¡è´¦å·å表 |
| | |
| | | try { |
| | | JSONObject jsTemp = JSON.parseObject(baseSmsRequest.getTemplateParam()); |
| | | String content = jsTemp.getString("name"); |
| | | sendMsg = smsUtils.sendSms(xhsmsPath, xhsmsAccount, xhsmsPwd, baseSmsRequest.getPhoneNumber(), content); |
| | | //çä¿¡åéå·²æ¶å£å° ruoyi-message 模åï¼åå®ç°è°ç¨çæ¯ smsUtils.sendSmsï¼å´å±±ç¾åï¼ |
| | | SmsSendRequest request = SmsSendRequest.of(baseSmsRequest.getPhoneNumber(), content); |
| | | request.setCampus("2"); |
| | | SendResult sendResult = smsSenderFactory.send("hzszlyy", request); |
| | | sendMsg = sendResult.getRawResponse(); |
| | | } catch (Exception ex) { |
| | | return AjaxResult.error(ex.getMessage()); |
| | | } |
| | | return AjaxResult.success(sendMsg); |
| | | } else if (active.equals("nhfy")) { |
| | | Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(baseSmsRequest.getPhoneNumber(), baseSmsRequest.getTemplateCode()); |
| | | return AjaxResult.success(smsResult.get("result")); |
| | | SmsSendRequest request = SmsSendRequest.of(baseSmsRequest.getPhoneNumber(), baseSmsRequest.getTemplateCode()); |
| | | SendResult sendResult = smsSenderFactory.send("nhfy", request); |
| | | return AjaxResult.success(sendResult.getCode()); |
| | | |
| | | } else { |
| | | if (baseSmsaccountService.sendMsg(baseSmsRequest) == null) { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <artifactId>ruoyi</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>3.8.5</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-message</artifactId> |
| | | |
| | | <description> |
| | | æ¶æ¯å鿍¡åï¼çä¿¡ã微信å
¬ä¼å·çåéæ¹ç»ä¸æ¶å£ |
| | | </description> |
| | | |
| | | <dependencies> |
| | | <!-- éç¨å·¥å
·ï¼HttpUtil / HttpUtils / OkHttpExample / StringUtils / Md5Utils ç --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- lombok --> |
| | | <dependency> |
| | | <groupId>org.projectlombok</groupId> |
| | | <artifactId>lombok</artifactId> |
| | | <version>1.18.34</version> |
| | | </dependency> |
| | | |
| | | <!-- fastjson --> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>fastjson</artifactId> |
| | | <version>1.2.41</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba.fastjson2</groupId> |
| | | <artifactId>fastjson2</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- gson --> |
| | | <dependency> |
| | | <groupId>com.google.code.gson</groupId> |
| | | <artifactId>gson</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- jackson --> |
| | | <dependency> |
| | | <groupId>com.fasterxml.jackson.core</groupId> |
| | | <artifactId>jackson-databind</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- 微信å
¬ä¼å· SDKï¼WxMpUtilsï¼ --> |
| | | <dependency> |
| | | <groupId>com.github.binarywang</groupId> |
| | | <artifactId>weixin-java-mp</artifactId> |
| | | <version>3.0.0</version> |
| | | </dependency> |
| | | |
| | | <!-- çç«åå¾·çä¿¡ï¼Apache Axisï¼WSDL çæå®¢æ·ç«¯ï¼ --> |
| | | <dependency> |
| | | <groupId>org.apache.axis</groupId> |
| | | <artifactId>axis</artifactId> |
| | | <version>1.4</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.axis</groupId> |
| | | <artifactId>axis-jaxrpc</artifactId> |
| | | <version>1.4</version> |
| | | </dependency> |
| | | |
| | | <!-- 丽水çä¿¡ï¼OkHttp --> |
| | | <dependency> |
| | | <groupId>com.squareup.okhttp3</groupId> |
| | | <artifactId>okhttp</artifactId> |
| | | <version>4.10.0</version> |
| | | </dependency> |
| | | |
| | | <!-- é¿éäºçä¿¡ SDK --> |
| | | <dependency> |
| | | <groupId>com.aliyun</groupId> |
| | | <artifactId>dysmsapi20170525</artifactId> |
| | | <version>2.0.24</version> |
| | | </dependency> |
| | | |
| | | <!-- å·¥å
· --> |
| | | <dependency> |
| | | <groupId>org.apache.commons</groupId> |
| | | <artifactId>commons-lang3</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.commons</groupId> |
| | | <artifactId>commons-collections4</artifactId> |
| | | <version>4.4</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message; |
| | | |
| | | /** |
| | | * æ¶æ¯å鿏 éç±»åã |
| | | */ |
| | | public enum MessageChannel { |
| | | |
| | | /** |
| | | * çä¿¡ |
| | | */ |
| | | SMS("4", "çä¿¡"), |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å· |
| | | */ |
| | | WECHAT("5", "微信å
¬ä¼å·"); |
| | | |
| | | private final String preachformCode; |
| | | |
| | | private final String desc; |
| | | |
| | | MessageChannel(String preachformCode, String desc) { |
| | | this.preachformCode = preachformCode; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * å¯¹åº ServiceSubtaskPreachform / ServiceFromEnum éçåéæ¹å¼ç¼ç ï¼4=çä¿¡ï¼5=å
¬ä¼å·ï¼ |
| | | */ |
| | | public String getPreachformCode() { |
| | | return preachformCode; |
| | | } |
| | | |
| | | public String getDesc() { |
| | | return desc; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message; |
| | | |
| | | /** |
| | | * åéæ¹å¼å¸¸ã |
| | | * <p> |
| | | * æ§ä»£ç å¨åé失败æ¶ç´æ¥æ {@code new BaseException("çä¿¡åé失败")}ï¼ä¸ºäºä¿æè¡ä¸ºä¸è´ï¼ |
| | | * æ¬æ¨¡åæä¾åè¯ä¹çè¿è¡æ¶å¼å¸¸ï¼ç±è°ç¨æ¹å³å®æ¯å¦è½¬æ¢ã |
| | | */ |
| | | public class SendException extends RuntimeException { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * åéæ¹ key |
| | | */ |
| | | private final String senderKey; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹åå§ååº |
| | | */ |
| | | private final String rawResponse; |
| | | |
| | | public SendException(String message) { |
| | | this(null, message, null); |
| | | } |
| | | |
| | | public SendException(String senderKey, String message, String rawResponse) { |
| | | super(message); |
| | | this.senderKey = senderKey; |
| | | this.rawResponse = rawResponse; |
| | | } |
| | | |
| | | public SendException(String senderKey, String message, String rawResponse, Throwable cause) { |
| | | super(message, cause); |
| | | this.senderKey = senderKey; |
| | | this.rawResponse = rawResponse; |
| | | } |
| | | |
| | | public String getSenderKey() { |
| | | return senderKey; |
| | | } |
| | | |
| | | public String getRawResponse() { |
| | | return rawResponse; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * ç»ä¸åéç»æã |
| | | * <p> |
| | | * åç«ç¹åå§å®ç°ç¨å符串æ è®°ï¼å¦ {@code "true"} / {@code "success"} / {@code Boolean}ï¼è¡¨ç¤ºæè´¥ï¼ |
| | | * è°ç¨æ¹åèªè§£æç¬¬ä¸æ¹è¿åæ ¼å¼ï¼å®¹æåºéãæ¬ç±»æãæ¯å¦æå + æ¸ é + ç¬¬ä¸æ¹åå§ç + åå§ååºãç»ä¸æ¶å£ã |
| | | * <p> |
| | | * 注æï¼{@link #ok} 为 false æ¶ï¼{@link #message} å·²ç»å
å«å¯ç´æ¥åå
¥é访åä»»å¡ remark ç䏿æè¿°ï¼ |
| | | * ä½ä¸ºäºä¿æåç«ç¹çº¿ä¸è¡ä¸ºä¸åï¼è°ç¨æ¹ä»å¯æ²¿ç¨åæ remark ææ¡ã |
| | | */ |
| | | public class SendResult implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * æ¯å¦åéæå |
| | | */ |
| | | private boolean ok; |
| | | |
| | | /** |
| | | * æ¸ éç±»åï¼çä¿¡ / 微信å
¬ä¼å· |
| | | */ |
| | | private MessageChannel channelType; |
| | | |
| | | /** |
| | | * å
·ä½åéæ¹ keyï¼ä¾å¦ xh / ls / sltd / nhfy / hzszlyy |
| | | */ |
| | | private String senderKey; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹è¿åçä¸å¡ç ï¼æå°±å¸¦ä¸ï¼æ²¡æä¸º nullï¼ï¼ä¾å¦ä¸½æ°´ç Codeãå¸ä¸ç code |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * 失败åå / è¡¥å
说æ |
| | | */ |
| | | private String message; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹åå§ååºï¼ä¾¿äºææ¥ |
| | | */ |
| | | private String rawResponse; |
| | | |
| | | public SendResult() { |
| | | } |
| | | |
| | | /** |
| | | * æé æåç»æ |
| | | */ |
| | | public static SendResult success(String senderKey, MessageChannel channelType, String rawResponse) { |
| | | SendResult result = new SendResult(); |
| | | result.ok = true; |
| | | result.senderKey = senderKey; |
| | | result.channelType = channelType; |
| | | result.rawResponse = rawResponse; |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * æé å¤±è´¥ç»æ |
| | | */ |
| | | public static SendResult fail(String senderKey, MessageChannel channelType, String message, String rawResponse) { |
| | | SendResult result = new SendResult(); |
| | | result.ok = false; |
| | | result.senderKey = senderKey; |
| | | result.channelType = channelType; |
| | | result.message = message; |
| | | result.rawResponse = rawResponse; |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * è¡¥å
ç¬¬ä¸æ¹ä¸å¡ç ï¼è¿åèªèº«ä¾¿äºé¾å¼è°ç¨ |
| | | */ |
| | | public SendResult withCode(String code) { |
| | | this.code = code; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è¡¥å
说æä¿¡æ¯ï¼è¿åèªèº«ä¾¿äºé¾å¼è°ç¨ |
| | | */ |
| | | public SendResult withMessage(String message) { |
| | | this.message = message; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è¿å䏿§ä»£ç çä»·çå¸å°æ è®°ï¼ä¾¿äºæ¸è¿å¼æ¿æ¢ |
| | | * |
| | | * @return æåè¿å "true"ï¼å¤±è´¥è¿å "false" |
| | | */ |
| | | public String asLegacyFlag() { |
| | | return ok ? "true" : "false"; |
| | | } |
| | | |
| | | public boolean isOk() { |
| | | return ok; |
| | | } |
| | | |
| | | public void setOk(boolean ok) { |
| | | this.ok = ok; |
| | | } |
| | | |
| | | public MessageChannel getChannelType() { |
| | | return channelType; |
| | | } |
| | | |
| | | public void setChannelType(MessageChannel channelType) { |
| | | this.channelType = channelType; |
| | | } |
| | | |
| | | public String getSenderKey() { |
| | | return senderKey; |
| | | } |
| | | |
| | | public void setSenderKey(String senderKey) { |
| | | this.senderKey = senderKey; |
| | | } |
| | | |
| | | public String getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(String code) { |
| | | this.code = code; |
| | | } |
| | | |
| | | public String getMessage() { |
| | | return message; |
| | | } |
| | | |
| | | public void setMessage(String message) { |
| | | this.message = message; |
| | | } |
| | | |
| | | public String getRawResponse() { |
| | | return rawResponse; |
| | | } |
| | | |
| | | public void setRawResponse(String rawResponse) { |
| | | this.rawResponse = rawResponse; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "SendResult{ok=" + ok |
| | | + ", channelType=" + channelType |
| | | + ", senderKey='" + senderKey + '\'' |
| | | + ", code='" + code + '\'' |
| | | + ", message='" + message + '\'' |
| | | + ", rawResponse='" + rawResponse + '\'' |
| | | + '}'; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * é¿éäºçä¿¡é
ç½®ï¼aliyun ééï¼ã |
| | | * <p> |
| | | * ç± {@link MessageProperties#getSms()} ä» {@link RootMessageProperties} çæå¹³å段ç»è£
èæ¥ï¼ |
| | | * åæ®µä¸ yml key ç对åºå
³ç³»ï¼{@code accessKeyId} / {@code accessKeySecret} / {@code signName}ã |
| | | */ |
| | | @Data |
| | | public class AliyunSmsConfig { |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code accessKeyId} |
| | | */ |
| | | private String accessKeyId; |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code accessKeySecret} |
| | | */ |
| | | private String accessKeySecret; |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code signName} |
| | | */ |
| | | private String signName; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.boot.ApplicationArguments; |
| | | import org.springframework.boot.ApplicationRunner; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æ¶æ¯åéé
ç½®èªæ£ã |
| | | * <p> |
| | | * åå¨çæä¹ï¼è¿äº key è¿å»æ¯æ£è½å¨åå¤ç {@code @Value}ï¼æ¹æ {@code @ConfigurationProperties} |
| | | * ä¹å妿åç¼/å±çº§åéï¼**ç¼è¯æå®å
¨åç°ä¸äº**ï¼ç´å°çº¿ä¸åçä¿¡æ¶æåç°åæ°æ¯ nullã |
| | | * å æ¤å¯å¨æ¶æå½å profile çæ£ç¨å°çé
置项æå°åºæ¥ï¼å¯é¥è±æï¼ï¼å¹¶å¯¹ç©ºå¼åè¦ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class MessageConfigValidator implements ApplicationRunner { |
| | | |
| | | private final MessageProperties properties; |
| | | |
| | | @Value("${spring.profiles.active:}") |
| | | private String active; |
| | | |
| | | public MessageConfigValidator(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | @Override |
| | | public void run(ApplicationArguments args) { |
| | | MessageProperties.Sms sms = properties.getSms(); |
| | | XhsmsConfig xhsms = sms.getXhsms(); |
| | | MtSmsConfig mt = sms.getMt(); |
| | | AliyunSmsConfig aliyun = sms.getAliyun(); |
| | | |
| | | log.info("ãæ¶æ¯é
ç½®èªæ£ãactive={}ï¼xhsms: path={}, account={}, pwd={}, extno={}", |
| | | active, mask(xhsms.getPath()), mask(xhsms.getAccount()), maskSecret(xhsms.getPwd()), |
| | | mask(xhsms.getExtno())); |
| | | log.info("ãæ¶æ¯é
ç½®èªæ£ãmt(nhfy): url={}, accountName={}, password={}, sourceAddr={}, serviceCode={}, appkey={}, flag={}", |
| | | mask(mt.getUrl()), mask(mt.getAccountName()), maskSecret(mt.getPassword()), |
| | | mask(mt.getSourceAddr()), mask(mt.getServiceCode()), mask(mt.getAppkey()), mask(mt.getFlag())); |
| | | log.info("ãæ¶æ¯é
ç½®èªæ£ãaliyun: accessKeyId={}, accessKeySecret={}, signName={}", |
| | | mask(aliyun.getAccessKeyId()), maskSecret(aliyun.getAccessKeySecret()), mask(aliyun.getSignName())); |
| | | log.info("ãæ¶æ¯é
ç½®èªæ£ãwechat: shiyi.url={}, shiyi.key={}, xinhua.service={}", |
| | | mask(properties.getWechat().getShiyi().getUrl()), |
| | | maskSecret(properties.getWechat().getShiyi().getKey()), |
| | | mask(properties.getWechat().getXinhua().getService())); |
| | | |
| | | check("active", active); |
| | | if ("xh".equals(active) || "hzszlyy".equals(active)) { |
| | | check("xhsmsPath", xhsms.getPath()); |
| | | check("xhsmsAccount", xhsms.getAccount()); |
| | | check("xhsmsPwd", xhsms.getPwd()); |
| | | } else if ("nhfy".equals(active)) { |
| | | check("sms_url", mt.getUrl()); |
| | | check("sms_accountName", mt.getAccountName()); |
| | | check("sms_password", mt.getPassword()); |
| | | check("sms_sourceAddr", mt.getSourceAddr()); |
| | | check("sms_serviceCode", mt.getServiceCode()); |
| | | check("sms_flag", mt.getFlag()); |
| | | } |
| | | } |
| | | |
| | | private void check(String key, String value) { |
| | | if (value == null || value.trim().isEmpty()) { |
| | | log.warn("ãæ¶æ¯é
ç½®èªæ£ãâ ï¸ å½å profileï¼{}ï¼éè¦ {}ï¼ä½è¯¥é
置为空/æªç»å®ï¼" |
| | | + "è¯·æ£æ¥ application-{}.yml ä¸ MessageProperties/RootMessageProperties çç»å®å±çº§ã", |
| | | active, key, active); |
| | | } |
| | | } |
| | | |
| | | private String mask(String value) { |
| | | if (value == null) { |
| | | return "<null>"; |
| | | } |
| | | if (value.isEmpty()) { |
| | | return "<空>"; |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | private String maskSecret(String value) { |
| | | if (value == null) { |
| | | return "<null>"; |
| | | } |
| | | if (value.isEmpty()) { |
| | | return "<空>"; |
| | | } |
| | | if (value.length() <= 2) { |
| | | return "**"; |
| | | } |
| | | return value.substring(0, 1) + "***" + value.substring(value.length() - 1); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æ¶æ¯å鿍¡åé
ç½®ï¼ç»ä¸å
¥å£ï¼ã |
| | | * <p> |
| | | * ç±ä¸¤åæ¼æï¼<b>ä¸è¦åå¹¶</b>ï¼ |
| | | * <ul> |
| | | * <li>åéé
ç½®ï¼{@code xhsmsPath} / {@code sms_accountName} / {@code accessKeyId} / {@code signName} ...ï¼ |
| | | * â {@link RootMessageProperties}ï¼å段åä¸ yml key å®å
¨ååï¼</li> |
| | | * <li>æ°å¢é¡¹ï¼åå
硬ç¼ç å¨ä»£ç éãæ¬æ¬¡æä¸ºå¯é
ç½®çå°å/å¯é¥/ææ¡ï¼â æ¬ç±»ç |
| | | * {@code message.sms.*} / {@code message.wechat.*} åç¼é¡¹ã</li> |
| | | * </ul> |
| | | * 对ä¸å¡ä»£ç åªæ´é²åç»ç {@code getSms()} / {@code getWechat()}ï¼å±è½ä¸¤ç§ç»å®çå·®å¼ã |
| | | * <p> |
| | | * â ï¸ {@code getSms()} æ¯æå getterï¼æ¯æ¬¡è°ç¨ä¼æåéæå¹³å段åå¹¶è¿åç»å¯¹è±¡ï¼è¿æ¯å¹ççï¼ |
| | | * å æ¤å³ä½¿è¢«è°ç¨å¤æ¬¡ä¹æ²¡æå¯ä½ç¨ã |
| | | */ |
| | | @Component |
| | | @ConfigurationProperties(prefix = "message") |
| | | public class MessageProperties { |
| | | |
| | | private final RootMessageProperties root; |
| | | |
| | | /** ç»å® {@code message.sms.*} */ |
| | | private Sms sms = new Sms(); |
| | | |
| | | /** ç»å® {@code message.wechat.*} */ |
| | | private Wechat wechat = new Wechat(); |
| | | |
| | | @Autowired |
| | | public MessageProperties(RootMessageProperties root) { |
| | | this.root = root; |
| | | } |
| | | |
| | | public RootMessageProperties getRoot() { |
| | | return root; |
| | | } |
| | | |
| | | /** |
| | | * çä¿¡é
ç½®ç»ä¸å
¥å£ï¼åéæå¹³é¡¹ + æ°å¢é¡¹ |
| | | */ |
| | | public Sms getSms() { |
| | | this.sms.setXhsms(buildXhsms()); |
| | | this.sms.setMt(buildMt()); |
| | | this.sms.setAliyun(buildAliyun()); |
| | | return this.sms; |
| | | } |
| | | |
| | | public void setSms(Sms sms) { |
| | | this.sms = sms; |
| | | } |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·é
ç½®ç»ä¸å
¥å£ |
| | | */ |
| | | public Wechat getWechat() { |
| | | return this.wechat; |
| | | } |
| | | |
| | | public void setWechat(Wechat wechat) { |
| | | this.wechat = wechat; |
| | | } |
| | | |
| | | private XhsmsConfig buildXhsms() { |
| | | XhsmsConfig xhsms = new XhsmsConfig(); |
| | | xhsms.setPath(root.getXhsmsPath()); |
| | | xhsms.setAccount(root.getXhsmsAccount()); |
| | | xhsms.setPwd(root.getXhsmsPwd()); |
| | | xhsms.setExtno(root.getXhsmsjrm()); |
| | | return xhsms; |
| | | } |
| | | |
| | | private MtSmsConfig buildMt() { |
| | | MtSmsConfig mt = new MtSmsConfig(); |
| | | mt.setAccountName(root.getSmsAccountName()); |
| | | mt.setPassword(root.getSmsPassword()); |
| | | mt.setUrl(root.getSmsUrl()); |
| | | mt.setSourceAddr(root.getSmsSourceAddr()); |
| | | mt.setServiceCode(root.getSmsServiceCode()); |
| | | mt.setAppkey(root.getSmsAppkey()); |
| | | mt.setFlag(root.getSmsFlag()); |
| | | return mt; |
| | | } |
| | | |
| | | private AliyunSmsConfig buildAliyun() { |
| | | AliyunSmsConfig aliyun = new AliyunSmsConfig(); |
| | | aliyun.setAccessKeyId(root.getAccessKeyId()); |
| | | aliyun.setAccessKeySecret(root.getAccessKeySecret()); |
| | | aliyun.setSignName(root.getSignName()); |
| | | return aliyun; |
| | | } |
| | | |
| | | /** |
| | | * çä¿¡é
ç½®åç» |
| | | */ |
| | | @Data |
| | | public static class Sms { |
| | | |
| | | private XhsmsConfig xhsms = new XhsmsConfig(); |
| | | |
| | | private MtSmsConfig mt = new MtSmsConfig(); |
| | | |
| | | private AliyunSmsConfig aliyun = new AliyunSmsConfig(); |
| | | |
| | | private ShiyiSms shiyi = new ShiyiSms(); |
| | | |
| | | private MessagingInsert messagingInsert = new MessagingInsert(); |
| | | } |
| | | |
| | | /** |
| | | * æå·å¸ä¸ HIS æå¡å¹³å°çä¿¡ï¼shiyi-his ééï¼ |
| | | */ |
| | | @Data |
| | | public static class ShiyiSms { |
| | | |
| | | /** |
| | | * HIS RunService å°åã |
| | | * <p> |
| | | * TODO å¾
确认ï¼åå®ç°æ {@code http://192.178.0.104:7790/MediInfoHis.svc} 硬ç¼ç å¨ |
| | | * {@code ShiyiSmsUtil.invokeRunService} éï¼è¿éæä¸ºå¯é
ç½®ï¼é»è®¤å¼ä¸å硬ç¼ç ä¿æä¸è´ã |
| | | */ |
| | | private String wsUrl = "http://192.178.0.104:7790/MediInfoHis.svc"; |
| | | |
| | | /** |
| | | * é»è®¤æä½å代ç |
| | | */ |
| | | private String defaultCaozuoydm; |
| | | |
| | | /** |
| | | * é»è®¤æä½åå§å |
| | | */ |
| | | private String defaultCaozuoyxm; |
| | | |
| | | /** |
| | | * çä¿¡ç¾ååç¼ï¼å½åæªä½¿ç¨ï¼çç»åç»éè¦æ¶ï¼ |
| | | */ |
| | | private String sign = ""; |
| | | } |
| | | |
| | | /** |
| | | * é¢çº¦æå·çä¿¡å¹³å°ï¼MessagingInsertï¼Axis SOAP12ï¼ |
| | | */ |
| | | @Data |
| | | public static class MessagingInsert { |
| | | |
| | | /** |
| | | * SOAP æå¡å°åã |
| | | * <p> |
| | | * TODO å¾
确认ï¼åå®ç°æ {@code http://218.108.11.29:8081/MessagingInsert.asmx} 硬ç¼ç å¨ |
| | | * {@code MessagingInsertLocator} çæç代ç éï¼è¿éæä¸ºå¯é
ç½®ï¼é»è®¤å¼ä¸å硬ç¼ç ä¸è´ã |
| | | */ |
| | | private String wsUrl = "http://218.108.11.29:8081/MessagingInsert.asmx"; |
| | | } |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·ç¸å
³é
ç½® |
| | | */ |
| | | @Data |
| | | public static class Wechat { |
| | | |
| | | private ShiyiWechat shiyi = new ShiyiWechat(); |
| | | |
| | | private Xinhua xinhua = new Xinhua(); |
| | | } |
| | | |
| | | /** |
| | | * å¸ä¸å¾®ä¿¡å
¬ä¼å·ï¼hzszlyy ééï¼ |
| | | */ |
| | | @Data |
| | | public static class ShiyiWechat { |
| | | |
| | | /** |
| | | * æ¥å£å°åã |
| | | * <p> |
| | | * TODO å¾
确认ï¼å {@code smsUtils.sendChat} æ {@code http://192.200.54.14:5003/sfjk/SendMessage} |
| | | * 硬ç¼ç 卿¹æ³éï¼è¿éæä¸ºå¯é
ç½®ï¼é»è®¤å¼ä¸å硬ç¼ç ä¿æä¸è´ã |
| | | */ |
| | | private String url = "http://192.200.54.14:5003/sfjk/SendMessage"; |
| | | |
| | | /** |
| | | * æ¥å£å¯é¥ã |
| | | * <p> |
| | | * TODO å¾
确认ï¼å {@code smsUtils.sendChat} æ key |
| | | * {@code ff76f8904f5f32b5ee1739e8ea46e60g} 硬ç¼ç 卿¹æ³éï¼æ¤å¼ç似为å ä½/æµè¯å¯é¥ï¼è¯·ä¸å¡ç¡®è®¤åæ¿æ¢ã |
| | | */ |
| | | private String key = "ff76f8904f5f32b5ee1739e8ea46e60g"; |
| | | |
| | | /** |
| | | * æ¶æ¯æ é¢ã |
| | | * <p> |
| | | * TODO å¾
确认ï¼åå®ç°æãæ¨å¥½ï¼é请æ¨å¡«ååºé¢è°æ¥è¡¨ï¼è¯·ç¹å»å¡«åããåæ»å¨ URL éï¼ |
| | | * ææå¤é¨é¾æ¥ï¼é访/é®å·/宣æï¼é½ç¨åä¸å¥ææ¡ï¼è¿éæä¸ºå¯é
ç½®ï¼é»è®¤å¼ä¸åææ¡ä¸è´ã |
| | | */ |
| | | private String title = "æ¨å¥½ï¼é请æ¨å¡«ååºé¢è°æ¥è¡¨ï¼è¯·ç¹å»å¡«åã"; |
| | | |
| | | /** |
| | | * æ¶æ¯å
容å ä½ã |
| | | * <p> |
| | | * TODO å¾
确认ï¼åå®ç°åæ»ä¸ºãå¾
é访ãï¼æ¤å¤é»è®¤å¼ä¸åå¼ä¸è´ã |
| | | */ |
| | | private String content = "å¾
é访"; |
| | | } |
| | | |
| | | /** |
| | | * æ°å微信å
¬ä¼å·ï¼xh ééï¼ |
| | | */ |
| | | @Data |
| | | public static class Xinhua { |
| | | |
| | | /** |
| | | * æ¥å£æå¡åï¼åºå®å¼ã |
| | | * <p> |
| | | * å {@code XinHuaWXReq.service} é»è®¤ {@code smarthos.pat.notice} |
| | | */ |
| | | private String service = "smarthos.pat.notice"; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * ååéä¸ãè¡ä¸æ±èå¹³å° MT æ¶æ¯ãé
ç½®ï¼nhfy ééï¼ã |
| | | * <p> |
| | | * ç± {@link MessageProperties#getSms()} ä» {@link RootMessageProperties} çæå¹³å段ç»è£
èæ¥ï¼ |
| | | * åæ®µä¸ yml key ç对åºå
³ç³»è§ååæ®µæ³¨éã |
| | | */ |
| | | @Data |
| | | public class MtSmsConfig { |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code sms_accountName} |
| | | */ |
| | | private String accountName; |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code sms_password} |
| | | */ |
| | | private String password; |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code sms_url} |
| | | */ |
| | | private String url; |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code sms_sourceAddr} |
| | | */ |
| | | private String sourceAddr; |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code sms_serviceCode} |
| | | */ |
| | | private String serviceCode; |
| | | |
| | | /** |
| | | * å¯¹åº yml key {@code sms_appkey} |
| | | */ |
| | | private String appkey; |
| | | |
| | | /** |
| | | * çä¿¡ç¾ååç¼ï¼å¯¹åº yml key {@code sms_flag} |
| | | */ |
| | | private String flag; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * åéé
ç½®ï¼å段åä¸åç«ç¹ {@code application-<profile>.yml} ç key <b>å®å
¨åå</b>ï¼ã |
| | | * <p> |
| | | * â ï¸ ä¸ºä»ä¹å¿
é¡»ååãå¿
é¡»æå¹³ï¼ |
| | | * <pre> |
| | | * Spring Boot çæ¾æ£ç»å®æ¯æãç¹åè·¯å¾ + éæ®µè§èååç¼å¹é
ãå·¥ä½çã |
| | | * ä¸ä¸ªå« {@code xhsmsPath} ç keyï¼åªè½ç»å®å°ãåæ®µè·¯å¾ä¸º xhsmsPathãçä½ç½®ï¼ |
| | | * å®<b>ä¸å¯è½</b>è½å° {@code sms.xhsms.path} ä¸ââå³ä½¿ {@code xhsms} æ¯ {@code sms} çååæ®µã |
| | | * {@code path} æ¯ {@code xhsms} çååæ®µä¹ä¸è¡ï¼å®æµå·²ç¡®è®¤ï¼åµå¥ç»å®æä¸º nullï¼ã |
| | | * </pre> |
| | | * æä»¥æ¬ç±»å»æä¿ææå¹³ï¼å段å = yml keyï¼ |
| | | * <ul> |
| | | * <li>{@code xhsmsPath} / {@code xhsmsAccount} / {@code xhsmsPwd} / {@code xhsmsjrm}</li> |
| | | * <li>{@code sms_accountName} / {@code sms_password} / {@code sms_url} / {@code sms_sourceAddr} |
| | | * / {@code sms_serviceCode} / {@code sms_appkey} / {@code sms_flag}</li> |
| | | * <li>{@code accessKeyId} / {@code accessKeySecret} / {@code signName}</li> |
| | | * </ul> |
| | | * éè¦åç»è¯ä¹æ¶ç± {@link MessageProperties} è´è´£è½¬æ¢ï¼ä¸å¡ä»£ç ä¸ç´æ¥ä¾èµå段å¸å±ã |
| | | * <p> |
| | | * åç«ç¹ yml ä¸å¾ä¸éè¦æ¹å¨ã |
| | | */ |
| | | @Component |
| | | @ConfigurationProperties |
| | | public class RootMessageProperties { |
| | | |
| | | // ------------------------------------------------------------------ æ°åçä¿¡ç½å
³ |
| | | /** å¯¹åº {@code xhsmsPath} */ |
| | | private String xhsmsPath; |
| | | |
| | | /** å¯¹åº {@code xhsmsAccount} */ |
| | | private String xhsmsAccount; |
| | | |
| | | /** å¯¹åº {@code xhsmsPwd} */ |
| | | private String xhsmsPwd; |
| | | |
| | | /** å¯¹åº {@code xhsmsjrm}ï¼èææ¥å
¥ç ï¼ */ |
| | | private String xhsmsjrm; |
| | | |
| | | // ------------------------------------------------------------------ ååéä¸ MT |
| | | /** å¯¹åº {@code sms_accountName} */ |
| | | private String smsAccountName; |
| | | |
| | | /** å¯¹åº {@code sms_password} */ |
| | | private String smsPassword; |
| | | |
| | | /** å¯¹åº {@code sms_url} */ |
| | | private String smsUrl; |
| | | |
| | | /** å¯¹åº {@code sms_sourceAddr} */ |
| | | private String smsSourceAddr; |
| | | |
| | | /** å¯¹åº {@code sms_serviceCode} */ |
| | | private String smsServiceCode; |
| | | |
| | | /** å¯¹åº {@code sms_appkey} */ |
| | | private String smsAppkey; |
| | | |
| | | /** å¯¹åº {@code sms_flag}ï¼çä¿¡ç¾ååç¼ï¼ */ |
| | | private String smsFlag; |
| | | |
| | | // ------------------------------------------------------------------ é¿éäºçä¿¡ |
| | | /** å¯¹åº {@code accessKeyId} */ |
| | | private String accessKeyId; |
| | | |
| | | /** å¯¹åº {@code accessKeySecret} */ |
| | | private String accessKeySecret; |
| | | |
| | | /** å¯¹åº {@code signName} */ |
| | | private String signName; |
| | | |
| | | public String getXhsmsPath() { |
| | | return xhsmsPath; |
| | | } |
| | | |
| | | public void setXhsmsPath(String xhsmsPath) { |
| | | this.xhsmsPath = xhsmsPath; |
| | | } |
| | | |
| | | public String getXhsmsAccount() { |
| | | return xhsmsAccount; |
| | | } |
| | | |
| | | public void setXhsmsAccount(String xhsmsAccount) { |
| | | this.xhsmsAccount = xhsmsAccount; |
| | | } |
| | | |
| | | public String getXhsmsPwd() { |
| | | return xhsmsPwd; |
| | | } |
| | | |
| | | public void setXhsmsPwd(String xhsmsPwd) { |
| | | this.xhsmsPwd = xhsmsPwd; |
| | | } |
| | | |
| | | public String getXhsmsjrm() { |
| | | return xhsmsjrm; |
| | | } |
| | | |
| | | public void setXhsmsjrm(String xhsmsjrm) { |
| | | this.xhsmsjrm = xhsmsjrm; |
| | | } |
| | | |
| | | public String getSmsAccountName() { |
| | | return smsAccountName; |
| | | } |
| | | |
| | | public void setSmsAccountName(String smsAccountName) { |
| | | this.smsAccountName = smsAccountName; |
| | | } |
| | | |
| | | public String getSmsPassword() { |
| | | return smsPassword; |
| | | } |
| | | |
| | | public void setSmsPassword(String smsPassword) { |
| | | this.smsPassword = smsPassword; |
| | | } |
| | | |
| | | public String getSmsUrl() { |
| | | return smsUrl; |
| | | } |
| | | |
| | | public void setSmsUrl(String smsUrl) { |
| | | this.smsUrl = smsUrl; |
| | | } |
| | | |
| | | public String getSmsSourceAddr() { |
| | | return smsSourceAddr; |
| | | } |
| | | |
| | | public void setSmsSourceAddr(String smsSourceAddr) { |
| | | this.smsSourceAddr = smsSourceAddr; |
| | | } |
| | | |
| | | public String getSmsServiceCode() { |
| | | return smsServiceCode; |
| | | } |
| | | |
| | | public void setSmsServiceCode(String smsServiceCode) { |
| | | this.smsServiceCode = smsServiceCode; |
| | | } |
| | | |
| | | public String getSmsAppkey() { |
| | | return smsAppkey; |
| | | } |
| | | |
| | | public void setSmsAppkey(String smsAppkey) { |
| | | this.smsAppkey = smsAppkey; |
| | | } |
| | | |
| | | public String getSmsFlag() { |
| | | return smsFlag; |
| | | } |
| | | |
| | | public void setSmsFlag(String smsFlag) { |
| | | this.smsFlag = smsFlag; |
| | | } |
| | | |
| | | public String getAccessKeyId() { |
| | | return accessKeyId; |
| | | } |
| | | |
| | | public void setAccessKeyId(String accessKeyId) { |
| | | this.accessKeyId = accessKeyId; |
| | | } |
| | | |
| | | public String getAccessKeySecret() { |
| | | return accessKeySecret; |
| | | } |
| | | |
| | | public void setAccessKeySecret(String accessKeySecret) { |
| | | this.accessKeySecret = accessKeySecret; |
| | | } |
| | | |
| | | public String getSignName() { |
| | | return signName; |
| | | } |
| | | |
| | | public void setSignName(String signName) { |
| | | this.signName = signName; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * æ°åçä¿¡ç½å
³é
ç½®ï¼xh ééï¼å¸ä¸ hzszlyy ééå¤ç¨åä¸å¥å°å/è´¦å·ï¼ã |
| | | * <p> |
| | | * ç± {@link MessageProperties#getSms()} ä» {@link RootMessageProperties} çæå¹³å段ç»è£
èæ¥ï¼ |
| | | * åæ®µä¸ yml key ç对åºå
³ç³»ï¼{@code xhsmsPath} / {@code xhsmsAccount} / {@code xhsmsPwd} / {@code xhsmsjrm}ã |
| | | */ |
| | | @Data |
| | | public class XhsmsConfig { |
| | | |
| | | /** |
| | | * ç½å
³å°åï¼å¯¹åº yml key {@code xhsmsPath} |
| | | */ |
| | | private String path; |
| | | |
| | | /** |
| | | * è´¦å·ï¼å¯¹åº yml key {@code xhsmsAccount} |
| | | */ |
| | | private String account; |
| | | |
| | | /** |
| | | * å¯ç ï¼å¯¹åº yml key {@code xhsmsPwd} |
| | | */ |
| | | private String pwd; |
| | | |
| | | /** |
| | | * èææ¥å
¥ç ï¼å¯¹åº yml key {@code xhsmsjrm} |
| | | */ |
| | | private String extno; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * çä¿¡åéæ¹å
Œ
±åºç±»ï¼ç»ä¸æ¥å¿ãåæ°æ ¡éªãå¼å¸¸å
åºã |
| | | */ |
| | | public abstract class AbstractSmsSender implements SmsSender { |
| | | |
| | | @Override |
| | | public SendResult send(SmsSendRequest request) { |
| | | if (request == null || StringUtils.isBlank(request.getPhone())) { |
| | | return SendResult.fail(key(), MessageChannel.SMS, "ææºå·ä¸ºç©º", null); |
| | | } |
| | | if (StringUtils.isBlank(request.getContent())) { |
| | | return SendResult.fail(key(), MessageChannel.SMS, "çä¿¡å
容为空", null); |
| | | } |
| | | try { |
| | | return doSend(request); |
| | | } catch (Exception e) { |
| | | logError(request, e); |
| | | return SendResult.fail(key(), MessageChannel.SMS, "çä¿¡åéå¼å¸¸ï¼" + e.getMessage(), null); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * çæ£çåéé»è¾ï¼ç±åæ¸ éå®ç° |
| | | */ |
| | | protected abstract SendResult doSend(SmsSendRequest request) throws Exception; |
| | | |
| | | /** |
| | | * å¼å¸¸æ¥å¿ï¼åç±»å¯è¦åè¡¥å
ä¸ä¸æ |
| | | */ |
| | | protected void logError(SmsSendRequest request, Exception e) { |
| | | org.slf4j.LoggerFactory.getLogger(getClass()) |
| | | .error("ã{}ãçä¿¡åéå¼å¸¸ï¼ææºå·ï¼{}ï¼é误ï¼{}", key(), request.getPhone(), e.getMessage(), e); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * çä¿¡åé请æ±ï¼ä¸å
·ä½åéæ¹æ å
³çç»ä¸å
¥åï¼ã |
| | | * <p> |
| | | * ååéæ¹éè¦çå·®å¼åæ°ï¼ä¸½æ°´çæºæé
ç½®ãå¸ä¸çé¢åºãæ°åçæ¨¡æ¿çï¼éè¿ |
| | | * {@link #extras} éä¼ ï¼é¿å
为äºå°æ°ç«ç¹æ±¡æå
Œ
±æ¥å£ã |
| | | */ |
| | | @Data |
| | | public class SmsSendRequest implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ææºå·ï¼å¤ä¸ªç¨è±æéå·åéï¼å¦ 13500000001,13500000002ï¼ |
| | | */ |
| | | private String phone; |
| | | |
| | | /** |
| | | * çä¿¡å
容ï¼è°ç¨æ¹å·²æ¼æ¥å¥½ç¾å/模æ¿åéï¼ |
| | | */ |
| | | private String content; |
| | | |
| | | /** |
| | | * æºæIDï¼é¨ååéæ¹ï¼ä¸½æ°´ï¼ææºææ¥é
ç½® |
| | | */ |
| | | private String orgid; |
| | | |
| | | /** |
| | | * é¢åºæ è¯ï¼å¸ä¸åºåæ¹æ»¨/å´å±±ä¸¤å¥ç¾åï¼ |
| | | * 1=æ¹æ»¨ï¼ãæå·å¸ç¬¬ä¸äººæ°å»é¢ãï¼ï¼å
¶ä»/空=å´å±±ï¼ãæå·å¸è¿ç¤å»é¢ãï¼ |
| | | */ |
| | | private String campus; |
| | | |
| | | /** |
| | | * ç信模æ¿ç¼ç ï¼é¿éäºç模æ¿ååéæ¹ä½¿ç¨ï¼ |
| | | */ |
| | | private String templateCode; |
| | | |
| | | /** |
| | | * 模æ¿åæ° JSONï¼é¿éäºç模æ¿ååéæ¹ä½¿ç¨ï¼ |
| | | */ |
| | | private String templateParam; |
| | | |
| | | /** |
| | | * æ©å±åæ° |
| | | */ |
| | | private Map<String, Object> extras; |
| | | |
| | | public static SmsSendRequest of(String phone, String content) { |
| | | SmsSendRequest request = new SmsSendRequest(); |
| | | request.setPhone(phone); |
| | | request.setContent(content); |
| | | return request; |
| | | } |
| | | |
| | | public static SmsSendRequest of(String phone, String content, String orgid) { |
| | | SmsSendRequest request = of(phone, content); |
| | | request.setOrgid(orgid); |
| | | return request; |
| | | } |
| | | |
| | | /** |
| | | * 追å ä¸ä¸ªæ©å±åæ° |
| | | */ |
| | | public SmsSendRequest putExtra(String key, Object value) { |
| | | if (this.extras == null) { |
| | | this.extras = new LinkedHashMap<>(); |
| | | } |
| | | this.extras.put(key, value); |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è¯»åæ©å±åæ° |
| | | */ |
| | | public Object getExtra(String key) { |
| | | return this.extras == null ? null : this.extras.get(key); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms; |
| | | |
| | | import com.ruoyi.message.SendResult; |
| | | |
| | | /** |
| | | * çä¿¡åéæ¹ï¼ä¸ä¸ªæ¸ éä¸ä¸ªå®ç°ï¼ã |
| | | * <p> |
| | | * åç«ç¹å¯¹æ¥æ¹å¼å·®å¼å¾å¤§ ââ æ¥ææ ¼å¼ãé´æ/ç¾åãtoken æ¢åãè¿åç å¤å®ãé
ç½®æ¥æºé½ä¸åï¼ |
| | | * å æ¤ä¸è¦ç¨ä¸ä¸ªå®ç°å 忰忝æ¥åï¼èæ¯ä¸ä¸ªæ¸ éä¸ä¸ªç±»ï¼ç±»å
é¨ä¿æä¸çº¿ä¸å®å
¨ä¸è´çè¡ä¸ºã |
| | | */ |
| | | public interface SmsSender { |
| | | |
| | | /** |
| | | * åéæ¹å¯ä¸ keyã |
| | | * <p> |
| | | * 该 key åæ¶æ¯ {@code spring.profiles.active} çåå¼ï¼xh / ls / sltd / nhfy / hzszlyy ...ï¼ï¼ |
| | | * ç± {@code MessageSenderFactory} æ key è·¯ç±ã |
| | | */ |
| | | String key(); |
| | | |
| | | /** |
| | | * åéçä¿¡ |
| | | * |
| | | * @param request ç»ä¸å
¥å |
| | | * @return ç»ä¸ç»æï¼ä¸æå¼å¸¸ï¼ç½ç»/è§£æå¼å¸¸ä¹ä¼è¢«å
è£
æå¤±è´¥ç»æï¼ |
| | | */ |
| | | SendResult send(SmsSendRequest request); |
| | | |
| | | /** |
| | | * åéæ¹è¯´æï¼ç¨äºæ¥å¿ä¸ææ¥ |
| | | */ |
| | | default String description() { |
| | | return key(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms; |
| | | |
| | | import com.ruoyi.message.SendException; |
| | | import com.ruoyi.message.SendResult; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.TreeSet; |
| | | |
| | | /** |
| | | * çä¿¡å鿹工åï¼æ key è·¯ç±å°ä¸ä¸ªå
·ä½å®ç°ï¼è°ç¨æ¹ä¸åéè¦ {@code if (active.equals("xx"))} ç¡¬åæ¯ã |
| | | * <p> |
| | | * Spring ä¼èªå¨æææ {@link SmsSender} 注å
¥è¿æ¥ï¼æ°å¢ä¸ä¸ªç«ç¹åªéæ°å¢ä¸ä¸ªå®ç°ç±»ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class SmsSenderFactory { |
| | | |
| | | /** |
| | | * ç«ç¹ profile â çä¿¡éé key çæ å°ã |
| | | * <p> |
| | | * ç®å两边åå¼å®å
¨ä¸è´ï¼{@code spring.profiles.active} ç´æ¥å°±æ¯æ¸ éåï¼ï¼ |
| | | * åç¬çåºæ å°è¡¨æ¯ä¸ºäºå°æ¥ profile å䏿¸ éåè§£è¦æ¶ä¸æ¹è°ç¨æ¹ã |
| | | */ |
| | | private static final Map<String, String> PROFILE_ALIAS = new LinkedHashMap<>(); |
| | | |
| | | static { |
| | | PROFILE_ALIAS.put("xh", "xh"); |
| | | PROFILE_ALIAS.put("ls", "ls"); |
| | | PROFILE_ALIAS.put("sltd", "sltd"); |
| | | PROFILE_ALIAS.put("nhfy", "nhfy"); |
| | | PROFILE_ALIAS.put("hzszlyy", "hzszlyy"); |
| | | } |
| | | |
| | | private final Map<String, SmsSender> senders = new LinkedHashMap<>(); |
| | | |
| | | public SmsSenderFactory(List<SmsSender> senderList) { |
| | | for (SmsSender sender : senderList) { |
| | | SmsSender exists = senders.put(sender.key(), sender); |
| | | if (exists != null) { |
| | | throw new IllegalStateException("çä¿¡åéæ¹ key éå¤ï¼" + sender.key() |
| | | + "ï¼å²çªå®ç°ï¼" + exists.getClass().getName() + " ä¸ " + sender.getClass().getName()); |
| | | } |
| | | } |
| | | log.info("ãSmsSenderFactoryã已注åçä¿¡åéæ¹ï¼{}", senders.keySet()); |
| | | } |
| | | |
| | | /** |
| | | * æ key è·ååéæ¹ |
| | | * |
| | | * @param key æ¸ é keyï¼å³ {@code spring.profiles.active} åå¼ï¼ |
| | | * @return åéæ¹å®ç° |
| | | * @throws SendException æ¾ä¸å°å¯¹åºå®ç°æ¶æåº |
| | | */ |
| | | public SmsSender get(String key) { |
| | | String resolved = resolveSmsKey(key); |
| | | SmsSender sender = resolved == null ? null : senders.get(resolved); |
| | | if (sender == null) { |
| | | throw new SendException("æªæ¾å°çä¿¡åéæ¹ï¼key=" + key + "ï¼å·²æ³¨åï¼" + senders.keySet()); |
| | | } |
| | | return sender; |
| | | } |
| | | |
| | | /** |
| | | * æ key è·ååéæ¹ï¼æ¾ä¸å°è¿å {@code null} |
| | | */ |
| | | public SmsSender getOrNull(String key) { |
| | | String resolved = resolveSmsKey(key); |
| | | return resolved == null ? null : senders.get(resolved); |
| | | } |
| | | |
| | | /** |
| | | * æ key åéçä¿¡ï¼çä»·äºæ§ä»£ç éé£ 200 è¡ if-else çç»æï¼ |
| | | */ |
| | | public SendResult send(String key, SmsSendRequest request) { |
| | | return get(key).send(request); |
| | | } |
| | | |
| | | /** |
| | | * 夿æ¯å¦åå¨è¯¥ key çåéæ¹ |
| | | */ |
| | | public boolean supports(String key) { |
| | | return getOrNull(key) != null; |
| | | } |
| | | |
| | | /** |
| | | * 已注åçæ¸ é key |
| | | */ |
| | | public Set<String> keys() { |
| | | return new TreeSet<>(senders.keySet()); |
| | | } |
| | | |
| | | /** |
| | | * ç«ç¹ profile â æ¸ é key |
| | | */ |
| | | public static String resolveSmsKey(String profile) { |
| | | if (StringUtils.isEmpty(profile)) { |
| | | return null; |
| | | } |
| | | String alias = PROFILE_ALIAS.get(profile); |
| | | return alias == null ? profile : alias; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.aliyun; |
| | | |
| | | import com.aliyun.dysmsapi20170525.Client; |
| | | import com.aliyun.dysmsapi20170525.models.AddSmsTemplateRequest; |
| | | import com.aliyun.dysmsapi20170525.models.AddSmsTemplateResponse; |
| | | import com.aliyun.dysmsapi20170525.models.AddSmsTemplateResponseBody; |
| | | import com.aliyun.dysmsapi20170525.models.ModifySmsTemplateRequest; |
| | | import com.aliyun.dysmsapi20170525.models.ModifySmsTemplateResponse; |
| | | import com.aliyun.dysmsapi20170525.models.ModifySmsTemplateResponseBody; |
| | | import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateListRequest; |
| | | import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateListResponse; |
| | | import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateListResponseBody; |
| | | import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateRequest; |
| | | import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateResponse; |
| | | import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateResponseBody; |
| | | import com.aliyun.dysmsapi20170525.models.SendBatchSmsRequest; |
| | | import com.aliyun.dysmsapi20170525.models.SendBatchSmsResponse; |
| | | import com.aliyun.dysmsapi20170525.models.SendBatchSmsResponseBody; |
| | | import com.aliyun.dysmsapi20170525.models.SendSmsRequest; |
| | | import com.aliyun.dysmsapi20170525.models.SendSmsResponse; |
| | | import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody; |
| | | import com.aliyun.tea.TeaException; |
| | | import com.aliyun.teaopenapi.models.Config; |
| | | import com.aliyun.teautil.Common; |
| | | import com.aliyun.teautil.models.RuntimeOptions; |
| | | import com.ruoyi.message.config.MessageProperties; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * é¿éäºçä¿¡ APIã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼é»è¾åèª {@code com.smartor.service.impl.BaseSmsaccountServiceImpl}ï¼ |
| | | * ä½<b>ä¸åä¾èµ smartor ç domain 对象</b>ï¼{@code BaseSmsRequest} / {@code BatchBaseSmsRequest} / |
| | | * {@code TemplateSmsRequest}ï¼ï¼æ¹ä¸ºç´æ¥æ¥æ¶åºç¡åæ°ï¼ä»èè®©æ¬æ¨¡åå¯ä»¥æ¾å¨ |
| | | * {@code ruoyi-system} ä¹åã被ææä¸å¡æ¨¡åå¤ç¨ã |
| | | * <p> |
| | | * å {@code BaseSmsaccountServiceImpl} ä¿ç为ãçä¿¡è´¦å·ç®¡ç + DB 读åãç Serviceï¼ |
| | | * å
¶ä¸çé¿éäºè°ç¨æ¹ä¸ºå§ææ¬ç±»ï¼è§æ¹é 说æï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class AliYunSmsApi { |
| | | |
| | | private final MessageProperties properties; |
| | | |
| | | public AliYunSmsApi(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | /** |
| | | * åéçä¿¡ |
| | | * |
| | | * @param phoneNumbers ææºå·ï¼å¤ä¸ªç¨éå·åé |
| | | * @param templateCode 模æ¿ç¼ç |
| | | * @param templateParam 模æ¿åæ° JSON |
| | | */ |
| | | public SendSmsResponseBody sendSms(String phoneNumbers, String templateCode, String templateParam) { |
| | | try { |
| | | Client client = createClient(); |
| | | SendSmsRequest sendSmsRequest = new SendSmsRequest() |
| | | .setPhoneNumbers(phoneNumbers) |
| | | .setSignName(properties.getSms().getAliyun().getSignName()) |
| | | .setTemplateCode(templateCode) |
| | | .setTemplateParam(templateParam); |
| | | SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions()); |
| | | return sendSmsResponse.getBody(); |
| | | } catch (Exception e) { |
| | | log.error("é¿éäºçä¿¡åé失败ï¼phoneNumbersï¼{}ï¼templateCodeï¼{}", phoneNumbers, templateCode, e); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * æ¹éåéçä¿¡ |
| | | */ |
| | | public SendBatchSmsResponseBody batchSendMsg(List<String> phoneNumbers, String templateCode) { |
| | | try { |
| | | Client client = createClient(); |
| | | List<String> signNameJson = new ArrayList<>(); |
| | | for (int i = 0; i < phoneNumbers.size(); i++) { |
| | | signNameJson.add("\"" + properties.getSms().getAliyun().getSignName() + "\""); |
| | | } |
| | | SendBatchSmsRequest sendBatchSmsRequest = new SendBatchSmsRequest() |
| | | .setSignNameJson(signNameJson.toString()) |
| | | .setPhoneNumberJson(phoneNumbers.toString()) |
| | | .setTemplateCode(templateCode); |
| | | RuntimeOptions runtime = new RuntimeOptions(); |
| | | try { |
| | | SendBatchSmsResponse sendBatchSmsResponse = client.sendBatchSmsWithOptions(sendBatchSmsRequest, runtime); |
| | | return sendBatchSmsResponse.getBody(); |
| | | } catch (TeaException error) { |
| | | Common.assertAsString(error.message); |
| | | } catch (Exception innerError) { |
| | | TeaException error = new TeaException(innerError.getMessage(), innerError); |
| | | Common.assertAsString(error.message); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("é¿éäºçä¿¡æ¹éåé失败ï¼templateCodeï¼{}", templateCode, e); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢çä¿¡æ¨¡æ¿ |
| | | */ |
| | | public AddSmsTemplateResponseBody addSmsTemplate(Integer templateType, String templateName, |
| | | String templateContent, String remark) { |
| | | try { |
| | | Client client = createClient(); |
| | | AddSmsTemplateRequest addSmsTemplateRequest = new AddSmsTemplateRequest() |
| | | .setTemplateType(templateType) |
| | | .setTemplateName(templateName) |
| | | .setTemplateContent(templateContent) |
| | | .setRemark(remark); |
| | | RuntimeOptions runtime = new RuntimeOptions(); |
| | | AddSmsTemplateResponse response = client.addSmsTemplateWithOptions(addSmsTemplateRequest, runtime); |
| | | return response.getBody(); |
| | | } catch (TeaException error) { |
| | | Common.assertAsString(error.message); |
| | | } catch (Exception innerError) { |
| | | TeaException error = new TeaException(innerError.getMessage(), innerError); |
| | | Common.assertAsString(error.message); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹çä¿¡æ¨¡æ¿ |
| | | */ |
| | | public ModifySmsTemplateResponseBody modifySmsTemplate(Integer templateType, String templateName, |
| | | String templateCode, String templateContent, String remark) { |
| | | try { |
| | | Client client = createClient(); |
| | | ModifySmsTemplateRequest modifySmsTemplateRequest = new ModifySmsTemplateRequest(); |
| | | modifySmsTemplateRequest.setTemplateType(templateType); |
| | | modifySmsTemplateRequest.setTemplateName(templateName); |
| | | modifySmsTemplateRequest.setTemplateCode(templateCode); |
| | | modifySmsTemplateRequest.setTemplateContent(templateContent); |
| | | modifySmsTemplateRequest.setRemark(remark); |
| | | RuntimeOptions runtime = new RuntimeOptions(); |
| | | ModifySmsTemplateResponse response = client.modifySmsTemplateWithOptions(modifySmsTemplateRequest, runtime); |
| | | return response.getBody(); |
| | | } catch (TeaException error) { |
| | | Common.assertAsString(error.message); |
| | | } catch (Exception innerError) { |
| | | TeaException error = new TeaException(innerError.getMessage(), innerError); |
| | | Common.assertAsString(error.message); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç信模æ¿å表 |
| | | */ |
| | | public QuerySmsTemplateListResponseBody querySmsTemplate(Integer pageIndex, Integer pageSize) { |
| | | try { |
| | | Client client = createClient(); |
| | | QuerySmsTemplateListRequest request = new QuerySmsTemplateListRequest() |
| | | .setPageIndex(pageIndex) |
| | | .setPageSize(pageSize); |
| | | RuntimeOptions runtime = new RuntimeOptions(); |
| | | QuerySmsTemplateListResponse response = client.querySmsTemplateListWithOptions(request, runtime); |
| | | return response.getBody(); |
| | | } catch (TeaException error) { |
| | | Common.assertAsString(error.message); |
| | | } catch (Exception innerError) { |
| | | TeaException error = new TeaException(innerError.getMessage(), innerError); |
| | | Common.assertAsString(error.message); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç信模æ¿å®¡æ ¸ç¶æ |
| | | */ |
| | | public QuerySmsTemplateResponseBody querySmsTemplateStatus(String templateCode) { |
| | | try { |
| | | Client client = createClient(); |
| | | QuerySmsTemplateRequest request = new QuerySmsTemplateRequest().setTemplateCode(templateCode); |
| | | RuntimeOptions runtime = new RuntimeOptions(); |
| | | QuerySmsTemplateResponse response = client.querySmsTemplateWithOptions(request, runtime); |
| | | return response.getBody(); |
| | | } catch (TeaException error) { |
| | | Common.assertAsString(error.message); |
| | | } catch (Exception innerError) { |
| | | TeaException error = new TeaException(innerError.getMessage(), innerError); |
| | | Common.assertAsString(error.message); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private Client createClient() throws Exception { |
| | | Config config = new Config() |
| | | .setAccessKeyId(properties.getSms().getAliyun().getAccessKeyId()) |
| | | .setAccessKeySecret(properties.getSms().getAliyun().getAccessKeySecret()); |
| | | // 访é®çåå |
| | | config.endpoint = "dysmsapi.aliyuncs.com"; |
| | | return new Client(config); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.aliyun; |
| | | |
| | | import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody; |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * é¿éäºçä¿¡åéæ¹ï¼{@code aliyun} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼é¿éäº dysmsapi SDKï¼{@code SignName + TemplateCode + TemplateParam}ï¼ |
| | | * æåå¤å®ä¸ºååº {@code Code == "OK"}ã |
| | | * <p> |
| | | * 说æï¼è¯¥ééç®ååªå¨ {@code BaseSmsaccountServiceImpl}ï¼çä¿¡è´¦å·/模æ¿ç®¡çï¼é使ç¨ï¼ |
| | | * ä¸å¡åéæµç¨æªèµ°å®ãæ¶å£åå¯ç±å·¥åç»ä¸è°åº¦ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class AliYunSmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é key |
| | | */ |
| | | public static final String KEY = "aliyun"; |
| | | |
| | | private final AliYunSmsApi aliYunSmsApi; |
| | | |
| | | public AliYunSmsSender(AliYunSmsApi aliYunSmsApi) { |
| | | this.aliYunSmsApi = aliYunSmsApi; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "é¿éäºçä¿¡ï¼dysmsapiï¼æ¨¡æ¿åï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) { |
| | | //é¿éäºçä¿¡ä¸èµ°å
容ç´åï¼èæ¯ æ¨¡æ¿ç¼ç + 模æ¿åæ° |
| | | SendSmsRequestAdapter adapter = new SendSmsRequestAdapter(request); |
| | | if (adapter.templateParam == null) { |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "ç信模æ¿åæ°ä¸ºç©º", null); |
| | | } |
| | | |
| | | SendSmsResponseBody body = aliYunSmsApi.sendSms( |
| | | adapter.phone, adapter.templateCode, adapter.templateParam); |
| | | if (body == null) { |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", null); |
| | | } |
| | | log.info("ã{}ãé¿éäºçä¿¡åéç»æï¼code={}, message={}", KEY, body.getCode(), body.getMessage()); |
| | | if ("OK".equals(body.getCode())) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, body.getMessage()) |
| | | .withCode(body.getCode()) |
| | | .withMessage(body.getBizId()); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, body.getMessage(), body.getMessage()) |
| | | .withCode(body.getCode()); |
| | | } |
| | | |
| | | /** |
| | | * ç»è¿åºç±»ãå
容ä¸è½ä¸ºç©ºãçæ ¡éªï¼é¿éäºç¨æ¨¡æ¿åæ°ï¼ä¸ç¨ content ç´åã |
| | | */ |
| | | @Override |
| | | public SendResult send(SmsSendRequest request) { |
| | | if (request == null || request.getPhone() == null || request.getPhone().trim().isEmpty()) { |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "ææºå·ä¸ºç©º", null); |
| | | } |
| | | try { |
| | | return doSend(request); |
| | | } catch (Exception e) { |
| | | log.error("ã{}ãé¿éäºçä¿¡åéå¼å¸¸ï¼{}", KEY, e.getMessage(), e); |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åéå¼å¸¸ï¼" + e.getMessage(), null); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°éé
å¨ï¼æç»ä¸å
¥åæ å°æé¿éäºéè¦çä¸ä¸ªå段ã |
| | | * <p> |
| | | * å
¼å®¹æ§è°ç¨æ¹ï¼{@code BaseSmsRequest}ï¼ä¼ åä¹ æ¯ï¼ææºå·èµ° {@code phone}ï¼ |
| | | * 模æ¿ç¼ç /åæ°èµ° {@code templateCode} / {@code templateParam}ã |
| | | */ |
| | | private static final class SendSmsRequestAdapter { |
| | | private final String phone; |
| | | private final String templateCode; |
| | | private final String templateParam; |
| | | |
| | | private SendSmsRequestAdapter(SmsSendRequest request) { |
| | | this.phone = request.getPhone(); |
| | | this.templateCode = request.getTemplateCode(); |
| | | this.templateParam = request.getTemplateParam() != null |
| | | ? request.getTemplateParam() |
| | | : request.getContent(); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.hzszlyy; |
| | | |
| | | import com.ruoyi.common.utils.HttpUtil; |
| | | import com.ruoyi.common.utils.sign.Md5Utils; |
| | | import com.ruoyi.message.config.MessageProperties; |
| | | import com.ruoyi.message.config.XhsmsConfig; |
| | | import com.ruoyi.message.config.RootMessageProperties; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æå·å¸ä¸çä¿¡ç½å
³ APIï¼æ°åç½å
³å°å + å¸ä¸èªæç¾åç®æ³ï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼JSON æ¥æ {@code userName/content/phoneList/timestamp/sign}ï¼ |
| | | * ç¾å为 {@code MD5(userName + timestamp + MD5(passWord))}ã |
| | | * <p> |
| | | * â ï¸ ç«ç¹å·®å¼ï¼å¿
é¡»åºåï¼ä¸è½åå¹¶ï¼ï¼ |
| | | * <ul> |
| | | * <li>å´å±±é¢åºï¼ç¾ååç¼ {@code ãæå·å¸è¿ç¤å»é¢ã}ï¼</li> |
| | | * <li>æ¹æ»¨é¢åºï¼ç¾ååç¼ {@code ãæå·å¸ç¬¬ä¸äººæ°å»é¢ã}ã</li> |
| | | * </ul> |
| | | * åå®ç°åä¸¤ä¸ªæ¹æ³ {@code smsUtils.sendSms} / {@code smsUtils.sendSms1} æ¿è½½è¿ä¸å·®å¼ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.ruoyi.common.utils.sms.smsUtils}ï¼ç¾ååç¼ä¿æä¸åã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ShiyiSmsApi { |
| | | |
| | | /** |
| | | * å´å±±é¢åºçä¿¡ç¾ååç¼ |
| | | */ |
| | | public static final String PREFIX_WUSHAN = "ãæå·å¸è¿ç¤å»é¢ã"; |
| | | |
| | | /** |
| | | * æ¹æ»¨é¢åºçä¿¡ç¾ååç¼ |
| | | */ |
| | | public static final String PREFIX_HIBIN = "ãæå·å¸ç¬¬ä¸äººæ°å»é¢ã"; |
| | | |
| | | private final MessageProperties properties; |
| | | |
| | | public ShiyiSmsApi(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | /** |
| | | * å´å±±é¢åºåéï¼çä»· {@code smsUtils.sendSms}ï¼ |
| | | * |
| | | * @return ç½å
³è¿åçå符串ï¼å«ãå¤çæåã表示æå |
| | | */ |
| | | public String sendWushan(String phone, String content) { |
| | | return send(phone, content, PREFIX_WUSHAN); |
| | | } |
| | | |
| | | /** |
| | | * æ¹æ»¨é¢åºåéï¼çä»· {@code smsUtils.sendSms1}ï¼ |
| | | * |
| | | * @return ç½å
³è¿åçå符串ï¼å«ãå¤çæåã表示æå |
| | | */ |
| | | public String sendHibin(String phone, String content) { |
| | | return send(phone, content, PREFIX_HIBIN); |
| | | } |
| | | |
| | | private String send(String phone, String content, String prefix) { |
| | | XhsmsConfig cfg = properties.getSms().getXhsms(); |
| | | long timestamp = new Date().getTime(); |
| | | String sign = Md5Utils.hash(cfg.getAccount() + timestamp + Md5Utils.hash(cfg.getPwd())); |
| | | String fullContent = prefix + content; |
| | | String jsonMsg = "{" |
| | | + "\"userName\": \"" + cfg.getAccount() + "\"," |
| | | + "\"content\": \"" + fullContent + "\"," |
| | | + "\"phoneList\": [" + phone + "]," |
| | | + "\"timestamp\": " + timestamp + "," |
| | | + "\"sign\": \"" + sign + "\"" |
| | | + "}"; |
| | | log.info("ãShiyiSmsApiãå¸ä¸çä¿¡åéï¼å°åï¼{}ï¼ç¾ååç¼ï¼{}ï¼ææºå·ï¼{}", cfg.getPath(), prefix, phone); |
| | | Boolean sendMsg = HttpUtil.postJsonRequest(cfg.getPath(), jsonMsg); |
| | | return String.valueOf(sendMsg); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.hzszlyy; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æå·å¸ä¸çä¿¡åéæ¹ï¼{@code hzszlyy} ééï¼ã |
| | | * <p> |
| | | * â ï¸ è¯¥ééæä¸¤ä¸ªé¢åºã两å¥çä¿¡ç¾åï¼å¿
é¡»åºåå¼ï¼ |
| | | * <ul> |
| | | * <li>{@link SmsSendRequest#getCampus()} 为 {@code "1"} â æ¹æ»¨é¢åºï¼{@code smsUtils.sendSms1}ï¼ï¼</li> |
| | | * <li>å
¶ä»ï¼å«ä¸ºç©ºï¼â å´å±±é¢åºï¼{@code smsUtils.sendSms}ï¼ã</li> |
| | | * </ul> |
| | | * å¤å®ä¾æ®æ¥èª {@code RyTask} ä¸éè¿ {@code SysDept.campusid} æ¥å°çé¢åºç¼ç ï¼ |
| | | * è°ç¨æ¹è´è´£æ {@code campus} ä¼ è¿æ¥ï¼ä¸ä¼ åä¿æä¸çº¿ä¸ãéæ¹æ»¨å³å´å±±ãä¸è´çé»è®¤è¡ä¸ºã |
| | | * <p> |
| | | * æåå¤å®ï¼ç½å
³è¿åå符串å
å«ãå¤çæåãã |
| | | * ä»£ç æ¥æºï¼{@code RyTask.hzszlyy 忝}ï¼è¡ä¸ºä¿æä¸åï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ShiyiSmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼ä¸ {@code spring.profiles.active=hzszlyy} å¯¹åº |
| | | */ |
| | | public static final String KEY = "hzszlyy"; |
| | | |
| | | /** |
| | | * é¢åºç¼ç ï¼æ¹æ»¨ |
| | | */ |
| | | public static final String CAMPUS_HIBIN = "1"; |
| | | |
| | | private final ShiyiSmsApi shiyiSmsApi; |
| | | |
| | | public ShiyiSmsSender(ShiyiSmsApi shiyiSmsApi) { |
| | | this.shiyiSmsApi = shiyiSmsApi; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "æå·å¸ä¸çä¿¡ï¼å´å±±/æ¹æ»¨ä¸¤å¥ç¾åï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) { |
| | | boolean hibin = CAMPUS_HIBIN.equals(request.getCampus()); |
| | | String result = hibin |
| | | ? shiyiSmsApi.sendHibin(request.getPhone(), request.getContent()) |
| | | : shiyiSmsApi.sendWushan(request.getPhone(), request.getContent()); |
| | | |
| | | log.info("ã{}ãå¸ä¸çä¿¡åéç»æï¼{}ï¼ï¼{}", KEY, hibin ? "æ¹æ»¨" : "å´å±±", result); |
| | | if (StringUtils.isNotEmpty(result) && result.contains("å¤çæå")) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, result).withCode(result); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", result).withCode(result); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.ls; |
| | | |
| | | /** |
| | | * 丽水çä¿¡æºæçº§é
ç½®ã |
| | | * <p> |
| | | * åå®ç°æä¸å¥æ¥è¯¢æ¹å¼ï¼{@code RyTask} ææºææ¥ {@code ls.msg.info}ã |
| | | * {@code ServiceSubtaskServiceImpl} ç¨ {@code MsgLSEnum}ã |
| | | * {@code SmsRecordsServiceImpl} åæ¯ç¬¬ä¸å¥ï¼ï¼è¿éç»ä¸ä¸ºä¸ä¸ªå¼å¯¹è±¡ã |
| | | */ |
| | | public class LishuiMessageConfig { |
| | | |
| | | /** |
| | | * æ¶æ¯åéå°å |
| | | */ |
| | | private String address; |
| | | |
| | | /** |
| | | * ç§æ·IDï¼æ¥æ XiaoXiTou.ZuHuIDï¼ |
| | | */ |
| | | private String zuHuId; |
| | | |
| | | /** |
| | | * ç§æ·åç§°ï¼æ¥æ XiaoXiTou.ZuHuMC / FaSongJGMCï¼ |
| | | */ |
| | | private String zuHuMc; |
| | | |
| | | /** |
| | | * åéæºæIDï¼æ¥æ XiaoXiTou.FaSongJGIDï¼ |
| | | */ |
| | | private String orgid; |
| | | |
| | | /** |
| | | * åé人ID |
| | | */ |
| | | private String sendPersonId; |
| | | |
| | | /** |
| | | * åé人å§å |
| | | */ |
| | | private String sendPersonName; |
| | | |
| | | /** |
| | | * token è·åå°å |
| | | */ |
| | | private String tokenUrl; |
| | | |
| | | public String getAddress() { |
| | | return address; |
| | | } |
| | | |
| | | public void setAddress(String address) { |
| | | this.address = address; |
| | | } |
| | | |
| | | public String getZuHuId() { |
| | | return zuHuId; |
| | | } |
| | | |
| | | public void setZuHuId(String zuHuId) { |
| | | this.zuHuId = zuHuId; |
| | | } |
| | | |
| | | public String getZuHuMc() { |
| | | return zuHuMc; |
| | | } |
| | | |
| | | public void setZuHuMc(String zuHuMc) { |
| | | this.zuHuMc = zuHuMc; |
| | | } |
| | | |
| | | public String getOrgid() { |
| | | return orgid; |
| | | } |
| | | |
| | | public void setOrgid(String orgid) { |
| | | this.orgid = orgid; |
| | | } |
| | | |
| | | public String getSendPersonId() { |
| | | return sendPersonId; |
| | | } |
| | | |
| | | public void setSendPersonId(String sendPersonId) { |
| | | this.sendPersonId = sendPersonId; |
| | | } |
| | | |
| | | public String getSendPersonName() { |
| | | return sendPersonName; |
| | | } |
| | | |
| | | public void setSendPersonName(String sendPersonName) { |
| | | this.sendPersonName = sendPersonName; |
| | | } |
| | | |
| | | public String getTokenUrl() { |
| | | return tokenUrl; |
| | | } |
| | | |
| | | public void setTokenUrl(String tokenUrl) { |
| | | this.tokenUrl = tokenUrl; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "LishuiMessageConfig{address='" + address + '\'' |
| | | + ", zuHuId='" + zuHuId + '\'' |
| | | + ", zuHuMc='" + zuHuMc + '\'' |
| | | + ", orgid='" + orgid + '\'' |
| | | + ", sendPersonId='" + sendPersonId + '\'' |
| | | + ", sendPersonName='" + sendPersonName + '\'' |
| | | + ", tokenUrl='" + tokenUrl + '\'' |
| | | + '}'; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.ls; |
| | | |
| | | /** |
| | | * ä¸½æ°´æºæçº§é
ç½® / token æä¾æ¹ï¼æ©å±ç¹ SPIï¼ã |
| | | * <p> |
| | | * ç°ç¶ï¼ä¸½æ°´çãçä¿¡å°å / ç§æ·ä¿¡æ¯ / åé人ãå卿°æ®åºè¡¨ {@code sys_config} ç {@code ls.msg.info} éï¼ |
| | | * è表访é®å¨ {@code ruoyi-system} / {@code smartor} 模åï¼token æ¢åé»è¾å¨ {@code smartor} ç |
| | | * {@code LSHospTokenUtil}ã |
| | | * <p> |
| | | * 为äºè®© {@code ruoyi-message} ä¿æãä¸ä¾èµä¸å¡æ¨¡åãçå¹²ååå±ï¼è¿éå®ä¹ SPIï¼ |
| | | * ç±ä¸å¡æ¨¡åï¼smartorï¼å®ç°å¹¶æ³¨å为 Spring Beanï¼è¥å®¹å¨é没æå®ç°ï¼æ¬æ¨¡åä¼éåä¸ºä½¿ç¨ |
| | | * 代ç å
éæé
ç½®ï¼çä»·äº {@code MsgLSEnum}ï¼ä¸ä¸æ¢ tokenã |
| | | * <p> |
| | | * æ¨èå®ç°æ¾å¨ smartor 模åï¼å
é¨éè¿ {@code ISysConfigService} æ¥è¯¢ {@code ls.msg.info}ã |
| | | */ |
| | | public interface LishuiMessageConfigProvider { |
| | | |
| | | /** |
| | | * æ¥è¯¢æå®æºæç丽水çä¿¡é
ç½® |
| | | * |
| | | * @param orgid æºæID |
| | | * @return é
ç½®ï¼æ¥ä¸å°è¿å {@code null} |
| | | */ |
| | | LishuiMessageConfig getConfig(String orgid); |
| | | |
| | | /** |
| | | * è·å丽水 360 å¹³å° token |
| | | * |
| | | * @param orgid æºæID |
| | | * @param tokenUrl token è·åå°å |
| | | * @return tokenï¼è·å失败è¿å {@code null} |
| | | */ |
| | | String getToken(String orgid, String tokenUrl); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.ls; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.google.gson.Gson; |
| | | import com.ruoyi.common.utils.OkHttpExample; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.ObjectProvider; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 丽水çä¿¡åéæ¹ï¼{@code ls} ééï¼ä¸½æ°´ 13 å®¶å»é¢ï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼ä¸å
¶ä»éé差弿大çä¸ä¸ªï¼ï¼ |
| | | * <ul> |
| | | * <li>æ¥æä¸º {@code XiaoXiTou + YeWuXX.DuanXinXX} çåµå¥ JSONï¼</li> |
| | | * <li>éè¦å
ç¨ {@code LyraTokenUtil} æ¢ tokenï¼å以 header ä¼ tokenï¼</li> |
| | | * <li>æºæå°å/ç§æ·/åé人åå¨ {@code sys_config} 表ç {@code ls.msg.info} éï¼ææºææ¥è¯¢ï¼ï¼</li> |
| | | * <li>æåå¤å®ä¸ºååºä½ {@code Code == "0"}ã</li> |
| | | * </ul> |
| | | * ä»£ç æ¥æºï¼{@code RyTask.ls 忝} + {@code RyTask.getDXCode}ï¼è¡ä¸ºä¿æä¸åï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class LishuiSmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼ä¸ {@code spring.profiles.active=ls} å¯¹åº |
| | | */ |
| | | public static final String KEY = "ls"; |
| | | |
| | | private final ObjectProvider<LishuiMessageConfigProvider> configProvider; |
| | | |
| | | public LishuiSmsSender(ObjectProvider<LishuiMessageConfigProvider> configProvider) { |
| | | this.configProvider = configProvider; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "丽水çä¿¡ï¼13å®¶å»é¢ï¼token + æºæçº§é
ç½®ï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) throws Exception { |
| | | LishuiMessageConfig config = resolveConfig(request.getOrgid()); |
| | | if (config == null || StringUtils.isEmpty(config.getAddress())) { |
| | | //ä¸çº¿ä¸è¡ä¸ºä¸è´ï¼è¯¥æºææ²¡æé
ç½®çä¿¡å°åï¼è§ä¸ºåé失败 |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败,è¯¥æºææ²¡æé
ç½®çä¿¡å°å", null); |
| | | } |
| | | |
| | | String token = resolveToken(request.getOrgid(), config); |
| | | Map<String, Object> body = buildBody(request, config); |
| | | |
| | | log.info("ã{}ã丽水çä¿¡åéï¼å°åï¼{}ï¼åæ°ï¼{}ï¼æºæIDï¼{}", |
| | | KEY, config.getAddress(), request, request.getOrgid()); |
| | | String result = OkHttpExample.sendPostRequest(config.getAddress(), new Gson().toJson(body), token); |
| | | log.info("ã{}ã丽水çä¿¡åéç»æï¼{}", KEY, result); |
| | | |
| | | if (StringUtils.isEmpty(result)) { |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", result); |
| | | } |
| | | Map<String, Object> textParam = JSON.parseObject(result, Map.class); |
| | | Object codeObj = textParam == null ? null : textParam.get("Code"); |
| | | String code = codeObj == null ? null : codeObj.toString(); |
| | | if ("0".equals(code)) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, result).withCode(code); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", result).withCode(code); |
| | | } |
| | | |
| | | /** |
| | | * ä¼å
使ç¨ä¸å¡æ¨¡å注åç {@link LishuiMessageConfigProvider}ï¼æ¥ sys_configï¼ï¼ |
| | | * å¦åéå为代ç å
éæé
ç½®ã |
| | | */ |
| | | private LishuiMessageConfig resolveConfig(String orgid) { |
| | | LishuiMessageConfigProvider provider = configProvider.getIfAvailable(); |
| | | if (provider != null) { |
| | | LishuiMessageConfig config = provider.getConfig(orgid); |
| | | if (config != null) { |
| | | if (StringUtils.isEmpty(config.getOrgid())) { |
| | | config.setOrgid(orgid); |
| | | } |
| | | return config; |
| | | } |
| | | } |
| | | LishuiMessageConfig fallback = LishuiStaticConfig.fallback(orgid); |
| | | return fallback; |
| | | } |
| | | |
| | | private String resolveToken(String orgid, LishuiMessageConfig config) { |
| | | if (StringUtils.isEmpty(config.getTokenUrl())) { |
| | | return null; |
| | | } |
| | | LishuiMessageConfigProvider provider = configProvider.getIfAvailable(); |
| | | if (provider == null) { |
| | | log.warn("ã{}ãæªæ¾å° LishuiMessageConfigProvider å®ç°ï¼æ æ³æ¢å tokenï¼å°ä»¥ç©º token è°ç¨", KEY); |
| | | return null; |
| | | } |
| | | return provider.getToken(orgid, config.getTokenUrl()); |
| | | } |
| | | |
| | | /** |
| | | * ç»è£
ä¸½æ°´æ¥æï¼{@code XiaoXiTou + YeWuXX.DuanXinXX}ï¼ä¸ {@code RyTask.getDXCode} å®å
¨ä¸è´ï¼ |
| | | */ |
| | | private Map<String, Object> buildBody(SmsSendRequest request, LishuiMessageConfig config) { |
| | | Map<String, Object> headerMap = new LinkedHashMap<>(); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | headerMap.put("XiaoXiID", IdUtils.simpleUUID()); |
| | | headerMap.put("FaSongSJ", sdf.format(new Date())); |
| | | headerMap.put("ZuHuID", config.getZuHuId()); |
| | | headerMap.put("ZuHuMC", config.getZuHuMc()); |
| | | headerMap.put("FaSongJGID", config.getOrgid()); |
| | | headerMap.put("FaSongJGMC", config.getZuHuMc()); |
| | | headerMap.put("FaSongXTJC", "SUIFANGXT"); |
| | | headerMap.put("FaSongXTMC", "é访系ç»"); |
| | | headerMap.put("FaSongFCSJC", "ZJHES"); |
| | | headerMap.put("XiaoXiLX", "FZ_PT_DuanXinFS"); |
| | | headerMap.put("XiaoXiMC", "çä¿¡åé"); |
| | | |
| | | Map<String, Object> duanXinXX = new LinkedHashMap<>(); |
| | | duanXinXX.put("ShouJiHM", request.getPhone()); |
| | | duanXinXX.put("FaSongNR", request.getContent()); |
| | | duanXinXX.put("FaSongRID", config.getSendPersonId()); |
| | | duanXinXX.put("FaSongRXM", config.getSendPersonName()); |
| | | |
| | | Map<String, Object> yeWuXX = new LinkedHashMap<>(); |
| | | yeWuXX.put("DuanXinXX", duanXinXX); |
| | | |
| | | Map<String, Object> body = new LinkedHashMap<>(); |
| | | body.put("XiaoXiTou", headerMap); |
| | | body.put("YeWuXX", yeWuXX); |
| | | return body; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.ls; |
| | | |
| | | /** |
| | | * ä¸½æ°´æºæé
ç½®çéæå
åºã |
| | | * <p> |
| | | * 说æï¼å {@code com.ruoyi.common.enums.MsgLSEnum} éä¸¤ä¸ªæºæï¼æ¯å®ã丽水å¸ä¸å»é¢ï¼ |
| | | * çå
·ä½å°å/ç§æ·/åé人é
ç½®å·²è¢«æ´æ®µæ³¨éæï¼çº¿ä¸å®é
ä¾èµ {@code sys_config} 表ç |
| | | * {@code ls.msg.info}ï¼è§ {@code RyTask.ls 忝} ä¸ {@code SmsRecordsServiceImpl.sendSMS}ï¼ã |
| | | * <p> |
| | | * å æ¤è¿éä¸åéæå
åºï¼éæå
åºä¸æ¦ç»åºãå°å为空ãçé
ç½®ï¼åèä¼æçº¿ä¸åæ¬è½æ£å¸¸ |
| | | * æ¢å token çæµç¨ææï¼è§ {@link LishuiSmsSender#resolveConfig}ï¼ã |
| | | * è¥ç¡®å®éè¦éæé
ç½®ï¼è¯·å®ç° {@link LishuiMessageConfigProvider}ï¼æ¨èï¼èµ° {@code sys_config}ï¼ã |
| | | * <p> |
| | | * ä¿çæ¬ç±»æ¯ä¸ºäºæ 注该åå²éçç¹ï¼é¿å
å人éå¤è¸©åã |
| | | */ |
| | | final class LishuiStaticConfig { |
| | | |
| | | private LishuiStaticConfig() { |
| | | } |
| | | |
| | | /** |
| | | * æ°¸è¿è¿å {@code null}ï¼è¡¨ç¤ºã没æéæå
åºãï¼ç±è°ç¨æ¹å³å®å¦ä½å¤çã |
| | | */ |
| | | static LishuiMessageConfig fallback(String orgid) { |
| | | return null; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.messaginginsert; |
| | | |
| | | import com.ruoyi.message.config.MessageProperties; |
| | | import com.ruoyi.message.sms.provider.messaginginsert.ws.MessagingInsertLocator; |
| | | import com.ruoyi.message.sms.provider.messaginginsert.ws.MessagingInsertSoap12Stub; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.xml.rpc.holders.IntHolder; |
| | | import javax.xml.rpc.holders.StringHolder; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * é¢çº¦æå·çä¿¡å¹³å°ï¼MessagingInsertï¼APIã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼Axis SOAP12ï¼{@code SMSMessageAccept(xmlReq, out int, out string)}ï¼ |
| | | * è¯·æ±æ¥æä¸º {@code <Request><operate>S001</operate>...} ç XMLã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼åé»è¾å¨ {@code com.ruoyi.system.service.impl.SmsParamServiceImpl.sendSmsInfo}ï¼ |
| | | * ç°æ¶å£å°æ¬æ¨¡åï¼åå®ç°ææå¡å°å硬ç¼ç å¨çæç {@code MessagingInsertLocator} éï¼ |
| | | * è¿éæ¹ä¸ºæ {@code message.sms.messaging-insert.ws-url} æ¾å¼è®¾ç½®ï¼é»è®¤å¼ä¸å硬ç¼ç ä¸è´ï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class MessagingInsertSmsApi { |
| | | |
| | | private final MessageProperties properties; |
| | | |
| | | public MessagingInsertSmsApi(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | /** |
| | | * åéé¢çº¦æå·ç±»çä¿¡ï¼operate=S001ï¼Type=é¢çº¦æå·ï¼ |
| | | * |
| | | * @param content çä¿¡å
容 |
| | | * @param phone ææºå· |
| | | * @return å¹³å°è¿åç |
| | | */ |
| | | public Integer sendSmsInfo(String content, String phone) { |
| | | MessagingInsertSoap12Stub binding; |
| | | try { |
| | | MessagingInsertLocator locator = new MessagingInsertLocator(); |
| | | String wsUrl = properties.getSms().getMessagingInsert().getWsUrl(); |
| | | if (wsUrl != null && !wsUrl.trim().isEmpty()) { |
| | | locator.setMessagingInsertSoap12EndpointAddress(wsUrl); |
| | | locator.setMessagingInsertSoapEndpointAddress(wsUrl); |
| | | } |
| | | binding = (MessagingInsertSoap12Stub) locator.getMessagingInsertSoap12(); |
| | | } catch (Exception e) { |
| | | log.error("ãMessagingInsertSmsApiãåå§å SOAP 客æ·ç«¯å¤±è´¥ï¼{}", e.getMessage(), e); |
| | | return null; |
| | | } |
| | | |
| | | String xmlReq = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" |
| | | + "<Request>\n" |
| | | + "<operate>S001</operate>\n" |
| | | + "<Sheets>\n" |
| | | + "<Sheet>\n" |
| | | + "<Content>" + content + "</Content>\n" |
| | | + "<Mobile>" + phone + "</Mobile>\n" |
| | | + "<DateTime>" + new Date() + "</DateTime>\n" |
| | | + "<Type>é¢çº¦æå·</Type>\n" |
| | | + "</Sheet>\n" |
| | | + "</Sheets>\n" |
| | | + "</Request>"; |
| | | |
| | | Integer result = null; |
| | | try { |
| | | result = binding.SMSMessageAccept(xmlReq, new IntHolder(), new StringHolder()); |
| | | } catch (Exception e) { |
| | | log.error("ãMessagingInsertSmsApiãçä¿¡åé失败ï¼{}", e.getMessage(), e); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.messaginginsert; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * é¢çº¦æå·çä¿¡å¹³å°åéæ¹ï¼{@code messaging-insert} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼Axis SOAP12 {@code SMSMessageAccept(XML)}ï¼è¿å intã |
| | | * <p> |
| | | * 说æï¼è¯¥ééç®ååªå¨ {@code SmsParamServiceImpl.sendSmsInfo} é使ç¨ï¼é¢çº¦æå·éç¥çä¿¡ï¼ï¼ |
| | | * ä¸å¡é访æµç¨æªèµ°å®ãæ¶å£åå¯ç±å·¥åç»ä¸è°åº¦ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class MessagingInsertSmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é key |
| | | */ |
| | | public static final String KEY = "messaging-insert"; |
| | | |
| | | private final MessagingInsertSmsApi messagingInsertSmsApi; |
| | | |
| | | public MessagingInsertSmsSender(MessagingInsertSmsApi messagingInsertSmsApi) { |
| | | this.messagingInsertSmsApi = messagingInsertSmsApi; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "é¢çº¦æå·çä¿¡å¹³å°ï¼MessagingInsertï¼Axis SOAP12ï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) { |
| | | Integer code = messagingInsertSmsApi.sendSmsInfo(request.getContent(), request.getPhone()); |
| | | String codeStr = code == null ? null : code.toString(); |
| | | //TODO å¾
确认ï¼åå®ç°æªå¯¹è¿å int åæåå¤å®ï¼åªæ int åä¸è¿åã |
| | | // è¿éæãéç©ºå³æåãå¤çä»¥ä¿æè¡ä¸ºï¼è°ç¨æ¹åæ¬ä¹ä¸å¤æï¼ï¼ç¡®è®¤è¿åç è¯ä¹ååºæ¹ä¸ºç²¾ç¡®å¤å®ã |
| | | if (code != null) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, codeStr).withCode(codeStr); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", null); |
| | | } |
| | | } |
| ÎļþÃû´Ó ruoyi-system/src/main/java/WebServiceClient/MessagingInsert.java ÐÞ¸Ä |
| | |
| | | * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. |
| | | */ |
| | | |
| | | package WebServiceClient; |
| | | package com.ruoyi.message.sms.provider.messaginginsert.ws; |
| | | |
| | | public interface MessagingInsert extends javax.xml.rpc.Service { |
| | | public String getMessagingInsertSoap12Address(); |
| ÎļþÃû´Ó ruoyi-system/src/main/java/WebServiceClient/MessagingInsertLocator.java ÐÞ¸Ä |
| | |
| | | * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. |
| | | */ |
| | | |
| | | package WebServiceClient; |
| | | package com.ruoyi.message.sms.provider.messaginginsert.ws; |
| | | |
| | | public class MessagingInsertLocator extends org.apache.axis.client.Service implements MessagingInsert { |
| | | |
| ÎļþÃû´Ó ruoyi-system/src/main/java/WebServiceClient/MessagingInsertSoap12Stub.java ÐÞ¸Ä |
| | |
| | | * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. |
| | | */ |
| | | |
| | | package WebServiceClient; |
| | | package com.ruoyi.message.sms.provider.messaginginsert.ws; |
| | | |
| | | public class MessagingInsertSoap12Stub extends org.apache.axis.client.Stub implements MessagingInsertSoap_PortType { |
| | | private java.util.Vector cachedSerClasses = new java.util.Vector(); |
| ÎļþÃû´Ó ruoyi-system/src/main/java/WebServiceClient/MessagingInsertSoap_BindingStub.java ÐÞ¸Ä |
| | |
| | | * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. |
| | | */ |
| | | |
| | | package WebServiceClient; |
| | | package com.ruoyi.message.sms.provider.messaginginsert.ws; |
| | | |
| | | import org.apache.axis.client.Stub; |
| | | |
| ÎļþÃû´Ó ruoyi-system/src/main/java/WebServiceClient/MessagingInsertSoap_PortType.java ÐÞ¸Ä |
| | |
| | | * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. |
| | | */ |
| | | |
| | | package WebServiceClient; |
| | | package com.ruoyi.message.sms.provider.messaginginsert.ws; |
| | | |
| | | public interface MessagingInsertSoap_PortType extends java.rmi.Remote { |
| | | public Integer SMSMessageAccept(String xmlReq, javax.xml.rpc.holders.IntHolder SMSMessageAcceptResult, javax.xml.rpc.holders.StringHolder xmlResp) throws java.rmi.RemoteException; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.nhfy; |
| | | |
| | | /** |
| | | * MT æ¶æ¯åéååºåæ°ï¼è¡ä¸æ±èå¹³å° {@code /submitsm} çè¿åä½ï¼ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.smartor.domain.MtSubmitSmResp}ï¼éåéæ¹æ¶å£å° {@code ruoyi-message}ã |
| | | */ |
| | | public class MtSubmitSmResp { |
| | | |
| | | /** |
| | | * ä¸åç¶æï¼0 æåï¼å
¶ä»å¤±è´¥ |
| | | */ |
| | | private Integer code; |
| | | |
| | | /** |
| | | * 失败æ¶çé误æç¤º |
| | | */ |
| | | private String message; |
| | | |
| | | /** |
| | | * 失败æ¶çé误æç¤º |
| | | */ |
| | | private String success; |
| | | |
| | | /** |
| | | * ååºç»æ |
| | | */ |
| | | private String result; |
| | | |
| | | /** |
| | | * ä¸åç¶æ=0æ¶ææï¼ä¸ºç³»ç»äº§çç msgidï¼å¦åçäºé¿çä¿¡æåï¼åè¿å夿¡ msgid |
| | | */ |
| | | private java.util.List<String> mtSubmitSm; |
| | | |
| | | public Integer getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(Integer code) { |
| | | this.code = code; |
| | | } |
| | | |
| | | public String getMessage() { |
| | | return message; |
| | | } |
| | | |
| | | public void setMessage(String message) { |
| | | this.message = message; |
| | | } |
| | | |
| | | public String getSuccess() { |
| | | return success; |
| | | } |
| | | |
| | | public void setSuccess(String success) { |
| | | this.success = success; |
| | | } |
| | | |
| | | public String getResult() { |
| | | return result; |
| | | } |
| | | |
| | | public void setResult(String result) { |
| | | this.result = result; |
| | | } |
| | | |
| | | public java.util.List<String> getMtSubmitSm() { |
| | | return mtSubmitSm; |
| | | } |
| | | |
| | | public void setMtSubmitSm(java.util.List<String> mtSubmitSm) { |
| | | this.mtSubmitSm = mtSubmitSm; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.nhfy; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ruoyi.message.config.MessageProperties; |
| | | import com.ruoyi.message.config.MtSmsConfig; |
| | | import com.ruoyi.message.config.RootMessageProperties; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.http.HttpEntity; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.security.MessageDigest; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * MTæ¶æ¯åéå·¥å
·ç±»ï¼SP åè¡ä¸æ±èå¹³å°æäº¤ MT æ¶æ¯ï¼ã |
| | | * <p> |
| | | * æ¥å£å°åï¼{@code http://ip:port/submitsm}ï¼ç¼ç ï¼UTF-8ï¼é´æç®æ³ï¼MD5ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.smartor.common.MtSubmitSmUtil}ï¼{@code @Component} + {@code @Value} 注å
¥ï¼ï¼ |
| | | * è¿ç§»åé
ç½®æ¹ä¸ºä» {@link MessageProperties} 读åï¼åºå±ä»æ¯å䏿¹ configuration keyï¼ï¼è¡ä¸ºä¸åã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class MtSubmitSmUtil { |
| | | |
| | | private static final RestTemplate REST_TEMPLATE = new RestTemplate(); |
| | | |
| | | private final MessageProperties properties; |
| | | |
| | | public MtSubmitSmUtil(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | /** |
| | | * åé MT æ¶æ¯ |
| | | * |
| | | * @param destAddr ç®æ å·ç |
| | | * @param content çä¿¡å
容 |
| | | * @return ååºç»æ |
| | | */ |
| | | public Map<String, Object> submitSm(String destAddr, String content) { |
| | | MtSmsConfig mt = properties.getSms().getMt(); |
| | | try { |
| | | log.info("ååéä¸åéçä¿¡ï¼destAddrï¼{}ï¼contentï¼{}", destAddr, content); |
| | | String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); |
| | | String hashHex = buildHashHex(mt.getAccountName(), mt.getPassword(), date); |
| | | |
| | | Map<String, Object> authMap = new HashMap<>(); |
| | | authMap.put("Algorithm", "MD5"); |
| | | authMap.put("Date", date); |
| | | authMap.put("HASHHEX", hashHex); |
| | | |
| | | Map<String, Object> reqMap = new HashMap<>(); |
| | | reqMap.put("accountName", mt.getAccountName()); |
| | | reqMap.put("Authorization", authMap); |
| | | reqMap.put("DestAddr", destAddr); |
| | | reqMap.put("SourceAddr", mt.getSourceAddr()); |
| | | reqMap.put("Content", mt.getFlag() + content); |
| | | reqMap.put("ServiceCode", mt.getServiceCode()); |
| | | |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8)); |
| | | headers.set("Accept-Language", "UTF-8"); |
| | | //TODO å¾
确认ï¼åå®ç°æ app-key åæ»ä¸º ak-BFq4NN0TMf92J7KAioNYGz74ï¼ |
| | | // è yml éåæ¶åå¨ sms_appkey é
ç½®é¡¹å´æªè¢«ä½¿ç¨ãè¿éä¸ºä¿æçº¿ä¸è¡ä¸ºä»ç¨å硬ç¼ç å¼ï¼ |
| | | // 建议æ¹ä¸ºè¯»å mt.getAppkey()ï¼å·²æ¯æï¼å¹¶ç¡®è®¤åªä¸ªææ¯æ£ç¡®ç app-keyã |
| | | headers.set("app-key", "ak-BFq4NN0TMf92J7KAioNYGz74"); |
| | | |
| | | HttpEntity<String> entity = new HttpEntity<>(JSON.toJSONString(reqMap), headers); |
| | | log.info("MtSubmitSm 请æ±å°åï¼{}ï¼è¯·æ±åæ°ï¼{}", mt.getUrl() + "/submitsm", JSON.toJSONString(reqMap)); |
| | | |
| | | ResponseEntity<String> response = REST_TEMPLATE.postForEntity(mt.getUrl(), entity, String.class); |
| | | log.info("MtSubmitSm ååºç»æï¼{}", response.getBody()); |
| | | |
| | | return JSON.parseObject(response.getBody(), Map.class); |
| | | } catch (Exception e) { |
| | | log.error("MtSubmitSm åé失败ï¼urlï¼{}ï¼destAddrï¼{}ï¼errorï¼{}", mt.getUrl(), destAddr, e.getMessage(), e); |
| | | Map<String, Object> resp = new HashMap<>(); |
| | | resp.put("code", -1); |
| | | resp.put("message", "åéå¼å¸¸ï¼" + e.getMessage()); |
| | | return resp; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è®¡ç® HASHHEXï¼MD5(Algorithm:å¸å·å:å¯ç :Date) |
| | | * <p> |
| | | * ä¾ï¼{@code MD5:95555:12345:2016-10-09 16:19:43} |
| | | */ |
| | | private static String buildHashHex(String accountName, String password, String date) throws Exception { |
| | | String plain = "MD5:" + accountName + ":" + password + ":" + date; |
| | | MessageDigest md = MessageDigest.getInstance("MD5"); |
| | | byte[] bytes = md.digest(plain.getBytes(StandardCharsets.UTF_8)); |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (byte b : bytes) { |
| | | sb.append(String.format("%02x", b)); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 夿 MT ååºæ¯å¦æåï¼{@code result == "0"}ï¼ |
| | | */ |
| | | public static boolean isSuccess(Map<String, Object> resp) { |
| | | if (resp == null) { |
| | | return false; |
| | | } |
| | | Object result = resp.get("result"); |
| | | return result != null && "0".equals(result.toString()); |
| | | } |
| | | |
| | | /** |
| | | * 夿ååºç result åæ®µæ¯å¦ä¸ºç©º |
| | | */ |
| | | public static boolean hasResult(Map<String, Object> resp) { |
| | | return resp != null && StringUtils.isNotEmpty(String.valueOf(resp.get("result"))); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.nhfy; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ååéä¸çä¿¡åéæ¹ï¼{@code nhfy} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼REST + è¡ä¸æ±èå¹³å° {@code /submitsm}ï¼é´æ {@code HASHHEX = MD5(MD5:è´¦å·:å¯ç :æ¶é´)}ï¼ |
| | | * æåå¤å®ä¸ºååº {@code result == "0"}ã |
| | | * ä»£ç æ¥æºï¼{@code RyTask.nhfy 忝} + {@code RedisMqReceiver.nhfy 忝} + {@code SmsController} + {@code smsSubTask}ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class NhfySmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼ä¸ {@code spring.profiles.active=nhfy} å¯¹åº |
| | | */ |
| | | public static final String KEY = "nhfy"; |
| | | |
| | | private final MtSubmitSmUtil mtSubmitSmUtil; |
| | | |
| | | public NhfySmsSender(MtSubmitSmUtil mtSubmitSmUtil) { |
| | | this.mtSubmitSmUtil = mtSubmitSmUtil; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "ååéä¸çä¿¡ï¼è¡ä¸æ±èå¹³å° /submitsmï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) { |
| | | Map<String, Object> resp = mtSubmitSmUtil.submitSm(request.getPhone(), request.getContent()); |
| | | log.info("ã{}ãååéä¸çä¿¡åéç»æï¼{}", KEY, resp); |
| | | |
| | | Object result = resp == null ? null : resp.get("result"); |
| | | String code = result == null ? null : result.toString(); |
| | | if (MtSubmitSmUtil.isSuccess(resp)) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, String.valueOf(resp)).withCode(code); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", String.valueOf(resp)).withCode(code); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.shiyi; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æå·å¸ä¸ HIS å¹³å°çä¿¡åéæ¹ï¼{@code shiyi-his} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼WCF SOAP {@code RunService(TradeType=FASONGDX)}ï¼æ¥æä½ä¸º XMLï¼ |
| | | * æåå¤å®ä¸ºååº {@code ERRNO == "0"}ã |
| | | * <p> |
| | | * 说æï¼è¯¥ééç®å<b>è¿æ²¡æä¸å¡è°ç¨ç¹</b>ï¼åªæ {@code /sms/sendShiyiTest} æµè¯æ¥å£ï¼ï¼ |
| | | * æ¶å£å°æ¬æ¨¡ååå¯ç±å·¥åç»ä¸è°åº¦ã |
| | | * ä»£ç æ¥æºï¼å {@code com.smartor.common.ShiyiSmsUtil}ï¼è¡ä¸ºä¿æä¸åï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ShiyiHisSmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼ä¸æ¯ profile åï¼å 为å½åç«ç¹é½ä¼èµ°èªå·±çééï¼ |
| | | */ |
| | | public static final String KEY = "shiyi-his"; |
| | | |
| | | private final ShiyiSmsUtil shiyiSmsUtil; |
| | | |
| | | public ShiyiHisSmsSender(ShiyiSmsUtil shiyiSmsUtil) { |
| | | this.shiyiSmsUtil = shiyiSmsUtil; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "æå·å¸ä¸ HIS å¹³å°çä¿¡ï¼WCF SOAP FASONGDXï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) { |
| | | ShiyiSmsRequest smsRequest = new ShiyiSmsRequest(); |
| | | smsRequest.setShoujihao(request.getPhone()); |
| | | smsRequest.setDuanxinnr(request.getContent()); |
| | | smsRequest.setJigoudm(request.getOrgid()); |
| | | if (request.getTemplateCode() != null) { |
| | | smsRequest.setDuanxinlx(request.getTemplateCode()); |
| | | } |
| | | |
| | | ShiyiSmsResponse response = shiyiSmsUtil.sendSms(smsRequest); |
| | | if (response.isSuccess()) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, response.getRawXml()) |
| | | .withCode(response.getErrno()) |
| | | .withMessage(response.getErrmsg()); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, |
| | | "çä¿¡åé失败ï¼" + response.getErrmsg(), response.getRawXml()) |
| | | .withCode(response.getErrno()); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.shiyi; |
| | | |
| | | /** |
| | | * æå·å¸ä¸ HIS æå¡å¹³å° 5.2 çä¿¡ä¸å¡ 请æ±å¯¹è±¡ (FASONGDX)ã |
| | | * <p> |
| | | * å¯¹åº TradeMsg XML æ ¹èç¹ {@code FASONGDX_IN}ã |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.smartor.domain.ShiyiSmsRequest}ã |
| | | */ |
| | | public class ShiyiSmsRequest { |
| | | |
| | | /** æä½å代ç */ |
| | | private String caozuoydm; |
| | | |
| | | /** æä½åå§å */ |
| | | private String caozuoyxm; |
| | | |
| | | /** æä½æ¥æ yyyy-MM-dd HH:mm:ss */ |
| | | private String caozuorq; |
| | | |
| | | /** ç³»ç»æ è¯ */ |
| | | private String xitongbs; |
| | | |
| | | /** åé¢ä»£ç */ |
| | | private String fenyuandm; |
| | | |
| | | /** æºæä»£ç */ |
| | | private String jigoudm; |
| | | |
| | | /** æºæåç§° */ |
| | | private String jigoumc; |
| | | |
| | | /** æºæéªè¯ç */ |
| | | private String jigouyzm; |
| | | |
| | | /** æ¥æ¶æºæä»£ç */ |
| | | private String jieshoujgdm; |
| | | |
| | | /** ç»ç«¯çº§å« */ |
| | | private String zhongduanjb; |
| | | |
| | | /** ç»ç«¯æµæ°´ */ |
| | | private String zhongduanls; |
| | | |
| | | /** IP å°å */ |
| | | private String ipaddress; |
| | | |
| | | /** ä¸å¡ç±»å */ |
| | | private String yewulx; |
| | | |
| | | /** æ¥å
¥åºæä»£ç */ |
| | | private String jierucsdm; |
| | | |
| | | /** çä¿¡ç±»å 0ï¼æ®éçä¿¡ */ |
| | | private String duanxinlx; |
| | | |
| | | /** ææºå· */ |
| | | private String shoujihao; |
| | | |
| | | /** çä¿¡å
容 */ |
| | | private String duanxinnr; |
| | | |
| | | public String getCaozuoydm() { |
| | | return caozuoydm; |
| | | } |
| | | |
| | | public void setCaozuoydm(String caozuoydm) { |
| | | this.caozuoydm = caozuoydm; |
| | | } |
| | | |
| | | public String getCaozuoyxm() { |
| | | return caozuoyxm; |
| | | } |
| | | |
| | | public void setCaozuoyxm(String caozuoyxm) { |
| | | this.caozuoyxm = caozuoyxm; |
| | | } |
| | | |
| | | public String getCaozuorq() { |
| | | return caozuorq; |
| | | } |
| | | |
| | | public void setCaozuorq(String caozuorq) { |
| | | this.caozuorq = caozuorq; |
| | | } |
| | | |
| | | public String getXitongbs() { |
| | | return xitongbs; |
| | | } |
| | | |
| | | public void setXitongbs(String xitongbs) { |
| | | this.xitongbs = xitongbs; |
| | | } |
| | | |
| | | public String getFenyuandm() { |
| | | return fenyuandm; |
| | | } |
| | | |
| | | public void setFenyuandm(String fenyuandm) { |
| | | this.fenyuandm = fenyuandm; |
| | | } |
| | | |
| | | public String getJigoudm() { |
| | | return jigoudm; |
| | | } |
| | | |
| | | public void setJigoudm(String jigoudm) { |
| | | this.jigoudm = jigoudm; |
| | | } |
| | | |
| | | public String getJigoumc() { |
| | | return jigoumc; |
| | | } |
| | | |
| | | public void setJigoumc(String jigoumc) { |
| | | this.jigoumc = jigoumc; |
| | | } |
| | | |
| | | public String getJigouyzm() { |
| | | return jigouyzm; |
| | | } |
| | | |
| | | public void setJigouyzm(String jigouyzm) { |
| | | this.jigouyzm = jigouyzm; |
| | | } |
| | | |
| | | public String getJieshoujgdm() { |
| | | return jieshoujgdm; |
| | | } |
| | | |
| | | public void setJieshoujgdm(String jieshoujgdm) { |
| | | this.jieshoujgdm = jieshoujgdm; |
| | | } |
| | | |
| | | public String getZhongduanjb() { |
| | | return zhongduanjb; |
| | | } |
| | | |
| | | public void setZhongduanjb(String zhongduanjb) { |
| | | this.zhongduanjb = zhongduanjb; |
| | | } |
| | | |
| | | public String getZhongduanls() { |
| | | return zhongduanls; |
| | | } |
| | | |
| | | public void setZhongduanls(String zhongduanls) { |
| | | this.zhongduanls = zhongduanls; |
| | | } |
| | | |
| | | public String getIpaddress() { |
| | | return ipaddress; |
| | | } |
| | | |
| | | public void setIpaddress(String ipaddress) { |
| | | this.ipaddress = ipaddress; |
| | | } |
| | | |
| | | public String getYewulx() { |
| | | return yewulx; |
| | | } |
| | | |
| | | public void setYewulx(String yewulx) { |
| | | this.yewulx = yewulx; |
| | | } |
| | | |
| | | public String getJierucsdm() { |
| | | return jierucsdm; |
| | | } |
| | | |
| | | public void setJierucsdm(String jierucsdm) { |
| | | this.jierucsdm = jierucsdm; |
| | | } |
| | | |
| | | public String getDuanxinlx() { |
| | | return duanxinlx; |
| | | } |
| | | |
| | | public void setDuanxinlx(String duanxinlx) { |
| | | this.duanxinlx = duanxinlx; |
| | | } |
| | | |
| | | public String getShoujihao() { |
| | | return shoujihao; |
| | | } |
| | | |
| | | public void setShoujihao(String shoujihao) { |
| | | this.shoujihao = shoujihao; |
| | | } |
| | | |
| | | public String getDuanxinnr() { |
| | | return duanxinnr; |
| | | } |
| | | |
| | | public void setDuanxinnr(String duanxinnr) { |
| | | this.duanxinnr = duanxinnr; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.shiyi; |
| | | |
| | | /** |
| | | * æå·å¸ä¸ HIS æå¡å¹³å° 5.2 çä¿¡ä¸å¡ ååºå¯¹è±¡ (FASONGDX_OUT)ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.smartor.domain.ShiyiSmsResponse}ã |
| | | */ |
| | | public class ShiyiSmsResponse { |
| | | |
| | | /** é误å·ï¼0 æåï¼1 失败ï¼2 HIS å¼å¸¸ï¼99 åæ°å¼å¸¸ï¼<0 ç³»ç»å¼å¸¸ */ |
| | | private String errno; |
| | | |
| | | /** é误æè¿° */ |
| | | private String errmsg; |
| | | |
| | | /** æ©å±é误æè¿° */ |
| | | private String errmsgex; |
| | | |
| | | /** HIS ä¾§æ¶æ¯ ID */ |
| | | private String messageId; |
| | | |
| | | /** çä¿¡ ID */ |
| | | private String duanxinid; |
| | | |
| | | /** åå§ååº XMLï¼è°è¯ç¨ï¼ */ |
| | | private String rawXml; |
| | | |
| | | public boolean isSuccess() { |
| | | return "0".equals(errno); |
| | | } |
| | | |
| | | public String getErrno() { |
| | | return errno; |
| | | } |
| | | |
| | | public void setErrno(String errno) { |
| | | this.errno = errno; |
| | | } |
| | | |
| | | public String getErrmsg() { |
| | | return errmsg; |
| | | } |
| | | |
| | | public void setErrmsg(String errmsg) { |
| | | this.errmsg = errmsg; |
| | | } |
| | | |
| | | public String getErrmsgex() { |
| | | return errmsgex; |
| | | } |
| | | |
| | | public void setErrmsgex(String errmsgex) { |
| | | this.errmsgex = errmsgex; |
| | | } |
| | | |
| | | public String getMessageId() { |
| | | return messageId; |
| | | } |
| | | |
| | | public void setMessageId(String messageId) { |
| | | this.messageId = messageId; |
| | | } |
| | | |
| | | public String getDuanxinid() { |
| | | return duanxinid; |
| | | } |
| | | |
| | | public void setDuanxinid(String duanxinid) { |
| | | this.duanxinid = duanxinid; |
| | | } |
| | | |
| | | public String getRawXml() { |
| | | return rawXml; |
| | | } |
| | | |
| | | public void setRawXml(String rawXml) { |
| | | this.rawXml = rawXml; |
| | | } |
| | | } |
| ÎļþÃû´Ó smartor/src/main/java/com/smartor/common/ShiyiSmsUtil.java ÐÞ¸Ä |
| | |
| | | package com.smartor.common; |
| | | package com.ruoyi.message.sms.provider.shiyi; |
| | | |
| | | import com.smartor.domain.ShiyiSmsRequest; |
| | | import com.smartor.domain.ShiyiSmsResponse; |
| | | import com.ruoyi.message.config.MessageProperties; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.http.HttpEntity; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import javax.xml.parsers.DocumentBuilder; |
| | | import javax.xml.parsers.DocumentBuilderFactory; |
| | | import org.w3c.dom.Document; |
| | | import org.w3c.dom.Element; |
| | | import org.w3c.dom.Node; |
| | | import org.w3c.dom.NodeList; |
| | | import org.xml.sax.InputSource; |
| | | |
| | | import javax.xml.parsers.DocumentBuilder; |
| | | import javax.xml.parsers.DocumentBuilderFactory; |
| | | import java.io.StringReader; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æå·å¸ä¸ HIS æå¡å¹³å°å¯¹æ¥å·¥å
፱ȋ |
| | | * æå·å¸ä¸ HIS æå¡å¹³å°å¯¹æ¥å·¥å
·ç±»ï¼çä¿¡ï¼ã |
| | | * <p> |
| | | * æãHIS æå¡å¹³å°æ¥å£è¯´æææ¡£ V1.1ã3.1 è约å®ï¼HIS 对å¤ä»¥ WCF Web Service å½¢å¼åå¸ï¼ |
| | | * ç»ä¸å
¥å£ï¼{@code int RunService(string TradeType, string TradeMsg, ref string TradeOut)}ï¼ |
| | | * å
¶ä¸ {@code TradeType} æ è¯ä¸å¡ç¼ç ï¼{@code TradeMsg} 为 UTF-8 ç¼ç ç XML æ¥æã |
| | | * æ¬å·¥å
·ç±»ç®åå®ç° 5.2 çä¿¡ä¸å¡ (TradeType=FASONGDX)ã |
| | | * æ¬ç±»å®ç° 5.2 çä¿¡ä¸å¡ (TradeType=FASONGDX)ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.smartor.common.ShiyiSmsUtil}ãå·®å¼ç¹ï¼ |
| | | * <ul> |
| | | * <li>é
ç½®ç± {@code @Value("${his.service.defaultCaozuoydm:}")} æ¹ä¸ºä» {@link MessageProperties} 读å |
| | | * ï¼åç¼ {@code message.sms.shiyi.*}ï¼ï¼å key ä¸åéè¦ï¼</li> |
| | | * <li>æ¥å£å°åç±ç¡¬ç¼ç æ¹ä¸º {@code message.sms.shiyi.ws-url}ï¼é»è®¤å¼ä¸å硬ç¼ç ä¸è´ |
| | | * ï¼{@code http://192.178.0.104:7790/MediInfoHis.svc}ï¼ã</li> |
| | | * </ul> |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ShiyiSmsUtil { |
| | | |
| | | /** 5.2 çä¿¡ä¸å¡ TradeType */ |
| | | /** |
| | | * 5.2 çä¿¡ä¸å¡ TradeType |
| | | */ |
| | | public static final String TRADE_TYPE_FASONGDX = "FASONGDX"; |
| | | |
| | | /** WCF å½å空é´ï¼é»è®¤éææ¡£ç¤ºä¾ */ |
| | | private String namespace = "http://tempuri.org/"; |
| | | /** |
| | | * WCF å½å空é´ï¼é»è®¤éææ¡£ç¤ºä¾ |
| | | */ |
| | | private final String namespace = "http://tempuri.org/"; |
| | | |
| | | /** é»è®¤æä½å代ç */ |
| | | @Value("${his.service.defaultCaozuoydm:}") |
| | | private String defaultCaozuoydm; |
| | | |
| | | /** é»è®¤æä½åå§å */ |
| | | @Value("${his.service.defaultCaozuoyxm:}") |
| | | private String defaultCaozuoyxm; |
| | | |
| | | /** é»è®¤ç³»ç»æ è¯ */ |
| | | private String defaultXitongbs = "0"; |
| | | |
| | | /** é»è®¤åé¢ä»£ç */ |
| | | private String defaultFenyuandm = "1"; |
| | | |
| | | /** é»è®¤æºæä»£ç */ |
| | | private String defaultJigoudm = "1"; |
| | | private final MessageProperties properties; |
| | | |
| | | private final RestTemplate restTemplate = new RestTemplate(); |
| | | |
| | | public ShiyiSmsUtil(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | /** |
| | | * åéçä¿¡ (FASONGDX) |
| | |
| | | } |
| | | |
| | | /** |
| | | * è°ç¨ å¸ä¸ WCF RunService æ¥å£ãSOAP 1.1 åºç¡é´ææææ¡£ä¸è¦æ±ã |
| | | * è°ç¨å¸ä¸ WCF RunService æ¥å£ãSOAP 1.1 åºç¡é´ææææ¡£ä¸è¦æ±ã |
| | | * |
| | | * @return TradeOut æ¥æï¼æå¡ç«¯ ref åæ°ï¼ |
| | | */ |
| | | public String invokeRunService(String tradeType, String tradeMsg) { |
| | | String soapEnvelope = buildSoapEnvelope(tradeType, tradeMsg); |
| | | String hisServiceUrl = "http://192.178.0.104:7790/MediInfoHis.svc"; |
| | | String hisServiceUrl = properties.getSms().getShiyi().getWsUrl(); |
| | | |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(new MediaType("text", "xml", StandardCharsets.UTF_8)); |
| | |
| | | } |
| | | |
| | | private void applyDefaults(ShiyiSmsRequest request) { |
| | | MessageProperties.ShiyiSms shiyi = properties.getSms().getShiyi(); |
| | | if (StringUtils.isBlank(request.getCaozuoydm())) { |
| | | request.setCaozuoydm(defaultCaozuoydm); |
| | | request.setCaozuoydm(shiyi.getDefaultCaozuoydm()); |
| | | } |
| | | if (StringUtils.isBlank(request.getCaozuoyxm())) { |
| | | request.setCaozuoyxm(defaultCaozuoyxm); |
| | | request.setCaozuoyxm(shiyi.getDefaultCaozuoyxm()); |
| | | } |
| | | if (StringUtils.isBlank(request.getCaozuorq())) { |
| | | request.setCaozuorq(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
| | | } |
| | | if (StringUtils.isBlank(request.getXitongbs())) { |
| | | request.setXitongbs(defaultXitongbs); |
| | | request.setXitongbs("0"); |
| | | } |
| | | if (StringUtils.isBlank(request.getFenyuandm())) { |
| | | request.setFenyuandm(defaultFenyuandm); |
| | | request.setFenyuandm("1"); |
| | | } |
| | | if (StringUtils.isBlank(request.getJigoudm())) { |
| | | request.setJigoudm(defaultJigoudm); |
| | | request.setJigoudm("1"); |
| | | } |
| | | if (StringUtils.isBlank(request.getDuanxinlx())) { |
| | | request.setDuanxinlx("0"); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.sltd; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * çç«åå¾·çä¿¡ååºè§£æã |
| | | * <p> |
| | | * ç°ç¶ï¼åä¸ä¾åºåã两å¥åæ³ï¼å¿
é¡»é½å
¼å®¹ï¼å¦åæ¹äºå°±æ¯åå½ï¼ï¼ |
| | | * <ul> |
| | | * <li>{@code RyTask} / {@code RedisMqReceiver}ï¼æ {@code result=0&description=æå&faillist=} è§£æï¼ |
| | | * å {@code result == "0"} 为æåï¼</li> |
| | | * <li>{@code SmsController./sms/send}ï¼æ JSON è§£æ {@code result[0].status == "00000"} 为æåã</li> |
| | | * </ul> |
| | | * TODO å¾
确认ï¼ä»¥ä¸ä¸¤ç§è¿åå¤å®å°åºåªä¸ªææ¯çç«åå¾·ç½å
³ççå®è¿åæ ¼å¼ï¼éä¸å¡ç¡®è®¤åç»ä¸ã |
| | | * æ¬è§£æå¨ä¸¤ç§é½å
¼å®¹ï¼ä¿è¯è¿ç§»åè¡ä¸ºä¸çº¿ä¸ä¸è´ã |
| | | */ |
| | | final class SltdResponseParser { |
| | | |
| | | private SltdResponseParser() { |
| | | } |
| | | |
| | | /** |
| | | * è§£æç»æå¼ï¼ç¨äºæ¥å¿ä¸ææ¥ï¼ |
| | | */ |
| | | static String resultValue(String raw) { |
| | | if (StringUtils.isEmpty(raw)) { |
| | | return null; |
| | | } |
| | | String keyValue = readKeyValue(raw, "result"); |
| | | if (keyValue != null) { |
| | | return keyValue; |
| | | } |
| | | return readJsonStatus(raw); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦åéæåï¼å
¼å®¹ {@code result=0} ä¸ {@code result[0].status=00000} 两ç§å¤å® |
| | | */ |
| | | static boolean isSuccess(String raw) { |
| | | if (StringUtils.isEmpty(raw)) { |
| | | return false; |
| | | } |
| | | String keyValue = readKeyValue(raw, "result"); |
| | | if ("0".equals(keyValue)) { |
| | | return true; |
| | | } |
| | | return "00000".equals(readJsonStatus(raw)); |
| | | } |
| | | |
| | | /** |
| | | * ä» {@code a=1&b=2} å½¢å¼çååºéåå¼ |
| | | */ |
| | | private static String readKeyValue(String raw, String key) { |
| | | String[] pairs = raw.split("&"); |
| | | for (String pair : pairs) { |
| | | String[] kv = pair.split("=", 2); |
| | | if (key.equals(kv[0])) { |
| | | return kv.length > 1 ? kv[1] : null; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * ä» JSON ååºéå {@code result[0].status} |
| | | */ |
| | | private static String readJsonStatus(String raw) { |
| | | try { |
| | | JSONObject root = JSON.parseObject(raw); |
| | | if (root == null) { |
| | | return null; |
| | | } |
| | | JSONArray result = root.getJSONArray("result"); |
| | | if (result == null || result.isEmpty()) { |
| | | return null; |
| | | } |
| | | JSONObject first = result.getJSONObject(0); |
| | | return first == null ? null : first.getString("status"); |
| | | } catch (Exception e) { |
| | | //䏿¯ JSONï¼å±äºæ£å¸¸æ
åµï¼åå³äºç½å
³è¿åæ ¼å¼ï¼ï¼äº¤ç± key-value 忝å¤ç |
| | | return null; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.sltd; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.provider.sltd.ws.MessageSend; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | |
| | | /** |
| | | * çç«åå¾·çä¿¡åéæ¹ï¼{@code sltd} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼JAX-WS SOAP ç½å
³ï¼{@code i5GSend}ï¼ï¼çä¿¡ç±»ååºå® {@code 6}ï¼å
容å«é¾æ¥åçµè¯ï¼ï¼ |
| | | * æåå¤å®è§ {@link SltdResponseParser}ã |
| | | * ä»£ç æ¥æºï¼{@code RyTask.sltd 忝} + {@code RedisMqReceiver.sltd 忝}ï¼è¡ä¸ºä¿æä¸åï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class SltdSmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼ä¸ {@code spring.profiles.active=sltd} å¯¹åº |
| | | */ |
| | | public static final String KEY = "sltd"; |
| | | |
| | | /** |
| | | * çä¿¡ç±»åï¼å
容æé¾æ¥åçµè¯ |
| | | */ |
| | | private static final String MESSAGE_TYPE_SMS = "6"; |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "çç«åå¾·çä¿¡ï¼SOAP i5GSendï¼ç±»å6ï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) { |
| | | String raw = MessageSend.sendMsg( |
| | | request.getContent(), |
| | | MESSAGE_TYPE_SMS, |
| | | request.getPhone(), |
| | | LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); |
| | | log.info("ã{}ãçç«åå¾·çä¿¡åéè¿åï¼{}", KEY, raw); |
| | | |
| | | String code = SltdResponseParser.resultValue(raw); |
| | | if (SltdResponseParser.isSuccess(raw)) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, raw).withCode(code); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", raw).withCode(code); |
| | | } |
| | | } |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/Hello.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/HelloResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReply.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReplyResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReport.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GReportResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSearchNumber.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSearchNumberResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSend.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/I5GSendResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import com.ruoyi.common.utils.uuid.UUID; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | /** |
| | | * çç«åå¾·ä¿¡æ¯å鿥å£ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.ruoyi.common.dx.MessageSend}ï¼éãçä¿¡åéæ¹ãä¸èµ·æ¶å£å° |
| | | * {@code ruoyi-message} 模åãæ¹æ³ç¾åä¸è¡ä¸ºä¿æä¸åï¼ä¾¿äºè°ç¨æ¹é¶æ¹å¨åæ¢ã |
| | | */ |
| | | @Slf4j |
| | | public class MessageSend { |
| | | |
| | | private static final Logger logger = LoggerFactory.getLogger(MessageSend.class); |
| | | |
| | | /** |
| | | * å家许å¯å·ï¼ç¡¬ç¼ç ï¼ã |
| | | * <p> |
| | | * TODO å¾
确认ï¼åå®ç°æå家许å¯å·åæ»å¨ä»£ç éï¼æªèµ°é
ç½®ï¼æ¤å¤ä¿æåå¼ä¸åã |
| | | */ |
| | | private static final String SERVICE_NUMBER = "202508291634227086"; |
| | | |
| | | /** |
| | | * ç信模æ¿è®¸å¯å·ï¼å
容另龿¥åçµè¯ï¼ |
| | | */ |
| | | private static final String SMS_TEMPLATE_NUMBER = "T202508291635259440"; |
| | | |
| | | /** |
| | | * ééæ¶æ¯æ¨¡æ¿è®¸å¯å· |
| | | */ |
| | | private static final String DINGTALK_TEMPLATE_NUMBER = "T202607211306131891"; |
| | | |
| | | /** |
| | | * çç«åå¾·ä¿¡æ¯åé |
| | | * |
| | | * @param sMessageContent çä¿¡å
容 |
| | | * @param sMessageType çä¿¡ç±»å 1=éªè¯ç ã2=éç¥ã3=广å 6=å
容æé¾æ¥åçµè¯ï¼7=ééæ¶æ¯ |
| | | * @param sUserNumber ææºå·ç |
| | | * @param sScheduleTime é¢çº¦åéæ¶é´ |
| | | * @return ç¬¬ä¸æ¹åå§ååº |
| | | */ |
| | | public static String sendMsg(String sMessageContent, String sMessageType, String sUserNumber, String sScheduleTime) { |
| | | log.info("--sMessageContent çå¼ä¸ºï¼{} ,--sMessageType çå¼ä¸ºï¼{}, --sUserNumber çå¼ä¸ºï¼{}, --sScheduleTime çå¼ä¸º:{}", sMessageContent, sMessageType, sUserNumber, sScheduleTime); |
| | | |
| | | SmsService service = new SmsService(); |
| | | SmsServiceSoap soap = service.getSmsServiceSoap(); |
| | | String result = null; |
| | | |
| | | try { |
| | | if ("6".equals(sMessageType)) { |
| | | result = soap.i5GSend(SERVICE_NUMBER, SMS_TEMPLATE_NUMBER, UUID.randomUUID().toString(), sMessageContent, sMessageType, sUserNumber, sScheduleTime); |
| | | log.info("----çä¿¡è¿åçæ°æ®ä¸ºï¼{}, ----sMessageContent çå¼ä¸º:{}", result, UUID.randomUUID().toString()); |
| | | } else if ("7".equals(sMessageType)) { |
| | | result = soap.i5GSend(SERVICE_NUMBER, DINGTALK_TEMPLATE_NUMBER, |
| | | UUID.randomUUID().toString(), sMessageContent, sMessageType, sUserNumber, sScheduleTime); |
| | | log.info("----ééè¿åçåå§æ°æ®ä¸ºï¼{}", result); |
| | | } else { |
| | | log.warn("䏿¯æççä¿¡ç±»åï¼{}", sMessageType); |
| | | } |
| | | } catch (Exception e) { |
| | | //åå®ç°ä¸º e.getCause().getMessage()ï¼å½ cause 为 null æ¶ä¼æ NPE æ©ççå®å¼å¸¸ï¼è¿éåé²å¾¡ |
| | | String cause = e.getCause() == null ? e.getMessage() : e.getCause().getMessage(); |
| | | logger.error("宿´é误信æ¯ï¼{}", cause); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | } |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/ObjectFactory.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlRegistry; |
| | | |
| | |
| | | /** |
| | | * This object contains factory methods for each |
| | | * Java content interface and Java element interface |
| | | * generated in the com.ruoyi.common.dx package. |
| | | * generated in the com.ruoyi.message.sms.provider.sltd.ws package. |
| | | * <p>An ObjectFactory allows you to programatically |
| | | * construct new instances of the Java representation |
| | | * for XML content. The Java representation of XML |
| | |
| | | |
| | | |
| | | /** |
| | | * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.ruoyi.common.dx |
| | | * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: com.ruoyi.message.sms.provider.sltd.ws |
| | | * |
| | | */ |
| | | public ObjectFactory() { |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetNumber.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetNumberResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetTemplateList.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetTemplateListResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetUserList.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSGetUserListResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSSaveContent.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSSaveContentResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerify.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerifyPrivate.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerifyPrivateResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SMSVerifyResponse.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.xml.bind.annotation.XmlAccessType; |
| | | import javax.xml.bind.annotation.XmlAccessorType; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SmsService.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/SmsServiceSoap.java ÐÞ¸Ä |
| | |
| | | |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| | | |
| | | import javax.jws.WebMethod; |
| | | import javax.jws.WebParam; |
| | |
| | | */ |
| | | @WebMethod(operationName = "Hello", action = "http://tempuri.org/Hello") |
| | | @WebResult(name = "HelloResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "Hello", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.Hello") |
| | | @ResponseWrapper(localName = "HelloResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.HelloResponse") |
| | | @RequestWrapper(localName = "Hello", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.Hello") |
| | | @ResponseWrapper(localName = "HelloResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.HelloResponse") |
| | | public String hello(); |
| | | |
| | | /** |
| | |
| | | */ |
| | | @WebMethod(operationName = "SMSVerifyPrivate", action = "http://tempuri.org/SMSVerifyPrivate") |
| | | @WebResult(name = "SMSVerifyPrivateResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "SMSVerifyPrivate", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSVerifyPrivate") |
| | | @ResponseWrapper(localName = "SMSVerifyPrivateResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSVerifyPrivateResponse") |
| | | @RequestWrapper(localName = "SMSVerifyPrivate", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSVerifyPrivate") |
| | | @ResponseWrapper(localName = "SMSVerifyPrivateResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSVerifyPrivateResponse") |
| | | public String smsVerifyPrivate( |
| | | @WebParam(name = "sServerNumber", targetNamespace = "http://tempuri.org/") |
| | | String sServerNumber); |
| | |
| | | */ |
| | | @WebMethod(operationName = "SMSVerify", action = "http://tempuri.org/SMSVerify") |
| | | @WebResult(name = "SMSVerifyResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "SMSVerify", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSVerify") |
| | | @ResponseWrapper(localName = "SMSVerifyResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSVerifyResponse") |
| | | @RequestWrapper(localName = "SMSVerify", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSVerify") |
| | | @ResponseWrapper(localName = "SMSVerifyResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSVerifyResponse") |
| | | public String smsVerify( |
| | | @WebParam(name = "sServerNumber", targetNamespace = "http://tempuri.org/") |
| | | String sServerNumber, |
| | |
| | | */ |
| | | @WebMethod(operationName = "SMSGetUserList", action = "http://tempuri.org/SMSGetUserList") |
| | | @WebResult(name = "SMSGetUserListResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "SMSGetUserList", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSGetUserList") |
| | | @ResponseWrapper(localName = "SMSGetUserListResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSGetUserListResponse") |
| | | @RequestWrapper(localName = "SMSGetUserList", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSGetUserList") |
| | | @ResponseWrapper(localName = "SMSGetUserListResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSGetUserListResponse") |
| | | public String smsGetUserList( |
| | | @WebParam(name = "sUserName", targetNamespace = "http://tempuri.org/") |
| | | String sUserName); |
| | |
| | | */ |
| | | @WebMethod(operationName = "SMSGetTemplateList", action = "http://tempuri.org/SMSGetTemplateList") |
| | | @WebResult(name = "SMSGetTemplateListResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "SMSGetTemplateList", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSGetTemplateList") |
| | | @ResponseWrapper(localName = "SMSGetTemplateListResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSGetTemplateListResponse") |
| | | @RequestWrapper(localName = "SMSGetTemplateList", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSGetTemplateList") |
| | | @ResponseWrapper(localName = "SMSGetTemplateListResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSGetTemplateListResponse") |
| | | public String smsGetTemplateList( |
| | | @WebParam(name = "sUserName", targetNamespace = "http://tempuri.org/") |
| | | String sUserName); |
| | |
| | | */ |
| | | @WebMethod(operationName = "SMSGetNumber", action = "http://tempuri.org/SMSGetNumber") |
| | | @WebResult(name = "SMSGetNumberResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "SMSGetNumber", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSGetNumber") |
| | | @ResponseWrapper(localName = "SMSGetNumberResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSGetNumberResponse") |
| | | @RequestWrapper(localName = "SMSGetNumber", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSGetNumber") |
| | | @ResponseWrapper(localName = "SMSGetNumberResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSGetNumberResponse") |
| | | public String smsGetNumber(); |
| | | |
| | | /** |
| | |
| | | */ |
| | | @WebMethod(operationName = "SMSSaveContent", action = "http://tempuri.org/SMSSaveContent") |
| | | @WebResult(name = "SMSSaveContentResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "SMSSaveContent", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSSaveContent") |
| | | @ResponseWrapper(localName = "SMSSaveContentResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.SMSSaveContentResponse") |
| | | @RequestWrapper(localName = "SMSSaveContent", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSSaveContent") |
| | | @ResponseWrapper(localName = "SMSSaveContentResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.SMSSaveContentResponse") |
| | | public int smsSaveContent( |
| | | @WebParam(name = "sSUseq", targetNamespace = "http://tempuri.org/") |
| | | String sSUseq, |
| | |
| | | */ |
| | | @WebMethod(action = "http://tempuri.org/i5GSend") |
| | | @WebResult(name = "i5GSendResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "i5GSend", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GSend") |
| | | @ResponseWrapper(localName = "i5GSendResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GSendResponse") |
| | | @RequestWrapper(localName = "i5GSend", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GSend") |
| | | @ResponseWrapper(localName = "i5GSendResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GSendResponse") |
| | | public String i5GSend( |
| | | @WebParam(name = "sServerNumber", targetNamespace = "http://tempuri.org/") |
| | | String sServerNumber, |
| | |
| | | */ |
| | | @WebMethod(action = "http://tempuri.org/i5GReport") |
| | | @WebResult(name = "i5GReportResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "i5GReport", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GReport") |
| | | @ResponseWrapper(localName = "i5GReportResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GReportResponse") |
| | | @RequestWrapper(localName = "i5GReport", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GReport") |
| | | @ResponseWrapper(localName = "i5GReportResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GReportResponse") |
| | | public String i5GReport(); |
| | | |
| | | /** |
| | |
| | | */ |
| | | @WebMethod(action = "http://tempuri.org/i5GSearchNumber") |
| | | @WebResult(name = "i5GSearchNumberResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "i5GSearchNumber", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GSearchNumber") |
| | | @ResponseWrapper(localName = "i5GSearchNumberResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GSearchNumberResponse") |
| | | @RequestWrapper(localName = "i5GSearchNumber", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GSearchNumber") |
| | | @ResponseWrapper(localName = "i5GSearchNumberResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GSearchNumberResponse") |
| | | public String i5GSearchNumber(); |
| | | |
| | | /** |
| | |
| | | */ |
| | | @WebMethod(action = "http://tempuri.org/i5GReply") |
| | | @WebResult(name = "i5GReplyResult", targetNamespace = "http://tempuri.org/") |
| | | @RequestWrapper(localName = "i5GReply", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GReply") |
| | | @ResponseWrapper(localName = "i5GReplyResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.common.dx.I5GReplyResponse") |
| | | @RequestWrapper(localName = "i5GReply", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GReply") |
| | | @ResponseWrapper(localName = "i5GReplyResponse", targetNamespace = "http://tempuri.org/", className = "com.ruoyi.message.sms.provider.sltd.ws.I5GReplyResponse") |
| | | public String i5GReply( |
| | | @WebParam(name = "sServerNumber", targetNamespace = "http://tempuri.org/") |
| | | String sServerNumber, |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/dx/package-info.java ÐÞ¸Ä |
| | |
| | | @javax.xml.bind.annotation.XmlSchema(namespace = "http://tempuri.org/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) |
| | | package com.ruoyi.common.dx; |
| | | package com.ruoyi.message.sms.provider.sltd.ws; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.sms.provider.xh; |
| | | |
| | | import com.ruoyi.common.utils.HttpUtil; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.config.MessageProperties; |
| | | import com.ruoyi.message.config.XhsmsConfig; |
| | | import com.ruoyi.message.config.RootMessageProperties; |
| | | import com.ruoyi.message.sms.AbstractSmsSender; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.net.URLEncoder; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ°åçä¿¡åéæ¹ï¼{@code xh} ééï¼éç¨çä¿¡ç½å
³ï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼HTTP POST 表å {@code action/account/password/mobile/content/extno/rt}ï¼æ ç¾åã |
| | | * <p> |
| | | * â ï¸ ç°æä¸ä¸ªå
¥å£å¯¹åä¸ä¸ªç½å
³çè°ç¨æ¹å¼å¹¶ä¸ä¸è´ï¼ä¸å
¶ä¸ä¸¤ä¸ªæ¯åçã为满足ãæç«ç¹åæ ·å°è£
ã |
| | | * 䏿¹çº¿ä¸è¡ä¸ºãçè¦æ±ï¼è¿éæä¸ç§æ¨¡å¼é½ä¿ç为ç¬ç«æ¹æ³ï¼ç±è°ç¨æ¹æåç«ç¹éæ©ï¼ |
| | | * <ul> |
| | | * <li>{@link #sendJsonLegacy} ââ çä»· {@code RyTask}ï¼æ¼å¥½è¡¨ååæ°å´åé {@code new Gson().toJson(req)} |
| | | * ï¼{@code req} æ¯ç©º mapï¼å®é
ååº {@code {}}ï¼ï¼ä¸æ {@code Boolean} å½ {@code String} è¿åå¼ï¼ |
| | | * å¿
ç¶è§¦å NPE 被å¼å¸¸åæ¯åæãç»æï¼**æ°åç«ç¹é¿æä»»å¡çä¿¡å®é
åä¸åºå»**ï¼</li> |
| | | * <li>{@link #sendForm} ââ çä»· {@code RedisMqReceiver}ï¼åé URL ç¼ç åç表ååç¬¦ä¸²ï¼æ£ç¡®ï¼ï¼ |
| | | * ä½åå®ç°å¿½ç¥äºè¿åå¼ï¼ä»£ç éåºå®ææåå¤çï¼</li> |
| | | * <li>{@link #sendJson} ââ çä»· {@code ServiceSubtaskServiceImpl.smsSubTask} / {@code SmsController}ï¼ |
| | | * åé {@code Gson.toJson(map)} ç JSONã</li> |
| | | * </ul> |
| | | * TODO å¾
确认ï¼ä»¥ä¸ä¸ç§åæ³åªä¸ç§ææ¯æ°åç½å
³çæ£æ¥åçæ¥ææ ¼å¼ï¼å¾å¯è½æ¯ {@link #sendForm}ï¼ï¼ |
| | | * 确认ååºç»ä¸ä¸ºä¸ç§å¹¶å é¤å
¶ä½ä¸¤ç§ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class XinHuaSmsSender extends AbstractSmsSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼ä¸ {@code spring.profiles.active=xh} å¯¹åº |
| | | */ |
| | | public static final String KEY = "xh"; |
| | | |
| | | private final MessageProperties properties; |
| | | |
| | | public XinHuaSmsSender(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "æ°åçä¿¡ï¼éç¨ç½å
³ï¼è¡¨å/JSON ä¸¤ç§æ¥æï¼"; |
| | | } |
| | | |
| | | @Override |
| | | protected SendResult doSend(SmsSendRequest request) { |
| | | //é»è®¤æ RedisMqReceiver çï¼æ£ç¡®ï¼è¡¨å模å¼åé |
| | | return sendForm(request); |
| | | } |
| | | |
| | | /** |
| | | * 模å¼ä¸ï¼è¡¨åå符串ï¼çä»· {@code RedisMqReceiver}ï¼æ¨èï¼ |
| | | */ |
| | | public SendResult sendForm(SmsSendRequest request) { |
| | | XhsmsConfig cfg = properties.getSms().getXhsms(); |
| | | String encodedParams = buildEncodedParams(request, cfg); |
| | | log.info("ã{}ãæ°åçä¿¡åéï¼è¡¨åï¼ï¼å°åï¼{}ï¼åæ°ï¼{}", KEY, cfg.getPath(), encodedParams); |
| | | HttpUtils.sendPost(cfg.getPath(), encodedParams); |
| | | //ä¸çº¿ä¸è¡ä¸ºä¸è´ï¼åå®ç°æªä½¿ç¨è¿åå¼ï¼åºå®ææåå¤ç |
| | | return SendResult.success(KEY, MessageChannel.SMS, encodedParams); |
| | | } |
| | | |
| | | /** |
| | | * 模å¼äºï¼JSON æ¥æï¼çä»· {@code smsSubTask} / {@code SmsController}ï¼ |
| | | */ |
| | | public SendResult sendJson(SmsSendRequest request) { |
| | | XhsmsConfig cfg = properties.getSms().getXhsms(); |
| | | Map<String, String> params = buildParams(request, cfg); |
| | | String json = com.alibaba.fastjson.JSON.toJSONString(params); |
| | | log.info("ã{}ãæ°åçä¿¡åéï¼JSONï¼ï¼å°åï¼{}ï¼åæ°ï¼{}", KEY, cfg.getPath(), json); |
| | | Boolean ok = HttpUtil.postJsonRequest(cfg.getPath(), json); |
| | | if (Boolean.TRUE.equals(ok)) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, json); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", json); |
| | | } |
| | | |
| | | /** |
| | | * 模å¼ä¸ï¼å
¼å®¹ {@code RyTask} çæ§å®ç°ï¼åé空 JSONï¼å¿
ç¶å¤±è´¥ï¼ã |
| | | * <p> |
| | | * ä¿çæ¤æ¹æ³æ¯ä¸ºäºè®© {@code RyTask} çæ¹é å¯ä»¥åå°ãè¡ä¸ºä¸åä¸å·®ãï¼ç¡®è®¤ç½å
³æ ¼å¼ååºå é¤ã |
| | | */ |
| | | public SendResult sendJsonLegacy(SmsSendRequest request) { |
| | | XhsmsConfig cfg = properties.getSms().getXhsms(); |
| | | //åå®ç°ï¼Map<String,String> req = new HashMap<>(); ...(HttpUtils.sendPost(xhsmsPath, new Gson().toJson(req)); |
| | | // Gson åºåå空 map çç»æå³ "{}" |
| | | String emptyJson = "{}"; |
| | | log.info("ã{}ãæ°åçä¿¡åéï¼RyTask æ§å®ç°ï¼åéç©ºæ¥æï¼ï¼å°åï¼{}", KEY, cfg.getPath()); |
| | | Boolean result = HttpUtils.sendPost(cfg.getPath(), emptyJson); |
| | | if (Boolean.TRUE.equals(result)) { |
| | | return SendResult.success(KEY, MessageChannel.SMS, emptyJson); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.SMS, "çä¿¡åé失败", emptyJson); |
| | | } |
| | | |
| | | private Map<String, String> buildParams(SmsSendRequest request, XhsmsConfig cfg) { |
| | | Map<String, String> params = new LinkedHashMap<>(); |
| | | params.put("action", "send"); |
| | | params.put("account", cfg.getAccount()); |
| | | params.put("password", cfg.getPwd()); |
| | | params.put("mobile", request.getPhone()); |
| | | params.put("content", request.getContent()); |
| | | params.put("extno", cfg.getExtno()); |
| | | params.put("rt", "json"); |
| | | return params; |
| | | } |
| | | |
| | | private String buildEncodedParams(SmsSendRequest request, XhsmsConfig cfg) { |
| | | StringBuilder encodedParams = new StringBuilder(); |
| | | for (Map.Entry<String, String> entry : buildParams(request, cfg).entrySet()) { |
| | | if (encodedParams.length() > 0) { |
| | | encodedParams.append("&"); |
| | | } |
| | | encodedParams.append(encode(entry.getKey())).append("=").append(encode(entry.getValue())); |
| | | } |
| | | return encodedParams.toString(); |
| | | } |
| | | |
| | | private String encode(String value) { |
| | | try { |
| | | return URLEncoder.encode(value == null ? "" : value, "UTF-8"); |
| | | } catch (Exception e) { |
| | | return value; |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat; |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·æºæçº§é
ç½®ï¼appid / appSecret / ç½å
³å°åï¼ã |
| | | * <p> |
| | | * ç°ç¶ï¼è¿äºå¼ç¡¬ç¼ç å¨ {@code com.ruoyi.common.enums.WxGZHEnum} æä¸¾éï¼ä¸½æ°´å¸ä¸å»é¢ãæ¯å®ãæ¹æ»¨ãå´å±±ï¼ï¼ |
| | | * ç± {@code WxGZHEnum.getDescByCode(orgid)} è¿åä¸ä¸ªæåºå®é¡ºåºæåç Listï¼ |
| | | * è°ç¨æ¹é 䏿 {@code get(1)/get(2)/get(3)} åå¼ ââ è¿æ¯å¾èçåæ³ï¼ä¸æ¦æä¸ªæºæç¼º appidï¼ |
| | | * 䏿 就伿´ä½éä½ï¼æ¯å®å°±æ¯å 为 appid ä¸ºç©ºå¯¼è´ {@code size()<4} 被跳è¿ï¼ã |
| | | * <p> |
| | | * æ¬ç±»æä¸æ è¯ä¹æ¾å¼åï¼é¿å
ç»§ç»ç¨ List 䏿 ä¼ éã |
| | | */ |
| | | public class WechatMpConfig { |
| | | |
| | | /** |
| | | * æºæID |
| | | */ |
| | | private String orgid; |
| | | |
| | | /** |
| | | * å
¬ä¼å· AppID |
| | | */ |
| | | private String appid; |
| | | |
| | | /** |
| | | * å
¬ä¼å· AppSecretï¼åä¸ç¾åï¼ |
| | | */ |
| | | private String appSecret; |
| | | |
| | | /** |
| | | * å
¬ä¼å·ç½å
³å°å |
| | | */ |
| | | private String address; |
| | | |
| | | /** |
| | | * æ¯å¦é
ç½®å®æ´ï¼appid/appSecret/address é½ä¸ä¸ºç©ºï¼ |
| | | */ |
| | | public boolean isComplete() { |
| | | return isNotEmpty(appid) && isNotEmpty(appSecret) && isNotEmpty(address); |
| | | } |
| | | |
| | | private static boolean isNotEmpty(String value) { |
| | | return value != null && !value.trim().isEmpty(); |
| | | } |
| | | |
| | | public String getOrgid() { |
| | | return orgid; |
| | | } |
| | | |
| | | public void setOrgid(String orgid) { |
| | | this.orgid = orgid; |
| | | } |
| | | |
| | | public String getAppid() { |
| | | return appid; |
| | | } |
| | | |
| | | public void setAppid(String appid) { |
| | | this.appid = appid; |
| | | } |
| | | |
| | | public String getAppSecret() { |
| | | return appSecret; |
| | | } |
| | | |
| | | public void setAppSecret(String appSecret) { |
| | | this.appSecret = appSecret; |
| | | } |
| | | |
| | | public String getAddress() { |
| | | return address; |
| | | } |
| | | |
| | | public void setAddress(String address) { |
| | | this.address = address; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "WechatMpConfig{orgid='" + orgid + '\'' |
| | | + ", appid='" + appid + '\'' |
| | | + ", appSecret='" + (appSecret == null ? null : "***") + '\'' |
| | | + ", address='" + address + '\'' |
| | | + '}'; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat; |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·æºæçº§é
ç½®æä¾æ¹ï¼æ©å±ç¹ SPIï¼ã |
| | | * <p> |
| | | * ç±ä¸å¡æ¨¡åå®ç°ï¼å½ååºå§æç» {@code com.ruoyi.common.enums.WxGZHEnum} ä»¥ä¿æé
ç½®æºä¸åï¼ |
| | | * åç»å¯æ¹ä¸ºæ°æ®åº/é
ç½®ä¸å¿ï¼ãè¥å®¹å¨ä¸æ²¡æå®ç°ï¼åè§ä¸ºãè¯¥æºææ²¡æé
ç½®å
¬ä¼å·ãï¼ |
| | | * ä¸çº¿ä¸ {@code wxqqxx} 为空æ¶ç失败表ç°ä¸è´ã |
| | | */ |
| | | public interface WechatMpConfigProvider { |
| | | |
| | | /** |
| | | * ææºæIDæ¥è¯¢å
¬ä¼å·é
ç½® |
| | | * |
| | | * @param orgid æºæID |
| | | * @return é
ç½®ï¼æªé
ç½®è¿å {@code null} |
| | | */ |
| | | WechatMpConfig getConfig(String orgid); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·åé请æ±ï¼ä¸å
·ä½åéæ¹æ å
³çç»ä¸å
¥åï¼ã |
| | | * <p> |
| | | * åå»é¢å
¬ä¼å·çå
¥åå·®å¼å¾å¤§ï¼å¸ä¸åªè¦ ææºå·+身份è¯+龿¥ï¼æ°åè¦ æ£è
ID+å§å+appid+ç¾åï¼ï¼ |
| | | * å·®å¼å段éè¿ {@link #extras} éä¼ ã |
| | | */ |
| | | @Data |
| | | public class WechatSendRequest implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ææºå· |
| | | */ |
| | | private String phone; |
| | | |
| | | /** |
| | | * 身份è¯å·ï¼å¸ä¸ãæ°åé½è¦ï¼ |
| | | */ |
| | | private String idCard; |
| | | |
| | | /** |
| | | * å¤é¾å°åï¼ç¹å»æ¶æ¯åè·³è½¬ï¼ |
| | | */ |
| | | private String url; |
| | | |
| | | /** |
| | | * æ é¢ / ä»»å¡åç§° |
| | | */ |
| | | private String title; |
| | | |
| | | /** |
| | | * å
容 / ä»»å¡æè¿° |
| | | */ |
| | | private String content; |
| | | |
| | | /** |
| | | * æºæID |
| | | */ |
| | | private String orgid; |
| | | |
| | | /** |
| | | * HIS ä¾§æ£è
IDï¼æ°åè¦æ±éç©ºï¼ |
| | | */ |
| | | private String patidHis; |
| | | |
| | | /** |
| | | * æ£è
å§å |
| | | */ |
| | | private String patientName; |
| | | |
| | | /** |
| | | * openidï¼å¾®ä¿¡å
¬ä¼å· SDK éé使ç¨ï¼ |
| | | */ |
| | | private String openid; |
| | | |
| | | /** |
| | | * 模æ¿IDï¼å¾®ä¿¡å
¬ä¼å· SDK æ¨¡æ¿æ¶æ¯éé使ç¨ï¼ |
| | | */ |
| | | private String templateId; |
| | | |
| | | /** |
| | | * æ¯å¦å
³é Gson ç HTML 转ä¹ï¼æ°åå
¬ä¼å·ç«ç¹é´åå¨å·®å¼ï¼è§ {@code XinHuaMpApi.sendMessage}ï¼ |
| | | */ |
| | | private boolean disableHtmlEscaping; |
| | | |
| | | /** |
| | | * æ©å±åæ° |
| | | */ |
| | | private Map<String, Object> extras; |
| | | |
| | | /** |
| | | * 追å ä¸ä¸ªæ©å±åæ° |
| | | */ |
| | | public WechatSendRequest putExtra(String key, Object value) { |
| | | if (this.extras == null) { |
| | | this.extras = new LinkedHashMap<>(); |
| | | } |
| | | this.extras.put(key, value); |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è¯»åæ©å±åæ° |
| | | */ |
| | | public Object getExtra(String key) { |
| | | return this.extras == null ? null : this.extras.get(key); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat; |
| | | |
| | | import com.ruoyi.message.SendResult; |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·åéæ¹ï¼ä¸ä¸ªæ¸ éä¸ä¸ªå®ç°ï¼ã |
| | | * <p> |
| | | * ç°ç¶ï¼å¸ä¸ï¼smsUtils.sendChatï¼åæ°åï¼getWXCodeï¼èµ°çæ¯ä¸¤å¥å®å
¨ä¸åçç¬¬ä¸æ¹ç½å
³ï¼ |
| | | * è¿åä½å¤å®ä¹ä¸ä¸æ ·ï¼å¸ä¸ç {@code success==1}ï¼æ°åç {@code succ==true}ï¼ï¼å æ¤åå¼å®ç°ã |
| | | */ |
| | | public interface WechatSender { |
| | | |
| | | /** |
| | | * åéæ¹å¯ä¸ key |
| | | */ |
| | | String key(); |
| | | |
| | | /** |
| | | * åéå
¬ä¼å·æ¶æ¯ |
| | | * |
| | | * @param request ç»ä¸å
¥å |
| | | * @return ç»ä¸ç»æï¼ä¸æå¼å¸¸ |
| | | */ |
| | | SendResult send(WechatSendRequest request); |
| | | |
| | | /** |
| | | * åéæ¹è¯´æï¼ç¨äºæ¥å¿ä¸ææ¥ |
| | | */ |
| | | default String description() { |
| | | return key(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat; |
| | | |
| | | import com.ruoyi.message.SendException; |
| | | import com.ruoyi.message.SendResult; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.TreeSet; |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·å鿹工åï¼æ key è·¯ç±å°ä¸ä¸ªå
·ä½å®ç°ã |
| | | * <p> |
| | | * 注æï¼å
¬ä¼å·ééç key ä¸çä¿¡ééç key å¯ä»¥ååï¼ä¾å¦ {@code hzszlyy} æ¢æçä¿¡åéæ¹ |
| | | * 乿å
¬ä¼å·åéæ¹ï¼ï¼å æ¤ä¸¤ä¸ªå·¥ååèªç»´æ¤èªå·±ç注å表ï¼äºä¸å¹²æ°ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class WechatSenderFactory { |
| | | |
| | | private final Map<String, WechatSender> senders = new LinkedHashMap<>(); |
| | | |
| | | public WechatSenderFactory(List<WechatSender> senderList) { |
| | | for (WechatSender sender : senderList) { |
| | | WechatSender exists = senders.put(sender.key(), sender); |
| | | if (exists != null) { |
| | | throw new IllegalStateException("å
¬ä¼å·åéæ¹ key éå¤ï¼" + sender.key() |
| | | + "ï¼å²çªå®ç°ï¼" + exists.getClass().getName() + " ä¸ " + sender.getClass().getName()); |
| | | } |
| | | } |
| | | log.info("ãWechatSenderFactoryã已注åå
¬ä¼å·åéæ¹ï¼{}", senders.keySet()); |
| | | } |
| | | |
| | | /** |
| | | * æ key è·ååéæ¹ |
| | | * |
| | | * @param key æ¸ é keyï¼å³ {@code spring.profiles.active} åå¼ï¼ |
| | | * @throws SendException æ¾ä¸å°å¯¹åºå®ç°æ¶æåº |
| | | */ |
| | | public WechatSender get(String key) { |
| | | WechatSender sender = key == null ? null : senders.get(key); |
| | | if (sender == null) { |
| | | throw new SendException("æªæ¾å°å
¬ä¼å·åéæ¹ï¼key=" + key + "ï¼å·²æ³¨åï¼" + senders.keySet()); |
| | | } |
| | | return sender; |
| | | } |
| | | |
| | | /** |
| | | * æ key è·ååéæ¹ï¼æ¾ä¸å°è¿å {@code null} |
| | | */ |
| | | public WechatSender getOrNull(String key) { |
| | | return key == null ? null : senders.get(key); |
| | | } |
| | | |
| | | /** |
| | | * æ key åéå
¬ä¼å·æ¶æ¯ |
| | | */ |
| | | public SendResult send(String key, WechatSendRequest request) { |
| | | return get(key).send(request); |
| | | } |
| | | |
| | | /** |
| | | * 夿æ¯å¦åå¨è¯¥ key çåéæ¹ |
| | | */ |
| | | public boolean supports(String key) { |
| | | return getOrNull(key) != null; |
| | | } |
| | | |
| | | /** |
| | | * 已注åçæ¸ é key |
| | | */ |
| | | public Set<String> keys() { |
| | | return new TreeSet<>(senders.keySet()); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat.provider.hzszlyy; |
| | | |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.message.config.MessageProperties; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æå·å¸ä¸å¾®ä¿¡å
¬ä¼å· APIã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼GET è¯·æ± {@code /sfjk/SendMessage}ï¼åæ° {@code sfzh/title/content/phone/url/key}ï¼ |
| | | * è¿å JSONï¼å¤å®å段 {@code success == 1}ï¼ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼åå®ç°ä¸º {@code com.ruoyi.common.utils.sms.smsUtils.sendChat}ï¼å
¶ä¸å°åãå¯é¥ã |
| | | * æ 颿æ¡ãå
å®¹ææ¡é½æ¯ç¡¬ç¼ç ï¼è¿éå
¨é¨æä¸ºå¯é
ç½®ï¼é»è®¤å¼ä¸å硬ç¼ç ä¸è´ï¼ï¼ |
| | | * 便äºåç»ææºæ/ä»»å¡ç±»ååºåææ¡ï¼è§ {@link MessageProperties.ShiyiWechat}ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ShiyiMpApi { |
| | | |
| | | private final MessageProperties properties; |
| | | |
| | | public ShiyiMpApi(MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | /** |
| | | * åéå
¬ä¼å·æ¶æ¯ |
| | | * |
| | | * @param url å¤é¾å°å |
| | | * @param phone ææºå· |
| | | * @param idCard 身份è¯å· |
| | | * @return ç¬¬ä¸æ¹åå§ååº |
| | | */ |
| | | public String sendMessage(String url, String phone, String idCard) { |
| | | MessageProperties.ShiyiWechat cfg = properties.getWechat().getShiyi(); |
| | | String urlTemp = cfg.getUrl() |
| | | + "?sfzh=" + idCard |
| | | + "&title=" + cfg.getTitle() |
| | | + "&content=" + cfg.getContent() |
| | | + "&phone=" + phone |
| | | + "&url=" + url |
| | | + "&key=" + cfg.getKey(); |
| | | String sendMsg = ""; |
| | | try { |
| | | log.info("ãShiyiMpApiãå¸ä¸å¾®ä¿¡å
¬ä¼å·è¯·æ±åæ°ï¼{}", urlTemp); |
| | | sendMsg = HttpUtils.sendPost(urlTemp); |
| | | log.info("ãShiyiMpApiãå¸ä¸å¾®ä¿¡å
¬ä¼å·è¿åå¼ï¼{}", sendMsg); |
| | | } catch (Exception ex) { |
| | | sendMsg = ex.getMessage(); |
| | | log.error("ãShiyiMpApiãå¸ä¸å¾®ä¿¡å
¬ä¼å·åéå¼å¸¸ï¼{}", ex.getMessage(), ex); |
| | | } |
| | | return sendMsg; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat.provider.hzszlyy; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSender; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æå·å¸ä¸å¾®ä¿¡å
¬ä¼å·åéæ¹ï¼{@code hzszlyy} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼å¸ä¸èªæç½å
³ï¼è¿å JSON ç {@code success == 1} 为æåã |
| | | * ä»£ç æ¥æºï¼{@code RyTask.hzszlyy å
¬ä¼å·åæ¯} + {@code RedisMqReceiver.hzszlyy 忝} + |
| | | * {@code SmsController./sms/sendChat}ï¼è¡ä¸ºä¿æä¸åï¼ã |
| | | * <p> |
| | | * 注æï¼å¸ä¸å
¬ä¼å·<b>ä¸åæºæé
ç½®æ ¡éª</b>ï¼åä»£ç æ³¨éãå¸ä¸å»é¢ 䏿 ¡éªãï¼ï¼ |
| | | * è°ç¨æ¹éä¿ç该差å¼ï¼ä¸è¦å¥ç¨æ°åé£å¥ {@code wxqqxx} æ ¡éªã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ShiyiMpSender implements WechatSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼å¾®ä¿¡å
¬ä¼å·ééä¸ä¸çä¿¡ééååï¼{@code hzszlyy}ï¼ï¼ç±åèªçå·¥ååºå |
| | | */ |
| | | public static final String KEY = "hzszlyy"; |
| | | |
| | | private final ShiyiMpApi shiyiMpApi; |
| | | |
| | | public ShiyiMpSender(ShiyiMpApi shiyiMpApi) { |
| | | this.shiyiMpApi = shiyiMpApi; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "æå·å¸ä¸å¾®ä¿¡å
¬ä¼å·ï¼success==1 å¤å®ï¼"; |
| | | } |
| | | |
| | | @Override |
| | | public SendResult send(WechatSendRequest request) { |
| | | if (request == null || request.getPhone() == null || request.getPhone().trim().isEmpty()) { |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "ææºå·ä¸ºç©º", null); |
| | | } |
| | | try { |
| | | String raw = shiyiMpApi.sendMessage(request.getUrl(), request.getPhone(), request.getIdCard()); |
| | | Map map = JSONObject.parseObject(raw, Map.class); |
| | | Boolean success = false; |
| | | if (map != null && !map.isEmpty() && map.get("success") != null) { |
| | | Integer value = (Integer) map.get("success"); |
| | | success = value != null && value == 1; |
| | | } |
| | | if (success) { |
| | | return SendResult.success(KEY, MessageChannel.WECHAT, raw); |
| | | } |
| | | Object msg = map == null ? null : map.get("msg"); |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, |
| | | msg == null ? "ãå
¬ä¼å·ãå
¬ä¼å·åé失败" : msg.toString(), raw); |
| | | } catch (Exception e) { |
| | | log.error("ã{}ãå¸ä¸å
¬ä¼å·åé失败ï¼{}", KEY, e.getMessage(), e); |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "ãå
¬ä¼å·ãå
¬ä¼å·åé失败", null); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat.provider.sdk; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSender; |
| | | import com.ruoyi.message.wechat.support.WxMpUtils; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å· SDK åéæ¹ï¼{@code wxmp-sdk} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼ç´æ¥ä½¿ç¨å¾®ä¿¡å®æ¹ SDKï¼{@code weixin-java-mp}ï¼ï¼æ¯æææ¬å®¢ææ¶æ¯ä¸æ¨¡æ¿æ¶æ¯ï¼ |
| | | * éè¦ <b>openid</b>ï¼è䏿¯ææºå·ï¼ï¼å æ¤å
¥åèµ° {@link WechatSendRequest#getOpenid()}ã |
| | | * <p> |
| | | * ç°ç¶ï¼è¯¥è½ååå
åªæ {@code WxMpUtils} ä¸ä¸ªå·¥å
·ç±»ï¼<b>没æä»»ä½ä¸å¡è°ç¨ç¹</b>ã |
| | | * æ¶å£åç±å·¥åç»ä¸è°åº¦ï¼åç»è¥è¦ç»ã微信å°ç¨åº/å
¬ä¼å·ã类任å¡ç¨å®æ¹ SDK åéï¼ç´æ¥èµ°è¿éã |
| | | * <p> |
| | | * æ©å±åæ°ï¼ |
| | | * <ul> |
| | | * <li>{@code appId} / {@code appSecret}ï¼å
¬ä¼å·åæ®ï¼å¿
å¡«ï¼ï¼</li> |
| | | * <li>{@code templateData}ï¼æ¨¡æ¿æ°æ® {@code Map<String,String>}ï¼æ¨¡æ¿æ¶æ¯ç¨ï¼ã</li> |
| | | * </ul> |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class WxMpSdkSender implements WechatSender { |
| | | |
| | | /** |
| | | * æ¸ é key |
| | | */ |
| | | public static final String KEY = "wxmp-sdk"; |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "微信å
¬ä¼å·å®æ¹ SDKï¼å®¢æææ¬æ¶æ¯ / æ¨¡æ¿æ¶æ¯ï¼æ openid åéï¼"; |
| | | } |
| | | |
| | | @Override |
| | | public SendResult send(WechatSendRequest request) { |
| | | if (request == null || StringUtils.isEmpty(request.getOpenid())) { |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "openid 为空", null); |
| | | } |
| | | Object appId = request.getExtra("appId"); |
| | | Object appSecret = request.getExtra("appSecret"); |
| | | if (appId == null || appSecret == null) { |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "å
¬ä¼å· appId/appSecret æªé
ç½®", null); |
| | | } |
| | | |
| | | try { |
| | | WxMpUtils wxMpUtils = WxMpUtils.of(String.valueOf(appId), String.valueOf(appSecret)); |
| | | if (StringUtils.isNotEmpty(request.getTemplateId())) { |
| | | return sendTemplate(wxMpUtils, request); |
| | | } |
| | | boolean ok = wxMpUtils.sendTextMessage(request.getOpenid(), request.getContent()); |
| | | if (ok) { |
| | | return SendResult.success(KEY, MessageChannel.WECHAT, null); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "å
¬ä¼å·æ¶æ¯åé失败", null); |
| | | } catch (Exception e) { |
| | | log.error("ã{}ãå
¬ä¼å·æ¶æ¯åéå¼å¸¸ï¼{}", KEY, e.getMessage(), e); |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "å
¬ä¼å·æ¶æ¯åéå¼å¸¸ï¼" + e.getMessage(), null); |
| | | } |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | private SendResult sendTemplate(WxMpUtils wxMpUtils, WechatSendRequest request) { |
| | | Object data = request.getExtra("templateData"); |
| | | Map<String, String> dataMap = data instanceof Map ? (Map<String, String>) data : null; |
| | | String msgId = wxMpUtils.sendTemplateMessage(request.getOpenid(), request.getTemplateId(), |
| | | request.getUrl(), dataMap, null); |
| | | if (StringUtils.isNotEmpty(msgId)) { |
| | | return SendResult.success(KEY, MessageChannel.WECHAT, msgId).withCode(msgId); |
| | | } |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "å
¬ä¼å·æ¨¡æ¿æ¶æ¯åé失败", null); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat.provider.xh; |
| | | |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.message.wechat.WechatMpConfig; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.security.MessageDigest; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ°åå»é¢å
¬ä¼å· APIã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼POST JSON æ¥æï¼ç¾å {@code sign = MD5(appSecret + body)} æ¾å¨è¯·æ±å¤´ï¼ |
| | | * ç½å
³å°åæ¥èªæºæçº§é
ç½®ï¼{@code WxGZHEnum}ï¼ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼åé»è¾åæ£å¨ {@code RyTask.getWXCode}ã{@code RedisMqReceiver.getWXCode}ã |
| | | * {@code ServiceSubtaskServiceImpl.getWXCode} ä¸ä»½æ·è´éï¼æ¤å¤å并为ä¸ä»½ï¼è¡ä¸ºä¿æä¸åï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class XinHuaMpApi { |
| | | |
| | | private final com.ruoyi.message.config.MessageProperties properties; |
| | | |
| | | public XinHuaMpApi(com.ruoyi.message.config.MessageProperties properties) { |
| | | this.properties = properties; |
| | | } |
| | | |
| | | /** |
| | | * åéå
¬ä¼å·æ¶æ¯ï¼é»è®¤ä¸å
³é HTML 转ä¹ï¼çä»· {@code RyTask.getWXCode}ï¼ |
| | | */ |
| | | public String sendMessage(String idcard, String url, String taskName, String taskDesc, |
| | | String phone, String patientName, String patientId, WechatMpConfig config) { |
| | | return sendMessage(idcard, url, taskName, taskDesc, phone, patientName, patientId, config, false); |
| | | } |
| | | |
| | | /** |
| | | * åéå
¬ä¼å·æ¶æ¯ |
| | | * |
| | | * @param idcard 身份è¯å· |
| | | * @param url å¤é¾å°å |
| | | * @param taskName æ é¢ |
| | | * @param taskDesc å
容 |
| | | * @param phone ææºå· |
| | | * @param patientName æ£è
å§å |
| | | * @param patientId HIS ä¾§æ£è
ID |
| | | * @param config æºæçº§å
¬ä¼å·é
ç½® |
| | | * @param disableHtmlEscaping æ¯å¦å
³é Gson ç HTML è½¬ä¹ |
| | | * <p> |
| | | * â ï¸ ç«ç¹å·®å¼ï¼å¿
é¡»åºåï¼ï¼{@code RedisMqReceiver.getWXCode} ç¨çæ¯ |
| | | * {@code new GsonBuilder().disableHtmlEscaping()}ï¼è |
| | | * {@code RyTask.getWXCode} / {@code ServiceSubtaskServiceImpl.getWXCode} |
| | | * ç¨çæ¯ {@code new Gson()}ï¼ä¼æ {@code < > & = '} 转æ unicode 转ä¹ï¼ã |
| | | * 两è
产åºçæ¥æä½ä¸åï¼è¿èå½±å sign ç¾åãæ¤å¤æè°ç¨æ¹åºåï¼ä¿æçº¿ä¸è¡ä¸ºã |
| | | * @return ç¬¬ä¸æ¹åå§ååº |
| | | */ |
| | | public String sendMessage(String idcard, String url, String taskName, String taskDesc, |
| | | String phone, String patientName, String patientId, WechatMpConfig config, |
| | | boolean disableHtmlEscaping) { |
| | | XinHuaWXReq req = new XinHuaWXReq(); |
| | | req.setService(properties.getWechat().getXinhua().getService()); |
| | | req.setIdcard(idcard); |
| | | req.setUrl(url); |
| | | req.setPatientid(patientId); |
| | | req.setPatientname(patientName); |
| | | req.setMobile(phone); |
| | | req.setMedcardno(null); |
| | | req.setTitlename(taskName); |
| | | req.setContent(taskDesc); |
| | | req.setAppid(config.getAppid()); |
| | | |
| | | log.info("ãXinHuaMpApiã微信å
¬ä¼å·è¯·æ±åæ°ï¼{}ï¼disableHtmlEscaping={}ï¼", req, disableHtmlEscaping); |
| | | String body; |
| | | if (disableHtmlEscaping) { |
| | | GsonBuilder gb = new GsonBuilder(); |
| | | gb.disableHtmlEscaping(); |
| | | body = gb.create().toJson(req); |
| | | } else { |
| | | body = new Gson().toJson(req); |
| | | } |
| | | String sign = md5(config.getAppSecret().concat(body)); |
| | | Map<String, String> headerMap = new HashMap<>(); |
| | | headerMap.put("sign", sign); |
| | | String result = HttpUtils.sendPostByHeader(config.getAddress(), body, headerMap); |
| | | log.info("ãXinHuaMpApiã微信å
¬ä¼å·è¿ååæ°ï¼{}", result); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * MD5 转åå
è¿å¶å°åï¼çä»·å {@code getWXCode} éç {@code encode}ï¼ |
| | | */ |
| | | private String md5(String arg) { |
| | | if (arg == null) { |
| | | arg = ""; |
| | | } |
| | | try { |
| | | MessageDigest md5 = MessageDigest.getInstance("MD5"); |
| | | md5.update(arg.getBytes(StandardCharsets.UTF_8)); |
| | | return toHex(md5.digest()); |
| | | } catch (Exception e) { |
| | | log.error("ãXinHuaMpApiãMD5 ç¾å失败ï¼{}", e.getMessage(), e); |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | private String toHex(byte[] hash) { |
| | | StringBuilder hexString = new StringBuilder(); |
| | | for (byte b : hash) { |
| | | String hex = Integer.toHexString(0xff & b); |
| | | if (hex.length() == 1) { |
| | | hexString.append('0'); |
| | | } |
| | | hexString.append(hex); |
| | | } |
| | | return hexString.toString(); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat.provider.xh; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.wechat.WechatMpConfig; |
| | | import com.ruoyi.message.wechat.WechatMpConfigProvider; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSender; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.ObjectProvider; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ°åå»é¢å¾®ä¿¡å
¬ä¼å·åéæ¹ï¼{@code xh} ééï¼ã |
| | | * <p> |
| | | * 对æ¥ç¹å¾ï¼POST JSON + {@code sign=MD5(appSecret+body)}ï¼æåå¤å®ä¸ºè¿å JSON ç {@code succ == true}ã |
| | | * <p> |
| | | * ç«ç¹å·®å¼ï¼è°ç¨æ¹éä¿çï¼ï¼ |
| | | * <ul> |
| | | * <li>éè¦æºæçº§å
¬ä¼å·é
ç½®ï¼appid/appSecret/å°åï¼ï¼é
ç½®ä¸å
¨æ¶ç´æ¥å¤±è´¥ï¼</li> |
| | | * <li>è¦æ± HIS ä¾§æ£è
ID é空ã</li> |
| | | * </ul> |
| | | * ä»£ç æ¥æºï¼{@code RyTask å
¬ä¼å·åæ¯} + {@code RedisMqReceiver å
¬ä¼å·åæ¯} + |
| | | * {@code ServiceSubtaskServiceImpl.wechatSubTask}ï¼è¡ä¸ºä¿æä¸åï¼ã |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class XinHuaMpSender implements WechatSender { |
| | | |
| | | /** |
| | | * æ¸ é keyï¼ä¸ {@code spring.profiles.active=xh} å¯¹åº |
| | | */ |
| | | public static final String KEY = "xh"; |
| | | |
| | | private final ObjectProvider<WechatMpConfigProvider> configProvider; |
| | | |
| | | private final XinHuaMpApi xinHuaMpApi; |
| | | |
| | | public XinHuaMpSender(ObjectProvider<WechatMpConfigProvider> configProvider, XinHuaMpApi xinHuaMpApi) { |
| | | this.configProvider = configProvider; |
| | | this.xinHuaMpApi = xinHuaMpApi; |
| | | } |
| | | |
| | | @Override |
| | | public String key() { |
| | | return KEY; |
| | | } |
| | | |
| | | @Override |
| | | public String description() { |
| | | return "æ°åå»é¢å¾®ä¿¡å
¬ä¼å·ï¼sign ç¾åï¼succ å¤å®ï¼"; |
| | | } |
| | | |
| | | @Override |
| | | public SendResult send(WechatSendRequest request) { |
| | | if (request == null) { |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, "ãå
¬ä¼å·ã请æ±åæ°ä¸ºç©º", null); |
| | | } |
| | | |
| | | WechatMpConfig config = resolveConfig(request.getOrgid()); |
| | | if (config == null || !config.isComplete()) { |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, |
| | | "ãå
¬ä¼å·ãè¯¥æºæçå
¬ä¼å·é
置信æ¯ä¸å
¨ï¼æ æ³éè¿å
¬ä¼å·åé", null); |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(request.getPatidHis())) { |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, |
| | | "ãå
¬ä¼å·ãå
¬ä¼å·åé失败,hisç³»ç»çæ£è
id为空", null); |
| | | } |
| | | |
| | | try { |
| | | String raw = xinHuaMpApi.sendMessage( |
| | | request.getIdCard(), |
| | | request.getUrl(), |
| | | request.getTitle(), |
| | | request.getContent(), |
| | | request.getPhone(), |
| | | request.getPatientName(), |
| | | request.getPatidHis(), |
| | | config, |
| | | request.isDisableHtmlEscaping()); |
| | | |
| | | Map map = JSONObject.parseObject(raw, Map.class); |
| | | boolean success = map != null && !map.isEmpty() |
| | | && map.get("succ") != null |
| | | && Boolean.parseBoolean(map.get("succ").toString()); |
| | | if (success) { |
| | | return SendResult.success(KEY, MessageChannel.WECHAT, raw); |
| | | } |
| | | Object msg = map == null ? null : map.get("msg"); |
| | | String message = msg == null ? "ãå
¬ä¼å·ãå
¬ä¼å·åé失败" : msg.toString(); |
| | | log.error("ã{}ãå
¬ä¼å·åé失败ï¼é误信æ¯ï¼{}", KEY, message); |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, message, raw); |
| | | } catch (Exception e) { |
| | | log.error("ã{}ãå
¬ä¼å·åéå¼å¸¸ï¼{}", KEY, e.getMessage(), e); |
| | | return SendResult.fail(KEY, MessageChannel.WECHAT, |
| | | "ãå
¬ä¼å·ãå
¬ä¼å·åé失败ï¼åå ï¼" + e.getMessage(), null); |
| | | } |
| | | } |
| | | |
| | | private WechatMpConfig resolveConfig(String orgid) { |
| | | WechatMpConfigProvider provider = configProvider.getIfAvailable(); |
| | | if (provider == null) { |
| | | log.warn("ã{}ãæªæ¾å° WechatMpConfigProvider å®ç°ï¼æ æ³è·åæºæå
¬ä¼å·é
ç½®", KEY); |
| | | return null; |
| | | } |
| | | return provider.getConfig(orgid); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.wechat.provider.xh; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * æ°åå»é¢å
¬ä¼å·å
¥åã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.smartor.domain.XinHuaWXReq}ï¼å¸¦ swagger/Excel 注解ï¼ï¼ |
| | | * è¿ç§»å°æ¬æ¨¡åååªä¿çä¼ è¾å段ï¼å段åä¸ JSON æ¥æä¿æä¸è´ï¼ä¸è½æ¹åï¼å¦åå½±å对æ¹è§£æï¼ã |
| | | */ |
| | | @Data |
| | | public class XinHuaWXReq { |
| | | |
| | | /** |
| | | * æ¥å£æå¡åï¼åºå®å¼ |
| | | */ |
| | | private String service = "smarthos.pat.notice"; |
| | | |
| | | /** |
| | | * åºç¨ç¼å· |
| | | */ |
| | | private String appid; |
| | | |
| | | /** |
| | | * æ£è
ç¼å· |
| | | */ |
| | | private String patientid; |
| | | |
| | | /** |
| | | * æ£è
å§å |
| | | */ |
| | | private String patientname; |
| | | |
| | | /** |
| | | * è¯ä»¶å· |
| | | */ |
| | | private String idcard; |
| | | |
| | | /** |
| | | * ææºå·ç |
| | | */ |
| | | private String mobile; |
| | | |
| | | /** |
| | | * å°±è¯å¡å· |
| | | */ |
| | | private String medcardno; |
| | | |
| | | /** |
| | | * éç¥å
容 |
| | | */ |
| | | private String titlename; |
| | | |
| | | /** |
| | | * 龿¥å°å |
| | | */ |
| | | private String content; |
| | | |
| | | /** |
| | | * 详æ
å°å |
| | | */ |
| | | private String url; |
| | | } |
| ÎļþÃû´Ó ruoyi-common/src/main/java/com/ruoyi/common/utils/WxMpUtils.java ÐÞ¸Ä |
| | |
| | | package com.ruoyi.common.utils; |
| | | package com.ruoyi.message.wechat.support; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import me.chanjar.weixin.common.exception.WxErrorException; |
| | |
| | | import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; |
| | | import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; |
| | | import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; |
| | | import org.springframework.stereotype.Component; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 微信å
¬ä¼å·æ¶æ¯åéå·¥å
·ç±» |
| | | * æ¯æï¼ææ¬å®¢ææ¶æ¯ãæ¨¡æ¿æ¶æ¯ |
| | | * 微信å
¬ä¼å·æ¶æ¯åéå·¥å
·ç±»ï¼å¾®ä¿¡å®æ¹ SDK ééï¼ã |
| | | * <p> |
| | | * æ¯æï¼ææ¬å®¢ææ¶æ¯ãæ¨¡æ¿æ¶æ¯ã |
| | | * <p> |
| | | * è¿ç§»è¯´æï¼å类为 {@code com.ruoyi.common.utils.WxMpUtils}ï¼è¡ä¸ºæªæ¹å¨ï¼ä»
æ¢å
ã |
| | | * ç°ç¶ï¼å
¨é¡¹ç®<b>没æä¸å¡è°ç¨ç¹</b>ï¼åªæ {@code SysLoginController} ä¸ |
| | | * {@code WeChatService} éçæ³¨é/æµè¯ä»£ç ï¼ï¼å±äºãå·²å
·å¤è½å使ªæ¥å
¥ãçééã |
| | | */ |
| | | @Slf4j |
| | | public class WxMpUtils { |
| | |
| | | // ------------------------------------------------------------------------- |
| | | |
| | | /** |
| | | * åæå® openid çç¨æ·åéææ¬å®¢ææ¶æ¯ |
| | | * 注æï¼ç¨æ·éå¨48å°æ¶å
ä¸å
¬ä¼å·æè¿äº¤äºæå¯åé |
| | | * åæå® openid çç¨æ·åéææ¬å®¢ææ¶æ¯ã |
| | | * 注æï¼ç¨æ·éå¨48å°æ¶å
ä¸å
¬ä¼å·æè¿äº¤äºæå¯åéã |
| | | * |
| | | * @param openid ç¨æ·ç微信 openid |
| | | * @param content æ¶æ¯å
容 |
| | |
| | | * @param templateId æ¨¡æ¿æ¶æ¯ IDï¼å¨å¾®ä¿¡å
¬ä¼å¹³å°é
ç½®ï¼ |
| | | * @param url ç¹å»æ¶æ¯åç跳转 URLï¼ä¸éè¦è·³è½¬å¯ä¼ null |
| | | * @param dataMap æ¨¡æ¿æ°æ®ï¼key 为模æ¿å段åï¼value 为 WxMpTemplateDataï¼å«å¼åé¢è²ï¼ |
| | | * 示ä¾ï¼{"first": new WxMpTemplateData("first", "ä½ å¥½", "#173177"), ...} |
| | | * @return åéæåè¿å微信è¿åç msgidï¼å¤±è´¥è¿å null |
| | | */ |
| | | public String sendTemplateMessage(String openid, String templateId, String url, Map<String, WxMpTemplateData> dataMap) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * åæå® openid çç¨æ·å鿍¡æ¿æ¶æ¯ï¼ç®åçï¼value ä¸è®¾ç½®é¢è²ï¼ |
| | | * åæå® openid çç¨æ·å鿍¡æ¿æ¶æ¯ï¼ç®åçï¼value ç»ä¸ä½¿ç¨é»è®¤é¢è²ï¼ |
| | | * |
| | | * @param openid ç¨æ·ç微信 openid |
| | | * @param templateId æ¨¡æ¿æ¶æ¯ ID |
| | | * @param url ç¹å»æ¶æ¯åç跳转 URLï¼ä¸éè¦è·³è½¬å¯ä¼ null |
| | | * @param dataMap æ¨¡æ¿æ°æ®ï¼key 为模æ¿å段åï¼value ä¸ºåæ®µæ¾ç¤ºçææ¬å
容 |
| | | * 示ä¾ï¼{"first": "ä½ å¥½", "keyword1": "2024-01-01", "remark": "æè°¢ä½¿ç¨"} |
| | | * @param openid ç¨æ·ç微信 openid |
| | | * @param templateId æ¨¡æ¿æ¶æ¯ ID |
| | | * @param url ç¹å»æ¶æ¯åç跳转 URLï¼ä¸éè¦è·³è½¬å¯ä¼ null |
| | | * @param dataMap æ¨¡æ¿æ°æ®ï¼key 为模æ¿å段åï¼value ä¸ºåæ®µæ¾ç¤ºçææ¬å
容 |
| | | * @param defaultColor é»è®¤é¢è² |
| | | * @return åéæåè¿å微信è¿åç msgidï¼å¤±è´¥è¿å null |
| | | */ |
| | | public String sendTemplateMessage(String openid, String templateId, String url, Map<String, String> dataMap, String defaultColor) { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import com.ruoyi.message.MessageChannel; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSender; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.ruoyi.message.sms.provider.shiyi.ShiyiSmsUtil; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSender; |
| | | import com.ruoyi.message.wechat.WechatSenderFactory; |
| | | import org.springframework.boot.context.properties.bind.Bindable; |
| | | import org.springframework.boot.context.properties.bind.Binder; |
| | | import org.springframework.boot.context.properties.source.ConfigurationPropertyName; |
| | | import org.springframework.boot.context.properties.source.ConfigurationPropertySources; |
| | | import org.springframework.core.env.ConfigurableEnvironment; |
| | | import org.springframework.core.env.PropertySource; |
| | | import org.springframework.core.env.StandardEnvironment; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ãæ°å¢ {@code message.*} åç¼é¡¹ãçç»å®ä¸å·¥åè£
é
æ ¡éªï¼ä¸ä¾èµ JUnitï¼ã |
| | | * <p> |
| | | * è¦ç两件äºï¼ |
| | | * <ol> |
| | | * <li>{@code message.sms.*} / {@code message.wechat.*} è½ç»å°å¯¹åºçåµå¥åæ®µï¼æªè¦çç项åè½é»è®¤å¼ï¼</li> |
| | | * <li>å·¥åæ key è·¯ç±ç¡®å®æ¯ãè°ç¨å°å¯¹åºåéæ¹ãââè¿æ¯å个ç«ç¹åéé¾è·¯éæ¬å°å¯ä¸è½éªè¯çä¸ç¯ã</li> |
| | | * </ol> |
| | | */ |
| | | public final class MessagePrefixBindingCheck { |
| | | |
| | | private static int failed = 0; |
| | | |
| | | private MessagePrefixBindingCheck() { |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | String[] yaml = { |
| | | "message:", |
| | | " sms:", |
| | | " shiyi:", |
| | | " ws-url: http://his.example.com:7790/MediInfoHis.svc", |
| | | " default-caozuoydm: OPR001", |
| | | " messaging-insert:", |
| | | " ws-url: http://msg.example.com:8081/MessagingInsert.asmx", |
| | | " wechat:", |
| | | " shiyi:", |
| | | " title: èªå®ä¹æ é¢", |
| | | " xinhua:", |
| | | " service: custom.service", |
| | | }; |
| | | ConfigurableEnvironment environment = environment(yaml); |
| | | Binder binder = new Binder(ConfigurationPropertySources.get(environment)); |
| | | |
| | | // ---------- 1) åç¼é¡¹ç»å® ---------- |
| | | MessageProperties.Sms sms = binder |
| | | .bind(ConfigurationPropertyName.of("message.sms"), Bindable.of(MessageProperties.Sms.class)) |
| | | .orElseGet(MessageProperties.Sms::new); |
| | | MessageProperties.Wechat wechat = binder |
| | | .bind(ConfigurationPropertyName.of("message.wechat"), Bindable.of(MessageProperties.Wechat.class)) |
| | | .orElseGet(MessageProperties.Wechat::new); |
| | | |
| | | check("message.sms.shiyi.ws-url", "http://his.example.com:7790/MediInfoHis.svc", |
| | | sms.getShiyi().getWsUrl()); |
| | | check("message.sms.shiyi.default-caozuoydm", "OPR001", sms.getShiyi().getDefaultCaozuoydm()); |
| | | check("message.sms.messaging-insert.ws-url", "http://msg.example.com:8081/MessagingInsert.asmx", |
| | | sms.getMessagingInsert().getWsUrl()); |
| | | check("message.wechat.shiyi.title", "èªå®ä¹æ é¢", wechat.getShiyi().getTitle()); |
| | | check("message.wechat.xinhua.service", "custom.service", wechat.getXinhua().getService()); |
| | | // åç»æªè¦ç项åºåè½é»è®¤å¼ |
| | | check("message.wechat.shiyi.urlï¼åè½é»è®¤ï¼", "http://192.200.54.14:5003/sfjk/SendMessage", |
| | | wechat.getShiyi().getUrl()); |
| | | check("message.sms.shiyi.ws-url é»è®¤å¼ä¸ä¸¢", "http://192.178.0.104:7790/MediInfoHis.svc", |
| | | new MessageProperties.Sms().getShiyi().getWsUrl()); |
| | | |
| | | // ---------- 2) å·¥åè·¯ç±ç¡®å®è°å°å¯¹åºåéæ¹ ---------- |
| | | SmsSenderFactory smsFactory = new SmsSenderFactory(Collections.<SmsSender>singletonList(new CountingSmsSender())); |
| | | WechatSenderFactory wechatFactory = new WechatSenderFactory(Collections.<WechatSender>singletonList(new CountingWechatSender())); |
| | | |
| | | SendResult smsResult = smsFactory.send("probe-channel", SmsSendRequest.of("13500000001", "å
容")); |
| | | check("çä¿¡å·¥åæ key è·¯ç±å°å¯¹åºåéæ¹", "true", String.valueOf(smsResult.isOk())); |
| | | |
| | | SendResult wechatResult = wechatFactory.send("probe-channel", new WechatSendRequest()); |
| | | check("å
¬ä¼å·å·¥åæ key è·¯ç±å°å¯¹åºåéæ¹", "true", String.valueOf(wechatResult.isOk())); |
| | | |
| | | try { |
| | | smsFactory.send("ä¸åå¨çæ¸ é", SmsSendRequest.of("13500000001", "å
容")); |
| | | check("æªç¥æ¸ éåºæ SendException", "æå¼å¸¸", "没æ"); |
| | | } catch (com.ruoyi.message.SendException e) { |
| | | check("æªç¥æ¸ éåºæ SendException", "æå¼å¸¸", "æå¼å¸¸"); |
| | | } |
| | | |
| | | // ---------- 3) ShiyiSmsUtil ä»è½æ£å¸¸æé ï¼ä¿åºåè°/åæ°æ ¡éªè¡ä¸ºä¸ä¸¢ï¼ ---------- |
| | | ShiyiSmsUtil shiyiSmsUtil = new ShiyiSmsUtil(new MessageProperties(new RootMessageProperties())); |
| | | boolean paramChecked = false; |
| | | try { |
| | | shiyiSmsUtil.sendSms(null); |
| | | } catch (IllegalArgumentException e) { |
| | | paramChecked = "ç信请æ±ä¸è½ä¸ºç©º".equals(e.getMessage()); |
| | | } |
| | | check("ShiyiSmsUtil å
¥åæ ¡éªä»çæ", "true", String.valueOf(paramChecked)); |
| | | |
| | | System.out.println(); |
| | | if (failed == 0) { |
| | | System.out.println("===== message.* ç»å®ä¸å·¥åè·¯ç±æ ¡éªå
¨é¨éè¿ ====="); |
| | | } else { |
| | | System.out.println("===== message.* ç»å®ä¸å·¥åè·¯ç±æ ¡éªå¤±è´¥ " + failed + " 项 ====="); |
| | | System.exit(1); |
| | | } |
| | | } |
| | | |
| | | private static ConfigurableEnvironment environment(String[] inlineYaml) throws IOException { |
| | | ConfigurableEnvironment environment = new StandardEnvironment(); |
| | | environment.getPropertySources() |
| | | .remove(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME); |
| | | environment.getPropertySources() |
| | | .remove(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME); |
| | | org.springframework.boot.env.YamlPropertySourceLoader loader = |
| | | new org.springframework.boot.env.YamlPropertySourceLoader(); |
| | | List<PropertySource<?>> sources = loader.load("inline.yml", |
| | | new org.springframework.core.io.ByteArrayResource( |
| | | String.join("\n", inlineYaml).getBytes(java.nio.charset.StandardCharsets.UTF_8))); |
| | | for (PropertySource<?> source : sources) { |
| | | environment.getPropertySources().addLast(source); |
| | | } |
| | | return environment; |
| | | } |
| | | |
| | | private static void check(String key, String expected, String actual) { |
| | | boolean ok = expected.equals(actual); |
| | | if (!ok) { |
| | | failed++; |
| | | } |
| | | System.out.println((ok ? "[OK] " : "[FAIL] ") + key + " ææ=[" + expected + "] å®é
=[" + actual + "]"); |
| | | } |
| | | |
| | | /** æ¢éçä¿¡åéæ¹ */ |
| | | static class CountingSmsSender implements SmsSender { |
| | | @Override |
| | | public String key() { |
| | | return "probe-channel"; |
| | | } |
| | | |
| | | @Override |
| | | public SendResult send(SmsSendRequest request) { |
| | | return SendResult.success(key(), MessageChannel.SMS, "called"); |
| | | } |
| | | } |
| | | |
| | | /** æ¢éå
¬ä¼å·åéæ¹ */ |
| | | static class CountingWechatSender implements WechatSender { |
| | | @Override |
| | | public String key() { |
| | | return "probe-channel"; |
| | | } |
| | | |
| | | @Override |
| | | public SendResult send(WechatSendRequest request) { |
| | | return SendResult.success(key(), MessageChannel.WECHAT, "called"); |
| | | } |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import org.springframework.boot.context.properties.bind.Bindable; |
| | | import org.springframework.boot.context.properties.bind.Binder; |
| | | import org.springframework.boot.context.properties.source.ConfigurationPropertyName; |
| | | import org.springframework.boot.context.properties.source.ConfigurationPropertySources; |
| | | import org.springframework.boot.env.YamlPropertySourceLoader; |
| | | import org.springframework.core.env.PropertySource; |
| | | import org.springframework.core.env.StandardEnvironment; |
| | | import org.springframework.core.io.ClassPathResource; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * é
ç½®ç»å®æ ¡éªç¨åºï¼ä¸ä¾èµ JUnitï¼å¯ç´æ¥ç¨æ¨¡åçè¿è¡æ¶ classpath æ§è¡ï¼ã |
| | | * <p> |
| | | * åå¨çæä¹ï¼ææ£è½ç {@code @Value} æ¹æ {@code @ConfigurationProperties} åï¼ |
| | | * åç¼/å±çº§åé<b>ç¼è¯æåç°ä¸äº</b>ï¼åªä¼å¨çº¿ä¸åçä¿¡æ¶è¡¨ç°ä¸ºåæ°ä¸º nullã |
| | | * æ¬ç¨åºç¨ãçå®çæå¹³ ymlãè·ä¸æ¬¡ç»å®ï¼æè¿äº key éä½ã |
| | | * <p> |
| | | * æ§è¡æ¹å¼è§ {@code ruoyi-message/README-é
ç½®ç»å®æ ¡éª.md}ã |
| | | */ |
| | | public final class MessagePropertiesBindingCheck { |
| | | |
| | | private static int failed = 0; |
| | | |
| | | private MessagePropertiesBindingCheck() { |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | StandardEnvironment environment = new StandardEnvironment(); |
| | | // 廿 systemProperties / systemEnvironmentï¼Windows ä¸å®ä»¬çå忝大å驼峰ï¼å¦ XHSMSPATHï¼ï¼ |
| | | // ConfigurationPropertyName 䏿¥å大åï¼ä¼å¹²æ°ç»å®è¯æãçäº§ç¨ SpringApplication æ¶ååä¼è¢«å½ä¸åã |
| | | environment.getPropertySources() |
| | | .remove(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME); |
| | | environment.getPropertySources() |
| | | .remove(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME); |
| | | List<PropertySource<?>> sources = new YamlPropertySourceLoader() |
| | | .load("message-binding-check.yml", new ClassPathResource("message-binding-check.yml")); |
| | | environment.getPropertySources().addLast(sources.get(0)); |
| | | |
| | | Binder binder = new Binder(ConfigurationPropertySources.get(environment)); |
| | | RootMessageProperties root = binder |
| | | .bind(ConfigurationPropertyName.EMPTY, Bindable.of(RootMessageProperties.class)) |
| | | .orElseGet(RootMessageProperties::new); |
| | | MessageProperties properties = new MessageProperties(root); |
| | | |
| | | // ---- æ°åçä¿¡ç½å
³ ---- |
| | | check("xhsmsPath", "http://192.16.4.220:8092/sendSms", properties.getSms().getXhsms().getPath()); |
| | | check("xhsmsAccount", "911124", properties.getSms().getXhsms().getAccount()); |
| | | check("xhsmsPwd", "zW5eXe", properties.getSms().getXhsms().getPwd()); |
| | | check("xhsmsjrm", "1069055", properties.getSms().getXhsms().getExtno()); |
| | | |
| | | // ---- ååéä¸ MTï¼ç¨æ·ç¹å«æåºç飿¹é
ç½®ï¼---- |
| | | check("sms_accountName", "S200232", properties.getSms().getMt().getAccountName()); |
| | | check("sms_password", "lD94Yo", properties.getSms().getMt().getPassword()); |
| | | check("sms_url", "http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send", properties.getSms().getMt().getUrl()); |
| | | check("sms_sourceAddr", "1069100020341", properties.getSms().getMt().getSourceAddr()); |
| | | check("sms_serviceCode", "PUSH", properties.getSms().getMt().getServiceCode()); |
| | | check("sms_appkey", "ak-BFq4NN0TMf92J7KAioNYGz74", properties.getSms().getMt().getAppkey()); |
| | | check("sms_flag", "ãåå大å¦éå±ç¬¬ä¸å»é¢ã", properties.getSms().getMt().getFlag()); |
| | | |
| | | // ---- é¿éäº ---- |
| | | check("accessKeyId", "LTAI5tTestKeyId", properties.getSms().getAliyun().getAccessKeyId()); |
| | | check("accessKeySecret", "testSecret", properties.getSms().getAliyun().getAccessKeySecret()); |
| | | check("signName", "æå·å©æ¹ç§æ", properties.getSms().getAliyun().getSignName()); |
| | | |
| | | // ---- æ°å¢é¡¹åºåè½å°é»è®¤å¼ ---- |
| | | check("message.sms.shiyi.ws-url é»è®¤å¼", "http://192.178.0.104:7790/MediInfoHis.svc", |
| | | properties.getSms().getShiyi().getWsUrl()); |
| | | check("message.sms.messaging-insert.ws-url é»è®¤å¼", "http://218.108.11.29:8081/MessagingInsert.asmx", |
| | | properties.getSms().getMessagingInsert().getWsUrl()); |
| | | check("message.wechat.shiyi.url é»è®¤å¼", "http://192.200.54.14:5003/sfjk/SendMessage", |
| | | properties.getWechat().getShiyi().getUrl()); |
| | | check("message.wechat.xinhua.service é»è®¤å¼", "smarthos.pat.notice", |
| | | properties.getWechat().getXinhua().getService()); |
| | | |
| | | System.out.println(); |
| | | if (failed == 0) { |
| | | System.out.println("===== é
ç½®ç»å®æ ¡éªå
¨é¨éè¿ ====="); |
| | | } else { |
| | | System.out.println("===== é
ç½®ç»å®æ ¡éªå¤±è´¥ " + failed + " 项 ====="); |
| | | System.exit(1); |
| | | } |
| | | } |
| | | |
| | | private static void check(String key, String expected, String actual) { |
| | | boolean ok = expected == null ? actual == null : expected.equals(actual); |
| | | if (!ok) { |
| | | failed++; |
| | | } |
| | | System.out.println((ok ? "[OK] " : "[FAIL] ") + key |
| | | + " ææ=" + expected + " å®é
=" + actual); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.message.config; |
| | | |
| | | import org.springframework.boot.context.properties.bind.Bindable; |
| | | import org.springframework.boot.context.properties.bind.Binder; |
| | | import org.springframework.boot.context.properties.source.ConfigurationPropertyName; |
| | | import org.springframework.boot.context.properties.source.ConfigurationPropertySources; |
| | | import org.springframework.boot.env.YamlPropertySourceLoader; |
| | | import org.springframework.core.env.ConfigurableEnvironment; |
| | | import org.springframework.core.env.PropertySource; |
| | | import org.springframework.core.env.StandardEnvironment; |
| | | import org.springframework.core.io.FileSystemResource; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ç¨ãåç«ç¹çå®ç application-*.ymlãéç«ç¹æ ¡éªåéæå¹³ key çç»å®ã |
| | | * <p> |
| | | * åªå
³å¿çä¿¡/å
¬ä¼å·ç¸å
³ keyï¼å
¶ä½ key å³ä½¿å¸¦å ä½ç¬¦ä¹ä¸å½±åã |
| | | */ |
| | | public final class PerSiteBindingCheck { |
| | | |
| | | private static int failed = 0; |
| | | |
| | | private PerSiteBindingCheck() { |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | String resDir = args.length > 0 ? args[0] |
| | | : "ruoyi-admin/src/main/resources"; |
| | | |
| | | checkSite(resDir, "xh", "æ°å", |
| | | new String[]{"http://192.16.4.220:8092/sms", "911124", "zW5eXe", "1069055"}, |
| | | null, null); |
| | | checkSite(resDir, "hzszlyy", "å¸ä¸", |
| | | new String[]{"http://192.169.140.240:8001/sms/api/sendMessageMass", "300044", "qj0NHDegxWhj", "1069055"}, |
| | | null, null); |
| | | checkSite(resDir, "sltd", "çç«åå¾·", |
| | | new String[]{"", "", "", ""}, |
| | | null, null); |
| | | checkSite(resDir, "nhfy", "ååéä¸", |
| | | new String[]{"", "", "", ""}, |
| | | new String[]{"S200232", "lD94Yo", "http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send", |
| | | "1069100020341", "PUSH", "ak-BFq4NN0TMf92J7KAioNYGz74", "ãåå大å¦éå±ç¬¬ä¸å»é¢ã"}, |
| | | null); |
| | | |
| | | System.out.println(); |
| | | if (failed == 0) { |
| | | System.out.println("===== éç«ç¹ç»å®æ ¡éªå
¨é¨éè¿ ====="); |
| | | } else { |
| | | System.out.println("===== éç«ç¹ç»å®æ ¡éªå¤±è´¥ " + failed + " 项 ====="); |
| | | System.exit(1); |
| | | } |
| | | } |
| | | |
| | | private static void checkSite(String resDir, String profile, String siteName, |
| | | String[] xhsms, String[] mt, String[] aliyun) throws Exception { |
| | | String file = resDir + "/application-" + profile + ".yml"; |
| | | System.out.println("========== " + siteName + "ï¼" + file + "ï¼=========="); |
| | | |
| | | ConfigurableEnvironment environment = new StandardEnvironment(); |
| | | environment.getPropertySources() |
| | | .remove(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME); |
| | | environment.getPropertySources() |
| | | .remove(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME); |
| | | List<PropertySource<?>> sources = new YamlPropertySourceLoader() |
| | | .load(file, new FileSystemResource(file)); |
| | | for (PropertySource<?> source : sources) { |
| | | environment.getPropertySources().addLast(source); |
| | | } |
| | | |
| | | Binder binder = new Binder(ConfigurationPropertySources.get(environment)); |
| | | RootMessageProperties root = binder |
| | | .bind(ConfigurationPropertyName.EMPTY, Bindable.of(RootMessageProperties.class)) |
| | | .orElseGet(RootMessageProperties::new); |
| | | MessageProperties p = new MessageProperties(root); |
| | | |
| | | if (xhsms != null) { |
| | | check(siteName + ".xhsmsPath", xhsms[0], p.getSms().getXhsms().getPath()); |
| | | check(siteName + ".xhsmsAccount", xhsms[1], p.getSms().getXhsms().getAccount()); |
| | | check(siteName + ".xhsmsPwd", xhsms[2], p.getSms().getXhsms().getPwd()); |
| | | check(siteName + ".xhsmsjrm", xhsms[3], p.getSms().getXhsms().getExtno()); |
| | | } |
| | | if (mt != null) { |
| | | check(siteName + ".sms_accountName", mt[0], p.getSms().getMt().getAccountName()); |
| | | check(siteName + ".sms_password", mt[1], p.getSms().getMt().getPassword()); |
| | | check(siteName + ".sms_url", mt[2], p.getSms().getMt().getUrl()); |
| | | check(siteName + ".sms_sourceAddr", mt[3], p.getSms().getMt().getSourceAddr()); |
| | | check(siteName + ".sms_serviceCode", mt[4], p.getSms().getMt().getServiceCode()); |
| | | check(siteName + ".sms_appkey", mt[5], p.getSms().getMt().getAppkey()); |
| | | check(siteName + ".sms_flag", mt[6], p.getSms().getMt().getFlag()); |
| | | } |
| | | if (aliyun != null) { |
| | | check(siteName + ".accessKeyId", aliyun[0], p.getSms().getAliyun().getAccessKeyId()); |
| | | } |
| | | System.out.println(); |
| | | } |
| | | |
| | | private static void check(String key, String expected, String actual) { |
| | | boolean ok = expected == null ? actual == null : expected.equals(actual); |
| | | if (!ok) { |
| | | failed++; |
| | | } |
| | | System.out.println((ok ? " [OK] " : " [FAIL] ") + key |
| | | + " ææ=[" + expected + "] å®é
=[" + actual + "]"); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ä»
ç¨äº MessagePropertiesBindingCheckï¼æ¨¡æåç«ç¹ application-<profile>.yml çãæ ¹çº§æå¹³ keyã |
| | | # 注æï¼è¿äº key å¨çå®é
ç½®æä»¶éå°±æ¯æ ¹çº§çï¼ä¸å¸¦ä»»ä½åç¼ |
| | | xhsmsPath: http://192.16.4.220:8092/sendSms |
| | | xhsmsAccount: 911124 |
| | | xhsmsPwd: zW5eXe |
| | | xhsmsjrm: 1069055 |
| | | |
| | | sms_accountName: S200232 |
| | | sms_password: lD94Yo |
| | | sms_url: http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send |
| | | sms_sourceAddr: 1069100020341 |
| | | sms_serviceCode: PUSH |
| | | sms_appkey: ak-BFq4NN0TMf92J7KAioNYGz74 |
| | | sms_flag: ãåå大å¦éå±ç¬¬ä¸å»é¢ã |
| | | |
| | | accessKeyId: LTAI5tTestKeyId |
| | | accessKeySecret: testSecret |
| | | signName: æå·å©æ¹ç§æ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ä»
ç¨äº MessagePropertiesBindingCheckï¼æ¨¡æåç«ç¹ application-<profile>.yml çãæ ¹çº§æå¹³ keyã |
| | | # 注æï¼è¿äº key å¨çå®é
ç½®æä»¶éå°±æ¯æ ¹çº§çï¼ä¸å¸¦ä»»ä½åç¼ |
| | | xhsmsPath: http://192.16.4.220:8092/sendSms |
| | | xhsmsAccount: 911124 |
| | | xhsmsPwd: zW5eXe |
| | | xhsmsjrm: 1069055 |
| | | |
| | | sms_accountName: S200232 |
| | | sms_password: lD94Yo |
| | | sms_url: http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send |
| | | sms_sourceAddr: 1069100020341 |
| | | sms_serviceCode: PUSH |
| | | sms_appkey: ak-BFq4NN0TMf92J7KAioNYGz74 |
| | | sms_flag: ãåå大å¦éå±ç¬¬ä¸å»é¢ã |
| | | |
| | | accessKeyId: LTAI5tTestKeyId |
| | | accessKeySecret: testSecret |
| | | signName: æå·å©æ¹ç§æ |
copy from ruoyi-system/src/main/java/WebServiceClient/MessagingInsert.asmx
copy to ruoyi-message/target/classes/wsdl/MessagingInsert.asmx
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #Generated by Maven |
| | | #Sat Oct 10 14:15:13 CST 2026 |
| | | version=3.8.5 |
| | | groupId=com.ruoyi |
| | | artifactId=ruoyi-message |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | com\ruoyi\message\wechat\provider\xh\XinHuaMpApi.class |
| | | com\ruoyi\message\sms\provider\ls\LishuiStaticConfig.class |
| | | com\ruoyi\message\config\MessageConfigValidator.class |
| | | com\ruoyi\message\MessageChannel.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\MessageSend.class |
| | | com\ruoyi\message\wechat\WechatMpConfig.class |
| | | com\ruoyi\message\sms\provider\ls\LishuiSmsSender.class |
| | | com\ruoyi\message\wechat\provider\xh\XinHuaWXReq.class |
| | | com\ruoyi\message\config\MessageProperties$Wechat.class |
| | | com\ruoyi\message\config\MessageProperties.class |
| | | com\ruoyi\message\sms\provider\shiyi\ShiyiSmsRequest.class |
| | | com\ruoyi\message\wechat\support\WxMpUtils.class |
| | | com\ruoyi\message\sms\AbstractSmsSender.class |
| | | com\ruoyi\message\wechat\WechatSenderFactory.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GReportResponse.class |
| | | com\ruoyi\message\sms\provider\aliyun\AliYunSmsSender$SendSmsRequestAdapter.class |
| | | com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertSoap_PortType.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GSendResponse.class |
| | | com\ruoyi\message\sms\provider\aliyun\AliYunSmsApi.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSVerifyPrivateResponse.class |
| | | com\ruoyi\message\config\XhsmsConfig.class |
| | | com\ruoyi\message\sms\provider\hzszlyy\ShiyiSmsApi.class |
| | | com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsert.class |
| | | com\ruoyi\message\sms\provider\shiyi\ShiyiHisSmsSender.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSSaveContent.class |
| | | com\ruoyi\message\sms\provider\sltd\SltdResponseParser.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SmsServiceSoap.class |
| | | com\ruoyi\message\wechat\provider\hzszlyy\ShiyiMpApi.class |
| | | com\ruoyi\message\wechat\WechatSender.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSGetUserListResponse.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\Hello.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GSearchNumber.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\HelloResponse.class |
| | | com\ruoyi\message\SendException.class |
| | | com\ruoyi\message\wechat\provider\sdk\WxMpSdkSender.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSVerify.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSGetUserList.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSGetTemplateListResponse.class |
| | | com\ruoyi\message\sms\provider\ls\LishuiMessageConfigProvider.class |
| | | com\ruoyi\message\sms\provider\xh\XinHuaSmsSender.class |
| | | com\ruoyi\message\sms\SmsSendRequest.class |
| | | com\ruoyi\message\sms\provider\messaginginsert\MessagingInsertSmsApi.class |
| | | com\ruoyi\message\sms\provider\aliyun\AliYunSmsSender$1.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSVerifyPrivate.class |
| | | com\ruoyi\message\sms\provider\shiyi\ShiyiSmsUtil.class |
| | | com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertSoap_BindingStub.class |
| | | com\ruoyi\message\sms\provider\shiyi\ShiyiSmsResponse.class |
| | | com\ruoyi\message\SendResult.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\package-info.class |
| | | com\ruoyi\message\wechat\WechatSendRequest.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSGetNumberResponse.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSSaveContentResponse.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSVerifyResponse.class |
| | | com\ruoyi\message\config\MessageProperties$MessagingInsert.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GReply.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GSearchNumberResponse.class |
| | | com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertSoap12Stub.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GSend.class |
| | | com\ruoyi\message\sms\provider\aliyun\AliYunSmsSender.class |
| | | com\ruoyi\message\config\AliyunSmsConfig.class |
| | | com\ruoyi\message\config\RootMessageProperties.class |
| | | com\ruoyi\message\wechat\WechatMpConfigProvider.class |
| | | com\ruoyi\message\sms\provider\nhfy\MtSubmitSmUtil.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SmsService.class |
| | | com\ruoyi\message\sms\SmsSender.class |
| | | com\ruoyi\message\config\MtSmsConfig.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GReport.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\ObjectFactory.class |
| | | com\ruoyi\message\config\MessageProperties$Xinhua.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\I5GReplyResponse.class |
| | | com\ruoyi\message\config\MessageProperties$ShiyiWechat.class |
| | | com\ruoyi\message\config\MessageProperties$ShiyiSms.class |
| | | com\ruoyi\message\sms\provider\nhfy\MtSubmitSmResp.class |
| | | com\ruoyi\message\sms\provider\messaginginsert\MessagingInsertSmsSender.class |
| | | com\ruoyi\message\config\MessageProperties$Sms.class |
| | | com\ruoyi\message\wechat\provider\hzszlyy\ShiyiMpSender.class |
| | | com\ruoyi\message\sms\provider\ls\LishuiMessageConfig.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSGetNumber.class |
| | | com\ruoyi\message\sms\provider\sltd\ws\SMSGetTemplateList.class |
| | | com\ruoyi\message\sms\provider\hzszlyy\ShiyiSmsSender.class |
| | | com\ruoyi\message\sms\provider\nhfy\NhfySmsSender.class |
| | | com\ruoyi\message\sms\provider\sltd\SltdSmsSender.class |
| | | com\ruoyi\message\sms\SmsSenderFactory.class |
| | | com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertLocator.class |
| | | com\ruoyi\message\wechat\provider\xh\XinHuaMpSender.class |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\config\XhsmsConfig.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\shiyi\ShiyiSmsUtil.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\Hello.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\SltdResponseParser.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\ObjectFactory.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\WechatMpConfigProvider.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\provider\hzszlyy\ShiyiMpApi.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\config\AliyunSmsConfig.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\shiyi\ShiyiSmsRequest.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSGetUserList.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\WechatSenderFactory.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\AbstractSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\config\MtSmsConfig.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSSaveContentResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSVerifyResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\config\RootMessageProperties.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\provider\xh\XinHuaWXReq.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\aliyun\AliYunSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\ls\LishuiSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertSoap_BindingStub.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\SltdSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\shiyi\ShiyiSmsResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSVerify.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\aliyun\AliYunSmsApi.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\messaginginsert\MessagingInsertSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSVerifyPrivate.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\MessageChannel.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\provider\sdk\WxMpSdkSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\provider\xh\XinHuaMpSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GReport.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\config\MessageConfigValidator.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertLocator.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\hzszlyy\ShiyiSmsApi.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GReplyResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\nhfy\MtSubmitSmUtil.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSGetTemplateListResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\SmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSVerifyPrivateResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\SmsSenderFactory.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertSoap12Stub.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSSaveContent.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\WechatSendRequest.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GSearchNumber.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSGetTemplateList.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\SmsSendRequest.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GSendResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSGetUserListResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\support\WxMpUtils.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\shiyi\ShiyiHisSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\xh\XinHuaSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\messaginginsert\MessagingInsertSmsApi.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\nhfy\MtSubmitSmResp.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GSend.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SmsService.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSGetNumberResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SmsServiceSoap.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\SendException.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\MessageSend.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\SMSGetNumber.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\package-info.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\HelloResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\WechatMpConfig.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsertSoap_PortType.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\messaginginsert\ws\MessagingInsert.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\hzszlyy\ShiyiSmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\provider\xh\XinHuaMpApi.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GReply.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\ls\LishuiMessageConfigProvider.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\config\MessageProperties.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GSearchNumberResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\ls\LishuiMessageConfig.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\nhfy\NhfySmsSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\sltd\ws\I5GReportResponse.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\WechatSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\sms\provider\ls\LishuiStaticConfig.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\wechat\provider\hzszlyy\ShiyiMpSender.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\main\java\com\ruoyi\message\SendResult.java |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | com\ruoyi\message\config\MessagePropertiesBindingCheck.class |
| | | com\ruoyi\message\config\PerSiteBindingCheck.class |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | D:\daima\smartor\smartor\ruoyi-message\src\test\java\com\ruoyi\message\config\MessagePropertiesBindingCheck.java |
| | | D:\daima\smartor\smartor\ruoyi-message\src\test\java\com\ruoyi\message\config\PerSiteBindingCheck.java |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ä»
ç¨äº MessagePropertiesBindingCheckï¼æ¨¡æåç«ç¹ application-<profile>.yml çãæ ¹çº§æå¹³ keyã |
| | | # 注æï¼è¿äº key å¨çå®é
ç½®æä»¶éå°±æ¯æ ¹çº§çï¼ä¸å¸¦ä»»ä½åç¼ |
| | | xhsmsPath: http://192.16.4.220:8092/sendSms |
| | | xhsmsAccount: 911124 |
| | | xhsmsPwd: zW5eXe |
| | | xhsmsjrm: 1069055 |
| | | |
| | | sms_accountName: S200232 |
| | | sms_password: lD94Yo |
| | | sms_url: http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send |
| | | sms_sourceAddr: 1069100020341 |
| | | sms_serviceCode: PUSH |
| | | sms_appkey: ak-BFq4NN0TMf92J7KAioNYGz74 |
| | | sms_flag: ãåå大å¦éå±ç¬¬ä¸å»é¢ã |
| | | |
| | | accessKeyId: LTAI5tTestKeyId |
| | | accessKeySecret: testSecret |
| | | signName: æå·å©æ¹ç§æ |
| | |
| | | <version>3.8.5</version> |
| | | </dependency> |
| | | |
| | | <!-- æ¶æ¯åéï¼çä¿¡/微信å
¬ä¼å·ï¼æ¨¡å --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-message</artifactId> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.core.service.IDingTalkService; |
| | | import com.ruoyi.common.dx.MessageSend; |
| | | import com.ruoyi.common.enums.MsgLSEnum; |
| | | import com.ruoyi.common.enums.ServiceFromEnum; |
| | | 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.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.ruoyi.message.sms.provider.xh.XinHuaSmsSender; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSenderFactory; |
| | | import com.ruoyi.quartz.constant.MzGatherConstant; |
| | | import com.ruoyi.quartz.enums.MzGatherParamEnum; |
| | | import com.ruoyi.quartz.enums.MzGatherSlotEnum; |
| | |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.ruoyi.system.service.ISysDeptService; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import com.smartor.common.LSHospTokenUtil; |
| | | import com.smartor.common.MtSubmitSmUtil; |
| | | import com.ruoyi.message.sms.provider.sltd.ws.MessageSend; |
| | | import com.smartor.common.QwenLLMUtil; |
| | | import com.smartor.domain.*; |
| | | import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO; |
| | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.nio.file.Files; |
| | | import java.nio.file.Paths; |
| | | import java.security.MessageDigest; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.hutool.core.convert.Convert.toHex; |
| | | |
| | | /** |
| | | * 宿¶ä»»å¡è°åº¦æµè¯ |
| | |
| | | @Value("${localIP}") |
| | | private String localIP; |
| | | |
| | | @Value("${xhsmsPath}") |
| | | private String xhsmsPath; |
| | | |
| | | @Value("${xhsmsAccount}") |
| | | private String xhsmsAccount; |
| | | |
| | | @Value("${xhsmsPwd}") |
| | | private String xhsmsPwd; |
| | | // èææ¥å
¥ç |
| | | @Value("${xhsmsjrm}") |
| | | private String xhsmsjrm; |
| | | |
| | | @Value("${pub_key}") |
| | | private String pub_key; |
| | | |
| | |
| | | @Value("${server.port}") |
| | | private String port; |
| | | |
| | | /** |
| | | * æ¶æ¯å鿹工åï¼çä¿¡/微信å
¬ä¼å·ï¼ã |
| | | * <p> |
| | | * 忥çä¿¡ä¸å
¬ä¼å·çåéé»è¾å¨æ¬ç±»éç¨ {@code if (active.equals("xx"))} ç¡¬åæ¯äºçº¦ 300 è¡ï¼ |
| | | * ç°å·²æ¶å£å° {@code ruoyi-message} 模åï¼è¿éåªè´è´£æ {@code active} è·¯ç±ã |
| | | */ |
| | | @Autowired |
| | | private MtSubmitSmUtil mtSubmitSmUtil; |
| | | private SmsSenderFactory smsSenderFactory; |
| | | |
| | | @Autowired |
| | | private WechatSenderFactory wechatSenderFactory; |
| | | |
| | | @Value("${spring.profiles.active}") |
| | | private String active; |
| | |
| | | serviceOutPath.setUpdateTime(new Date()); |
| | | serviceOutPath.setUrl(url); |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | String isSuccess = null; |
| | | //çä¿¡åéï¼åç«ç¹å¯¹æ¥æ¹å¼å·®å¼è¾å¤§ï¼æ¥æ/ç¾å/token/è¿åå¤å®é½ä¸åï¼ï¼ |
| | | //å·²æ¶å£å° ruoyi-message 模åï¼è¿éåªè´è´£ç»è£
å
¥åå¹¶è·¯ç± |
| | | log.info("activeçå¼ä¸ºï¼{}", active); |
| | | if (active.equals("xh")) { |
| | | Map<String, String> req = new HashMap<>(); |
| | | // req.put("phone", sendMagParam.getPhone()); |
| | | // req.put("content", sendMagParam.getContent()); |
| | | Map<String, String> map2 = new HashMap<String, String>(); |
| | | map2.put("action", "send"); |
| | | map2.put("account", xhsmsAccount); |
| | | map2.put("password", xhsmsPwd); |
| | | map2.put("mobile", sendMagParam.getPhone()); |
| | | map2.put("content", sendMagParam.getContent()); |
| | | map2.put("extno", xhsmsjrm); |
| | | map2.put("rt", "json"); |
| | | StringBuilder encodedParams = new StringBuilder(); |
| | | |
| | | for (Map.Entry<String, String> entry : map2.entrySet()) { |
| | | if (encodedParams.length() > 0) { |
| | | encodedParams.append("&"); |
| | | } |
| | | // 对é®åå¼è¿è¡URLç¼ç |
| | | String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8"); |
| | | String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8"); |
| | | encodedParams.append(encodedKey).append("=").append(encodedValue); |
| | | } |
| | | Boolean result = HttpUtils.sendPost(xhsmsPath, new Gson().toJson(req)); |
| | | if (result) isSuccess = "true"; |
| | | } else if (active.equals("ls")) { |
| | | // 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(); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | if (StringUtils.isNotEmpty(configValue)) { |
| | | msgInfo = objectMapper.readValue(configValue, Map.class); |
| | | } |
| | | } |
| | | 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")) { |
| | | //çç«åå¾·ççä¿¡åéæ¹å¼ |
| | | String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); |
| | | if (StringUtils.isNotEmpty(data)) { |
| | | // è§£æ result=0&description=æå&faillist= æ ¼å¼ï¼result=0æåï¼1å¤±è´¥ï¼ |
| | | log.info("ãsfHandlleãçç«åå¾·çä¿¡åéè¿åï¼{}", data); |
| | | String[] pairs = data.split("&"); |
| | | String resultVal = null; |
| | | for (String pair : pairs) { |
| | | String[] kv = pair.split("=", 2); |
| | | if ("result".equals(kv[0])) { |
| | | resultVal = kv.length > 1 ? kv[1] : null; |
| | | break; |
| | | } |
| | | } |
| | | if ("0".equals(resultVal)) { |
| | | isSuccess = "true"; |
| | | } |
| | | } |
| | | } else if (active.equals("nhfy")) { |
| | | Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(sendMagParam.getPhone(), sendMagParam.getContent()); |
| | | if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) { |
| | | isSuccess = "true"; |
| | | } |
| | | } |
| | | } else if (active.equals("hzszlyy")) {//å¸ä¸å»é¢ |
| | | String content = sendMagParam.getContent().replace("ãæ°åå»é¢ã", ""); |
| | | |
| | | SysDept sysDeptVo = new SysDept(); |
| | | List<SysDept> sysDepts = new ArrayList<>(); |
| | | if (ObjectUtils.isNotEmpty(serviceSubtask.getDeptcode())) { |
| | | sysDeptVo.setDeptType("1"); |
| | | sysDeptVo.setOrgid(serviceSubtask.getOrgid()); |
| | | sysDeptVo.setDeptCode(serviceSubtask.getDeptcode()); |
| | | sysDeptService.selectDeptList(sysDeptVo); |
| | | } else if (ObjectUtils.isNotEmpty(serviceSubtask.getLeavehospitaldistrictcode())) { |
| | | sysDeptVo.setDeptType("2"); |
| | | sysDeptVo.setOrgid(serviceSubtask.getOrgid()); |
| | | sysDeptVo.setDeptCode(serviceSubtask.getLeavehospitaldistrictcode()); |
| | | sysDeptService.selectDeptList(sysDeptVo); |
| | | } |
| | | SysDept sysDept = CollectionUtils.isNotEmpty(sysDepts) ? sysDepts.get(0) : new SysDept(); |
| | | String campusid = ObjectUtils.isNotEmpty(sysDept) ? sysDept.getCampusid() : "2"; |
| | | //æ¹æ»¨åç¬åéæ¹å¼ |
| | | if ("1".equals(campusid)) { |
| | | 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); |
| | | //è¿ééè¦æ ¹æ®resultè¿åçå¼å»å¤æï¼æ¯å¦æåï¼ç¶åå°å¼èµå¼ç»isSuccess |
| | | if (StringUtils.isNotEmpty(result) && result.contains("å¤çæå")) { |
| | | isSuccess = "true"; |
| | | } |
| | | } |
| | | } |
| | | SendResult smsSendResult = sendSmsByActive(serviceSubtask, sendMagParam); |
| | | String isSuccess = smsSendResult.asLegacyFlag(); |
| | | //ä»»å¡åéè®°å½ |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | |
| | | serviceOutPath.setUrl(url); |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | |
| | | //è·å微信å
¬ä¼å·è¯·æ±ä¿¡æ¯æ ¹æ®æºæID |
| | | List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid()); |
| | | //å¸ä¸å»é¢ 䏿 ¡éª |
| | | //微信å
¬ä¼å·åéï¼å¸ä¸ä¸æ°åæ¯ä¸¤å¥å®å
¨ä¸åçç½å
³ä¸å¤å®æ åï¼ |
| | | //æºæé
ç½®æ ¡éªãHISæ£è
IDæ ¡éªé½å·²æ¶å£å° ruoyi-message çåéæ¹å®ç°é |
| | | SendResult wechatSendResult = sendWechatByActive(serviceSubtask, patArchive, url); |
| | | Boolean wxCodeSuccess = wechatSendResult.isOk(); |
| | | |
| | | if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "ãå
¬ä¼å·ãè¯¥æºæçå
¬ä¼å·é
置信æ¯ä¸å
¨ï¼æ æ³éè¿å
¬ä¼å·åé", "4"); |
| | | return; |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(patArchive.getPatidHis())) { |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "ãå
¬ä¼å·ãå
¬ä¼å·åé失败,hisç³»ç»çæ£è
id为空", "5"); |
| | | return; |
| | | } |
| | | String wxCode = ""; |
| | | //å¸ä¸å»é¢ |
| | | if (active.equals("hzszlyy")) { |
| | | //å¤ç䏿乱ç é®é¢ |
| | | 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); |
| | | } |
| | | |
| | | Map map = JSONObject.parseObject(wxCode, Map.class); |
| | | //ä»»å¡åéè®°å½ |
| | | ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); |
| | | serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); |
| | |
| | | serviceSubtaskRecord.setPreachform("4"); |
| | | serviceSubtaskRecord.setStartTime(System.currentTimeMillis()); |
| | | serviceSubtaskRecord.setResult("success"); |
| | | Boolean wxCodeSuccess = false; |
| | | if (active.equals("hzszlyy")) { |
| | | if (!map.isEmpty() && map.get("success") != null) { |
| | | Integer wxCodeSuccessShiyi = (Integer) map.get("success"); |
| | | if (ObjectUtils.isNotEmpty(wxCodeSuccessShiyi) && wxCodeSuccessShiyi == 1) { |
| | | wxCodeSuccess = true; |
| | | } else { |
| | | wxCodeSuccess = false; |
| | | } |
| | | } |
| | | } else { |
| | | if (!map.isEmpty() && map.get("succ") != null) { |
| | | wxCodeSuccess = (boolean) map.get("succ"); |
| | | } |
| | | } |
| | | if (!map.isEmpty() && !wxCodeSuccess) serviceSubtaskRecord.setResult("error"); |
| | | if (!wxCodeSuccess) serviceSubtaskRecord.setResult("error"); |
| | | serviceSubtaskRecordService.insertServiceSubtaskRecord(serviceSubtaskRecord); |
| | | |
| | | //åé宿åï¼ä¿®æ¹ç¶æ |
| | |
| | | serviceSubtask.setResult("success"); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "ãå
¬ä¼å·ãå
¬ä¼å·åéæå", "2"); |
| | | } else { |
| | | log.error("ãsfHandlleãå
¬ä¼å·åéå¤±è´¥ï¼æ£è
ä¿¡æ¯ï¼{}ï¼é误信æ¯ï¼{}", serviceSubtask, map.get("msg")); |
| | | log.error("ãsfHandlleãå
¬ä¼å·åéå¤±è´¥ï¼æ£è
ä¿¡æ¯ï¼{}ï¼é误信æ¯ï¼{}", serviceSubtask, wechatSendResult.getMessage()); |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "ãå
¬ä¼å·ãå
¬ä¼å·åé失败", "5"); |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | setSuccessPreachForm(serviceSubtask, sendPreachform, "人工åéæå", "2"); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æ {@code active}ï¼ç«ç¹ï¼è·¯ç±å°å¯¹åºççä¿¡åéæ¹ã |
| | | * <p> |
| | | * åç«ç¹å·®å¼è§ {@code ruoyi-message} 模ååå®ç°ç±»ï¼æ¬æ¹æ³åªåãå
¥åç»è£
+ è·¯ç± + æ¥å¿ãã |
| | | * <p> |
| | | * â ï¸ æ°åï¼{@code xh}ï¼ç«ç¹ä»èµ°ãæ§å®ç°ï¼åéç©ºæ¥æï¼ãï¼ä¸å {@code RyTask} è¡ä¸ºä¸åä¸å·®ï¼ |
| | | * 确认ç½å
³æ¥ææ ¼å¼ååºæ¹ä¸º {@code XinHuaSmsSender#sendForm}ã详è§è¯¥ç±»ç TODO 说æã |
| | | */ |
| | | private SendResult sendSmsByActive(ServiceSubtask serviceSubtask, SendMagParam sendMagParam) { |
| | | SmsSendRequest request = SmsSendRequest.of(sendMagParam.getPhone(), sendMagParam.getContent(), serviceSubtask.getOrgid()); |
| | | //å¸ä¸åºåæ¹æ»¨/å´å±±ä¸¤å¥çä¿¡ç¾å |
| | | if ("hzszlyy".equals(active)) { |
| | | request.setCampus(resolveShiyiCampus(serviceSubtask)); |
| | | } |
| | | if ("xh".equals(active)) { |
| | | XinHuaSmsSender xinHuaSmsSender = (XinHuaSmsSender) smsSenderFactory.get(active); |
| | | return xinHuaSmsSender.sendJsonLegacy(request); |
| | | } |
| | | return smsSenderFactory.send(active, request); |
| | | } |
| | | |
| | | /** |
| | | * æ {@code active}ï¼ç«ç¹ï¼è·¯ç±å°å¯¹åºç微信å
¬ä¼å·åéæ¹ã |
| | | * <p> |
| | | * â ï¸ æ°åå
¬ä¼å·å¿
é¡»ä¼ æ£è
ä¿¡æ¯ï¼å§å + HIS æ£è
IDï¼ï¼ä¸å |
| | | * {@code getWXCode(...)} çå
¥åä¿æä¸ä¸å¯¹åºã |
| | | */ |
| | | private SendResult sendWechatByActive(ServiceSubtask serviceSubtask, PatArchive patArchive, String url) { |
| | | WechatSendRequest request = new WechatSendRequest(); |
| | | request.setOrgid(patArchive.getOrgid()); |
| | | request.setIdCard(serviceSubtask.getSfzh()); |
| | | request.setUrl(url); |
| | | request.setTitle(serviceSubtask.getTaskName()); |
| | | request.setContent(serviceSubtask.getTaskDesc()); |
| | | request.setPhone(patArchive.getTelcode()); |
| | | request.setPatientName(serviceSubtask.getSendname()); |
| | | request.setPatidHis(patArchive.getPatidHis()); |
| | | return wechatSenderFactory.send(active, request); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æ£è
æå¨é¢åºï¼1=æ¹æ»¨ï¼å
¶ä»=å´å±±ï¼ã |
| | | * <p> |
| | | * TODO å¾
确认ï¼åå®ç°å¹¶æªæ {@code sysDeptService.selectDeptList(...)} çè¿åå¼èµç» |
| | | * {@code sysDepts}ï¼å æ¤ {@code sysDepts} æä¸ºç©ºå表ã{@code campusid} æä¸º {@code "2"}ï¼ |
| | | * æ¹æ»¨é¢åºå®é
䏿°¸è¿èµ°ä¸å° {@code sendSms1}ãæ¬æ¬¡éæ<b>ä¿æè¯¥è¡ä¸ºä¸å</b>ï¼ |
| | | * 请å¨ä¸å¡ç¡®è®¤ååå³å®æ¯å¦ä¿®æ {@code sysDepts = sysDeptService.selectDeptList(...)}ã |
| | | */ |
| | | private String resolveShiyiCampus(ServiceSubtask serviceSubtask) { |
| | | SysDept sysDeptVo = new SysDept(); |
| | | List<SysDept> sysDepts = new ArrayList<>(); |
| | | if (ObjectUtils.isNotEmpty(serviceSubtask.getDeptcode())) { |
| | | sysDeptVo.setDeptType("1"); |
| | | sysDeptVo.setOrgid(serviceSubtask.getOrgid()); |
| | | sysDeptVo.setDeptCode(serviceSubtask.getDeptcode()); |
| | | sysDeptService.selectDeptList(sysDeptVo); |
| | | } else if (ObjectUtils.isNotEmpty(serviceSubtask.getLeavehospitaldistrictcode())) { |
| | | sysDeptVo.setDeptType("2"); |
| | | sysDeptVo.setOrgid(serviceSubtask.getOrgid()); |
| | | sysDeptVo.setDeptCode(serviceSubtask.getLeavehospitaldistrictcode()); |
| | | sysDeptService.selectDeptList(sysDeptVo); |
| | | } |
| | | SysDept sysDept = CollectionUtils.isNotEmpty(sysDepts) ? sysDepts.get(0) : new SysDept(); |
| | | return ObjectUtils.isNotEmpty(sysDept) ? sysDept.getCampusid() : "2"; |
| | | } |
| | | |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | private String getDXCode(String address, String ShouJiHM, String FaSongNR, String FaSongRID, String FaSongRXM, Map<String, Object> headerMap, String token) { |
| | | Map<String, Object> map = new LinkedHashMap<>(); |
| | | |
| | | Map<String, Object> YeWuXX = new LinkedHashMap<>(); |
| | | Map<String, Object> DuanXinXX = new LinkedHashMap<>(); |
| | | DuanXinXX.put("ShouJiHM", ShouJiHM); |
| | | DuanXinXX.put("FaSongNR", FaSongNR); |
| | | DuanXinXX.put("FaSongRID", FaSongRID); |
| | | DuanXinXX.put("FaSongRXM", FaSongRXM); |
| | | YeWuXX.put("DuanXinXX", DuanXinXX); |
| | | |
| | | map.put("XiaoXiTou", headerMap); |
| | | map.put("YeWuXX", YeWuXX); |
| | | |
| | | String body = new Gson().toJson(map); |
| | | |
| | | // String result = HttpUtils.sendPost(address, body); |
| | | String result = null; |
| | | try { |
| | | result = OkHttpExample.sendPostRequest(address, body, token); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | log.info("ãgetDXCodeãçä¿¡åéç»æï¼{}", result); |
| | | |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | |
| | | |
| | | private String getWXCode(String idcard, String url, String taskName, String taskDesc, String phone, String setPatientname, String setPatientid, List<String> wxqqxx) { |
| | | XinHuaWXReq xinHuaWXReq = new XinHuaWXReq(); |
| | | xinHuaWXReq.setIdcard(idcard); |
| | | xinHuaWXReq.setUrl(url); |
| | | xinHuaWXReq.setPatientid(setPatientid); |
| | | xinHuaWXReq.setPatientname(setPatientname); |
| | | xinHuaWXReq.setMobile(phone); |
| | | xinHuaWXReq.setMedcardno(null); |
| | | xinHuaWXReq.setTitlename(taskName); |
| | | xinHuaWXReq.setContent(taskDesc); |
| | | xinHuaWXReq.setAppid(wxqqxx.get(1)); |
| | | log.info("ãgetWXCodeã微信å
¬ä¼å·è¯·æ±åæ°ï¼{}", xinHuaWXReq); |
| | | String body = new Gson().toJson(xinHuaWXReq); |
| | | String encode = encode(wxqqxx.get(2).concat(body)); |
| | | Map<String, String> headerMap = new HashMap<>(); |
| | | headerMap.put("sign", encode); |
| | | String result = HttpUtils.sendPostByHeader(wxqqxx.get(3), body, headerMap); |
| | | log.info("ãgetWXCodeã微信å
¬ä¼å·è¿ååæ°ï¼{}", result); |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | |
| | | |
| | | public String encode(String arg) { |
| | | if (arg == null) { |
| | | arg = ""; |
| | | } |
| | | MessageDigest md5 = null; |
| | | try { |
| | | md5 = MessageDigest.getInstance("MD5"); |
| | | md5.update(arg.getBytes("UTF-8")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return toHex(md5.digest()); |
| | | } |
| | | // --------------------------------------------------------------------- |
| | | // 说æï¼å getDXCode / getWXCode / encode ä¸ä¸ªç§ææ¹æ³å·²éåéæ¹ä¸èµ·æ¶å£å° |
| | | // ruoyi-message 模åï¼LishuiSmsSender / XinHuaMpApiï¼ï¼æ¤å¤å·²å é¤ï¼é¿å
éå¤å®ç°ã |
| | | // --------------------------------------------------------------------- |
| | | |
| | | public void collectHIS() { |
| | | try { |
| | |
| | | <artifactId>ruoyi-common</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- æ¶æ¯åéï¼çä¿¡/微信å
¬ä¼å·ï¼æ¨¡å --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-message</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- WebService (çä¿¡åé) --> |
| | | <dependency> |
| | | <groupId>org.apache.axis</groupId> |
| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import WebServiceClient.MessagingInsertLocator; |
| | | import WebServiceClient.MessagingInsertSoap12Stub; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.message.sms.provider.messaginginsert.MessagingInsertSmsApi; |
| | | import com.ruoyi.system.domain.SmsParam; |
| | | import com.ruoyi.system.mapper.SmsParamMapper; |
| | | import com.ruoyi.system.service.ISmsParamService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.xml.rpc.holders.IntHolder; |
| | | import java.rmi.RemoteException; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | public class SmsParamServiceImpl implements ISmsParamService { |
| | | @Autowired |
| | | private SmsParamMapper smsParamMapper; |
| | | |
| | | /** |
| | | * é¢çº¦æå·çä¿¡å¹³å°ï¼MessagingInsertï¼APIï¼å·²æ¶å£å° ruoyi-message 模å |
| | | */ |
| | | @Autowired |
| | | private MessagingInsertSmsApi messagingInsertSmsApi; |
| | | |
| | | /** |
| | | * æ¥è¯¢çä¿¡åæ° |
| | |
| | | |
| | | @Override |
| | | public int sendSmsInfo(String info, String phone) { |
| | | MessagingInsertSoap12Stub binding = null; |
| | | try { |
| | | binding = (MessagingInsertSoap12Stub) new MessagingInsertLocator().getMessagingInsertSoap12(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | String aa = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<Request>\n" + "<operate>S001</operate>\n" + "<Sheets>\n" + "<Sheet>\n" + "<Content>" + info + "</Content>\n" + "<Mobile>" + phone + "</Mobile>\n" + "<DateTime>" + new Date() + "</DateTime>\n" + "<Type>é¢çº¦æå·</Type>\n" + "</Sheet>\n" + "</Sheets>\n" + "</Request>"; |
| | | Integer integer = null; |
| | | try { |
| | | integer = binding.SMSMessageAccept(aa, new IntHolder(), new javax.xml.rpc.holders.StringHolder()); |
| | | } catch (RemoteException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return integer; |
| | | //é¢çº¦æå·çä¿¡å¹³å°ï¼MessagingInsertï¼Axis SOAP12ï¼å·²æ¶å£å° ruoyi-message 模å |
| | | Integer result = messagingInsertSmsApi.sendSmsInfo(info, phone); |
| | | return result == null ? 0 : result; |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.system.service.impl; |
| | | |
| | | import java.io.IOException; |
| | | import java.sql.Date; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.google.gson.Gson; |
| | | import com.ruoyi.common.enums.MsgLSEnum; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.OkHttpExample; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.domain.SysConfig; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.ruoyi.common.core.service.ISubtaskSmsService; |
| | | import com.ruoyi.common.utils.spring.SpringUtils; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import com.ruoyi.system.mapper.SmsRecordsMapper; |
| | |
| | | @Autowired |
| | | private ISysConfigService iSysConfigService; |
| | | |
| | | /** |
| | | * æ¶æ¯å鿹工åï¼çä¿¡ï¼ï¼ä¸½æ°´çä¿¡å·²æ¶å£å° ruoyi-message |
| | | */ |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | private SmsSenderFactory smsSenderFactory; |
| | | /** |
| | | * æ¥è¯¢çä¿¡è®°å½ |
| | | * |
| | |
| | | |
| | | |
| | | public Boolean sendSMS(String orgid, String phone, String content) { |
| | | //丽水ççä¿¡åéæ¹å¼ |
| | | Boolean isSuccess = false; |
| | | //丽水ççä¿¡åéæ¹å¼ï¼å·²æ¶å£å° ruoyi-message ç LishuiSmsSender |
| | | //ï¼æºæé
ç½®ä» sys_config ç ls.msg.info 读åï¼token ç± smartor 注åç |
| | | // LishuiMessageConfigProvider æä¾ï¼ï¼è¿éä¸åèªå·±æ¼æ¥æ |
| | | try { |
| | | SysConfig config = new SysConfig(); |
| | | config.setConfigKey("ls.msg.info"); |
| | | config.setOrgid(orgid); |
| | | 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); |
| | | |
| | | ISubtaskSmsService subtaskSmsService = SpringUtils.getBean(ISubtaskSmsService.class); |
| | | String token = subtaskSmsService.getLSHospToken(orgid, msgInfo.get("tokenUrl")); |
| | | log.info("ãsfHandlleã丽水çä¿¡åéï¼å°åï¼{}ï¼åæ°ï¼{}ï¼æºæIDï¼{}", msgInfo.get("address"), orgid); |
| | | String dxCode = getDXCode(msgInfo.get("address"), phone, content, msgInfo.get("sendPersonId"), msgInfo.get("sendPersonName"), MsgLSEnum.getHeaderByCode(msgInfo), token); |
| | | log.info("ãsfHandlleã丽水çä¿¡åéç»æï¼{}", dxCode); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | Map<String, Object> textParam = null; |
| | | textParam = objectMapper.readValue(dxCode, Map.class); |
| | | String code = textParam.get("Code").toString(); |
| | | if (code.equals("0")) { |
| | | isSuccess = true; |
| | | } |
| | | SendResult sendResult = smsSenderFactory.send("ls", |
| | | SmsSendRequest.of(phone, content, orgid)); |
| | | log.info("ãSmsRecordsServiceImplã丽水çä¿¡åéç»æï¼{}", sendResult); |
| | | return sendResult.isOk(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("ãSmsRecordsServiceImplã丽水çä¿¡åéå¼å¸¸ï¼orgidï¼{}ï¼phoneï¼{}", orgid, phone, e); |
| | | return false; |
| | | } |
| | | return isSuccess; |
| | | } |
| | | |
| | | /** |
| | |
| | | smsRecords.setUpdateTime(DateUtils.getNowDate()); |
| | | return smsRecordsMapper.updateSmsRecords(smsRecords); |
| | | } |
| | | |
| | | /** |
| | | * æ¹éå é¤çä¿¡è®°å½ |
| | | * |
| | |
| | | return smsRecordsMapper.deleteSmsRecordsByRecordid(recordid); |
| | | } |
| | | |
| | | |
| | | private String getDXCode(String address, String ShouJiHM, String FaSongNR, String FaSongRID, String FaSongRXM, Map<String, Object> headerMap, String token) { |
| | | Map<String, Object> map = new LinkedHashMap<>(); |
| | | |
| | | Map<String, Object> YeWuXX = new LinkedHashMap<>(); |
| | | Map<String, Object> DuanXinXX = new LinkedHashMap<>(); |
| | | DuanXinXX.put("ShouJiHM", ShouJiHM); |
| | | DuanXinXX.put("FaSongNR", FaSongNR); |
| | | DuanXinXX.put("FaSongRID", FaSongRID); |
| | | DuanXinXX.put("FaSongRXM", FaSongRXM); |
| | | YeWuXX.put("DuanXinXX", DuanXinXX); |
| | | |
| | | map.put("XiaoXiTou", headerMap); |
| | | map.put("YeWuXX", YeWuXX); |
| | | |
| | | String body = new Gson().toJson(map); |
| | | |
| | | // String result = HttpUtils.sendPost(address, body); |
| | | String result = null; |
| | | try { |
| | | result = OkHttpExample.sendPostRequest(address, body, token); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | log.info("ãgetDXCodeãçä¿¡åéç»æï¼{}", result); |
| | | |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | // --------------------------------------------------------------------- |
| | | // 说æï¼å getDXCode å·²éåéæ¹ä¸èµ·æ¶å£å° ruoyi-message ç LishuiSmsSenderï¼ |
| | | // æ¤å¤å·²å é¤ï¼é¿å
第ä¸å¥ä¸½æ°´æ¥æå®ç°ç»§ç»åå¨ã |
| | | // --------------------------------------------------------------------- |
| | | } |
| | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-system</artifactId> |
| | | </dependency> |
| | | <!-- æ¶æ¯åéï¼çä¿¡/微信å
¬ä¼å·ï¼æ¨¡å --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-message</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | |
| | |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.core.service.IConfigService; |
| | | import com.ruoyi.common.dx.MessageSend; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.*; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | |
| | | import com.ruoyi.system.mapper.SysConfigMapper; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.smartor.common.FtpService; |
| | | import com.smartor.common.MtSubmitSmUtil; |
| | | import com.smartor.common.ScheduleSubtaskBuilder; |
| | | import com.smartor.config.PhoneUtils; |
| | | import com.smartor.domain.DTO.ServiceSubtaskDetailDTO; |
| | |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.core.service.IConfigService; |
| | | import com.ruoyi.common.dx.MessageSend; |
| | | import com.ruoyi.common.enums.WxGZHEnum; |
| | | import com.ruoyi.message.sms.provider.sltd.ws.MessageSend; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.*; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.common.utils.spring.SpringUtils; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.ruoyi.message.wechat.WechatSendRequest; |
| | | import com.ruoyi.message.wechat.WechatSenderFactory; |
| | | import com.ruoyi.system.domain.SysConfig; |
| | | import com.ruoyi.system.mapper.SysConfigMapper; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.smartor.common.FtpService; |
| | | import com.smartor.common.MtSubmitSmUtil; |
| | | import com.smartor.common.ScheduleSubtaskBuilder; |
| | | import com.smartor.config.PhoneUtils; |
| | | import com.smartor.domain.DTO.*; |
| | |
| | | private ISysConfigService configService; |
| | | |
| | | @Autowired |
| | | private MtSubmitSmUtil mtSubmitSmUtil; |
| | | private SysConfigMapper sysConfigMapper; |
| | | |
| | | /** |
| | | * æ¶æ¯å鿹工åï¼çä¿¡/微信å
¬ä¼å·ï¼ï¼æ¿ä»£åæ¥ç´æ¥è°ç¨åç«ç¹åé代ç çåæ³ |
| | | */ |
| | | @Autowired |
| | | private SmsSenderFactory smsSenderFactory; |
| | | |
| | | @Autowired |
| | | private SysConfigMapper sysConfigMapper; |
| | | private WechatSenderFactory wechatSenderFactory; |
| | | |
| | | @Autowired |
| | | private RedisTemplate redisTemplate; |
| | |
| | | |
| | | @Value("${req_path}") |
| | | private String req_path; |
| | | |
| | | @Value("${xhsmsPath}") |
| | | private String xhsmsPath; |
| | | |
| | | @Value("${phoneUpEveryHour}") |
| | | private Integer phoneUpEveryHour; |
| | |
| | | serviceOutPath.setUpdateTime(new Date()); |
| | | serviceOutPath.setUrl(url); |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("phone", serviceSubtask.getPhone()); |
| | | map.put("content", sendMagParam.getContent()); |
| | | HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(map)); |
| | | //çä¿¡åéå·²æ¶å£å° ruoyi-message 模åï¼ä¸åå®ç°ä¸è´ï¼ä¸å¤æåéç»æ |
| | | smsSenderFactory.send(active, SmsSendRequest.of(serviceSubtask.getPhone(), sendMagParam.getContent(), serviceSubtask.getOrgid())); |
| | | redisCache.setCacheObject(subTaskId + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES); |
| | | if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) |
| | | serviceSubtask.setRemark("çµè¯åéææ¥,çä¿¡è¡¥å¿åéæå"); |
| | |
| | | sendMagParam.setContent(smsContemt.replace("${wjurl}", sendMagParam.getUrl())); |
| | | } |
| | | |
| | | //çä¿¡åéï¼åç«ç¹å¯¹æ¥æ¹å¼å·®å¼è¾å¤§ï¼å·²æ¶å£å° ruoyi-message 模å |
| | | if (active.equals("nhfy")) { |
| | | Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(sendMagParam.getPhone(), sendMagParam.getContent()); |
| | | if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) { |
| | | SendResult smsResult = smsSenderFactory.send(active, |
| | | SmsSendRequest.of(sendMagParam.getPhone(), sendMagParam.getContent(), serviceSubtask.getOrgid())); |
| | | if (smsResult.isOk()) { |
| | | resultMap.put("code", "200"); |
| | | resultMap.put("msg", "åéæå"); |
| | | serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";çä¿¡åéæå(æå¨æäº¤)" : "çä¿¡åéæå(æå¨æäº¤)"); |
| | |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | |
| | | |
| | | //è·å微信å
¬ä¼å·è¯·æ±ä¿¡æ¯æ ¹æ®æºæID |
| | | List<String> wxqqxx = WxGZHEnum.getDescByCode(serviceSubtask.getOrgid()); |
| | | if (CollectionUtils.isEmpty(wxqqxx) || wxqqxx.size() < 4) { |
| | | resultMap.put("code", -1); |
| | | resultMap.put("message", "åéå¼å¸¸ï¼" + "ãå
¬ä¼å·ãè¯¥æºæçå
¬ä¼å·é
置信æ¯ä¸å
¨ï¼æ æ³éè¿å
¬ä¼å·åé"); |
| | | return resultMap; |
| | | } |
| | | |
| | | //hisæ£è
idæ ¡éªï¼ä¸åå®ç°ä¸è´ï¼å
æ ¡éªè¿ä¸é¡¹ï¼ |
| | | if (StringUtils.isEmpty(serviceSubtask.getPatidHis())) { |
| | | resultMap.put("code", -1); |
| | | resultMap.put("message", "åéå¼å¸¸ï¼" + "ãå
¬ä¼å·ãå
¬ä¼å·åé失败,hisç³»ç»çæ£è
id为空"); |
| | | return resultMap; |
| | | } |
| | | String wxCode = ""; |
| | | wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), patArchive.getTelcode(), serviceSubtask.getSendname(), patArchive.getPatidHis(), wxqqxx); |
| | | Map map = JSONObject.parseObject(wxCode, Map.class); |
| | | Boolean wxCodeSuccess = false; |
| | | if (!map.isEmpty() && map.get("succ") != null) { |
| | | wxCodeSuccess = (boolean) map.get("succ"); |
| | | } |
| | | |
| | | //æºæé
ç½®æ ¡éªãæ¥æç¾åä¸è¿åå¤å®åå·²æ¶å£å° ruoyi-message çåéæ¹å®ç° |
| | | WechatSendRequest wechatRequest = new WechatSendRequest(); |
| | | wechatRequest.setOrgid(serviceSubtask.getOrgid()); |
| | | wechatRequest.setIdCard(serviceSubtask.getSfzh()); |
| | | wechatRequest.setUrl(url); |
| | | wechatRequest.setTitle(serviceSubtask.getTaskName()); |
| | | wechatRequest.setContent(serviceSubtask.getTaskDesc()); |
| | | wechatRequest.setPhone(patArchive.getTelcode()); |
| | | wechatRequest.setPatientName(serviceSubtask.getSendname()); |
| | | wechatRequest.setPatidHis(patArchive.getPatidHis()); |
| | | SendResult wechatResult = wechatSenderFactory.send(active, wechatRequest); |
| | | |
| | | //åé宿åï¼ä¿®æ¹ç¶æ |
| | | serviceSubtask.setSendstate(3L); |
| | | if (wxCodeSuccess) { |
| | | if (wechatResult.isOk()) { |
| | | serviceSubtask.setResult("success"); |
| | | resultMap.put("code", "200"); |
| | | resultMap.put("msg", "åéæå"); |
| | | } else { |
| | | log.error("ãsfHandlleãå
¬ä¼å·åéå¤±è´¥ï¼æ£è
ä¿¡æ¯ï¼{}ï¼é误信æ¯ï¼{}", serviceSubtask, map.get("msg")); |
| | | log.error("ãsfHandlleãå
¬ä¼å·åéå¤±è´¥ï¼æ£è
ä¿¡æ¯ï¼{}ï¼é误信æ¯ï¼{}", serviceSubtask, wechatResult.getMessage()); |
| | | resultMap.put("code", -1); |
| | | resultMap.put("message", "ãå
¬ä¼å·ãå
¬ä¼å·åé失败"); |
| | | return resultMap; |
| | |
| | | return list; |
| | | } |
| | | |
| | | private String getWXCode(String idcard, String url, String taskName, String taskDesc, String phone, String setPatientname, String setPatientid, List<String> wxqqxx) { |
| | | XinHuaWXReq xinHuaWXReq = new XinHuaWXReq(); |
| | | xinHuaWXReq.setIdcard(idcard); |
| | | xinHuaWXReq.setUrl(url); |
| | | xinHuaWXReq.setPatientid(setPatientid); |
| | | xinHuaWXReq.setPatientname(setPatientname); |
| | | xinHuaWXReq.setMobile(phone); |
| | | xinHuaWXReq.setMedcardno(null); |
| | | xinHuaWXReq.setTitlename(taskName); |
| | | xinHuaWXReq.setContent(taskDesc); |
| | | xinHuaWXReq.setAppid(wxqqxx.get(1)); |
| | | log.info("ãgetWXCodeã微信å
¬ä¼å·è¯·æ±åæ°ï¼{}", xinHuaWXReq); |
| | | String body = new Gson().toJson(xinHuaWXReq); |
| | | String encode = encode(wxqqxx.get(2).concat(body)); |
| | | Map<String, String> headerMap = new HashMap<>(); |
| | | headerMap.put("sign", encode); |
| | | String result = HttpUtils.sendPostByHeader(wxqqxx.get(3), body, headerMap); |
| | | log.info("ãgetWXCodeã微信å
¬ä¼å·è¿ååæ°ï¼{}", result); |
| | | JSONObject jsonObject = JSONObject.parseObject(result); |
| | | String code = (String) jsonObject.toString(); |
| | | return code; |
| | | } |
| | | public String encode(String arg) { |
| | | if (arg == null) { |
| | | arg = ""; |
| | | } |
| | | MessageDigest md5 = null; |
| | | try { |
| | | md5 = MessageDigest.getInstance("MD5"); |
| | | md5.update(arg.getBytes("UTF-8")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return toHex(md5.digest()); |
| | | } |
| | | // --------------------------------------------------------------------- |
| | | // 说æï¼åç§æ getWXCode / encode å·²éåéæ¹ä¸èµ·æ¶å£å° ruoyi-message 模å |
| | | // ï¼XinHuaMpApiï¼ï¼æ¤å¤å·²å é¤ï¼é¿å
ä¸ä»½æ·è´ååä¸å¥ç¾åé»è¾ã |
| | | // --------------------------------------------------------------------- |
| | | } |
| | |
| | | package com.smartor.service.impl; |
| | | |
| | | import com.ruoyi.common.core.service.ISubtaskSmsService; |
| | | import com.smartor.common.LSHospTokenUtil; |
| | | import com.smartor.domain.ServiceSubtask; |
| | | import com.smartor.mapper.ServiceSubtaskMapper; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | |
| | | @Override |
| | | public String getLSHospToken(String orgid, String tokenUrl) { |
| | | return LSHospTokenUtil.getToken(orgid, tokenUrl); |
| | | //注ï¼ä¸½æ°´çä¿¡å·²æ¹ä¸ºéè¿ LishuiMessageConfigProviderï¼è§ com.smartor.message å
ï¼å tokenï¼ |
| | | //æ¬æ¹æ³ä»
为å
¼å®¹ ruoyi-common çå岿¥å£ä¿ç |
| | | return com.smartor.common.LSHospTokenUtil.getToken(orgid, tokenUrl); |
| | | } |
| | | } |
| | |
| | | import com.ruoyi.common.utils.HttpUtil; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.message.SendResult; |
| | | import com.ruoyi.message.sms.SmsSendRequest; |
| | | import com.ruoyi.message.sms.SmsSenderFactory; |
| | | import com.ruoyi.system.domain.SysConfig; |
| | | import com.ruoyi.system.mapper.SysConfigMapper; |
| | | import com.smartor.domain.*; |
| | |
| | | IServiceAppointRecordService iServiceAppointRecordService; |
| | | @Autowired |
| | | private SysConfigMapper sysConfigMapper; |
| | | @Value("${xhsmsPath}") |
| | | private String xhsmsPath; |
| | | // å¸å· |
| | | @Value("${xhsmsAccount}") |
| | | private String xhsmsAccount; |
| | | // æ¥å£å¯ç |
| | | @Value("${xhsmsPwd}") |
| | | private String xhsmsPwd; |
| | | // èææ¥å
¥ç |
| | | @Value("${xhsmsjrm}") |
| | | private String xhsmsjrm; |
| | | |
| | | /** |
| | | * æ¶æ¯å鿹工åï¼çä¿¡/微信å
¬ä¼å·ï¼ï¼æ¿ä»£åæ¥ç´æ¥æ³¨å
¥ xhsms* é
ç½® + HttpUtils çåæ³ |
| | | */ |
| | | @Autowired |
| | | private SmsSenderFactory smsSenderFactory; |
| | | |
| | | |
| | | /** |
| | |
| | | // ç¬¬äºæ¥ï¼å¤çåè¯è®°å½ä¿¡æ¯ |
| | | for (ServiceAppointRecord serviceAppointRecord : appointRecordFromHIS) { |
| | | String replace = smsContemt.replace("${patFileName}", StringUtils.defaultString(serviceAppointRecord.getPatFileName())).replace("${registTimeRange}", StringUtils.defaultString(serviceAppointRecord.getRegistTimeRange())).replace("${registDeptName}", StringUtils.defaultString(serviceAppointRecord.getRegistDeptName())).replace("${treatDoctName}", StringUtils.defaultString(serviceAppointRecord.getTreatDoctName())); |
| | | Map<String, String> map2 = new HashMap<String, String>(); |
| | | map2.put("action", "send"); |
| | | map2.put("account", xhsmsAccount); |
| | | map2.put("password", xhsmsPwd); |
| | | map2.put("mobile", serviceAppointRecord.getPatTel()); |
| | | map2.put("content", replace); |
| | | map2.put("extno", xhsmsjrm); |
| | | map2.put("rt", "json"); |
| | | StringBuilder encodedParams = new StringBuilder(); |
| | | |
| | | for (Map.Entry<String, String> entry : map2.entrySet()) { |
| | | if (encodedParams.length() > 0) { |
| | | encodedParams.append("&"); |
| | | } |
| | | // 对é®åå¼è¿è¡URLç¼ç |
| | | String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8"); |
| | | String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8"); |
| | | encodedParams.append(encodedKey).append("=").append(encodedValue); |
| | | } |
| | | Boolean isSuccess = HttpUtils.sendPost(xhsmsPath, encodedParams.toString()); |
| | | if (isSuccess) { |
| | | log.info("---å¤çåè¯è®°å½ä¿¡æ¯åéæå,å
¥å为:{}", encodedParams.toString()); |
| | | //çä¿¡åéå·²æ¶å£å° ruoyi-message 模åï¼æ°åééèµ°è¡¨åæ¨¡å¼ï¼ä¸åå®ç°ä¸è´ï¼ |
| | | SendResult sendResult = smsSenderFactory.send("xh", |
| | | SmsSendRequest.of(serviceAppointRecord.getPatTel(), replace)); |
| | | if (sendResult.isOk()) { |
| | | log.info("---å¤çåè¯è®°å½ä¿¡æ¯åéæå,å
¥å为:{}", sendResult.getRawResponse()); |
| | | serviceAppointRecord.setSendTime(new Date()); |
| | | serviceAppointRecord.setSenderName("ç³»ç»ç®¡çå"); |
| | | iServiceAppointRecordService.insertServiceAppointRecord(serviceAppointRecord); |