Explorar el Código

0705日更新

wucl hace 2 años
padre
commit
0d7a9841be
Se han modificado 36 ficheros con 711 adiciones y 59 borrados
  1. 3 3
      biz-base/src/main/java/com/dayou/controller/ItemBrokerageSequenceController.java
  2. 56 0
      biz-base/src/main/java/com/dayou/controller/MessageController.java
  3. 34 0
      biz-base/src/main/java/com/dayou/controller/UserController.java
  4. 14 0
      biz-base/src/main/java/com/dayou/controller/VisitController.java
  5. 19 4
      biz-base/src/test/java/BrokerageTest.java
  6. 2 0
      common/src/main/java/com/dayou/exception/ErrorCode.java
  7. 16 0
      dao/src/main/java/com/dayou/mapper/MessageMapper.java
  8. 4 0
      dao/src/main/java/com/dayou/mapper/VisitMapper.java
  9. 3 2
      dao/src/main/resources/mapper/MarketStatMapper.xml
  10. 28 0
      dao/src/main/resources/mapper/MessageMapper.xml
  11. 1 1
      dao/src/main/resources/mapper/UserMapper.xml
  12. 15 8
      dao/src/main/resources/mapper/VisitMapper.xml
  13. 1 1
      domain/src/main/java/com/dayou/entity/BusinessReply.java
  14. 0 12
      domain/src/main/java/com/dayou/entity/ItemBrokerageGeneral.java
  15. 62 0
      domain/src/main/java/com/dayou/entity/Message.java
  16. 5 0
      domain/src/main/java/com/dayou/entity/User.java
  17. 4 6
      domain/src/main/java/com/dayou/entity/Visit.java
  18. 8 0
      domain/src/main/java/com/dayou/enums/BusinessReplyEnum.java
  19. 11 8
      domain/src/main/java/com/dayou/vo/VisitVO.java
  20. 15 6
      service/src/main/java/com/dayou/brokerage/config/BrokerageSettleSchedule.java
  21. 40 0
      service/src/main/java/com/dayou/message/MessageServerCenter.java
  22. 19 0
      service/src/main/java/com/dayou/message/MessageTitle.java
  23. 29 0
      service/src/main/java/com/dayou/message/bo/BusinessMessageBO.java
  24. 29 0
      service/src/main/java/com/dayou/message/bo/MessageBO.java
  25. 23 0
      service/src/main/java/com/dayou/message/bo/SystemMessageBO.java
  26. 32 0
      service/src/main/java/com/dayou/message/handler/BusinessMessageHandler.java
  27. 35 0
      service/src/main/java/com/dayou/message/handler/SystemMessageHandler.java
  28. 3 2
      service/src/main/java/com/dayou/service/IItemBrokerageSequenceService.java
  29. 32 0
      service/src/main/java/com/dayou/service/IMessageService.java
  30. 6 0
      service/src/main/java/com/dayou/service/IUserService.java
  31. 4 0
      service/src/main/java/com/dayou/service/IVisitService.java
  32. 11 1
      service/src/main/java/com/dayou/service/impl/BusinessReplyServiceImpl.java
  33. 7 5
      service/src/main/java/com/dayou/service/impl/ItemBrokerageSequenceServiceImpl.java
  34. 99 0
      service/src/main/java/com/dayou/service/impl/MessageServiceImpl.java
  35. 34 0
      service/src/main/java/com/dayou/service/impl/UserServiceImpl.java
  36. 7 0
      service/src/main/java/com/dayou/service/impl/VisitServiceImpl.java

+ 3 - 3
biz-base/src/main/java/com/dayou/controller/ItemBrokerageSequenceController.java

@@ -117,9 +117,9 @@ public class ItemBrokerageSequenceController extends BaseController {
     @IgnoreAuth
     @GetMapping("/settle")
     public RestResponse<Boolean> settle(){
-        Boolean result = itemBrokerageSequenceService.doAbleItemBrokerageSettle();
-        Boolean nonResult = itemBrokerageSequenceService.doNonMarketerAheadSettle();
-        return RestResponse.data((result && nonResult));
+        itemBrokerageSequenceService.doAbleItemBrokerageSettle();
+        itemBrokerageSequenceService.doNonMarketerAheadSettle();
+        return RestResponse.data(null);
     }
 
 }

+ 56 - 0
biz-base/src/main/java/com/dayou/controller/MessageController.java

@@ -0,0 +1,56 @@
+package com.dayou.controller;
+
+import com.dayou.message.bo.SystemMessageBO;
+import com.dayou.message.handler.SystemMessageHandler;
+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.IMessageService;
+import com.dayou.entity.Message;
+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;
+/**
+ * 消息
+ *
+ * @author wucl
+ * @since 2023-06-30
+ */
+@RestController
+@RequestMapping("message")
+@Slf4j
+public class MessageController extends BaseController {
+
+    @Autowired
+    private IMessageService messageService;
+
+    @GetMapping("/notRead")
+    public RestResponse<List<Message>> messageRedPoint(){
+        List<Message> list = messageService.messageRedPoint();
+        return RestResponse.data(list);
+    }
+
+    /**
+     * 更新消息已读状态
+     * @param id
+     * @return
+     */
+    @GetMapping("/updateRead/{id}")
+    public RestResponse<Boolean> updateRead(@PathVariable("id") Long id){
+        Boolean result = messageService.updateRead(id);
+        return RestResponse.data(result);
+    }
+}
+

+ 34 - 0
biz-base/src/main/java/com/dayou/controller/UserController.java

@@ -216,6 +216,29 @@ public class UserController extends BaseController {
     }
 
     /**
+     * 重置提成查询密码
+     * @param id
+     * @return
+     */
+    @OperLog(title = "重置提成查询密码",businessType = OperationTypeEnum.RESET)
+    @PutMapping("/resetSettlePassword/{id}")
+    public RestResponse<Boolean> resetSettlePassword(@PathVariable Long id){
+        Boolean result = userService.resetSettlePassword(id);
+        return RestResponse.data(result);
+    }
+
+    /**
+     * 修改提成查询密码
+     * @param passwordDTO
+     * @return
+     */
+    @OperLog(title = "修改提成查询密码",businessType = OperationTypeEnum.SET)
+    @PutMapping("/updateSettlePassword")
+    public RestResponse<Boolean> updateSettlePassword(@RequestBody UpdatePasswordDTO passwordDTO){
+        Boolean result = userService.updateSettlePassword(passwordDTO);
+        return RestResponse.data(result);
+    }
+    /**
      * 岗位用户下拉列表
      */
     @GetMapping("/simple/{postName}")
@@ -244,5 +267,16 @@ public class UserController extends BaseController {
         List<IdNameVO> list = userService.usersByDepartment(departmentName);
         return RestResponse.data(list);
     }
+
+    /**
+     * 项目提成二级密码验证
+     * @param settlePassword
+     * @return
+     */
+    @PostMapping("/validSettlePassword/{settlePassword}")
+    public RestResponse<Boolean> validSettlePassword(@PathVariable("settlePassword")String settlePassword){
+        Boolean result = userService.validSettlePassword(settlePassword);
+        return RestResponse.data(result);
+    }
 }
 

+ 14 - 0
biz-base/src/main/java/com/dayou/controller/VisitController.java

@@ -2,6 +2,7 @@ package com.dayou.controller;
 
 import com.dayou.annotation.DataPermission;
 import com.dayou.annotation.OperLog;
+import com.dayou.dto.CustomerDTO;
 import com.dayou.utils.LoginContext;
 import com.dayou.vo.VisitVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -19,12 +20,16 @@ import org.springframework.web.bind.annotation.*;
 import com.dayou.utils.ConvertUtil;
 import com.dayou.utils.HttpKit;
 import com.dayou.exception.ErrorCode;
+
+import java.io.IOException;
 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.servlet.http.HttpServletResponse;
+
 import static com.dayou.common.Constants.MANAGER_OFFICE;
 
 /**
@@ -90,6 +95,15 @@ public class VisitController extends BaseController {
         return RestResponse.data(ret);
     }
 
+    /**
+     * 拜访记录导出
+     */
+    @DataPermission(teamData = true,postChild = false,ignoreDepartment = {MANAGER_OFFICE})
+    @GetMapping("/export")
+    public void exportData(VisitVO visit,String keyword, HttpServletResponse response ) throws IOException {
+        List<VisitVO> list = visitService.getList(visit,keyword);
+        exportPlus(response,"拜访记录",list,VisitVO.class);
+    }
 
 }
 

+ 19 - 4
biz-base/src/test/java/BrokerageTest.java

@@ -5,11 +5,10 @@
 //import com.dayou.bo.LeaderRatioBO;
 //import com.dayou.configuration.AsyncManager;
 //import com.dayou.controller.ItemController;
+//import com.dayou.dto.DeductionDTO;
 //import com.dayou.dto.ItemDTO;
-//import com.dayou.entity.BrokerageMarketerRatio;
-//import com.dayou.entity.Customer;
-//import com.dayou.entity.ItemBrokerageGeneral;
-//import com.dayou.entity.UserTarget;
+//import com.dayou.entity.*;
+//import com.dayou.mapper.ItemBrokerageTechnicistDeductionMapper;
 //import com.dayou.service.*;
 //import com.dayou.service.impl.ItemBrokerageSequenceServiceImpl;
 //import com.dayou.utils.Md5Utils;
@@ -21,6 +20,7 @@
 //import com.zaxxer.hikari.HikariDataSource;
 //import lombok.extern.slf4j.Slf4j;
 //import org.apache.commons.lang3.RandomUtils;
+//import org.checkerframework.checker.units.qual.A;
 //import org.junit.Test;
 //import org.junit.runner.RunWith;
 //import org.springframework.beans.factory.annotation.Autowired;
