禅道bug#1665修复

This commit is contained in:
gaoqr
2026-06-12 11:22:54 +08:00
parent 9ac83e631d
commit 2e5cec78f1
4 changed files with 76 additions and 20 deletions
@@ -15,10 +15,14 @@ import java.util.List;
@ToString(callSuper = true) @ToString(callSuper = true)
public class OrderPackReqVO { public class OrderPackReqVO {
@Schema(description = "订单号列表", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "打包页面订单号列表", requiredMode = Schema.RequiredMode.REQUIRED)
@Size(min = 1, max = 100, message = "订单号列表不能为空且长度不能超过100") @Size(min = 1, max = 100, message = "订单号列表不能为空且长度不能超过100")
private List<Long> orderIds; private List<Long> orderIds;
@Schema(description = "当前包裹订单号列表", requiredMode = Schema.RequiredMode.REQUIRED)
@Size(min = 1, max = 100, message = "订单号列表不能为空且长度不能超过100")
private List<Long> currentOrderIds;
@Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "包裹编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String packNo; private String packNo;
@@ -0,0 +1,20 @@
package com.cf.imes.module.executor.controller.admin.manage.pack.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
*
*
* @author Gqr
* @since 2026/6/11 18:02
*/
@Schema(description = "管理后台 - 分堆打包 - 分堆打包板件提交 Request VO")
@Data
public class PackagePlateSaveReqVO {
@Schema(description = "订单ID")
private Long orderId;
@Schema(description = "板件ID")
private Long plateId;
}
@@ -52,6 +52,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -141,13 +142,8 @@ public class PackServiceImpl implements PackService {
@Override @Override
public List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) { public List<OrderPackageVO> getOrderPack(PackageDetailsReqVO reqVO) {
List<Long> orderIds = reqVO.getOrderIds(); List<Long> orderIds = reqVO.getOrderIds();
// 入参订单id列表对应的所有父子id列表
List<Long> fatherAndSonOrderIds = orderService.getFatherAndSonOrderIds(orderIds);
if (CollUtil.isEmpty(fatherAndSonOrderIds)) {
return new ArrayList<>();
}
List<OrderPackageVO> orderPackageVOS = orderPackageMapper.getPackageNoInOrderIds(fatherAndSonOrderIds); List<OrderPackageVO> orderPackageVOS = orderPackageMapper.getPackageNoInOrderIds(orderIds);
if (orderPackageVOS.isEmpty()) { if (orderPackageVOS.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
@@ -224,27 +220,28 @@ public class PackServiceImpl implements PackService {
Long organId = getUserOrganId(); Long organId = getUserOrganId();
String packNo = packageVO.getPackNo(); String packNo = packageVO.getPackNo();
List<Long> orderIds = packageVO.getOrderIds(); List<Long> orderIds = packageVO.getOrderIds();
List<Long> currentOrderIds = packageVO.getCurrentOrderIds();
List<Long> addPlateNos = packageVO.getAddPlateNoList(); List<Long> addPlateNos = packageVO.getAddPlateNoList();
List<Long> deletePlateNos = packageVO.getDeletePlateNoList(); List<Long> deletePlateNos = packageVO.getDeletePlateNoList();
List<PackagePartsSaveReqVO> addPartsList = packageVO.getAddPartsList(); List<PackagePartsSaveReqVO> addPartsList = packageVO.getAddPartsList();
List<PackagePartsSaveReqVO> delPartsList = packageVO.getDelPartsList(); List<PackagePartsSaveReqVO> delPartsList = packageVO.getDelPartsList();
Integer packMethod = packageVO.getPackMethod(); Integer packMethod = packageVO.getPackMethod();
OrderPackagDO existPackageDO = validateOrdersExists(orderIds, packNo); List<OrderPackagDO> existPackageDO = validateOrdersExists(orderIds, packNo);
// 新增/删除 板件配件全为空代表是原封不动的封包 // 新增/删除 板件配件全为空代表是原封不动的封包
boolean justPack = CollUtil.isEmpty(addPlateNos) && CollUtil.isEmpty(addPartsList) boolean justPack = CollUtil.isEmpty(addPlateNos) && CollUtil.isEmpty(addPartsList)
&& CollUtil.isEmpty(deletePlateNos) && CollUtil.isEmpty(delPartsList); && CollUtil.isEmpty(deletePlateNos) && CollUtil.isEmpty(delPartsList);
// 判断包裹ID是否为空,为空,走新增,不为空,走更新 // 判断包裹ID是否为空,为空,走新增,不为空,走更新
if (ObjectUtil.isEmpty(existPackageDO)) { if (CollUtil.isEmpty(existPackageDO)) {
if (justPack) { if (justPack) {
throw new ServiceException(PACK_DATA_NULL); throw new ServiceException(PACK_DATA_NULL);
} }
String packageNo = generatePackageNo(); String packageNo = generatePackageNo();
List<OrderPackagDO> orderPackageDOS = new ArrayList<>(); List<OrderPackagDO> orderPackageDOS = new ArrayList<>();
for (Long orderId : orderIds) { for (Long orderId : currentOrderIds) {
OrderPackagDO orderPackageDO = new OrderPackagDO(); OrderPackagDO orderPackageDO = new OrderPackagDO();
orderPackageDO.setOrderId(orderId); orderPackageDO.setOrderId(orderId);
orderPackageDO.setPackageNo(packageNo); orderPackageDO.setPackageNo(packageNo);
@@ -260,7 +257,7 @@ public class PackServiceImpl implements PackService {
for (List<Long> batch : split) { for (List<Long> batch : split) {
List<Long> plateIds = orderPlateMapper.selectList(new LambdaQueryWrapper<PlateDO>() List<Long> plateIds = orderPlateMapper.selectList(new LambdaQueryWrapper<PlateDO>()
.in(PlateDO::getPlateNo, batch) .in(PlateDO::getPlateNo, batch)
.in(PlateDO::getOrderId, orderIds) .in(PlateDO::getOrderId, currentOrderIds)
.eq(PlateDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus()) .eq(PlateDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus())
.select(PlateDO::getId) .select(PlateDO::getId)
).stream().map(PlateDO::getId).toList(); ).stream().map(PlateDO::getId).toList();
@@ -268,7 +265,7 @@ public class PackServiceImpl implements PackService {
continue; continue;
} }
orderItemMapper.update(new LambdaUpdateWrapper<OrderItemDO>() orderItemMapper.update(new LambdaUpdateWrapper<OrderItemDO>()
.in(OrderItemDO::getOrderId, orderIds) .in(OrderItemDO::getOrderId, currentOrderIds)
.in(OrderItemDO::getPlateId, plateIds) .in(OrderItemDO::getPlateId, plateIds)
.eq(OrderItemDO::getPackageId, 0L) .eq(OrderItemDO::getPackageId, 0L)
.set(OrderItemDO::getPackageId, packageNo) .set(OrderItemDO::getPackageId, packageNo)
@@ -277,10 +274,10 @@ public class PackServiceImpl implements PackService {
} }
// 配件明细新增包裹 ID // 配件明细新增包裹 ID
processParts(addPartsList, packMethod, orderIds, packageNo, true); processParts(addPartsList, packMethod, currentOrderIds, packageNo, true);
// 更新订单打包状态 // 更新订单打包状态
List<OrderDO> orderDOS = ordersMapper.selectBatchIds(orderIds); List<OrderDO> orderDOS = ordersMapper.selectBatchIds(currentOrderIds);
for (OrderDO orderDO : orderDOS) { for (OrderDO orderDO : orderDOS) {
if (validateOrderPack(orderDO.getId())) { if (validateOrderPack(orderDO.getId())) {
@@ -292,10 +289,27 @@ public class PackServiceImpl implements PackService {
// 更新已打包数量到订单 // 更新已打包数量到订单
orderInfoVersionControlService.updateOrderPackNum(orderDOS); orderInfoVersionControlService.updateOrderPackNum(orderDOS);
return typeConversion(orderPackageDOS.get(0), orderIds); return typeConversion(orderPackageDOS.get(0), currentOrderIds);
} }
String existPackageNo = existPackageDO.getPackageNo(); // 从包裹对应订单列表 和 现在还有的订单列表做对比,算出差集,对应列表有当前没有就是要删,对应列表没有当前有就是要新增
Set<Long> existOrderIdSet = existPackageDO.stream()
.map(OrderPackagDO::getOrderId)
.collect(Collectors.toSet());
Set<Long> currentOrderIdSet = new HashSet<>(currentOrderIds);
// 删除:exist - current
List<Long> toDelete = existOrderIdSet.stream()
.filter(id -> !currentOrderIdSet.contains(id))
.collect(Collectors.toList());
// 新增:current - exist
List<Long> toAdd = currentOrderIdSet.stream()
.filter(id -> !existOrderIdSet.contains(id))
.collect(Collectors.toList());
String existPackageNo = existPackageDO.get(0).getPackageNo();
// 板件明细新增包裹 ID // 板件明细新增包裹 ID
List<List<Long>> split = CollUtil.split(addPlateNos, 1000); List<List<Long>> split = CollUtil.split(addPlateNos, 1000);
if (CollUtil.isNotEmpty(split)) { if (CollUtil.isNotEmpty(split)) {
@@ -353,6 +367,24 @@ public class PackServiceImpl implements PackService {
.eq(OrderPackagDO::getStatus, OrderPackageStatusEnum.UNPACKED.getStatus()) .eq(OrderPackagDO::getStatus, OrderPackageStatusEnum.UNPACKED.getStatus())
.set(OrderPackagDO::getStatus, OrderPackageStatusEnum.PACKAGED.getStatus())); .set(OrderPackagDO::getStatus, OrderPackageStatusEnum.PACKAGED.getStatus()));
// 删除没有订单组成的包裹
orderPackageMapper.delete(new LambdaQueryWrapper<OrderPackagDO>()
.eq(OrderPackagDO::getPackageNo, existPackageNo)
.in(OrderPackagDO::getOrderId, toDelete)
);
// 新增新订单组成的包裹
List<OrderPackagDO> addOrderPackageDOS = new ArrayList<>();
for (Long addOrderId : toAdd) {
OrderPackagDO orderPackageDO = new OrderPackagDO();
orderPackageDO.setOrderId(addOrderId);
orderPackageDO.setPackageNo(existPackageNo);
orderPackageDO.setStatus((OrderPackageStatusEnum.PACKAGED.getStatus()));
orderPackageDO.setRemark(packageVO.getRemark());
orderPackageDO.setOrganId(organId);
addOrderPackageDOS.add(orderPackageDO);
}
orderPackageMapper.insertBatch(addOrderPackageDOS);
// 更新订单打包状态 // 更新订单打包状态
List<OrderDO> orderDOS = ordersMapper.selectBatchIds(orderIds); List<OrderDO> orderDOS = ordersMapper.selectBatchIds(orderIds);
@@ -369,7 +401,7 @@ public class PackServiceImpl implements PackService {
orderInfoVersionControlService.updateOrderPackNum(orderDOS); orderInfoVersionControlService.updateOrderPackNum(orderDOS);
} }
return typeConversion(existPackageDO, orderIds); return typeConversion(existPackageDO.get(0), orderIds);
} }
@@ -865,7 +897,7 @@ public class PackServiceImpl implements PackService {
* @param orderIds * @param orderIds
* @param packNo * @param packNo
*/ */
private OrderPackagDO validateOrdersExists(List<Long> orderIds, String packNo) { private List<OrderPackagDO> validateOrdersExists(List<Long> orderIds, String packNo) {
List<OrderDO> orderDO = ordersMapper.selectByIds(orderIds); List<OrderDO> orderDO = ordersMapper.selectByIds(orderIds);
AssertUtils.notEmpty(orderDO, ORDER_NOT_EXISTS); AssertUtils.notEmpty(orderDO, ORDER_NOT_EXISTS);
@@ -874,7 +906,7 @@ public class PackServiceImpl implements PackService {
List<OrderPackagDO> orderPackageDOS = orderPackageMapper.selectList(new LambdaQueryWrapper<OrderPackagDO>() List<OrderPackagDO> orderPackageDOS = orderPackageMapper.selectList(new LambdaQueryWrapper<OrderPackagDO>()
.eq(OrderPackagDO::getPackageNo, packNo)); .eq(OrderPackagDO::getPackageNo, packNo));
AssertUtils.notEmpty(orderPackageDOS, ORDER_PACK_DATA_NULL_ERROR); AssertUtils.notEmpty(orderPackageDOS, ORDER_PACK_DATA_NULL_ERROR);
return orderPackageDOS.get(0); return orderPackageDOS;
} }
return null; return null;
@@ -57,7 +57,7 @@
</resultMap> </resultMap>
<select id="getPackageNoInOrderIds" resultType="com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.OrderPackageVO"> <select id="getPackageNoInOrderIds" resultType="com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.OrderPackageVO">
SELECT DISTINCT package_no,status SELECT package_no, order_id, status
FROM order_package FROM order_package
WHERE deleted = false WHERE deleted = false
AND order_id IN AND order_id IN