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<Long> 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<LWhProcureModelUser> modelUserList = goodsBaseService.select(modelUser);
|
if (CollectionUtils.isEmpty(modelUserList)) {
|
return true;
|
}
|
ArrayList<LGoodsUserRecord> 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<Long> 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;
|
}
|
|
}
|