Quellcode durchsuchen

feat:消息相关

zhangwei vor 2 Jahren
Ursprung
Commit
10fb2e8095

+ 1 - 1
src/main/java/com/winhc/repal/enums/MsgKindEnum.java

@@ -10,5 +10,5 @@ public enum MsgKindEnum {
     /**
      * 消息类型
      */
-    app, weixin, sms, mail, delay
+    app, weixin, sms, mail, delay, repal
 }

+ 10 - 1
src/main/java/com/winhc/repal/service/MessageNoticeService.java

@@ -16,11 +16,20 @@ public interface MessageNoticeService {
     /**
      * 发送短信
      *
-     * @param userId
+     * @param mobileNo
      * @param name
      * @param param
      * @return
      */
     String sendSms(String mobileNo, MsgNameEnum name, Map<String, String> param);
 
+    /**
+     * 发送回款宝推送,目前仅做保存
+     * @param userId
+     * @param name
+     * @param param
+     * @return
+     */
+    String saveRepalMsg(Long userId,MsgNameEnum name, Map<String, String> param);
+
 }

+ 28 - 0
src/main/java/com/winhc/repal/service/impl/MessageNoticeServiceImpl.java

@@ -1,14 +1,17 @@
 package com.winhc.repal.service.impl;
 
+import com.winhc.repal.entity.UserInfo;
 import com.winhc.repal.enums.MsgKindEnum;
 import com.winhc.repal.enums.MsgNameEnum;
 import com.winhc.repal.mq.bean.SendMsgBean;
 import com.winhc.repal.mq.producer.MessageSendService;
+import com.winhc.repal.repository.UserInfoMapper;
 import com.winhc.repal.service.MessageNoticeService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.Map;
 
 @Service("messageNoticeService")
@@ -18,6 +21,9 @@ public class MessageNoticeServiceImpl implements MessageNoticeService {
     @Resource
     private MessageSendService messageSendService;
 
+    @Resource
+    private UserInfoMapper userInfoMapper;
+
     @Override
     public String sendSms(String mobileNo, MsgNameEnum name, Map<String, String> param) {
         log.info("短信推送, mobileNo:" + mobileNo + ", biz:" + name.name());
@@ -29,4 +35,26 @@ public class MessageNoticeServiceImpl implements MessageNoticeService {
         messageSendService.send(sendMsgBean);
         return "SUCCESS";
     }
+
+    @Override
+    public String saveRepalMsg(Long userId, MsgNameEnum name, Map<String, String> param) {
+        log.info("站内信推送, userId:" + userId + ", caseId:" + name.name());
+
+        if (userId != null) {
+            UserInfo userInfo = userInfoMapper.selectById(userId);
+            if (userInfo == null) {
+                log.warn("userinfo不存在, userId:" + userId);
+                return "FAIL";
+            }
+            SendMsgBean sendMsgBean = new SendMsgBean();
+            sendMsgBean.setMessageChannel(MsgKindEnum.repal.name());
+            sendMsgBean.setBizName(name.name());
+            sendMsgBean.setParam(param);
+            sendMsgBean.setSendTarget(userInfo.getMobileNo());
+            sendMsgBean.setUserId(userId);
+            sendMsgBean.setExtParam(new HashMap<>());
+            messageSendService.send(sendMsgBean);
+        }
+        return "SUCCESS";
+    }
 }

+ 146 - 0
src/main/java/com/winhc/repal/service/impl/RepalBillServiceImpl.java

@@ -31,6 +31,7 @@ import com.winhc.repal.repository.RepalResponsiblePersonMapper;
 import com.winhc.repal.service.*;
 import com.winhc.repal.util.DiagnosisUtil;
 import com.winhc.repal.util.RepalBillStatusUtil;
+import com.winhc.repal.util.ThreadPoolUtil;
 import com.winhc.repal.util.UserContextUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -120,6 +121,9 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
     @Autowired
     private CompanyService companyService;
 
+    @Autowired
+    private MessageNoticeService messageNoticeService;
+
     @Override
     public RepalBillInfoVO getRepalBillPage(GetRepalBillPageDTO dto) {
         long userId = UserContextUtil.getUser().getUserId();
@@ -563,6 +567,7 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
                 .eq(RepalBill::getId, dto.getRepalBillId())
                 .set(RepalBill::getRepalBillStatus, RepalBillStatusEnum.END.getCode())
                 .set(StrUtil.isNotBlank(dto.getBreakReason()), RepalBill::getBreakReason, dto.getBreakReason()));
+        ThreadPoolUtil.executorService.execute(()->sendRepalMsgBreak(dto.getRepalBillId()));
         return true;
     }
 
@@ -597,6 +602,8 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
         List<Long> currentIdList = repalResponsiblePersonService.getResponsiblePersonId(repalBill.getId());
         List<Long> difference = new ArrayList<>(CollUtil.disjunction(dto.getResponsiblePersonIdList(), currentIdList));
         if (CollUtil.isNotEmpty(difference)) {
+            List<Long> delList = new ArrayList<>();
+            List<Long> addList = new ArrayList<>();
             for (Long aLong : difference) {
                 if (currentIdList.contains(aLong)) {
                     // 移除
@@ -604,6 +611,7 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
                         .eq(RepalResponsiblePerson::getRepalBillId, repalBill.getId())
                         .eq(RepalResponsiblePerson::getUserId, aLong)
                         .set(RepalResponsiblePerson::getDeleted, DeletedStatusEnum.DELETE.getCode()));
+                    delList.add(aLong);
                 }
                 if (dto.getResponsiblePersonIdList().contains(aLong)) {
                     // 新增
@@ -613,6 +621,17 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
                     person.setRepalGroupId(repalBill.getRepalGroupId());
                     person.setUserId(aLong);
                     repalResponsiblePersonService.save(person);
+                    addList.add(aLong);
+                }
+            }
+            if(CollUtil.isNotEmpty(delList)){
+                for(Long userId:delList){
+                    sendRepalMsgDelCharge(userId,dto.getRepalBillId());
+                }
+            }
+            if(CollUtil.isNotEmpty(addList)){
+                for(Long userId:addList){
+                    sendRepalMsgAddCharge(userId,dto.getRepalBillId());
                 }
             }
         }
@@ -621,9 +640,11 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
             repalBill.setRepalBillStatus(RepalBillStatusEnum.OVERDUE.getCode());
         }
         // 改金额三种状态
+        boolean sendFlag = false;
         if (dto.getReceivable().compareTo(BigDecimal.ZERO) == 0) {
             repalBill.setTotalMoney(repalBill.getReceipt());
             repalBill.setRepalBillStatus(RepalBillStatusEnum.SUCCESS.getCode());
+            sendFlag = true;
         }
         if (dto.getReceivable().compareTo(repalBill.getReceivable()) > 0) {
             repalBill.setTotalMoney(repalBill.getTotalMoney().add(dto.getReceivable().subtract(repalBill.getReceivable())));
@@ -653,6 +674,9 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
         repalBillOperLog.setBizId(String.valueOf(repalBill.getId()));
         repalBillOperLog.setActionContent(JSON.toJSONString(dto));
         repalBillOperLogService.save(repalBillOperLog);
+        if(sendFlag){
+            ThreadPoolUtil.executorService.execute(()->sendRepalMsgSuccess(dto.getRepalBillId()));
+        }
         return true;
     }
 
@@ -922,6 +946,18 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
         repalCustChargeRelService.update(Wrappers.lambdaUpdate(RepalCustChargeRel.class)
                 .eq(RepalCustChargeRel::getMemberUserId, dto.getUserId())
                 .set(RepalCustChargeRel::getMemberUserId, dto.getTransferUserId()));
+        //发送站内信
+        ThreadPoolUtil.executorService.execute(()->{
+            List<RepalResponsiblePerson> repalBills = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
+                    .eq(RepalResponsiblePerson::getUserId,dto.getUserId())
+                    .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+            if(CollUtil.isNotEmpty(repalBills)){
+                for(RepalResponsiblePerson responsiblePerson : repalBills){
+                    sendRepalMsgAddCharge(dto.getTransferUserId(),responsiblePerson.getRepalBillId());
+                    sendRepalMsgDelCharge(dto.getUserId(),responsiblePerson.getRepalBillId());
+                }
+            }
+        });
         return true;
     }
 
