Commit ca77a0b4af35ee38ff2424da90c4529400201c28

Authored by 房远帅
1 parent 9f71f5b6

合同:合同变更单

@@ -1474,12 +1474,10 @@ CREATE TABLE IF NOT EXISTS `tbl_contract_change_application` @@ -1474,12 +1474,10 @@ CREATE TABLE IF NOT EXISTS `tbl_contract_change_application`
1474 `contract_code` varchar(50) NOT NULL COMMENT '合同编号', 1474 `contract_code` varchar(50) NOT NULL COMMENT '合同编号',
1475 `contract_type` varchar(50) NOT NULL COMMENT '合同类型', 1475 `contract_type` varchar(50) NOT NULL COMMENT '合同类型',
1476 `contract_stage` varchar(20) NOT NULL COMMENT '合同阶段(FORMAL:正式合同,STANDARD:标准合同)', 1476 `contract_stage` varchar(20) NOT NULL COMMENT '合同阶段(FORMAL:正式合同,STANDARD:标准合同)',
1477 - `change_reason` varchar(200) DEFAULT NULL COMMENT '变更原因', 1477 + `change_reason` varchar(500) DEFAULT NULL COMMENT '变更原因',
1478 `before_data_json` longtext DEFAULT NULL COMMENT '变更前数据JSON', 1478 `before_data_json` longtext DEFAULT NULL COMMENT '变更前数据JSON',
1479 `after_data_json` longtext DEFAULT NULL COMMENT '变更后数据JSON', 1479 `after_data_json` longtext DEFAULT NULL COMMENT '变更后数据JSON',
1480 `approval_status` varchar(20) NOT NULL COMMENT '审核状态', 1480 `approval_status` varchar(20) NOT NULL COMMENT '审核状态',
1481 - `approver_id` varchar(32) DEFAULT NULL COMMENT '审核人ID',  
1482 - `approved_at` datetime DEFAULT NULL COMMENT '审核时间',  
1483 `create_by_id` varchar(32) DEFAULT NULL COMMENT '创建人ID', 1481 `create_by_id` varchar(32) DEFAULT NULL COMMENT '创建人ID',
1484 `create_by` varchar(50) DEFAULT NULL COMMENT '创建人', 1482 `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
1485 `update_by_id` varchar(32) DEFAULT NULL COMMENT '更新人ID', 1483 `update_by_id` varchar(32) DEFAULT NULL COMMENT '更新人ID',
@@ -2,7 +2,6 @@ package com.lframework.xingyun.sc.bo.contract; @@ -2,7 +2,6 @@ package com.lframework.xingyun.sc.bo.contract;
2 2
3 import com.lframework.starter.web.core.bo.BaseBo; 3 import com.lframework.starter.web.core.bo.BaseBo;
4 import com.lframework.xingyun.sc.entity.ContractChangeApplication; 4 import com.lframework.xingyun.sc.entity.ContractChangeApplication;
5 -import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateContractDistributorStandardVo;  
6 import io.swagger.annotations.ApiModelProperty; 5 import io.swagger.annotations.ApiModelProperty;
7 import lombok.Data; 6 import lombok.Data;
8 7
@@ -86,7 +85,7 @@ public class GetContractChangeApplicationBo extends BaseBo<ContractChangeApplica @@ -86,7 +85,7 @@ public class GetContractChangeApplicationBo extends BaseBo<ContractChangeApplica
86 * 变更后的合同数据 85 * 变更后的合同数据
87 */ 86 */
88 @ApiModelProperty("变更后的合同数据") 87 @ApiModelProperty("变更后的合同数据")
89 - private UpdateContractDistributorStandardVo contractData; 88 + private GetContractDistributorStandardBo contractData;
90 89
91 public GetContractChangeApplicationBo() { 90 public GetContractChangeApplicationBo() {
92 } 91 }
@@ -5,6 +5,7 @@ import com.lframework.xingyun.sc.entity.ContractChangeApplication; @@ -5,6 +5,7 @@ import com.lframework.xingyun.sc.entity.ContractChangeApplication;
5 import io.swagger.annotations.ApiModelProperty; 5 import io.swagger.annotations.ApiModelProperty;
6 import lombok.Data; 6 import lombok.Data;
7 7
  8 +import java.math.BigDecimal;
8 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
9 10
10 /** 11 /**
@@ -76,6 +77,48 @@ public class QueryContractChangeApplicationBo extends BaseBo<ContractChangeAppli @@ -76,6 +77,48 @@ public class QueryContractChangeApplicationBo extends BaseBo<ContractChangeAppli
76 private String createBy; 77 private String createBy;
77 78
78 /** 79 /**
  80 + * 办事处编码
  81 + */
  82 + @ApiModelProperty("办事处编码")
  83 + private String deptCode;
  84 +
  85 + /**
  86 + * 办事处名称
  87 + */
  88 + @ApiModelProperty("办事处名称")
  89 + private String deptCodeName;
  90 +
  91 + /**
  92 + * 生产厂编码
  93 + */
  94 + @ApiModelProperty("生产厂编码")
  95 + private String workshopCode;
  96 +
  97 + /**
  98 + * 生产厂名称
  99 + */
  100 + @ApiModelProperty("生产厂名称")
  101 + private String workshopName;
  102 +
  103 + /**
  104 + * 变更后的需方名称
  105 + */
  106 + @ApiModelProperty("变更后的需方名称")
  107 + private String buyerName;
  108 +
  109 + /**
  110 + * 变更后的合计金额
  111 + */
  112 + @ApiModelProperty("变更后的合计金额")
  113 + private BigDecimal totalAmountIncludingTax;
  114 +
  115 + /**
  116 + * 变更后的合计数量
  117 + */
  118 + @ApiModelProperty("变更后的合计数量")
  119 + private BigDecimal totalQuantity;
  120 +
  121 + /**
79 * 创建时间 122 * 创建时间
80 */ 123 */
81 @ApiModelProperty("创建时间") 124 @ApiModelProperty("创建时间")
1 package com.lframework.xingyun.sc.controller.contract; 1 package com.lframework.xingyun.sc.controller.contract;
2 2
3 import com.lframework.starter.common.exceptions.impl.DefaultClientException; 3 import com.lframework.starter.common.exceptions.impl.DefaultClientException;
  4 +import com.lframework.starter.web.core.annotations.security.HasPermission;
4 import com.lframework.starter.web.core.components.resp.InvokeResult; 5 import com.lframework.starter.web.core.components.resp.InvokeResult;
5 import com.lframework.starter.web.core.components.resp.InvokeResultBuilder; 6 import com.lframework.starter.web.core.components.resp.InvokeResultBuilder;
6 import com.lframework.starter.web.core.components.resp.PageResult; 7 import com.lframework.starter.web.core.components.resp.PageResult;
7 import com.lframework.starter.web.core.controller.DefaultBaseController; 8 import com.lframework.starter.web.core.controller.DefaultBaseController;
8 import com.lframework.starter.web.core.utils.JsonUtil; 9 import com.lframework.starter.web.core.utils.JsonUtil;
9 import com.lframework.starter.web.core.utils.PageResultUtil; 10 import com.lframework.starter.web.core.utils.PageResultUtil;
  11 +import com.lframework.starter.web.inner.dto.dic.city.DicCityDto;
  12 +import com.lframework.starter.web.inner.entity.SysDataDicItem;
  13 +import com.lframework.starter.web.inner.service.DicCityService;
  14 +import com.lframework.starter.web.inner.service.system.SysDataDicItemService;
10 import com.lframework.starter.web.inner.entity.SysDept; 15 import com.lframework.starter.web.inner.entity.SysDept;
11 import com.lframework.starter.web.inner.service.system.SysDeptService; 16 import com.lframework.starter.web.inner.service.system.SysDeptService;
12 import com.lframework.xingyun.basedata.entity.Customer; 17 import com.lframework.xingyun.basedata.entity.Customer;
@@ -14,6 +19,7 @@ import com.lframework.xingyun.basedata.entity.Workshop; @@ -14,6 +19,7 @@ import com.lframework.xingyun.basedata.entity.Workshop;
14 import com.lframework.xingyun.basedata.service.customer.CustomerService; 19 import com.lframework.xingyun.basedata.service.customer.CustomerService;
15 import com.lframework.xingyun.basedata.service.workshop.WorkshopService; 20 import com.lframework.xingyun.basedata.service.workshop.WorkshopService;
16 import com.lframework.xingyun.sc.bo.contract.GetContractChangeApplicationBo; 21 import com.lframework.xingyun.sc.bo.contract.GetContractChangeApplicationBo;
  22 +import com.lframework.xingyun.sc.bo.contract.GetContractDistributorStandardBo;
17 import com.lframework.xingyun.sc.bo.contract.QueryContractChangeApplicationBo; 23 import com.lframework.xingyun.sc.bo.contract.QueryContractChangeApplicationBo;
18 import com.lframework.xingyun.sc.bo.contract.QueryContractDistributorStandardBo; 24 import com.lframework.xingyun.sc.bo.contract.QueryContractDistributorStandardBo;
19 import com.lframework.xingyun.sc.entity.ContractChangeApplication; 25 import com.lframework.xingyun.sc.entity.ContractChangeApplication;
@@ -23,15 +29,14 @@ import com.lframework.xingyun.sc.vo.contract.createVo.CreateContractChangeApplic @@ -23,15 +29,14 @@ import com.lframework.xingyun.sc.vo.contract.createVo.CreateContractChangeApplic
23 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeApplicationVo; 29 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeApplicationVo;
24 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeSelectableContractVo; 30 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeSelectableContractVo;
25 import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateContractChangeApplicationVo; 31 import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateContractChangeApplicationVo;
26 -import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateContractDistributorStandardVo;  
27 import io.swagger.annotations.Api; 32 import io.swagger.annotations.Api;
28 import io.swagger.annotations.ApiImplicitParam; 33 import io.swagger.annotations.ApiImplicitParam;
29 import io.swagger.annotations.ApiOperation; 34 import io.swagger.annotations.ApiOperation;
30 import org.apache.commons.collections4.CollectionUtils; 35 import org.apache.commons.collections4.CollectionUtils;
  36 +import org.apache.commons.lang3.StringUtils;
31 import org.springframework.beans.factory.annotation.Autowired; 37 import org.springframework.beans.factory.annotation.Autowired;
32 import org.springframework.validation.annotation.Validated; 38 import org.springframework.validation.annotation.Validated;
33 import org.springframework.web.bind.annotation.*; 39 import org.springframework.web.bind.annotation.*;
34 -  
35 import javax.validation.Valid; 40 import javax.validation.Valid;
36 import javax.validation.constraints.NotBlank; 41 import javax.validation.constraints.NotBlank;
37 import java.util.Map; 42 import java.util.Map;
@@ -56,11 +61,16 @@ public class ContractChangeApplicationController extends DefaultBaseController { @@ -56,11 +61,16 @@ public class ContractChangeApplicationController extends DefaultBaseController {
56 private SysDeptService sysDeptService; 61 private SysDeptService sysDeptService;
57 @Autowired 62 @Autowired
58 private WorkshopService workshopService; 63 private WorkshopService workshopService;
  64 + @Autowired
  65 + private SysDataDicItemService sysDataDicItemService;
  66 + @Autowired
  67 + private DicCityService dicCityService;
59 68
60 /** 69 /**
61 * 查询列表 70 * 查询列表
62 */ 71 */
63 @ApiOperation("查询列表") 72 @ApiOperation("查询列表")
  73 + @HasPermission({"contract-manage:change-contract:query"})
64 @GetMapping("/query") 74 @GetMapping("/query")
65 public InvokeResult<PageResult<QueryContractChangeApplicationBo>> query(QueryContractChangeApplicationVo vo) { 75 public InvokeResult<PageResult<QueryContractChangeApplicationBo>> query(QueryContractChangeApplicationVo vo) {
66 PageResult<ContractChangeApplication> pageResult = contractChangeApplicationService.query(getPageIndex(vo), getPageSize(vo), vo); 76 PageResult<ContractChangeApplication> pageResult = contractChangeApplicationService.query(getPageIndex(vo), getPageSize(vo), vo);
@@ -76,6 +86,7 @@ public class ContractChangeApplicationController extends DefaultBaseController { @@ -76,6 +86,7 @@ public class ContractChangeApplicationController extends DefaultBaseController {
76 */ 86 */
77 @ApiOperation("根据ID查询") 87 @ApiOperation("根据ID查询")
78 @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) 88 @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true)
  89 + @HasPermission({"contract-manage:change-contract:query","contract-manage:change-contract:review"})
79 @GetMapping 90 @GetMapping
80 public InvokeResult<GetContractChangeApplicationBo> get(@NotBlank(message = "id不能为空!") String id) { 91 public InvokeResult<GetContractChangeApplicationBo> get(@NotBlank(message = "id不能为空!") String id) {
81 ContractChangeApplication data = contractChangeApplicationService.findById(id); 92 ContractChangeApplication data = contractChangeApplicationService.findById(id);
@@ -84,8 +95,10 @@ public class ContractChangeApplicationController extends DefaultBaseController { @@ -84,8 +95,10 @@ public class ContractChangeApplicationController extends DefaultBaseController {
84 } 95 }
85 96
86 GetContractChangeApplicationBo result = new GetContractChangeApplicationBo(data); 97 GetContractChangeApplicationBo result = new GetContractChangeApplicationBo(data);
87 - if (org.apache.commons.lang3.StringUtils.isNotBlank(data.getAfterDataJson())) {  
88 - result.setContractData(JsonUtil.parseObject(data.getAfterDataJson(), UpdateContractDistributorStandardVo.class)); 98 + if (StringUtils.isNotBlank(data.getAfterDataJson())) {
  99 + GetContractDistributorStandardBo contractData = JsonUtil.parseObject(data.getAfterDataJson(), GetContractDistributorStandardBo.class);
  100 + fillContractDataDisplayInfo(contractData);
  101 + result.setContractData(contractData);
89 } 102 }
90 return InvokeResultBuilder.success(result); 103 return InvokeResultBuilder.success(result);
91 } 104 }
@@ -94,6 +107,15 @@ public class ContractChangeApplicationController extends DefaultBaseController { @@ -94,6 +107,15 @@ public class ContractChangeApplicationController extends DefaultBaseController {
94 * 查询可发起变更的合同 107 * 查询可发起变更的合同
95 */ 108 */
96 @ApiOperation("查询可发起变更的合同") 109 @ApiOperation("查询可发起变更的合同")
  110 + @HasPermission({
  111 + "contract-manage:distribution-standard-contract:query",
  112 + "contract-manage:distribution-inventory-contract:query",
  113 + "contract-manage:distribution-unlocked-contract:query",
  114 + "contract-manage:foreign-trade-standard-contract:query",
  115 + "contract-manage:foreign-trade-inventory-contract:query",
  116 + "contract-manage:foreign-trade-unlocked-contract:query",
  117 + "contract-manage:processed-standard-contract:query"
  118 + })
97 @GetMapping("/querySelectableContracts") 119 @GetMapping("/querySelectableContracts")
98 public InvokeResult<PageResult<QueryContractDistributorStandardBo>> querySelectableContracts(QueryContractChangeSelectableContractVo vo) { 120 public InvokeResult<PageResult<QueryContractDistributorStandardBo>> querySelectableContracts(QueryContractChangeSelectableContractVo vo) {
99 PageResult<ContractDistributorStandard> pageResult = contractChangeApplicationService 121 PageResult<ContractDistributorStandard> pageResult = contractChangeApplicationService
@@ -138,6 +160,7 @@ public class ContractChangeApplicationController extends DefaultBaseController { @@ -138,6 +160,7 @@ public class ContractChangeApplicationController extends DefaultBaseController {
138 * 新增 160 * 新增
139 */ 161 */
140 @ApiOperation("新增") 162 @ApiOperation("新增")
  163 + @HasPermission({"contract-manage:change-contract:add"})
141 @PostMapping 164 @PostMapping
142 public InvokeResult<Void> create(@Valid @RequestBody CreateContractChangeApplicationVo vo) throws Exception { 165 public InvokeResult<Void> create(@Valid @RequestBody CreateContractChangeApplicationVo vo) throws Exception {
143 contractChangeApplicationService.create(vo); 166 contractChangeApplicationService.create(vo);
@@ -148,6 +171,7 @@ public class ContractChangeApplicationController extends DefaultBaseController { @@ -148,6 +171,7 @@ public class ContractChangeApplicationController extends DefaultBaseController {
148 * 修改 171 * 修改
149 */ 172 */
150 @ApiOperation("修改") 173 @ApiOperation("修改")
  174 + @HasPermission({"contract-manage:change-contract:modify","contract-manage:change-contract:approve"})
151 @PutMapping 175 @PutMapping
152 public InvokeResult<Void> update(@Valid @RequestBody UpdateContractChangeApplicationVo vo) throws Exception { 176 public InvokeResult<Void> update(@Valid @RequestBody UpdateContractChangeApplicationVo vo) throws Exception {
153 contractChangeApplicationService.update(vo); 177 contractChangeApplicationService.update(vo);
@@ -159,9 +183,108 @@ public class ContractChangeApplicationController extends DefaultBaseController { @@ -159,9 +183,108 @@ public class ContractChangeApplicationController extends DefaultBaseController {
159 */ 183 */
160 @ApiOperation("取消") 184 @ApiOperation("取消")
161 @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true) 185 @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true)
162 - @DeleteMapping 186 + @HasPermission({"contract-manage:change-contract:cancel"})
  187 + @PostMapping("/cancel")
163 public InvokeResult<Void> cancel(@NotBlank(message = "id不能为空!") String id) { 188 public InvokeResult<Void> cancel(@NotBlank(message = "id不能为空!") String id) {
164 contractChangeApplicationService.cancelApplication(id); 189 contractChangeApplicationService.cancelApplication(id);
165 return InvokeResultBuilder.success(); 190 return InvokeResultBuilder.success();
166 } 191 }
  192 +
  193 + /**
  194 + * 填充变更后合同数据的展示字段
  195 + *
  196 + * @param contractData 合同数据
  197 + */
  198 + private void fillContractDataDisplayInfo(GetContractDistributorStandardBo contractData) {
  199 + if (contractData == null) {
  200 + return;
  201 + }
  202 +
  203 + if (StringUtils.isNotBlank(contractData.getBuyer())) {
  204 + Customer customer = customerService.findById(contractData.getBuyer());
  205 + contractData.setBuyerName(customer == null ? null : customer.getName());
  206 + }
  207 + if (StringUtils.isNotBlank(contractData.getStockUpCompanyId())) {
  208 + Customer customer = customerService.findById(contractData.getStockUpCompanyId());
  209 + contractData.setStockUpCompanyName(customer == null ? null : customer.getName());
  210 + }
  211 + if (StringUtils.isNotBlank(contractData.getDeptId())) {
  212 + SysDept dept = sysDeptService.findById(contractData.getDeptId());
  213 + contractData.setDeptName(dept == null ? null : dept.getName());
  214 + }
  215 + if (StringUtils.isNotBlank(contractData.getRegion())) {
  216 + SysDept dept = sysDeptService.findById(contractData.getRegion());
  217 + contractData.setRegionName(dept == null ? null : dept.getName());
  218 + }
  219 + if (StringUtils.isNotBlank(contractData.getWorkshopId())) {
  220 + Workshop workshop = workshopService.findById(contractData.getWorkshopId());
  221 + contractData.setWorkshopName(workshop == null ? null : workshop.getName());
  222 + }
  223 +
  224 + SysDataDicItem supplierDicItem = sysDataDicItemService.findByCode(ContractDistributorStandardController.SUPPLIER_DIC_CODE,
  225 + contractData.getSupplier());
  226 + contractData.setSupplierName(supplierDicItem == null ? null : supplierDicItem.getName());
  227 + SysDataDicItem unitDicItem = sysDataDicItemService.findByCode(ContractDistributorStandardController.UNIT_DIC_CODE,
  228 + contractData.getUnit());
  229 + contractData.setUnitName(unitDicItem == null ? null : unitDicItem.getName());
  230 + SysDataDicItem requiredDicItem = sysDataDicItemService.findByCode(ContractDistributorStandardController.CONDITIONS_REQUIRED_DIC_CODE,
  231 + contractData.getSpecialTerms());
  232 + contractData.setSpecialTermsName(requiredDicItem == null ? null : requiredDicItem.getName());
  233 + SysDataDicItem standardDicItem = sysDataDicItemService.findByCode(ContractDistributorStandardController.APPLICABLE_STANDARD_DIC_CODE,
  234 + contractData.getExecutionStandard());
  235 + contractData.setExecutionStandardName(standardDicItem == null ? null : standardDicItem.getName());
  236 +
  237 + List<DicCityDto> dicCityDtoList = dicCityService.getChainById(contractData.getDestination());
  238 + if (CollectionUtils.isNotEmpty(dicCityDtoList) && dicCityDtoList.size() == 3) {
  239 + contractData.setProvinceId(dicCityDtoList.get(0).getId());
  240 + contractData.setProvinceName(dicCityDtoList.get(0).getName());
  241 + contractData.setCityId(dicCityDtoList.get(1).getId());
  242 + contractData.setCityName(dicCityDtoList.get(1).getName());
  243 + contractData.setDistrictId(dicCityDtoList.get(2).getId());
  244 + contractData.setDistrictName(dicCityDtoList.get(2).getName());
  245 + }
  246 +
  247 + fillContractLineDisplayInfo(contractData);
  248 + }
  249 +
  250 + /**
  251 + * 填充变更后合同物料行展示字段
  252 + *
  253 + * @param contractData 合同数据
  254 + */
  255 + private void fillContractLineDisplayInfo(GetContractDistributorStandardBo contractData) {
  256 + if (contractData == null) {
  257 + return;
  258 + }
  259 +
  260 + Map<String, String> productCodeAndNameMap = sysDataDicItemService.findByDicCode(ContractDistributorStandardController.CONTRACT_PRODUCT_DIC_CODE)
  261 + .stream()
  262 + .collect(Collectors.toMap(SysDataDicItem::getCode, SysDataDicItem::getName));
  263 +
  264 + if (CollectionUtils.isNotEmpty(contractData.getContractDistributorLineList())) {
  265 + contractData.getContractDistributorLineList().forEach(line -> line.setProductName(productCodeAndNameMap.get(line.getProductId())));
  266 + }
  267 +
  268 + if (CollectionUtils.isNotEmpty(contractData.getContractStdProcessingLineList())) {
  269 + Map<String, String> rawToProdRatioCodeAndNameMap = sysDataDicItemService
  270 + .findByDicCode(ContractDistributorStandardController.RAW_TO_PROD_RATIO_DIC_CODE)
  271 + .stream()
  272 + .collect(Collectors.toMap(SysDataDicItem::getCode, SysDataDicItem::getName));
  273 + Map<String, String> rawMaterialCodeAndNameMap = sysDataDicItemService
  274 + .findByDicCode(ContractDistributorStandardController.RAW_MATERIAL)
  275 + .stream()
  276 + .collect(Collectors.toMap(SysDataDicItem::getCode, SysDataDicItem::getName));
  277 + Map<String, String> rawProductGradeCodeAndNameMap = sysDataDicItemService
  278 + .findByDicCode(ContractDistributorStandardController.RAW_MATERIAL_GRADE)
  279 + .stream()
  280 + .collect(Collectors.toMap(SysDataDicItem::getCode, SysDataDicItem::getName));
  281 +
  282 + contractData.getContractStdProcessingLineList().forEach(line -> {
  283 + line.setRawProductName(rawMaterialCodeAndNameMap.get(line.getRawProductId()));
  284 + line.setRawProductGradeName(rawProductGradeCodeAndNameMap.get(line.getRawProductGrade()));
  285 + line.setMaterialProductRatioName(rawToProdRatioCodeAndNameMap.get(line.getMaterialProductRatio()));
  286 + line.setProductName(productCodeAndNameMap.get(line.getProductId()));
  287 + });
  288 + }
  289 + }
167 } 290 }
@@ -7,6 +7,7 @@ import com.lframework.starter.web.core.dto.BaseDto; @@ -7,6 +7,7 @@ import com.lframework.starter.web.core.dto.BaseDto;
7 import com.lframework.starter.web.core.entity.BaseEntity; 7 import com.lframework.starter.web.core.entity.BaseEntity;
8 import lombok.Data; 8 import lombok.Data;
9 9
  10 +import java.math.BigDecimal;
10 import java.time.LocalDateTime; 11 import java.time.LocalDateTime;
11 12
12 /** 13 /**
@@ -73,26 +74,46 @@ public class ContractChangeApplication extends BaseEntity implements BaseDto { @@ -73,26 +74,46 @@ public class ContractChangeApplication extends BaseEntity implements BaseDto {
73 private String approvalStatus; 74 private String approvalStatus;
74 75
75 /** 76 /**
76 - * 审核人ID 77 + * 办事处编码(非持久化字段)
77 */ 78 */
78 - private String approverId; 79 + @TableField(exist = false)
  80 + private String deptCode;
79 81
80 /** 82 /**
81 - * 审核时间 83 + * 办事处名称(非持久化字段)
82 */ 84 */
83 - private LocalDateTime approvedAt; 85 + @TableField(exist = false)
  86 + private String deptCodeName;
84 87
85 /** 88 /**
86 - * 办事处编码(非持久化字段) 89 + * 生产厂编码(非持久化字段)
87 */ 90 */
88 @TableField(exist = false) 91 @TableField(exist = false)
89 - private String deptCode; 92 + private String workshopCode;
90 93
91 /** 94 /**
92 - * 生产厂编码(非持久化字段) 95 + * 生产厂名称(非持久化字段)
93 */ 96 */
94 @TableField(exist = false) 97 @TableField(exist = false)
95 - private String workshopCode; 98 + private String workshopName;
  99 +
  100 + /**
  101 + * 变更后的需方名称(非持久化字段)
  102 + */
  103 + @TableField(exist = false)
  104 + private String buyerName;
  105 +
  106 + /**
  107 + * 变更后的合计金额(非持久化字段)
  108 + */
  109 + @TableField(exist = false)
  110 + private BigDecimal totalAmountIncludingTax;
  111 +
  112 + /**
  113 + * 变更后的合计数量(非持久化字段)
  114 + */
  115 + @TableField(exist = false)
  116 + private BigDecimal totalQuantity;
96 117
97 /** 118 /**
98 * 是否展示审核按钮(非持久化字段) 119 * 是否展示审核按钮(非持久化字段)
@@ -291,7 +291,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic @@ -291,7 +291,7 @@ public class BusinessDataHandlerServiceImpl implements BusinessDataHandlerServic
291 || FlowInstanceStatus.TERMINATION.getCode().equals(flowStatus)) { 291 || FlowInstanceStatus.TERMINATION.getCode().equals(flowStatus)) {
292 contractChangeApplicationService.updateAuditStatus(businessId, "REFUSE"); 292 contractChangeApplicationService.updateAuditStatus(businessId, "REFUSE");
293 } else if (FlowInstanceStatus.UNDO.getCode().equals(flowStatus)) { 293 } else if (FlowInstanceStatus.UNDO.getCode().equals(flowStatus)) {
294 - contractChangeApplicationService.updateAuditStatus(businessId, "CANCEL"); 294 + contractChangeApplicationService.updateAuditStatus(businessId, "REFUSE");
295 } 295 }
296 } 296 }
297 297
1 package com.lframework.xingyun.sc.impl.contract; 1 package com.lframework.xingyun.sc.impl.contract;
2 2
3 -import cn.hutool.core.bean.BeanUtil;  
4 import com.baomidou.mybatisplus.core.conditions.Wrapper; 3 import com.baomidou.mybatisplus.core.conditions.Wrapper;
5 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 4 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
6 import com.github.pagehelper.PageInfo; 5 import com.github.pagehelper.PageInfo;
@@ -23,6 +22,9 @@ import com.lframework.starter.web.core.utils.PageResultUtil; @@ -23,6 +22,9 @@ import com.lframework.starter.web.core.utils.PageResultUtil;
23 import com.lframework.starter.web.inner.components.oplog.OtherOpLogType; 22 import com.lframework.starter.web.inner.components.oplog.OtherOpLogType;
24 import com.lframework.starter.web.inner.entity.SysDept; 23 import com.lframework.starter.web.inner.entity.SysDept;
25 import com.lframework.starter.web.inner.service.system.SysDeptService; 24 import com.lframework.starter.web.inner.service.system.SysDeptService;
  25 +import com.lframework.xingyun.basedata.entity.Customer;
  26 +import com.lframework.xingyun.basedata.service.customer.CustomerService;
  27 +import com.lframework.xingyun.basedata.vo.customer.QueryCustomerVo;
26 import com.lframework.xingyun.basedata.entity.Workshop; 28 import com.lframework.xingyun.basedata.entity.Workshop;
27 import com.lframework.xingyun.basedata.service.workshop.WorkshopService; 29 import com.lframework.xingyun.basedata.service.workshop.WorkshopService;
28 import com.lframework.xingyun.sc.entity.ContractChangeApplication; 30 import com.lframework.xingyun.sc.entity.ContractChangeApplication;
@@ -38,8 +40,6 @@ import com.lframework.xingyun.sc.service.contract.ContractChangeApplicationServi @@ -38,8 +40,6 @@ import com.lframework.xingyun.sc.service.contract.ContractChangeApplicationServi
38 import com.lframework.xingyun.sc.service.contract.ContractDistributorLineService; 40 import com.lframework.xingyun.sc.service.contract.ContractDistributorLineService;
39 import com.lframework.xingyun.sc.service.contract.ContractStdProcessingLineService; 41 import com.lframework.xingyun.sc.service.contract.ContractStdProcessingLineService;
40 import com.lframework.xingyun.sc.vo.contract.createVo.CreateContractChangeApplicationVo; 42 import com.lframework.xingyun.sc.vo.contract.createVo.CreateContractChangeApplicationVo;
41 -import com.lframework.xingyun.sc.vo.contract.createVo.CreateContractDistributorLineVo;  
42 -import com.lframework.xingyun.sc.vo.contract.createVo.CreateContractStdProcessingLineVo;  
43 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeApplicationVo; 43 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeApplicationVo;
44 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeSelectableContractVo; 44 import com.lframework.xingyun.sc.vo.contract.queryVo.QueryContractChangeSelectableContractVo;
45 import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateContractChangeApplicationVo; 45 import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateContractChangeApplicationVo;
@@ -59,8 +59,11 @@ import java.io.Serializable; @@ -59,8 +59,11 @@ import java.io.Serializable;
59 import java.time.LocalDateTime; 59 import java.time.LocalDateTime;
60 import java.util.ArrayList; 60 import java.util.ArrayList;
61 import java.util.Arrays; 61 import java.util.Arrays;
  62 +import java.util.Collections;
62 import java.util.List; 63 import java.util.List;
  64 +import java.util.Map;
63 import java.util.Set; 65 import java.util.Set;
  66 +import java.util.function.Function;
64 import java.util.stream.Collectors; 67 import java.util.stream.Collectors;
65 68
66 /** 69 /**
@@ -89,20 +92,62 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -89,20 +92,62 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
89 private WorkshopService workshopService; 92 private WorkshopService workshopService;
90 @Resource 93 @Resource
91 private SysDeptService sysDeptService; 94 private SysDeptService sysDeptService;
  95 + @Resource
  96 + private CustomerService customerService;
92 97
93 @Override 98 @Override
94 public PageResult<ContractChangeApplication> query(Integer pageIndex, Integer pageSize, QueryContractChangeApplicationVo vo) { 99 public PageResult<ContractChangeApplication> query(Integer pageIndex, Integer pageSize, QueryContractChangeApplicationVo vo) {
95 Assert.greaterThanZero(pageIndex); 100 Assert.greaterThanZero(pageIndex);
96 Assert.greaterThanZero(pageSize); 101 Assert.greaterThanZero(pageSize);
97 102
  103 + List<String> buyerIds = null;
  104 + List<String> contractIdsByBuyer = null;
  105 + if (StringUtils.isNotBlank(vo.getBuyerName())) {
  106 + QueryCustomerVo queryCustomerVo = new QueryCustomerVo();
  107 + queryCustomerVo.setName(vo.getBuyerName());
  108 + List<Customer> customerList = customerService.query(queryCustomerVo);
  109 + if (CollectionUtils.isEmpty(customerList)) {
  110 + return PageResultUtil.convert(new PageInfo<>(Collections.emptyList()));
  111 + }
  112 +
  113 + buyerIds = customerList.stream().map(Customer::getId).distinct().collect(Collectors.toList());
  114 + Wrapper<ContractDistributorStandard> contractWrapper = Wrappers.lambdaQuery(ContractDistributorStandard.class)
  115 + .select(ContractDistributorStandard::getId)
  116 + .in(ContractDistributorStandard::getBuyer, buyerIds);
  117 + contractIdsByBuyer = CollectionUtils.emptyIfNull(contractDistributorStandardMapper.selectList(contractWrapper))
  118 + .stream()
  119 + .map(ContractDistributorStandard::getId)
  120 + .distinct()
  121 + .collect(Collectors.toList());
  122 + }
  123 +
98 PageHelperUtil.startPage(pageIndex, pageSize); 124 PageHelperUtil.startPage(pageIndex, pageSize);
99 - Wrapper<ContractChangeApplication> wrapper = Wrappers.lambdaQuery(ContractChangeApplication.class) 125 + com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<ContractChangeApplication> wrapper =
  126 + Wrappers.lambdaQuery(ContractChangeApplication.class)
100 .like(StringUtils.isNotBlank(vo.getContractCode()), ContractChangeApplication::getContractCode, vo.getContractCode()) 127 .like(StringUtils.isNotBlank(vo.getContractCode()), ContractChangeApplication::getContractCode, vo.getContractCode())
101 .eq(StringUtils.isNotBlank(vo.getContractType()), ContractChangeApplication::getContractType, vo.getContractType()) 128 .eq(StringUtils.isNotBlank(vo.getContractType()), ContractChangeApplication::getContractType, vo.getContractType())
102 - .eq(StringUtils.isNotBlank(vo.getContractStage()), ContractChangeApplication::getContractStage, vo.getContractStage())  
103 - .eq(StringUtils.isNotBlank(vo.getApprovalStatus()), ContractChangeApplication::getApprovalStatus, vo.getApprovalStatus())  
104 - .orderByDesc(ContractChangeApplication::getCreateTime); 129 + .eq(StringUtils.isNotBlank(vo.getApprovalStatus()), ContractChangeApplication::getApprovalStatus, vo.getApprovalStatus());
  130 + if (CollectionUtils.isNotEmpty(buyerIds)) {
  131 + List<String> finalBuyerIds = buyerIds;
  132 + List<String> finalContractIdsByBuyer = contractIdsByBuyer;
  133 + wrapper.and(q -> {
  134 + boolean hasCondition = false;
  135 + if (CollectionUtils.isNotEmpty(finalContractIdsByBuyer)) {
  136 + q.in(ContractChangeApplication::getContractId, finalContractIdsByBuyer);
  137 + hasCondition = true;
  138 + }
  139 + for (String buyerId : finalBuyerIds) {
  140 + if (hasCondition) {
  141 + q.or();
  142 + }
  143 + q.like(ContractChangeApplication::getAfterDataJson, "\"buyer\":\"" + buyerId + "\"");
  144 + hasCondition = true;
  145 + }
  146 + });
  147 + }
  148 + wrapper.orderByDesc(ContractChangeApplication::getCreateTime);
105 List<ContractChangeApplication> datas = list(wrapper); 149 List<ContractChangeApplication> datas = list(wrapper);
  150 + fillDisplayInfo(datas);
106 fillShowExamine(datas); 151 fillShowExamine(datas);
107 return PageResultUtil.convert(new PageInfo<>(datas)); 152 return PageResultUtil.convert(new PageInfo<>(datas));
108 } 153 }
@@ -113,6 +158,7 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -113,6 +158,7 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
113 if (data == null) { 158 if (data == null) {
114 return null; 159 return null;
115 } 160 }
  161 + fillDisplayInfo(Collections.singletonList(data));
116 fillShowExamine(Arrays.asList(data)); 162 fillShowExamine(Arrays.asList(data));
117 return data; 163 return data;
118 } 164 }
@@ -201,8 +247,6 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -201,8 +247,6 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
201 247
202 Wrapper<ContractChangeApplication> wrapper = Wrappers.lambdaUpdate(ContractChangeApplication.class) 248 Wrapper<ContractChangeApplication> wrapper = Wrappers.lambdaUpdate(ContractChangeApplication.class)
203 .set(ContractChangeApplication::getApprovalStatus, CustomerDevelopStatus.CANCEL.name()) 249 .set(ContractChangeApplication::getApprovalStatus, CustomerDevelopStatus.CANCEL.name())
204 - .set(ContractChangeApplication::getApprovedAt, LocalDateTime.now())  
205 - .set(ContractChangeApplication::getApproverId, SecurityUtil.getCurrentUser().getId())  
206 .eq(ContractChangeApplication::getId, id); 250 .eq(ContractChangeApplication::getId, id);
207 update(wrapper); 251 update(wrapper);
208 252
@@ -224,8 +268,6 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -224,8 +268,6 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
224 268
225 Wrapper<ContractChangeApplication> wrapper = Wrappers.lambdaUpdate(ContractChangeApplication.class) 269 Wrapper<ContractChangeApplication> wrapper = Wrappers.lambdaUpdate(ContractChangeApplication.class)
226 .set(ContractChangeApplication::getApprovalStatus, approvalStatus) 270 .set(ContractChangeApplication::getApprovalStatus, approvalStatus)
227 - .set(ContractChangeApplication::getApprovedAt, LocalDateTime.now())  
228 - .set(ContractChangeApplication::getApproverId, SecurityUtil.getCurrentUser().getId())  
229 .eq(ContractChangeApplication::getId, id); 271 .eq(ContractChangeApplication::getId, id);
230 update(wrapper); 272 update(wrapper);
231 273
@@ -289,6 +331,125 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -289,6 +331,125 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
289 } 331 }
290 332
291 /** 333 /**
  334 + * 填充列表展示信息
  335 + *
  336 + * @param datas 申请单列表
  337 + */
  338 + private void fillDisplayInfo(List<ContractChangeApplication> datas) {
  339 + if (CollectionUtils.isEmpty(datas)) {
  340 + return;
  341 + }
  342 +
  343 + Map<String, UpdateContractDistributorStandardVo> afterDataMap = datas.stream()
  344 + .filter(item -> StringUtils.isNotBlank(item.getAfterDataJson()))
  345 + .collect(Collectors.toMap(ContractChangeApplication::getId,
  346 + item -> JsonUtil.parseObject(item.getAfterDataJson(), UpdateContractDistributorStandardVo.class)));
  347 +
  348 + List<String> contractIds = datas.stream()
  349 + .filter(item -> !afterDataMap.containsKey(item.getId()))
  350 + .map(ContractChangeApplication::getContractId)
  351 + .filter(StringUtils::isNotBlank)
  352 + .distinct()
  353 + .collect(Collectors.toList());
  354 + final Map<String, ContractDistributorStandard> contractMap;
  355 + if (CollectionUtils.isNotEmpty(contractIds)) {
  356 + Wrapper<ContractDistributorStandard> contractWrapper = Wrappers.lambdaQuery(ContractDistributorStandard.class)
  357 + .select(ContractDistributorStandard::getId, ContractDistributorStandard::getDeptId,
  358 + ContractDistributorStandard::getWorkshopId, ContractDistributorStandard::getBuyer,
  359 + ContractDistributorStandard::getTotalAmountIncludingTax, ContractDistributorStandard::getTotalQuantity)
  360 + .in(ContractDistributorStandard::getId, contractIds);
  361 + contractMap = CollectionUtils.emptyIfNull(contractDistributorStandardMapper.selectList(contractWrapper))
  362 + .stream()
  363 + .collect(Collectors.toMap(ContractDistributorStandard::getId, Function.identity()));
  364 + } else {
  365 + contractMap = Collections.emptyMap();
  366 + }
  367 +
  368 + List<String> deptIds = new ArrayList<>();
  369 + List<String> workshopIds = new ArrayList<>();
  370 + List<String> customerIds = new ArrayList<>();
  371 + datas.forEach(item -> {
  372 + UpdateContractDistributorStandardVo afterData = afterDataMap.get(item.getId());
  373 + if (afterData != null) {
  374 + if (StringUtils.isNotBlank(afterData.getDeptId())) {
  375 + deptIds.add(afterData.getDeptId());
  376 + }
  377 + if (StringUtils.isNotBlank(afterData.getWorkshopId())) {
  378 + workshopIds.add(afterData.getWorkshopId());
  379 + }
  380 + if (StringUtils.isNotBlank(afterData.getBuyer())) {
  381 + customerIds.add(afterData.getBuyer());
  382 + }
  383 + return;
  384 + }
  385 +
  386 + ContractDistributorStandard contract = contractMap.get(item.getContractId());
  387 + if (contract != null) {
  388 + if (StringUtils.isNotBlank(contract.getDeptId())) {
  389 + deptIds.add(contract.getDeptId());
  390 + }
  391 + if (StringUtils.isNotBlank(contract.getWorkshopId())) {
  392 + workshopIds.add(contract.getWorkshopId());
  393 + }
  394 + if (StringUtils.isNotBlank(contract.getBuyer())) {
  395 + customerIds.add(contract.getBuyer());
  396 + }
  397 + }
  398 + });
  399 +
  400 + Map<String, SysDept> deptMap = CollectionUtils.emptyIfNull(sysDeptService.listByIds(deptIds.stream().distinct().collect(Collectors.toList())))
  401 + .stream()
  402 + .collect(Collectors.toMap(SysDept::getId, Function.identity()));
  403 + Map<String, Workshop> workshopMap = CollectionUtils.emptyIfNull(workshopService.listByIds(workshopIds.stream().distinct().collect(Collectors.toList())))
  404 + .stream()
  405 + .collect(Collectors.toMap(Workshop::getId, Function.identity()));
  406 + Map<String, Customer> customerMap = CollectionUtils.emptyIfNull(customerService.listByIds(customerIds.stream().distinct().collect(Collectors.toList())))
  407 + .stream()
  408 + .collect(Collectors.toMap(Customer::getId, Function.identity()));
  409 +
  410 + datas.forEach(item -> {
  411 + String deptId = null;
  412 + String workshopId = null;
  413 + String buyerId = null;
  414 +
  415 + UpdateContractDistributorStandardVo afterData = afterDataMap.get(item.getId());
  416 + if (afterData != null) {
  417 + deptId = afterData.getDeptId();
  418 + workshopId = afterData.getWorkshopId();
  419 + buyerId = afterData.getBuyer();
  420 + item.setTotalAmountIncludingTax(afterData.getTotalAmountIncludingTax());
  421 + item.setTotalQuantity(afterData.getTotalQuantity());
  422 + } else {
  423 + ContractDistributorStandard contract = contractMap.get(item.getContractId());
  424 + if (contract != null) {
  425 + deptId = contract.getDeptId();
  426 + workshopId = contract.getWorkshopId();
  427 + buyerId = contract.getBuyer();
  428 + item.setTotalAmountIncludingTax(contract.getTotalAmountIncludingTax());
  429 + item.setTotalQuantity(contract.getTotalQuantity());
  430 + }
  431 + }
  432 +
  433 + SysDept dept = deptMap.get(deptId);
  434 + if (dept != null) {
  435 + item.setDeptCode(dept.getCode());
  436 + item.setDeptCodeName(dept.getName());
  437 + }
  438 +
  439 + Workshop workshop = workshopMap.get(workshopId);
  440 + if (workshop != null) {
  441 + item.setWorkshopCode(workshop.getCode());
  442 + item.setWorkshopName(workshop.getName());
  443 + }
  444 +
  445 + Customer customer = customerMap.get(buyerId);
  446 + if (customer != null) {
  447 + item.setBuyerName(customer.getName());
  448 + }
  449 + });
  450 + }
  451 +
  452 + /**
292 * 获取合同,不存在则抛异常 453 * 获取合同,不存在则抛异常
293 * 454 *
294 * @param contractId 合同ID 455 * @param contractId 合同ID
@@ -526,6 +687,12 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -526,6 +687,12 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
526 .set(ContractDistributorStandard::getDesignatedConsignee, vo.getDesignatedConsignee()) 687 .set(ContractDistributorStandard::getDesignatedConsignee, vo.getDesignatedConsignee())
527 .set(ContractDistributorStandard::getSpecialInstructions, vo.getSpecialInstructions()) 688 .set(ContractDistributorStandard::getSpecialInstructions, vo.getSpecialInstructions())
528 .set(ContractDistributorStandard::getRemarks, vo.getRemarks()) 689 .set(ContractDistributorStandard::getRemarks, vo.getRemarks())
  690 + .set(ContractDistributorStandard::getFormalFileId, vo.getFormalFileId())
  691 + .set(ContractDistributorStandard::getFormalFileName, vo.getFormalFileName())
  692 + .set(ContractDistributorStandard::getFormalStandardized, vo.getFormalStandardized())
  693 + .set(ContractDistributorStandard::getStandardFileId, vo.getStandardFileId())
  694 + .set(ContractDistributorStandard::getStandardFileName, vo.getStandardFileName())
  695 + .set(ContractDistributorStandard::getStandardStandardized, vo.getStandardStandardized())
529 .set(ContractDistributorStandard::getTotalQuantity, vo.getTotalQuantity()) 696 .set(ContractDistributorStandard::getTotalQuantity, vo.getTotalQuantity())
530 .set(ContractDistributorStandard::getTotalAmountExcludingTax, vo.getTotalAmountExcludingTax()) 697 .set(ContractDistributorStandard::getTotalAmountExcludingTax, vo.getTotalAmountExcludingTax())
531 .set(ContractDistributorStandard::getTotalAmountIncludingTax, vo.getTotalAmountIncludingTax()) 698 .set(ContractDistributorStandard::getTotalAmountIncludingTax, vo.getTotalAmountIncludingTax())
@@ -544,21 +711,24 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -544,21 +711,24 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
544 * @param vo 合同数据 711 * @param vo 合同数据
545 */ 712 */
546 private void overwriteDistributorLines(String contractId, UpdateContractDistributorStandardVo vo) { 713 private void overwriteDistributorLines(String contractId, UpdateContractDistributorStandardVo vo) {
547 - Wrapper<ContractDistributorLine> removeWrapper = Wrappers.lambdaQuery(ContractDistributorLine.class)  
548 - .eq(ContractDistributorLine::getContractId, contractId);  
549 - contractDistributorLineService.remove(removeWrapper);  
550 -  
551 if (CollectionUtils.isEmpty(vo.getContractDistributorLineList())) { 714 if (CollectionUtils.isEmpty(vo.getContractDistributorLineList())) {
552 return; 715 return;
553 } 716 }
554 717
555 for (int i = 0; i < vo.getContractDistributorLineList().size(); i++) { 718 for (int i = 0; i < vo.getContractDistributorLineList().size(); i++) {
556 UpdateContractDistributorLineVo lineVo = vo.getContractDistributorLineList().get(i); 719 UpdateContractDistributorLineVo lineVo = vo.getContractDistributorLineList().get(i);
557 - CreateContractDistributorLineVo createVo = new CreateContractDistributorLineVo();  
558 - BeanUtil.copyProperties(lineVo, createVo);  
559 - createVo.setContractId(contractId);  
560 - createVo.setShowOrder(i);  
561 - contractDistributorLineService.create(createVo); 720 + if (StringUtils.isBlank(lineVo.getId())) {
  721 + throw new DefaultClientException("合同变更后的普通合同行存在缺少ID的数据,不允许新增或删除物料行!");
  722 + }
  723 +
  724 + ContractDistributorLine line = contractDistributorLineService.findById(lineVo.getId());
  725 + if (line == null || !StringUtils.equals(contractId, line.getContractId())) {
  726 + throw new DefaultClientException("合同变更后的普通合同行数据异常,存在不属于当前合同的物料行!");
  727 + }
  728 +
  729 + lineVo.setContractId(contractId);
  730 + lineVo.setShowOrder(i);
  731 + contractDistributorLineService.update(lineVo);
562 } 732 }
563 } 733 }
564 734
@@ -569,21 +739,24 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont @@ -569,21 +739,24 @@ public class ContractChangeApplicationServiceImpl extends BaseMpServiceImpl<Cont
569 * @param vo 合同数据 739 * @param vo 合同数据
570 */ 740 */
571 private void overwriteProcessingLines(String contractId, UpdateContractDistributorStandardVo vo) { 741 private void overwriteProcessingLines(String contractId, UpdateContractDistributorStandardVo vo) {
572 - Wrapper<ContractStdProcessingLine> removeWrapper = Wrappers.lambdaQuery(ContractStdProcessingLine.class)  
573 - .eq(ContractStdProcessingLine::getContractId, contractId);  
574 - contractStdProcessingLineService.remove(removeWrapper);  
575 -  
576 if (CollectionUtils.isEmpty(vo.getContractStdProcessingLineList())) { 742 if (CollectionUtils.isEmpty(vo.getContractStdProcessingLineList())) {
577 return; 743 return;
578 } 744 }
579 745
580 for (int i = 0; i < vo.getContractStdProcessingLineList().size(); i++) { 746 for (int i = 0; i < vo.getContractStdProcessingLineList().size(); i++) {
581 UpdateContractStdProcessingLineVo lineVo = vo.getContractStdProcessingLineList().get(i); 747 UpdateContractStdProcessingLineVo lineVo = vo.getContractStdProcessingLineList().get(i);
582 - CreateContractStdProcessingLineVo createVo = new CreateContractStdProcessingLineVo();  
583 - BeanUtil.copyProperties(lineVo, createVo);  
584 - createVo.setContractId(contractId);  
585 - createVo.setShowOrder(i);  
586 - contractStdProcessingLineService.create(createVo); 748 + if (StringUtils.isBlank(lineVo.getId())) {
  749 + throw new DefaultClientException("合同变更后的加工合同行存在缺少ID的数据,不允许新增或删除物料行!");
  750 + }
  751 +
  752 + ContractStdProcessingLine line = contractStdProcessingLineService.findById(lineVo.getId());
  753 + if (line == null || !StringUtils.equals(contractId, line.getContractId())) {
  754 + throw new DefaultClientException("合同变更后的加工合同行数据异常,存在不属于当前合同的物料行!");
  755 + }
  756 +
  757 + lineVo.setContractId(contractId);
  758 + lineVo.setShowOrder(i);
  759 + contractStdProcessingLineService.update(lineVo);
587 } 760 }
588 } 761 }
589 } 762 }
@@ -30,7 +30,7 @@ public class CreateContractChangeApplicationVo implements BaseVo, Serializable { @@ -30,7 +30,7 @@ public class CreateContractChangeApplicationVo implements BaseVo, Serializable {
30 * 变更原因 30 * 变更原因
31 */ 31 */
32 @ApiModelProperty(value = "变更原因") 32 @ApiModelProperty(value = "变更原因")
33 - @Length(message = "变更原因最多允许200个字符!") 33 + @Length(message = "变更原因最多允许500个字符!")
34 private String changeReason; 34 private String changeReason;
35 35
36 /** 36 /**
@@ -38,4 +38,10 @@ public class QueryContractChangeApplicationVo extends PageVo implements BaseVo, @@ -38,4 +38,10 @@ public class QueryContractChangeApplicationVo extends PageVo implements BaseVo,
38 */ 38 */
39 @ApiModelProperty("审核状态") 39 @ApiModelProperty("审核状态")
40 private String approvalStatus; 40 private String approvalStatus;
  41 +
  42 + /**
  43 + * 需方名称
  44 + */
  45 + @ApiModelProperty("需方名称")
  46 + private String buyerName;
41 } 47 }
@@ -29,7 +29,7 @@ public class UpdateContractChangeApplicationVo implements BaseVo, Serializable { @@ -29,7 +29,7 @@ public class UpdateContractChangeApplicationVo implements BaseVo, Serializable {
29 * 变更原因 29 * 变更原因
30 */ 30 */
31 @ApiModelProperty(value = "变更原因") 31 @ApiModelProperty(value = "变更原因")
32 - @Length(message = "变更原因最多允许200个字符!") 32 + @Length(message = "变更原因最多允许500个字符!")
33 private String changeReason; 33 private String changeReason;
34 34
35 /** 35 /**