Merge branch 'wms_dev' into dev
This commit is contained in:
+4
@@ -147,6 +147,10 @@ public class InMaterialDetailImpl extends ServiceImpl<InMaterialDetailMapper, In
|
||||
inMaterialDetail.setCreateBy(loginUser.getUserid());
|
||||
inMaterialDetail.setCreateByName(loginUser.getUsername());
|
||||
inMaterialDetail.setCreateTime(new Date());
|
||||
// 新增入库单明细时,如果计划数量为空,则使用入库数量作为计划数量
|
||||
if (inMaterialDetail.getQuantity() == null && inMaterialDetailDO.getInboundQuantity() != null) {
|
||||
inMaterialDetail.setQuantity(inMaterialDetailDO.getInboundQuantity());
|
||||
}
|
||||
inMaterialDetailList.add(inMaterialDetail);
|
||||
}
|
||||
return saveBatch(inMaterialDetailList);
|
||||
|
||||
+43
-10
@@ -75,26 +75,54 @@ public class MaterialBarCodeImpl extends ServiceImpl<MaterialBarCodeMapper, Mate
|
||||
}
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
//标记之前的数据删除
|
||||
materialBarCodeMapper.update(null, new UpdateWrapper<MaterialBarCode>().lambda()
|
||||
.set(MaterialBarCode::getDelFlag, 2)
|
||||
.set(MaterialBarCode::getUpdateBy, loginUser.getUserid())
|
||||
.set(MaterialBarCode::getUpdateByName, loginUser.getUsername())
|
||||
.set(MaterialBarCode::getUpdateTime, new Date())
|
||||
.eq(MaterialBarCode::getMaterialBaseInfoId, materialBarCodeDOList.get(0).getMaterialBaseInfoId())
|
||||
.eq(MaterialBarCode::getDelFlag, 1));
|
||||
Long materialBaseInfoId = materialBarCodeDOList.get(0).getMaterialBaseInfoId();
|
||||
|
||||
// 先物理删除该物料的所有旧条码记录(包括已标记删除的),避免唯一性约束冲突
|
||||
// 因为唯一性约束 IDX_MATERIAL_BASE_ID_BAR_CODE 可能检查所有记录(包括 delFlag=2 的记录)
|
||||
// 使用 Mapper 的 delete 方法进行物理删除,绕过逻辑删除拦截器
|
||||
materialBarCodeMapper.delete(new QueryWrapper<MaterialBarCode>().lambda()
|
||||
.eq(MaterialBarCode::getMaterialBaseInfoId, materialBaseInfoId));
|
||||
|
||||
// 去重处理:确保没有重复的 material_base_info_id + bar_code 组合
|
||||
// 使用 LinkedHashMap 保持顺序,对所有记录进行去重
|
||||
// 对于 barCode 为 null 的记录,使用 packDetailId 来区分(因为唯一性约束可能不允许多个 null)
|
||||
java.util.Map<String, MaterialBarCode> uniqueMap = new java.util.LinkedHashMap<>();
|
||||
List<MaterialBarCode> materialBarCodeList = new ArrayList<>();
|
||||
|
||||
for (MaterialBarCodeDO materialBarCodeDO : materialBarCodeDOList){
|
||||
String barCode = materialBarCodeDO.getBarCode();
|
||||
String key;
|
||||
// 构建唯一性 key:material_base_info_id + bar_code
|
||||
// 如果 barCode 为 null 或空,使用 packDetailId 来区分,避免多条 null 值违反唯一性约束
|
||||
if (barCode != null && !barCode.trim().isEmpty()) {
|
||||
key = materialBaseInfoId + "_" + barCode.trim();
|
||||
} else {
|
||||
// barCode 为 null 或空时,使用 packDetailId 来区分
|
||||
// 如果 packDetailId 也为 null,则使用固定值(只保留第一条)
|
||||
Long packDetailId = materialBarCodeDO.getPackDetailId();
|
||||
key = materialBaseInfoId + "_null_" + (packDetailId != null ? packDetailId : "empty");
|
||||
}
|
||||
// 如果已存在相同的组合,跳过(保留第一个),避免违反唯一性约束
|
||||
if (uniqueMap.containsKey(key)) {
|
||||
continue;
|
||||
}
|
||||
// 创建新的条码记录
|
||||
MaterialBarCode materialBarCode = new MaterialBarCode();
|
||||
BeanUtils.copyProperties(materialBarCodeDO,materialBarCode);
|
||||
BeanUtils.copyProperties(materialBarCodeDO, materialBarCode);
|
||||
materialBarCode.setOrganizationId(userPo.getOrganizationId());
|
||||
materialBarCode.setOrganizationName(userPo.getOrganizationName());
|
||||
materialBarCode.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
materialBarCode.setCreateBy(loginUser.getUserid());
|
||||
materialBarCode.setCreateByName(loginUser.getUsername());
|
||||
materialBarCode.setCreateTime(new Date());
|
||||
materialBarCode.setDelFlag(1);
|
||||
// 添加到去重 Map 和列表
|
||||
uniqueMap.put(key, materialBarCode);
|
||||
materialBarCodeList.add(materialBarCode);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(materialBarCodeList)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return this.saveBatch(materialBarCodeList);
|
||||
}
|
||||
@@ -157,7 +185,12 @@ public class MaterialBarCodeImpl extends ServiceImpl<MaterialBarCodeMapper, Mate
|
||||
return null;
|
||||
}
|
||||
List<MaterialBarCodePO> materialBarCodePOList = new ArrayList<>();
|
||||
BeanUtils.copyProperties(materialBarCodeList,materialBarCodePOList);
|
||||
// 遍历列表,逐个复制每个对象的属性
|
||||
for (MaterialBarCode materialBarCode : materialBarCodeList) {
|
||||
MaterialBarCodePO materialBarCodePO = new MaterialBarCodePO();
|
||||
BeanUtils.copyProperties(materialBarCode, materialBarCodePO);
|
||||
materialBarCodePOList.add(materialBarCodePO);
|
||||
}
|
||||
return materialBarCodePOList;
|
||||
}
|
||||
}
|
||||
|
||||
+68
-1
@@ -41,6 +41,7 @@ import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
@@ -113,7 +114,9 @@ public class ShiftManageImpl extends ServiceImpl<ShiftManageMapper, ShiftManage>
|
||||
setWarehouseInfo(e);
|
||||
//设置物料信息
|
||||
setMaterialDetailInfo(e);
|
||||
e.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
|
||||
// 设置父级信息
|
||||
Long parentUniqueId = idGenerator.snowflakeId(SnowFlakeConstants.wmsId);
|
||||
e.setUniqueId(parentUniqueId);
|
||||
e.setShiftNumber(shiftManage.getShiftNumber());
|
||||
e.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
e.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
@@ -125,10 +128,74 @@ public class ShiftManageImpl extends ServiceImpl<ShiftManageMapper, ShiftManage>
|
||||
e.setUpdateBy(loginUser.getUserid());
|
||||
e.setUpdateTime(new Date());
|
||||
e.setSerialNumberManage(e.getSerialNumberManage());
|
||||
// 设置父级level为1
|
||||
if (e.getLevel() == null) {
|
||||
e.setLevel(1);
|
||||
}
|
||||
ShiftMaterialDetail shiftMaterialDetail = new ShiftMaterialDetail();
|
||||
BeanUtils.copyProperties(e, shiftMaterialDetail);
|
||||
shiftMaterialDetail.setNewStorageLocationName(newStorageLocationName);
|
||||
shiftMaterialDetailList.add(shiftMaterialDetail);
|
||||
|
||||
// 处理子项
|
||||
List<ShiftMaterialDetailDO> shiftMaterialDetailDOChildList = e.getChildren();
|
||||
if (!CollectionUtils.isEmpty(shiftMaterialDetailDOChildList)) {
|
||||
for (ShiftMaterialDetailDO shiftMaterialDetailDOChild : shiftMaterialDetailDOChildList) {
|
||||
// 如果子项没有materialInventoryId,则从父级继承库存相关信息
|
||||
if (shiftMaterialDetailDOChild.getMaterialInventoryId() == null) {
|
||||
// 从父级继承库存相关信息
|
||||
shiftMaterialDetailDOChild.setMaterialInventoryId(e.getMaterialInventoryId());
|
||||
shiftMaterialDetailDOChild.setMaterialBaseInfoId(e.getMaterialBaseInfoId());
|
||||
shiftMaterialDetailDOChild.setMaterialCode(e.getMaterialCode());
|
||||
shiftMaterialDetailDOChild.setMaterialName(e.getMaterialName());
|
||||
shiftMaterialDetailDOChild.setBarCode(e.getBarCode());
|
||||
shiftMaterialDetailDOChild.setInventoryQuantity(e.getInventoryQuantity());
|
||||
shiftMaterialDetailDOChild.setOldWarehouseId(e.getOldWarehouseId());
|
||||
shiftMaterialDetailDOChild.setOldWarehouseCode(e.getOldWarehouseCode());
|
||||
shiftMaterialDetailDOChild.setOldWarehouseName(e.getOldWarehouseName());
|
||||
shiftMaterialDetailDOChild.setOldStorageSectionId(e.getOldStorageSectionId());
|
||||
shiftMaterialDetailDOChild.setOldStorageCode(e.getOldStorageCode());
|
||||
shiftMaterialDetailDOChild.setOldStorageName(e.getOldStorageName());
|
||||
shiftMaterialDetailDOChild.setOldStorageLocationId(e.getOldStorageLocationId());
|
||||
shiftMaterialDetailDOChild.setOldStorageLocationCode(e.getOldStorageLocationCode());
|
||||
shiftMaterialDetailDOChild.setOldStorageLocationName(e.getOldStorageLocationName());
|
||||
shiftMaterialDetailDOChild.setBatchNumber(e.getBatchNumber());
|
||||
shiftMaterialDetailDOChild.setMaterialStatusCode(e.getMaterialStatusCode());
|
||||
shiftMaterialDetailDOChild.setMaterialStatusName(e.getMaterialStatusName());
|
||||
shiftMaterialDetailDOChild.setContainerId(e.getContainerId());
|
||||
shiftMaterialDetailDOChild.setContainerCode(e.getContainerCode());
|
||||
shiftMaterialDetailDOChild.setContainerType(e.getContainerType());
|
||||
shiftMaterialDetailDOChild.setContainerTypeName(e.getContainerTypeName());
|
||||
} else {
|
||||
// 如果子项有materialInventoryId,则设置库存信息
|
||||
setMaterialInventory(shiftMaterialDetailDOChild);
|
||||
}
|
||||
// 设置库位信息和物料信息
|
||||
setWarehouseInfo(shiftMaterialDetailDOChild);
|
||||
setMaterialDetailInfo(shiftMaterialDetailDOChild);
|
||||
|
||||
// 设置子项的uniqueId和parentUniqueId
|
||||
Long childUniqueId = idGenerator.snowflakeId(SnowFlakeConstants.wmsId);
|
||||
shiftMaterialDetailDOChild.setUniqueId(childUniqueId);
|
||||
shiftMaterialDetailDOChild.setParentUniqueId(parentUniqueId);
|
||||
shiftMaterialDetailDOChild.setShiftNumber(shiftManage.getShiftNumber());
|
||||
shiftMaterialDetailDOChild.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
shiftMaterialDetailDOChild.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
shiftMaterialDetailDOChild.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
shiftMaterialDetailDOChild.setCreateByName(loginUser.getUsername());
|
||||
shiftMaterialDetailDOChild.setCreateBy(loginUser.getUserid());
|
||||
shiftMaterialDetailDOChild.setCreateTime(new Date());
|
||||
shiftMaterialDetailDOChild.setUpdateByName(loginUser.getUsername());
|
||||
shiftMaterialDetailDOChild.setUpdateBy(loginUser.getUserid());
|
||||
shiftMaterialDetailDOChild.setUpdateTime(new Date());
|
||||
// 设置子项level为2
|
||||
shiftMaterialDetailDOChild.setLevel(2);
|
||||
|
||||
ShiftMaterialDetail shiftMaterialDetailChild = new ShiftMaterialDetail();
|
||||
BeanUtils.copyProperties(shiftMaterialDetailDOChild, shiftMaterialDetailChild);
|
||||
shiftMaterialDetailList.add(shiftMaterialDetailChild);
|
||||
}
|
||||
}
|
||||
});
|
||||
iShiftMaterialDetailService.saveBatch(shiftMaterialDetailList);
|
||||
Boolean b;
|
||||
|
||||
Reference in New Issue
Block a user