@@ -63,6 +63,13 @@
 //    @Autowired
 //    private IItemBrokerageSequenceService itemBrokerageSequenceService;
 //
+//    @Autowired
+//    private ItemBrokerageTechnicistDeductionMapper deductionMapper;
+//
+//    @Autowired
+//    private IItemBrokerageTechnicistService technicistService;
+//
+//
 //
 //
 ////    @Test
@@ -92,4 +99,12 @@
 ////        //Boolean nonResult = itemBrokerageSequenceService.doNonMarketerAheadSettle();
 ////        Assert.isTrue(result);
 ////    }
+//    @Test
+//    public void test(){
+//        List<DeductionDTO> deductionDTOS = deductionMapper.notDeductionDefaultSettle(112L);
+//        List<ItemBrokerageTechnicist> technicistsBrokerages = technicistService.list(new LambdaQueryWrapper<ItemBrokerageTechnicist>().eq(ItemBrokerageTechnicist::getUserId, 112L).gt(ItemBrokerageTechnicist::getResidueAmount,BigDecimal.ZERO));
+//        itemBrokerageSequenceService.deduction(technicistsBrokerages,deductionDTOS);
+////        ItemBrokerageSequence byId = itemBrokerageSequenceService.getById(189L);
+////        itemBrokerageSequenceService.extracted(new BigDecimal("5000"),byId,technicistsBrokerages);
+//    }
 //}

+ 2 - 0
common/src/main/java/com/dayou/exception/ErrorCode.java

