Explorar o código

渠道分组和加投比例的提交

dongxin hai 1 ano
pai
achega
ef833a1415
Modificáronse 69 ficheiros con 3898 adicións e 21 borrados
  1. 124 1
      sql/Online.sql
  2. 29 0
      src/main/java/com/ydtech/modules/admin/constants/UserConstants.java
  3. 117 0
      src/main/java/com/ydtech/modules/admin/controller/SysChannelCostController.java
  4. 165 0
      src/main/java/com/ydtech/modules/admin/controller/SysChannelGradeController.java
  5. 143 0
      src/main/java/com/ydtech/modules/admin/controller/SysChannelGroupCrotroller.java
  6. 25 4
      src/main/java/com/ydtech/modules/admin/controller/SysDeptController.java
  7. 23 0
      src/main/java/com/ydtech/modules/admin/dao/SysChannelAreaRelationMapper.java
  8. 29 0
      src/main/java/com/ydtech/modules/admin/dao/SysChannelCostMapper.java
  9. 18 0
      src/main/java/com/ydtech/modules/admin/dao/SysChannelCostRelationMapper.java
  10. 18 0
      src/main/java/com/ydtech/modules/admin/dao/SysChannelGradeMapper.java
  11. 25 0
      src/main/java/com/ydtech/modules/admin/dao/SysChannelGroupInfoMapper.java
  12. 26 0
      src/main/java/com/ydtech/modules/admin/dao/SysChannelGroupMapper.java
  13. 18 0
      src/main/java/com/ydtech/modules/admin/dao/SysCostOperateLogMapper.java
  14. 26 0
      src/main/java/com/ydtech/modules/admin/model/dto/SysChannelCostDto.java
  15. 55 0
      src/main/java/com/ydtech/modules/admin/model/excel/read/SysChannelCostExcelReadHead.java
  16. 123 0
      src/main/java/com/ydtech/modules/admin/model/excel/wirte/SysChannelCostExportWriteHead.java
  17. 48 0
      src/main/java/com/ydtech/modules/admin/model/po/SysChannelAreaRelation.java
  18. 280 0
      src/main/java/com/ydtech/modules/admin/model/po/SysChannelCost.java
  19. 51 0
      src/main/java/com/ydtech/modules/admin/model/po/SysChannelCostRelation.java
  20. 65 0
      src/main/java/com/ydtech/modules/admin/model/po/SysChannelGrade.java
  21. 110 0
      src/main/java/com/ydtech/modules/admin/model/po/SysChannelGroup.java
  22. 96 0
      src/main/java/com/ydtech/modules/admin/model/po/SysChannelGroupInfo.java
  23. 57 0
      src/main/java/com/ydtech/modules/admin/model/po/SysCostOperateLog.java
  24. 26 0
      src/main/java/com/ydtech/modules/admin/model/vo/AddSysChannelCostVo.java
  25. 18 0
      src/main/java/com/ydtech/modules/admin/model/vo/AddSysChannelGradeVo.java
  26. 41 0
      src/main/java/com/ydtech/modules/admin/model/vo/AddSysChannelGroupVo.java
  27. 23 0
      src/main/java/com/ydtech/modules/admin/model/vo/AuthSysChannelGradeVo.java
  28. 24 0
      src/main/java/com/ydtech/modules/admin/model/vo/AuthSysChannelGroupVo.java
  29. 22 0
      src/main/java/com/ydtech/modules/admin/model/vo/ChannelAuditVo.java
  30. 25 0
      src/main/java/com/ydtech/modules/admin/model/vo/ChannelSettleVo.java
  31. 23 0
      src/main/java/com/ydtech/modules/admin/model/vo/CostSysChannelGroupVo.java
  32. 31 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysChannelCostPageVo.java
  33. 17 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysChannelGradePageVo.java
  34. 50 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysChannelGroupPageVo.java
  35. 29 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysChannelGroupVo.java
  36. 21 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysChannelVo.java
  37. 25 0
      src/main/java/com/ydtech/modules/admin/model/vo/SysDeptListVo.java
  38. 22 0
      src/main/java/com/ydtech/modules/admin/service/SysChannelAreaRelationService.java
  39. 13 0
      src/main/java/com/ydtech/modules/admin/service/SysChannelCostRelationService.java
  40. 112 0
      src/main/java/com/ydtech/modules/admin/service/SysChannelCostService.java
  41. 75 0
      src/main/java/com/ydtech/modules/admin/service/SysChannelGradeService.java
  42. 20 0
      src/main/java/com/ydtech/modules/admin/service/SysChannelGroupInfoService.java
  43. 131 0
      src/main/java/com/ydtech/modules/admin/service/SysChannelGroupService.java
  44. 13 0
      src/main/java/com/ydtech/modules/admin/service/SysCostOperateLogService.java
  45. 29 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysChannelAreaRelationServiceImpl.java
  46. 22 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysChannelCostRelationServiceImpl.java
  47. 310 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysChannelCostServiceImpl.java
  48. 137 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysChannelGradeServiceImpl.java
  49. 30 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysChannelGroupInfoServiceImpl.java
  50. 480 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysChannelGroupServiceImpl.java
  51. 22 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysCostOperateLogServiceImpl.java
  52. 29 4
      src/main/java/com/ydtech/modules/esm/controller/EsmInsCompanyController.java
  53. 1 0
      src/main/java/com/ydtech/modules/esm/model/EsmInsCompany.java
  54. 6 0
      src/main/java/com/ydtech/modules/esm/model/vo/res/EsmInsCompanyResVo.java
  55. 5 1
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  56. 20 1
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  57. 11 9
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  58. 9 0
      src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsNewMapper.java
  59. 3 0
      src/main/java/com/ydtech/modules/protocols/entity/po/PtlAgreementProductCostsNew.java
  60. 10 0
      src/main/java/com/ydtech/modules/protocols/service/PtlAgreementProductCostsNewService.java
  61. 25 1
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  62. 36 0
      src/main/resources/mapper/modules/admin/SysChannelAreaRelationMapper.xml
  63. 83 0
      src/main/resources/mapper/modules/admin/SysChannelCostMapper.xml
  64. 19 0
      src/main/resources/mapper/modules/admin/SysChannelCostRelationMapper.xml
  65. 21 0
      src/main/resources/mapper/modules/admin/SysChannelGradeMapper.xml
  66. 44 0
      src/main/resources/mapper/modules/admin/SysChannelGroupInfoMapper.xml
  67. 40 0
      src/main/resources/mapper/modules/admin/SysChannelGroupMapper.xml
  68. 20 0
      src/main/resources/mapper/modules/admin/SysCostOperateLogMapper.xml
  69. 54 0
      src/main/resources/mapper/modules/protocols/PtlAgreementProductCostsNewMapper.xml

+ 124 - 1
sql/Online.sql

