Переглянути джерело

Merge remote-tracking branch 'origin/test' into test

# Conflicts:
#	src/main/resources/application-pre.yml
#	src/main/resources/application-prod.yml
#	src/main/resources/application-test.yml
xuqiang 1 рік тому
батько
коміт
3ce3a7aa9b
100 змінених файлів з 3159 додано та 588 видалено
  1. 5 0
      pom.xml
  2. 2 0
      src/main/java/com/ydtech/components/TokenInterceptor.java
  3. 125 0
      src/main/java/com/ydtech/config/RabbitMQConfig.java
  4. 14 1
      src/main/java/com/ydtech/constants/RabbitMqEnum.java
  5. 3 1
      src/main/java/com/ydtech/constants/enums/InsurKind.java
  6. 2 2
      src/main/java/com/ydtech/modules/admin/controller/PushOrder.java
  7. 10 6
      src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java
  8. 6 2
      src/main/java/com/ydtech/modules/admin/controller/SysQyWeChatController.java
  9. 1 1
      src/main/java/com/ydtech/modules/admin/controller/SysUserBankController.java
  10. 2 2
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  11. 16 0
      src/main/java/com/ydtech/modules/admin/controller/SysUserLinkAreaController.java
  12. 66 0
      src/main/java/com/ydtech/modules/admin/controller/deptBalance/DeptBalanceController.java
  13. 9 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  14. 67 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysPartnerConsoleDto.java
  15. 34 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysPartnerInfoConsoleDto.java
  16. 175 0
      src/main/java/com/ydtech/modules/admin/model/po/CustVehiclePolicyInfo.java
  17. 7 0
      src/main/java/com/ydtech/modules/admin/model/po/SysQyWeChat.java
  18. 23 0
      src/main/java/com/ydtech/modules/admin/model/vo/DeptBalanceVo.java
  19. 4 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysPremiumDetailsVo.java
  20. 27 0
      src/main/java/com/ydtech/modules/admin/service/DeptBalanceService.java
  21. 1 1
      src/main/java/com/ydtech/modules/admin/service/SysUserBankCardService.java
  22. 8 0
      src/main/java/com/ydtech/modules/admin/service/SysUserLinkAreaService.java
  23. 4 0
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  24. 753 48
      src/main/java/com/ydtech/modules/admin/service/impl/DeptBalanceServiceImpl.java
  25. 36 1
      src/main/java/com/ydtech/modules/admin/service/impl/SysDeptServiceImpl.java
  26. 119 197
      src/main/java/com/ydtech/modules/admin/service/impl/SysPartnerServiceImpl.java
  27. 9 6
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserBankCardServiceImpl.java
  28. 14 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserLinkAreaServiceImpl.java
  29. 77 11
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  30. 16 1
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  31. 4 1
      src/main/java/com/ydtech/modules/admin/utils/SliceUpDateUtil.java
  32. 42 29
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  33. 4 4
      src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java
  34. 7 1
      src/main/java/com/ydtech/modules/fnc/dao/InsPlyIncomeMapper.java
  35. 7 1
      src/main/java/com/ydtech/modules/fnc/service/InsPlyIncomeService.java
  36. 10 0
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java
  37. 1 1
      src/main/java/com/ydtech/modules/ins/model/vo/QuoteRespVo.java
  38. 35 0
      src/main/java/com/ydtech/modules/inv/utils/LocalDateTimeUtils.java
  39. 2 1
      src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java
  40. 2 1
      src/main/java/com/ydtech/modules/order/components/zijin/ZijinDuplicateInsuranceComponents.java
  41. 6 1
      src/main/java/com/ydtech/modules/order/components/zijin/ZijinRequestApiComponents.java
  42. 2 2
      src/main/java/com/ydtech/modules/order/constants/QuoteNumberConstant.java
  43. 31 0
      src/main/java/com/ydtech/modules/order/controller/ExternalOrderController.java
  44. 17 7
      src/main/java/com/ydtech/modules/order/controller/InsOrderReadPdfController.java
  45. 7 0
      src/main/java/com/ydtech/modules/order/controller/QuoteConfigController.java
  46. 8 0
      src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java
  47. 2 0
      src/main/java/com/ydtech/modules/order/dao/SysQuoteUserConfigAppendMapper.java
  48. 1 2
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  49. 6 0
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompanyExternalFee.java
  50. 1 1
      src/main/java/com/ydtech/modules/order/entity/InsBusinessInsurance.java
  51. 1 1
      src/main/java/com/ydtech/modules/order/entity/api/bohai/response/UnderwritingResponse.java
  52. 1 0
      src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangAccuracyCalculateRequest.java
  53. 5 1
      src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangGetNonVehicleProductsRequest.java
  54. 12 0
      src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerQuoteResponse.java
  55. 5 1
      src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteVo.java
  56. 8 0
      src/main/java/com/ydtech/modules/order/entity/vo/ExternalOrderFeeVo.java
  57. 17 2
      src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java
  58. 2 0
      src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsQueryVo.java
  59. 6 0
      src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsVo.java
  60. 72 0
      src/main/java/com/ydtech/modules/order/orderThread/OrderFailRunnableThread.java
  61. 20 12
      src/main/java/com/ydtech/modules/order/orderThread/OrderRunnableThread.java
  62. 72 0
      src/main/java/com/ydtech/modules/order/orderThread/OrderSignRunnableThread.java
  63. 7 0
      src/main/java/com/ydtech/modules/order/service/InsOrderPayDateRecordService.java
  64. 1 1
      src/main/java/com/ydtech/modules/order/service/InsOrderPushMsgService.java
  65. 7 0
      src/main/java/com/ydtech/modules/order/service/InsOrderReadPdfService.java
  66. 2 0
      src/main/java/com/ydtech/modules/order/service/SysQuoteConfigService.java
  67. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java
  68. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java
  69. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/IdentifyServiceImpl.java
  70. 48 7
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
  71. 12 3
      src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java
  72. 61 2
      src/main/java/com/ydtech/modules/order/service/impl/InsOrderPayDateRecordServiceImpl.java
  73. 92 30
      src/main/java/com/ydtech/modules/order/service/impl/InsOrderPushMsgServiceImpl.java
  74. 45 0
      src/main/java/com/ydtech/modules/order/service/impl/InsOrderReadPdfServiceImpl.java
  75. 35 3
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  76. 18 1
      src/main/java/com/ydtech/modules/order/service/impl/SysQuoteConfigServiceImpl.java
  77. 1 3
      src/main/java/com/ydtech/modules/order/service/impl/SysQuoteRedisServiceImpl.java
  78. 7 7
      src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java
  79. 30 2
      src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java
  80. 42 0
      src/main/java/com/ydtech/modules/order/timer/UpdateOrderMQTimer.java
  81. 82 13
      src/main/java/com/ydtech/modules/order/timer/UpdateOrderTimer.java
  82. 16 9
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java
  83. 69 11
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  84. 24 0
      src/main/java/com/ydtech/modules/protocols/constants/OperatorType.java
  85. 35 27
      src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java
  86. 12 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLink.java
  87. 15 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLinkHistory.java
  88. 10 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java
  89. 47 1
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNewHistory.java
  90. 28 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLinkHistory.java
  91. 5 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java
  92. 16 2
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNewHistory.java
  93. 44 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementAllInformationCopyVo.java
  94. 1 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java
  95. 15 4
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkService.java
  96. 32 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java
  97. 15 4
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkService.java
  98. 34 5
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewService.java
  99. 117 43
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  100. 80 58
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

+ 5 - 0
pom.xml

@@ -678,6 +678,11 @@
             <artifactId>sunecm-url-encode-1</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <!--add  by hxl  2024-11-22  mq-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 2 - 0
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -111,6 +111,8 @@ public class TokenInterceptor {
         notMatchList.add("/ttqf/aa/*");
         notMatchList.add("/ttqf/**");
 
+        notMatchList.add("/push/**");
+
         return new SaInterceptor(handler -> {
             // 指定一条 match 规则
             SaRouter

+ 125 - 0
src/main/java/com/ydtech/config/RabbitMQConfig.java

@@ -0,0 +1,125 @@
+package com.ydtech.config;
+
+import com.ydtech.constants.RabbitMqEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.*;
+import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RabbitMQConfig {
+
+    /**
+     * 消费者数量,默认10
+     */
+    public static final int DEFAULT_CONCURRENT = 10;
+
+    /**
+     * 每个消费者获取最大投递数量 默认50
+     */
+    public static final int DEFAULT_PREFETCH_COUNT = 50;
+
+    private final static Logger log = LoggerFactory.getLogger(RabbitMQConfig.class);
+
+    @Bean
+        //设置队列持久化 第二个参数  保证数据不丢失
+    Queue queue() {
+        return new Queue(RabbitMqEnum.ORDER_QUEUE.getCode(), true);
+    }
+
+    @Bean
+        //设置队列持久化 第二个参数  保证数据不丢失
+    Queue queueFail() {
+        return new Queue(RabbitMqEnum.ORDER_QUEUE_FAIL.getCode(), true);
+    }
+
+    @Bean
+        //设置队列持久化 第二个参数  保证数据不丢失
+    Queue queueSign() {
+        return new Queue(RabbitMqEnum.ORDER_QUEUE_SIGN.getCode(), true);
+    }
+
+    @Bean
+        //设置队列持久化 第二个参数  保证数据不丢失
+    DirectExchange exchange() {
+        return new DirectExchange(RabbitMqEnum.ORDER_EXCHANGE.getCode(),true,false);
+    }
+
+
+    @Bean
+        //设置队列持久化 第二个参数  保证数据不丢失
+    DirectExchange exchangeFail() {
+        return new DirectExchange(RabbitMqEnum.ORDER_EXCHANGE_FAIL.getCode(),true,false);
+    }
+
+    @Bean
+        //设置队列持久化 第二个参数  保证数据不丢失
+    DirectExchange exchangeSign() {
+        return new DirectExchange(RabbitMqEnum.ORDER_EXCHANGE_SIGN.getCode(),true,false);
+    }
+
+    @Bean
+    Binding binding(Queue queue, DirectExchange exchange) {
+        return BindingBuilder.bind(queue).to(exchange).with(RabbitMqEnum.ORDER_ROUTINGKEY.getCode());
+    }
+
+
+    @Bean
+    Binding bindingFail(Queue queueFail, DirectExchange exchangeFail) {
+        return BindingBuilder.bind(queueFail).to(exchangeFail).with(RabbitMqEnum.ORDER_ROUTINGKEY_FAIL.getCode());
+    }
+    @Bean
+    Binding bindingSign(Queue queueSign, DirectExchange exchangeSign) {
+        return BindingBuilder.bind(queueSign).to(exchangeSign).with(RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode());
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/11/5 10:27
+     *  @Description:  手动确认保证消息消费成功
+     */
+    @Bean
+    public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory) {
+        RabbitTemplate rabbitTemplate = new RabbitTemplate();
+        rabbitTemplate.setConnectionFactory(connectionFactory);
+        rabbitTemplate.setMandatory(true);
+        // 设置配置回调函数
+        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
+            @Override
+            public void confirm(CorrelationData correlationData, boolean ack, String cause) {
+                log.info("ConfirmCallback:     " + "相关数据:" + correlationData);
+                log.info("ConfirmCallback:     " + "确认情况:" + ack);
+                log.info("ConfirmCallback:     " + "原因:" + cause);
+            }
+        });
+        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
+            @Override
+            public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
+                log.info("ReturnCallback:     " + "消息:" + message);
+                log.info("ReturnCallback:     " + "回应码:" + replyCode);
+                log.info("ReturnCallback:     " + "回应信息:" + replyText);
+                log.info("ReturnCallback:     " + "交换机:" + exchange);
+                log.info("ReturnCallback:     " + "路由键:" + routingKey);
+            }
+        });
+        return rabbitTemplate;
+    }
+
+
+
+    @Bean
+    public SimpleRabbitListenerContainerFactory pointTaskContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
+        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
+        factory.setPrefetchCount(DEFAULT_PREFETCH_COUNT);
+        factory.setConcurrentConsumers(DEFAULT_CONCURRENT);
+        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
+        configurer.configure(factory, connectionFactory);
+        return factory;
+    }
+}

+ 14 - 1
src/main/java/com/ydtech/constants/RabbitMqEnum.java

