Quellcode durchsuchen

掌柜秘书消息,保险快到期列表, 分销计算bug

785834757 vor 2 Jahren
Ursprung
Commit
bacc7f2f34
21 geänderte Dateien mit 576 neuen und 9 gelöschten Zeilen
  1. 8 0
      src/main/java/com/ydtech/config/SwaggerConfig.java
  2. 7 1
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserAccountServiceImpl.java
  3. 9 0
      src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeService.java
  4. 13 0
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceImpl.java
  5. 6 6
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  6. 2 2
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  7. 27 0
      src/main/java/com/ydtech/modules/message/constants/MessageTypeConstants.java
  8. 44 0
      src/main/java/com/ydtech/modules/message/controller/MessageSecretaryController.java
  9. 14 0
      src/main/java/com/ydtech/modules/message/dao/MessageSecretaryMapper.java
  10. 50 0
      src/main/java/com/ydtech/modules/message/entity/MessageSecretary.java
  11. 37 0
      src/main/java/com/ydtech/modules/message/service/MessageSecretaryService.java
  12. 77 0
      src/main/java/com/ydtech/modules/message/service/impl/MessageSecretaryServiceImpl.java
  13. 29 0
      src/main/java/com/ydtech/modules/order/controller/InsOrdersController.java
  14. 4 0
      src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java
  15. 37 0
      src/main/java/com/ydtech/modules/order/entity/vo/OrderExpirationQueryVo.java
  16. 78 0
      src/main/java/com/ydtech/modules/order/entity/vo/OrderExpirationVo.java
  17. 12 0
      src/main/java/com/ydtech/modules/order/service/InsOrdersService.java
  18. 15 0
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
  19. 43 0
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  20. 16 0
      src/main/resources/mapper/modules/message/MessageSecretaryMapper.xml
  21. 48 0
      src/main/resources/mapper/modules/order/InsOrdersMapper.xml

+ 8 - 0
src/main/java/com/ydtech/config/SwaggerConfig.java

@@ -98,6 +98,8 @@ public class SwaggerConfig {
         return buildDocket("demo", "示例演示");
     }
 
+
+
     @Bean(value = "largescreenApi")
     @Order(value = 11)
     public Docket largescreenApi() {
@@ -105,6 +107,12 @@ public class SwaggerConfig {
     }
 
 
+    @Bean(value = "messageApi")
+    @Order(value = 12)
+    public Docket messageApi() {
+        return buildDocket("message", "消息接口");
+    }
+
     private ApiInfo apiInfo() {
         return new ApiInfoBuilder()
                 .title("晋掌柜 API 文档")

+ 7 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysUserAccountServiceImpl.java

@@ -17,6 +17,8 @@ import com.ydtech.modules.admin.service.SysUserAccountService;
 import com.ydtech.modules.admin.service.SysUserBankCardService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
+import com.ydtech.modules.message.constants.MessageTypeConstants;
+import com.ydtech.modules.message.service.MessageSecretaryService;
 import com.ydtech.modules.order.dao.InsOrdersMapper;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.modules.order.entity.InsOrders;
@@ -66,6 +68,9 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
     @Autowired
     private InsOrdersMapper insOrdersMapper;
 
+    @Autowired
+    private MessageSecretaryService messageSecretaryService;
+
 
     @Override
     @Transactional
@@ -165,7 +170,8 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
 
             }
         }
-
+        //添加佣金消息
+        messageSecretaryService.addMessage(MessageTypeConstants.M_5,sysUserAccount.getUserId(),"您有一条佣金消息,请及时查看");
 
     }
 

+ 9 - 0
src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeService.java

