diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java index 672b09e..07603de 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.group.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; @@ -24,6 +25,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.enums.GoodsEnum; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.logicflow.dao.StageImage; import org.nl.wms.database.material.service.IMdBaseMaterialService; import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.database.vehicle.service.IMdBaseVehicleService; @@ -41,6 +43,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task_manage.task.tasks.pcoperation.PcOperationCMTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import sun.misc.BASE64Encoder; import javax.imageio.ImageIO; @@ -157,10 +160,118 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl ids),内部完成反推+删除原始数据 + * @param ids 合并后的group_id集合 + */ @Override + @Transactional(rollbackFor = Exception.class) // 事务保障,避免删一半数据 public void deleteAll(Set ids) { - // 真删除 - vehiclematerialgroupMapper.deleteBatchIds(ids); + // 1. 入参校验:空集合直接返回,避免无效操作 + if (CollectionUtil.isEmpty(ids)) { + return; + } + // 过滤空值id,避免查询/删除异常 + Set validMergedIds = ids.stream() + .filter(StrUtil::isNotEmpty) + .collect(Collectors.toSet()); + if (CollectionUtil.isEmpty(validMergedIds)) { + return; + } + + // 2. 第一步:根据合并后的group_id,查询出对应的合并后记录(获取5个合并条件字段) + LambdaQueryWrapper mergedQueryWrapper = Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class) + .in(SchBaseVehiclematerialgroup::getGroup_id, validMergedIds); + List mergedList = vehiclematerialgroupMapper.selectList(mergedQueryWrapper); + if (CollectionUtil.isEmpty(mergedList)) { + return; // 无合并后记录,无需删除原始数据 + } + + // 3. 第二步:从合并后记录中提取5个合并条件(vehicle_code+region_code+job_name+order_code+material_id) + List mergeConditions = new ArrayList<>(); + for (SchBaseVehiclematerialgroup mergedItem : mergedList) { + // 补全region_code(和你原合并逻辑一致,空值替换为"未知") + String regionCode = StrUtil.isEmpty(mergedItem.getRegion_code()) ? "未知" : mergedItem.getRegion_code(); + mergeConditions.add(new MergeCondition( + mergedItem.getVehicle_code(), + regionCode, + mergedItem.getJob_name(), + mergedItem.getOrder_code(), + mergedItem.getMaterial_id() + )); + } + + // 4. 第三步:批量查询所有合并前的原始group_id(仅1次数据库交互,无循环查库) + Set originalGroupIds = queryOriginalGroupIdsByMergeConditions(mergeConditions); + if (CollectionUtil.isEmpty(originalGroupIds)) { + return; // 无原始数据可删 + } + + // 5. 第四步:删除合并前的原始数据(入参仍是合并后的ids,但实际删的是原始ids) + vehiclematerialgroupMapper.deleteBatchIds(originalGroupIds); + } + + /** + * 辅助方法:根据合并条件批量查询所有合并前的原始group_id(性能优化:批量查询) + * @param mergeConditions 5个合并条件的集合 + * @return 合并前的原始group_id集合 + */ + private Set queryOriginalGroupIdsByMergeConditions(List mergeConditions) { + if (CollectionUtil.isEmpty(mergeConditions)) { + return Collections.emptySet(); + } + + // 构建批量查询条件:(条件1) OR (条件2) OR ... + LambdaQueryWrapper batchQueryWrapper = Wrappers.lambdaQuery(SchBaseVehiclematerialgroup.class); + MergeCondition first = mergeConditions.get(0); + // 第一个条件组 + batchQueryWrapper.and(w -> w.eq(SchBaseVehiclematerialgroup::getVehicle_code, first.getVehicleCode()) + .eq(!"未知".equals(first.getRegionCode()),SchBaseVehiclematerialgroup::getRegion_code, first.getRegionCode()) + .eq(SchBaseVehiclematerialgroup::getJob_name, first.getJobName()) + .eq(SchBaseVehiclematerialgroup::getOrder_code, first.getOrderCode()) + .eq(SchBaseVehiclematerialgroup::getMaterial_id, first.getMaterialId())); + + // 剩余条件组用OR拼接 + for (int i = 1; i < mergeConditions.size(); i++) { + MergeCondition cond = mergeConditions.get(i); + batchQueryWrapper.or(w -> w.eq(SchBaseVehiclematerialgroup::getVehicle_code, cond.getVehicleCode()) + .eq(!"未知".equals(cond.getRegionCode()),SchBaseVehiclematerialgroup::getRegion_code, cond.getRegionCode()) + .eq(SchBaseVehiclematerialgroup::getJob_name, cond.getJobName()) + .eq(SchBaseVehiclematerialgroup::getOrder_code, cond.getOrderCode()) + .eq(SchBaseVehiclematerialgroup::getMaterial_id, cond.getMaterialId())); + } + + // 一次性查询所有原始记录,提取group_id + List originalList = vehiclematerialgroupMapper.selectList(batchQueryWrapper); + return originalList.stream() + .map(SchBaseVehiclematerialgroup::getGroup_id) + .filter(StrUtil::isNotEmpty) + .collect(Collectors.toSet()); + } + + // 内部辅助类:封装5个合并条件字段(仅用于批量查询) + private static class MergeCondition { + private final String vehicleCode; + private final String regionCode; + private final String jobName; + private final String orderCode; + private final String materialId; + + public MergeCondition(String vehicleCode, String regionCode, String jobName, String orderCode, String materialId) { + this.vehicleCode = vehicleCode; + this.regionCode = regionCode; + this.jobName = jobName; + this.orderCode = orderCode; + this.materialId = materialId; + } + + // getter方法 + public String getVehicleCode() { return vehicleCode; } + public String getRegionCode() { return regionCode; } + public String getJobName() { return jobName; } + public String getOrderCode() { return orderCode; } + public String getMaterialId() { return materialId; } } @Override diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 5cc53c6..0ab6b3b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.gson.Gson; @@ -900,6 +901,7 @@ public class SchBasePointServiceImpl extends ServiceImpl