优化
This commit is contained in:
@@ -170,10 +170,7 @@ public class ContainerService {
|
||||
}
|
||||
return required(id);
|
||||
}
|
||||
ContainerBookingEntity current = repository.findForUpdate(id);
|
||||
if (current == null || !"ACTIVE".equals(current.getRecordStatus())) {
|
||||
throw new BizException(ResultCode.NOT_FOUND, "货柜不存在");
|
||||
}
|
||||
ContainerBookingEntity current = required(id);
|
||||
requireVersion(current, request.version());
|
||||
if (status(current) == SmartLoadingStatus.COMPLETED) throw conflict("装柜完成后货柜全部只读,不能修改");
|
||||
replay = transportHistories == null ? null
|
||||
|
||||
@@ -317,17 +317,27 @@ public class SmartLoadingService {
|
||||
List<LoadingPlanItemEntity> others = new ArrayList<>(repository.items(planId));
|
||||
others.removeIf(x -> Objects.equals(x.getId(), itemId));
|
||||
checkRouteAndCapacity(booking, others, candidate, request.packageCount());
|
||||
String before = json(adjustSnapshot(item));
|
||||
LoadingPlanItemEntity desired = new LoadingPlanItemEntity();
|
||||
desired.setPackageCount(request.packageCount());
|
||||
desired.setGrossWeightKg(unit(candidate.unitGrossWeightKg()).multiply(BigDecimal.valueOf(request.packageCount())));
|
||||
desired.setNetWeightKg(unit(candidate.unitNetWeightKg()).multiply(BigDecimal.valueOf(request.packageCount())));
|
||||
desired.setVolumeCbm(unit(candidate.unitVolumeCbm()).multiply(BigDecimal.valueOf(request.packageCount())));
|
||||
desired.setPalletCount(estimatedPalletCount(candidate, request.packageCount()));
|
||||
applyCargo(desired, cargo, request.packageCount());
|
||||
if (sameAdjustSnapshot(item, desired)) {
|
||||
return view(plan, booking);
|
||||
}
|
||||
touch(plan, operatorId, operatorName);
|
||||
item.setPackageCount(request.packageCount());
|
||||
item.setGrossWeightKg(unit(candidate.unitGrossWeightKg()).multiply(BigDecimal.valueOf(request.packageCount())));
|
||||
item.setNetWeightKg(unit(candidate.unitNetWeightKg()).multiply(BigDecimal.valueOf(request.packageCount())));
|
||||
item.setVolumeCbm(unit(candidate.unitVolumeCbm()).multiply(BigDecimal.valueOf(request.packageCount())));
|
||||
item.setPalletCount(estimatedPalletCount(candidate, request.packageCount())); applyCargo(item, cargo, request.packageCount());
|
||||
item.setPackageCount(desired.getPackageCount());
|
||||
item.setGrossWeightKg(desired.getGrossWeightKg());
|
||||
item.setNetWeightKg(desired.getNetWeightKg());
|
||||
item.setVolumeCbm(desired.getVolumeCbm());
|
||||
item.setPalletCount(desired.getPalletCount()); applyCargo(item, cargo, request.packageCount());
|
||||
item.setUpdatedBy(operatorId); item.setUpdatedByName(operatorName);
|
||||
if (repository.update(item) != 1) throw conflict("装柜明细已被并发修改");
|
||||
history(planId, itemId, "ADJUST_ITEM", plan.getPlanStatus(), plan.getPlanStatus(), operation,
|
||||
json(values("version", request.expectedPlanVersion(), "packageCount", item.getPackageCount())),
|
||||
json(values("requestHash", requestHash, "packageCount", request.packageCount())),
|
||||
before, json(values("requestHash", requestHash, "business", adjustSnapshot(item))),
|
||||
operatorId, operatorName);
|
||||
loadingPickService.sync(planId, item);
|
||||
return view(repository.plan(planId), requireBooking(plan.getContainerBookingId()));
|
||||
@@ -483,6 +493,33 @@ public class SmartLoadingService {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean sameAdjustSnapshot(LoadingPlanItemEntity current, LoadingPlanItemEntity desired) {
|
||||
return Objects.equals(current.getPackageCount(), desired.getPackageCount())
|
||||
&& decimalEquals(current.getGrossWeightKg(), desired.getGrossWeightKg())
|
||||
&& decimalEquals(current.getNetWeightKg(), desired.getNetWeightKg())
|
||||
&& decimalEquals(current.getVolumeCbm(), desired.getVolumeCbm())
|
||||
&& Objects.equals(current.getPalletCount(), desired.getPalletCount())
|
||||
&& Objects.equals(current.getSkuCode(), desired.getSkuCode())
|
||||
&& Objects.equals(current.getProductNameEn(), desired.getProductNameEn())
|
||||
&& Objects.equals(current.getUnitsPerCarton(), desired.getUnitsPerCarton())
|
||||
&& Objects.equals(current.getProductQuantity(), desired.getProductQuantity())
|
||||
&& Objects.equals(current.getCustomerRemark(), desired.getCustomerRemark())
|
||||
&& Objects.equals(current.getInternalRemark(), desired.getInternalRemark());
|
||||
}
|
||||
|
||||
private static boolean decimalEquals(BigDecimal left, BigDecimal right) {
|
||||
return left == null ? right == null : right != null && left.compareTo(right) == 0;
|
||||
}
|
||||
|
||||
private static Map<String, Object> adjustSnapshot(LoadingPlanItemEntity item) {
|
||||
return values("packageCount", item.getPackageCount(), "grossWeightKg", item.getGrossWeightKg(),
|
||||
"netWeightKg", item.getNetWeightKg(), "volumeCbm", item.getVolumeCbm(),
|
||||
"palletCount", item.getPalletCount(), "skuCode", item.getSkuCode(),
|
||||
"productNameEn", item.getProductNameEn(), "unitsPerCarton", item.getUnitsPerCarton(),
|
||||
"productQuantity", item.getProductQuantity(), "customerRemark", item.getCustomerRemark(),
|
||||
"internalRemark", item.getInternalRemark(), "version", item.getVersion());
|
||||
}
|
||||
|
||||
private OrderCargoClient.CargoBinding loadCargo(Candidate candidate) {
|
||||
try {
|
||||
ApiResponse<OrderCargoClient.CargoBinding> response = orderCargoClient.detail(internalToken,
|
||||
|
||||
Reference in New Issue
Block a user