@@ -78,6 +78,15 @@ public interface FeeRuleSchemeService {
     public FeeOrderNewVo.ExportFee calcExportFee(BigDecimal premium, BigDecimal superviseCostsProportion, BigDecimal entranceTotalProportion,
                                                  BigDecimal deptTotalProportion,BigDecimal retailTotalProportion,BigDecimal taxRate);
 
+    /**
+     * 计算分销费用
+     * @param jqPremiums
+     * @param syPremiums
+     * @param noPremiums
+     * @param proportion
+     */
+    public BigDecimal calcRetail(BigDecimal jqPremiums, BigDecimal syPremiums, BigDecimal noPremiums, BigDecimal proportion);
+
 
     FeeOrderNewVo newConvertOrderFeeVoData(InsFeeOrderNew insFeeOrderNew, PtlAgreementProductCostsNew ptlAgreementProductCostsNew);
 

+ 13 - 0
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceImpl.java

@@ -2839,6 +2839,19 @@ BigDecimal.ROUND_DOWN));
         return exportFee;
     }
 
+    @Override
+    public BigDecimal calcRetail(BigDecimal jqPremiums, BigDecimal syPremiums, BigDecimal noPremiums, BigDecimal proportion) {
+        //计算交强险分销
+        BigDecimal jqRetail = jqPremiums.multiply(proportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        //计算商业险分销
+        BigDecimal syRetail = syPremiums.multiply(proportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        //计算非车险分销
+        BigDecimal noRetail = noPremiums.multiply(proportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        //总分销
+        BigDecimal totalRetail = jqRetail.add(syRetail).add(noRetail).setScale(2,BigDecimal.ROUND_DOWN);
+        return totalRetail;
+    }
+
     public List<DistributionLevelVo> converDistrbutionData(InsFeeOrderNew insFeeOrderNew) {
         ArrayList<DistributionLevelVo> resultList = new ArrayList<>();
         DistributionLevelVo levelOne = new DistributionLevelVo();

+ 6 - 6
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java

@@ -260,24 +260,24 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                 BigDecimal sumPremium = insFeeOrderNew.getJqPremium().add(insFeeOrderNew.getSyPremium()).add(insFeeOrderNew.getNoPremium());
                 if (Integer.parseInt(esmRetail.getRetailtype()) >= 3) {
                     insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
-                    retailRadio = retailRadio.add(insFeeOrderNew.getThirdDetailProportion()).setScale(2, BigDecimal.ROUND_DOWN);
-                    insFeeOrderNew.setThirdDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_DOWN));
+                    BigDecimal thirdDetailPremiums = feeRuleSchemeService.calcRetail(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), insFeeOrderNew.getNoPremium(), insFeeOrderNew.getThirdDetailProportion());
+                    insFeeOrderNew.setThirdDetailPremiums(thirdDetailPremiums);
                     if (parents != null && parents.size() > 2) {
                         insFeeOrderNew.setThreeLevelUserId(parents.get(2).getId());
                     }
                 }
                 if (Integer.parseInt(esmRetail.getRetailtype()) >= 2) {
                     insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
-                    retailRadio = retailRadio.add(insFeeOrderNew.getSecondDetailProportion()).setScale(2, BigDecimal.ROUND_DOWN);
-                    insFeeOrderNew.setSecondDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")).setScale(2,BigDecimal.ROUND_DOWN));
+                    BigDecimal secondDetailPremiums = feeRuleSchemeService.calcRetail(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), insFeeOrderNew.getNoPremium(), insFeeOrderNew.getSecondDetailProportion());
+                    insFeeOrderNew.setSecondDetailPremiums(secondDetailPremiums);
                     if (parents != null && parents.size() > 1) {
                         insFeeOrderNew.setTwoLevelUserId(parents.get(1).getId());
                     }
                 }
                 if (Integer.parseInt(esmRetail.getRetailtype()) >= 1) {
                     insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
-                    retailRadio = retailRadio.add(insFeeOrderNew.getFirstDetailProportion()).setScale(2, BigDecimal.ROUND_DOWN);
-                    insFeeOrderNew.setFirstDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")).setScale(2,BigDecimal.ROUND_DOWN));
+                    BigDecimal firstDetailPremiums = feeRuleSchemeService.calcRetail(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), insFeeOrderNew.getNoPremium(), insFeeOrderNew.getFirstDetailProportion());
+                    insFeeOrderNew.setFirstDetailPremiums(firstDetailPremiums);
                     if (parents != null && parents.size() > 0) {
                         insFeeOrderNew.setFirstLevelUserId(parents.get(0).getId());
                     }

