Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

wks 6 mesi fa
parent
commit
b480b34d41
24 ha cambiato i file con 674 aggiunte e 21 eliminazioni
  1. 2 0
      authentication/src/main/java/com/jzg/AuthenticationApplication.java
  2. 6 1
      authentication/src/main/java/com/jzg/client/PartnerDistributionClient.java
  3. 9 0
      authentication/src/main/java/com/jzg/config/JzgTokenService.java
  4. 7 1
      authentication/src/main/java/com/jzg/controller/AppAuthController.java
  5. 11 0
      authentication/src/main/java/com/jzg/service/InitializePartnerCommissionService.java
  6. 26 0
      authentication/src/main/java/com/jzg/service/impl/InitializePartnerCommissionServiceImpl.java
  7. 115 0
      commons/src/main/java/com/jzg/commons/entity/rights/po/InsOrderRights.java
  8. 129 0
      commons/src/main/java/com/jzg/commons/entity/rights/po/InsOrderRightsPackage.java
  9. 23 0
      commons/src/main/java/com/jzg/commons/entity/search/SearchHistory.java
  10. 1 0
      gateway/src/main/java/com/jzg/config/CorsConfig.java
  11. 10 4
      partner/src/main/java/com/jzg/controller/DistributionController.java
  12. 1 1
      partner/src/main/java/com/jzg/controller/PartnerUserController.java
  13. 2 0
      partner/src/main/java/com/jzg/entity/PartnerKickbackChange.java
  14. 5 2
      partner/src/main/java/com/jzg/service/Impl/PartnerUserServiceImpl.java
  15. 1 1
      partner/src/main/java/com/jzg/service/PartnerUserService.java
  16. 1 1
      partner/src/main/resources/mapper/PartnerUserMapper.xml
  17. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/PartnerDistributionClient.java
  18. 99 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/components/SearchHistoryRedisService.java
  19. 70 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/SearchHistoryController.java
  20. 27 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrderRightsMapper.java
  21. 21 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrderRightsPackageMapper.java
  22. 5 9
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  23. 53 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsMapper.xml
  24. 49 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsPackageMapper.xml

+ 2 - 0
authentication/src/main/java/com/jzg/AuthenticationApplication.java

@@ -5,10 +5,12 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableAsync;
 
 @EnableDiscoveryClient
 @SpringBootApplication
 @EnableFeignClients
+@EnableAsync
 public class AuthenticationApplication {
 
     public static void main(String[] args) {

+ 6 - 1
authentication/src/main/java/com/jzg/client/PartnerDistributionClient.java

@@ -4,13 +4,18 @@ package com.jzg.client;
 import com.jzg.commons.core.page.HttpResult;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
 
-@FeignClient(name = "jzg-partner",url = "http://localhost:8087")
+@FeignClient(name = "jzg-partner",url = "${feign.client.jzg-partner.url}")
 public interface PartnerDistributionClient {
 
 
     @GetMapping("partner/isTherePartner")
     HttpResult<Boolean> isTherePartner(@RequestParam String userId,@RequestParam String systemCode);
 
+
+    @GetMapping("partnerDistribution/initializeCommissionDetails")
+    HttpResult<Boolean> initializeCommissionDetails(@RequestParam String userId,@RequestHeader("Authorization") String token);
+
 }

+ 9 - 0
authentication/src/main/java/com/jzg/config/JzgTokenService.java

@@ -41,6 +41,15 @@ public class JzgTokenService {
         return !Objects.isNull(o) ? o.toString() : null;
     }
 
+    public String getTokenByUsername(String uname) {
+        String pattern = TOKEN_PREFIX + uname + "*";
+        RKeys keys = redissonClient.getKeys();
+        for (String key : keys.getKeysByPattern(pattern)) {
+            return key;
+        }
+        return null;
+    }
+
     //生成token
     public String generateToken(String uname){
         String prefix = TOKEN_PREFIX + uname + ":";

+ 7 - 1
authentication/src/main/java/com/jzg/controller/AppAuthController.java

@@ -3,6 +3,7 @@ package com.jzg.controller;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.jzg.client.PartnerDistributionClient;
+import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.po.SysUserJzgInfo;
 import com.jzg.commons.exception.SystemException;
@@ -15,6 +16,7 @@ import com.jzg.entity.vo.AppSmsCodeLogin;
 import com.jzg.entity.vo.ModifyAppLoginVo;
 import com.jzg.handler.JzgAuthenticationSuccessHandler;
 import com.jzg.mapper.SysUserJzgInfoMapper;
+import com.jzg.service.InitializePartnerCommissionService;
 import com.jzg.service.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
@@ -44,7 +46,7 @@ import java.util.regex.Pattern;
 @Tag(name="APP授权接口")
 @RestController
 @RequestMapping("appAuth")
-public class AppAuthController {
+public class AppAuthController extends BaseController {
 
     @Autowired
     private JzgTokenService tokenStore;
@@ -64,6 +66,9 @@ public class AppAuthController {
     @Autowired
     private PartnerDistributionClient partnerDistributionClient;
 
+    @Autowired
+    private InitializePartnerCommissionService partnerCommissionService;
+
     @Operation(summary = "登录接口",
             description = "登录接口",
             responses = {
@@ -100,6 +105,7 @@ public class AppAuthController {
                 }
             }
             modifyPass(loginFormVo);
+            partnerCommissionService.initializePartnerCommission(sysUserJzgInfo.getId(),tokenStore.getTokenByUsername(loginFormVo.getMobile()));
         }catch (Exception e){
             throw new ServletException("当前用户不存在或已注销");
         }

+ 11 - 0
authentication/src/main/java/com/jzg/service/InitializePartnerCommissionService.java

@@ -0,0 +1,11 @@
+package com.jzg.service;
+
+public interface InitializePartnerCommissionService {
+
+
+
+
+    void initializePartnerCommission(String userId,String token);
+
+
+}

+ 26 - 0
authentication/src/main/java/com/jzg/service/impl/InitializePartnerCommissionServiceImpl.java

@@ -0,0 +1,26 @@
+package com.jzg.service.impl;
+
+import com.jzg.client.PartnerDistributionClient;
+import com.jzg.service.InitializePartnerCommissionService;
+import jakarta.annotation.Resource;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class InitializePartnerCommissionServiceImpl implements InitializePartnerCommissionService {
+
+
+    @Resource
+    private PartnerDistributionClient distributionClient;
+
+    @Async
+    @Override
+    public void initializePartnerCommission(String userId,String token) {
+        try {
+            distributionClient.initializeCommissionDetails(userId,token);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 115 - 0
commons/src/main/java/com/jzg/commons/entity/rights/po/InsOrderRights.java

@@ -0,0 +1,115 @@
+package com.jzg.commons.entity.rights.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 类描述:订单和权益券数据持久PO
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/3/13 16:46
+ */
+@Data
+@TableName(value = "ins_order_rights")
+@Schema(description = "订单和权益券关联表")
+public class InsOrderRights {
+
+    @TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "订单ID")
+    private String orderId;
+    @Schema(description = "权益券ID")
+    private String rightsInfoId;
+    /**类型(1.兑换券 2.折扣卷 3.抵现劵)*/
+    @Schema(description= "类型(1.兑换券 2.折扣卷 3.抵现劵)")
+    private String type;
+    /**权益名称*/
+    @Schema(description = "权益名称")
+    private String rightsName;
+    /**分类*/
+    @Schema(description = "分类")
+    private String classify;
+    /**折扣值*/
+    @Schema(description = "折扣值")
+    private String rebate;
+    /**抵现金额*/
+    @Schema(description = "抵现金额")
+    private java.math.BigDecimal amount;
+    /**权益图片*/
+    @Schema(description = "权益图片")
+    private String rightsPicture;
+    /**使用有限期类型(1.用户领取后生效2.三方用户赠送时间起3.固定时间段4.长期可用)*/
+    @Schema(description = "使用有限期类型(1.用户领取后生效2.三方用户赠送时间起3.固定时间段4.长期可用)")
+    private String useCondition;
+    /**天数*/
+    @Schema(description = "天数")
+    private Integer dayNum;
+    /**开始时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @Schema(description = "开始时间")
+    private Date startTime;
+    /**结束时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @Schema(description = "结束时间")
+    private Date endTime;
+    /**市场售价*/
+    @Schema(description = "市场售价")
+    private java.math.BigDecimal marketPrice;
+    /**协议价*/
+    @Schema(description = "协议价")
+    private java.math.BigDecimal contractRate;
+    /**三方结算价格*/
+    @Schema(description = "三方结算价格")
+    private java.math.BigDecimal settlePrice;
+    /**服务说明*/
+    @Schema(description = "服务说明")
+    private String description;
+
+    /**是否删除(0,:否 1:是)*/
+    @Schema(description = "是否删除(0,:否 1:是)")
+    private Integer delFlag;
+    /**创建者*/
+    @Schema(description = "创建者")
+    private String createBy;
+    /**创建时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间")
+    private Date createTime;
+    /**修改者*/
+    @Schema(description = "修改者")
+    private String updateBy;
+    /**修改时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "修改时间")
+    private Date updateTime;
+
+    @Schema(description = "权益卷状态(1:上架,2:下架 )")
+    private Integer rightsStatus;
+
+    @Schema(description = "权益券数量")
+    private Integer rightsCount;
+    @Schema(description = "权益类型:1-权益")
+    private Integer rightsType;
+    @Schema(description = "接收人类型 1 车主 2 投保人 3 被保人")
+    private Integer receiverType;
+
+    @Schema(description = "接收人姓名")
+    private String receiverName;
+
+    @Schema(description = "接收人手机号")
+    private String receiverMobile;
+}

+ 129 - 0
commons/src/main/java/com/jzg/commons/entity/rights/po/InsOrderRightsPackage.java

@@ -0,0 +1,129 @@
+package com.jzg.commons.entity.rights.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 类描述:订单和权益套餐关联表
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/3/13 11:05
+ */
+@Data
+@TableName(value = "ins_order_rights_package")
+@Schema(description = "订单和权益套餐关联表")
+public class InsOrderRightsPackage {
+    @Schema(description = "主键")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
+
+    @Schema(description = "订单ID")
+    private String orderId;
+    @Schema(description = "权益套餐id")
+    private String rightsPackageId;
+    @Schema(description = "权益套餐名称")
+    private String equityPackageName;
+
+    /**费用最大值*/
+    @Schema(description = "费用最大值")
+    private BigDecimal costPriceMax;
+    /**费用最小值*/
+    @Schema(description = "费用最小值")
+    private BigDecimal costPriceMin;
+
+
+
+    /**市场价*/
+    @Schema(description = "市场价")
+    private BigDecimal marketPrice;
+
+
+    /**协议价*/
+    @Schema(description= "协议价")
+    private BigDecimal agreementPrice;
+    /**三方结算价*/
+    @Schema(description = "三方结算价")
+    private BigDecimal threeSettlementPrice;
+
+    @Schema(description = "套餐总价")
+    private BigDecimal totalPackagePrice;
+    /**套餐售价*/
+    @Schema(description = "套餐售价")
+    private BigDecimal packagePrice;
+    /**行业id*/
+    @Schema(description = "行业id")
+    private String industryId;
+    /**是否删除(0,:否 1:是)*/
+    @Schema(description = "是否删除(0,:否 1:是)")
+    private Integer delFlag;
+    /**创建者*/
+    @Schema(description = "创建者")
+    private String createBy;
+    /**创建时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间")
+    private Date createTime;
+    /**修改者*/
+    @Schema(description = "修改者")
+    private String updateBy;
+    /**修改时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "修改时间")
+    private Date updateTime;
+
+    /**是否上架(0 未上架  1  上架)*/
+    @Schema(description = "是否上架(0 未上架  1  上架)")
+    private String status;
+    @Schema(description = "第三方用户id")
+    private String threeUserId;
+//    /**总数*/
+//    @Schema(description = "权益包总数")
+//    @TableField(exist = false)
+//    private Integer totalNumber;
+
+    /**套餐id套餐名称*/
+    @Schema(description = "套餐id套餐名称")
+    @TableField(exist = false)
+    private String selectNameId;
+
+
+
+    /**第三方用户id*/
+    @Schema(description = "第三方用户id")
+    @TableField(exist = false)
+    private List<String> threeUserIdList;
+
+
+    @Schema(description  = "渠道用户id")
+    @TableField(exist = false)
+    private List<String> channelIds;
+
+    @Schema(description = "权益套餐数量")
+    private Integer rightsCount;
+
+    @Schema(description = "权益类型:2-权益包")
+    private Integer rightsType;
+
+    @Schema(description = "接收人类型 1 车主 2 投保人 3 被保人")
+    private Integer receiverType;
+
+    @Schema(description = "接收人姓名")
+    private String receiverName;
+
+    @Schema(description = "接收人手机号")
+    private String receiverMobile;
+
+}

+ 23 - 0
commons/src/main/java/com/jzg/commons/entity/search/SearchHistory.java

@@ -0,0 +1,23 @@
+package com.jzg.commons.entity.search;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 搜索记录实体
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SearchHistory implements Serializable {
+    // 搜索内容
+    private String content;
+    // 搜索时间(格式:yyyy-MM-dd HH:mm:ss)
+    private LocalDateTime searchTime;
+    // 搜索类型
+    private String groupType;
+}

+ 1 - 0
gateway/src/main/java/com/jzg/config/CorsConfig.java

@@ -39,6 +39,7 @@ public class CorsConfig {
         corsConfiguration.addAllowedOrigin("http://192.168.0.18:9001");
         corsConfiguration.addAllowedOrigin("http://192.168.0.20:9002");
         corsConfiguration.addAllowedOrigin("http://192.168.0.20:81");
+        corsConfiguration.addAllowedOrigin("http://192.168.0.59:9000");
         // 允许的方法
         corsConfiguration.addAllowedMethod("*");
         // 允许的头信息

+ 10 - 4
partner/src/main/java/com/jzg/controller/DistributionController.java

@@ -1,16 +1,15 @@
 package com.jzg.controller;
 
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.vo.DistributionVo;
 import com.jzg.utils.DistributionUtils;
+import com.jzg.utils.UpdateRatioUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 @Slf4j
 @RestController
@@ -34,4 +33,11 @@ public class DistributionController extends BaseController {
 
 
 
+    @GetMapping("initializeCommissionDetails")
+    public void initializeCommissionDetails(@RequestParam String userId){
+        SpringUtil.getBean(UpdateRatioUtils.class).loginBefore(userId);
+        SpringUtil.getBean(UpdateRatioUtils.class).loginChange(userId);
+    }
+
+
 }

+ 1 - 1
partner/src/main/java/com/jzg/controller/PartnerUserController.java

@@ -171,7 +171,7 @@ public class PartnerUserController extends BaseController {
      */
     @GetMapping("getUserGradeList")
     public HttpResult getUserGradeList(@RequestParam(value = "userId",required = false) String userId) {
-        return HttpResult.ok(partnerUserService.getUserGradeList(userId));
+        return HttpResult.ok(partnerUserService.getUserGradeList(userId,getToken()));
     }
 
     /**

+ 2 - 0
partner/src/main/java/com/jzg/entity/PartnerKickbackChange.java

@@ -1,6 +1,7 @@
 package com.jzg.entity;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jzg.commons.core.base.PartnerBaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -41,6 +42,7 @@ public class PartnerKickbackChange extends PartnerBaseModel {
     private String changeReason;
 
     @Schema(description = "变更时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date changeTime;
 
 

+ 5 - 2
partner/src/main/java/com/jzg/service/Impl/PartnerUserServiceImpl.java

@@ -361,9 +361,10 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
 
 
     @Override
-    public List<String> getUserGradeList(String userId) {
+    public List<String> getUserGradeList(String userId,String token) {
+        SysUserJzgInfo sysUserJzgInfo = getSysUserJzgInfo(userId, token);
         QueryWrapper<PartnerUser> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("user_id", userId);
+        queryWrapper.eq("user_id", sysUserJzgInfo.getId());
         List<PartnerUser> partnerUsers = baseMapper.selectList(queryWrapper);
         return partnerUsers.stream()
                 .map(user -> String.valueOf(user.getGrade()))
@@ -404,6 +405,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                             partnerUser.setGrade(Integer.valueOf(s));
                             partnerUser.setReferrerId(partnerUsers.getUserId());
                             partnerUser.setCreateTime(LocalDateTime.now());
+                            partnerUser.setStatus(partnerUsers.isStatus());
                             baseMapper.insert(partnerUser);
                         }
                     }
@@ -1632,6 +1634,7 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
                 partnerUser.setReferrerId(referrerId);
                 partnerUser.setCreateTime(LocalDateTime.now());
                 this.save(partnerUser);
+                SpringUtil.getBean(UpdateRatioUtils.class).before(partnerUser.getUserId(),partnerUser.getGrade());
             }else {
                 if (CollectionUtils.isEmpty(gradeList)) {
                     throw new SystemException("请选择合伙人等级");

+ 1 - 1
partner/src/main/java/com/jzg/service/PartnerUserService.java

@@ -71,7 +71,7 @@ public interface PartnerUserService extends IService<PartnerUser> {
 
     SysPartnerAccount newGetFee(String userId,String token);
 
-    List<String> getUserGradeList(String userId);
+    List<String> getUserGradeList(String userId,String token);
 
     HttpResult addUserIdentity(Map<String, Object> map,String token);
 

+ 1 - 1
partner/src/main/resources/mapper/PartnerUserMapper.xml

@@ -937,7 +937,7 @@ SELECT
 
 
     <select id="queryByUserId" resultType="com.jzg.entity.PartnerUser">
-        SELECT * from  partner_user where user_id = #{referrerId} order by grade desc
+        SELECT * from  partner_user where grade &lt; 5 and user_id = #{referrerId} order by grade desc
     </select>
 
 

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/client/PartnerDistributionClient.java

@@ -8,7 +8,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
-@FeignClient(name = "jzg-partner",url = "http://localhost:8087")
+@FeignClient(name = "jzg-partner",url = "${feign.client.jzg-partner.url}")
 public interface PartnerDistributionClient {
 
 

+ 99 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/components/SearchHistoryRedisService.java

@@ -0,0 +1,99 @@
+package com.jzg.quotation.summary.components;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.jzg.commons.entity.search.SearchHistory;
+import jakarta.annotation.Resource;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+import java.util.concurrent.TimeUnit;
+import java.time.LocalDateTime;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Component
+public class SearchHistoryRedisService {
+
+    // 最大记录数
+    private static final int MAX_HISTORY_COUNT = 20;
+    // Redis Key前缀
+    private static final String REDIS_KEY_PREFIX = "order:history:search:";
+
+    long expireSeconds = 30L * 24 * 60 * 60;
+
+    @Resource
+    private StringRedisTemplate stringRedisTemplate;
+
+    /**
+     * 保存/更新搜索记录
+     * @param groupType 分组类型
+     * @param content 搜索内容
+     */
+    public void saveOrUpdateSearchHistory(String userKey,String groupType, String content) {
+        String redisKey = REDIS_KEY_PREFIX + userKey;
+        String uniqueKey = content.trim();
+        SearchHistory history = new SearchHistory(uniqueKey, LocalDateTime.now(),groupType);
+        String historyJson = JSONObject.toJSONString(history);
+        Boolean exists = stringRedisTemplate.opsForHash().hasKey(redisKey, uniqueKey);
+        if (exists != null && exists) {
+            stringRedisTemplate.opsForHash().put(redisKey, uniqueKey, historyJson);
+        } else {
+            checkAndRemoveOldest(redisKey);
+            stringRedisTemplate.opsForHash().put(redisKey, uniqueKey, historyJson);
+        }
+        stringRedisTemplate.expire(redisKey, expireSeconds, TimeUnit.SECONDS);
+    }
+
+    /**
+     * 检查并删除最早的记录
+     * @param redisKey
+     */
+    private void checkAndRemoveOldest(String redisKey) {
+        Map<Object, Object> historyMap = stringRedisTemplate.opsForHash().entries(redisKey);
+        if (historyMap.size() >= MAX_HISTORY_COUNT) {
+            List<SearchHistory> historyList = historyMap.values().stream()
+                    .map(obj -> JSONObject.parseObject(obj.toString(), SearchHistory.class))
+                    .sorted(Comparator.comparing(SearchHistory::getSearchTime))
+                    .collect(Collectors.toList());
+            if (!historyList.isEmpty()) {
+                String oldestKey = historyList.get(0).getContent();
+                stringRedisTemplate.opsForHash().delete(redisKey, oldestKey);
+            }
+        }
+    }
+
+    /**
+     * 获取指定用户搜索记录(按时间倒序)
+     * @param userId
+     * @return 排序后的搜索记录列表
+     */
+    public List<SearchHistory> getSearchHistory(String userId,String systemCode) {
+        String redisKey = REDIS_KEY_PREFIX + userId + ":" + systemCode;
+        Map<Object, Object> historyMap = stringRedisTemplate.opsForHash().entries(redisKey);
+        return historyMap.values().stream()
+                .map(obj -> JSONObject.parseObject(obj.toString(), SearchHistory.class))
+                .sorted(Comparator.comparing(SearchHistory::getSearchTime).reversed())
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 删除指定的单条记录
+     * @param userId 分组类型
+     * @param content 搜索内容
+     */
+    public void deleteSingleHistory(String userId, String content) {
+        String redisKey = REDIS_KEY_PREFIX + userId;
+        stringRedisTemplate.opsForHash().delete(redisKey, content.trim());
+    }
+
+    /**
+     * 清空指定用户所有记录
+     * @param userId
+     */
+    public void clearAllHistory(String userId,String systemCode) {
+        String redisKey = REDIS_KEY_PREFIX +  userId + ":" + systemCode;
+        stringRedisTemplate.delete(redisKey);
+    }
+
+}

+ 70 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/SearchHistoryController.java

@@ -0,0 +1,70 @@
+package com.jzg.quotation.summary.controller;
+
+
+import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.search.SearchHistory;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.quotation.summary.components.SearchHistoryRedisService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Tag(name = "订单搜索记录")
+@RestController
+@RequestMapping("/order/searchHistory")
+public class SearchHistoryController extends BaseController {
+
+
+    private final SearchHistoryRedisService searchHistoryRedisService;
+
+    public SearchHistoryController(SearchHistoryRedisService searchHistoryRedisService) {
+        this.searchHistoryRedisService = searchHistoryRedisService;
+    }
+
+    @Operation(summary = "保存搜索记录")
+    @GetMapping("/saveHistory")
+    public HttpResult saveHistory(@RequestParam String groupType, @RequestParam String content) {
+        try {
+            String userId = getUserId();
+            String appSystemCode = getAppSystemCode();
+            if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(appSystemCode)){
+                return HttpResult.ok();
+            }
+            searchHistoryRedisService.saveOrUpdateSearchHistory(userId + ":" + appSystemCode,groupType, content);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return HttpResult.ok();
+    }
+
+    @Operation(summary = "查询搜索记录")
+    @GetMapping("/getHistory")
+    public HttpResult getHistory() {
+        List<SearchHistory> searchHistory = new ArrayList<>();
+        try {
+            searchHistory = searchHistoryRedisService.getSearchHistory(getUserId(),getAppSystemCode());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return HttpResult.ok(searchHistory);
+    }
+
+    @Operation(summary = "清空指定用户所有记录")
+    @GetMapping("/clearAllHistory")
+    public HttpResult clearAllHistory() {
+        try {
+            searchHistoryRedisService.clearAllHistory(getUserId(),getAppSystemCode());
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return HttpResult.ok();
+    }
+
+}

+ 27 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrderRightsMapper.java

@@ -0,0 +1,27 @@
+package com.jzg.quotation.summary.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.rights.po.InsOrderRights;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 类描述:订单权益关联关系查询持久层mapper
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/3/13 9:10
+ */
+@Mapper
+public interface InsOrderRightsMapper extends BaseMapper<InsOrderRights> {
+    List<InsOrderRights> queryByOrderNo(@Param("orderNo") String orderNo);
+
+    /**
+     * 根据订单删除权益
+     * @param orderNo
+     * @return
+     */
+    Integer deleteByOrderNo(@Param("orderNo") String orderNo);
+}

+ 21 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrderRightsPackageMapper.java

@@ -0,0 +1,21 @@
+package com.jzg.quotation.summary.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.commons.entity.rights.po.InsOrderRightsPackage;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface InsOrderRightsPackageMapper extends BaseMapper<InsOrderRightsPackage> {
+    List<InsOrderRightsPackage> queryByOrderNo(@Param("orderNo") String orderNo);
+
+
+    /**
+     * 根据订单删除权益
+     * @param orderNo
+     * @return
+     */
+    Integer deleteByOrderNo(@Param("orderNo") String orderNo);
+}

+ 5 - 9
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -47,15 +47,12 @@ import com.jzg.quotation.commons.client.PlatformClient;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
 import com.jzg.quotation.summary.consumer.template.OrderMessageTemplate;
 import com.jzg.quotation.summary.entity.bo.DataValueBo;
-import com.jzg.quotation.summary.entity.bo.StatDateCountBo;
 import com.jzg.quotation.summary.entity.vo.*;
 import com.jzg.quotation.summary.mapper.*;
 import com.jzg.quotation.summary.service.*;
 import com.jzg.quotation.summary.state.listener.OrderStateListener;
 import com.jzg.quotation.summary.utils.StatisticsUtil;
 import jakarta.servlet.http.HttpServletRequest;
-import lombok.AllArgsConstructor;
-import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
 import org.apache.commons.beanutils.BeanUtils;
@@ -69,7 +66,6 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.net.URL;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -1236,11 +1232,11 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             this.orderStatusMessage(insOrders,
                     insOrdersCarInfo, costs,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_6);
-//            DistributionVo vo = new DistributionVo();
-//            vo.setInsOrders(insOrders);
-//            vo.setOrdersCosts(costs);
-//            vo.setLicenseNo(insOrdersCarInfo.getLicenseNo());
-//            partnerDistributionClient.distribution(vo);
+            DistributionVo vo = new DistributionVo();
+            vo.setInsOrders(insOrders);
+            vo.setOrdersCosts(costs);
+            vo.setLicenseNo(insOrdersCarInfo.getLicenseNo());
+            partnerDistributionClient.distribution(vo);
         } else {
             insOrders.setErrorMessage(orderStatusResultVo.getErrorMsg());
         }

+ 53 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsMapper.xml

@@ -0,0 +1,53 @@
+<?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.jzg.quotation.summary.mapper.InsOrderRightsMapper">
+
+    <resultMap id="BaseResultMap" type="com.jzg.commons.entity.rights.po.InsOrderRights">
+        <id property="id" column="id" jdbcType="BIGINT"/>
+        <result property="orderId" column="order_id" jdbcType="VARCHAR"/>
+        <result property="rightsInfoId" column="rights_info_id" jdbcType="VARCHAR"/>
+        <result property="type" column="type" jdbcType="VARCHAR"/>
+        <result property="rightsName" column="rights_name" jdbcType="VARCHAR"/>
+        <result property="classify" column="classify" jdbcType="VARCHAR"/>
+        <result property="rebate" column="rebate" jdbcType="VARCHAR"/>
+        <result property="amount" column="amount" jdbcType="VARCHAR"/>
+        <result property="rightsPicture" column="rights_picture" jdbcType="VARCHAR"/>
+        <result property="useCondition" column="use_condition" jdbcType="VARCHAR"/>
+        <result property="dayNum" column="day_num" jdbcType="INTEGER"/>
+        <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
+        <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
+        <result property="marketPrice" column="market_price" jdbcType="VARCHAR"/>
+        <result property="contractRate" column="contract_rate" jdbcType="VARCHAR"/>
+        <result property="settlePrice" column="settle_price" jdbcType="VARCHAR"/>
+        <result property="description" column="description" jdbcType="VARCHAR"/>
+        <result property="delFlag" column="del_flag" jdbcType="TINYINT"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="VARCHAR"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="rightsStatus" column="rights_status" jdbcType="TINYINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+            id,order_id,rights_info_id,
+            rights_name,
+            amount,rights_type,rights_count,receiver_type,receiver_name,receiver_mobile
+    </sql>
+    <select id="queryByOrderNo" resultType="com.jzg.commons.entity.rights.po.InsOrderRights">
+        SELECT <include refid="Base_Column_List"/>
+        FROM ins_order_rights
+        <where>
+            <if test="orderNo != null and orderNo != ''">
+                and order_id = #{orderNo}
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+    <!-- 根据订单ID删除权益券 -->
+    <delete id="deleteByOrderNo" parameterType="string">
+        DELETE FROM ins_order_rights
+        WHERE order_id = #{orderNo}
+    </delete>
+</mapper>

+ 49 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrderRightsPackageMapper.xml

@@ -0,0 +1,49 @@
+<?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.jzg.quotation.summary.mapper.InsOrderRightsPackageMapper">
+
+    <resultMap id="BaseResultMap" type="com.jzg.commons.entity.rights.po.InsOrderRightsPackage">
+        <id property="id" column="id" jdbcType="BIGINT"/>
+        <result property="orderId" column="order_id" jdbcType="VARCHAR"/>
+        <result property="rightsPackageId" column="rights_package_id" jdbcType="VARCHAR"/>
+        <result property="equityPackageName" column="equity_package_name" jdbcType="VARCHAR"/>
+        <result property="costPriceMin" column="cost_price_max" jdbcType="VARCHAR"/>
+        <result property="costPriceMin" column="cost_price_min" jdbcType="VARCHAR"/>
+        <result property="marketPrice" column="market_price" jdbcType="VARCHAR"/>
+        <result property="agreementPrice" column="agreement_price" jdbcType="VARCHAR"/>
+        <result property="threeSettlementPrice" column="three_settlement_price" jdbcType="VARCHAR"/>
+        <result property="totalPackagePrice" column="total_package_price" jdbcType="VARCHAR"/>
+        <result property="packagePrice" column="package_price" jdbcType="VARCHAR"/>
+        <result property="industryId" column="industry_id" jdbcType="VARCHAR"/>
+        <result property="delFlag" column="del_flag" jdbcType="TINYINT"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="status" column="status" jdbcType="VARCHAR"/>
+        <result property="threeUserId" column="three_user_id" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+            id,order_id,rights_package_id,
+            equity_package_name,
+            package_price,rights_type,rights_count,receiver_type,receiver_name,receiver_mobile
+    </sql>
+    <select id="queryByOrderNo" resultType="com.jzg.commons.entity.rights.po.InsOrderRightsPackage">
+        SELECT <include refid="Base_Column_List"/>
+        FROM ins_order_rights_package
+        <where>
+            <if test="orderNo != null and orderNo != ''">
+                and order_id = #{orderNo}
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+    <!-- 根据订单ID删除权益券 -->
+    <delete id="deleteByOrderNo" parameterType="string">
+        DELETE FROM ins_order_rights_package
+        WHERE order_id = #{orderNo}
+    </delete>
+</mapper>