package com.consum.base.service;
|
|
import com.consum.base.core.util.LockManage;
|
import com.consum.model.po.LWarehouseFlow;
|
import com.consum.model.po.LWhFormTransfer;
|
import com.consum.model.po.LWhGoodsRecord;
|
import com.consum.model.po.LWhGoodsRecordDetails;
|
import com.iplatform.model.po.S_user_core;
|
import com.walker.infrastructure.utils.CollectionUtils;
|
import com.walker.infrastructure.utils.DateUtils;
|
import com.walker.infrastructure.utils.NumberGenerator;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* @ClassName LWhFormTransferCoreService
|
|
* @Date 2023/10/26
|
* @Description
|
* @Version 1.0
|
**/
|
@Service
|
@Slf4j
|
@Transactional(rollbackFor = Exception.class)
|
public class LWhFormTransferCoreService {
|
@Resource
|
private LWhFormTransferServiceImpl lWhFormTransferService;
|
@Resource
|
private LWhFormOutputCoreService lWhFormOutputCoreService;
|
@Resource
|
private GoodsBaseServiceImpl goodsBaseService;
|
@Resource
|
private LWhGoodsRecordService lWhGoodsRecordService;
|
@Resource
|
private LWhGoodsService lWhGoodsService;
|
@Resource
|
private LGoodsWhRecordServiceImpl lGoodsWhRecordService;
|
@Resource
|
private LWarehouseFlowService lWarehouseFlowService;
|
@Resource
|
private LWarehouseFlowService LWhGoodsRecordDetailsService;
|
|
|
/**
|
* 执行调拨出库操作
|
*
|
* @param whFormTransferId 调拨单id
|
*/
|
public void doTransferOutPut(Long whFormTransferId, S_user_core currentUser) {
|
LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
|
lWhFormTransfer = lWhFormTransferService.get(lWhFormTransfer);
|
if (lWhFormTransfer == null || lWhFormTransfer.getStates() != 0) {
|
log.error("调拨失败!请检查调拨单状态");
|
return;
|
}
|
|
Long userId = currentUser.getId();
|
String nickName = currentUser.getNick_name();
|
long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
|
|
// 出库单ID
|
Long outWarehouseFormId = null;
|
try {
|
// 根据调拨单 生成 出库单
|
outWarehouseFormId = lWhFormOutputCoreService.createOutFormByTransId(whFormTransferId, currentUser, dealTime);
|
} catch (Exception e) {
|
log.error(e.getMessage());
|
return;
|
}
|
// 出库单 出库,返回 出库单流水Id
|
Long lWarehouseFlowId = lWhFormOutputCoreService.outFormByTransId(outWarehouseFormId, currentUser, dealTime);
|
|
// 更新调拨单
|
lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
|
lWhFormTransfer.setOutWarehouseFormId(outWarehouseFormId);
|
lWhFormTransfer.setStates(1);
|
lWhFormTransfer.setOutOperatorId(userId);
|
lWhFormTransfer.setOutOperatorName(nickName);
|
lWhFormTransfer.setOutputTime(dealTime);
|
lWhFormTransfer.setOutWarehouseFlowId(lWarehouseFlowId);
|
lWhFormTransferService.update(lWhFormTransfer);
|
log.info("调拨单:{} 出库完成", whFormTransferId);
|
return;
|
|
}
|
|
/**
|
* 调拨单入库
|
*
|
* @param whFormTransferId
|
* @param currentUser
|
*/
|
public void doTransferInPut(Long whFormTransferId, S_user_core currentUser) {
|
LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
|
lWhFormTransfer = lWhFormTransferService.get(lWhFormTransfer);
|
if (lWhFormTransfer == null || lWhFormTransfer.getStates() != 1) {
|
log.error("调拨失败!请检查调拨单状态");
|
return;
|
}
|
Long userId = currentUser.getId();
|
String nickName = currentUser.getNick_name();
|
// 出库单流水id
|
Long outWarehouseFlowId = lWhFormTransfer.getOutWarehouseFlowId();
|
// 入库仓库类型 0机构1部门
|
Integer inWarehouseType = lWhFormTransfer.getInWarehouseType();
|
Long inWarehouseId = lWhFormTransfer.getInWarehouseId();
|
String inWarehouseName = lWhFormTransfer.getInWarehouseName();
|
|
long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis());
|
|
// 流水记录总表ID
|
long inWarehouseFlowId = NumberGenerator.getLongSequenceNumber();
|
// 根据出库流水ID 查询 出库的物品ID
|
List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId);
|
|
// 插入 进出库流水总表[L_WAREHOUSE_FLOW]
|
LWarehouseFlow inwarehouseFlow = new LWarehouseFlow();
|
inwarehouseFlow.setId(inWarehouseFlowId);
|
inwarehouseFlow.setWarehouseType(inWarehouseType);
|
inwarehouseFlow.setWarehouseId(inWarehouseId);
|
inwarehouseFlow.setWarehouseName(inWarehouseName);
|
inwarehouseFlow.setThisType(1);
|
inwarehouseFlow.setBusinessType(2);
|
inwarehouseFlow.setBusinessFormId(whFormTransferId);
|
inwarehouseFlow.setOperatorId(userId);
|
inwarehouseFlow.setOperatorName(nickName);
|
inwarehouseFlow.setDealTime(dealTime);
|
lWarehouseFlowService.insert(inwarehouseFlow);
|
|
LWhGoodsRecord lWhGoodsRecord = new LWhGoodsRecord();
|
lWhGoodsRecord.setWarehouseFlowId(outWarehouseFlowId);
|
List<LWhGoodsRecord> whGoodsRecordList = lWhGoodsRecordService.select(lWhGoodsRecord);
|
for (LWhGoodsRecord whGoodsRecord : whGoodsRecordList) {
|
Long oldRecordId = whGoodsRecord.getId();
|
Long baseGoodsModelsId = whGoodsRecord.getBaseGoodsModelsId();
|
whGoodsRecord.setId(NumberGenerator.getLongSequenceNumber());
|
whGoodsRecord.setWarehouseType(inWarehouseType);
|
whGoodsRecord.setWarehouseId(inWarehouseId);
|
whGoodsRecord.setDealTime(dealTime);
|
//通过LockManage获得锁
|
Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId);
|
synchronized (warehouseModelLockObj) {
|
// 获得锁后查询该型号的期初数量
|
int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, (short) 1, null);
|
whGoodsRecord.setInitialCount(goodsModelNum);
|
whGoodsRecord.setEndCount(goodsModelNum + whGoodsRecord.getThisCount());
|
}
|
LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails();
|
lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId);
|
List<LWhGoodsRecordDetails> goodsRecordDetailsList = LWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails);
|
for (LWhGoodsRecordDetails whGoodsRecordDetails : goodsRecordDetailsList) {
|
whGoodsRecordDetails.setId(NumberGenerator.getLongSequenceNumber());
|
whGoodsRecordDetails.setThisType(1);
|
}
|
LWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList);
|
}
|
lWhGoodsRecordService.insertBatch(whGoodsRecordList);
|
|
// 库存物品详情(L_WH_GOODS)中 状态设置为1
|
lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, (short) 1);
|
//将保管仓库信息更新到 物品仓库保管记录【L_GOODS_WH_RECORD】
|
lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime);
|
|
// 更新调拨单
|
lWhFormTransfer = new LWhFormTransfer(whFormTransferId);
|
lWhFormTransfer.setInWarehouseFormId(inWarehouseFlowId);
|
lWhFormTransfer.setStates(2);
|
lWhFormTransfer.setInOperatorId(userId);
|
lWhFormTransfer.setInOperatorName(nickName);
|
lWhFormTransfer.setInTime(dealTime);
|
lWhFormTransferService.update(lWhFormTransfer);
|
log.info("调拨单:{} 入库完成", whFormTransferId);
|
return;
|
}
|
|
|
private static String GET_GOODSID_BY_FLOWID = "SELECT goods.id FROM L_WH_GOODS_RECORD gr LEFT JOIN L_WH_GOODS_RECORD_DETAILS grd ON gr.id=grd.WH_GOODS_RECORD_ID LEFT JOIN L_WH_GOODS goods ON goods.id=grd.WH_GOODS_ID WHERE 1=1";
|
|
/**
|
* 根据出库流水ID 查询 出库的物品ID
|
*
|
* @param lWarehouseFlowId
|
*/
|
private List<Long> getGoodsidByFlowId(long lWarehouseFlowId) {
|
StringBuilder sql = new StringBuilder(GET_GOODSID_BY_FLOWID);
|
Map<String, Object> paramts = new HashMap<>();
|
sql.append(" and gr.WAREHOUSE_FLOW_ID =:lWarehouseFlowId");
|
paramts.put("lWarehouseFlowId", lWarehouseFlowId);
|
List<Map<String, Object>> outGoods = goodsBaseService.select(sql.toString(), paramts);
|
if (CollectionUtils.isEmpty(outGoods)) {
|
return null;
|
}
|
List<Long> whGoodsIds = outGoods.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList());
|
return whGoodsIds;
|
}
|
}
|