+ 2 - 2
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -167,10 +167,10 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 totalOtherPremiumAmount = totalOtherPremiumAmount.add(insFeeOrderNew.getJqExportOtherCostsPremiums()).add(insFeeOrderNew.getSyExportOtherCostsPremiums()).add(insFeeOrderNew.getNoExportOtherCostsPremiums());
 
 
-//              用戶
+                //用戶
                 sysUserAccount.setHandlingFee(totalPremiumAmount);
                 sysUserAccount.setDocumentary(totalOtherPremiumAmount);
-//              算佣金
+                //算佣金
                 this.countUserAmount(insFeeOrderNew,orderNo);
                 sysUserAccount.setDocumentaryStatus("2");  // 收入
                 sysUserAccount.setSuborderId(orderNo);  // 订单Id

+ 27 - 0
src/main/java/com/ydtech/modules/message/constants/MessageTypeConstants.java

@@ -0,0 +1,27 @@
+package com.ydtech.modules.message.constants;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @version
+ * @description: 金钱属性
+ * @author: tz
+ * @date: 2024-4-11 17:36:15
+ **/
+@Getter
+@AllArgsConstructor
+public enum MessageTypeConstants {
+
+    M_1(1,"系统消息"),
+    M_2(2,"服务消息"),
+    M_3(3,"订单消息"),
+    M_4(4,"保单消息"),
+    M_5(5,"佣金消息"),
+    M_6(6,"增员消息");
+
+    private final Integer code;
+
+    private final String desc;
+}

+ 44 - 0
src/main/java/com/ydtech/modules/message/controller/MessageSecretaryController.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.message.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.message.entity.MessageSecretary;
+import com.ydtech.modules.message.service.MessageSecretaryService;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Api(tags = "消息秘书")
+@RestController
+@RequestMapping("/api/message")
+@RequiredArgsConstructor
+public class MessageSecretaryController extends BaseController {
+
+    @Autowired
+    private MessageSecretaryService messageSecretaryService;
+
+    /**
+     * 获取用户消息列表
+     * @return
+     */
+    @GetMapping("/getUserMessage")
+    public HttpResult<List<MessageSecretary>> getUserMessage() {
+        return HttpResult.ok(messageSecretaryService.getUserMessageList(getUserId()));
+    }
+
+    /**
+     * 获取用户消息列表
+     */
+    @GetMapping("/getUserMessageList")
+    public HttpResult<List<MessageSecretary>> getUserMessageList(String msgType){
+        return HttpResult.ok(messageSecretaryService.getUserMessageList(getUserId(),msgType));
+    }
+
+
+}

+ 14 - 0
src/main/java/com/ydtech/modules/message/dao/MessageSecretaryMapper.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.message.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.message.entity.MessageSecretary;
+
+import java.util.List;
+
+/**
+ * 消息Mapper
+ */
+public interface MessageSecretaryMapper extends BaseMapper<MessageSecretary> {
+
+    List<MessageSecretary> getUserMessageList(String userId);
+}

+ 50 - 0
src/main/java/com/ydtech/modules/message/entity/MessageSecretary.java

@@ -0,0 +1,50 @@
+package com.ydtech.modules.message.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.joda.time.DateTime;
+
+import java.util.Date;
+
+/**
+ * 消息实体类
+ */
+@Data
+public class MessageSecretary {
+
+    @TableId(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "消息类型")
+    @TableField(value = "msg_type")
+    private String msgType;
+
+    @ApiModelProperty(value = "发送者")
+    @TableField(value = "from_user")
+    private String fromUser;
+
+    @ApiModelProperty(value = "接收者")
+    @TableField(value = "to_user")
+    private String toUser;
+
+    @ApiModelProperty(value = "内容")
+    @TableField(value = "content")
+    private String content;
+
+    @ApiModelProperty(value = "消息状态")
+    @TableField(value = "status")
+    private Integer status;
+
+    @ApiModelProperty(value = "消息创建时间")
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    @ApiModelProperty(value = "消息读取时间")
+    @TableField(value = "read_time")
+    private Date readTime;
+
+
+}

