Commit dc626e31ee84ccff40075200126e75d87a073cd6

Authored by 房远帅
1 parent 19fc7a9d

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

... ... @@ -761,6 +761,7 @@ create table if not exists `tbl_contract_distributor_standard`
761 761 `standard_approver_id` varchar(32) COMMENT '标准合同审批人ID',
762 762 `standard_time` datetime COMMENT '标准合同审批完成时间',
763 763 `price_spec_locked` TINYINT(1) COMMENT '是否已完成锁价/锁规',
  764 + `price_lock_user_id` varchar(32) COMMENT '锁价人员ID',
764 765 `signed_contract_file_id` VARCHAR(100) COMMENT '双方盖章合同ID',
765 766 `signed_contract_file_name` VARCHAR(255) COMMENT '双方盖章合同名称',
766 767 `changed` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否变更',
... ... @@ -1470,6 +1471,9 @@ ALTER TABLE tbl_contract_distributor_standard
1470 1471 ALTER TABLE tbl_contract_distributor_standard
1471 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 1477 CREATE TABLE IF NOT EXISTS `tbl_contract_change_application`
1474 1478 (
1475 1479 `id` varchar(32) NOT NULL COMMENT 'ID',
... ...
... ... @@ -81,6 +81,12 @@ public class GetContractDistributorLineBo extends BaseBo<ContractDistributorLine
81 81 private BigDecimal quantity;
82 82
83 83 /**
  84 + * 剩余锁规数量
  85 + */
  86 + @ApiModelProperty("剩余锁规数量")
  87 + private BigDecimal remainingQuantity;
  88 +
  89 + /**
84 90 * 加工费
85 91 */
86 92 @ApiModelProperty(value = "加工费")
... ...
... ... @@ -437,6 +437,18 @@ public class GetContractDistributorStandardBo extends BaseBo<ContractDistributor
437 437 @ApiModelProperty(value = "是否已完成锁价/锁规")
438 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 452 @ApiModelProperty(value = "变更原因")
441 453 private String changeReason;
442 454
... ...
... ... @@ -228,6 +228,18 @@ public class QueryContractDistributorStandardBo extends BaseBo<ContractDistribut
228 228 @ApiModelProperty(value = "是否已完成锁价/锁规")
229 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 243 @ApiModelProperty(value = "变更原因")
232 244 private String changeReason;
233 245
... ...
... ... @@ -225,6 +225,19 @@ public class ContractDistributorStandardController extends DefaultBaseController
225 225 List<SysDept> regionList = sysDeptService.listByIds(regionIds);
226 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 241 Map<String, String> finalRegionMap = regionMap;
229 242 boList.forEach(bo -> {
230 243 if (bo == null) {
... ... @@ -267,6 +280,10 @@ public class ContractDistributorStandardController extends DefaultBaseController
267 280 Customer customer = customerMap.get(bo.getStockUpCompanyId());
268 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 288 if (vo != null && "STANDARD".equals(vo.getStatus())) {
272 289 String contractId = bo.getId();
... ... @@ -374,6 +391,7 @@ public class ContractDistributorStandardController extends DefaultBaseController
374 391 contractDistributorLineBo.setProductName(productName);
375 392 lineBoList.add(contractDistributorLineBo);
376 393 });
  394 + fillUnlockedContractLineRemainingQuantity(result, lineBoList);
377 395
378 396 result.setContractDistributorLineList(lineBoList);
379 397 }
... ... @@ -413,6 +431,10 @@ public class ContractDistributorStandardController extends DefaultBaseController
413 431 Customer customer1 = customerService.findById(result.getStockUpCompanyId());
414 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 439 if ("STANDARD".equals(data.getStatus())) {
418 440 String shippingStatusName = Stream.of(
... ... @@ -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 526 @ApiOperation("新增")
... ...
... ... @@ -314,6 +314,11 @@ public class ContractDistributorStandard extends BaseEntity implements BaseDto {
314 314 private Boolean priceSpecLocked;
315 315
316 316 /**
  317 + * 锁价人员ID
  318 + */
  319 + private String priceLockUserId;
  320 +
  321 + /**
317 322 * 变更原因
318 323 */
319 324 private String changeReason;
... ...
... ... @@ -1476,6 +1476,7 @@ public class ContractDistributorStandardServiceImpl extends
1476 1476 data.setOrderDate(LocalDate.now());
1477 1477 data.setStatus("STANDARD");
1478 1478 data.setParentId(vo.getId());
  1479 + data.setPriceLockUserId(SecurityUtil.getCurrentUser().getId());
1479 1480 data.setChangeReason(vo.getChangeReason());
1480 1481 // data.setStandardizedAt(LocalDateTime.now());
1481 1482 getBaseMapper().insert(data);
... ...