Browse Source

协议接口修改,添加历史记录

785834757 2 years ago
parent
commit
b226ba6ee7
40 changed files with 2819 additions and 134 deletions
  1. 8 0
      src/main/java/com/ydtech/constants/enums/dict/agreement/ProductsType.java
  2. 8 0
      src/main/java/com/ydtech/core/page/PageRequest.java
  3. 7 0
      src/main/java/com/ydtech/modules/protocol/constants/HistoryStatusConstants.java
  4. 104 10
      src/main/java/com/ydtech/modules/protocol/controller/PtlAgreementController.java
  5. 72 0
      src/main/java/com/ydtech/modules/protocol/controller/PtlAgreementHistoryController.java
  6. 19 0
      src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementAttributionHistoryMapper.java
  7. 24 0
      src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementHistoryMapper.java
  8. 19 0
      src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementProductCostsHistoryMapper.java
  9. 19 0
      src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementUndwrtRulesHistoryMapper.java
  10. 5 2
      src/main/java/com/ydtech/modules/protocol/entity/dto/PltAgreementSchemeSaveDto.java
  11. 3 3
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementProductCostsSaveDto.java
  12. 82 0
      src/main/java/com/ydtech/modules/protocol/entity/dto/history/PtlAgreementHistorySaveDto.java
  13. 442 0
      src/main/java/com/ydtech/modules/protocol/entity/dto/history/PtlAgreementUndwrtRulesHistory.java
  14. 107 0
      src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreementAttributionHistory.java
  15. 240 0
      src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreementHistory.java
  16. 574 0
      src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreementProductCostsHistory.java
  17. 20 0
      src/main/java/com/ydtech/modules/protocol/entity/vo/PltAgreementSchemeSaveVo.java
  18. 227 0
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementHistoryConvertQueryVo.java
  19. 34 0
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementHistoryQueryVo.java
  20. 31 0
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementNonVehicleProductCostsVo.java
  21. 9 0
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementProductQueryVo.java
  22. 8 8
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementQueryVo.java
  23. 0 12
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementSaveVo.java
  24. 9 0
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementUndwrtRulesQueryVo.java
  25. 34 0
      src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementUndwrtRulesSaveVo.java
  26. 19 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementAttributionHistoryService.java
  27. 28 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementHistoryService.java
  28. 22 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementProductCostsHistoryService.java
  29. 11 2
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementProductCostsService.java
  30. 60 1
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java
  31. 23 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUndwrtRulesHistoryService.java
  32. 2 1
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUndwrtRulesService.java
  33. 26 0
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementAttributionHistoryServiceImpl.java
  34. 124 0
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementHistoryServiceImpl.java
  35. 30 0
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementProductCostsHistoryServiceImpl.java
  36. 21 41
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementProductCostsServiceImpl.java
  37. 244 49
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  38. 41 0
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUndwrtRulesHistoryServiceImpl.java
  39. 4 5
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUndwrtRulesServiceImpl.java
  40. 59 0
      src/main/resources/mapper/modules/protocol/PtlAgreementHistoryMapper.xml

+ 8 - 0
src/main/java/com/ydtech/constants/enums/dict/agreement/ProductsType.java

@@ -25,4 +25,12 @@ public enum ProductsType implements IBaseEnum {
     // 状态  0 启用  1 不启用
     private final Integer status;
 
+    public static ProductsType getByCode(String code) {
+        for (ProductsType value : ProductsType.values()) {
+            if (value.getCode().equals(code)) {
+                return value;
+            }
+        }
+        return null;
+    }
 }

+ 8 - 0
src/main/java/com/ydtech/core/page/PageRequest.java

@@ -1,6 +1,7 @@
 package com.ydtech.core.page;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.base.model.dto.PageDto;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.poi.ss.formula.functions.T;
 
@@ -46,6 +47,13 @@ public class PageRequest {
         this.pageSize = pageSize;
     }
 
+    public PageDto getPageDto(){
+        PageDto pageDto = new PageDto();
+        pageDto.setPageNum(this.pageNum);
+        pageDto.setPageSize(this.pageSize);
+        return pageDto;
+    }
+
     public Map<String, ColumnFilter> getColumnFilters() {
         return columnFilters;
     }

+ 7 - 0
src/main/java/com/ydtech/modules/protocol/constants/HistoryStatusConstants.java

@@ -0,0 +1,7 @@
+package com.ydtech.modules.protocol.constants;
+
+public class HistoryStatusConstants {
+    public static final String HISTORY_TYPE_ADD = "1";
+    public static final String HISTORY_TYPE_UPDATE = "2";
+    public static final String HISTORY_TYPE_DELETE = "3";
+}

+ 104 - 10
src/main/java/com/ydtech/modules/protocol/controller/PtlAgreementController.java

@@ -1,15 +1,26 @@
 package com.ydtech.modules.protocol.controller;
 
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageRequest;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementNonCarProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
 import com.ydtech.modules.protocol.entity.vo.*;