+ 37 - 0
src/main/java/com/ydtech/modules/message/service/MessageSecretaryService.java

@@ -0,0 +1,37 @@
+package com.ydtech.modules.message.service;
+
+
+import com.ydtech.modules.message.constants.MessageTypeConstants;
+import com.ydtech.modules.message.entity.MessageSecretary;
+
+import java.util.List;
+
+public interface MessageSecretaryService {
+
+    /**
+     * 获取消息列表  根据消息类型分组 返回每个类型的最新一条消息
+     * @param userId
+     * @return
+     */
+    List<MessageSecretary> getUserMessageList(String userId);
+
+    /**
+     * 获取用户消息列表  根据消息类型返回消息列表
+     * @param userId
+     * @param msgType
+     * @return
+     */
+    List<MessageSecretary> getUserMessageList(String userId,String msgType);
+
+    /**
+     * 添加一条信息消息
+     * @param messageTypeConstants
+     * @param fromUser
+     * @param toUser
+     * @param content
+     * @return
+     */
+    boolean addMessage(MessageTypeConstants messageTypeConstants, String fromUser, String toUser, String content);
+
+    boolean addMessage(MessageTypeConstants messageTypeConstants, String toUser, String content);
+}

+ 77 - 0
src/main/java/com/ydtech/modules/message/service/impl/MessageSecretaryServiceImpl.java

@@ -0,0 +1,77 @@
+package com.ydtech.modules.message.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.message.constants.MessageTypeConstants;
+import com.ydtech.modules.message.dao.MessageSecretaryMapper;
+import com.ydtech.modules.message.entity.MessageSecretary;
+import com.ydtech.modules.message.service.MessageSecretaryService;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.joda.time.DateTime;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class MessageSecretaryServiceImpl extends ServiceImpl<MessageSecretaryMapper,MessageSecretary> implements MessageSecretaryService {
+
+    /**
+     * 获取消息列表  根据消息类型分组 返回每个类型的最新一条消息
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<MessageSecretary> getUserMessageList(String userId) {
+        return baseMapper.getUserMessageList(userId);
+    }
+
+    /**
+     * 获取用户消息列表  根据消息类型返回消息列表
+     * @param userId
+     * @param msgType
+     * @return
+     */
+    @Override
+    public List<MessageSecretary> getUserMessageList(String userId, String msgType) {
+        return baseMapper.selectList(new LambdaQueryWrapper<MessageSecretary>()
+                .eq(MessageSecretary::getFromUser,userId)
+                .eq(MessageSecretary::getMsgType,msgType)
+                .orderByDesc(MessageSecretary::getCreateTime));
+    }
+
+    /**
+     * 添加消息
+     * @param messageTypeConstants
+     * @param fromUser
+     * @param toUser
+     * @param content
+     * @return
+     */
+    @Override
+    public boolean addMessage(MessageTypeConstants messageTypeConstants,String fromUser,String toUser,String content) {
+        MessageSecretary messageSecretary = new MessageSecretary();
+        messageSecretary.setMsgType(messageTypeConstants.getDesc());
+        messageSecretary.setFromUser(fromUser);
+        messageSecretary.setToUser(toUser);
+        messageSecretary.setContent(content);
+        messageSecretary.setStatus(0);
+        messageSecretary.setId(IdGenerate.nextId());
+        messageSecretary.setCreateTime(new Date());
+        return save(messageSecretary);
+    }
+
+
+    @Override
+    public boolean addMessage(MessageTypeConstants messageTypeConstants,String toUser,String content) {
+        MessageSecretary messageSecretary = new MessageSecretary();
+        messageSecretary.setMsgType(messageTypeConstants.getDesc());
+        messageSecretary.setFromUser("admin");
+        messageSecretary.setToUser(toUser);
+        messageSecretary.setContent(content);
+        messageSecretary.setStatus(0);
+        messageSecretary.setId(IdGenerate.nextId());
+        messageSecretary.setCreateTime(new Date());
+        return save(messageSecretary);
+    }
+}