@@ -305,4 +305,127 @@ CREATE TABLE `sys_user_record` (
                                    PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息修改记录';
 
---  2024-09-24  end
+--  2024-09-24  end
+
+
+--add by dongxin 20240918
+DROP TABLE IF EXISTS `sys_channel_area_relation`;
+CREATE TABLE `sys_channel_area_relation`  (
+                                              `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
+                                              `grade_id` bigint NULL DEFAULT NULL COMMENT '渠道分组级别id',
+                                              `area_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构id',
+                                              PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '分组机构关联表' ROW_FORMAT = DYNAMIC;
+
+DROP TABLE IF EXISTS `sys_channel_cost`;
+CREATE TABLE `sys_channel_cost`  (
+                                     `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
+                                     `order_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '订单号',
+                                     `user_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '工号',
+                                     `user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '渠道名称',
+                                     `leader_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '维护人员',
+                                     `status` tinyint NULL DEFAULT NULL COMMENT '审核状态0未审核 1审核通过',
+                                     `settle_status` tinyint NULL DEFAULT NULL COMMENT '结算状态 0.未结算 1.已结算',
+                                     `license_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '车牌号',
+                                     `insured_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '被保险人姓名',
+                                     `company_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '保险公司编号',
+                                     `inscompany` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '保险名称',
+                                     `partner_companies_id` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '合作公司id',
+                                     `partner_companies_name` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '合作公司名称',
+                                     `product_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '产品id',
+                                     `product_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '产品名称',
+                                     `docking_person` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '对接人',
+                                     `jq_costs_proportion` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '加投比例(交强)',
+                                     `sy_costs_proportion` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '加投比例(商业)',
+                                     `no_costs_proportion` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '加投比例(非车)',
+                                     `signing_time` datetime NULL DEFAULT NULL COMMENT '签单时间',
+                                     `pay_date` datetime NULL DEFAULT NULL COMMENT '支付时间',
+                                     `jq_jt_premium` decimal(10, 2) NULL DEFAULT NULL COMMENT '加投金额(交强)',
+                                     `sy_jt_premium` decimal(10, 2) NULL DEFAULT NULL COMMENT '加投金额(商业)',
+                                     `jy_jt_premium` decimal(10, 2) NULL DEFAULT NULL COMMENT '加投金额(非车)',
+                                     `voucher_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '凭证号',
+                                     `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+                                     `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                     `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
+                                     `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+                                     `jq_policy_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '交强保单号',
+                                     `sy_policy_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商业保单号',
+                                     `no_policy_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '非车保单号',
+                                     `tax_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '车船税费用',
+                                     `jq_premium` decimal(10, 2) NULL DEFAULT NULL COMMENT '交强险费用',
+                                     `sy_premium` decimal(10, 2) NULL DEFAULT NULL COMMENT '商业险费用',
+                                     `jy_premium` decimal(10, 2) NULL DEFAULT NULL COMMENT '驾意险费用',
+                                     `jq_costs_export_proportion` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '交强出口比例',
+                                     `sy_costs_export_proportion` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '商业出口比例',
+                                     `no_costs_export_proportion` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '非车出口比例',
+                                     `total_premium` decimal(10, 2) NULL DEFAULT NULL COMMENT '加投补贴金额',
+                                     `settlement_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '结算金额',
+                                     `deleted` tinyint NULL DEFAULT NULL COMMENT '是否删除  1:已删除  0:正常',
+                                     PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '加投结算管理表' ROW_FORMAT = DYNAMIC;
+
+DROP TABLE IF EXISTS `sys_channel_cost_relation`;
+CREATE TABLE `sys_channel_cost_relation`  (
+                                              `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
+                                              `channel_id` bigint NULL DEFAULT NULL COMMENT '渠道费用分组id',
+                                              `agreement_id` bigint NULL DEFAULT NULL COMMENT '协议id',
+                                              `cost_id` bigint NULL DEFAULT NULL COMMENT '费用id',
+                                              PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '渠道分组费用关联表' ROW_FORMAT = DYNAMIC;
+
+DROP TABLE IF EXISTS `sys_channel_grade`;
+CREATE TABLE `sys_channel_grade`  (
+                                      `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
+                                      `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组级别',
+                                      `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+                                      `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                      `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
+                                      `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+                                      PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '渠道分组表' ROW_FORMAT = DYNAMIC;
+
+DROP TABLE IF EXISTS `sys_channel_group`;
+CREATE TABLE `sys_channel_group`  (
+                                      `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
+                                      `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分组名称',
+                                      `enabled` tinyint NULL DEFAULT NULL COMMENT '是否启动 1 启动 0 关闭',
+                                      `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
+                                      `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+                                      `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                      `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
+                                      `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+                                      `start_time` datetime NULL DEFAULT NULL COMMENT '开始时间',
+                                      `end_time` datetime NULL DEFAULT NULL COMMENT '结束时间',
+                                      PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '渠道费用分组表' ROW_FORMAT = DYNAMIC;
+
+
+DROP TABLE IF EXISTS `sys_channel_group_info`;
+CREATE TABLE `sys_channel_group_info`  (
+                                           `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
+                                           `channel_id` bigint NULL DEFAULT NULL COMMENT '渠道费用分组id',
+                                           `grade_id` bigint NULL DEFAULT NULL COMMENT '渠道分组id',
+                                           `grade_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '渠道分组名称',
+                                           `jq_costs_proportion` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '加投比例(交强)',
+                                           `sy_costs_proportion` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '加投比例(商业)',
+                                           `no_costs_proportion` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '加投比例(非车)',
+                                           `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+                                           `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                           `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
+                                           `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
+                                           PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '渠道分组费用关联表' ROW_FORMAT = DYNAMIC;
+
+
+DROP TABLE IF EXISTS `sys_cost_operate_log`;
+CREATE TABLE `sys_cost_operate_log`  (
+                                         `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
+                                         `opt_id` bigint NULL DEFAULT NULL COMMENT '操作数据id',
+                                         `opt_type` tinyint NULL DEFAULT NULL COMMENT '操作类型0.新增加投1.修改加投',
+                                         `opt_content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作内容',
+                                         `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
+                                         `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
+                                         PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '加投结算日志' ROW_FORMAT = Dynamic;
+
+--add by dongxin 20240918 end

+ 29 - 0
src/main/java/com/ydtech/modules/admin/constants/UserConstants.java

@@ -0,0 +1,29 @@
+package com.ydtech.modules.admin.constants;
+
+/**
+ * 用户常量信息
+ * 
+ * @author ruoyi
+ */
+public class UserConstants
+{
+
+    /** 校验返回结果码 */
+    public final static String UNIQUE = "0";
+    public final static String NOT_UNIQUE = "1";
+
+    /** 是否删除 */
+    public final static Integer DEL = 1;
+    public final static Integer NOT_DEL = 0;
+
+    /** 加投操作日志类型 */
+    public final static Integer OPT_TYPE_0 = 0; // 新增加投
+    public final static Integer OPT_TYPE_1 = 1; // 修改加投
+
+    /**
+     * 分页长度限制
+     */
+    public static final int PAGE_MIN_LENGTH = 1;
+    public static final int PAGE_MAX_LENGTH = 100;
+
+}

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

@@ -0,0 +1,117 @@
+package com.ydtech.modules.admin.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.dto.SysChannelCostDto;
+import com.ydtech.modules.admin.model.excel.read.SysChannelCostExcelReadHead;
+import com.ydtech.modules.admin.model.po.SysChannelCost;
+import com.ydtech.modules.admin.model.vo.AddSysChannelCostVo;
+import com.ydtech.modules.admin.model.vo.ChannelSettleVo;
+import com.ydtech.modules.admin.model.vo.SysChannelCostPageVo;
+import com.ydtech.modules.admin.service.SysChannelCostService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.SnowFlakeUtil;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.excel.ExcelEasypoiUtils;
+import io.swagger.annotations.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Api(tags = "加投结算管理")
+@RestController
+@RequestMapping("/sysChannelCost")
+public class SysChannelCostController extends BaseController {
+
+    @Autowired
+    private SysChannelCostService sysChannelCostService;
+
+    @PostMapping(value = "/queryPage")
+    @ApiOperation(value = "加投结算列表(分页)")
+    public HttpResult<Page<SysChannelCost>> queryPage(@RequestBody SysChannelCostPageVo sysChannelCostPageVo) {
+        Page page = buildPageRequest(sysChannelCostPageVo.getPageDto());
+        return HttpResult.ok(sysChannelCostService.queryPage(page,sysChannelCostPageVo));
+    }
+
+    @PostMapping(value = "/queryStaticPage")
+    @ApiOperation(value = "加投结算汇总列表(分页)")
+    public HttpResult<BasePageResult<SysChannelCostDto>> queryStaticPage(@RequestBody SysChannelCostPageVo sysChannelCostPageVo) {
+        BasePageResult<SysChannelCostDto> result = sysChannelCostService.queryStaticPage(sysChannelCostPageVo);
+        return HttpResult.ok("查询数据成功", result);
+    }
+
+    @PostMapping(value = "/query/{id}")
+    @ApiOperation(value = "加投结算{id} 查询")
+    public HttpResult query(@PathVariable Long id) {
+        return HttpResult.ok(sysChannelCostService.queryById(id));
+    }
+
+    @PutMapping("/modify/{id}")
+    @ApiOperation("修改加投结算")
+    public HttpResult modify(@PathVariable Long id, @RequestBody AddSysChannelCostVo addSysChannelCostVo) {
+        // 获取当前登录信息
+        String userName = getUserName();
+        SysChannelCost sysChannelCost = new SysChannelCost();
+        BeanUtils.copyProperties(addSysChannelCostVo, sysChannelCost);
+        sysChannelCost.setId(id);
+        sysChannelCost.setUpdateBy(userName);
+        sysChannelCost.setUpdateTime(LocalDateTime.now());
+        sysChannelCostService.edit(sysChannelCost);
+        return HttpResult.ok("修改成功");
+    }
+
+//    @ApiOperation(value = "加投结算审核")
+//    @PostMapping("/audit/")
+//    public HttpResult audit(@RequestBody ChannelAuditVo channelAuditVo){
+//        return sysChannelCostService.audit(channelAuditVo) ? HttpResult.ok("审核成功") : HttpResult.error("审核失败");
+//    }
+
+    @DeleteMapping("/del/{id}")
+    @ApiOperation("删除加投结算")
+    public HttpResult delete(@PathVariable Long id) {
+        sysChannelCostService.delete(id);
+        return HttpResult.ok();
+    }
+
+    @PostMapping(value = "/export")
+    @ApiOperation(value = "加投结算数据导出")
+    public HttpResult export(@RequestBody SysChannelCostPageVo sysChannelCostPageVo) {
+        return sysChannelCostService.exportData(sysChannelCostPageVo);
+    }
+
+    @ApiOperation(value = "批量结算")
+    @PostMapping("/settle/")
+    public HttpResult settle(@RequestBody ChannelSettleVo channelSettleVo){
+        return sysChannelCostService.settle(channelSettleVo) ? HttpResult.ok("结算成功") : HttpResult.error("结算失败");
+    }
+
+    @PostMapping("/settleImportData")
+    @ApiOperation(value = "批量导入结算(excel)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "excel文件", required = true, dataType = "__file")
+    })
+    public HttpResult<String> settleImportData(@RequestParam MultipartFile multipartFile, @RequestParam("voucherNumber") String voucherNumber) {
+        List<SysChannelCostExcelReadHead> heads = null;
+        AssertionUtils.isFail(StringUtils.isBlank(voucherNumber),"结算凭证不能为空!");
+        try {
+            heads = ExcelEasypoiUtils.importExcel(multipartFile, SysChannelCostExcelReadHead.class, 0, 1, 1);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        if (CollectionUtils.isEmpty(heads)) {
+            return HttpResult.error("导入数据为空");
+        }
+        String taskId = String.valueOf(new SnowFlakeUtil().nextId());
+        sysChannelCostService.importSettle(heads,voucherNumber);
+        return HttpResult.ok(taskId);
+
+    }
+}

+ 165 - 0
src/main/java/com/ydtech/modules/admin/controller/SysChannelGradeController.java

@@ -0,0 +1,165 @@
+package com.ydtech.modules.admin.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.constants.UserConstants;
+import com.ydtech.modules.admin.model.SysArea;
+import com.ydtech.modules.admin.model.po.*;
+import com.ydtech.modules.admin.model.vo.*;
+import com.ydtech.modules.admin.service.SysAreaService;
+import com.ydtech.modules.admin.service.SysChannelAreaRelationService;
+import com.ydtech.modules.admin.service.SysChannelGradeService;
+import com.ydtech.modules.admin.service.SysChannelGroupInfoService;
+import com.ydtech.modules.admin.service.impl.SysAreaServiceImpl;
+import com.ydtech.modules.admin.service.impl.SysChannelAreaRelationServiceImpl;
+import com.ydtech.modules.admin.service.impl.SysChannelGroupInfoServiceImpl;
+import com.ydtech.modules.admin.service.impl.SysChannelGroupServiceImpl;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.JudgeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Api(tags = "渠道分组管理")
+@RestController
+@RequestMapping("/sysChannelGrade")
+public class SysChannelGradeController  extends BaseController {
+
+    @Autowired
+    private SysChannelGradeService sysChannelGradeService;
+    @Autowired
+    private SysAreaService sysAreaService;
+    @Autowired
+    private SysChannelGroupInfoService sysChannelGroupInfoService;
+    @Autowired
+    private SysChannelAreaRelationService sysChannelAreaRelationService;
+
+    @PostMapping(value = "/queryList")
+    @ApiOperation(value = "渠道分组列表")
+    public HttpResult<Object> queryList(){
+        return HttpResult.ok(sysChannelGradeService.queryList());
+    }
+
+    @PostMapping(value = "/queryRelationList/{id}")
+    @ApiOperation(value = "获取关联机构列表")
+    public HttpResult<Object> queryRelationList(@PathVariable Long id){
+        return HttpResult.ok(sysChannelGradeService.queryRelationList(id));
+    }
+
+    @PostMapping(value = "/queryRelation")
+    @ApiOperation(value = "获取关联机构列表")
+    public HttpResult<Object> queryRelation(@RequestBody SysChannelVo sysChannelVo){
+        return HttpResult.ok(sysChannelGradeService.queryRelation(sysChannelVo));
+    }
+
+    @PostMapping("/queryPage")
+    @ApiOperation(value = "渠道分组分页列表")
+    public HttpResult<PageResult<SysChannelGrade>> queryPage(@RequestBody @Valid SysChannelGradePageVo sysChannelGradePageVo) {
+        Page page = buildPageRequest(sysChannelGradePageVo.getPageDto());
+        Page<SysChannelGrade> pageResultHttpResult = sysChannelGradeService.queryPage(page,sysChannelGradePageVo);
+        return HttpResult.ok(buildPageResponse(pageResultHttpResult));
+    }
+
+    @PostMapping("/grade")
+    @ApiOperation("添加渠道分组")
+    public HttpResult save(@RequestBody @Valid AddSysChannelGradeVo addSysChannelGradeVo) {
+        // 获取当前登录信息
+        String userName = getUserName();
+        SysChannelGrade sysChannelGrade = new SysChannelGrade();
+        BeanUtils.copyProperties(addSysChannelGradeVo, sysChannelGrade);
+        sysChannelGrade.setCreateTime(LocalDateTime.now());
+        sysChannelGrade.setCreateBy(userName);
+        if (UserConstants.NOT_UNIQUE.equals(sysChannelGradeService.checkNameUnique(sysChannelGrade))) {
+            return HttpResult.error("新增渠道分组'" + sysChannelGrade.getName() + "'失败,渠道分组名称已存在");
+        }
+        boolean save = sysChannelGradeService.save(sysChannelGrade);
+        return JudgeUtils.add(save);
+    }
+
+    @PutMapping("/grade/{id}")
+    @ApiOperation("修改渠道分组")
+    public HttpResult modify(@PathVariable Long id, @RequestBody AddSysChannelGradeVo addSysChannelGradeVo) {
+        // 获取当前登录信息
+        String userName = getUserName();
+        SysChannelGrade sysChannelGrade = new SysChannelGrade();
+        BeanUtils.copyProperties(addSysChannelGradeVo, sysChannelGrade);
+        sysChannelGrade.setId(id);
+        sysChannelGrade.setUpdateTime(LocalDateTime.now());
+        sysChannelGrade.setUpdateBy(userName);
+        if (UserConstants.NOT_UNIQUE.equals(sysChannelGradeService.checkNameUnique(sysChannelGrade))) {
+            return HttpResult.error("修改渠道分组'" + sysChannelGrade.getName() + "'失败,渠道分组名称已存在");
+        }
+        // 判断是否有费用设置
+        LambdaQueryWrapper<SysChannelGroupInfo> infoWapper = new LambdaQueryWrapper<>();
+        infoWapper.eq(SysChannelGroupInfo::getGradeId, id);
+        List<SysChannelGroupInfo> infos = sysChannelGroupInfoService.list(infoWapper);
+        for (SysChannelGroupInfo info : infos) {
+            info.setGradeName(addSysChannelGradeVo.getName());
+            info.setUpdateBy(userName);
+            info.setUpdateTime(LocalDateTime.now());
+        }
+        sysChannelGroupInfoService.saveOrUpdateBatch(infos);
+        boolean modify = sysChannelGradeService.saveOrUpdate(sysChannelGrade);
+        return JudgeUtils.modify(modify);
+    }
+
+    @DeleteMapping("/grade/{id}")
+    @ApiOperation("删除渠道分组")
+    public HttpResult delete(@PathVariable Long id) {
+        sysChannelGradeService.delete(id);
+        return HttpResult.ok("删除成功");
+    }
+
+    @DeleteMapping("/deleteAuth")
+    @ApiOperation("删除分组授权机构")
+    public HttpResult deleteAuth(@RequestBody AuthSysChannelGradeVo authSysChannelGradeVo) {
+        sysChannelGradeService.deleteAuth(authSysChannelGradeVo);
+        return HttpResult.ok("删除成功");
+    }
+
+    @PostMapping("/grade/authorized")
+    @ApiOperation("渠道分组授权机构")
+    public HttpResult authorized(@RequestBody @Valid AuthSysChannelGradeVo authSysChannelGradeVo) {
+        // 查询该机构是否有授权
+        List<String> areaIdList = authSysChannelGradeVo.getAreaIdList();
+        if(CollUtil.isEmpty(areaIdList)){
+            // 删除所有已经授权机构
+            QueryWrapper<SysChannelAreaRelation> wrapper = new QueryWrapper<>();
+            LambdaQueryWrapper<SysChannelAreaRelation> lqw = new LambdaQueryWrapper<>();
+            lqw.eq(SysChannelAreaRelation::getGradeId, authSysChannelGradeVo.getId());
+            sysChannelAreaRelationService.remove(wrapper);
+            return HttpResult.ok("授权成功");
+        }
+
+        LambdaQueryWrapper<SysChannelGrade> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(SysChannelGrade::getId, areaIdList);
+        long count = sysChannelGradeService.count(queryWrapper);
+        AssertionUtils.isFail(count > 0,"已授权的机构不能重复授权");
+
+        LambdaQueryWrapper<SysArea> areaWrapper = new LambdaQueryWrapper<>();
+        areaWrapper.in(SysArea::getId, areaIdList);
+        List<SysArea> areas = sysAreaService.list(areaWrapper);
+        AssertionUtils.isFail(areas.size() > 0, "勾选机构不存在");
+
+        for (int i = 0; i < areas.size(); i++) {
+            LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SysArea::getUpperCode, areas.get(i).getAreaCode());
+            long areaCount = sysAreaService.count(wrapper);
+            AssertionUtils.isFail(areaCount <= 0,"非末级机构,不允许授权!");
+        }
+        sysChannelGradeService.authArea(authSysChannelGradeVo);
+        return HttpResult.ok("授权成功");
+    }
+}

+ 143 - 0
src/main/java/com/ydtech/modules/admin/controller/SysChannelGroupCrotroller.java

@@ -0,0 +1,143 @@
+package com.ydtech.modules.admin.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.admin.constants.EnabledEnum;
+import com.ydtech.modules.admin.constants.UserConstants;
+import com.ydtech.modules.admin.model.po.SysChannelCostRelation;
+import com.ydtech.modules.admin.model.po.SysChannelGroup;
+import com.ydtech.modules.admin.model.vo.*;
+import com.ydtech.modules.admin.service.SysChannelCostRelationService;
+import com.ydtech.modules.admin.service.SysChannelGroupService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Api(tags = "渠道费用分组管理")
+@RestController
+@RequestMapping("/sysChannelGroup")
+public class SysChannelGroupCrotroller extends BaseController {
+
+    @Autowired
+    private SysChannelGroupService sysChannelGroupService;
+    @Autowired
+    private SysChannelCostRelationService sysChannelCostRelationService;
+    @Autowired
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
+
+    @PostMapping("/queryChannelPage")
+    @ApiOperation(value = "渠道费用分组分页列表")
+    public HttpResult<PageResult<SysChannelGroup>> queryPageOrder(@RequestBody @Valid SysChannelGroupVo sysChannelGroupVo) {
+        Page<T> page = buildPageRequest(sysChannelGroupVo.getPageDto());
+        Page<SysChannelGroup> pageResultHttpResult = sysChannelGroupService.queryPage(page,sysChannelGroupVo);
+        return HttpResult.ok(buildPageResponse(pageResultHttpResult));
+    }
+
+    @PostMapping("/query/{id}")
+    @ApiOperation(value = "渠道费用分组查询")
+    public HttpResult<SysChannelGroup> query(@PathVariable Long id) {
+        SysChannelGroup group = sysChannelGroupService.queryById(id);
+        return HttpResult.ok(group);
+    }
+
+    @PostMapping("/queryInfo")
+    @ApiOperation(value = "渠道费用选中分页列表")
+    public HttpResult<Page<PtlAgreementProductCostsNew>> query(@RequestBody @Valid SysChannelGroupPageVo sysChannelGroupPageVo) {
+        Page<T> page = buildPageRequest(sysChannelGroupPageVo.getPageDto());
+        Page<PtlAgreementProductCostsNew> pageResult = ptlAgreementProductCostsNewService.getProductPage(page, sysChannelGroupPageVo);
+        List<PtlAgreementProductCostsNew> costsNewList = pageResult.getRecords();
+        sysChannelGroupService.queryCostList(costsNewList,sysChannelGroupPageVo);
+        pageResult.setRecords(costsNewList);
+        return HttpResult.ok(pageResult);
+    }
+
+    @GetMapping("/queryInfo/{id}")
+    @ApiOperation(value = "渠道费用选中分页列表")
+    public HttpResult<List<SysChannelGroup>> queryInfo(@PathVariable Long id) {
+        List<SysChannelGroup> result = sysChannelGroupService.getProductList(id);
+        return HttpResult.ok(result);
+    }
+
+    @PostMapping("/channel")
+    @ApiOperation("添加渠道费用分组")
+    public HttpResult save(@RequestBody @Valid AddSysChannelGroupVo addChannelGroupVo) {
+        // 获取当前登录信息
+        String userName = getUserName();
+        if (UserConstants.NOT_UNIQUE.equals(sysChannelGroupService.checkNameUnique(null,addChannelGroupVo))) {
+            return HttpResult.error("新增渠道费用分组'" + addChannelGroupVo.getName() + "'失败,渠道费用分组名称已存在");
+        }
+        if(addChannelGroupVo.getStartTime().isAfter(addChannelGroupVo.getEndTime())){
+            return HttpResult.error("结束时间不能在开始时间之前");
+        }
+        sysChannelGroupService.insert(userName, addChannelGroupVo);
+        return HttpResult.ok("新增成功");
+    }
+
+    @PutMapping("/channel/{id}")
+    @ApiOperation("修改渠道费用分组")
+    public HttpResult modify(@PathVariable Long id, @RequestBody AddSysChannelGroupVo addChannelGroupVo) {
+        // 获取当前登录信息
+        String userName = getUserName();
+        if (UserConstants.NOT_UNIQUE.equals(sysChannelGroupService.checkNameUnique(id,addChannelGroupVo))) {
+            return HttpResult.error("修改渠道费用分组'" + addChannelGroupVo.getName() + "'失败,渠道费用分组名称已存在");
+        }
+        if(addChannelGroupVo.getStartTime().isAfter(addChannelGroupVo.getEndTime())){
+            return HttpResult.error("结束时间不能在开始时间之前");
+        }
+        sysChannelGroupService.edit(id,userName, addChannelGroupVo);
+        return HttpResult.ok("修改成功");
+    }
+
+    @ApiOperation(value = "渠道分组 启动/停止")
+    @PutMapping("/open/{id}")
+    public HttpResult openOne(@PathVariable Long id) {
+        sysChannelGroupService.openOne(id);
+        return HttpResult.ok();
+    }
+
+    @DeleteMapping("/channel/{id}")
+    @ApiOperation("删除渠道费用分组")
+    public HttpResult delete(@PathVariable Long id) {
+        sysChannelGroupService.delete(id);
+        return HttpResult.ok("删除成功");
+    }
+
+    @PostMapping("/channel/costSet")
+    @ApiOperation("渠道费用分组费用设置")
+    public HttpResult costSet(@RequestBody @Valid CostSysChannelGroupVo costSysChannelGroupVo) {
+
+        List<Long> costIds = costSysChannelGroupVo.getCostIdList();
+        if(CollUtil.isNotEmpty(costIds)){
+            LambdaQueryWrapper<SysChannelCostRelation> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(SysChannelCostRelation::getId, costSysChannelGroupVo.getCostIdList());
+            long count = sysChannelCostRelationService.count(queryWrapper);
+            AssertionUtils.isFail(count > 0,"已设置的费用不能重复设置");
+
+            SysChannelGroup sysChannelGroup = sysChannelGroupService.getById(costSysChannelGroupVo.getId());
+            AssertionUtils.isFail(sysChannelGroup.getEnabled().equals(EnabledEnum.EE_0.getCode()),"已经停止的费用分组不能设置费用");
+            AssertionUtils.isFail(sysChannelGroup.getStartTime().isAfter(LocalDateTime.now())
+                    || sysChannelGroup.getEndTime().isBefore(LocalDateTime.now()),
+                    "过期的费用分组不能设置费用");
+            sysChannelGroupService.costSet(costSysChannelGroupVo);
+        } else{
+            LambdaQueryWrapper<SysChannelCostRelation> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SysChannelCostRelation::getChannelId, costSysChannelGroupVo.getId());
+            sysChannelCostRelationService.remove(wrapper);
+        }
+        return HttpResult.ok("授权成功");
+    }
+}

+ 25 - 4
src/main/java/com/ydtech/modules/admin/controller/SysDeptController.java

@@ -8,10 +8,7 @@ import com.ydtech.core.page.PageRequest;
 import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysPassword;
 import com.ydtech.modules.admin.model.SysUser;
-import com.ydtech.modules.admin.model.vo.KztGetDeptUtilsDto;
-import com.ydtech.modules.admin.model.vo.SysDeptRemoveVo;
-import com.ydtech.modules.admin.model.vo.SysDeptTreeVo;
-import com.ydtech.modules.admin.model.vo.SysDeptVo;
+import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysPasswordService;
 import com.ydtech.modules.admin.utils.KztGetDeptUtils;
@@ -22,6 +19,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
@@ -83,6 +81,29 @@ public class SysDeptController extends BaseController {
         return HttpResult.ok(sysDeptService.findTree(deptId,managementSource));
     }
 
+    @PostMapping("/queryTreeList")
+    @ApiOperation(value = "查询机构树列表")
+    public HttpResult<List<SysDept>> queryTreeList(@RequestBody SysDeptListVo sysDeptListVo) {
+
+        List<SysDept> deptAll = new ArrayList<>();
+        if(!StringUtils.isBlank(sysDeptListVo.getId()) || !StringUtils.isBlank(sysDeptListVo.getName())) {
+            LambdaQueryWrapper<SysDept> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(SysDept::getDelFlag, 0)
+                    .eq(!StringUtils.isBlank(sysDeptListVo.getId()),SysDept::getId, sysDeptListVo.getId())
+                    .like(!StringUtils.isBlank(sysDeptListVo.getName()),SysDept::getName, sysDeptListVo.getName())
+                    .eq(!StringUtils.isBlank(sysDeptListVo.getName()),SysDept::getComlevel, "5");
+            List<SysDept> depts = sysDeptService.list(queryWrapper);
+            for (SysDept dept : depts) {
+                List<SysDept> list = sysDeptService.findTree(dept.getId(),null);
+                deptAll.addAll(list);
+            }
+        }else{
+            List<SysDept> list = sysDeptService.findTree(null,null);
+            deptAll.addAll(list);
+        }
+        return HttpResult.ok(deptAll);
+    }
+
     //    @PreAuthorize("hasAuthority('sys:dept:edit')")
     @PostMapping(value = "/edit")
     public HttpResult edit(@RequestBody SysDept record) {

+ 23 - 0
src/main/java/com/ydtech/modules/admin/dao/SysChannelAreaRelationMapper.java

@@ -0,0 +1,23 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysChannelAreaRelation;
+import com.ydtech.modules.admin.model.vo.SysChannelVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_area_relation(渠道分组机构关联表)】的数据库操作Mapper
+* @createDate 2024-09-09 18:55:22
+* @Entity generator.domain.SysChannelAreaRelation
+*/
+public interface SysChannelAreaRelationMapper extends BaseMapper<SysChannelAreaRelation> {
+
+    List<SysChannelAreaRelation> queryRelationList(@Param("sysChannelVo")SysChannelVo sysChannelVo);
+}
+
+
+
+

+ 29 - 0
src/main/java/com/ydtech/modules/admin/dao/SysChannelCostMapper.java

@@ -0,0 +1,29 @@
+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.SysChannelCostDto;
+import com.ydtech.modules.admin.model.po.SysChannelCost;
+import com.ydtech.modules.admin.model.vo.SysChannelCostPageVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_cost(分组计算结果表)】的数据库操作Mapper
+* @createDate 2024-09-11 10:16:44
+* @Entity generator.domain.SysChannelCost
+*/
+public interface SysChannelCostMapper extends BaseMapper<SysChannelCost> {
+
+    /**
+     * 渠道加投汇总分页查询
+     * @param page
+     * @param sysChannelCostPageVo
+     * @return
+     */
+    Page<SysChannelCostDto> queryPage(@Param("page") Page<SysChannelCostDto> page, @Param("vo") SysChannelCostPageVo sysChannelCostPageVo);
+}
+
+
+
+

+ 18 - 0
src/main/java/com/ydtech/modules/admin/dao/SysChannelCostRelationMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.dao;
+
+import com.ydtech.modules.admin.model.po.SysChannelCostRelation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_cost_relation(渠道分组费用关联表)】的数据库操作Mapper
+* @createDate 2024-09-10 11:54:30
+* @Entity com.ydtech.domain.SysChannelCostRelation
+*/
+public interface SysChannelCostRelationMapper extends BaseMapper<SysChannelCostRelation> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/ydtech/modules/admin/dao/SysChannelGradeMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysChannelGrade;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_grade(渠道分组级别表)】的数据库操作Mapper
+* @createDate 2024-09-10 17:41:31
+* @Entity generator.domain.SysChannelGrade
+*/
+public interface SysChannelGradeMapper extends BaseMapper<SysChannelGrade> {
+
+}
+
+
+
+

+ 25 - 0
src/main/java/com/ydtech/modules/admin/dao/SysChannelGroupInfoMapper.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysChannelGroupInfo;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_group_info(渠道分组比例明细表)】的数据库操作Mapper
+* @createDate 2024-09-10 16:08:47
+* @Entity generator.domain.SysChannelGroupInfo
+*/
+public interface SysChannelGroupInfoMapper extends BaseMapper<SysChannelGroupInfo> {
+
+    /**
+     * 加投比例查询
+     * @param productId
+     * @param deptId
+     * @return
+     */
+    SysChannelGroupInfo queryProportion(String productId, String deptId);
+}
+
+
+
+

+ 26 - 0
src/main/java/com/ydtech/modules/admin/dao/SysChannelGroupMapper.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysChannelGroup;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_group(渠道分组)】的数据库操作Mapper
+* @createDate 2024-09-09 18:55:22
+* @Entity generator.domain.SysChannelGroup
+*/
+public interface SysChannelGroupMapper extends BaseMapper<SysChannelGroup> {
+
+    /**
+     * 获取选中费用列表
+     * @param id
+     * @return
+     */
+    List<SysChannelGroup> getProductList(Long id);
+}
+
+
+
+

+ 18 - 0
src/main/java/com/ydtech/modules/admin/dao/SysCostOperateLogMapper.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysCostOperateLog;
+
+/**
+* @author dongxin
+* @description 针对表【sys_cost_operate_log(加投结算日志)】的数据库操作Mapper
+* @createDate 2024-09-14 14:25:21
+* @Entity generator.domain.SysCostOperateLog
+*/
+public interface SysCostOperateLogMapper extends BaseMapper<SysCostOperateLog> {
+
+}
+
+
+
+

+ 26 - 0
src/main/java/com/ydtech/modules/admin/model/dto/SysChannelCostDto.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.admin.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("加投汇总列表")
+public class SysChannelCostDto {
+
+    @ApiModelProperty(value = "渠道名称")
+    private String userName;
+
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal totalPrice;
+
+
+    @ApiModelProperty(value = "已结算金额")
+    private BigDecimal settledAmount;
+
+    @ApiModelProperty(value = "未结算金额")
+    private BigDecimal unsettledAmount;
+
+}

+ 55 - 0
src/main/java/com/ydtech/modules/admin/model/excel/read/SysChannelCostExcelReadHead.java

@@ -0,0 +1,55 @@
+package com.ydtech.modules.admin.model.excel.read;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SysChannelCostExcelReadHead {
+
+    @Excel(name = "工号")
+    private String userId;
+
+    @Excel(name = "渠道名称")
+    private String userName;
+
+    @Excel(name = "车牌号")
+    private String licenseNo;
+
+    @Excel(name = "交强保单号")
+    private String jqPolicyNo;
+
+    @Excel(name = "商业保单号")
+    private String syPolicyNo;
+
+    @Excel(name = "非车保单号")
+    private String noPolicyNo;
+
+    @Excel(name = "交强保费")
+    private BigDecimal jqPremium;
+
+    @Excel(name = "车船税")
+    private BigDecimal taxAmount;
+
+    @Excel(name = "商业保费")
+    private BigDecimal syPremium;
+
+    @Excel(name = "非车保费")
+    private BigDecimal jyPremium;
+
+    @Excel(name = "交强加投比例")
+    private String jqCostsProportion;
+
+    @Excel(name = "商业加投比例")
+    private String syCostsProportion;
+
+    @Excel(name = "非车加投比例")
+    private String noCostsProportion;
+
+    @Excel(name = "加投补贴金额")
+    private BigDecimal totalPremium;
+
+}

+ 123 - 0
src/main/java/com/ydtech/modules/admin/model/excel/wirte/SysChannelCostExportWriteHead.java

@@ -0,0 +1,123 @@
+package com.ydtech.modules.admin.model.excel.wirte;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelCostExportWriteHead {
+
+    @ColumnWidth(15)
+    @ExcelProperty(index = 0,value = "工号")
+    private String userId;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 1,value = "维护人员")
+    private String leaderName;
+
+    @ColumnWidth(30)
+    @DateTimeFormat("yyyy/MM/dd HH:mm")
+    @ExcelProperty(index = 2,value = "支付日期")
+    private LocalDateTime payDate;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 3,value = "渠道名称")
+    private String userName;
+
+    @ColumnWidth(30)
+    @DateTimeFormat("yyyy/MM/dd HH:mm")
+    @ExcelProperty(index = 4,value = "签单日期")
+    private LocalDateTime signingTime;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 5,value = "车牌号")
+    private String licenseNo;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 6,value = "被保险人")
+    private String insuredName;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 7,value = "合作保司")
+    private String partnerCompaniesName;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 8,value = "保险公司")
+    private String inscompany;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 9,value = "险种")
+    private String productName;
+
+    @ColumnWidth(20)
+    @ExcelProperty(index = 10,value = "对接人")
+    private String dockingPerson;
+
+    @ColumnWidth(30)
+    @ExcelProperty(index = 11,value = "交强保单号")
+    private String jqPolicyNo;
+
+    @ColumnWidth(30)
+    @ExcelProperty(index = 12,value = "商业保单号")
+    private String syPolicyNo;
+
+    @ColumnWidth(30)
+    @ExcelProperty(index = 13,value = "非车保单号")
+    private String noPolicyNo;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 14,value = "交强保费")
+    private BigDecimal jqPremium;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 15,value = "车船税")
+    private BigDecimal taxAmount;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 16,value = "商业保费")
+    private BigDecimal syPremium;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 17,value = "非车保费")
+    private BigDecimal jyPremium;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 18,value = "交强加投比例")
+    private String jqCostsProportion;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 19,value = "商业加投比例")
+    private String syCostsProportion;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 20,value = "非车加投比例")
+    private String noCostsProportion;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 21,value = "加投补贴金额")
+    private BigDecimal totalPremium;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 22,value = "交强出口比例")
+    private BigDecimal jqCostsExportProportion;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 23,value = "商业出口比例")
+    private BigDecimal syCostsExportProportion;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 24,value = "非车出口比例")
+    private BigDecimal noCostsExportProportion;
+
+    @ColumnWidth(10)
+    @ExcelProperty(index = 25,value = "结算金额")
+    private BigDecimal settlementAmount;
+}

+ 48 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysChannelAreaRelation.java

@@ -0,0 +1,48 @@
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 渠道分组机构关联表
+ * @TableName sys_channel_area_relation
+ */
+@TableName(value ="sys_channel_area_relation")
+@Data
+@ApiModel(value = "渠道分组机构关联表")
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelAreaRelation implements Serializable {
+    /**
+     * 编号
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 渠道分组级别id
+     */
+    @ApiModelProperty(value = "渠道分组级别id")
+    private Long gradeId;
+
+    /**
+     * 机构id
+     */
+    @ApiModelProperty(value = "机构id")
+    private String areaId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableField(exist = false)
+    private String name;
+}

+ 280 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysChannelCost.java

@@ -0,0 +1,280 @@
+package com.ydtech.modules.admin.model.po;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 加投结算管理
+ * @TableName sys_channel_cost
+ */
+@TableName(value ="sys_channel_cost")
+@Data
+@ApiModel(value = "加投结算管理")
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelCost implements Serializable {
+    /**
+     * 主键/自增
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    /**
+     * 工号
+     */
+    @ApiModelProperty(value = "工号")
+    private String userId;
+
+    /**
+     * 渠道名称
+     */
+    @ApiModelProperty(value = "渠道名称")
+    private String userName;
+
+    /**
+     * 维护人员
+     */
+    @ApiModelProperty(value = "维护人员")
+    private String leaderName;
+
+    /**
+     * 审核状态0未审核 1审核通过
+     */
+    @ApiModelProperty(value = "审核状态0未审核 1审核通过")
+    private Integer status;
+
+    /**
+     * 结算状态 0.未结算 1.已结算
+     */
+    @ApiModelProperty(value = "结算状态 0.未结算 1.已结算")
+    private Integer settleStatus;
+
+    /**
+     * 是否删除  -1:已删除  0:正常
+     */
+    @ApiModelProperty(value = "是否删除  -1:已删除  0:正常")
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 车牌号
+     */
+    @ApiModelProperty(value = "车牌号")
+    private String licenseNo;
+
+    /**
+     * 被保险人姓名
+     */
+    @ApiModelProperty(value = "被保险人姓名")
+    private String insuredName;
+
+    /**
+     * 保险公司编号
+     */
+    @ApiModelProperty(value = "保险公司编号")
+    private String companyId;
+
+    /**
+     * 保险名称
+     */
+    @ApiModelProperty(value = "保险名称")
+    private String inscompany;
+
+    /**
+     * 合作公司id
+     */
+    @ApiModelProperty(value = "合作公司id")
+    private String partnerCompaniesId;
+
+    /**
+     * 合作公司名称
+     */
+    @ApiModelProperty(value = "合作公司名称")
+    private String partnerCompaniesName;
+
+    /**
+     * 产品id
+     */
+    @ApiModelProperty(value = "产品id")
+    private String productId;
+
+    /**
+     * 产品名称
+     */
+    @ApiModelProperty(value = "产品名称")
+    private String productName;
+
+    /**
+     * 对接人
+     */
+    @ApiModelProperty(value = "对接人")
+    private String dockingPerson;
+
+    /**
+     * 加投比例(交强)
+     */
+    @ApiModelProperty(value = "加投比例(交强)")
+    private String jqCostsProportion;
+
+    /**
+     * 加投比例(商业)
+     */
+    @ApiModelProperty(value = "加投比例(商业)")
+    private String syCostsProportion;
+
+    /**
+     * 加投比例(非车)
+     */
+    @ApiModelProperty(value = "加投比例(非车)")
+    private String noCostsProportion;
+
+    /**
+     * 签单时间
+     */
+    @ApiModelProperty(value = "签单时间")
+    private LocalDateTime signingTime;
+
+    /**
+     * 支付时间
+     */
+    @ApiModelProperty(value = "支付时间")
+    private LocalDateTime payDate;
+
+    /**
+     * 加投金额(交强)
+     */
+    @ApiModelProperty(value = "加投金额(交强)")
+    private BigDecimal jqJtPremium;
+
+    /**
+     * 加投金额(商业)
+     */
+    @ApiModelProperty(value = "加投金额(商业)")
+    private BigDecimal syJtPremium;
+
+    /**
+     * 加投金额(非车)
+     */
+    @ApiModelProperty(value = "加投金额(非车)")
+    private BigDecimal jyJtPremium;
+
+    /**
+     * 凭证号
+     */
+    @ApiModelProperty("凭证号")
+    private String voucherNumber;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    /**
+     * 交强保单号
+     */
+    @ApiModelProperty(value = "交强保单号")
+    private String jqPolicyNo;
+
+    /**
+     * 商业保单号
+     */
+    @ApiModelProperty(value = "商业保单号")
+    private String syPolicyNo;
+
+    /**
+     * 非车保单号
+     */
+    @ApiModelProperty(value = "非车保单号")
+    private String noPolicyNo;
+
+    /**
+     * 车船税费用
+     */
+    @ApiModelProperty(value = "车船税费用")
+    private BigDecimal taxAmount;
+
+    /**
+     * 交强险费用
+     */
+    @ApiModelProperty(value = "交强险费用")
+    private BigDecimal jqPremium;
+
+    /**
+     * 商业险费用
+     */
+    @ApiModelProperty(value = "商业险费用")
+    private BigDecimal syPremium;
+
+    /**
+     * 驾意险费用
+     */
+    @ApiModelProperty(value = "驾意险费用")
+    private BigDecimal jyPremium;
+
+    /**
+     * 交强出口比例
+     */
+    @ApiModelProperty(value = "交强出口比例")
+    private BigDecimal jqCostsExportProportion;
+
+    /**
+     * 商业出口比例
+     */
+    @ApiModelProperty(value = "商业出口比例")
+    private BigDecimal syCostsExportProportion;
+
+    /**
+     * 非车出口比例
+     */
+    @ApiModelProperty(value = "非车出口比例")
+    private BigDecimal noCostsExportProportion;
+
+    /**
+     * 加投补贴金额
+     */
+    @ApiModelProperty(value = "加投补贴金额")
+    private BigDecimal totalPremium;
+
+    /**
+     * 结算金额
+     */
+    @ApiModelProperty(value = "结算金额")
+    private BigDecimal settlementAmount;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

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

@@ -0,0 +1,51 @@
+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 java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 渠道分组费用关联表
+ * @TableName sys_channel_cost_relation
+ */
+@TableName(value ="sys_channel_cost_relation")
+@Data
+@ApiModel(value = "渠道分组费用关联表")
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelCostRelation implements Serializable {
+    /**
+     * 编号
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 渠道分组id
+     */
+    @ApiModelProperty(value = "渠道分组id")
+    private Long channelId;
+
+    /**
+     * 协议id
+     */
+    @ApiModelProperty(value = "协议id")
+    private Long agreementId;
+
+    /**
+     * 费用id
+     */
+    @ApiModelProperty(value = "费用id")
+    private Long costId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 65 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysChannelGrade.java

@@ -0,0 +1,65 @@
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 渠道分组表
+ * @TableName sys_channel_grade
+ */
+@TableName(value ="sys_channel_grade")
+@Data
+@ApiModel(value = "渠道分组表")
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelGrade implements Serializable {
+    /**
+     * 主键/自增
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 分组级别
+     */
+    @ApiModelProperty(value = "渠道分组名称")
+    private String name;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+}

+ 110 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysChannelGroup.java

@@ -0,0 +1,110 @@
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 渠道分组
+ * @TableName sys_channel_group
+ */
+@TableName(value ="sys_channel_group")
+@Data
+@ApiModel(value = "渠道费用分组")
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelGroup implements Serializable {
+    /**
+     * 编号
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否启动 1 启动 0 关闭
+     */
+    @ApiModelProperty(value = "是否启动 1 启动 0 关闭")
+    private Integer enabled;
+
+    /**
+     * 分组费用名称
+     */
+    @ApiModelProperty(value = "分组费用名称")
+    private String name;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    /**
+     * 开始时间
+     */
+    @ApiModelProperty(value = "开始时间")
+    private LocalDateTime startTime;
+
+    /**
+     * 结束时间
+     */
+    @ApiModelProperty(value = "结束时间")
+    private LocalDateTime endTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableField(exist = false)
+    private List<SysChannelAreaRelation> sysChannelAreaRelations;
+
+    @TableField(exist = false)
+    private List<SysChannelCostRelation> sysChannelCostRelations;
+
+    @TableField(exist = false)
+    private List<SysChannelGroupInfo> sysChannelGroupInfos;
+
+    @TableField(exist = false)
+    private List<SysChannelGrade> sysChannelGrades;
+
+    @TableField(exist = false)
+    private String costsDescription;
+
+    @TableField(exist = false)
+    private String productName;
+
+}

+ 96 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysChannelGroupInfo.java

@@ -0,0 +1,96 @@
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 渠道分组比例明细表
+ * @TableName sys_channel_group_info
+ */
+@TableName(value ="sys_channel_group_info")
+@Data
+@ApiModel(value = "渠道分组比例明细表")
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelGroupInfo implements Serializable {
+    /**
+     * 主键/自增
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 渠道费用分组id
+     */
+    @ApiModelProperty(value = "渠道费用分组id")
+    private Long channelId;
+
+    /**
+     * 渠道分组id
+     */
+    @ApiModelProperty(value = "渠道分组id")
+    private Long gradeId;
+
+    /**
+     * 渠道分组名称
+     */
+    @ApiModelProperty(value = "渠道分组名称")
+    private String gradeName;
+
+    /**
+     * 加投比例(交强)
+     */
+    @ApiModelProperty(value = "加投比例(交强)")
+    private String jqCostsProportion;
+
+    /**
+     * 加投比例(商业)
+     */
+    @ApiModelProperty(value = "加投比例(商业)")
+    private String syCostsProportion;
+
+    /**
+     * 加投比例(非车)
+     */
+    @ApiModelProperty(value = "加投比例(非车)")
+    private String noCostsProportion;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+}

+ 57 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysCostOperateLog.java

@@ -0,0 +1,57 @@
+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 lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 加投结算日志
+ * @TableName sys_cost_operate_log
+ */
+@TableName(value ="sys_cost_operate_log")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysCostOperateLog implements Serializable {
+    /**
+     * 主键/自增
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 操作数据id
+     */
+    private Long optId;
+
+    /**
+     * 操作类型0.新增加投1.修改加投
+     */
+    private Integer optType;
+
+    /**
+     * 操作内容
+     */
+    private String optContent;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 26 - 0
src/main/java/com/ydtech/modules/admin/model/vo/AddSysChannelCostVo.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AddSysChannelCostVo {
+
+    @NotBlank(message = "加投比例(交强)不能为空")
+    @ApiModelProperty(value = "加投比例(交强)")
+    private String jqCostsProportion;
+
+    @NotBlank(message = "加投比例(商业)不能为空")
+    @ApiModelProperty(value = "加投比例(商业)")
+    private String syCostsProportion;
+
+    @NotBlank(message = "加投比例(非车)不能为空")
+    @ApiModelProperty(value = "加投比例(非车)")
+    private String noCostsProportion;
+}

+ 18 - 0
src/main/java/com/ydtech/modules/admin/model/vo/AddSysChannelGradeVo.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AddSysChannelGradeVo {
+
+    @NotBlank(message = "渠道分组级别名称不能为空")
+    @ApiModelProperty(value = "渠道分组级别名称")
+    private String name;
+}

+ 41 - 0
src/main/java/com/ydtech/modules/admin/model/vo/AddSysChannelGroupVo.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.modules.admin.model.po.SysChannelGroupInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AddSysChannelGroupVo {
+
+    @NotBlank(message = "渠道分组名称不能为空")
+    @ApiModelProperty(value = "渠道分组名称")
+    private String name;
+
+    @NotBlank(message = "渠道分组备注不能为空")
+    @ApiModelProperty(value = "渠道分组备注")
+    private String remark;
+
+    @NotNull(message = "状态不能为空")
+    @ApiModelProperty(value = "是否启动 1 启动 0 关闭")
+    private Integer enabled;
+
+    @NotNull(message = "开始时间不能为空")
+    @ApiModelProperty(value = "开始时间")
+    private LocalDateTime startTime;
+
+    @NotNull(message = "结束时间不能为空")
+    @ApiModelProperty(value = "结束时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "费用明细集合")
+    private List<SysChannelGroupInfo> infos;
+}

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

@@ -0,0 +1,23 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AuthSysChannelGradeVo {
+
+    @NotNull(message = "渠道分组级别id不能为空")
+    @ApiModelProperty(value = "渠道分组级别id")
+    private Long id;
+
+    @NotNull(message = "机构id不能为空")
+    @ApiModelProperty(value = "机构idList")
+    private List<String> areaIdList;
+}

+ 24 - 0
src/main/java/com/ydtech/modules/admin/model/vo/AuthSysChannelGroupVo.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AuthSysChannelGroupVo {
+
+    @NotNull(message = "渠道分组id不能为空")
+    @ApiModelProperty(value = "渠道分组id")
+    private Long id;
+
+    @NotBlank(message = "机构id不能为空")
+    @ApiModelProperty(value = "机构idList")
+    private List<Long> areaIdList;
+}

+ 22 - 0
src/main/java/com/ydtech/modules/admin/model/vo/ChannelAuditVo.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ChannelAuditVo {
+
+    @NotNull(message = "加投结算id不能为空")
+    @ApiModelProperty(value = "加投结算id")
+    private Long id;
+
+    @NotNull(message = "审核状态不能为空")
+    @ApiModelProperty(value = "是否审核")
+    private Integer isAudit;
+}

+ 25 - 0
src/main/java/com/ydtech/modules/admin/model/vo/ChannelSettleVo.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ChannelSettleVo {
+
+    @NotNull(message = "加投结算ids不能为空")
+    @ApiModelProperty(value = "加投结算ids")
+    private List<Long> ids;
+
+    @NotBlank(message = "凭证号不能为空")
+    @ApiModelProperty("凭证号")
+    private String voucherNumber;
+
+}

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

@@ -0,0 +1,23 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CostSysChannelGroupVo {
+
+    @NotNull(message = "渠道分组id不能为空")
+    @ApiModelProperty(value = "渠道分组id")
+    private Long id;
+
+    @NotNull(message = "费用id不能为空")
+    @ApiModelProperty(value = "费用idList")
+    private List<Long> costIdList;
+}

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

@@ -0,0 +1,31 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.core.page.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelCostPageVo extends PageRequest {
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "审核状态0未审核 1审核通过")
+    private Integer status;
+
+    @ApiModelProperty(value = "保险公司编号")
+    private String companyId;
+
+    @ApiModelProperty(value = "渠道名称")
+    private String userName;
+
+    @ApiModelProperty(value = "工号")
+    private String userId;
+
+    @ApiModelProperty(value = "车牌号")
+    private String licenseNo;
+}

+ 17 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysChannelGradePageVo.java

@@ -0,0 +1,17 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.core.page.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelGradePageVo extends PageRequest {
+
+    @ApiModelProperty(value = "道分组级别名称")
+    private String name;
+
+}

+ 50 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysChannelGroupPageVo.java

@@ -0,0 +1,50 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.core.page.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelGroupPageVo extends PageRequest {
+
+    @NotNull(message = "编号不能为空")
+    @ApiModelProperty(value = "渠道分组编号")
+    private Long id;
+
+    @ApiModelProperty(value = "保险公司id")
+    private String companyId;
+
+    @ApiModelProperty(value = "协议ids")
+    private String agreementIds;
+
+    @ApiModelProperty(value = "协议id list")
+    private List<String> agreementList;
+
+    @ApiModelProperty(value = "协议id")
+    private String agreementId;
+
+    @ApiModelProperty(value = "是否审核")
+    private String isAudit;
+
+    @ApiModelProperty(value = "产品id")
+    private String productCode;
+
+    @ApiModelProperty(value = "费用起期")
+    private String costStartDate;
+
+    @ApiModelProperty(value = "费用止期")
+    private String costsEndDate;
+
+    @ApiModelProperty(value = "是否有效")
+    private String isEffective;
+
+    @ApiModelProperty(value = "费用描述")
+    private String costsDescription;
+}

+ 29 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysChannelGroupVo.java

@@ -0,0 +1,29 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.ydtech.core.page.PageRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelGroupVo extends PageRequest {
+
+    @ApiModelProperty(value = "渠道分组编号")
+    private Long id;
+
+    @ApiModelProperty(value = "渠道分组名称")
+    private String name;
+
+    @ApiModelProperty(value = "是否启动 1 启动 0 关闭")
+    private Integer enabled;
+
+}

+ 21 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysChannelVo.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.admin.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysChannelVo {
+
+    @ApiModelProperty(value = "机构编号")
+    private String id;
+
+    @ApiModelProperty(value = "渠道编号")
+    private Long gradeId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String name;
+}

+ 25 - 0
src/main/java/com/ydtech/modules/admin/model/vo/SysDeptListVo.java

@@ -0,0 +1,25 @@
+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.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysDeptListVo implements Serializable {
+
+    @ApiModelProperty(value = "机构编号")
+    private String id;
+
+    @ApiModelProperty(value = "机构名称")
+    private String name;
+
+    @ApiModelProperty(value = "上级机构ID,一级机构为0")
+    private String parentId;
+}

+ 22 - 0
src/main/java/com/ydtech/modules/admin/service/SysChannelAreaRelationService.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.po.SysChannelAreaRelation;
+import com.ydtech.modules.admin.model.vo.SysChannelVo;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_area_relation(渠道分组机构关联表)】的数据库操作Service
+* @createDate 2024-09-09 18:55:22
+*/
+public interface SysChannelAreaRelationService extends IService<SysChannelAreaRelation> {
+
+    /**
+     * 勾选关联机构列表查询
+     * @param sysChannelVo
+     * @return
+     */
+    List<SysChannelAreaRelation> queryRelationList(SysChannelVo sysChannelVo);
+}

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

@@ -0,0 +1,13 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.po.SysChannelCostRelation;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_cost_relation(渠道分组费用关联表)】的数据库操作Service
+* @createDate 2024-09-10 11:54:30
+*/
+public interface SysChannelCostRelationService extends IService<SysChannelCostRelation> {
+
+}

+ 112 - 0
src/main/java/com/ydtech/modules/admin/service/SysChannelCostService.java

@@ -0,0 +1,112 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.extension.BaseIService;
+import com.ydtech.modules.admin.constants.UserConstants;
+import com.ydtech.modules.admin.model.dto.SysChannelCostDto;
+import com.ydtech.modules.admin.model.excel.read.SysChannelCostExcelReadHead;
+import com.ydtech.modules.admin.model.po.SysChannelCost;
+import com.ydtech.modules.admin.model.vo.ChannelAuditVo;
+import com.ydtech.modules.admin.model.vo.ChannelSettleVo;
+import com.ydtech.modules.admin.model.vo.SysChannelCostPageVo;
+import com.ydtech.modules.order.entity.BasePageResult;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_cost(分组计算结果表)】的数据库操作Service
+* @createDate 2024-09-11 10:16:44
+*/
+public interface SysChannelCostService extends BaseIService<SysChannelCost> {
+
+    /**
+     * 分组费用结果查询
+     * @param page
+     * @param sysChannelCostPageVo
+     * @return
+     */
+    Page<SysChannelCost> queryPage(Page page, SysChannelCostPageVo sysChannelCostPageVo);
+
+    /**
+     * 分组费用结果 id 查询
+     * @param id
+     * @return
+     */
+    SysChannelCost queryById(Long id);
+
+    /**
+     * 修改
+     * @param sysChannelCost
+     */
+    void edit(SysChannelCost sysChannelCost);
+
+    /**
+     * 删除(软删除)
+     * @param id
+     */
+    void delete(Long id);
+
+    /**
+     * 把修改改为删除
+     *
+     * @param delflag 删除 未删除状态
+     */
+    default boolean updateDel(int delflag) {
+        List<SysChannelCost> list = lambdaQuery().eq(SysChannelCost::getDeleted, UserConstants.NOT_DEL).list();
+        if (list.isEmpty()) {
+            return true;
+        }
+        if (UserConstants.NOT_DEL == delflag) {
+            return lambdaUpdate()
+                    .set(SysChannelCost::getDeleted, UserConstants.DEL)
+                    .eq(SysChannelCost::getDeleted, UserConstants.NOT_DEL)
+                    .update();
+        }
+        return true;
+    }
+
+    /**
+     * 加投结算全部列表
+     * @param sysChannelCostPageVo
+     * @return
+     */
+    List<SysChannelCost> queryList(SysChannelCostPageVo sysChannelCostPageVo);
+
+    /**
+     * 导出
+     * @param sysChannelCostPageVo
+     * @return
+     */
+    HttpResult exportData(SysChannelCostPageVo sysChannelCostPageVo);
+
+    /**
+     * 审核
+     * @param channelAuditVo
+     * @return
+     */
+    boolean audit(ChannelAuditVo channelAuditVo);
+
+    /**
+     * 批量结算
+     * @param channelSettleVo
+     * @return
+     */
+    boolean settle(ChannelSettleVo channelSettleVo);
+
+    /**
+     * 加投汇总列表
+     * @param sysChannelCostPageVo
+     * @return
+     */
+    BasePageResult<SysChannelCostDto> queryStaticPage(SysChannelCostPageVo sysChannelCostPageVo);
+
+    /**
+     * 批量导入结算
+     *
+     * @param heads
+     * @param voucherNumber 结算凭证
+     */
+    void importSettle(List<SysChannelCostExcelReadHead> heads, String voucherNumber);
+}

+ 75 - 0
src/main/java/com/ydtech/modules/admin/service/SysChannelGradeService.java

@@ -0,0 +1,75 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.extension.BaseIService;
+import com.ydtech.modules.admin.model.po.SysChannelAreaRelation;
+import com.ydtech.modules.admin.model.po.SysChannelGrade;
+import com.ydtech.modules.admin.model.vo.AuthSysChannelGradeVo;
+import com.ydtech.modules.admin.model.vo.SysChannelGradePageVo;
+import com.ydtech.modules.admin.model.vo.SysChannelVo;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_grade(渠道分组级别表)】的数据库操作Service
+* @createDate 2024-09-10 17:41:31
+*/
+public interface SysChannelGradeService extends BaseIService<SysChannelGrade> {
+
+    /**
+     * 查询分组级别列表
+     * @return
+     */
+    List<SysChannelGrade> queryList();
+
+    /**
+     * 渠道分组级别名称校验
+     * @param sysChannelGrade
+     * @return
+     */
+    String checkNameUnique(SysChannelGrade sysChannelGrade);
+
+    /**
+     * 分组级别授权机构
+     * @param authSysChannelGradeVo
+     */
+    void authArea(AuthSysChannelGradeVo authSysChannelGradeVo);
+
+    /**
+     * 分组级别删除
+     * @param id
+     */
+    void delete(Long id);
+
+    /**
+     * 级别分页查询
+     * @param page
+     * @param sysChannelGradePageVo
+     * @return
+     */
+    Page<SysChannelGrade> queryPage(Page page, SysChannelGradePageVo sysChannelGradePageVo);
+
+
+    /**
+     * 获取关联机构列表
+     *
+     * @param id
+     * @return
+     */
+    List<String> queryRelationList(Long id);
+
+
+    /**
+     * 获取关联机构列表
+     * @param sysChannelVo
+     * @return
+     */
+    List<SysChannelAreaRelation> queryRelation(SysChannelVo sysChannelVo);
+
+    /**
+     * 删除分组授权机构
+     * @param authSysChannelGradeVo
+     */
+    void deleteAuth(AuthSysChannelGradeVo authSysChannelGradeVo);
+}

+ 20 - 0
src/main/java/com/ydtech/modules/admin/service/SysChannelGroupInfoService.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.po.SysChannelGroupInfo;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_group_info(渠道分组比例明细表)】的数据库操作Service
+* @createDate 2024-09-10 16:08:47
+*/
+public interface SysChannelGroupInfoService extends IService<SysChannelGroupInfo> {
+
+    /**
+     * 加投比例查询
+     * @param productId
+     * @param deptId
+     * @return
+     */
+    SysChannelGroupInfo queryProportion(String productId, String deptId);
+}

+ 131 - 0
src/main/java/com/ydtech/modules/admin/service/SysChannelGroupService.java

@@ -0,0 +1,131 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.extension.BaseIService;
+import com.ydtech.modules.admin.constants.EnabledEnum;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.po.SysChannelGroup;
+import com.ydtech.modules.admin.model.vo.AddSysChannelGroupVo;
+import com.ydtech.modules.admin.model.vo.CostSysChannelGroupVo;
+import com.ydtech.modules.admin.model.vo.SysChannelGroupPageVo;
+import com.ydtech.modules.admin.model.vo.SysChannelGroupVo;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_group(渠道分组)】的数据库操作Service
+* @createDate 2024-09-09 18:55:22
+*/
+public interface SysChannelGroupService extends BaseIService<SysChannelGroup> {
+
+    /**
+     * 分页查询
+     * @param page
+     * @param sysChannelGroupVo
+     * @return
+     */
+    Page<SysChannelGroup> queryPage(Page page, SysChannelGroupVo sysChannelGroupVo);
+    /**
+     * 渠道分组名称唯一校验
+     * @param sysChannelGroup
+     * @return
+     */
+    String checkNameUnique(Long id, AddSysChannelGroupVo sysChannelGroup);
+
+    /**
+     * 新增渠道分组
+     * @param userName
+     * @param addChannelGroupVo
+     */
+    void insert(String userName, @Valid AddSysChannelGroupVo addChannelGroupVo);
+
+    /**
+     * 修改渠道分组
+     *
+     * @param id
+     * @param userName
+     * @param addChannelGroupVo
+     */
+    void edit(Long id, String userName, AddSysChannelGroupVo addChannelGroupVo);
+
+    /**
+     * 分组删除
+     * @param id
+     */
+    void delete(Long id);
+
+    /**
+     * 渠道分组费用设置
+     * @param costSysChannelGroupVo
+     */
+    void costSet(@Valid CostSysChannelGroupVo costSysChannelGroupVo);
+
+    /**
+     * 费用计算
+     *
+     * @param insFeeOrderNew
+     * @param ptlAgreement
+     * @param ptlAgreementProductCostsNew
+     * @param sysUser
+     * @param insAreaCompany
+     * @param insOrders
+     */
+    void costCompute(InsFeeOrderNew insFeeOrderNew,
+                     PtlAgreement ptlAgreement,
+                     PtlAgreementProductCostsNew ptlAgreementProductCostsNew,
+                     SysUser sysUser,
+                     InsAreaCompany insAreaCompany,
+                     InsOrders insOrders);
+
+    /**
+     * 分组单个查询
+     * @return
+     */
+    SysChannelGroup queryById(Long id);
+
+    /**
+     * 停止/开启
+     * @param id
+     */
+    void openOne(Long id);
+
+    /**
+     * 把修改改为关闭
+     *
+     * @param enabled 开启关闭状态
+     */
+    default boolean updateEnabled(int enabled) {
+        List<SysChannelGroup> list = lambdaQuery().eq(SysChannelGroup::getEnabled, EnabledEnum.EE_1.getCode()).list();
+        if (list.isEmpty()) {
+            return true;
+        }
+        if (EnabledEnum.EE_1.getCode() == enabled) {
+            return lambdaUpdate()
+                    .set(SysChannelGroup::getEnabled, EnabledEnum.EE_0.getCode())
+                    .eq(SysChannelGroup::getEnabled, EnabledEnum.EE_1.getCode())
+                    .update();
+        }
+        return true;
+    }
+
+    /**
+     * 费用选中列表
+     * @param costsNewList
+     * @param sysChannelGroupPageVo
+     */
+    void queryCostList(List<PtlAgreementProductCostsNew> costsNewList, @Valid SysChannelGroupPageVo sysChannelGroupPageVo);
+
+    /**
+     * 获取所有选中费用
+     * @param id
+     * @return
+     */
+    List<SysChannelGroup> getProductList(Long id);
+}

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

@@ -0,0 +1,13 @@
+package com.ydtech.modules.admin.service;
+
+import com.ydtech.extension.BaseIService;
+import com.ydtech.modules.admin.model.po.SysCostOperateLog;
+
+/**
+* @author dongxin
+* @description 针对表【sys_cost_operate_log(加投结算日志)】的数据库操作Service
+* @createDate 2024-09-14 14:25:21
+*/
+public interface SysCostOperateLogService extends BaseIService<SysCostOperateLog> {
+
+}

+ 29 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysChannelAreaRelationServiceImpl.java

@@ -0,0 +1,29 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysChannelAreaRelationMapper;
+import com.ydtech.modules.admin.model.po.SysChannelAreaRelation;
+import com.ydtech.modules.admin.model.vo.SysChannelVo;
+import com.ydtech.modules.admin.service.SysChannelAreaRelationService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_area_relation(渠道分组机构关联表)】的数据库操作Service实现
+* @createDate 2024-09-09 18:55:22
+*/
+@Service
+public class SysChannelAreaRelationServiceImpl extends ServiceImpl<SysChannelAreaRelationMapper, SysChannelAreaRelation>
+    implements SysChannelAreaRelationService {
+
+    @Override
+    public List<SysChannelAreaRelation> queryRelationList(SysChannelVo sysChannelVo) {
+        return this.baseMapper.queryRelationList(sysChannelVo);
+    }
+}
+
+
+
+

+ 22 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysChannelCostRelationServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysChannelCostRelationMapper;
+import com.ydtech.modules.admin.model.po.SysChannelCostRelation;
+import com.ydtech.modules.admin.service.SysChannelCostRelationService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_cost_relation(渠道分组费用关联表)】的数据库操作Service实现
+* @createDate 2024-09-10 11:54:30
+*/
+@Service
+public class SysChannelCostRelationServiceImpl extends ServiceImpl<SysChannelCostRelationMapper, SysChannelCostRelation>
+    implements SysChannelCostRelationService{
+
+}
+
+
+
+

+ 310 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysChannelCostServiceImpl.java

@@ -0,0 +1,310 @@
+package com.ydtech.modules.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+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.exception.SystemException;
+import com.ydtech.modules.admin.constants.UserConstants;
+import com.ydtech.modules.admin.dao.SysChannelCostMapper;
+import com.ydtech.modules.admin.model.dto.SysChannelCostDto;
+import com.ydtech.modules.admin.model.excel.read.SysChannelCostExcelReadHead;
+import com.ydtech.modules.admin.model.excel.wirte.SysChannelCostExportWriteHead;
+import com.ydtech.modules.admin.model.po.SysChannelCost;
+import com.ydtech.modules.admin.model.po.SysCostOperateLog;
+import com.ydtech.modules.admin.model.vo.ChannelAuditVo;
+import com.ydtech.modules.admin.model.vo.ChannelSettleVo;
+import com.ydtech.modules.admin.model.vo.SysChannelCostPageVo;
+import com.ydtech.modules.admin.service.SysChannelCostService;
+import com.ydtech.modules.admin.service.SysCostOperateLogService;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.inv.utils.EasyExcelUtils;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+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.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_cost(分组计算结果表)】的数据库操作Service实现
+* @createDate 2024-09-11 10:16:44
+*/
+@Service
+public class SysChannelCostServiceImpl extends ServiceImpl<SysChannelCostMapper, SysChannelCost>
+    implements SysChannelCostService {
+
+    @Value("${upload.file.path}")
+    private String uploadPath;
+    @Value("${upload.file.url}")
+    private String uploadUrl;
+
+    @Autowired
+    private SysCostOperateLogService sysCostOperateLogService;
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Override
+    public Page<SysChannelCost> queryPage(Page page, SysChannelCostPageVo sysChannelCostPageVo) {
+        LambdaQueryWrapper<SysChannelCost> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getOrderNo()), SysChannelCost::getOrderNo,
+                sysChannelCostPageVo.getOrderNo())
+                .eq(SysChannelCost::getStatus, 1)
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getCompanyId()),SysChannelCost::getCompanyId,
+                        sysChannelCostPageVo.getCompanyId())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserName()),SysChannelCost::getUserName,
+                        sysChannelCostPageVo.getUserName())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserId()),SysChannelCost::getUserId,
+                        sysChannelCostPageVo.getUserId())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getLicenseNo()),SysChannelCost::getLicenseNo,
+                        sysChannelCostPageVo.getLicenseNo())
+        ;
+        Page<SysChannelCost> costPage = page(page, wrapper);
+        return costPage;
+    }
+
+    @Override
+    public SysChannelCost queryById(Long id) {
+        return getById(id);
+    }
+
+    @Override
+    public void edit(SysChannelCost sysChannelCost) {
+        SysChannelCost cost = getByIdExist(sysChannelCost.getId(), "查询加投结算信息不存在");
+        AssertionUtils.isFail(cost.getDeleted().equals(1),"已删除的数据不允许修改");
+        AssertionUtils.isFail(cost.getStatus().equals(1),"审核通过的数据不允许修改");
+
+        if(!StringUtils.isBlank(sysChannelCost.getJqCostsProportion())){
+            BigDecimal jq = new BigDecimal(sysChannelCost.getJqCostsProportion());
+            if(jq.compareTo(new BigDecimal("1")) > 0){
+                throw new SystemException("交强加投比例不能大于1");
+            }
+        }
+        if(!StringUtils.isBlank(sysChannelCost.getSyCostsProportion())){
+            BigDecimal sy = new BigDecimal(sysChannelCost.getSyCostsProportion());
+            if(sy.compareTo(new BigDecimal("1")) > 0){
+                throw new SystemException("商业加投比例不能大于1");
+            }
+        }
+        if(!StringUtils.isBlank(sysChannelCost.getNoCostsProportion())){
+            BigDecimal no = new BigDecimal(sysChannelCost.getNoCostsProportion());
+            if(no.compareTo(new BigDecimal("1")) > 0){
+                throw new SystemException("非车加投比例不能大于1");
+            }
+        }
+        // 重新计算加投金额
+        BigDecimal jq = cost.getJqPremium().multiply(
+                new BigDecimal(StringUtils.isBlank(sysChannelCost.getJqCostsProportion())? "0":sysChannelCost.getJqCostsProportion()))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal sy = cost.getSyPremium().multiply(
+                new BigDecimal(StringUtils.isBlank(sysChannelCost.getSyCostsProportion())? "0":sysChannelCost.getSyCostsProportion()))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal no = cost.getJyPremium().multiply(
+                new BigDecimal(StringUtils.isBlank(sysChannelCost.getNoCostsProportion())? "0":sysChannelCost.getNoCostsProportion()))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+        LambdaUpdateWrapper<SysChannelCost> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(SysChannelCost::getJqCostsProportion,sysChannelCost.getJqCostsProportion());
+        updateWrapper.set(SysChannelCost::getSyCostsProportion,sysChannelCost.getSyCostsProportion());
+        updateWrapper.set(SysChannelCost::getNoCostsProportion,sysChannelCost.getNoCostsProportion());
+        updateWrapper.set(SysChannelCost::getJqJtPremium,jq);
+        updateWrapper.set(SysChannelCost::getSyJtPremium,sy);
+        updateWrapper.set(SysChannelCost::getJyJtPremium,no);
+        updateWrapper.set(SysChannelCost::getTotalPremium,jq.add(sy).add(no));
+        updateWrapper.set(SysChannelCost::getUpdateBy,sysChannelCost.getUpdateBy());
+        updateWrapper.set(SysChannelCost::getUpdateTime,sysChannelCost.getUpdateTime());
+        updateWrapper.eq(SysChannelCost::getId,sysChannelCost.getId());
+        this.baseMapper.update(cost, updateWrapper);
+
+        // 日志新增
+        SysChannelCost logEntity = new SysChannelCost();
+        logEntity.setId(sysChannelCost.getId());
+        logEntity.setJqCostsProportion(sysChannelCost.getJqCostsProportion());
+        logEntity.setSyCostsProportion(sysChannelCost.getSyCostsProportion());
+        logEntity.setNoCostsProportion(sysChannelCost.getNoCostsProportion());
+        logEntity.setJqJtPremium(sysChannelCost.getJqJtPremium());
+        logEntity.setSyJtPremium(sysChannelCost.getSyJtPremium());
+        logEntity.setJyJtPremium(sysChannelCost.getJyJtPremium());
+        SysCostOperateLog sysCostOperateLog = new SysCostOperateLog();
+        sysCostOperateLog.setOptId(sysChannelCost.getId());
+        sysCostOperateLog.setOptType(UserConstants.OPT_TYPE_1);
+        sysCostOperateLog.setOptContent(JSON.toJSONString(logEntity));
+        sysCostOperateLog.setCreateBy(sysChannelCost.getUpdateBy());
+        sysCostOperateLog.setCreateTime(sysChannelCost.getUpdateTime());
+        sysCostOperateLogService.save(sysCostOperateLog);
+    }
+
+    @Override
+    public void delete(Long id) {
+        SysChannelCost sysChannelCost = getByIdExist(id, "查询加投结算信息不存在");
+        Integer delFlag = sysChannelCost.getDeleted();
+        Integer i = Objects.equals(UserConstants.NOT_DEL, delFlag) ? UserConstants.NOT_DEL : UserConstants.DEL;
+        boolean b = updateDel(i);
+        sysChannelCost.setDeleted(i);
+        boolean b1 = updateById(sysChannelCost);
+        AssertionUtils.isSucceed(b1 && b, "成功");
+    }
+
+    @Override
+    public List<SysChannelCost> queryList(SysChannelCostPageVo sysChannelCostPageVo) {
+        LambdaQueryWrapper<SysChannelCost> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getOrderNo()), SysChannelCost::getOrderNo,
+                        sysChannelCostPageVo.getOrderNo())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getStatus()),SysChannelCost::getStatus,
+                        sysChannelCostPageVo.getStatus())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getCompanyId()),SysChannelCost::getCompanyId,
+                        sysChannelCostPageVo.getCompanyId())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserName()),SysChannelCost::getUserName,
+                        sysChannelCostPageVo.getUserName())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserId()),SysChannelCost::getUserId,
+                        sysChannelCostPageVo.getUserId())
+                .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getLicenseNo()),SysChannelCost::getLicenseNo,
+                        sysChannelCostPageVo.getLicenseNo())
+        ;
+        List<SysChannelCost> list = list(wrapper);
+        return list;
+    }
+
+    @Override
+    public HttpResult exportData(SysChannelCostPageVo sysChannelCostPageVo) {
+        List<SysChannelCost> costList = this.queryList(sysChannelCostPageVo);
+        AssertionUtils.isFail(costList.size() <= 0,"无数据导出!");
+        List<SysChannelCostExportWriteHead> headList = new ArrayList<>();
+        costList.stream().forEach(cost -> {
+            SysChannelCostExportWriteHead head = new SysChannelCostExportWriteHead();
+            BeanUtils.copyProperties(cost, head);
+            headList.add(head);
+        });
+        String uploadPath = this.uploadPath + "/excel/";
+        Path path = Paths.get(uploadPath);
+        if (!Files.exists(path)) {
+            try {
+                Files.createDirectories(path);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        String fileName = EasyExcelUtils.downExcel(uploadPath, "加投结算表", SysChannelCostExportWriteHead.class, headList);
+        return HttpResult.ok("", uploadUrl + "excel/" + fileName);
+    }
+
+    @Override
+    public boolean audit(ChannelAuditVo channelAuditVo) {
+        SysChannelCost sysChannelCost = getByIdExist(channelAuditVo.getId(), "查询加投结算信息不存在");
+        sysChannelCost.setStatus(channelAuditVo.getIsAudit());
+        return baseMapper.updateById(sysChannelCost) > 0;
+    }
+
+    @Override
+    public boolean settle(ChannelSettleVo channelSettleVo) {
+
+        // 获取子订单信息
+        List<SysChannelCost> costList = this.baseMapper.selectBatchIds(channelSettleVo.getIds());
+        if(CollUtil.isEmpty(costList)){
+            return false;
+        }
+        // 查询子订单
+        List<String> orderNos = costList.stream().map(SysChannelCost::getOrderNo).collect(Collectors.toList());
+        LambdaQueryWrapper<InsAreaCompany> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(InsAreaCompany::getId,InsAreaCompany::getSigningTime,InsAreaCompany::getPayDate)
+                .in(InsAreaCompany::getId, orderNos);
+        Map<String, InsAreaCompany> orderMap = insAreaCompanyService.list(wrapper).stream()
+                .collect(Collectors.toMap(InsAreaCompany::getId, Function.identity()));
+        for (SysChannelCost sysChannelCost : costList) {
+            if (sysChannelCost.getStatus().equals(0) || sysChannelCost.getSettleStatus().equals(1)) {
+                throw new SystemException("未审核通过的单据和已结算的单据不允许再次上传!");
+            }
+            sysChannelCost.setSettleStatus(1); // 已经结算状态
+            sysChannelCost.setVoucherNumber(channelSettleVo.getVoucherNumber());
+            if(orderMap.containsKey(sysChannelCost.getOrderNo())){
+                sysChannelCost.setPayDate(orderMap.get(sysChannelCost.getOrderNo()).getPayDate());
+                sysChannelCost.setSigningTime(orderMap.get(sysChannelCost.getOrderNo()).getSigningTime());
+            }
+            sysChannelCost.setUpdateTime(LocalDateTime.now());
+            sysChannelCost.setUpdateBy(BaseController.getUser().getName());
+        }
+        return updateBatchById(costList);
+    }
+
+    @Override
+    public BasePageResult<SysChannelCostDto> queryStaticPage(SysChannelCostPageVo sysChannelCostPageVo) {
+        Page<SysChannelCostDto> page = new Page<>(sysChannelCostPageVo.getPageNum(),
+                sysChannelCostPageVo.getPageSize());
+        Page<SysChannelCostDto> result = this.baseMapper.queryPage(page, sysChannelCostPageVo);
+        return  new BasePageResult<>(sysChannelCostPageVo.getPageNum(), page.getSize(), result.getTotal(), page.getPages(),
+                result.getRecords());
+    }
+
+    @Override
+    public void importSettle(List<SysChannelCostExcelReadHead> heads, String voucherNumber) {
+        heads.forEach(head -> {
+            LambdaQueryWrapper<SysChannelCost> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(SysChannelCost::getStatus,1)
+                    .eq(!StringUtils.isBlank(head.getUserId()),SysChannelCost::getUserId,head.getUserId())
+                    .eq(!StringUtils.isBlank(head.getUserName()),SysChannelCost::getUserName,head.getUserName())
+                    .eq(!StringUtils.isBlank(head.getLicenseNo()),SysChannelCost::getLicenseNo,head.getLicenseNo());
+            List<SysChannelCost> costList = list(wrapper);
+            costList.stream()
+                    .filter(cost ->
+                        !cost.getJqPolicyNo().equals(head.getJqPolicyNo()))
+                    .filter(cost ->
+                        !cost.getSyPolicyNo().equals(head.getSyPolicyNo()))
+                    .filter(cost ->
+                            !cost.getNoPolicyNo().equals(head.getNoPolicyNo()))
+                    .filter(cost ->
+                            !cost.getJqPremium().equals(head.getJqPremium()))
+                    .filter(cost ->
+                            !cost.getSyPremium().equals(head.getSyPremium()))
+                    .filter(cost ->
+                            !cost.getJyPremium().equals(head.getJyPremium()))
+                    .filter(cost ->
+                            !cost.getTaxAmount().equals(head.getTaxAmount()))
+                    .filter(cost ->
+                            !cost.getJqCostsProportion().equals(head.getJqCostsProportion()))
+                    .filter(cost ->
+                            !cost.getSyCostsProportion().equals(head.getSyCostsProportion()))
+                    .filter(cost ->
+                            !cost.getNoCostsProportion().equals(head.getNoCostsProportion()))
+                    .filter(cost ->
+                            !cost.getTotalPremium().equals(head.getTotalPremium()))
+                    .forEach(cost ->{
+                        // 查询子订单
+                        List<String> orderNos = costList.stream().map(SysChannelCost::getOrderNo).collect(Collectors.toList());
+                        LambdaQueryWrapper<InsAreaCompany> orderWrapper = new LambdaQueryWrapper<>();
+                        orderWrapper.select(InsAreaCompany::getId,InsAreaCompany::getSigningTime,InsAreaCompany::getPayDate)
+                                .eq(InsAreaCompany::getId, cost.getOrderNo());
+                        InsAreaCompany insAreaCompany = insAreaCompanyService.getOne(orderWrapper);
+                        LambdaUpdateWrapper<SysChannelCost> costWrapper = new LambdaUpdateWrapper<>();
+                        costWrapper.eq(SysChannelCost::getId,cost.getId())
+                        .set(SysChannelCost::getSettleStatus,1)
+                        .set(SysChannelCost::getVoucherNumber,voucherNumber)
+                        .set(SysChannelCost::getSigningTime,insAreaCompany.getSigningTime())
+                        .set(SysChannelCost::getPayDate,insAreaCompany.getPayDate())
+                        .set(SysChannelCost::getUpdateBy,BaseController.getUser().getName())
+                        .set(SysChannelCost::getUpdateTime,LocalDateTime.now());
+                        this.baseMapper.update(cost, costWrapper);
+                    });
+        });
+    }
+}
+
+
+
+

+ 137 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysChannelGradeServiceImpl.java

@@ -0,0 +1,137 @@
+package com.ydtech.modules.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.modules.admin.constants.UserConstants;
+import com.ydtech.modules.admin.dao.SysChannelGradeMapper;
+import com.ydtech.modules.admin.model.po.*;
+import com.ydtech.modules.admin.model.vo.AuthSysChannelGradeVo;
+import com.ydtech.modules.admin.model.vo.SysChannelGradePageVo;
+import com.ydtech.modules.admin.model.vo.SysChannelVo;
+import com.ydtech.modules.admin.service.SysChannelAreaRelationService;
+import com.ydtech.modules.admin.service.SysChannelGradeService;
+import com.ydtech.modules.admin.service.SysChannelGroupInfoService;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_grade(渠道分组级别表)】的数据库操作Service实现
+* @createDate 2024-09-10 17:41:31
+*/
+@Service
+public class SysChannelGradeServiceImpl extends ServiceImpl<SysChannelGradeMapper, SysChannelGrade>
+    implements SysChannelGradeService {
+
+    @Autowired
+    private SysChannelAreaRelationService sysChannelAreaRelationService;
+
+    @Autowired
+    private SysChannelGradeService sysChannelGradeService;
+
+    @Autowired
+    private SysChannelGroupInfoService sysChannelGroupInfoService;
+
+    @Override
+    public List<SysChannelGrade> queryList() {
+        return list();
+    }
+
+    @Override
+    public String checkNameUnique(SysChannelGrade sysChannelGrade) {
+        Long groupId = ObjectUtils.isEmpty(sysChannelGrade.getId()) ? -1L: sysChannelGrade.getId();
+        QueryWrapper<SysChannelGrade> qw = new QueryWrapper<>();
+        qw.eq("name", sysChannelGrade.getName());
+        SysChannelGrade info = this.baseMapper.selectOne(qw);
+        if (!Objects.isNull(info) && info.getId() != groupId) {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    @Override
+    @Transactional
+    public void authArea(AuthSysChannelGradeVo authSysChannelGradeVo) {
+        // 删除所有已经授权机构
+        QueryWrapper<SysChannelAreaRelation> wrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<SysChannelAreaRelation> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(SysChannelAreaRelation::getGradeId, authSysChannelGradeVo.getId());
+        sysChannelAreaRelationService.remove(wrapper);
+        List<String> areaIdList = authSysChannelGradeVo.getAreaIdList();
+        List<SysChannelAreaRelation> relations = new ArrayList<>();
+        for (String areaId : areaIdList) {
+            SysChannelAreaRelation sysChannelAreaRelation = new SysChannelAreaRelation();
+            sysChannelAreaRelation.setGradeId(authSysChannelGradeVo.getId());
+            sysChannelAreaRelation.setAreaId(areaId);
+            relations.add(sysChannelAreaRelation);
+        }
+        sysChannelAreaRelationService.saveBatch(relations);
+    }
+
+    @Override
+    @Transactional
+    public void delete(Long id) {
+        // 判断是否有费用设置
+        LambdaQueryWrapper<SysChannelGroupInfo> infoWapper = new LambdaQueryWrapper<>();
+        infoWapper.eq(SysChannelGroupInfo::getGradeId, id);
+        long count = sysChannelGroupInfoService.count(infoWapper);
+        AssertionUtils.isFail(count > 0,"该分组已经设置费用,请先删除费用分组");
+        // 删除所有授权机构
+        LambdaQueryWrapper<SysChannelAreaRelation> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysChannelAreaRelation::getGradeId, id);
+        sysChannelAreaRelationService.remove(wrapper);
+        // 删除渠道分组级别
+        sysChannelGradeService.removeById(id);
+    }
+
+    @Override
+    public Page<SysChannelGrade> queryPage(Page page, SysChannelGradePageVo sysChannelGradePageVo) {
+        LambdaQueryWrapper<SysChannelGrade> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(!ObjectUtils.isEmpty(sysChannelGradePageVo.getName()), SysChannelGrade::getName,
+                        sysChannelGradePageVo.getName());
+        Page<SysChannelGrade> channelGradePage = page(page, wrapper);
+        return channelGradePage;
+    }
+
+    @Override
+    public List<String> queryRelationList(Long id) {
+        LambdaQueryWrapper<SysChannelAreaRelation> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysChannelAreaRelation::getGradeId, id);
+        return sysChannelAreaRelationService.list(wrapper).stream()
+                .map(SysChannelAreaRelation::getAreaId).collect(Collectors.toList());
+    }
+
+    @Override
+    public List<SysChannelAreaRelation> queryRelation(SysChannelVo sysChannelVo) {
+        List<SysChannelAreaRelation> relationList = sysChannelAreaRelationService.queryRelationList(sysChannelVo);
+        return relationList;
+    }
+
+    @Override
+    public void deleteAuth(AuthSysChannelGradeVo authSysChannelGradeVo) {
+        List<String> areaIds = authSysChannelGradeVo.getAreaIdList();
+        if (CollUtil.isNotEmpty(areaIds)) {
+            for (String areaId : areaIds) {
+                LambdaQueryWrapper<SysChannelAreaRelation> wrapper = new LambdaQueryWrapper<>();
+                wrapper.eq(SysChannelAreaRelation::getGradeId, authSysChannelGradeVo.getId())
+                        .eq(SysChannelAreaRelation::getAreaId, areaId);
+                sysChannelAreaRelationService.remove(wrapper);
+            }
+        }
+    }
+}
+
+
+
+

+ 30 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysChannelGroupInfoServiceImpl.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysChannelGroupInfoMapper;
+import com.ydtech.modules.admin.model.po.SysChannelGroupInfo;
+import com.ydtech.modules.admin.service.SysChannelGroupInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_group_info(渠道分组比例明细表)】的数据库操作Service实现
+* @createDate 2024-09-10 16:08:47
+*/
+@Service
+public class SysChannelGroupInfoServiceImpl extends ServiceImpl<SysChannelGroupInfoMapper, SysChannelGroupInfo>
+    implements SysChannelGroupInfoService {
+
+    @Autowired
+    private SysChannelGroupInfoMapper sysChannelGroupInfoMapper;
+
+    @Override
+    public SysChannelGroupInfo queryProportion(String productId, String deptId) {
+        return sysChannelGroupInfoMapper.queryProportion(productId,deptId);
+    }
+}
+
+
+
+

+ 480 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysChannelGroupServiceImpl.java

@@ -0,0 +1,480 @@
+package com.ydtech.modules.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.google.gson.Gson;
+import com.ydtech.constants.InsuranceEnum;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.constants.EnabledEnum;
+import com.ydtech.modules.admin.constants.UserConstants;
+import com.ydtech.modules.admin.dao.SysChannelGroupMapper;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.po.*;
+import com.ydtech.modules.admin.model.vo.AddSysChannelGroupVo;
+import com.ydtech.modules.admin.model.vo.CostSysChannelGroupVo;
+import com.ydtech.modules.admin.model.vo.SysChannelGroupPageVo;
+import com.ydtech.modules.admin.model.vo.SysChannelGroupVo;
+import com.ydtech.modules.admin.service.*;
+import com.ydtech.modules.esm.dao.EsmInsCompanyMapper;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.api.dajia.response.NVHLODR1001Response;
+import com.ydtech.modules.order.entity.api.zhongmei.response.SubmitResponse;
+import com.ydtech.modules.order.entity.crawler.response.CrawlerVerifyPaymentResponse;
+import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
+import com.ydtech.modules.protocol.entity.constants.PtlApiType;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+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.*;
+import java.util.stream.Collectors;
+
+/**
+* @author dongxin
+* @description 针对表【sys_channel_group(渠道分组)】的数据库操作Service实现
+* @createDate 2024-09-09 18:55:22
+*/
+@Service
+public class SysChannelGroupServiceImpl extends ServiceImpl<SysChannelGroupMapper, SysChannelGroup>
+    implements SysChannelGroupService {
+
+    @Autowired
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
+    @Autowired
+    private SysChannelCostRelationService sysChannelCostRelationService;
+
+    @Autowired
+    private SysChannelGroupInfoService sysChannelGroupInfoService;
+
+    @Autowired
+    private SysChannelGroupService sysChannelGroupService;
+
+    @Autowired
+    private SysChannelCostService sysChannelCostService;
+
+    @Autowired
+    private SysCostOperateLogService sysCostOperateLogService;
+
+    @Autowired
+    private SysChannelGradeService sysChannelGradeService;
+    @Autowired
+    private EsmInsCompanyMapper esmInsCompanyMapper;
+
+    @Override
+    public Page<SysChannelGroup> queryPage(Page page, SysChannelGroupVo sysChannelGroupVo) {
+        LambdaQueryWrapper<SysChannelGroup> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(!ObjectUtils.isEmpty(sysChannelGroupVo.getName()), SysChannelGroup::getName,
+                sysChannelGroupVo.getName())
+                .eq(!ObjectUtils.isEmpty(sysChannelGroupVo.getId()), SysChannelGroup::getId,
+                        sysChannelGroupVo.getId())
+                .eq(!ObjectUtils.isEmpty(sysChannelGroupVo.getEnabled()), SysChannelGroup::getEnabled,
+                        sysChannelGroupVo.getEnabled());
+        Page<SysChannelGroup> channelGroupPage = page(page, wrapper);
+        return channelGroupPage;
+    }
+
+    @Override
+    public String checkNameUnique(Long id, AddSysChannelGroupVo sysChannelGroup) {
+        Long groupId = ObjectUtils.isEmpty(id) ? -1L: id;
+        QueryWrapper<SysChannelGroup> qw = new QueryWrapper<>();
+        qw.eq("name", sysChannelGroup.getName());
+        SysChannelGroup info = this.baseMapper.selectOne(qw);
+        if (!Objects.isNull(info) && info.getId() != groupId) {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+
+    @Override
+    @Transactional
+    public void insert(String userName, AddSysChannelGroupVo addChannelGroupVo) {
+        SysChannelGroup sysChannelGroup = new SysChannelGroup();
+        BeanUtils.copyProperties(addChannelGroupVo, sysChannelGroup);
+        sysChannelGroup.setCreateTime(LocalDateTime.now());
+        sysChannelGroup.setCreateBy(userName);
+
+        sysChannelGroupService.save(sysChannelGroup);
+
+        List<SysChannelGroupInfo> infos = addChannelGroupVo.getInfos();
+        if(CollUtil.isNotEmpty(infos)){
+            for (SysChannelGroupInfo info : infos) {
+                info.setChannelId(sysChannelGroup.getId());
+                info.setCreateTime(LocalDateTime.now());
+                info.setCreateBy(userName);
+            }
+            sysChannelGroupInfoService.saveBatch(infos);
+        }
+    }
+
+    @Override
+    @Transactional
+    public void edit(Long id, String userName, AddSysChannelGroupVo addChannelGroupVo) {
+        SysChannelGroup sysChannelGroup = new SysChannelGroup();
+        BeanUtils.copyProperties(addChannelGroupVo, sysChannelGroup);
+        sysChannelGroup.setId(id);
+        sysChannelGroup.setUpdateTime(LocalDateTime.now());
+        sysChannelGroup.setUpdateBy(userName);
+        boolean modify = sysChannelGroupService.saveOrUpdate(sysChannelGroup);
+
+        // 删除之前的比例
+        QueryWrapper<SysChannelGroupInfo> wrapper2 = new QueryWrapper<>();
+        wrapper2.eq("channel_id", id);
+        sysChannelGroupInfoService.remove(wrapper2);
+
+        List<SysChannelGroupInfo> infos = addChannelGroupVo.getInfos();
+        if(CollUtil.isNotEmpty(infos)){
+            for (SysChannelGroupInfo info : infos) {
+                if(!StringUtils.isBlank(info.getJqCostsProportion())){
+                    BigDecimal jq = new BigDecimal(info.getJqCostsProportion());
+                    if(jq.compareTo(new BigDecimal("1")) > 0){
+                        throw new SystemException("交强加投比例不能大于1");
+                    }
+                }
+                if(!StringUtils.isBlank(info.getSyCostsProportion())){
+                    BigDecimal sy = new BigDecimal(info.getSyCostsProportion());
+                    if(sy.compareTo(new BigDecimal("1")) > 0){
+                        throw new SystemException("商业加投比例不能大于1");
+                    }
+                }
+                if(!StringUtils.isBlank(info.getNoCostsProportion())){
+                    BigDecimal no = new BigDecimal(info.getNoCostsProportion());
+                    if(no.compareTo(new BigDecimal("1")) > 0){
+                        throw new SystemException("非车加投比例不能大于1");
+                    }
+                }
+                info.setChannelId(sysChannelGroup.getId());
+                info.setUpdateTime(LocalDateTime.now());
+                info.setUpdateBy(userName);
+            }
+            sysChannelGroupInfoService.saveBatch(infos);
+        }
+    }
+
+    @Override
+    @Transactional
+    public void delete(Long id) {
+        // 删除所有关联费用
+        QueryWrapper<SysChannelCostRelation> wrapper1 = new QueryWrapper<>();
+        wrapper1.eq("channel_id", id);
+        sysChannelCostRelationService.remove(wrapper1);
+        // 删除渠道比例
+        QueryWrapper<SysChannelGroupInfo> wrapper2 = new QueryWrapper<>();
+        wrapper2.eq("channel_id", id);
+        sysChannelGroupInfoService.remove(wrapper2);
+
+        // 删除渠道分组
+        sysChannelGroupService.removeById(id);
+    }
+
+    @Override
+    @Transactional
+    public void costSet(CostSysChannelGroupVo costSysChannelGroupVo) {
+        // 删除之前所有的
+        LambdaQueryWrapper<SysChannelCostRelation> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysChannelCostRelation::getChannelId, costSysChannelGroupVo.getId());
+        sysChannelCostRelationService.remove(wrapper);
+        List<Long> costIdList = costSysChannelGroupVo.getCostIdList();
+        if(CollUtil.isNotEmpty(costIdList)){
+            List<SysChannelCostRelation> relations = new ArrayList<>();
+            for (Long costId : costIdList) {
+                // 获取协议id
+                PtlAgreementProductCostsNew productCostsNew = ptlAgreementProductCostsNewService.getById(costId);
+                if (productCostsNew == null) {continue;}
+                SysChannelCostRelation sysChannelCostRelation = new SysChannelCostRelation();
+                sysChannelCostRelation.setChannelId(costSysChannelGroupVo.getId());
+                sysChannelCostRelation.setAgreementId(Long.parseLong(productCostsNew.getAgreementId()));
+                sysChannelCostRelation.setCostId(costId);
+                relations.add(sysChannelCostRelation);
+            }
+            sysChannelCostRelationService.saveBatch(relations);
+        }
+    }
+
+    @Override
+    public void costCompute(InsFeeOrderNew insFeeOrderNew,
+                            PtlAgreement ptlAgreement,
+                            PtlAgreementProductCostsNew ptlAgreementProductCostsNew,
+                            SysUser sysUser,
+                            InsAreaCompany insAreaCompany,
+                            InsOrders insOrders) {
+
+        /** 1.根据机构获取到分组级别*/
+        /** 2.根据费用获取渠道分组*/
+        SysChannelGroupInfo info = sysChannelGroupInfoService.queryProportion(
+                ptlAgreementProductCostsNew.getId(),sysUser.getDeptId());
+        EsmInsCompany insuranceCompany = new EsmInsCompany();
+        if(!StringUtils.isBlank(ptlAgreement.getPartnerCompaniesId())){
+            insuranceCompany = esmInsCompanyMapper.selectById(ptlAgreement.getPartnerCompaniesId());
+        }
+
+        if(ObjectUtils.isEmpty(info)){
+            log.error("未查询到关联费用比例");
+            return;
+        }
+        // 时间判断有没有失效 有没有禁用
+        SysChannelGroup sysChannelGroup = sysChannelGroupService.getById(info.getChannelId());
+        if(sysChannelGroup.getStartTime().isAfter(LocalDateTime.now())
+                || sysChannelGroup.getEndTime().isBefore(LocalDateTime.now())
+                || sysChannelGroup.getEnabled().equals(EnabledEnum.EE_0.getCode()) ){
+            log.error("费用分组【"+sysChannelGroup.getName()+"】禁用或者失效!");
+            return;
+        }
+        if(StringUtils.isBlank(info.getJqCostsProportion())
+                && StringUtils.isBlank(info.getSyCostsProportion())
+                && StringUtils.isBlank(info.getNoCostsProportion())){
+            log.error("费用分组【"+sysChannelGroup.getName()+"】未设置加投费用!");
+            return;
+        }
+
+        /** 3.分组级别匹配,计算加投金额 */
+        BigDecimal jqpremium =  insAreaCompany.getJqpremium(); // 交强保费
+        BigDecimal sypremium =  insAreaCompany.getSypremium(); // 商业保费
+        BigDecimal jypremium =  insAreaCompany.getJypremium(); // 非车保费
+
+        // 计算加投金额
+        BigDecimal jq = jqpremium.multiply(new BigDecimal(StringUtils.isBlank(info.getJqCostsProportion())? "0" : info.getJqCostsProportion()))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal sy = sypremium.multiply(new BigDecimal(StringUtils.isBlank(info.getSyCostsProportion())? "0": info.getSyCostsProportion()))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal no = jypremium.multiply(new BigDecimal(StringUtils.isBlank(info.getNoCostsProportion())? "0": info.getNoCostsProportion()))
+                .setScale(2, BigDecimal.ROUND_HALF_UP);
+
+        SysChannelCost cost = new SysChannelCost();
+        cost.setOrderNo(insAreaCompany.getId());
+        cost.setUserId(insOrders.getUserid());
+        cost.setUserName(insOrders.getUsername());
+        cost.setLeaderName(insOrders.getLeaderName());
+        cost.setStatus(0);
+        cost.setSettleStatus(0);
+        cost.setLicenseNo(insOrders.getLicenseno());
+
+        // 获取被保险人姓名 json 获取
+        JSONObject insure = insOrders.getInsureinfo();
+        cost.setInsuredName(insure.getString("name"));
+        cost.setCompanyId(insAreaCompany.getCompanyId());
+        cost.setInscompany(insAreaCompany.getInscompany());
+        cost.setPartnerCompaniesId(ptlAgreement.getPartnerCompaniesId());
+        cost.setPartnerCompaniesName(insuranceCompany.getNamesimple());
+        cost.setProductId(ptlAgreementProductCostsNew.getProductId());
+        cost.setProductName(ptlAgreementProductCostsNew.getProductName());
+        cost.setDockingPerson(ptlAgreement.getDockingPerson());
+        cost.setJqCostsProportion(info.getJqCostsProportion());
+        cost.setSyCostsProportion(info.getSyCostsProportion());
+        cost.setNoCostsProportion(info.getNoCostsProportion());
+        cost.setSigningTime(insAreaCompany.getSigningTime());
+        cost.setPayDate(insAreaCompany.getPayDate());
+        cost.setJqPremium(jqpremium);
+        cost.setSyPremium(sypremium);
+        cost.setJyPremium(jypremium);
+        cost.setCreateTime(LocalDateTime.now());
+        cost.setCreateBy(insOrders.getUsername());
+        cost.setJqPolicyNo(insAreaCompany.getJqpolicyno());
+        String noPolicyno = this.setNoPolicyno(insAreaCompany);
+        cost.setNoPolicyNo(noPolicyno);
+        cost.setSyPolicyNo(insAreaCompany.getSypolicyno());
+        cost.setTaxAmount(insAreaCompany.getTaxamount());
+        cost.setJqJtPremium(jq);
+        cost.setSyJtPremium(sy);
+        cost.setJyJtPremium(no);
+        cost.setJqCostsExportProportion(insFeeOrderNew.getJqCostsExportProportion().add(insFeeOrderNew.getJqOtherCostsProportion()));
+        cost.setSyCostsExportProportion(insFeeOrderNew.getSyCostsExportProportion().add(insFeeOrderNew.getSyOtherCostsProportion()));
+        cost.setJqCostsExportProportion(insFeeOrderNew.getNoCostsExportProportion().add(insFeeOrderNew.getNoOtherCostsProportion()));
+        cost.setTotalPremium(jq.add(sy).add(no));
+
+
+        // 交强手续费出口 加 商业手续费出口 加 非车手续费出口 + 交强跟单费出口 加 商业跟单费出口 加 非车跟单费出口
+        BigDecimal settlementAmount = insFeeOrderNew.getJqExportSuperviseCostsPremiums()
+                .add(insFeeOrderNew.getSyExportSuperviseCostsPremiums())
+                .add(insFeeOrderNew.getNoExportSuperviseCostsPremiums())
+                .add(insFeeOrderNew.getJqExportOtherCostsPremiums())
+                .add(insFeeOrderNew.getSyExportOtherCostsPremiums())
+                .add(insFeeOrderNew.getNoExportOtherCostsPremiums());
+        cost.setSettlementAmount(settlementAmount);
+        cost.setDeleted(0);
+        sysChannelCostService.save(cost);
+
+        // 日志新增
+        SysChannelCost logEntity = new SysChannelCost();
+        logEntity.setId(cost.getId());
+        logEntity.setJqCostsProportion(cost.getJqCostsProportion());
+        logEntity.setSyCostsProportion(cost.getSyCostsProportion());
+        logEntity.setNoCostsProportion(cost.getNoCostsProportion());
+        logEntity.setJqJtPremium(cost.getJqJtPremium());
+        logEntity.setSyJtPremium(cost.getSyJtPremium());
+        logEntity.setJyJtPremium(cost.getJyJtPremium());
+        SysCostOperateLog sysCostOperateLog = new SysCostOperateLog();
+        sysCostOperateLog.setOptId(cost.getId());
+        sysCostOperateLog.setOptType(UserConstants.OPT_TYPE_0);
+        sysCostOperateLog.setOptContent(JSON.toJSONString(logEntity));
+        sysCostOperateLog.setCreateBy(cost.getCreateBy());
+        sysCostOperateLog.setCreateTime(cost.getCreateTime());
+        sysCostOperateLogService.save(sysCostOperateLog);
+    }
+
+    /**
+     * 获取非车保单号
+     * @param insAreaCompany
+     * @return
+     */
+    private String setNoPolicyno(InsAreaCompany insAreaCompany) {
+        if (insAreaCompany.getJypremium() == null || insAreaCompany.getJypremium().compareTo(BigDecimal.ZERO) == 0) {  // 非车跟单费
+            return null;
+        }
+
+        JSONArray crossInsurance = insAreaCompany.getCrossInsurance();
+
+        if(ObjectUtils.isEmpty(crossInsurance)) {
+            return null;
+        }
+        if (crossInsurance.isEmpty()) {
+            return null;
+        }
+
+        if (ObjectUtils.isEmpty(insAreaCompany.getApiType()) || PtlApiType.PTL_API_2.getCode() == insAreaCompany.getApiType()) {
+            List<CrawlerVerifyPaymentResponse.DrivingInsurancesDTO> drivingInsurancesDTOS = crossInsurance.toJavaList(CrawlerVerifyPaymentResponse.DrivingInsurancesDTO.class);
+            return drivingInsurancesDTOS.get(0).getApplication();
+        }
+
+        // 永诚
+        if(insAreaCompany.getCompanyId().contains(InsuranceEnum.AICS.getCode())){
+            List<DrivingInsuranceDto> javaList = crossInsurance.toJavaList(DrivingInsuranceDto.class);
+            return javaList.get(0).getPolicyNumber();
+        }
+
+        // 大家
+        if(insAreaCompany.getCompanyId().contains(InsuranceEnum.DJPC.getCode())){
+            List<NVHLODR1001Response.policyInfosDTO> javaList = crossInsurance.toJavaList(NVHLODR1001Response.policyInfosDTO.class);
+            return javaList.get(0).getPlyNo();
+        }
+
+        // 国任
+        if(insAreaCompany.getCompanyId().contains(InsuranceEnum.XDCX.getCode())){
+            List<DrivingInsuranceDto> javaList = crossInsurance.toJavaList(DrivingInsuranceDto.class);
+            return javaList.get(0).getPolicyNumber();
+        }
+
+        // 中煤
+        if(insAreaCompany.getCompanyId().contains(InsuranceEnum.ZMBX.getCode())){
+            List<SubmitResponse.AccidentNo> javaList = crossInsurance.toJavaList(SubmitResponse.AccidentNo.class);
+            return javaList.get(0).getRideProposalNo();
+        }
+
+        // 紫金
+        if(insAreaCompany.getCompanyId().contains(InsuranceEnum.ZKIC.getCode())){
+            List<DrivingInsuranceDto> javaList = crossInsurance.toJavaList(DrivingInsuranceDto.class);
+            return javaList.get(0).getPolicyNumber();
+        }
+
+        return null;
+    }
+
+    @Override
+    public SysChannelGroup queryById(Long id) {
+        LambdaQueryWrapper<SysChannelGroup> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysChannelGroup::getId, id);
+        SysChannelGroup group = getOne(wrapper);
+
+        // 查询费用关联数据
+        LambdaQueryWrapper<SysChannelCostRelation> wrapper2 = new LambdaQueryWrapper<>();
+        wrapper2.eq(!ObjectUtils.isEmpty(id),SysChannelCostRelation::getChannelId,id);
+        List<SysChannelCostRelation> costRelations = sysChannelCostRelationService.list(wrapper2);
+        group.setSysChannelCostRelations(costRelations);
+
+        // 获取所有级别
+        List<SysChannelGrade> grades = sysChannelGradeService.list();
+
+        // 查询分组明细费用比例
+        LambdaQueryWrapper<SysChannelGroupInfo> wrapper3 = new LambdaQueryWrapper<>();
+        wrapper3.eq(!ObjectUtils.isEmpty(id),SysChannelGroupInfo::getChannelId,id);
+        List<SysChannelGroupInfo> groupInfos = sysChannelGroupInfoService.list(wrapper3);
+        Map<Long, String> gradeMap = new HashMap<Long, String>();
+        if (CollUtil.isNotEmpty(groupInfos)) {
+            gradeMap = groupInfos.stream().collect(Collectors.toMap(
+                    SysChannelGroupInfo::getGradeId, SysChannelGroupInfo::getGradeName));
+        }
+        if(CollUtil.isEmpty(grades)){
+            group.setSysChannelGroupInfos(groupInfos);
+            return group;
+        }
+        for (SysChannelGrade grade : grades) {
+            if (!gradeMap.containsKey(grade.getId())){
+                SysChannelGroupInfo sysChannelGroupInfo = new SysChannelGroupInfo();
+                sysChannelGroupInfo.setGradeId(grade.getId());
+                sysChannelGroupInfo.setGradeName(grade.getName());
+                groupInfos.add(sysChannelGroupInfo);
+            }
+        }
+        group.setSysChannelGroupInfos(groupInfos);
+        return group;
+    }
+
+    @Override
+    public void openOne(Long id) {
+        SysChannelGroup sysChannelGroup = getByIdExist(id, "查询配置信息不存在");
+        Integer enabled = sysChannelGroup.getEnabled();
+        Integer i = Objects.equals(EnabledEnum.EE_1.getCode(), enabled) ? EnabledEnum.EE_0.getCode() : EnabledEnum.EE_1.getCode();
+        boolean b = updateEnabled(i);
+        sysChannelGroup.setEnabled(i);
+        boolean b1 = updateById(sysChannelGroup);
+        AssertionUtils.isSucceed(b1 && b, "成功");
+    }
+
+    @Override
+    public void queryCostList(List<PtlAgreementProductCostsNew> costsNewList, SysChannelGroupPageVo sysChannelGroupPageVo) {
+        if(CollUtil.isNotEmpty(costsNewList)){
+            // 查询费用关联数据
+            LambdaQueryWrapper<SysChannelCostRelation> wrapper= new LambdaQueryWrapper<>();
+            wrapper.eq(!ObjectUtils.isEmpty(sysChannelGroupPageVo.getId()),SysChannelCostRelation::getChannelId,sysChannelGroupPageVo.getId());
+            List<SysChannelCostRelation> costRelations = sysChannelCostRelationService.list(wrapper);
+            List<Long> costIds = costRelations.stream().map(SysChannelCostRelation::getCostId).collect(Collectors.toList());
+            for (PtlAgreementProductCostsNew productCostsNew : costsNewList) {
+                if (costIds.contains(Long.parseLong(productCostsNew.getId()))){
+                    productCostsNew.setCheck(true);
+                }else{
+                    productCostsNew.setCheck(false);
+                }
+            }
+        }
+    }
+
+    @Override
+    public List<SysChannelGroup> getProductList(Long id) {
+        List<SysChannelGroup> groupList = this.baseMapper.getProductList(id);
+        return groupList;
+    }
+
+    public static void main(String[] args) {
+//        SysChannelCost logEntity = new SysChannelCost();
+//        logEntity.setId(1l);
+//        logEntity.setJqCostsProportion("1");
+//        logEntity.setSyCostsProportion("1");
+//        logEntity.setNoCostsProportion("1");
+//        logEntity.setJqJtPremium(new BigDecimal(1));
+//        logEntity.setSyJtPremium(new BigDecimal(1));
+//        logEntity.setJyJtPremium(new BigDecimal(1));
+//        System.out.println(JSON.toJSON(logEntity));
+    }
+}
+
+
+
+

+ 22 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysCostOperateLogServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysCostOperateLogMapper;
+import com.ydtech.modules.admin.model.po.SysCostOperateLog;
+import com.ydtech.modules.admin.service.SysCostOperateLogService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author dongxin
+* @description 针对表【sys_cost_operate_log(加投结算日志)】的数据库操作Service实现
+* @createDate 2024-09-14 14:25:21
+*/
+@Service
+public class SysCostOperateLogServiceImpl extends ServiceImpl<SysCostOperateLogMapper, SysCostOperateLog>
+    implements SysCostOperateLogService {
+
+}
+
+
+
+

+ 29 - 4
src/main/java/com/ydtech/modules/esm/controller/EsmInsCompanyController.java

@@ -18,10 +18,15 @@ import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.esm.model.vo.req.EsmInsCompanyReq;
 import com.ydtech.modules.esm.model.vo.res.EsmInsCompanyResVo;
 import com.ydtech.modules.esm.service.EsmInsCompanyService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementPageVo;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.modules.protocol.service.impl.PtlAgreementServiceImpl;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -38,11 +43,12 @@ import java.util.List;
 @RequestMapping("esmInsCompany")
 public class EsmInsCompanyController extends BaseController {
 
-    private final EsmInsCompanyService esmInsCompanyService;
+    @Autowired
+    private EsmInsCompanyService esmInsCompanyService;
+
+    @Autowired
+    private PtlAgreementService ptlAgreementService;
 
-    public EsmInsCompanyController(EsmInsCompanyService esmInsCompanyService) {
-        this.esmInsCompanyService = esmInsCompanyService;
-    }
 
     @PostMapping("/findLeftInsTree")
     @ApiOperation("查询左侧树")
@@ -238,6 +244,25 @@ public class EsmInsCompanyController extends BaseController {
         return HttpResult.ok(esmInsCompanyResVos);
     }
 
+    @ApiOperation(value = "获取顶级保险公司和协议子集列表")
+    @GetMapping(value = "/gainTopAgreementList")
+    public HttpResult<List<EsmInsCompanyResVo>> gainTopAgreementList(@RequestParam String type) {
+        LambdaQueryWrapper<EsmInsCompany> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(EsmInsCompany::getParentId, "0");
+        lqw.orderByAsc(EsmInsCompany::getOrderNum);
+        lqw.eq(!StringUtils.isNullOrEmpty(type), EsmInsCompany::getType, type);
+        List<EsmInsCompany> list = esmInsCompanyService.list(lqw);
+        List<EsmInsCompanyResVo> esmInsCompanyResVos = BeanUtil.copyToList(list, EsmInsCompanyResVo.class);
+        for (EsmInsCompanyResVo esmInsCompany : esmInsCompanyResVos) {
+            PtlAgreementPageVo ptlAgreementPageVo = new PtlAgreementPageVo();
+            ptlAgreementPageVo.setPartnerCompaniesId(esmInsCompany.getId());
+            HttpResult<List<PtlAgreement>> agreement = ptlAgreementService.listAgreement(ptlAgreementPageVo);
+            List<PtlAgreement> agreementList = agreement.getData();
+            esmInsCompany.setAgreementList(agreementList);
+        }
+        return HttpResult.ok(esmInsCompanyResVos);
+    }
+
     @ApiOperation(value = "查询保司机构下级")
     @GetMapping(value = "/queryListByParentId/{parentId}")
     public HttpResult<List<EsmInsCompany>> queryListByParentId(@PathVariable("parentId") String parentId) {

+ 1 - 0
src/main/java/com/ydtech/modules/esm/model/EsmInsCompany.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.esm.model;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 6 - 0
src/main/java/com/ydtech/modules/esm/model/vo/res/EsmInsCompanyResVo.java

@@ -1,10 +1,13 @@
 package com.ydtech.modules.esm.model.vo.res;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 @Data
 @ApiModel(value = "保险公司基本信息响应")
@@ -45,6 +48,9 @@ public class EsmInsCompanyResVo implements Serializable {
     @ApiModelProperty(value = "拼音")
     private String cnName;
 
+    @ApiModelProperty(value = "协议子集")
+    private List<PtlAgreement> agreementList;
+
 
 }
 

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

@@ -6,6 +6,7 @@ import com.ydtech.constants.enums.dict.insurance.NatureOfVehicleUse;
 import com.ydtech.constants.enums.dict.insurance.VehicleType;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysChannelGroupService;
 import com.ydtech.modules.admin.service.SysSwitchConfigService;
 import com.ydtech.modules.admin.service.SysUserAccountService;
 import com.ydtech.modules.admin.service.SysUserService;
@@ -108,6 +109,9 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
     @Autowired
     private InsFeeOrderNewHistoryService insFeeOrderNewHistoryService;
 
+    @Autowired
+    private SysChannelGroupService sysChannelGroupService;
+
     @Override
     public QueryOrderFeeVo queryFeeOrderInfo(String companyId) {
         return null;
@@ -797,7 +801,7 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
             throw new SystemException("非车比例异常");
 
         //endregion
-
+        sysChannelGroupService.costCompute(insFeeOrderNew,ptlAgreement,ptlAgreementProductCostsNew,sysUser,insAreaCompany,insOrders);
         insFeeOrderNewService.saveOrUpdate(insFeeOrderNew);
     }
 

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

@@ -1,6 +1,7 @@
 package com.ydtech.modules.fnc.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,6 +11,7 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysDeptAccount;
 import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.po.SysChannelCost;
 import com.ydtech.modules.admin.model.po.SysUserAccount;
 import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
 import com.ydtech.modules.admin.service.*;
@@ -110,6 +112,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     @Autowired
     private PtlAgreementService ptlAgreementService;
 
+    @Autowired
+    private SysChannelCostService sysChannelCostService;
+
     @Autowired
     private Redisson redisson;
 
@@ -147,7 +152,6 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
             InsOrders order = insOrdersMapper.selectById(orderNo);
             InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
 
-
             //获取该订单的费用
             InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
                     .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
@@ -286,6 +290,21 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 
                 }
             }
+
+            // 获取加投结算数据 并审核通过
+            LambdaQueryWrapper<SysChannelCost> costWrapper = new LambdaQueryWrapper<>();
+            costWrapper.eq(SysChannelCost::getOrderNo, insOrderNo);
+            List<SysChannelCost> costList = sysChannelCostService.list(costWrapper);
+            if(CollUtil.isNotEmpty(costList)){
+                for (SysChannelCost sysChannelCost : costList) {
+                    sysChannelCost.setStatus(1); // 审核通过
+                    sysChannelCost.setPayDate(insAreaCompany.getPayDate());
+                    sysChannelCost.setSigningTime(insAreaCompany.getSigningTime());
+                    sysChannelCost.setUpdateTime(LocalDateTime.now());
+                    sysChannelCost.setUpdateBy(BaseController.getUser().getName());
+                }
+                sysChannelCostService.updateBatchById(costList);
+            }
         } catch (Exception e) {
             throw new SystemException("当前业务繁忙,请稍后重试");
         } finally {

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

@@ -539,8 +539,12 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     @Override
     public HttpResult<List<PtlAgreement>> listAgreement(PtlAgreementPageVo ptlAgreementPageVo) {
         LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
-        // 获取供应商本级id 及其 下级id
-        List<String> lowerId = esmInsCompanyService.getByLowerId(ptlAgreementPageVo.getPartnerCompaniesId());
+        if (!ObjectUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId())){
+            // 获取供应商本级id 及其 下级id
+            List<String> lowerId = esmInsCompanyService.getByLowerId(ptlAgreementPageVo.getPartnerCompaniesId());
+            wrapper.in(!StringUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId()) && !lowerId.isEmpty(),
+                    PtlAgreement::getPartnerCompaniesId, lowerId);
+        }
         // 审核状态
         wrapper.eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAuditStatus()), PtlAgreement::getAuditStatus,
                         ptlAgreementPageVo.getAuditStatus())
