Pārlūkot izejas kodu

Merge branch 'test' into test-dismantle

# Conflicts:
#	src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java
#	src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceImpl.java
#	src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
#	src/main/java/com/ydtech/modules/order/aop/aspect/AuditVerificationAspect.java
#	src/main/java/com/ydtech/modules/order/controller/YongChengOrderApiController.java
#	src/main/java/com/ydtech/modules/order/entity/InsOrders.java
#	src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java
#	src/main/java/com/ydtech/modules/order/service/InsOrdersService.java
#	src/main/java/com/ydtech/modules/order/service/impl/HuaTaiOrderApiServiceImpl.java
#	src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
#	src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
#	src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java
#	src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java
#	src/main/resources/template/finance/accountsReceivable.xlsx
#	src/main/resources/template/finance/settlement.xlsx
785834757 2 gadi atpakaļ
vecāks
revīzija
896f2cc36c
100 mainītis faili ar 5153 papildinājumiem un 697 dzēšanām
  1. 54 0
      sql/Online.sql
  2. 13 13
      src/main/java/com/ydtech/aop/GlobalExceptionHandler.java
  3. 5 0
      src/main/java/com/ydtech/components/TokenInterceptor.java
  4. 27 0
      src/main/java/com/ydtech/constants/enums/dict/ins/InsFeeAuditDistributionStatusEnum.java
  5. 8 0
      src/main/java/com/ydtech/constants/enums/dict/insurance/VehicleType.java
  6. 37 0
      src/main/java/com/ydtech/constants/enums/dict/ser/AnnualAuditOrderEnum.java
  7. 26 0
      src/main/java/com/ydtech/constants/sys/SysDeptAccountStatus.java
  8. 24 0
      src/main/java/com/ydtech/modules/admin/constants/MoneyAttrConstants.java
  9. 23 0
      src/main/java/com/ydtech/modules/admin/constants/WithdrawTypeConstants.java
  10. 1 2
      src/main/java/com/ydtech/modules/admin/controller/SysAmountAuditingController.java
  11. 28 5
      src/main/java/com/ydtech/modules/admin/controller/SysDeptAccountController.java
  12. 34 0
      src/main/java/com/ydtech/modules/admin/controller/SysDeptAccountHistoryController.java
  13. 36 0
      src/main/java/com/ydtech/modules/admin/controller/SysDeptAccountWithdrawController.java
  14. 5 1
      src/main/java/com/ydtech/modules/admin/controller/SysDeptController.java
  15. 71 11
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  16. 117 0
      src/main/java/com/ydtech/modules/admin/controller/SysUserLinkPtlAgreementController.java
  17. 4 0
      src/main/java/com/ydtech/modules/admin/dao/SysAmountAuditingMapper.java
  18. 0 10
      src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountDao.java
  19. 14 0
      src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountHistoryMapper.java
  20. 19 0
      src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountMapper.java
  21. 15 0
      src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountWithdrawMapper.java
  22. 43 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserLinkPtlAgreementMapper.java
  23. 78 28
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  24. 55 0
      src/main/java/com/ydtech/modules/admin/model/QuUserNum.java
  25. 23 19
      src/main/java/com/ydtech/modules/admin/model/SysDept.java
  26. 10 12
      src/main/java/com/ydtech/modules/admin/model/SysDeptAccount.java
  27. 61 0
      src/main/java/com/ydtech/modules/admin/model/SysDeptAccountHistory.java
  28. 51 0
      src/main/java/com/ydtech/modules/admin/model/SysDeptAccountWithdraw.java
  29. 13 0
      src/main/java/com/ydtech/modules/admin/model/SysUser.java
  30. 47 0
      src/main/java/com/ydtech/modules/admin/model/dto/QuUserNumDto.java
  31. 30 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysDeptAccountDto.java
  32. 68 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysDeptAccountHistoryDto.java
  33. 28 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysUserLinkPtlAgreementDto.java
  34. 88 0
      src/main/java/com/ydtech/modules/admin/model/po/SysUserLinkPtlAgreement.java
  35. 4 2
      src/main/java/com/ydtech/modules/admin/model/vo/SysAmountAuditingVo.java
  36. 36 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysDeptAccountByUserVo.java
  37. 52 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysDeptAccountWithdrawVo.java
  38. 2 1
      src/main/java/com/ydtech/modules/admin/model/vo/SysUserBaseVO.java
  39. 31 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysUserLinkPtlAgreementAddVo.java
  40. 32 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysUserLinkPtlAgreementVo.java
  41. 28 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysUserVOExt.java
  42. 2 1
      src/main/java/com/ydtech/modules/admin/service/SysAmountAuditingService.java
  43. 17 0
      src/main/java/com/ydtech/modules/admin/service/SysDeptAccountHistoryService.java
  44. 13 5
      src/main/java/com/ydtech/modules/admin/service/SysDeptAccountService.java
  45. 13 0
      src/main/java/com/ydtech/modules/admin/service/SysDeptAccountWithdrawService.java
  46. 9 0
      src/main/java/com/ydtech/modules/admin/service/SysDeptService.java
  47. 59 0
      src/main/java/com/ydtech/modules/admin/service/SysUserLinkPtlAgreementService.java
  48. 22 4
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  49. 39 6
      src/main/java/com/ydtech/modules/admin/service/impl/SysAmountAuditingServiceImpl.java
  50. 31 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysDeptAccountHistoryServiceImpl.java
  51. 86 50
      src/main/java/com/ydtech/modules/admin/service/impl/SysDeptAccountServiceImpl.java
  52. 78 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysDeptAccountWithdrawServiceImpl.java
  53. 61 10
      src/main/java/com/ydtech/modules/admin/service/impl/SysDeptServiceImpl.java
  54. 22 17
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserAccountServiceImpl.java
  55. 122 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserLinkPtlAgreementServiceImpl.java
  56. 319 6
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  57. 17 0
      src/main/java/com/ydtech/modules/esm/dao/InsOrderSetUserHisMapper.java
  58. 76 0
      src/main/java/com/ydtech/modules/esm/model/po/InsOrderSetUserHis.java
  59. 54 0
      src/main/java/com/ydtech/modules/esm/model/vo/InsOrderSetUserHisVo.java
  60. 1 0
      src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java
  61. 14 0
      src/main/java/com/ydtech/modules/esm/service/InsOrderSetUserHisService.java
  62. 2 1
      src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java
  63. 37 0
      src/main/java/com/ydtech/modules/esm/service/impl/InsOrderSetUserHisServiceImpl.java
  64. 55 0
      src/main/java/com/ydtech/modules/fee/dto/vo/DeptManagerFee.java
  65. 31 0
      src/main/java/com/ydtech/modules/fee/dto/vo/EntranceFee.java
  66. 27 0
      src/main/java/com/ydtech/modules/fee/dto/vo/ExportFee.java
  67. 46 0
      src/main/java/com/ydtech/modules/fee/dto/vo/RetailStoreFee.java
  68. 55 19
      src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java
  69. 60 0
      src/main/java/com/ydtech/modules/fee/service/CostsCalcService.java
  70. 1 1
      src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeService.java
  71. 178 0
      src/main/java/com/ydtech/modules/fee/service/impl/CostsCalServiceImpl.java
  72. 536 217
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceImpl.java
  73. 188 131
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  74. 6 1
      src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java
  75. 35 4
      src/main/java/com/ydtech/modules/fnc/controller/InsPlyIncomeController.java
  76. 42 0
      src/main/java/com/ydtech/modules/fnc/controller/SettlementDocumentaryFeesController.java
  77. 40 0
      src/main/java/com/ydtech/modules/fnc/controller/SettlementDocumentaryLogController.java
  78. 11 0
      src/main/java/com/ydtech/modules/fnc/dao/InsPlyIncomeMapper.java
  79. 22 0
      src/main/java/com/ydtech/modules/fnc/dao/SettlementDocumentaryFeesMapper.java
  80. 12 0
      src/main/java/com/ydtech/modules/fnc/dao/SettlementDocumentaryLogMapper.java
  81. 62 1
      src/main/java/com/ydtech/modules/fnc/entity/InsPlyIncome.java
  82. 66 0
      src/main/java/com/ydtech/modules/fnc/entity/SettlementDocumentaryFeesEntity.java
  83. 45 0
      src/main/java/com/ydtech/modules/fnc/entity/SettlementDocumentaryLogEntity.java
  84. 9 1
      src/main/java/com/ydtech/modules/fnc/service/InsFeeAuditService.java
  85. 15 0
      src/main/java/com/ydtech/modules/fnc/service/InsPlyIncomeService.java
  86. 20 0
      src/main/java/com/ydtech/modules/fnc/service/SettlementDocumentaryFeesService.java
  87. 16 0
      src/main/java/com/ydtech/modules/fnc/service/SettlementDocumentaryLogService.java
  88. 526 102
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  89. 236 0
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java
  90. 21 4
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlySettleServiceImpl.java
  91. 122 0
      src/main/java/com/ydtech/modules/fnc/service/impl/SettlementDocumentaryFeesServiceImpl.java
  92. 25 0
      src/main/java/com/ydtech/modules/fnc/service/impl/SettlementDocumentaryLogImpl.java
  93. 57 1
      src/main/java/com/ydtech/modules/fnc/vo/InsPlyIncomeVo.java
  94. 58 0
      src/main/java/com/ydtech/modules/fnc/vo/SettlementDocumentaryFeesVo.java
  95. 46 0
      src/main/java/com/ydtech/modules/fnc/vo/SettlementDocumentaryLogVo.java
  96. 17 4
      src/main/java/com/ydtech/modules/ins/model/CardUserInfo.java
  97. 4 1
      src/main/java/com/ydtech/modules/ins/model/InsTaskHistory.java
  98. 12 3
      src/main/java/com/ydtech/modules/ins/model/guoren/CarPriceReq.java
  99. 3 2
      src/main/java/com/ydtech/modules/ins/model/guoren/InsuranceSlipReq.java
  100. 13 1
      src/main/java/com/ydtech/modules/ins/model/guoren/NonAutoInsOrderReq.java

+ 54 - 0
sql/Online.sql