+ 29 - 0
src/main/java/com/ydtech/modules/order/controller/InsOrdersController.java

@@ -3,12 +3,14 @@ package com.ydtech.modules.order.controller;
 import cn.keking.anti_reptile.annotation.AntiReptile;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.aop.request.RequestSingleParam;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.service.SysUserIsDialService;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.ins.model.InsOrdersExcelVo;
 import com.ydtech.modules.order.components.InsOrdersComponents;
 import com.ydtech.modules.order.constants.OrderLinkTypeConstants;
@@ -25,12 +27,15 @@ import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.BeanUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -305,4 +310,28 @@ public class InsOrdersController extends BaseController {
         }
         return HttpResult.ok(result);
     }
+
+    /**
+     * 获取快到期的保单
+     * @return
+     */
+    @GetMapping("/getExpirationInsure")
+    @ApiOperation(value = "获取快到期的保单")
+    public HttpResult getExpirationInsure(@RequestBody OrderExpirationQueryVo orderExpirationQueryVo){
+        Page page = buildPageRequest(orderExpirationQueryVo.getPageDto());
+        orderExpirationQueryVo.setUserid(getUserId());
+        return HttpResult.ok(insOrdersService.getExpirationInsure(page,orderExpirationQueryVo));
+    }
+
+
+    /**
+     * 获取快到期的保单的数量
+     * @return
+     */
+    @GetMapping("/getExpirationInsureCount")
+    @ApiOperation(value = "获取快到期的保单数量")
+    public HttpResult getExpirationInsureCount(@RequestBody OrderExpirationQueryVo orderExpirationQueryVo){
+        orderExpirationQueryVo.setUserid(getUserId());
+        return HttpResult.ok(insOrdersService.getExpirationInsureCount(orderExpirationQueryVo));
+    }
 }

+ 4 - 0
src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java

@@ -86,4 +86,8 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
      *  @Description: 通过年查询数据
      */
     OrderVo selectEntityByinsOrderNo(@Param("insOrderNo") String insOrderNo,@Param("timeFiltering")  String timeFiltering);
+
+    int getExpirationInsureCount(@Param("userId") String userId,@Param("startDate") String startTime,@Param("endDate") String endTime,@Param("isJq")Integer isJq);
+
+    Page<OrderExpirationVo> getExpirationInsure(@Param("page") Page page,@Param("userId") String userId,@Param("startDate") String startTime,@Param("endDate") String endTime,@Param("isJq")Integer isJq);
 }

+ 37 - 0
src/main/java/com/ydtech/modules/order/entity/vo/OrderExpirationQueryVo.java

@@ -0,0 +1,37 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.core.page.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName(autoResultMap = true)
+public class OrderExpirationQueryVo extends PageRequest {
+
+    private static final long serialVersionUID = 4995314938326862050L;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id")
+    private String userid;
+
+    /**
+     * 交强终保时间
+     */
+    @ApiModelProperty(value = "交强终保时间")
+    private String jqEndDate;
+
+    /**
+     * 商业终保时间
+     */
+    @ApiModelProperty(value = "商业终保时间")
+    private String syEndDate;
+
+
+}

+ 78 - 0
src/main/java/com/ydtech/modules/order/entity/vo/OrderExpirationVo.java

@@ -0,0 +1,78 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductCostsSave;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@TableName(autoResultMap = true)
+public class OrderExpirationVo implements Serializable {
+
+    private static final long serialVersionUID = 4995314938326862050L;
+    /**
+     * 订单号
+     */
+    @TableId(value = "orderno")
+    private String orderno;
+
+    /**
+     * 用户id
+     */
+    @TableField(value = "userid")
+    private String userid;
+
+    /**
+     * 用户名称
+     */
+    @TableField(value = "username")
+    private String username;
+
+    /**
+     * 协议id
+     */
+    @TableField(value = "agreeid")
+    private String agreeid;
+
+    /**
+     * 产品名称
+     */
+    @TableField(value = "product")
+    private String product;
+
+    /**
+     * 车牌号
+     */
+    @TableField(value = "licenseno")
+    private String licenseno;
+
+    @TableField(value = "company_id")
+    private String companyId;
+
+    /**
+     * 交强险结束时间
+     */
+    @TableField(value = "jqenddate")
+    private String jqenddate;
+
+    /**
+     * 商业险结束时间
+     */
+    @TableField(value = "syenddate")
+    private String syenddate;
+
+    @TableField(value = "difference")
+    private String difference;
+
+}