+import com.ydtech.modules.protocol.service.PtlAgreementNonCarProductCostsService;
+import com.ydtech.modules.protocol.service.PtlAgreementProductCostsService;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.modules.protocol.service.PtlAgreementUndwrtRulesService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
@@ -30,10 +41,18 @@ public class PtlAgreementController extends BaseController {
 
     private final PtlAgreementService ptlAgreementService;
 
+    private final PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService;
 
-    public PtlAgreementController(PtlAgreementService ptlAgreementService) {
-        this.ptlAgreementService = ptlAgreementService;
+    private final PtlAgreementProductCostsService ptlAgreementProductCostsService;
+
+    private final PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService;
 
+    public PtlAgreementController(PtlAgreementService ptlAgreementService, PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService,
+                                  PtlAgreementProductCostsService ptlAgreementProductCostsService,PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService) {
+        this.ptlAgreementService = ptlAgreementService;
+        this.ptlAgreementProductCostsService = ptlAgreementProductCostsService;
+        this.ptlAgreementUndwrtRulesService = ptlAgreementUndwrtRulesService;
+        this.ptlAgreementNonCarProductCostsService = ptlAgreementNonCarProductCostsService;
     }
 
     @PostMapping("/page")
@@ -42,13 +61,6 @@ public class PtlAgreementController extends BaseController {
         return ptlAgreementService.pageAgreement(ptlAgreementPageVo);
     }
 
-    @PostMapping
-    @ApiOperation("添加协议")
-    public HttpResult<Object> save(@RequestBody PtlAgreementSaveVo agreement) {
-        String userName = getUserName();
-        return ptlAgreementService.saveAgreement(agreement, userName);
-    }
-
     @PutMapping("/{agreementId}")
     @ApiOperation("修改协议")
     public HttpResult<Object> revise(@PathVariable String agreementId, @RequestBody PtlAgreementSaveVo agreement) {
@@ -65,9 +77,91 @@ public class PtlAgreementController extends BaseController {
     @DeleteMapping("/{agreementId}")
     @ApiOperation("删除协议")
     public HttpResult<Object> delete(@PathVariable String agreementId) {
-        return ptlAgreementService.deleteAgreement(agreementId);
+        return ptlAgreementService.deleteAgreement(agreementId, getUserName());
+    }
+
+    @PostMapping
+    @ApiOperation("添加协议")
+    public HttpResult<Object> save(@RequestBody PtlAgreementSaveVo agreement) {
+        String userName = getUserName();
+        return ptlAgreementService.saveAgreement(agreement, userName);
+    }
+
+    @PostMapping("/getProduct")
+    @ApiOperation("查询协议产品费用")
+    public PageResult getProductSav(@RequestBody PtlAgreementProductQueryVo ptlAgreementProductQueryVo) {
+        Page<T> page = buildPageRequest(ptlAgreementProductQueryVo.getPageDto());
+        Page<PtlAgreementProductCosts> schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(page,ptlAgreementProductQueryVo);
+        return buildPageResponse(schemeQueryDto);
+    }
+
+    @PostMapping("productSave")
+    @ApiOperation("添加协议产品费用")
+    public HttpResult<Object> productSave(@RequestBody PtlAgreementProductCosts agreement) {
+        String userName = getUserName();
+        return ptlAgreementService.saveAgreementProduct(agreement, userName);
     }
 
+    @PostMapping("productUpdate")
+    @ApiOperation("修改协议产品费用")
+    public HttpResult<Object> productUpdate(@RequestBody PtlAgreementProductCosts agreement) {
+        String userName = getUserName();
+        return ptlAgreementService.updateAgreementProduct(agreement, userName);
+    }
+
+    @GetMapping("productDelete")
+    @ApiOperation("删除协议产品费用")
+    public HttpResult<Object> productDelete(String id){
+        String userName = getUserName();
+        return ptlAgreementService.deleteAgreementProduct(id,userName);
+    }
+
+
+    @GetMapping("/getNonCarProduct")
+    @ApiOperation("查询非车产品费用")
+    public HttpResult<Object> getNonCarProduct(@RequestParam String agreementId) {
+        List<PtlAgreementNonCarProductCosts> nonCarProductCosts = ptlAgreementNonCarProductCostsService.getByAgreementId(agreementId);
+        return HttpResult.ok(nonCarProductCosts);
+    }
+
+    @PostMapping("nonCarProductSave")
+    @ApiOperation("添加非车产品费用")
+    public HttpResult<Object> nonCarProductSave(@RequestBody PtlAgreementNonVehicleProductCostsVo agreement) {
+        String userName = getUserName();
+        return ptlAgreementService.saveAgreementNonCarProductCosts(agreement, userName);
+    }
+
+    @PostMapping("getUndwrtRules")
+    @ApiOperation("查询承保规则")
+    public PageResult getUndwrtRules(@RequestBody PtlAgreementUndwrtRulesQueryVo ptlAgreementUndwrtRulesQueryVo) {
+        Page<T> page = buildPageRequest(ptlAgreementUndwrtRulesQueryVo.getPageDto());
+        Page<PtlAgreementUndwrtRules> underwritingRules = ptlAgreementUndwrtRulesService.getByAgreementId(page,ptlAgreementUndwrtRulesQueryVo.getAgreementId());
+        return buildPageResponse(underwritingRules);
+    }
+
+    @PostMapping("undwrtRulesSave")
+    @ApiOperation("添加承保规则")
+    public HttpResult<Object> underwritingRulesSave(@RequestBody PtlAgreementUndwrtRules ptlAgreementUndwrtRules) {
+        String userName = getUserName();
+        return ptlAgreementService.saveAgreementUndwrtRules(ptlAgreementUndwrtRules, userName);
+    }
+
+    @PostMapping("undwrtRulesUpdate")
+    @ApiOperation("修改承保规则")
+    public HttpResult<Object> underwritingRulesUpdate(@RequestBody PtlAgreementUndwrtRules ptlAgreementUndwrtRules) {
+        String userName = getUserName();
+        return ptlAgreementService.updateAgreementUndwrtRules(ptlAgreementUndwrtRules, userName);
+    }
+
+    @GetMapping("undwrtRulesDelete")
+    @ApiModelProperty("删除承保规则")
+    public HttpResult<Object> underwritingRulesDelete(String id){
+        String userName = getUserName();
+        return ptlAgreementService.deleteAgreementUndwrtRules(id,userName);
+    }
+
+
+
     @PostMapping("/audit/{agreementId}")
     @ApiOperation("审核协议")
     public HttpResult<Object> audit(@PathVariable String agreementId, @RequestBody PtlAgreementAuditVo ptlAgreementAuditVo) {

+ 72 - 0
src/main/java/com/ydtech/modules/protocol/controller/PtlAgreementHistoryController.java

@@ -0,0 +1,72 @@
+package com.ydtech.modules.protocol.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementHistorySaveDto;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementUndwrtRulesHistory;
+import com.ydtech.modules.protocol.entity.po.*;
+import com.ydtech.modules.protocol.entity.vo.*;
+import com.ydtech.modules.protocol.service.*;
+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.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author wenks
+ * @description 协议历史查询
+ * @createDate 2023-06-05 17:59:52
+ */
+@Api(tags = "协议历史查询")
+@RequestMapping("/plt/agreementhistory")
+@RestController
+public class PtlAgreementHistoryController extends BaseController {
+
+    @Value("${agreement.shutdown}")
+    private boolean shutdown;
+
+    @Autowired
+    private PtlAgreementProductCostsHistoryService ptlAgreementProductCostsHistoryService;
+
+    @Autowired
+    private PtlAgreementUndwrtRulesHistoryService ptlAgreementUndwrtRulesHistoryService;
+
+    @Autowired
+    private PtlAgreementHistoryService ptlAgreementHistoryService;
+
+    @PostMapping("/agreementHistoryPage")
+    @ApiOperation("分页查询协议历史")
+    public HttpResult<PageResult> agreementHistoryPage(@RequestBody PtlAgreementProductQueryVo ptlAgreementProductQueryVo) {
+        Page page = buildPageRequest(ptlAgreementProductQueryVo.getPageDto());
+        Page<PtlAgreementHistoryConvertQueryVo> ptlAgreementPage = ptlAgreementHistoryService.pageHistory(page,ptlAgreementProductQueryVo.getAgreementId());
+
+        return HttpResult.ok(buildPageResponse(ptlAgreementPage));
+    }
+
+    @PostMapping("costsHistoryPage")
+    @ApiOperation("查询费用历史记录")
+    public HttpResult<PageResult> costsHistoryPage(@RequestBody PtlAgreementProductQueryVo ptlAgreementProductCostsHistory) {
+        Page page = buildPageRequest(ptlAgreementProductCostsHistory.getPageDto());
+        Page<PtlAgreementProductCostsHistory> ptlAgreementProductCostsHistoryPage = ptlAgreementProductCostsHistoryService.pageHistory(page,ptlAgreementProductCostsHistory);
+        return HttpResult.ok(buildPageResponse(ptlAgreementProductCostsHistoryPage));
+    }
+
+    @PostMapping("rulesHistoryPage")
+    @ApiOperation("查询承保规则历史记录")
+    public HttpResult<PageResult> rulesHistoryPage(@RequestBody PtlAgreementUndwrtRulesQueryVo ptlAgreementUndwrtRulesQueryVo) {
+        Page page = buildPageRequest(ptlAgreementUndwrtRulesQueryVo.getPageDto());
+        Page<PtlAgreementUndwrtRulesHistory> ptlAgreementUndwrtRulesPage = ptlAgreementUndwrtRulesHistoryService.pageHistory(page,ptlAgreementUndwrtRulesQueryVo);
+        return HttpResult.ok(buildPageResponse(ptlAgreementUndwrtRulesPage));
+    }
+
+}

+ 19 - 0
src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementAttributionHistoryMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.protocol.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttributionHistory;
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement_attribution(协议归属信息)】的数据库操作Mapper
+ * @createDate 2023-07-03 09:31:16
+ * @Entity generator.domain.PtlAgreementAttribution
+ */
+public interface PtlAgreementAttributionHistoryMapper extends BaseMapper<PtlAgreementAttributionHistory> {
+
+}
+
+
+
+

+ 24 - 0
src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementHistoryMapper.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.protocol.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementHistory;
+
+import java.util.HashMap;
+import java.util.List;
+
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Mapper
+ * @createDate 2023-06-05 17:59:52
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreement
+ */
+public interface PtlAgreementHistoryMapper extends BaseMapper<PtlAgreementHistory> {
+    Page<HashMap> pageHistory(Page page, String agreementId);
+
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementProductCostsHistoryMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.protocol.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCostsHistory;
+
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement_product_costs(协议产品费用)】的数据库操作Mapper
+ * @createDate 2023-06-05 17:59:52
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts
+ */
+public interface PtlAgreementProductCostsHistoryMapper extends BaseMapper<PtlAgreementProductCostsHistory> {
+}
+
+
+
+

+ 19 - 0
src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementUndwrtRulesHistoryMapper.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.protocol.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementUndwrtRulesHistory;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+
+
+/**
+ * @author CXP
+ * @description 针对表【ptl_agreement_undwrt_rules_history(协议产品费用)】的数据库操作Mapper
+ * @createDate 2023年12月20日22:28:24
+ * @Entity com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules
+ */
+public interface PtlAgreementUndwrtRulesHistoryMapper extends BaseMapper<PtlAgreementUndwrtRulesHistory> {
+}
+
+
+
+

+ 5 - 2
src/main/java/com/ydtech/modules/protocol/entity/dto/PltAgreementSchemeSaveDto.java

@@ -20,6 +20,9 @@ public class PltAgreementSchemeSaveDto implements Serializable {
 
     private static final long serialVersionUID = -3950930163692348412L;
 
+    @ApiModelProperty("id")
+    private String id;
+
     @ApiModelProperty("产品id")
     private String productId;
 
@@ -27,14 +30,14 @@ public class PltAgreementSchemeSaveDto implements Serializable {
     private String name;
 
     @ApiModelProperty("方案")
-    private List<PtlAgreementProductCostsSaveDto> productCosts;
+    private PtlAgreementProductCostsSaveDto productCosts;
 
 
     public PltAgreementSchemeSaveDto(List<PtlAgreementProductCosts> productCostsList) {
         PtlAgreementProductCosts ptlAgreementProductCosts = productCostsList.get(0);
         this.productId = ptlAgreementProductCosts.getProductId();
         this.name = ptlAgreementProductCosts.getProductName();
-        this.productCosts = PtlAgreementProductCostsSaveDto.toPtlAgreementProductCostsSaveDto(productCostsList);
+//        this.productCosts = PtlAgreementProductCostsSaveDto.toPtlAgreementProductCostsSaveDto(productCostsList);
     }
 
 }

+ 3 - 3
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementProductCostsSaveDto.java

@@ -220,9 +220,9 @@ public class PtlAgreementProductCostsSaveDto implements Serializable {
     @ApiModelProperty("医保外用乘客")
     private Integer passengerMedicalAmount;
 
-    public static List<PtlAgreementProductCosts> toPtlAgreementProductCosts(String agreementId, List<PltAgreementSchemeSaveDto> scheme) {
-        return scheme.stream().map(x -> PtlAgreementProductCosts.toPtlAgreementProductCostsList(agreementId, x.getProductId(), x.getName(), x.getProductCosts())).flatMap(Collection::stream).collect(Collectors.toList());
-    }
+//    public static List<PtlAgreementProductCosts> toPtlAgreementProductCosts(String agreementId, PltAgreementSchemeSaveDto scheme) {
+//        return scheme.stream().map(x -> PtlAgreementProductCosts.toPtlAgreementProductCostsList(agreementId, x.getProductId(), x.getName(), x.getProductCosts())).flatMap(Collection::stream).collect(Collectors.toList());
+//    }
 
     public static List<PtlAgreementProductCostsSaveDto> toPtlAgreementProductCostsSaveDto(List<PtlAgreementProductCosts> productCosts) {
         return productCosts.stream().map(PtlAgreementProductCostsSaveDto::new).collect(Collectors.toList());

+ 82 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/history/PtlAgreementHistorySaveDto.java

@@ -0,0 +1,82 @@
+package com.ydtech.modules.protocol.entity.dto.history;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@TableName("ptl_agreement_history")
+@ApiModel("协议添加实体")
+public class PtlAgreementHistorySaveDto implements Serializable {
+
+    private static final long serialVersionUID = 815254316326000952L;
+
+    @ApiModelProperty("协议id")
+    private String agreementId;
+
+    @ApiModelProperty("协议类型")
+    private String agreementType;
+
+    @ApiModelProperty("协议名称")
+    private String agreementName;
+
+    @ApiModelProperty("协议简称")
+    private String agreementAbbreviation;
+
+    @ApiModelProperty("合作公司id")
+    private String partnerCompaniesId;
+
+    @ApiModelProperty("保险公司id")
+    private String associationCompaniesId;
+
+    @ApiModelProperty("协议起期")
+    private LocalDate startDate;
+
+    @ApiModelProperty("协议止期")
+    private LocalDate endDate;
+
+    @ApiModelProperty("结算周期")
+    private Integer moneyTime;
+
+    @ApiModelProperty("保单匹配协议日期类型(保单日期类型)")
+    private String matchType;
+
+    @ApiModelProperty("对接人")
+    private String dockingPerson;
+
+    @ApiModelProperty("联系方式(对接人)")
+    private String dockingPhone;
+
+    @ApiModelProperty("含增值税结算")
+    private String withTax;
+
+    @ApiModelProperty("佣金发放方式")
+    private String moneyType;
+
+    @ApiModelProperty("有效状态")
+    private String validStatus;
+
+    @ApiModelProperty("附件id")
+    private String fileId;
+
+    @ApiModelProperty("序号")
+    private Integer serialNumber;
+
+    @ApiModelProperty("承保描述")
+    private String underwritingDescription;
+
+    @ApiModelProperty("操作类型")
+    private String operatorType;
+
+    @ApiModelProperty("操作人")
+    private String operator;
+
+    @ApiModelProperty("操作时间")
+    private String operatorTime;
+
+}

+ 442 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/history/PtlAgreementUndwrtRulesHistory.java

@@ -0,0 +1,442 @@
+package com.ydtech.modules.protocol.entity.dto.history;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 协议承保规则
+ *
+ * @TableName ptl_agreement_undwrt_rules
+ */
+@TableName(value = "ptl_agreement_undwrt_rules_history", autoResultMap = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PtlAgreementUndwrtRulesHistory implements Serializable {
+
+
+    private static final long serialVersionUID = -2096076927159362790L;
+    /**
+     * 主键/自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    /**
+     * 协议id
+     */
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    /**
+     * 规则类型(0满足拒保 1满足承包)
+     */
+    @TableField(value = "rules_type")
+    private Integer rulesType;
+
+    /**
+     * 业务类型
+     */
+    @TableField(value = "product_type")
+    private String productType;
+
+
+    /**
+     * 规则描述
+     */
+    @TableField(value = "rule_description")
+    private String ruleDescription;
+
+    /**
+     * 是否有效(0 否 1 是 )
+     */
+    @TableField(value = "valid_ind")
+    private String validInd;
+
+    /**
+     * 过户车(0 否 1 是 )
+     */
+    @TableField(value = "transfer")
+    private Integer transfer;
+
+    /**
+     * 新旧车(0 否 1 是 )
+     */
+    @TableField(value = "old_and_new")
+    private Integer oldAndNew;
+
+    /**
+     * 新能源车(0 否 1 是 )
+     */
+    @TableField(value = "new_energy")
+    private Integer newEnergy;
+
+    /**
+     * 续保车(0 否 1 是 )
+     */
+    @TableField(value = "renewal")
+    private Integer renewal;
+
+    /**
+     * 车辆大类
+     */
+    @TableField(value = "vehicle_category")
+    private String vehicleCategory;
+
+    /**
+     * 使用性质
+     */
+    @TableField(value = "nature_of_use")
+    private String natureOfUse;
+
+    /**
+     * 客车座位数(最小)
+     */
+    @TableField(value = "min_seats")
+    private Integer minSeats;
+
+    /**
+     * 客车座位数(最大)
+     */
+    @TableField(value = "max_seats")
+    private Integer maxSeats;
+
+    /**
+     * 货车吨位数(最小)
+     */
+    @TableField(value = "min_truck_tonnage")
+    private Double minTruckTonnage;
+
+    /**
+     * 货车吨位数(最大)
+     */
+    @TableField(value = "max_truck_tonnage")
+    private Double maxTruckTonnage;
+
+    /**
+     * 新车购置价(最小)
+     */
+    @TableField(value = "min_purchase_price")
+    private Integer minPurchasePrice;
+
+    /**
+     * 新车购置价(最大)
+     */
+    @TableField(value = "max_purchase_price")
+    private Integer maxPurchasePrice;
+
+    /**
+     * 核定载质量(最小)
+     */
+    @TableField(value = "min_approved_load_capacity")
+    private Double minApprovedLoadCapacity;
+
+    /**
+     * 核定载质量(最大)
+     */
+    @TableField(value = "max_approved_load_capacity")
+    private Double maxApprovedLoadCapacity;
+
+    /**
+     * 交强险保费(最小)
+     */
+    @TableField(value = "min_compulsory_insurance_premium")
+    private Integer minCompulsoryInsurancePremium;
+
+    /**
+     * 交强险保费(最大)
+     */
+    @TableField(value = "max_compulsory_insurance_premium")
+    private Integer maxCompulsoryInsurancePremium;
+
+    /**
+     * 车船税金额(最小)
+     */
+    @TableField(value = "min_tax_amount")
+    private Integer minTaxAmount;
+
+    /**
+     * 车船税金额(最大)
+     */
+    @TableField(value = "max_tax_amount")
+    private Integer maxTaxAmount;
+
+    /**
+     * 三者险保额(最小)
+     */
+    @TableField(value = "min_the_three_premium")
+    private Integer minTheThreePremium;
+
+    /**
+     * 三者险保额(最大)
+     */
+    @TableField(value = "max_the_three_premium")
+    private Integer maxTheThreePremium;
+
+    /**
+     * 随车产品保费(最小)
+     */
+    @TableField(value = "min_onboard_products_premium")
+    private Integer minOnboardProductsPremium;
+
+    /**
+     * 随车产品保费(最大)
+     */
+    @TableField(value = "max_onboard_products_premium")
+    private Integer maxOnboardProductsPremium;
+
+    /**
+     * 商业险折扣(最小)
+     */
+    @TableField(value = "min_commercial_insurance_discount")
+    private Double minCommercialInsuranceDiscount;
+
+    /**
+     * 商业险折扣(最大)
+     */
+    @TableField(value = "max_commercial_insurance_discount")
+    private Double maxCommercialInsuranceDiscount;
+
+    /**
+     * 交强险折扣(最小)
+     */
+    @TableField(value = "min_compulsory_insurance_discount")
+    private Double minCompulsoryInsuranceDiscount;
+
+    /**
+     * 交强险折扣(最大)
+     */
+    @TableField(value = "max_compulsory_insurance_discount")
+    private Double maxCompulsoryInsuranceDiscount;
+
+    /**
+     * 保司评分(最小)
+     */
+    @TableField(value = "min_score")
+    private Double minScore;
+
+    /**
+     * 保司评分(最大)
+     */
+    @TableField(value = "max_score")
+    private Double maxScore;
+
+    /**
+     * 预期赔付率(最小)
+     */
+    @TableField(value = "min_loss_ration")
+    private Double minLossRation;
+
+    /**
+     * 预期赔付率(最大)
+     */
+    @TableField(value = "max_loss_ration")
+    private Double maxLossRation;
+
+    /**
+     * 车牌号
+     */
+    @TableField(value = "license_number")
+    private String licenseNumber;
+
+    /**
+     * 车牌因子是否含暂未上牌
+     */
+    @TableField(value = "contain_noLicense")
+    private String containNoLicense;
+
+
+    /**
+     * 司机险保额(最小)
+     */
+    @TableField(value = "min_driver_amount")
+    private Integer minDriverAmount;
+
+    /**
+     * 司机险保额(最大)
+     */
+    @TableField(value = "max_driver_amount")
+    private Integer maxDriverAmount;
+
+    /**
+     * 乘客险保额(最小)
+     */
+    @TableField(value = "min_passenger_amount")
+    private Integer minPassengerAmount;
+
+    /**
+     * 乘客险保额(最大)
+     */
+    @TableField(value = "max_passenger_amount")
+    private Integer maxPassengerAmount;
+
+    /**
+     * 司机乘客关联关系
+     */
+    @TableField(value = "driver_passenger_relation")
+    private String driverPassengerRelation;
+
+
+    /**
+     * 被保人年龄(最小)
+     */
+    @TableField(value = "min_insure_age")
+    private Integer minInsureAge;
+
+    /**
+     * 被保人年龄(最大)
+     */
+    @TableField(value = "max_insure_age")
+    private Integer maxInsureAge;
+
+    /**
+     * 车主年龄(最小)
+     */
+    @TableField(value = "min_car_owner_age")
+    private Integer minCarOwnerAge;
+
+    /**
+     * 车主年龄(最大)
+     */
+    @TableField(value = "max_car_owner_age")
+    private Integer maxCarOwnerAge;
+
+    /**
+     * 医保外用任意险别
+     */
+    @TableField(value = "any_medical_amount")
+    private Integer anyMedicalAmount;
+
+    /**
+     * 医保外用三者
+     */
+    @TableField(value = "third_medical_amount")
+    private Integer thirdMedicalAmount;
+
+    /**
+     * 医保外用司机
+     */
+    @TableField(value = "driver_medical_amount")
+    private Integer driverMedicalAmount;
+
+    /**
+     * 医保外用乘客
+     */
+    @TableField(value = "passenger_medical_amount")
+    private Integer passengerMedicalAmount;
+
+    @TableField(value = "operator")
+    private String operator;
+
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @TableField(value = "operator_time")
+    private String operatorTime;
+
+    /**
+     * @param agreementId                         协议id
+     * @param ptlAgreementUndwrtRulesSaveDtoList 协议费用 Dto list
+     * @return List<PtlAgreementProductCosts>
+     */
+    public static List<PtlAgreementUndwrtRulesHistory> toPtlAgreementUndwrtRulesSaveDtoList(String agreementId, List<PtlAgreementUndwrtRulesSaveDto> ptlAgreementUndwrtRulesSaveDtoList) {
+        return ptlAgreementUndwrtRulesSaveDtoList.stream().map(ptlAgreementUndwrtRulesSaveDto -> new PtlAgreementUndwrtRulesHistory(agreementId,  ptlAgreementUndwrtRulesSaveDto)).collect(Collectors.toList());
+    }
+
+    public PtlAgreementUndwrtRulesHistory(String agreementId, PtlAgreementUndwrtRulesSaveDto ptlAgreementUndwrtRulesSaveDto) {
+        this.agreementId = agreementId;
+        BeanUtils.copyProperties(ptlAgreementUndwrtRulesSaveDto, this);
+    }
+
+    public PtlAgreementUndwrtRulesHistory(String operator,String operatorType, PtlAgreementUndwrtRules ptlAgreementUndwrtRules) {
+        this.operator = operator;
+        this.operatorType = operatorType;
+        this.operatorTime = DateUtil.format(DateUtil.date(), "yyyy-MM-dd HH:mm:ss");
+        BeanUtils.copyProperties(ptlAgreementUndwrtRules, this);
+        this.setId(null);
+    }
+
+
+    public static int getObjectHashCode(Object o, int result) {
+        return 31 * result + (o != null ? o.hashCode() : 0);
+    }
+
+    public int getHashCode() {
+        int result = 0;
+        result = getObjectHashCode(this.agreementId, result);
+        result = getObjectHashCode(this.productType, result);
+        result = getObjectHashCode(this.transfer, result);
+        result = getObjectHashCode(this.oldAndNew, result);
+        result = getObjectHashCode(this.newEnergy, result);
+        result = getObjectHashCode(this.renewal, result);
+        result = getObjectHashCode(this.vehicleCategory, result);
+        result = getObjectHashCode(this.natureOfUse, result);
+        result = getObjectHashCode(this.minSeats, result);
+        result = getObjectHashCode(this.maxSeats, result);
+        result = getObjectHashCode(this.minTruckTonnage, result);
+        result = getObjectHashCode(this.maxTruckTonnage, result);
+        result = getObjectHashCode(this.minPurchasePrice, result);
+        result = getObjectHashCode(this.maxPurchasePrice, result);
+        result = getObjectHashCode(this.minApprovedLoadCapacity, result);
+        result = getObjectHashCode(this.maxApprovedLoadCapacity, result);
+        result = getObjectHashCode(this.minCompulsoryInsurancePremium, result);
+        result = getObjectHashCode(this.maxCompulsoryInsurancePremium, result);
+        result = getObjectHashCode(this.minTaxAmount, result);
+        result = getObjectHashCode(this.maxTaxAmount, result);
+        result = getObjectHashCode(this.minTheThreePremium, result);
+        result = getObjectHashCode(this.maxTheThreePremium, result);
+        result = getObjectHashCode(this.minOnboardProductsPremium, result);
+        result = getObjectHashCode(this.maxOnboardProductsPremium, result);
+        result = getObjectHashCode(this.minCommercialInsuranceDiscount, result);
+        result = getObjectHashCode(this.maxCommercialInsuranceDiscount, result);
+        result = getObjectHashCode(this.minCompulsoryInsuranceDiscount, result);
+        result = getObjectHashCode(this.maxCompulsoryInsuranceDiscount, result);
+        result = getObjectHashCode(this.minScore, result);
+        result = getObjectHashCode(this.maxScore, result);
+        result = getObjectHashCode(this.minLossRation, result);
+        result = getObjectHashCode(this.maxLossRation, result);
+        result = getObjectHashCode(this.licenseNumber, result);
+        result = getObjectHashCode(this.ruleDescription, result);
+        result = getObjectHashCode(this.containNoLicense, result);
+        result = getObjectHashCode(this.minDriverAmount, result);
+        result = getObjectHashCode(this.maxDriverAmount, result);
+        result = getObjectHashCode(this.minPassengerAmount, result);
+        result = getObjectHashCode(this.maxPassengerAmount, result);
+        result = getObjectHashCode(this.driverPassengerRelation, result);
+        result = getObjectHashCode(this.minInsureAge,result);
+        result = getObjectHashCode(this.maxInsureAge,result);
+        result = getObjectHashCode(this.minCarOwnerAge,result);
+        result = getObjectHashCode(this.maxCarOwnerAge,result);
+        result = getObjectHashCode(this.anyMedicalAmount,result);
+        result = getObjectHashCode(this.thirdMedicalAmount,result);
+        result = getObjectHashCode(this.driverMedicalAmount,result);
+        result = getObjectHashCode(this.passengerMedicalAmount,result);
+        return result;
+    }
+
+
+    public static Map<Integer, PtlAgreementUndwrtRulesHistory> getIntegerMap(List<PtlAgreementUndwrtRulesHistory> ptlAgreementUndwrtRulesList) {
+        Map<Integer, PtlAgreementUndwrtRulesHistory> map = new HashMap<>();
+        ptlAgreementUndwrtRulesList.forEach(x -> {
+            int hashCode = x.getHashCode();
+            map.put(hashCode, x);
+        });
+        return map;
+    }
+
+}

+ 107 - 0
src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreementAttributionHistory.java

@@ -0,0 +1,107 @@
+package com.ydtech.modules.protocol.entity.po;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 协议归属信息
+ *
+ * @TableName ptl_agreement_attribution
+ */
+@TableName(value = "ptl_agreement_attribution_history", autoResultMap = true)
+@Data
+@ToString
+@EqualsAndHashCode
+@AllArgsConstructor
+@NoArgsConstructor
+public class PtlAgreementAttributionHistory implements Serializable {
+
+    /**
+     * 协议id
+     */
+    @TableId(value = "id")
+    private String id;
+
+    @TableField(value = "batch")
+    private String batch;
+
+    /**
+     * 保险公司ID
+     */
+    @TableField(value = "ins_company_id")
+    private String insCompanyId;
+
+    /**
+     * 保险公司名称
+     */
+    @TableField(value = "ins_company_name")
+    private String insCompanyName;
+
+    /**
+     * 模板id
+     */
+    @TableField(value = "template_id")
+    private String templateId;
+
+    /**
+     * api类型(1、api对接,2、python对接)
+     */
+    @TableField(value = "api_type")
+    private Integer apiType;
+
+    /**
+     * 字段集
+     */
+    @TableField(value = "fields", typeHandler = FastjsonTypeHandler.class)
+    private JSONArray fields;
+
+    /**
+     * 保险公司账号
+     */
+    @TableField(value = "username")
+    private String username;
+
+    /**
+     * 保险公司密码
+     */
+    @TableField(value = "password")
+    private String password;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+
+    public PtlAgreementAttributionHistory(String batch,String agreementId, String insCompanyId, String insCompanyName, PtlAgreementAttributionDto ptlAgreementAttributionDto) {
+        this.batch = batch;
+        this.id = agreementId;
+        this.insCompanyId = insCompanyId;
+        this.insCompanyName = insCompanyName;
+        this.templateId = ptlAgreementAttributionDto.getTemplateId();
+        this.apiType = ptlAgreementAttributionDto.getApiType();
+        this.fields = JSON.parseArray(JSON.toJSONString(ptlAgreementAttributionDto.getFields()));
+        this.username = ptlAgreementAttributionDto.getUsername();
+        this.password = ptlAgreementAttributionDto.getPassword();
+    }
+
+    public PtlAgreementAttributionHistory(String batch,String agreementId, String insCompanyId, String insCompanyName, PtlAgreementAttribution ptlAgreementAttribution) {
+        this.batch = batch;
+        this.id = agreementId;
+        this.insCompanyId = insCompanyId;
+        this.insCompanyName = insCompanyName;
+        this.templateId = ptlAgreementAttribution.getTemplateId();
+        this.apiType = ptlAgreementAttribution.getApiType();
+        this.fields = JSON.parseArray(JSON.toJSONString(ptlAgreementAttribution.getFields()));
+        this.username = ptlAgreementAttribution.getUsername();
+        this.password = ptlAgreementAttribution.getPassword();
+    }
+
+
+}

+ 240 - 0
src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreementHistory.java

@@ -0,0 +1,240 @@
+package com.ydtech.modules.protocol.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.DateUtil;
+import com.ydtech.utils.StringUtils;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jsoup.helper.DataUtil;
+import org.springframework.beans.BeanUtils;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+/**
+ * 协议信息表
+ *
+ * @TableName ptl_agreement
+ */
+@TableName(value = "ptl_agreement_history")
+@Data
+public class PtlAgreementHistory implements Serializable {
+    /**
+     * 主键/自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    @TableField(value = "batch")
+    private String batch;
+
+    /**
+     * 供应商类型
+     * 1 渠道
+     * 2 财险
+     * 3 寿险
+     */
+    @TableField(value = "companies_type")
+    private String companiesType;
+
+    /**
+     * 协议id
+     */
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    /**
+     * 协议类型
+     * 1  平台协议-平台结算
+     * 2  私有协议-自行结算
+     * 3  网销协议-自行结算
+     */
+    @TableField(value = "agreement_type")
+    private String agreementType;
+
+    /**
+     * 协议代码
+     */
+    @TableField(value = "agreement_code")
+    private String agreementCode;
+
+    /**
+     * 协议名称
+     */
+    @TableField(value = "agreement_name")
+    private String agreementName;
+
+    /**
+     * 承保描述
+     */
+    @TableField(value = "underwriting_description")
+    private String underwritingDescription;
+
+    /**
+     * 协议简称
+     */
+    @TableField(value = "agreement_abbreviation")
+    private String agreementAbbreviation;
+
+    /**
+     * 合作公司 id
+     */
+    @TableField(value = "partner_companies_id")
+    private String partnerCompaniesId;
+
+    /**
+     * 保险公司id
+     */
+    @TableField(value = "association_companies_id")
+    private String associationCompaniesId;
+
+    /**
+     * 关联-保险公司
+     */
+    @TableField(value = "insurance_company")
+    private String insuranceCompany;
+
+    /**
+     * 关联-保险公司id
+     */
+    @TableField(value = "insurance_company_id")
+    private String insuranceCompanyId;
+
+    /**
+     * 协议起期
+     */
+    @TableField(value = "start_date")
+    private String startDate;
+
+    /**
+     * 协议止期
+     */
+    @TableField(value = "end_date")
+    private String endDate;
+
+    /**
+     * 结算周期
+     */
+    @TableField(value = "money_time")
+    private Integer moneyTime;
+
+    /**
+     * 保单匹配协议日期类型(保单日期类型)
+     */
+    @TableField(value = "match_type")
+    private String matchType;
+
+    /**
+     * 对接人
+     */
+    @TableField(value = "docking_person")
+    private String dockingPerson;
+
+    /**
+     * 联系方式(对接人)
+     */
+    @TableField(value = "docking_phone")
+    private String dockingPhone;
+
+    /**
+     * 含增值税结算
+     */
+    @TableField(value = "with_tax")
+    private String withTax;
+
+    /**
+     * 佣金发放方式
+     */
+    @TableField(value = "money_type")
+    private String moneyType;
+
+    /**
+     * 有效状态
+     */
+    @TableField(value = "valid_status")
+    private String validStatus;
+
+    /**
+     * 附件id
+     */
+    @TableField(value = "file_id")
+    private String fileId;
+
+    /**
+     * 审核内容
+     */
+    @TableField(value = "audit_content")
+    private String auditContent;
+
+    /**
+     * 审核状态 0 申请审核 1 审核通过 2 审核不通过
+     */
+    @TableField(value = "audit_status")
+    private Integer auditStatus;
+
+    /**
+     * 序号
+     */
+    @ApiModelProperty("serial_number")
+    private Integer serialNumber;
+
+    /**
+     * 创建者
+     */
+    @TableField(value = "creator")
+    private String creator;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    /**
+     * 修改人
+     */
+    @TableField(value = "modified_by")
+    private String modifiedBy;
+
+    /**
+     * 修改时间
+     */
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+
+    @TableField(value = "operator")
+    private String operator;
+
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @TableField(value = "operator_time")
+    private String operatorTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    public void generateTheProtocolCode() {
+        AssertionUtils.isFail(StringUtils.isNullOrEmpty(this.getPartnerCompaniesId()), "请检查合作保险公司是否选择");
+        String string = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE);
+        this.agreementCode = this.getPartnerCompaniesId() + string;
+    }
+
+    public PtlAgreementHistory(){}
+
+    public PtlAgreementHistory(String batch,String userName,String operatorType,PtlAgreement ptlAgreement){
+        this.operator = userName;
+        this.operatorType = operatorType;
+        this.operatorTime = DateUtil.getDateFormat(new Date(),"yyyy-MM-dd HH:mm:ss");
+        this.batch = batch;
+        BeanUtils.copyProperties(ptlAgreement,this);
+    }
+
+}

+ 574 - 0
src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreementProductCostsHistory.java

@@ -0,0 +1,574 @@
+package com.ydtech.modules.protocol.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementProductCostsSaveDto;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 协议产品费用历史记录
+ *
+ * @TableName ptl_agreement_product_costs_history
+ */
+@TableName(value = "ptl_agreement_product_costs_history")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PtlAgreementProductCostsHistory implements Serializable {
+    /**
+     * 主键/自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    /**
+     * 协议id
+     */
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    /**
+     * 产品id
+     */
+    @TableField(value = "product_id")
+    private String productId;
+
+    /**
+     * 产品名称
+     */
+    @TableField(value = "product_name")
+    private String productName;
+
+    /**
+     * 费用描述
+     */
+    @TableField(value = "costs_description")
+    private String costsDescription;
+
+    /**
+     * 费用起期
+     */
+    @TableField(value = "costs_start_date")
+    private LocalDateTime costsStartDate;
+
+    /**
+     * 费用止期
+     */
+    @TableField(value = "costs_end_date")
+    private LocalDateTime costsEndDate;
+
+    /**
+     * 溢出保费(交强)
+     */
+    @TableField(value = "jq_spillover_premiums")
+    private String jqSpilloverPremiums;
+
+    /**
+     * 溢出比例(交强)
+     */
+    @TableField(value = "jq_spillover_proportion")
+    private String jqSpilloverProportion;
+
+    /**
+     * 新车费用比例(交强)
+     */
+    @TableField(value = "jq_new_car_costs_proportion")
+    private String jqNewCarCostsProportion;
+
+    /**
+     * 旧车费用比例(交强)
+     */
+    @TableField(value = "jq_old_car_costs_proportion")
+    private String jqOldCarCostsProportion;
+
+    /**
+     * 总费用比例(交强)
+     */
+    @TableField(value = "jq_costs_proportion")
+    private String jqCostsProportion;
+
+    /**
+     * 费用级别(交强)
+     */
+    @TableField(value = "jq_costs_level")
+    private String jqCostsLevel;
+
+    /**
+     * 新车其他费用比例(交强)
+     */
+    @TableField(value = "jq_new_car_other_costs_proportion")
+    private String jqNewCarOtherCostsProportion;
+
+    /**
+     * 旧车其他费用比例(交强)
+     */
+    @TableField(value = "jq_old_car_other_costs_proportion")
+    private String jqOldCarOtherCostsProportion;
+
+    /**
+     * 溢出保费(商业)
+     */
+    @TableField(value = "sy_spillover_premiums")
+    private String sySpilloverPremiums;
+
+    /**
+     * 溢出比例(商业)
+     */
+    @TableField(value = "sy_spillover_proportion")
+    private String sySpilloverProportion;
+
+    /**
+     * 新车费用比例(商业)
+     */
+    @TableField(value = "sy_new_car_costs_proportion")
+    private String syNewCarCostsProportion;
+
+    /**
+     * 旧车费用比例(商业)
+     */
+    @TableField(value = "sy_old_car_costs_proportion")
+    private String syOldCarCostsProportion;
+
+    /**
+     * 总费用比例(商业)
+     */
+    @TableField(value = "sy_costs_proportion")
+    private String syCostsProportion;
+
+    /**
+     * 费用级别(商业)
+     */
+    @TableField(value = "sy_costs_level")
+    private String syCostsLevel;
+
+    /**
+     * 新车其他费用比例(商业)
+     */
+    @TableField(value = "sy_new_car_other_costs_proportion")
+    private String syNewCarOtherCostsProportion;
+
+    /**
+     * 旧车其他费用比例(商业)
+     */
+    @TableField(value = "sy_old_car_other_costs_proportion")
+    private String syOldCarOtherCostsProportion;
+
+    /**
+     * 过户车(0 否 1 是 )
+     */
+    @TableField(value = "transfer")
+    private Integer transfer;
+
+    /**
+     * 新旧车(0 否 1 是 )
+     */
+    @TableField(value = "old_and_new")
+    private Integer oldAndNew;
+
+    /**
+     * 过户车(0 否 1 是 )
+     */
+    @TableField(value = "new_energy")
+    private Integer newEnergy;
+
+    /**
+     * 续保车(0 否 1 是 )
+     */
+    @TableField(value = "renewal")
+    private Integer renewal;
+
+    /**
+     * 车辆大类
+     */
+    @TableField(value = "vehicle_category")
+    private String vehicleCategory;
+
+    /**
+     * 使用性质
+     */
+    @TableField(value = "nature_of_use")
+    private String natureOfUse;
+
+    /**
+     * 客车座位数(最小)
+     */
+    @TableField(value = "min_seats")
+    private Integer minSeats;
+
+    /**
+     * 客车座位数(最大)
+     */
+    @TableField(value = "max_seats")
+    private Integer maxSeats;
+
+    /**
+     * 货车吨位数(最小)
+     */
+    @TableField(value = "min_truck_tonnage")
+    private Double minTruckTonnage;
+
+    /**
+     * 货车吨位数(最大)
+     */
+    @TableField(value = "max_truck_tonnage")
+    private Double maxTruckTonnage;
+
+    /**
+     * 新车购置价(最小)
+     */
+    @TableField(value = "min_purchase_price")
+    private Integer minPurchasePrice;
+
+    /**
+     * 新车购置价(最大)
+     */
+    @TableField(value = "max_purchase_price")
+    private Integer maxPurchasePrice;
+
+    /**
+     * 核定载质量(最小)
+     */
+    @TableField(value = "min_approved_load_capacity")
+    private Double minApprovedLoadCapacity;
+
+    /**
+     * 核定载质量(最大)
+     */
+    @TableField(value = "max_approved_load_capacity")
+    private Double maxApprovedLoadCapacity;
+
+    /**
+     * 交强险保费(最小)
+     */
+    @TableField(value = "min_compulsory_insurance_premium")
+    private Integer minCompulsoryInsurancePremium;
+
+    /**
+     * 交强险保费(最大)
+     */
+    @TableField(value = "max_compulsory_insurance_premium")
+    private Integer maxCompulsoryInsurancePremium;
+
+    /**
+     * 车船税金额(最小)
+     */
+    @TableField(value = "min_tax_amount")
+    private Integer minTaxAmount;
+
+    /**
+     * 车船税金额(最大)
+     */
+    @TableField(value = "max_tax_amount")
+    private Integer maxTaxAmount;
+
+    /**
+     * 三者险保额(最小)
+     */
+    @TableField(value = "min_the_three_premium")
+    private Integer minTheThreePremium;
+
+    /**
+     * 三者险保额(最大)
+     */
+    @TableField(value = "max_the_three_premium")
+    private Integer maxTheThreePremium;
+
+    /**
+     * 随车产品保费(最小)
+     */
+    @TableField(value = "min_onboard_products_premium")
+    private Integer minOnboardProductsPremium;
+
+    /**
+     * 随车产品保费(最大)
+     */
+    @TableField(value = "max_onboard_products_premium")
+    private Integer maxOnboardProductsPremium;
+
+    /**
+     * 商业险折扣(最小)
+     */
+    @TableField(value = "min_commercial_insurance_discount")
+    private Double minCommercialInsuranceDiscount;
+
+    /**
+     * 商业险折扣(最大)
+     */
+    @TableField(value = "max_commercial_insurance_discount")
+    private Double maxCommercialInsuranceDiscount;
+
+    /**
+     * 交强险折扣(最小)
+     */
+    @TableField(value = "min_compulsory_insurance_discount")
+    private Double minCompulsoryInsuranceDiscount;
+
+    /**
+     * 交强险折扣(最大)
+     */
+    @TableField(value = "max_compulsory_insurance_discount")
+    private Double maxCompulsoryInsuranceDiscount;
+
+    /**
+     * 保司评分(最小)
+     */
+    @TableField(value = "min_score")
+    private Double minScore;
+
+    /**
+     * 保司评分(最大)
+     */
+    @TableField(value = "max_score")
+    private Double maxScore;
+
+    /**
+     * 预期赔付率(最小)
+     */
+    @TableField(value = "min_loss_ration")
+    private Double minLossRation;
+
+    /**
+     * 预期赔付率(最大)
+     */
+    @TableField(value = "max_loss_ration")
+    private Double maxLossRation;
+
+    /**
+     * 车牌号
+     */
+    @TableField(value = "license_number")
+    private String licenseNumber;
+
+    /**
+     * 车牌因子是否含暂未上牌
+     */
+    @TableField(value = "contain_noLicense")
+    private String containNoLicense;
+
+    /**
+     * 0 不是 1 是
+     */
+    @TableField(value = "history")
+    private Integer history;
+
+    /**
+     * 成为历史记录的时间
+     */
+    @TableField(value = "history_time")
+    private LocalDateTime historyTime;
+
+    /**
+     * 司机险保额(最小)
+     */
+    @TableField(value = "min_driver_amount")
+    private Integer minDriverAmount;
+
+    /**
+     * 司机险保额(最大)
+     */
+    @TableField(value = "max_driver_amount")
+    private Integer maxDriverAmount;
+
+    /**
+     * 乘客险保额(最小)
+     */
+    @TableField(value = "min_passenger_amount")
+    private Integer minPassengerAmount;
+
+    /**
+     * 乘客险保额(最大)
+     */
+    @TableField(value = "max_passenger_amount")
+    private Integer maxPassengerAmount;
+
+    /**
+     * 司机乘客关联关系
+     */
+    @TableField(value = "driver_passenger_relation")
+    private String driverPassengerRelation;
+
+    /**
+     * 方案优先级别
+     */
+    @TableField(value = "priority_level")
+    private Integer priorityLevel;
+
+    /**
+     * 被保人年龄(最小)
+     */
+    @TableField(value = "min_insure_age")
+    private Integer minInsureAge;
+
+    /**
+     * 被保人年龄(最大)
+     */
+    @TableField(value = "max_insure_age")
+    private Integer maxInsureAge;
+
+    /**
+     * 车主年龄(最小)
+     */
+    @TableField(value = "min_car_owner_age")
+    private Integer minCarOwnerAge;
+
+    /**
+     * 车主年龄(最大)
+     */
+    @TableField(value = "max_car_owner_age")
+    private Integer maxCarOwnerAge;
+
+    /**
+     * 医保外用任意险别
+     */
+    @TableField(value = "any_medical_amount")
+    private Integer anyMedicalAmount;
+
+    /**
+     * 医保外用三者
+     */
+    @TableField(value = "third_medical_amount")
+    private Integer thirdMedicalAmount;
+
+    /**
+     * 医保外用司机
+     */
+    @TableField(value = "driver_medical_amount")
+    private Integer driverMedicalAmount;
+
+    /**
+     * 医保外用乘客
+     */
+    @TableField(value = "passenger_medical_amount")
+    private Integer passengerMedicalAmount;
+
+    private String operatorType;
+
+    private String operator;
+
+    private String operatorTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+
+
+//    public PtlAgreementProductCostsHistory(String operator, String operatorTime, String operatorType, PtlAgreementProductCosts ptlAgreementProductCosts) {
+//        this.agreementId = agreementId;
+//        this.productId = productId;
+//        this.productName = productName;
+//        this.setOperator(operator);
+//        this.setOperatorTime(operatorTime);
+//        this.setOperatorType(operatorType);
+//        BeanUtils.copyProperties(ptlAgreementProductCosts, this);
+//    }
+
+    public PtlAgreementProductCostsHistory(String operator,String operatorTime,String operatorType,PtlAgreementProductCosts ptlAgreementProductCosts) {
+        this.setOperator(operator);
+        this.setOperatorTime(operatorTime);
+        this.setOperatorType(operatorType);
+        BeanUtils.copyProperties(ptlAgreementProductCosts, this);
+        this.setId(null);
+    }
+
+
+    public static int getObjectHashCode(Object o, int result) {
+        return 31 * result + (o != null ? o.hashCode() : 0);
+    }
+
+    public int getHashCode() {
+        int result = 0;
+        result = getObjectHashCode(this.agreementId, result);
+        result = getObjectHashCode(this.productId, result);
+        result = getObjectHashCode(this.productName, result);
+        result = getObjectHashCode(this.jqSpilloverPremiums, result);
+        result = getObjectHashCode(this.jqSpilloverProportion, result);
+        result = getObjectHashCode(this.jqNewCarCostsProportion, result);
+        result = getObjectHashCode(this.jqOldCarCostsProportion, result);
+        result = getObjectHashCode(this.jqCostsProportion, result);
+        result = getObjectHashCode(this.jqCostsLevel, result);
+        result = getObjectHashCode(this.jqNewCarOtherCostsProportion, result);
+        result = getObjectHashCode(this.jqOldCarOtherCostsProportion, result);
+        result = getObjectHashCode(this.sySpilloverPremiums, result);
+        result = getObjectHashCode(this.sySpilloverProportion, result);
+        result = getObjectHashCode(this.syNewCarCostsProportion, result);
+        result = getObjectHashCode(this.syOldCarCostsProportion, result);
+        result = getObjectHashCode(this.syCostsProportion, result);
+        result = getObjectHashCode(this.syCostsLevel, result);
+        result = getObjectHashCode(this.syNewCarOtherCostsProportion, result);
+        result = getObjectHashCode(this.syOldCarOtherCostsProportion, result);
+        result = getObjectHashCode(this.transfer, result);
+        result = getObjectHashCode(this.oldAndNew, result);
+        result = getObjectHashCode(this.newEnergy, result);
+        result = getObjectHashCode(this.renewal, result);
+        result = getObjectHashCode(this.vehicleCategory, result);
+        result = getObjectHashCode(this.natureOfUse, result);
+        result = getObjectHashCode(this.minSeats, result);
+        result = getObjectHashCode(this.maxSeats, result);
+        result = getObjectHashCode(this.minTruckTonnage, result);
+        result = getObjectHashCode(this.maxTruckTonnage, result);
+        result = getObjectHashCode(this.minPurchasePrice, result);
+        result = getObjectHashCode(this.maxPurchasePrice, result);
+        result = getObjectHashCode(this.minApprovedLoadCapacity, result);
+        result = getObjectHashCode(this.maxApprovedLoadCapacity, result);
+        result = getObjectHashCode(this.minCompulsoryInsurancePremium, result);
+        result = getObjectHashCode(this.maxCompulsoryInsurancePremium, result);
+        result = getObjectHashCode(this.minTaxAmount, result);
+        result = getObjectHashCode(this.maxTaxAmount, result);
+        result = getObjectHashCode(this.minTheThreePremium, result);
+        result = getObjectHashCode(this.maxTheThreePremium, result);
+        result = getObjectHashCode(this.minOnboardProductsPremium, result);
+        result = getObjectHashCode(this.maxOnboardProductsPremium, result);
+        result = getObjectHashCode(this.minCommercialInsuranceDiscount, result);
+        result = getObjectHashCode(this.maxCommercialInsuranceDiscount, result);
+        result = getObjectHashCode(this.minCompulsoryInsuranceDiscount, result);
+        result = getObjectHashCode(this.maxCompulsoryInsuranceDiscount, result);
+        result = getObjectHashCode(this.minScore, result);
+        result = getObjectHashCode(this.maxScore, result);
+        result = getObjectHashCode(this.minLossRation, result);
+        result = getObjectHashCode(this.maxLossRation, result);
+        result = getObjectHashCode(this.licenseNumber, result);
+        result = getObjectHashCode(this.costsDescription, result);
+        result = getObjectHashCode(this.costsStartDate, result);
+        result = getObjectHashCode(this.costsEndDate, result);
+        result = getObjectHashCode(this.containNoLicense, result);
+        result = getObjectHashCode(this.minDriverAmount, result);
+        result = getObjectHashCode(this.maxDriverAmount, result);
+        result = getObjectHashCode(this.minPassengerAmount, result);
+        result = getObjectHashCode(this.maxPassengerAmount, result);
+        result = getObjectHashCode(this.driverPassengerRelation, result);
+        result = getObjectHashCode(this.priorityLevel,result);
+        result = getObjectHashCode(this.minInsureAge,result);
+        result = getObjectHashCode(this.maxInsureAge,result);
+        result = getObjectHashCode(this.minCarOwnerAge,result);
+        result = getObjectHashCode(this.maxCarOwnerAge,result);
+        result = getObjectHashCode(this.anyMedicalAmount,result);
+        result = getObjectHashCode(this.thirdMedicalAmount,result);
+        result = getObjectHashCode(this.driverMedicalAmount,result);
+        result = getObjectHashCode(this.passengerMedicalAmount,result);
+        return result;
+    }
+
+
+    public static Map<Integer, PtlAgreementProductCostsHistory> getIntegerMap(List<PtlAgreementProductCostsHistory> ptlAgreementProductCosts) {
+        Map<Integer, PtlAgreementProductCostsHistory> map = new HashMap<>();
+        ptlAgreementProductCosts.forEach(x -> {
+            int hashCode = x.getHashCode();
+            map.put(hashCode, x);
+        });
+        return map;
+    }
+
+}

+ 20 - 0
src/main/java/com/ydtech/modules/protocol/entity/vo/PltAgreementSchemeSaveVo.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.protocol.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel("协议产品费用实体")
+public class PltAgreementSchemeSaveVo {
+
+
+
+    @ApiModelProperty("产品方案")
+    private PltAgreementSchemeSaveDto scheme;
+}

+ 227 - 0
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementHistoryConvertQueryVo.java

@@ -0,0 +1,227 @@
+package com.ydtech.modules.protocol.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttributionHistory;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementHistory;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PtlAgreementHistoryConvertQueryVo {
+
+    /**
+     * 主键/自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private String id;
+
+    @TableField(value = "batch")
+    private String batch;
+
+    /**
+     * 供应商类型
+     * 1 渠道
+     * 2 财险
+     * 3 寿险
+     */
+    @TableField(value = "companies_type")
+    private String companiesType;
+
+    /**
+     * 协议id
+     */
+    @TableField(value = "agreement_id")
+    private String agreementId;
+
+    /**
+     * 协议类型
+     * 1  平台协议-平台结算
+     * 2  私有协议-自行结算
+     * 3  网销协议-自行结算
+     */
+    @TableField(value = "agreement_type")
+    private String agreementType;
+
+    /**
+     * 协议代码
+     */
+    @TableField(value = "agreement_code")
+    private String agreementCode;
+
+    /**
+     * 协议名称
+     */
+    @TableField(value = "agreement_name")
+    private String agreementName;
+
+    /**
+     * 承保描述
+     */
+    @TableField(value = "underwriting_description")
+    private String underwritingDescription;
+
+    /**
+     * 协议简称
+     */
+    @TableField(value = "agreement_abbreviation")
+    private String agreementAbbreviation;
+
+    /**
+     * 合作公司 id
+     */
+    @TableField(value = "partner_companies_id")
+    private String partnerCompaniesId;
+
+    /**
+     * 保险公司id
+     */
+    @TableField(value = "association_companies_id")
+    private String associationCompaniesId;
+
+    /**
+     * 关联-保险公司
+     */
+    @TableField(value = "insurance_company")
+    private String insuranceCompany;
+
+    /**
+     * 关联-保险公司id
+     */
+    @TableField(value = "insurance_company_id")
+    private String insuranceCompanyId;
+
+    /**
+     * 协议起期
+     */
+    @TableField(value = "start_date")
+    private String startDate;
+
+    /**
+     * 协议止期
+     */
+    @TableField(value = "end_date")
+    private String endDate;
+
+    /**
+     * 结算周期
+     */
+    @TableField(value = "money_time")
+    private Integer moneyTime;
+
+    /**
+     * 保单匹配协议日期类型(保单日期类型)
+     */
+    @TableField(value = "match_type")
+    private String matchType;
+
+    /**
+     * 对接人
+     */
+    @TableField(value = "docking_person")
+    private String dockingPerson;
+
+    /**
+     * 联系方式(对接人)
+     */
+    @TableField(value = "docking_phone")
+    private String dockingPhone;
+
+    /**
+     * 含增值税结算
+     */
+    @TableField(value = "with_tax")
+    private String withTax;
+
+    /**
+     * 佣金发放方式
+     */
+    @TableField(value = "money_type")
+    private String moneyType;
+
+    /**
+     * 有效状态
+     */
+    @TableField(value = "valid_status")
+    private String validStatus;
+
+    /**
+     * 附件id
+     */
+    @TableField(value = "file_id")
+    private String fileId;
+
+    /**
+     * 审核内容
+     */
+    @TableField(value = "audit_content")
+    private String auditContent;
+
+    /**
+     * 审核状态 0 申请审核 1 审核通过 2 审核不通过
+     */
+    @TableField(value = "audit_status")
+    private Integer auditStatus;
+
+    /**
+     * 序号
+     */
+    @ApiModelProperty("serial_number")
+    private Integer serialNumber;
+
+    /**
+     * 创建者
+     */
+    @TableField(value = "creator")
+    private String creator;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    /**
+     * 修改人
+     */
+    @TableField(value = "modified_by")
+    private String modifiedBy;
+
+    /**
+     * 修改时间
+     */
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+
+    @TableField(value = "operator")
+    private String operator;
+
+    @TableField(value = "operator_type")
+    private String operatorType;
+
+    @TableField(value = "operator_time")
+    private String operatorTime;
+
+//    @ApiModelProperty("产品方案")
+//    private List<PltAgreementSchemeSaveDto> scheme;
+//
+//    @ApiModelProperty
+//    private List<PtlAgreementNonCarProductCosts> nonCarProductCosts;
+//
+//    @ApiModelProperty("承保规则")
+//    private List<PtlAgreementUndwrtRulesSaveDto> underwritingRules;
+
+    @ApiModelProperty("账号信息")
+    private String ptlAgreementAttribution;
+
+//    @ApiModelProperty("部门授权信息")
+//    private List<PtlAgreementDept> dept;
+
+}

+ 34 - 0
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementHistoryQueryVo.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.protocol.entity.vo;
+
+import com.ydtech.modules.protocol.entity.po.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PtlAgreementHistoryQueryVo {
+
+    @ApiModelProperty("协议信息")
+    private PtlAgreementHistory agreement;
+
+//    @ApiModelProperty("产品方案")
+//    private List<PltAgreementSchemeSaveDto> scheme;
+//
+//    @ApiModelProperty
+//    private List<PtlAgreementNonCarProductCosts> nonCarProductCosts;
+//
+//    @ApiModelProperty("承保规则")
+//    private List<PtlAgreementUndwrtRulesSaveDto> underwritingRules;
+
+    @ApiModelProperty("账号信息")
+    private PtlAgreementAttributionHistory ptlAgreementAttribution;
+
+//    @ApiModelProperty("部门授权信息")
+//    private List<PtlAgreementDept> dept;
+
+}

+ 31 - 0
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementNonVehicleProductCostsVo.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.protocol.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class PtlAgreementNonVehicleProductCostsVo {
+    @ApiModelProperty("协议id")
+    private String id;
+
+    /**
+     * 修改人
+     */
+    @ApiModelProperty(value = "修改人")
+    private String modifiedBy;
+
+    /**
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("待同步非车费用的协议列表")
+    private List<String> syncAgreementIds;
+
+    @ApiModelProperty("非车险产品")
+    private List<PtlAgreementNonCarProductCostsSaveVo> nonCarProductCosts;
+}

+ 9 - 0
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementProductQueryVo.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.protocol.entity.vo;
+
+import com.ydtech.core.page.PageRequest;
+import lombok.Data;
+
+@Data
+public class PtlAgreementProductQueryVo extends PageRequest {
+    private String agreementId;
+}

+ 8 - 8
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementQueryVo.java

@@ -21,14 +21,14 @@ public class PtlAgreementQueryVo {
     @ApiModelProperty("协议信息")
     private PtlAgreement agreement;
 
-    @ApiModelProperty("产品方案")
-    private List<PltAgreementSchemeSaveDto> scheme;
-
-    @ApiModelProperty
-    private List<PtlAgreementNonCarProductCosts> nonCarProductCosts;
-
-    @ApiModelProperty("承保规则")
-    private List<PtlAgreementUndwrtRulesSaveDto> underwritingRules;
+//    @ApiModelProperty("产品方案")
+//    private List<PltAgreementSchemeSaveDto> scheme;
+//
+//    @ApiModelProperty
+//    private List<PtlAgreementNonCarProductCosts> nonCarProductCosts;
+//
+//    @ApiModelProperty("承保规则")
+//    private List<PtlAgreementUndwrtRulesSaveDto> underwritingRules;
 
     @ApiModelProperty("账号信息")
     private PtlAgreementAttribution ptlAgreementAttribution;

+ 0 - 12
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementSaveVo.java

@@ -18,22 +18,10 @@ public class PtlAgreementSaveVo {
     @ApiModelProperty("协议信息")
     private PtlAgreementSaveDto agreement;
 
-    @ApiModelProperty("产品方案")
-    private List<PltAgreementSchemeSaveDto> scheme;
-
-    @ApiModelProperty("非车险产品")
-    private List<PtlAgreementNonCarProductCostsSaveVo> nonCarProductCosts;
-
-    @ApiModelProperty("承保规则")
-    private List<PtlAgreementUndwrtRulesSaveDto> underwritingRules;
-
     @ApiModelProperty("授权部门id")
     private List<String> dept;
 
     @ApiModelProperty("协议归属")
     private PtlAgreementAttributionDto attribution;
 
-    @ApiModelProperty("待同步非车费用的协议列表")
-    private List<String> syncAgreementIds;
-
 }

+ 9 - 0
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementUndwrtRulesQueryVo.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.protocol.entity.vo;
+
+import com.ydtech.core.page.PageRequest;
+import lombok.Data;
+
+@Data
+public class PtlAgreementUndwrtRulesQueryVo extends PageRequest {
+    private String agreementId;
+}

+ 34 - 0
src/main/java/com/ydtech/modules/protocol/entity/vo/PtlAgreementUndwrtRulesSaveVo.java

@@ -0,0 +1,34 @@
+package com.ydtech.modules.protocol.entity.vo;
+
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel("承保规则")
+public class PtlAgreementUndwrtRulesSaveVo {
+
+    @ApiModelProperty("协议id")
+    private String id;
+
+    /**
+     * 修改人
+     */
+    @ApiModelProperty(value = "修改人")
+    private String modifiedBy;
+
+    /**
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+
+
+    @ApiModelProperty("承保规则")
+    private List<PtlAgreementUndwrtRulesSaveDto> underwritingRules;
+}

+ 19 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementAttributionHistoryService.java

@@ -0,0 +1,19 @@
+package com.ydtech.modules.protocol.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttributionHistory;
+
+import java.util.List;
+
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement_attribution(协议归属信息)】的数据库操作Service
+ * @createDate 2023-07-03 09:31:16
+ */
+public interface PtlAgreementAttributionHistoryService extends IService<PtlAgreementAttributionHistory> {
+
+}

+ 28 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementHistoryService.java

@@ -0,0 +1,28 @@
+package com.ydtech.modules.protocol.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementSaveDto;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementHistorySaveDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementHistory;
+import com.ydtech.modules.protocol.entity.vo.*;
+
+import java.util.List;
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service
+ * @createDate 2023-06-05 17:59:52
+ */
+public interface PtlAgreementHistoryService extends IService<PtlAgreementHistory> {
+
+    boolean saveAgreementHistory(PtlAgreementHistory ptlAgreementHistory);
+
+    Page<PtlAgreementHistoryConvertQueryVo> pageHistory(Page page, String agreementId);
+}

+ 22 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementProductCostsHistoryService.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.protocol.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCostsHistory;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementProductQueryVo;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement_product_costs(协议产品费用)】的数据库操作Service
+ * @createDate 2023-06-05 17:59:52
+ */
+@Service
+public interface PtlAgreementProductCostsHistoryService extends IService<PtlAgreementProductCostsHistory> {
+    Page<PtlAgreementProductCostsHistory> pageHistory(Page page,PtlAgreementProductQueryVo ptlAgreementProductQueryVo);
+}

+ 11 - 2
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementProductCostsService.java

@@ -1,9 +1,11 @@
 package com.ydtech.modules.protocol.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementProductQueryVo;
 
 import java.util.List;
 
@@ -26,7 +28,7 @@ public interface PtlAgreementProductCostsService extends IService<PtlAgreementPr
      *
      * @param agreementId 协议id
      */
-    List<PltAgreementSchemeSaveDto> getByAgreementId(String agreementId);
+    Page<PtlAgreementProductCosts> getByAgreementId(Page page, PtlAgreementProductQueryVo ptlAgreementProductQueryVo);
 
     /**
      * 批量提添加产品费用
@@ -34,7 +36,14 @@ public interface PtlAgreementProductCostsService extends IService<PtlAgreementPr
      * @param agreementId 协议id
      * @param scheme      产品
      */
-    void saveBatchProductCosts(String agreementId, List<PltAgreementSchemeSaveDto> scheme);
+    void saveBatchProductCosts(String agreementId, PltAgreementSchemeSaveDto scheme);
+
+    /**
+     * 批量更新产品费用
+     * @param agreementId
+     * @param scheme
+     */
+    void updateBatchProductCosts(String agreementId, PltAgreementSchemeSaveDto scheme);
 
     /**
      * 根据保险公司id 和 配置查询产品费用

+ 60 - 1
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java

@@ -7,8 +7,11 @@ import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementSaveDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementNonCarProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
 import com.ydtech.modules.protocol.entity.vo.*;
 
 import java.util.List;
@@ -47,6 +50,62 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
      */
     HttpResult<Object> saveAgreement(PtlAgreementSaveVo agreement, String userName);
 
+    /**
+     * 添加协议产品费用
+     * @param agreement
+     * @param userName
+     * @return
+     */
+    HttpResult<Object> saveAgreementProduct(PtlAgreementProductCosts agreement, String userName);
+
+
+    /**
+     * 修改协议产品费用
+     * @param agreement
+     * @param userName
+     * @return
+     */
+    HttpResult<Object> updateAgreementProduct(PtlAgreementProductCosts agreement, String userName);
+
+
+    /**
+     *
+     * @param id
+     * @return
+     */
+    HttpResult<Object> deleteAgreementProduct(String id, String userName);
+
+    /**
+     * 添加非车产品协议
+     * @param agreement
+     * @param userName
+     * @return
+     */
+    HttpResult<Object> saveAgreementNonCarProductCosts(PtlAgreementNonVehicleProductCostsVo agreement, String userName);
+
+    /**
+     * 添加承保规则
+     * @param ptlAgreementUndwrtRules
+     * @param userName
+     * @return
+     */
+    HttpResult<Object> saveAgreementUndwrtRules(PtlAgreementUndwrtRules ptlAgreementUndwrtRules, String userName);
+
+    /**
+     * 修改承保规则
+     * @param ptlAgreementUndwrtRules
+     * @param userName
+     * @return
+     */
+    HttpResult<Object> updateAgreementUndwrtRules(PtlAgreementUndwrtRules ptlAgreementUndwrtRules, String userName);
+
+    /**
+     * 删除承保规则
+     * @param id
+     * @param userName
+     * @return
+     */
+    HttpResult<Object> deleteAgreementUndwrtRules(String id, String userName);
     /**
      * 分页查询协议
      *
@@ -69,7 +128,7 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
      * @param agreementId 协议id
      * @return HttpResult
      */
-    HttpResult<Object> deleteAgreement(String agreementId);
+    HttpResult<Object> deleteAgreement(String agreementId,String userName);
 
     /**
      * 修改协议

+ 23 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUndwrtRulesHistoryService.java

@@ -0,0 +1,23 @@
+package com.ydtech.modules.protocol.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementUndwrtRulesHistory;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCostsHistory;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementProductQueryVo;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementUndwrtRulesQueryVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author CXP
+ * @description 针对表【ptl_agreement_undwrt_rules(协议承保规则)】的数据库操作Service
+ * @createDate 2023年12月20日22:26:17
+ */
+public interface PtlAgreementUndwrtRulesHistoryService extends IService<PtlAgreementUndwrtRulesHistory> {
+    Page<PtlAgreementUndwrtRulesHistory> pageHistory(Page page, PtlAgreementUndwrtRulesQueryVo ptlAgreementUndwrtRulesQueryVo);
+}

+ 2 - 1
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementUndwrtRulesService.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.protocol.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
@@ -27,7 +28,7 @@ public interface PtlAgreementUndwrtRulesService extends IService<PtlAgreementUnd
      *
      * @param agreementId 协议id
      */
-    List<PtlAgreementUndwrtRulesSaveDto> getByAgreementId(String agreementId);
+    Page<PtlAgreementUndwrtRules> getByAgreementId(Page page,String agreementId);
 
     Map<String, List<String>> getByLicenseNo(List<String> agreementIdList);
 

+ 26 - 0
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementAttributionHistoryServiceImpl.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.protocol.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.protocol.dao.PtlAgreementAttributionHistoryMapper;
+import com.ydtech.modules.protocol.dao.PtlAgreementAttributionMapper;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttributionHistory;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionHistoryService;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement_attribution(协议归属信息)】的数据库操作Service实现
+ * @createDate 2023-07-03 09:31:16
+ */
+@Service
+public class PtlAgreementAttributionHistoryServiceImpl extends ServiceImpl<PtlAgreementAttributionHistoryMapper, PtlAgreementAttributionHistory>
+        implements PtlAgreementAttributionHistoryService {
+
+}

+ 124 - 0
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementHistoryServiceImpl.java

@@ -0,0 +1,124 @@
+package com.ydtech.modules.protocol.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.config.DictEnumConfig;
+import com.ydtech.constants.enums.dict.DictionaryData;
+import com.ydtech.constants.enums.dict.DictionaryManagement;
+import com.ydtech.constants.enums.dict.agreement.AgreementType;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.core.page.PageResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.esm.model.EsmInsCompany;
+import com.ydtech.modules.esm.service.EsmInsCompanyService;
+import com.ydtech.modules.order.service.InsCrawlerOrderService;
+import com.ydtech.modules.protocol.constants.HistoryStatusConstants;
+import com.ydtech.modules.protocol.dao.PtlAgreementHistoryMapper;
+import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
+import com.ydtech.modules.protocol.entity.constants.PtlApiType;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementSaveDto;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementHistorySaveDto;
+import com.ydtech.modules.protocol.entity.po.*;
+import com.ydtech.modules.protocol.entity.vo.*;
+import com.ydtech.modules.protocol.service.*;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jsoup.helper.DataUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service实现
+ * @createDate 2023-06-05 17:59:52
+ */
+@Service
+public class PtlAgreementHistoryServiceImpl extends ServiceImpl<PtlAgreementHistoryMapper, PtlAgreementHistory> implements PtlAgreementHistoryService {
+
+
+
+    @Override
+    public boolean saveAgreementHistory(PtlAgreementHistory ptlAgreementHistory) {
+        baseMapper.insert(ptlAgreementHistory);
+        return true;
+    }
+
+    @Override
+    public Page<PtlAgreementHistoryConvertQueryVo> pageHistory(Page page, String agreementId) {
+        Page<HashMap> hashMaps = baseMapper.pageHistory(page, agreementId);
+        Page<PtlAgreementHistoryConvertQueryVo> ptlAgreementHistoryQueryVos = new Page();
+        List<PtlAgreementHistoryConvertQueryVo> ptlAgreementHistoryQueryList = new ArrayList<>();
+        for (HashMap hashMap : hashMaps.getRecords()) {
+            PtlAgreementHistoryConvertQueryVo ptlAgreementHistoryConvertQueryVo = new PtlAgreementHistoryConvertQueryVo();
+            PtlAgreementHistory ptlAgreementHistory = new PtlAgreementHistory();
+            JSONObject hashJson = JSONObject.parseObject(JSONObject.toJSONString(hashMap));
+            ptlAgreementHistoryConvertQueryVo.setId(hashJson.getString("id"));
+            ptlAgreementHistoryConvertQueryVo.setBatch(hashJson.getString("batch"));
+            ptlAgreementHistoryConvertQueryVo.setCompaniesType(hashJson.getString("companies_type"));
+            ptlAgreementHistoryConvertQueryVo.setAgreementType(hashJson.getString("agreement_type"));
+            ptlAgreementHistoryConvertQueryVo.setAgreementCode(hashJson.getString("agreement_code"));
+            ptlAgreementHistoryConvertQueryVo.setAgreementName(hashJson.getString("agreement_name"));
+            ptlAgreementHistoryConvertQueryVo.setAgreementAbbreviation(hashJson.getString("agreement_abbreviation"));
+            ptlAgreementHistoryConvertQueryVo.setPartnerCompaniesId(hashJson.getString("partner_companies_id"));
+            ptlAgreementHistoryConvertQueryVo.setAssociationCompaniesId(hashJson.getString("association_companies_id"));
+            ptlAgreementHistoryConvertQueryVo.setInsuranceCompany(hashJson.getString("insurance_company"));
+            ptlAgreementHistoryConvertQueryVo.setInsuranceCompanyId(hashJson.getString("insurance_company_id"));
+            ptlAgreementHistoryConvertQueryVo.setStartDate(hashJson.getString("start_date"));
+            ptlAgreementHistoryConvertQueryVo.setEndDate(hashJson.getString("end_date"));
+            ptlAgreementHistoryConvertQueryVo.setMoneyTime(hashJson.getInteger("money_time"));
+            ptlAgreementHistoryConvertQueryVo.setMatchType(hashJson.getString("match_type"));
+            ptlAgreementHistoryConvertQueryVo.setDockingPerson(hashJson.getString("docking_person"));
+            ptlAgreementHistoryConvertQueryVo.setDockingPhone(hashJson.getString("docking_phone"));
+            ptlAgreementHistoryConvertQueryVo.setWithTax(hashJson.getString("with_tax"));
+            ptlAgreementHistoryConvertQueryVo.setMoneyType(hashJson.getString("money_type"));
+            ptlAgreementHistoryConvertQueryVo.setValidStatus(hashJson.getString("valid_status"));
+            ptlAgreementHistoryConvertQueryVo.setFileId(hashJson.getString("file_id"));
+            ptlAgreementHistoryConvertQueryVo.setAuditContent(hashJson.getString("audit_content"));
+            ptlAgreementHistoryConvertQueryVo.setAuditStatus(hashJson.getInteger("audit_status"));
+            ptlAgreementHistoryConvertQueryVo.setSerialNumber(hashJson.getInteger("serial_number"));
+            ptlAgreementHistoryConvertQueryVo.setCreator(hashJson.getString("creator"));
+            ptlAgreementHistoryConvertQueryVo.setUnderwritingDescription(hashJson.getString("underwriting_description"));
+            ptlAgreementHistoryConvertQueryVo.setOperatorType(hashJson.getString("operator_type"));
+            ptlAgreementHistoryConvertQueryVo.setOperator(hashJson.getString("operator"));
+            ptlAgreementHistoryConvertQueryVo.setOperatorTime(hashJson.getString("operator_time"));
+
+            PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory();
+            ptlAgreementAttributionHistory.setInsCompanyId(hashJson.getString("ins_company_id"));
+            ptlAgreementAttributionHistory.setInsCompanyName(hashJson.getString("ins_company_name"));
+            ptlAgreementAttributionHistory.setTemplateId(hashJson.getString("template_id"));
+            ptlAgreementAttributionHistory.setApiType(hashJson.getInteger("api_type"));
+            ptlAgreementAttributionHistory.setFields(JSONArray.parseArray(hashJson.getString("fields")));
+            ptlAgreementAttributionHistory.setUsername(hashJson.getString("username"));
+            ptlAgreementAttributionHistory.setPassword(hashJson.getString("password"));
+//            ptlAgreementHistoryQueryVo.setPtlAgreementAttribution(ptlAgreementAttributionHistory);
+            ptlAgreementHistoryConvertQueryVo.setPtlAgreementAttribution(JSONObject.toJSONString(ptlAgreementAttributionHistory));
+            ptlAgreementHistoryQueryList.add(ptlAgreementHistoryConvertQueryVo);
+        }
+        ptlAgreementHistoryQueryVos.setCurrent(hashMaps.getCurrent());
+        ptlAgreementHistoryQueryVos.setSize(hashMaps.getSize());
+        ptlAgreementHistoryQueryVos.setPages(hashMaps.getPages());
+        ptlAgreementHistoryQueryVos.setRecords(ptlAgreementHistoryQueryList);
+        ptlAgreementHistoryQueryVos.setTotal(hashMaps.getTotal());
+        return ptlAgreementHistoryQueryVos;
+    }
+
+}

+ 30 - 0
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementProductCostsHistoryServiceImpl.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.protocol.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocol.dao.PtlAgreementProductCostsHistoryMapper;
+
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCostsHistory;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementProductQueryVo;
+import com.ydtech.modules.protocol.service.PtlAgreementProductCostsHistoryService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * @author wenks
+ * @description 针对表【ptl_agreement_product_costs(协议产品费用)】的数据库操作Service实现
+ * @createDate 2023-06-05 17:59:52
+ */
+@Service
+public class PtlAgreementProductCostsHistoryServiceImpl extends ServiceImpl<PtlAgreementProductCostsHistoryMapper, PtlAgreementProductCostsHistory>
+        implements PtlAgreementProductCostsHistoryService {
+
+    @Override
+    public Page<PtlAgreementProductCostsHistory> pageHistory(Page page,PtlAgreementProductQueryVo ptlAgreementProductQueryVo) {
+        LambdaQueryWrapper<PtlAgreementProductCostsHistory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementProductCostsHistory::getAgreementId,ptlAgreementProductQueryVo.getAgreementId());
+        Page pageList = baseMapper.selectPage(page, wrapper);
+        return pageList;
+    }
+}

+ 21 - 41
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementProductCostsServiceImpl.java

@@ -1,12 +1,14 @@
 package com.ydtech.modules.protocol.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.protocol.dao.PtlAgreementProductCostsMapper;
 import com.ydtech.modules.protocol.entity.dto.PltAgreementSchemeSaveDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementProductCostsSaveDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementProductQueryVo;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.service.PtlAgreementProductCostsService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
@@ -40,53 +42,31 @@ public class PtlAgreementProductCostsServiceImpl extends ServiceImpl<PtlAgreemen
     }
 
     @Override
-    public List<PltAgreementSchemeSaveDto> getByAgreementId(String agreementId) {
-        List<PtlAgreementProductCosts> ptlAgreementProductCosts = baseMapper.selectList(getByAgreementIdWrapper(agreementId));
-        List<String> productIdList = ptlAgreementProductCosts.stream()
-                .map(PtlAgreementProductCosts::getProductId).distinct().collect(Collectors.toList());
+    public Page<PtlAgreementProductCosts> getByAgreementId(Page page, PtlAgreementProductQueryVo ptlAgreementProductQueryVo) {
 
-        List<PltAgreementSchemeSaveDto> productCostsSave = new ArrayList<>();
-        productIdList.forEach(productId -> {
-                    List<PtlAgreementProductCosts> productCostsList = ptlAgreementProductCosts.stream().filter(x -> x.getProductId().equals(productId)).collect(Collectors.toList());
-                    PltAgreementSchemeSaveDto pltAgreementSchemeQueryDto = new PltAgreementSchemeSaveDto(productCostsList);
-                    productCostsSave.add(pltAgreementSchemeQueryDto);
-                }
-        );
-        return productCostsSave;
+        Page<PtlAgreementProductCosts> ptlAgreementProductCosts = baseMapper.selectPage(page,getByAgreementIdWrapper(ptlAgreementProductQueryVo.getAgreementId()));
+        return ptlAgreementProductCosts;
     }
 
     @Override
     @Transactional
-    public void saveBatchProductCosts(String agreementId, List<PltAgreementSchemeSaveDto> scheme) {
-        if (scheme != null && !scheme.isEmpty()) {
-            List<PtlAgreementProductCosts> list = list(getByAgreementIdWrapper(agreementId));
-
-            List<PtlAgreementProductCosts> ptlAgreementProductCostsList = PtlAgreementProductCostsSaveDto.toPtlAgreementProductCosts(agreementId, scheme);
-            // 修改历史时间
-            if (!ptlAgreementProductCostsList.isEmpty()) {
-                Map<Integer, PtlAgreementProductCosts> map = PtlAgreementProductCosts.getIntegerMap(ptlAgreementProductCostsList);
-                LocalDateTime now = LocalDateTime.now();
-                //
-                List<PtlAgreementProductCosts> ptlAgreementProductCosts = list.stream()
-                        .filter(x -> ObjectUtils.isEmpty(map.get(x.getHashCode())))
-                        .map(x -> {
-                            x.setHistory(1);
-                            x.setHistoryTime(now);
-                            return x;
-                        })
-                        .collect(Collectors.toList());
-                updateBatchById(ptlAgreementProductCosts);
-
-                Map<Integer, PtlAgreementProductCosts> map1 = PtlAgreementProductCosts.getIntegerMap(list);
-                List<PtlAgreementProductCosts> agreementProductCosts = ptlAgreementProductCostsList.stream()
-                        .filter(x -> ObjectUtils.isEmpty(map1.get(x.getHashCode())))
-                        .collect(Collectors.toList());
-                saveBatch(agreementProductCosts);
-
+    public void saveBatchProductCosts(String agreementId, PltAgreementSchemeSaveDto scheme) {
+        if (scheme != null) {
+            PtlAgreementProductCosts ptlAgreementProductCosts = new PtlAgreementProductCosts(agreementId, scheme.getProductId(), scheme.getName(), scheme.getProductCosts());
+            save(ptlAgreementProductCosts);
             } else {
-                boolean b = saveBatch(ptlAgreementProductCostsList);
-                AssertionUtils.isSucceed(b, "批量添加产品费用失败");
-            }
+                AssertionUtils.isSucceed(false, "批量添加产品费用失败");
+        }
+    }
+
+    @Override
+    public void updateBatchProductCosts(String agreementId, PltAgreementSchemeSaveDto scheme) {
+        if (scheme != null) {
+            PtlAgreementProductCosts ptlAgreementProductCosts = new PtlAgreementProductCosts(agreementId, scheme.getProductId(), scheme.getName(), scheme.getProductCosts());
+            ptlAgreementProductCosts.setId(scheme.getId());
+            updateById(ptlAgreementProductCosts);
+        } else {
+            AssertionUtils.isSucceed(false, "批量添加产品费用失败");
         }
     }
 

+ 244 - 49
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ydtech.modules.protocol.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -8,19 +10,23 @@ import com.ydtech.config.DictEnumConfig;
 import com.ydtech.constants.enums.dict.DictionaryData;
 import com.ydtech.constants.enums.dict.DictionaryManagement;
 import com.ydtech.constants.enums.dict.agreement.AgreementType;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.esm.service.EsmInsCompanyService;
 import com.ydtech.modules.order.service.InsCrawlerOrderService;
+import com.ydtech.modules.protocol.constants.HistoryStatusConstants;
 import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.protocol.entity.dto.*;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementUndwrtRulesHistory;
 import com.ydtech.modules.protocol.entity.po.*;
 import com.ydtech.modules.protocol.entity.vo.*;
 import com.ydtech.modules.protocol.service.*;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
+import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -30,7 +36,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -56,16 +64,26 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
 
     private final PtlAgreementService proxyObject;
 
+    private final PtlAgreementHistoryService ptlAgreementHistoryService;
+
     private final PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService;
 
     private final PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService;
 
     private final PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService;
 
+    private final PtlAgreementProductCostsHistoryService ptlAgreementProductCostsHistoryService;
+
+    private final PtlAgreementUndwrtRulesHistoryService ptlAgreementUndwrtRulesHistoryService;
+
+    private final PtlAgreementAttributionHistoryService ptlAgreementAttributionHistoryService;
+
     public PtlAgreementServiceImpl(PtlAgreementProductCostsService ptlAgreementProductCostsService,
                                    PtlAgreementAttributionService ptlAgreementAttributionService, PtlAgreementDeptService ptlAgreementDeptService,
                                    EsmInsCompanyService esmInsCompanyService, PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService,
-                                   @Lazy InsCrawlerOrderService insCrawlerOrderController, @Lazy PtlAgreementService proxyObject,PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService,@Lazy PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService) {
+                                   @Lazy InsCrawlerOrderService insCrawlerOrderController, @Lazy PtlAgreementService proxyObject,PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService,@Lazy PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService,
+                                   PtlAgreementHistoryService ptlAgreementHistoryService,PtlAgreementProductCostsHistoryService ptlAgreementProductCostsHistoryService,
+                                   PtlAgreementUndwrtRulesHistoryService ptlAgreementUndwrtRulesHistoryService,PtlAgreementAttributionHistoryService ptlAgreementAttributionHistoryService) {
         this.ptlAgreementProductCostsService = ptlAgreementProductCostsService;
         this.ptlAgreementAttributionService = ptlAgreementAttributionService;
         this.ptlAgreementDeptService = ptlAgreementDeptService;
@@ -75,6 +93,10 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         this.proxyObject = proxyObject;
         this.ptlNonCarInsuranceProductService=ptlNonCarInsuranceProductService;
         this.ptlAgreementUndwrtRulesService=ptlAgreementUndwrtRulesService;
+        this.ptlAgreementHistoryService = ptlAgreementHistoryService;
+        this.ptlAgreementProductCostsHistoryService = ptlAgreementProductCostsHistoryService;
+        this.ptlAgreementUndwrtRulesHistoryService = ptlAgreementUndwrtRulesHistoryService;
+        this.ptlAgreementAttributionHistoryService=ptlAgreementAttributionHistoryService;
     }
 
 
@@ -103,9 +125,6 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return agreementCompany;
     }
 
-
-
-
     @Override
     public PtlAgreement ifExistsById(String agreementId) {
         PtlAgreement ptlAgreement = getById(agreementId);
@@ -124,15 +143,187 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
 
         EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
-
+//        ptlAgreement.setId(IdGenerate.nextId());
         ptlAgreement.setCreator(userName);
         ptlAgreement.setCreateTime(LocalDateTime.now());
         save(ptlAgreement);
-        // 提交 产品费用 承保规则 账号信息 授权部门
-        proxyObject.saveAssociationInformation(ptlAgreement.getId(), esmInsCompany, agreement);
+        // 提交  账号信息 授权部门
+        proxyObject.saveAssociationInformation(ptlAgreement.getId(), esmInsCompany,agreement);
+        // 添加 历史记录表
+        //生成批次号
+        String batchNo = IdGenerate.nextId();
+        PtlAgreementHistory ptlAgreementHistory = new PtlAgreementHistory(batchNo,userName, HistoryStatusConstants.HISTORY_TYPE_ADD, ptlAgreement);
+        ptlAgreementHistory.setStartDate(ptlAgreement.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        ptlAgreementHistory.setEndDate(ptlAgreement.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        ptlAgreementHistory.setAgreementId(ptlAgreement.getId());
+        ptlAgreementHistory.setId(IdGenerate.nextId());
+        ptlAgreementHistoryService.saveAgreementHistory(ptlAgreementHistory);
+        PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory(batchNo,ptlAgreement.getId(),esmInsCompany.getId(),esmInsCompany.getName(),agreement.getAttribution());
+        ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
+        if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
+            ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
+        }
+
         return HttpResult.ok("添加成功");
     }
 
+    @Override
+    @Transactional
+    public HttpResult<Object> saveAgreementProduct(PtlAgreementProductCosts ptlAgreementProductCosts, String userName) {
+
+        PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementProductCosts.getAgreementId()));
+        if(ptlAgreement==null){
+            throw new SystemException("协议不存在");
+        }
+        ptlAgreement.setModifiedBy(userName);
+        ptlAgreement.setUpdateTime(LocalDateTime.now());
+        //更新协议信息
+        baseMapper.updateById(ptlAgreement);
+        // 产品费用
+        ptlAgreementProductCostsService.save(ptlAgreementProductCosts);
+        // 添加 历史记录表
+        PtlAgreementProductCostsHistory history = new PtlAgreementProductCostsHistory(userName, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"),
+                HistoryStatusConstants.HISTORY_TYPE_UPDATE,ptlAgreementProductCosts);
+        ptlAgreementProductCostsHistoryService.save(history);
+        return HttpResult.ok("添加成功");
+    }
+
+    @Override
+    public HttpResult<Object> updateAgreementProduct(PtlAgreementProductCosts agreement, String userName) {
+        PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, agreement.getAgreementId()));
+        if(ptlAgreement==null){
+            throw new SystemException("协议不存在");
+        }
+        ptlAgreement.setModifiedBy(userName);
+        ptlAgreement.setUpdateTime(LocalDateTime.now());
+        //更新协议信息
+        baseMapper.updateById(ptlAgreement);
+        // 产品费用
+        ptlAgreementProductCostsService.updateById(agreement);
+        // 添加 历史记录表
+        PtlAgreementProductCostsHistory history = new PtlAgreementProductCostsHistory(userName, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"),
+                HistoryStatusConstants.HISTORY_TYPE_UPDATE,agreement);
+        ptlAgreementProductCostsHistoryService.save(history);
+        return HttpResult.ok("修改成功");
+    }
+
+    @Override
+    @Transactional
+    public HttpResult<Object> deleteAgreementProduct(String id,String userName) {
+        PtlAgreementProductCosts ptlAg=ptlAgreementProductCostsService.getById(id);
+        if(ptlAg==null){
+            throw new SystemException("协议产品费用不存在");
+        }
+        PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAg.getAgreementId()));
+        if(ptlAgreement==null){
+            throw new SystemException("协议不存在");
+        }
+        ptlAgreement.setModifiedBy(userName);
+        ptlAgreement.setUpdateTime(LocalDateTime.now());
+        //更新协议信息
+        baseMapper.updateById(ptlAgreement);
+        //删除协议
+        ptlAgreementProductCostsService.removeById(id);
+        PtlAgreementProductCostsHistory history = new PtlAgreementProductCostsHistory(userName, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"),
+                HistoryStatusConstants.HISTORY_TYPE_DELETE,ptlAg);
+        ptlAgreementProductCostsHistoryService.save(history);
+        return HttpResult.ok("删除成功");
+    }
+
+    @Override
+    @Transactional
+    public HttpResult<Object> saveAgreementNonCarProductCosts(PtlAgreementNonVehicleProductCostsVo agreement, String userName) {
+        //同步刷新其他协议非车产品费用信息(有待同步协议时,进行同步)
+        if(agreement.getSyncAgreementIds()!=null&&agreement.getSyncAgreementIds().size()>0){
+            for(int i=0;i<agreement.getSyncAgreementIds().size();i++){
+                String tempAgreementId=agreement.getSyncAgreementIds().get(i);
+                PtlAgreement destAgreement= getById(tempAgreementId);
+                //根据归属保司,找出本级和上级 所有产品代码
+                //先获取相关保险公司列表
+                String companyId=destAgreement.getPartnerCompaniesId();
+                if(destAgreement.getAssociationCompaniesId()!=null&&!"".equals(destAgreement.getAssociationCompaniesId())){
+                    companyId=destAgreement.getAssociationCompaniesId();
+                }
+                List<String> companyIdList=esmInsCompanyService.getAllRelationCompanyId(companyId);
+                //再根据保险公司列表获取所有非车产品列表
+                List<PtlNonCarInsuranceProduct> productList=ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
+                List<PtlAgreementNonCarProductCostsSaveVo> finalList=new ArrayList<>();
+                //按找出的产品过滤传进来的 费用方案列表
+                for(PtlNonCarInsuranceProduct tempProductDto:productList){
+                    for(PtlAgreementNonCarProductCostsSaveVo productCostDto:agreement.getNonCarProductCosts()){
+                        if(productCostDto.getProductId().equals(tempProductDto.getProductCode())){
+                            finalList.add(productCostDto);
+                        }
+                    }
+                }
+                ptlAgreementNonCarProductCostsService.synNonCarProductCosts(destAgreement,finalList);
+            }
+        }
+
+        return HttpResult.ok("添加成功");
+    }
+
+    @Override
+    @Transactional
+    public HttpResult<Object> saveAgreementUndwrtRules(PtlAgreementUndwrtRules ptlAgreementUndwrtRules, String userName) {
+        PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementUndwrtRules.getAgreementId()));
+        if(ptlAgreement==null){
+            throw new SystemException("协议不存在");
+        }
+        ptlAgreement.setModifiedBy(userName);
+        ptlAgreement.setUpdateTime(LocalDateTime.now());
+        //更新协议信息
+        baseMapper.updateById(ptlAgreement);
+        //添加承保规则
+        ptlAgreementUndwrtRulesService.save(ptlAgreementUndwrtRules);
+        //添加历史记录
+        PtlAgreementUndwrtRulesHistory ptlAgreementUndwrtRulesHistory=new PtlAgreementUndwrtRulesHistory(userName,HistoryStatusConstants.HISTORY_TYPE_ADD,ptlAgreementUndwrtRules);
+        ptlAgreementUndwrtRulesHistoryService.save(ptlAgreementUndwrtRulesHistory);
+        return HttpResult.ok("添加成功");
+    }
+
+    @Override
+    @Transactional
+    public HttpResult<Object> updateAgreementUndwrtRules(PtlAgreementUndwrtRules ptlAgreementUndwrtRules, String userName) {
+        PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementUndwrtRules.getAgreementId()));
+        if(ptlAgreement==null){
+            throw new SystemException("协议不存在");
+        }
+        ptlAgreement.setModifiedBy(userName);
+        ptlAgreement.setUpdateTime(LocalDateTime.now());
+        //更新协议信息
+        baseMapper.updateById(ptlAgreement);
+        //添加承保规则
+        ptlAgreementUndwrtRulesService.updateById(ptlAgreementUndwrtRules);
+        //添加历史记录
+        PtlAgreementUndwrtRulesHistory ptlAgreementUndwrtRulesHistory=new PtlAgreementUndwrtRulesHistory(userName,HistoryStatusConstants.HISTORY_TYPE_UPDATE,ptlAgreementUndwrtRules);
+        ptlAgreementUndwrtRulesHistoryService.save(ptlAgreementUndwrtRulesHistory);
+        return HttpResult.ok("修改成功");
+    }
+
+    @Override
+    @Transactional
+    public HttpResult<Object> deleteAgreementUndwrtRules(String id, String userName) {
+        PtlAgreementUndwrtRules ptlAgreementUndwrtRules = ptlAgreementUndwrtRulesService.getOne(new LambdaQueryWrapper<PtlAgreementUndwrtRules>().eq(PtlAgreementUndwrtRules::getId, id));
+        if(ptlAgreementUndwrtRules==null){
+            throw new SystemException("协议承保规则不存在");
+        }
+        PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementUndwrtRules.getAgreementId()));
+        if(ptlAgreement==null){
+            throw new SystemException("协议不存在");
+        }
+        ptlAgreement.setModifiedBy(userName);
+        ptlAgreement.setUpdateTime(LocalDateTime.now());
+        //更新协议信息
+        baseMapper.updateById(ptlAgreement);
+        //删除承保规则
+        ptlAgreementUndwrtRulesService.removeById(id);
+        //添加历史记录
+        PtlAgreementUndwrtRulesHistory ptlAgreementUndwrtRulesHistory=new PtlAgreementUndwrtRulesHistory(userName,HistoryStatusConstants.HISTORY_TYPE_DELETE,ptlAgreementUndwrtRules);
+        ptlAgreementUndwrtRulesHistoryService.save(ptlAgreementUndwrtRulesHistory);
+        return HttpResult.ok("删除成功");
+    }
+
     @Override
     public HttpResult<PageResult<PtlAgreement>> pageAgreement(PtlAgreementPageVo ptlAgreementPageVo) {
         int pageNum = ptlAgreementPageVo.getPageNum();
@@ -159,12 +350,12 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     @Override
     public HttpResult<PtlAgreementQueryVo> getByAgreementId(String agreementId) {
         PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
-        // 获取产品费用
-        List<PltAgreementSchemeSaveDto> schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(agreementId);
-        // 获取非车险产品费用
-        List<PtlAgreementNonCarProductCosts> nonCarProductCosts = ptlAgreementNonCarProductCostsService.getByAgreementId(agreementId);
-        // 获取承保规则
-        List<PtlAgreementUndwrtRulesSaveDto> underwritingRules = ptlAgreementUndwrtRulesService.getByAgreementId(agreementId);
+//        // 获取产品费用
+//        List<PltAgreementSchemeSaveDto> schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(agreementId);
+//        // 获取非车险产品费用
+//        List<PtlAgreementNonCarProductCosts> nonCarProductCosts = ptlAgreementNonCarProductCostsService.getByAgreementId(agreementId);
+//        // 获取承保规则
+//        List<PtlAgreementUndwrtRulesSaveDto> underwritingRules = ptlAgreementUndwrtRulesService.getByAgreementId(agreementId);
         //  账号信息查询
         PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
         //2023-08-28 lig 增加  解决前端空对象为null问题,改为返回为空对象
@@ -182,18 +373,38 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         }
         // 授权查询
         List<PtlAgreementDept> deptList = ptlAgreementDeptService.getByAgreementId(agreementId);
-        PtlAgreementQueryVo ptlAgreementQueryVo = new PtlAgreementQueryVo(ptlAgreement, schemeQueryDto, nonCarProductCosts, underwritingRules, ptlAgreementAttribution, deptList);
+        PtlAgreementQueryVo ptlAgreementQueryVo = new PtlAgreementQueryVo(ptlAgreement,ptlAgreementAttribution, deptList);
         return HttpResult.ok(ptlAgreementQueryVo);
     }
 
     @Override
     @Transactional