@@ -11,7 +11,20 @@ public enum RabbitMqEnum {
     ORDER_QUEUE("order_push_queue", "队列"),
     ORDER_EXCHANGE("order_push_exchange", "交换机"),
 
-    ORDER_ROUTINGKEY("order_push_routingKey", "关键字");
+    ORDER_ROUTINGKEY("order_push_routingKey", "关键字"),
+
+    ORDER_QUEUE_FAIL("order_push_fail_queue", "消息失败队列"),
+
+    ORDER_EXCHANGE_FAIL("order_push_fail_exchange", "失败交换机"),
+
+    ORDER_ROUTINGKEY_FAIL("order_push_fail_routingKey", "消息失败关键字"),
+
+    ORDER_QUEUE_SIGN("order_push_sign_queue", "承保订单队列"),
+
+    ORDER_EXCHANGE_SIGN("order_push_fail_exchange", "承保交换机"),
+
+
+    ORDER_ROUTINGKEY_SIGN("order_push_sign_routingKey", "承保订单关键字");
 
     private final String code;
     private final String desc;

+ 3 - 1
src/main/java/com/ydtech/constants/enums/InsurKind.java

@@ -33,7 +33,9 @@ public enum InsurKind {
     TY1("TY1", "道路救援服务特约条款"),
     TY2("TY2", "车辆安全检测特约条款"),
     TY3("TY3", "代为驾驶服务特约条款"),
-    TY4("TY4", "代为送检服务特约条款");
+    TY4("TY4", "代为送检服务特约条款"),
+    SY_WBDWGZ("SY_WBDWGZ","附加外部电网故障损失险");
+
 
     private final String code;
 

+ 2 - 2
src/main/java/com/ydtech/modules/admin/controller/PushOrder.java

@@ -27,8 +27,8 @@ public class PushOrder {
 
     @GetMapping("pushHistoryOrders")
     @ApiOperation(value = "测试推送历史订单数据消息")
-    public HttpResult pushHistoryOrders() {
-        insOrderPushMsgService.getPushInsAreaCompanyList();
+    public HttpResult pushHistoryOrders(String month) {
+        insOrderPushMsgService.getPushInsAreaCompanyList(month);
         return HttpResult.ok();
     }
 

+ 10 - 6
src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java

@@ -398,6 +398,10 @@ public class SysLoginController {
         String phone = phoneLoginVo.getPhone();
         String phoneMsg = phoneLoginVo.getPhoneMsg();
         SysUser user = sysUserService.findByPhone(phone);
+        if (user == null) {
+            //手机号不存在注册用户:上线测试团队
+            user = sysUserService.registerAPPUser(phone);
+        }
         //验证用户
         SysUser sysUser = sysUserService.getByUserId(user.getId());
         if ("2".equals(sysUser.getManagementSource())){
@@ -427,12 +431,12 @@ public class SysLoginController {
         if (StringUtils.isEmpty(phone)) {
             return HttpResult.error("手机号不能为空");
         }
-        if ("0".equals(type)) {  // 0 登录 1 注册
-            SysUser sysUser = sysUserService.findByPhone(phone);
-            if (sysUser == null) {
-                return HttpResult.error("手机号不存在!");
-            }
-        }
+//        if ("0".equals(type)) {  // 0 登录 1 注册
+//            SysUser sysUser = sysUserService.findByPhone(phone);
+//            if (sysUser == null) {
+//                return HttpResult.error("手机号不存在!");
+//            }
+//        }
 
         Random rand = new Random();
         // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数

+ 6 - 2
src/main/java/com/ydtech/modules/admin/controller/SysQyWeChatController.java

@@ -11,6 +11,7 @@ import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.admin.service.WechatCustomerService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -87,8 +88,11 @@ public class SysQyWeChatController {
             sysQyWeChat = list.get(new Random().nextInt(list.size()));
         }
         String s = wechatCustomerService.addContactWay(sysQyWeChat.getOpenKfId());
-        String url = s + "&scene_param=" + userId;
-        return HttpResult.ok(url);
+        if(StringUtils.isNotEmpty(s)){
+            String url = s + "&scene_param=" + userId;
+            return HttpResult.ok(url);
+        }
+        return HttpResult.ok(sysQyWeChat.getSupportStaffUrl());
     }
 
 }

+ 1 - 1
src/main/java/com/ydtech/modules/admin/controller/SysUserBankController.java

@@ -81,7 +81,7 @@ public class SysUserBankController extends BaseController {
     @PostMapping("/insertByBankNumber")
     @ApiOperation("新增卡号开户行")
     public HttpResult<Object> insertByBankNumber(@RequestBody SysUserBankCardVO sysUserBankCardVO) {
-        return  bankCardService.insertByBankNumber(sysUserBankCardVO);
+        return  bankCardService.insertByBankNumber(sysUserBankCardVO,true);
     }
     @PostMapping("/auditByBankNumber")
     @ApiOperation("审核卡号开户行")

+ 2 - 2
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -148,9 +148,9 @@ public class SysUserController extends BaseController {
      */
     @PostMapping(value = "/queryPage")
     public HttpResult queryPage(@RequestBody PageRequest pageRequest) {
-        String deptId = pageRequest.getColumnFilterValue(pageRequest, "deptId");
+        String deptId = pageRequest.getColumnFilterValue(pageRequest, "deptid");
         String name = pageRequest.getColumnFilterValue(pageRequest, "name");
-        String containsSubDept = pageRequest.getColumnFilterValue(pageRequest, "containsSubDept");
+        String containsSubDept = pageRequest.getColumnFilterValue(pageRequest, "containsSubDept") == null ? "0" : pageRequest.getColumnFilterValue(pageRequest, "containsSubDept");
         String mobile = pageRequest.getColumnFilterValue(pageRequest, "mobile");
         String roleId = pageRequest.getColumnFilterValue(pageRequest, "roleId");
         String deptName = pageRequest.getColumnFilterValue(pageRequest, "deptName");

+ 16 - 0
src/main/java/com/ydtech/modules/admin/controller/SysUserLinkAreaController.java

@@ -106,4 +106,20 @@ public class SysUserLinkAreaController extends BaseController {
             return HttpResult.error("查询错误"+e.getMessage());
         }
     }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Description: 查询所有的人员列表+分页
+     */
+    @PostMapping("findAllUsers")
+    @ApiOperation("查询所有的人员列表+分页")
+    public HttpResult<BasePageResult<SysUserBaseVO>> findAllUsers(@RequestBody SysUserDto sysUserDto) {
+        try{
+            BasePageResult<SysUserBaseVO> result = sysUserLinkAreaService.findAllUsers(sysUserDto);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
 }

+ 66 - 0
src/main/java/com/ydtech/modules/admin/controller/deptBalance/DeptBalanceController.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.dto.DeptBalanceDto;
 import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
+import com.ydtech.modules.admin.model.dto.SysPartnerInfoConsoleDto;
+import com.ydtech.modules.admin.model.vo.AppSysPartnerVo;
 import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
 import com.ydtech.modules.admin.model.vo.KztGetDeptUtilsDto;
 import com.ydtech.modules.admin.model.vo.PartnerBalanceVo;
@@ -82,6 +84,70 @@ public class DeptBalanceController {
     }
 
 
+    /**
+     * @version
+     * @author: whp
+     * @Description: 合伙人详情
+     */
+    @PostMapping("queryPartnerInfo")
+    @ApiOperation(value = "合伙人详情")
+    public HttpResult<List<SysPartnerConsoleDto>> queryPartnerInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        List<SysPartnerConsoleDto> result = deptBalanceService.queryPartnerInfo(deptBalanceVo);
+        return HttpResult.ok(result);
+    }
+
+    /**
+     * @version
+     * @author: whp
+     * @Description: 工作室详情
+     */
+    @PostMapping("queryStudioInfo")
+    @ApiOperation(value = "工作室详情")
+    public HttpResult<List<SysPartnerConsoleDto>> queryStudioInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        List<SysPartnerConsoleDto> result = deptBalanceService.queryPartnerInfo(deptBalanceVo);
+        return HttpResult.ok(result);
+    }
+
+
+
+    /**
+     * @version
+     * @author: whp
+     * @Description: 合伙人详情
+     */
+    @PostMapping("info")
+    @ApiOperation(value = "合伙人详情")
+    public HttpResult<SysPartnerInfoConsoleDto> queryInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        SysPartnerInfoConsoleDto result = deptBalanceService.queryInfo(deptBalanceVo);
+        return HttpResult.ok(result);
+    }
+
+
+    /**
+     * @version
+     * @author: whp
+     * @Description: 查看机构下团队信息
+     */
+    @PostMapping("/getTeamInfo")
+    @ApiOperation(value = "查看机构下团队信息")
+    public HttpResult<SysPartnerInfoConsoleDto> getTeamInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        SysPartnerInfoConsoleDto result = deptBalanceService.getTeamInfo(deptBalanceVo);
+        return HttpResult.ok(result);
+    }
+
+
+    /**
+     * @version
+     * @author: whp
+     * @Description: 查看团队下人员信息
+     */
+    @PostMapping("/getTeamUserInfo")
+    @ApiOperation(value = "查看团队下人员信息")
+    public HttpResult<SysPartnerInfoConsoleDto> getTeamUserInfo(@RequestBody DeptBalanceVo deptBalanceVo) {
+        SysPartnerInfoConsoleDto result = deptBalanceService.getTeamUserInfo(deptBalanceVo);
+        return HttpResult.ok(result);
+    }
+
     /**
      * @version
      * @author: whp

+ 9 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -547,6 +547,15 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @Description: 查询电销的管理人列表
      */
     List<SysUser> findDxZyUserList();
+
+    List<SysUser> selectByUserId(List<String> ids);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/25 18:28
+     *  @Description:  查询所有的人员
+     */
+    Page<SysUserBaseVO> findAllUsers(@Param("page") Page<SysUserBaseVO> page, @Param("user") SysUserDto sysUserDto);
 }
 
 

+ 67 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysPartnerConsoleDto.java

@@ -1,7 +1,9 @@
 package com.ydtech.modules.admin.model.dto;
 
+import com.ydtech.modules.admin.model.PartnerInfoVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -37,6 +39,9 @@ public class SysPartnerConsoleDto implements Serializable {
     @ApiModelProperty(value = "部门名称")
     private String deptName;
 
+    @ApiModelProperty(value = "部门id")
+    private String deptId;
+
 
     @ApiModelProperty(value = "机构管理费")
     private BigDecimal deptManagementFee;
@@ -53,6 +58,9 @@ public class SysPartnerConsoleDto implements Serializable {
     @ApiModelProperty(value = "是否合伙人 0 是  1 否")
     private String type;
 
+    @ApiModelProperty(value = "合伙人等级")
+    private Integer patnerLevel;
+
     @ApiModelProperty(value = "子级list")
     private List<SysPartnerConsoleDto> childrenList;
 
@@ -65,12 +73,62 @@ public class SysPartnerConsoleDto implements Serializable {
     @ApiModelProperty(value = "性别")
     private String sex;
 
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+
+
+    @ApiModelProperty(value = "会员人数")
+    private Integer memberShip;
+
+
+    @ApiModelProperty(value = "总佣金")
+    private BigDecimal commission;
+
+
+    @ApiModelProperty(value = "直接合伙人")
+    private Integer numberPartners;
+
+
+    @ApiModelProperty(value = "直接工作室")
+    private Integer directStudio;
+
+
+    @ApiModelProperty(value = "间接工作室")
+    private Integer indirectStudio;
+
+    @ApiModelProperty(value = "间接工作室")
+    private Integer level;
+
+
+    @ApiModelProperty(value = "管理员ids")
+    private List<String> leaderIds;
+
+
+    @ApiModelProperty(value = "管理员")
+    private String LeaderId;
+
+    @ApiModelProperty(value = "管理员名称")
+    private String leaderName;
+
+
+    @ApiModelProperty(value = "合伙人ids")
+    private List<String> partnerIds;
+
+    @ApiModelProperty(value = "部门id集合")
+    private List<String> deptIds;
+
+
+    @ApiModelProperty(value = "用户ids")
+    private List<String> userIds;
+
     //用户创建时间
     private String createTime;
 
     @ApiModelProperty(value = "提现中")
     private BigDecimal withdrawingAmount;
 
+    List<PartnerInfoVo> partnerInfoVoList;
+
     /***
      * 角色id
      */
@@ -79,4 +137,13 @@ public class SysPartnerConsoleDto implements Serializable {
      * 机构来源
      */
     private String managementSource;
+
+    @ApiModelProperty(value = "工作室下级团队个数")
+    private Integer deptNum;
+
+    /**
+     * 存入以及合伙人id
+     */
+    @ApiModelProperty(value = "存入以及合伙人id")
+    private String loginUserId;
 }

+ 34 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysPartnerInfoConsoleDto.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.ydtech.modules.admin.model.PartnerInfoVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class SysPartnerInfoConsoleDto {
+
+
+    @ApiModelProperty(value = "总保费")
+    private BigDecimal totalIncome;
+
+    @ApiModelProperty(value = "总佣金")
+    private BigDecimal commission;
+
+    @ApiModelProperty(value = "会员人数")
+    private Integer memberShip;
+
+    @ApiModelProperty(value = "推荐人")
+    private String suggestName;
+
+    @ApiModelProperty(value = "下级团队")
+    private Integer deptNum;
+
+
+    List<SysPartnerConsoleDto> partnerInfoVoList;
+
+
+    List<String> userIds;
+}

+ 175 - 0
src/main/java/com/ydtech/modules/admin/model/po/CustVehiclePolicyInfo.java

@@ -250,6 +250,141 @@ public class CustVehiclePolicyInfo implements Serializable {
      */
     private Integer delFlag;
 
+    //企业车新增
+    /**
+     *   固定电话
+     */
+    private String applyTel;
+
+    /**
+     *  省
+     */
+    private String applyProvince;
+
+    /**
+     *  市
+     */
+    private String applyCity;
+
+    /**
+     *  县
+     */
+    private String  applyCounty;
+
+    /***
+     * 车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))
+     */
+    private String applyProperty;
+
+    /***
+     * 注册资本金
+     */
+    private String applyRegisteredCapital;
+
+    /***
+     * 经营范围
+     */
+    private String applyScope;
+    /***
+     * 联系人
+     */
+    private String applyLegalPerson;
+
+    /***
+     * 组织机构代码
+     */
+    private String applyOrganizationCode;
+
+
+    /**
+     *   固定电话
+     */
+    private String insureTel;
+
+    /**
+     *  省
+     */
+    private String insureProvince;
+
+    /**
+     *  市
+     */
+    private String insureCity;
+
+    /**
+     *  县
+     */
+    private String  insureCounty;
+
+    /***
+     * 车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))
+     */
+    private String insureProperty;
+
+    /***
+     * 注册资本金
+     */
+    private String insureRegisteredCapital;
+
+    /***
+     * 经营范围
+     */
+    private String insureScope;
+    /***
+     * 联系人
+     */
+    private String insureLegalPerson;
+
+    /***
+     * 组织机构代码
+     */
+    private String insureOrganizationCode;
+
+
+    /**
+     *   固定电话
+     */
+    private String ownerTel;
+
+    /**
+     *  省
+     */
+    private String ownerProvince;
+
+    /**
+     *  市
+     */
+    private String ownerCity;
+
+    /**
+     *  县
+     */
+    private String  ownerCounty;
+
+    /***
+     * 车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))
+     */
+    private String ownerProperty;
+
+    /***
+     * 注册资本金
+     */
+    private String ownerRegisteredCapital;
+
+    /***
+     * 经营范围
+     */
+    private String ownerScope;
+    /***
+     * 联系人
+     */
+    private String ownerLegalPerson;
+
+    /***
+     * 组织机构代码
+     */
+    private String ownerOrganizationCode;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
@@ -291,6 +426,16 @@ public class CustVehiclePolicyInfo implements Serializable {
             customerInfoVo.setOwner(custVehiclePolicyInfo.getOwnerOwnerFlag() != null && custVehiclePolicyInfo.getOwnerOwnerFlag());
             //同投保人
             customerInfoVo.setInsuranceHolder(custVehiclePolicyInfo.getOwnerInsuranceHolderFlag() != null && custVehiclePolicyInfo.getOwnerInsuranceHolderFlag());
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getOwnerTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getOwnerOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getOwnerProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getOwnerCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getOwnerCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getOwnerProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getOwnerRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getOwnerScope());
+            customerInfoVo.setLegalPerson(custVehiclePolicyInfo.getOwnerLegalPerson());
 
         }else if(type ==2){
             //姓名
@@ -328,6 +473,16 @@ public class CustVehiclePolicyInfo implements Serializable {
             customerInfoVo.setOwner(custVehiclePolicyInfo.getInsureOwnerFlag() != null && custVehiclePolicyInfo.getInsureOwnerFlag());
             //同投保人
             customerInfoVo.setInsuranceHolder(custVehiclePolicyInfo.getInsureInsuranceHolderFlag() != null && custVehiclePolicyInfo.getInsureInsuranceHolderFlag());
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getInsureTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getInsureOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getInsureProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getInsureCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getInsureCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getInsureProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getInsureRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getInsureScope());
+            customerInfoVo.setLegalPerson(custVehiclePolicyInfo.getInsureLegalPerson());
 
         }else if(type ==3){
             //姓名
@@ -365,6 +520,26 @@ public class CustVehiclePolicyInfo implements Serializable {
             customerInfoVo.setOwner(custVehiclePolicyInfo.getApplyOwnerFlag() != null && custVehiclePolicyInfo.getApplyOwnerFlag());
             //同投保人
             customerInfoVo.setInsuranceHolder(custVehiclePolicyInfo.getApplyInsuranceHolderFlag() != null && custVehiclePolicyInfo.getApplyInsuranceHolderFlag());
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getOwnerTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getOwnerOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getOwnerProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getOwnerCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getOwnerCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getOwnerProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getOwnerRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getOwnerScope());
+
+            //车主相关信息   add  hxl   2024-12-20
+            customerInfoVo.setTel(custVehiclePolicyInfo.getOwnerTel());
+            customerInfoVo.setOrganizationCode(custVehiclePolicyInfo.getOwnerOrganizationCode());
+            customerInfoVo.setProvince(custVehiclePolicyInfo.getOwnerProvince());
+            customerInfoVo.setCity(custVehiclePolicyInfo.getOwnerCity());
+            customerInfoVo.setCounty(custVehiclePolicyInfo.getOwnerCounty());
+            customerInfoVo.setProperty(custVehiclePolicyInfo.getOwnerProperty());
+            customerInfoVo.setRegisteredCapital(custVehiclePolicyInfo.getOwnerRegisteredCapital());
+            customerInfoVo.setScope(custVehiclePolicyInfo.getOwnerScope());
+            customerInfoVo.setLegalPerson(custVehiclePolicyInfo.getOwnerLegalPerson());
         }
         return customerInfoVo;
     }

+ 7 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysQyWeChat.java

@@ -48,6 +48,13 @@ public class SysQyWeChat {
     @TableField( "wechat_picture_url")
     private String wechatPictureUrl;
 
+    /**
+     * 企业微信客服Url
+     */
+    @TableField("support_staff_url")
+    private String supportStaffUrl;
+
+
     @ApiModelProperty("企业微信客服id")
     @TableField("open_kf_id")
     private String openKfId;

+ 23 - 0
src/main/java/com/ydtech/modules/admin/model/vo/DeptBalanceVo.java

@@ -67,5 +67,28 @@ public class DeptBalanceVo implements Serializable {
     private List<String> userIds;
 
 
+    @ApiModelProperty(value = "用户ids")
+    private Integer level;
+
+
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+
+    @ApiModelProperty(value = "行业领域 1:汽车-车险")
+    private Integer industrySector;
+
+    @ApiModelProperty(value = "合伙人:1;工作室:2")
+    private Integer type;
+
+    @ApiModelProperty(value = "合伙人ids")
+    private List<String> partnerIds;
+
+    @ApiModelProperty(value = "工作室ids")
+    private List<String> leaderIds;
+
+
+    @ApiModelProperty(value = "存入以及合伙人id")
+    private String loginUserId;
+
 
 }

+ 4 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysPremiumDetailsVo.java

@@ -69,6 +69,10 @@ public class SysPremiumDetailsVo {
     @ApiModelProperty(value = "贡献合伙人名称")
     private String profferName;
 
+    @ApiModelProperty(value = "贡献人名称")
+    private String workName;
+
+
     /**
      * 存放贡献费用每集合伙人的等级和比例
      */

+ 27 - 0
src/main/java/com/ydtech/modules/admin/service/DeptBalanceService.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.dto.DeptBalanceDto;
 import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
+import com.ydtech.modules.admin.model.dto.SysPartnerInfoConsoleDto;
+import com.ydtech.modules.admin.model.vo.AppSysPartnerVo;
 import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
 import com.ydtech.modules.admin.model.vo.PartnerBalanceVo;
 
@@ -46,4 +48,29 @@ public interface DeptBalanceService {
      */
     IPage<SysPartnerConsoleDto> getWalletAgent(DeptBalanceVo deptBalanceVo);
 
+    /**
+     *
+     * @param deptBalanceVo
+     * @return   合伙人详情
+     */
+    List<SysPartnerConsoleDto> queryPartnerInfo(DeptBalanceVo deptBalanceVo);
+
+    /**
+     *
+     * @param deptBalanceVo
+     * @return  合伙人 工作室 详情
+     */
+    SysPartnerInfoConsoleDto queryInfo(DeptBalanceVo deptBalanceVo);
+    /**
+     * @version
+     * @author: whp
+     * @Description: 查看机构下团队信息
+     */
+    SysPartnerInfoConsoleDto getTeamInfo(DeptBalanceVo deptBalanceVo);
+    /**
+     * @version
+     * @author: whp
+     * @Description: 查看团队下人员信息
+     */
+    SysPartnerInfoConsoleDto getTeamUserInfo(DeptBalanceVo deptBalanceVo);
 }

+ 1 - 1
src/main/java/com/ydtech/modules/admin/service/SysUserBankCardService.java

@@ -35,7 +35,7 @@ public interface SysUserBankCardService extends IService<SysUserBankCard> {
 
     SysUserBankCard getByBankNumber(String bankNumber, String userId);
 
-    HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO);
+    HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO,boolean flag);
 
     void auditByBankNumber(SysUserBankCardVO sysUserBankCardVO);
 

+ 8 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserLinkAreaService.java

@@ -72,4 +72,12 @@ public interface SysUserLinkAreaService extends IService<SysUserLinkArea> {
      *  @Description: 查询用户绑定区域的代理人信息
      */
     List<String> findUserIdsByLoginUserId(String  userId);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/25 17:52
+     *  @Description: 查询所有的用户
+     */
+    BasePageResult<SysUserBaseVO> findAllUsers(SysUserDto sysUserDto);
 }

+ 4 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -126,6 +126,7 @@ public interface SysUserService extends BaseIService<SysUser> {
     boolean saveUser(SysUser sysUser);
 
     HttpResult saveUserInfo(SysUser2Vo sysUserVo);
+    SysUser saveUserJzgInfo(SysUser2Vo sysUserVo);
 
     HttpResult saveUserInfoByPartner(SysUser2Vo sysUserVo);
 
@@ -345,6 +346,9 @@ public interface SysUserService extends BaseIService<SysUser> {
 
     List<SysUser> findNextTreeContain(String managementSource);
 
+    SysUser registerAPPUser(String phone);
+
+    List<SysUser> selectByUserId(List<String> ids);
 }
 
 

+ 753 - 48
src/main/java/com/ydtech/modules/admin/service/impl/DeptBalanceServiceImpl.java

@@ -1,25 +1,28 @@
 package com.ydtech.modules.admin.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.dao.*;
-import com.ydtech.modules.admin.model.SysAgencyFeeApproval;
-import com.ydtech.modules.admin.model.SysAgencyLeader;
-import com.ydtech.modules.admin.model.SysRelationPerson;
+import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.DeptBalanceDto;
 import com.ydtech.modules.admin.model.dto.MySumAmountQueryDto;
 import com.ydtech.modules.admin.model.dto.SysPartnerConsoleDto;
+import com.ydtech.modules.admin.model.dto.SysPartnerInfoConsoleDto;
 import com.ydtech.modules.admin.model.po.SysUserAccount;
-import com.ydtech.modules.admin.model.vo.DeptBalanceVo;
-import com.ydtech.modules.admin.model.vo.PartnerBalanceVo;
+import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.vo.PageVo;
+import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
+import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
 import com.ydtech.utils.StringUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -27,10 +30,7 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -61,6 +61,24 @@ public class DeptBalanceServiceImpl implements DeptBalanceService {
 
     @Autowired
     private SysAgencyFeeApprovalMapper sysAgencyFeeApprovalMapper;
+
+    @Resource
+    private SysPartnerAccountMapper sysPartnerAccountMapper;
+
+
+    @Resource
+    private SysDeptMapper sysDeptMapper;
+
+    @Resource
+    private SysUserMapper sysUserMapper;
+
+
+    @Resource
+    private SysPremiumDetailsMapper sysPremiumDetailsMapper;
+
+
+    @Resource
+    private EsmUserReferrerMapper esmUserReferrerMapper;
     /**
      * @version
      * @author: whp
@@ -145,50 +163,83 @@ public class DeptBalanceServiceImpl implements DeptBalanceService {
 
             List<SysPartnerConsoleDto> sysPartners = sysPartnersPage.getRecords();
             for (SysPartnerConsoleDto item : sysPartners) {
-                BigDecimal allTotalIncome = BigDecimal.ZERO;  // 总保费
-                BigDecimal allDeptManagementFee = BigDecimal.ZERO;//机构管理费
-                BigDecimal allWithdrawn = BigDecimal.ZERO;//已体现
-                BigDecimal allNotWithdrawn = BigDecimal.ZERO;//未提现
-
-                List<SysAgencyLeader> deptLeader = sysRelationPersonMapper.selectListByLeaderId(item.getUserId(),1);
-//                  机构负责人
-                for (SysAgencyLeader itemLeader : deptLeader) {
-                    String deptId = itemLeader.getDeptId();
-                    if (StringUtils.isNotEmpty(deptId)) {
-                        String proportional = item.getProportional();
-                        Date updateTime = itemLeader.getUpdateTime();
-                        Date createTime = itemLeader.getCreateTime();
-                        String dateStr="";
-                        if(updateTime!=null){
-                            dateStr=  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(updateTime);
-                        }else{
-                            dateStr=  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime);
-                        }
-                        HashMap<String, BigDecimal> orderAmount = deptBalanceMapper.getByDeptId(deptId,dateStr,deptBalanceVo.getBeginDate(),deptBalanceVo.getEndDate());
+                String userId = item.getUserId();
+                item.setLoginUserId(userId);
+                SysPartnerAccount sysPartnerAccount = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<SysPartnerAccount>()
+                        .eq(SysPartnerAccount::getUserId, item.getUserId()));
+                if(ObjectUtils.isNotEmpty(sysPartnerAccount)){
+                    if(sysPartnerAccount.getSumPremium() !=null ){
+                        item.setTotalIncome(sysPartnerAccount.getSumPremium());
+                    }
+                    if(sysPartnerAccount.getExtractFee()!=null){
+                        item.setCommission(sysPartnerAccount.getExtractFee());
+                    }
+                    if(sysPartnerAccount.getHistoryFee()!=null){
+                        item.setWithdrawn(sysPartnerAccount.getHistoryFee());
+                    }
+                    if(sysPartnerAccount.getCashFee() !=null){
+                        item.setNotWithdrawn(sysPartnerAccount.getCashFee());
+                    }
+                }
+                //下面合伙人(直接)数量
+                List<SysRelationPerson> sysRelationPersonList1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .eq(SysRelationPerson::getSuggestId, userId)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getSource, 0)
+                        .eq(SysRelationPerson::getType, 0));
 
-                        if (orderAmount != null && !orderAmount.isEmpty()) {
-                            BigDecimal totalIncome = orderAmount.get("totalIncome")==null ? BigDecimal.ZERO : orderAmount.get("totalIncome");
-                            allTotalIncome = totalIncome.multiply(new BigDecimal(proportional))
-                                    .divide(new BigDecimal("100")).setScale(2, RoundingMode.DOWN);
-                            allDeptManagementFee = this.calculateTotal(orderAmount.get("deptManagementFee"), allDeptManagementFee, null);
-                        }
-                        // 填充 已提现抽成费用和可提现抽成费用
-                        List<SysAgencyFeeApproval> sysAgencyFeeApprovals = sysAgencyFeeApprovalMapper.selectList(new LambdaQueryWrapper<SysAgencyFeeApproval>()
-                                .eq(SysAgencyFeeApproval::getUserId, item.getUserId())
-                                .eq(SysAgencyFeeApproval::getStatus, 1));
-                        if (!sysAgencyFeeApprovals.isEmpty()) {
-                            for (SysAgencyFeeApproval sysAgencyFeeApproval : sysAgencyFeeApprovals) {
-                                allWithdrawn = allWithdrawn.add(sysAgencyFeeApproval.getHistoryFee());
+                item.setNumberPartners(sysRelationPersonList1.size());
+
+
+                //直接工作室数量
+                List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .eq(SysRelationPerson::getSuggestId, userId)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getSource, 0)
+                        .eq(SysRelationPerson::getType, 1));
+                item.setDirectStudio(sysRelationPersonList.size());
+                List<String> collect = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                item.setLeaderIds(collect);
+                //登录人下面的所有团队人数
+                List<SysRelationPerson> sysRelationPersonList2 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .eq(SysRelationPerson::getSuggestId, userId)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getType, 1));
+
+
+                //间接工作室
+                List<SysRelationPerson> indirectStudioList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .eq(SysRelationPerson::getSuggestId, userId)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getSource, 1)
+                        .eq(SysRelationPerson::getType, 1));
+                item.setIndirectStudio(indirectStudioList.size());
+
+                if (sysRelationPersonList2.size() > 0) {
+                    List<String> ids = sysRelationPersonList2.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                    List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+                            .in(CollectionUtil.isNotEmpty(ids), SysAgencyLeader::getUserId, ids).eq(SysAgencyLeader::getDelFlag, 1));
+                    int deptManNum = 0;
+                    if (leaderList.size() > 0) {
+                        for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                            //获取机构下的团队
+                            List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                                    .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                                    .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                                    .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                            if (sysDeptList.size() > 0) {
+                                for (SysDept sysDept : sysDeptList) {
+                                    List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                            .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
+                                    deptManNum = deptManNum + sysUsers.size();
+
+                                }
                             }
                         }
-                        //可提现 = 总抽成-已提现
-                        allNotWithdrawn = allTotalIncome.subtract(allWithdrawn);
+                        item.setMemberShip(deptManNum);
                     }
+
                 }
-                item.setTotalIncome(allDeptManagementFee);
-                item.setDeptManagementFee(allTotalIncome);
-                item.setWithdrawn(allWithdrawn);
-                item.setNotWithdrawn(allNotWithdrawn);
             }
             return HttpResult.ok(sysPartnersPage);
         } catch (Exception e) {
@@ -346,6 +397,660 @@ public class DeptBalanceServiceImpl implements DeptBalanceService {
 
         return sysUserListPage;
     }
+    @Override
+    public List<SysPartnerConsoleDto> queryPartnerInfo(DeptBalanceVo deptBalanceVo) {
+        List<SysPartnerConsoleDto> appSysPartnerVos = new ArrayList<>();
+        String userId = deptBalanceVo.getUserId();
+        if (StringUtils.isEmpty(userId)) {
+            userId = BaseController.getUserId();
+        }
+        SysPartner sysPartner = sysPartnerMapper.selectOne(new LambdaQueryWrapper<SysPartner>()
+                .eq(SysPartner::getUserId, userId).eq(SysPartner::getDelFlag, 1));
+
+        //查询登陆人下所有直接合伙人
+        List<SysPartner> sysPartnerList = sysPartnerMapper.queryByLoginId(userId);
+
+        Map<Integer, List<SysPartner>> listMap = sysPartnerList.stream().sorted(Comparator.comparing(SysPartner::getId))
+                .collect(Collectors.groupingBy(SysPartner::getType));
+        //按等级查询
+        int start = 0;
+        int type = sysPartner.getType();
+        if (type == 1) {
+            start = start + 2;
+        } else if (type == 2) {
+            start = start + 3;
+        } else if (type == 3) {
+            start = start + 4;
+        } else if (type == 4) {
+            start = start + 5;
+        }
+
+        for (int i = start; i < 6; i++) {
+            //二级
+            List<SysPartner> sysPartnerList1 = listMap.get(i);
+            if (CollectionUtil.isNotEmpty(sysPartnerList1)) {
+                SysPartnerConsoleDto appSysPartnerVo = new SysPartnerConsoleDto();
+                appSysPartnerVo.setPatnerLevel(i);
+                //下级合伙人数
+                appSysPartnerVo.setNumberPartners(sysPartnerList1.size());
+                List<String> ids = sysPartnerList1.stream().map(SysPartner::getUserId).collect(Collectors.toList());
+
+                appSysPartnerVo.setPartnerIds(ids);
+
+                //所有创造利益总人数
+                List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .in(CollectionUtil.isNotEmpty(ids), SysRelationPerson::getSuggestId, ids)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getType, 1));
+                int deptManNum = 0;
+                if (sysRelationPersonList.size() > 0) {
+                    List<String> idList = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                    List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+                            .in(SysAgencyLeader::getUserId, idList).eq(SysAgencyLeader::getDelFlag, 1));
+                    if (leaderList.size() > 0) {
+                        for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                            //获取机构下的团队
+                            List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                                    .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                                    .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                                    .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                            if (sysDeptList.size() > 0) {
+                                for (SysDept sysDept : sysDeptList) {
+                                    List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                            .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
+                                    deptManNum = deptManNum + sysUsers.size();
+                                }
+                            }
+                        }
+                    }
+
+                }
+                appSysPartnerVo.setMemberShip(deptManNum);
+                //直接工作室
+                List<SysRelationPerson> sysRelationPersons = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .in(CollectionUtil.isNotEmpty(ids), SysRelationPerson::getSuggestId, ids)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getSource, 0)
+                        .eq(SysRelationPerson::getType, 1));
+                appSysPartnerVo.setDirectStudio(sysRelationPersons.size());
+
+                if (sysRelationPersons.size() > 0) {
+                    List<String> list1 = sysRelationPersons.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                    appSysPartnerVo.setLeaderIds(list1);
+                }
+                //所有工作室
+                List<SysRelationPerson> sysRelationPersons1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .in(CollectionUtil.isNotEmpty(ids), SysRelationPerson::getSuggestId, ids)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getType, 1));
+
+                //直接工作室下所有的人
+                List<String> userIds = getUserIds(sysRelationPersons1);
+
+                BigDecimal sumPremium = BigDecimal.ZERO;
+                BigDecimal extractFee = BigDecimal.ZERO;
+                if (CollectionUtil.isNotEmpty(userIds)) {
+                    for (String id : userIds) {
+                        List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                                .eq(SysPremiumDetails::getUserId, userId)
+                                .eq(SysPremiumDetails::getIssuerId,id)
+                                .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                                        SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+//                                .eq(partnerInfoDto.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerInfoDto.getIndustrySector())
+                                .eq(SysPremiumDetails::getStatus, 1));
+                        if (CollectionUtil.isNotEmpty(sysPremiumDetails)) {
+                            Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                                    .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                            for (String s : map.keySet()) {
+                                List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                                sumPremium = sumPremium.add(sysPremiumDetails1.get(0).getSumpremium());
+                            }
+                            BigDecimal reduce = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                            extractFee = extractFee.add(reduce);
+                        }
+
+                    }
+                }
+                appSysPartnerVo.setTotalIncome(sumPremium);
+                appSysPartnerVo.setCommission(extractFee);
+                appSysPartnerVo.setUserId(deptBalanceVo.getUserId());
+                //每一级存入map
+                appSysPartnerVos.add(appSysPartnerVo);
+            }
+        }
+        return appSysPartnerVos;
+    }
+    @Override
+    public SysPartnerInfoConsoleDto queryInfo(DeptBalanceVo deptBalanceVo) {
+        SysPartnerInfoConsoleDto partnerInfoFreeVo = new SysPartnerInfoConsoleDto();
+        List<SysPartnerConsoleDto> partnerInfoVoList = new ArrayList<>();
+        String loginId = deptBalanceVo.getUserId();
+        //合伙人:1;工作室:2
+        Integer type = deptBalanceVo.getType();
+        if(type == 1){
+            List<String> partnerIds = deptBalanceVo.getPartnerIds();
+            if (CollectionUtil.isEmpty(partnerIds)) {
+                return partnerInfoFreeVo;
+            }
+
+            //工作室下所有的人
+            List<SysRelationPerson> sysRelationPersons1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                    .in(SysRelationPerson::getSuggestId, partnerIds)
+                    .eq(SysRelationPerson::getDelFlag, 1)
+                    .eq(SysRelationPerson::getType, 1));
+
+            List<String> userIds = getUserIds(sysRelationPersons1);
+            BigDecimal sumPremium = BigDecimal.ZERO;
+            BigDecimal extractFee = BigDecimal.ZERO;
+
+            if (CollectionUtil.isNotEmpty(userIds)) {
+                for (String userId : userIds) {
+
+                    //费用
+                    List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                            .eq(SysPremiumDetails::getUserId, loginId)
+                            .eq(SysPremiumDetails::getIssuerId,userId)
+                            .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                                    SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                            .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector())
+                            .eq(SysPremiumDetails::getStatus, 1));
+                    if (CollectionUtil.isNotEmpty(sysPremiumDetails)) {
+                        Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                                .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                        for (String s : map.keySet()) {
+                            List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                            sumPremium = sumPremium.add(sysPremiumDetails1.get(0).getSumpremium());
+                        }
+
+//                        sumPremium = sumPremium.add(sysPremiumDetails.get(0).getSumpremium());
+                        BigDecimal reduce = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                        extractFee = extractFee.add(reduce);
+                    }
+
+                }
+            }
+            partnerInfoFreeVo.setTotalIncome(sumPremium);
+            partnerInfoFreeVo.setCommission(extractFee);
+            //合伙人
+            List<SysPartner> sysPartnerList = sysPartnerMapper.selectList(new LambdaQueryWrapper<SysPartner>()
+                    .in(SysPartner::getUserId, deptBalanceVo.getPartnerIds()).eq(SysPartner::getDelFlag, 1));
+
+            if (sysPartnerList.size() > 0) {
+                for (SysPartner sysPartner : sysPartnerList) {
+                    SysPartnerConsoleDto partnerInfoVo = new SysPartnerConsoleDto();
+                    partnerInfoVo.setLevel(sysPartner.getType());
+                    String userId = sysPartner.getUserId();
+                    partnerInfoVo.setUserId(userId);
+                    SysUser sysUser = sysUserMapper.selectById(userId);
+                    partnerInfoVo.setUserName(sysUser.getName());
+                    SysUser sysUser1 = sysUserMapper.selectById(sysPartner.getSuggestId());
+                    partnerInfoVo.setSuggestName(sysUser1.getName());
+                    //直接合伙人
+                    List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                            .eq(SysRelationPerson::getSuggestId, userId)
+                            .eq(SysRelationPerson::getDelFlag, 1)
+                            .eq(SysRelationPerson::getType, 0)
+                            .eq(SysRelationPerson::getSource, 0));
+                    List<String> collect = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                    partnerInfoVo.setPartnerIds(collect);
+                    partnerInfoVo.setNumberPartners(collect.size());
+
+                    //直接管理员
+                    List<SysRelationPerson> sysRelationPersonList1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                            .eq(SysRelationPerson::getSuggestId, userId)
+                            .eq(SysRelationPerson::getDelFlag, 1)
+                            .eq(SysRelationPerson::getType, 1)
+                            .eq(SysRelationPerson::getSource, 0));
+
+                    List<String> collects = sysRelationPersonList1.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                    partnerInfoVo.setLeaderIds(collects);
+                    partnerInfoVo.setDirectStudio(collects.size());
+                    //所有贡献费用
+                    //合伙人下所有工作室数 核算总代理人数
+                    List<SysRelationPerson> sysRelationPersonList2 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                            .eq(SysRelationPerson::getSuggestId, userId)
+                            .eq(SysRelationPerson::getDelFlag, 1)
+                            .eq(SysRelationPerson::getType, 1));
+
+                    List<String> userIds1 = getUserIds(sysRelationPersonList2);
+                    BigDecimal sumPremium1 = BigDecimal.ZERO;
+                    BigDecimal extractFee1 = BigDecimal.ZERO;
+                    if (CollectionUtil.isNotEmpty(userIds1)) {
+                        for (String id : userIds1) {
+                            //费用
+                            List<SysPremiumDetails> sysPremiumDetail = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                                    .eq(SysPremiumDetails::getUserId, loginId)
+                                    .eq(SysPremiumDetails::getIssuerId,id)
+                                    .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                                            SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                                    .eq(SysPremiumDetails::getStatus, 1)
+                                    .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector()));
+
+                            if (CollectionUtil.isNotEmpty(sysPremiumDetail)) {
+                                Map<String, List<SysPremiumDetails>> map = sysPremiumDetail.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                                        .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                                for (String s : map.keySet()) {
+                                    List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                                    sumPremium1 = sumPremium1.add(sysPremiumDetails1.get(0).getSumpremium());
+                                }
+
+//                                sumPremium1 = sumPremium1.add(sysPremiumDetail.get(0).getSumpremium());
+                                BigDecimal reduce = sysPremiumDetail.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                extractFee1 = extractFee1.add(reduce);
+                            }
+                        }
+
+                    }
+                    partnerInfoVo.setTotalIncome(sumPremium1);
+                    partnerInfoVo.setCommission(extractFee1);
+
+                    int deptManNum = 0;
+                    if (sysRelationPersonList2.size() > 0) {
+                        List<String> idList = sysRelationPersonList2.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                        List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+                                .in(SysAgencyLeader::getUserId, idList).eq(SysAgencyLeader::getDelFlag, 1));
+                        if (leaderList.size() > 0) {
+                            for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                                //获取机构下的团队
+                                List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                                        .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                                        .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                                        .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                                if (sysDeptList.size() > 0) {
+                                    for (SysDept sysDept : sysDeptList) {
+                                        List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                                .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
+                                        deptManNum = deptManNum + sysUsers.size();
+
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    partnerInfoVo.setMemberShip(deptManNum);
+
+                    partnerInfoVoList.add(partnerInfoVo);
+                }
+
+                partnerInfoFreeVo.setPartnerInfoVoList(partnerInfoVoList);
+            }
+        }else {
+            //工作室
+            List<String> leaderIds = deptBalanceVo.getLeaderIds();
+            if (CollectionUtil.isEmpty(leaderIds)) {
+                return partnerInfoFreeVo;
+            }
+            List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+                    .in(SysAgencyLeader::getUserId, leaderIds).eq(SysAgencyLeader::getDelFlag, 1));
+
+
+            List<String> userIdByLeader = getUserIdByLeader(leaderList);
+            for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                BigDecimal sumPremium1 = BigDecimal.ZERO;
+                BigDecimal extractFee1 = BigDecimal.ZERO;
+                SysPartnerConsoleDto partnerInfoVo = new SysPartnerConsoleDto();
+
+                String userId = sysAgencyLeader.getUserId();
+                partnerInfoVo.setUserId(userId);
+                partnerInfoVo.setLoginUserId(deptBalanceVo.getUserId());
+
+                SysUser sysUser = sysUserMapper.selectById(userId);
+                partnerInfoVo.setUserName(sysUser.getName());
+                SysUser sysUser1 = sysUserMapper.selectById(sysAgencyLeader.getSuggestId());
+                partnerInfoVo.setSuggestName(sysUser1.getName());
+                partnerInfoVo.setDeptId(sysAgencyLeader.getDeptId());
+                SysDept sysDept1 = sysDeptMapper.selectById(sysAgencyLeader.getDeptId());
+                partnerInfoVo.setDeptName(sysDept1.getName());
+                //团队总人数
+                int deptManNum = 0;
+                //获取机构下的团队
+                List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                        .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                        .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                        .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                partnerInfoVo.setDeptNum(sysDeptList.size());
+                List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
+
+                partnerInfoVo.setDeptIds(collect);
+                partnerInfoVo.setDeptNum(sysDeptList.size());
+                if (sysDeptList.size() > 0) {
+                    for (SysDept sysDept : sysDeptList) {
+                        List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
+                        deptManNum = deptManNum + sysUsers.size();
+                        if (CollectionUtil.isNotEmpty(sysUsers)) {
+                            for (SysUser user : sysUsers) {
+                                //费用
+                                List<SysPremiumDetails> sysPremiumDetail = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                                        .eq(SysPremiumDetails::getUserId, loginId)
+                                        .eq(SysPremiumDetails::getIssuerId, user.getId())
+                                        .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                                                SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                                        .eq(SysPremiumDetails::getStatus, 1)
+                                        .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector()));
+                                if (sysPremiumDetail.size() >0) {
+                                    Map<String, List<SysPremiumDetails>> map = sysPremiumDetail.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                                            .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                                    for (String s : map.keySet()) {
+                                        List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                                        sumPremium1= sumPremium1.add(sysPremiumDetails1.get(0).getSumpremium());
+                                    }
+//                                SysPremiumDetails sysPremiumDetails = sysPremiumDetail.get(0);
+//                                sumPremium1= sumPremium1.add(sysPremiumDetail.stream().map(SysPremiumDetails::getSumpremium).reduce(BigDecimal.ZERO, BigDecimal::add));
+
+                                    extractFee1 = extractFee1.add(sysPremiumDetail.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add));
+                                }
+                            }
+                        }
+                    }
+                }
+                partnerInfoVo.setTotalIncome(sumPremium1);
+                partnerInfoVo.setCommission(extractFee1);
+                partnerInfoVo.setMemberShip(deptManNum);
+                partnerInfoVo.setLevel(deptBalanceVo.getLevel());
+                partnerInfoVoList.add(partnerInfoVo);
+            }
+            //top总费用
+            BigDecimal sumPremium = BigDecimal.ZERO;
+            BigDecimal extractFee = BigDecimal.ZERO;
+            if (userIdByLeader.size()>0) {
+                for (String id : userIdByLeader) {
+                    //总费用
+                    List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                            .eq(SysPremiumDetails::getUserId, loginId)
+                            .eq(SysPremiumDetails::getIssuerId, id)
+                            .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                                    SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                            .eq(SysPremiumDetails::getStatus, 1)
+                            .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector()));
+
+                    if (sysPremiumDetails.size() >0) {
+                        Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                                .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                        for (String s : map.keySet()) {
+                            List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                            sumPremium= sumPremium.add(sysPremiumDetails1.get(0).getSumpremium());
+                        }
+
+                        extractFee = extractFee.add(sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add));
+                    }
+
+                }
+            }
+
+            partnerInfoFreeVo.setTotalIncome(sumPremium);
+            partnerInfoFreeVo.setCommission(extractFee);
+
+            int sum = partnerInfoVoList.stream().mapToInt(SysPartnerConsoleDto::getMemberShip).sum();
+            partnerInfoFreeVo.setUserIds(userIdByLeader);
+            partnerInfoFreeVo.setMemberShip(sum);
+            partnerInfoFreeVo.setPartnerInfoVoList(partnerInfoVoList);
+        }
+        int sum = partnerInfoVoList.stream().mapToInt(SysPartnerConsoleDto::getMemberShip).sum();
+        partnerInfoFreeVo.setMemberShip(sum);
+        partnerInfoFreeVo.setPartnerInfoVoList(partnerInfoVoList);
+
+        return partnerInfoFreeVo;
+    }
+
+
+    @Override
+    public SysPartnerInfoConsoleDto getTeamInfo(DeptBalanceVo deptBalanceVo) {
+        SysPartnerInfoConsoleDto appPartnerInfoFreeVo = new SysPartnerInfoConsoleDto();
+        String loginId = deptBalanceVo.getLoginUserId();
+        List<SysPartnerConsoleDto> appPartnerInfoList = new ArrayList<>();
+
+
+        List<String> deptIds = deptBalanceVo.getDeptIds();
+        if (CollectionUtil.isEmpty(deptIds)) {
+            return appPartnerInfoFreeVo;
+        }
+
+        List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                .in(SysDept::getId, deptIds).eq(SysDept::getDelFlag, 0));
+        if (sysDeptList.size() == 0) {
+            return appPartnerInfoFreeVo;
+        }
+        SysUser byUserId = sysUserMapper.getByUserId(deptBalanceVo.getUserId());
+        appPartnerInfoFreeVo.setSuggestName(byUserId.getName());
+
+        for (SysDept sysDept : sysDeptList) {
+            SysPartnerConsoleDto appPartnerInfo = new SysPartnerConsoleDto();
+            appPartnerInfo.setDeptId(sysDept.getId());
+            appPartnerInfo.setDeptName(sysDept.getName());
+            String leaderId = sysDept.getLeaderId();
+            if (StringUtils.isNotEmpty(leaderId)) {
+                appPartnerInfo.setLeaderId(leaderId);
+                SysUser sysUser = sysUserMapper.selectById(leaderId);
+                appPartnerInfo.setLeaderName(sysUser.getName());
+            }
+
+            //获取机构下的团队
+            List<SysDept> sysDepTeam = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                    .likeRight(SysDept::getId, sysDept.getId())
+                    .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                    .eq(SysDept::getManagementSource, sysDept.getManagementSource()));
+            //机构下每个团队人数id集合
+            List<String> userIdList = new ArrayList<>();
+            int deptManNum = 0;
+            if (sysDepTeam.size() > 0) {
+                for (SysDept sysDept1 : sysDepTeam) {
+                    List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                            .likeRight(SysUser::getId, sysDept1.getId()).ne(SysUser::getStatus, 0));
+                    deptManNum = deptManNum + sysUsers.size();
+                    if (sysUsers.size() > 0) {
+                        List<String> collect = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
+                        userIdList.addAll(collect);
+                    }
+
+                }
+            }
+            appPartnerInfo.setMemberShip(deptManNum);
+            appPartnerInfo.setUserIds(userIdList);
+            BigDecimal sumPremium = BigDecimal.ZERO;
+            BigDecimal extractFee = BigDecimal.ZERO;
+            if (CollectionUtil.isEmpty(userIdList)) continue;
+            for (String userId : userIdList) {
+                //查团队的保费
+                List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                        .eq(SysPremiumDetails::getIssuerId, userId)
+                        .eq(SysPremiumDetails::getUserId, loginId)
+                        .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                                SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                        .eq(SysPremiumDetails::getStatus, 1)
+                        .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector()));
+                if (sysPremiumDetails.size() > 0) {
+                    Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                            .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                    for (String s : map.keySet()) {
+                        List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                        sumPremium = sumPremium.add(sysPremiumDetails1.get(0).getSumpremium());
+                    }
+
+                    BigDecimal reduce = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    extractFee = extractFee.add(reduce);
+                }
+
+            }
+
+            appPartnerInfo.setTotalIncome(sumPremium);
+            appPartnerInfo.setCommission(extractFee);
+            appPartnerInfo.setLoginUserId(loginId);
+            appPartnerInfoList.add(appPartnerInfo);
+        }
+
+
+
+        List<String> ids = new ArrayList<>();
+        List<List<String>> collect = appPartnerInfoList.stream().map(SysPartnerConsoleDto::getUserIds).collect(Collectors.toList());
+        if (collect.size() > 0) {
+            for (List<String> list : collect) {
+                ids.addAll(list);
+            }
+        }
+        if (CollectionUtil.isEmpty(ids)) return appPartnerInfoFreeVo;
+        BigDecimal sumPremium1 = BigDecimal.ZERO;
+        BigDecimal extractFee1 = BigDecimal.ZERO;
+        for (String id : ids) {
+
+            List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                    .eq(SysPremiumDetails::getIssuerId, id)
+                    .eq(SysPremiumDetails::getUserId, loginId)
+                    .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                            SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                    .eq(SysPremiumDetails::getStatus, 1)
+                    .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector()));
+            if (sysPremiumDetails.size() > 0) {
+                Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                        .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                for (String s : map.keySet()) {
+                    List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                    sumPremium1 = sumPremium1.add(sysPremiumDetails1.get(0).getSumpremium());
+                }
+//                SysPremiumDetails sysPremiumDetails1 = sysPremiumDetails.get(0);
+//                sumPremium1 = sumPremium1.add(sysPremiumDetails1.getSumpremium());
+
+                BigDecimal reduce = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                extractFee1 = extractFee1.add(reduce);
+            }
+
+        }
+        appPartnerInfoFreeVo.setTotalIncome(sumPremium1);
+        appPartnerInfoFreeVo.setCommission(extractFee1);
+        int sum = appPartnerInfoList.stream().mapToInt(SysPartnerConsoleDto::getMemberShip).sum();
+        appPartnerInfoFreeVo.setMemberShip(sum);
+        appPartnerInfoFreeVo.setPartnerInfoVoList(appPartnerInfoList);
+        appPartnerInfoFreeVo.setDeptNum(appPartnerInfoList.size());
+        return appPartnerInfoFreeVo;
+    }
+
+    @Override
+    public SysPartnerInfoConsoleDto getTeamUserInfo(DeptBalanceVo deptBalanceVo) {
+        SysPartnerInfoConsoleDto teamUserInfosFreeVo = new SysPartnerInfoConsoleDto();
+        String loginId = deptBalanceVo.getLoginUserId();
+        List<SysPartnerConsoleDto> userInfosVoList = new ArrayList<>();
+        List<String> userIds = deptBalanceVo.getUserIds();
+        if (CollectionUtil.isEmpty(userIds)) {
+            return teamUserInfosFreeVo;
+        }
+
+        BigDecimal sumPremium = BigDecimal.ZERO;
+        BigDecimal extractFee = BigDecimal.ZERO;
+        for (String userId : userIds) {
+            //费用
+            List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                    .eq(SysPremiumDetails::getUserId, loginId)
+                    .eq(SysPremiumDetails::getIssuerId, userId)
+                    .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                            SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                    .eq(SysPremiumDetails::getStatus, 1)
+                    .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector()));
+            if (sysPremiumDetails.size()>0) {
+                Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                        .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                for (String s : map.keySet()) {
+                    List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                    sumPremium = sumPremium.add(sysPremiumDetails1.get(0).getSumpremium());
+                }
+                BigDecimal reduce = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                extractFee = extractFee.add(reduce);
+            }
+        }
+        teamUserInfosFreeVo.setTotalIncome(sumPremium);
+        teamUserInfosFreeVo.setCommission(extractFee);
+        List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                .ne(SysUser::getStatus, 0).in(SysUser::getId, deptBalanceVo.getUserIds()));
+        for (SysUser sysUser : sysUsers) {
+            SysPartnerConsoleDto teamUserInfosVo = new SysPartnerConsoleDto();
+            teamUserInfosVo.setUserId(sysUser.getId());
+            teamUserInfosVo.setUserName(sysUser.getName());
+            EsmUserReferrer esmUserReferrer = esmUserReferrerMapper.selectById(sysUser.getId());
+            if (esmUserReferrer != null) {
+                teamUserInfosVo.setLeaderId(esmUserReferrer.getReferrerId());
+                SysUser sysUser1 = sysUserMapper.selectById(esmUserReferrer.getReferrerId());
+                teamUserInfosVo.setSuggestName(sysUser1.getName());
+            }
+            BigDecimal sumPremium1 =BigDecimal.ZERO;
+            BigDecimal extractFee1 =BigDecimal.ZERO;
+            //费用
+            List<SysPremiumDetails> sysPremiumDetail = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                    .eq(SysPremiumDetails::getIssuerId, sysUser.getId())
+                    .eq(SysPremiumDetails::getUserId, loginId)
+                    .between(StringUtils.isNotEmpty(deptBalanceVo.getBeginDate()) && StringUtils.isNotEmpty(deptBalanceVo.getEndDate()),
+                            SysPremiumDetails::getCreateTime, deptBalanceVo.getBeginDate(), deptBalanceVo.getEndDate())
+                    .eq(SysPremiumDetails::getStatus, 1)
+                    .eq(deptBalanceVo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, deptBalanceVo.getIndustrySector()));
+            if (sysPremiumDetail.size()>0) {
+                Map<String, List<SysPremiumDetails>> map = sysPremiumDetail.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                        .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                for (String s : map.keySet()) {
+                    List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                    sumPremium1 = sumPremium1.add(sysPremiumDetails1.get(0).getSumpremium());
+                }
+                extractFee1 =extractFee1.add(sysPremiumDetail.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add)) ;
+            }
+
+            teamUserInfosVo.setTotalIncome(sumPremium1);
+            teamUserInfosVo.setCommission(extractFee1);
+            userInfosVoList.add(teamUserInfosVo);
+        }
+        teamUserInfosFreeVo.setMemberShip(userIds.size());
+        teamUserInfosFreeVo.setPartnerInfoVoList(userInfosVoList);
+        return teamUserInfosFreeVo;
+    }
+
+
+    private List<String> getUserIds(List<SysRelationPerson> sysRelationPersons) {
+        List<String> userIds = new ArrayList<>();
+        if (sysRelationPersons.size() > 0) {
+            List<String> idList = sysRelationPersons.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+            List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+                    .in(CollectionUtil.isNotEmpty(idList), SysAgencyLeader::getUserId, idList).eq(SysAgencyLeader::getDelFlag, 1));
+            if (leaderList.size() > 0) {
+                for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                    //获取机构下的团队
+                    List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                            .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                            .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                            .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                    if (sysDeptList.size() > 0) {
+                        for (SysDept sysDept : sysDeptList) {
+                            List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                    .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
+                            if (sysUsers.size()>0) {
+                                userIds.addAll(sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()));
+                            }
+                        }
+                    }
+                }
+            }
+
+        }
+        return userIds;
+    }
+
+    private List<String> getUserIdByLeader(List<SysAgencyLeader> leaderList) {
+        List<String> userIds = new ArrayList<>();
+        if (leaderList.size() > 0) {
+            for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                //获取机构下的团队
+                List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                        .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                        .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                        .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                if (sysDeptList.size() > 0) {
+                    for (SysDept sysDept : sysDeptList) {
+                        List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
+                        if (sysUsers.size()>0) {
+                            userIds.addAll(sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()));
+                        }
+                    }
+                }
+            }
+        }
+        return userIds;
+    }
 }
 
 

+ 36 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysDeptServiceImpl.java

@@ -16,6 +16,7 @@ import com.ydtech.modules.admin.dao.SysUserDeptRelationshipMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.SysArea;
 import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto;
 import com.ydtech.modules.admin.model.po.SysUserDeptRelationship;
 import com.ydtech.modules.admin.model.report.financialReceivables.FinancialReceivablesMonthVo;
 import com.ydtech.modules.admin.model.vo.*;
@@ -828,6 +829,19 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
         if (users == null || users.isEmpty()) {
             return new ArrayList<>();
         }
+
+        List<SysUser> allList = new ArrayList<>();
+        for (SysUser user : users) {
+            this.addLeadUserList(user,allList);
+        }
+        List<SysUser> collect = allList.stream()
+                .collect(Collectors.collectingAndThen(
+                        Collectors.toMap(SysUser::getId, u -> u, (u1, u2) -> u1),  // 以id作为键来合并重复元素,保留第一个遇到的元素
+                        Map::values))
+                .stream()
+                .distinct()  // 进一步确保去重,主要针对可能存在的相同id但不同对象引用情况(较极端情况)
+                .collect(Collectors.toList());
+
         List<SysUser> topUsers = new ArrayList<>(); //存放1级用户,即没有直接上级的用户
         // 根据组织结构展示级别,筛选顶层节点并构建组织结构树
         if("admin".equals(sysUser.getName())){
@@ -837,10 +851,31 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
             topUsers.add(sysUser);
         }
         // 递归构建用户树结构
-        buildUserTree(topUsers, users,managementSource);
+        buildUserTree(topUsers, collect,managementSource);
         return topUsers;
     }
 
+    private void addLeadUserList(SysUser user, List<SysUser> allList) {
+        addLeadUserList(user, allList, new HashSet<>());
+    }
+
+    private void addLeadUserList(SysUser user, List<SysUser> allList, Set<String> processedIds) {
+        if (user == null) {
+            return;
+        }
+        // 先判断当前用户ID是否已经处理过,如果处理过则直接返回,避免循环引用导致的无限递归
+        if (processedIds.contains(user.getId())) {
+            return;
+        }
+        allList.add(user);
+        processedIds.add(user.getId());
+        String leaderId = user.getLeaderId();
+        if (StringUtils.isNotEmpty(leaderId)) {
+            SysUser leaderUser = sysUserMapper.getByUserId(leaderId);
+            addLeadUserList(leaderUser, allList, processedIds);
+        }
+    }
+
     /**
      * 拼接机构来源
      * @param users

+ 119 - 197
src/main/java/com/ydtech/modules/admin/service/impl/SysPartnerServiceImpl.java

@@ -439,7 +439,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
                             historyFee = historyFee.add(sysAgencyFeeApproval.getHistoryFee());
                         }
                     }
-                    agencyExtractFee.setHistoryFee(Optional.ofNullable(extractFee.subtract(historyFee)).orElse(BigDecimal.ZERO));
+                    agencyExtractFee.setHistoryFee(historyFee);
                     //可提现 = 总抽成-已提现
                     agencyExtractFee.setCashFee(extractFee.subtract(historyFee));
 
@@ -1160,225 +1160,144 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
         PartnerInfoFreeVo partnerInfoFreeVo = new PartnerInfoFreeVo();
         List<PartnerInfoVo> partnerInfoVoList = new ArrayList<>();
         String loginId = BaseController.getUserId();
-        //合伙人:1;工作室:2
-        Integer type = partnerGradeInfo.getType();
-        if (type == 1) {
-            List<String> partnerIds = partnerGradeInfo.getPartnerIds();
-            if (CollectionUtil.isEmpty(partnerIds)) {
-                return partnerInfoFreeVo;
-            }
-            //合伙人的直接工作室贡献的费用
-            List<SysRelationPerson> sysRelationPersons = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
-                    .in(SysRelationPerson::getSuggestId, partnerIds)
-                    .eq(SysRelationPerson::getDelFlag, 1)
-                    .eq(SysRelationPerson::getSource, 0)
-                    .eq(SysRelationPerson::getType, 1));
-            //工作室下所有的人
-            List<SysRelationPerson> sysRelationPersons1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
-                    .in(SysRelationPerson::getSuggestId, partnerIds)
-                    .eq(SysRelationPerson::getDelFlag, 1)
-                    .eq(SysRelationPerson::getType, 1));
-            List<String> userIds = getUserIds(sysRelationPersons1);
-            BigDecimal sumPremium = BigDecimal.ZERO;
-            BigDecimal extractFee = BigDecimal.ZERO;
-            if (CollectionUtil.isNotEmpty(userIds)) {
-                for (String userId : userIds) {
-
-                    //费用
-                    List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
-                            .eq(SysPremiumDetails::getUserId, loginId)
-                            .eq(SysPremiumDetails::getIssuerId,userId)
-                            .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
-                                    SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
-                            .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector())
-                            .eq(SysPremiumDetails::getStatus, 1));
-                    if (CollectionUtil.isNotEmpty(sysPremiumDetails)) {
-                        Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
-                                .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
-                        for (String s : map.keySet()) {
-                            List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
-                            sumPremium = sumPremium.add(sysPremiumDetails1.get(0).getSumpremium());
-                        }
-
-//                        sumPremium = sumPremium.add(sysPremiumDetails.get(0).getSumpremium());
-                        BigDecimal reduce = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
-                        extractFee = extractFee.add(reduce);
+        List<String> partnerIds = partnerGradeInfo.getPartnerIds();
+        if (CollectionUtil.isEmpty(partnerIds)) {
+            return partnerInfoFreeVo;
+        }
+        //关联工作室下所有的人
+        List<SysRelationPerson> sysRelationPersons1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                .in(SysRelationPerson::getSuggestId, partnerIds)
+                .eq(SysRelationPerson::getDelFlag, 1)
+                .eq(SysRelationPerson::getType, 1));
+        List<String> userIds = getUserIds(sysRelationPersons1);
+        BigDecimal sumPremium = BigDecimal.ZERO;
+        BigDecimal extractFee = BigDecimal.ZERO;
+        if (CollectionUtil.isNotEmpty(userIds)) {
+            for (String userId : userIds) {
+                //费用
+                List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                        .eq(SysPremiumDetails::getUserId, loginId)
+                        .eq(SysPremiumDetails::getIssuerId,userId)
+                        .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
+                                SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
+                        .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector())
+                        .eq(SysPremiumDetails::getStatus, 1));
+                if (CollectionUtil.isNotEmpty(sysPremiumDetails)) {
+                    Map<String, List<SysPremiumDetails>> map = sysPremiumDetails.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                            .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                    for (String s : map.keySet()) {
+                        List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                        sumPremium = sumPremium.add(sysPremiumDetails1.get(0).getSumpremium());
                     }
 
+//                        sumPremium = sumPremium.add(sysPremiumDetails.get(0).getSumpremium());
+                    BigDecimal reduce = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    extractFee = extractFee.add(reduce);
                 }
-            }
-            partnerInfoFreeVo.setSumPremium(sumPremium);
-            partnerInfoFreeVo.setExtractFee(extractFee);
-
-            //合伙人
-            List<SysPartner> sysPartnerList = sysPartnerMapper.selectList(new LambdaQueryWrapper<SysPartner>()
-                    .in(SysPartner::getUserId, partnerGradeInfo.getPartnerIds()).eq(SysPartner::getDelFlag, 1));
-            if (sysPartnerList.size() > 0) {
-                for (SysPartner sysPartner : sysPartnerList) {
-                    PartnerInfoVo partnerInfoVo = new PartnerInfoVo();
-                    partnerInfoVo.setLevel(sysPartner.getType());
-                    String userId = sysPartner.getUserId();
-                    partnerInfoVo.setUserId(userId);
-                    SysUser sysUser = sysUserMapper.selectById(userId);
-                    partnerInfoVo.setUserName(sysUser.getName());
-                    SysUser sysUser1 = sysUserMapper.selectById(sysPartner.getSuggestId());
-                    partnerInfoVo.setSuggestName(sysUser1.getName());
-                    //直接合伙人
-                    List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
-                            .eq(SysRelationPerson::getSuggestId, userId)
-                            .eq(SysRelationPerson::getDelFlag, 1)
-                            .eq(SysRelationPerson::getType, 0)
-                            .eq(SysRelationPerson::getSource, 0));
-                    List<String> collect = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
-                    partnerInfoVo.setPartnerIds(collect);
-                    partnerInfoVo.setPartnerNumber(collect.size());
-
-                    //直接管理员
-                    List<SysRelationPerson> sysRelationPersonList1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
-                            .eq(SysRelationPerson::getSuggestId, userId)
-                            .eq(SysRelationPerson::getDelFlag, 1)
-                            .eq(SysRelationPerson::getType, 1)
-                            .eq(SysRelationPerson::getSource, 0));
-
-                    List<String> collects = sysRelationPersonList1.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
-                    partnerInfoVo.setLeaderIds(collects);
-                    partnerInfoVo.setWorkNumber(collects.size());
-                    //所有贡献费用
-                    //合伙人下所有工作室数 核算总代理人数
-                    List<SysRelationPerson> sysRelationPersonList2 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
-                            .eq(SysRelationPerson::getSuggestId, userId)
-                            .eq(SysRelationPerson::getDelFlag, 1)
-                            .eq(SysRelationPerson::getType, 1));
 
-                    List<String> userIds1 = getUserIds(sysRelationPersonList2);
-                    BigDecimal sumPremium1 = BigDecimal.ZERO;
-                    BigDecimal extractFee1 = BigDecimal.ZERO;
-                    if (CollectionUtil.isNotEmpty(userIds1)) {
-                        for (String id : userIds1) {
-                            //费用
-                            List<SysPremiumDetails> sysPremiumDetail = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
-                                    .eq(SysPremiumDetails::getUserId, loginId)
-                                    .eq(SysPremiumDetails::getIssuerId,id)
-                                    .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
-                                            SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
-                                    .eq(SysPremiumDetails::getStatus, 1)
-                                    .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector()));
+            }
+        }
+        partnerInfoFreeVo.setSumPremium(sumPremium);
+        partnerInfoFreeVo.setExtractFee(extractFee);
 
-                            if (CollectionUtil.isNotEmpty(sysPremiumDetail)) {
-                                Map<String, List<SysPremiumDetails>> map = sysPremiumDetail.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
-                                        .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
-                                for (String s : map.keySet()) {
-                                    List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
-                                    sumPremium1 = sumPremium1.add(sysPremiumDetails1.get(0).getSumpremium());
-                                }
+        //合伙人
+        List<SysPartner> sysPartnerList = sysPartnerMapper.selectList(new LambdaQueryWrapper<SysPartner>()
+                .in(SysPartner::getUserId, partnerGradeInfo.getPartnerIds()).eq(SysPartner::getDelFlag, 1));
+        if (sysPartnerList.size() > 0) {
+            for (SysPartner sysPartner : sysPartnerList) {
+                PartnerInfoVo partnerInfoVo = new PartnerInfoVo();
+                partnerInfoVo.setLevel(sysPartner.getType());
+                String userId = sysPartner.getUserId();
+                partnerInfoVo.setUserId(userId);
+                SysUser sysUser = sysUserMapper.selectById(userId);
+                partnerInfoVo.setUserName(sysUser.getName());
+                SysUser sysUser1 = sysUserMapper.selectById(sysPartner.getSuggestId());
+                partnerInfoVo.setSuggestName(sysUser1.getName());
+                //直接合伙人
+                List<SysRelationPerson> sysRelationPersonList = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .eq(SysRelationPerson::getSuggestId, userId)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getType, 0)
+                        .eq(SysRelationPerson::getSource, 0));
+                List<String> collect = sysRelationPersonList.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                partnerInfoVo.setPartnerIds(collect);
+                partnerInfoVo.setPartnerNumber(collect.size());
 
-//                                sumPremium1 = sumPremium1.add(sysPremiumDetail.get(0).getSumpremium());
-                                BigDecimal reduce = sysPremiumDetail.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
-                                extractFee1 = extractFee1.add(reduce);
-                            }
-                        }
+                //直接管理员
+                List<SysRelationPerson> sysRelationPersonList1 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .eq(SysRelationPerson::getSuggestId, userId)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getType, 1)
+                        .eq(SysRelationPerson::getSource, 0));
 
-                    }
-                    partnerInfoVo.setSumPremium(sumPremium1);
-                    partnerInfoVo.setExtractFee(extractFee1);
+                List<String> collects = sysRelationPersonList1.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                partnerInfoVo.setLeaderIds(collects);
+                partnerInfoVo.setWorkNumber(collects.size());
+                //所有贡献费用
+                //合伙人下所有工作室数 核算总代理人数
+                List<SysRelationPerson> sysRelationPersonList2 = sysRelationPersonMapper.selectList(new LambdaQueryWrapper<SysRelationPerson>()
+                        .eq(SysRelationPerson::getSuggestId, userId)
+                        .eq(SysRelationPerson::getDelFlag, 1)
+                        .eq(SysRelationPerson::getType, 1));
 
-                    int deptManNum = 0;
-                    if (sysRelationPersonList2.size() > 0) {
-                        List<String> idList = sysRelationPersonList2.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
-                        List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
-                                .in(SysAgencyLeader::getUserId, idList).eq(SysAgencyLeader::getDelFlag, 1));
-                        if (leaderList.size() > 0) {
-                            for (SysAgencyLeader sysAgencyLeader : leaderList) {
-                                //获取机构下的团队
-                                List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
-                                        .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
-                                        .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
-                                        .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
-                                if (sysDeptList.size() > 0) {
-                                    for (SysDept sysDept : sysDeptList) {
-                                        List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
-                                                .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
-                                        deptManNum = deptManNum + sysUsers.size();
+                List<String> userIds1 = getUserIds(sysRelationPersonList2);
+                BigDecimal sumPremium1 = BigDecimal.ZERO;
+                BigDecimal extractFee1 = BigDecimal.ZERO;
+                if (CollectionUtil.isNotEmpty(userIds1)) {
+                    for (String id : userIds1) {
+                        //费用
+                        List<SysPremiumDetails> sysPremiumDetail = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
+                                .eq(SysPremiumDetails::getUserId, loginId)
+                                .eq(SysPremiumDetails::getIssuerId,id)
+                                .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
+                                        SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
+                                .eq(SysPremiumDetails::getStatus, 1)
+                                .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector()));
 
-                                    }
-                                }
+                        if (CollectionUtil.isNotEmpty(sysPremiumDetail)) {
+                            Map<String, List<SysPremiumDetails>> map = sysPremiumDetail.stream().sorted(Comparator.comparing(SysPremiumDetails::getId))
+                                    .collect(Collectors.groupingBy(SysPremiumDetails::getCompanyId));
+                            for (String s : map.keySet()) {
+                                List<SysPremiumDetails> sysPremiumDetails1 = map.get(s);
+                                sumPremium1 = sumPremium1.add(sysPremiumDetails1.get(0).getSumpremium());
                             }
+
+//                                sumPremium1 = sumPremium1.add(sysPremiumDetail.get(0).getSumpremium());
+                            BigDecimal reduce = sysPremiumDetail.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                            extractFee1 = extractFee1.add(reduce);
                         }
                     }
-                    partnerInfoVo.setTeamManNum(deptManNum);
-
-                    partnerInfoVoList.add(partnerInfoVo);
                 }
-
-                partnerInfoFreeVo.setPartnerInfoVoList(partnerInfoVoList);
-            }
-        } else {
-            //工作室
-            List<String> leaderIds = partnerGradeInfo.getLeaderIds();
-            if (CollectionUtil.isEmpty(leaderIds)) {
-                return partnerInfoFreeVo;
-            }
-            //费用
-            List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
-                    .in(SysPremiumDetails::getUserId, leaderIds)
-                    .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
-                            SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
-                    .eq(SysPremiumDetails::getStatus, 1)
-                    .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector()));
-            BigDecimal sumPremium = sysPremiumDetails.stream().map(SysPremiumDetails::getSumpremium).reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal extractFee = sysPremiumDetails.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
-            partnerInfoFreeVo.setSumPremium(sumPremium);
-            partnerInfoFreeVo.setExtractFee(extractFee);
-
-
-            List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
-                    .in(SysAgencyLeader::getUserId, leaderIds).eq(SysAgencyLeader::getDelFlag, 1));
-
-            for (SysAgencyLeader sysAgencyLeader : leaderList) {
-                PartnerInfoVo partnerInfoVo = new PartnerInfoVo();
-
-                String userId = sysAgencyLeader.getUserId();
-                partnerInfoVo.setUserId(userId);
-                SysUser sysUser = sysUserMapper.selectById(userId);
-                partnerInfoVo.setUserName(sysUser.getName());
-                SysUser sysUser1 = sysUserMapper.selectById(sysAgencyLeader.getSuggestId());
-                partnerInfoVo.setSuggestName(sysUser1.getName());
-
-                //费用
-                List<SysPremiumDetails> sysPremiumDetail = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
-                        .eq(SysPremiumDetails::getUserId, userId)
-                        .between(StringUtils.isNotEmpty(partnerGradeInfo.getBeginTime()) && StringUtils.isNotEmpty(partnerGradeInfo.getEndTime()),
-                                SysPremiumDetails::getCreateTime, partnerGradeInfo.getBeginTime(), partnerGradeInfo.getEndTime())
-                        .eq(SysPremiumDetails::getStatus, 1)
-                        .eq(partnerGradeInfo.getIndustrySector() != null, SysPremiumDetails::getIndustrySector, partnerGradeInfo.getIndustrySector()));
-                BigDecimal sumPremium1 = sysPremiumDetail.stream().map(SysPremiumDetails::getSumpremium).reduce(BigDecimal.ZERO, BigDecimal::add);
-                BigDecimal extractFee1 = sysPremiumDetail.stream().map(SysPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
                 partnerInfoVo.setSumPremium(sumPremium1);
                 partnerInfoVo.setExtractFee(extractFee1);
 
                 int deptManNum = 0;
-                //获取机构下的团队
-                List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
-                        .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
-                        .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
-                        .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
-
-                partnerInfoVo.setDeptNum(sysDeptList.size());
-                List<String> collect = sysDeptList.stream().map(SysDept::getId).collect(Collectors.toList());
-                partnerInfoVo.setDeptIds(collect);
-                if (sysDeptList.size() > 0) {
-                    for (SysDept sysDept : sysDeptList) {
-                        List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
-                                .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
-                        deptManNum = deptManNum + sysUsers.size();
+                if (sysRelationPersonList2.size() > 0) {
+                    List<String> idList = sysRelationPersonList2.stream().map(SysRelationPerson::getAgencyLeaderId).collect(Collectors.toList());
+                    List<SysAgencyLeader> leaderList = sysAgencyLeaderMapper.selectList(new LambdaQueryWrapper<SysAgencyLeader>()
+                            .in(SysAgencyLeader::getUserId, idList).eq(SysAgencyLeader::getDelFlag, 1));
+                    if (leaderList.size() > 0) {
+                        for (SysAgencyLeader sysAgencyLeader : leaderList) {
+                            //获取机构下的团队
+                            List<SysDept> sysDeptList = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>()
+                                    .likeRight(SysDept::getId, sysAgencyLeader.getDeptId())
+                                    .isNull(SysDept::getComlevel).eq(SysDept::getDelFlag, 0)
+                                    .eq(SysDept::getManagementSource, sysAgencyLeader.getSource()));
+                            if (sysDeptList.size() > 0) {
+                                for (SysDept sysDept : sysDeptList) {
+                                    List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
+                                            .likeRight(SysUser::getId, sysDept.getId()).ne(SysUser::getStatus, 0));
+                                    deptManNum = deptManNum + sysUsers.size();
 
+                                }
+                            }
+                        }
                     }
                 }
                 partnerInfoVo.setTeamManNum(deptManNum);
 
                 partnerInfoVoList.add(partnerInfoVo);
             }
-
         }
         int sum = partnerInfoVoList.stream().mapToInt(PartnerInfoVo::getTeamManNum).sum();
         partnerInfoFreeVo.setTeamManNum(sum);
@@ -1448,6 +1367,9 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
                 sysPremiumDetailsVo.setProfferLevel(sysPartner.getType());
                 SysUser sysUser = sysUserMapper.selectById(sysPartner.getUserId());
                 sysPremiumDetailsVo.setProfferName(sysUser.getName());
+                //直接工作室产生费用,显示工作室名称
+                SysDept sysDept1 = sysDeptMapper.selectById(sysAgencyLeader.getDeptId());
+                sysPremiumDetailsVo.setWorkName(sysDept1.getName());
             }
             sysPremiumDetailsVo.setSumpremium(sysPremiumDetails1.getSumpremium());
             SysUser sysUser = sysUserMapper.selectById(sysPremiumDetails1.getIssuerId());
@@ -1866,7 +1788,7 @@ public class SysPartnerServiceImpl extends ServiceImpl<SysPartnerMapper, SysPart
     @Override
     public List<SysPartnerVo> getRelationInfo(String userId) {
         List<SysPartnerVo> sysPartners = new ArrayList<>();
-        //登陆人的上级合伙人信息
+        //登陆人的上级合伙人信息
         SysPartner sysPartner = sysPartnerMapper.selectOne(new LambdaQueryWrapper<SysPartner>()
                 .eq(SysPartner::getUserId, userId).eq(SysPartner::getDelFlag, 1));
         SysPartnerVo sysPartnerVo = BeanUtil.copyProperties(sysPartner, SysPartnerVo.class);

+ 9 - 6
src/main/java/com/ydtech/modules/admin/service/impl/SysUserBankCardServiceImpl.java

@@ -148,7 +148,7 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
 
     @Override
     @Transactional
-    public HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO) {
+    public HttpResult<Object> insertByBankNumber(SysUserBankCardVO sysUserBankCardVO,boolean flag) {
         //个贷验证银行卡
         SysUser sysUser;
         String userId = sysUserBankCardVO.getUserId();
@@ -168,9 +168,11 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
             request.setPhoneNo(sysUserBankCardVO.getPhoneNo());
             request.setName(sysUser.getName());
             request.setCertNo(sysUser.getIdentity());
-            response = unionPayRequestApiComponent.bankCardVerifyRequest(request);
-            if (response != null && !"00".equals(response.getRespCode())) {
-                return HttpResult.error("未通过银行卡认证:" + response.getDetailRespMsg());
+            if(flag) {
+                response = unionPayRequestApiComponent.bankCardVerifyRequest(request);
+                if (response != null && !"00".equals(response.getRespCode())) {
+                    return HttpResult.error("未通过银行卡认证:" + response.getDetailRespMsg());
+                }
             }
         }
         SysUserBankCard findSysUserBankCard = sysUserBankCardService.getOne(new LambdaQueryWrapper<SysUserBankCard>()
@@ -186,7 +188,8 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
             findSysUserBankCard.setBankAddress(sysUserBankCardVO.getBankAddress());
             findSysUserBankCard.setBankAccount(sysUserBankCardVO.getBankAccount());
             findSysUserBankCard.setRealUserName(sysUserBankCardVO.getRealUserName());
-            findSysUserBankCard.setBankVerify(response != null && "00".equals(response.getRespCode()) ? 1 : 0);
+
+            findSysUserBankCard.setBankVerify(flag ? (response != null && "00".equals(response.getRespCode()) ? 1 : 0) : 1);
             sysUserBankCardService.updateById(findSysUserBankCard);
             SysUserBankCardHistory sysUserBankCardHistory = new SysUserBankCardHistory();
             sysUserBankCardHistory.setBankNumber(sysUserBankCardVO.getBankNumber());
@@ -205,7 +208,7 @@ public class SysUserBankCardServiceImpl extends ServiceImpl<SysUserBankCardMappe
             sysUserBankCard.setBankNumber(sysUserBankCardVO.getBankNumber().replaceAll("\\s+", ""));
             sysUserBankCard.setUserName(sysUserBankCardVO.getUserName());
             sysUserBankCard.setUserId(sysUserBankCardVO.getUserId());
-            sysUserBankCard.setBankVerify(response != null && "00".equals(response.getRespCode()) ? 1 : 0);
+            sysUserBankCard.setBankVerify(flag ? (response != null && "00".equals(response.getRespCode()) ? 1 : 0) : 1);
             //校验登录用户是否为合伙人或者是机构负责人
             boolean a = sysPartnerService.checkPartner(sysUser.getId());
             boolean b = sysAgencyLeaderService.checkUserId(sysUser.getId());

+ 14 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserLinkAreaServiceImpl.java

@@ -171,4 +171,18 @@ public class SysUserLinkAreaServiceImpl extends ServiceImpl<SysUserLinkAreaMappe
         }
         return  null;
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/26 17:23
+     *  @Description:  查询用户分页
+     */
+    @Override
+    public BasePageResult<SysUserBaseVO> findAllUsers(SysUserDto sysUserDto) {
+        Page<SysUserBaseVO> page = new Page<>(sysUserDto.getPageNum(),
+                sysUserDto.getPageSize());
+        Page<SysUserBaseVO> userPageResult = sysUserMapper.findAllUsers(page, sysUserDto);
+        return  new BasePageResult<>(sysUserDto.getPageNum(), page.getSize(), userPageResult.getTotal(), page.getPages(),
+                userPageResult.getRecords());
+    }
 }

+ 77 - 11
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -144,6 +144,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Value("${httpUrl}")
     private String httpUrl;
+    //晋掌柜APP: 未注册的手机号登录时创建新账户使用 -deptId -referrerId
+    @Value("${jzg.deptId}")
+    private String deptId;
+
+    @Value("${jzg.referrerId}")
+    private String referrerId;
+
+
 
     @Override
     public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
@@ -160,15 +168,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         List<SysUserBaseVO> records = userList.getRecords();
         if (!CollectionUtils.isEmpty(records)) {
             for (SysUserBaseVO record : records) {
-                //合伙人APP邀请团队长查询推介人
-//                if (record.getType() != 0) {
-//                    String referrerId = record.getReferrerId();
-//                    if (StringUtils.isNotEmpty(referrerId)) {
-//                        record.setReferrerId(referrerId);
-//                        SysUser sysUser = sysUserMapper.selectById(record.getReferrerId());
-//                        record.setReferrerName(sysUser.getName());
-//                    }
-//                }
                 // 查询推荐人
                 EsmUserReferrer referrer = esmUserReferrerService.getById(record.getUserId());
                 if (ObjectUtils.isEmpty(referrer)) {
@@ -915,6 +914,45 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return HttpResult.ok("新增成功");
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public SysUser saveUserJzgInfo(SysUser2Vo sysUserVo) {
+        SysUser sysUser = sysUserVo.getSysUser();
+        //处理密码
+        if (StringUtils.isNotEmpty(sysUser.getPassword())) {
+            String salt = PasswordUtils.getSalt();
+            String pwd = PasswordUtils.encode(sysUser.getPassword(), salt);
+            sysUser.setPassword(pwd);
+            sysUser.setSalt(salt);
+        } else {
+            throw new SystemException("密码不能为空");
+        }
+        String userId = gainNextUserId(sysUser.getDeptId());
+
+        sysUser.setId(userId);
+        save(sysUser);
+
+        //角色配置
+        SysUserRole userRole = new SysUserRole();
+        userRole.setUserId(sysUser.getId());
+        userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
+        sysUserRoleService.save(userRole);
+        if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
+            //推荐人
+            esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
+        } else if ("20".equals(sysUser.getRoleId()) || "21".equals(sysUser.getRoleId())) {
+            //如果是 团队长或代理人 并且没有推荐人 则默认推荐人为自己
+            esmUserReferrerService.addReferrer(sysUser.getId(), userId);
+        }
+        SysUserInfo userInfo = sysUserVo.getSysUserInfo();
+        userInfo.setId(sysUser.getId());
+        sysUserInfoService.save(userInfo);
+
+        SysUser sysUser1 = sysUserMapper.selectById(sysUser.getReferrerId());
+        SpringUtil.getBean(RecordUserUtils.class).addRecord(userId, sysUser1.getName());
+        return sysUserMapper.selectById(userId);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult saveUserInfoByPartner(SysUser2Vo sysUserVo) {
@@ -2765,7 +2803,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUserBankCardVO.setPhoneNo(user.getMobile());
             sysUserBankCardVO.setRealUserName(user.getName());
             sysUserBankCardVO.setUserName(user.getName());
-            bankCardService.insertByBankNumber(sysUserBankCardVO);
+            bankCardService.insertByBankNumber(sysUserBankCardVO,false);
         }
         // 保存个代银行卡认证轨迹
         SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
@@ -2835,9 +2873,37 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     }
 
+    @Override
+    public SysUser registerAPPUser(String phone) {
+
+        SysUser2Vo sysUser2Vo = new SysUser2Vo();
+        SysUser sysUser = new SysUser();
+        SysUserInfo sysUserInfo = new SysUserInfo();
+        sysUser.setMobile(phone);
+        sysUser.setReferrerId(referrerId);
+        sysUser.setDeptId(deptId);
+        sysUser.setStatus(0);
+        sysUser.setFactorVerify(0);
+        sysUser.setPassword("123456");
+        sysUser.setRoleId("20");
+        sysUser.setRoleName("代理人");
+        sysUser.setName("新增用户"+phone);
+        sysUser2Vo.setSysUser(sysUser);
+        sysUserInfo.setSex("U");
+        sysUser2Vo.setSysUserInfo(sysUserInfo);
+
+        return this.saveUserJzgInfo(sysUser2Vo);
+
+    }
+
+    @Override
+    public List<SysUser> selectByUserId(List<String> ids) {
+        return sysUserMapper.selectByUserId(ids);
+    }
+
     /**
      * 拼接机构来源
-     * @param users
+     * @param user
      */
     private void appendName(SysUser user) {
         StringBuilder stringBuilder = new StringBuilder();

+ 16 - 1
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -124,6 +124,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
 
         IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageTaskStatistics(page,taskStatisticsVo);
+        Long  total  = this.insAreaCompanyMapper.queryPageTaskStatisticsTotal(taskStatisticsVo);
         if (list != null && !list.getRecords().isEmpty()) {
             List<TaskStatisticsDto> records = list.getRecords();
             for (TaskStatisticsDto record : records) {
@@ -159,7 +160,6 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
                 taskStatisticsVo.setUserId(null);
             }
         }
-        Long  total  = this.insAreaCompanyMapper.queryPageTaskStatisticsTotal(taskStatisticsVo);
         list.setTotal(total);
         return list;
     }
@@ -532,6 +532,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
         taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
         taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
+        getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
         PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
         Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
         pageVo.setPageNum(taskStatisticsVo.getPageNum());
@@ -571,6 +572,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
             taskStatisticsVo.setParterCountyId(countyId);
         }
 
+        getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
         HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
         taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
         taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
@@ -594,6 +596,19 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
      **/
     @Override
     public List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo) {
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
+            if("7".equals(taskStatisticsVo.getDays())){
+                taskStatisticsVo.setDateType("2");
+            } else if ("30".equals(taskStatisticsVo.getDays())) {
+                taskStatisticsVo.setDateType("3");
+            } else if ("1".equals(taskStatisticsVo.getDays())){
+                taskStatisticsVo.setDateType("1");
+            }
+        }
+        HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
+        taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
+        taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
+        getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
         List<TaskStatisticsDto> result = new ArrayList<>();
          //0 报价中 1 待核保  2 已核保代缴费  3 已承保  4  核保退回
         for (int i = 0; i < 5; i++) {

+ 4 - 1
src/main/java/com/ydtech/modules/admin/utils/SliceUpDateUtil.java

@@ -262,7 +262,10 @@ public class SliceUpDateUtil {
      */
     public static String getEndOfMonth(int year, int month) {
         Calendar calendar = Calendar.getInstance();
-        calendar.set(year, month - 1, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+        calendar.set(year, month - 1, 1);
+        int lastDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        calendar.set(Calendar.DAY_OF_MONTH, lastDayOfMonth);
+        // 设置时间为当天的最后一刻
         calendar.set(Calendar.HOUR_OF_DAY, 23);
         calendar.set(Calendar.MINUTE, 59);
         calendar.set(Calendar.SECOND, 59);

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

@@ -1,6 +1,7 @@
 package com.ydtech.modules.fee.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
 import com.ydtech.constants.enums.dict.insurance.EnergyType;
 import com.ydtech.constants.enums.dict.insurance.NatureOfVehicleUse;
 import com.ydtech.constants.enums.dict.insurance.VehicleType;
@@ -2827,7 +2828,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
 
         for (int i = 0; i < ptlAgreementUndwrtRulesNews.size(); i++) {
             //判断是否匹配
-            if (!judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList, logs)) {
+            if (!judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList, logs,insOrders)) {
                 throw new SystemException(logs.toString());
             }
         }
@@ -2926,7 +2927,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
      */
     private boolean judgementsRules(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinks,
                                     List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList,
-                                    StringBuilder logs) {
+                                    StringBuilder logs,InsOrders insOrders) {
         boolean useFlag = true;
 
         for (int i = 0; i < ptlAgreementUndwrtRulesAttrLinks.size(); i++) {
@@ -2961,7 +2962,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                 }
             }
             if(!Objects.isNull(ruleAttrMappingVo.getValue())) {
-                useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
+                useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue(),insOrders);
             }else{
                 useFlag = false;
             }
@@ -3070,7 +3071,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     }
 
     private boolean attrEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink,
-                              PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value) {
+                              PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value,InsOrders insOrders) {
         if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
             return checkBoxEqual(ptlAgreementUndwrtRulesAttrLink, value);
         } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")) {
@@ -3090,7 +3091,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         } else if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) {
             return radioEqual(ptlAgreementUndwrtRulesAttrLink, value);
         } else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("datetime")){
-            return dateTimeEqual(ptlAgreementUndwrtRulesAttrLink, value);
+            return dateTimeEqual(ptlAgreementUndwrtRulesAttrLink, value, insOrders);
         }
         return false;
     }
@@ -3352,37 +3353,49 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     }
 
 
-    public boolean dateTimeEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
+    public boolean dateTimeEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value, InsOrders insOrders){
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        LocalDateTime v = LocalDateTime.parse(value,formatter);
-        LocalDateTime min = null,max = null;
-        if(!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMin())){
-            min = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMin(),formatter);
-        }
-        if(!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMax())){
-            max = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMax(),formatter);
-        }
-
-        //统一处理数值
-        if ("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isAfter(min) && v.isBefore(max)) {
+        //判断险种 的起保时间
+        if(ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("SyStartTime") || ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("JqStartTime"))
+        {
+            if(insOrders.getProductid().equals(ProductsType.PT_0330.getCode()) && ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("SyStartTime")){
                 return true;
             }
-        } else if ("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isBefore(min)) {
+            if(insOrders.getProductid().equals(ProductsType.PT_034001.getCode()) && ptlAgreementUndwrtRulesAttrLink.getAttrCode().equals("JqStartTime")){
                 return true;
             }
-        } else if ("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isBefore(min)) {
-                return true;
+        }
+        if(!Objects.isNull(value) && !value.isEmpty()) {
+            LocalDateTime v = LocalDateTime.parse(value, formatter);
+            LocalDateTime min = null, max = null;
+            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMin())) {
+                min = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMin(), formatter);
             }