+ 12 - 0
src/main/java/com/ydtech/modules/order/service/InsOrdersService.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.InsOrdersExcelVo;
@@ -182,4 +183,15 @@ public interface InsOrdersService extends IService<InsOrders> {
      */
     String getMobileByOrderNo(String orderNo,String type);
 
+    /**
+     * 获取快到期的保单数量
+     * @return
+     */
+    int getExpirationInsureCount(OrderExpirationQueryVo orderExpirationQueryVo);
+
+    /**
+     * 获取快到期的保单
+     * @return
+     */
+    Page<OrderExpirationVo> getExpirationInsure(Page page,OrderExpirationQueryVo orderExpirationQueryVo);
 }

+ 15 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java

@@ -9,6 +9,8 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
 import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
+import com.ydtech.modules.message.constants.MessageTypeConstants;
+import com.ydtech.modules.message.service.MessageSecretaryService;
 import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
 import com.ydtech.modules.order.dao.InsOrdersMapper;
 import com.ydtech.modules.order.entity.InsAreaCompany;
@@ -63,6 +65,9 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
     @Autowired
     private InsFeeAuditService insFeeAuditService;
 
+    @Autowired
+    private MessageSecretaryService messageSecretaryService;
+
     public InsAreaCompanyServiceImpl(@Lazy InsOrdersService insOrdersService, InsOrdersTrackService insOrdersTrackService) {
         this.insOrdersService = insOrdersService;
         this.insOrdersTrackService = insOrdersTrackService;
@@ -94,6 +99,16 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
             //如果为自动审核 则自动进行审核
             insFeeAuditService.feeAudit( insAreaCompany.getOrderno(),insAreaCompany.getId(), true);
         }
+        //添加订单消息
+        if(insAreaCompany.getOrderstatus().equals("1")){
+            messageSecretaryService.addMessage(MessageTypeConstants.M_3,insAreaCompany.getUserId(),"订单号"+insAreaCompany.getOrderno()+"待核保");
+        }else if(insAreaCompany.getOrderstatus().equals("2")){
+            messageSecretaryService.addMessage(MessageTypeConstants.M_3,insAreaCompany.getUserId(),"订单号"+insAreaCompany.getOrderno()+"已核保待缴费");
+        }else if(insAreaCompany.getOrderstatus().equals("3")){
+            messageSecretaryService.addMessage(MessageTypeConstants.M_3,insAreaCompany.getUserId(),"订单号"+insAreaCompany.getOrderno()+"已经承保成功");
+        }else if(insAreaCompany.getOrderstatus().equals("4")) {
+            messageSecretaryService.addMessage(MessageTypeConstants.M_3, insAreaCompany.getUserId(), "订单号" + insAreaCompany.getOrderno() + "核保退回");
+        }
         insOrdersTrackService.addingTrajectories(insAreaCompany);
         insOrdersService.updateByOrderStatus(insAreaCompany);
     }

+ 43 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -81,6 +81,9 @@ import org.springframework.util.ObjectUtils;
 import javax.validation.constraints.NotBlank;
 import java.io.File;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -1165,4 +1168,44 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         return "";
     }