-    public HttpResult<Object> deleteAgreement(String agreementId) {
+    public HttpResult<Object> deleteAgreement(String agreementId,String userName) {
         proxyObject.ifExistsById(agreementId);
+        HttpResult<PtlAgreementQueryVo> byAgreementId = getByAgreementId(agreementId);
+
         boolean b = removeById(agreementId);
         AssertionUtils.isSucceed(b, "协议信息删除失败");
         // 关联表删除
         proxyObject.deleteAssociationInformation(agreementId);
+        // 添加 历史记录表
+        //生成批次号
+        String batchNo = IdGenerate.nextId();
+        PtlAgreementHistory ptlAgreementHistory = new PtlAgreementHistory(batchNo,userName, HistoryStatusConstants.HISTORY_TYPE_ADD, byAgreementId.getData().getAgreement());
+        ptlAgreementHistory.setStartDate(byAgreementId.getData().getAgreement().getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        ptlAgreementHistory.setEndDate(byAgreementId.getData().getAgreement().getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        ptlAgreementHistory.setAgreementId(ptlAgreementHistory.getId());
+        ptlAgreementHistory.setId(IdGenerate.nextId());
+        ptlAgreementHistoryService.saveAgreementHistory(ptlAgreementHistory);
+        PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory(batchNo,agreementId,
+                byAgreementId.getData().getAgreement().getInsuranceCompanyId(),
+                byAgreementId.getData().getAgreement().getInsuranceCompany(),
+                byAgreementId.getData().getPtlAgreementAttribution()
+        );
+        ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
+        if (StringUtils.isNotEmpty(ptlAgreementAttributionHistory.getTemplateId())) {
+            ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
+        }
         return HttpResult.ok("删除成功");
     }
 
@@ -209,50 +420,35 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
 
         ptlAgreement.setModifiedBy(userName);
         ptlAgreement.setUpdateTime(LocalDateTime.now());
+        HttpResult<PtlAgreementQueryVo> byAgreementId = this.getByAgreementId(agreementId);
         // 修改协议
         boolean b = updateById(ptlAgreement);
         AssertionUtils.isSucceed(b, "协议信息修改失败");
         // 关联表都是先删除后添加
         proxyObject.deleteAssociationInformationExcludeCosts(agreementId);
-        // 提交 产品费用 承保规则 账号信息 授权部门
+        // 提交 账号信息 授权部门
         proxyObject.saveAssociationInformation(agreementId, esmInsCompany, agreement);
+
+        // 添加 历史记录表
+        //生成批次号
+        String batchNo = IdGenerate.nextId();
+        PtlAgreementHistory ptlAgreementHistory = new PtlAgreementHistory(batchNo,userName, HistoryStatusConstants.HISTORY_TYPE_ADD, ptlAgreement);
+        ptlAgreementHistory.setStartDate(ptlAgreement.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        ptlAgreementHistory.setEndDate(ptlAgreement.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        ptlAgreementHistory.setAgreementId(ptlAgreement.getId());
+        ptlAgreementHistory.setId(IdGenerate.nextId());
+        ptlAgreementHistoryService.saveAgreementHistory(ptlAgreementHistory);
+        PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory(batchNo,ptlAgreement.getId(),esmInsCompany.getId(),esmInsCompany.getName(),agreement.getAttribution());
+        ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
+        if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
+            ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
+        }
         return HttpResult.ok("修改成功");
     }
 
     @Override
     public void saveAssociationInformation(String agreementId, EsmInsCompany esmInsCompany, PtlAgreementSaveVo agreement) {
-        // 产品费用
-        ptlAgreementProductCostsService.saveBatchProductCosts(agreementId, agreement.getScheme());
-        // 非车险产品费用
-        ptlAgreementNonCarProductCostsService.saveBatchNonCarProductCosts(agreementId, agreement.getNonCarProductCosts());
-        //同步刷新其他协议非车产品费用信息(有待同步协议时,进行同步)
-        if(agreement.getSyncAgreementIds()!=null&&agreement.getSyncAgreementIds().size()>0){
-            for(int i=0;i<agreement.getSyncAgreementIds().size();i++){
-                String tempAgreementId=agreement.getSyncAgreementIds().get(i);
-                PtlAgreement destAgreement= getById(tempAgreementId);
-                //根据归属保司,找出本级和上级 所有产品代码
-                //先获取相关保险公司列表
-                String companyId=destAgreement.getPartnerCompaniesId();
-                if(destAgreement.getAssociationCompaniesId()!=null&&!"".equals(destAgreement.getAssociationCompaniesId())){
-                    companyId=destAgreement.getAssociationCompaniesId();
-                }
-                List<String> companyIdList=esmInsCompanyService.getAllRelationCompanyId(companyId);
-                //再根据保险公司列表获取所有非车产品列表
-                List<PtlNonCarInsuranceProduct> productList=ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
-                List<PtlAgreementNonCarProductCostsSaveVo> finalList=new ArrayList<>();
-                //按找出的产品过滤传进来的 费用方案列表
-                for(PtlNonCarInsuranceProduct tempProductDto:productList){
-                    for(PtlAgreementNonCarProductCostsSaveVo productCostDto:agreement.getNonCarProductCosts()){
-                        if(productCostDto.getProductId().equals(tempProductDto.getProductCode())){
-                            finalList.add(productCostDto);
-                        }
-                    }
-                }
-                ptlAgreementNonCarProductCostsService.synNonCarProductCosts(destAgreement,finalList);
-            }
-        }
-        // 承包规则
-        ptlAgreementUndwrtRulesService.saveBatchProductCosts(agreementId,agreement.getUnderwritingRules());
+
         // 账号添加
         PtlAgreementAttributionDto attribution = agreement.getAttribution();
         if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
@@ -311,7 +507,6 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return esmInsCompany;
     }
 
-
     @Override
     public HttpResult<Object> auditAgreement(String agreementId, PtlAgreementAuditVo ptlAgreementAuditVo) {
         PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);

+ 41 - 0
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUndwrtRulesHistoryServiceImpl.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.protocol.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.protocol.dao.PtlAgreementUndwrtRulesHistoryMapper;
+import com.ydtech.modules.protocol.dao.PtlAgreementUndwrtRulesMapper;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
+import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementUndwrtRulesHistory;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementUndwrtRules;
+import com.ydtech.modules.protocol.entity.vo.PtlAgreementUndwrtRulesQueryVo;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
+import com.ydtech.modules.protocol.service.PtlAgreementProductCostsService;
+import com.ydtech.modules.protocol.service.PtlAgreementUndwrtRulesHistoryService;
+import com.ydtech.modules.protocol.service.PtlAgreementUndwrtRulesService;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author CXP
+ * @description 针对表【ptl_agreement_undwrt_rules(协议承保规则)】的数据库操作Service实现
+ * @createDate 2023年12月20日22:25:57
+ */
+@Service
+public class PtlAgreementUndwrtRulesHistoryServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesHistoryMapper, PtlAgreementUndwrtRulesHistory>
+        implements PtlAgreementUndwrtRulesHistoryService {
+
+
+    @Override
+    public Page<PtlAgreementUndwrtRulesHistory> pageHistory(Page page, PtlAgreementUndwrtRulesQueryVo ptlAgreementUndwrtRulesQueryVo) {
+        LambdaQueryWrapper<PtlAgreementUndwrtRulesHistory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(PtlAgreementUndwrtRulesHistory::getAgreementId,ptlAgreementUndwrtRulesQueryVo.getAgreementId());
+        Page pageList = baseMapper.selectPage(page, wrapper);
+        return pageList;
+    }
+}

+ 4 - 5
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementUndwrtRulesServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.protocol.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.protocol.dao.PtlAgreementUndwrtRulesMapper;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementUndwrtRulesSaveDto;
@@ -39,11 +40,9 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
     }
 
     @Override
-    public List<PtlAgreementUndwrtRulesSaveDto> getByAgreementId(String agreementId) {
-        List<PtlAgreementUndwrtRules> ptlAgreementUndwrtRulesList = baseMapper.selectList(getByAgreementIdWrapper(agreementId));
-
-        List<PtlAgreementUndwrtRulesSaveDto> undwrtRulesSaveDtoList = PtlAgreementUndwrtRulesSaveDto.toPltAgreementRuleSaveDto(ptlAgreementUndwrtRulesList);
-        return undwrtRulesSaveDtoList;
+    public Page<PtlAgreementUndwrtRules> getByAgreementId(Page page,String agreementId) {
+        Page<PtlAgreementUndwrtRules> ptlAgreementUndwrtRulesList = baseMapper.selectPage(page,getByAgreementIdWrapper(agreementId));
+        return ptlAgreementUndwrtRulesList;
     }
     @Override
     public Map<String, List<String>> getByLicenseNo(List<String> agreementIdList) {

+ 59 - 0
src/main/resources/mapper/modules/protocol/PtlAgreementHistoryMapper.xml

@@ -0,0 +1,59 @@
+<?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.protocol.dao.PtlAgreementHistoryMapper">
+
+    <select id="pageHistory" resultType="HashMap">
+        SELECT
+            iah.id,
+            iah.batch,
+            iah.agreement_id,
+            iah.companies_type,
+            iah.agreement_type,
+            iah.agreement_code,
+            iah.agreement_name,
+            iah.agreement_abbreviation,
+            iah.partner_companies_id,
+            iah.association_companies_id,
+            iah.insurance_company,
+            iah.insurance_company_id,
+            iah.start_date,
+            iah.end_date,
+            iah.money_time,
+            iah.match_type,
+            iah.docking_person,
+            iah.docking_phone,
+            iah.with_tax,
+            iah.money_type,
+            iah.valid_status,
+            iah.file_id,
+            iah.audit_content,
+            iah.audit_status,
+            iah.serial_number,
+            iah.creator,
+            iah.create_time,
+            iah.modified_by,
+            iah.update_time,
+            iah.underwriting_description,
+            iah.is_tax_source,
+            iah.operator_type,
+            iah.operator,
+            iah.operator_time,
+            iaah.batch,
+            iaah.ins_company_id,
+            iaah.ins_company_name,
+            iaah.template_id,
+            iaah.api_type,
+            iaah.fields,
+            iaah.username,
+            iaah.password
+        FROM
+            ptl_agreement_history iah
+                LEFT JOIN ptl_agreement_attribution_history iaah ON iah.agreement_id = iaah.id
+                AND iah.batch = iaah.batch
+        WHERE
+            iah.agreement_id = #{agreementId}
+    </select>
+
+</mapper>