FutureHoldManagerImpl.java
package com.mycim.server.ctx.exec.manager.impl;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.oid.IDGenerators;
import com.mycim.framework.oid.type.IDNames;
import com.mycim.framework.oid.type.SequenceNames;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.server.base.manager.TransactionLogManager;
import com.mycim.server.ctx.exec.dao.FutureHoldDAO;
import com.mycim.server.ctx.exec.manager.FutureHoldManager;
import com.mycim.server.wip.dao.LotDAO;
import com.mycim.server.wip.manager.LotQueryManager;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.EenActionType;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.prp.FutureHold;
import com.mycim.valueobject.prp.FutureHoldHistory;
import com.mycim.valueobject.prp.FutureHoldLot;
import com.mycim.valueobject.prp.FutureHoldLotHistory;
import com.mycim.valueobject.wip.Lot;
import com.mycim.valueobject.wip.TransReason;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.sql.Timestamp;
import java.util.*;
/**
* @author Sola
* @date 2021/7/19
**/
@Service
@Transactional
public class FutureHoldManagerImpl implements FutureHoldManager {
@Autowired
private FutureHoldDAO futureHoldDAO;
@Autowired
private TransactionLogManager transactionLogManager;
@Autowired
private LotDAO lotDAO;
@Autowired
private LotQueryManager lotQueryManager;
@Override
public void addFutureHold(FutureHold futureHoldInfo) {
//插入futureHold
futureHoldInfo.setSysRrn(Long.valueOf(IDGenerators.get(IDNames.SEQUENCE).generateId(SequenceNames.MODULE_SEQ_OBJECT_RRN)));
if(EenActionType.FUTURE_HOLD_BY_PRODUCT.equals(futureHoldInfo.getHoldCategory())){
//查询by product已经设置了几条post future hold(通过max()获取最大值)
List<String> maxSeqNumByProduct = futureHoldDAO
.getMaxSeqNumByProduct(futureHoldInfo.getFacilityRrn(), futureHoldInfo.getProductRrn(),
futureHoldInfo.getHoldType(), futureHoldInfo.getHoldCategory());
long count = 1;
if(maxSeqNumByProduct.get(0)!=null){
count = Long.valueOf(maxSeqNumByProduct.get(0)) + 1;
}
futureHoldInfo.setAttributeData1(String.valueOf(count));
} else if (EenActionType.FUTURE_HOLD_BY_LOT.equals(futureHoldInfo.getHoldCategory())){
//查询by lot已经设置了几条post future hold(通过max()获取最大值)
List<String> maxSeqNumByLot = futureHoldDAO
.getMaxSeqNumByLot(futureHoldInfo.getFacilityRrn(), futureHoldInfo.getLotRrn(),
futureHoldInfo.getHoldType(), futureHoldInfo.getHoldCategory());
long count = 1;
if(maxSeqNumByLot.get(0)!=null) {
count = Long.valueOf(maxSeqNumByLot.get(0)) + 1;
}
futureHoldInfo.setAttributeData1(String.valueOf(count));
}
futureHoldDAO.insertFutureHold(futureHoldInfo);
String transactionName = TransactionNames.BY_LOT_CREATE_FUTURE_HOLD;
if(EenActionType.POST_FUTURE_HOLD.equals(futureHoldInfo.getHoldType())){
transactionName = TransactionNames.BY_LOT_CREATE_POST_FUTURE_HOLD;
}
//插入futureHoldH
TransactionLog transactionLog = transactionLogManager.startTransactionLog(LocalContext.getUserId(), transactionName);
long transRrn = transactionLog.getTransRrn();
FutureHoldHistory futureHoldHInfo = new FutureHoldHistory();
BeanUtils.copyProperties(futureHoldInfo,futureHoldHInfo);
futureHoldHInfo.setTransRrn(transRrn);
futureHoldHInfo.setTransId(transactionName);
futureHoldHInfo.setTransUserId(LocalContext.getUserId());
futureHoldHInfo.setTransTime(new Timestamp(System.currentTimeMillis()));
futureHoldDAO.insertFutureHoldH(futureHoldHInfo);
if (StringUtils.equalsIgnoreCase(futureHoldInfo.getFlag(), "addFutureHold")) {
Map _transInfo = new HashMap(10);
Lot lot = lotQueryManager.getLot(futureHoldInfo.getLotRrn());
_transInfo.put("transRrn", transactionLog.getTransRrn());
_transInfo.put("transSequence", NumberUtils.BYTE_ONE);
_transInfo.put("transId", transactionName);
_transInfo.put("lotRrn", lot.getLotRrn());
_transInfo.put("facilityRrn", lot.getFacilityRrn());
_transInfo.put("stepSequence", lot.getStepSequence());
_transInfo.put("carrierRrn", lot.getCarrierRrn());
_transInfo.put("carrierMapRrn", lot.getCarrierMapRrn());
_transInfo.put("qty1", lot.getQty1());
_transInfo.put("qty2", lot.getQty2());
_transInfo.put("transComments", futureHoldHInfo.getHoldReason());
_transInfo.put("hotFlag", lot.getHotFlag());
_transInfo.put("priority", lot.getPriority());
_transInfo.put("eqptRrn", lot.getEqptRrn());
_transInfo.put("recipeId", lot.getRecipeId());
Long lotRrn = lot.getLotRrn();
Lot lotExt = new Lot();
lotExt.setLotRrn(lotRrn);
lotExt = lotQueryManager.getLotExt(lotExt);
_transInfo.put("customerId", StringUtils.isNotBlank(lotExt.getCustomerId()) ? lotExt.getCustomerId() : "");
_transInfo
.put("shippingCode", StringUtils.isNotBlank(lotExt.getShippingCode()) ? lotExt.getShippingCode() : "");
_transInfo
.put("outerOrderNo", StringUtils.isNotBlank(lotExt.getOuterOrderNO()) ? lotExt.getOuterOrderNO() : "");
_transInfo
.put("outOrderType", StringUtils.isNotBlank(lotExt.getOutOrderType()) ? lotExt.getOutOrderType() : "");
_transInfo.put("location", lotExt.getLocation());
_transInfo.put("prevLocation", lotExt.getpLocation());
_transInfo.put("locationRrn", lotExt.getLocationRrn());
_transInfo.put("prevLocationRrn", lotExt.getpLocationRrn());
_transInfo.put("splitMergeFlag", lotExt.getSplitMergeFlag());
lotDAO.createLotTrans(_transInfo);
TransReason transReason = new TransReason();
transReason.setReasonCode(futureHoldHInfo.getHoldCode());
transReason.setReason(futureHoldHInfo.getHoldReason());
transReason.setTransQty1(lot.getQty1());
transReason.setTransQty2(lot.getQty2());
transReason.setResponsibility(LocalContext.getUserId());
lotDAO.insertTransReason(transRrn, futureHoldInfo.getLotRrn(), transReason, NumberUtils.BYTE_ONE);
lotDAO.insertTransReasonH(transRrn, transRrn, futureHoldInfo.getLotRrn());
}
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public List<FutureHold> getFutureHoldBySysRrn(Long futureHoldSysRrn) {
return futureHoldDAO.getFutureHoldBySysRrn(futureHoldSysRrn);
}
@Override
public List<FutureHold> getFutureHold(FutureHold futureHold) {
return futureHoldDAO.getFutureHold(futureHold);
}
@Override
public List<FutureHold> getFHListByProduct(Long facilityRrn,long lotRrn,long productRrn, String holdType, String holdCategory) {
List<FutureHold> futureHoldListByProduct = futureHoldDAO.getFHListByProduct(facilityRrn,productRrn,holdType,holdCategory);
for (FutureHold futureHold : futureHoldListByProduct) {
if(getFHLHistoryListByFutureHold(futureHold.getSysRrn(),lotRrn).size()>0){
futureHold.setExecutedFlag("EXECUTED");
}else{
futureHold.setExecutedFlag("");
}
}
return futureHoldListByProduct;
}
@Override
public List<FutureHold> getFHListByLot(Long facilityRrn, long lotRrn, String holdType,
String holdCategory) {
List<FutureHold> futureHoldListByLot = futureHoldDAO.getFHListByLot(facilityRrn,lotRrn,holdType,holdCategory);
for (FutureHold futureHold : futureHoldListByLot) {
if(getFHLHistoryListByFutureHold(futureHold.getSysRrn(),lotRrn).size()>0){
futureHold.setExecutedFlag("EXECUTED");
}else{
futureHold.setExecutedFlag("");
}
}
return futureHoldListByLot;
}
@Override
public void deleteFutureHold(FutureHold futureHold) {
List<FutureHold> futureHoldInfos = new ArrayList<>();
//判断删除的是by lot or by product的设置
if(EenActionType.FUTURE_HOLD_BY_LOT.equals(futureHold.getHoldCategory())){
futureHoldInfos = futureHoldDAO.getFHListByLot(futureHold.getFacilityRrn(),futureHold.getLotRrn(),
futureHold.getHoldType(),futureHold.getHoldCategory());
} else {
futureHoldInfos = futureHoldDAO.getFHListByProduct(futureHold.getFacilityRrn(),futureHold.getProductRrn(),
futureHold.getHoldType(),futureHold.getHoldCategory());
}
String seqNum = futureHold.getAttributeData1();
if (CollectionUtils.isNotEmpty(futureHoldInfos)) {
for (FutureHold futureHoldInfo : futureHoldInfos) {
if(StringUtils.isNotBlank(seqNum)) {
//若指定删除某条hold信息
if(seqNum.equals(futureHoldInfo.getAttributeData1())){
deleteFutureHoldBySysRrn(futureHoldInfo);
}
} else {
//若未指定删除某条hold信息
deleteFutureHoldBySysRrn(futureHoldInfo);
}
}
}
}
@Override
public void deleteFutureHoldBySysRrn(FutureHold futureHoldInfo){
long sysRrn = futureHoldInfo.getSysRrn();
futureHoldDAO.deleteFutureHold(sysRrn);
String transactionName = TransactionNames.BY_LOT_DELETE_FUTURE_HOLD;
if (EenActionType.POST_FUTURE_HOLD.equals(futureHoldInfo.getHoldType())) {
transactionName = TransactionNames.BY_LOT_DELETE_POST_FUTURE_HOLD;
}
//插入futureHoldH
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(LocalContext.getUserId(), transactionName);
long transRrn = transactionLog.getTransRrn();
FutureHoldHistory futureHoldHInfo = new FutureHoldHistory();
BeanUtils.copyProperties(futureHoldInfo,futureHoldHInfo);
futureHoldHInfo.setTransRrn(transRrn);
futureHoldHInfo.setTransId(transactionName);
futureHoldHInfo.setTransUserId(LocalContext.getUserId());
futureHoldHInfo.setTransTime(new Timestamp(System.currentTimeMillis()));
futureHoldDAO.insertFutureHoldH(futureHoldHInfo);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public void addFutureHoldLot(FutureHoldLot futureHoldLot) {
//添加future_hold_lot表数据
futureHoldDAO.insertFutureHoldLot(futureHoldLot);
//添加future_hold_lot_h表数据
String transactionName = TransactionNames.HOLD_KEY;
TransactionLog transactionLog = transactionLogManager.startTransactionLog(LocalContext.getUserId(),transactionName);
long transRrn = transactionLog.getTransRrn();
FutureHoldLotHistory futureHoldLotHistory = new FutureHoldLotHistory();
BeanUtils.copyProperties(futureHoldLot,futureHoldLotHistory);
futureHoldLotHistory.setTransRrn(transRrn);
futureHoldLotHistory.setTransId(transactionName);
futureHoldLotHistory.setTransUserId(LocalContext.getUserId());
futureHoldLotHistory.setTransTime(new Timestamp(System.currentTimeMillis()));
futureHoldDAO.insertFutureHoldLotH(futureHoldLotHistory);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public List<FutureHoldLot> getFHLotListByLot(long lotRrn,String holdType) {
return futureHoldDAO.getFHLotListByLot(lotRrn,holdType);
}
@Override
public void releaseFutureHoldLot(long lotRrn, String holdType,Map releaseInfo) {
List<FutureHoldLot> fhLotListByLots = getFHLotListByLot(lotRrn, holdType);
Collection releaseReasons = (Collection) MapUtils.getObject(releaseInfo, "releaseReasons");
Object[] releaseReasonArray = releaseReasons.toArray();
for (int i = 0; i < releaseReasonArray.length; i++) {
HashMap releaseReason = (HashMap) releaseReasonArray[i];
String holdCode = MapUtils.getString(releaseReason, "reasonCode");
String sequenceNumber = MapUtils.getString(releaseReason,"sequenceNumber");
for (FutureHoldLot fhLotListByLot : fhLotListByLots) {
if (sequenceNumber.equals(fhLotListByLot.getAttributeData1())) {
//删除future_hold_lot表数据
futureHoldDAO.deleteFutureHoldLot(fhLotListByLot.getFutureHoldSysRrn(), lotRrn);
//添加future_hold_lot_h表数据
String transactionName = TransactionNames.RELEASE_KEY;
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(MapUtils.getString(releaseReason, "transPerformedBy"),
transactionName);
long transRrn = transactionLog.getTransRrn();
FutureHoldLotHistory futureHoldLotHistory = new FutureHoldLotHistory();
BeanUtils.copyProperties(fhLotListByLot,futureHoldLotHistory);
futureHoldLotHistory.setTransRrn(transRrn);
futureHoldLotHistory.setTransId(transactionName);
futureHoldLotHistory.setTransUserId(MapUtils.getString(releaseReason, "transPerformedBy"));
futureHoldLotHistory.setTransTime(new Timestamp(System.currentTimeMillis()));
futureHoldDAO.insertFutureHoldLotH(futureHoldLotHistory);
transactionLogManager.markTransactionLog(transactionLog);
}
}
}
}
@Override
public void addFutureHoldLotHistory(FutureHoldLotHistory fhlHistory) {
String transactionName = fhlHistory.getTransId();
TransactionLog transactionLog = transactionLogManager.startTransactionLog(fhlHistory.getTransUserId(), transactionName);
long transRrn = transactionLog.getTransRrn();
fhlHistory.setTransRrn(transRrn);
futureHoldDAO.insertFutureHoldLotH(fhlHistory);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public List<FutureHoldLotHistory> getFHLHistoryListByFutureHold(Long sysRrn,long lotRrn) {
List<FutureHoldLotHistory> futureHoldLotHList = futureHoldDAO.getFutureHoldLotHList(sysRrn, lotRrn);
return futureHoldLotHList;
}
}