diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023072000002_msg_model.sql b/mallinkAdmin/src/main/resources/db/migration/V2023072000002_msg_model.sql
index 1de8a8dbe..4115fbe9b 100644
--- a/mallinkAdmin/src/main/resources/db/migration/V2023072000002_msg_model.sql
+++ b/mallinkAdmin/src/main/resources/db/migration/V2023072000002_msg_model.sql
@@ -1,2 +1,6 @@
-INSERT INTO `mallink`.`wx_msg_validationcode_model`(`id`, `type`, `name`, `signature`, `content`, `createtime`, `status`, `minutes`, `email_bg_img`, `open`, `msg_type`, `role_type`, `model_code`) VALUES (34, 34, '预约通知', '富茂', '您有新的预约订单请及时处理。', '2023-07-20 18:00:26', 1, 0, NULL, 0, 1, 2, '
-SMS_461970987');
+INSERT INTO `mallink`.`wx_msg_validationcode_model`(`id`, `type`, `name`, `signature`, `content`, `createtime`, `status`, `minutes`, `email_bg_img`, `open`, `msg_type`, `role_type`, `model_code`) VALUES (34, 34, '预约通知', '富茂', '您有新的预约订单请及时处理。', '2023-07-20 18:00:26', 1, 0, NULL, 0, 1, 2, 'SMS_461970987');
+
+INSERT INTO `mallink`.`wx_msg_validationcode_model`(`id`, `type`, `name`, `signature`, `content`, `createtime`, `status`, `minutes`, `email_bg_img`, `open`, `msg_type`, `role_type`, `model_code`) VALUES (35, 35, '分账失败提醒', '富茂', '您有订单分账处理失败,请及时查看。', '2023-07-20 18:00:26', 1, 0, NULL, 0, 1, 1, 'SMS_462021018');
+
+
+INSERT INTO `mallink`.`wx_msg_validationcode_model`(`id`, `type`, `name`, `signature`, `content`, `createtime`, `status`, `minutes`, `email_bg_img`, `open`, `msg_type`, `role_type`, `model_code`) VALUES (36, 36, '分账失败通知', '富茂', '\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n 富茂通知邮件\r\n \r\n \r\n\r\n\r\n\r\n \r\n
\r\n
\r\n \r\n
通知({mallName})
\r\n
您有分账处理失败的订单,请电脑登录后台查看分账详情
\r\n
\r\n \r\n
\r\n\r\n\r\n', '2023-07-20 18:00:26', 1, NULL, NULL, 0, 2, 1, NULL);
diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java
index a835a84dc..81a9cb2d9 100644
--- a/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java
+++ b/mallinkSchedule/src/main/java/com/iformall/schedule/SharingOrderRedoSchedule.java
@@ -1,21 +1,20 @@
package com.iformall.schedule;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData;
-import com.iformall.domain.dto.WxSharingOrderDto;
-import com.iformall.domain.po.WxMall;
-import com.iformall.domain.po.WxPayOrder;
-import com.iformall.domain.po.WxProfitSharingOrder;
+import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
-import com.iformall.enums.EnumPayStatus;
-import com.iformall.enums.EnumPayWay;
-import com.iformall.enums.EnumProfitSharingOrderStatus;
-import com.iformall.enums.EnumProfitSharingOrderType;
+import com.iformall.domain.po.msg.MailMsg;
+import com.iformall.domain.po.msg.WxMsgRecord;
+import com.iformall.enums.*;
import com.iformall.mapper.WxMallMapper;
+import com.iformall.mapper.WxMallNoticeContactMapper;
import com.iformall.mapper.WxPayOrderMapper;
import com.iformall.mapper.WxProfitSharingOrderMapper;
+import com.iformall.mq.MqBaseProducer;
import com.iformall.service.WxProfitSharingOrderService;
+import com.iformall.utils.DateUtils;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +22,9 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
@Component
public class SharingOrderRedoSchedule {
@@ -39,10 +40,18 @@ public class SharingOrderRedoSchedule {
@Autowired
WxPayOrderMapper wxPayOrderMapper;
-
@Autowired
WxMallMapper wxMallMapper;
+ @Autowired
+ WxMallNoticeContactMapper wxMallNoticeContactMapper;
+
+ @Autowired
+ MqBaseProducer mqBaseProducer;
+
+ @Autowired
+ private String fmExceptionEmails;
+
private List getMalls() {
WxMall wxMall =new WxMall();
return wxMallMapper.findList(wxMall);
@@ -55,6 +64,8 @@ public class SharingOrderRedoSchedule {
public void sharingOrderRedoSchedule() {
List malls = getMalls();
for (WxMall mall: malls) {
+ AtomicInteger errorCount = new AtomicInteger();
+
WxProfitSharingOrder wxProfitSharingOrder = new WxProfitSharingOrder();
wxProfitSharingOrder.setTenantId(mall.getTenantId());
// wxProfitSharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getCode());
@@ -62,32 +73,48 @@ public class SharingOrderRedoSchedule {
List list = wxProfitSharingOrderMapper.findList(wxProfitSharingOrder);
if (null != list) {
list.stream().forEach(sharingOrder->{
- try {
+ int i = DateUtils.daysBetween(sharingOrder.getCreateTime(), new Date());
+ boolean isSuccess = true;
+ try {
// WxPayOrder wxPayOrder = new WxPayOrder();
// wxPayOrder.updateTenantInfo(sharingOrder);
// wxPayOrder.setId(sharingOrder.getOrderId());
// wxPayOrder = wxPayOrderMapper.selectOne(new QueryWrapper(wxPayOrder));
WxPayOrder wxPayOrder = wxPayOrderMapper.selectById(sharingOrder.getOrderId(),sharingOrder.getTenantId());
if (null == wxPayOrder) {
+ isSuccess = false;
logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage()
+ " ID:" +sharingOrder.getId()
+ " RES: wxPayOrder is null." );
+ return;
}
ResultData result = wxProfitSharingOrderService.redoSharingOrder(sharingOrder,wxPayOrder);
if (result.code != ResultData.SUCCESS) {
+ isSuccess = false;
logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage()
+ " ID:" +sharingOrder.getId()
+ " RES:" + result.message);
}
} catch (Exception e){
+ isSuccess = false;
logger.error("分账重试失败:" + EnumProfitSharingOrderType.PROFIT_SHARING_SINGLE.getMessage()
+ " ID:" +sharingOrder.getId()
+ " MSG:" + e.getMessage());
}
+ //分账3天失败给通知
+ if(!isSuccess && i >= 3){
+ errorCount.getAndIncrement();
+ }
});
}
-
+
+ if(errorCount.get() > 0){
+ try{
+ //分账失败通知
+ sendSharingErrorMsg(mall);
+ }catch(Exception e){}
+ }
// wxProfitSharingOrder.setType(EnumProfitSharingOrderType.PROFIT_SHARING_MULTI.getCode());
// wxProfitSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode());
@@ -134,6 +161,44 @@ public class SharingOrderRedoSchedule {
}
+ private void sendSharingErrorMsg(WxMall mall){
+ logger.info("分账失败通知start");
+ WxMallNoticeContact noticeContact = wxMallNoticeContactMapper.getByTenantInfo(mall);
+ if(noticeContact == null){
+ return;
+ }
+ if(StringUtils.isNotBlank(noticeContact.getPhone()) && EnumYesOrNo.YES.getCode().equals(noticeContact.getPhoneEnabled())){
+ WxMsgRecord wxMsgRecord = new WxMsgRecord();
+ wxMsgRecord.updateTenantInfo(mall);
+ wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode());
+ wxMsgRecord.setModelType(EnumMsgModel.COUPON_ORDER_SHARING_ERROR.getCode());
+ wxMsgRecord.setReceiver(noticeContact.getPhone());
+ mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode());
+ logger.info("分账失败短信通知end");
+ }
+ String[] fmEmails = fmExceptionEmails.split(",");
+ List mails = new ArrayList<>(Arrays.asList(fmEmails));
+ if(StringUtils.isNotBlank(noticeContact.getEmail()) && EnumYesOrNo.YES.getCode().equals(noticeContact.getEmailEnabled())){
+ mails.add(noticeContact.getEmail());
+ }
+ String[] strings = mails.toArray(new String[mails.size()]);
+
+ Map map = new HashedMap();
+ map.put("mallName", mall.getName());
+ MailMsg mailMsg = new MailMsg();
+ mailMsg.setSubject("分账失败通知");
+ mailMsg.setHtml(true);
+ mailMsg.setMsgType(EnumMsgRecordType.EMAIL.getCode());
+ mailMsg.setModelType(EnumMailMsgModel.MAIL_SHARING_ERROR.getCode());
+ mailMsg.setTo(strings);
+ mailMsg.updateTenantInfo(mall);
+ mailMsg.setDynamicContentMap(map);
+ mqBaseProducer.sendMessage(mailMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode());
+ logger.info("分账失败邮件通知end");
+
+ }
+
+
// @Async
//// @Scheduled(cron = "0 0 2 * * ?") // 每天凌晨02:00分账重试
// @Scheduled(cron = "0 10 */1 * * ?") // 测试
diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgValidationcodeModel.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgValidationcodeModel.java
index 34d594f77..0e2826dea 100644
--- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgValidationcodeModel.java
+++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgValidationcodeModel.java
@@ -37,7 +37,7 @@ public class WxMsgValidationcodeModel extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value="发送开关 0开1关",name="open")
private Integer open;
- @io.swagger.annotations.ApiModelProperty(value="消息类型 0全部 1短信 2邮箱 11阿里云短信(暂未启用)",name="msgType")
+ @io.swagger.annotations.ApiModelProperty(value="消息类型 1短信 2邮箱",name="msgType")
private Integer msgType;
@io.swagger.annotations.ApiModelProperty(value="0通用1管理员2商户端3消费者",name="roleType")
diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMailMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMailMsgModel.java
index b9afa9388..dfa37fe0c 100644
--- a/mallinkService/src/main/java/com/iformall/enums/EnumMailMsgModel.java
+++ b/mallinkService/src/main/java/com/iformall/enums/EnumMailMsgModel.java
@@ -17,6 +17,9 @@ public enum EnumMailMsgModel {
MAIL_C_APPLY_NODIFY(25, "审批通知"),
MAIL_C_ASSIGNEE_NODIFY(26, "代办通知"),
MAIL_C_REJECT_NODIFY(27, "驳回通知"),
+
+
+ MAIL_SHARING_ERROR(36, "分账失败通知"),
;
public static EnumMailMsgModel getEnum(Integer code) {
diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java
index e4fd95220..2c5a4d76d 100644
--- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java
+++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java
@@ -43,6 +43,7 @@ public enum EnumMsgModel {
COUPON_ORDER_REFUND(33,"提交退款提醒"),
COUPON_ORDER_RESERVATION_SUCCESS(34,"预约成功提醒"),
+ COUPON_ORDER_SHARING_ERROR(35,"分账失败提醒"),
;
public static EnumMsgModel getEnum(Integer code) {
diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java
index 7b5e0c3fc..0ace888d0 100644
--- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java
+++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitSharingOrderServiceImpl.java
@@ -250,16 +250,18 @@ public class WxProfitSharingOrderServiceImpl implements WxProfitSharingOrderServ
WxProfitSharingOrder updSharingOrder = new WxProfitSharingOrder();
updSharingOrder.updateTenantInfo(sharingOrder);
updSharingOrder.setId(sharingOrder.getId());
+ updSharingOrder.setUpdateTime(currentDate);
if(e.getErrorCode() == ErrorCode.PROFIT_SHARING_NO_SUB_LEDGER_AMOUNT.getCode()){
updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_PROCESSING.getCode());
updSharingOrder.setErrorMsg(e.getMessage());
+ wxProfitSharingOrderMapper.updateById(updSharingOrder);
+ return new ResultData();
}else{
updSharingOrder.setSharingStatus(EnumProfitSharingOrderStatus.PROFIT_SHARING_APPLY_FAILED.getCode());
updSharingOrder.setErrorMsg(e.getMessage());
+ wxProfitSharingOrderMapper.updateById(updSharingOrder);
+ return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),e.getMessage());
}
- updSharingOrder.setUpdateTime(currentDate);
- wxProfitSharingOrderMapper.updateById(updSharingOrder);
- return new ResultData(ErrorCode.PROFIT_SHARING_REQUEST_FAILED.getCode(),e.getMessage());
}catch(Exception e){
WxProfitSharingOrder updSharingOrder = new WxProfitSharingOrder();
updSharingOrder.updateTenantInfo(sharingOrder);
diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendEmailServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendEmailServiceImpl.java
index a19d1e21b..cde6d4718 100644
--- a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendEmailServiceImpl.java
+++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendEmailServiceImpl.java
@@ -48,26 +48,25 @@ public class SendEmailServiceImpl implements MsgSendService {
TenantEntity tenantEntity = mailMsg.getTenantInfo();
//根据模板替换动态内容
- if(mailMsg.getModelId() != null){
- WxMsgValidationcodeModel msgModel = new WxMsgValidationcodeModel();
- msgModel.setType(mailMsg.getModelType());
- msgModel.setModelCode(String.valueOf(mailMsg.getModelId()));
- msgModel.setOpen(EnumMsgOpen.OPEN.getCode());
- List modelList = wxMsgValidationcodeModelMapper.findList(msgModel);
- if(CollectionUtils.isEmpty(modelList)){
- throw new Exception("模板id:"+mailMsg.getModelId()+"不存在");
- }
- WxMsgValidationcodeModel wxMsgModel = modelList.get(0);
+ WxMsgValidationcodeModel msgModel = new WxMsgValidationcodeModel();
+ msgModel.setType(mailMsg.getModelType());
+ msgModel.setMsgType(2);
+// msgModel.setModelCode(String.valueOf(mailMsg.getModelId()));
+ msgModel.setOpen(EnumMsgOpen.OPEN.getCode());
+ List modelList = wxMsgValidationcodeModelMapper.findList(msgModel);
+ if(CollectionUtils.isEmpty(modelList)){
+ throw new Exception("模板:不存在");
+ }
+ WxMsgValidationcodeModel wxMsgModel = modelList.get(0);
- String msg = wxMsgModel.getContent();
- for (Map.Entry entry : mailMsg.getDynamicContentMap().entrySet()) {
- msg = msg.replace("{"+entry.getKey()+"}", entry.getValue());
- }
- if(StringUtils.isNotBlank(wxMsgModel.getEmailBgImg())){
- msg = msg.replace("{bg}", wxMsgModel.getEmailBgImg());
- }
- mailMsg.setMsg(msg);
+ String msg = wxMsgModel.getContent();
+ for (Map.Entry entry : mailMsg.getDynamicContentMap().entrySet()) {
+ msg = msg.replace("{"+entry.getKey()+"}", entry.getValue());
+ }
+ if(StringUtils.isNotBlank(wxMsgModel.getEmailBgImg())){
+ msg = msg.replace("{bg}", wxMsgModel.getEmailBgImg());
}
+ mailMsg.setMsg(msg);
if(mailMsg.isHtml()){ //html邮件
MimeMessage message = sender.createMimeMessage();
diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java
index a936a1741..fca924460 100644
--- a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java
+++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java
@@ -61,6 +61,7 @@ public class SendSmsServiceImpl implements MsgSendService {
WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel();
wxMsgValidationcodeModel.setType(record.getModelType());
+ wxMsgValidationcodeModel.setMsgType(1);
wxMsgValidationcodeModel.setOpen(EnumMsgOpen.OPEN.getCode());
List modelList = wxMsgValidationcodeModelMapper.findList(wxMsgValidationcodeModel);
if(CollectionUtils.isEmpty(modelList)){