瀏覽代碼

提成申报发送消息

wucl 1 年之前
父節點
當前提交
5deb397f40

+ 13 - 14
biz-base/src/main/java/com/dayou/controller/CommissionDeclareController.java

@@ -1,30 +1,19 @@
 package com.dayou.controller;
 
 import com.dayou.dto.CommissionDeclareDTO;
-import com.dayou.dto.WorkNodeCommit;
 import com.dayou.vo.CommissionDeclareDetailVO;
 import com.dayou.vo.CommissionDeclareTodoCheckVO;
 import com.dayou.vo.CommissionDeclareVO;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.web.bind.annotation.RestController;
-import com.dayou.controller.BaseController;
 import com.dayou.service.ICommissionDeclareService;
-import com.dayou.entity.CommissionDeclare;
 import com.dayou.common.RestResponse;
 import org.springframework.web.bind.annotation.*;
-import com.dayou.utils.ConvertUtil;
-import com.dayou.utils.HttpKit;
-import com.dayou.exception.ErrorCode;
-import java.util.Date;
+
 import java.util.List;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.springframework.http.MediaType;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 
@@ -65,10 +54,11 @@ public class CommissionDeclareController extends BaseController {
      * @param declareDTO
      * @return
      */
+
     @PostMapping("/major")
     public synchronized RestResponse<Boolean> commissionDeclare(@RequestBody @Valid CommissionDeclareDTO declareDTO){
-        Boolean ret = commissionDeclareService.commissionDeclare(declareDTO);
-        return RestResponse.data(ret);
+        Long ret = commissionDeclareService.commissionDeclare(declareDTO);
+        return RestResponse.data(ret!=null);
     }
 
     /**
@@ -99,5 +89,14 @@ public class CommissionDeclareController extends BaseController {
         Page<CommissionDeclareTodoCheckVO> ret = commissionDeclareService.todoCheckPage(page,checkVO);
         return RestResponse.data(ret);
     }
+
+    /**
+     * 大中型提成申报待审核列表(综合首页)
+     */
+    @GetMapping("/major/check/list")
+    public RestResponse<List<CommissionDeclareTodoCheckVO>> todoCheckList(){
+        List<CommissionDeclareTodoCheckVO> ret = commissionDeclareService.todoCheckList();
+        return RestResponse.data(ret);
+    }
 }
 

+ 4 - 4
dao/src/main/resources/mapper/MajorProductionAllotMapper.xml

@@ -35,7 +35,7 @@
             major_production_allot mpa
                 LEFT JOIN user u ON u.id = mpa.user_id
         WHERE
-            mpa.deleted = 0 and mpa.major_production_id = #{productionId}
+            mpa.deleted = 0 and mpa.major_production_id = #{productionId} AND mpa.user_type='EVALUATE'
         ORDER BY
             mpa.is_principal DESC
     </select>
@@ -54,16 +54,16 @@
     </select>
 
     <delete id="deleteByMajorProductionId" parameterType="java.lang.Long">
-        delete from major_production_allot where major_production_id = #{productionId}
+        delete from major_production_allot where major_production_id = #{productionId} and user_type = 'EVALUATE'
     </delete>
 
     <select id="allotRateByDeclareId" parameterType="java.lang.Long" resultType="com.dayou.dto.UserShareRate">
         select mpa.ratio as rate,mpa.user_id,u.name from major_production_allot mpa left join user u on u.id = mpa.user_id
-        where mpa.declare_id = #{declareId} and mpa.deleted = 0
+        where mpa.declare_id = #{declareId} and mpa.deleted = 0 and mpa.user_type = 'MARKET'
     </select>
 
     <select id="getXList" parameterType="java.lang.Long" resultType="com.dayou.dto.UserShareRate">
         select mpa.ratio as rate,mpa.user_id,u.name from major_production_allot mpa left join user u on u.id = mpa.user_id
-        where mpa.major_production_id = #{productionId} and mpa.deleted = 0
+        where mpa.major_production_id = #{productionId} and mpa.deleted = 0 and mpa.user_type = 'EVALUATE'
     </select>
 </mapper>

+ 1 - 0
domain/src/main/java/com/dayou/common/Constants.java

@@ -146,4 +146,5 @@ public interface Constants {
     String DOCX = ".docx";
 
     String PROD_VALIDATE_URI= "/#/prod/validate";
+
 }

+ 1 - 2
domain/src/main/java/com/dayou/dto/CommissionDeclareDTO.java

