diff --git a/.idea/libraries/Maven__com_aliyun_alibabacloud_gateway_spi_0_0_1.xml b/.idea/libraries/Maven__com_aliyun_alibabacloud_gateway_spi_0_0_1.xml new file mode 100644 index 000000000..a0ba707d8 --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_alibabacloud_gateway_spi_0_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_credentials_java_0_2_4.xml b/.idea/libraries/Maven__com_aliyun_credentials_java_0_2_4.xml new file mode 100644 index 000000000..6ff722e4c --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_credentials_java_0_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_dysmsapi20170525_2_0_22.xml b/.idea/libraries/Maven__com_aliyun_dysmsapi20170525_2_0_22.xml new file mode 100644 index 000000000..b0b7ec33b --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_dysmsapi20170525_2_0_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_endpoint_util_0_0_7.xml b/.idea/libraries/Maven__com_aliyun_endpoint_util_0_0_7.xml new file mode 100644 index 000000000..66d2291a6 --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_endpoint_util_0_0_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_openapiutil_0_1_14.xml b/.idea/libraries/Maven__com_aliyun_openapiutil_0_1_14.xml new file mode 100644 index 000000000..ecff150cf --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_openapiutil_0_1_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_tea_1_1_14.xml b/.idea/libraries/Maven__com_aliyun_tea_1_1_14.xml new file mode 100644 index 000000000..f0f19244d --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_tea_1_1_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_tea_console_0_0_1.xml b/.idea/libraries/Maven__com_aliyun_tea_console_0_0_1.xml new file mode 100644 index 000000000..69ab5e796 --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_tea_console_0_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_tea_openapi_0_2_6.xml b/.idea/libraries/Maven__com_aliyun_tea_openapi_0_2_6.xml new file mode 100644 index 000000000..f8cb4eb06 --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_tea_openapi_0_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_tea_util_0_2_14.xml b/.idea/libraries/Maven__com_aliyun_tea_util_0_2_14.xml new file mode 100644 index 000000000..cdcc418a8 --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_tea_util_0_2_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_aliyun_tea_xml_0_1_5.xml b/.idea/libraries/Maven__com_aliyun_tea_xml_0_1_5.xml new file mode 100644 index 000000000..51215c03d --- /dev/null +++ b/.idea/libraries/Maven__com_aliyun_tea_xml_0_1_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_sun_xml_bind_jaxb_core_2_3_0.xml b/.idea/libraries/Maven__com_sun_xml_bind_jaxb_core_2_3_0.xml new file mode 100644 index 000000000..7e58f9645 --- /dev/null +++ b/.idea/libraries/Maven__com_sun_xml_bind_jaxb_core_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_sun_xml_bind_jaxb_impl_2_3_0.xml b/.idea/libraries/Maven__com_sun_xml_bind_jaxb_impl_2_3_0.xml new file mode 100644 index 000000000..70b2b05c0 --- /dev/null +++ b/.idea/libraries/Maven__com_sun_xml_bind_jaxb_impl_2_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_65.xml b/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_65.xml new file mode 100644 index 000000000..cd5071415 --- /dev/null +++ b/.idea/libraries/Maven__org_bouncycastle_bcpkix_jdk15on_1_65.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_dom4j_dom4j_2_0_3.xml b/.idea/libraries/Maven__org_dom4j_dom4j_2_0_3.xml new file mode 100644 index 000000000..015b98b4c --- /dev/null +++ b/.idea/libraries/Maven__org_dom4j_dom4j_2_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_ini4j_ini4j_0_5_4.xml b/.idea/libraries/Maven__org_ini4j_ini4j_0_5_4.xml new file mode 100644 index 000000000..9e114a8ef --- /dev/null +++ b/.idea/libraries/Maven__org_ini4j_ini4j_0_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jacoco_org_jacoco_agent_runtime_0_8_4.xml b/.idea/libraries/Maven__org_jacoco_org_jacoco_agent_runtime_0_8_4.xml new file mode 100644 index 000000000..b7f6c9ae6 --- /dev/null +++ b/.idea/libraries/Maven__org_jacoco_org_jacoco_agent_runtime_0_8_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/emis-biz-web/emis-biz-web.iml b/emis-biz-web/emis-biz-web.iml index a276c5fb4..b5034d571 100644 --- a/emis-biz-web/emis-biz-web.iml +++ b/emis-biz-web/emis-biz-web.iml @@ -169,7 +169,6 @@ - @@ -250,5 +249,22 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java index c02ce7923..1262dd652 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java @@ -35,6 +35,7 @@ import com.xdadan.erp.emis.domain.vo.WaybillOrder; import com.xdadan.erp.emis.service.*; import com.xdadan.erp.emis.utils.WaybillHelper; import com.xdadan.erp.system.service.ISysConfigService; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -51,6 +52,7 @@ import java.util.*; * @author linfso * @date 2023-12-14 13:02:48 */ +@Slf4j @RestController @RequestMapping("/emis/common") public class EmisCommonController extends EmisBaseController @@ -422,4 +424,25 @@ public class EmisCommonController extends EmisBaseController return AjaxResult.success("成功",rstList); } + + @RequestMapping("/autoDoSendSmsTest") + public AjaxResult autoDoSendSmsTest(){ + String lockKey="autoDoSendSmsTest"; + log.error("autoDoSendSmsTest start"); + + // 加锁查询 + redissonService.lock(lockKey,300); + try{ + emisBaseService.autoDoSmsSend(); + }catch(Exception ex){ + ex.printStackTrace(); + log.error("autoDoSendSmsTest exception:"+ex.getMessage()); + } + log.error("autoDoSendSmsTest end"); + + redissonService.unlock(lockKey); + return AjaxResult.success("发送成功"); + + } + } diff --git a/emis-biz/emis-biz.iml b/emis-biz/emis-biz.iml index 9ada56a33..a33e6214c 100644 --- a/emis-biz/emis-biz.iml +++ b/emis-biz/emis-biz.iml @@ -127,7 +127,6 @@ - @@ -209,5 +208,22 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/emis-biz/pom.xml b/emis-biz/pom.xml index 5bbd0fb8f..162e95cd0 100644 --- a/emis-biz/pom.xml +++ b/emis-biz/pom.xml @@ -77,7 +77,36 @@ 0.4.11 - + + + + com.aliyun + dysmsapi20170525 + 2.0.22 + + + com.aliyun + tea-openapi + 0.2.6 + + + com.aliyun + tea-console + 0.0.1 + + + com.aliyun + tea-util + 0.2.14 + + + com.aliyun + tea + 1.1.14 + + + + diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index 5c9e54553..d6f2f9830 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -22,10 +22,13 @@ package com.xdadan.erp.emis.service; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.ValueFilter; import com.fasterxml.jackson.annotation.JsonFormat; + import com.xdadan.erp.common.core.domain.AjaxResult; import com.xdadan.erp.common.core.domain.entity.SysUser; import com.xdadan.erp.common.utils.DateUtils; import com.xdadan.erp.common.utils.DictUtils; + import com.xdadan.erp.common.utils.HTTPHelper; import com.xdadan.erp.common.utils.SecurityUtils; + import com.xdadan.erp.common.utils.sign.MD5; import com.xdadan.erp.emis.domain.*; import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; import com.xdadan.erp.emis.domain.enumtype.PaymentStatus; @@ -39,10 +42,13 @@ package com.xdadan.erp.emis.service; import com.xdadan.erp.emis.service.IEmisWaybillCargoService; import com.xdadan.erp.emis.service.IEmisWaybillFeeitemService; import com.xdadan.erp.emis.service.IEmisWaybillService; + import com.xdadan.erp.emis.service.sms.AliyunSMSService; + import com.xdadan.erp.emis.utils.HTTPHelperV3; import com.xdadan.erp.emis.utils.Kd100Helper; import com.xdadan.erp.emis.utils.WaybillHelper; import com.xdadan.erp.emis.utils.sensitive.Convert; import com.xdadan.erp.system.mapper.SysUserMapper; + import com.xdadan.erp.system.service.ISysConfigService; import jdk.nashorn.internal.runtime.Undefined; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -64,6 +70,10 @@ package com.xdadan.erp.emis.service; @Service @Slf4j public class EmisBaseService { + + @Autowired + private ISysConfigService configService; + @Autowired protected EmisWaybillMapper emisWaybillMapper; @@ -134,6 +144,10 @@ public class EmisBaseService { @Autowired private EmisSmsSendRecordMapper emisSmsSendRecordMapper; + @Autowired + private AliyunSMSService aliyunSMSService; + + /** * 获取客户完整手机号 国家+电话 eg: 0086-1381861188 @@ -486,6 +500,9 @@ public class EmisBaseService { return null; } + /** + * 获取国际物流信息 + */ public void doTransferTraceUpdate() { EmisTmsTransferTrace emisTmsTransferTrace = new EmisTmsTransferTrace(); emisTmsTransferTrace.getParams().put("needTrace", "1"); @@ -547,6 +564,52 @@ public class EmisBaseService { } + + /** + * 短信发送 + */ + public void autoDoSmsSend() { + + EmisSmsSendRecord emisSmsSendRecord = new EmisSmsSendRecord(); + emisSmsSendRecord.getParams().put("needSend", "1"); + List list = emisSmsSendRecordMapper.selectEmisSmsSendRecordList(emisSmsSendRecord); + if(!CollectionUtil.isEmpty(list)){ + for(EmisSmsSendRecord dt:list){ + log.error("===>Start 发送短信:"+dt.getBillCode()+","+dt.getPhone()+" :smsType:"+dt.getSmsType()); + + try { + if ("1".equals(dt.getSmsType())) { + aliyunSMSService.sendMessage("探路速运", "SMS_465316363", dt.getPhone(), dt.getContent()); + + } + else if ("2".equals(dt.getSmsType())) { + aliyunSMSService.sendMessage("探路速运", "SMS_465341331", dt.getPhone(), dt.getContent()); + + } + else if ("3".equals(dt.getSmsType())) { + aliyunSMSService.sendMessage("探路速运", "SMS_465386407", dt.getPhone(), dt.getContent()); + } + else{ + continue; + } + + dt.setSendStatus("1"); + dt.setErrMsg("短信发送成功"); + }catch (Exception ex){ + dt.setSendStatus("-1"); + } + + dt.setFee("0"); + dt.setSmsChannel("aliyun"); + emisSmsSendRecordMapper.updateEmisSmsSendRecord(dt); + log.error("===>End 发送短信"); + + } + } + + } + + /** * 更新签收状态 * @param billCode @@ -664,13 +727,15 @@ public class EmisBaseService { String content="尊敬的用户:您的运单${name}从${Sendingcountry}寄往${Receivingcountry}因${Problemtype}的问题导致货物时效延误预计送达时间${time},详询400-025-7080感谢您对探路速运的支持!"; String sendingcountry=oldEmisWaybill.getSendCountryName(); String receivingcountry=oldEmisWaybill.getReceiveCountryName(); - content = content.replace("${Sendingcountry}",receivingcountry); - content = content.replace("${Receivingcountry}",sendingcountry); + content = content.replace("${Sendingcountry}",sendingcountry); + content = content.replace("${Receivingcountry}",receivingcountry); content = content.replace("${name}",mainBillCode); + content = content.replace("${Problemtype}",emisProblemType.getTypeName()); + content = content.replace("${time}",DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,newEstDate)); EmisSmsSendRecord emisSmsSendRecord = new EmisSmsSendRecord(); emisSmsSendRecord.setBillCode(mainBillCode); - emisSmsSendRecord.setSmsType("2"); // 签收短信 + emisSmsSendRecord.setSmsType("3"); // 问题件 emisSmsSendRecord.setPhone(waybill.getReceiveMobile()); emisSmsSendRecord.setContent(content); emisSmsSendRecord.setSendSiteCode(waybillProblemInfo.getRegisterSiteCode()); diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/sms/AliyunSMSService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/sms/AliyunSMSService.java new file mode 100644 index 000000000..22b02b51f --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/sms/AliyunSMSService.java @@ -0,0 +1,97 @@ +package com.xdadan.erp.emis.service.sms; + + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.dysmsapi20170525.Client; +import com.aliyun.dysmsapi20170525.models.SendSmsResponse; +import com.aliyun.tea.TeaModel; +import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; +import com.xdadan.erp.emis.domain.exception.EmisBizError; +import com.xdadan.erp.system.service.ISysConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Slf4j +@Service("AliyunSMSService") +public class AliyunSMSService { + + @Autowired + private ISysConfigService configService; + + /** + * 发送短信 + * @param signName 签名 + * @param templateCode 模板 + * @param phone 手机号 + * @param param 参数 + */ + public int sendMessage(String signName, String templateCode, String phone, String param) throws EmisBizError { + + String jsonParamStr=configService.selectConfigByKey("sys.aliyun.sms"); + JSONObject jObjParam=JSONObject.parseObject(jsonParamStr); + String accessKeyId=jObjParam.getString("accessKeyId"); + String accessKeySecret=jObjParam.getString("accessKeySecret"); + + return innerSendMessage(accessKeyId,accessKeySecret,signName,templateCode,phone,param); + + } + + /** + * 使用AK&SK初始化账号Client + * @param accessKeyId + * @param accessKeySecret + * @return Client + * @throws Exception + */ + public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception { + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + .setAccessKeyId(accessKeyId) + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = "dysmsapi.aliyuncs.com"; + return new Client(config); + } + + public static int innerSendMessage(String accessKeyId,String accessKeySecret,String signName, String templateCode, String phoneNumbers, String param) throws EmisBizError { + try { + Client client = createClient(accessKeyId, accessKeySecret); + com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest(); + sendSmsRequest.setPhoneNumbers(phoneNumbers); + sendSmsRequest.setSignName(signName); + sendSmsRequest.setTemplateCode(templateCode); + sendSmsRequest.setTemplateParam("{\"code\":\""+param+"\"}"); + com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); + com.aliyun.dysmsapi20170525.models.SendSmsResponse response = client.sendSmsWithOptions(sendSmsRequest, runtime); + String jsonStr=com.aliyun.teautil.Common.toJSONString(TeaModel.buildMap(response)); + + if(response.getStatusCode()==200) { + if ("OK".equals(response.getBody().getCode())) { + return 1; + } else { + throw new EmisBizError(EmisBizErrorType.FAIL,response.getBody().getMessage()); + } + }else{ + throw new EmisBizError(EmisBizErrorType.FAIL,"短信渠道发送错误"); + } + }catch (Exception e) { + e.printStackTrace(); + throw new EmisBizError(EmisBizErrorType.FAIL,"短信渠道异常"); + } + } + + public static void main(String[] args) { + + String accessKeyId="LTAI5tA1yz1QK6BVhzg3ne5D"; + String accessKeySecret="bFbFle1hFsy1zeyTeN79FXopPx9yRS"; + String signName="跨境助手"; + String templateCode="SMS_179215861"; + String phoneNumbers="13764645922"; + String param="1234"; + try { + int ret = innerSendMessage(accessKeyId,accessKeySecret,signName,templateCode,phoneNumbers,param); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/task/LogisticTask.java b/emis-biz/src/main/java/com/xdadan/erp/emis/task/LogisticTask.java index 949b8df4d..1996683b7 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/task/LogisticTask.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/task/LogisticTask.java @@ -37,9 +37,9 @@ public class LogisticTask { */ @Async @Scheduled(fixedRate = 1000L * 60 * 5) - public void autoQueryTransferInfo() { - String lockKey="autoQueryTransferInfo"; - log.error("autoQueryTransferInfo start"); + public void autoDoQueryTransferInfo() { + String lockKey="autoDoQueryTransferInfo"; + log.error("autoDoQueryTransferInfo start"); // 加锁查询 redissonService.lock(lockKey,300); @@ -47,14 +47,36 @@ public class LogisticTask { emisBaseService.doTransferTraceUpdate(); }catch(Exception ex){ ex.printStackTrace(); - log.error("autoQueryTransferInfo exception:"+ex.getMessage()); + log.error("autoDoQueryTransferInfo exception:"+ex.getMessage()); } - log.error("autoQueryTransferInfo end"); + log.error("autoDoQueryTransferInfo end"); redissonService.unlock(lockKey); } + /** + * 自动发送短信 + */ +// @Async +// @Scheduled(fixedRate = 1000L * 60 * 5) +// public void autoDoSendSms() { +// String lockKey="autoDoSendSms"; +// log.error("autoDoSendSms start"); +// +// // 加锁查询 +// redissonService.lock(lockKey,300); +// try{ +// emisBaseService.autoDoSmsSend(); +// }catch(Exception ex){ +// ex.printStackTrace(); +// log.error("autoDoSendSms exception:"+ex.getMessage()); +// } +// log.error("autoDoSendSms end"); +// +// redissonService.unlock(lockKey); +// } + } diff --git a/emis-biz/src/main/resources/mapper/EmisSmsSendRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSmsSendRecordMapper.xml index 12f6797ab..4323def65 100644 --- a/emis-biz/src/main/resources/mapper/EmisSmsSendRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSmsSendRecordMapper.xml @@ -72,6 +72,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and create_time #{params.endCreateTime} + + + and send_status = '0' + + and ( a.send_site_code in (