@@ -550,18 +554,16 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                 // 供应商类型
                 .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getCompaniesType()), PtlAgreement::getCompaniesType,
                         ptlAgreementPageVo.getCompaniesType())
-                // 合作公司
-                .in(!StringUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId()) && !lowerId.isEmpty(),
-                        PtlAgreement::getPartnerCompaniesId, lowerId)
                 // 录入时间
                 .between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate())
-                        , PtlAgreement::getCreateTime, ptlAgreementPageVo.getStartDate(), ptlAgreementPageVo.getEndDate());
-
+                        , PtlAgreement::getCreateTime, ptlAgreementPageVo.getStartDate(), ptlAgreementPageVo.getEndDate())
+                .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getIsExternal()),PtlAgreement::getIsExternal,
+                        ptlAgreementPageVo.getIsExternal())
+        ;
         List<PtlAgreement> agreementPage = list(wrapper);
         return HttpResult.ok(agreementPage);
     }
 
-
     @Override
     public HttpResult<List<PtlAgreement>> listAgreementInternal(PtlAgreementPageVo ptlAgreementPageVo) {
         LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
@@ -1023,4 +1025,4 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         }
         return null;
     }
-}
+}

+ 9 - 0
src/main/java/com/ydtech/modules/protocols/dao/PtlAgreementProductCostsNewMapper.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.protocols.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.admin.model.vo.SysChannelGroupPageVo;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 import com.ydtech.modules.protocols.entity.vo.AgreementProductQueryVo;
 import org.apache.ibatis.annotations.Param;