@@ -1069,4 +1105,114 @@ public class RepalBillServiceImpl extends ServiceImpl<RepalBillMapper, RepalBill
         }).collect(Collectors.toList()));
         return vo;
     }
+
+    /**
+     * 添加负责人 给账款其他负责人发
+     * @param userId
+     * @param repalBillId
+     */
+    private void sendRepalMsgAddCharge(Long userId,Long repalBillId){
+        RepalBill repalBill = getById(repalBillId);
+        if(ObjectUtil.isNull(repalBill)){
+            return;
+        }
+        RepalGroupMember repalGroupMember = repalGroupMemberService.getMemberByUserId(userId);
+        if(ObjectUtil.isNull(repalGroupMember)){
+            return;
+        }
+        List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
+                 .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
+                .ne(RepalResponsiblePerson::getUserId,userId)
+                .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+        if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
+            Map<String,String> paraMap = new HashMap<>();
+            paraMap.put("name",repalGroupMember.getMemberUserName());
+            paraMap.put("custName",repalBill.getCustomerName());
+            paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
+            String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
+            paraMap.put("billType", billType+"账款");
+            for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
+                messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝添加负责人, paraMap);
+            }
+        }
+    }
+
+    /**
+     * 删除负责人 给账款其他负责人发
+     * @param userId
+     * @param repalBillId
+     */
+    private void sendRepalMsgDelCharge(Long userId,Long repalBillId){
+        RepalBill repalBill = getById(repalBillId);
+        if(ObjectUtil.isNull(repalBill)){
+            return;
+        }
+        RepalGroupMember repalGroupMember = repalGroupMemberService.getMemberByUserId(userId);
+        if(ObjectUtil.isNull(repalGroupMember)){
+            return;
+        }
+        List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
+                .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
+                .ne(RepalResponsiblePerson::getUserId,userId)
+                .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+        if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
+            Map<String,String> paraMap = new HashMap<>();
+            paraMap.put("name",repalGroupMember.getMemberUserName());
+            paraMap.put("custName",repalBill.getCustomerName());
+            paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
+            String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
+            paraMap.put("billType", billType+"账款");
+            for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
+                messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝删除负责人, paraMap);
+            }
+        }
+    }
+
+    /**
+     * 终止账款 给账款负责人发
+     * @param repalBillId
+     */
+    private void sendRepalMsgBreak(Long repalBillId){
+        RepalBill repalBill = getById(repalBillId);
+        if(ObjectUtil.isNull(repalBill)){
+            return;
+        }
+        List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
+                .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
+                .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+        if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
+            Map<String,String> paraMap = new HashMap<>();
+            paraMap.put("custName",repalBill.getCustomerName());
+            paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
+            String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
+            paraMap.put("billType", billType+"账款");
+            for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
+                messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝账款终止, paraMap);
+            }
+        }
+    }
+
+    /**
+     * 结清账款 给账款负责人发
+     * @param repalBillId
+     */
+    private void sendRepalMsgSuccess(Long repalBillId){
+        RepalBill repalBill = getById(repalBillId);
+        if(ObjectUtil.isNull(repalBill)){
+            return;
+        }
+        List<RepalResponsiblePerson> repalResponsiblePersonList = repalResponsiblePersonService.list(Wrappers.lambdaQuery(RepalResponsiblePerson.class)
+                .eq(RepalResponsiblePerson::getRepalBillId,repalBillId)
+                .eq(RepalResponsiblePerson::getDeleted,Dict.DeletedStatusEnunm.否.getCode()));
+        if(CollUtil.isNotEmpty(repalResponsiblePersonList)){
+            Map<String,String> paraMap = new HashMap<>();
+            paraMap.put("custName",repalBill.getCustomerName());
+            paraMap.put("totalMoney",repalBill.getTotalMoney().stripTrailingZeros().toPlainString());
+            String billType = RepalBillTypeEnum.RECEIVABLE.getCode().equals(repalBill.getRepalBillType()) ? RepalBillTypeEnum.RECEIVABLE.getDesc() : RepalBillTypeEnum.RECEIPT.getDesc();
+            paraMap.put("billType", billType+"账款");
+            for(RepalResponsiblePerson responsiblePerson:repalResponsiblePersonList) {
+                messageNoticeService.saveRepalMsg(responsiblePerson.getUserId(), MsgNameEnum.回款宝账款结清, paraMap);
+            }
+        }
+    }
 }

+ 15 - 5
src/main/java/com/winhc/repal/service/impl/RepalGroupMemberServiceImpl.java

@@ -11,10 +11,7 @@ import com.winhc.repal.cloud.LoginService;
 import com.winhc.repal.cloud.dto.RepalRegUserDTO;
 import com.winhc.repal.cloud.dto.RepalRegUserInfoDTO;
 import com.winhc.repal.entity.*;
-import com.winhc.repal.enums.DeletedStatusEnum;
-import com.winhc.repal.enums.GroupAdminEnum;
-import com.winhc.repal.enums.RepalBillTypeEnum;
-import com.winhc.repal.enums.RoleTypeEnum;
+import com.winhc.repal.enums.*;
 import com.winhc.repal.model.dto.AddGroupMemberDTO;
 import com.winhc.repal.model.dto.UpdateMemberRoleDTO;
 import com.winhc.repal.model.vo.GroupRoleMemberVO;
@@ -23,6 +20,7 @@ import com.winhc.repal.model.vo.UserAvatarInfoVO;
 import com.winhc.repal.repository.RepalGroupMemberMapper;
 import com.winhc.repal.repository.UserInfoMapper;
 import com.winhc.repal.service.*;
+import com.winhc.repal.util.ThreadPoolUtil;
 import com.winhc.repal.util.UserContextUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,6 +75,9 @@ public class RepalGroupMemberServiceImpl extends ServiceImpl<RepalGroupMemberMap
     @Autowired
     private ThirdPartyAccountService thirdPartyAccountService;
 
+    @Autowired
+    private MessageNoticeService messageNoticeService;
+
     @Override
     public RepalGroupMember getMemberByUserId(Long userId) {
         return this.getOne(Wrappers.lambdaQuery(RepalGroupMember.class)
@@ -164,7 +165,8 @@ public class RepalGroupMemberServiceImpl extends ServiceImpl<RepalGroupMemberMap
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean updateMemberRole(UpdateMemberRoleDTO dto) {
-        long groupId = this.getUserGroupId(UserContextUtil.getUser().getUserId());
+        Long userId = UserContextUtil.getUser().getUserId();
+        long groupId = this.getUserGroupId(userId);
         RepalGroupRole role = repalGroupRoleService.getById(dto.getRoleId());
         if (Objects.isNull(role)) {
             throw new CommonException(CodeMsg.FAILED, "角色错误");
@@ -177,6 +179,8 @@ public class RepalGroupMemberServiceImpl extends ServiceImpl<RepalGroupMemberMap
                 .eq(RepalGroupMember::getUserId, dto.getUserId())
                 .set(RepalGroupMember::getRoleId, dto.getRoleId()));
         repalRolePermissionService.initMemberPermission(dto.getUserId());
+        //发送站内信
+        ThreadPoolUtil.executorService.execute(()->sendRepalMsg(role,userId));
         return true;
     }
 
@@ -279,4 +283,10 @@ public class RepalGroupMemberServiceImpl extends ServiceImpl<RepalGroupMemberMap
         info.setMaxCount(100);
         return info;
     }
+
+    private void sendRepalMsg(RepalGroupRole role,Long userId){
+        Map<String,String> paraMap = new HashMap<>();
+        paraMap.put("roleName",role.getRoleName());
+        messageNoticeService.saveRepalMsg(userId, MsgNameEnum.回款宝角色变更,paraMap);
+    }
 }