@@ -0,0 +1,54 @@
+--  2024-04-15    武鸿鹏  结算需求
+ALTER TABLE `ins_ply_income`  ADD COLUMN `voucher_number` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT '凭证号' AFTER `create_time`;
+ALTER TABLE `ins_ply_income`  ADD COLUMN `contract_id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT '合同号' AFTER `voucher_number`;
+ALTER TABLE `ins_ply_income`  ADD COLUMN `contract_file_id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL DEFAULT NULL COMMENT '合同附件id' AFTER `contract_id`;
+ALTER TABLE `ins_ply_income`  ADD COLUMN `handling_fees_status` varchar(5) NULL COMMENT '手续费结算状态  1 为已结算' AFTER `contract_file_id`;
+ALTER TABLE `ins_ply_income` ADD COLUMN `documentary_fees_status` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '跟单费结算状态  1 为已结算' AFTER `handling_fees_status`;
+ALTER TABLE `ins_ply_income` ADD COLUMN `is_not_car` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '跟单费结算状态  1 为已结算' AFTER `documentary_fees_status`;
+ALTER TABLE `ins_ply_income` ADD COLUMN `no_policyno` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '非车保单号' AFTER `is_not_car`;
+ALTER TABLE `ins_ply_income` ADD COLUMN `sy_policyno` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '商业保单号' AFTER `no_policyno`;
+
+
+DROP TABLE IF EXISTS `settlement_documentary_fees`;
+CREATE TABLE `settlement_documentary_fees`  (
+                                                `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'id',
+                                                `total_orders` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '结算单数',
+                                                `time_frame` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '时间范围',
+                                                `total_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '结算总金额',
+                                                `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+                                                `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间',
+                                                `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间',
+                                                `settlement_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '结算金额',
+                                                `unsettled_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '未结算金额',
+                                                PRIMARY KEY (`id`) USING BTREE,
+                                                UNIQUE INDEX `id`(`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '跟单费结算' ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+
+DROP TABLE IF EXISTS `settlement_documentary_log`;
+CREATE TABLE `settlement_documentary_log`  (
+                                               `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'id',
+                                               `amount_type` varchar(5) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '金额类型 1 手续费结算 2 跟单费结算',
+                                               `amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '金额',
+                                               `settlement_documentary_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '关联跟单费id',
+                                               `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+                                               `handing_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '手续费结算金额',
+                                               PRIMARY KEY (`id`) USING BTREE,
+                                               UNIQUE INDEX `id`(`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '跟单费结算日志' ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;
+
+--     菜单sql   结算菜单   提现菜单
+INSERT INTO `sys_menu`(`id`, `name`, `parent_id`, `url`, `perms`, `type`, `icon`, `order_num`, `create_by`, `create_time`, `last_update_by`, `last_update_time`, `del_flag`) VALUES (645, '非跟单待提现', '201', '/financialManagement/withdrawalManagement/nonDocumentaryPending', NULL, 1, NULL, 0, NULL, NULL, NULL, NULL, 0);
+INSERT INTO `sys_menu`(`id`, `name`, `parent_id`, `url`, `perms`, `type`, `icon`, `order_num`, `create_by`, `create_time`, `last_update_by`, `last_update_time`, `del_flag`) VALUES (646, '推广待提现', '201', '/financialManagement/withdrawalManagement/generalizationPending', NULL, 1, NULL, 0, NULL, NULL, NULL, NULL, 0);
+INSERT INTO `sys_menu`(`id`, `name`, `parent_id`, `url`, `perms`, `type`, `icon`, `order_num`, `create_by`, `create_time`, `last_update_by`, `last_update_time`, `del_flag`) VALUES (647, '手续费已提现', '201', '/financialManagement/withdrawalManagement/withdrawalProceduresEnd', NULL, 1, NULL, 0, NULL, NULL, NULL, NULL, 0);
+INSERT INTO `sys_menu`(`id`, `name`, `parent_id`, `url`, `perms`, `type`, `icon`, `order_num`, `create_by`, `create_time`, `last_update_by`, `last_update_time`, `del_flag`) VALUES (648, '非跟单已提现', '201', '/financialManagement/withdrawalManagement/nonDocumentaryEnd', NULL, 1, NULL, 0, NULL, NULL, NULL, NULL, 0);
+INSERT INTO `sys_menu`(`id`, `name`, `parent_id`, `url`, `perms`, `type`, `icon`, `order_num`, `create_by`, `create_time`, `last_update_by`, `last_update_time`, `del_flag`) VALUES (649, '推广已提现', '201', '/financialManagement/withdrawalManagement/generalizationEnd', NULL, 1, NULL, 0, NULL, NULL, NULL, NULL, 0);
+INSERT INTO `sys_menu`(`id`, `name`, `parent_id`, `url`, `perms`, `type`, `icon`, `order_num`, `create_by`, `create_time`, `last_update_by`, `last_update_time`, `del_flag`) VALUES (643, '手续费待提现', '201', '/financialManagement/withdrawalManagement/withdrawalProceduresPending', NULL, 1, NULL, 0, NULL, NULL, NULL, NULL, 0);
+
+--  inv_source表 新增修改人名字 修改人id  前端还没联调  正式库先不加字段
+ALTER TABLE `inv_source` ADD COLUMN `update_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '修改人名字' AFTER `revenue_userid`;
+ALTER TABLE `inv_source` ADD COLUMN `update_userid` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '修改人id' AFTER `update_name`;

+ 13 - 13
src/main/java/com/ydtech/aop/GlobalExceptionHandler.java

@@ -36,19 +36,19 @@ public class GlobalExceptionHandler {
     @ResponseBody
     public HttpResult exceptionGet(Exception e) {
         LOGGER.error("【系统异常】{}", e);
-        if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
-            StackTraceElement element = e.getStackTrace()[0];
-            ErrorInfo errorInfo = new ErrorInfo(
-                    element.getClassName(),
-                    element.getFileName(),
-                    element.getMethodName(),
-                    String.valueOf(element.getLineNumber())
-            );
-
-            return HttpResult.error(-9999, errorInfo.toString());
-        }
-
-        return HttpResult.error(-1, "发生错误,请与管理员联系");
+//        if (e.getStackTrace() != null && e.getStackTrace().length > 0) {
+//            StackTraceElement element = e.getStackTrace()[0];
+//            ErrorInfo errorInfo = new ErrorInfo(
+//                    element.getClassName(),
+//                    element.getFileName(),
+//                    element.getMethodName(),
+//                    String.valueOf(element.getLineNumber())
+//            );
+//
+//            return HttpResult.error(-9999, errorInfo.toString());
+//        }
+
+        return HttpResult.error(-9999, "程序异常,请联系管理员");
     }
 
     @ExceptionHandler(value = DescribeException.class)

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

@@ -72,6 +72,11 @@ public class TokenInterceptor {
         // 保险公司列表
         notMatchList.add("/esmInsCompany/gainTopList");
 
+        // 渤海回调地址
+        notMatchList.add("/order/boHaiApi/underwritingCallback");
+        notMatchList.add("/order/boHaiApi/auditCallback");
+        notMatchList.add("/order/boHaiApi/policyResultCallback");
+
         return new SaInterceptor(handler -> {
             // 指定一条 match 规则
             SaRouter

+ 27 - 0
src/main/java/com/ydtech/constants/enums/dict/ins/InsFeeAuditDistributionStatusEnum.java

@@ -0,0 +1,27 @@
+package com.ydtech.constants.enums.dict.ins;
+
+import com.ydtech.aop.request.DictEnum;
+import com.ydtech.constants.enums.dict.IBaseEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+@DictEnum(key = "InsFeeAuditDistributionStatus", desc = "费用订单表分销等级")
+public enum InsFeeAuditDistributionStatusEnum implements IBaseEnum {
+
+    DS_1("1","一级分销",0,1),
+
+    DS_2("2","二级分销",0,1),
+
+    DS_3("3","三级分销",0,1);
+
+    // 编号
+    private final String code;
+    //说明
+    private final String desc;
+    // 排序
+    private final Integer sort;
+    // 状态  0 启用  1 不启用
+    private final Integer status;
+}

+ 8 - 0
src/main/java/com/ydtech/constants/enums/dict/insurance/VehicleType.java

@@ -29,5 +29,13 @@ public enum VehicleType implements IBaseEnum {
     // 状态  0 启用  1 不启用
     private final Integer status;
 
+    public static String getByCode(String code) {
+        for (VehicleType vehicleType : values()) {
+            if (vehicleType.getCode().equals(code)) {
+                return vehicleType.getDesc();
+            }
+        }
+        return null;
+    }
 
 }

+ 37 - 0
src/main/java/com/ydtech/constants/enums/dict/ser/AnnualAuditOrderEnum.java

@@ -0,0 +1,37 @@
+package com.ydtech.constants.enums.dict.ser;
+
+import com.ydtech.aop.request.DictEnum;
+import com.ydtech.constants.enums.dict.IBaseEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+@DictEnum(key = "annualAuditOrderStatus", desc = "年检代办订单状态")
+public enum AnnualAuditOrderEnum implements IBaseEnum {
+
+    UNPAID("1","待支付",0,1),
+
+    AWAIT_ANNUAL("2","待年检",0,1),
+
+    FINISHED("3","订单完成",0,1);
+
+    // 编号
+    private final String code;
+    //说明
+    private final String desc;
+    // 排序
+    private final Integer sort;
+    // 状态  0 启用  1 不启用
+    private final Integer status;
+
+
+    public static AnnualAuditOrderEnum getAnnualAuditOrderEnum(String code) {
+        for (AnnualAuditOrderEnum annualAuditOrderEnum : AnnualAuditOrderEnum.values()) {
+            if (annualAuditOrderEnum.getCode().equals(code)) {
+                return annualAuditOrderEnum;
+            }
+        }
+        return null;
+    }
+}

+ 26 - 0
src/main/java/com/ydtech/constants/sys/SysDeptAccountStatus.java

@@ -0,0 +1,26 @@
+package com.ydtech.constants.sys;
+
+import com.ydtech.aop.request.DictEnum;
+import com.ydtech.constants.enums.dict.IBaseEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+@DictEnum(key = "sysDeptAccountStatus", desc = "机构账户提现审核状态")
+public enum SysDeptAccountStatus implements IBaseEnum {
+    WAIT("0","待审核",0,1),
+
+    PASS("1","审核通过",0,1),
+
+    REJECT("2","审核驳回",0,1);
+
+    // 编号
+    private final String code;
+    //说明
+    private final String desc;
+    // 排序
+    private final Integer sort;
+    // 状态  0 启用  1 不启用
+    private final Integer status;
+}

+ 24 - 0
src/main/java/com/ydtech/modules/admin/constants/MoneyAttrConstants.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.admin.constants;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @version
+ * @description: 金钱属性
+ * @author: tz
+ * @date: 2024-4-11 17:36:15
+ **/
+@Getter
+@AllArgsConstructor
+public enum MoneyAttrConstants {
+
+    M_1(1, "手续费"),
+    M_2(2,"跟单费"),
+    M_3(3,"推广费");
+
+    private final Integer code;
+
+    private final String desc;
+}

+ 23 - 0
src/main/java/com/ydtech/modules/admin/constants/WithdrawTypeConstants.java

@@ -0,0 +1,23 @@
+package com.ydtech.modules.admin.constants;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @version
+ * @description: 提现类型
+ * @author: tz
+ * @date: 2024-4-11 17:36:15
+ **/
+@Getter
+@AllArgsConstructor
+public enum WithdrawTypeConstants {
+
+    WT_1("1", "提现"),
+    WT_2("2","收入");
+
+    private final String code;
+
+    private final String desc;
+}

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

@@ -26,8 +26,7 @@ public class SysAmountAuditingController extends BaseController {
     @PostMapping("/queryPage")
     @ApiOperation(value = "提现审核分页")
     public HttpResult<BasePageResult<SysAmountAuditingEntity>> queryPageOrder(@RequestBody @Valid SysAmountAuditingVo sysAmountAuditingVo) {
-        BasePageResult<SysAmountAuditingEntity> result = sysAmountAuditingService.queryByVo(sysAmountAuditingVo);
-        return HttpResult.ok("success", result);
+        return  sysAmountAuditingService.queryByVo(sysAmountAuditingVo);
     }
 
     @PutMapping("AmountReview")

+ 28 - 5
src/main/java/com/ydtech/modules/admin/controller/SysDeptAccountController.java

@@ -2,10 +2,10 @@ package com.ydtech.modules.admin.controller;
 
 
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.modules.admin.model.SysDeptAccountEntity;
-import com.ydtech.modules.admin.model.po.SysUserBankCard;
+import com.ydtech.modules.admin.dao.SysDeptAccountMapper;
+import com.ydtech.modules.admin.model.SysDeptAccount;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountDto;
 import com.ydtech.modules.admin.model.vo.SysDeptAccountVO;
-import com.ydtech.modules.admin.model.vo.SysUserBankCardVO;
 import com.ydtech.modules.admin.service.SysDeptAccountService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.order.entity.BasePageResult;
@@ -25,13 +25,36 @@ public class SysDeptAccountController extends BaseController {
     @Autowired
     private SysDeptAccountService sysDeptAccountService;
 
+    @Autowired
+    private SysDeptAccountMapper sysDeptAccountMapper;
+
     @PostMapping("/queryPage")
     @ApiOperation(value = "机构账户表")
-    public HttpResult<BasePageResult<SysDeptAccountEntity>> queryPageOrder(@RequestBody @Valid SysDeptAccountVO sysDeptAccountVO ) {
-        BasePageResult<SysDeptAccountEntity> result = sysDeptAccountService.queryByVo(sysDeptAccountVO);
+    public HttpResult<BasePageResult<SysDeptAccount>> queryPageOrder(@RequestBody @Valid SysDeptAccountVO sysDeptAccountVO ) {
+        BasePageResult<SysDeptAccount> result = sysDeptAccountService.queryByVo(sysDeptAccountVO);
         return HttpResult.ok("success", result);
     }
 
+    @ApiOperation("机构账户表查询")
+    @PostMapping("/sysDeptAccountPage")
+    public HttpResult sysDeptAccountPage(@RequestBody SysDeptAccountDto sysDeptAccountDto){
+        return HttpResult.ok("", sysDeptAccountService.getDept(sysDeptAccountDto));
+    }
+
+    @ApiOperation("根据部门表提现人员id查询相关机构账户")
+    @PostMapping("/queryByUser")
+    public HttpResult queryByUser() {
+        return HttpResult.ok("", sysDeptAccountService.getDeptAccountByUser());
+    }
+
+    @ApiOperation("将机构账户金额提现")
+    @PostMapping("/withdrawDeptAccount")
+    public HttpResult withdrawDeptAccount(@RequestBody SysDeptAccount sysDeptAccount) {
+        return HttpResult.ok("", sysDeptAccountService.withdrawDeptAccount(sysDeptAccount));
+    }
+
+
+
 
     @PostMapping("/insert")
     @ApiOperation("提交")

+ 34 - 0
src/main/java/com/ydtech/modules/admin/controller/SysDeptAccountHistoryController.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.model.SysDeptAccountHistory;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountHistoryDto;
+import com.ydtech.modules.admin.service.SysDeptAccountHistoryService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.ser.model.SerAnnualAuditOrder;
+import com.ydtech.modules.ser.model.vo.SerAnnualAuditOrderQueryVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+
+@Api(tags = "机构账户历史明细表")
+@RequestMapping("/sysDeptAccountHistory")
+@RestController
+public class SysDeptAccountHistoryController extends BaseController {
+    @Autowired
+    private SysDeptAccountHistoryService sysDeptAccountHistoryService;
+
+    @PostMapping("/queryPage")
+    @ApiOperation(value = "机构账户表日志记录分页")
+    public HttpResult getSysDeptAccountHistory(@RequestBody SysDeptAccountHistoryDto sysDeptAccountHistoryDto){
+        return HttpResult.ok("", sysDeptAccountHistoryService.selectList(sysDeptAccountHistoryDto));
+    }
+}

+ 36 - 0
src/main/java/com/ydtech/modules/admin/controller/SysDeptAccountWithdrawController.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysDeptAccountWithdraw;
+import com.ydtech.modules.admin.model.vo.SysDeptAccountWithdrawVo;
+import com.ydtech.modules.admin.service.SysDeptAccountWithdrawService;
+import com.ydtech.modules.base.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.ParseException;
+
+@Api(tags = "机构账户审核")
+@RequestMapping("/sysDeptAccountWithdraw")
+@RestController
+public class SysDeptAccountWithdrawController extends BaseController {
+    @Autowired
+    private SysDeptAccountWithdrawService sysDeptAccountWithdrawService;
+
+    @PostMapping("/queryStatus")
+    @ApiOperation(value = "机构账户审核状态查询")
+    public HttpResult queryStatus(@RequestBody SysDeptAccountWithdrawVo sysDeptAccountWithdrawVo) throws ParseException {
+        return HttpResult.ok("",sysDeptAccountWithdrawService.getList(sysDeptAccountWithdrawVo));
+    }
+
+    @PostMapping("/audit")
+    @ApiOperation(value = "机构账户审核")
+    public HttpResult audit(@RequestBody SysDeptAccountWithdraw sysDeptAccountWithdraw){
+        return HttpResult.ok(sysDeptAccountWithdrawService.updateByStatus(sysDeptAccountWithdraw));
+    }
+}

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

@@ -67,7 +67,11 @@ public class SysDeptController extends BaseController {
                 return HttpResult.error("机构已被设置来源无法修改");
             }
         }
-        return HttpResult.ok(sysDeptService.updateById(record));
+        if (record.getComlevel() == null && record.getWithdrawUser() != null) {
+            return HttpResult.error("机构级别为空,无法设置提现人员");
+        }
+        sysDeptService.updateDept(record);
+        return HttpResult.ok();
     }
 
     //    @PreAuthorize("hasAuthority('sys:dept:delete')")

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

@@ -15,6 +15,7 @@ import com.ydtech.modules.admin.constants.RoleConstants;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.AgentUserDto;
 import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
+import com.ydtech.modules.admin.model.dto.QuUserNumDto;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
@@ -31,7 +32,6 @@ import com.ydtech.modules.order.service.InsUploadFilesService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.security.utils.PasswordUtils;
 import com.ydtech.utils.StringUtils;
-import com.ydtech.utils.excel.ExcelEasypoiUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -42,13 +42,10 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
-import java.io.IOException;
 import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 import static com.ydtech.constants.RedisConstant.PHONE_VERIFICATION_CODE_KEY;
 
@@ -277,6 +274,22 @@ public class SysUserController extends BaseController {
         return HttpResult.ok(sysUserService.findByReferrerId(deptId));
     }
 
+    /**
+     * 根据部门id查询后线人员的所有人信息
+     */
+    @ApiOperation(value = "获取后线人员信息")
+    @GetMapping("/findBackListByDeptId")
+    public HttpResult findBackListByDeptId(String deptId) {
+        return HttpResult.ok(sysUserService.findBackListByDeptId(deptId));
+    }
+
+    /**
+     * 根据部门id查询该部门的所有人信息
+     */
+    @PostMapping("/findListByDeptId")
+    public HttpResult findListByDeptId(@RequestBody SysUser sysUser) {
+        return HttpResult.ok(sysUserService.findListByDeptId(sysUser));
+    }
 
 
     /**
@@ -347,27 +360,37 @@ public class SysUserController extends BaseController {
         return HttpResult.ok(sysUserService.gainUserPage(pageDto));
     }
 
-    @ApiOperation(value = "分为后线、渠道和个代的用户查询分页")
+    @ApiOperation(value = "渠道和个代的用户查询分页")
     @PostMapping(value = "/findUserList")
     public HttpResult findUserList(@RequestBody PageDto<SysUserDto> pageDto) {
-        if (pageDto.getDto().getDeptId() == null){
+        if (pageDto.getDto().getDeptId() == null) {
             BaseController baseController = new BaseController();
             pageDto.getDto().setDeptId(baseController.getDeptId());
         }
         return HttpResult.ok(sysUserService.findUserList(pageDto));
     }
 
+    @ApiOperation(value = "后线用户查询分页")
+    @PostMapping(value = "/findBackUserList")
+    public HttpResult findBackUserList(@RequestBody PageDto<SysUserDto> pageDto) {
+        if (pageDto.getDto().getDeptId() == null) {
+            BaseController baseController = new BaseController();
+            pageDto.getDto().setDeptId(baseController.getDeptId());
+        }
+        return HttpResult.ok(sysUserService.findBackUserList(pageDto));
+    }
+
     @ApiOperation(value = "渠道数据统计")
     @PostMapping(value = "/quTeamNum")
     public HttpResult quTeamNum(@RequestBody QuTeamNumDto quTeamNumDto) {
 
-        return HttpResult.ok("",sysUserService.quTeamNum(quTeamNumDto));
+        return HttpResult.ok("", sysUserService.quTeamNum(quTeamNumDto));
     }
 
     @ApiOperation(value = "渠道数据统计详情")
     @PostMapping(value = "/quTeamNumDetail")
     public HttpResult quTeamNumDetail(@RequestBody QuTeamNumDto quTeamNumDto) {
-        return HttpResult.ok("",sysUserService.getQuTeamByCompany(quTeamNumDto));
+        return HttpResult.ok("", sysUserService.getQuTeamByCompany(quTeamNumDto));
     }
 
 
@@ -460,7 +483,7 @@ public class SysUserController extends BaseController {
         if (StringUtils.isNotEmpty(sysUser.getDeptId())) {
             SysDept sysDept = sysDeptService.getById(sysUser.getDeptId());
             sysUser.setDeptName(sysDept.getName());
-            sysUser.setIsHasAddUser(sysDept.getManagementSource()!=null?1:0);
+            sysUser.setIsHasAddUser(sysDept.getManagementSource() != null ? 1 : 0);
             sysUser.setManagementSource(sysDept.getManagementSource());
         }
 
@@ -482,7 +505,6 @@ public class SysUserController extends BaseController {
     public HttpResult getAllUsers(@RequestParam(required = false) String userId) {
         List<SysUser> userList = sysUserService.findAllAgentRoleUser(userId, "20");
         return HttpResult.ok(userList);
-
     }
 
     @ApiOperation(value = "(new)是否绑定微信")
@@ -623,7 +645,7 @@ public class SysUserController extends BaseController {
                 if (deptLevel != 6) {
                     throw new SystemException("团队长、代理人、出单员只能归属团队中");
                 }
-            }else if (RoleConstants.R18.getCode().equals(sysUser.getRoleId())) { // 42 门店长
+            } else if (RoleConstants.R18.getCode().equals(sysUser.getRoleId())) { // 42 门店长
                 if (deptLevel != 5) {
                     throw new SystemException("机构管理员只能归属机构中");
                 }
@@ -682,4 +704,42 @@ public class SysUserController extends BaseController {
     public HttpResult findUserList(String deptId) {
         return HttpResult.ok(sysUserService.findUserList(deptId));
     }
+
+
+    @ApiOperation(value = "获取树结构")
+    @GetMapping(value = "/findTree")
+    public HttpResult<List<SysUser>> findTree() {
+        List<SysUser> list = sysUserService.findTree();
+        return HttpResult.ok(list);
+    }
+
+    @ApiOperation(value = "区域数据管理")
+    @PostMapping(value = "/quUserNum")
+    public HttpResult quUserNum(@RequestBody QuUserNumDto quUserNumDto) {
+        return HttpResult.ok("", sysUserService.quUserNum(quUserNumDto));
+    }
+
+    @ApiOperation(value = "区域数据管理详情")
+    @PostMapping(value = "/quUserNumDetail")
+    public HttpResult quUserNumDetail(@RequestBody QuUserNumDto quUserNumDto) {
+        return HttpResult.ok("", sysUserService.getQuUserByCompany(quUserNumDto));
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 16:16
+     *  @Description:  获取待客录入可选业务员列表   通过工号、姓名、手机号、身份证号
+     */
+    @ApiOperation(value = "获取待客录入可选业务员列表   通过工号、姓名、手机号、身份证号")
+    @PostMapping(value = "/getAllUsersByHospitality")
+    public HttpResult getAllUsersByHospitality(@RequestBody SysUserVOExt sysUserVOExt) {
+        try{
+            List<SysUserBaseVO> userList = sysUserService.getAllUsersByHospitality(sysUserVOExt);
+            return HttpResult.ok(userList);
+        }catch (Exception e){
+            return HttpResult.error("查询失败"+e.getMessage());
+        }
+
+    }
 }

+ 117 - 0
src/main/java/com/ydtech/modules/admin/controller/SysUserLinkPtlAgreementController.java

@@ -0,0 +1,117 @@
+package com.ydtech.modules.admin.controller;
+
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
+import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
+import com.ydtech.modules.admin.model.vo.SysUserLinkPtlAgreementAddVo;
+import com.ydtech.modules.admin.model.vo.SysUserLinkPtlAgreementVo;
+import com.ydtech.modules.admin.service.SysUserLinkPtlAgreementService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+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 java.util.List;
+
+@Api(tags = "前线人员关联协议")
+@RequestMapping("/sysUserLinkPtlAgreement")
+@RestController
+public class SysUserLinkPtlAgreementController extends BaseController {
+
+
+    @Autowired
+    private SysUserLinkPtlAgreementService sysUserLinkPtlAgreementService;
+
+    @PostMapping("queryPage")
+    @ApiOperation(value = "后线人员关联协议分页")
+    public HttpResult<BasePageResult<SysUserLinkPtlAgreementDto>> queryPage(@RequestBody  SysUserLinkPtlAgreementVo sysUserLinkPtlAgreementVo) {
+
+        try{
+            BasePageResult<SysUserLinkPtlAgreementDto> result = sysUserLinkPtlAgreementService.queryPage(sysUserLinkPtlAgreementVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
+
+    @PostMapping("addOrUpdate")
+    @ApiOperation("前线人员关联协议添加修改")
+    public HttpResult<Object> addOrUpdate(@RequestBody SysUserLinkPtlAgreementAddVo sysUserLinkPtlAgreementAddVo) {
+        if(sysUserLinkPtlAgreementAddVo.getUserId()==null || "".equals(sysUserLinkPtlAgreementAddVo.getUserId())) {
+            return HttpResult.error("后线人员id不能为空");
+        }
+        if(sysUserLinkPtlAgreementAddVo.getPtlAgreementIds()==null || sysUserLinkPtlAgreementAddVo.getPtlAgreementIds().size()==0) {
+            return HttpResult.error("协议ids不能为空");
+        }
+        try{
+            sysUserLinkPtlAgreementService.addOrUpdate(sysUserLinkPtlAgreementAddVo,getUser());
+            return HttpResult.ok("操作成功");
+        }catch (Exception e){
+            return HttpResult.error("操作失败"+e.getMessage());
+        }
+
+    }
+
+    @PostMapping("delete")
+    @ApiOperation("后线人员关联协议删除")
+    @ApiImplicitParam(name = "ids", value = "关联协议ids数组", required = true)
+    public HttpResult<Object> delete(@RequestParam("ids")  List<Long> ids) {
+        if(ids==null || ids.size()==0){
+            return HttpResult.error("后线人员关联ids不能为空");
+        }
+        try{
+            sysUserLinkPtlAgreementService.deleteByIds(ids);
+            return HttpResult.ok("删除成功");
+        }catch (Exception e){
+            return HttpResult.error("删除失败"+e.getMessage());
+        }
+    }
+
+    @GetMapping("findUserList")
+    @ApiOperation("查询所有的后线人员列表")
+    public HttpResult<Object> findUserList() {
+        try{
+            List<SysUserBaseVO> list= sysUserLinkPtlAgreementService.findUserList();
+            return HttpResult.ok(list);
+        }catch (Exception e){
+            return HttpResult.error("操作失败"+e.getMessage());
+        }
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:54
+     *  @Description: 查询审核的所有协议
+     */
+    @GetMapping("findPtlAgreementList")
+    @ApiOperation("查询所有审核协议列表")
+    public HttpResult<Object> findPtlAgreementList() {
+        try{
+            List<PtlAgreement> list= sysUserLinkPtlAgreementService.findPtlAgreementList();
+            return HttpResult.ok(list);
+        }catch (Exception e){
+            return HttpResult.error("操作失败"+e.getMessage());
+        }
+    }
+
+    @GetMapping("/findPtlAgreementListByUserId/{userId}")
+    @ApiOperation(value = "后线人员关联协议列表")
+    @ApiImplicitParam(name = "userId", value = "后线人员id", required = true)
+    public HttpResult<List<SysUserLinkPtlAgreementDto>> findPtlAgreementListByUserId(@PathVariable("userId") String userId) {
+        if(userId==null || "".equals(userId)) {
+            return HttpResult.error("后线人员id不能为空");
+        }
+        try{
+            List<SysUserLinkPtlAgreementDto> result = sysUserLinkPtlAgreementService.findPtlAgreementListByUserId(userId);
+            return HttpResult.ok(result);
+        }catch (Exception e){
+            return HttpResult.error("查询失败"+e.getMessage());
+        }
+
+    }
+}

+ 4 - 0
src/main/java/com/ydtech/modules/admin/dao/SysAmountAuditingMapper.java

@@ -7,10 +7,14 @@ import com.ydtech.modules.admin.model.vo.SysAmountAuditingVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.HashMap;
+import java.util.List;
+
 @Mapper
 public interface SysAmountAuditingMapper extends BaseMapper<SysAmountAuditingEntity> {
     SysAmountAuditingEntity getByUserId(String userId);
 
     Page<SysAmountAuditingEntity> queryPageOrder(@Param("sysAmountAuditingVo") SysAmountAuditingVo sysAmountAuditingVo, Page<SysAmountAuditingEntity> page);
 
+    List<SysAmountAuditingEntity> queryPageOrderNew(HashMap<String, Object> params);
 }

+ 0 - 10
src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountDao.java

@@ -1,10 +0,0 @@
-package com.ydtech.modules.admin.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ydtech.modules.admin.model.SysDept;
-import com.ydtech.modules.admin.model.SysDeptAccountEntity;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface SysDeptAccountDao extends BaseMapper<SysDeptAccountEntity> {
-}

+ 14 - 0
src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountHistoryMapper.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.admin.model.SysDeptAccountHistory;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountHistoryDto;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+
+@Mapper
+public interface SysDeptAccountHistoryMapper extends BaseMapper<SysDeptAccountHistory> {
+    Page<SysDeptAccountHistoryDto> getDeptHistory(Page page,@Param("sysDeptAccountHistoryDto") SysDeptAccountHistoryDto sysDeptAccountHistoryDto);
+}

+ 19 - 0
src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.SysDeptAccount;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountDto;
+import com.ydtech.modules.admin.model.vo.SysDeptAccountByUserVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface SysDeptAccountMapper extends BaseMapper<SysDeptAccount> {
+    List<SysDeptAccountDto> getDept(@Param("sysDeptAccountDto") SysDeptAccountDto sysDeptAccountDto);
+
+
+    List<SysDeptAccountByUserVo> getDeptAccountByUser(String userId);
+
+}

+ 15 - 0
src/main/java/com/ydtech/modules/admin/dao/SysDeptAccountWithdrawMapper.java

@@ -0,0 +1,15 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.admin.model.SysDeptAccountWithdraw;
+import com.ydtech.modules.admin.model.vo.SysDeptAccountWithdrawVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+
+
+@Mapper
+public interface SysDeptAccountWithdrawMapper extends BaseMapper<SysDeptAccountWithdraw> {
+    Page<SysDeptAccountWithdraw> selectSysDeptAccountWithdraw(Page page,@Param("sysDeptAccountWithdrawVo") SysDeptAccountWithdrawVo sysDeptAccountWithdrawVo);
+}

+ 43 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserLinkPtlAgreementMapper.java

@@ -0,0 +1,43 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
+import com.ydtech.modules.admin.model.po.SysUserLinkPtlAgreement;
+import com.ydtech.modules.admin.model.vo.SysUserLinkPtlAgreementVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:47
+ *  @Description: 用户关联协议表Dao
+ */
+@Mapper
+public interface SysUserLinkPtlAgreementMapper extends BaseMapper<SysUserLinkPtlAgreement> {
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 15:32
+     *  @Description: 分页
+     */
+    Page<SysUserLinkPtlAgreementDto> queryPage(@Param("page") Page<SysUserLinkPtlAgreementDto> page, @Param("vo") SysUserLinkPtlAgreementVo sysUserLinkPtlAgreementVo);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:08
+     *  @Description: 通过用户id删除旧数据
+     */
+    void deleteByUserId(@Param("userId") String userId);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 9:32
+     *  @Description: 通过前线人员id查询关联的协议列表
+     */
+    List<SysUserLinkPtlAgreementDto> findPtlAgreementListByUserId(@Param("userId") String userId);
+}

+ 78 - 28
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -3,15 +3,15 @@ package com.ydtech.modules.admin.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ydtech.core.page.PageResult;
-import com.ydtech.modules.admin.model.QuOrders;
 import com.ydtech.modules.admin.model.QuTeamNum;
-import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.QuUserNum;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
+import com.ydtech.modules.admin.model.dto.QuUserNumDto;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
 import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
 import com.ydtech.modules.admin.model.vo.SysUserVO;
+import com.ydtech.modules.admin.model.vo.SysUserVOExt;
 import com.ydtech.modules.base.model.dto.PageDto;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -54,8 +54,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
             ",sd.id as deptId,sd.name as deptName" +
             ",psd.id as pDeptId,psd.name as pDeptName" +
             ",t4.id as roleId" +
-            ",t4.name as roleName"
-            ;
+            ",t4.name as roleName";
 
 
     String selectUserFromSql = " from sys_user su " +
@@ -66,8 +65,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
             " left join sys_role t4 on t3.role_id=t4.id " +
             " where 1=1 " +
             " AND sd.id &lt;&gt; '' "
-            + ""
-            ;
+            + "";
 
     String selectUserFromWhereSql = " " +
 //            "<if test='page.columnFilters.usertype !=null and page.columnFilters.usertype.value!=\"\" and page.columnFilters.usertype.value!=null '>" +
@@ -77,24 +75,24 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 //            " and su.approval_status = #{page.columnFilters.approvalStatus.value}" +
 //            "</if> " +
             "<if test='page.dto !=null  '> " +
-                "<if test='page.dto.status !=null and page.dto.status!=\"\" '> " +
-                " and su.status = #{page.dto.status}" +
-                "</if> " +
-                "<if test='page.dto.name !=null and page.dto.name!=\"\" '> " +
-                " and su.name like concat('%',#{page.dto.name},'%')" +
-                "</if> " +
-                "<if test='page.dto.userId !=null and page.dto.userId!=\"\" '>" +
-                " and su.id = #{page.dto.userId}" +
-                "</if> " +
-                "<if test='page.dto.mobile !=null and page.dto.mobile!=\"\"  '>" +
-                " and su.mobile = #{page.dto.mobile}" +
-                "</if> " +
-                "<if test='page.dto.deptId !=null and page.dto.deptId!=\"\"  '>" +
-                " and su.dept_id like concat('%',#{page.dto.deptId},'%')" +
-                "</if> " +
-                "<if test='page.dto.roleId !=null and page.dto.roleId!=\"\"  '>" +
-                " and t3.role_id = #{page.dto.roleId}" +
-                "</if> " +
+            "<if test='page.dto.status !=null and page.dto.status!=\"\" '> " +
+            " and su.status = #{page.dto.status}" +
+            "</if> " +
+            "<if test='page.dto.name !=null and page.dto.name!=\"\" '> " +
+            " and su.name like concat('%',#{page.dto.name},'%')" +
+            "</if> " +
+            "<if test='page.dto.userId !=null and page.dto.userId!=\"\" '>" +
+            " and su.id = #{page.dto.userId}" +
+            "</if> " +
+            "<if test='page.dto.mobile !=null and page.dto.mobile!=\"\"  '>" +
+            " and su.mobile = #{page.dto.mobile}" +
+            "</if> " +
+            "<if test='page.dto.deptId !=null and page.dto.deptId!=\"\"  '>" +
+            " and su.dept_id like concat('%',#{page.dto.deptId},'%')" +
+            "</if> " +
+            "<if test='page.dto.roleId !=null and page.dto.roleId!=\"\"  '>" +
+            " and t3.role_id = #{page.dto.roleId}" +
+            "</if> " +
             "</if> " +
             "";
 
@@ -121,10 +119,18 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<SysUserVO> findByReferrerId(@Param("deptId") String deptId);
 
 
-    Page<SysUserBaseVO> gainUserBaseInfo(@Param("page") Page page,@Param("user") SysUserDto user);
+    @Select("SELECT u.id,u.name FROM sys_user u " +
+            "LEFT JOIN sys_user_role sur ON sur.user_id = u.id " +
+            "LEFT JOIN sys_role r ON r.id = sur.role_id WHERE r.id IN ('22') and u.status=1 and u.id NOT LIKE '%M%'")
+    List<SysUser> findBackListByDeptId(@Param("deptId") String deptId);
+
+    List<SysUserVO> findListByDeptId(@Param("sysUser") SysUser sysUser);
+
+    Page<SysUserBaseVO> gainUserBaseInfo(@Param("page") Page page, @Param("user") SysUserDto user);
 
+    IPage<SysUserBaseVO> findUserList(@Param("page") Page page, @Param("user") SysUserDto user);
 
-    IPage<SysUserBaseVO> findUserList(@Param("page") Page page,@Param("user") SysUserDto user);
+    IPage<SysUserBaseVO> findBackUserList(@Param("page") Page page, @Param("user") SysUserDto user);
 
     /**
      * 获取用户列表
@@ -133,7 +139,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @param containsSubDept   是否包含下级机构
      * @return
      */
-    public IPage<SysUser> selectUserPage(Page page, @Param("sysUser")SysUser sysUser,@Param("containsSubDept")String containsSubDept);
+    public IPage<SysUser> selectUserPage(Page page, @Param("sysUser") SysUser sysUser, @Param("containsSubDept") String containsSubDept);
 
 
 
@@ -161,6 +167,50 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 
     List<QuTeamNum> getUser(@Param("quTeamNumDto")QuTeamNumDto quTeamNumDto);
 
+    List<QuUserNum> getUserNum(@Param("quUserNumDto") QuUserNumDto quUserNumDto);
+
+    List<QuUserNum> getUserByCompany(@Param("quUserNumDto") QuUserNumDto quUserNumDto);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:51
+     *  @Description: 添加查询前线人员
+     */
+    @Select(" SELECT  t1.id AS userId,t1.NAME AS NAME,t1.mobile AS mobile,t1.`status` AS `status`,t2.id AS deptId,t2.`name` AS deptName,sd2.id AS pDeptId,sd2.`name` AS pDeptName  " +
+            " FROM sys_user t1 LEFT JOIN sys_dept t2 ON t1.dept_id = t2.id LEFT JOIN sys_dept sd2 ON sd2.id = t2.parent_id " +
+             " WHERE t1.`status` = 1 AND t1.id LIKE '%M%'")
+
+    List<SysUserBaseVO> findQXUserList();
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 16:25
+     *  @Description: 通过工号、姓名、手机号查询工号信息
+     */
+    List<SysUserBaseVO> getAllUsersByHospitality(@Param("user") SysUserVOExt sysUserVOExt);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 16:25
+     *  @Description: 查询领导人为用户id的数据
+     */
+    @Select(" SELECT  t1.id AS userId,t1.NAME AS NAME,t1.mobile AS mobile,t1.`status` AS `status`,t2.id AS deptId,t2.`name` AS deptName,sd2.id AS pDeptId,sd2.`name` AS pDeptName  " +
+            " FROM sys_user t1 LEFT JOIN sys_dept t2 ON t1.dept_id = t2.id LEFT JOIN sys_dept sd2 ON sd2.id = t2.parent_id " +
+            " WHERE t1.`status` = 1 AND t1.leader_id = #{userId}")
+    List<SysUserBaseVO> getAllUsersByLeaderId(@Param("userId") String userId);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/17 16:55
+     *  @Description:  查询所有的代理人
+     */
+    @Select(" SELECT su.id FROM  sys_user su  LEFT JOIN sys_user_info info ON info.id = su.id  LEFT JOIN sys_dept sd ON su.dept_id = sd.id " +
+            " LEFT JOIN sys_dept psd ON psd.id = sd.parent_id   LEFT JOIN sys_user_role t3 ON su.id = t3.user_id  LEFT JOIN sys_role t4 ON t3.role_id = t4.id  " +
+            " AND sd.del_flag = '0'  and su.status = 1 " +
+            " WHERE  su.dept_id LIKE concat( '%', 9, '%' )    AND t3.role_id IN ( 20 )  AND sd.management_source = 2")
+    List<String> getAgentUserIds();
+
 }
 
 

+ 55 - 0
src/main/java/com/ydtech/modules/admin/model/QuUserNum.java

@@ -0,0 +1,55 @@
+package com.ydtech.modules.admin.model;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@Data
+public class QuUserNum {
+
+    @ApiModelProperty(value = "成员名称")
+    private String userName;
+
+    @ApiModelProperty(value = "成员ID")
+    private String userId;
+
+    @ApiModelProperty(value = "订单状态")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "保险公司编号")
+    private String companyId;
+
+    @ApiModelProperty(value = "保险公司名称")
+    private String insCompany;
+
+    @ApiModelProperty(value = "该订单状态下次数")
+    private String count;
+
+    @ApiModelProperty(value = "报价次数")
+    private String quoteNum;
+
+    @ApiModelProperty(value = "提交核保次数")
+    private String submitNum;
+
+    @ApiModelProperty(value = "已承保数量")
+    private String hasInsuredNum;
+
+    @ApiModelProperty(value = "总承保保费总数")
+    private String totalSumpremium;
+
+    @ApiModelProperty(value = "交强险费用")
+    private String jqPremiumSum;
+
+    @ApiModelProperty(value = "商业险费用")
+    private String syPremiumSum;
+
+    @ApiModelProperty(value = "车船税")
+    private String taxaMountSum;
+
+    @ApiModelProperty(value = "省市区")
+    private String areaCode;
+
+    @ApiModelProperty(value = "省市区名称")
+    private String areaName;
+
+}

+ 23 - 19
src/main/java/com/ydtech/modules/admin/model/SysDept.java

@@ -106,30 +106,34 @@ public class SysDept implements Serializable {
     @ApiModelProperty(value = "子公司C,门店M,部门D")
     private String deptType;
 
-    @TableField(value = "management_fee")
-    @ApiModelProperty(value = "管理费比例%")
-    private double managementFee;
-
-    @TableField(value = "management_fee_second")
-    @ApiModelProperty(value = "二级机构管理费比例%")
-    private double managementFeeSecond;
-
-    @TableField(value = "management_fee_third")
-    @ApiModelProperty(value = "三级机构管理费比例%")
-    private double managementFeeThird;
-
-    @TableField(value = "management_fee_forth")
-    @ApiModelProperty(value = "四级机构管理费比例%")
-    private double managementFeeForth;
-
-    @TableField(value = "management_fee_fifth")
-    @ApiModelProperty(value = "五级机构管理费比例%")
-    private double managementFeeFifth;
+//    @TableField(value = "management_fee")
+//    @ApiModelProperty(value = "管理费比例%")
+//    private double managementFee;
+//
+//    @TableField(value = "management_fee_second")
+//    @ApiModelProperty(value = "二级机构管理费比例%")
+//    private double managementFeeSecond;
+//
+//    @TableField(value = "management_fee_third")
+//    @ApiModelProperty(value = "三级机构管理费比例%")
+//    private double managementFeeThird;
+//
+//    @TableField(value = "management_fee_forth")
+//    @ApiModelProperty(value = "四级机构管理费比例%")
+//    private double managementFeeForth;
+//
+//    @TableField(value = "management_fee_fifth")
+//    @ApiModelProperty(value = "五级机构管理费比例%")
+//    private double managementFeeFifth;
 
     @TableField(value = "management_source")
     @ApiModelProperty(value = "机构来源(渠道、个代)")
     private String managementSource;
 
+    @TableField(value = "withdraw_user")
+    @ApiModelProperty(value = "提现人员")
+    private String withdrawUser;
+
     @TableField(exist = false)
     private List<SysDept> children;
 

+ 10 - 12
src/main/java/com/ydtech/modules/admin/model/SysDeptAccountEntity.java → src/main/java/com/ydtech/modules/admin/model/SysDeptAccount.java

@@ -1,10 +1,8 @@
 package com.ydtech.modules.admin.model;
 
-import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -16,26 +14,26 @@ import java.util.Date;
 @TableName(value = "sys_dept_account")
 @Data
 @ApiModel(value = "机构管理")
-public class SysDeptAccountEntity implements Serializable {
+public class SysDeptAccount implements Serializable {
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
     @TableId(value = "dept_id")
+    @ApiModelProperty(value = "机构Id")
     private String deptId;
 
-    @TableField(value = "handling_fee")
-    private BigDecimal handlingFee;
-
-    @TableField(value = "documentary")
-    private BigDecimal documentary;
-
-    @TableField(value = "promotion")
-    private BigDecimal promotion;
-
+    @ApiModelProperty(value = "机构费用")
+    @TableField(value = "management_fee")
+    private BigDecimal managementFee;
 
+    @ApiModelProperty(value = "创建时间")
     @TableField(value = "create_time")
     private Date createTime;
 
+    @ApiModelProperty(value = "提现金额")
+    @TableField(exist = false)
+    private BigDecimal amount;
+
 
 
 

+ 61 - 0
src/main/java/com/ydtech/modules/admin/model/SysDeptAccountHistory.java

@@ -0,0 +1,61 @@
+package com.ydtech.modules.admin.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName(value = "sys_dept_account_history")
+@Data
+@ApiModel(value = "机构管理历史记录")
+public class SysDeptAccountHistory implements Serializable{
+        @ApiModelProperty(value = "历史记录ID")
+        @TableId(value = "id")
+        private String id;
+
+        @ApiModelProperty(value = "部门ID")
+        @TableField(value = "dept_id")
+        private String deptId;
+
+        @TableField(value = "amount")
+        private BigDecimal amount;
+
+        @ApiModelProperty(value = "剩余金额")
+        @TableField(value = "surplus_amount")
+        private BigDecimal surplusAmount;
+        @ApiModelProperty(value = "提现/收入 1提现 2收入")
+        @TableField(value = "documentary")
+        private String documentary;
+
+        @ApiModelProperty(value = "来源订单")
+        @TableField(value = "suborder")
+        private String suborder;
+
+        @ApiModelProperty(value = "转出银行卡")
+        @TableField(value = "from_bank_card")
+        private String fromBankCard;
+
+        @ApiModelProperty(value = "转入银行卡")
+        @TableField(value = "to_bank_card")
+        private String toBankCard;
+
+        @ApiModelProperty(value = "提交人")
+        @TableField(value = "user_id")
+        private String userId;
+
+        @ApiModelProperty(value = "创建时间")
+        @TableField(value = "create_time")
+        private Date createTime;
+
+        @ApiModelProperty(value = "备注")
+        @TableField(value = "remark")
+        private String remark;
+
+
+}

+ 51 - 0
src/main/java/com/ydtech/modules/admin/model/SysDeptAccountWithdraw.java

@@ -0,0 +1,51 @@
+package com.ydtech.modules.admin.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.ydtech.utils.LocalDateTimeDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+
+@Data
+@TableName(value = "sys_dept_account_withdraw")
+@ApiModel(value = "机构账户审核表")
+public class SysDeptAccountWithdraw implements Serializable {
+    @TableId(value = "id")
+    @ApiModelProperty(value = "主键id")
+    private String id;
+
+    @TableField(value = "dept_id")
+    @ApiModelProperty(value = "机构id")
+    private String deptId;
+
+    @TableField(value = "name")
+    @ApiModelProperty(value = "机构名称")
+    private String name;
+
+    @TableField(value = "amount")
+    @ApiModelProperty(value = "提现金额")
+    private BigDecimal amount;
+
+    @TableField(value = "status")
+    @ApiModelProperty(value = "提现状态")
+    private String status;
+
+    @TableField(value = "remark")
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @TableField(value = "create_time")
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime createTime;
+}

+ 13 - 0
src/main/java/com/ydtech/modules/admin/model/SysUser.java

@@ -16,6 +16,7 @@ import springfox.documentation.annotations.ApiIgnore;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.Size;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 用户
@@ -106,6 +107,14 @@ public class SysUser extends BaseEntity {
     @TableField(value = "identity")
     private String identity;
 
+    @ApiModelProperty(value = "领导人ID")
+    @TableField(value = "leader_id")
+    private String leaderId;
+
+    @ApiModelProperty(value = "领导人姓名")
+    @TableField(value = "leader_name")
+    private String leaderName;
+
     //------------------
 
 
@@ -157,6 +166,7 @@ public class SysUser extends BaseEntity {
     @Excel(name = "推荐人名称")
     private String referrerName;
 
+
     @TableField(exist = false)
     @ApiModelProperty("机构来源")
     private String managementSource;
@@ -169,6 +179,9 @@ public class SysUser extends BaseEntity {
     @ApiModelProperty("岗位名称")
     private String positionName;
 
+    @TableField(exist = false)
+    private List<SysUser> children;
+
     /**
      * 验证用户
      *

+ 47 - 0
src/main/java/com/ydtech/modules/admin/model/dto/QuUserNumDto.java

@@ -0,0 +1,47 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+
+@Data
+public class QuUserNumDto {
+
+    @ApiModelProperty(value = "成员名称")
+    private String userName;
+
+    @ApiModelProperty(value = "成员ID")
+    private String userId;
+
+    @ApiModelProperty(value = "创建时间开始")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate createTimeStart;
+
+    @ApiModelProperty(value = "创建时间结束")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate createTimeEnd;
+
+    @ApiModelProperty(value = "省市区")
+    private String areaCode;
+
+    @ApiModelProperty(value = "省市区等级")
+    private String level;
+
+    @ApiModelProperty(value = "分组条件")
+    private Integer grouping;
+
+    @ApiModelProperty(value = "下属ID")
+    private List<String> userIds;
+
+    @TableField(exist = false)
+    private int pageNum;
+
+    @TableField(exist = false)
+    private int pageSize;
+
+}

+ 30 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysDeptAccountDto.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.admin.model.dto;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class SysDeptAccountDto {
+    @ApiModelProperty("部门id")
+    private String deptId;
+    @ApiModelProperty("部门名称")
+    private String deptName;
+
+    @ApiModelProperty("管理费")
+    private String managementFee;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "提现中金额")
+    @JsonFormat(pattern = "0.00")
+    private BigDecimal waitAmount;
+
+    @ApiModelProperty(value = "已提现金额")
+    @JsonFormat(pattern = "0.00")
+    private BigDecimal totalAmount;
+}

+ 68 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysDeptAccountHistoryDto.java

@@ -0,0 +1,68 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class SysDeptAccountHistoryDto{
+    @ApiModelProperty(value = "历史记录ID")
+    @TableId(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "部门ID")
+    @TableField(value = "dept_id")
+    private String deptId;
+
+    @ApiModelProperty(value = "部门名称")
+    private String deptName;
+
+    @TableField(value = "amount")
+    @ApiModelProperty(value = "金额")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "剩余金额")
+    @TableField(value = "surplus_amount")
+    private BigDecimal surplusAmount;
+    @ApiModelProperty(value = "提现/收入 1提现 2收入")
+    @TableField(value = "documentary")
+    private String documentary;
+
+    @ApiModelProperty(value = "来源订单")
+    @TableField(value = "suborder")
+    private String suborder;
+
+    @ApiModelProperty(value = "转出银行卡")
+    @TableField(value = "from_bank_card")
+    private String fromBankCard;
+
+    @ApiModelProperty(value = "转入银行卡")
+    @TableField(value = "to_bank_card")
+    private String toBankCard;
+
+    @ApiModelProperty(value = "提交人")
+    @TableField(value = "user_id")
+    private String userId;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createTime;
+
+    @ApiModelProperty(value = "备注")
+    @TableField(value = "remark")
+    private String remark;
+
+    private String createTimeStart;
+
+    private String createTimeEnd;
+
+    private int pageNo;
+
+    private int pageSize;
+}

+ 28 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysUserLinkPtlAgreementDto.java

@@ -0,0 +1,28 @@
+package com.ydtech.modules.admin.model.dto;
+
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:57
+ *  @Description: 人员关联协议返回前台对象
+ */
+@Data
+@ApiModel
+public class SysUserLinkPtlAgreementDto extends PageRequest {
+
+    @ApiModelProperty("后线人员关联协议id")
+    private Long id;
+
+    @ApiModelProperty("后线人员用户")
+    private SysUser sysUser;
+
+    @ApiModelProperty("协议信息")
+    private PtlAgreement ptlAgreement;
+}

+ 88 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysUserLinkPtlAgreement.java

@@ -0,0 +1,88 @@
+package com.ydtech.modules.admin.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:32
+ *  @Description: 前线人员关联协议表
+ */
+@TableName(value = "sys_user_link_pl_agreement")
+@Data
+@NoArgsConstructor
+public class SysUserLinkPtlAgreement implements Serializable {
+    /***
+     * 主键自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /***
+     * 后线用户ID
+     */
+    @TableField(value = "user_id")
+    private  String userId;
+    /***
+     * 协议ID
+     */
+    @TableField(value = "ptl_agreement_id")
+    private Long ptlAgreementId;
+    /***
+     * 创建人
+     */
+    @TableField(value = "create_id")
+    private String createId;
+    /***
+     * 创建人名称
+     */
+    @TableField(value = "create_name")
+    private String createName;
+    /***
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(value = "create_time")
+    private Date createTime;
+    /***
+     * 修改人名称
+     */
+    @TableField(value = "update_id")
+    private String updateId;
+    /***
+     * 修改人名称
+     */
+    @TableField(value = "update_name")
+    private String updateName;
+    /***
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+    /***
+     * 协议类型  0 车险  1 非车
+     */
+    @TableField(value = "type")
+    private String type;
+
+    public SysUserLinkPtlAgreement(String userId, Long ptlAgreementId, String createId, String createName, Date createTime, String updateId, String updateName, Date updateTime) {
+        this.userId = userId;
+        this.ptlAgreementId = ptlAgreementId;
+        this.createId = createId;
+        this.createName = createName;
+        this.createTime = createTime;
+        this.updateId = updateId;
+        this.updateName = updateName;
+        this.updateTime = updateTime;
+    }
+}

+ 4 - 2
src/main/java/com/ydtech/modules/admin/model/vo/SysAmountAuditingVo.java

@@ -12,6 +12,8 @@ import org.springframework.format.annotation.DateTimeFormat;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 @Data
@@ -77,11 +79,11 @@ public class SysAmountAuditingVo {
 
     @ApiModelProperty("开始时间")
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-    private Date startTime;
+    private LocalDate startTime;
 
     @ApiModelProperty("结束时间")
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-    private Date endTime;
+    private LocalDate endTime;
 
     @ApiModelProperty("审批时间")
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")

+ 36 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysDeptAccountByUserVo.java

@@ -0,0 +1,36 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SysDeptAccountByUserVo {
+    @ApiModelProperty("机构Id")
+    private String deptId;
+
+    @ApiModelProperty("机构名称")
+    private String deptName;
+
+    @ApiModelProperty("机构级别")
+    private String comLevel;
+
+    @ApiModelProperty("机构性质")
+    private String comattribute;
+
+    @ApiModelProperty("机构类型")
+    private String comtype;
+
+    @ApiModelProperty("余额")
+    private BigDecimal managementFee;
+
+    @ApiModelProperty("提现人员id")
+    private String userId;
+
+    @ApiModelProperty("提现中金额")
+    private BigDecimal waitAmount;
+
+    @ApiModelProperty("已提现金额")
+    private BigDecimal totalAmount;
+}

+ 52 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysDeptAccountWithdrawVo.java

@@ -0,0 +1,52 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class SysDeptAccountWithdrawVo implements Serializable {
+    @TableId(value = "id")
+    @ApiModelProperty(value = "主键id")
+    private String id;
+
+    @TableField(value = "dept_id")
+    @ApiModelProperty(value = "机构id")
+    private String deptId;
+
+    @TableField(value = "name")
+    @ApiModelProperty(value = "机构名称")
+    private String name;
+
+    @TableField(value = "amount")
+    @ApiModelProperty(value = "提现金额")
+    private BigDecimal amount;
+
+    @TableField(value = "status")
+    @ApiModelProperty(value = "提现状态")
+    private String status;
+
+    @TableField(value = "remark")
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @TableField(value = "create_time")
+    @ApiModelProperty(value = "创建时间")
+    private String createTime;
+
+    @ApiModelProperty(value = "创建时间开始时间")
+    private String createTimeStart;
+
+
+    @ApiModelProperty(value = "创建时间结束时间")
+    private String createTimeEnd;
+
+    private int pageNo;
+
+    private int pageSize;
+
+}

+ 2 - 1
src/main/java/com/ydtech/modules/admin/model/vo/SysUserBaseVO.java

@@ -40,6 +40,7 @@ public class SysUserBaseVO {
     private String roleId;
     @ApiModelProperty(value = "角色名称")
     private String roleName;
-
+    @ApiModelProperty(value = "工号类型")
+    private String noType;
 
 }

+ 31 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysUserLinkPtlAgreementAddVo.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 15:08
+ *  @Description: 后线人员添加
+ */
+@Data
+@ApiModel
+public class SysUserLinkPtlAgreementAddVo {
+
+    /***
+     * 用户ID
+     */
+    @ApiModelProperty("后线用户ID")
+    private String userId;
+
+    /***
+     * 协议IDs
+     */
+    @ApiModelProperty("协议IDs")
+    private List<Long> ptlAgreementIds = new ArrayList<Long>();
+}

+ 32 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysUserLinkPtlAgreementVo.java

@@ -0,0 +1,32 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.core.page.BasePageVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:55
+ *  @Description: 前台分页查询对象
+ */
+@Data
+@ApiModel
+public class SysUserLinkPtlAgreementVo extends BasePageVO {
+
+    /***
+     * 用户ID
+     */
+    @ApiModelProperty("后线用户ID")
+    private String userId;
+
+    /***
+     * 协议ID
+     */
+    @ApiModelProperty("协议ID")
+    private Long ptlAgreementId;
+
+    @ApiModelProperty("ID")
+    private Long  id;
+}

+ 28 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysUserVOExt.java

@@ -0,0 +1,28 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/16 16:12
+ *  @Description: 待客录入查询类
+ */
+@Data
+@ApiModel("待客录入查询类")
+public class SysUserVOExt {
+
+    @ApiModelProperty("工号")
+    private String userId;
+
+    @ApiModelProperty("业务员名称")
+    private String name;
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("身份证号")
+    private String identity;
+}

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

@@ -1,6 +1,7 @@
 package com.ydtech.modules.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.po.SysAmountAuditingEntity;
 import com.ydtech.modules.admin.model.vo.SysAmountAuditingVo;
 import com.ydtech.modules.order.entity.BasePageResult;
@@ -10,7 +11,7 @@ public interface SysAmountAuditingService extends IService<SysAmountAuditingEnti
 
     SysAmountAuditingEntity getByUserId(String userId);
 
-    BasePageResult<SysAmountAuditingEntity> queryByVo(SysAmountAuditingVo sysAmountAuditingVo);
+    HttpResult<BasePageResult<SysAmountAuditingEntity>> queryByVo(SysAmountAuditingVo sysAmountAuditingVo);
 
     BasePageResult<SysAmountAuditingEntity> queryAppPage(SysAmountAuditingVo sysAmountAuditingVo);
 

+ 17 - 0
src/main/java/com/ydtech/modules/admin/service/SysDeptAccountHistoryService.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.SysDeptAccountHistory;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountHistoryDto;
+import com.ydtech.modules.inv.model.InvAccountOperate;
+import com.ydtech.modules.ser.model.SerAnnualAuditOrder;
+import com.ydtech.modules.ser.model.vo.SerAnnualAuditOrderQueryVo;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+
+
+public interface SysDeptAccountHistoryService extends IService<SysDeptAccountHistory> {
+    IPage<SysDeptAccountHistoryDto> selectList(SysDeptAccountHistoryDto sysDeptAccountHistoryDto);
+}

+ 13 - 5
src/main/java/com/ydtech/modules/admin/service/SysDeptAccountService.java

@@ -1,13 +1,18 @@
 package com.ydtech.modules.admin.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ydtech.modules.admin.model.SysDept;
-import com.ydtech.modules.admin.model.SysDeptAccountEntity;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysDeptAccount;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountDto;
+import com.ydtech.modules.admin.model.vo.SysDeptAccountByUserVo;
 import com.ydtech.modules.admin.model.vo.SysDeptAccountVO;
 import com.ydtech.modules.order.entity.BasePageResult;
 
-public interface SysDeptAccountService extends IService<SysDeptAccountEntity> {
-    BasePageResult<SysDeptAccountEntity> queryByVo(SysDeptAccountVO sysDeptAccountVO);
+import java.util.List;
+
+public interface SysDeptAccountService extends IService<SysDeptAccount> {
+    BasePageResult<SysDeptAccount> queryByVo(SysDeptAccountVO sysDeptAccountVO);
 
     boolean inert(SysDeptAccountVO sysDeptAccountVO);
 
@@ -15,7 +20,10 @@ public interface SysDeptAccountService extends IService<SysDeptAccountEntity> {
 
     void uodate(SysDeptAccountVO sysDeptAccountVO);
 
-    void addOrUpdate(SysDeptAccountEntity sysDeptAccountEntity);
+    IPage<SysDeptAccountDto> getDept(SysDeptAccountDto sysDeptAccountDto);
+
+    List<SysDeptAccountByUserVo> getDeptAccountByUser();
 
+    HttpResult withdrawDeptAccount(SysDeptAccount sysDeptAccount);
 
 }

+ 13 - 0
src/main/java/com/ydtech/modules/admin/service/SysDeptAccountWithdrawService.java

@@ -0,0 +1,13 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysDeptAccountWithdraw;
+import com.ydtech.modules.admin.model.vo.SysDeptAccountWithdrawVo;
+
+public interface SysDeptAccountWithdrawService extends IService<SysDeptAccountWithdraw> {
+    IPage<SysDeptAccountWithdraw> getList(SysDeptAccountWithdrawVo sysDeptAccountWithdrawVo);
+
+    HttpResult updateByStatus(SysDeptAccountWithdraw sysDeptAccountWithdraw);
+}

+ 9 - 0
src/main/java/com/ydtech/modules/admin/service/SysDeptService.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.admin.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageRequest;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.modules.admin.model.SysDept;
@@ -41,6 +42,14 @@ public interface SysDeptService extends IService<SysDept> {
     void addDept(SysDeptVo sysDeptVo);
 
 
+    /**
+     * 修改机构
+     *
+     * @param record 机构信息
+     */
+    HttpResult updateDept(SysDept record);
+
+
     /**
      * 删除机构
      *

+ 59 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserLinkPtlAgreementService.java

@@ -0,0 +1,59 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
+import com.ydtech.modules.admin.model.po.SysUserLinkPtlAgreement;
+import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
+import com.ydtech.modules.admin.model.vo.SysUserLinkPtlAgreementAddVo;
+import com.ydtech.modules.admin.model.vo.SysUserLinkPtlAgreementVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+
+import java.util.List;
+
+public interface SysUserLinkPtlAgreementService extends IService<SysUserLinkPtlAgreement> {
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 15:11
+     *  @Description: 分页
+     */
+    BasePageResult<SysUserLinkPtlAgreementDto> queryPage(SysUserLinkPtlAgreementVo sysUserLinkPtlAgreementVo);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 15:12
+     *  @Description: 修改
+     */
+    void addOrUpdate(SysUserLinkPtlAgreementAddVo sysUserLinkPtlAgreementAddVo, SysUser user);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:23
+     *  @Description: 更具id删除数据
+     */
+    void deleteByIds(List<Long> ids);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:27
+     *  @Description: 查询所有的后线人员表
+     */
+    List<SysUserBaseVO> findUserList();
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:56
+     *  @Description:  查询所有审核的协议列表
+     */
+    List<PtlAgreement> findPtlAgreementList();
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 9:27
+     *  @Description: 查询前线人员关联的协议列表
+     */
+    List<SysUserLinkPtlAgreementDto> findPtlAgreementListByUserId(String userId);
+}

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

@@ -7,14 +7,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.modules.admin.model.QuTeamNum;
+import com.ydtech.modules.admin.model.QuUserNum;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.SysUserRole;
 import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
+import com.ydtech.modules.admin.model.dto.QuUserNumDto;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
-import com.ydtech.modules.admin.model.vo.SysUser2Vo;
-import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
-import com.ydtech.modules.admin.model.vo.SysUserInternalVO;
-import com.ydtech.modules.admin.model.vo.SysUserVO;
+import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
 
@@ -69,6 +68,8 @@ public interface SysUserService extends IService<SysUser> {
 
     List<SysUserVO> findByReferrerId(String deptId);
 
+    List<SysUserVO> findListByDeptId(SysUser sysUser);
+
     PageVo<SysUserBaseVO> gainUserPage(PageDto<SysUserDto> pageDto);
 
 
@@ -80,6 +81,8 @@ public interface SysUserService extends IService<SysUser> {
      */
     IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto);
 
+    IPage<SysUserBaseVO> findBackUserList(PageDto<SysUserDto> pageDto);
+
     IPage<QuTeamNum> quTeamNum(QuTeamNumDto quTeamNumDto);
 
     IPage<QuTeamNum> getQuTeamByCompany(QuTeamNumDto quTeamNumDto);
@@ -122,6 +125,21 @@ public interface SysUserService extends IService<SysUser> {
      * @return
      */
     List<SysUser> findUserList(String deptId);
+
+    List<SysUser>  findTree();
+
+    List<SysUser> findBackListByDeptId(String deptId);
+
+    IPage<QuUserNum> quUserNum(QuUserNumDto quUserNumDto);
+
+    IPage<QuUserNum> getQuUserByCompany(QuUserNumDto quUserNumDto);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 15:50
+     *  @Description: 获取待客录入的可选业务员
+     */
+    List<SysUserBaseVO> getAllUsersByHospitality(SysUserVOExt sysUserVOExt);
 }
 
 

+ 39 - 6
src/main/java/com/ydtech/modules/admin/service/impl/SysAmountAuditingServiceImpl.java

@@ -3,6 +3,9 @@ package com.ydtech.modules.admin.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.dao.SysAmountAuditingMapper;
 import com.ydtech.modules.admin.model.po.SysAmountAuditingEntity;
 import com.ydtech.modules.admin.model.po.SysUserAccount;
@@ -10,6 +13,7 @@ import com.ydtech.modules.admin.model.vo.SysAmountAuditingVo;
 import com.ydtech.modules.admin.service.SysAmountAuditingService;
 import com.ydtech.modules.admin.service.SysUserAccountService;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fnc.entity.InsPlyIncome;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.utils.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
@@ -20,6 +24,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
 
 @Service
 public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingMapper, SysAmountAuditingEntity> implements SysAmountAuditingService {
@@ -74,13 +80,40 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     }
 
     @Override
-    public BasePageResult<SysAmountAuditingEntity> queryByVo(SysAmountAuditingVo sysAmountAuditingVo) {
-        Page<SysAmountAuditingEntity> page = new Page<>(sysAmountAuditingVo.getPageNum(), sysAmountAuditingVo.getPageSize());
-        QueryWrapper<SysAmountAuditingEntity> wrapper = new QueryWrapper<>();
+    public HttpResult<BasePageResult<SysAmountAuditingEntity>> queryByVo(SysAmountAuditingVo sysAmountAuditingVo) {
+        try{
+            HashMap<String, Object> params = new HashMap<>();
+            PageInfo<List<InsPlyIncome>> pageHelper = null;
+            PageHelper.startPage(sysAmountAuditingVo.getPageNum(),sysAmountAuditingVo.getPageSize());
+            params.put("pageNum",sysAmountAuditingVo.getPageNum());
+            params.put("pageSize",sysAmountAuditingVo.getPageSize());
+            if(ObjectUtils.isNotEmpty(sysAmountAuditingVo.getStartTime())){
+                params.put("startDate",sysAmountAuditingVo.getStartTime().toString());
+            }
+            if(ObjectUtils.isNotEmpty(sysAmountAuditingVo.getEndTime())){
+                params.put("endDate",sysAmountAuditingVo.getEndTime().toString());
+            }
+            if(StringUtils.isNotEmpty(sysAmountAuditingVo.getAuditingStatus())){
+                params.put("auditingStatus",sysAmountAuditingVo.getAuditingStatus());
+            }
+            if(StringUtils.isNotEmpty(sysAmountAuditingVo.getUserId())){
+                params.put("userId",sysAmountAuditingVo.getUserId());
+            }
+            if(StringUtils.isNotEmpty(sysAmountAuditingVo.getId())){
+                params.put("id",sysAmountAuditingVo.getId());
+            }
 
-        Page<SysAmountAuditingEntity> sysUserAccountHistoryPage = baseMapper.queryPageOrder(sysAmountAuditingVo, page);
-        return new BasePageResult<>(sysAmountAuditingVo.getPageNum(), page.getSize(), sysUserAccountHistoryPage.getTotal(), page.getPages(),
-                sysUserAccountHistoryPage.getRecords());
+            if(StringUtils.isNotEmpty(sysAmountAuditingVo.getAmountStatus())){
+                params.put("amountStatus",sysAmountAuditingVo.getAmountStatus());
+            }
+            List<SysAmountAuditingEntity> list = baseMapper.queryPageOrderNew(params);
+            pageHelper=new PageInfo(list);
+            BasePageResult<SysAmountAuditingEntity> pageResult=new BasePageResult<SysAmountAuditingEntity>(sysAmountAuditingVo.getPageNum(), sysAmountAuditingVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list);
+            return HttpResult.ok(pageResult);
+        }catch (Exception e){
+            e.printStackTrace();
+            return HttpResult.error("查询异常");
+        }
     }
 
     @Override

+ 31 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysDeptAccountHistoryServiceImpl.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.admin.dao.SysDeptAccountHistoryMapper;
+import com.ydtech.modules.admin.model.SysDeptAccountHistory;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountHistoryDto;
+import com.ydtech.modules.admin.service.SysDeptAccountHistoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class SysDeptAccountHistoryServiceImpl extends ServiceImpl<SysDeptAccountHistoryMapper, SysDeptAccountHistory> implements SysDeptAccountHistoryService {
+    @Autowired
+    private SysDeptAccountHistoryService sysDeptAccountHistoryService;
+
+    @Autowired
+    private SysDeptAccountHistoryMapper sysDeptAccountHistoryMapper;
+    @Override
+    public IPage<SysDeptAccountHistoryDto> selectList(SysDeptAccountHistoryDto sysDeptAccountHistoryDto) {
+        PageRequest pageRequest = new PageRequest();
+        pageRequest.setPageNum(sysDeptAccountHistoryDto.getPageNo());
+        pageRequest.setPageSize(sysDeptAccountHistoryDto.getPageSize());
+        Page page = PageRequest.buildPageRequest(pageRequest);
+        Page<SysDeptAccountHistoryDto> deptHistoryList = sysDeptAccountHistoryMapper.getDeptHistory(page,sysDeptAccountHistoryDto);
+        return deptHistoryList;
+    }
+}

+ 86 - 50
src/main/java/com/ydtech/modules/admin/service/impl/SysDeptAccountServiceImpl.java

@@ -1,42 +1,112 @@
 package com.ydtech.modules.admin.service.impl;
 
+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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ydtech.modules.admin.dao.SysDeptAccountDao;
-import com.ydtech.modules.admin.model.SysDeptAccountEntity;
+import com.ydtech.constants.sys.SysDeptAccountStatus;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.dao.SysDeptAccountMapper;
+import com.ydtech.modules.admin.model.*;
+import com.ydtech.modules.admin.model.dto.SysDeptAccountDto;
+import com.ydtech.modules.admin.model.vo.SysDeptAccountByUserVo;
 import com.ydtech.modules.admin.model.vo.SysDeptAccountVO;
-import com.ydtech.modules.admin.service.SysDeptAccountService;
+import com.ydtech.modules.admin.service.*;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
-import org.apache.commons.lang3.ObjectUtils;
+import com.ydtech.utils.idgen.IdGenerate;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
 
 @Service
-public class SysDeptAccountServiceImpl extends ServiceImpl<SysDeptAccountDao, SysDeptAccountEntity>  implements SysDeptAccountService {
+public class SysDeptAccountServiceImpl extends ServiceImpl<SysDeptAccountMapper, SysDeptAccount>  implements SysDeptAccountService {
+    @Autowired
+    private SysDeptAccountService sysDeptAccountService;
 
+    @Autowired
+    private SysDeptAccountHistoryService sysDeptAccountHistoryService;
+
+    @Autowired
+    private SysDeptAccountMapper sysDeptAccountMapper;
+
+    @Autowired
+    private SysDeptAccountWithdrawService sysDeptAccountWithdrawService;
+
+    @Autowired
+    private SysDeptService sysDeptService;
+
+    @Autowired
+    private SysUserInfoService sysUserInfoService;
 
     @Override
-    public BasePageResult<SysDeptAccountEntity> queryByVo(SysDeptAccountVO sysDeptAccountVO) {
+    public BasePageResult<SysDeptAccount> queryByVo(SysDeptAccountVO sysDeptAccountVO) {
 
-        Page<SysDeptAccountEntity> page = new Page<>(sysDeptAccountVO.getPageNum(), sysDeptAccountVO.getPageSize());
-        QueryWrapper<SysDeptAccountEntity> wrapper = new QueryWrapper<>();
+        Page<SysDeptAccount> page = new Page<>(sysDeptAccountVO.getPageNum(), sysDeptAccountVO.getPageSize());
+        QueryWrapper<SysDeptAccount> wrapper = new QueryWrapper<>();
 
-        Page<SysDeptAccountEntity> sysUserAccountHistoryPage  = page(page, wrapper);
+        Page<SysDeptAccount> sysUserAccountHistoryPage  = page(page, wrapper);
         return new BasePageResult<>(sysDeptAccountVO.getPageNum(), page.getSize(), sysUserAccountHistoryPage.getTotal(), page.getPages(),
                 sysUserAccountHistoryPage.getRecords());
     }
 
+    public IPage<SysDeptAccountDto> getDept(SysDeptAccountDto sysDeptAccountDto) {
+        Page<SysDeptAccountDto> page = new Page<>();
+        List<SysDeptAccountDto> deptList = sysDeptAccountMapper.getDept(sysDeptAccountDto);
+        page.setRecords(deptList);
+        page.setTotal(deptList.size());
+        return page;
+    }
+
+    public List<SysDeptAccountByUserVo> getDeptAccountByUser() {
+        List<SysDeptAccountByUserVo> deptAccountByUserList = sysDeptAccountMapper.getDeptAccountByUser(BaseController.getUser().getId());
+        return deptAccountByUserList;
+    }
+
+    public HttpResult withdrawDeptAccount(SysDeptAccount sysDeptAccount) {
+        SysDeptAccount deptAccount = sysDeptAccountMapper.selectById(sysDeptAccount.getDeptId());
+        //根据deptId查询提现人员相关信息
+        LambdaQueryWrapper<SysDept> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysDept::getId, sysDeptAccount.getDeptId());
+        SysDept sysDept = sysDeptService.getOne(queryWrapper);
+
+        if (!BaseController.getUser().getId().equals(sysDept.getWithdrawUser())) {
+            throw new SystemException("您不为该机构账户提现人员");
+        }
+        if (sysDeptAccount.getAmount().compareTo(deptAccount.getManagementFee()) > 0) {
+            throw new SystemException("提现金额大于机构账户金额");
+        }
+        // 减去提现金额
+        deptAccount.setManagementFee(deptAccount.getManagementFee().subtract(sysDeptAccount.getAmount()));
+        sysDeptAccountService.updateById(deptAccount);
+
+        // 生成提现审核数据
+        SysDeptAccountWithdraw sysDeptAccountWithdraw = new SysDeptAccountWithdraw();
+        sysDeptAccountWithdraw.setId(IdGenerate.nextId());
+        sysDeptAccountWithdraw.setDeptId(deptAccount.getDeptId());
+        sysDeptAccountWithdraw.setName(sysDept.getName());
+        sysDeptAccountWithdraw.setAmount(sysDeptAccount.getAmount());
+        sysDeptAccountWithdraw.setStatus(SysDeptAccountStatus.WAIT.getCode()); //待审核
+        sysDeptAccountWithdraw.setRemark("");
+        sysDeptAccountWithdraw.setCreateTime(LocalDateTime.now());
+        sysDeptAccountWithdrawService.save(sysDeptAccountWithdraw);
+
+        return HttpResult.ok("", sysDeptAccount);
+    }
+
     @Override
     @Transactional
     public boolean inert(SysDeptAccountVO sysDeptAccountVO) {
-        SysDeptAccountEntity sysDeptAccountEntity = new SysDeptAccountEntity();
-        BeanUtils.copyProperties(sysDeptAccountVO, sysDeptAccountEntity);
-        return super.save(sysDeptAccountEntity);
+        SysDeptAccount sysDeptAccount = new SysDeptAccount();
+        BeanUtils.copyProperties(sysDeptAccountVO, sysDeptAccount);
+        return super.save(sysDeptAccount);
 
     }
 
@@ -49,43 +119,9 @@ public class SysDeptAccountServiceImpl extends ServiceImpl<SysDeptAccountDao, Sy
     @Override
     @Transactional
     public void uodate(SysDeptAccountVO sysDeptAccountVO) {
-        SysDeptAccountEntity sysDeptAccountEntity = new SysDeptAccountEntity();
-        BeanUtils.copyProperties(sysDeptAccountVO, sysDeptAccountEntity);
-        super.updateById(sysDeptAccountEntity);
+        SysDeptAccount sysDeptAccount = new SysDeptAccount();
+        BeanUtils.copyProperties(sysDeptAccountVO, sysDeptAccount);
+        super.updateById(sysDeptAccount);
     }
 
-    @Override
-    public void addOrUpdate(SysDeptAccountEntity sysDeptAccountEntity) {
-        //          如果用户id有值则累加   没有则 新增
-        BigDecimal handlingFee =BigDecimal.ZERO;
-        BigDecimal documentary = BigDecimal.ZERO;
-        BigDecimal promotion = BigDecimal.ZERO;
-
-        String deptId = sysDeptAccountEntity.getDeptId();
-        SysDeptAccountEntity sysUserAccountEntityById = super.getById(deptId);
-        if(ObjectUtils.isNotEmpty(sysUserAccountEntityById)){
-            if(sysUserAccountEntityById.getHandlingFee()==null){
-                sysUserAccountEntityById.setHandlingFee(handlingFee);
-            }
-            if (sysUserAccountEntityById.getDocumentary()==null){
-                sysUserAccountEntityById.setDocumentary(documentary);
-            }
-            if(sysUserAccountEntityById.getPromotion()==null){
-                sysUserAccountEntityById.setPromotion(promotion);
-            }
-            sysUserAccountEntityById.setHandlingFee(sysDeptAccountEntity.getHandlingFee().add(sysUserAccountEntityById.getHandlingFee()));
-            sysUserAccountEntityById.setDocumentary(sysDeptAccountEntity.getDocumentary().add(sysUserAccountEntityById.getDocumentary()));
-            sysUserAccountEntityById.setPromotion(sysDeptAccountEntity.getPromotion().add(sysUserAccountEntityById.getPromotion()));
-
-            baseMapper.updateById(sysUserAccountEntityById);
-        }else {
-            SysDeptAccountEntity newAccount = new SysDeptAccountEntity();
-            newAccount.setDeptId(deptId);
-            newAccount.setDocumentary(sysDeptAccountEntity.getDocumentary());
-            newAccount.setPromotion(sysDeptAccountEntity.getPromotion());
-            newAccount.setHandlingFee(sysDeptAccountEntity.getHandlingFee());
-            baseMapper.insert(newAccount);
-        }
-
-    }
 }

+ 78 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysDeptAccountWithdrawServiceImpl.java

@@ -0,0 +1,78 @@
+package com.ydtech.modules.admin.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.sys.SysDeptAccountStatus;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
+import com.ydtech.modules.admin.dao.SysDeptAccountWithdrawMapper;
+import com.ydtech.modules.admin.model.SysDeptAccount;
+import com.ydtech.modules.admin.model.SysDeptAccountHistory;
+import com.ydtech.modules.admin.model.SysDeptAccountWithdraw;
+import com.ydtech.modules.admin.model.vo.SysDeptAccountWithdrawVo;
+import com.ydtech.modules.admin.service.SysDeptAccountHistoryService;
+import com.ydtech.modules.admin.service.SysDeptAccountService;
+import com.ydtech.modules.admin.service.SysDeptAccountWithdrawService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+
+@Service
+public class SysDeptAccountWithdrawServiceImpl extends ServiceImpl<SysDeptAccountWithdrawMapper, SysDeptAccountWithdraw> implements SysDeptAccountWithdrawService {
+
+    @Autowired
+    private SysDeptAccountWithdrawMapper sysDeptAccountWithdrawMapper;
+
+    @Autowired
+    private SysDeptAccountWithdrawService sysDeptAccountWithdrawService;
+    @Autowired
+    private SysDeptAccountService sysDeptAccountService;
+
+    @Autowired
+    private SysDeptAccountHistoryService sysDeptAccountHistoryService;
+    @Override
+    public IPage<SysDeptAccountWithdraw> getList(SysDeptAccountWithdrawVo sysDeptAccountWithdrawVo) {
+        PageRequest pageRequest = new PageRequest();
+        pageRequest.setPageNum(sysDeptAccountWithdrawVo.getPageNo());
+        pageRequest.setPageSize(sysDeptAccountWithdrawVo.getPageSize());
+        Page page = PageRequest.buildPageRequest(pageRequest);
+        Page<SysDeptAccountWithdraw> iPage = sysDeptAccountWithdrawMapper.selectSysDeptAccountWithdraw(page,sysDeptAccountWithdrawVo);
+        return iPage;
+    }
+
+    @Override
+    public HttpResult updateByStatus(SysDeptAccountWithdraw sysDeptAccountWithdraw) {
+        if (sysDeptAccountWithdraw.getStatus().equals(SysDeptAccountStatus.PASS.getCode())) {
+            SysDeptAccount sysDeptAccount = sysDeptAccountService.getById(sysDeptAccountWithdraw.getDeptId());
+            sysDeptAccount.setManagementFee(sysDeptAccount.getManagementFee());
+            sysDeptAccountService.updateById(sysDeptAccount);
+            // 机构历史明细生成提现明细
+            SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
+            sysDeptAccountHistory.setId(IdGenerate.nextId());
+            sysDeptAccountHistory.setDeptId(sysDeptAccount.getDeptId());
+            sysDeptAccountHistory.setAmount(sysDeptAccountWithdraw.getAmount());
+            sysDeptAccountHistory.setSurplusAmount(sysDeptAccount.getManagementFee());
+            sysDeptAccountHistory.setSuborder(sysDeptAccountWithdraw.getId());
+            sysDeptAccountHistory.setDocumentary("1"); //提现
+            sysDeptAccountHistory.setFromBankCard(null);
+            sysDeptAccountHistory.setToBankCard(null);
+            sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
+            sysDeptAccountHistory.setCreateTime(new Date());
+            sysDeptAccountHistory.setRemark("从" + sysDeptAccountWithdraw.getName() + "机构账户中提现" + sysDeptAccountWithdraw.getAmount() + "元");
+            sysDeptAccountHistoryService.save(sysDeptAccountHistory);
+        }
+        if (sysDeptAccountWithdraw.getStatus().equals(SysDeptAccountStatus.REJECT.getCode())) {
+            SysDeptAccount sysDeptAccount = sysDeptAccountService.getById(sysDeptAccountWithdraw.getDeptId());
+            sysDeptAccount.setManagementFee(sysDeptAccount.getManagementFee().add(sysDeptAccountWithdraw.getAmount()));
+            sysDeptAccountService.updateById(sysDeptAccount);
+        }
+        sysDeptAccountWithdrawService.updateById(sysDeptAccountWithdraw);
+        return HttpResult.ok("审核完成",sysDeptAccountWithdraw);
+    }
+}

+ 61 - 10
src/main/java/com/ydtech/modules/admin/service/impl/SysDeptServiceImpl.java

@@ -5,6 +5,7 @@ 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageRequest;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
@@ -17,9 +18,11 @@ import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -40,11 +43,11 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
         LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
         lqw.eq(SysDept::getDelFlag, 0);
         lqw.likeRight(SysDept::getId, deptId);
-        lqw.orderByDesc(SysDept::getOrderNum);
+        lqw.orderByAsc(SysDept::getOrderNum);
         List<SysDept> sysDeptList = list(lqw);
         //判断机构来源条件 进行遍历
-        if(null != managementSource && !"undefined".equals(managementSource) && !"".equals(managementSource)){
-            lqw.eq(SysDept::getManagementSource,managementSource);
+        if (null != managementSource && !"undefined".equals(managementSource) && !"".equals(managementSource)) {
+            lqw.eq(SysDept::getManagementSource, managementSource);
             //条件
             List<SysDept> conditionList = list(lqw);
             Map<String, List<SysDept>> conditionMap = conditionList.stream().collect(Collectors.groupingBy(SysDept::getParentId));
@@ -56,11 +59,11 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
             List<SysDept> result = new ArrayList<>();
             //再查前4层
             int level = 5;
-            while(level > 0){
+            while (level > 0) {
                 List<SysDept> resultTmp = recursion(sysDeptList, conditionMap);
-                if(resultTmp.size() == 0){
+                if (resultTmp.size() == 0) {
                     break;
-                }else{
+                } else {
                     result.clear();
                     result.addAll(resultTmp);
                 }
@@ -68,7 +71,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
                 level--;
             }
             sysDeptList = result;
-        }else{
+        } else {
             Map<String, List<SysDept>> map = sysDeptList.stream().collect(Collectors.groupingBy(SysDept::getParentId));
             sysDeptList.forEach(i -> i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>())));
             sysDeptList = map.get(sysDept.getParentId());
@@ -79,9 +82,9 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
     private List<SysDept> recursion(List<SysDept> sysDeptList, Map<String, List<SysDept>> conditionMap) {
         List<SysDept> result = new ArrayList<>();
         sysDeptList.forEach(i ->
-                conditionMap.forEach((key,value) -> {
+                conditionMap.forEach((key, value) -> {
                     if (i.getId().equals(key)) {
-                        if(i.getChildren() == null){
+                        if (i.getChildren() == null) {
                             i.setChildren(new ArrayList<>());
                         }
                         i.getChildren().addAll(value);
@@ -89,6 +92,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
                     }
                 })
         );
+        result.sort(Comparator.comparing(SysDept::getOrderNum));
         return result;
     }
 
@@ -104,6 +108,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
     }
 
     @Override
+    @Transactional
     public void addDept(SysDeptVo sysDeptVo) {
         SysDept sysDept = new SysDept();
         BeanUtils.copyProperties(sysDeptVo, sysDept);
@@ -154,10 +159,57 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
             sysDept.setManagementSource(parentDept.getManagementSource());
         }
 
+        // 查询当前部门序号是否存在
+        LambdaQueryWrapper<SysDept> qw = new LambdaQueryWrapper<>();
+        qw.eq(SysDept::getDelFlag, 0);  // 删除标志为未删除
+        qw.eq(SysDept::getParentId, sysDept.getParentId()); // 父级部门ID相同
+        qw.eq(SysDept::getOrderNum, sysDept.getOrderNum());  // 排序号相同
+        boolean exists = baseMapper.exists(qw);
+
+        if (exists) {
+            // 如果存在,查询该父级部门下排序号大于当前部门的部门列表
+            LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
+            lqw.eq(SysDept::getDelFlag, 0); // 删除标志为未删除
+            lqw.eq(SysDept::getParentId, sysDept.getParentId()); // 父级部门ID相同
+            lqw.ge(SysDept::getOrderNum, sysDept.getOrderNum());  // 排序号大于等于当前部门
+            List<SysDept> sysDeptList = list(lqw);
+            // 更新这些部门的排序号
+            sysDeptList.forEach(i -> {
+                i.setOrderNum(i.getOrderNum() + 1);
+                updateById(i);
+            });
+        }
+
         boolean b = save(sysDept);
         AssertionUtils.isSucceed(b, "删除失败");
     }
 
+    @Override
+    @Transactional
+    public HttpResult updateDept(SysDept record) {
+        // 查询当前部门序号是否存在
+        LambdaQueryWrapper<SysDept> qw = new LambdaQueryWrapper<>();
+        qw.eq(SysDept::getDelFlag, 0);  // 删除标志为未删除
+        qw.eq(SysDept::getParentId, record.getParentId()); // 父级部门ID相同
+        qw.eq(SysDept::getOrderNum, record.getOrderNum());  // 排序号相同
+        boolean exists = baseMapper.exists(qw);
+
+        if (exists){
+            // 如果存在,查询该父级部门下排序号大于当前部门的部门列表
+            LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
+            lqw.eq(SysDept::getDelFlag, 0); // 删除标志为未删除
+            lqw.eq(SysDept::getParentId, record.getParentId()); // 父级部门ID相同
+            lqw.ge(SysDept::getOrderNum, record.getOrderNum());  // 排序号大于等于当前部门
+            List<SysDept> sysDeptList = list(lqw);
+            sysDeptList.forEach(i -> {
+                i.setOrderNum(i.getOrderNum() + 1);
+                updateById(i);
+            });
+        }
+        baseMapper.updateById(record);
+        return HttpResult.ok();
+    }
+
 
     @Override
     public void deleteDept(String deptId) {
@@ -186,7 +238,6 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
     }
 
 
-
     public String findMaxDeptId(String deptId) {
         if (deptId == null) return "";
         String result = "00";

+ 22 - 17
src/main/java/com/ydtech/modules/admin/service/impl/SysUserAccountServiceImpl.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.constants.MoneyAttrConstants;
+import com.ydtech.modules.admin.constants.WithdrawTypeConstants;
 import com.ydtech.modules.admin.dao.SysUserAccountMapper;
 import com.ydtech.modules.admin.model.po.SysAmountAuditingEntity;
 import com.ydtech.modules.admin.model.po.SysUserAccount;
@@ -65,7 +67,6 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
         SysUserAccount newAccount = new SysUserAccount();
 
         if (ObjectUtils.isNotEmpty(sysUserAccountEntity)) {
-
             sysUserAccountEntity.setHandlingFee(sysUserAccount.getHandlingFee().add(sysUserAccountEntity.getHandlingFee()));
             sysUserAccountEntity.setDocumentary(sysUserAccount.getDocumentary().add(sysUserAccountEntity.getDocumentary()));
             sysUserAccountEntity.setPromotion(sysUserAccount.getPromotion().add(sysUserAccountEntity.getPromotion()));
@@ -74,14 +75,15 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
             }
             baseMapper.updateById(sysUserAccountEntity);
         } else {
-            newAccount.setUserId(userId);
-            newAccount.setDocumentary(sysUserAccount.getDocumentary());
-            newAccount.setPromotion(sysUserAccount.getPromotion());
-            newAccount.setHandlingFee(sysUserAccount.getHandlingFee());
+            sysUserAccountEntity = new SysUserAccount();
+            sysUserAccountEntity.setUserId(userId);
+            sysUserAccountEntity.setDocumentary(sysUserAccount.getDocumentary());
+            sysUserAccountEntity.setPromotion(sysUserAccount.getPromotion());
+            sysUserAccountEntity.setHandlingFee(sysUserAccount.getHandlingFee());
             if (StringUtils.isNotEmpty(sysUserAccount.getDocumentaryStatus())) {
-                newAccount.setDocumentaryStatus(sysUserAccount.getDocumentaryStatus());
+                sysUserAccountEntity.setDocumentaryStatus(sysUserAccount.getDocumentaryStatus());
             }
-            baseMapper.insert(newAccount);
+            baseMapper.insert(sysUserAccountEntity);
         }
 
         if (StringUtils.isNotEmpty(sysUserAccount.getDocumentaryStatus())) {
@@ -89,37 +91,40 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
             SysUserAccountHistory sysUserAccountHistory = new SysUserAccountHistory();
             sysUserAccountHistory.setUserId(sysUserAccount.getUserId());
             sysUserAccountHistory.setDocumentary(Integer.valueOf(sysUserAccount.getDocumentaryStatus()));
-            sysUserAccountHistory.setSuborder(sysUserAccountEntity.getSuborderId());
+            sysUserAccountHistory.setSuborder(sysUserAccount.getSuborderId());
+            //跟单费
             if(sysUserAccount.getDocumentary()!=null && sysUserAccount.getDocumentary().compareTo(BigDecimal.ZERO)!=0){
                 sysUserAccountHistory.setAmount(sysUserAccount.getDocumentary());
-                sysUserAccountHistory.setProperty(2);
-                if("2".equals(sysUserAccount.getDocumentaryStatus())){ // 收入  相加
-                    sysUserAccountHistory.setSurplusAmount(sysUserAccount.getDocumentary().add(newSysAccount.getDocumentary()));
+                sysUserAccountHistory.setProperty(MoneyAttrConstants.M_2.getCode());
+                if(WithdrawTypeConstants.WT_2.getCode().equals(sysUserAccount.getDocumentaryStatus())){ // 收入  相加
+                    sysUserAccountHistory.setSurplusAmount(sysUserAccountEntity.getDocumentary());
                 }else {
                     BigDecimal subtract = newSysAccount.getDocumentary().subtract(sysUserAccount.getDocumentary());
                     sysUserAccountHistory.setSurplusAmount(subtract);
                 }
                 sysUserAccountHistoryService.updayteByUserAccount(sysUserAccountHistory);
             }
+            //手续费
             if(sysUserAccount.getHandlingFee()!=null  &&  sysUserAccount.getHandlingFee().compareTo(BigDecimal.ZERO) !=0){
                 sysUserAccountHistory.setId(null);
                 sysUserAccountHistory.setAmount(sysUserAccount.getHandlingFee());
-                sysUserAccountHistory.setProperty(1);
-                if("2".equals(sysUserAccount.getDocumentaryStatus())){ // 收入  相加
-                    sysUserAccountHistory.setSurplusAmount(sysUserAccount.getHandlingFee().add(newSysAccount.getHandlingFee()));
+                sysUserAccountHistory.setProperty(MoneyAttrConstants.M_1.getCode());
+                if(WithdrawTypeConstants.WT_2.getCode().equals(sysUserAccount.getDocumentaryStatus())){ // 收入  相加
+                    sysUserAccountHistory.setSurplusAmount(sysUserAccountEntity.getHandlingFee());
                 }else {
                     BigDecimal subtract = newSysAccount.getHandlingFee().subtract(sysUserAccount.getHandlingFee());
                     sysUserAccountHistory.setSurplusAmount(subtract);
                 }
                 sysUserAccountHistoryService.updayteByUserAccount(sysUserAccountHistory);
             }
+            //推广费
             if(sysUserAccount.getPromotion() !=null && sysUserAccount.getPromotion().compareTo(BigDecimal.ZERO) !=0){
                 sysUserAccountHistory.setId(null);
 
                 sysUserAccountHistory.setAmount(sysUserAccount.getPromotion());
-                sysUserAccountHistory.setProperty(3);
-                if("2".equals(sysUserAccount.getDocumentaryStatus())){ // 收入  相加
-                    sysUserAccountHistory.setSurplusAmount(sysUserAccount.getPromotion().add(newSysAccount.getPromotion()));
+                sysUserAccountHistory.setProperty(MoneyAttrConstants.M_3.getCode());
+                if(WithdrawTypeConstants.WT_2.getCode().equals(sysUserAccount.getDocumentaryStatus())){ // 收入  相加
+                    sysUserAccountHistory.setSurplusAmount(sysUserAccountEntity.getPromotion());
                 }else {
                     BigDecimal subtract = newSysAccount.getPromotion().subtract(sysUserAccount.getPromotion());
                     sysUserAccountHistory.setSurplusAmount(subtract);

+ 122 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserLinkPtlAgreementServiceImpl.java

@@ -0,0 +1,122 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysUserLinkPtlAgreementMapper;
+import com.ydtech.modules.admin.dao.SysUserMapper;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
+import com.ydtech.modules.admin.model.po.SysUserLinkPtlAgreement;
+import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
+import com.ydtech.modules.admin.model.vo.SysUserLinkPtlAgreementAddVo;
+import com.ydtech.modules.admin.model.vo.SysUserLinkPtlAgreementVo;
+import com.ydtech.modules.admin.service.SysUserLinkPtlAgreementService;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:52
+ *  @Description: 用户关联协议表
+ */
+@Service
+public class SysUserLinkPtlAgreementServiceImpl extends ServiceImpl<SysUserLinkPtlAgreementMapper, SysUserLinkPtlAgreement> implements SysUserLinkPtlAgreementService {
+
+
+    @Autowired
+    private SysUserLinkPtlAgreementMapper sysUserLinkPtlAgreementMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private PtlAgreementService ptlAgreementService;
+
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 15:13
+     *  @Description:  分页
+     */
+    @Override
+    public BasePageResult<SysUserLinkPtlAgreementDto> queryPage(SysUserLinkPtlAgreementVo sysUserLinkPtlAgreementVo) {
+        Page<SysUserLinkPtlAgreementDto> page = new Page<>(sysUserLinkPtlAgreementVo.getPageNum(),
+                sysUserLinkPtlAgreementVo.getPageSize());
+        Page<SysUserLinkPtlAgreementDto> sysUserLinkPtlAgreementDtoBasePageResult = sysUserLinkPtlAgreementMapper.queryPage(page, sysUserLinkPtlAgreementVo);
+        return  new BasePageResult<>(sysUserLinkPtlAgreementVo.getPageNum(), page.getSize(), sysUserLinkPtlAgreementDtoBasePageResult.getTotal(), page.getPages(),
+                sysUserLinkPtlAgreementDtoBasePageResult.getRecords());
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 15:13
+     *  @Description: 添加修改
+     */
+    @Override
+    public void addOrUpdate(SysUserLinkPtlAgreementAddVo sysUserLinkPtlAgreementAddVo, SysUser user) {
+        String userId = sysUserLinkPtlAgreementAddVo.getUserId();
+        List<Long> ptlAgreementIds = sysUserLinkPtlAgreementAddVo.getPtlAgreementIds();
+        //删除数据重新添加
+        sysUserLinkPtlAgreementMapper.deleteByUserId(userId);
+        List<SysUserLinkPtlAgreement> addList=new ArrayList<SysUserLinkPtlAgreement>();
+        //重新添加
+        if(ptlAgreementIds!=null && ptlAgreementIds.size()>0){
+            for (Long ptlAgreementId : ptlAgreementIds) {
+                SysUserLinkPtlAgreement add=new SysUserLinkPtlAgreement(userId,ptlAgreementId,user.getId(),user.getName(),new Date(),user.getId(),user.getName(),new Date());
+                addList.add(add);
+            }
+        }
+        this.saveBatch(addList);
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:53
+     *  @Description:  通过id删除数据
+     */
+    @Override
+    public void deleteByIds(List<Long> ids) {
+        sysUserLinkPtlAgreementMapper.deleteBatchIds(ids);
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 17:52
+     *  @Description: 查询所有的前线人员
+     */
+    @Override
+    public List<SysUserBaseVO> findUserList() {
+        return sysUserMapper.findQXUserList();
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 18:05
+     *  @Description: 查询所有审核的协议信息
+     */
+    @Override
+    public List<PtlAgreement> findPtlAgreementList() {
+        //预留查询条件后期添加
+        PtlAgreement param =new PtlAgreement();
+        return ptlAgreementService.findCheckAgreementList(param);
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 9:31
+     *  @Description: 通过用户id查询关联的协议列表
+     */
+    @Override
+    public List<SysUserLinkPtlAgreementDto> findPtlAgreementListByUserId(String userId) {
+        return  sysUserLinkPtlAgreementMapper.findPtlAgreementListByUserId(userId);
+    }
+}

+ 319 - 6
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -15,11 +15,9 @@ import com.ydtech.modules.admin.constants.RoleConstants;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
+import com.ydtech.modules.admin.model.dto.QuUserNumDto;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
-import com.ydtech.modules.admin.model.vo.SysUser2Vo;
-import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
-import com.ydtech.modules.admin.model.vo.SysUserInternalVO;
-import com.ydtech.modules.admin.model.vo.SysUserVO;
+import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
@@ -66,6 +64,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Autowired
     private EsmUserImageService esmUserImageService;
 
+    @Autowired
+    private SysAreaService sysAreaService;
 
     @Override
     public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
@@ -78,9 +78,25 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         if (sysUserVO.getAgentFlag() == null) {
             throw new SystemException("必传标识未传递");
         }
-        return sysUserMapper.findUserList(page, sysUserVO);
+        IPage<SysUserBaseVO> userList = sysUserMapper.findUserList(page, sysUserVO);
+        return userList;
     }
 
+    @Override
+    public IPage<SysUserBaseVO> findBackUserList(PageDto<SysUserDto> pageDto) {
+        PageVo<SysUserBaseVO> pageVo = new PageVo();
+        Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize());
+        pageVo.setPageNum(pageDto.getPageNum());
+        pageVo.setPageSize(pageDto.getPageSize());
+
+        SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class);
+        if (sysUserVO.getAgentFlag() == null) {
+            throw new SystemException("必传标识未传递");
+        }
+        return sysUserMapper.findBackUserList(page, sysUserVO);
+    }
+
+
     @Override
     public IPage<QuTeamNum> quTeamNum(QuTeamNumDto quTeamNumDto) {
         //判断必传标识是否为空
@@ -182,7 +198,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
         List<QuTeamNum> collect1 =
                 quTeamNums.stream().skip((quTeamNumDto.getPageNo() - 1) * quTeamNumDto.getPageSize()).limit(quTeamNumDto.getPageSize()).
-                collect(Collectors.toList());
+                        collect(Collectors.toList());
         IPage<QuTeamNum> page = new Page<>(quTeamNumDto.getPageNo(), quTeamNumDto.getPageSize());
         page.setRecords(collect1);
         page.setTotal(quTeamNums.size());
@@ -354,6 +370,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         return super.baseMapper.findByReferrerId(deptId);
     }
 
+    @Override
+    public List<SysUserVO> findListByDeptId(SysUser sysUser) {
+        return super.baseMapper.findListByDeptId(sysUser);
+    }
+
     @Override
     public PageVo gainUserPage(PageDto pageDto) {
 
@@ -679,6 +700,298 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         lqw.eq(SysUser::getDeptId, deptId);
         return list(lqw);
     }
+
+
+    /**
+     * 查找组织结构树,返回所有层级的用户列表,其中每个用户包含其直接下级用户。
+     *
+     * @return 返回组织结构树形式的用户列表,每个用户对象可能包含一个子用户列表。
+     */
+    @Override
+    public List<SysUser> findTree() {
+        //获取领导字段不为空的人的ID
+        List<SysUser> list1 = lambdaQuery().isNotNull(SysUser::getLeaderId).list();
+        if (list1 == null || list1.size() == 0){
+            return new ArrayList<>();
+        }
+
+        List<String> collect1 = list1.stream().map(SysUser::getLeaderId).collect(Collectors.toList());
+
+        //存放1级用户
+        List<SysUser> sysUsers = new ArrayList<>();
+        // 根据上面获取的ID列表,查询所有这些人的直接上级
+        List<SysUser> list2 = lambdaQuery().in(SysUser::getId, collect1).list();
+        // 从查询结果中筛选出没有上级的人员,作为组织结构树的顶层节点
+        for (SysUser sysUser : list2) {
+            if (Objects.isNull(sysUser.getLeaderId())) {
+                sysUsers.add(sysUser);
+            }
+        }
+        // 为每个顶层节点分配其直接下级
+        for (SysUser sysUser : sysUsers) {
+            List<SysUser> chils = new ArrayList<>();
+            // 遍历所有人员,为当前顶层节点找出其所有直接下级
+            for (SysUser user : list2) {
+                if (sysUser.getId().equals(user.getLeaderId())) {
+                    chils.add(user);
+                }
+            }
+            // 将找到的直接下级列表设置到当前顶层节点用户对象中
+            sysUser.setChildren(chils);
+        }
+        return sysUsers;
+    }
+
+
+    /**
+     * 根据部门ID查询后台用户列表。
+     *
+     * @param deptId 部门ID,用于筛选指定部门的用户。
+     * @return 返回一个SysUser类型的列表,包含指定部门的所有后台用户。
+     */
+    @Override
+    public List<SysUser> findBackListByDeptId(String deptId) {
+        return baseMapper.findBackListByDeptId(deptId);
+    }
+
+
+    /**
+     * 查询用户订单数量进行区域统计信息
+     *
+     * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
+     * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
+     */
+    @Override
+    public IPage<QuUserNum> quUserNum(QuUserNumDto quUserNumDto) {
+
+        //获取所有用户
+        List<SysUser> users = list();
+
+        // 根据用户ID查询一级下屬
+        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
+        List<SysUser> usersLevel1 = list(queryWrapper);
+
+        //递归获取1级下属下所有的下属ID
+        List<String> strIds = new ArrayList<>();
+        findChildren(usersLevel1, users, strIds);
+
+        // 根据区域编码和级别查询符合条件的区域
+        LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
+        if (quUserNumDto.getAreaCode() != null && !"".equals(quUserNumDto.getAreaCode())) {
+            String area = quUserNumDto.getAreaCode();
+            switch (quUserNumDto.getLevel()) {
+                case "1": { // 省级查询逻辑
+                    quUserNumDto.setGrouping(4);
+                    String prefix = area.substring(0, 2);
+                    strIds.removeIf(id -> !id.contains("99" + prefix));
+                    quUserNumDto.setLevel("2");
+                    wrapper.eq(SysArea::getLevel, "2");
+                    wrapper.likeRight(SysArea::getAreaCode, prefix);
+                    break;
+                }
+                case "2": {  // 市级查询逻辑
+                    quUserNumDto.setGrouping(6);
+                    String prefix = area.substring(0, 4);
+                    strIds.removeIf(id -> !id.contains("99" + prefix));
+                    quUserNumDto.setLevel("3");
+                    wrapper.eq(SysArea::getLevel, "3");
+                    wrapper.likeRight(SysArea::getAreaCode, prefix);
+                    break;
+                }
+                case "3": {  // 区县级查询逻辑
+                    quUserNumDto.setGrouping(6);
+                    String prefix = area.substring(0, 6);
+                    strIds.removeIf(id -> !id.contains("99" + prefix));
+                    quUserNumDto.setLevel("3");
+                    wrapper.eq(SysArea::getLevel, "3");
+                    wrapper.likeRight(SysArea::getAreaCode, prefix);
+                    break;
+                }
+            }
+        } else { // 默认查询省级区域
+            quUserNumDto.setGrouping(2);
+            quUserNumDto.setLevel("1");
+            wrapper.eq(SysArea::getLevel, "1");
+        }
+
+        // 如果没有查询到用户ID,则直接返回空的分页对象
+        if (strIds.size() == 0) {
+            return new Page<>();
+        }
+
+        // 根据查询条件获取用户数量统计信息
+        quUserNumDto.setUserIds(strIds);
+        List<QuUserNum> userNums = sysUserMapper.getUserNum(quUserNumDto);
+
+        //遍历匹配区域名称
+        List<SysArea> areaList = sysAreaService.list(wrapper);
+
+        // 根据区域名称匹配用户数量统计信息,并构造最终返回的结果列表
+        List<QuUserNum> quUserNums = new ArrayList<>();
+        for (QuUserNum quUserNum : userNums) {
+            for (SysArea sysArea : areaList) {
+                if (!Objects.isNull(sysArea.getAreaCode())) {
+                    // 匹配区域名称
+                    String substring = sysArea.getAreaCode().substring(0, quUserNumDto.getGrouping());
+                    if (quUserNum.getAreaCode().equals(substring)) {
+                        quUserNum.setAreaName(sysArea.getAreaCname());
+                        quUserNums.add(quUserNum);
+                    }
+                }
+            }
+        }
+
+        // 为每个区域生成未匹配到的统计信息
+        for (SysArea sysArea : areaList) {
+            if (exists(quUserNums, sysArea)) {
+                QuUserNum userNum = new QuUserNum();
+                // 设置未匹配到的区域的默认统计信
+                userNum.setAreaName(sysArea.getAreaCname());
+                userNum.setQuoteNum("0");
+                userNum.setSubmitNum("0");
+                userNum.setHasInsuredNum("0");
+                userNum.setTotalSumpremium("0");
+                userNum.setJqPremiumSum("0");
+                userNum.setSyPremiumSum("0");
+                userNum.setTaxaMountSum("0");
+                quUserNums.add(userNum);
+            }
+        }
+        List<QuUserNum> paginate = paginate(quUserNums, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+
+        // 构造返回的分页对象
+        IPage<QuUserNum> recordsPage = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+        recordsPage.setRecords(paginate);
+        recordsPage.setTotal(quUserNums.size());
+        return recordsPage;
+    }
+
+
+
+
+    /**
+     * 查询用户订单数量进行区域统计详细信息
+     *
+     * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
+     * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
+     */
+    @Override
+    public IPage<QuUserNum> getQuUserByCompany(QuUserNumDto quUserNumDto) {
+
+        // 获取系统中的所有用户
+        List<SysUser> users = list();
+
+        // 创建查询包装器,用于查询指定用户ID的用
+        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
+        // 查询指定用户ID的用户,即第一级下属
+        List<SysUser> usersLevel1 = list(queryWrapper);
+
+        // 用于存储所有下属的ID
+        List<String> strIds = new ArrayList<>();
+        // 递归获取第一级下属及其所有下属的ID
+        findChildren(usersLevel1, users, strIds);
+
+        // 如果未指定区域码,返回空分页对
+        if (Objects.isNull(quUserNumDto.getAreaCode())) {
+            return new Page<>();
+        }
+
+        // 根据区域码筛选有效的下属ID
+        strIds.removeIf(id -> !id.contains("99" + quUserNumDto.getAreaCode()));
+
+        // 如果筛选后没有有效的下属ID,返回空分页对象
+        if (strIds.size() == 0) {
+            return new Page<>();
+        }
+
+        // 设置查询条件中的用户ID列表
+        quUserNumDto.setUserIds(strIds);
+
+        // 根据公司和用户ID列表查询用户数量统计信息
+        List<QuUserNum> deptByCompany = sysUserMapper.getUserByCompany(quUserNumDto);
+
+        List<QuUserNum> paginate = paginate(deptByCompany, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+
+        // 创建并设置分页信息
+        IPage<QuUserNum> page = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
+        page.setRecords(paginate);
+        page.setTotal(deptByCompany.size());
+        return page;
+    }
+
+
+    /**
+     * 手动对 QuUserNum 列表进行分页
+     *
+     * @param quUserNums 原始 QuUserNum 数据列表
+     * @param pageNum 期望获取的页码(从 1 开始)
+     * @param pageSize 每页包含的 QuUserNum 数量
+     * @return 对应页码的 QuUserNum 子列表,若输入参数无效则返回空列表
+     */
+    public List<QuUserNum> paginate(List<QuUserNum> quUserNums, int pageNum, int pageSize) {
+        if (quUserNums == null || quUserNums.isEmpty() || pageNum < 1 || pageSize < 1) {
+            return Collections.emptyList();
+        }
+
+        int startIndex = (pageNum - 1) * pageSize;
+        int endIndex = Math.min(startIndex + pageSize, quUserNums.size());
+
+        return quUserNums.subList(startIndex, endIndex);
+    }
+
+
+
+
+    private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
+        for (SysUser sysUser : SysUsers) {
+            List<SysUser> children = new ArrayList<>();
+            for (SysUser user : users) {
+                if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
+                    if (!exists(children, user)) {
+                        children.add(user);
+                        strIds.add(user.getId());
+                    }
+                }
+            }
+            sysUser.setChildren(children);
+//            children.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
+            findChildren(children, users, strIds);
+        }
+    }
+
+    private boolean exists(List<QuUserNum> quUserNums, SysArea sysArea) {
+        boolean exist = true;
+        for (QuUserNum quUserNum1 : quUserNums) {
+            if (quUserNum1.getAreaName().equals(sysArea.getAreaCname())) {
+                exist = false;
+                break;
+            }
+        }
+        return exist;
+    }
+    private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
+        boolean exist = false;
+        for (SysUser user : sysUsers) {
+            if (user.getId().equals(sysUser.getId())) {
+                exist = true;
+            }
+        }
+        return exist;
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/16 15:51
+     *  @Description: 获取待客录入的可选业务员
+     *  查询
+     */
+    @Override
+    public List<SysUserBaseVO> getAllUsersByHospitality(SysUserVOExt sysUserVOExt) {
+        return super.baseMapper.getAllUsersByHospitality(sysUserVOExt);
+    }
+
 }
 
 

+ 17 - 0
src/main/java/com/ydtech/modules/esm/dao/InsOrderSetUserHisMapper.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.esm.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.esm.model.po.InsOrderSetUserHis;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:47
+ *  @Description: 用户关联协议表Dao
+ */
+@Mapper
+public interface InsOrderSetUserHisMapper extends BaseMapper<InsOrderSetUserHis> {
+
+
+}

+ 76 - 0
src/main/java/com/ydtech/modules/esm/model/po/InsOrderSetUserHis.java

@@ -0,0 +1,76 @@
+package com.ydtech.modules.esm.model.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:32
+ *  @Description: 订单转移历史记录表
+ */
+@TableName(value = "ins_order_set_user_his")
+@Data
+@NoArgsConstructor
+public class InsOrderSetUserHis implements Serializable {
+    /***
+     * 主键自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /***
+     * 前线用户ID
+     */
+    @TableField(value = "orderno")
+    private  String orderno;
+    /***
+     * 协议ID
+     */
+    @TableField(value = "quoteno")
+    private String quoteno;
+    /***
+     * 创建人
+     */
+    @TableField(value = "old_operator_id")
+    private String oldOperatorId;
+    /***
+     * 创建人名称
+     */
+    @TableField(value = "new_operator_id")
+    private String newOperatorId;
+    /***
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(value = "create_time")
+    private Date createTime;
+    /***
+     * 修改人名称
+     */
+    @TableField(value = "create_id")
+    private String createId;
+
+    /***
+     * 状态  1.转发  2. 回退
+     */
+    @TableField(value = "status")
+    private String status;
+
+    public InsOrderSetUserHis(String orderno, String quoteno, String oldOperatorId, String newOperatorId, Date createTime, String createId,String status) {
+        this.orderno = orderno;
+        this.quoteno = quoteno;
+        this.oldOperatorId = oldOperatorId;
+        this.newOperatorId = newOperatorId;
+        this.createTime = createTime;
+        this.createId = createId;
+        this.status = status;
+    }
+}

+ 54 - 0
src/main/java/com/ydtech/modules/esm/model/vo/InsOrderSetUserHisVo.java

@@ -0,0 +1,54 @@
+package com.ydtech.modules.esm.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 15:08
+ *  @Description: 订单操作人设置历史记录表
+ */
+@Data
+@ApiModel
+public class InsOrderSetUserHisVo {
+
+    /***
+     * 主键自增
+     */
+    @ApiModelProperty("主键ID")
+    private Long id;
+    /***
+     * 订单号
+     */
+    @ApiModelProperty(value = "订单号")
+    private  String orderno;
+    /***
+     * 报价单号
+     */
+    @ApiModelProperty(value = "报价单号")
+    private String quoteno;
+    /***
+     * 原操作人
+     */
+    @ApiModelProperty(value = "原操作人")
+    private String oldOperatorId;
+    /***
+     * 现操作人
+     */
+    @ApiModelProperty(value = "现操作人")
+    private String newOperatorId;
+    /***
+     * 操作时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "操作时间")
+    private String createTime;
+    /***
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createId;
+}

+ 1 - 0
src/main/java/com/ydtech/modules/esm/service/EsmUserReferrerService.java

@@ -58,6 +58,7 @@ public interface EsmUserReferrerService extends IService<EsmUserReferrer> {
     public Page<SysUser> getUserPage(Page page, SysUserDto dto);
 
     public Page<QueryChannel> getQueryChannelPage(Page page, QueryChannel queryChannel);
+
 }
 
 

+ 14 - 0
src/main/java/com/ydtech/modules/esm/service/InsOrderSetUserHisService.java

@@ -0,0 +1,14 @@
+package com.ydtech.modules.esm.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.esm.model.po.InsOrderSetUserHis;
+
+public interface InsOrderSetUserHisService extends IService<InsOrderSetUserHis> {
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 15:12
+     *  @Description: 修改
+     */
+    void addOrUpdate(InsOrderSetUserHis insOrderSetUserHis);
+}

+ 2 - 1
src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java

@@ -51,13 +51,14 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
     // 递归查找节点的所有父级节点
     public List<EsmUserReferrer> findParents(String userId) {
         List<EsmUserReferrer> referrers = new ArrayList<>();
+
         EsmUserReferrer esmUserReferrer = esmUserReferrerService.getById(userId);
         //找不到用户的推荐关系
         if(esmUserReferrer == null){
             return null;
         }
         List<EsmUserReferrer> esmUserReferrers = esmUserReferrerService.list(new LambdaQueryWrapper<EsmUserReferrer>().eq(EsmUserReferrer::getAffiliation, esmUserReferrer.getAffiliation()));
-        findParentsRecursive(userId, esmUserReferrers, referrers);
+        findParentsRecursive(esmUserReferrer.getReferrerId(), esmUserReferrers, referrers);
         return referrers;
     }
 

+ 37 - 0
src/main/java/com/ydtech/modules/esm/service/impl/InsOrderSetUserHisServiceImpl.java

@@ -0,0 +1,37 @@
+package com.ydtech.modules.esm.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.esm.dao.InsOrderSetUserHisMapper;
+import com.ydtech.modules.esm.model.po.InsOrderSetUserHis;
+import com.ydtech.modules.esm.service.InsOrderSetUserHisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/4/15 14:52
+ *  @Description: 用户关联协议表
+ */
+@Service
+public class InsOrderSetUserHisServiceImpl extends ServiceImpl<InsOrderSetUserHisMapper, InsOrderSetUserHis> implements InsOrderSetUserHisService {
+
+
+    @Autowired
+    private InsOrderSetUserHisMapper insOrderSetUserHisMapper;
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/4/15 15:13
+     *  @Description: 插入历史记录表中
+     */
+    @Override
+    public void addOrUpdate(InsOrderSetUserHis insOrderSetUserHis) {
+        if(insOrderSetUserHis.getId()!=null){
+            insOrderSetUserHisMapper.updateById(insOrderSetUserHis);
+        }else{
+            insOrderSetUserHisMapper.insert(insOrderSetUserHis);
+        }
+    }
+
+}

+ 55 - 0
src/main/java/com/ydtech/modules/fee/dto/vo/DeptManagerFee.java

@@ -0,0 +1,55 @@
+package com.ydtech.modules.fee.dto.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 部门管理费用
+ */
+@Data
+public class DeptManagerFee {
+    @ApiModelProperty("险种")
+    private String insuranceType;
+
+    @ApiModelProperty("总管理比例")
+    private BigDecimal deptManagerRadio;
+
+    @ApiModelProperty("总管理费")
+    private BigDecimal deptManagerFee;
+
+    @ApiModelProperty("一级管理费比例")
+    private BigDecimal deptManagerRadioLevel1;
+
+    @ApiModelProperty("二级管理费比例")
+    private BigDecimal deptManagerRadioLevel2;
+
+    @ApiModelProperty("三级管理费比例")
+    private BigDecimal deptManagerRadioLevel3;
+
+    @ApiModelProperty("四级管理费比例")
+    private BigDecimal deptManagerRadioLevel4;
+
+    @ApiModelProperty("五级管理费比例")
+    private BigDecimal deptManagerRadioLevel5;
+
+    @ApiModelProperty("一级管理费")
+    private BigDecimal deptManagerFeeLevel1;
+
+    @ApiModelProperty("二级管理费")
+    private BigDecimal deptManagerFeeLevel2;
+
+    @ApiModelProperty("三级管理费")
+    private BigDecimal deptManagerFeeLevel3;
+
+    @ApiModelProperty("四级管理费")
+    private BigDecimal deptManagerFeeLevel4;
+
+    @ApiModelProperty("五级管理费")
+    private BigDecimal deptManagerFeeLevel5;
+
+
+
+}

+ 31 - 0
src/main/java/com/ydtech/modules/fee/dto/vo/EntranceFee.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.fee.dto.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 入口费用
+ */
+@Data
+public class EntranceFee {
+    @ApiModelProperty("险种")
+    private String insuranceType;
+    @ApiModelProperty("保费")
+    private BigDecimal premium;
+    @ApiModelProperty("总比例")
+    private BigDecimal totalProportion;
+    @ApiModelProperty("总费用")
+    private BigDecimal totalAmount;
+    @ApiModelProperty("手续费比例")
+    private BigDecimal superviseCosts;
+    @ApiModelProperty("手续费")
+    private BigDecimal sySuperviseCostsPremiums;
+    @ApiModelProperty("跟单比例")
+    private BigDecimal otherCostsProportion;
+    @ApiModelProperty("跟单费")
+    private BigDecimal otherCostsPremiums;
+    @ApiModelProperty("出口手续费比例")
+    private BigDecimal exportSuperviseCosts;
+}

+ 27 - 0
src/main/java/com/ydtech/modules/fee/dto/vo/ExportFee.java

@@ -0,0 +1,27 @@
+package com.ydtech.modules.fee.dto.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 出口费用
+ */
+@Data
+public class ExportFee {
+    @ApiModelProperty("险种")
+    private String insuranceType;
+    @ApiModelProperty("总比例")
+    private BigDecimal totalProportion;
+    @ApiModelProperty("总费用")
+    private BigDecimal totalAmount;
+    @ApiModelProperty("手续费比例")
+    private BigDecimal superviseCosts;
+    @ApiModelProperty("手续费")
+    private BigDecimal superviseCostsPremiums;
+    @ApiModelProperty("跟单比例")
+    private BigDecimal otherCostsProportion;
+    @ApiModelProperty("跟单费")
+    private BigDecimal otherCostsPremiums;
+}

+ 46 - 0
src/main/java/com/ydtech/modules/fee/dto/vo/RetailStoreFee.java

@@ -0,0 +1,46 @@
+package com.ydtech.modules.fee.dto.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 分销费用
+ */
+@Data
+public class RetailStoreFee {
+    @ApiModelProperty("总分销比例")
+    private BigDecimal retailStoreRadio;
+
+    @ApiModelProperty("总分销费用")
+    private BigDecimal retailStoreFee;
+
+    @ApiModelProperty("一级分销比例")
+    private BigDecimal retailStoreRadioLevel1;
+
+    @ApiModelProperty("二级分销比例")
+    private BigDecimal retailStoreRadioLevel2;
+
+    @ApiModelProperty("三级分销比例")
+    private BigDecimal retailStoreRadioLevel3;
+
+    @ApiModelProperty("一级分销费")
+    private BigDecimal retailStoreFeeLevel1;
+
+    @ApiModelProperty("二级分销费")
+    private BigDecimal retailStoreFeeLevel2;
+
+    @ApiModelProperty("三级分销费")
+    private BigDecimal retailStoreFeeLevel3;
+
+    @ApiModelProperty("一级分销用户id")
+    private String retailStoreUserIdLevel1;
+
+    @ApiModelProperty("二级分销用户id")
+    private String retailStoreUserIdLevel2;
+
+    @ApiModelProperty("三级分销用户id")
+    private String retailStoreUserIdLevel3;
+
+}

+ 55 - 19
src/main/java/com/ydtech/modules/fee/dto/vo/RuleAttrMappingVo.java

@@ -1,16 +1,27 @@
 package com.ydtech.modules.fee.dto.vo;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ydtech.constants.enums.InsurKind;
-import com.ydtech.modules.order.entity.po.InsOrdersCarInfo;
-import com.ydtech.modules.order.entity.po.InsOrdersCarUserInfo;
+import com.ydtech.constants.enums.dict.insurance.VehicleType;
+import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
-import com.ydtech.modules.order.entity.po.InsOrdersKind;
+import com.ydtech.modules.order.entity.api.dajia.constants.TypeVehicleMapping;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.regex.Pattern;
 
 /**
@@ -31,9 +42,10 @@ public class RuleAttrMappingVo {
         this.value = value;
     }
 
-    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsAreaCompany insAreaCompany, InsOrders insOrders) {
+    public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsAreaCompany insAreaCompany, InsOrders insOrders,
+                                                                   List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList, PtlNewCarJudgeRules carJudgeRule) {
         List<RuleAttrMappingVo> ruleAttrMappingVoList = new ArrayList<>();
-        InsOrdersCarInfo carInfo = insOrders.getCarinfo();
+        CarInfoVo carInfo = insOrders.getCarinfo().toJavaObject(CarInfoVo.class);
         //车牌号
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("LicenseNo", carInfo.getLicenseNo()));
         //品牌型号
@@ -43,13 +55,13 @@ public class RuleAttrMappingVo {
         //新车购置价
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("PurchasePriceofNewVehicle", carInfo.getPurchasePrice()));
         //车辆用途
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NatureOfUse", carInfo.getVehicleUse()));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NatureOfUse", TypeVehicleMapping.getByCode(carInfo.getVehicleUse())));
         //车辆种类
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarType", carInfo.getCimodelclass()));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarType", VehicleType.getByCode(carInfo.getCimodelclass())));
         //核定载质量
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthorizedLoadWeight", carInfo.getLimitLoad()));
         //整备质量
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CurbWeight", carInfo.getVehicleWeight()));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CurbWeight", carInfo.getVehicleweight()));
         //能源类型
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewEnergy", carInfo.getEnergyType()));
         //注册日期
@@ -57,7 +69,31 @@ public class RuleAttrMappingVo {
         //是否过户
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("TransferVehicle", carInfo.isTransferFlag() ? "1" : "0"));
         //是否新车
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewAndOldCars", carInfo.isNoLicenseFlag() ? "1" : "0"));
+        //使用注册日期算出自然月 然后判断是否是新旧车
+        LocalDate registrationDate = LocalDate.parse(carInfo.getRegisterDate());
+        LocalDate currentDate = LocalDate.now();
+        PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(x -> x.getAttrCode().equals("NewAndOldCars")).findFirst().get();
+        boolean isNoLicenseFlag = false;
+        if(carJudgeRule != null)
+        {
+            if(carJudgeRule.getUnitTypeCode().equals("天")){
+                long days = ChronoUnit.DAYS.between(registrationDate, currentDate);
+                if(days < Integer.parseInt(carJudgeRule.getUnitTypeValue()))
+                {
+                    isNoLicenseFlag = true;
+                }
+            }
+            if(carJudgeRule.getUnitTypeCode().equals("月")){
+                long months = ChronoUnit.MONTHS.between(registrationDate, currentDate);
+                if(months < Integer.parseInt(carJudgeRule.getUnitTypeValue()))
+                {
+                    isNoLicenseFlag = true;
+                }
+            }
+        }
+
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewAndOldCars", isNoLicenseFlag ? "1" : "0"));
+
         //发证日期
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("DateofIssuance", carInfo.getIssueDate()));
         //车长
@@ -66,33 +102,33 @@ public class RuleAttrMappingVo {
 //       ruleAttrMappingVoList.add(new RuleAttrMappingVo("RenewalofInsurance", carInfo.isTransferFlagBi() ? "1"));
 
 
-        InsOrdersCarUserInfo ownerInfo = insOrders.getOwnerinfo();
+        CustomerInfoVo ownerInfo = insOrders.getOwnerinfo().toJavaObject(CustomerInfoVo.class);
         //车主 证件号码(前6位)
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersIDNumber", ownerInfo.getIdentifyNumber().substring(0, 6)));
         //车主 年龄
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersAge", ownerInfo.getAge()));
         //车主 性别
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersSex", ownerInfo.getGender()));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersSex", ownerInfo.getGender().equals("男") ? "1" : "2"));
         //车主 姓名
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnerName", ownerInfo.getName()));
 
-        InsOrdersCarUserInfo policyHolderInfo = insOrders.getApplyinfo();
+        CustomerInfoVo policyHolderInfo = insOrders.getApplyinfo().toJavaObject(CustomerInfoVo.class);
         //投保人 证件号码(前6位)
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantIDNumber", policyHolderInfo.getIdentifyNumber().substring(0, 6)));
         //投保人 年龄
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantAge", policyHolderInfo.getAge()));
         //投保人 性别
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantSex", policyHolderInfo.getGender()));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantSex", policyHolderInfo.getGender().equals("男") ? "1" : "2"));
 
-        InsOrdersCarUserInfo insuredPersonInfo = insOrders.getInsureinfo();
+        CustomerInfoVo insuredPersonInfo = insOrders.getInsureinfo().toJavaObject(CustomerInfoVo.class);
         //被保人 证件号码(前6位)
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredIDNumber", insuredPersonInfo.getIdentifyNumber().substring(0, 6)));
         //被保人 年龄
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredAge", insuredPersonInfo.getAge()));
         //被保人 性别
-        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredSex", insuredPersonInfo.getGender()));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredSex", insuredPersonInfo.getGender().equals("男") ? "1" : "2"));
 
-        List<InsOrdersKind> kindInfoVos = insOrders.getKing();
+        List<KindInfoVo> kindInfoVos = insOrders.getKing().toJavaList(KindInfoVo.class);
         //险别信息
         kindInfoVos.forEach(kindInfoVo -> {
             //机动车损失险
@@ -168,11 +204,11 @@ public class RuleAttrMappingVo {
         //非车险
         ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonMotorInsurance", String.valueOf(insAreaCompany.getJypremium())));
         //总折扣率
-//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalDiscountRate", String.valueOf(insAreaCompany.())));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalDiscountRate", String.valueOf(insAreaCompany.getTotalAdjustRate())));
         //交强折扣
-//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceDiscount", String.valueOf(quoteRespVo.getJqAdjustRate())));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceDiscount", String.valueOf(insAreaCompany.getJqAdjustRate())));
         //商业折扣
-//        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(quoteRespVo.getSyAdjustRate())));
+        ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(insAreaCompany.getSyAdjustRate())));
         //数值型总评分
         Pattern pattern = Pattern.compile("[0-9]*");
         if (insAreaCompany.getScore() != null) {

+ 60 - 0
src/main/java/com/ydtech/modules/fee/service/CostsCalcService.java

@@ -0,0 +1,60 @@
+package com.ydtech.modules.fee.service;
+
+
+import com.ydtech.modules.fee.dto.vo.DeptManagerFee;
+import com.ydtech.modules.fee.dto.vo.EntranceFee;
+import com.ydtech.modules.fee.dto.vo.ExportFee;
+import com.ydtech.modules.fee.dto.vo.RetailStoreFee;
+import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
+import com.ydtech.modules.order.entity.vo.QueryOrderFeeVo;
+
+import java.math.BigDecimal;
+
+/**
+ * 该类中只要包含费用的一些相关接口
+ * 跟单费用的获取、跟单费用的拆分等
+ */
+public interface CostsCalcService {
+
+    /**
+     * 计算交强入口费用
+     * @param insuranceType  险种
+     * @param jqPremium  总交强保费  去税保费
+     * @param feeRadio  手续费比例
+     * @Param documentFeeRadio 跟单比例
+     * @return
+     */
+    EntranceFee getEntranceFee(String insuranceType, BigDecimal jqPremium, BigDecimal feeRadio, BigDecimal documentFeeRadio);
+
+    /**
+     * 获取机构管理费
+     * @param insuranceType  险种
+     * @param premium   保险费用
+     * @param deptRadioLevel1 一级机构管理费比例
+     * @param deptRadioLevel2 二级机构管理费比例
+     * @param deptRadioLevel3 三级机构管理费比例
+     * @param deptRadioLevel4 四级机构管理费比例
+     * @param deptRadioLevel5 五级机构管理费比例
+     * @return
+     */
+    DeptManagerFee getDeptManagerFee(String insuranceType, BigDecimal premium, BigDecimal deptRadioLevel1, BigDecimal deptRadioLevel2, BigDecimal deptRadioLevel3, BigDecimal deptRadioLevel4, BigDecimal deptRadioLevel5);
+
+    /**
+     * 分销费用计算
+     * @param userId   出单用户id
+     * @param sumPremium   总保费
+     * @return
+     */
+    RetailStoreFee getRetailStoreFee(String userId,BigDecimal sumPremium);
+
+    /**
+     * 获取出口费用
+     * @param insuranceType 险种
+     * @param entranceFee 入口费用
+     * @param deptManagerFee 部门管理费用
+     * @param retailStoreFee 分销费用
+     * @param exportProceduresRadio 出口手续费比例
+     * @return
+     */
+    ExportFee getExportFee(String insuranceType,EntranceFee entranceFee,DeptManagerFee deptManagerFee, RetailStoreFee retailStoreFee,BigDecimal exportProceduresRadio);
+}

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

@@ -21,7 +21,7 @@ public interface FeeRuleSchemeService {
      * @param agreementId
      * @param businessNo
      */
-    public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId,String businessNo);
+//    public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId,String businessNo);
 
     /**
      * 查询费用明细

+ 178 - 0
src/main/java/com/ydtech/modules/fee/service/impl/CostsCalServiceImpl.java

@@ -0,0 +1,178 @@
+package com.ydtech.modules.fee.service.impl;
+
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.esm.model.EsmRetail;
+import com.ydtech.modules.esm.model.EsmUserReferrer;
+import com.ydtech.modules.esm.service.EsmRetailService;
+import com.ydtech.modules.esm.service.EsmUserReferrerService;
+import com.ydtech.modules.fee.dto.FeeFactorInfoDto;
+import com.ydtech.modules.fee.dto.FeeSchemeReqDto;
+import com.ydtech.modules.fee.dto.FeeSchemeResDto;
+import com.ydtech.modules.fee.dto.vo.DeptManagerFee;
+import com.ydtech.modules.fee.dto.vo.EntranceFee;
+import com.ydtech.modules.fee.dto.vo.ExportFee;
+import com.ydtech.modules.fee.dto.vo.RetailStoreFee;
+import com.ydtech.modules.fee.service.CostsCalcService;
+import com.ydtech.modules.fee.service.FeeRuleSchemeService;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.entity.InsCopyFeeOrder;
+import com.ydtech.modules.order.entity.InsFeeOrder;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsCopyFeeOrderService;
+import com.ydtech.modules.order.service.InsFeeOrderService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules;
+import com.ydtech.modules.protocol.service.*;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 费用接口中相关功能的实现类
+ */
+@Service
+public class CostsCalServiceImpl implements CostsCalcService {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private EsmRetailService esmRetailService;
+
+    @Autowired
+    private EsmUserReferrerService esmUserReferrerService;
+
+    @Override
+    public EntranceFee getEntranceFee(String insuranceType, BigDecimal jqPremium, BigDecimal feeRadio, BigDecimal documentFeeRadio) {
+        EntranceFee entranceFee = new EntranceFee();
+        entranceFee.setInsuranceType(insuranceType);
+        entranceFee.setPremium(jqPremium);
+        entranceFee.setTotalProportion(feeRadio.add(documentFeeRadio));
+        entranceFee.setSuperviseCosts(feeRadio);
+        entranceFee.setSySuperviseCostsPremiums(jqPremium.multiply(feeRadio.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        entranceFee.setOtherCostsProportion(documentFeeRadio);
+        entranceFee.setOtherCostsPremiums(jqPremium.multiply(documentFeeRadio.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        entranceFee.setTotalAmount(entranceFee.getSySuperviseCostsPremiums().add(entranceFee.getOtherCostsPremiums()));
+        entranceFee.setExportSuperviseCosts(BigDecimal.ZERO);
+        return entranceFee;
+    }
+
+    @Override
+    public DeptManagerFee getDeptManagerFee(String insuranceType, BigDecimal premium, BigDecimal deptRadioLevel1, BigDecimal deptRadioLevel2, BigDecimal deptRadioLevel3, BigDecimal deptRadioLevel4, BigDecimal deptRadioLevel5) {
+        DeptManagerFee deptManagerFee = new DeptManagerFee();
+        deptManagerFee.setInsuranceType(insuranceType);
+        deptManagerFee.setDeptManagerRadioLevel1(deptRadioLevel1);
+        deptManagerFee.setDeptManagerRadioLevel2(deptRadioLevel2);
+        deptManagerFee.setDeptManagerRadioLevel3(deptRadioLevel3);
+        deptManagerFee.setDeptManagerRadioLevel4(deptRadioLevel4);
+        deptManagerFee.setDeptManagerRadioLevel5(deptRadioLevel5);
+        deptManagerFee.setDeptManagerRadio(deptRadioLevel1.add(deptRadioLevel2).add(deptRadioLevel3).add(deptRadioLevel4).add(deptRadioLevel5));
+
+        deptManagerFee.setDeptManagerFeeLevel1(premium.multiply(deptRadioLevel1.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        deptManagerFee.setDeptManagerFeeLevel2(premium.multiply(deptRadioLevel2.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        deptManagerFee.setDeptManagerFeeLevel3(premium.multiply(deptRadioLevel3.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        deptManagerFee.setDeptManagerFeeLevel4(premium.multiply(deptRadioLevel4.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        deptManagerFee.setDeptManagerFeeLevel5(premium.multiply(deptRadioLevel5.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        deptManagerFee.setDeptManagerFee(premium.multiply(deptManagerFee.getDeptManagerRadio().divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
+        return deptManagerFee;
+    }
+
+    @Override
+    public RetailStoreFee getRetailStoreFee(String userId,BigDecimal sumPremium) {
+
+        RetailStoreFee retailStoreFee = new RetailStoreFee();
+        //计算分销费用
+        SysUser sysUser = sysUserService.findByUserId(userId);
+
+        //获取分销比例
+        List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
+                new Object[]{sysUser.getDeptId()});
+
+
+        if (esmRetailList != null && !esmRetailList.isEmpty()) {
+            EsmRetail esmRetail = esmRetailList.get(0);
+            //用户分销人员id
+            List<EsmUserReferrer> parents = esmUserReferrerService.findParents(sysUser.getId());
+            if (esmRetail != null) {
+//                BigDecimal sumPremium = insFeeOrderNew.getJqPremium().add(insFeeOrderNew.getSyPremium()).add(insFeeOrderNew.getNoPremium());
+                if (Integer.parseInt(esmRetail.getRetailtype()) >= 3) {
+                    retailStoreFee.setRetailStoreRadioLevel1(new BigDecimal(esmRetail.getDisrate1()));
+                    retailStoreFee.setRetailStoreFeeLevel1(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
+                    if (parents != null && parents.size() > 2) {
+                        retailStoreFee.setRetailStoreUserIdLevel3(parents.get(2).getId());
+                    }
+                }
+                if (Integer.parseInt(esmRetail.getRetailtype()) >= 2) {
+                    retailStoreFee.setRetailStoreRadioLevel2(new BigDecimal(esmRetail.getDisrate2()));
+                    retailStoreFee.setRetailStoreFeeLevel2(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
+                    if (parents != null && parents.size() > 1) {
+                        retailStoreFee.setRetailStoreUserIdLevel2(parents.get(1).getId());
+                    }
+                }
+                if (Integer.parseInt(esmRetail.getRetailtype()) >= 1) {
+                    retailStoreFee.setRetailStoreRadioLevel1(new BigDecimal(esmRetail.getDisrate1()));
+                    retailStoreFee.setRetailStoreFeeLevel1(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
+                    if (parents != null && parents.size() > 0) {
+                        retailStoreFee.setRetailStoreUserIdLevel1(parents.get(0).getId());
+                    }
+                }
+            }
+        }else{
+            retailStoreFee.setRetailStoreFee(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreRadio(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreRadioLevel1(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreRadioLevel2(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreRadioLevel3(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreFeeLevel1(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreFeeLevel2(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreFeeLevel3(BigDecimal.ZERO);
+            retailStoreFee.setRetailStoreUserIdLevel1("");
+            retailStoreFee.setRetailStoreUserIdLevel2("");
+            retailStoreFee.setRetailStoreUserIdLevel3("");
+        }
+        return retailStoreFee;
+    }
+
+    @Override
+    public ExportFee getExportFee(String insuranceType,EntranceFee entranceFee,DeptManagerFee deptManagerFee, RetailStoreFee retailStoreFee,BigDecimal exportProceduresRadio) {
+        ExportFee exportFee = new ExportFee();
+        //计算出口费用
+        //出口比例
+        BigDecimal jqExportRadio = entranceFee.getTotalProportion().subtract(deptManagerFee.getDeptManagerRadio()).subtract(retailStoreFee.getRetailStoreRadio());
+        //出口费用
+        exportFee.setSuperviseCosts(exportProceduresRadio);
+        exportFee.setSuperviseCostsPremiums(entranceFee.getPremium().multiply(exportProceduresRadio.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        //跟单比例
+        exportFee.setOtherCostsProportion(entranceFee.getTotalProportion().subtract(exportProceduresRadio));
+        //跟单费用
+        exportFee.setOtherCostsPremiums(entranceFee.getPremium().multiply(exportFee.getOtherCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        //总比例
+        exportFee.setTotalProportion(exportFee.getSuperviseCosts().add(exportFee.getOtherCostsProportion()));
+        //总费用
+        exportFee.setTotalAmount(exportFee.getSuperviseCostsPremiums().add(exportFee.getOtherCostsPremiums().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        return exportFee;
+    }
+}

+ 536 - 217
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceImpl.java

@@ -29,10 +29,10 @@ import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.protocol.entity.po.*;
 import com.ydtech.modules.protocol.service.*;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
-import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.math.NumberUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -76,9 +76,6 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
     @Resource
     private PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService;
 
-    @Autowired
-    private InsFeeOrderNewService insFeeOrderNewService;
-
 
     /**
      * 根据跟单信息,以及配置的费用因子,获取合适的跟单费用
@@ -1124,207 +1121,206 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         return feeSchemeReqDto;
     }
 
-    public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId, String businessNo) {
-        BigDecimal jqNoTaxPremium = new BigDecimal(0);
-        BigDecimal syNoTaxPremium = new BigDecimal(0);
-        InsOrders insOrders = insOrdersService.getById(quoteRespVo.getOrderno());
-        List<AccidentResponseVo> accidentList = quoteRespVo.getAccident();
-        /*BigDecimal accidentActualPremium = new BigDecimal(0);
-        for(AccidentResponseVo accidentResponseVo: accidentList){
-            accidentActualPremium = new BigDecimal(accidentResponseVo.getActualPremium());
-        }*/
-        FeeSchemeReqDto feeSchemeReqDto = this.getFeeSchemeInfo(quoteInfoVo, quoteRespVo, agreementId, insOrders.getProductid());
-        matchTheUndwrtRules(feeSchemeReqDto);
-        FeeSchemeResDto feeSchemeResDto = this.matchTheAppropriateFees(feeSchemeReqDto);
-        InsFeeOrder insFeeOrder = new InsFeeOrder(feeSchemeReqDto, feeSchemeResDto, businessNo);
-        PtlAgreement agreement = ptlAgreementService.getById(agreementId);
-        //先通过含税保费计算出不含税保费 公式 总保费/(1+增值税率) 目前增值税率是0.06
-        if (insFeeOrder.getJqPremium().doubleValue() > 0) {
-            //默认用含税保费计算
-            jqNoTaxPremium = insFeeOrder.getJqPremium();
-            //如果协议中配置为不含税结算时,计算不含税保费
-            if (StringUtils.isNotEmpty(agreement.getWithTax()) && "否".equals(agreement.getWithTax())) {
-                jqNoTaxPremium = insFeeOrder.getJqPremium().divide(new BigDecimal(1 + 0.06), BigDecimal.ROUND_HALF_UP, 2);
-            }
-            insFeeOrder.setJqNoTaxPremium(jqNoTaxPremium);
-            //交强险总费用
-            insFeeOrder.setJqCostsPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqCostsProportion()));
-            //监管费比例
-            if ("1".equals(feeSchemeReqDto.getIsNewCar())) {
-                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqNewCarCostsProportion()));
-            } else if ("0".equals(feeSchemeReqDto.getIsNewCar())) {
-                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqOldCarCostsProportion()));
-            } else {
-                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(0));
-            }
-            //监管费
-            insFeeOrder.setJqSuperviseCostsPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqSuperviseCostsProportion()));
-            //溢出费比例 先搁置放0
-            insFeeOrder.setJqSpilloverProportion(new BigDecimal(feeSchemeResDto.getJqSpilloverProportion()));
-            //溢出费 先搁置放0
-            insFeeOrder.setJqSpilloverPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqSpilloverProportion()));
-        }
-        if (insFeeOrder.getSyPremium().doubleValue() > 0) {
-            //默认用含税保费计算
-            syNoTaxPremium = insFeeOrder.getSyPremium();
-            //如果协议中配置为不含税结算时,计算不含税保费
-            if (StringUtils.isNotEmpty(agreement.getWithTax()) && "否".equals(agreement.getWithTax())) {
-                syNoTaxPremium = insFeeOrder.getSyPremium().divide(BigDecimal.valueOf(1 + 0.06), BigDecimal.ROUND_HALF_UP, 2);
-            }
-            insFeeOrder.setSyNoTaxPremium(syNoTaxPremium);
-            //商业险总费用
-            insFeeOrder.setSyCostsPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSyCostsProportion()));
-            //监管费比例
-            if ("1".equals(feeSchemeReqDto.getIsNewCar())) {
-                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyNewCarCostsProportion()));
-            } else if ("0".equals(feeSchemeReqDto.getIsNewCar())) {
-                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyOldCarCostsProportion()));
-            } else {
-                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(0));
-            }
-            //监管费
-            insFeeOrder.setSySuperviseCostsPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSySuperviseCostsProportion()));
-            //溢出费比例 先搁置放0
-            insFeeOrder.setSySpilloverProportion(new BigDecimal(feeSchemeResDto.getSySpilloverProportion()));
-            //溢出费 先搁置放0
-            insFeeOrder.setSySpilloverPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSySpilloverProportion()));
-        }
-
-        if (jqNoTaxPremium.doubleValue() > 0 || syNoTaxPremium.doubleValue() > 0) {
-            BigDecimal totalNoTaxPremium = jqNoTaxPremium.add(syNoTaxPremium);
-            SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
-            /**
-             * 机构管理费比例逻辑
-             * 当前出单员的机构编码找他的上一级就是五级
-             * 机构层级划分方式
-             * 99 总公司              一级
-             * 9914山西分公司         二级
-             * 991401太原中支         三级
-             * 99140105小店中支       四级
-             * 9914010501 营销服务部  五级
-             *            1团队       无机构层级
-             */
-
-            //判断出单员归属机构层级
-            String parentId = sysUser.getDeptId();
-            String comlevel = "";
-            do {//循环操作
-                SysDept sysDeptTemp = sysDeptService.getById(parentId);
-                if (sysDeptTemp != null && StringUtils.isNotEmpty(sysDeptTemp.getParentId())) {
-                    parentId = sysDeptTemp.getParentId();
-                } else {
-                    break;
-                }
-                if (StringUtils.isEmpty(sysDeptTemp.getComlevel())) {
-                    continue;
-                } else {
-                    comlevel = sysDeptTemp.getComlevel();
-                }
-                //当机构层级为五级的时候,获取所有的机构费用比例
-                if (sysDeptTemp != null && "5".equals(sysDeptTemp.getComlevel())) {
-                    //五级机构管理费用比例
-                    insFeeOrder.setFifthDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeFifth()));
-                    insFeeOrder.setFifthDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFifthDeptProportion()));
-                    //四级机构管理费用比例
-                    insFeeOrder.setForthDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeForth()));
-                    insFeeOrder.setForthDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getForthDeptProportion()));
-                    //三级机构管理费用比例
-                    insFeeOrder.setThirdDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeThird()));
-                    insFeeOrder.setThirdDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getThirdDeptProportion()));
-                    //二级机构管理费用比例
-                    insFeeOrder.setSecondDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeSecond()));
-                    insFeeOrder.setSecondDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getSecondDeptProportion()));
-                    //一级机构管理费用比例
-                    insFeeOrder.setFirstDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFee()));
-                    insFeeOrder.setFirstDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFirstDeptProportion()));
-                    //取到第一层级时结束
-                    break;
-                }
-            } while (!"1".equals(comlevel));
-
-            //一级分销比例   推荐人
-            //二级分销比例
-            //三级分销比例
-            /**
-             * 分销一级、二级、三级存值取团队配置的分销佣金比例,若该团队走三级分销模式,当前出单员出单时,跟单的分销取值方式为:
-             * 根据出单员的推荐人向上找三级,若可以找到,则跟单存一、二、三分销比例;
-             * 若向上只能找到一级或者二级,则跟单存一级或者一级、二级
-             * 比如 A 1 B 2 C 3 D  若D出单 则给 C 3个 B 2个 A 1个;C出单给 B 3个 A 2个
-             * 第一步,先判断团队配置的分销模式
-             * 第二步,根据分销模式找上级存值相应分销比例
-             * 第三步,仅有一个上级的情况分销比例存啥
-             */
-            List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
-             new Object[]{sysUser.getDeptId()});
-
-            if (esmRetailList != null && !esmRetailList.isEmpty()) {
-                EsmRetail esmRetail = esmRetailList.get(0);
-                if (esmRetail != null) {
-                    int cycleIndex = 0;
-                    if ("3".equals(esmRetail.getRetailtype())) {//团队配置了三级分销模式
-                        cycleIndex = 3;
-                    } else if ("2".equals(esmRetail.getRetailtype())) {//团队配置了二级分销模式
-                        cycleIndex = 2;
-                    } else if ("1".equals(esmRetail.getRetailtype())) {//团队配置了一级分销模式
-                        cycleIndex = 1;
-                    } else if ("0".equals(esmRetail.getRetailtype())) {//团队没有配置分销模式
-                        cycleIndex = 0;
-                    }
-
-                    //利用当前工号,循环向上找推荐人
-                    String userId = sysUser.getId();
-                    int breakCycle = 99999999;
-                    for (int i = 0; i <= cycleIndex; i++) {
-                        EsmUserReferrer userReferrer = esmUserReferrerService.getById(userId);
-                        if (userReferrer.getReferrerId().equals(userReferrer.getId())) {//团队长,没有上级
-                            //跳出循环
-                            breakCycle = i;
-                            break;
-                        } else {
-                            userId = userReferrer.getReferrerId();
-                        }
-                    }
-                    //breakCycle是3,当前工号的上级的上级的上级就是团队长
-                    //breakCycle是2,当前工号的上级的上级就是团队长
-                    //breakCycle是1,当前工号的上级就是团队长
-                    //breakCycle是0,当前工号就是团队长
-
-                    if ("3".equals(esmRetail.getRetailtype())) {//团队配置了三级分销模式
-                        if (breakCycle == 99999999 || breakCycle == 3) {
-                            insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
-                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
-                            insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
-                        } else if (breakCycle == 2) {
-                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
-                            insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
-                        } else if (breakCycle == 1) {
-                            insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
-                        }
-                    } else if ("2".equals(esmRetail.getRetailtype())) {//团队配置了二级分销模式
-                        if (breakCycle == 99999999 || breakCycle == 3 || breakCycle == 2) {
-                            insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
-                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
-                        } else if (breakCycle == 1) {
-                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
-                        }
-                    } else if ("1".equals(esmRetail.getRetailtype())) {//团队配置了一级分销模式
-                        if (breakCycle == 99999999 || breakCycle == 3 || breakCycle == 2 || breakCycle == 1) {
-                            insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
-                        }
-                    }
-                    insFeeOrder.setFirstRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFirstRetailProportion()));
-                    insFeeOrder.setSecondRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getSecondRetailProportion()));
-                    insFeeOrder.setThirdRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getThirdRetailProportion()));
-
-                }
-            }
-        }
-        insFeeOrderService.insertCompanyAndOrders(insFeeOrder);
-    }
+//    public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId, String businessNo) {
+//        BigDecimal jqNoTaxPremium = new BigDecimal(0);
+//        BigDecimal syNoTaxPremium = new BigDecimal(0);
+//        InsOrders insOrders = insOrdersService.getById(quoteRespVo.getOrderno());
+//        List<AccidentResponseVo> accidentList = quoteRespVo.getAccident();
+//        /*BigDecimal accidentActualPremium = new BigDecimal(0);
+//        for(AccidentResponseVo accidentResponseVo: accidentList){
+//            accidentActualPremium = new BigDecimal(accidentResponseVo.getActualPremium());
+//        }*/
+//        FeeSchemeReqDto feeSchemeReqDto = this.getFeeSchemeInfo(quoteInfoVo, quoteRespVo, agreementId, insOrders.getProductid());
+//        matchTheUndwrtRules(feeSchemeReqDto);
+//        FeeSchemeResDto feeSchemeResDto = this.matchTheAppropriateFees(feeSchemeReqDto);
+//        InsFeeOrder insFeeOrder = new InsFeeOrder(feeSchemeReqDto, feeSchemeResDto, businessNo);
+//        PtlAgreement agreement = ptlAgreementService.getById(agreementId);
+//        //先通过含税保费计算出不含税保费 公式 总保费/(1+增值税率) 目前增值税率是0.06
+//        if (insFeeOrder.getJqPremium().doubleValue() > 0) {
+//            //默认用含税保费计算
+//            jqNoTaxPremium = insFeeOrder.getJqPremium();
+//            //如果协议中配置为不含税结算时,计算不含税保费
+//            if (StringUtils.isNotEmpty(agreement.getWithTax()) && "否".equals(agreement.getWithTax())) {
+//                jqNoTaxPremium = insFeeOrder.getJqPremium().divide(new BigDecimal(1 + 0.06), BigDecimal.ROUND_HALF_UP, 2);
+//            }
+//            insFeeOrder.setJqNoTaxPremium(jqNoTaxPremium);
+//            //交强险总费用
+//            insFeeOrder.setJqCostsPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqCostsProportion()));
+//            //监管费比例
+//            if ("1".equals(feeSchemeReqDto.getIsNewCar())) {
+//                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqNewCarCostsProportion()));
+//            } else if ("0".equals(feeSchemeReqDto.getIsNewCar())) {
+//                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqOldCarCostsProportion()));
+//            } else {
+//                insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(0));
+//            }
+//            //监管费
+//            insFeeOrder.setJqSuperviseCostsPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqSuperviseCostsProportion()));
+//            //溢出费比例 先搁置放0
+//            insFeeOrder.setJqSpilloverProportion(new BigDecimal(feeSchemeResDto.getJqSpilloverProportion()));
+//            //溢出费 先搁置放0
+//            insFeeOrder.setJqSpilloverPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqSpilloverProportion()));
+//        }
+//        if (insFeeOrder.getSyPremium().doubleValue() > 0) {
+//            //默认用含税保费计算
+//            syNoTaxPremium = insFeeOrder.getSyPremium();
+//            //如果协议中配置为不含税结算时,计算不含税保费
+//            if (StringUtils.isNotEmpty(agreement.getWithTax()) && "否".equals(agreement.getWithTax())) {
+//                syNoTaxPremium = insFeeOrder.getSyPremium().divide(BigDecimal.valueOf(1 + 0.06), BigDecimal.ROUND_HALF_UP, 2);
+//            }
+//            insFeeOrder.setSyNoTaxPremium(syNoTaxPremium);
+//            //商业险总费用
+//            insFeeOrder.setSyCostsPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSyCostsProportion()));
+//            //监管费比例
+//            if ("1".equals(feeSchemeReqDto.getIsNewCar())) {
+//                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyNewCarCostsProportion()));
+//            } else if ("0".equals(feeSchemeReqDto.getIsNewCar())) {
+//                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyOldCarCostsProportion()));
+//            } else {
+//                insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(0));
+//            }
+//            //监管费
+//            insFeeOrder.setSySuperviseCostsPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSySuperviseCostsProportion()));
+//            //溢出费比例 先搁置放0
+//            insFeeOrder.setSySpilloverProportion(new BigDecimal(feeSchemeResDto.getSySpilloverProportion()));
+//            //溢出费 先搁置放0
+//            insFeeOrder.setSySpilloverPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSySpilloverProportion()));
+//        }
+//
+//        if (jqNoTaxPremium.doubleValue() > 0 || syNoTaxPremium.doubleValue() > 0) {
+//            BigDecimal totalNoTaxPremium = jqNoTaxPremium.add(syNoTaxPremium);
+//            SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
+//            /**
+//             * 机构管理费比例逻辑
+//             * 当前出单员的机构编码找他的上一级就是五级
+//             * 机构层级划分方式
+//             * 99 总公司              一级
+//             * 9914山西分公司         二级
+//             * 991401太原中支         三级
+//             * 99140105小店中支       四级
+//             * 9914010501 营销服务部  五级
+//             *            1团队       无机构层级
+//             */
+//
+//            //判断出单员归属机构层级
+//            String parentId = sysUser.getDeptId();
+//            String comlevel = "";
+//            do {//循环操作
+//                SysDept sysDeptTemp = sysDeptService.getById(parentId);
+//                if (sysDeptTemp != null && StringUtils.isNotEmpty(sysDeptTemp.getParentId())) {
+//                    parentId = sysDeptTemp.getParentId();
+//                } else {
+//                    break;
+//                }
+//                if (StringUtils.isEmpty(sysDeptTemp.getComlevel())) {
+//                    continue;
+//                } else {
+//                    comlevel = sysDeptTemp.getComlevel();
+//                }
+//                //当机构层级为五级的时候,获取所有的机构费用比例
+//                if (sysDeptTemp != null && "5".equals(sysDeptTemp.getComlevel())) {
+//                    //五级机构管理费用比例
+//                    insFeeOrder.setFifthDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeFifth()));
+//                    insFeeOrder.setFifthDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFifthDeptProportion()));
+//                    //四级机构管理费用比例
+//                    insFeeOrder.setForthDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeForth()));
+//                    insFeeOrder.setForthDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getForthDeptProportion()));
+//                    //三级机构管理费用比例
+//                    insFeeOrder.setThirdDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeThird()));
+//                    insFeeOrder.setThirdDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getThirdDeptProportion()));
+//                    //二级机构管理费用比例
+//                    insFeeOrder.setSecondDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeSecond()));
+//                    insFeeOrder.setSecondDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getSecondDeptProportion()));
+//                    //一级机构管理费用比例
+//                    insFeeOrder.setFirstDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFee()));
+//                    insFeeOrder.setFirstDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFirstDeptProportion()));
+//                    //取到第一层级时结束
+//                    break;
+//                }
+//            } while (!"1".equals(comlevel));
+//
+//            //一级分销比例   推荐人
+//            //二级分销比例
+//            //三级分销比例
+//            /**
+//             * 分销一级、二级、三级存值取团队配置的分销佣金比例,若该团队走三级分销模式,当前出单员出单时,跟单的分销取值方式为:
+//             * 根据出单员的推荐人向上找三级,若可以找到,则跟单存一、二、三分销比例;
+//             * 若向上只能找到一级或者二级,则跟单存一级或者一级、二级
+//             * 比如 A 1 B 2 C 3 D  若D出单 则给 C 3个 B 2个 A 1个;C出单给 B 3个 A 2个
+//             * 第一步,先判断团队配置的分销模式
+//             * 第二步,根据分销模式找上级存值相应分销比例
+//             * 第三步,仅有一个上级的情况分销比例存啥
+//             */
+//            List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
+//             new Object[]{sysUser.getDeptId()});
+//
+//            if (esmRetailList != null && !esmRetailList.isEmpty()) {
+//                EsmRetail esmRetail = esmRetailList.get(0);
+//                if (esmRetail != null) {
+//                    int cycleIndex = 0;
+//                    if ("3".equals(esmRetail.getRetailtype())) {//团队配置了三级分销模式
+//                        cycleIndex = 3;
+//                    } else if ("2".equals(esmRetail.getRetailtype())) {//团队配置了二级分销模式
+//                        cycleIndex = 2;
+//                    } else if ("1".equals(esmRetail.getRetailtype())) {//团队配置了一级分销模式
+//                        cycleIndex = 1;
+//                    } else if ("0".equals(esmRetail.getRetailtype())) {//团队没有配置分销模式
+//                        cycleIndex = 0;
+//                    }
+//
+//                    //利用当前工号,循环向上找推荐人
+//                    String userId = sysUser.getId();
+//                    int breakCycle = 99999999;
+//                    for (int i = 0; i <= cycleIndex; i++) {
+//                        EsmUserReferrer userReferrer = esmUserReferrerService.getById(userId);
+//                        if (userReferrer.getReferrerId().equals(userReferrer.getId())) {//团队长,没有上级
+//                            //跳出循环
+//                            breakCycle = i;
+//                            break;
+//                        } else {
+//                            userId = userReferrer.getReferrerId();
+//                        }
+//                    }
+//                    //breakCycle是3,当前工号的上级的上级的上级就是团队长
+//                    //breakCycle是2,当前工号的上级的上级就是团队长
+//                    //breakCycle是1,当前工号的上级就是团队长
+//                    //breakCycle是0,当前工号就是团队长
+//
+//                    if ("3".equals(esmRetail.getRetailtype())) {//团队配置了三级分销模式
+//                        if (breakCycle == 99999999 || breakCycle == 3) {
+//                            insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
+//                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
+//                            insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
+//                        } else if (breakCycle == 2) {
+//                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
+//                            insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
+//                        } else if (breakCycle == 1) {
+//                            insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
+//                        }
+//                    } else if ("2".equals(esmRetail.getRetailtype())) {//团队配置了二级分销模式
+//                        if (breakCycle == 99999999 || breakCycle == 3 || breakCycle == 2) {
+//                            insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
+//                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
+//                        } else if (breakCycle == 1) {
+//                            insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
+//                        }
+//                    } else if ("1".equals(esmRetail.getRetailtype())) {//团队配置了一级分销模式
+//                        if (breakCycle == 99999999 || breakCycle == 3 || breakCycle == 2 || breakCycle == 1) {
+//                            insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
+//                        }
+//                    }
+//                    insFeeOrder.setFirstRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFirstRetailProportion()));
+//                    insFeeOrder.setSecondRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getSecondRetailProportion()));
+//                    insFeeOrder.setThirdRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getThirdRetailProportion()));
+//
+//                }
+//            }
+//        }
+//        insFeeOrderService.insertCompanyAndOrders(insFeeOrder);
+//    }
 
     @Override
     public QueryOrderFeeVo queryFeeOrderInfo(String companyId) {
-        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getInsFeeOrderNewByCompanyId(companyId);
         return null;
     }
 
@@ -1382,6 +1378,80 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         return premium;
     }
 
+//    public QueryOrderFeeVo queryFeeOrderInfo(String companyId) {
+//        QueryOrderFeeVo queryOrderFeeVo = new QueryOrderFeeVo();
+//        QueryOrderCommissionVo orderCommissionVo = new QueryOrderCommissionVo();
+//        OrderFeeVo jqOrderFeeVo = new OrderFeeVo();
+//        OrderFeeVo syOrderFeeVo = new OrderFeeVo();
+//        OrderFeeVo fcOrderFeeVo = new OrderFeeVo();
+//        AdjustFeeDescVo adjustFeeDescVo = new AdjustFeeDescVo();//费用审核时使用
+//        InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
+//
+//        InsFeeOrder insFeeOrder = insFeeOrderService.getByInsOrderNo(insAreaCompany.getId());
+//
+//        if (insFeeOrder != null) {
+//            if (insFeeOrder.getJqPremium() != null && insFeeOrder.getJqPremium().doubleValue() > 0 && insFeeOrder.getSyPremium() != null && insFeeOrder.getSyPremium().doubleValue() == 0) {//当为单交业务时
+//                jqOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
+//                jqOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getJqCostsPremiums()));
+//                jqOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getJqCostsProportion()));
+//                jqOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getJqSuperviseCostsPremiums()) + "元 / " + convertToString(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums())) + "元 / " + convertToString(insFeeOrder.getJqCostsPremiums()) + "元");
+//                jqOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getJqSuperviseCostsProportion()) + " / " + convertToString(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion())) + " / " + convertToString(insFeeOrder.getJqCostsProportion()));
+//                /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
+//                orderCommissionVo = getQueryOrderCommission(orderCommissionVo, insFeeOrder, "JQ");
+//
+//            } else if (insFeeOrder.getSyPremium() != null && insFeeOrder.getSyPremium().doubleValue() > 0 && insFeeOrder.getJqPremium() != null && insFeeOrder.getJqPremium().doubleValue() == 0) {//当为单商业务时
+//                syOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
+//                syOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getSyCostsPremiums()));
+//                syOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getSyCostsProportion()));
+//                syOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getSySuperviseCostsPremiums()) + "元 / " + convertToString(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums())) + "元 / " + convertToString(insFeeOrder.getSyCostsPremiums()) + "元");
+//                syOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getSySuperviseCostsProportion()) + " / " + convertToString(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion())) + " / " + convertToString(insFeeOrder.getSyCostsProportion()));
+//                /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
+//                orderCommissionVo = getQueryOrderCommission(orderCommissionVo, insFeeOrder, "SY");
+//            } else if (insFeeOrder.getJqPremium() != null && insFeeOrder.getJqPremium().doubleValue() > 0 && insFeeOrder.getSyPremium() != null && insFeeOrder.getSyPremium().doubleValue() > 0) {//当为交商业务时
+//                QueryOrderFeeVo queryOrderFeeVoTemp = packageOrderFeeInfoAll(insFeeOrder);
+//                //获取交强险费用明细
+//                jqOrderFeeVo = queryOrderFeeVoTemp.getJqCoderFeeVo();
+//                jqOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getJqCostsPremiums()));
+//                jqOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getJqCostsProportion()));
+//                jqOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getJqSuperviseCostsPremiums()) + "元 / " + convertToString(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums())) + "元 / " + convertToString(insFeeOrder.getJqCostsPremiums()) + "元");
+//                jqOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getJqSuperviseCostsProportion()) + " / " + convertToString(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion())) + " / " + convertToString(insFeeOrder.getJqCostsProportion()));
+//                //获取商业险费用明细
+//                syOrderFeeVo = queryOrderFeeVoTemp.getSyCoderFeeVo();
+//                syOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getSyCostsPremiums()));
+//                syOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getSyCostsProportion()));
+//                syOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getSySuperviseCostsPremiums()) + "元 / " + convertToString(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums())) + "元 / " + convertToString(insFeeOrder.getSyCostsPremiums()) + "元");
+//                syOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getSySuperviseCostsProportion()) + " / " + convertToString(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion())) + " / " + convertToString(insFeeOrder.getSyCostsProportion()));
+//                /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
+//                orderCommissionVo = getQueryOrderCommission(orderCommissionVo, insFeeOrder, "ALL");
+//            }
+//            queryOrderFeeVo.setJqCoderFeeVo(jqOrderFeeVo);
+//            queryOrderFeeVo.setSyCoderFeeVo(syOrderFeeVo);
+//            queryOrderFeeVo.setFcCoderFeeVo(fcOrderFeeVo);
+//            queryOrderFeeVo.setOrderCommissionVo(orderCommissionVo);
+//            //添加费用审核时 使用参数
+//            if (insFeeOrder.getJqPremium() != null && insFeeOrder.getJqPremium().doubleValue() > 0) {
+//                adjustFeeDescVo.setJqPremium(convertToString(insFeeOrder.getJqNoTaxPremium()));
+//                adjustFeeDescVo.setJqCommissionRate(convertToString(insFeeOrder.getJqSuperviseCostsProportion()));
+//                adjustFeeDescVo.setJqCommissionAmount(convertToString(insFeeOrder.getJqSuperviseCostsPremiums()));
+//                adjustFeeDescVo.setJqOtherFeeRate(convertToString(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion())));
+//                adjustFeeDescVo.setJqOtherFeeAmount(convertToString(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums())));
+//                adjustFeeDescVo.setJqAllFeeRate(convertToString(insFeeOrder.getJqCostsProportion()));
+//                adjustFeeDescVo.setJqAllFeeAmount(convertToString(insFeeOrder.getJqCostsPremiums()));
+//            }
+//            if (insFeeOrder.getSyPremium() != null && insFeeOrder.getSyPremium().doubleValue() > 0) {
+//                adjustFeeDescVo.setSyPremium(convertToString(insFeeOrder.getSyNoTaxPremium()));
+//                adjustFeeDescVo.setSyCommissionRate(convertToString(insFeeOrder.getSySuperviseCostsProportion()));
+//                adjustFeeDescVo.setSyCommissionAmount(convertToString(insFeeOrder.getSySuperviseCostsPremiums()));
+//                adjustFeeDescVo.setSyOtherFeeRate(convertToString(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion())));
+//                adjustFeeDescVo.setSyOtherFeeAmount(convertToString(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums())));
+//                adjustFeeDescVo.setSyAllFeeRate(convertToString(insFeeOrder.getSyCostsProportion()));
+//                adjustFeeDescVo.setSyAllFeeAmount(convertToString(insFeeOrder.getSyCostsPremiums()));
+//            }
+//            queryOrderFeeVo.setAdjustFeeDescVo(adjustFeeDescVo);
+//        }
+//        return queryOrderFeeVo;
+//    }
+
     private QueryOrderCommissionVo getQueryOrderCommission(QueryOrderCommissionVo orderCommissionVo, InsFeeOrder insFeeOrder,
      String businessType) {
         /**
@@ -1711,7 +1781,7 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         detailLevel3FeeResultVo.setFcFeeAmountAll(fcDetailFeePremium3.setScale(2,BigDecimal.ROUND_DOWN).toString());
         queryOrderFeeResultVos.add(detailLevel3FeeResultVo);
 
-        return queryOrderFeeResultVos;
+            return queryOrderFeeResultVos;
     }
 
     //把取出的费用信息转换为页面需要展示的数据
@@ -1936,13 +2006,13 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
 //        resultList.add(feeResultVo9);
 //        return resultList;
 //    }
-
-    /**
-     * 按照组合单模式获取费用明细
-     *
-     * @param insFeeOrder
-     * @return
-     */
+//
+//    /**
+//     * 按照组合单模式获取费用明细
+//     *
+//     * @param insFeeOrder
+//     * @return
+//     */
 //    private QueryOrderFeeVo packageOrderFeeInfoAll(InsFeeOrder insFeeOrder) {
 //        QueryOrderFeeVo queryOrderFeeVo = new QueryOrderFeeVo();
 //        InsFeeOrder jqInsFeeOrderTemp = new InsFeeOrder();
@@ -2002,12 +2072,12 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
 //        return queryOrderFeeVo;
 //    }
 
-    /**
-     * 按照单险种方式获取费用明细
-     *
-     * @param insFeeOrder
-     * @return
-     */
+//    /**
+//     * 按照单险种方式获取费用明细
+//     *
+//     * @param insFeeOrder
+//     * @return
+//     */
 //    private OrderFeeVo packageOrderFeeInfoOne(InsFeeOrder insFeeOrder) {
 //        OrderFeeVo orderFeeVo = new OrderFeeVo();
 //        orderFeeVo.setFirstDeptPremiums(convertToString(insFeeOrder.getFirstDeptPremiums()));
@@ -2539,4 +2609,253 @@ public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
         result.append(feeSchemeReqDto.getBusType());
         return result.toString();
     }
+
+    public FeeOrderNewVo newConvertOrderFeeVoData(InsFeeOrderNew insFeeOrderNew, PtlAgreementProductCostsNew ptlAgreementProductCostsNew) {
+        FeeOrderNewVo feeOrderNewVo = new FeeOrderNewVo();
+        List<FeeOrderNewVo.EntranceFee> entranceFeeList = new ArrayList<>();
+        List<FeeOrderNewVo.ExportFee> exportFeeList = new ArrayList<>();
+        List<FeeOrderNewVo.DeptManagerFee> deptManagerFeeList = new ArrayList<>();
+
+        FeeOrderNewVo.EntranceFee jqEntranceFee = new FeeOrderNewVo.EntranceFee();
+        FeeOrderNewVo.ExportFee jqExportFee = new  FeeOrderNewVo.ExportFee();
+        FeeOrderNewVo.DeptManagerFee jqDeptManagerFee = new FeeOrderNewVo.DeptManagerFee();
+
+        FeeOrderNewVo.EntranceFee syEntranceFee = new FeeOrderNewVo.EntranceFee();
+        FeeOrderNewVo.ExportFee syExportFee = new  FeeOrderNewVo.ExportFee();
+        FeeOrderNewVo.DeptManagerFee syDeptManagerFee = new FeeOrderNewVo.DeptManagerFee();
+
+        FeeOrderNewVo.EntranceFee nonEntranceFee = new FeeOrderNewVo.EntranceFee();
+        FeeOrderNewVo.ExportFee nonExportFee = new  FeeOrderNewVo.ExportFee();
+        FeeOrderNewVo.DeptManagerFee nonDeptManagerFee = new FeeOrderNewVo.DeptManagerFee();
+
+        //入口费用
+        jqEntranceFee.setInsuranceType("交强险");  // 险种
+        jqEntranceFee.setPremium(insFeeOrderNew.getJqPremium());  //保费
+        jqEntranceFee.setTotalAmount(insFeeOrderNew.getJqCostsPremiums());   //总费用
+        jqEntranceFee.setTotalProportion(insFeeOrderNew.getJqCostsProportion()); //总比例
+        jqEntranceFee.setSySuperviseCostsPremiums(insFeeOrderNew.getJqSuperviseCostsPremiums());   //手续费
+        jqEntranceFee.setOtherCostsProportion(insFeeOrderNew.getJqOtherCostsProportion());   // 跟单比例
+        jqEntranceFee.setOtherCostsPremiums(insFeeOrderNew.getJqOtherCostsPremiums());      // 跟单费
+        jqEntranceFee.setSuperviseCosts(insFeeOrderNew.getJqSuperviseCostsProportion());  // 手续费比例
+        jqEntranceFee.setExportSuperviseCosts(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsExportProportion()));  // 出口费比例
+        entranceFeeList.add(jqEntranceFee);
+
+
+        // 机构管理费
+        jqDeptManagerFee.setInsuranceType("交强险");
+        jqDeptManagerFee.setDeptProportionLevelOne(insFeeOrderNew.getJqDeptProportionLevel1());
+        jqDeptManagerFee.setDeptPremiumsLevelOne(insFeeOrderNew.getJqDeptPremiumsLevel1());
+        jqDeptManagerFee.setDeptProportionLevelTwo(insFeeOrderNew.getJqDeptProportionLevel2());
+        jqDeptManagerFee.setDeptPremiumsLevelTwo(insFeeOrderNew.getJqDeptPremiumsLevel2());
+        jqDeptManagerFee.setDeptProportionLevelThree(insFeeOrderNew.getJqDeptProportionLevel3());
+        jqDeptManagerFee.setDeptPremiumsLevelThree(insFeeOrderNew.getJqDeptPremiumsLevel3());
+        jqDeptManagerFee.setDeptProportionLevelFoure(insFeeOrderNew.getJqDeptProportionLevel4());
+        jqDeptManagerFee.setDeptPremiumsLevelFoure(insFeeOrderNew.getJqDeptPremiumsLevel4());
+        jqDeptManagerFee.setDeptProportionLevelFive(insFeeOrderNew.getJqDeptProportionLevel5());
+        jqDeptManagerFee.setDeptPremiumsLevelFive(insFeeOrderNew.getJqDeptPremiumsLevel5());
+        deptManagerFeeList.add(jqDeptManagerFee);
+
+        //出口费用
+        jqExportFee.setInsuranceType("交强险");  // 险种
+        BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1()
+                .add(insFeeOrderNew.getJqDeptProportionLevel2())
+                .add(insFeeOrderNew.getJqDeptProportionLevel3())
+                .add(insFeeOrderNew.getJqDeptProportionLevel4())
+                .add(insFeeOrderNew.getJqDeptProportionLevel5());
+
+        //分销总比例
+        BigDecimal sumRetail = new BigDecimal(0);
+        if(insFeeOrderNew.getFirstDetailProportion().compareTo(new BigDecimal(0)) > 0){
+            sumRetail = sumRetail.add(insFeeOrderNew.getFirstDetailProportion());
+        }
+        if(insFeeOrderNew.getSecondDetailProportion().compareTo(new BigDecimal(0)) > 0){
+            sumRetail = sumRetail.add(insFeeOrderNew.getSecondDetailProportion());
+        }
+        if(insFeeOrderNew.getThirdDetailProportion().compareTo(new BigDecimal(0)) > 0){
+            sumRetail = sumRetail.add(insFeeOrderNew.getThirdDetailProportion());
+        }
+
+        //交强总出口费比例
+        BigDecimal jqExportTotalProportion = jqEntranceFee.getTotalProportion().subtract(sumJqDeptProportion).subtract(sumRetail);
+
+        //交强出口手续费比例
+        BigDecimal jqExportSuperviseCosts =
+                jqExportTotalProportion.compareTo(jqEntranceFee.getExportSuperviseCosts()) > 0 ? jqEntranceFee.getExportSuperviseCosts() : jqExportTotalProportion;
+
+        //交强出口其他费比例
+        BigDecimal jqOtherCostsProportion =
+                jqExportTotalProportion.compareTo(jqEntranceFee.getExportSuperviseCosts()) > 0 ? jqExportTotalProportion.subtract(jqExportSuperviseCosts) : new BigDecimal(0);
+
+        jqExportFee.setSuperviseCosts(jqExportSuperviseCosts);
+        jqExportFee.setSuperviseCostsPremiums(insFeeOrderNew.getJqPremium().multiply(jqExportSuperviseCosts.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        jqExportFee.setOtherCostsProportion(jqOtherCostsProportion);
+        jqExportFee.setOtherCostsPremiums(insFeeOrderNew.getJqPremium().multiply(jqOtherCostsProportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        jqExportFee.setTotalProportion(jqExportSuperviseCosts.add(jqOtherCostsProportion));
+        jqExportFee.setTotalAmount(insFeeOrderNew.getJqPremium().multiply(jqExportFee.getTotalProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        exportFeeList.add(jqExportFee);
+
+
+
+
+        //商业入口
+        syEntranceFee.setInsuranceType("商业险");  // 险种
+        syEntranceFee.setPremium(insFeeOrderNew.getSyPremium());  //保费
+        syEntranceFee.setTotalProportion(insFeeOrderNew.getSyCostsProportion()); //总保费
+        syEntranceFee.setTotalAmount(insFeeOrderNew.getSyCostsPremiums());   //总费用
+        syEntranceFee.setSySuperviseCostsPremiums(insFeeOrderNew.getSySuperviseCostsPremiums());   //手续费
+        syEntranceFee.setOtherCostsProportion(insFeeOrderNew.getSyOtherCostsProportion());   // 跟单比例
+        syEntranceFee.setOtherCostsPremiums(insFeeOrderNew.getSyOtherCostsPremiums());      // 跟单费
+        syEntranceFee.setSuperviseCosts(insFeeOrderNew.getSySuperviseCostsProportion());  // 手续费比例
+        syEntranceFee.setExportSuperviseCosts(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsExportProportion()));  // 出口费比例
+        entranceFeeList.add(syEntranceFee);
+
+        // 商业管理费
+        syDeptManagerFee.setInsuranceType("商业险");
+        syDeptManagerFee.setDeptProportionLevelOne(insFeeOrderNew.getSyDeptProportionLevel1());
+        syDeptManagerFee.setDeptPremiumsLevelOne(insFeeOrderNew.getSyDeptPremiumsLevel1());
+        syDeptManagerFee.setDeptProportionLevelTwo(insFeeOrderNew.getSyDeptProportionLevel2());
+        syDeptManagerFee.setDeptPremiumsLevelTwo(insFeeOrderNew.getSyDeptPremiumsLevel2());
+        syDeptManagerFee.setDeptProportionLevelThree(insFeeOrderNew.getSyDeptProportionLevel3());
+        syDeptManagerFee.setDeptPremiumsLevelThree(insFeeOrderNew.getSyDeptPremiumsLevel3());
+        syDeptManagerFee.setDeptProportionLevelFoure(insFeeOrderNew.getSyDeptProportionLevel4());
+        syDeptManagerFee.setDeptPremiumsLevelFoure(insFeeOrderNew.getSyDeptPremiumsLevel4());
+        syDeptManagerFee.setDeptProportionLevelFive(insFeeOrderNew.getSyDeptProportionLevel5());
+        syDeptManagerFee.setDeptPremiumsLevelFive(insFeeOrderNew.getSyDeptPremiumsLevel5());
+        deptManagerFeeList.add(syDeptManagerFee);
+
+        //商业出口
+        syExportFee.setInsuranceType("商业险");  // 险种
+        BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1()
+                .add(insFeeOrderNew.getSyDeptProportionLevel2())
+                .add(insFeeOrderNew.getSyDeptProportionLevel3())
+                .add(insFeeOrderNew.getSyDeptProportionLevel4())
+                .add(insFeeOrderNew.getSyDeptProportionLevel5());
+
+        //商业总出口费比例
+        BigDecimal syExportTotalProportion = new BigDecimal(0);
+        if(syEntranceFee.getTotalProportion().compareTo(new BigDecimal(0)) > 0) {
+            syExportTotalProportion = syEntranceFee.getTotalProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
+        }
+        //商业出口手续费比例
+        BigDecimal syExportSuperviseCosts =
+                syExportTotalProportion.compareTo(syEntranceFee.getExportSuperviseCosts()) > 0 ? syEntranceFee.getExportSuperviseCosts() : syExportTotalProportion;
+
+        //商业出口其他费比例
+        BigDecimal syOtherCostsProportion =
+                syExportTotalProportion.compareTo(syEntranceFee.getExportSuperviseCosts()) > 0 ? syExportTotalProportion.subtract(syExportSuperviseCosts) : new BigDecimal(0);
+
+        syExportFee.setSuperviseCosts(syExportSuperviseCosts);
+        syExportFee.setSuperviseCostsPremiums(insFeeOrderNew.getSyPremium().multiply(syExportSuperviseCosts.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        syExportFee.setOtherCostsProportion(syOtherCostsProportion);
+        syExportFee.setOtherCostsPremiums(insFeeOrderNew.getSyPremium().multiply(syOtherCostsProportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        //如果入口的总比例等于0  则出口的总比例也等于0
+        syExportFee.setTotalProportion(syExportSuperviseCosts.add(syExportFee.getOtherCostsProportion()));
+        syExportFee.setTotalAmount(syExportSuperviseCosts.add(syExportFee.getOtherCostsPremiums()));
+        exportFeeList.add(syExportFee);
+
+
+
+
+        //非车入口
+        nonEntranceFee.setInsuranceType("非车险");  // 险种
+        nonEntranceFee.setPremium(insFeeOrderNew.getNoPremium());  //保费
+        nonEntranceFee.setTotalProportion(insFeeOrderNew.getNoCostsProportion()); //总保费
+        nonEntranceFee.setTotalAmount(insFeeOrderNew.getNoCostsPremiums());   //总费用
+        nonEntranceFee.setSySuperviseCostsPremiums(insFeeOrderNew.getNoSuperviseCostsPremiums());   //手续费
+        nonEntranceFee.setOtherCostsProportion(insFeeOrderNew.getNoOtherCostsProportion());   // 跟单比例
+        nonEntranceFee.setOtherCostsPremiums(insFeeOrderNew.getNoOtherCostsPremiums());      // 跟单费
+        nonEntranceFee.setSuperviseCosts(insFeeOrderNew.getNoSuperviseCostsProportion());  // 手续费比例
+        nonEntranceFee.setExportSuperviseCosts(new BigDecimal(ptlAgreementProductCostsNew.getNoCostsExportProportion()));  // 出口费比例
+        entranceFeeList.add(nonEntranceFee);
+
+        // 五级管理费
+        nonDeptManagerFee.setInsuranceType("非车险");
+        nonDeptManagerFee.setDeptProportionLevelOne(insFeeOrderNew.getNoDeptProportionLevel1());
+        nonDeptManagerFee.setDeptPremiumsLevelOne(insFeeOrderNew.getNoDeptPremiumsLevel1());
+        nonDeptManagerFee.setDeptProportionLevelTwo(insFeeOrderNew.getNoDeptProportionLevel2());
+        nonDeptManagerFee.setDeptPremiumsLevelTwo(insFeeOrderNew.getNoDeptPremiumsLevel2());
+        nonDeptManagerFee.setDeptProportionLevelThree(insFeeOrderNew.getNoDeptProportionLevel3());
+        nonDeptManagerFee.setDeptPremiumsLevelThree(insFeeOrderNew.getNoDeptPremiumsLevel3());
+        nonDeptManagerFee.setDeptProportionLevelFoure(insFeeOrderNew.getNoDeptProportionLevel4());
+        nonDeptManagerFee.setDeptPremiumsLevelFoure(insFeeOrderNew.getNoDeptPremiumsLevel4());
+        nonDeptManagerFee.setDeptProportionLevelFive(insFeeOrderNew.getNoDeptProportionLevel5());
+        nonDeptManagerFee.setDeptPremiumsLevelFive(insFeeOrderNew.getNoDeptPremiumsLevel5());
+        deptManagerFeeList.add(nonDeptManagerFee);
+
+
+        //出口费用
+        nonExportFee.setInsuranceType("非车险");  // 险种
+        BigDecimal sumNonDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1()
+                .add(insFeeOrderNew.getNoDeptProportionLevel2())
+                .add(insFeeOrderNew.getNoDeptProportionLevel3())
+                .add(insFeeOrderNew.getNoDeptProportionLevel4())
+                .add(insFeeOrderNew.getNoDeptProportionLevel5());
+
+        //非车总出口费比例
+        BigDecimal nonExportTotalProportion = new BigDecimal(0);
+        if(nonEntranceFee.getTotalProportion().compareTo(new BigDecimal(0)) > 0) {
+            nonExportTotalProportion = nonEntranceFee.getTotalProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
+        }
+
+        //非车出口手续费比例
+        BigDecimal nonExportSuperviseCosts =
+                nonExportTotalProportion.compareTo(nonEntranceFee.getExportSuperviseCosts()) > 0 ? nonEntranceFee.getExportSuperviseCosts() : nonExportTotalProportion;
+
+        //非车出口其他费比例
+        BigDecimal nonOtherCostsProportion =
+                nonExportTotalProportion.compareTo(nonEntranceFee.getExportSuperviseCosts()) > 0 ? nonExportTotalProportion.subtract(nonExportSuperviseCosts) : new BigDecimal(0);
+
+        nonExportFee.setSuperviseCosts(nonExportSuperviseCosts);
+        nonExportFee.setSuperviseCostsPremiums(insFeeOrderNew.getNoPremium().multiply(nonExportSuperviseCosts.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        nonExportFee.setOtherCostsProportion(nonOtherCostsProportion);
+        nonExportFee.setOtherCostsPremiums(insFeeOrderNew.getNoPremium().multiply(nonOtherCostsProportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
+        nonExportFee.setTotalProportion(nonExportSuperviseCosts.add(nonOtherCostsProportion));
+        nonExportFee.setTotalAmount(nonExportSuperviseCosts.add(nonOtherCostsProportion));
+        exportFeeList.add(nonExportFee);
+
+        feeOrderNewVo.setEntranceFee(entranceFeeList);
+        feeOrderNewVo.setExportFee(exportFeeList);
+        feeOrderNewVo.setDeptManagerFee(deptManagerFeeList);
+        return feeOrderNewVo;
+    }
+
+    public List<DistributionLevelVo> converDistrbutionData(InsFeeOrderNew insFeeOrderNew) {
+        ArrayList<DistributionLevelVo> resultList = new ArrayList<>();
+        DistributionLevelVo  levelOne  =  new DistributionLevelVo();
+        levelOne.setDistributionLevel("一级分销");
+        String oneUserName=  this.getUserName(insFeeOrderNew.getFirstLevelUserId());
+        levelOne.setUserName(oneUserName);  //分销人
+        levelOne.setDistributionRatio(insFeeOrderNew.getFirstDetailProportion());  // 分销比例
+        levelOne.setAmount(insFeeOrderNew.getFirstDetailPremiums());   // 分销金额
+        resultList.add(levelOne);
+
+
+        DistributionLevelVo levelTwo = new DistributionLevelVo();
+        levelTwo.setDistributionLevel("二级分销");
+        String twoUserName=  this.getUserName(insFeeOrderNew.getTwoLevelUserId());
+        levelTwo.setUserName(twoUserName);  //分销人
+        levelTwo.setDistributionRatio(insFeeOrderNew.getSecondDetailProportion());  // 分销比例
+        levelTwo.setAmount(insFeeOrderNew.getSecondDetailPremiums());   // 分销金额
+        resultList.add(levelTwo);
+
+
+        DistributionLevelVo levelThree = new DistributionLevelVo();
+        levelThree.setDistributionLevel("三级分销");
+        String threeUserName=  this.getUserName(insFeeOrderNew.getThreeLevelUserId());
+        levelThree.setUserName(threeUserName);  //分销人
+        levelThree.setDistributionRatio(insFeeOrderNew.getThirdDetailProportion());  // 分销比例
+        levelThree.setAmount(insFeeOrderNew.getThirdDetailPremiums());   // 分销金额
+        resultList.add(levelThree);
+        return resultList;
+    }
+
+    private String getUserName(String firstLevelUserId) {
+        if(StringUtils.isNotEmpty(firstLevelUserId)){
+            SysUser sysUser = sysUserService.getBaseMapper().selectById(firstLevelUserId);
+            if(ObjectUtils.isNotEmpty(sysUser)){
+                return sysUser.getName() + "(" + sysUser.getId() + ")";
+            }
+        }
+        return null;
+    }
 }

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

@@ -3,9 +3,10 @@ package com.ydtech.modules.fee.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.constants.enums.dict.insurance.EnergyType;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.order.entity.po.InsOrdersCarUserInfo;
-import com.ydtech.modules.order.service.*;
+import com.ydtech.modules.admin.model.po.SysUserAccount;
+import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserAccountService;
 import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.esm.model.EsmRetail;
@@ -17,15 +18,23 @@ import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.modules.protocol.service.PtlNewCarJudgeRulesService;
 import com.ydtech.modules.protocols.entity.po.*;
 import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
 import com.ydtech.modules.protocols.service.*;
 import com.ydtech.utils.idgen.IdGenerate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -67,23 +76,11 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     @Autowired
     private SysUserAccountService  sysUserAccountService;
 
-    @Resource
-    private InsOrdersCarInfoService insOrdersCarInfoService;
-
-    @Resource
-    private InsOrdersCarUserInfoService insOrdersCarUserInfoService;
-
-    @Resource
-    private InsOrdersRiskService insOrdersRiskService;
-
-    @Resource
-    private InsOrdersKindService insOrdersKindService;
-
-    @Resource
-    private InsAreaCompanyCarInfoService insAreaCompanyCarInfoService;
+    @Autowired
+    private PtlNewCarJudgeRulesService ptlNewCarJudgeRulesService;
 
-    @Resource
-    private InsAreaCompanyCarUserInfoService insAreaCompanyCarUserInfoService;
+    @Autowired
+    private PtlAgreementService ptlAgreementService;
 
 
     @Override
@@ -101,6 +98,8 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
 
     }
 
+    private static final Logger log = LoggerFactory.getLogger("FeeRules");
+
     /**
      * 校验费用因子
      */
@@ -108,30 +107,25 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     public void verificationCostFactor(InsAreaCompany insAreaCompany,InsOrders insOrders){
 
         List<AgreementProductCosts> agreementProductCosts = ptlAgreementProductCostsNewService.costsGetList(insAreaCompany.getAgreementId(),insOrders.getProductid());
-        if(agreementProductCosts == null || agreementProductCosts.size() == 0){
-            throw new SystemException("协议费用因子为空");
+//        if(agreementProductCosts == null || agreementProductCosts.size() == 0){
+//            throw new SystemException("协议费用因子为空");
+//        }
+        for(int i=0;i<agreementProductCosts.size();i++)
+        {
+            if(agreementProductCosts.get(i).getPriorityLevel()==null){
+                agreementProductCosts.get(i).setPriorityLevel(1);
+            }
         }
-        //按优先级进行排序
-        Collections.sort(agreementProductCosts, Comparator.comparingInt(AgreementProductCosts::getPriorityLevel).reversed());
-
-        insOrders.setCarinfo(insOrdersCarInfoService.getCarInfoByOrderNo(insAreaCompany.getId()));
-        List<InsOrdersCarUserInfo> carUserInfoByOrderNo = insOrdersCarUserInfoService.getCarUserInfoByOrderNo(insAreaCompany.getId());
-        carUserInfoByOrderNo.forEach(item->{
-            switch(item.getUserType()){
-                case 1:
-                    insOrders.setOwnerinfo(item);
-                    break;
-                case 2:
-                    insOrders.setApplyinfo(item);
-                    break;
-                case 3:
-                    insOrders.setInsureinfo(item);
-                    break;
+        if(agreementProductCosts.size() > 0) {
+            //按优先级进行排序
+            Collections.sort(agreementProductCosts, Comparator.comparingInt(AgreementProductCosts::getPriorityLevel).reversed());
+            //遍历费用因子
+            String costsId = verificationCosts(agreementProductCosts, insAreaCompany, insOrders);
+            if(costsId != null) {
+                calcCosts(costsId, insAreaCompany);
+                System.out.printf("费用因子校验通过,子订单id:" + insAreaCompany.getId() + ",费用id:" + costsId);
             }
-        });
-        //遍历费用因子
-        String costsId = verificationCosts(agreementProductCosts, insAreaCompany,insOrders);
-        calcCosts(costsId,insAreaCompany);
+        }
     }
 
     /**
@@ -144,23 +138,6 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
 
 
         List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRules = ptlAgreementUndwrtRulesNewService.rulesList(insAreaCompany.getAgreementId());
-        insOrders.setCarinfo(insOrdersCarInfoService.getById(insAreaCompany.getCarInfoId()));
-        List<String> uids = new ArrayList<>();
-        insOrders.setCarinfo(insOrdersCarInfoService.getCarInfoByOrderNo(insAreaCompany.getId()));
-        List<InsOrdersCarUserInfo> carUserInfoByOrderNo = insOrdersCarUserInfoService.getCarUserInfoByOrderNo(insAreaCompany.getId());
-        carUserInfoByOrderNo.forEach(item->{
-            switch(item.getUserType()){
-                case 1:
-                    insOrders.setOwnerinfo(item);
-                    break;
-                case 2:
-                    insOrders.setApplyinfo(item);
-                    break;
-                case 3:
-                    insOrders.setInsureinfo(item);
-                    break;
-            }
-        });
         verificationRules(ptlAgreementUndwrtRules, insAreaCompany,insOrders);
     }
 
@@ -171,8 +148,13 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
      */
     @Override
     public void calcCosts(String costsId,InsAreaCompany insAreaCompany) {
+        //获取协议信息
+        PtlAgreement ptlAgreement = ptlAgreementService.getById(insAreaCompany.getAgreementId());
+        BigDecimal taxRadio = new BigDecimal("1.00");
+        if(ptlAgreement.getWithTax().equals("是")){
+            taxRadio = new BigDecimal("1.06");
+        }
         //税比例 固定1.06
-        BigDecimal taxRadio = new BigDecimal("1.06");
         //查找入口与出口费用比例
         //入口配置
         PtlAgreementProductCostsNew ptlAgreementProductCostsNew = ptlAgreementProductCostsNewService.getById(costsId);
@@ -274,6 +256,10 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         ));
 
 
+        //设置出口费用
+
+
+
         //设置出口费用
         //每级的加投费用为 计算出每级管理费的占比   *   加投费用
         //(一级管理费比例 / 总费用比例) * 加投费用
@@ -305,7 +291,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         }
 
 
-        //交强出口比例
+        //交强管理比例
         insFeeOrderNew.setJqDeptProportionLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1());
         insFeeOrderNew.setJqDeptPremiumsLevel1(
                 insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel1()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel1)
@@ -336,7 +322,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                 insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqExportInvestmentProportion()).divide(new BigDecimal("100"))
         );
 
-        //商业出口比例
+        //商业管理比例
         insFeeOrderNew.setSyDeptProportionLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1());
         insFeeOrderNew.setSyDeptPremiumsLevel1(
                 insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel1()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel1)
@@ -369,7 +355,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         );
 
 
-        //非车出口比例
+        //非车管理比例
         insFeeOrderNew.setNoDeptProportionLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1());
         insFeeOrderNew.setNoDeptPremiumsLevel1(
                 insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel1()).divide(new BigDecimal("100"))
@@ -414,31 +400,31 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
             List<EsmUserReferrer> parents = esmUserReferrerService.findParents(sysUser.getId());
 
             if (esmRetail != null) {
+                BigDecimal sumPremium = insFeeOrderNew.getJqPremium().add(insFeeOrderNew.getSyPremium()).add(insFeeOrderNew.getNoPremium());
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 3){
                     insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
-                    insFeeOrderNew.setFirstDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
-                    if(parents.size() > 2){
+                    insFeeOrderNew.setFirstDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
+                    if(parents != null && parents.size() > 2){
                         insFeeOrderNew.setThreeLevelUserId(parents.get(2).getId());
                     }
                 }
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 2){
                     insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
-                    insFeeOrderNew.setSecondDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
-                    if(parents.size() > 1){
+                    insFeeOrderNew.setSecondDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
+                    if(parents != null && parents.size() > 1){
                         insFeeOrderNew.setTwoLevelUserId(parents.get(1).getId());
                     }
                 }
                 if(Integer.parseInt(esmRetail.getRetailtype()) >= 1){
                     insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
-                    insFeeOrderNew.setThirdDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")));
-                    if(parents.size() > 0) {
+                    insFeeOrderNew.setThirdDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")));
+                    if(parents != null && parents.size() > 0) {
                         insFeeOrderNew.setFirstLevelUserId(parents.get(0).getId());
                     }
                 }
             }
         }
         insFeeOrderNewService.saveOrUpdate(insFeeOrderNew);
-
     }
 
 
@@ -466,45 +452,59 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //匹配费用因子
         //获取所有费用属性
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        //获取新旧车信息
+        PtlNewCarJudgeRules carJudgeRule = getCarJudgeRule(insAreaCompany.getCompanyId());
         //获取所有费用属性关联
-        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders);
-
-        List<AgreementProductCosts> filterAgreementProductCosts = new ArrayList<>();
-
-        boolean isNoCar = false;
-        //查找是否有强制非车因子
-        for(int i=0;i<agreementProductCosts.size();i++) {
-            PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink =
-                    agreementProductCosts.get(i).getCostsAttrLinks().stream().filter(x -> x.getAttrCode().equals("IsNonMotorInsurance")).findFirst().orElse(null);
-
-            if(!Objects.isNull(ptlAgreementProductCostsAttrLink)){
-                if(ptlAgreementProductCostsAttrLink.getMin().equals("1")){
-                    //只走强制非车的费用因子
-                    AgreementProductCosts productCosts = agreementProductCosts.get(i);
-                    filterAgreementProductCosts.add(productCosts);
-                    isNoCar = true;
-                }
-
-            }
-        }
-        if(filterAgreementProductCosts.isEmpty()){
-            filterAgreementProductCosts = agreementProductCosts;
-        }
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders, undwrtRulesAttrList, carJudgeRule);
+
+//        List<AgreementProductCosts> filterAgreementProductCosts = new ArrayList<>();
+
+//        boolean isNoCar = false;
+//        //查找是否有强制非车因子
+//        for(int i=0;i<agreementProductCosts.size();i++) {
+//            PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink =
+//                    agreementProductCosts.get(i).getCostsAttrLinks().stream().filter(x -> x.getAttrCode().equals("IsNonMotorInsurance")).findFirst().orElse(null);
+//
+//            if(!Objects.isNull(ptlAgreementProductCostsAttrLink)){
+//                if(ptlAgreementProductCostsAttrLink.getMin().equals("1")){
+//                    //只走强制非车的费用因子
+//                    AgreementProductCosts productCosts = agreementProductCosts.get(i);
+//                    filterAgreementProductCosts.add(productCosts);
+//                    isNoCar = true;
+//                }
+//
+//            }
+//        }
+//        if(filterAgreementProductCosts.isEmpty()){
+//            filterAgreementProductCosts = agreementProductCosts;
+//        }
         //是否强制走非车
-        if(isNoCar) {
-            if(judgementsIsNoCar(filterAgreementProductCosts.get(0).getCostsAttrLinks(),undwrtRulesAttrList,ruleAttrMappingVoList)){
-                return filterAgreementProductCosts.get(0).getId();
-            }
-        }else{
-            for (int i = 0; i < filterAgreementProductCosts.size(); i++) {
-                //判断是否匹配
-                if (judgements(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
-                    //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
-                    return filterAgreementProductCosts.get(i).getId();
-                }
+//        if(isNoCar) {
+//            for(int i=0;i<filterAgreementProductCosts.size();i++) {
+//                if (judgementsIsNoCar(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
+//                    return filterAgreementProductCosts.get(i).getId();
+//                }
+//            }
+//        }else{
+//            for (int i = 0; i < filterAgreementProductCosts.size(); i++) {
+//                //判断是否匹配
+//                if (judgements(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
+//                    //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
+//                    return filterAgreementProductCosts.get(i).getId();
+//                }
+//            }
+//        }
+        for (int i = 0; i < agreementProductCosts.size(); i++) {
+            //判断是否匹配
+            System.out.printf("费用因子匹配开始:" + agreementProductCosts.get(i).getId() + "\n");
+            System.out.println("费用因子备注:" + agreementProductCosts.get(i).getCostsDescription() + "\n");
+            if (judgements(agreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
+                //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
+                return agreementProductCosts.get(i).getId();
             }
         }
-        throw new SystemException("费用因子匹配失败");
+        return null;
+//        throw new SystemException("费用因子匹配失败");
     }
 
 
@@ -513,17 +513,18 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //获取所有承保规则属性
         List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
         //获取所有费用属性关联
-        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders);
+        List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders, undwrtRulesAttrList,getCarJudgeRule(insAreaCompany.getCompanyId()));
 
 
         for (int i = 0; i < ptlAgreementUndwrtRulesNews.size(); i++) {
             //判断是否匹配
-            if (judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
-                //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
-                return true;
+            System.out.printf("费用因子匹配开始:" + ptlAgreementUndwrtRulesNews.get(i).getId() + "\n");
+            System.out.println("费用因子备注:" + ptlAgreementUndwrtRulesNews.get(i).getRuleDescription() + "\n");
+            if (!judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
+                throw new SystemException("承保规则校验失败");
             }
         }
-        throw new SystemException("承保规则校验失败");
+        return true;
     }
 
     /**
@@ -542,30 +543,29 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
 
             //查找规则中的 传值属性
             RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
+
+            //先跳过强制非车的检测
+            if(ptlAgreementProductCostsAttrLinks.get(i).getAttrCode().equals("IsNonMotorInsurance"))
+                continue;
+
             //如果查找不到 传值属性 直接费用对比失败
-            if(ruleAttrMappingVo == null)
+            if(ruleAttrMappingVo == null){
+                System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode()  + "\n");
+                System.out.printf("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode()  + "\n");
                 return false;
+            }
+
             //查找 费用因子规则
             PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get();
-            //如果是多选 对value进行转换
-            if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
-                PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
-                        x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
-                ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getName());
-            }
-            //如果是单选 并且是 性别的话 转换为code
-            if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio"))
-            {
-                if("CarOwnersSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "ApplicantSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) ||
-                        "InsuredSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode())){
-                    PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
-                            x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
-                    ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getCode());
-                }
-            }
+
             useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
-            if(!useFlag)
+            if(!useFlag){
+                System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode() + "\n");
+                System.out.printf("检验的值:" + ptlAgreementProductCostsAttrLinks.get(i).getMin() + "\n");
+                System.out.printf("传入的值:" + ruleAttrMappingVo.getValue() + "\n");
                 return false;
+            }
+
         }
         return useFlag;
     }
@@ -590,14 +590,17 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                     x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
 
             //如果查找不到 传值属性 直接费用对比失败
-            if(ruleAttrMappingVo == null)
+            if(ruleAttrMappingVo == null) {
+                System.out.printf("规则匹配失败:" + ptlAgreementUndwrtRulesAttrLinks.get(i).getAttrCode() + "\n");
+                System.out.printf("传入的值找不到该属性:" + ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode() + "\n");
                 continue;
+            }
             //查找 费用因子规则
             PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().get();
             //如果是多选 对value进行转换
             if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
                 PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
-                        x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
+                        x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
                 ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getName());
             }
             //如果是单选 并且是 性别的话 转换为code
@@ -606,13 +609,19 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                 if("CarOwnersSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "ApplicantSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) ||
                         "InsuredSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode())){
                     PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
-                            x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
+                            x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
                     ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getCode());
                 }
             }
             useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
             if(!useFlag)
+            {
+                System.out.printf("规则匹配失败:" + ptlAgreementUndwrtRulesAttrLinks.get(i).getAttrCode() + "\n");
+                System.out.printf("检验的值:" + ptlAgreementUndwrtRulesAttrLinks.get(i).getMin() + "\n");
+                System.out.printf("传入的值:" + ruleAttrMappingVo.getValue() + "\n");
                 return false;
+
+            }
         }
         return useFlag;
     }
@@ -640,9 +649,27 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
                 return false;
             //查找 费用因子规则
             PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get();
+            //如果是多选 对value进行转换
+            if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
+                PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
+                        x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
+                ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getName());
+            }
+            //如果是单选 并且是 性别的话 转换为code
+            if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio"))
+            {
+                if("CarOwnersSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "ApplicantSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) ||
+                        "InsuredSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode())){
+                    PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
+                            x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
+                    ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getCode());
+                }
+            }
             useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
-            if(!useFlag)
+            if(!useFlag) {
+                System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode());
                 return false;
+            }
         }
         return useFlag;
     }
@@ -682,6 +709,10 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")){
             return inputTextEqual(ptlAgreementUndwrtRulesAttrLink,value);
         }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){
+            //截取车牌
+            if(ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")){
+                value = value.substring(0,2);
+            }
             return selectEqual(ptlAgreementUndwrtRulesAttrLink,value);
         }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")){
             return radioEqual(ptlAgreementUndwrtRulesAttrLink,value);
@@ -808,12 +839,18 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
      * @return
      */
     private boolean selectEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
-        if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
+        if(ptlAgreementProductCostsAttrLink.getMin() != null && ptlAgreementProductCostsAttrLink.getMin().contains(value)){
             return true;
         }
         return false;
     }
 
+    /**
+     * 属性为选择框判断
+     * @param ptlAgreementUndwrtRulesAttrLink
+     * @param value
+     * @return
+     */
     private boolean selectEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
         if(ptlAgreementUndwrtRulesAttrLink.getMin() != null && ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
             return false;
@@ -821,6 +858,12 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         return true;
     }
 
+    /**
+     * 属性为单选框判断
+     * @param ptlAgreementProductCostsAttrLink
+     * @param value
+     * @return
+     */
     private boolean radioEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
         //新能源判断
         if("NewEnergy".equals(ptlAgreementProductCostsAttrLink.getAttrCode())){
@@ -855,4 +898,18 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         }
         return true;
     }
+
+    /**
+     * 获取车辆新旧车信息
+     * @param companyId
+     * @return
+     */
+    private PtlNewCarJudgeRules getCarJudgeRule(String companyId){
+        //获取车辆新旧车信息
+        List<PtlNewCarJudgeRules> list = ptlNewCarJudgeRulesService.list(new LambdaQueryWrapper<PtlNewCarJudgeRules>().eq(PtlNewCarJudgeRules::getCompanyId, companyId));
+        if(list.size()>0){
+            return list.get(0);
+        }
+        return null;
+    }
 }

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

@@ -63,7 +63,12 @@ public class CarSettleController extends BaseController {
         //查询已承保的子订单号
         List<InsAreaCompany> areaList =insAreaCompanyService.query()
                 .eq(StringUtils.isNotEmpty(orderNo),"orderno",orderNo)
-                .eq("orderstatus","3").list();//3已承保
+                .eq("orderstatus","2").list();//3已承保
+
+//        List<InsAreaCompany> areaList = insAreaCompanyService.query()
+//                .eq("orderno", orderNo)
+//                .and(wrapper -> wrapper.eq("orderstatus", "3").or().eq("orderstatus", "2"))
+//                .list();//3已承保
         if(areaList!=null && areaList.size()>0){
             return insOrdersService.getByCompanyId(areaList.get(0).getId(),"accountingUser");
         }else{

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

@@ -1,6 +1,7 @@
 package com.ydtech.modules.fnc.controller;
 
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.vo.SysUserBankCardVO;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.fnc.entity.InsPlyIncome;
 import com.ydtech.modules.fnc.service.InsPlyIncomeService;
@@ -10,15 +11,15 @@ import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.OrderQueryVo;
 import com.ydtech.utils.StringUtils;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.time.LocalDate;
 import java.time.Period;
+import java.util.List;
 
 /**
  * <p>
@@ -64,5 +65,35 @@ public class InsPlyIncomeController extends BaseController {
 
         return result;
     }
+    @PostMapping("/query")
+    @ApiOperation(value = "[1]保司费用查询new")
+    public HttpResult<BasePageResult<InsPlyIncome>> query(@RequestBody @Valid InsPlyIncomeVo insPlyIncomeVo) {
+
+        HttpResult<BasePageResult<InsPlyIncome>> result=insPlyIncomeService.queryNew(insPlyIncomeVo);
+
+        return result;
+    }
+    @PutMapping("/balance")
+    @ApiModelProperty(value = "结算手续费")
+    public HttpResult<Object> balance(@RequestBody InsPlyIncomeVo insPlyIncomeVo) {
+        insPlyIncomeService.uodateBalance(insPlyIncomeVo);
+        return HttpResult.ok("手续费结算成功");
+    }
+
+    @PostMapping("/totalQuery")
+    @ApiOperation(value = "跟单费总数")
+    public HttpResult<BasePageResult<InsPlyIncome>> totalQuery(@RequestBody @Valid InsPlyIncomeVo insPlyIncomeVo) {
+        HttpResult<BasePageResult<InsPlyIncome>> result=insPlyIncomeService.totalQuery(insPlyIncomeVo);
+        return result;
+    }
+
+    @PutMapping("/batchBalance")
+    @ApiModelProperty(value = "批量跟单费")
+    public HttpResult<Object> batchBalance(@RequestBody InsPlyIncomeVo insPlyIncomeVo) {
+
+        return   insPlyIncomeService.batchBalance(insPlyIncomeVo);
+    }
+
+
 
 }

+ 42 - 0
src/main/java/com/ydtech/modules/fnc/controller/SettlementDocumentaryFeesController.java

@@ -0,0 +1,42 @@
+package com.ydtech.modules.fnc.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.vo.SysUserAccountVo;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesEntity;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryFeesService;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+@RestController
+@Api(tags = "跟单费结算")
+@RequestMapping("/fnc/SettlementFees")
+public class SettlementDocumentaryFeesController extends BaseController {
+    @Autowired
+    private SettlementDocumentaryFeesService settlementDocumentaryFeesService;
+
+    @PostMapping("/query")
+    @ApiOperation(value = "查询")
+    public HttpResult<BasePageResult<SettlementDocumentaryFeesEntity>>query(@RequestBody @Valid SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) {
+        HttpResult<  BasePageResult<SettlementDocumentaryFeesEntity>> result=settlementDocumentaryFeesService.querySettle(settlementDocumentaryFeesVo);
+        return result;
+    }
+
+    @PostMapping("/insert")
+    @ApiOperation("提交")
+    public void submit(@RequestBody SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) {
+       settlementDocumentaryFeesService.inertSettle(settlementDocumentaryFeesVo);
+    }
+    @PutMapping("/documentarySettle")
+    @ApiOperation("跟单费结算")
+    public HttpResult documentarySettle (@RequestBody SettlementDocumentaryFeesVo settlementDocumentaryFeesVo){
+      return   settlementDocumentaryFeesService.documentarySettle(settlementDocumentaryFeesVo);
+    }
+
+}

+ 40 - 0
src/main/java/com/ydtech/modules/fnc/controller/SettlementDocumentaryLogController.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.fnc.controller;
+
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesEntity;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryFeesService;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryLogService;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryLogVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+@RestController
+@Api(tags = "跟单费结算")
+@RequestMapping("/fnc/SettlementFeesLog")
+public class SettlementDocumentaryLogController {
+
+
+
+    @Autowired
+    private SettlementDocumentaryLogService settlementDocumentaryLogService;
+
+    @PostMapping("/query")
+    @ApiOperation(value = "查询")
+    public BasePageResult<SettlementDocumentaryLogEntity> query(@RequestBody @Valid SettlementDocumentaryLogVo settlementDocumentaryLogVo) {
+        BasePageResult<SettlementDocumentaryLogEntity> result=settlementDocumentaryLogService.querySettle(settlementDocumentaryLogVo);
+        return result;
+    }
+
+
+
+
+}

+ 11 - 0
src/main/java/com/ydtech/modules/fnc/dao/InsPlyIncomeMapper.java

@@ -1,13 +1,16 @@
 package com.ydtech.modules.fnc.dao;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.modules.fnc.entity.InsPlyIncome;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.fnc.entity.InsPlySettleDetail;
 import com.ydtech.modules.fnc.vo.InsPlyIncomeVo;
 import com.ydtech.modules.fnc.vo.InsPlySettleVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -72,4 +75,12 @@ public interface InsPlyIncomeMapper extends BaseMapper<InsPlyIncome> {
     )
     List<InsPlyIncome> selectSettleByCondition(InsPlySettleVo insPlySettleVo);
 
+
+
+    List<InsPlyIncome> queryNew(HashMap<String, Object> params);
+
+    List<InsPlyIncome> totalQuery(HashMap<String, Object> params);
+
+    void uopdateByOrderno(InsPlyIncome insPlyIncome);
+
 }

+ 22 - 0
src/main/java/com/ydtech/modules/fnc/dao/SettlementDocumentaryFeesMapper.java

@@ -0,0 +1,22 @@
+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.fnc.entity.SettlementDocumentaryFeesEntity;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Mapper
+public interface SettlementDocumentaryFeesMapper  extends BaseMapper<SettlementDocumentaryFeesEntity> {
+
+    List<SettlementDocumentaryFeesEntity> querySettle(HashMap<String, Object> params);
+
+    List<SettlementDocumentaryFeesEntity> checkDate(HashMap<String, Object> params);
+
+    List<SettlementDocumentaryFeesEntity> selectAll(HashMap<String, Object> params);
+
+}

+ 12 - 0
src/main/java/com/ydtech/modules/fnc/dao/SettlementDocumentaryLogMapper.java

@@ -0,0 +1,12 @@
+package com.ydtech.modules.fnc.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesEntity;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface SettlementDocumentaryLogMapper extends BaseMapper<SettlementDocumentaryLogEntity> {
+}

+ 62 - 1
src/main/java/com/ydtech/modules/fnc/entity/InsPlyIncome.java

@@ -31,10 +31,18 @@ public class InsPlyIncome implements Serializable {
     @TableField("orderno")
     private String orderno;
 
-    @ApiModelProperty("保单号")
+    @ApiModelProperty("交强保单号")
     @TableField("policyno")
     private String policyno;
 
+    @ApiModelProperty("商业保单号")
+    @TableField("sy_policyno")
+    private String syPolicyno;
+
+    @ApiModelProperty("非车保单号")
+    @TableField("no_policyno")
+    private String noPolicyno;
+
     @ApiModelProperty("结算单号")
     @TableField(exist = false)
     private String settleno;
@@ -113,4 +121,57 @@ public class InsPlyIncome implements Serializable {
     @ApiModelProperty("记录插入时间")
     @TableField("create_time")
     private LocalDateTime createTime;
+
+    @ApiModelProperty("凭证号")
+    @TableField("voucher_number")
+    private String voucherNumber;
+
+    @ApiModelProperty("合同号")
+    @TableField("contract_id")
+    private String contractId;
+
+    @ApiModelProperty("合同附件id")
+    @TableField("contract_file_id")
+    private String contractFileId;
+
+    @ApiModelProperty("手续费结算状态  1 为已结算")
+    @TableField("handling_fees_status")
+    private String handlingFeesStatus;
+
+
+    @ApiModelProperty("跟单费结算状态  1 为已结算")
+    @TableField("documentary_fees_status")
+    private String documentaryFeesStatus;
+
+
+    @ApiModelProperty("是否是非车")
+    @TableField("is_not_car")
+    private String isNotCar;
+
+
+    @ApiModelProperty("总单数")
+    @TableField(exist = false)
+    private String totalorders;
+
+
+    @ApiModelProperty("总费用")
+    @TableField(exist = false)
+    private String totAmount;
+
+
+    @ApiModelProperty("协议类型")
+    @TableField(exist = false)
+    private String agreementtype;
+
+
+    @ApiModelProperty("ids")
+    @TableField(exist = false)
+    private String ids;
+
+    @ApiModelProperty("时间范围")
+    @TableField(exist = false)
+    private String timeFrame;
+
+
+
 }

+ 66 - 0
src/main/java/com/ydtech/modules/fnc/entity/SettlementDocumentaryFeesEntity.java

@@ -0,0 +1,66 @@
+package com.ydtech.modules.fnc.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+@TableName("settlement_documentary_fees")
+@ApiModel(value = "SettlementDocumentaryFees对象", description = "跟单费结算")
+public class SettlementDocumentaryFeesEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    @ApiModelProperty("主键")
+    @TableId("id")
+    private String id;
+
+
+    @ApiModelProperty("结算单数")
+    @TableField("total_orders")
+    private String totalOrders;
+
+    @ApiModelProperty("时间范围")
+    @TableField("time_frame")
+    private String timeFrame;
+
+    @ApiModelProperty("结算总金额")
+    @TableField("total_amount")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty("结算金额")
+    @TableField("settlement_amount")
+    private BigDecimal settlementAmount;
+
+    @ApiModelProperty("未结算金额")
+    @TableField("unsettled_amount")
+    private BigDecimal unsettledAmount;
+
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+
+    @ApiModelProperty("开始时间")
+    @TableField("start_time")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty("结束时间")
+    @TableField("end_time")
+    private LocalDateTime endTime;
+
+
+
+
+}

+ 45 - 0
src/main/java/com/ydtech/modules/fnc/entity/SettlementDocumentaryLogEntity.java

@@ -0,0 +1,45 @@
+package com.ydtech.modules.fnc.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Getter
+@Setter
+@TableName("settlement_documentary_log")
+@ApiModel(value = "SettlementDocumentaryLog对象", description = "跟单费结算日志")
+public class SettlementDocumentaryLogEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty("主键")
+    @TableId("id")
+    private String id;
+
+    @ApiModelProperty("金额")
+    @TableField("amount")
+    private BigDecimal amount;
+
+    @ApiModelProperty("关联跟单费id")
+    @TableField("settlement_documentary_id")
+    private String settlementDocumentaryId;
+
+    @ApiModelProperty("金额类型")
+    @TableField("amount_type")
+    private String amountType;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private Date createTime;
+
+    @ApiModelProperty("手续费结算金额")
+    @TableField("handing_amount")
+    private BigDecimal handingAmount;
+
+}

+ 9 - 1
src/main/java/com/ydtech/modules/fnc/service/InsFeeAuditService.java

@@ -13,6 +13,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface InsFeeAuditService extends IService<InsFeeAudit> {
 
-    public void feeAudit(String orderNo,String insOrderNo) throws Exception;
+     void feeAudit(String orderNo,String insOrderNo) throws Exception;
+
+     /**
+      * 自动审核
+      * @param orderNo
+      * @param insOrderNo
+      * @return
+      */
+     boolean autoFeeAudit(String orderNo,String insOrderNo) throws Exception;
 
 }

+ 15 - 0
src/main/java/com/ydtech/modules/fnc/service/InsPlyIncomeService.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.fnc.vo.InsPlyIncomeVo;
 import com.ydtech.modules.order.entity.BasePageResult;
 
+import java.util.List;
+
 /**
  * <p>
  * 保司结算手续费 服务类
@@ -16,4 +18,17 @@ import com.ydtech.modules.order.entity.BasePageResult;
  */
 public interface InsPlyIncomeService extends IService<InsPlyIncome> {
     public HttpResult<BasePageResult<InsPlyIncome>> queryplyIncome(InsPlyIncomeVo insPlyIncomeVo);
+
+    void saveBalance(String companyId, String orderno);
+
+
+
+    void uodateBalance(InsPlyIncomeVo insPlyIncomeVo);
+
+
+    HttpResult<BasePageResult<InsPlyIncome>> totalQuery(InsPlyIncomeVo insPlyIncomeVo);
+
+    HttpResult batchBalance(InsPlyIncomeVo insPlyIncomeVo);
+
+    HttpResult<BasePageResult<InsPlyIncome>> queryNew(InsPlyIncomeVo insPlyIncomeVo);
 }

+ 20 - 0
src/main/java/com/ydtech/modules/fnc/service/SettlementDocumentaryFeesService.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.fnc.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesEntity;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+
+import java.util.HashMap;
+
+public interface SettlementDocumentaryFeesService extends IService<SettlementDocumentaryFeesEntity> {
+    HttpResult<BasePageResult<SettlementDocumentaryFeesEntity>>  querySettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo);
+
+    HttpResult inertSettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo);
+
+    String checkDate(HashMap<String, Object> params);
+
+    HttpResult documentarySettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo);
+
+}

+ 16 - 0
src/main/java/com/ydtech/modules/fnc/service/SettlementDocumentaryLogService.java

@@ -0,0 +1,16 @@
+package com.ydtech.modules.fnc.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesEntity;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryLogVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+
+import java.util.HashMap;
+import java.util.List;
+
+public interface SettlementDocumentaryLogService extends IService<SettlementDocumentaryLogEntity> {
+    BasePageResult<SettlementDocumentaryLogEntity> querySettle(SettlementDocumentaryLogVo settlementDocumentaryLogVo);
+
+}

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

@@ -1,16 +1,15 @@
 package com.ydtech.modules.fnc.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
-import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum;
 import com.ydtech.modules.admin.model.SysDept;
-import com.ydtech.modules.admin.model.SysDeptAccountEntity;
+import com.ydtech.modules.admin.model.SysDeptAccount;
+import com.ydtech.modules.admin.model.SysDeptAccountHistory;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.po.SysUserAccount;
-import com.ydtech.modules.admin.service.SysDeptAccountService;
-import com.ydtech.modules.admin.service.SysDeptService;
-import com.ydtech.modules.admin.service.SysUserAccountService;
-import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.admin.service.*;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fnc.dao.FncInsAreaCompanyMapper;
 import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
@@ -30,14 +29,12 @@ import com.ydtech.modules.fnc.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsFeeOrder;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.service.InsFeeOrderService;
-import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
 import com.ydtech.utils.DateUtil;
 import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-import org.apache.poi.hpsf.Decimal;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -84,6 +81,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     @Autowired
     private SysDeptAccountService sysDeptAccountService;
 
+    @Autowired
+    private SysDeptAccountHistoryService sysDeptAccountHistoryService;
+
 
     public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper, InsFeeOrderService insFeeOrderService,InsDeptFeeService insDeptFeeService,EsmUserReferrerService esmUserReferrerService,SysUserService sysUserService,InsCommissionService insCommissionService,InsCompanyFeeService insCompanyFeeService,InsPlyIncomeMapper insPlyIncomeMapper) {
         this.insAreaCompanyMapper = insAreaCompanyMapper;
@@ -110,7 +110,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 
 
         InsOrders order=insOrdersMapper.selectById(orderNo);
-        InsFeeOrder insFeeOrder=insFeeOrderService.getByInsOrderNo(insFeeAudit.getInsOrderNo());
+        InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo());
         InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
 
         //获取该订单的费用
@@ -133,38 +133,105 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         //bigdecimal为null时设置为0
 //        handleBigdecimal(insFeeOrder);
         //生成保司费用(应收费用)
-        gene_orderIncome( order, insFeeOrder,insAreaCompany);
+        gene_orderIncome( order, insFeeOrderNew,insAreaCompany);
         //生成机构费用
-        gene_deptfee( order, insFeeOrder,insAreaCompany);
+        gene_deptfee( order, insFeeOrderNew,insAreaCompany);
         //生成分销费用
-        saveRetail(order,insFeeOrder,insAreaCompany);
+//        saveRetail(order,insFeeOrderNew,insAreaCompany);
         //个代费用生成
-        saveInsCompanyFee(order,insFeeOrder,insAreaCompany);
+//        saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany);
 
 
 //      生成  用户账户表  数据
         if(StringUtils.isNotEmpty(order.getUserid())){
 //            用戶賬戶表
             SysUserAccount sysUserAccount = new SysUserAccount();
-//            部門金額表
-            SysDeptAccountEntity sysDeptAccountEntity = new SysDeptAccountEntity();
+
             sysUserAccount.setUserId(order.getUserid());
             if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) {
 //                手续非佣金  =  交强监管费用 + 商业监管费用 + 非车监管费用
 //                非跟单费用  = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用
+                //手续费入口费用
+//                BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
+//                BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
+//                BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
+//                BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount);    // 手续非佣金
+//                //其他费用入口费用
+//                BigDecimal jqOtherCostsPremiums  =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
+//                BigDecimal syOtherCostsPremiums  =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
+//                BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
+//                BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion);  //非跟单费用
+
+                //总机构 交强管理比例
+                BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1()
+                        .add(insFeeOrderNew.getJqDeptProportionLevel2())
+                        .add(insFeeOrderNew.getJqDeptProportionLevel3())
+                        .add(insFeeOrderNew.getJqDeptProportionLevel4())
+                        .add(insFeeOrderNew.getJqDeptProportionLevel5());
+
+                //总机构 商业管理比例
+                BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1()
+                        .add(insFeeOrderNew.getSyDeptProportionLevel2())
+                        .add(insFeeOrderNew.getSyDeptProportionLevel3())
+                        .add(insFeeOrderNew.getSyDeptProportionLevel4())
+                        .add(insFeeOrderNew.getSyDeptProportionLevel5());
+
+                //总机构 非车管理比例
+                BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1()
+                        .add(insFeeOrderNew.getNoDeptProportionLevel2())
+                        .add(insFeeOrderNew.getNoDeptProportionLevel3())
+                        .add(insFeeOrderNew.getNoDeptProportionLevel4())
+                        .add(insFeeOrderNew.getNoDeptProportionLevel5());
+
+                //总分销比例
+                BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion());
+
+                //交强出口比例
+                BigDecimal jqExportProceduresProportion = new BigDecimal(0);
+                if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){
+                    jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail);
+                }
+                //商业出口比例
+                BigDecimal syExportProceduresProportion = new BigDecimal(0);
+                if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){
+                    syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
+                }
+                //非车出口比例
+                BigDecimal noExportProceduresProportion = new BigDecimal(0);
+                if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){
+                    noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail);
+                }
+
+                //交强手续费出口比例
+                BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+                //交强跟单出口费用
+                BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium()
+                        .multiply(jqExportProceduresProportion
+                                .subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
 
+                //商业手续费出口比例
+                BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+                //商业跟单出口比例
+                BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium()
+                        .multiply(syExportProceduresProportion
+                                .subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
 
-                BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
-                BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
-                BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
-                BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount);    // 手续非佣金
+                //非车手续费出口比例
+                BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+                //非车跟单出口比例
+                BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium()
+                        .multiply(noExportProceduresProportion
+                                .subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
 
-                BigDecimal jqOtherCostsPremiums  =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
-                BigDecimal syOtherCostsPremiums  =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
-                BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
+                //用户出口手续费
+                BigDecimal totalPremiumAmount = new BigDecimal(0);
+                totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee);
+
+                //用户出口跟单费
+                BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
+                totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee);
 
 
-                BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion);  //非跟单费用
 //              用戶
                 sysUserAccount.setHandlingFee(totalPremiumAmount);
                 sysUserAccount.setDocumentary(totalOtherPremiumAmount);
@@ -172,93 +239,420 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
                 this.countUserAmount(insFeeOrderNew,orderNo);
                 sysUserAccount.setDocumentaryStatus("2");  // 收入
                 sysUserAccount.setSuborderId(orderNo);  // 订单Id
-//              部门金额
-                sysDeptAccountEntity.setHandlingFee(totalPremiumAmount);
-                sysDeptAccountEntity.setDocumentary(totalOtherPremiumAmount);
-//                sysDeptAccountEntity.setPromotion(noPremium);
-                sysDeptAccountEntity.setDeptId(order.getDeptid());
                 sysUserAccountService.addOrUpdate(sysUserAccount);
-                sysDeptAccountService.addOrUpdate(sysDeptAccountEntity);
 
 
+                String deptid = insFeeOrderNew.getDeptId();
+                String distributionStatus = insFeeOrderNew.getDistributionStatus();
+                // 定义一个数组来存储各级机构的管理费
+                BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
+                        insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
+                        insFeeOrderNew.getJqDeptPremiumsLevel5()};
+                BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
+                        insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
+                        insFeeOrderNew.getSyDeptPremiumsLevel5()};
+                BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
+                        insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
+                        insFeeOrderNew.getNoDeptPremiumsLevel5()};
+
+                for (int i = 1; i <= 5; i++) {
+                    // 根据循环次数确定机构ID的长度,第五级为11
+                    String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
+                    // 获取对应级别的机构信息
+                    SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
+                            .eq(SysDeptAccount::getDeptId, levelDeptId));
+
+                    // 初始化管理费总额为0
+                    BigDecimal sumManagementFee = BigDecimal.ZERO;
+
+                    // 根据分销等级和分销用户情况计算分销费用
+                    BigDecimal distributionFee = BigDecimal.ZERO;
+                    if (i == 5) {
+                        if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) {
+                            distributionFee = insFeeOrderNew.getSecondDetailPremiums();
+                        } else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) {
+                            distributionFee = insFeeOrderNew.getThirdDetailPremiums();
+                        }
+                    }
+
+                    // 根据分销等级计算管理费总额
+                    if (i == 5) {
+                        sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
+                                .add(syDeptPremiumsLevels[i - 1])
+                                .add(noDeptPremiumsLevels[i - 1])
+                                .add(distributionFee);
+                    } else {
+                        sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
+                                .add(syDeptPremiumsLevels[i - 1])
+                                .add(noDeptPremiumsLevels[i - 1]);
+                    }
+
+                    // 如果机构信息不为空,更新管理费并记录历史
+                    if (levelSysDeptAccount != null) {
+                        levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
+                        sysDeptAccountService.updateById(levelSysDeptAccount);
+                        // 记录历史信息
+                        SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
+                        sysDeptAccountHistory.setId(IdGenerate.nextId());
+                        sysDeptAccountHistory.setDeptId(levelDeptId);
+                        sysDeptAccountHistory.setAmount(sumManagementFee);
+                        sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee());
+                        sysDeptAccountHistory.setDocumentary("2"); //收入
+                        sysDeptAccountHistory.setSuborder(orderNo);
+                        sysDeptAccountHistory.setFromBankCard(null);
+                        sysDeptAccountHistory.setToBankCard(null);
+                        sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
+                        sysDeptAccountHistory.setCreateTime(new Date());
+                        sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
+                                ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
+                                ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
+                                ",分销费:" + distributionFee);
+                        sysDeptAccountHistoryService.save(sysDeptAccountHistory);
+                    } else {
+                        // 如果机构信息为空,新建机构信息并记录历史
+                        SysDeptAccount sysDeptAccount = new SysDeptAccount();
+                        sysDeptAccount.setDeptId(levelDeptId);
+                        sysDeptAccount.setManagementFee(sumManagementFee);
+                        sysDeptAccount.setCreateTime(new Date());
+                        sysDeptAccountService.save(sysDeptAccount);
+                        // 记录历史信息
+                        SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
+                        sysDeptAccountHistory.setId(IdGenerate.nextId());
+                        sysDeptAccountHistory.setDeptId(levelDeptId);
+                        sysDeptAccountHistory.setAmount(sumManagementFee);
+                        sysDeptAccountHistory.setSurplusAmount(sumManagementFee);
+                        sysDeptAccountHistory.setDocumentary("2"); //收入
+                        sysDeptAccountHistory.setSuborder(orderNo);
+                        sysDeptAccountHistory.setFromBankCard(null);
+                        sysDeptAccountHistory.setToBankCard(null);
+                        sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
+                        sysDeptAccountHistory.setCreateTime(new Date());
+                        sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
+                                ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
+                                ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
+                                ",分销费:" + distributionFee);
+                        sysDeptAccountHistoryService.save(sysDeptAccountHistory);
+                    }
+                }
             }
         }
-
     }
 
-        private void countUserAmount(InsFeeOrderNew insFeeOrderNew ,String orderNo) {
-            String distributionStatus = insFeeOrderNew.getDistributionStatus();
-            if(StringUtils.isNotEmpty(distributionStatus)){
-                if("3".equals(distributionStatus)){
-                    BigDecimal totalDept = BigDecimal.ZERO;
-                    if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
-                        String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
-                        BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
-                        this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
-                    }else {
-                        totalDept =  totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
-                    }
-                    if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
-                        String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
-                        BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
-                        this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
-                    }else {
-                        totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
-                    }
-                    if(StringUtils.isNotEmpty(insFeeOrderNew.getThreeLevelUserId())){
-                        String threeLevelUserId = insFeeOrderNew.getThreeLevelUserId();
-                        BigDecimal threeDetailPremiums = insFeeOrderNew.getThirdDetailPremiums();
-                        this.saveUpdateAccount(threeLevelUserId,threeDetailPremiums,orderNo);
-                    }else {
-                        totalDept =totalDept.add(insFeeOrderNew.getThirdDetailPremiums());
-                    }
-//                     机构管理 费用给五级交钱机构管理费
-                    if(totalDept.compareTo(BigDecimal.ZERO) ==0){
-                        BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
-                        jqDeptPremiumsLevel5.add(totalDept);
-                        insFeeOrderNewService.updateById(insFeeOrderNew);
+    @Override
+    public boolean autoFeeAudit(String orderNo, String insOrderNo) throws Exception {
+        //保存审核表
+        InsFeeAudit insFeeAudit=new InsFeeAudit();
+        insFeeAudit.setOrderno(orderNo);
+        insFeeAudit.setInsOrderNo(insOrderNo);
+        insFeeAudit.setAuditstatus("1");
+        insFeeAudit.setAudittime(LocalDateTime.now());
+        insFeeAudit.setAudituser("自动审核");
+        this.save(insFeeAudit);
+
+
+        InsOrders order=insOrdersMapper.selectById(orderNo);
+        InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo());
+        InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
+
+        //获取该订单的费用
+        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
+                .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
+
+
+        //获取操作人员的机构来源
+        String deptId=order.getDeptid();
+
+        List<SysDept> teamList = sysDeptService.findTeamList(deptId);
+        teamList.forEach(sysDept -> {
+
+            if(StringUtils.isNotEmpty(sysDept.getComlevel()) &&  sysDept.getComlevel().equals("1")){
+                BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1();
+            }
+        });
+
+
+        //bigdecimal为null时设置为0
+//        handleBigdecimal(insFeeOrder);
+        //生成保司费用(应收费用)
+        gene_orderIncome( order, insFeeOrderNew,insAreaCompany);
+        //生成机构费用
+        gene_deptfee( order, insFeeOrderNew,insAreaCompany);
+        //生成分销费用
+//        saveRetail(order,insFeeOrderNew,insAreaCompany);
+        //个代费用生成
+//        saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany);
+
+
+//      生成  用户账户表  数据
+        if(StringUtils.isNotEmpty(order.getUserid())){
+//            用戶賬戶表
+            SysUserAccount sysUserAccount = new SysUserAccount();
+
+            sysUserAccount.setUserId(order.getUserid());
+            if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) {
+//                手续非佣金  =  交强监管费用 + 商业监管费用 + 非车监管费用
+//                非跟单费用  = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用
+                //手续费入口费用
+//                BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
+//                BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
+//                BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
+//                BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount);    // 手续非佣金
+//                //其他费用入口费用
+//                BigDecimal jqOtherCostsPremiums  =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
+//                BigDecimal syOtherCostsPremiums  =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
+//                BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
+//                BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion);  //非跟单费用
+
+                //总机构 交强管理比例
+                BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1()
+                        .add(insFeeOrderNew.getJqDeptProportionLevel2())
+                        .add(insFeeOrderNew.getJqDeptProportionLevel3())
+                        .add(insFeeOrderNew.getJqDeptProportionLevel4())
+                        .add(insFeeOrderNew.getJqDeptProportionLevel5());
+
+                //总机构 商业管理比例
+                BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1()
+                        .add(insFeeOrderNew.getSyDeptProportionLevel2())
+                        .add(insFeeOrderNew.getSyDeptProportionLevel3())
+                        .add(insFeeOrderNew.getSyDeptProportionLevel4())
+                        .add(insFeeOrderNew.getSyDeptProportionLevel5());
+
+                //总机构 非车管理比例
+                BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1()
+                        .add(insFeeOrderNew.getNoDeptProportionLevel2())
+                        .add(insFeeOrderNew.getNoDeptProportionLevel3())
+                        .add(insFeeOrderNew.getNoDeptProportionLevel4())
+                        .add(insFeeOrderNew.getNoDeptProportionLevel5());
+
+                //总分销比例
+                BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion());
+
+                //交强出口比例
+                BigDecimal jqExportProceduresProportion = new BigDecimal(0);
+                if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){
+                    jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail);
+                }
+                //商业出口比例
+                BigDecimal syExportProceduresProportion = new BigDecimal(0);
+                if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){
+                    syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
+                }
+                //非车出口比例
+                BigDecimal noExportProceduresProportion = new BigDecimal(0);
+                if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){
+                    noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail);
+                }
+
+                //交强手续费出口比例
+                BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+                //交强跟单出口费用
+                BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium()
+                        .multiply(jqExportProceduresProportion
+                                .subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+
+                //商业手续费出口比例
+                BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+                //商业跟单出口比例
+                BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium()
+                        .multiply(syExportProceduresProportion
+                                .subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+
+                //非车手续费出口比例
+                BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+                //非车跟单出口比例
+                BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium()
+                        .multiply(noExportProceduresProportion
+                                .subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+
+                //用户出口手续费
+                BigDecimal totalPremiumAmount = new BigDecimal(0);
+                totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee);
+
+                //用户出口跟单费
+                BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
+                totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee);
+
+
+//              用戶
+                sysUserAccount.setHandlingFee(totalPremiumAmount);
+                sysUserAccount.setDocumentary(totalOtherPremiumAmount);
+//              算佣金
+                this.countUserAmount(insFeeOrderNew,orderNo);
+                sysUserAccount.setDocumentaryStatus("2");  // 收入
+                sysUserAccount.setSuborderId(orderNo);  // 订单Id
+                sysUserAccountService.addOrUpdate(sysUserAccount);
+
+
+                String deptid = insFeeOrderNew.getDeptId();
+                String distributionStatus = insFeeOrderNew.getDistributionStatus();
+                // 定义一个数组来存储各级机构的管理费
+                BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
+                        insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
+                        insFeeOrderNew.getJqDeptPremiumsLevel5()};
+                BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
+                        insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
+                        insFeeOrderNew.getSyDeptPremiumsLevel5()};
+                BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
+                        insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
+                        insFeeOrderNew.getNoDeptPremiumsLevel5()};
+
+                for (int i = 1; i <= 5; i++) {
+                    // 根据循环次数确定机构ID的长度,第五级为11
+                    String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
+                    // 获取对应级别的机构信息
+                    SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
+                            .eq(SysDeptAccount::getDeptId, levelDeptId));
+
+                    // 初始化管理费总额为0
+                    BigDecimal sumManagementFee = BigDecimal.ZERO;
+
+                    // 根据分销等级和分销用户情况计算分销费用
+                    BigDecimal distributionFee = BigDecimal.ZERO;
+                    if (i == 5) {
+                        if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) {
+                            distributionFee = insFeeOrderNew.getSecondDetailPremiums();
+                        } else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) {
+                            distributionFee = insFeeOrderNew.getThirdDetailPremiums();
+                        }
                     }
-                } else if ("2".equals(distributionStatus)) {
-                    BigDecimal totalDept = BigDecimal.ZERO;
-                    if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
-                        String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
-                        BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
-                        this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
-                    }else {
-                        totalDept =  totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
+
+                    // 根据分销等级计算管理费总额
+                    if (i == 5) {
+                        sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
+                                .add(syDeptPremiumsLevels[i - 1])
+                                .add(noDeptPremiumsLevels[i - 1])
+                                .add(distributionFee);
+                    } else {
+                        sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
+                                .add(syDeptPremiumsLevels[i - 1])
+                                .add(noDeptPremiumsLevels[i - 1]);
                     }
-                    if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
-                        String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
-                        BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
-                        this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
-                    }else {
-                        totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
+
+                    // 如果机构信息不为空,更新管理费并记录历史
+                    if (levelSysDeptAccount != null) {
+                        levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
+                        sysDeptAccountService.updateById(levelSysDeptAccount);
+                        // 记录历史信息
+                        SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
+                        sysDeptAccountHistory.setId(IdGenerate.nextId());
+                        sysDeptAccountHistory.setDeptId(levelDeptId);
+                        sysDeptAccountHistory.setAmount(sumManagementFee);
+                        sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee());
+                        sysDeptAccountHistory.setDocumentary("2"); //收入
+                        sysDeptAccountHistory.setSuborder(orderNo);
+                        sysDeptAccountHistory.setFromBankCard(null);
+                        sysDeptAccountHistory.setToBankCard(null);
+                        sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
+                        sysDeptAccountHistory.setCreateTime(new Date());
+                        sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
+                                ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
+                                ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
+                                ",分销费:" + distributionFee);
+                        sysDeptAccountHistoryService.save(sysDeptAccountHistory);
+                    } else {
+                        // 如果机构信息为空,新建机构信息并记录历史
+                        SysDeptAccount sysDeptAccount = new SysDeptAccount();
+                        sysDeptAccount.setDeptId(levelDeptId);
+                        sysDeptAccount.setManagementFee(sumManagementFee);
+                        sysDeptAccount.setCreateTime(new Date());
+                        sysDeptAccountService.save(sysDeptAccount);
+                        // 记录历史信息
+                        SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
+                        sysDeptAccountHistory.setId(IdGenerate.nextId());
+                        sysDeptAccountHistory.setDeptId(levelDeptId);
+                        sysDeptAccountHistory.setAmount(sumManagementFee);
+                        sysDeptAccountHistory.setSurplusAmount(sumManagementFee);
+                        sysDeptAccountHistory.setDocumentary("2"); //收入
+                        sysDeptAccountHistory.setSuborder(orderNo);
+                        sysDeptAccountHistory.setFromBankCard(null);
+                        sysDeptAccountHistory.setToBankCard(null);
+                        sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
+                        sysDeptAccountHistory.setCreateTime(new Date());
+                        sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
+                                ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
+                                ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
+                                ",分销费:" + distributionFee);
+                        sysDeptAccountHistoryService.save(sysDeptAccountHistory);
                     }
+                }
+            }
+        }
+        return true;
+    }
+
+    private void countUserAmount(InsFeeOrderNew insFeeOrderNew ,String orderNo) {
+        String distributionStatus = insFeeOrderNew.getDistributionStatus();
+        if(StringUtils.isNotEmpty(distributionStatus)){
+            if(InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus)){
+                BigDecimal totalDept = BigDecimal.ZERO;
+                if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
+                    String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
+                    BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
+                    this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
+                }else {
+                    totalDept =  totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
+                }
+                if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
+                    String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
+                    BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
+                    this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
+                }else {
+                    totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
+                }
+                if(StringUtils.isNotEmpty(insFeeOrderNew.getThreeLevelUserId())){
+                    String threeLevelUserId = insFeeOrderNew.getThreeLevelUserId();
+                    BigDecimal threeDetailPremiums = insFeeOrderNew.getThirdDetailPremiums();
+                    this.saveUpdateAccount(threeLevelUserId,threeDetailPremiums,orderNo);
+                }else {
+                    totalDept =totalDept.add(insFeeOrderNew.getThirdDetailPremiums());
+                }
 //                     机构管理 费用给五级交钱机构管理费
-                    if(totalDept.compareTo(BigDecimal.ZERO) ==0){
-                        BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
-                        jqDeptPremiumsLevel5.add(totalDept);
-                        insFeeOrderNewService.updateById(insFeeOrderNew);
-                    }
+                if(totalDept.compareTo(BigDecimal.ZERO) ==0){
+                    BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
+                    jqDeptPremiumsLevel5.add(totalDept);
+                    insFeeOrderNewService.updateById(insFeeOrderNew);
+                }
+                } else if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus)) {
+                BigDecimal totalDept = BigDecimal.ZERO;
+                if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
+                    String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
+                    BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
+                    this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
                 }else {
+                    totalDept =  totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
+                }
+                if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
+                    String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
+                    BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
+                    this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
+                }else {
+                    totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
+                }
+//                     机构管理 费用给五级交钱机构管理费
+                if(totalDept.compareTo(BigDecimal.ZERO) ==0){
+                    BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
+                    jqDeptPremiumsLevel5.add(totalDept);
+                    insFeeOrderNewService.updateById(insFeeOrderNew);
+                }
+            }else {
 //                    一级分销
 
-                    if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
-                        String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
-                        BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
-                        this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
-                    }else {
-                        if(insFeeOrderNew.getFirstDetailPremiums().compareTo(BigDecimal.ZERO) ==0){
-                            BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
-                            jqDeptPremiumsLevel5.add(insFeeOrderNew.getFirstDetailPremiums());
-                            insFeeOrderNewService.updateById(insFeeOrderNew);
-                        }
+                if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
+                    String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
+                    BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
+                    this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
+                }else {
+                    if(insFeeOrderNew.getFirstDetailPremiums().compareTo(BigDecimal.ZERO) ==0){
+                        BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
+                        jqDeptPremiumsLevel5.add(insFeeOrderNew.getFirstDetailPremiums());
+                        insFeeOrderNewService.updateById(insFeeOrderNew);
                     }
                 }
             }
-
         }
 
+    }
+
     private void saveUpdateAccount(String userId, BigDecimal amount, String orderNo) {
         SysUserAccount sysUserAccount = new SysUserAccount();
         sysUserAccount.setUserId(userId);
@@ -284,7 +678,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
      * @param insFeeOrder
      * @throws Exception
      */
-    private void gene_orderIncome( InsOrders order, InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception{
+    private void gene_orderIncome( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
 
         InsPlyIncome insPlyIncome =new InsPlyIncome();
         insPlyIncome.setOrderno(order.getOrderno());
@@ -331,7 +725,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
      * @param insFeeOrder
      * @throws Exception
      */
-    private void gene_deptfee( InsOrders order, InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception{
+    private void gene_deptfee( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
         InsDeptFee deptFee = new InsDeptFee();
         deptFee.setOrderno(order.getOrderno());
         if(!ObjectUtils.isEmpty(insFeeOrder)){
@@ -349,40 +743,70 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
             deptFee.setPolicyno(plyDto.getJqpolicyno());
             deptFee.setRiskcode("交强");
             deptFee.setLicenseno(order.getLicenseno());
-            geneInsDeptFee(order, insFeeOrder, deptFee);
+            geneJqInsDeptFee(order, insFeeOrder, deptFee);
         }
         if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
             deptFee.setPolicyno(plyDto.getSypolicyno());
             deptFee.setRiskcode("商业");
             deptFee.setLicenseno(order.getLicenseno());
-            geneInsDeptFee(order, insFeeOrder, deptFee);
+            geneSyInsDeptFee(order, insFeeOrder, deptFee);
         }
 
     }
 
-    private void geneInsDeptFee(InsOrders order, InsFeeOrder insFeeOrder, InsDeptFee deptFee) {
+    private void geneJqInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
+        if(!ObjectUtils.isEmpty(insFeeOrder)){
+            if (insFeeOrder.getJqDeptPremiumsLevel1().doubleValue() > 0) {
+                deptFee.setComcode(order.getDeptid().substring(0, 2));  //99140302M01D01
+                deptFee.setComlevel("一级");
+                insDeptFeeService.insert(deptFee);
+            }
+            if (insFeeOrder.getJqDeptPremiumsLevel2().doubleValue() > 0) {
+                deptFee.setComcode(order.getDeptid().substring(0, 4));  //99140302M01D01
+                deptFee.setComlevel("二级");
+                insDeptFeeService.insert(deptFee);
+            }
+            if (insFeeOrder.getJqDeptPremiumsLevel3().doubleValue() > 0) {
+                deptFee.setComcode(order.getDeptid().substring(0, 6));  //99140302M01D01
+                deptFee.setComlevel("三级");
+                insDeptFeeService.insert(deptFee);
+            }
+            if (insFeeOrder.getJqDeptPremiumsLevel4().doubleValue() > 0) {
+                deptFee.setComcode(order.getDeptid().substring(0, 8));  //99140302M01D01
+                deptFee.setComlevel("四级");
+                insDeptFeeService.insert(deptFee);
+            }
+            if (insFeeOrder.getJqDeptPremiumsLevel5().doubleValue() > 0) {
+                deptFee.setComcode(order.getDeptid().substring(0, 11));  //99140302M01D01
+                deptFee.setComlevel("五级");
+                insDeptFeeService.insert(deptFee);
+            }
+        }
+    }
+
+    private void geneSyInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
         if(!ObjectUtils.isEmpty(insFeeOrder)){
-            if (insFeeOrder.getFirstDeptPremiums().doubleValue() > 0) {
+            if (insFeeOrder.getSyDeptPremiumsLevel1().doubleValue() > 0) {
                 deptFee.setComcode(order.getDeptid().substring(0, 2));  //99140302M01D01
                 deptFee.setComlevel("一级");
                 insDeptFeeService.insert(deptFee);
             }
-            if (insFeeOrder.getSecondDeptPremiums().doubleValue() > 0) {
+            if (insFeeOrder.getSyDeptPremiumsLevel2().doubleValue() > 0) {
                 deptFee.setComcode(order.getDeptid().substring(0, 4));  //99140302M01D01
                 deptFee.setComlevel("二级");
                 insDeptFeeService.insert(deptFee);
             }
-            if (insFeeOrder.getThirdDeptPremiums().doubleValue() > 0) {
+            if (insFeeOrder.getSyDeptPremiumsLevel3().doubleValue() > 0) {
                 deptFee.setComcode(order.getDeptid().substring(0, 6));  //99140302M01D01
                 deptFee.setComlevel("三级");
                 insDeptFeeService.insert(deptFee);
             }
-            if (insFeeOrder.getForthDeptPremiums().doubleValue() > 0) {
+            if (insFeeOrder.getSyDeptPremiumsLevel4().doubleValue() > 0) {
                 deptFee.setComcode(order.getDeptid().substring(0, 8));  //99140302M01D01
                 deptFee.setComlevel("四级");
                 insDeptFeeService.insert(deptFee);
             }
-            if (insFeeOrder.getFifthDeptPremiums().doubleValue() > 0) {
+            if (insFeeOrder.getSyDeptPremiumsLevel5().doubleValue() > 0) {
                 deptFee.setComcode(order.getDeptid().substring(0, 11));  //99140302M01D01
                 deptFee.setComlevel("五级");
                 insDeptFeeService.insert(deptFee);

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

@@ -1,18 +1,42 @@
 package com.ydtech.modules.fnc.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.po.SysAmountAuditingEntity;
+import com.ydtech.modules.admin.model.po.SysUserAccountHistory;
 import com.ydtech.modules.fnc.entity.InsPlyIncome;
 import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity;
 import com.ydtech.modules.fnc.service.InsPlyIncomeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryFeesService;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryLogService;
 import com.ydtech.modules.fnc.vo.InsPlyIncomeVo;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo;
 import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -27,6 +51,19 @@ import java.util.List;
 public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, InsPlyIncome> implements InsPlyIncomeService {
 
 
+    @Autowired
+    private InsOrdersService insOrdersService;
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Autowired
+    private InsFeeOrderNewService insFeeOrderNewService;
+    @Autowired
+    private SettlementDocumentaryFeesService settlementDocumentaryFeesService;
+    @Autowired
+    private SettlementDocumentaryLogService settlementDocumentaryLogService;
+
+
     public HttpResult<BasePageResult<InsPlyIncome>> queryplyIncome(InsPlyIncomeVo insPlyIncomeVo){
 
         try{
@@ -44,5 +81,204 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
 
 
 
+    }
+
+    @Override
+    public void saveBalance(String companyId, String orderno) {
+        InsOrders insOrders = insOrdersService.getById(orderno);
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(companyId);
+        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getInsFeeOrderNewByCompanyId(companyId);
+        this.saveBalanc(insFeeOrderNew, insOrders, insAreaCompany);
+    }
+
+
+
+    private void saveBalanc(InsFeeOrderNew insFeeOrderNew, InsOrders insOrders, InsAreaCompany insAreaCompany) {
+        InsPlyIncome insPlyIncome = new InsPlyIncome();
+
+
+        insPlyIncome.setOrderno(insFeeOrderNew.getId());  // 子订单号
+//      存储保单号
+        try {
+            this.setPolicyno(insPlyIncome,insAreaCompany);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+
+        insPlyIncome.setDeptId(insFeeOrderNew.getDeptId());
+        insPlyIncome.setRiskcode(insOrders.getProductid());
+        insPlyIncome.setPayDate(insAreaCompany.getPayDate());
+        insPlyIncome.setSignDate(insAreaCompany.getSigningTime());
+        insPlyIncome.setCompanyId(insAreaCompany.getCompanyId());
+        insPlyIncome.setAgreementId(insFeeOrderNew.getAgreementId());
+        insPlyIncome.setLicenseno(insOrders.getLicenseno());
+        insPlyIncome.setTaxamount(insAreaCompany.getTaxamount());
+
+        BigDecimal bigDecimal = this.sumAmount(insFeeOrderNew.getJqNoTaxPremium(), insFeeOrderNew.getSyNoTaxPremium(), insFeeOrderNew.getNoNoTaxPremium());
+        //      不含保费
+        insPlyIncome.setNoTaxPremium(bigDecimal);
+//      手续费比例
+        BigDecimal CostsProportion = this.sumAmount(insFeeOrderNew.getJqSuperviseCostsProportion(), insFeeOrderNew.getSySuperviseCostsProportion(), insFeeOrderNew.getNoSuperviseCostsProportion());
+        insPlyIncome.setCommissionFeerate(CostsProportion);
+//      其他费用比例
+        BigDecimal OtherCostsProportion = this.sumAmount(insFeeOrderNew.getJqOtherCostsProportion(), insFeeOrderNew.getSyOtherCostsProportion(), insFeeOrderNew.getNoOtherCostsProportion());
+        insPlyIncome.setOtherFeerate(OtherCostsProportion);
+//        手续费金额
+        BigDecimal SuperviseCostsPremiums = this.sumAmount(insFeeOrderNew.getJqSuperviseCostsPremiums(), insFeeOrderNew.getSySuperviseCostsPremiums(), insFeeOrderNew.getNoSuperviseCostsPremiums());
+        insPlyIncome.setCommissionFeevalue(SuperviseCostsPremiums);
+//      其他费用金额
+        BigDecimal OtherCostsPremiums = this.sumAmount(insFeeOrderNew.getJqOtherCostsPremiums(), insFeeOrderNew.getSyOtherCostsPremiums(), insFeeOrderNew.getNoOtherCostsPremiums());
+        insPlyIncome.setOtherFeevalue(OtherCostsPremiums);
+        insPlyIncome.setAllFeeValue(SuperviseCostsPremiums.add(OtherCostsPremiums));
+        insPlyIncome.setCreateTime(LocalDateTime.now());
+        insPlyIncome.setDocumentaryFeesStatus("0");
+        insPlyIncome.setHandlingFeesStatus("0");
+        baseMapper.insert(insPlyIncome);
+
+    }
+
+    private void setPolicyno(InsPlyIncome insPlyIncome, InsAreaCompany insAreaCompany) throws JsonProcessingException {
+        ObjectMapper objJson = new ObjectMapper();
+
+        String jqpolicyno = insAreaCompany.getJqpolicyno();  // 交强保单号
+        String sypolicyno = insAreaCompany.getSypolicyno();  // 商业保单号
+        JSONArray crossInsurance = insAreaCompany.getCrossInsurance();  // 非车保单号
+
+        if(ObjectUtils.isNotEmpty(jqpolicyno)){
+            insPlyIncome.setPolicyno(jqpolicyno);
+
+        }
+        if(ObjectUtils.isNotEmpty(sypolicyno)){
+            insPlyIncome.setSyPolicyno(sypolicyno);
+        }
+        if(ObjectUtils.isNotEmpty(crossInsurance)){
+         JsonNode   jsonArryNode= objJson.readTree(crossInsurance.toJSONString());
+            if (jsonArryNode.isArray()) {
+                for (JsonNode jsonNode : jsonArryNode) {
+                    JsonNode jsonNode1 = jsonNode.get("policyNumber");//非车保单号
+                    if(ObjectUtils.isNotEmpty(jsonNode1)){
+                        insPlyIncome.setNoPolicyno(jsonNode1.asText());
+                    }else {
+                       String  nopolicy =   jsonNode.get("policy").asText();   //非车保单号
+                        insPlyIncome.setNoPolicyno(nopolicy);
+                    }
+                }
+            }
+
+        }
+
+
+    }
+
+    private BigDecimal sumAmount(BigDecimal amount1, BigDecimal amount2, BigDecimal amount3) {
+        BigDecimal jqNoTaxPremium = (amount1 != null) ? amount1 : BigDecimal.ZERO;
+        BigDecimal syNoTaxPremium = (amount2 != null) ? amount2 : BigDecimal.ZERO;
+        BigDecimal noNoTaxPremium = (amount3 != null) ? amount3 : BigDecimal.ZERO;
+
+        return jqNoTaxPremium.add(syNoTaxPremium).add(noNoTaxPremium);
+    }
+
+
+    public HttpResult<BasePageResult<InsPlyIncome>> queryNew(InsPlyIncomeVo insPlyIncomeVo){
+        try{
+            HashMap<String, Object> params = new HashMap<>();
+            PageInfo<List<InsPlyIncome>> pageHelper = null;
+            PageHelper.startPage(insPlyIncomeVo.getPageNum(),insPlyIncomeVo.getPageSize());
+            params.put("pageNum",insPlyIncomeVo.getPageNum());
+            params.put("pageSize",insPlyIncomeVo.getPageSize());
+            if(ObjectUtils.isNotEmpty(insPlyIncomeVo.getStartDate())){
+                params.put("startDate",insPlyIncomeVo.getStartDate().toString());
+
+            }
+            if(ObjectUtils.isNotEmpty(insPlyIncomeVo.getEndDate())){
+                params.put("endDate",insPlyIncomeVo.getEndDate().toString());
+            }
+            if(StringUtils.isNotEmpty(insPlyIncomeVo.getOrderno())){
+                params.put("orderno",insPlyIncomeVo.getOrderno());
+            }
+            if(StringUtils.isNotEmpty(insPlyIncomeVo.getPolicyno())){
+                params.put("policyno",insPlyIncomeVo.getPolicyno());
+            }
+
+            List<InsPlyIncome> list= this.baseMapper.queryNew(params);
+            pageHelper=new PageInfo(list);
+            BasePageResult<InsPlyIncome> pageResult=new BasePageResult<InsPlyIncome>(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list);
+            return HttpResult.ok(pageResult);
+        }catch (Exception e){
+            e.printStackTrace();
+            return HttpResult.error("查询异常");
+        }
+    }
+
+    @Override
+    @Transactional
+    public void uodateBalance(InsPlyIncomeVo insPlyIncomeVo) {
+        InsPlyIncome insPlyIncome = new InsPlyIncome();
+        insPlyIncomeVo.setHandlingFeesStatus("1");
+        BeanUtils.copyProperties(insPlyIncomeVo, insPlyIncome);
+        baseMapper.uopdateByOrderno(insPlyIncome);
+
+//        生成记录
+        SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity();
+        if(StringUtils.isNotEmpty(insPlyIncomeVo.getAgreementType()) &&  "1".equals(insPlyIncomeVo.getAgreementType())){
+//         只有平台协议 才会跟单费一笔结算
+            settlementDocumentaryLogEntity.setAmount(insPlyIncomeVo.getOtherFeevalue());  // 跟单费金额
+        }
+        settlementDocumentaryLogEntity.setHandingAmount(insPlyIncomeVo.getCommissionFeevalue());  // 手续费金额
+        settlementDocumentaryLogEntity.setSettlementDocumentaryId(insPlyIncomeVo.getOrderno()); // 关联id
+        settlementDocumentaryLogEntity.setAmountType("1");  //手续费结算
+        settlementDocumentaryLogEntity.setCreateTime(new Date());
+        settlementDocumentaryLogService.save(settlementDocumentaryLogEntity);
+    }
+
+    @Override
+    @Transactional
+    public HttpResult<BasePageResult<InsPlyIncome>> totalQuery(InsPlyIncomeVo insPlyIncomeVo) {
+        HashMap<String, Object> params = new HashMap<>();
+        PageInfo<List<InsPlyIncome>> pageHelper = null;
+        params.put("startDate",insPlyIncomeVo.getStartDate().toString());
+        params.put("endDate",insPlyIncomeVo.getEndDate().toString());
+//      判断非跟单结算日期是否已经存在
+        String resultDate = this.JudgingDate(params);
+        if(StringUtils.isNotEmpty(resultDate)){
+            return HttpResult.error("该时间段已近有单据做过结算,请结算");
+        }
+
+        params.put("pageNum",insPlyIncomeVo.getPageNum());
+        params.put("pageSize",insPlyIncomeVo.getPageSize());
+        List<InsPlyIncome> list= this.baseMapper.totalQuery(params);
+        pageHelper=new PageInfo(list);
+
+        return  HttpResult.ok(new BasePageResult<>(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list));
+    }
+
+    private String JudgingDate(HashMap<String, Object> params) {
+        if(ObjectUtils.isNotEmpty(params.get("startDate"))  &&  ObjectUtils.isNotEmpty(params.get("endDate")) ){
+            String   checkResult = settlementDocumentaryFeesService.checkDate(params);
+            if(StringUtils.isNotEmpty(checkResult)){
+                return checkResult;
+            }
+        }
+        return  null;
+
+    }
+
+    @Override
+    @Transactional
+    public HttpResult batchBalance(InsPlyIncomeVo insPlyIncomeVo) {
+//      生成新数据
+        SettlementDocumentaryFeesVo settlementDocumentaryFeesVo = new SettlementDocumentaryFeesVo();
+        settlementDocumentaryFeesVo.setTotalAmount(insPlyIncomeVo.getTotAmount());
+        settlementDocumentaryFeesVo.setTotalOrders(insPlyIncomeVo.getTotalorders());
+        settlementDocumentaryFeesVo.setTimeFrame(insPlyIncomeVo.getTimeFrame());
+        settlementDocumentaryFeesVo.setCreateTime(LocalDateTime.now());
+        settlementDocumentaryFeesVo.setStartTime(insPlyIncomeVo.getStartDate().atStartOfDay());
+        settlementDocumentaryFeesVo.setEndTime(insPlyIncomeVo.getEndDate().atStartOfDay());
+        settlementDocumentaryFeesVo.setSettlementAmount(insPlyIncomeVo.getSettlementAmount());//  结算金额
+        settlementDocumentaryFeesVo.setUnsettledAmount(insPlyIncomeVo.getTotAmount().subtract(insPlyIncomeVo.getSettlementAmount()));  //未结算金额
+
+        return  settlementDocumentaryFeesService.inertSettle(settlementDocumentaryFeesVo);
+
+//
     }
 }

+ 21 - 4
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlySettleServiceImpl.java

@@ -74,9 +74,13 @@ public class InsPlySettleServiceImpl extends ServiceImpl<InsPlySettleMapper, Ins
     @Transactional
     public HttpResult generateSettleAndDetail(GenerateSettleVo generateSettleVo) {
 
+
+//      保单号数组
         List<String> plyNoList= generateSettleVo.getPlyNoList();
+//      保险公司
         String companyId=generateSettleVo.getCompanyId();
         String deptId =generateSettleVo.getDeptId();
+//      结算月份
         String settleMonth=generateSettleVo.getSettleMonth();
         if(StringUtils.isNullOrEmpty(companyId)
                 ||StringUtils.isNullOrEmpty(deptId)
@@ -90,31 +94,42 @@ public class InsPlySettleServiceImpl extends ServiceImpl<InsPlySettleMapper, Ins
         if(plyNoList==null || plyNoList.size()==0){
             return HttpResult.error("结算清单不能传空");
         }
-        // 生成结算单号
-//        InsPlyIncome insPlyIncome_t=insPlyIncomeMapper.selectByPlyno(plyNoList.get(0));
+//      生成结算单号
+//      InsPlyIncome insPlyIncome_t=insPlyIncomeMapper.selectByPlyno(plyNoList.get(0));
         settleno = companyId+ DateUtil.yyyyMMddHHmmss(new Date());
         for(String plyNo:plyNoList){
             InsPlyIncome insPlyIncome=insPlyIncomeMapper.selectByPlyno(plyNo);
             InsPlySettleDetail insPlySettleDetail =new InsPlySettleDetail();
+
+
+
             insPlySettleDetail.setSettleno(settleno);
+//          订单号
             insPlySettleDetail.setOrderno(insPlyIncome.getOrderno());
+//          保单号
             insPlySettleDetail.setPolicyno(insPlyIncome.getPolicyno());
             insPlySettleDetail.setDeptId(insPlyIncome.getDeptId());
+//          手续费
             insPlySettleDetail.setCommissionFeevalue(insPlyIncome.getCommissionFeevalue());
+//          其他费用金额
             insPlySettleDetail.setOtherFeevalue(insPlyIncome.getOtherFeevalue());
+//          总费用
             insPlySettleDetail.setAllFeeValue(insPlyIncome.getAllFeeValue());
             insPlySettleDetail.setCreateTime(LocalDateTime.now());
             insPlySettleDetailMapper.insert(insPlySettleDetail);
-            //修改ins_ply_income
+            //修改ins_ply_income   将总费用转成计算费用
             insPlyIncome.setFinalFeeValue(insPlyIncome.getAllFeeValue());
             LambdaQueryWrapper<InsPlyIncome> queryWrapper=new LambdaQueryWrapper();
             queryWrapper.eq(InsPlyIncome::getPolicyno,plyNo);
             insPlyIncomeMapper.update(insPlyIncome,queryWrapper);
-
+//          手续费金额
             commissionFeevalue=commissionFeevalue.add(insPlyIncome.getCommissionFeevalue());
+//          其他费用金额
             otherFeevalue=otherFeevalue.add(insPlyIncome.getOtherFeevalue());
+//          总费用
             allFeeValue=allFeeValue.add(insPlyIncome.getAllFeeValue());
         }
+//      月度结算单汇总表
         InsPlySettle insPlySettle =new InsPlySettle();
         insPlySettle.setSettleno(settleno);
         insPlySettle.setCompanyId(companyId);
@@ -183,10 +198,12 @@ public class InsPlySettleServiceImpl extends ServiceImpl<InsPlySettleMapper, Ins
         insPlySettle.setHxamount(insPlySettle.getHxamount() ==null ? BigDecimal.ZERO:insPlySettle.getHxamount());
         insPlySettle.setCommissionHxamount(insPlySettle.getCommissionHxamount() ==null ? BigDecimal.ZERO:insPlySettle.getCommissionHxamount());
         insPlySettle.setOtherHxamount(insPlySettle.getOtherHxamount() ==null ? BigDecimal.ZERO:insPlySettle.getOtherHxamount());
+//       如果等于手续费时   核销金额  比  手续费 >0
         if(insPlySettleHx.getFeeType().equals("S")
                 &&insPlySettle.getCommissionHxamount().add(insPlySettleHx.getAmount()).compareTo(insPlySettle.getCommissionFeevalue())>0){
             return HttpResult.error("核销手续费金额已超过结算单手续费,请修改");
         }
+//      其他费用    核销金额 比 其他费用
         if(insPlySettleHx.getFeeType().equals("O")
                 &&insPlySettle.getOtherHxamount().add(insPlySettleHx.getAmount()).compareTo(insPlySettle.getOtherFeevalue())>0){
             return HttpResult.error("核销其他费用金额已超过结算单其他费用,请修改");

+ 122 - 0
src/main/java/com/ydtech/modules/fnc/service/impl/SettlementDocumentaryFeesServiceImpl.java

@@ -0,0 +1,122 @@
+package com.ydtech.modules.fnc.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fnc.dao.SettlementDocumentaryFeesMapper;
+import com.ydtech.modules.fnc.entity.InsPlyIncome;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryFeesEntity;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryFeesService;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryLogService;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsOrders;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+@Service
+public class SettlementDocumentaryFeesServiceImpl extends ServiceImpl<SettlementDocumentaryFeesMapper, SettlementDocumentaryFeesEntity> implements SettlementDocumentaryFeesService {
+
+    @Autowired
+    private SettlementDocumentaryLogService settlementDocumentaryLogService;
+
+
+    @Override
+    public HttpResult<BasePageResult<SettlementDocumentaryFeesEntity>> querySettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) {
+        try {
+            HashMap<String, Object> params = new HashMap<>();
+            params.put("pageNum", settlementDocumentaryFeesVo.getPageNum());
+            params.put("pageSize", settlementDocumentaryFeesVo.getPageSize());
+            PageInfo<List<SettlementDocumentaryFeesEntity>> pageHelper = null;
+            List<SettlementDocumentaryFeesEntity> list = this.baseMapper.querySettle(params);
+            pageHelper = new PageInfo(list);
+            BasePageResult<SettlementDocumentaryFeesEntity> pageResult = new BasePageResult<SettlementDocumentaryFeesEntity>(settlementDocumentaryFeesVo.getPageNum(), settlementDocumentaryFeesVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list);
+            return HttpResult.ok(pageResult);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResult.error("查询异常");
+        }
+    }
+
+    @Override
+    @Transactional
+    public HttpResult inertSettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) {
+
+
+        int i = this.compareAmount(settlementDocumentaryFeesVo.getTotalAmount(), settlementDocumentaryFeesVo.getSettlementAmount());
+        if (i < 0) {
+            return HttpResult.error("结算金额大于总金额,请重新结算");
+        }
+        SettlementDocumentaryFeesEntity settlementDocumentaryFeesEntity = new SettlementDocumentaryFeesEntity();
+        BeanUtils.copyProperties(settlementDocumentaryFeesVo, settlementDocumentaryFeesEntity);
+        baseMapper.insert(settlementDocumentaryFeesEntity);
+
+        //       生成跟单费结算记录
+        SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity();
+        settlementDocumentaryLogEntity.setAmount(settlementDocumentaryFeesVo.getSettlementAmount());  // 结算金额
+        settlementDocumentaryLogEntity.setSettlementDocumentaryId(settlementDocumentaryFeesEntity.getId()); // 关联id
+        settlementDocumentaryLogEntity.setAmountType("2");  //跟单费结算
+        settlementDocumentaryLogEntity.setCreateTime(new Date());
+        settlementDocumentaryLogService.save(settlementDocumentaryLogEntity);
+        return HttpResult.ok("结算成功");
+    }
+
+    @Override
+    public String checkDate(HashMap<String, Object> params) {
+
+        List<SettlementDocumentaryFeesEntity> startList = baseMapper.checkDate(params);
+        if (startList.size() > 0) {
+            return "有重复";
+        }
+        return null;
+    }
+
+    @Override
+    @Transactional
+    public HttpResult documentarySettle(SettlementDocumentaryFeesVo settlementDocumentaryFeesVo) {
+        SettlementDocumentaryFeesEntity settlementDocumentaryFeesEntity = baseMapper.selectById(settlementDocumentaryFeesVo.getId());
+
+
+        if (settlementDocumentaryFeesVo.getSettlementAmount() != null && ObjectUtils.isNotEmpty(settlementDocumentaryFeesEntity)) {
+
+            int i = this.compareAmount(settlementDocumentaryFeesEntity.getUnsettledAmount(), settlementDocumentaryFeesVo.getSettlementAmount());
+            if (i < 0) {
+                return HttpResult.error("结算金额大于未结算金额,请重新结算");
+            }
+            settlementDocumentaryFeesEntity.setSettlementAmount(settlementDocumentaryFeesEntity.getSettlementAmount().add(settlementDocumentaryFeesVo.getSettlementAmount()));
+            settlementDocumentaryFeesEntity.setUnsettledAmount(settlementDocumentaryFeesEntity.getTotalAmount().subtract(settlementDocumentaryFeesEntity.getSettlementAmount()));  //未结算金额
+            baseMapper.updateById(settlementDocumentaryFeesEntity);
+
+//          记录
+//          生成跟单费结算记录
+            SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity();
+            settlementDocumentaryLogEntity.setAmount(settlementDocumentaryFeesVo.getSettlementAmount());  // 结算金额
+            settlementDocumentaryLogEntity.setSettlementDocumentaryId(settlementDocumentaryFeesEntity.getId()); // 关联id
+            settlementDocumentaryLogEntity.setAmountType("2");  //跟单费结算
+            settlementDocumentaryLogEntity.setCreateTime(new Date());
+            settlementDocumentaryLogService.save(settlementDocumentaryLogEntity);
+            return HttpResult.ok("修改成功");
+
+        }
+        return null;
+    }
+
+    private int compareAmount(BigDecimal settlementAmount, BigDecimal settlementAmount1) {
+
+        return settlementAmount.compareTo(settlementAmount1);
+
+    }
+}

+ 25 - 0
src/main/java/com/ydtech/modules/fnc/service/impl/SettlementDocumentaryLogImpl.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.fnc.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.fnc.dao.SettlementDocumentaryLogMapper;
+import com.ydtech.modules.fnc.entity.SettlementDocumentaryLogEntity;
+import com.ydtech.modules.fnc.service.SettlementDocumentaryLogService;
+import com.ydtech.modules.fnc.vo.SettlementDocumentaryLogVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Service
+public class SettlementDocumentaryLogImpl extends ServiceImpl<SettlementDocumentaryLogMapper, SettlementDocumentaryLogEntity> implements SettlementDocumentaryLogService {
+
+
+    @Override
+    public BasePageResult<SettlementDocumentaryLogEntity> querySettle(SettlementDocumentaryLogVo settlementDocumentaryLogVo) {
+        return null;
+    }
+
+
+}

+ 57 - 1
src/main/java/com/ydtech/modules/fnc/vo/InsPlyIncomeVo.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,6 +13,7 @@ import lombok.Setter;
 
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.io.File;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -42,7 +44,7 @@ public class InsPlyIncomeVo implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDate endDate;
 
-    @ApiModelProperty("保单号")
+    @ApiModelProperty("交强保单号")
     private String policyno;
 
     @ApiModelProperty("机构")
@@ -62,6 +64,12 @@ public class InsPlyIncomeVo implements Serializable {
 
     private String flag;//0待结算
 
+    @ApiModelProperty("手续费金额")
+    private BigDecimal commissionFeevalue;
+
+    @ApiModelProperty("其他费用金额")
+    private BigDecimal otherFeevalue;
+
     @ApiModelProperty(value = "每页页数")
     @Min(value = 20, message = "页数最小为20")
     @Max(value = 100, message = "页数最大为100")
@@ -70,4 +78,52 @@ public class InsPlyIncomeVo implements Serializable {
     @ApiModelProperty(value = "页数")
     @Min(value = 1, message = "页数最小为1")
     private int pageNum=1;
+
+    @ApiModelProperty("协议类型")
+    private String agreementType;
+
+    @ApiModelProperty("时间范围")
+    private String timeFrame;
+
+    @ApiModelProperty("凭证号")
+    private String voucherNumber;
+
+    @ApiModelProperty("合同号")
+    private String contractId;
+
+    @ApiModelProperty("合同附件id")
+    private String contractFileId;
+
+    @ApiModelProperty("手续费结算状态  1 为已结算")
+    private String handlingFeesStatus;
+
+
+    @ApiModelProperty("跟单费结算状态  1 为已结算")
+    private String documentaryFeesStatus;
+
+
+    @ApiModelProperty("总单数")
+    private String  totalorders;
+
+    @ApiModelProperty("ids")
+    private String  ids;
+
+    @ApiModelProperty("总手续费")
+    private BigDecimal  totAmount;
+    @ApiModelProperty("结算金额")
+    private BigDecimal settlementAmount;
+
+    @ApiModelProperty("商业保单号")
+    private String syPolicyno;
+
+    @ApiModelProperty("非车保单号")
+    private String noPolicyno;
+
+    @ApiModelProperty("是否非车")
+    private String isNotCar;
+
+
+    @ApiModelProperty("手续费结算金额")
+    private BigDecimal handingAmount;
+
 }

+ 58 - 0
src/main/java/com/ydtech/modules/fnc/vo/SettlementDocumentaryFeesVo.java

@@ -0,0 +1,58 @@
+package com.ydtech.modules.fnc.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("跟单费用结算")
+public class SettlementDocumentaryFeesVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("id")
+    private String id;
+
+    @ApiModelProperty("结算单数")
+    private String totalOrders;
+
+    @ApiModelProperty("时间范围")
+    private String timeFrame;
+
+    @ApiModelProperty("结算总金额")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("结算金额")
+    @TableField("settlement_amount")
+    private BigDecimal settlementAmount;
+
+    @ApiModelProperty("未结算金额")
+    @TableField("unsettled_amount")
+    private BigDecimal unsettledAmount;
+
+    @ApiModelProperty("开始时间")
+    @TableField("start_time")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty("结束时间")
+    @TableField("end_time")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "每页页数")
+    @Min(value = 20, message = "页数最小为20")
+    @Max(value = 100, message = "页数最大为100")
+    private int pageSize=20;
+
+    @ApiModelProperty(value = "页数")
+    @Min(value = 1, message = "页数最小为1")
+    private int pageNum=1;
+}

+ 46 - 0
src/main/java/com/ydtech/modules/fnc/vo/SettlementDocumentaryLogVo.java

@@ -0,0 +1,46 @@
+package com.ydtech.modules.fnc.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel("跟单费用结算")
+public class SettlementDocumentaryLogVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty("id")
+    private String id;
+
+
+    @ApiModelProperty("金额")
+    private BigDecimal amount;
+
+    @ApiModelProperty("关联跟单费id")
+    private String settlementDocumentaryId;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createTime;
+
+    @ApiModelProperty(value = "每页页数")
+    @Min(value = 20, message = "页数最小为20")
+    @Max(value = 100, message = "页数最大为100")
+    private int pageSize=20;
+
+    @ApiModelProperty(value = "页数")
+    @Min(value = 1, message = "页数最小为1")
+    private int pageNum=1;
+
+    @ApiModelProperty("金额类型")
+    private String amountType;
+
+
+}

+ 17 - 4
src/main/java/com/ydtech/modules/ins/model/CardUserInfo.java

@@ -13,8 +13,10 @@ import lombok.Data;
 @Data
 @ApiModel(value = "行驶证用户信息")
 public class CardUserInfo {
+    @ApiModelProperty("总质量")
     private String grossMass;
     private String approvedLoad;
+    @ApiModelProperty("车牌号")
     private String plateNo;
     private String plateType;
     private String remark;
@@ -31,19 +33,30 @@ public class CardUserInfo {
     private String approvedPassengersCapacity;
     private String backOcrID;
     private String motorTypeCode;
+
     private String motorUsageTypeCode;
+
+    @ApiModelProperty("车辆识别代号")
     private String vIN;
+
+    @ApiModelProperty("发证日期")
     private String issueDate;
+
     private String tractionMass;
+
+    @ApiModelProperty("注册日期")
     private String registerDate;
 
-    //新增 核定载质量
+    @ApiModelProperty("核定载质量")
     private String limitLoad;
-    //新增 使用性质
+
+    @ApiModelProperty("使用性质")
     private String useNature;
-    //新增 车辆类型
+
+    @ApiModelProperty("车辆类型")
     private String category;
-    //新增 车辆用途
+
+    @ApiModelProperty("车辆用途")
     private String vehicleUse;
 
     //add 车主 lig 2023-09-21

+ 4 - 1
src/main/java/com/ydtech/modules/ins/model/InsTaskHistory.java

@@ -1,7 +1,6 @@
 package com.ydtech.modules.ins.model;
 
 import java.io.Serializable;
-import java.util.Date;
 
 
 public class InsTaskHistory implements Serializable {
@@ -16,6 +15,10 @@ public class InsTaskHistory implements Serializable {
     private String operator;
     private String remark;
     private String company;
+    /***
+     * 原操作人id
+     */
+    private String  oldOperatorid;
 
     public String getId() {
         return id;

+ 12 - 3
src/main/java/com/ydtech/modules/ins/model/guoren/CarPriceReq.java

@@ -82,6 +82,7 @@ public class CarPriceReq {
         prpTmain.setEProposalFlag("1");
         //购车发票日期
         prpTmain.setBusiness(carInfo.getIssueDate());
+
         prpTmain.setAgentName(channelInfo.getAgentName());
         prpTmain.setChanneltypetwoName(channelInfo.getChannelTypeTwoName());
         prpTmain.setChanneltypeoneName(channelInfo.getChannelTypeOneName());
@@ -131,14 +132,15 @@ public class CarPriceReq {
 
         prpTitemCar.setEngineNo(carInfo.getEngineNo());
         prpTitemCar.setBrandName(vinQ.getBrandNameBC());
+        // 发证日期
         prpTitemCar.setCertifiCateDate(carInfo.getIssueDate());
 
         //使用性质  8A	家庭自用
         String vehicleUse = carInfo.getVehicleUse();
         UseNatureCodeMapping useNatureCodeMapping = UseNatureCodeMapping.valueOf(UseNatureCodeMapping.TITLE + vehicleUse);
         prpTitemCar.setUseNatureCode(useNatureCodeMapping.getUseNatureCode());
-        //初登日期
-        prpTitemCar.setEnrollDate(carInfo.getIssueDate());
+        // 初登日期
+        prpTitemCar.setEnrollDate(carInfo.getRegisterDate());
         //核定载客数
         prpTitemCar.setSeatCount(carInfo.getSeatCount());
         prpTitemCar.setFuelType(vinQ.getFuelType());
@@ -162,7 +164,8 @@ public class CarPriceReq {
         prpTitemCar.setMaincarKindCode(categoriesOfVehicles.getCode());
 
         //过户日期
-        prpTitemCar.setChgOwnerDate(carInfo.getTransferDate());
+
+        prpTitemCar.setChgOwnerDate(carInfo.getIssueDate());
         /**
          * vin car
          */
@@ -317,12 +320,18 @@ public class CarPriceReq {
             @JsonProperty(value = "brandName")
             @JSONField(name = "brandName")
             private String brandName;
+            /**
+             * 发证日期
+             */
             @JsonProperty(value = "certifiCateDate")
             @JSONField(name = "certifiCateDate")
             private String certifiCateDate;
             @JsonProperty(value = "useNatureCode")
             @JSONField(name = "useNatureCode")
             private String useNatureCode;
+            /**
+             * 初登日期
+             */
             @JsonProperty(value = "enrollDate")
             @JSONField(name = "enrollDate")
             private String enrollDate;

+ 3 - 2
src/main/java/com/ydtech/modules/ins/model/guoren/InsuranceSlipReq.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.ins.model.guoren;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
 import com.ydtech.modules.order.entity.api.guoren.constants.GuoRenRiskCode;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
@@ -95,12 +96,12 @@ public class InsuranceSlipReq {
         req.setPrpTinsured(prpTinsured);
 
         List<PremiumResp.DataDTO.CiPrptenagesDTO> ciPrptenages = specialAgreementVo.stream()
-                .filter(x -> GuoRenRiskCode.R_0507.getCode().equals(x.getRiskCode()))
+                .filter(x -> InsuranceRisk.TRAFFIC.getCode().equals(x.getRiskCode()))
                 .map(PremiumResp.DataDTO.CiPrptenagesDTO::new)
                 .collect(Collectors.toList());
 
         List<PremiumResp.DataDTO.BiPrptenagesDTO> biPrptenages = specialAgreementVo.stream()
-                .filter(x -> GuoRenRiskCode.R_0518.getCode().equals(x.getRiskCode()))
+                .filter(x -> InsuranceRisk.BUSINESS.getCode().equals(x.getRiskCode()))
                 .map(PremiumResp.DataDTO.BiPrptenagesDTO::new)
                 .collect(Collectors.toList());
 

+ 13 - 1
src/main/java/com/ydtech/modules/ins/model/guoren/NonAutoInsOrderReq.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.ins.model.guoren;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.constants.enums.dict.insurance.VehicleType;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
@@ -349,6 +350,10 @@ public class NonAutoInsOrderReq {
                 @JSONField(name = "carModels")
                 private String carModels;
 
+                @JsonProperty(value = "carCategory")
+                @JSONField(name = "carCategory")
+                private String carCategory;
+
                 @JsonProperty(value = "carType")
                 @JSONField(name = "carType")
                 private String carType;
@@ -387,8 +392,15 @@ public class NonAutoInsOrderReq {
 
                 public ObjCarListDTO(CarInfoVo carInfo, VinQueryResp.DataDTO vinQ) {
                     this.carModels = vinQ.getBrandNameBC();
-                    this.carType = "0";
+                    this.carType = carInfo.getCartype();
                     this.carTypeCode = "8A";
+                    //设置车辆大类
+                    if(VehicleType.VT_A0.getCode().equals(carInfo.getCimodelclass())){
+                        this.carCategory = "A";
+                    }else if(VehicleType.VT_A1.getCode().equals(carInfo.getCimodelclass())) {
+                        this.carCategory = "H";
+                    }
+
                     this.clnt = StringUtils.isNotEmpty(carInfo.getLicenseNo()) ? "2" : "1";
                     this.frameNo = carInfo.getFrameNo();
                     this.licenseNo = carInfo.getLicenseNo();

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels