Commit dc626e31ee84ccff40075200126e75d87a073cd6

Authored by 房远帅
1 parent 19fc7a9d

优化:1:剩余锁规数量移到子表里面;2:允许办事处内勤锁价操作,并且记录锁价人

@@ -761,6 +761,7 @@ create table if not exists `tbl_contract_distributor_standard` @@ -761,6 +761,7 @@ create table if not exists `tbl_contract_distributor_standard`
761 `standard_approver_id` varchar(32) COMMENT '标准合同审批人ID', 761 `standard_approver_id` varchar(32) COMMENT '标准合同审批人ID',
762 `standard_time` datetime COMMENT '标准合同审批完成时间', 762 `standard_time` datetime COMMENT '标准合同审批完成时间',
763 `price_spec_locked` TINYINT(1) COMMENT '是否已完成锁价/锁规', 763 `price_spec_locked` TINYINT(1) COMMENT '是否已完成锁价/锁规',
  764 + `price_lock_user_id` varchar(32) COMMENT '锁价人员ID',
764 `signed_contract_file_id` VARCHAR(100) COMMENT '双方盖章合同ID', 765 `signed_contract_file_id` VARCHAR(100) COMMENT '双方盖章合同ID',
765 `signed_contract_file_name` VARCHAR(255) COMMENT '双方盖章合同名称', 766 `signed_contract_file_name` VARCHAR(255) COMMENT '双方盖章合同名称',
766 `changed` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否变更', 767 `changed` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否变更',
@@ -1470,6 +1471,9 @@ ALTER TABLE tbl_contract_distributor_standard @@ -1470,6 +1471,9 @@ ALTER TABLE tbl_contract_distributor_standard
1470 ALTER TABLE tbl_contract_distributor_standard 1471 ALTER TABLE tbl_contract_distributor_standard
1471 ADD COLUMN changed tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否变更'; 1472 ADD COLUMN changed tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否变更';
1472 1473
  1474 +ALTER TABLE tbl_contract_distributor_standard
  1475 + ADD COLUMN price_lock_user_id varchar(32) DEFAULT NULL COMMENT '锁价人员ID';
  1476 +
1473 CREATE TABLE IF NOT EXISTS `tbl_contract_change_application` 1477 CREATE TABLE IF NOT EXISTS `tbl_contract_change_application`
1474 ( 1478 (
1475 `id` varchar(32) NOT NULL COMMENT 'ID', 1479 `id` varchar(32) NOT NULL COMMENT 'ID',
@@ -81,6 +81,12 @@ public class GetContractDistributorLineBo extends BaseBo<ContractDistributorLine @@ -81,6 +81,12 @@ public class GetContractDistributorLineBo extends BaseBo<ContractDistributorLine
81 private BigDecimal quantity; 81 private BigDecimal quantity;
82 82
83 /** 83 /**
  84 + * 剩余锁规数量
  85 + */
  86 + @ApiModelProperty("剩余锁规数量")
  87 + private BigDecimal remainingQuantity;
  88 +
  89 + /**
84 * 加工费 90 * 加工费
85 */ 91 */
86 @ApiModelProperty(value = "加工费") 92 @ApiModelProperty(value = "加工费")
@@ -437,6 +437,18 @@ public class GetContractDistributorStandardBo extends BaseBo<ContractDistributor @@ -437,6 +437,18 @@ public class GetContractDistributorStandardBo extends BaseBo<ContractDistributor
437 @ApiModelProperty(value = "是否已完成锁价/锁规") 437 @ApiModelProperty(value = "是否已完成锁价/锁规")
438 private Boolean priceSpecLocked; 438 private Boolean priceSpecLocked;
439 439
  440 + /**
  441 + * 锁价人员ID
  442 + */
  443 + @ApiModelProperty(value = "锁价人员ID")
  444 + private String priceLockUserId;
  445 +
  446 + /**
  447 + * 锁价人员名称
  448 + */
  449 + @ApiModelProperty(value = "锁价人员名称")
  450 + private String priceLockUserName;
  451 +
440 @ApiModelProperty(value = "变更原因") 452 @ApiModelProperty(value = "变更原因")
441 private String changeReason; 453 private String changeReason;
442 454
@@ -228,6 +228,18 @@ public class QueryContractDistributorStandardBo extends BaseBo<ContractDistribut @@ -228,6 +228,18 @@ public class QueryContractDistributorStandardBo extends BaseBo<ContractDistribut
228 @ApiModelProperty(value = "是否已完成锁价/锁规") 228 @ApiModelProperty(value = "是否已完成锁价/锁规")
229 private Boolean priceSpecLocked; 229 private Boolean priceSpecLocked;
230 230
  231 + /**
  232 + * 锁价人员ID
  233 + */
  234 + @ApiModelProperty(value = "锁价人员ID")
  235 + private String priceLockUserId;
  236 +
  237 + /**
  238 + * 锁价人员名称
  239 + */
  240 + @ApiModelProperty(value = "锁价人员名称")
  241 + private String priceLockUserName;
  242 +
231 @ApiModelProperty(value = "变更原因") 243 @ApiModelProperty(value = "变更原因")
232 private String changeReason; 244 private String changeReason;
233 245
@@ -225,6 +225,19 @@ public class ContractDistributorStandardController extends DefaultBaseController @@ -225,6 +225,19 @@ public class ContractDistributorStandardController extends DefaultBaseController
225 List<SysDept> regionList = sysDeptService.listByIds(regionIds); 225 List<SysDept> regionList = sysDeptService.listByIds(regionIds);
226 regionMap = regionList.stream().collect(Collectors.toMap(SysDept::getId, SysDept::getName)); 226 regionMap = regionList.stream().collect(Collectors.toMap(SysDept::getId, SysDept::getName));
227 } 227 }
  228 + List<String> priceLockUserIds = boList.stream()
  229 + .map(QueryContractDistributorStandardBo::getPriceLockUserId)
  230 + .filter(StringUtils::isNotBlank)
  231 + .distinct()
  232 + .collect(Collectors.toList());
  233 + final Map<String, SysUser> priceLockUserMap;
  234 + if (CollectionUtils.isNotEmpty(priceLockUserIds)) {
  235 + priceLockUserMap = CollectionUtils.emptyIfNull(sysUserService.listByIds(priceLockUserIds))
  236 + .stream()
  237 + .collect(Collectors.toMap(SysUser::getId, Function.identity()));
  238 + } else {
  239 + priceLockUserMap = Collections.emptyMap();
  240 + }
