LotSuperReleaseAction.java
package com.mycim.webapp.actions.lot.lotholdrelease;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.consts.HoldCodeNames;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.wip.Lot;
import com.mycim.valueobject.wip.LotStatus;
import com.mycim.valueobject.wip.TransReason;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.WipSetupAction;
import com.mycim.webapp.forms.lot.HoldReleaseLotInfoForm;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Luopeng.Wang
* @version 6.0.0
* @date 2019/9/16
**/
public class LotSuperReleaseAction extends WipSetupAction {
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Lot lot = initLotBaseInfoForJsp(request, false, "RELEASELOT", "RELEASELOT_CARRIER");
List<Map> holdInfos = new ArrayList<>();
if (lot != null && lot.getLotRrn() > 0) {
holdInfos = wipQueryService.getHoldReasons(lot.getLotRrn());
}
request.setAttribute("collection", holdInfos);
return mapping.findForward(Constants.SUPERRELEASE_KEY);
}
public ActionForward superRelease(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
HoldReleaseLotInfoForm theform = (HoldReleaseLotInfoForm) form;
long facilityRrn = LocalContext.getFacilityRrn();
String lotId = theform.getLotId();
long userRrn = LocalContext.getUserRrn();
String userId = LocalContext.getUserId();
String fieldFlag = request.getParameter("fieldFlags");
String[] fieldFlags = fieldFlag.split(",");
Lot lot = lotQueryService.getLot(lotId, facilityRrn);
//卡控post future hold被hold住的lot
checkPostFutureHold(lot.getLotRrn());
Assert.isFalse(lot.getLotRrn() <= 0,
Errors.create().key(MessageIdList.LOT_LOTRRN_NOT_FOUND).content("Cannot Find Lot!").build());
Assert.isTrue(StringUtils.equals(lot.getLotStatus(), LotStatus.HOLD),
Errors.create().key(MessageIdList.LOT_STATUS_NOT_ALLOW).content("Lot status not allow").build());
List<Map> holdReasons = wipQueryService.getHoldReasons(lot.getLotRrn());
List<Map> releaseReasons = new ArrayList();
List<Map> unReleaseReasons = new ArrayList();
//是否存在trackOutHold释放
boolean trackOutHoldExisted = false;
//工步变更检查flag
boolean lotStepChanged = false;
// 是否存在Bonding绑定错误
boolean sapphireBondedError = false;
for (int i = 0; i < holdReasons.size(); i++) {
Map holdReason = holdReasons.get(i);
String reasonCode = MapUtils.getString(holdReason, "reasonCode");
if (StringUtils.equals(TransReason.reasonCode.BONDERROR.name(), reasonCode)) {
sapphireBondedError = true;
}
if (StringUtils.equals("0", fieldFlags[i])) {
Assert.isFalse(
StringUtils.contains(MapUtils.getString(holdReason, "reasonCode"), HoldCodeNames.SRCHOLD_KEY) &&
StringUtils.equalsIgnoreCase(lot.getLotStatus(), LotStatus.RUNCARD_HOLD),
Errors.create().content("Can't release SRCHOLD!").build());
if (StringUtils.equals("TRACKOUTHOLD", MapUtils.getString(holdReason, "reasonCategory"))) {
trackOutHoldExisted = true;
}
releaseReasons.add(holdReason);
} else {
unReleaseReasons.add(holdReason);
}
}
Assert.isFalse(releaseReasons.size() <= 0,
Errors.create().key(MessageIdList.LOT_RELEASE_HOLD_EMPTY).content("please select release hold!")
.build());
Assert.isFalse(trackOutHoldExisted == true && unReleaseReasons.size() > 0,
Errors.create().key(MessageIdList.LOT_TRACKOUT_HOLD_CANNOT_RELEASE).content(
"Before " + "Trackout " + "hold " + "released, " + "Please " + "release " +
"other hold " + "first!").build());
if (trackOutHoldExisted) {
lotStepChanged = lotService.checkLotStepChange(lot.getLotRrn());
}
HashMap releaseInfo = new HashMap();
releaseInfo.put("lotRrn", new Long(lot.getLotRrn()).toString());
releaseInfo.put("lotId", lot.getLotId());
releaseInfo.put("releaseReasons", releaseReasons);
releaseInfo.put("transPerformedBy", userId);
releaseInfo.put("transComments", theform.getLotComments());
releaseInfo.put("operation", lot.getOperationId());
TransReason transReason = new TransReason();
transReason.setReasonCode(theform.getReasonCode());
transReason.setReason(theform.getLotComments());
transReason.setTransQty1(lot.getQty1());
transReason.setTransQty2(lot.getQty2());
transReason.setResponsibility(userId);
transReason.setReason(theform.getReason());
releaseInfo.put("transReason", transReason);
releaseInfo.put("superFlag", "1");
// List<Lot> lockLots = new ArrayList<>();
// lockLots.add(lot);
// checkAndCreateLotsTransLock(LocalContext.getUserRrn(), TransactionNames.LOCK_RELEASE_LOT, lockLots,
// "super release lot in LotSuperReleaseAction by: " + LocalContext.getUserId());
lotService.releaseLot(releaseInfo);
releaseSpcHold(lot, releaseReasons);
if (sapphireBondedError || (trackOutHoldExisted && unReleaseReasons.isEmpty() && !lotStepChanged)) {
//查询最新批次信息
lot = lotQueryService.getLot(lot.getLotRrn());
return dispatchLotAfterRelease(mapping, request, response, userId, facilityRrn, lot);
}
splitRunCardService.doStartSplitRunCard(LocalContext.getUserId(), lot);
List<Map> holdInfos = wipQueryService.getHoldReasons(lot.getLotRrn());
theform.setReasonGroup("");
ActionForward forward = init(mapping, form, request, response);
request.setAttribute("lotBaseInfo", new HashMap());
return forward;
}
}