web,app,后端更改二维码唯一
This commit is contained in:
@@ -22,7 +22,6 @@ import com.klp.domain.vo.WmsRawMaterialVo;
|
||||
import com.klp.domain.vo.WmsBomItemVo;
|
||||
import com.klp.domain.bo.WmsBomItemBo;
|
||||
import com.klp.domain.WmsMaterialCoil;
|
||||
import com.klp.domain.WmsStock;
|
||||
import com.klp.domain.bo.WmsStockBo;
|
||||
import com.klp.domain.vo.WmsStockVo;
|
||||
import com.klp.mapper.WmsMaterialCoilMapper;
|
||||
@@ -31,9 +30,11 @@ import com.klp.service.IWmsMaterialCoilService;
|
||||
import com.klp.service.IWmsStockService;
|
||||
import com.klp.service.IWmsGenerateRecordService;
|
||||
import com.klp.service.IWmsWarehouseService;
|
||||
import com.klp.service.IWmsActualWarehouseService;
|
||||
import com.klp.service.IWmsRawMaterialService;
|
||||
import com.klp.service.IWmsProductBomService;
|
||||
import com.klp.service.IWmsBomItemService;
|
||||
import com.klp.domain.vo.WmsActualWarehouseVo;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.List;
|
||||
@@ -61,6 +62,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
private final IWmsStockService stockService;
|
||||
private final IWmsGenerateRecordService generateRecordService;
|
||||
private final IWmsWarehouseService warehouseService;
|
||||
private final IWmsActualWarehouseService actualWarehouseService;
|
||||
private final IWmsRawMaterialService rawMaterialService;
|
||||
private final IWmsProductBomService productBomService;
|
||||
private final IWmsBomItemService bomItemService;
|
||||
@@ -97,6 +99,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
vo.setNextWarehouse(nextWarehouse);
|
||||
}
|
||||
|
||||
// 查询实际库区信息
|
||||
if (vo.getActualWarehouseId() != null) {
|
||||
WmsActualWarehouseVo actualWarehouse = actualWarehouseService.queryById(vo.getActualWarehouseId());
|
||||
if (actualWarehouse != null) {
|
||||
vo.setActualWarehouseName(actualWarehouse.getActualWarehouseName());
|
||||
}
|
||||
}
|
||||
|
||||
// 查询二维码信息
|
||||
if (vo.getQrcodeRecordId() != null) {
|
||||
WmsGenerateRecordVo qrcodeRecord = generateRecordService.queryById(vo.getQrcodeRecordId());
|
||||
@@ -354,7 +364,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个更新
|
||||
* 单个更新(正常更新,不产生新记录,二维码不变)
|
||||
*/
|
||||
private Boolean updateBySingle(WmsMaterialCoilBo bo) {
|
||||
// 查询原钢卷
|
||||
@@ -363,56 +373,36 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
throw new RuntimeException("原钢卷不存在");
|
||||
}
|
||||
|
||||
// 判断warehouseId是否发生变化
|
||||
boolean warehouseChanged = bo.getWarehouseId() != null &&
|
||||
!bo.getWarehouseId().equals(oldCoil.getWarehouseId());
|
||||
|
||||
Long qrcodeRecordId;
|
||||
if (warehouseChanged) {
|
||||
// 如果库区发生变化,生成新的二维码
|
||||
qrcodeRecordId = generateQrcodeForUpdate(oldCoil, bo);
|
||||
} else {
|
||||
// 如果库区未变化,更新原二维码内容
|
||||
updateQrcodeContent(oldCoil.getQrcodeRecordId(), bo);
|
||||
qrcodeRecordId = oldCoil.getQrcodeRecordId();
|
||||
// 直接更新原记录(不产生新记录,不修改dataType)
|
||||
WmsMaterialCoil updateCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class);
|
||||
|
||||
// 确保关键字段不丢失
|
||||
if (updateCoil.getEnterCoilNo() == null) {
|
||||
updateCoil.setEnterCoilNo(oldCoil.getEnterCoilNo());
|
||||
}
|
||||
|
||||
// 2. 将原数据更新为历史数据(data_type=0)
|
||||
LambdaUpdateWrapper<WmsMaterialCoil> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(WmsMaterialCoil::getCoilId, bo.getCoilId())
|
||||
.set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据
|
||||
baseMapper.update(null, updateWrapper);
|
||||
|
||||
// 3. 插入一条新的当前数据(data_type=1)
|
||||
WmsMaterialCoil newCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class);
|
||||
newCoil.setCoilId(null); // 清空ID,让数据库自动生成新的ID
|
||||
newCoil.setDataType(1); // 设置为当前数据
|
||||
newCoil.setQrcodeRecordId(qrcodeRecordId); // 使用新的或原有的二维码ID
|
||||
|
||||
// 确保关键字段不丢失(入场钢卷号始终不变)
|
||||
newCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); // 入场钢卷号始终不变
|
||||
if (newCoil.getSupplierCoilNo() == null) {
|
||||
newCoil.setSupplierCoilNo(oldCoil.getSupplierCoilNo()); // 保留厂家原料卷号
|
||||
if (updateCoil.getSupplierCoilNo() == null) {
|
||||
updateCoil.setSupplierCoilNo(oldCoil.getSupplierCoilNo());
|
||||
}
|
||||
if (newCoil.getItemType() == null) {
|
||||
newCoil.setItemType(oldCoil.getItemType());
|
||||
if (updateCoil.getQrcodeRecordId() == null) {
|
||||
updateCoil.setQrcodeRecordId(oldCoil.getQrcodeRecordId());
|
||||
}
|
||||
if (newCoil.getItemId() == null) {
|
||||
newCoil.setItemId(oldCoil.getItemId());
|
||||
if (updateCoil.getWarehouseId() == null) {
|
||||
updateCoil.setWarehouseId(oldCoil.getWarehouseId());
|
||||
}
|
||||
// 确保warehouseId有值(如果前端没传,使用原值)
|
||||
if (newCoil.getWarehouseId() == null) {
|
||||
newCoil.setWarehouseId(oldCoil.getWarehouseId());
|
||||
newCoil.setActualWarehouseId(oldCoil.getActualWarehouseId());
|
||||
if (updateCoil.getActualWarehouseId() == null) {
|
||||
updateCoil.setActualWarehouseId(oldCoil.getActualWarehouseId());
|
||||
}
|
||||
|
||||
validEntityBeforeSave(newCoil);
|
||||
boolean flag = baseMapper.insert(newCoil) > 0;
|
||||
|
||||
validEntityBeforeSave(updateCoil);
|
||||
|
||||
// 直接更新记录(coilId不变)
|
||||
boolean flag = baseMapper.updateById(updateCoil) > 0;
|
||||
|
||||
if (flag) {
|
||||
bo.setCoilId(newCoil.getCoilId());
|
||||
// 无论库区是否变化,都需要更新二维码中的current_coil_id
|
||||
updateQrcodeCoilId(qrcodeRecordId, newCoil.getCoilId());
|
||||
// 更新二维码内容(添加新的step)
|
||||
updateQrcodeContentForNormalUpdate(oldCoil, bo);
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
@@ -543,9 +533,17 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
throw new RuntimeException("分卷操作需要原钢卷信息");
|
||||
}
|
||||
|
||||
// 1. 将原始钢卷更新为历史数据(已在上面完成)
|
||||
// 1. 将原始钢卷的二维码标记为失效(status=0)
|
||||
if (oldCoil.getQrcodeRecordId() != null) {
|
||||
WmsGenerateRecordBo oldQrBo = new WmsGenerateRecordBo();
|
||||
oldQrBo.setRecordId(oldCoil.getQrcodeRecordId());
|
||||
oldQrBo.setStatus(0); // 0=失效
|
||||
generateRecordService.updateByBo(oldQrBo);
|
||||
}
|
||||
|
||||
// 2. 将原始钢卷标记为历史数据(已在上面完成)
|
||||
|
||||
// 2. 为每个分卷后的子钢卷生成独立的二维码并插入数据库
|
||||
// 3. 为每个分卷后的子钢卷生成独立的二维码并插入数据库
|
||||
for (WmsMaterialCoilBo newCoilBo : bo.getNewCoils()) {
|
||||
WmsMaterialCoil newCoil = BeanUtil.toBean(newCoilBo, WmsMaterialCoil.class);
|
||||
newCoil.setCoilId(null);
|
||||
@@ -578,13 +576,25 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
}
|
||||
} else if (isMerge) {
|
||||
// 合卷:将bo作为合卷后的新钢卷,newCoils中的对象作为参与合卷的原始钢卷
|
||||
// 1. 将参与合卷的原始钢卷更新为历史数据
|
||||
// 1. 将参与合卷的原始钢卷的二维码标记为失效,并将钢卷标记为历史数据
|
||||
for (WmsMaterialCoilBo originalCoilBo : bo.getNewCoils()) {
|
||||
if (originalCoilBo.getCoilId() != null) {
|
||||
LambdaUpdateWrapper<WmsMaterialCoil> originalUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
originalUpdateWrapper.eq(WmsMaterialCoil::getCoilId, originalCoilBo.getCoilId())
|
||||
.set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据
|
||||
baseMapper.update(null, originalUpdateWrapper);
|
||||
WmsMaterialCoil originalCoil = baseMapper.selectById(originalCoilBo.getCoilId());
|
||||
if (originalCoil != null) {
|
||||
// 标记二维码为失效
|
||||
if (originalCoil.getQrcodeRecordId() != null) {
|
||||
WmsGenerateRecordBo oldQrBo = new WmsGenerateRecordBo();
|
||||
oldQrBo.setRecordId(originalCoil.getQrcodeRecordId());
|
||||
oldQrBo.setStatus(0); // 0=失效
|
||||
generateRecordService.updateByBo(oldQrBo);
|
||||
}
|
||||
|
||||
// 标记钢卷为历史数据
|
||||
LambdaUpdateWrapper<WmsMaterialCoil> originalUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
originalUpdateWrapper.eq(WmsMaterialCoil::getCoilId, originalCoilBo.getCoilId())
|
||||
.set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据
|
||||
baseMapper.update(null, originalUpdateWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -821,21 +831,19 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新二维码内容(单个更新)
|
||||
* 更新二维码内容(正常更新,添加step)
|
||||
*/
|
||||
private void updateQrcodeContent(Long qrcodeRecordId, WmsMaterialCoilBo bo) {
|
||||
private void updateQrcodeContentForNormalUpdate(WmsMaterialCoil oldCoil, WmsMaterialCoilBo bo) {
|
||||
try {
|
||||
// 获取原钢卷信息
|
||||
WmsMaterialCoil oldCoil = baseMapper.selectById(bo.getCoilId());
|
||||
|
||||
// 获取原二维码记录
|
||||
WmsGenerateRecordVo oldRecord = generateRecordService.queryById(qrcodeRecordId);
|
||||
WmsGenerateRecordVo oldRecord = generateRecordService.queryById(oldCoil.getQrcodeRecordId());
|
||||
if (oldRecord == null) {
|
||||
throw new RuntimeException("二维码记录不存在");
|
||||
}
|
||||
|
||||
// 解析现有content
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> contentMap = objectMapper.readValue(oldRecord.getContent(), Map.class);
|
||||
|
||||
// 获取现有steps
|
||||
@@ -845,39 +853,29 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
|
||||
steps = new ArrayList<>();
|
||||
}
|
||||
|
||||
// 添加新的step,记录钢卷号的变化
|
||||
// 添加新的step,记录更新信息
|
||||
Map<String, Object> newStep = new HashMap<>();
|
||||
newStep.put("step", steps.size() + 1);
|
||||
newStep.put("action", "更新");
|
||||
newStep.put("old_current_coil_no", oldCoil.getCurrentCoilNo()); // 原当前钢卷号
|
||||
newStep.put("new_current_coil_no", bo.getCurrentCoilNo()); // 新当前钢卷号
|
||||
newStep.put("coil_id", String.valueOf(bo.getCoilId())); // 钢卷ID
|
||||
newStep.put("operator", LoginHelper.getUsername()); // 操作者
|
||||
|
||||
// 判断操作类型
|
||||
if (bo.getHasMergeSplit() != null && bo.getHasMergeSplit() == 2) {
|
||||
newStep.put("operation", "合卷");
|
||||
newStep.put("parent_coil_nos", bo.getParentCoilNos());
|
||||
} else if (bo.getHasMergeSplit() != null && bo.getHasMergeSplit() == 1) {
|
||||
newStep.put("operation", "分卷");
|
||||
newStep.put("new_current_coil_nos", bo.getCurrentCoilNo());
|
||||
} else {
|
||||
newStep.put("operation", "更新");
|
||||
}
|
||||
newStep.put("operation", "更新");
|
||||
newStep.put("old_current_coil_no", oldCoil.getCurrentCoilNo());
|
||||
newStep.put("new_current_coil_no", bo.getCurrentCoilNo());
|
||||
newStep.put("coil_id", String.valueOf(bo.getCoilId()));
|
||||
newStep.put("operator", LoginHelper.getUsername());
|
||||
newStep.put("update_time", new java.util.Date());
|
||||
|
||||
steps.add(newStep);
|
||||
contentMap.put("steps", steps);
|
||||
// 更新当前钢卷号到最外层(方便快速查看)
|
||||
|
||||
// 更新当前钢卷号
|
||||
contentMap.put("current_coil_no", bo.getCurrentCoilNo());
|
||||
|
||||
// 更新当前钢卷ID(注意:这里需要获取新插入的钢卷ID,但在这个方法中还没有新ID)
|
||||
// 所以这个方法只在库区不变化时调用,此时钢卷ID不变
|
||||
// contentMap.put("current_coil_id", String.valueOf(bo.getCoilId())); // 保持当前ID不变
|
||||
|
||||
// current_coil_id保持不变(因为coilId没有变化)
|
||||
|
||||
// 更新二维码记录
|
||||
String newContentJson = objectMapper.writeValueAsString(contentMap);
|
||||
WmsGenerateRecordBo updateBo = new WmsGenerateRecordBo();
|
||||
updateBo.setRecordId(qrcodeRecordId);
|
||||
updateBo.setRecordId(oldCoil.getQrcodeRecordId());
|
||||
updateBo.setContent(newContentJson);
|
||||
generateRecordService.updateByBo(updateBo);
|
||||
} catch (Exception e) {
|
||||
|
||||
Reference in New Issue
Block a user