228 Map<String, String> finalRegionMap = regionMap; 241 Map<String, String> finalRegionMap = regionMap;
229 boList.forEach(bo -> { 242 boList.forEach(bo -> {
230 if (bo == null) { 243 if (bo == null) {
@@ -267,6 +280,10 @@ public class ContractDistributorStandardController extends DefaultBaseController @@ -267,6 +280,10 @@ public class ContractDistributorStandardController extends DefaultBaseController
267 Customer customer = customerMap.get(bo.getStockUpCompanyId()); 280 Customer customer = customerMap.get(bo.getStockUpCompanyId());
268 bo.setStockUpCompanyName(customer == null ? "" : customer.getName()); 281 bo.setStockUpCompanyName(customer == null ? "" : customer.getName());
269 } 282 }
  283 + if (StringUtils.isNotBlank(bo.getPriceLockUserId())) {
  284 + SysUser priceLockUser = priceLockUserMap.get(bo.getPriceLockUserId());
  285 + bo.setPriceLockUserName(priceLockUser == null ? "" : priceLockUser.getName());
  286 + }
270 //合同状态(标准合同列表展示) 287 //合同状态(标准合同列表展示)
271 if (vo != null && "STANDARD".equals(vo.getStatus())) { 288 if (vo != null && "STANDARD".equals(vo.getStatus())) {
272 String contractId = bo.getId(); 289 String contractId = bo.getId();
@@ -374,6 +391,7 @@ public class ContractDistributorStandardController extends DefaultBaseController @@ -374,6 +391,7 @@ public class ContractDistributorStandardController extends DefaultBaseController
374 contractDistributorLineBo.setProductName(productName); 391 contractDistributorLineBo.setProductName(productName);
375 lineBoList.add(contractDistributorLineBo); 392 lineBoList.add(contractDistributorLineBo);
376 }); 393 });
  394 + fillUnlockedContractLineRemainingQuantity(result, lineBoList);
377 395
378 result.setContractDistributorLineList(lineBoList); 396 result.setContractDistributorLineList(lineBoList);
379 } 397 }
@@ -413,6 +431,10 @@ public class ContractDistributorStandardController extends DefaultBaseController @@ -413,6 +431,10 @@ public class ContractDistributorStandardController extends DefaultBaseController
413 Customer customer1 = customerService.findById(result.getStockUpCompanyId()); 431 Customer customer1 = customerService.findById(result.getStockUpCompanyId());
414 result.setStockUpCompanyName(customer1 == null ? null : customer1.getName()); 432 result.setStockUpCompanyName(customer1 == null ? null : customer1.getName());
415 } 433 }
  434 + if (StringUtils.isNotBlank(result.getPriceLockUserId())) {
  435 + SysUser priceLockUser = sysUserService.findById(result.getPriceLockUserId());
  436 + result.setPriceLockUserName(priceLockUser == null ? null : priceLockUser.getName());
  437 + }