@@ -21,6 +22,14 @@ public interface PtlAgreementProductCostsNewMapper extends BaseMapper<PtlAgreeme
      *  @Description:  添加通过
      */
     boolean updateWithNull(PtlAgreementProductCostsNew obj);
+
+    /**
+     *
+     * @param page
+     * @param sysChannelGroupPageVo
+     * @return
+     */
+    Page<PtlAgreementProductCostsNew> getProductPage(Page page, @Param("params") SysChannelGroupPageVo sysChannelGroupPageVo);
 }
 
 

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

@@ -219,6 +219,9 @@ public class PtlAgreementProductCostsNew {
     @TableField(exist = false)
     private String noCarExportRadioLevel5;
 
+    @TableField(exist = false)
+    private boolean check;
+
     @TableField(exist = false)
     private List<PtlAgreementProductCostsAttrLink> costsAttrLinks;
 

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

@@ -2,11 +2,13 @@ package com.ydtech.modules.protocols.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.vo.SysChannelGroupPageVo;
 import com.ydtech.modules.order.entity.vo.FeeOrderNewRecordVo;
 import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
 import com.ydtech.modules.protocols.entity.vo.*;
+import org.apache.poi.ss.formula.functions.T;
 
 import java.util.List;
 import java.util.Map;
@@ -28,6 +30,14 @@ public interface PtlAgreementProductCostsNewService extends IService<PtlAgreemen
 
     List<PtlAgreementProductCostsNew> getByAgreementId(AgreementProductQueryVo agreementProductQueryVo);
 
+    /**
+     * 获取协议费用列表(用于分组费用关联)
+     * @param page
+     * @param sysChannelGroupPageVo
+     * @return
+     */
+    Page<PtlAgreementProductCostsNew> getProductPage(Page page, SysChannelGroupPageVo sysChannelGroupPageVo);
+
     /**
      * 获取协议费用
      * @param costsId

+ 25 - 1
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.constants.enums.dict.agreement.ProductsType;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.vo.SysChannelGroupPageVo;
 import com.ydtech.modules.admin.service.SysSwitchConfigService;
 import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.base.controller.BaseController;
@@ -93,6 +94,30 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
     private InsFeeOrderConfigServiceImpl insFeeOrderConfigServiceImpl;
 
 
+    @Override
+    public Page<PtlAgreementProductCostsNew> getProductPage(Page page, SysChannelGroupPageVo sysChannelGroupPageVo) {
+        Page<PtlAgreementProductCostsNew> selectPage = this.baseMapper.getProductPage(page, sysChannelGroupPageVo);
+
+        //遍历费用列表
+        List<String> ids = new ArrayList<>();
+        selectPage.getRecords().forEach(x -> {
+            ids.add(x.getId());
+        });
+        if (ids.isEmpty()) {
+            return selectPage;
+        }
+        //获取费用属性
+        List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+        List<PtlAgreementProductCostsAttrLink> list = ptlAgreementProductCostsAttrLinkService.list(new LambdaQueryWrapper<PtlAgreementProductCostsAttrLink>()
+                .in(PtlAgreementProductCostsAttrLink::getCostsId, ids));
+        Map<String, List<PtlAgreementProductCostsAttrLink>> groupedByCostsId = list.stream()
+                .collect(Collectors.groupingBy(PtlAgreementProductCostsAttrLink::getCostsId));
+        groupedByCostsId.forEach((k, v) -> {
+            selectPage.getRecords().stream().filter(x -> x.getId().equals(k)).findFirst().ifPresent(x -> x.setDesc(buildDesc(v, undwrtRulesAttrList)));
+        });
+        return selectPage;
+    }
+
     @Override
     public Page<PtlAgreementProductCostsNew> getByAgreementId(Page page, AgreementProductQueryVo agreementProductQueryVo) {
         LambdaQueryWrapper<PtlAgreementProductCostsNew> ptlAgreementProductCostsNewLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -1507,7 +1532,6 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         //查费用里的手续费
         InsFeeOrderNew insFeeOrderNewServiceById = insFeeOrderNewService.getById(feeOrderNewRecordVo.getFeeId());
         PtlAgreementProductCostsNew costsNew = ptlAgreementProductCostsNewService.getById(insFeeOrderNewServiceById.getCostsId());
-        costsNew.blank();
         //交强出口费用
         FeeOrderNewVo.ExportFee jqExportFee = feeRuleSchemeService.calcExportFee(
                 insFeeOrderNew.getJqPremium(),

+ 36 - 0
src/main/resources/mapper/modules/admin/SysChannelAreaRelationMapper.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.SysChannelAreaRelationMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysChannelAreaRelation">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="gradeId" column="grade_id" jdbcType="BIGINT"/>
+            <result property="areaId" column="area_id" jdbcType="BIGINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,grade_id,area_id
+    </sql>
+    <select id="queryRelationList"
+            parameterType="com.ydtech.modules.admin.model.vo.SysChannelVo"
+            resultType="com.ydtech.modules.admin.model.po.SysChannelAreaRelation">
+        select
+            a.area_id as areaId,
+            b.name
+        from sys_channel_area_relation as a
+        left join sys_dept as b on a.area_id = b.id
+        <where>
+            <if test="sysChannelVo.gradeId != null ">
+                and a.grade_id = #{sysChannelVo.gradeId}
+            </if>
+            <if test="sysChannelVo.id != null and sysChannelVo.id != '' ">
+                and a.area_id = #{sysChannelVo.id}
+            </if>
+            <if test="sysChannelVo.name != null and sysChannelVo.name != '' ">
+                and b.name like CONCAT('%', #{sysChannelVo.name}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>

+ 83 - 0
src/main/resources/mapper/modules/admin/SysChannelCostMapper.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.SysChannelCostMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysChannelCost">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
+            <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+            <result property="userName" column="user_name" jdbcType="VARCHAR"/>
+            <result property="leaderName" column="leader_name" jdbcType="VARCHAR"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+            <result property="settleStatus" column="settle_status" jdbcType="TINYINT"/>
+            <result property="deleted" column="deleted" jdbcType="TINYINT"/>
+            <result property="licenseNo" column="license_no" jdbcType="VARCHAR"/>
+            <result property="insuredName" column="insured_name" jdbcType="VARCHAR"/>
+            <result property="companyId" column="company_id" jdbcType="VARCHAR"/>
+            <result property="inscompany" column="inscompany" jdbcType="VARCHAR"/>
+            <result property="partnerCompaniesId" column="partner_companies_id" jdbcType="VARCHAR"/>
+            <result property="partnerCompaniesName" column="partner_companies_name" jdbcType="VARCHAR"/>
+            <result property="productId" column="product_id" jdbcType="VARCHAR"/>
+            <result property="productName" column="product_name" jdbcType="VARCHAR"/>
+            <result property="dockingPerson" column="docking_person" jdbcType="VARCHAR"/>
+            <result property="jqCostsProportion" column="jq_costs_proportion" jdbcType="VARCHAR"/>
+            <result property="syCostsProportion" column="sy_costs_proportion" jdbcType="VARCHAR"/>
+            <result property="noCostsProportion" column="no_costs_proportion" jdbcType="VARCHAR"/>
+            <result property="signingTime" column="signing_time" jdbcType="TIMESTAMP"/>
+            <result property="payDate" column="pay_date" jdbcType="TIMESTAMP"/>
+            <result property="jqJtPremium" column="jq_jt_premium" jdbcType="DECIMAL"/>
+            <result property="syJtPremium" column="sy_jt_premium" jdbcType="DECIMAL"/>
+            <result property="jyJtPremium" column="jy_jt_premium" jdbcType="DECIMAL"/>
+            <result property="voucherNumber" column="voucher_number" jdbcType="VARCHAR"/>
+            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="jqPolicyNo" column="jq_policy_no" jdbcType="VARCHAR"/>
+            <result property="syPolicyNo" column="sy_policy_no" jdbcType="VARCHAR"/>
+            <result property="noPolicyNo" column="no_policy_no" jdbcType="VARCHAR"/>
+            <result property="taxAmount" column="tax_amount" jdbcType="DECIMAL"/>
+            <result property="jqPremium" column="jq_premium" jdbcType="DECIMAL"/>
+            <result property="syPremium" column="sy_premium" jdbcType="DECIMAL"/>
+            <result property="jyPremium" column="jy_premium" jdbcType="DECIMAL"/>
+            <result property="jqCostsExportProportion" column="jq_costs_export_proportion" jdbcType="DECIMAL"/>
+            <result property="syCostsExportProportion" column="sy_costs_export_proportion" jdbcType="DECIMAL"/>
+            <result property="noCostsExportProportion" column="no_costs_export_proportion" jdbcType="DECIMAL"/>
+            <result property="totalPremium" column="total_premium" jdbcType="DECIMAL"/>
+            <result property="settlementAmount" column="settlement_amount" jdbcType="DECIMAL"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,order_no,user_id,deleted,settle_status,
+        user_name,leader_name,status,license_no,
+        insured_name,company_id,inscompany,
+        partner_companies_id,partner_companies_name,product_id,
+        product_name,docking_person,jq_costs_proportion,
+        sy_costs_proportion,no_costs_proportion,signing_time,
+        pay_date,jq_jt_premium,sy_jt_premium,
+        jy_jt_premium,voucher_number,create_by,create_time,
+        update_by,update_time,jq_policy_no,
+        sy_policy_no,no_policy_no,tax_amount,
+        jq_premium,sy_premium,jy_premium,
+        jq_costs_export_proportion,sy_costs_export_proportion,no_costs_export_proportion,
+        total_premium,settlement_amount
+    </sql>
+    <select id="queryPage" resultType="com.ydtech.modules.admin.model.dto.SysChannelCostDto">
+        SELECT
+            user_name AS userName,
+            SUM( IFNULL( CASE WHEN settle_status = 0 THEN settlement_amount END,0) ) AS unsettledAmount,
+            SUM( IFNULL( CASE WHEN settle_status = 1 THEN settlement_amount END,0) ) AS settledAmount
+        FROM
+            sys_channel_cost
+        <where>
+            <if test="vo.userName != null and vo.userName != ''">
+                user_name = #{vo.userName}
+            </if>
+        </where>
+        GROUP BY
+            user_name
+        ORDER BY user_name DESC
+    </select>
+</mapper>

+ 19 - 0
src/main/resources/mapper/modules/admin/SysChannelCostRelationMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.SysChannelCostRelationMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysChannelCostRelation">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="channelId" column="channel_id" jdbcType="BIGINT"/>
+            <result property="agreementId" column="agreement_id" jdbcType="BIGINT"/>
+            <result property="costId" column="cost_id" jdbcType="BIGINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,channel_id,agreement_id,
+        cost_id
+    </sql>
+
+</mapper>

+ 21 - 0
src/main/resources/mapper/modules/admin/SysChannelGradeMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.SysChannelGradeMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysChannelGrade">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,create_by,
+        create_time,update_by,
+        update_time
+    </sql>
+</mapper>

+ 44 - 0
src/main/resources/mapper/modules/admin/SysChannelGroupInfoMapper.xml

@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.SysChannelGroupInfoMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysChannelGroupInfo">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="channelId" column="channel_id" jdbcType="BIGINT"/>
+            <result property="gradeId" column="grade_id" jdbcType="BIGINT"/>
+            <result property="gradeName" column="grade_name" jdbcType="VARCHAR"/>
+            <result property="jqCostsProportion" column="jq_costs_proportion" jdbcType="VARCHAR"/>
+            <result property="syCostsProportion" column="sy_costs_proportion" jdbcType="VARCHAR"/>
+            <result property="noCostsProportion" column="no_costs_proportion" jdbcType="VARCHAR"/>
+            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        a.id,a.channel_id,a.grade_id,a.grade_name,a.jq_costs_proportion,
+        a.sy_costs_proportion,a.no_costs_proportion,a.create_by,
+        a.create_time,a.update_by,a.update_time
+    </sql>
+    <select id="queryProportion" resultMap="BaseResultMap">
+        SELECT
+            <include refid="Base_Column_List"/>
+        FROM
+            sys_channel_group_info a
+        WHERE
+            a.channel_id = (
+                SELECT b.channel_id
+                FROM sys_channel_cost_relation b
+                WHERE b.cost_id = #{productId}
+                )
+        AND
+            a.grade_id = (
+                SELECT c.grade_id
+                FROM sys_channel_area_relation c
+                WHERE c.area_id = #{deptId}
+                )
+    </select>
+</mapper>

+ 40 - 0
src/main/resources/mapper/modules/admin/SysChannelGroupMapper.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.SysChannelGroupMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysChannelGroup">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="enabled" column="enabled" jdbcType="INTEGER"/>
+            <result property="remark" column="remark" jdbcType="VARCHAR"/>
+            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
+            <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,remark,
+        create_by,create_time,update_by,
+        update_time
+    </sql>
+    <select id="getProductList" resultType="com.ydtech.modules.admin.model.po.SysChannelGroup">
+        SELECT
+        a.id,
+        b.costs_description as costsDescription,
+        b.product_name as productName
+        FROM sys_channel_cost_relation AS a
+        LEFT JOIN ptl_agreement_product_costs_new AS b on a.cost_id = b.id
+        LEFT JOIN ptl_agreement as c on b.agreement_id = c.id
+        <where>
+            <if test="id != null">
+                a.channel_id = #{id}
+            </if>
+        </where>
+        ORDER BY c.insurance_company_id, b.agreement_id DESC
+    </select>
+</mapper>

+ 20 - 0
src/main/resources/mapper/modules/admin/SysCostOperateLogMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.admin.dao.SysCostOperateLogMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.admin.model.po.SysCostOperateLog">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <id property="optId" column="opt_id" jdbcType="BIGINT"/>
+            <result property="optType" column="opt_type" jdbcType="TINYINT"/>
+            <result property="optContent" column="opt_content" jdbcType="VARCHAR"/>
+            <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,opt_id,opt_type,opt_content,
+        create_by,create_time
+    </sql>
+</mapper>

+ 54 - 0
src/main/resources/mapper/modules/protocols/PtlAgreementProductCostsNewMapper.xml

@@ -40,4 +40,58 @@
         </if>
 
     </select>
+
+    <select id="getProductPage" resultType="com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew">
+
+        SELECT
+        a.id,
+        a.costs_start_date as costsStartDate,
+        a.costs_end_date as costsEndDate,
+        a.costs_description as costsDescription,
+        a.priority_level as priorityLevel,
+        a.is_audit as isAudit,
+        a.product_name as productName,
+        b.agreement_name as agreementName,
+        b.insurance_company as insuranceCompany
+        FROM ptl_agreement_product_costs_new as a
+        LEFT JOIN ptl_agreement as b on a.agreement_id = b.id
+        <where>
+            <if test="params.companyId != null and params.companyId != ''">
+                AND b.insurance_company_id = #{params.companyId}
+            </if>
+            <if test="params.isAudit != null">
+                AND a.is_audit = #{params.isAudit}
+            </if>
+            <if test="params.productCode != null and params.productCode != ''">
+                AND a.product_id = #{params.productCode}
+            </if>
+
+            <if test="params.costStartDate != null ">
+                AND a.costs_start_date <![CDATA[ <= ]]> #{params.costStartDate}
+            </if>
+            <if test="params.costsEndDate != null">
+                and a.costs_end_date <![CDATA[ >= ]]> #{params.costsEndDate}
+            </if>
+            <if test="params.isEffective != null">
+                <choose>
+                    <when test="params.isEffective == 1">
+                        AND (a.costs_start_date <![CDATA[ > ]]> NOW() and a.costs_end_date <![CDATA[ < ]]> NOW())
+                    </when>
+                    <otherwise>
+                        AND (a.costs_start_date <![CDATA[ < ]]> NOW() and a.costs_end_date <![CDATA[ > ]]> NOW())
+                    </otherwise>
+                </choose>
+            </if>
+            <if test="params.costsDescription != null and params.costsDescription != ''">
+                AND a.costs_description like concat('%',#{params.costsDescription},'%')
+            </if>
+            <if test="params.agreementList != null and params.agreementList.size() > 0">
+                AND a.agreement_id in
+                <foreach item="item" index="index" collection="params.agreementList" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        order by a.id desc
+    </select>
 </mapper>