-        } else if ("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isAfter(max)) {
-                return true;
+            if (!Objects.isNull(ptlAgreementUndwrtRulesAttrLink.getMax())) {
+                max = LocalDateTime.parse(ptlAgreementUndwrtRulesAttrLink.getMax(), formatter);
             }
-        } else if ("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
-            if (!v.isAfter(max)) {
-                return true;
+
+            //统一处理数值
+            if ("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isAfter(min) && v.isBefore(max)) {
+                    return true;
+                }
+            } else if ("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isBefore(min)) {
+                    return true;
+                }
+            } else if ("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isBefore(min)) {
+                    return true;
+                }
+            } else if ("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isAfter(max)) {
+                    return true;
+                }
+            } else if ("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())) {
+                if (!v.isAfter(max)) {
+                    return true;
+                }
             }
         }
         return false;

+ 4 - 4
src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java

@@ -10,7 +10,6 @@ import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.base.controller.BaseController;
-import com.ydtech.modules.fee.service.FeeRuleSchemeService;
 import com.ydtech.modules.fnc.entity.InsFeeAudit;
 import com.ydtech.modules.fnc.entity.InsFeeAuditHistory;
 import com.ydtech.modules.fnc.entity.vo.ProblemOrderQueryVo;
@@ -31,13 +30,11 @@ import com.ydtech.modules.order.service.InsOrdersTrackService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
 import java.util.List;
 
 @Api(tags = "财务-车险结算")
@@ -138,7 +135,10 @@ public class CarSettleController extends BaseController {
 
                 //审核通过
                 if (auditOrderFeeVo.getAuditStatus().equals("1")) {
-
+                    LocalDateTime signingTime = areaList.get(0).getSigningTime();
+                    if (signingTime==null) {
+                        throw new SystemException("签单日期为空不允许审核,请手动更新订单签单时间或者联系管理员!!!");
+                    }
                     insFeeAuditService.feeAudit(orderNo, areaList.get(0).getId(), false, FeeAuditAuditstatus.PASSED.getCode());
                 } else if (auditOrderFeeVo.getAuditStatus().equals("0") || auditOrderFeeVo.getAuditStatus().equals("2")) {
                     insFeeAuditService.saveDefaultInsFeeAuditAndHistory(orderNo, areaList.get(0).getId(),

+ 7 - 1
src/main/java/com/ydtech/modules/fnc/dao/InsPlyIncomeMapper.java

@@ -1,7 +1,6 @@
 package com.ydtech.modules.fnc.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.admin.model.report.financialReceivables.*;
 import com.ydtech.modules.admin.model.report.profitAnalysis.ProfitAnalysisDto;
 import com.ydtech.modules.admin.model.report.profitAnalysis.ProfitAnalysisQueryDto;
@@ -231,4 +230,11 @@ public interface InsPlyIncomeMapper extends BaseMapper<InsPlyIncome> {
     BigDecimal queryDateByNotTypeSumAmount(@Param("vo") FinancialReceivablesQueryVo financialReceivablesQueryVo);
 
     BigDecimal queryDateByTypeNotSumAmount(@Param("vo") FinancialReceivablesQueryVo financialReceivablesQueryVo);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 10:08
+     *  @Description:  查询签单日期为空的结算日期
+     */
+    List<InsPlyIncome> findListByDate(@Param("benginDate") String benginDate, @Param("endDate") String endDate);
 }

+ 7 - 1
src/main/java/com/ydtech/modules/fnc/service/InsPlyIncomeService.java

@@ -281,5 +281,11 @@ public interface InsPlyIncomeService extends IService<InsPlyIncome> {
      * 纠正数据
      */
     void correctData(InsPlyIncomeVo insPlyIncomeVo);
-
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 10:36
+     *  @Description:  查询签单日期为空的结算数据
+     */
+    List<InsPlyIncome> findListByDate(String benginDate, String endDate);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java

@@ -4198,4 +4198,14 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
             }
         }
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 10:36
+     *  @Description: 查询签单日期为空的数据
+     */
+    @Override
+    public List<InsPlyIncome> findListByDate(String benginDate, String endDate) {
+        return baseMapper.findListByDate(benginDate,endDate);
+    }
 }

+ 1 - 1
src/main/java/com/ydtech/modules/ins/model/vo/QuoteRespVo.java

@@ -225,7 +225,7 @@ public class QuoteRespVo {
     }
 
     public void setSyClaims(String syClaims) {
-        this.syClaims = StringUtils.isEmpty(jqClaims) ? null : syClaims;
+        this.syClaims = StringUtils.isEmpty(syClaims) ? null : syClaims;
     }
 
     public List<AccidentResponseVo> getAccidentInfo() {

+ 35 - 0
src/main/java/com/ydtech/modules/inv/utils/LocalDateTimeUtils.java

@@ -4,7 +4,11 @@ package com.ydtech.modules.inv.utils;
  * @author jianlong
  * @date 2024-01-24 18:26
  */
+
+import cn.hutool.core.date.LocalDateTimeUtil;
+
 import java.time.*;
+import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
@@ -467,4 +471,35 @@ public class LocalDateTimeUtils {
         return LocalDateTime.of(LocalDate.now().plus(1L, ChronoUnit.YEARS).with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
     }
 
+    public static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+    /**
+     * 现在时间在开始和结束时间之间
+     *
+     * @param start 开始时间
+     * @param end   结束时间
+     * @return true -> 在 false -> 不在
+     */
+    public static boolean nowIsBetweenStartAndEnd(String start, String end) {
+        try {
+            LocalDateTime startDateTime = LocalDateTime.parse(start, dateTimeFormatter);
+            LocalDateTime endDateTime = LocalDateTime.parse(end, dateTimeFormatter);
+            return nowIsBetweenStartAndEnd(startDateTime, endDateTime);
+        }catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+     * 现在时间在开始和结束时间之间
+     *
+     * @param start 开始时间
+     * @param end   结束时间
+     * @return true -> 在 false -> 不在
+     */
+    public static boolean nowIsBetweenStartAndEnd(LocalDateTime start, LocalDateTime end) {
+        LocalDateTime now = LocalDateTime.now();
+        return start.isBefore(now) && end.isAfter(now);
+    }
+
 }

+ 2 - 1
src/main/java/com/ydtech/modules/order/components/dajia/DaJiaRequestApiComponents.java

@@ -57,7 +57,8 @@ public class DaJiaRequestApiComponents {
      */
     private <Q, S> S post(Q q, TradeCode tradeCode, Class<S> tClass) throws Exception {
 
-        String url = apiComponents.getUrl() + tradeCode.getCode() + "/inf.dd";
+//        String url = apiComponents.getUrl() + tradeCode.getCode() + "/inf.dd";
+        String url = apiComponents.getUrl() + tradeCode.getCode();
 
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.setContentType(MediaType.TEXT_PLAIN);

+ 2 - 1
src/main/java/com/ydtech/modules/order/components/zijin/ZijinDuplicateInsuranceComponents.java

@@ -78,7 +78,8 @@ public class ZijinDuplicateInsuranceComponents extends ResponseMessageAbstractHa
 
         //及时起保的
         if(CalculateFlagEnum.CF_2.getCode().equals(calculateFlag)){
-            jqEndDate = GuorenDuplicateInsuranceComponent.getTimelyEndDate(rtnMsg, TIMELY_JQ_REGEX);
+//            jqEndDate = GuorenDuplicateInsuranceComponent.getTimelyEndDate(rtnMsg, TIMELY_JQ_REGEX);
+            jqEndDate = GuorenDuplicateInsuranceComponent.getEndDate(rtnMsg, DAN_JQ_REGEX); // 获取日期修改
             if(jqEndDate.equals("")){
                 //正常的日期
                 jqEndDate = GuorenDuplicateInsuranceComponent.getEndDate(rtnMsg, DAN_JQ_REGEX);

+ 6 - 1
src/main/java/com/ydtech/modules/order/components/zijin/ZijinRequestApiComponents.java

@@ -83,7 +83,7 @@ public class ZijinRequestApiComponents {
                                                           HttpHeaders httpHeaders) {
         String url = zijinApiConfigurationProperties.getUrl() + requestUrl.getUri();
         B b = insCrawlerOrderComponents.request(url, InsuranceEnum.ZKIC, requestUrl.getDesc(), requestBody, responseType, httpHeaders);
-        ResultEnum.verifyQuotation(b.getRtnCode(), b.getRtnMsg());
+//        ResultEnum.verifyQuotation(b.getRtnCode(), b.getRtnMsg());
         return b;
     }
 
@@ -137,6 +137,11 @@ public class ZijinRequestApiComponents {
         if (!ObjectUtils.isEmpty(entries)) {
             String authorization = (String) entries.get(AUTHORIZATION);
             String zKIApiAuthorization = (String) entries.get(ZKI_API_AUTHORIZATION);
+
+            System.out.printf("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
+            System.out.printf("authorization:" + authorization);
+            System.out.printf("zKIApiAuthorization:" + zKIApiAuthorization);
+            System.out.printf("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
             httpHeaders.set(AUTHORIZATION, authorization);
             httpHeaders.set(ZKI_API_AUTHORIZATION, zKIApiAuthorization);
             return httpHeaders;

+ 2 - 2
src/main/java/com/ydtech/modules/order/constants/QuoteNumberConstant.java

@@ -54,8 +54,8 @@ public class QuoteNumberConstant {
     @Getter
     public enum QuoteResult{
         FAIL(0,"报价失败"),
-        SUCCESS(1,"报价成功"),
-        QUOTE_NUM_NOT_ENOUGH(2,"次数不足"),;
+        SUCCESS(1,"报价成功"),;
+//        QUOTE_NUM_NOT_ENOUGH(2,"次数不足"),;
         private Integer code;
         private String desc;
         public static String getByCode(String code){

+ 31 - 0
src/main/java/com/ydtech/modules/order/controller/ExternalOrderController.java

@@ -20,6 +20,7 @@ import com.ydtech.modules.order.service.InsTaskImagesService;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.vo.InquiryNowFeeQueryVo;
 import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -28,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Objects;
 
 import static com.ydtech.modules.base.model.vo.PageVo.buildPageRequest;
@@ -205,6 +207,8 @@ public class ExternalOrderController {
         externalOrderFeeVo.blank();
         ExternalOrderFeeVo resultExternalOrderFeeVo = feeRuleSchemeNewService.calcCostsExternalExportData(ptlAgreement, noInquiryNowFee, externalOrderFeeVo);
 
+        resultExternalOrderFeeVo.setCostId(noInquiryNowFee!=null?noInquiryNowFee.getId():"");
+
         return HttpResult.ok(resultExternalOrderFeeVo);
     }
 
@@ -214,4 +218,31 @@ public class ExternalOrderController {
 
         return insOrdersService.delExternalOrder(insOrdersEditingVo)? HttpResult.ok("删除成功") : HttpResult.error("删除失败");
     }
+
+    /**
+     * 外部订单非现询费用
+     */
+    @PostMapping("/externalInquiryNowFeeOrderFee")
+    @ApiOperation("外部订单非现询费用")
+    public HttpResult<Object> externalInquiryNowFeeOrderFee(@RequestBody ExternalOrderFeeVo externalOrderFeeVo){
+        PtlAgreement ptlAgreement = ptlAgreementService.getById(externalOrderFeeVo.getAgreementId());
+        ProductsType productsType = InsuranceRisk.determineInsuranceInformation(externalOrderFeeVo.getKinds(), externalOrderFeeVo.getRisks());
+        externalOrderFeeVo.setProductCode(productsType.getCode());
+        InquiryNowFeeQueryVo inquiryNowFeeQueryVo =new InquiryNowFeeQueryVo();
+        inquiryNowFeeQueryVo.setAgreementId(externalOrderFeeVo.getAgreementId());
+        inquiryNowFeeQueryVo.setProductId(productsType.getCode());
+        List<PtlAgreementProductCostsNew> inquiryNowFeeList = ptlAgreementProductCostsNewService.getInquiryNowFee(inquiryNowFeeQueryVo);
+        PtlAgreementProductCostsNew noInquiryNowFee =  new PtlAgreementProductCostsNew();
+        if(inquiryNowFeeList == null || inquiryNowFeeList.size()==0){
+            throw new SystemException("不存在非现询费用");
+        }else{
+            noInquiryNowFee = inquiryNowFeeList.get(0);
+        }
+        externalOrderFeeVo.blank();
+        ExternalOrderFeeVo resultExternalOrderFeeVo = feeRuleSchemeNewService.calcCostsExternalExportData(ptlAgreement, noInquiryNowFee, externalOrderFeeVo);
+
+        resultExternalOrderFeeVo.setCostId(noInquiryNowFee!=null?noInquiryNowFee.getId():"");
+
+        return HttpResult.ok(resultExternalOrderFeeVo);
+    }
 }

+ 17 - 7
src/main/java/com/ydtech/modules/order/controller/InsOrderReadPdfController.java

@@ -2,10 +2,6 @@ package com.ydtech.modules.order.controller;
 
 
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.modules.admin.model.dto.SysUserDto;
-import com.ydtech.modules.admin.model.dto.SysUserLinkAreaDto;
-import com.ydtech.modules.admin.model.vo.*;
-import com.ydtech.modules.admin.service.SysUserLinkAreaService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.modules.order.entity.InsOrders;
@@ -17,14 +13,11 @@ import com.ydtech.modules.order.entity.vo.OrderQueryVo;
 import com.ydtech.modules.order.service.InsOrderReadPdfService;
 import com.ydtech.modules.order.service.InsOrdersService;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.io.IOException;
-import java.util.List;
 
 /**
  *  @version
@@ -136,6 +129,23 @@ public class InsOrderReadPdfController extends BaseController {
     }
 
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 10:40
+     *  @Description: 手动更新结算表的签单时间
+     */
+    @GetMapping("updatePlySignDate")
+    @ApiOperation("手动更新结算表的签单时间")
+    public HttpResult<Object> updatePlySignDate(String id) {
 
+        try{
+            insOrderReadPdfService.updatePlySignDate(id);
+            return HttpResult.ok("操作成功");
+        }catch (Exception e){
+            return HttpResult.error("操作失败"+e.getMessage());
+        }
+
+    }
 
 }

+ 7 - 0
src/main/java/com/ydtech/modules/order/controller/QuoteConfigController.java

@@ -102,6 +102,13 @@ public class QuoteConfigController extends BaseController {
         return HttpResult.ok(quoteDetails);
     }
 
+    @PostMapping(value = "getAppendUserQuoteInfo")
+    @ApiOperation(value = "增次详情")
+    public HttpResult getAppendUserQuoteInfo(@RequestBody QuoteDetailsQueryVo quoteDetailsQueryVo){
+        QuoteDetailsVo quoteDetailsVo = sysQuoteConfigService.getAppendUserQuoteInfo(quoteDetailsQueryVo.getCompanyId(),quoteDetailsQueryVo.getAgentId(),quoteDetailsQueryVo.getId());
+        return HttpResult.ok(quoteDetailsVo);
+    }
+
     @GetMapping(value = "getQuoteAction")
     @ApiModelProperty(value = "获取报价动作字典")
     public HttpResult getQuoteAction(){

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

@@ -183,4 +183,12 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
             @Param("type") Integer code,
             @Param("flag") Boolean flag
     );
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/16 10:34
+     *  @Description: 更新空值
+     */
+    boolean updateWithNull(InsOrders insOrders);
 }

+ 2 - 0
src/main/java/com/ydtech/modules/order/dao/SysQuoteUserConfigAppendMapper.java

@@ -18,4 +18,6 @@ import java.util.List;
  */
 public interface SysQuoteUserConfigAppendMapper extends BaseMapper<SysQuoteUserConfigAppend> {
     public Page<QuoteDetailsVo> getAppendUserQuote(Page page,@Param("param") QuoteDetailsQueryVo quoteDetailsQueryVo);
+
+    public QuoteDetailsVo getAppendUserQuoteInfo(@Param("companyId") String companyId,@Param("userId") String userId,@Param("id") String id);
 }

+ 1 - 2
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -14,7 +14,6 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -658,7 +657,7 @@ public class InsAreaCompany implements Serializable {
     }
 
     public void setPaymentLink(String paymentLink) {
-        this.signingTime = LocalDateTime.now();
+      //  this.signingTime = LocalDateTime.now();
         this.paymentLink = paymentLink;
     }
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompanyExternalFee.java

@@ -49,6 +49,12 @@ public class InsAreaCompanyExternalFee implements Serializable {
     @TableField(value = "no_other_costs_proportion")
     private BigDecimal noOtherCostsProportion;
 
+    @TableField(value = "cost_id")
+    private String  costId;
+
+    @TableField(value = "cost_flag")
+    private String  costFlag;
+
 
     public BigDecimal getJqSuperviseCostsProportion() {
         return jqSuperviseCostsProportion == null ? BigDecimal.ZERO : jqSuperviseCostsProportion;

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/InsBusinessInsurance.java

@@ -69,7 +69,7 @@ public class InsBusinessInsurance implements Serializable {
     public static boolean isAdditionalInsurance(String kindCode){
         if(kindCode.equals("D3") || kindCode.equals("D4") || kindCode.equals("L") || kindCode.equals("MJ1") || kindCode.equals("MJ2") ||
         kindCode.equals("MJ3") || kindCode.equals("MJ4") || kindCode.equals("SY_FJ_YBW1") || kindCode.equals("SY_FJ_YBW2") ||
-        kindCode.equals("SY_FJ_YBW3") || kindCode.equals("BD")){
+        kindCode.equals("SY_FJ_YBW3") || kindCode.equals("BD") || kindCode.equals("SY_WBDWGZ")){
             return true;
         }
         return false;

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/api/bohai/response/UnderwritingResponse.java

@@ -186,7 +186,7 @@ public class UnderwritingResponse extends BoHaiBaseResponse {
             private static final String MESSAGES = "核保成功";
 
             public DrivingInsuranceDto toDrivingInsuranceDto() {
-                if (!MESSAGES.equals(this.getResultMsg())) {
+                if (StringUtils.isEmpty(this.getApplicationNo())) {
                     throw new SystemException(this.getResultMsg());
                 }
 

+ 1 - 0
src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangAccuracyCalculateRequest.java

@@ -751,6 +751,7 @@ public class YangGuangAccuracyCalculateRequest extends YangGuangBaseRequest{
             this.CarCheckStatus = "2";
             this.Inputnewenergyflag = carInfoVo.isNewEnergy() ? "1" : "0";
             this.FuelType = carInfoVo.getEnergyType();
+            this.SeatCount = carInfoVo.getSeatCount();
         }
     }
 

+ 5 - 1
src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangGetNonVehicleProductsRequest.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.entity.api.yangguang.request;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.api.yangguang.constants.YangGuangCarType;
 import com.ydtech.modules.order.entity.api.yangguang.constants.YgUseNatureCodeMapping;
 import com.ydtech.modules.order.entity.config.YangGuangConfigureParameters;
 import lombok.Data;
@@ -105,7 +106,10 @@ public class YangGuangGetNonVehicleProductsRequest extends YangGuangBaseRequest
         if (useNatureCode != null) {
             this.UseNatureCode = YgUseNatureCodeMapping.getYgUseNatureCode(useNatureCode);
         }
-        this.VehicleType = jsonObject.getString("cimodelclass");
+        String cartype = jsonObject.getString("cartype");
+        //车辆种类
+        YangGuangCarType yangGuangCarType = Enum.valueOf(YangGuangCarType.class,cartype);
+        this.VehicleType = yangGuangCarType.getCode();
         this.LicenseCategory = jsonObject.getString("cartype");
         this.Toncount = jsonObject.getString("seatCount");
     }

+ 12 - 0
src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerQuoteResponse.java

@@ -142,6 +142,18 @@ public class CrawlerQuoteResponse extends CrawlerBaseResponse {
         @JsonProperty("price")
         private String price;
 
+        /**
+         * 非车险起保时间
+         */
+        @JsonProperty("fcx_startDate")
+        private String divingInsurancesStartDate;
+
+        /**
+         * 非车险终保时间
+         */
+        @JsonProperty("fcx_endDate")
+        private String divingInsurancesEndDate;
+
         public static List<AccidentResponseVo> toAccidentResponseVoList(List<DivingInsurancesDto> drivingInsurances) {
             return drivingInsurances.stream().map(DivingInsurancesDto::toAccidentResponseVo).collect(Collectors.toList());
         }

+ 5 - 1
src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteVo.java

@@ -1,6 +1,5 @@
 package com.ydtech.modules.order.entity.vo;
 
-import com.alibaba.fastjson.JSONArray;
 import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.order.entity.vo.guoren.GuoRenSpecialAgreementVo;
@@ -176,4 +175,9 @@ public class BaseQuoteVo<T> {
 
     @ApiModelProperty("报价比例")
     private BigDecimal quoteRatio;
+
+    // add by hxl
+    @ApiModelProperty("是否现询 1.是 2.否")
+    private String costFlag;
+
 }

+ 8 - 0
src/main/java/com/ydtech/modules/order/entity/vo/ExternalOrderFeeVo.java

@@ -91,6 +91,14 @@ public class ExternalOrderFeeVo {
     @ApiModelProperty(value = "计算的非车入口比例")
     private BigDecimal NoCostsProportion;
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/16 12:07
+     *  @Description: 费用id
+     */
+    private String  costId;
+
 
     public void blank(){
         if(Objects.isNull(this.jqPremium)){

+ 17 - 2
src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java

@@ -13,15 +13,14 @@ import com.ydtech.modules.order.entity.InsBusinessInsurance;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.TaxArrears;
 import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
-import com.ydtech.utils.BigDecimalUtils;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.utils.BigDecimalUtils;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
 
-import javax.persistence.NamedQueries;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
@@ -93,6 +92,22 @@ public class InsOrdersEditingVo extends InsOrders implements Serializable {
     @ApiModelProperty("现询费用id")
     private String nowCostsId;
 
+    // add  by  2024-12-16
+    @ApiModelProperty("是否现询 1.是 2.否")
+    private String costFlag;
+
+    // add  by  2024-12-17
+    @ApiModelProperty("交强出口比例")
+    private String  jqExportFee;
+
+    // add  by  2024-12-17
+    @ApiModelProperty("商业出口比例")
+    private String  syExportFee;
+
+    // add  by  2024-12-17
+    @ApiModelProperty("非车出口比例")
+    private String  noExportFee;
+
     @Data
     @AllArgsConstructor
     @NoArgsConstructor

+ 2 - 0
src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsQueryVo.java

@@ -21,6 +21,8 @@ public class QuoteDetailsQueryVo extends PageRequest {
     @ApiModelProperty(value = "子订单号")
     private String subOrderNo;
 
+    private String id;
+
     @ApiModelProperty(value = "动作")
     private String action;
 

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/vo/QuoteDetailsVo.java

@@ -8,6 +8,9 @@ import lombok.Data;
  */
 @Data
 public class QuoteDetailsVo {
+
+    private String id;
+
     @ApiModelProperty(value = "子订单号")
     private String subOrderNo;
 
@@ -38,6 +41,9 @@ public class QuoteDetailsVo {
     @ApiModelProperty(value = "联系电话")
     private String mobile;
 
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
     @ApiModelProperty(value = "结果")
     private String result;
 

+ 72 - 0
src/main/java/com/ydtech/modules/order/orderThread/OrderFailRunnableThread.java

@@ -0,0 +1,72 @@
+package com.ydtech.modules.order.orderThread;
+
+import com.alibaba.fastjson.JSON;
+import com.ydtech.constants.RabbitMqEnum;
+import com.ydtech.modules.order.entity.po.InsOrderPushMsg;
+import com.ydtech.modules.order.entity.vo.PushDataVo;
+import com.ydtech.modules.order.service.InsOrderPushMsgService;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.UUID;
+
+import static org.springframework.amqp.core.MessageProperties.CONTENT_TYPE_TEXT_PLAIN;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/11/5 15:50
+ *  @Description:  处理失败订单的的线程池
+ */
+public class OrderFailRunnableThread implements Runnable {
+
+    private RabbitTemplate rabbitTemplate;
+
+    private ArrayList<String> message =new ArrayList<>();
+
+    private InsOrderPushMsgService insOrderPushMsgService;
+
+    public OrderFailRunnableThread(RabbitTemplate rabbitTemplate, ArrayList<String> message, InsOrderPushMsgService insOrderPushMsgService) {
+        this.rabbitTemplate = rabbitTemplate;
+        this.message = message;
+        this.insOrderPushMsgService = insOrderPushMsgService;
+    }
+
+    public OrderFailRunnableThread() {
+    }
+
+    public OrderFailRunnableThread(InsOrderPushMsgService insOrderPushMsgService, ArrayList<String> message) {
+        this.message = message;
+        this.insOrderPushMsgService = insOrderPushMsgService;
+    }
+
+    @Override
+    public void run() {
+        //发送数据
+        this.message.forEach(item ->{
+            //修改执行相应业务逻辑
+            MessageProperties messageProperties = new MessageProperties();
+            messageProperties.setMessageId(UUID.randomUUID().toString());
+            messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+            messageProperties.setContentEncoding("UTF-8");
+            Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
+            PushDataVo pushDataVo = JSON.parseObject(item, PushDataVo.class);
+            //推送
+            InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+            try{
+                //更新狀態
+                insOrderPushMsgService.save(insOrderPushMsg);
+                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_FAIL.getCode(), message_cj);
+            }catch(Exception e){
+                e.getStackTrace();
+            }
+
+        });
+
+    }
+}
+

+ 20 - 12
src/main/java/com/ydtech/modules/order/orderThread/OrderRunnableThread.java

@@ -1,12 +1,20 @@
 package com.ydtech.modules.order.orderThread;
 
 import com.alibaba.fastjson.JSON;
+import com.ydtech.constants.RabbitMqEnum;
 import com.ydtech.modules.order.entity.po.InsOrderPushMsg;
 import com.ydtech.modules.order.entity.vo.PushDataVo;
 import com.ydtech.modules.order.service.InsOrderPushMsgService;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.UUID;
+
+import static org.springframework.amqp.core.MessageProperties.CONTENT_TYPE_TEXT_PLAIN;
 
 /**
  *  @version
@@ -16,17 +24,17 @@ import java.util.Date;
  */
 public class OrderRunnableThread implements Runnable {
 
-    //private RabbitTemplate rabbitTemplate;
+    private RabbitTemplate rabbitTemplate;
 
     private ArrayList<String> message =new ArrayList<>();
 
     private InsOrderPushMsgService insOrderPushMsgService;
 
-   // public OrderRunnableThread(RabbitTemplate rabbitTemplate, ArrayList<String> message, InsOrderPushMsgService insOrderPushMsgService) {
-   //     this.rabbitTemplate = rabbitTemplate;
-   //     this.message = message;
-   //     this.insOrderPushMsgService = insOrderPushMsgService;
-    //}
+    public OrderRunnableThread(RabbitTemplate rabbitTemplate, ArrayList<String> message, InsOrderPushMsgService insOrderPushMsgService) {
+        this.rabbitTemplate = rabbitTemplate;
+        this.message = message;
+        this.insOrderPushMsgService = insOrderPushMsgService;
+    }
 
     public OrderRunnableThread() {
     }
@@ -41,18 +49,18 @@ public class OrderRunnableThread implements Runnable {
         //发送数据
         this.message.forEach(item ->{
             //修改执行相应业务逻辑
-           // MessageProperties messageProperties = new MessageProperties();
-           // messageProperties.setMessageId(UUID.randomUUID().toString());
-           // messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
-           // messageProperties.setContentEncoding("UTF-8");
-           // Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
+            MessageProperties messageProperties = new MessageProperties();
+            messageProperties.setMessageId(UUID.randomUUID().toString());
+            messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+            messageProperties.setContentEncoding("UTF-8");
+            Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
             PushDataVo pushDataVo = JSON.parseObject(item, PushDataVo.class);
             //推送
             InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
             try{
                 //更新狀態
                 insOrderPushMsgService.save(insOrderPushMsg);
-                //this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY.getCode(), message_cj);
+                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY.getCode(), message_cj);
             }catch(Exception e){
                 e.getStackTrace();
             }

+ 72 - 0
src/main/java/com/ydtech/modules/order/orderThread/OrderSignRunnableThread.java

@@ -0,0 +1,72 @@
+package com.ydtech.modules.order.orderThread;
+
+import com.alibaba.fastjson.JSON;
+import com.ydtech.constants.RabbitMqEnum;
+import com.ydtech.modules.order.entity.po.InsOrderPushMsg;
+import com.ydtech.modules.order.entity.vo.PushDataVo;
+import com.ydtech.modules.order.service.InsOrderPushMsgService;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.UUID;
+
+import static org.springframework.amqp.core.MessageProperties.CONTENT_TYPE_TEXT_PLAIN;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/11/5 15:50
+ *  @Description:  处理失败订单的的线程池
+ */
+public class OrderSignRunnableThread implements Runnable {
+
+    private RabbitTemplate rabbitTemplate;
+
+    private ArrayList<String> message =new ArrayList<>();
+
+    private InsOrderPushMsgService insOrderPushMsgService;
+
+    public OrderSignRunnableThread(RabbitTemplate rabbitTemplate, ArrayList<String> message, InsOrderPushMsgService insOrderPushMsgService) {
+        this.rabbitTemplate = rabbitTemplate;
+        this.message = message;
+        this.insOrderPushMsgService = insOrderPushMsgService;
+    }
+
+    public OrderSignRunnableThread() {
+    }
+
+    public OrderSignRunnableThread(InsOrderPushMsgService insOrderPushMsgService, ArrayList<String> message) {
+        this.message = message;
+        this.insOrderPushMsgService = insOrderPushMsgService;
+    }
+
+    @Override
+    public void run() {
+        //发送数据
+        this.message.forEach(item ->{
+            //修改执行相应业务逻辑
+            MessageProperties messageProperties = new MessageProperties();
+            messageProperties.setMessageId(UUID.randomUUID().toString());
+            messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+            messageProperties.setContentEncoding("UTF-8");
+            Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
+            PushDataVo pushDataVo = JSON.parseObject(item, PushDataVo.class);
+            //推送
+            InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+            try{
+                //更新狀態
+                insOrderPushMsgService.save(insOrderPushMsg);
+                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode(), message_cj);
+            }catch(Exception e){
+                e.getStackTrace();
+            }
+
+        });
+
+    }
+}
+

+ 7 - 0
src/main/java/com/ydtech/modules/order/service/InsOrderPayDateRecordService.java

@@ -34,4 +34,11 @@ public interface InsOrderPayDateRecordService extends IService<InsOrderPayDateRe
      *  @Description: 定时更新订单的时间
      */
      void batchOrderDate(String beginDate,String endDate);
+     /**
+      *  @version
+      *  @author: hxl
+      *  @Date: 2024/12/30 10:02
+      *  @Description: 自动更新应收单表中的签单日期
+      */
+    void batchOrderPlyOrderDate(String benginDate, String endDate);
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/InsOrderPushMsgService.java

@@ -15,7 +15,7 @@ public interface InsOrderPushMsgService extends IService<InsOrderPushMsg> {
     *  @Date: 2024/11/11 8:38
     *  @Description: 查询历史订单
     */
-   void getPushInsAreaCompanyList();
+   void getPushInsAreaCompanyList(String month);
 
 
    /**

+ 7 - 0
src/main/java/com/ydtech/modules/order/service/InsOrderReadPdfService.java

@@ -35,4 +35,11 @@ public interface InsOrderReadPdfService extends IService<InsOrderReadPdf> {
      *  @Description:  通過保險公司和pdf路徑读取配置信息
      */
     InsOrderReadPdfContentDto readPdfContent(InsOrderReadPdfContentVo insOrderReadPdfContentVo);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 10:41
+     *  @Description: 手动更新结算表的签单时间
+     */
+    void updatePlySignDate(String id);
 }

+ 2 - 0
src/main/java/com/ydtech/modules/order/service/SysQuoteConfigService.java

@@ -70,6 +70,8 @@ public interface SysQuoteConfigService extends IService<SysQuoteConfig> {
      */
     public Page<QuoteDetailsVo> getAppendUserQuote(Page page,QuoteDetailsQueryVo quoteDetailsQueryVo);
 
+    public QuoteDetailsVo getAppendUserQuoteInfo(String companyId,String userId,String id);
+
     /**
      * 根据保险公司获取今天用户追加的数据
      */

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -443,7 +443,7 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
         if (!Objects.isNull(nvhlodr1001Response)) {
             insAreaCompany.setCrossInsurance(JSONArray.parseArray(JSON.toJSONString(nvhlodr1001Response.getPolicyInfos())));
         }
-        insAreaCompanyService.insertCompanyAndOrders(insAreaCompany, insAreaCompanyAccidentalDriving);
+        insAreaCompanyService.insertCompanyAndOrders(companyId,insAreaCompany, insAreaCompanyAccidentalDriving);
         quoteRespVo.setCompanyId(companyId);
         quoteRespVo.setOrderno(quoteInfoVo.getOrderNo());
         // 车船税

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java

@@ -351,7 +351,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         });
         sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
         //刷新redis中的报价次数
-        sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteVo.getUserId(),sysQuoteRecords);
+        sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),yaQuoteInfoVo.getUserid(),sysQuoteRecords);
         log.debug("--------报价结束,车牌:{},vin:{}--------------", carInfo.getLicenseNo(), carInfo.getVinNo());
         return HttpResult.ok("报价成功", quoteRespVo);
 

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/IdentifyServiceImpl.java

@@ -142,7 +142,7 @@ public class IdentifyServiceImpl implements IdentifyService {
     private CardUserInfo  convertUseNatureCode(CardUserInfo cardUserInfo) {
         String useNature = cardUserInfo.getUseNature();
         if(useNature!=null && !"".equals(useNature)){
-            if("营运".equals(useNature)){
+            if("营运".equals(useNature) || "货运".equals(useNature)){
                 useNature="营业";
             }else if("非营运".equals(useNature)){
                 useNature="非营业";

+ 48 - 7
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java

@@ -104,6 +104,9 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
     @Autowired
     private InsFeeAuditHistoryService insFeeAuditHistoryService;
 
+    @Autowired
+    private InsOrderPushMsgService  insOrderPushMsgService;
+
     public InsAreaCompanyServiceImpl(@Lazy InsOrdersService insOrdersService, InsOrdersTrackService insOrdersTrackService, SysDeptService sysDeptService) {
         this.insOrdersService = insOrdersService;
         this.insOrdersTrackService = insOrdersTrackService;
@@ -128,6 +131,10 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
     @Transactional
     public void updateCompanyAndOrders(InsAreaCompany insAreaCompany) {
         baseMapper.updateById(insAreaCompany);
+        // add by hxl  2024-11-11  添加推送数据
+        if(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode().equals(insAreaCompany.getOrderstatus())){
+            insOrderPushMsgService.getPushSignInsAreaCompanyList(insAreaCompany.getId());
+        }
         //生成结算
         //判断协议是否为人工还是自动审核
         PtlAgreement ptlAgreement = ptlAgreementService.getById(insAreaCompany.getAgreementId());
@@ -558,10 +565,20 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         if (quoteVo.getStageFlag() == null) {
             throw new SystemException("暂存标志为空");
         }
-
         validQuoteVo(quoteVo);
-
-
+        if (StringUtils.isBlank(quoteVo.getAgreementId())) {
+            throw new SystemException("请选择协议!!");
+        }
+        if (StringUtils.isBlank(quoteVo.getCostFlag())) {
+            throw new SystemException("是否现询不能为空!");
+        }
+        if(StringUtils.isBlank(quoteVo.getNowCostsId())){
+            throw new SystemException("费用不能为空!!");
+        }
+        String nowCostsId = quoteVo.getNowCostsId();
+        if("1".equals(quoteVo.getCostFlag())){
+            nowCostsId =null;
+        }
 //        LambdaQueryWrapper<InsAreaCompany> queryWrapper = new LambdaQueryWrapper<>();
 //        queryWrapper.eq(InsAreaCompany::getJqpolicyno, quoteVo.getJqpolicyno())
 //                .or()
@@ -601,7 +618,7 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         agreementProductQueryVo.setProductCode(productId);
         agreementProductQueryVo.setIsAudit("1");
         agreementProductQueryVo.setAgreementId(ptlAgreement.getId());
-        agreementProductQueryVo.setNowCostsId(quoteVo.getNowCostsId());
+        agreementProductQueryVo.setNowCostsId(nowCostsId);
 
         List<PtlAgreementProductCostsNew> costsNews = ptlAgreementProductCostsNewService.getByAgreementId(agreementProductQueryVo);
 
@@ -723,6 +740,8 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         insAreaCompanyExternalFee.setNoSuperviseCostsProportion(quoteVo.getNoSuperviseCostsProportion() != null ? quoteVo.getNoSuperviseCostsProportion() : new BigDecimal(0));
         insAreaCompanyExternalFee.setNoOtherCostsProportion(quoteVo.getNoOtherCostsProportion() != null ? quoteVo.getNoOtherCostsProportion() : new BigDecimal(0));
 
+        insAreaCompanyExternalFee.setCostId(ptlAgreementProductCostsNew.getId());
+        insAreaCompanyExternalFee.setCostFlag(quoteVo.getCostFlag());
         this.insAreaCompanyExternalFeeService.save(insAreaCompanyExternalFee);
 
 
@@ -765,6 +784,10 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
             //审核表数据插入
             insFeeAuditService.saveDefaultInsFeeAuditAndHistory(insAreaCompany.getOrderno(), insAreaCompany.getId(), FeeAuditAuditstatus.UNREVICEWED.getCode(), null);
         }
+        // add by  hxl  2024-12-27   添加外部订单承保数据推送
+        if(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode().equals(insAreaCompany.getOrderstatus())){
+            insOrderPushMsgService.getPushSignInsAreaCompanyList(insAreaCompany.getId());
+        }
         return true;
     }
 
@@ -818,6 +841,16 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         if (StringUtils.isBlank(insOrdersEditingVo.getAgreementId())) {
             throw new SystemException("请选择协议!!");
         }
+        if (StringUtils.isBlank(insOrdersEditingVo.getCostFlag())) {
+            throw new SystemException("是否现询不能为空!");
+        }
+        if(StringUtils.isBlank(insOrdersEditingVo.getNowCostsId())){
+            throw new SystemException("费用不能为空!!");
+        }
+        String nowCostsId = insOrdersEditingVo.getNowCostsId();
+        if("1".equals(insOrdersEditingVo.getCostFlag())){
+            nowCostsId =null;
+        }
         //通过协议id 查询费用
         PtlAgreement ptlAgreement = ptlAgreementService.getById(insOrdersEditingVo.getAgreementId());
         InsOrders insOrders = new InsOrders();
@@ -848,7 +881,8 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
             insOrders.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
             insOrders.setInsureTime(insOrdersEditingVo.getSignDate());
         }
-        insOrdersService.updateById(insOrders);
+        //更新空值
+        insOrdersMapper.updateWithNull(insOrders);
         String subOrderNo = insOrdersEditingVo.getInsAreaCompanyList().get(0).getId();
         //处理保单
         InsAreaCompanyExternalPolicy externalPolicy = new InsAreaCompanyExternalPolicy();
@@ -880,11 +914,11 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         //查找协议的费用
         AgreementProductQueryVo agreementProductQueryVo = new AgreementProductQueryVo();
         List<String> productId = new ArrayList<>();
-        productId.add(insOrders.getProductid());
+        productId.add(insAreaCompany.getProductid());
         agreementProductQueryVo.setProductCode(productId);
         agreementProductQueryVo.setIsAudit("1");
         agreementProductQueryVo.setAgreementId(ptlAgreement.getId());
-        agreementProductQueryVo.setNowCostsId(insOrdersEditingVo.getNowCostsId());
+        agreementProductQueryVo.setNowCostsId(nowCostsId);
 
         List<PtlAgreementProductCostsNew> costsNews = ptlAgreementProductCostsNewService.getByAgreementId(agreementProductQueryVo);
 
@@ -898,6 +932,9 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
 
         InsAreaCompanyExternalFee insAreaCompanyExternalFee = new InsAreaCompanyExternalFee();
         insAreaCompanyExternalFee.setSubOrderNo(subOrderNo);
+        // add by hxl 2024-12-16    添加费用id 和是否现询
+        insAreaCompanyExternalFee.setCostId(insOrdersEditingVo.getNowCostsId());
+        insAreaCompanyExternalFee.setCostFlag(insOrdersEditingVo.getCostFlag());
         if (insOrdersEditingVo.getJqCostsProportion() != null) {
             if (jqSuperviseCostsProportion.compareTo(insOrdersEditingVo.getJqCostsProportion()) > 0) {
                 //总比例等于手续费比例
@@ -967,6 +1004,10 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
             //重新进入审核状态
             insFeeAuditService.saveDefaultInsFeeAuditAndHistory(insAreaCompany.getOrderno(), insAreaCompany.getId(), FeeAuditAuditstatus.UNREVICEWED.getCode(), null);
         }
+        // add by  hxl  2024-12-27   添加外部订单承保数据推送
+        if(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode().equals(insAreaCompany.getOrderstatus())){
+            insOrderPushMsgService.getPushSignInsAreaCompanyList(insAreaCompany.getId());
+        }
         return true;
     }
 

+ 12 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -168,9 +168,11 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
                 sysQuoteRecords.forEach(item -> {
                     item.setSubOrderNo(subOrderNo);
                 });
-                sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
-                //刷新redis中的报价次数
-                sysQuoteRedisService.refreshQuoteNum(t.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
+                if(sysQuoteRecords.size() > 0) {
+                    sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
+                    //刷新redis中的报价次数
+                    sysQuoteRedisService.refreshQuoteNum(t.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
+                }
             }
             throw new SystemException(response.getMessage());
         }
@@ -407,6 +409,13 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
                 kind.setAmount(kindInfoVo.getAmount());
             }
 
+            if (InsurKind.SY_WBDWGZ.getCode().equals(kindInfoVo.getKindCode())){
+                KindInfoVo aKind = kindList.stream().filter(x -> x.getKindCode().equals(InsurKind.A.getCode())).findFirst().orElse(null);
+                if(aKind != null) {
+                    kind.setAmount(map.get("A_amount"));
+                }
+            }
+
             if (!ObjectUtils.isEmpty(kindInfoVo.getDeductibleRate())) {
                 kind.setDeductibleRate(Double.parseDouble(kindInfoVo.getDeductibleRate()));
             }

+ 61 - 2
src/main/java/com/ydtech/modules/order/service/impl/InsOrderPayDateRecordServiceImpl.java

@@ -3,7 +3,8 @@ package com.ydtech.modules.order.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.exception.SystemException;
-import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fnc.entity.InsPlyIncome;
+import com.ydtech.modules.fnc.service.InsPlyIncomeService;
 import com.ydtech.modules.order.dao.InsOrderPayDateRecordMapper;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.api.pingan.utils.PDFUtil;
@@ -12,6 +13,7 @@ import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsOrderPayDateRecord;
 import com.ydtech.modules.order.entity.po.InsOrderReadPdf;
 import com.ydtech.modules.order.service.*;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -19,6 +21,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -29,6 +32,7 @@ import java.util.stream.Collectors;
  * @description 针对表【ins_order_pay_date_record(自动更新签单时间记录表)】的数据库操作Service实现
  * @createDate 2024-10-15 18:58:00
  */
+@Slf4j
 @Service
 public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDateRecordMapper, InsOrderPayDateRecord>
         implements InsOrderPayDateRecordService {
@@ -54,6 +58,9 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
     @Autowired
     private InsOrdersTrackService insOrdersTrackService;
 
+
+    @Autowired
+    private InsPlyIncomeService insPlyIncomeService;
     /**
      *  @version
      *  @author: hxl
@@ -97,6 +104,8 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
             String localUrl ="";
             if(StringUtils.isNotBlank(jqFileurl)){
                 localUrl = PDFUtil.trafferHttpToLocalPath(jqFileurl);
+            }else{
+                throw new SystemException("保单为空不能更新!!");
             }
             //通过保险公司配置读取截取的前缀和后缀
             LambdaQueryWrapper<InsOrderReadPdf> qws = new LambdaQueryWrapper<>();
@@ -122,7 +131,7 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
                 file.delete();
             }
             //插入數據
-            InsOrderPayDateRecord  dto=new InsOrderPayDateRecord(null, subOrderId, new Date(), new BaseController().getUserId(), subOrder.getPayDate(), subOrder.getSigningTime(), map.get("payDate"), map.get("signingTime"), oldMap.toString(), map.toString());
+            InsOrderPayDateRecord  dto=new InsOrderPayDateRecord(null, subOrderId, new Date(), "admin", subOrder.getPayDate(), subOrder.getSigningTime(), map.get("payDate"), map.get("signingTime"), oldMap.toString(), map.toString());
             this.save(dto);
             if(map.get("payDate")!=null){
                 subOrder.setPayDate(map.get("payDate"));
@@ -135,6 +144,21 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
             }
             //更新时间表
              insAreaCompanyService.updateById(subOrder);
+             log.info("更新的订单表为"+subOrder.toString()+new Date().toString());
+            //判斷又沒有結算表如果有更新  add  by hxl  2024-12-30
+            if(subOrder.getSigningTime()!=null){
+                LambdaQueryWrapper<InsPlyIncome> lqw = new LambdaQueryWrapper<>();
+                lqw.eq(InsPlyIncome::getOrderno, subOrder.getId());
+                List<InsPlyIncome> insPlyIncome = insPlyIncomeService.list(lqw);
+
+                if(insPlyIncome!=null && insPlyIncome.size()>0){
+                    for (InsPlyIncome plyIncome : insPlyIncome) {
+                        plyIncome.setSignDate(subOrder.getSigningTime());
+                        insPlyIncomeService.updateById(plyIncome);
+                        log.info("更新的结算表为"+plyIncome.toString()+new Date().toString());
+                    }
+                }
+            }
 
         }else{
            throw   new SystemException("生成保单失败");
@@ -173,6 +197,41 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
            }
        }
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 10:03
+     *  @Description: 自动更新签单表的日期
+     */
+    @Override
+    public void batchOrderPlyOrderDate(String benginDate, String endDate) {
+        //查询签单日期为空的数据
+        List<InsPlyIncome> list = insPlyIncomeService.findListByDate(benginDate,endDate);
+        List<InsPlyIncome>  newList =new ArrayList<>();
+        if(list!=null && list.size()>0){
+            for(InsPlyIncome  insPlyIncome : list){
+                //更新子订单的签单时间
+                if(insPlyIncome.getSignDate()==null){
+                    try{
+                       updateOrderDate(insPlyIncome.getOrderno());
+                    }catch(Exception e){
+
+                    }
+                }
+                //更新時間
+                InsPlyIncome  ply = insPlyIncomeService.getById(insPlyIncome.getId());
+                if(ply!=null){
+                    InsAreaCompany iac = insAreaCompanyService.getById(insPlyIncome.getOrderno());
+                    if(iac.getSigningTime()!=null){
+                        ply.setSignDate(iac.getSigningTime());
+                        newList.add(ply);
+                    }
+                }
+            }
+            insPlyIncomeService.saveOrUpdateBatch(newList);
+            log.info("更新的结算表为"+newList.toString()+new Date().toString());
+        }
+    }
 }
 
 

+ 92 - 30
src/main/java/com/ydtech/modules/order/service/impl/InsOrderPushMsgServiceImpl.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.order.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.RabbitMqEnum;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.modules.admin.utils.SliceUpDateUtil;
 import com.ydtech.modules.order.dao.InsOrderPushMsgMapper;
@@ -17,11 +18,19 @@ import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.utils.OrderUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.UUID;
+
+import static org.springframework.amqp.core.MessageProperties.CONTENT_TYPE_TEXT_PLAIN;
 
 /**
  * @author Administrator
@@ -46,8 +55,11 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
     @Autowired
     private InsTaskImagesMapper insTaskImagesMapper;
 
-    //@Autowired
-    //private RabbitTemplate rabbitTemplate;
+    @Autowired
+    private RabbitTemplate rabbitTemplate;
+
+    @Autowired
+    private InsOrderPushMsgService insOrderPushMsgService;
 
 
     /**
@@ -57,25 +69,29 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
      *  @Description: 推送历史的订单信息
      */
     @Override
-    public void getPushInsAreaCompanyList() {
-        List<String> dateList = insOrderPushMsgMapper.getPushInsAreaCompanyDateList();
-       // List<String> dateList  =new ArrayList<String>();
-       // dateList.add("2024-10");
-        if(dateList!=null && !dateList.isEmpty()){
-            //启动线程池
-            dateList.forEach(item ->{
-                String benginTime = SliceUpDateUtil.getStartOfMonth(Integer.parseInt(item.split("-")[0]), Integer.parseInt(item.split("-")[1]));
-                String endTime = SliceUpDateUtil.getEndOfMonth(Integer.parseInt(item.split("-")[0]), Integer.parseInt(item.split("-")[1]));
-                List<String> orderList = insOrderPushMsgMapper.getPushInsAreaCompanyList(benginTime,endTime);
-                ArrayList<String>  pushDataList =new ArrayList<String>();
-                if(orderList!=null && !orderList.isEmpty()){
-                    orderList.forEach(orderId ->{
-                        pushDataList.add(getPushDataJsonString(orderId));
-                    });
-                }
-                if(pushDataList!=null && !pushDataList.isEmpty()){
-                   // Thread thread = new Thread(new OrderRunnableThread(rabbitTemplate, pushDataList,this));
-                    //thread.start();
+    public void getPushInsAreaCompanyList(String month) {
+        String benginTime = SliceUpDateUtil.getStartOfMonth(Integer.parseInt(month.split("-")[0]), Integer.parseInt(month.split("-")[1]));
+        String endTime = SliceUpDateUtil.getEndOfMonth(Integer.parseInt(month.split("-")[0]), Integer.parseInt(month.split("-")[1]));
+        List<String> orderList = insOrderPushMsgMapper.getPushInsAreaCompanyList(benginTime,endTime);
+        ArrayList<String>  pushDataList =new ArrayList<String>();
+        if(orderList!=null && !orderList.isEmpty()){
+            orderList.forEach(orderId ->{
+                PushDataVo pushDataVo = getPushData(orderId);
+                String items = JSONObject.toJSONString(pushDataVo);
+                MessageProperties messageProperties = new MessageProperties();
+                messageProperties.setMessageId(UUID.randomUUID().toString());
+                messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+                messageProperties.setContentEncoding("UTF-8");
+                Message message_cj = new Message(items.getBytes(StandardCharsets.UTF_8), messageProperties);
+                //推送
+                InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+                try{
+                    //更新狀態
+                    insOrderPushMsgService.save(insOrderPushMsg);
+                    this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY.getCode(), message_cj);
+                    Thread.sleep(1500);
+                }catch(Exception e){
+                    e.getStackTrace();
                 }
             });
         }
@@ -94,13 +110,25 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
         if(orderList!=null && !orderList.isEmpty()){
             //通过
             orderList.forEach(orderId ->{
-                pushDataList.add(getPushDataJsonString(orderId));
+                PushDataVo pushDataVo = getPushData(orderId);
+                String item = JSONObject.toJSONString(pushDataVo);
+                MessageProperties messageProperties = new MessageProperties();
+                messageProperties.setMessageId(UUID.randomUUID().toString());
+                messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+                messageProperties.setContentEncoding("UTF-8");
+                Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
+                //推送
+                //InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+                try{
+                    //更新狀態
+                    //insOrderPushMsgService.save(insOrderPushMsg);
+                    this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE_FAIL.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_FAIL.getCode(), message_cj);
+                    Thread.sleep(1500);
+                }catch(Exception e){
+                    e.getStackTrace();
+                }
             });
         }
-        if(pushDataList!=null && !pushDataList.isEmpty()){
-            //Thread thread = new Thread(new OrderRunnableThread(rabbitTemplate, pushDataList,this));
-            //thread.start();
-        }
      }
     /**
      *  @version
@@ -109,12 +137,29 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
      *  @Description:  承保数据推送
      */
     @Override
-    public void getPushSignInsAreaCompanyList(String item) {
+    public void getPushSignInsAreaCompanyList(String orderId) {
         try{
-            ArrayList<String>  pushDataList =new ArrayList<String>();
-            pushDataList.add(getPushDataJsonString(item));
-            //Thread thread = new Thread(new OrderRunnableThread(rabbitTemplate, pushDataList,this));
+            //ArrayList<String>  pushDataList =new ArrayList<String>();
+            //pushDataList.add(getPushDataJsonString(item));
+            //Thread thread = new Thread(new OrderSignRunnableThread(rabbitTemplate, pushDataList,this));
             //thread.start();
+            PushDataVo pushDataVo = getPushData(orderId);
+            String item = JSONObject.toJSONString(pushDataVo);
+            MessageProperties messageProperties = new MessageProperties();
+            messageProperties.setMessageId(UUID.randomUUID().toString());
+            messageProperties.setContentType(CONTENT_TYPE_TEXT_PLAIN);
+            messageProperties.setContentEncoding("UTF-8");
+            Message message_cj = new Message(item.getBytes(StandardCharsets.UTF_8), messageProperties);
+            //推送
+            InsOrderPushMsg insOrderPushMsg = new InsOrderPushMsg(null, pushDataVo.getInsAreaCompany().getId(), "0", new Date(), pushDataVo.toString());
+            try{
+                //更新狀態
+                insOrderPushMsgService.save(insOrderPushMsg);
+                this.rabbitTemplate.convertAndSend(RabbitMqEnum.ORDER_EXCHANGE_FAIL.getCode(), RabbitMqEnum.ORDER_ROUTINGKEY_SIGN.getCode(), message_cj);
+
+            }catch(Exception e){
+                e.getStackTrace();
+            }
         }catch(Exception e){
             log.error(e.getMessage());
         }
@@ -156,4 +201,21 @@ public class InsOrderPushMsgServiceImpl extends ServiceImpl<InsOrderPushMsgMappe
         insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
     }
 
+
+    public PushDataVo getPushData(String orderId) {
+        //小订单的数据
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(orderId);
+        //大订单数据
+        InsOrders orders = insOrdersService.getById(insAreaCompany.getOrderno());
+        String jyPolicyNo="";
+        String apiType = insAreaCompany.getApiType() == null ? null : insAreaCompany.getApiType() + "";
+        if (insAreaCompany.getCrossInsurance() != null) {
+            jyPolicyNo = OrderUtils.getJyPolicyNo(insAreaCompany.getCompanyId(), apiType, insAreaCompany.getCrossInsurance().toString(), String.valueOf(orders.getIsExternal()));
+        }
+        insAreaCompany.setJyPolicyNo(jyPolicyNo);
+        //影像数据
+        List<InsTaskImagesDto> taskImagesList = insTaskImagesMapper.getTaskImagesList(insAreaCompany.getOrderno());
+        PushDataVo pushDataVo  =new PushDataVo(insAreaCompany,orders,taskImagesList);
+        return pushDataVo;
+    }
 }

+ 45 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrderReadPdfServiceImpl.java

@@ -3,16 +3,22 @@ package com.ydtech.modules.order.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.SysUserRole;
 import com.ydtech.modules.admin.model.dto.SysUserLinkAreaDto;
+import com.ydtech.modules.fnc.entity.InsPlyIncome;
+import com.ydtech.modules.fnc.service.InsPlyIncomeService;
 import com.ydtech.modules.order.dao.InsOrderReadPdfMapper;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.api.pingan.utils.PDFUtil;
 import com.ydtech.modules.order.entity.dto.InsOrderReadPdfContentDto;
 import com.ydtech.modules.order.entity.po.InsOrderReadPdf;
 import com.ydtech.modules.order.entity.vo.InsOrderReadPdfContentVo;
 import com.ydtech.modules.order.entity.vo.InsOrderReadPdfVo;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrderPayDateRecordService;
 import com.ydtech.modules.order.service.InsOrderReadPdfService;
 import com.ydtech.utils.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -35,6 +41,15 @@ public class InsOrderReadPdfServiceImpl extends ServiceImpl<InsOrderReadPdfMappe
     @Autowired
     private InsOrderReadPdfMapper  insOrderReadPdfMapper;
 
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Autowired
+    private InsPlyIncomeService insPlyIncomeService;
+
+    @Autowired
+    private InsOrderPayDateRecordService insOrderPayDateRecordService;
+
     @Override
     public BasePageResult<InsOrderReadPdf> queryPage(InsOrderReadPdfVo insOrderReadPdfVo) {
         Page<InsOrderReadPdf> page = new Page<>(insOrderReadPdfVo.getPageNum(),
@@ -89,4 +104,34 @@ public class InsOrderReadPdfServiceImpl extends ServiceImpl<InsOrderReadPdfMappe
         }
         return new InsOrderReadPdfContentDto(pdfText,content);
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 10:42
+     *  @Description:  手动更新结算表的签单时间
+     */
+    @Override
+    public void updatePlySignDate(String id) {
+        InsPlyIncome  ply = insPlyIncomeService.getById(id);
+        if(ply!=null){
+           if(ply.getOrderno() ==null){
+               new SystemException("子订单编号为空不允许更新");
+           }else{
+               InsAreaCompany iac = insAreaCompanyService.getById(ply.getOrderno());
+               //更新子订单的签单时间
+               if(iac.getSigningTime()==null){
+                   try{
+                       insOrderPayDateRecordService.updateOrderDate(ply.getOrderno());
+                   }catch(Exception e){
+                       new SystemException("更新保单签单时期失败");
+                   }
+               }
+               InsAreaCompany newIac = insAreaCompanyService.getById(ply.getOrderno());
+               if(newIac.getSigningTime()!=null){
+                   ply.setSignDate(iac.getSigningTime());
+                   insPlyIncomeService.saveOrUpdate(ply);
+               }
+           }
+        }
+    }
 }

+ 35 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -537,6 +537,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             quoteInfoVo.setKindList(new ArrayList<>());
         }
 
+
         //添加后线人员不能报价的验证
         if (!"admin".equals(realUserId) && !realUserId.contains("M")) {
             throw new SystemException("后线人员不允许报价!!");
@@ -549,6 +550,17 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         SysDept dept = sysDeptService.getById(user.getDeptId());
         // 2 构造订单
         InsOrders insOrders = new InsOrders(user, dept, quoteInfoVo);
+
+        //单交过滤risk中的商业时间问题。
+        if(insOrders.getProductid().equals("0330")){
+            //说明存在商业信息
+            if(quoteInfoVo.getRiskList().size()>1){
+                //移除商业信息
+                quoteInfoVo.getRiskList().removeIf(risk -> risk.getRiskCode().equals("0510"));
+            }
+        }
+
+
         if (daikeFlag) {//当时代客录单业务时,才需要赋值该字段
             insOrders.setOperatorid(userId);//赋值代客录单操作人为登录人
         }
@@ -778,7 +790,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             // 设置车主信息
             JSONObject ownerInfo = insOrdersExcel.getOwnerInfo();
-            CustomerInfoVo owner = ownerInfo.toJavaObject(CustomerInfoVo.class);
+            CustomerInfoVo owner =  JSON.parseObject(JSON.toJSONString(ownerInfo), CustomerInfoVo.class);
             insOrdersExcel.setOwnerName(owner.getName());
             insOrdersExcel.setOwnerAge(owner.getAge());
             insOrdersExcel.setOwnerMobile(owner.getMobile());
@@ -786,7 +798,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             // 设置申请人信息
             JSONObject applyInfo = insOrdersExcel.getApplyInfo();
-            CustomerInfoVo apply = applyInfo.toJavaObject(CustomerInfoVo.class);
+            CustomerInfoVo apply = JSON.parseObject(JSON.toJSONString(applyInfo), CustomerInfoVo.class);
             insOrdersExcel.setApplyName(apply.getName());
             insOrdersExcel.setApplyAge(apply.getAge());
             insOrdersExcel.setApplyMobile(apply.getMobile());
@@ -794,7 +806,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             // 设置被保险人信息
             JSONObject insureInfo = insOrdersExcel.getInsureInfo();
-            CustomerInfoVo insure = insureInfo.toJavaObject(CustomerInfoVo.class);
+            CustomerInfoVo insure = JSON.parseObject(JSON.toJSONString(insureInfo), CustomerInfoVo.class);
             insOrdersExcel.setInsureName(insure.getName());
             insOrdersExcel.setInsureAge(insure.getAge());
             insOrdersExcel.setInsureMobile(insure.getMobile());
@@ -1130,6 +1142,19 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             }
             insOrdersEditingVo.setJypolicyno(application);
 
+            InsFeeAudit feeAuditByInsOrderNo = insFeeAuditService.getFeeAuditByInsOrderNo(insAreaCompanyList.get(0).getId());
+            int status=0;
+            if(feeAuditByInsOrderNo !=null){
+                String auditstatus = feeAuditByInsOrderNo.getAuditstatus();
+                if("2".equals(auditstatus)){
+                    status=1;
+                }else{
+                    status=2;
+                }
+            }
+            //添加订单状态   add by hxl  2024-12-17
+            insOrdersEditingVo.setOrderExternalStatus(status);
+
             InsAreaCompanyExternalPolicy policyByCompanyId = insAreaCompanyExternalPolicyService.getPolicyByCompanyId(insAreaCompanyList.get(0).getId());
 //            insOrdersEditingVo.setExternalPolicy(policyByCompanyId);
 
@@ -1209,6 +1234,13 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                     insFeeOrderNews.get(0).getNoOtherCostsProportion().compareTo(BigDecimal.ZERO) > 0) {
                 insOrdersEditingVo.setNoCostsProportion(insAreaCompanyExternalFee.getNoSuperviseCostsProportion().add(insAreaCompanyExternalFee.getNoOtherCostsProportion()));
             }
+            // add by hxl 2024-12-16    添加费用id 和是否现询
+            insOrdersEditingVo.setNowCostsId(insAreaCompanyExternalFee.getCostId());
+            insOrdersEditingVo.setCostFlag(insAreaCompanyExternalFee.getCostFlag());
+            insOrdersEditingVo.setJqExportFee(insAreaCompanyExternalFee.getCostFlag());
+            insOrdersEditingVo.setSyExportFee(insAreaCompanyExternalFee.getCostFlag());
+            insOrdersEditingVo.setNoExportFee(insAreaCompanyExternalFee.getCostFlag());
+
         }
 
         //计算费用

+ 18 - 1
src/main/java/com/ydtech/modules/order/service/impl/SysQuoteConfigServiceImpl.java

@@ -236,7 +236,7 @@ public class SysQuoteConfigServiceImpl extends ServiceImpl<SysQuoteConfigMapper,
             List<SysQuoteUser> sysQuoteUsers = sysQuoteUserMapper.selectList(new LambdaQueryWrapper<SysQuoteUser>()
                   .eq(SysQuoteUser::getConfigId, sysQuoteConfig.getId()));
             List<String> users = sysQuoteUsers.stream().map(user -> user.getUserId()).collect(Collectors.toList());
-            List<SysUser> sysUsers = sysUserService.getByIds(users);
+            List<SysUser> sysUsers = sysUserService.selectByUserId(users);
             sysQuoteConfig.setProxyList(sysUsers);
         }
         return sysQuoteConfig;
@@ -291,10 +291,20 @@ public class SysQuoteConfigServiceImpl extends ServiceImpl<SysQuoteConfigMapper,
 
     @Override
     public Page<QuoteDetailsVo> getAppendUserQuote(Page page,QuoteDetailsQueryVo quoteDetailsQueryVo) {
+        if(!Objects.isNull(quoteDetailsQueryVo.getStartTime()) && !quoteDetailsQueryVo.getStartTime().equals("")){
+            quoteDetailsQueryVo.setStartTime(quoteDetailsQueryVo.getStartTime() + " 00:00:00");
+            quoteDetailsQueryVo.setEndTime(quoteDetailsQueryVo.getEndTime() + " 23:59:59");
+        }
         Page<QuoteDetailsVo> appendUserQuote = sysQuoteUserConfigAppendMapper.getAppendUserQuote(page,quoteDetailsQueryVo);
         return appendUserQuote;
     }
 
+    @Override
+    public QuoteDetailsVo getAppendUserQuoteInfo(String companyId,String userId,String id){
+        QuoteDetailsVo appendUserQuoteInfo = sysQuoteUserConfigAppendMapper.getAppendUserQuoteInfo(companyId, userId, id);
+        return appendUserQuoteInfo;
+    }
+
     /**
      * 根据保险公司获取今天用户追加的数据
      */
@@ -309,9 +319,16 @@ public class SysQuoteConfigServiceImpl extends ServiceImpl<SysQuoteConfigMapper,
 
     @Override
     public Page<QuoteDetailsVo> getQuoteRecordPage(Page page, QuoteDetailsQueryVo quoteDetailsQueryVo) {
+        if(!Objects.isNull(quoteDetailsQueryVo.getStartTime()) && !quoteDetailsQueryVo.getStartTime().equals("")){
+            quoteDetailsQueryVo.setStartTime(quoteDetailsQueryVo.getStartTime() + " 00:00:00");
+            quoteDetailsQueryVo.setEndTime(quoteDetailsQueryVo.getEndTime() + " 23:59:59");
+        }
         if(quoteDetailsQueryVo.getDeptId() == null) {
             quoteDetailsQueryVo.setDeptId(BaseController.getDeptId());
         }
+        if(quoteDetailsQueryVo.getOperator() == null){
+            quoteDetailsQueryVo.setOperator(BaseController.getUserId());
+        }
         Page<QuoteDetailsVo> quoteRecordPage = sysQuoteRecordMapper.getQuoteRecordPage(page, quoteDetailsQueryVo);
         quoteRecordPage.getRecords().forEach(item -> {
             item.setAction(QuoteNumberConstant.QuoteAction.getByCode(item.getAction()));

+ 1 - 3
src/main/java/com/ydtech/modules/order/service/impl/SysQuoteRedisServiceImpl.java

@@ -384,10 +384,8 @@ public class SysQuoteRedisServiceImpl implements SysQuoteRedisService {
     public void refreshQuoteNum(String companyId, String userId, List<SysQuoteRecord> sysQuoteRecords) {
         String licenseNo = sysQuoteRecords.get(0).getLicenseNo();
         QuoteNumRedisVo quoteNumberRedisData = getQuoteNumberRedisData(userId);
-        QuoteNumRedisVo.QuoteNumberCompanyVo quoteNumberCompanyVo = quoteNumberRedisData.getQuoteCompanyList().stream()
-                .filter(company -> company.getCompanyId().equals(companyId)).findFirst().orElse(null);
 
-        if(!Objects.isNull(quoteNumberCompanyVo)){
+        if(quoteNumberRedisData.getQuoteCompanyList().stream().anyMatch(company -> company.getCompanyId().equals(companyId))){
             quoteNumberRedisData.getQuoteCompanyList().forEach(item->{
                 if(item.getCompanyId().equals(companyId)){
                     item.setDayMaxQuoteNum(item.getDayMaxQuoteNum() + sysQuoteRecords.size());

+ 7 - 7
src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java

@@ -226,7 +226,7 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
                     } else {
                         InsOrders order = insOrdersService.getById(quoteInfoVo.getOrderNo());
                         InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
-                        if (yangGuangAccuracyCalculateResponse.getErrorMessage().contains("重复投保")) {
+                        if (yangGuangAccuracyCalculateResponseRe.getErrorMessage().contains("重复投保")) {
                             insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
                         }
                         String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponse.getErrorMessage(), insOrderStatusEnum);
@@ -241,18 +241,18 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
                         sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
                         //刷新redis中的报价次数
                         sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteInfoVo.getUserid(),sysQuoteRecords);
-                        throw new SystemException(yangGuangAccuracyCalculateResponse.getErrorMessage());
+                        throw new SystemException(yangGuangAccuracyCalculateResponseRe.getErrorMessage());
                     }
                 } else {
                     boolean isEnergy = carInfo.isNewEnergy();
-                    if (!yangGuangAccuracyCalculateResponse.getErrorCode().equals("0")) {
+                    if (!yangGuangAccuracyCalculateResponseRe.getErrorCode().equals("0")) {
                         QuoteRespVo resp  = new QuoteRespVo();
                         InsOrders order = insOrdersService.getById(quoteInfoVo.getOrderNo());
                         InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
-                        if (yangGuangAccuracyCalculateResponse.getErrorMessage().contains("重复投保")) {
+                        if (yangGuangAccuracyCalculateResponseRe.getErrorMessage().contains("重复投保")) {
                         insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
                         }
-                        String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponse.getErrorMessage(), insOrderStatusEnum);
+                        String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponseRe.getErrorMessage(), insOrderStatusEnum);
                         SysQuoteRecord sysQuoteRecord2 = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
                                 QuoteNumberConstant.QuoteAction.QUOTE_FAILED.getCode().toString(),QuoteNumberConstant.QuoteResult.FAIL.getCode().toString());
                         sysQuoteRecords.add(sysQuoteRecord2);
@@ -264,10 +264,10 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
                         sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
                         //刷新redis中的报价次数
                         sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteInfoVo.getUserid(),sysQuoteRecords);
-                        throw new SystemException(yangGuangAccuracyCalculateResponse.getErrorMessage());
+                        throw new SystemException(yangGuangAccuracyCalculateResponseRe.getErrorMessage());
                     }
                     // 处理数据
-                    QuoteRespVo quoteRespVo = getQuoteRespVo(yangGuangAccuracyCalculateResponse, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
+                    QuoteRespVo quoteRespVo = getQuoteRespVo(yangGuangAccuracyCalculateResponseRe, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
 
                 // 设置核心报价车型
                 quoteRespVo.setCoreModels(carModelList1.toCoreModelsVo());

+ 30 - 2
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -15,7 +15,9 @@ import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
 import com.ydtech.modules.order.components.zijin.ZijinRequestApiComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
+import com.ydtech.modules.order.constants.QuoteNumberConstant;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
+import com.ydtech.modules.order.dao.SysQuoteRecordMapper;
 import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.api.zijin.constants.enums.*;
 import com.ydtech.modules.order.entity.api.zijin.request.*;
@@ -25,6 +27,7 @@ import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
 import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
+import com.ydtech.modules.order.entity.po.SysQuoteRecord;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
@@ -71,6 +74,10 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
     private final InsImagesUploadCacheComponents insImagesUploadCacheComponents;
 
+    private final SysQuoteRecordMapper sysQuoteRecordMapper;
+
+    private final SysQuoteRedisService sysQuoteRedisService;
+
     // 重复投保次数
     private static final int REPEAT_NUMBER = 3;
 
@@ -107,6 +114,9 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
     @Override
     public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfoVo, BaseQuoteVo<List<ZjQuoteAccidentVo>> quoteVo) {
+        Integer maxQuoteNum = quoteVo.getMaxQuoteNum();
+        List<SysQuoteRecord> sysQuoteRecords = new ArrayList<>();
+
         // 1. 协议id获取配置实体
         String agreementId = quoteVo.getAgreementId();
         // 1.1 账号信息
@@ -160,7 +170,15 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
                 insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
             }
             String subOrderNo = insOrdersService.responseFailedOrder(quoteVo, ptlAgreementAttribution, order, calculatePremiumResponse.getRtnMsg(), insOrderStatusEnum);
-
+            SysQuoteRecord deplSysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
+                    QuoteNumberConstant.QuoteAction.QUOTE_SUCCESS.getCode().toString(),QuoteNumberConstant.QuoteResult.SUCCESS.getCode().toString());
+            sysQuoteRecords.add(deplSysQuoteRecord);
+            sysQuoteRecords.forEach(item->{
+                item.setSubOrderNo(subOrderNo);
+            });
+            sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
+            //刷新redis中的报价次数
+            sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
             throw new SystemException(calculatePremiumResponse.getRtnMsg());
         }
 
@@ -174,8 +192,18 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
 
         // 设置核心报价车型
         quoteRespVo.setCoreModels(vehicleModelInfosDTO.toCoreModelsVo());
-        return responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution, calculatePremiumRequest.getOrderId(),
+        HttpResult<QuoteRespVo> quoteRespVoHttpResult = responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution, calculatePremiumRequest.getOrderId(),
                 calculatePremiumRequest.getOrderNo(), quoteVo.getAccidentalDrivingVo());
+        SysQuoteRecord deplSysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
+                QuoteNumberConstant.QuoteAction.QUOTE_SUCCESS.getCode().toString(),QuoteNumberConstant.QuoteResult.SUCCESS.getCode().toString());
+        sysQuoteRecords.add(deplSysQuoteRecord);
+        sysQuoteRecords.forEach(item->{
+            item.setSubOrderNo(quoteRespVoHttpResult.getData().getCompanyId());
+        });
+        sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
+        //刷新redis中的报价次数
+        sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(), quoteInfoVo.getUserid(), sysQuoteRecords);
+        return quoteRespVoHttpResult;
     }
 
     @Override

+ 42 - 0
src/main/java/com/ydtech/modules/order/timer/UpdateOrderMQTimer.java

@@ -0,0 +1,42 @@
+package com.ydtech.modules.order.timer;
+
+import com.ydtech.modules.order.service.InsOrderPushMsgService;
+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.text.SimpleDateFormat;
+
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/11/22 16:29
+ *  @Description: 推动补偿信息
+ */
+@Slf4j
+@Component
+public class UpdateOrderMQTimer {
+
+    @Autowired
+    private InsOrderPushMsgService insOrderPushMsgService;
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/11/22 16:31
+     *  @Description: 每2小时更新一次补偿消息的推送
+     */
+    @Scheduled(cron = "0 0 */2 * * ?")
+    private void updateOrderDateNoon() {
+        log.info("每2小时更新一次补偿消息的推送,启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+        try {
+            insOrderPushMsgService.getPushCompensateInsAreaCompanyList();
+            log.info("每2小时更新一次补偿消息的推送,成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("每2小时更新一次补偿消息的推送,失败:{}", e.getMessage());
+        }
+    }
+}

+ 82 - 13
src/main/java/com/ydtech/modules/order/timer/UpdateOrderTimer.java

@@ -1,10 +1,12 @@
 package com.ydtech.modules.order.timer;
 
+import com.ydtech.modules.admin.utils.SliceUpDateUtil;
 import com.ydtech.modules.order.service.InsOrderPayDateRecordService;
 import com.ydtech.utils.DateUtil;
-import com.ydtech.utils.DateUtil_N;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -20,11 +22,26 @@ import java.util.Date;
  */
 @Slf4j
 @Component
+@EnableAsync
 public class UpdateOrderTimer {
 
     @Autowired
     private InsOrderPayDateRecordService insOrderPayDateRecordService;
 
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/27 17:26
+     *  @Description:  每10分钟执行下更新订单时间
+     */
+    @Async
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void updateOrderDateMinite() {
+        String benginDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 00:00:00";
+        String endDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 23:59:59";
+        updateOrderDate(benginDate,endDate);
+    }
     /**
      *  @version
      *  @author: hxl
@@ -33,12 +50,28 @@ public class UpdateOrderTimer {
      * 中午一点
      * 凌晨一点
      */
+    @Async
     @Scheduled(cron = "0 0 13 * * ?")
-    private void updateOrderDateNoon() {
+    public void updateOrderDateNoon() {
+        //更新前一周的数据
+        String benginDate = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00";
+        String endDate = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
+        updateOrderDate(benginDate,endDate);
+    }
+
+    @Async
+    @Scheduled(cron = "0 0 1 * * ?")
+    public void updateOrderDateBeforeDawn() {
+        String benginDate = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00";
+        String endDate = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
+        updateOrderDate(benginDate,endDate);
+    }
+
+    private void updateOrderDate(String benginDate,String endDate) {
         log.info("定时更新订单的签单时间和缴费日期,启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
-        //凌晨1点到中午1点
-        String benginDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 01:00:00";
-        String endDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss");
+        //中午1点到凌晨1点
+       // String benginDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 00:00:00";
+       // String endDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 23:59:59";
         try {
             insOrderPayDateRecordService.batchOrderDate(benginDate,endDate);
             log.info("定时更新订单的签单时间和缴费日期成功");
@@ -49,18 +82,54 @@ public class UpdateOrderTimer {
     }
 
 
+     /**
+      *  @version
+      *  @author: hxl
+      *  @Date: 2024/12/30 9:59
+      *  @Description:  自动更新结算表中签单日期为空的数据
+      */
+    @Async
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void updateOrderPlyDateMinite() {
+        String benginDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 00:00:00";
+        String endDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 23:59:59";
+        updatePlyDate(benginDate,endDate);
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 9:59
+     *  @Description:  晚上一点执行上周数据
+     */
+    @Async
     @Scheduled(cron = "0 0 1 * * ?")
-    private void updateOrderDateBeforeDawn() {
-        log.info("定时更新订单的签单时间和缴费日期,启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
-        //中午1点到凌晨1点
-        String benginDate = DateUtil.getDateFormat(DateUtil_N.getPreviousDate(new Date()), "yyyy-MM-dd")+" 13:00:01";
-        String endDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss");
+    public void updateOrderPlyDateBeforeDawn() {
+        String benginDate = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00";
+        String endDate = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
+        updatePlyDate(benginDate,endDate);
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/12/30 9:59
+     *  @Description:  中午一点更新上周数据
+     */
+    @Async
+    @Scheduled(cron = "0 0 13 * * ?")
+    public void updateOrderPlyDateNoon() {
+        String benginDate = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00";
+        String endDate = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
+        updatePlyDate(benginDate,endDate);
+    }
+
+    private void updatePlyDate(String benginDate,String endDate) {
         try {
-            insOrderPayDateRecordService.batchOrderDate(benginDate,endDate);
-            log.info("定时更新订单的签单时间和缴费日期成功");
+            insOrderPayDateRecordService.batchOrderPlyOrderDate(benginDate,endDate);
+            log.info("定时更新结算表的签单时间和缴费日期成功"+new Date().toString());
         } catch (Exception e) {
             e.printStackTrace();
-            log.error("定时更新订单的签单时间和缴费日期失败:{}", e.getMessage());
+            log.error("定时更新结算表的签单时间和缴费日期失败:{}", e.getMessage());
         }
     }
 }

+ 16 - 9
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java

@@ -12,6 +12,7 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
 import com.ydtech.modules.protocol.entity.vo.*;
+import com.ydtech.modules.protocols.entity.vo.AgreementAllInformationCopyVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -231,15 +232,14 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
 
 
     /**
-     *  @version
-     *  @author: whp
-     *  @Date: 2024/07/23
-     *  @Description: 查询审核的所有协议  协议名称拼接
+     * @version
+     * @author: whp
+     * @Date: 2024/07/23
+     * @Description: 查询审核的所有协议  协议名称拼接
      */
     List<PtlAgreement> findCheckAgreementListNew(PtlAgreement ptlAgreement);
 
 
-
     /**
      * 获取当前费用的保险公司所有协议
      *
@@ -272,12 +272,19 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
     List<PtlAgreement> getAllAgreement(String agreementId);
 
     HttpResult getAgreementCopy(PtlAgreementVo ptlAgreementVo);
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/9/21 15:33
-     *  @Description: 通过协议名称查询数据
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/21 15:33
+     * @Description: 通过协议名称查询数据
      */
     PtlAgreement getByAgreementTitle(String title);
 
+    /**
+     * 复制协议费用承保规则
+     *
+     * @param agreementAllInformationCopyVo 复制协议对象
+     */
+    void agreementAllInformationCopyVo(AgreementAllInformationCopyVo agreementAllInformationCopyVo);
 }

+ 69 - 11
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -2,9 +2,11 @@ package com.ydtech.modules.protocol.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.config.DictEnumConfig;
@@ -20,6 +22,7 @@ import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import com.ydtech.modules.order.service.InsCrawlerOrderService;
 import com.ydtech.modules.order.service.InsUploadFilesService;
 import com.ydtech.modules.protocol.constants.HistoryStatusConstants;
+import com.ydtech.modules.protocol.constants.ValidStatus;
 import com.ydtech.modules.protocol.dao.PtlAgreementGroupLinkDeptMapper;
 import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
@@ -32,6 +35,15 @@ import com.ydtech.modules.protocol.entity.po.*;
 import com.ydtech.modules.protocol.entity.vo.*;
 import com.ydtech.modules.protocol.service.*;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsExport;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesNew;
+import com.ydtech.modules.protocols.entity.vo.AgreementAllInformationCopyVo;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsAttrLinkService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsExportService;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesNewService;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -89,12 +101,16 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     private final PtlInsAttributionTemplateService ptlInsAttributionTemplateService;
 
     @Autowired
-    private PtlAgreementDeptHistoryService ptlAgreementDeptHistoryService;
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
 
+    @Autowired
+    private PtlAgreementUndwrtRulesNewService ptlAgreementUndwrtRulesNewService;
 
     @Autowired
-    private PtlAgreementMapper ptlAgreementMapper;
+    private PtlAgreementDeptHistoryService ptlAgreementDeptHistoryService;
 
+    @Autowired
+    private PtlAgreementMapper ptlAgreementMapper;
 
     @Value("${python.check}")
     private String pythonCheck;
@@ -840,7 +856,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
             ptlAgreementAttributionService.saveAttribution(agreementId, esmInsCompany, agreement.getAttribution());
         }
         // 部门授权
-        ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
+//        ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
     }
 
 
@@ -998,8 +1014,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return list;
     }
 
-    //    @Autowired
-//    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
     public List<PtlAgreement> getCurrentAgreementList(String agreementId) {
         PtlAgreement ptlAgreement = this.getById(agreementId);
         String insuranceCompanyId = ptlAgreement.getInsuranceCompanyId();
@@ -1102,13 +1117,13 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
             ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
         }
         // 复制授权部门
-        List<PtlAgreementDept> ptlAgreementDept = ptlAgreementDeptService.list(new LambdaQueryWrapper<PtlAgreementDept>().eq(PtlAgreementDept::getAgreementId, ptlAgreement.getId()));
-        List<String> deptIds = ptlAgreementDept.stream().map(PtlAgreementDept::getDeptId).collect(Collectors.toList());
-        ptlAgreementDeptService.saveBatchDept(newPtlAgreement.getId(), deptIds);
+//        List<PtlAgreementDept> ptlAgreementDept = ptlAgreementDeptService.list(new LambdaQueryWrapper<PtlAgreementDept>().eq(PtlAgreementDept::getAgreementId, ptlAgreement.getId()));
+//        List<String> deptIds = ptlAgreementDept.stream().map(PtlAgreementDept::getDeptId).collect(Collectors.toList());
+//        ptlAgreementDeptService.saveBatchDept(newPtlAgreement.getId(), deptIds);
         // 添加授权部门记录
-        List<PtlAgreementDeptHistory> ptlAgreementDeptList = PtlAgreementDeptHistory.toPtlAgreementDeptHistoryList(newPtlAgreement.getId(),
-                deptIds, batchNo);
-        ptlAgreementDeptHistoryService.saveBatch(ptlAgreementDeptList);
+//        List<PtlAgreementDeptHistory> ptlAgreementDeptList = PtlAgreementDeptHistory.toPtlAgreementDeptHistoryList(newPtlAgreement.getId(),
+//                deptIds, batchNo);
+//        ptlAgreementDeptHistoryService.saveBatch(ptlAgreementDeptList);
         // 添加协议轨迹
         PtlAgreementTrajectory ptlAgreementTrajectory = new PtlAgreementTrajectory();
         ptlAgreementTrajectory.setId(IdGenerate.nextId());
@@ -1137,5 +1152,48 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return null;
     }
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void agreementAllInformationCopyVo(AgreementAllInformationCopyVo agreementAllInformationCopyVo) {
+        PtlAgreement ptlAgreement = getById(agreementAllInformationCopyVo.getAgreementId());
+        ptlAgreement.setId(null);
+        ptlAgreement.setAuditStatus(0);
+        ptlAgreement.setValidStatus(String.valueOf(ValidStatus.AVS_0.getCode()));
+        ptlAgreement.setCreateTime(LocalDateTime.now());
+        ptlAgreement.setUpdateTime(LocalDateTime.now());
+        ptlAgreement.setCreator(BaseController.getUserId());
+        ptlAgreement.setModifiedName(BaseController.getUserId());
+        save(ptlAgreement);
+
+        // 复制账号信息
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementAllInformationCopyVo.getAgreementId());
+        if(!Objects.isNull(ptlAgreementAttribution)) {
+            ptlAgreementAttribution.setId(ptlAgreement.getId());
+            ptlAgreementAttributionService.save(ptlAgreementAttribution);
+        }
+
+        AgreementAllInformationCopyVo.InformationDTO cost = agreementAllInformationCopyVo.getCost();
+        // 协议费用
+        List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews = new ArrayList<>();
+        // 判断是否选择全部
+        if (cost.isAll()) {
+            ptlAgreementProductCostsNews = ptlAgreementProductCostsNewService.getByAgreementId(agreementAllInformationCopyVo.getAgreementId());
+        } else if (!cost.getInformationId().isEmpty()) {
+            ptlAgreementProductCostsNews = ptlAgreementProductCostsNewService.getByCostsIdList(cost.getInformationId());
+        }
+        // 通过获取的协议列表复制协议中的 费用和费用规则
+        ptlAgreementProductCostsNewService.copyFeesAndRules(ptlAgreementProductCostsNews, ptlAgreement.getId());
+
+        AgreementAllInformationCopyVo.InformationDTO underwritingRules = agreementAllInformationCopyVo.getUnderwritingRules();
+        // 判断是否选择全部
+        List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews = new ArrayList<>();
+        if (underwritingRules.isAll()) {
+            ptlAgreementUndwrtRulesNews = ptlAgreementUndwrtRulesNewService.getByAgreementId(agreementAllInformationCopyVo.getAgreementId());
+        } else if (!underwritingRules.getInformationId().isEmpty()) {
+            ptlAgreementUndwrtRulesNews = ptlAgreementUndwrtRulesNewService.getByRulesIdList(underwritingRules.getInformationId());
+        }
+        // 通过获取的协议列表复制协议中的 费用和费用规则
+        ptlAgreementUndwrtRulesNewService.copyUndwrtRules(ptlAgreementUndwrtRulesNews, ptlAgreement.getId());
+    }
 
 }

+ 24 - 0
src/main/java/com/ydtech/modules/protocols/constants/OperatorType.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.protocols.constants;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+
+/**
+ * @description: 操作类型
+ * @author: wenks
+ * @date: 2024/12/16 10:56
+ **/
+@Getter
+@AllArgsConstructor
+public enum OperatorType {
+
+    ADD("add", "增加"),
+    UPDATE("update", "修改"),
+    DELETE("delete", "删除");
+
+    private final String code;
+
+    private final String description;
+
+}

+ 35 - 27
src/main/java/com/ydtech/modules/protocols/controller/PtlNewAgreementController.java

@@ -25,10 +25,10 @@ import org.springframework.web.bind.annotation.*;
 import java.util.List;
 
 /**
-*@author: tz
-*@description: 协议controller
-*@create: 2024-2-22 15:44:29
-*/
+ * @author: tz
+ * @description: 协议controller
+ * @create: 2024-2-22 15:44:29
+ */
 @Api(tags = "新版协议")
 @RequestMapping("/plt/new/agreement")
 @RestController
@@ -66,7 +66,7 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "查询保险公司所有协议列表")
     @GetMapping("/companyAgreementList")
-    public HttpResult<List<PtlAgreement>> companyAgreementList(String agreementId){
+    public HttpResult<List<PtlAgreement>> companyAgreementList(String agreementId) {
         return HttpResult.ok(ptlAgreementService.getCurrentAgreementList(agreementId));
     }
 
@@ -74,15 +74,15 @@ public class PtlNewAgreementController extends BaseController {
     @ApiOperation("查询协议产品费用列表")
     public PageResult getProduct(@RequestBody AgreementProductQueryVo agreementProductQueryVo) {
         Page<T> page = buildPageRequest(agreementProductQueryVo.getPageDto());
-        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getByAgreementId(page,agreementProductQueryVo);
+        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getByAgreementId(page, agreementProductQueryVo);
         return buildPageResponse(schemeQueryDto);
     }
 
     @ApiOperation("获取费用审核列表")
     @PostMapping("/getCostsAuditList")
-    public HttpResult<PageResult> getCostsAuditList(@RequestBody AgreementProductQueryVo agreementProductQueryVo){
+    public HttpResult<PageResult> getCostsAuditList(@RequestBody AgreementProductQueryVo agreementProductQueryVo) {
         Page<T> page = buildPageRequest(agreementProductQueryVo.getPageDto());
-        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getCostsAuditList(page,agreementProductQueryVo);
+        Page<PtlAgreementProductCostsNew> schemeQueryDto = ptlAgreementProductCostsNewService.getCostsAuditList(page, agreementProductQueryVo);
         return HttpResult.ok(buildPageResponse(schemeQueryDto));
     }
 
@@ -95,7 +95,7 @@ public class PtlNewAgreementController extends BaseController {
         PtlAgreementProductCostsNew ptlAgreementProductCostsNew = ptlAgreementProductCostsNewService.getById(costsId);
         String companyId = ptlAgreementService.getById(ptlAgreementProductCostsNew.getAgreementId()).getPartnerCompaniesId();
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList(companyId);
-        AgreementProductCostsSave agreementProductCosts = ptlAgreementProductCostsNewService.costsGet(costsId,undwrtRulesAttrList);
+        AgreementProductCostsSave agreementProductCosts = ptlAgreementProductCostsNewService.costsGet(costsId, undwrtRulesAttrList);
         return HttpResult.ok(agreementProductCosts);
     }
 
@@ -107,7 +107,7 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "更新协议费用")
     @PostMapping("/costs/update")
-    public HttpResult costsUpdate(@RequestBody AgreementProductCosts agreementProductCosts){
+    public HttpResult costsUpdate(@RequestBody AgreementProductCosts agreementProductCosts) {
         return ptlAgreementProductCostsNewService.costsUpdate(agreementProductCosts) ? HttpResult.ok("更新协议费用成功") : HttpResult.error("更新协议费用失败");
     }
 
@@ -125,13 +125,13 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "删除协议费用")
     @PostMapping("/costs/delete")
-    public HttpResult costsDelete(String costsId){
+    public HttpResult costsDelete(String costsId) {
         return ptlAgreementProductCostsNewService.costsDelete(costsId) ? HttpResult.ok("删除协议费用成功") : HttpResult.error("删除协议费用失败");
     }
 
     @ApiOperation(value = "复制协议费用")
     @PostMapping("/costs/copy")
-    public HttpResult costsCopy(@RequestBody  AgreementProductCostsCopyVo agreementProductCostsCopyVo){
+    public HttpResult costsCopy(@RequestBody AgreementProductCostsCopyVo agreementProductCostsCopyVo) {
         //orgCostsId:原协议费用id
         //newAgreementId:新协议id
         return ptlAgreementProductCostsNewService.costsCopy(agreementProductCostsCopyVo) ? HttpResult.ok("复制协议费用成功") : HttpResult.error("复制协议费用失败");
@@ -139,7 +139,7 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "批量复制协议费用")
     @PostMapping("/costs/copyBatch")
-    public HttpResult costsCopyBatch(@RequestBody  AgreementProductCostsCopyVo agreementProductCostsCopyVo){
+    public HttpResult costsCopyBatch(@RequestBody AgreementProductCostsCopyVo agreementProductCostsCopyVo) {
         //orgCostsId:原协议费用id
         //newAgreementId:新协议id
         return ptlAgreementProductCostsNewService.costsCopyBatch(agreementProductCostsCopyVo) ? HttpResult.ok("复制协议费用成功") : HttpResult.error("复制协议费用失败");
@@ -147,31 +147,31 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "调整费用")
     @PostMapping("/costs/adjust")
-    public HttpResult costsAdjust(@RequestBody FeeOrderNewRecordVo feeOrderNewRecordVo){
+    public HttpResult costsAdjust(@RequestBody FeeOrderNewRecordVo feeOrderNewRecordVo) {
         return HttpResult.ok("调整费用成功", ptlAgreementProductCostsNewService.costsAdjust(feeOrderNewRecordVo));
     }
 
     @ApiOperation(value = "费用审核")
     @PostMapping("/costs/audit")
-    public HttpResult costsAudit(@RequestBody CostsAuditVo costsAuditVo){
+    public HttpResult costsAudit(@RequestBody CostsAuditVo costsAuditVo) {
         return ptlAgreementProductCostsNewService.costsAudit(costsAuditVo) ? HttpResult.ok("费用审核成功") : HttpResult.error("费用审核失败");
     }
 
     @ApiOperation(value = "费用批量审核")
     @PostMapping("/costs/auditBatch")
-    public HttpResult costsAuditBatch(@RequestBody CostsAuditVo costsAuditVo){
+    public HttpResult costsAuditBatch(@RequestBody CostsAuditVo costsAuditVo) {
         return ptlAgreementProductCostsNewService.costsAuditBatch(costsAuditVo) ? HttpResult.ok("费用批量审核成功") : HttpResult.error("费用批量审核失败");
     }
 
     @ApiOperation(value = "费用批量修改起止期")
     @PostMapping("/costs/costsDateBatch")
-    public HttpResult costsDateBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo){
+    public HttpResult costsDateBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo) {
         return ptlAgreementProductCostsNewService.costsDateBatch(agreementProductCostsVo) ? HttpResult.ok("费用批量修改起止期成功") : HttpResult.error("费用批量修改起止期失败");
     }
 
     @ApiOperation(value = "费用批量修改")
     @PostMapping("/costs/costsBatch")
-    public HttpResult costsBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo){
+    public HttpResult costsBatch(@RequestBody AgreementProductCostsVo agreementProductCostsVo) {
         return ptlAgreementProductCostsNewService.costsBatch(agreementProductCostsVo) ? HttpResult.ok("费用批量修改成功") : HttpResult.error("费用批量修改失败");
     }
 
@@ -184,10 +184,10 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "获取承保规则列表")
     @PostMapping("/undwrt/rules/list")
-    public PageResult getRulesList(@RequestBody AgreementUndwrtRulesQueryVo agreementUndwrtRulesQueryVo){
+    public PageResult getRulesList(@RequestBody AgreementUndwrtRulesQueryVo agreementUndwrtRulesQueryVo) {
 
         Page<T> page = buildPageRequest(agreementUndwrtRulesQueryVo.getPageDto());
-        Page rulesPage = ptlAgreementUndwrtRulesNewService.rulesPage(page,agreementUndwrtRulesQueryVo.getAgreementId());
+        Page rulesPage = ptlAgreementUndwrtRulesNewService.rulesPage(page, agreementUndwrtRulesQueryVo.getAgreementId());
         return buildPageResponse(rulesPage);
     }
 
@@ -208,19 +208,19 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation(value = "更新承保规则")
     @PostMapping("/undwrt/rules/update")
-    public HttpResult rulesUpdate(@RequestBody AgreementUndwrtRules agreementUndwrtRules){
+    public HttpResult rulesUpdate(@RequestBody AgreementUndwrtRules agreementUndwrtRules) {
         return ptlAgreementUndwrtRulesNewService.rulesUpdate(agreementUndwrtRules) ? HttpResult.ok("更新承保规则成功") : HttpResult.error("更新承保规则失败");
     }
 
     @ApiOperation(value = "删除承保规则")
     @PostMapping("/undwrt/rules/delete")
-    public HttpResult rulesDelete(String ruleId){
+    public HttpResult rulesDelete(String ruleId) {
         return ptlAgreementUndwrtRulesNewService.rulesDelete(ruleId) ? HttpResult.ok("删除承保规则成功") : HttpResult.error("删除承保规则失败");
     }
 
     @ApiOperation(value = "费用轨迹查询")
     @GetMapping("/costs/trajectory/get")
-    public HttpResult getTrajectory(String costsId){
+    public HttpResult getTrajectory(String costsId) {
         return HttpResult.ok(ptlAgreementProductCostsTrajectoryService.getTrajectory(costsId));
     }
 
@@ -232,21 +232,29 @@ public class PtlNewAgreementController extends BaseController {
 
     @ApiOperation("获取产品id")
     @PostMapping("getProductId")
-    public HttpResult getProductId(@RequestBody ProductQueryVo productQueryVo){
-        return HttpResult.ok("",InsuranceRisk.determineInsuranceInformation(productQueryVo.getKindList(), productQueryVo.getRiskList()).getCode());
+    public HttpResult getProductId(@RequestBody ProductQueryVo productQueryVo) {
+        return HttpResult.ok("", InsuranceRisk.determineInsuranceInformation(productQueryVo.getKindList(), productQueryVo.getRiskList()).getCode());
     }
 
     @ApiOperation("复制承保规则")
     @PostMapping("/undwrt/copyRules")
-    public HttpResult copyRules(@RequestBody AgreementUndwrtRules agreementUndwrtRules){
+    public HttpResult copyRules(@RequestBody AgreementUndwrtRules agreementUndwrtRules) {
         return ptlAgreementUndwrtRulesNewService.copyRules(agreementUndwrtRules) ? HttpResult.ok("复制承保规则成功") : HttpResult.error("复制承保规则失败");
     }
 
 
     @ApiOperation("复制承保规则查询同保险公司协议")
     @GetMapping("/getAllAgreement")
-    public HttpResult<List<PtlAgreement>> getAllAgreement(String companyCode){
+    public HttpResult<List<PtlAgreement>> getAllAgreement(String companyCode) {
         return HttpResult.ok(ptlAgreementService.getByCompanyCode(companyCode));
     }
 
+
+    @ApiOperation("复制协议费用承保规则")
+    @PostMapping("/copyAgreementAllInformation")
+    public HttpResult<Object> copyAgreementAllInformation(@RequestBody AgreementAllInformationCopyVo agreementAllInformationCopyVo) {
+        ptlAgreementService.agreementAllInformationCopyVo(agreementAllInformationCopyVo);
+        return HttpResult.ok("复制成功");
+    }
+
 }

+ 12 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLink.java

@@ -10,6 +10,10 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * 协议费用与规则属性关联表
  */
@@ -56,4 +60,12 @@ public class PtlAgreementProductCostsAttrLink {
     @ApiModelProperty(value = "关联属性使用")
     @TableField(exist = false)
     private PtlAgreementProductCostsAttrLink children;
+
+//    public static boolean beforeAndAfterTheChange(List<PtlAgreementProductCostsAttrLink> before, List<PtlAgreementProductCostsAttrLink> after) {
+//        Map<String, PtlAgreementProductCostsAttrLink> collect = before.stream().collect(Collectors.toMap(PtlAgreementProductCostsAttrLink::getAttrCode, x -> x));
+//
+//
+//
+//    }
+
 }

+ 15 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsAttrLinkHistory.java

@@ -5,6 +5,7 @@ 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.ydtech.modules.protocols.constants.OperatorType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -75,4 +76,18 @@ public class PtlAgreementProductCostsAttrLinkHistory {
     @ApiModelProperty(value = "关联属性使用")
     @TableField(exist = false)
     private PtlAgreementProductCostsAttrLinkHistory children;
+
+    public PtlAgreementProductCostsAttrLinkHistory(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, OperatorType operatorType, String batch, String modifier) {
+        this.costsId = ptlAgreementProductCostsAttrLink.getCostsId();
+        this.attrId = ptlAgreementProductCostsAttrLink.getAttrId();
+        this.attrCode = ptlAgreementProductCostsAttrLink.getAttrCode();
+        this.min = ptlAgreementProductCostsAttrLink.getMin();
+        this.operator = ptlAgreementProductCostsAttrLink.getOperator();
+        this.max = ptlAgreementProductCostsAttrLink.getMax();
+        this.batch = batch;
+        this.operatorType = operatorType.getCode();
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
+
 }

+ 10 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java

@@ -238,6 +238,16 @@ public class PtlAgreementProductCostsNew {
     @TableField(exist = false)
     private String feeFileUrl;
 
+    @ApiModelProperty(value = "是否有效")
+    @TableField(exist = false)
+    private boolean effective;
+
+    /**
+     * 插入之前id存储
+     */
+    @TableField(exist = false)
+    private String saveBeforeId;
+
     @TableField(exist = false)
     private List<PtlAgreementProductCostsAttrLink> costsAttrLinks;
 

+ 47 - 1
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNewHistory.java

@@ -4,6 +4,8 @@ package com.ydtech.modules.protocols.entity.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocols.constants.OperatorType;
+import com.ydtech.utils.BigDecimalUtils;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -206,5 +208,49 @@ public class PtlAgreementProductCostsNewHistory {
     private LocalDateTime operatorTime;
 
 
-
+    public PtlAgreementProductCostsNewHistory(PtlAgreementProductCostsNew ptlAgreementProductCostsNew,
+                                              PtlAgreementProductCostsExport ptlAgreementProductCostsExport,
+                                              OperatorType operatorType,
+                                              String batch,
+                                              String modifier
+    ) {
+        this.agreementId = ptlAgreementProductCostsNew.getAgreementId();
+        this.costsId = ptlAgreementProductCostsNew.getId();
+        this.productId = ptlAgreementProductCostsNew.getProductId();
+        this.productName = ptlAgreementProductCostsNew.getProductName();
+        this.jqCarCostsProportion = ptlAgreementProductCostsNew.getJqCarCostsProportion();
+        this.jqCostsProportion = ptlAgreementProductCostsNew.getJqCostsProportion();
+        this.jqCostsProportionAddInvsestment = ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment();
+        this.jqCarOtherCostsProportion = ptlAgreementProductCostsNew.getJqCarOtherCostsProportion();
+        this.syCarCostsProportion = ptlAgreementProductCostsNew.getSyCarCostsProportion();
+        this.syCostsProportion = ptlAgreementProductCostsNew.getSyCostsProportion();
+        this.syCostsProportionAddInvsestment = ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment();
+        this.syCarOtherCostsProportion = ptlAgreementProductCostsNew.getSyCarOtherCostsProportion();
+        this.noCarCostsProportion = ptlAgreementProductCostsNew.getNoCarCostsProportion();
+        this.noCostsProportion = ptlAgreementProductCostsNew.getNoCostsProportion();
+        this.noCarOtherCostsProportion = ptlAgreementProductCostsNew.getNoCarOtherCostsProportion();
+        this.costsDescription = ptlAgreementProductCostsNew.getCostsDescription();
+        this.costsStartDate = ptlAgreementProductCostsNew.getCostsStartDate();
+        this.costsEndDate = ptlAgreementProductCostsNew.getCostsEndDate();
+        this.priorityLevel = ptlAgreementProductCostsNew.getPriorityLevel();
+        this.jqExportRadioLevel1 = ptlAgreementProductCostsExport.getJqExportRadioLevel1();
+        this.jqExportRadioLevel2 = ptlAgreementProductCostsExport.getJqExportRadioLevel2();
+        this.jqExportRadioLevel3 = ptlAgreementProductCostsExport.getJqExportRadioLevel3();
+        this.jqExportRadioLevel4 = ptlAgreementProductCostsExport.getJqExportRadioLevel4();
+        this.jqExportRadioLevel5 = ptlAgreementProductCostsExport.getJqExportRadioLevel5();
+        this.syExportRadioLevel1 = ptlAgreementProductCostsExport.getSyExportRadioLevel1();
+        this.syExportRadioLevel2 = ptlAgreementProductCostsExport.getSyExportRadioLevel2();
+        this.syExportRadioLevel3 = ptlAgreementProductCostsExport.getSyExportRadioLevel3();
+        this.syExportRadioLevel4 = ptlAgreementProductCostsExport.getSyExportRadioLevel4();
+        this.syExportRadioLevel5 = ptlAgreementProductCostsExport.getSyExportRadioLevel5();
+        this.noCarExportRadioLevel1 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel1();
+        this.noCarExportRadioLevel2 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel2();
+        this.noCarExportRadioLevel3 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel3();
+        this.noCarExportRadioLevel4 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel4();
+        this.noCarExportRadioLevel5 = ptlAgreementProductCostsExport.getNoCarExportRadioLevel5();
+        this.batch = batch;
+        this.operatorType = operatorType.getCode();
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
 }

+ 28 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesAttrLinkHistory.java

@@ -5,6 +5,7 @@ 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.ydtech.modules.protocols.constants.OperatorType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -56,6 +57,9 @@ public class PtlAgreementUndwrtRulesAttrLinkHistory {
     @TableField(value = "batch")
     private String batch;
 
+    /**
+     * @see com.ydtech.modules.protocols.constants.OperatorType
+     */
     @ApiModelProperty(value = "操作类型")
     @TableField(value = "operator_type")
     private String operatorType;
@@ -74,4 +78,28 @@ public class PtlAgreementUndwrtRulesAttrLinkHistory {
     @ApiModelProperty(value = "关联属性使用")
     @TableField(exist = false)
     private PtlAgreementUndwrtRulesAttrLinkHistory children;
+
+
+    /**
+     * @param ptlAgreementUndwrtRulesAttrLink 协议承保规则与规则属性
+     * @param operatorType                    操作类型
+     * @param batch                           批次号
+     * @param modifier                        操作人
+     */
+    public PtlAgreementUndwrtRulesAttrLinkHistory(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink,
+                                                  OperatorType operatorType,
+                                                  String batch,
+                                                  String modifier
+    ) {
+        this.rulesId = ptlAgreementUndwrtRulesAttrLink.getRulesId();
+        this.attrId = ptlAgreementUndwrtRulesAttrLink.getAttrId();
+        this.attrCode = ptlAgreementUndwrtRulesAttrLink.getAttrCode();
+        this.min = ptlAgreementUndwrtRulesAttrLink.getMin();
+        this.operator = ptlAgreementUndwrtRulesAttrLink.getOperator();
+        this.max = ptlAgreementUndwrtRulesAttrLink.getMax();
+        this.operatorType = operatorType.getCode();
+        this.batch = batch;
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
 }

+ 5 - 0
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNew.java

@@ -56,6 +56,11 @@ public class PtlAgreementUndwrtRulesNew {
     @TableField(exist = false)
     private String desc;
 
+    /**
+     * 插入之前id存储
+     */
+    @TableField(exist = false)
+    private String saveBeforeId;
 
     @ApiModelProperty(value = "规则属性")
     @TableField(exist = false)

+ 16 - 2
src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementUndwrtRulesNewHistory.java

@@ -4,6 +4,7 @@ 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.ydtech.modules.protocols.constants.OperatorType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -72,6 +73,19 @@ public class PtlAgreementUndwrtRulesNewHistory {
     @TableField(value = "operator_time")
     private LocalDateTime operatorTime;
 
-
-
+    public PtlAgreementUndwrtRulesNewHistory(PtlAgreementUndwrtRulesNew ptlAgreementUndwrtRulesNew,
+                                             OperatorType operatorType,
+                                             String batch,
+                                             String modifier
+    ) {
+        this.agreementId = ptlAgreementUndwrtRulesNew.getAgreementId();
+        this.rulesId = ptlAgreementUndwrtRulesNew.getId();
+        this.rulesType = ptlAgreementUndwrtRulesNew.getRulesType();
+        this.productType = ptlAgreementUndwrtRulesNew.getProductType();
+        this.validInd = ptlAgreementUndwrtRulesNew.getValidInd();
+        this.batch = batch;
+        this.operatorType = operatorType.getCode();
+        this.modifier = modifier;
+        this.operatorTime = LocalDateTime.now();
+    }
 }

+ 44 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementAllInformationCopyVo.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.protocols.entity.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("协议复制信息实体")
+public class AgreementAllInformationCopyVo implements Serializable {
+
+    private static final long serialVersionUID = -7422542310742227930L;
+
+    @ApiModelProperty("协议id")
+    private String agreementId;
+
+    @ApiModelProperty("费用")
+    private InformationDTO cost;
+
+    @ApiModelProperty("承保规则")
+    private InformationDTO underwritingRules;
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @ApiModel("信息实体")
+    public static class InformationDTO{
+
+        @ApiModelProperty("是否全部")
+        private boolean all;
+
+        @ApiModelProperty("承保规则id列表 和 费用id列表")
+        private List<String> informationId;
+
+    }
+
+}

+ 1 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java

@@ -20,6 +20,7 @@ public class AgreementProductQueryVo extends PageRequest {
 
     @ApiModelProperty(value = "协议id列表")
     private List<String> agreementIdList;
+
     @ApiModelProperty(value = "协议id")
     private String agreementId;
 

+ 15 - 4
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsAttrLinkService.java

@@ -5,11 +5,22 @@ import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
 
+import java.util.List;
+
 /**
-*@author: tz
-*@description: 协议承保规则属性 service
-*@create: 2024-2-22 15:44:29
-*/
+ * @author: tz
+ * @description: 协议承保规则属性 service
+ * @create: 2024-2-22 15:44:29
+ */
 public interface PtlAgreementProductCostsAttrLinkService extends IService<PtlAgreementProductCostsAttrLink> {
 
+    /**
+     * 通过费用id 获取费用因子
+     *
+     * @param costsId 费用id
+     * @return 费用因子列表
+     */
+    default List<PtlAgreementProductCostsAttrLink> getByCostsId(String costsId) {
+        return lambdaQuery().eq(PtlAgreementProductCostsAttrLink::getCostsId, costsId).list();
+    }
 }

+ 32 - 0
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java

@@ -9,6 +9,7 @@ import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.ydtech.modules.protocols.entity.vo.*;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -30,6 +31,27 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
 
     List<PtlAgreementProductCostsNew> getByAgreementId(AgreementProductQueryVo agreementProductQueryVo);
 
+
+    /**
+     * 通过协议id 查询 协议费用表
+     *
+     * @param agreementId 协议id
+     * @return 费用列表
+     */
+    default List<PtlAgreementProductCostsNew> getByAgreementId(String agreementId) {
+        return lambdaQuery().eq(PtlAgreementProductCostsNew::getAgreementId, agreementId).list();
+    }
+
+    /**
+     * 费用id列表 获取费用
+     *
+     * @param costsIdList 费用id列表
+     * @return 费用列表
+     */
+    default List<PtlAgreementProductCostsNew> getByCostsIdList(List<String> costsIdList) {
+        return lambdaQuery().in(PtlAgreementProductCostsNew::getId, costsIdList).list();
+    }
+
     /**
      * 获取协议费用列表(用于分组费用关联)
      *
@@ -143,6 +165,7 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
      * @return
      */
     List<PtlAgreementProductCostsNew> getInquiryNowFee(InquiryNowFeeQueryVo inquiryNowFeeQueryVo);
+
     /**
      * 获取现询费用
      *
@@ -165,4 +188,13 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
      * @return
      */
     HttpResult costsDisable(String costsId);
+
+    /**
+     * 复制费用和规则
+     *
+     * @param ptlAgreementProductCostsNews 费用列表
+     * @param agreementId                  协议id
+     */
+    void copyFeesAndRules(List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews, String agreementId);
+
 }

+ 15 - 4
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesAttrLinkService.java

@@ -4,11 +4,22 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsAttrLink;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttrLink;
 
+import java.util.List;
+
 /**
-*@author: tz
-*@description: 协议承保规则属性 service
-*@create: 2024-2-22 15:44:29
-*/
+ * @author: tz
+ * @description: 协议承保规则属性 service
+ * @create: 2024-2-22 15:44:29
+ */
 public interface PtlAgreementUndwrtRulesAttrLinkService extends IService<PtlAgreementUndwrtRulesAttrLink> {
 
+    /**
+     * 通过规则id列表获取 规则列表
+     *
+     * @param rulesId 规则id列表
+     * @return 规则列表
+     */
+    default List<PtlAgreementUndwrtRulesAttrLink> getByRulesIdList(List<String> rulesId) {
+        return lambdaQuery().in(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId).list();
+    }
 }

+ 34 - 5
src/main/java/com/ydtech/modules/protocols/service/PtlAgreementUndwrtRulesNewService.java

@@ -12,19 +12,20 @@ import com.ydtech.modules.protocols.entity.vo.*;
 import java.util.List;
 
 /**
-*@author: tz
-*@description: 协议承保规则属性 service
-*@create: 2024-2-22 15:44:29
-*/
+ * @author: tz
+ * @description: 协议承保规则属性 service
+ * @create: 2024-2-22 15:44:29
+ */
 public interface PtlAgreementUndwrtRulesNewService extends IService<PtlAgreementUndwrtRulesNew> {
     AgreementUndwrtRulesSave rulesGet(String costsId, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList);
 
     List<PtlAgreementUndwrtRulesNew> rulesList(String agreementId);
 
-    Page rulesPage(Page page,String agreementId);
+    Page rulesPage(Page page, String agreementId);
 
     /**
      * 添加协议承保规则
+     *
      * @param agreementUndwrtRules
      * @return
      */
@@ -32,6 +33,7 @@ public interface PtlAgreementUndwrtRulesNewService extends IService<PtlAgreement
 
     /**
      * 更新协议承保规则
+     *
      * @param agreementUndwrtRules
      * @return
      */
@@ -42,8 +44,35 @@ public interface PtlAgreementUndwrtRulesNewService extends IService<PtlAgreement
 
     /**
      * 复制协议承保规则
+     *
      * @param agreementUndwrtRules
      * @return
      */
     boolean copyRules(AgreementUndwrtRules agreementUndwrtRules);
+
+    /**
+     * 通过协议id 获取承保规则
+     *
+     * @param id 承保规则
+     * @return 承保规则列表
+     */
+    default List<PtlAgreementUndwrtRulesNew> getByAgreementId(String id) {
+        return lambdaQuery().eq(PtlAgreementUndwrtRulesNew::getAgreementId, id).list();
+    }
+
+    /**
+     * 通过规则列表获取 承保规则列表
+     * @param rulesList 承保规则列表
+     * @return 承保规则列表
+     */
+    default List<PtlAgreementUndwrtRulesNew> getByRulesIdList(List<String> rulesList) {
+        return lambdaQuery().in(PtlAgreementUndwrtRulesNew::getId, rulesList).list();
+    }
+
+    /**
+     * 复制承保规则
+     * @param ptlAgreementUndwrtRulesNews 承保规则列表
+     * @param agreementId 协议id
+     */
+    void copyUndwrtRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews, String agreementId);
 }

+ 117 - 43
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.protocols.service.impl;
 
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -24,6 +25,7 @@ import com.ydtech.modules.fnc.entity.InsFeeAudit;
 import com.ydtech.modules.fnc.entity.InsFeeAuditHistory;
 import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
+import com.ydtech.modules.inv.utils.LocalDateTimeUtils;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.FeeOrderNewRecordVo;
@@ -33,15 +35,18 @@ import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.protocol.constants.ValidStatus;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.modules.protocols.constants.AgreementProductCostsAuditStatus;
+import com.ydtech.modules.protocols.constants.OperatorType;
 import com.ydtech.modules.protocols.dao.PtlAgreementProductCostsNewMapper;
 import com.ydtech.modules.protocols.entity.po.*;
 import com.ydtech.modules.protocols.entity.vo.*;
 import com.ydtech.modules.protocols.service.*;
 import com.ydtech.utils.idgen.IdGenerate;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -49,6 +54,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -58,6 +64,7 @@ import java.util.function.Consumer;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
+
 /**
  * @description 协议承保规则属性 service实现类
  * @createDate 2024-2-22 15:44:29
@@ -102,6 +109,8 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 
     @Resource
     private InsFeeAuditHistoryService insFeeAuditHistoryService;
+    @Autowired
+    private PtlAgreementAttributionService ptlAgreementAttributionService;
 
     @Override
     public Page<PtlAgreementProductCostsNew> getProductPage(Page page, SysChannelGroupPageVo sysChannelGroupPageVo) {
@@ -226,32 +235,29 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         });
         //赋值出口比例
         List<PtlAgreementProductCostsNew> records = pages.getRecords();
-        for (int i = 0; i < records.size(); i++) {
-            int finalI = i;
-            PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExports.stream().filter(y -> y.getCostsId().equals(records.get(finalI).getId())).findFirst().orElse(null);
-            if (!Objects.isNull(ptlAgreementProductCostsExport)) {
-                records.get(i).setJqExportRadioLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1().toString());
-                records.get(i).setJqExportRadioLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2().toString());
-                records.get(i).setJqExportRadioLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3().toString());
-                records.get(i).setJqExportRadioLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4().toString());
-                records.get(i).setJqExportRadioLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5().toString());
+        Map<String, PtlAgreementProductCostsExport> ptlAgreementProductCostsExportMap = ptlAgreementProductCostsExports.stream().collect(Collectors.toMap(PtlAgreementProductCostsExport::getCostsId, x -> x));
+        records.forEach(x -> {
+            PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportMap.get(x.getId());
+            x.setJqExportRadioLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1().toString());
+            x.setJqExportRadioLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2().toString());
+            x.setJqExportRadioLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3().toString());
+            x.setJqExportRadioLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4().toString());
+            x.setJqExportRadioLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5().toString());
 //                records.get(i).setJqExportInvestmentRadio(ptlAgreementProductCostsExport.getJqExportInvestmentRadio().toString());
-                records.get(i).setSyExportRadioLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1().toString());
-                records.get(i).setSyExportRadioLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2().toString());
-                records.get(i).setSyExportRadioLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3().toString());
-                records.get(i).setSyExportRadioLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4().toString());
-                records.get(i).setSyExportRadioLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5().toString());
+            x.setSyExportRadioLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1().toString());
+            x.setSyExportRadioLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2().toString());
+            x.setSyExportRadioLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3().toString());
+            x.setSyExportRadioLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4().toString());
+            x.setSyExportRadioLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5().toString());
 //                records.get(i).setSyExportInvestmentRadio(ptlAgreementProductCostsExport.getSyExportInvestmentRadio().toString());
-                records.get(i).setNoCarExportRadioLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1().toString());
-                records.get(i).setNoCarExportRadioLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2().toString());
-                records.get(i).setNoCarExportRadioLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3().toString());
-                records.get(i).setNoCarExportRadioLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4().toString());
-                records.get(i).setNoCarExportRadioLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5().toString());
-            }
-        }
-        pages.getRecords().stream().forEach(x -> {
-
+            x.setNoCarExportRadioLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1().toString());
+            x.setNoCarExportRadioLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2().toString());
+            x.setNoCarExportRadioLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3().toString());
+            x.setNoCarExportRadioLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4().toString());
+            x.setNoCarExportRadioLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5().toString());
+            x.setEffective(LocalDateTimeUtils.nowIsBetweenStartAndEnd(x.getCostsStartDate(), x.getCostsEndDate()));
         });
+
         return pages;
     }
 
@@ -587,6 +593,9 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
             ptlAgreementProductCostsNew.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
             ptlAgreementProductCostsNew.setCreateBy(BaseController.getUser().getId());
             ptlAgreementProductCostsNew.blank();
+            ptlAgreementProductCostsNew.setIsAudit(AgreementProductCostsAuditStatus.COSTS_AUDIT_STATUS_0.getCode());
+            ptlAgreementProductCostsNew.setValidStatus(ValidStatus.AVS_0.getCode());
+
             int insert = baseMapper.insert(ptlAgreementProductCostsNew);
 
             //添加费用出口信息
@@ -828,27 +837,22 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         }
         ptlAgreementProductCostsExportService.saveOrUpdate(ptlAgreementProductCostsExport);
 
-        //保存产品费用历史记录
-        PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory();
-        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
-        //添加费用ID
-        ptlAgreementProductCostsNewHistory.setId(IdGenerate.nextId());
-        ptlAgreementProductCostsNewHistory.setCostsId(ptlAgreementProductCostsNew.getId());
-        //生成批次ID
+        //保存产品费用历史记录.
         String uuid = IdGenerate.nextId();
-        ptlAgreementProductCostsNewHistory.setBatch(uuid);
-        ptlAgreementProductCostsNewHistory.setProductId(newProjectId);
-        ptlAgreementProductCostsNewHistory.setProductName(newProjectName);
-        ptlAgreementProductCostsNewHistory.setOperatorType("update");
-        ptlAgreementProductCostsNewHistory.setModifier(BaseController.getUser().getId());
-        ptlAgreementProductCostsNewHistory.setOperatorTime(LocalDateTime.now());
+        String userId = BaseController.getUser().getId();
+        PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory(ptlAgreementProductCostsNew, ptlAgreementProductCostsExport, OperatorType.UPDATE, uuid, userId);
+        BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
+        ptlAgreementProductCostsNewHistory.setId(uuid);
         ptlAgreementProductCostsNewHistoryService.save(ptlAgreementProductCostsNewHistory);
 
+        // 获取上次提交的信息
+        List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinkList = ptlAgreementProductCostsAttrLinkService.getByCostsId(ptlAgreementProductCostsNew.getId());
+        List<String> costsAttrLinkId = ptlAgreementProductCostsAttrLinkList.stream().map(PtlAgreementProductCostsAttrLink::getId).collect(Collectors.toList());
 
         //设置费用因子属性
         //先删除属性值
-        ptlAgreementProductCostsAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
-                .eq(PtlAgreementProductCostsAttrLink::getCostsId, ptlAgreementProductCostsNew.getId()));
+        ptlAgreementProductCostsAttrLinkService.removeBatchByIds(costsAttrLinkId);
+
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
         //创建产品费用因子历史记录容器
         List<PtlAgreementProductCostsAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
@@ -911,7 +915,6 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                         BeanUtils.copyProperties(x, costsAttrLinkHistory);
                         costsAttrLinkHistory.setId(null);
                         costsAttrLinkHistory.setBatch(uuid);
-
                         costsAttrLinkHistory.setOperatorType("update");
                         costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
                         costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
@@ -922,6 +925,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         });
         //保存产品费用因子历史记录
         ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(costsAttrLinkHistories);
+
         ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
         //添加费用因子轨迹
         ptlAgreementProductCostsTrajectoryService.addCostsTrajectory(ptlAgreementProductCostsNew.getId(), "修改费用因子", BaseController.getUser().getId());
@@ -1028,6 +1032,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
             PtlAgreementProductCostsNew ptlAgreementProductCostsNew = baseMapper.selectById(agreementProductCostsCopyVo.getOrgCostsId());
             ptlAgreementProductCostsNew.setAgreementId(agreementProductCostsCopyVo.getNewAgreementId());
             ptlAgreementProductCostsNew.setCreateTime(new Date().toString());
+
             BeanUtils.copyProperties(ptlAgreementProductCostsNew, agreementProductCosts);
             agreementProductCosts.getProductId().add(ptlAgreementProductCostsNew.getProductId());
             agreementProductCosts.getProductName().add(ptlAgreementProductCostsNew.getProductName());
@@ -1846,7 +1851,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                             retailProportion.getJqRetailLevel3Proportion(),
                             retailProportion.getSyRetailLevel3Proportion(),
                             retailProportion.getNoRetailLevel3Proportion());
-                    if (insFeeOrderNew.getFirstLevelUserId() != null) {
+                    if (insFeeOrderNew.getThreeLevelUserId() != null) {
                         SysUser byId = sysUserService.getById(insFeeOrderNew.getThreeLevelUserId());
                         retailFeeLevel3.setUserName(byId.getName() + "(" + byId.getId() + ")");
                     }
@@ -2400,27 +2405,30 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         queryWrapper.gt(PtlAgreementProductCostsNew::getCostsEndDate, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
 
         queryWrapper.eq(PtlAgreementProductCostsNew::getIsAudit, "1");
+        //费用审核
+        queryWrapper.eq(PtlAgreementProductCostsNew::getValidStatus, 1);
         queryWrapper.eq(PtlAgreementProductCostsNew::getIsInquiryNow, "0");
         List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews = baseMapper.selectList(queryWrapper);
 
         ptlAgreementProductCostsNews.forEach(item -> {
             if (item.getProductId().equals(ProductsType.PT_0330.getCode())) {
-                if (item.getSyCostsProportion().equals("0")) {
+                if (StringUtils.isBlank(item.getSyCostsProportion()) || item.getSyCostsProportion().equals("0")) {
                     item.setSyCostsProportion(null);
                 }
 
             } else if (item.getProductId().equals(ProductsType.PT_034002.getCode()) || item.getProductId().equals(ProductsType.PT_034001.getCode())) {
-                if (item.getJqCostsProportion().equals("0")) {
+                if (StringUtils.isBlank(item.getJqCostsProportion()) || item.getJqCostsProportion().equals("0")) {
                     item.setJqCostsProportion(null);
                 }
             }
-            if (item.getNoCarCostsProportion().equals("0")) {
+            if (StringUtils.isBlank(item.getNoCarCostsProportion()) || item.getNoCarCostsProportion().equals("0")) {
                 item.setNoCostsProportion(null);
             }
         });
 
         return ptlAgreementProductCostsNews;
     }
+
     /**
      * 获取现询费用
      *
@@ -2435,6 +2443,8 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         queryWrapper.gt(PtlAgreementProductCostsNew::getCostsEndDate, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
 
         queryWrapper.eq(PtlAgreementProductCostsNew::getIsAudit, "1");
+        //费用审核
+        queryWrapper.eq(PtlAgreementProductCostsNew::getValidStatus, 1);
         queryWrapper.eq(PtlAgreementProductCostsNew::getIsInquiryNow, "1");
 
         queryWrapper.eq(PtlAgreementProductCostsNew::getAgreementId, agreementId);
@@ -2508,4 +2518,68 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         return HttpResult.ok("修改成功");
     }
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void copyFeesAndRules(List<PtlAgreementProductCostsNew> ptlAgreementProductCostsNews, String agreementId) {
+        if (ptlAgreementProductCostsNews.isEmpty()) {
+            return;
+        }
+        // 批次号
+        String batchId = IdGenerate.nextId();
+        // 用户id
+        String userId = BaseController.getUserId();
+        List<String> list = new ArrayList<>();
+        ptlAgreementProductCostsNews.forEach(x -> {
+            list.add(x.getId());
+            x.setAgreementId(agreementId);
+            x.setSaveBeforeId(x.getId());
+            x.setId(null);
+            x.setValidStatus(ValidStatus.AVS_0.getCode());
+            x.setIsAudit(AgreementProductCostsAuditStatus.COSTS_AUDIT_STATUS_0.getCode());
+        });
+        // 协议费用出口比例
+        List<PtlAgreementProductCostsExport> ptlAgreementProductCostsExportList = ptlAgreementProductCostsExportService.lambdaQuery()
+                .in(PtlAgreementProductCostsExport::getCostsId, list)
+                .list();
+        // 协议费用与规则属性关联
+        List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinkList = ptlAgreementProductCostsAttrLinkService.lambdaQuery()
+                .in(PtlAgreementProductCostsAttrLink::getCostsId, list)
+                .list();
+
+        ptlAgreementProductCostsNewService.saveBatch(ptlAgreementProductCostsNews);
+        // 映射新增之后的id 和 原先的数据
+        Map<String, String> costsMapping = ptlAgreementProductCostsNews.stream()
+                .collect(Collectors.toMap(PtlAgreementProductCostsNew::getSaveBeforeId, PtlAgreementProductCostsNew::getId));
+        // 协议费用出口比例
+        ptlAgreementProductCostsExportList.forEach(x -> {
+            x.setId(null);
+            x.setCostsId(costsMapping.get(x.getCostsId()));
+        });
+        ptlAgreementProductCostsExportService.saveBatch(ptlAgreementProductCostsExportList);
+
+        // 将出口和入口合并
+        Map<String, PtlAgreementProductCostsNew> costsMappingNew = ptlAgreementProductCostsNews.stream()
+                .collect(Collectors.toMap(PtlAgreementProductCostsNew::getId, x-> x));
+        List<PtlAgreementProductCostsNewHistory> ptlAgreementProductCostsNewHistories = ptlAgreementProductCostsExportList.stream()
+                .map(x -> {
+                    PtlAgreementProductCostsNew ptlAgreementProductCostsNew = costsMappingNew.get(x.getCostsId());
+                    return new PtlAgreementProductCostsNewHistory(ptlAgreementProductCostsNew, x, OperatorType.ADD, batchId, userId);
+                })
+                .collect(Collectors.toList());
+        ptlAgreementProductCostsNewHistoryService.saveBatch(ptlAgreementProductCostsNewHistories);
+
+        // 费用因子规则
+        ptlAgreementProductCostsAttrLinkList.forEach(x -> {
+            x.setId(null);
+            x.setCostsId(costsMapping.get(x.getCostsId()));
+        });
+        ptlAgreementProductCostsAttrLinkService.saveBatch(ptlAgreementProductCostsAttrLinkList);
+
+        // 费用因子规则历史表
+        List<PtlAgreementProductCostsAttrLinkHistory> ptlAgreementProductCostsAttrLinkHistories = ptlAgreementProductCostsAttrLinkList.stream()
+                .map(x -> new PtlAgreementProductCostsAttrLinkHistory(x, OperatorType.ADD, batchId, userId))
+                .collect(Collectors.toList());
+        ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(ptlAgreementProductCostsAttrLinkHistories);
+    }
+
 }

+ 80 - 58
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

@@ -8,6 +8,7 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.entity.po.PtlAreaLicense;
 import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
+import com.ydtech.modules.protocols.constants.OperatorType;
 import com.ydtech.modules.protocols.dao.PtlAgreementUndwrtRulesNewMapper;
 import com.ydtech.modules.protocols.entity.po.*;
 import com.ydtech.modules.protocols.entity.vo.AgreementUndwrtRules;
@@ -30,8 +31,7 @@ import java.util.stream.Collectors;
  * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRulesAttrMapper
  */
 @Service
-public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesNewMapper, PtlAgreementUndwrtRulesNew>
-        implements PtlAgreementUndwrtRulesNewService {
+public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesNewMapper, PtlAgreementUndwrtRulesNew> implements PtlAgreementUndwrtRulesNewService {
 
     @Autowired
     private PtlAgreementUndwrtRulesAttrLinkService ptlAgreementUndwrtRulesAttrLinkService;
@@ -57,8 +57,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
         //设置费用因子属性
         List<PtlAgreementUndwrtRulesAttr> ptlAgreementUndwrtRulesAttrs = new ArrayList<>();
-        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ruleId));
+        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ruleId));
 
         undwrtRulesAttrList.stream().forEach(x -> {
             //处理多选和下拉
@@ -108,11 +107,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Override
     public List<PtlAgreementUndwrtRulesNew> rulesList(String agreementId) {
         LocalDateTime now = LocalDateTime.now();
-        List<PtlAgreementUndwrtRulesNew> rulesList = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
-                .eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId)
-                .eq(PtlAgreementUndwrtRulesNew::getValidInd, "1")
-                .le(PtlAgreementUndwrtRulesNew::getRulesStartDate, now)
-                .ge(PtlAgreementUndwrtRulesNew::getRulesEndDate, now));
+        List<PtlAgreementUndwrtRulesNew> rulesList = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>().eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId).eq(PtlAgreementUndwrtRulesNew::getValidInd, "1").le(PtlAgreementUndwrtRulesNew::getRulesStartDate, now).ge(PtlAgreementUndwrtRulesNew::getRulesEndDate, now));
 
         List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
         rulesList.forEach(item -> {
@@ -125,8 +120,7 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Override
     public Page rulesPage(Page page, String agreementId) {
 
-        Page<PtlAgreementUndwrtRulesNew> rulesPage = baseMapper.selectPage(page, new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>()
-                .eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId));
+        Page<PtlAgreementUndwrtRulesNew> rulesPage = baseMapper.selectPage(page, new LambdaQueryWrapper<PtlAgreementUndwrtRulesNew>().eq(PtlAgreementUndwrtRulesNew::getAgreementId, agreementId));
 
 //        List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.list();
         List<PtlAgreementUndwrtRulesNew> records = rulesPage.getRecords();
@@ -141,11 +135,9 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         if (ids.isEmpty()) {
             throw new SystemException("该协议暂无承保规则");
         }
-        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .in(PtlAgreementUndwrtRulesAttrLink::getRulesId, ids));
+        List<PtlAgreementUndwrtRulesAttrLink> list = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().in(PtlAgreementUndwrtRulesAttrLink::getRulesId, ids));
 
-        Map<String, List<PtlAgreementUndwrtRulesAttrLink>> groupedByCostsId = list.stream()
-                .collect(Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLink::getRulesId));
+        Map<String, List<PtlAgreementUndwrtRulesAttrLink>> groupedByCostsId = list.stream().collect(Collectors.groupingBy(PtlAgreementUndwrtRulesAttrLink::getRulesId));
         groupedByCostsId.forEach((k, v) -> {
             records.stream().filter(x -> x.getId().equals(k)).findFirst().ifPresent(x -> x.setDesc(buildDesc(v, undwrtRulesAttrList)));
         });
@@ -160,39 +152,43 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
     /**
      * 遍历费用属性描述文字
+     *
      * @param v
      * @param undwrtRulesAttrList
      * @return
      */
     private String buildDesc(List<PtlAgreementUndwrtRulesAttrLink> v, List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList) {
-        String desc = "";
+        StringBuilder desc = new StringBuilder();
         for (int i = 0; i < v.size(); i++) {
             int finalI = i;
-            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode())).findAny().get();
+            PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream()
+                    .filter(x -> x.getAttrCode().equals(v.get(finalI).getAttrCode()))
+                    .findAny()
+                    .get();
             //数值范围判断
+
             if ("inputNumber".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                desc += inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+                desc.append(inputNumberIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i))).append("\n");
             }
             if ("radio".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                desc += radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i)) + "\n";
+                desc.append(radioIdentifying(ptlAgreementUndwrtRulesAttr, v.get(i))).append("\n");
             }
             if ("checkbox".equals(ptlAgreementUndwrtRulesAttr.getAttrType()) || "select".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
-                desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+                desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(v.get(i).getMin()).append("\n");
             }
-            if ("input".equals(ptlAgreementUndwrtRulesAttr.getAttrType())){
-                if(v.get(i).getOperator() != null && v.get(i).getOperator().equals("1")) {
-                    desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
-                }else{
-                    desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "不包含" + v.get(i).getMin() + "\n";
+            if ("input".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
+                if (v.get(i).getOperator() != null && v.get(i).getOperator().equals("1")) {
+                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("包含").append(v.get(i).getMin()).append("\n");
+                } else {
+                    desc.append(ptlAgreementUndwrtRulesAttr.getAttrName()).append("不包含").append(v.get(i).getMin()).append("\n");
                 }
             }
         }
-        return desc;
+        return desc.toString();
     }
 
     private String radioIdentifying(PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, PtlAgreementUndwrtRulesAttrLink ptlAgreementProductCostsAttrLink) {
-        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
-                x.getCode().equals(ptlAgreementProductCostsAttrLink.getMin())).findAny().get();
+        PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x -> x.getCode().equals(ptlAgreementProductCostsAttrLink.getMin())).findAny().get();
         return ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + ptlAgreementUndwrtRulesDictLabal.getName();
     }
 
@@ -214,9 +210,8 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     /**
      * 验证承保规则表单
      */
-    private void validateRules(AgreementUndwrtRules agreementUndwrtRules){
-        if(agreementUndwrtRules.getValidInd() == null)
-        {
+    private void validateRules(AgreementUndwrtRules agreementUndwrtRules) {
+        if (agreementUndwrtRules.getValidInd() == null) {
             throw new RuntimeException("有效标志不能为空");
         }
     }
@@ -315,22 +310,20 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
 
         //设置费用因子属性
         //先删除属性值
-        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ptlAgreementUndwrtRulesNew.getId()));
+        ptlAgreementUndwrtRulesAttrLinkService.remove(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, ptlAgreementUndwrtRulesNew.getId()));
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
         //再添加属性值
         List<PtlAgreementUndwrtRulesAttrLink> costsAttrLinks = agreementUndwrtRules.getRulesAttrList();
         List<PtlAgreementUndwrtRulesAttrLink> costsAttrLink = new ArrayList<>();
         costsAttrLinks.forEach(x -> {
             //转换数组
-            if(x.getMinArray() != null && x.getMinArray().length > 0){
-                x.setMin(String.join(",",x.getMinArray()));
+            if (x.getMinArray() != null && x.getMinArray().length > 0) {
+                x.setMin(String.join(",", x.getMinArray()));
             }
 
             //处理中文逗号
-            if(x.getMin() != null && x.getMin().contains(","))
-            {
-                x.setMin(x.getMin().replace(",",","));
+            if (x.getMin() != null && x.getMin().contains(",")) {
+                x.setMin(x.getMin().replace(",", ","));
             }
             //单独处理车牌号
             if ("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && x.getMin() != "")) {
@@ -410,11 +403,10 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         ptlAgreementUndwrtRulesNewHistoryService.save(ptlAgreementUndwrtRulesNewHistory);
 
         //创建承包规则费用因子历史记录容器
-        List< PtlAgreementUndwrtRulesAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
+        List<PtlAgreementUndwrtRulesAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
 
         //获取承包规则费用因子出口历史记
-        List<PtlAgreementUndwrtRulesAttrLink> costsAttrLinks = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>()
-                .eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId));
+        List<PtlAgreementUndwrtRulesAttrLink> costsAttrLinks = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, rulesId));
 
         costsAttrLinks.forEach(x -> {
             PtlAgreementUndwrtRulesAttrLinkHistory costsAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
@@ -441,35 +433,23 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
     @Override
     public boolean copyRules(AgreementUndwrtRules agreementUndwrtRules) {
         List<PtlAgreementUndwrtRulesNew> list = baseMapper.selectBatchIds(Arrays.asList(agreementUndwrtRules.getIds()));
-        for (PtlAgreementUndwrtRulesNew originalRule  : list) {
+        for (PtlAgreementUndwrtRulesNew originalRule : list) {
             PtlAgreementUndwrtRulesNew clonedRule = new PtlAgreementUndwrtRulesNew();
-            BeanUtils.copyProperties(originalRule, clonedRule, "id","agreementId");
-
+            BeanUtils.copyProperties(originalRule, clonedRule, "id", "agreementId");
             clonedRule.setId(null);
             clonedRule.setAgreementId(agreementUndwrtRules.getAgreementId());
-
             AgreementUndwrtRules convertedAgreementUndwrtRules = convertToAgreementUndwrtRules(clonedRule);
-
             convertedAgreementUndwrtRules.setRulesAttrList(agreementUndwrtRules.getRulesAttrList());
 
             //调用承保规则新增方法
             rulesAdd(convertedAgreementUndwrtRules);
-            List<PtlAgreementUndwrtRulesAttrLink> attrLinks =
-                    ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, originalRule.getId()));
+            List<PtlAgreementUndwrtRulesAttrLink> attrLinks = ptlAgreementUndwrtRulesAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementUndwrtRulesAttrLink>().eq(PtlAgreementUndwrtRulesAttrLink::getRulesId, originalRule.getId()));
 
             List<PtlAgreementUndwrtRulesAttrLinkHistory> undwrtRulesAttrLinkHistories = new ArrayList<>();
-            String uuid = IdGenerate.nextId();
             attrLinks.forEach(x -> {
                 x.setId(null);
                 x.setRulesId(convertedAgreementUndwrtRules.getId());
-                PtlAgreementUndwrtRulesAttrLinkHistory costsAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory();
-                BeanUtils.copyProperties(x, costsAttrLinkHistory);
-                //设置承包规则费用因子历史记录
-                costsAttrLinkHistory.setBatch(uuid);
-                costsAttrLinkHistory.setId(null);
-                costsAttrLinkHistory.setOperatorType("add");
-                costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
-                costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                PtlAgreementUndwrtRulesAttrLinkHistory costsAttrLinkHistory = new PtlAgreementUndwrtRulesAttrLinkHistory(x, OperatorType.ADD, IdGenerate.nextId(), BaseController.getUserId());
                 undwrtRulesAttrLinkHistories.add(costsAttrLinkHistory);
             });
             ptlAgreementUndwrtRulesAttrLinkHistoryService.saveBatch(undwrtRulesAttrLinkHistories);
@@ -477,9 +457,51 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
         }
         return true;
     }
+
     private AgreementUndwrtRules convertToAgreementUndwrtRules(PtlAgreementUndwrtRulesNew rule) {
         AgreementUndwrtRules agreementUndwrtRules = new AgreementUndwrtRules();
-        BeanUtils.copyProperties(rule, agreementUndwrtRules,"ids");
+        BeanUtils.copyProperties(rule, agreementUndwrtRules, "ids");
         return agreementUndwrtRules;
     }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void copyUndwrtRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews, String agreementId) {
+        if (ptlAgreementUndwrtRulesNews.isEmpty()) {
+            return;
+        }
+        List<String> list = new ArrayList<>();
+        String batch = IdGenerate.nextId();
+
+        // 协议费用与规则属性
+        ptlAgreementUndwrtRulesNews.forEach(x -> {
+            list.add(x.getId());
+            x.setSaveBeforeId(x.getId());
+            x.setAgreementId(agreementId);
+            x.setId(null);
+        });
+        saveBatch(ptlAgreementUndwrtRulesNews);
+
+        //  协议费用与规则属性历史
+        List<PtlAgreementUndwrtRulesNewHistory> ptlAgreementUndwrtRulesNewHistories = ptlAgreementUndwrtRulesNews.stream()
+                .map(x-> new PtlAgreementUndwrtRulesNewHistory(x, OperatorType.ADD, batch, BaseController.getUserId()) )
+                .collect(Collectors.toList());
+        ptlAgreementUndwrtRulesNewHistoryService.saveBatch(ptlAgreementUndwrtRulesNewHistories);
+
+        Map<String, String> idMapping = ptlAgreementUndwrtRulesNews.stream().collect(Collectors.toMap(PtlAgreementUndwrtRulesNew::getSaveBeforeId, PtlAgreementUndwrtRulesNew::getId));
+        // 规则保存
+        List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinkList = ptlAgreementUndwrtRulesAttrLinkService.getByRulesIdList(list);
+        ptlAgreementUndwrtRulesAttrLinkList.forEach(x -> {
+            x.setRulesId(idMapping.get(x.getRulesId()));
+            x.setId(null);
+        });
+        ptlAgreementUndwrtRulesAttrLinkService.saveBatch(ptlAgreementUndwrtRulesAttrLinkList);
+
+        // 规则历史记录保存
+        List<PtlAgreementUndwrtRulesAttrLinkHistory> ptlAgreementUndwrtRulesAttrLinkHistories = ptlAgreementUndwrtRulesAttrLinkList.stream()
+                .map(x->new PtlAgreementUndwrtRulesAttrLinkHistory(x, OperatorType.ADD, batch, BaseController.getUserId()))
+                .collect(Collectors.toList());
+        ptlAgreementUndwrtRulesAttrLinkHistoryService.saveBatch(ptlAgreementUndwrtRulesAttrLinkHistories);
+    }
+
 }

Деякі файли не було показано, через те що забагато файлів було змінено