416 //合同状态(标准合同列表展示) 438 //合同状态(标准合同列表展示)
417 if ("STANDARD".equals(data.getStatus())) { 439 if ("STANDARD".equals(data.getStatus())) {
418 String shippingStatusName = Stream.of( 440 String shippingStatusName = Stream.of(
@@ -447,6 +469,58 @@ public class ContractDistributorStandardController extends DefaultBaseController @@ -447,6 +469,58 @@ public class ContractDistributorStandardController extends DefaultBaseController
447 } 469 }
448 470
449 /** 471 /**
  472 + * 回填未锁规合同子表剩余锁规数量
  473 + *
  474 + * @param contract 合同
  475 + * @param lineBoList 合同子表
  476 + */
  477 + private void fillUnlockedContractLineRemainingQuantity(GetContractDistributorStandardBo contract,
  478 + List<GetContractDistributorLineBo> lineBoList) {
  479 + if (contract == null || CollectionUtils.isEmpty(lineBoList)) {
  480 + return;
  481 + }
  482 + if (!"DRAFT_DIST_AGMT".equals(contract.getType()) && !"INTL_OPEN_SPEC_AGMT".equals(contract.getType())) {
  483 + return;
  484 + }
  485 + if (StringUtils.isBlank(contract.getId())) {
  486 + return;
  487 + }
  488 +
  489 + Wrapper<ContractDistributorStandard> childWrapper = Wrappers.lambdaQuery(ContractDistributorStandard.class)
  490 + .select(ContractDistributorStandard::getId)
  491 + .eq(ContractDistributorStandard::getParentId, contract.getId());
  492 + List<String> childContractIds = CollectionUtils.emptyIfNull(contractDistributorStandardService.list(childWrapper))
  493 + .stream()
  494 + .map(ContractDistributorStandard::getId)
  495 + .filter(StringUtils::isNotBlank)
  496 + .collect(Collectors.toList());
  497 +
  498 + Map<String, BigDecimal> lockedQuantityMap = Collections.emptyMap();
  499 + if (CollectionUtils.isNotEmpty(childContractIds)) {
  500 + Wrapper<ContractDistributorLine> childLineWrapper = Wrappers.lambdaQuery(ContractDistributorLine.class)
  501 + .select(ContractDistributorLine::getItemId, ContractDistributorLine::getQuantity)
  502 + .in(ContractDistributorLine::getContractId, childContractIds);
  503 + lockedQuantityMap = CollectionUtils.emptyIfNull(contractDistributorLineService.list(childLineWrapper))
  504 + .stream()
  505 + .filter(Objects::nonNull)
  506 + .filter(item -> StringUtils.isNotBlank(item.getItemId()))
  507 + .filter(item -> item.getQuantity() != null)
  508 + .collect(Collectors.groupingBy(ContractDistributorLine::getItemId,
  509 + Collectors.reducing(BigDecimal.ZERO, ContractDistributorLine::getQuantity, BigDecimal::add)));
  510 + }
  511 +
  512 + Map<String, BigDecimal> finalLockedQuantityMap = lockedQuantityMap;
  513 + lineBoList.forEach(line -> {
  514 + BigDecimal quantity = line.getQuantity() == null ? BigDecimal.ZERO : line.getQuantity();
  515 + BigDecimal lockedQuantity = StringUtils.isBlank(line.getItemId())
  516 + ? BigDecimal.ZERO
  517 + : finalLockedQuantityMap.getOrDefault(line.getItemId(), BigDecimal.ZERO);
  518 + BigDecimal remainingQuantity = quantity.subtract(lockedQuantity);
  519 + line.setRemainingQuantity(remainingQuantity);
  520 + });
  521 + }
  522 +
  523 + /**
450 * 新增 524 * 新增
451 */ 525 */
452 @ApiOperation("新增") 526 @ApiOperation("新增")
@@ -314,6 +314,11 @@ public class ContractDistributorStandard extends BaseEntity implements BaseDto { @@ -314,6 +314,11 @@ public class ContractDistributorStandard extends BaseEntity implements BaseDto {
314 private Boolean priceSpecLocked; 314 private Boolean priceSpecLocked;
315 315
316 /** 316 /**
  317 + * 锁价人员ID
  318 + */
  319 + private String priceLockUserId;
  320 +
  321 + /**
317 * 变更原因 322 * 变更原因
318 */ 323 */
319 private String changeReason; 324 private String changeReason;
@@ -1476,6 +1476,7 @@ public class ContractDistributorStandardServiceImpl extends @@ -1476,6 +1476,7 @@ public class ContractDistributorStandardServiceImpl extends
1476 data.setOrderDate(LocalDate.now()); 1476 data.setOrderDate(LocalDate.now());
1477 data.setStatus("STANDARD"); 1477 data.setStatus("STANDARD");
1478 data.setParentId(vo.getId()); 1478 data.setParentId(vo.getId());
  1479 + data.setPriceLockUserId(SecurityUtil.getCurrentUser().getId());
1479 data.setChangeReason(vo.getChangeReason()); 1480 data.setChangeReason(vo.getChangeReason());
1480 // data.setStandardizedAt(LocalDateTime.now()); 1481 // data.setStandardizedAt(LocalDateTime.now());
1481 getBaseMapper().insert(data); 1482 getBaseMapper().insert(data);