package com.consum.base.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.util.CollectionUtils; import com.consum.base.core.utils.IdUtil; import com.consum.base.core.utils.LockManage; import com.consum.model.po.LGoodsUserRecord; import com.consum.model.po.LWhFormTransfer; import com.consum.model.po.LWhProcureModelUser; import com.consum.model.po.LWhProcureModelUserRecord; /** * @ClassName LGoodsUserRecordCoreService * @Date 2023/11/2 * @Description * @Version 1.0 **/ @Service @Transactional(rollbackFor = Exception.class) public class LGoodsUserRecordCoreService { @Resource private GoodsBaseService goodsBaseService; @Resource private LWhGoodsService lWhGoodsService; @Resource private LGoodsUserRecordServiceImpl lGoodsUserRecordService; /** * 通过新旧 物品使用人修改记录【L_WH_PROCURE_MODEL_USER_RECORD】中的ID , 来修改物品使用人 * * @param oldProcureModelUserRecordId * @param newProcureModelUserRecordId * @return */ public boolean modifyGoodsUser(Long oldProcureModelUserRecordId, Long newProcureModelUserRecordId) { LWhProcureModelUserRecord lWhProcureModelUserRecord = goodsBaseService.get(new LWhProcureModelUserRecord(newProcureModelUserRecordId)); if (lWhProcureModelUserRecord == null) { return false; } Long dealTime = lWhProcureModelUserRecord.getDealTime(); Long operatorId = lWhProcureModelUserRecord.getOperatorId(); String operatorName = lWhProcureModelUserRecord.getOperatorName(); // 调拨单id Long transBusinessId = lWhProcureModelUserRecord.getTransBusinessId(); LWhFormTransfer whFormTransfer = goodsBaseService.get(new LWhFormTransfer(transBusinessId)); Integer inWarehouseType = whFormTransfer.getInWarehouseType(); Long inWarehouseId = whFormTransfer.getInWarehouseId(); // 将所有已下发物品设置为未分发 如果发生了退回,此时数量则小于分发时的数量! List srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, null, (short)2, null); lWhGoodsService.modGoodsTransfering(srappedGoodsIds, null, null, null, 1); // 删除该调拨单旧有使用记录 lGoodsUserRecordService.delete(new LGoodsUserRecord(), "where TRANS_BUSINESS_ID =" + transBusinessId, new HashMap<>()); // 设置旧的LAST_RECORD= 0 lGoodsUserRecordService.updSetNotLast(srappedGoodsIds); // 插入新的 LWhProcureModelUser modelUser = new LWhProcureModelUser(); modelUser.setProcureModelUserRecordId(newProcureModelUserRecordId); List modelUserList = goodsBaseService.select(modelUser); if (CollectionUtils.isEmpty(modelUserList)) { return true; } ArrayList goodsUserRecords = new ArrayList<>(); for (LWhProcureModelUser lWhProcureModelUser : modelUserList) { Long baseGoodsModelsId = lWhProcureModelUser.getBaseGoodsModelsId(); Integer goodsNum = lWhProcureModelUser.getGoodsNum(); // 通过LockManage获得锁 Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId); synchronized (warehouseModelLockObj) { List toUserGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, baseGoodsModelsId, (short)1, goodsNum); if (CollectionUtils.isEmpty(toUserGoodsIds)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw new RuntimeException("操作失败!型号数量不足"); } for (Long toUserGoodsId : toUserGoodsIds) { LGoodsUserRecord tmp = new LGoodsUserRecord(); //tmp.setId(IdUtil.generateId()); tmp.setWhGoodsId(toUserGoodsId); tmp.setRecordType(1); tmp.setTransBusinessId(transBusinessId); tmp.setNowUserName(lWhProcureModelUser.getNowUserName()); tmp.setNowUserPhone(lWhProcureModelUser.getNowUserPhone()); tmp.setOperatorId(operatorId); tmp.setOperatorName(operatorName); tmp.setDealTime(dealTime); tmp.setLastRecord(1); goodsUserRecords.add(tmp); } lWhGoodsService.modGoodsTransfering(toUserGoodsIds, null, null, null, 2); lGoodsUserRecordService.insertBatch(goodsUserRecords); } } return true; } }