@@ -55,6 +55,8 @@ public class ErrorCode {
 
     public static final ErrorCode STAGE_NODE_ERROR3 = ErrorCode("10025", "抱歉,该阶段参与人员提成系数之和已超过100%,请检查后修改。");
 
+    public static final ErrorCode SETTLE_PASSWORD_ERROR = ErrorCode("10026", "抱歉,查询密码错误!请确认是当前登录用户本人查询。");
+
     private String code;
     private String errorMsg;
 

+ 16 - 0
dao/src/main/java/com/dayou/mapper/MessageMapper.java

@@ -0,0 +1,16 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.Message;
+import com.dayou.dao.CustomBaseMapper;
+
+/**
+ * <p>
+ * 消息 Mapper 接口
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-06-30
+ */
+public interface MessageMapper extends CustomBaseMapper<Message> {
+
+}

+ 4 - 0
dao/src/main/java/com/dayou/mapper/VisitMapper.java

@@ -6,6 +6,8 @@ import com.dayou.dao.CustomBaseMapper;
 import com.dayou.vo.VisitVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 拜访记录表 Mapper 接口
@@ -19,4 +21,6 @@ public interface VisitMapper extends CustomBaseMapper<Visit> {
     Page<VisitVO> page(Page page, @Param("visit") VisitVO visit, @Param("keyword") String keyword);
 
     VisitVO detail(@Param("id") Long id);
+
+    List<VisitVO> getList(@Param("visit")VisitVO visit,  @Param("keyword") String keyword);
 }

+ 3 - 2
dao/src/main/resources/mapper/MarketStatMapper.xml

@@ -33,8 +33,9 @@
       item
       WHERE
       deleted = 0
-      AND sign_date &gt;= concat( YEAR ( now())- 1, '-12-23' )
-      AND sign_date &lt;= concat( YEAR ( now()), '-12-22' )
+      AND upload_date is not null
+      AND upload_date &gt;= concat( YEAR ( now())- 1, '-12-23' )
+      AND upload_date &lt;= concat( YEAR ( now()), '-12-22' )
       <if test="dto!=null and dto.userIds!=null and dto.userIds.size!=0">
          and user_id in
          <foreach collection="dto.userIds" open="(" close=")" separator="," item="userId">

+ 28 - 0
dao/src/main/resources/mapper/MessageMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.MessageMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.Message">
+        <result column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="created" property="created" />
+        <result column="modified" property="modified" />
+        <result column="title" property="title" />
+        <result column="message" property="message" />
+        <result column="sender" property="sender" />
+        <result column="receiver" property="receiver" />
+        <result column="type" property="type" />
+        <result column="is_read" property="isRead" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        created,
+        modified,
+        title, message, sender, receiver, type, is_read
+    </sql>
+
+</mapper>

+ 1 - 1
dao/src/main/resources/mapper/UserMapper.xml

@@ -36,7 +36,7 @@
         deleted,
         created,
         modified,
-        name, id_no, user_type, mobile, sex, password, salt, birthday, enable,staff_no,nation,politics,home_address,resign_state,hire_date,resign_date,remark,native_place
+        name, id_no, user_type, mobile, sex, password, salt, birthday, enable,staff_no,nation,politics,home_address,resign_state,hire_date,resign_date,remark,native_place,settle_password
     </sql>
 
     <insert id="saveOrUpdateById" parameterType="com.dayou.entity.User">

+ 15 - 8
dao/src/main/resources/mapper/VisitMapper.xml

@@ -25,10 +25,10 @@
         v.customer_id, v.visit_type, v.visit_time, v.spot, v.content,v.user_id
     </sql>
 
-    <select id="page" parameterType="com.dayou.vo.VisitVO" resultType="com.dayou.vo.VisitVO">
+    <sql id="pageOrList">
         select
-            <include refid="Base_Column_List"/>,c.name as customerName,u.name as userName,c.section as customerSection,
-            c.department as customerDepartment,c.position as customerPosition,c.level as customerLevel
+        <include refid="Base_Column_List"/>,c.name as customerName,u.name as userName,c.section as customerSection,
+        c.department as customerDepartment,c.position as customerPosition,c.level as customerLevel
         from visit v left join customer c on v.customer_id = c.id left join user u on u.id = v.user_id
         where v.deleted = 0 and c.deleted = 0
         <if test="visit!=null and visit.visitType!=null and visit.visitType!='' ">
@@ -36,11 +36,11 @@
         </if>
         <if test="keyword!=null and keyword!='' ">
             and(
-                c.name like concat ('%',#{keyword},'%')
-                or c.level like concat('%',#{keyword},'%')
-                or c.department like concat('%',#{keyword},'%')
-                or c.position like concat('%',#{keyword},'%')
-                or c.section like concat('%',#{keyword},'%')
+            c.name like concat ('%',#{keyword},'%')
+            or c.level like concat('%',#{keyword},'%')
+            or c.department like concat('%',#{keyword},'%')
+            or c.position like concat('%',#{keyword},'%')
+            or c.section like concat('%',#{keyword},'%')
             )
         </if>
         <if test="visit!=null and visit.userName!=null and visit.userName!='' " >
@@ -53,6 +53,9 @@
             </foreach>
         </if>
         order by v.id DESC
+    </sql>
+    <select id="page" parameterType="com.dayou.vo.VisitVO" resultType="com.dayou.vo.VisitVO">
+        <include refid="pageOrList"/>
     </select>
 
     <select id="detail" parameterType="java.lang.Long" resultType="com.dayou.vo.VisitVO">
@@ -62,4 +65,8 @@
         from visit v left join customer c on v.customer_id = c.id left join user u on u.id = v.user_id
         where v.deleted = 0 and c.deleted = 0 and v.id = #{id}
     </select>
+
+    <select id="getList" resultType="com.dayou.vo.VisitVO">
+        <include refid="pageOrList"/>
+    </select>
 </mapper>

+ 1 - 1
domain/src/main/java/com/dayou/entity/BusinessReply.java

@@ -54,7 +54,7 @@ public class BusinessReply extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "接受者id")
-    private Integer receiverId;
+    private Long receiverId;
 
     /**
      * 状态(已读,未读)

+ 0 - 12
domain/src/main/java/com/dayou/entity/ItemBrokerageGeneral.java

@@ -87,17 +87,5 @@ public class ItemBrokerageGeneral extends BaseEntity {
      * 客户经理提成状态
      */
     private String marketerStatus;
-//
-//    /**
-//     * 合同金额
-//     */
-//    @TableField(exist = false,select = false)
-//    private BigDecimal amount;
-//
-//    /**
-//     * 客户经理id
-//     */
-//    @TableField(exist = false,select = false)
-//    private Long userId;
 
 }

+ 62 - 0
domain/src/main/java/com/dayou/entity/Message.java

@@ -0,0 +1,62 @@
+package com.dayou.entity;
+import com.dayou.common.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 消息
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-06-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "消息")
+public class Message extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 标题
+     */
+    @ImportCell
+    @ExportCell(columnName = "标题")
+    private String title;
+
+    /**
+     * 消息内容
+     */
+    @ImportCell
+    @ExportCell(columnName = "消息内容")
+    private String message;
+
+    /**
+     * 消息发送人id(userId)
+     */
+    private Long sender;
+
+    /**
+     * 消息接受人id(userId)
+     */
+    private Long receiver;
+
+    /**
+     * 消息类型
+     */
+    @ImportCell
+    @ExportCell(columnName = "消息类型")
+    private String type;
+
+    /**
+     * 已读
+     */
+    @ImportCell
+    @ExportCell(columnName = "已读")
+    private Boolean isRead;
+
+
+}

+ 5 - 0
domain/src/main/java/com/dayou/entity/User.java

@@ -175,4 +175,9 @@ public class User extends BaseEntity {
     //@ImportCell
     @ExportCell(columnName = "初始密码状态")
     private Boolean passwordState;
+
+    /**
+     * 查询提成密码
+     */
+    private String settlePassword;
 }

+ 4 - 6
domain/src/main/java/com/dayou/entity/Visit.java

@@ -1,4 +1,5 @@
 package com.dayou.entity;
+import com.dayou.annotation.Excel;
 import com.dayou.common.BaseEntity;
 
 import java.time.LocalDate;
@@ -32,15 +33,13 @@ public class Visit extends BaseEntity {
     /**
      * 拜访类型(初访、回访)
      */
-    @ImportCell
-    @ExportCell(columnName = "拜访类型(初访、回访)")
+    @Excel( name="拜访类型")
     private String visitType;
 
     /**
      * 拜访时间
      */
-    @ImportCell
-    @ExportCell(columnName = "拜访时间")
+    @Excel( name="拜访时间")
     private LocalDate visitTime;
 
     /**
@@ -53,8 +52,7 @@ public class Visit extends BaseEntity {
     /**
      * 沟通内容
      */
-    @ImportCell
-    @ExportCell(columnName = "沟通内容")
+    @Excel( name="沟通内容")
     private String content;
 
     /**

+ 8 - 0
domain/src/main/java/com/dayou/enums/BusinessReplyEnum.java

@@ -23,4 +23,12 @@ public enum BusinessReplyEnum {
         this.name = name;
         this.code = code;
     }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getCode() {
+        return code;
+    }
 }

+ 11 - 8
domain/src/main/java/com/dayou/vo/VisitVO.java

@@ -1,5 +1,6 @@
 package com.dayou.vo;
 
+import com.dayou.annotation.Excel;
 import com.dayou.entity.Visit;
 import lombok.Data;
 
@@ -19,21 +20,23 @@ public class VisitVO extends Visit {
     /**
      * 客户名称
      */
+    @Excel( name="客户名称")
     private String customerName;
 
     private Set<Long> userIds;
 
-    /**
-     * 业务员
-     */
-    private String userName;
 
+    @Excel( name="客户单位")
     private String customerDepartment;
-
+    @Excel( name="客户科室")
     private String customerSection;
-
+    @Excel( name="客户职位")
     private String customerPosition;
-
+    @Excel( name="客户等级")
     private String customerLevel;
-
+    /**
+     * 业务员
+     */
+    @Excel( name="客户经理")
+    private String userName;
 }

+ 15 - 6
service/src/main/java/com/dayou/brokerage/config/BrokerageSettleSchedule.java

@@ -4,14 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.configuration.AsyncManager;
 import com.dayou.entity.ItemBrokerageSequence;
+import com.dayou.message.handler.SystemMessageHandler;
 import com.dayou.service.IItemBrokerageSequenceService;
+import com.dayou.service.IMessageService;
 import com.dayou.utils.DateUtils;
+import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.Set;
 
 import static com.dayou.brokerage.constants.BrokerageMsg.BROKERAGE_SEQUENCE_EMBODY;
 import static com.dayou.common.Constants.YEARMONTH;
@@ -30,7 +34,11 @@ public class BrokerageSettleSchedule {
     @Autowired
     private IItemBrokerageSequenceService itemBrokerageSequenceService;
 
-    //    @Scheduled(cron = "0 0/2 * * * ?")
+    @Autowired
+    private IMessageService messageService;
+
+
+//        @Scheduled(cron = "0 0/1 * * * ?")
     @Scheduled(cron = "59 59 23 23 * ?")
     public void doBrokerageSettle(){
         AsyncManager.me().execute(new AsyncManager.BizHandler() {
@@ -51,17 +59,18 @@ public class BrokerageSettleSchedule {
             @Override
             public Object doCustom() {
                 log.info("市场人员结算程序开始执行...");
-                itemBrokerageSequenceService.doAbleItemBrokerageSettle();
+                Set<Long> marketers = itemBrokerageSequenceService.doAbleItemBrokerageSettle();
                 log.info("市场人员结算程序执行完成");
                 log.info("技术人员默认预提结算程序开始执行...");
-                itemBrokerageSequenceService.doNonMarketerAheadSettle();
+                Set<Long> techs = itemBrokerageSequenceService.doNonMarketerAheadSettle();
                 log.info("技术人员默认预提结算程序开始执行完成");
+                Set<Long> userIds= Sets.newHashSet();
+                userIds.addAll(marketers);
+                userIds.addAll(techs);
+                messageService.packagingSettleMessage(userIds);
                 return null;
             }
         }, AsyncManager.AsyncLockStrategy.LOCK_BIZ, AsyncManager.AsyncBiz.BROKERAGE_SETTLE);
-
-
-
     }
 }
 

+ 40 - 0
service/src/main/java/com/dayou/message/MessageServerCenter.java

@@ -0,0 +1,40 @@
+package com.dayou.message;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/6/30
+ * created with IntelliJ IDEA.
+ */
+@Service
+public abstract class MessageServerCenter<T> {
+
+    /**
+     * 发送消息
+     * @param t
+     * @return
+     */
+    public abstract Boolean sendMessage(T t);
+
+    /**
+     * 销毁消息
+     * @param id
+     * @return
+     */
+    protected Boolean destroyMessage(Long id){
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 读取消息
+     * @param id
+     * @return
+     */
+    protected Boolean readMessage(Long id){
+        return Boolean.TRUE;
+    }
+
+}

+ 19 - 0
service/src/main/java/com/dayou/message/MessageTitle.java

@@ -0,0 +1,19 @@
+package com.dayou.message;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/6/30
+ * created with IntelliJ IDEA.
+ */
+public interface MessageTitle
+{
+    public static final String BUSINESS_MESSAGE_TITLE = "业务回复[x]";
+
+    public static final String SYSTEM_MESSAGE_TITLE = "系统消息[x]";
+
+    public static final String SETTLE_MESSAGE_TITLE = "提成结算";
+
+    public static final String SETTLE_MESSAGE_CONTENT = "您好。您的上月项目提成已结算,请在[项目提成]菜单下查看明细,若有疑问请联系相关领导。";
+}

+ 29 - 0
service/src/main/java/com/dayou/message/bo/BusinessMessageBO.java

@@ -0,0 +1,29 @@
+package com.dayou.message.bo;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Set;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/6/30
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class BusinessMessageBO extends MessageBO{
+
+    /**
+     * 消息发送人id(userId)
+     */
+    private Long sender;
+
+    /**
+     * 消息接受人id(userId)
+     */
+    private Long receiver;
+
+    private final String type = "BUSINESS";
+}

+ 29 - 0
service/src/main/java/com/dayou/message/bo/MessageBO.java

@@ -0,0 +1,29 @@
+package com.dayou.message.bo;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.Set;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/6/30
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class MessageBO {
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 消息内容
+     */
+    private String message;
+
+}

+ 23 - 0
service/src/main/java/com/dayou/message/bo/SystemMessageBO.java

@@ -0,0 +1,23 @@
+package com.dayou.message.bo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/6/30
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class SystemMessageBO extends MessageBO{
+
+    private final String type = "SETTLE";
+
+    private Long receiver;
+
+    private Long sender = 1L;
+
+}

+ 32 - 0
service/src/main/java/com/dayou/message/handler/BusinessMessageHandler.java

@@ -0,0 +1,32 @@
+package com.dayou.message.handler;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.dayou.entity.Message;
+import com.dayou.mapper.MessageMapper;
+import com.dayou.message.MessageServerCenter;
+import com.dayou.message.bo.BusinessMessageBO;
+import com.dayou.service.IMessageService;
+import com.dayou.utils.LoginContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/6/30
+ * created with IntelliJ IDEA.
+ */
+@Service
+public class BusinessMessageHandler extends MessageServerCenter<BusinessMessageBO> {
+
+    @Autowired
+    private MessageMapper messageMapper;
+
+    @Override
+    public Boolean sendMessage(BusinessMessageBO messageBO) {
+        Message message = BeanUtil.copyProperties(messageBO, Message.class);
+        messageMapper.insert(message);
+        return Boolean.TRUE;
+    }
+}

+ 35 - 0
service/src/main/java/com/dayou/message/handler/SystemMessageHandler.java

@@ -0,0 +1,35 @@
+package com.dayou.message.handler;
+
+import com.dayou.entity.Message;
+import com.dayou.mapper.MessageMapper;
+import com.dayou.message.MessageServerCenter;
+import com.dayou.message.bo.SystemMessageBO;
+import com.dayou.utils.ConvertUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Set;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/6/30
+ * created with IntelliJ IDEA.
+ */
+@Service
+public class SystemMessageHandler extends MessageServerCenter<SystemMessageBO> {
+
+    @Autowired
+    private MessageMapper messageMapper;
+    public Boolean sendMessage(Set<SystemMessageBO> systemMessages) {
+        Set<Message> messages = ConvertUtil.copySet(systemMessages, Message.class);
+        messageMapper.insertBatch(messages);
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public Boolean sendMessage(SystemMessageBO systemMessageBO) {
+        return null;
+    }
+}

+ 3 - 2
service/src/main/java/com/dayou/service/IItemBrokerageSequenceService.java

@@ -13,6 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -34,9 +35,9 @@ public interface IItemBrokerageSequenceService extends IService<ItemBrokerageSeq
 
         Boolean delete(Long id);
 
-        Boolean doNonMarketerAheadSettle();
+        Set<Long> doNonMarketerAheadSettle();
 
-        Boolean doAbleItemBrokerageSettle();
+        Set<Long> doAbleItemBrokerageSettle();
 
         List<BrokerageSequenceVO> deduction(BrokerageSequenceVO brokerageSequenceVO);
 

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

@@ -0,0 +1,32 @@
+package com.dayou.service;
+import com.dayou.entity.BusinessReply;
+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.message.bo.BusinessMessageBO;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <p>
+ * 消息 服务类
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-06-30
+ */
+public interface IMessageService extends IService<Message> {
+
+
+    Boolean packagingBusinessMessage(BusinessReply messageBO);
+
+    Boolean packagingSettleMessage(Set<Long> userIds);
+
+    List<Message> messageRedPoint();
+
+    Boolean updateRead(Long id);
+}

+ 6 - 0
service/src/main/java/com/dayou/service/IUserService.java

@@ -81,4 +81,10 @@ public interface IUserService extends IService<User> {
     Set<LeaderRatioBO> marketManagerRatioBO();
 
     List<IdNameVO> usersByDepartment(String departmentName);
+
+    Boolean resetSettlePassword(Long id);
+
+    Boolean updateSettlePassword(UpdatePasswordDTO passwordDTO);
+
+    Boolean validSettlePassword(String settlePassword);
 }

+ 4 - 0
service/src/main/java/com/dayou/service/IVisitService.java

@@ -6,6 +6,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.dayou.vo.VisitVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
 /**
  * <p>
  * 拜访记录表 服务类
@@ -26,4 +29,5 @@ public interface IVisitService extends IService<Visit> {
 
         Boolean delete(Long id);
 
+    List<VisitVO> getList(VisitVO visit, String keyword);
 }

+ 11 - 1
service/src/main/java/com/dayou/service/impl/BusinessReplyServiceImpl.java

@@ -3,8 +3,10 @@ package com.dayou.service.impl;
 import com.dayou.common.BaseEntity;
 import com.dayou.entity.BusinessReply;
 import com.dayou.mapper.BusinessReplyMapper;
+import com.dayou.message.bo.BusinessMessageBO;
 import com.dayou.service.IBusinessReplyService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.service.IMessageService;
 import com.dayou.utils.LoginContext;
 import com.dayou.vo.BusinessReplyVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +30,8 @@ import java.util.ArrayList;
 import org.springframework.transaction.annotation.Transactional;
 import com.dayou.enums.BatchTaskTypeEnum;
 
+import static com.dayou.message.MessageTitle.BUSINESS_MESSAGE_TITLE;
+
 /**
  * <p>
  * 业务回复表 服务实现类
@@ -42,6 +46,9 @@ public class BusinessReplyServiceImpl extends ServiceImpl<BusinessReplyMapper, B
     @Autowired
     private BusinessReplyMapper businessReplyMapper;
 
+    @Autowired
+    private IMessageService messageService;
+
     @Override
     @SuppressWarnings("unchecked")
     public Page<BusinessReplyVO> selectPage(Page page, BusinessReply businessReply){
@@ -57,9 +64,12 @@ public class BusinessReplyServiceImpl extends ServiceImpl<BusinessReplyMapper, B
         return this.getById(id);
     }
 
+    @Transactional
     @Override
     public Boolean reply(BusinessReply businessReply){
-        return  this.save(businessReply);
+        this.save(businessReply);
+        messageService.packagingBusinessMessage(businessReply);
+        return  Boolean.TRUE;
     }
 
     @Override

+ 7 - 5
service/src/main/java/com/dayou/service/impl/ItemBrokerageSequenceServiceImpl.java

@@ -144,7 +144,7 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
      */
     @Transactional
     @Override
-    public synchronized Boolean doNonMarketerAheadSettle() {
+    public synchronized Set<Long> doNonMarketerAheadSettle() {
         ConcurrentMap<Long, BigDecimal> nonMarketerAheadAmounts = baseAmountsCache.asMap();
         Date now = new Date();
         int year = DateUtils.getYear(now);
@@ -231,7 +231,7 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
                 technicistService.updateBatchById(xdeductionAble);
             }
         }
-        return Boolean.TRUE;
+        return nonMarketerAheadAmounts.keySet();
     }
 
     //仅供单元测试用,后面删掉
@@ -284,7 +284,7 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
      */
     @Transactional
     @Override
-    public synchronized Boolean  doAbleItemBrokerageSettle() {
+    public synchronized Set<Long>  doAbleItemBrokerageSettle() {
         List<ItemBrokerageGeneral> generals = brokerageGeneralService.computedAbleList();
         Map<Long, ItemBrokerageGeneral> idGeneral = generals.stream().collect(Collectors.toMap(BaseEntity::getId, ItemBrokerageGeneral -> ItemBrokerageGeneral));
         if (CollectionUtils.isNotEmpty(generals)){
@@ -394,12 +394,14 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
                     }
                 }
                 log.info("结算完成.");
-                return brokerageGeneralService.updateBatchById(generals);
+                brokerageGeneralService.updateBatchById(generals);
+                Set<Long> settleUserIds = collect.keySet();
+                return settleUserIds;
             }
 
         }
         log.info("当前暂无可结算的项目");
-        return Boolean.FALSE;
+        return null;
     }
 
     /**

+ 99 - 0
service/src/main/java/com/dayou/service/impl/MessageServiceImpl.java

@@ -0,0 +1,99 @@
+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.mapper.MessageMapper;
+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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.utils.LoginContext;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.dayou.utils.ExcelUtil;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.springframework.transaction.annotation.Transactional;
+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.*;
+
+/**
+ * <p>
+ * 消息 服务实现类
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-06-30
+ */
+@Service
+public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> implements IMessageService {
+
+    @Autowired
+    private BusinessMessageHandler businessMessageHandler;
+
+    @Autowired
+    private SystemMessageHandler systemMessageHandler;
+
+    @Override
+    public Boolean packagingBusinessMessage(BusinessReply originalBO) {
+        BusinessMessageBO messageBO = new BusinessMessageBO();
+        messageBO.setReceiver(originalBO.getReceiverId());
+        String bizType = originalBO.getBizType().equals(MARKET_VISIT_REPLY.name())?MARKET_VISIT_REPLY.getName(): MARKET_LOG_REPLY.getName();
+        messageBO.setTitle(BUSINESS_MESSAGE_TITLE.replace("x", bizType));
+        messageBO.setMessage(JSON.toJSONString(originalBO));
+        messageBO.setSender(originalBO.getReplierId());
+        return businessMessageHandler.sendMessage(messageBO);
+    }
+
+    @Override
+    public Boolean packagingSettleMessage(Set<Long> userIds) {
+        Set<SystemMessageBO> settleMessages = userIds.stream().map(x -> {
+            SystemMessageBO systemMessageBO = new SystemMessageBO();
+            systemMessageBO.setTitle(SYSTEM_MESSAGE_TITLE.replace("x", SETTLE_MESSAGE_TITLE));
+            systemMessageBO.setMessage(SETTLE_MESSAGE_CONTENT);
+            systemMessageBO.setReceiver(x);
+            return systemMessageBO;
+        }).collect(Collectors.toSet());
+        if (CollectionUtils.isNotEmpty(settleMessages)){
+            return systemMessageHandler.sendMessage(settleMessages);
+        }
+        return Boolean.FALSE;
+    }
+
+    @Override
+    public List<Message> messageRedPoint() {
+        Long currentUserId = LoginContext.getCurrentUserId();
+        List<Message> list = this.list(new LambdaQueryWrapper<Message>().eq(Message::getReceiver, currentUserId)
+                .eq(Message::getIsRead, Boolean.FALSE).orderByDesc(BaseEntity::getCreated));
+        return list;
+    }
+
+    @Override
+    public Boolean updateRead(Long id) {
+        return this.update(new LambdaUpdateWrapper<Message>().eq(BaseEntity::getId,id).set(Message::getIsRead,Boolean.TRUE));
+    }
+}

+ 34 - 0
service/src/main/java/com/dayou/service/impl/UserServiceImpl.java

@@ -368,6 +368,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         int year = user.getHireDate().getYear();
         user.setStaffNo(STAFF_NO_PREFIX + year + user.getIdNo().substring(15,18));
         user.setPassword(DigestUtils.getMD5String(DEFAULT_PASSWORD));
+        user.setSettlePassword(DigestUtils.getMD5String(DEFAULT_PASSWORD));
         this.save(user);
         List<IdNameVO> userPosts = user.getUserPosts();
         Set<Long> postIds = userPosts.stream().map(IdNameVO::getId).collect(Collectors.toSet());
@@ -493,6 +494,39 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return list;
     }
 
+    @Override
+    public Boolean resetSettlePassword(Long id) {
+        return this.update(new LambdaUpdateWrapper<User>()
+                .set(User::getSettlePassword,DigestUtils.getMD5String(DEFAULT_PASSWORD))
+                .eq(BaseEntity::getId,id));
+    }
+
+    @Override
+    public Boolean updateSettlePassword(UpdatePasswordDTO passwordDTO) {
+        if (!StrUtil.equals(passwordDTO.getCurrentPassword(),passwordDTO.getRepeatPassword())){
+            ErrorCode.throwBusinessException(ErrorCode.PASSWORD_DIFFERENT);
+        }
+        User user = this.getById(LoginContext.getUserId());
+
+        if (!StrUtil.equals(user.getSettlePassword(),passwordDTO.getOriginalPassword())){
+            ErrorCode.throwBusinessException(ErrorCode.PASSWORD_ERROR);
+        }
+
+        boolean update = this.update(new LambdaUpdateWrapper<User>()
+                .set(User::getSettlePassword, passwordDTO.getCurrentPassword())
+                .eq(BaseEntity::getId, user.getId()));
+        return update;
+    }
+
+    @Override
+    public Boolean validSettlePassword(String settlePassword) {
+        User user = this.getById(LoginContext.getUserId());
+        if (!StrUtil.equals(user.getSettlePassword(),settlePassword)){
+            ErrorCode.throwBusinessException(ErrorCode.SETTLE_PASSWORD_ERROR);
+        }
+        return Boolean.TRUE;
+    }
+
     /**
      * 递归查询下级岗位
      * @param postIds

+ 7 - 0
service/src/main/java/com/dayou/service/impl/VisitServiceImpl.java

@@ -9,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -52,4 +54,9 @@ public class VisitServiceImpl extends ServiceImpl<VisitMapper, Visit> implements
         //逻辑删除
         return this.removeById(id);
     }
+
+    @Override
+    public List<VisitVO> getList(VisitVO visit, String keyword) {
+        return visitMapper.getList(visit,keyword);
+    }
 }