+
+    @Override
+    public int getExpirationInsureCount(OrderExpirationQueryVo orderExpirationQueryVo) {
+        LocalDateTime currentTime,oneMonthAgo;
+        Integer isJq = 1;
+        if(orderExpirationQueryVo.getJqEndDate() != null){
+            currentTime = LocalDateTime.parse(orderExpirationQueryVo.getJqEndDate(),DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+            oneMonthAgo = currentTime.minus(1, ChronoUnit.MONTHS);
+        }else if(orderExpirationQueryVo.getSyEndDate() != null){
+            currentTime = LocalDateTime.parse(orderExpirationQueryVo.getSyEndDate(),DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+            oneMonthAgo = currentTime.minus(1, ChronoUnit.MONTHS);
+            isJq = 2;
+        }else {
+            currentTime = LocalDateTime.now();
+            oneMonthAgo = currentTime.minus(1, ChronoUnit.MONTHS);
+        }
+        return baseMapper.getExpirationInsureCount(orderExpirationQueryVo.getUserid(),
+                currentTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
+                oneMonthAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),isJq);
+    }
+
+    @Override
+    public Page<OrderExpirationVo> getExpirationInsure(Page page,OrderExpirationQueryVo orderExpirationQueryVo) {
+        LocalDateTime currentTime,oneMonthAgo;
+        Integer isJq = 1;
+        if(orderExpirationQueryVo.getJqEndDate() != null){
+            currentTime = LocalDateTime.parse(orderExpirationQueryVo.getJqEndDate());
+            oneMonthAgo = currentTime.minus(1, ChronoUnit.MONTHS);
+        }else if(orderExpirationQueryVo.getSyEndDate() != null){
+            currentTime = LocalDateTime.parse(orderExpirationQueryVo.getSyEndDate());
+            oneMonthAgo = currentTime.minus(1, ChronoUnit.MONTHS);
+            isJq = 2;
+        }else {
+            currentTime = LocalDateTime.now();
+            oneMonthAgo = currentTime.minus(1, ChronoUnit.MONTHS);
+        }
+        return baseMapper.getExpirationInsure(page,orderExpirationQueryVo.getUserid(),
+                currentTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
+                oneMonthAgo.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),isJq);
+    }
 }

+ 16 - 0
src/main/resources/mapper/modules/message/MessageSecretaryMapper.xml

@@ -0,0 +1,16 @@
+<?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.ydtech.modules.message.dao.MessageSecretaryMapper">
+
+    <select id="getUserMessageList" resultType="com.ydtech.modules.message.entity.MessageSecretary">
+        SELECT id, msg_type, from_user, to_user, content, status, create_time, read_time
+        FROM (
+                 SELECT id, msg_type, from_user, to_user, content, status, create_time, read_time,
+                        ROW_NUMBER() OVER (PARTITION BY msg_type ORDER BY create_time DESC) as rn
+                 FROM message_secretary
+                 WHERE to_user = #{userId}
+             ) AS temp
+        WHERE rn = 1;
+    </select>
+
+</mapper>

+ 48 - 0
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -1234,4 +1234,52 @@
                 and  DATE_FORMAT(iac.signing_time, '%Y-%m') = #{timeFiltering}
             </if>
     </select>
+
+    <select id="getExpirationInsureCount" resultType="Integer">
+        SELECT
+            count( orderno ) AS count
+        FROM
+            ins_orders
+        WHERE
+            <if test="isJq == 1">
+                jqenddate BETWEEN #{startDate} AND #{endDate}
+            </if>
+            <if test="isJq == 2">
+                syenddate BETWEEN #{startDate} AND #{endDate}
+            </if>
+          AND orderstatus = 3
+          AND userid LIKE '${userId}%'
+    </select>
+
+    <select id="getExpirationInsure" resultType="com.ydtech.modules.order.entity.vo.OrderExpirationVo">
+        SELECT
+            ins_company,
+            orderno,
+            jqenddate,
+            syenddate,
+            productid,
+            product,
+            licenseno,
+            <if test="isJq == 1">
+                DATEDIFF( NOW(), jqenddate ) AS difference
+            </if>
+            <if test="isJq == 2">
+                DATEDIFF( NOW(), syenddate ) AS difference
+            </if>
+
+        FROM
+            ins_orders
+        WHERE
+            <if test="isJq == 1">
+                jqenddate BETWEEN #{startDate} AND #{endDate}
+            </if>
+            <if test="isJq == 2">
+                syenddate BETWEEN #{startDate} AND #{endDate}
+            </if>
+
+          AND orderstatus = 3
+          AND userid LIKE '${userId}%'
+        ORDER BY
+            jqenddate DESC
+    </select>
 </mapper>