@@ -16,6 +16,7 @@ import java.util.List;
 @Data
 public class CommissionDeclareDTO {
 
+
     @AbcValidate(required = true,message = "主业务id不能为空",fun = Check.NotNull)
     private Long businessId;
 
@@ -29,6 +30,4 @@ public class CommissionDeclareDTO {
 
     private List<UserShareRate> userShareRates;
 
-
-
 }

+ 41 - 0
service/src/main/java/com/dayou/aspect/SendMessageAOP.java

@@ -0,0 +1,41 @@
+package com.dayou.aspect;
+
+import com.dayou.message.MessageTypeEnum;
+import com.dayou.message.annotation.SendMessage;
+import com.dayou.service.IMessageService;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+
+import static com.dayou.message.MessageTypeEnum.MAJOR_DECLARE_REMIND;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/5/21
+ * created with IntelliJ IDEA.
+ */
+@Slf4j
+@Component
+@Aspect
+public class SendMessageAOP {
+
+    @Autowired
+    private IMessageService messageService;
+
+    @Around("@annotation(sendMessage)")
+    public Object sendMessageAround(ProceedingJoinPoint joinPoint, SendMessage sendMessage) throws Throwable {
+        Long proceed = (Long) joinPoint.proceed(joinPoint.getArgs());
+        MessageTypeEnum messageTypeEnum = sendMessage.messageType();
+        if (messageTypeEnum.equals(MAJOR_DECLARE_REMIND)){
+            messageService.packagingMajorDeclareRemind(proceed);
+        }
+        return null;
+    }
+}

+ 8 - 4
service/src/main/java/com/dayou/message/MessageTitle.java

@@ -9,12 +9,16 @@ package com.dayou.message;
  */
 public interface MessageTitle
 {
-    public static final String BUSINESS_MESSAGE_TITLE = "业务回复[x]";
+    String BUSINESS_MESSAGE_TITLE = "业务回复[x]";
 
-    public static final String SYSTEM_MESSAGE_TITLE = "系统消息[x]";
+    String SYSTEM_MESSAGE_TITLE = "系统消息[x]";
 
-    public static final String SETTLE_MESSAGE_CONTENT = "您好。您的上月项目提成已结算,请在[项目提成]菜单下查看明细,若有疑问请联系相关领导。";
+    String SETTLE_MESSAGE_CONTENT = "您好。您的上月项目提成已结算,请在[项目提成]菜单下查看明细,若有疑问请联系相关领导。";
 
-    public static final String EVALUATE_REMIND_CONTENT = "您好。[x]项目已完成,请及时评价。";
+    String EVALUATE_REMIND_CONTENT = "您好。[x]项目已完成,请及时评价。";
+
+    String MAJOR_DECLARE_REMIND = "提成申报提醒";
+
+    String MAJOR_DECLARE_REMIND_CONTENT="您好,请及时对项目[name]发起提成申报。";
 
 }

+ 3 - 1
service/src/main/java/com/dayou/message/MessageTypeEnum.java

@@ -13,7 +13,9 @@ public enum MessageTypeEnum {
 
     EVALUATE_REMIND("EVALUATE_REMIND","评价提醒"),
 
-    BUSINESS("BUSINESS","业务消息")
+    BUSINESS("BUSINESS","业务消息"),
+
+    MAJOR_DECLARE_REMIND("MAJOR_DECLARE_REMIND","大中型提成申报提醒")
     ;
 
     private String code;

+ 20 - 0
service/src/main/java/com/dayou/message/annotation/SendMessage.java

@@ -0,0 +1,20 @@
+package com.dayou.message.annotation;
+
+import com.dayou.message.MessageTypeEnum;
+
+import java.lang.annotation.*;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/11/1
+ * created with IntelliJ IDEA.
+ */
+@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface SendMessage {
+
+    MessageTypeEnum messageType();
+}

+ 1 - 1
service/src/main/java/com/dayou/service/ICommissionDeclareService.java

@@ -30,7 +30,7 @@ public interface ICommissionDeclareService extends IService<CommissionDeclare> {
 
     Page<CommissionDeclareVO> majorEvaluateDeclarePage(Page page, CommissionDeclareVO commissionDeclare);
 
-    Boolean commissionDeclare(CommissionDeclareDTO declareDTO);
+    Long commissionDeclare(CommissionDeclareDTO declareDTO);
 
     CommissionDeclareDetailVO detail(Long id);
 

+ 3 - 0
service/src/main/java/com/dayou/service/IMessageService.java

@@ -4,6 +4,7 @@ import com.dayou.entity.Message;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayou.enums.MainBusinessEnum;
 import com.dayou.message.bo.BusinessMessageBO;
 import com.dayou.vo.ItemVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -27,6 +28,8 @@ public interface IMessageService extends IService<Message> {
 
     Boolean packagingSettleMessage(Set<Long> userIds);
 
+    Boolean packagingMajorDeclareRemind(Long declareId);
+
     List<Message> messageRedPoint();
 
     Boolean updateRead(Long id);

+ 11 - 2
service/src/main/java/com/dayou/service/impl/CommissionDeclareServiceImpl.java

@@ -11,6 +11,7 @@ import com.dayou.enums.FinanceInvoiceState;
 import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.UserTypeEnum;
 import com.dayou.mapper.CommissionDeclareMapper;
+import com.dayou.message.annotation.SendMessage;
 import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.service.workflow.IWorkFlowNodeInstanceService;
@@ -30,6 +31,7 @@ import java.util.stream.Collectors;
 
 import static com.dayou.enums.MainBusinessEnum.COMMISSION_DECLARE_MAJOR_EVALUATE;
 import static com.dayou.enums.MainBusinessEnum.COMMISSION_DECLARE_MAJOR_MARKET;
+import static com.dayou.message.MessageTypeEnum.MAJOR_DECLARE_REMIND;
 
 
 /**
@@ -62,6 +64,9 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
     @Autowired
     private IWorkFlowNodeInstanceService workFlowNodeInstanceService;
 
+    @Autowired
+    private IMessageService messageService;
+
 
 
     @Override
@@ -83,8 +88,9 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
     }
 
     @Override
+    @SendMessage(messageType = MAJOR_DECLARE_REMIND)
     @Transactional
-    public Boolean commissionDeclare(CommissionDeclareDTO declareDTO) {
+    public Long commissionDeclare(CommissionDeclareDTO declareDTO) {
         removeRejectDeclare(declareDTO);
         //保存申报记录
         CommissionDeclare commissionDeclare = BeanUtil.copyProperties(declareDTO, CommissionDeclare.class);
@@ -105,7 +111,8 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
         }).collect(Collectors.toList());
         majorProductionAllotService.saveBatch(collect);
         //提交审核流程
-        return workFlowService.openingDeclare(MainBusinessEnum.valueOf(declareDTO.getBusinessType()), commissionDeclare.getId());
+        workFlowService.openingDeclare(MainBusinessEnum.valueOf(declareDTO.getBusinessType()), commissionDeclare.getId());
+        return commissionDeclare.getId();
     }
 
     @Override
@@ -162,6 +169,7 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
      * @param declareDTO
      */
     private void removeRejectDeclare(CommissionDeclareDTO declareDTO){
+        //删除申报记录
         Long businessId = declareDTO.getBusinessId();
         Long productionId = declareDTO.getProductionId();
         CommissionDeclare commissionDeclare = null;
@@ -178,5 +186,6 @@ public class CommissionDeclareServiceImpl extends ServiceImpl<CommissionDeclareM
         if (commissionDeclare!=null){
             this.delete(commissionDeclare.getId());
         }
+
     }
 }

+ 81 - 3
service/src/main/java/com/dayou/service/impl/MessageServiceImpl.java

@@ -2,17 +2,18 @@ package com.dayou.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.dayou.common.BaseEntity;
-import com.dayou.entity.BusinessReply;
-import com.dayou.entity.Message;
+import com.dayou.entity.*;
+import com.dayou.enums.MainBusinessEnum;
 import com.dayou.mapper.MessageMapper;
 import com.dayou.message.MessageTypeEnum;
 import com.dayou.message.bo.BusinessMessageBO;
 import com.dayou.message.bo.SystemMessageBO;
 import com.dayou.message.handler.BusinessMessageHandler;
 import com.dayou.message.handler.SystemMessageHandler;
-import com.dayou.service.IMessageService;
+import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.utils.LoginContext;
+import com.dayou.vo.CommissionDeclareVO;
 import com.dayou.vo.ItemVO;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +43,7 @@ import com.dayou.enums.BatchTaskTypeEnum;
 import static com.dayou.enums.BusinessReplyEnum.MARKET_LOG_REPLY;
 import static com.dayou.enums.BusinessReplyEnum.MARKET_VISIT_REPLY;
 import static com.dayou.message.MessageTitle.*;
+import static com.dayou.message.MessageTitle.MAJOR_DECLARE_REMIND;
 import static com.dayou.message.MessageTypeEnum.*;
 
 /**
@@ -61,6 +63,18 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
     @Autowired
     private SystemMessageHandler systemMessageHandler;
 
+    @Autowired
+    private ICommissionDeclareService commissionDeclareService;
+
+    @Autowired
+    private IMajorService majorService;
+
+    @Autowired
+    private IMajorProductionService majorProductionService;
+
+    @Autowired
+    private IUserService userService;
+
     @Override
     public Boolean packagingBusinessMessage(BusinessReply originalBO) {
         BusinessMessageBO messageBO = new BusinessMessageBO();
@@ -91,6 +105,70 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
     }
 
     @Override
+    public Boolean packagingMajorDeclareRemind(Long declareId) {
+        BusinessMessageBO messageBO = new BusinessMessageBO();
+        CommissionDeclareVO declareVO = new CommissionDeclareVO();
+        CommissionDeclare originDeclare = commissionDeclareService.getById(declareId);
+        String businessType = originDeclare.getBusinessType();
+
+
+        String template = MAJOR_DECLARE_REMIND_CONTENT;
+        declareVO.setId(originDeclare.getId());
+
+        Major order = majorService.getOne(new LambdaQueryWrapper<Major>().select(Major::getClientManagerId, Major::getPrincipalId, Major::getOrderId, Major::getName)
+                .eq(BaseEntity::getId, originDeclare.getBusinessId()));
+        declareVO.setOrderName(order.getName());
+        if (originDeclare.getProductionId()!=null){
+            MajorProduction production = majorProductionService.getOne(new LambdaQueryWrapper<MajorProduction>().select(MajorProduction::getReportNo, MajorProduction::getName)
+                    .eq(BaseEntity::getId, originDeclare.getProductionId()));
+            template = template.replace("name",production.getName());
+            declareVO.setName(production.getName());
+            declareVO.setReportNo(production.getReportNo());
+        }else {
+            template = template.replace("name",order.getName());
+        }
+        messageBO.setType(MessageTypeEnum.MAJOR_DECLARE_REMIND.name());
+        messageBO.setTitle(MAJOR_DECLARE_REMIND);
+        messageBO.setParams(JSON.toJSONString(declareVO));
+        if (MainBusinessEnum.COMMISSION_DECLARE_MAJOR_EVALUATE.name().equals(businessType)){
+            //评估人员向市场人员发 已申报情况不发送消息
+            int count = commissionDeclareService.count(new LambdaQueryWrapper<CommissionDeclare>()
+                    .eq(CommissionDeclare::getBusinessType, MainBusinessEnum.COMMISSION_DECLARE_MAJOR_MARKET.name())
+                    .eq(CommissionDeclare::getBusinessId, originDeclare.getBusinessId())
+                    .eq(originDeclare.getProductionId()!=null,CommissionDeclare::getProductionId,originDeclare.getProductionId()));
+
+            if (count>0){
+                return Boolean.FALSE;
+            }
+            messageBO.setSender(originDeclare.getDeclareUserId());
+            messageBO.setReceiver(order.getClientManagerId());
+            String marketer = userService.getOne(new LambdaQueryWrapper<User>().select(User::getName).eq(BaseEntity::getId, order.getClientManagerId())).getName();
+            template  = marketer + template;
+            messageBO.setMessage(template);
+            declareVO.setBusinessType(MainBusinessEnum.COMMISSION_DECLARE_MAJOR_MARKET.name());
+
+        }
+        if (MainBusinessEnum.COMMISSION_DECLARE_MAJOR_MARKET.name().equals(businessType)){
+            //评估人员向评估人员发
+            int count = commissionDeclareService.count(new LambdaQueryWrapper<CommissionDeclare>()
+                    .eq(CommissionDeclare::getBusinessType, MainBusinessEnum.COMMISSION_DECLARE_MAJOR_EVALUATE.name())
+                    .eq(CommissionDeclare::getBusinessId, originDeclare.getBusinessId())
+                    .eq(originDeclare.getProductionId()!=null,CommissionDeclare::getProductionId,originDeclare.getProductionId()));
+            if (count>0){
+                return Boolean.FALSE;
+            }
+            messageBO.setSender(originDeclare.getDeclareUserId());
+            messageBO.setReceiver(order.getPrincipalId());
+            String evaluator = userService.getOne(new LambdaQueryWrapper<User>().select(User::getName).eq(BaseEntity::getId, order.getPrincipalId())).getName();
+            template  = evaluator + template;
+            messageBO.setMessage(template);
+            declareVO.setBusinessType(MainBusinessEnum.COMMISSION_DECLARE_MAJOR_EVALUATE.name());
+        }
+        messageBO.setParams(JSON.toJSONString(declareVO));
+        return businessMessageHandler.sendMessage(messageBO);
+    }
+
+    @Override
     public List<Message> messageRedPoint() {
         Long currentUserId = LoginContext.getCurrentUserId();
         List<Message> list = this.list(new LambdaQueryWrapper<Message>().eq(Message::getReceiver, currentUserId)