LotTransHistoryDetailAction.java
package com.mycim.webapp.actions.lot.lottranshistory;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.framework.utils.msg.JsonUtils;
import com.mycim.valueobject.automonitor.entity.LotAutoMonitorInfo;
import com.mycim.valueobject.automonitor.entity.LotMonitorJobStepEdcInfo;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.wip.Lot;
import com.mycim.webapp.actions.WipSetupAction;
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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 批次事务历史详细信息
*
* @author weike.li
* @version 6.0.0
* @date 2019/9/9
**/
public class LotTransHistoryDetailAction extends WipSetupAction {
private static final String[] ADJUST_LOT_FIELDS = {"createCategory", "lotType", "priority", "hotFlag",
"splitMergeFlag", "lotOwner", "dueDate", "customerId", "shippingCode", "outerOrderNO", "outOrderType",
"lotComments"};
private static final String QRY_LOT_TRANS_DETAIL = "qryLotTransDetail";
private static final String TRANS_ID = "transId";
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
String reqCode = request.getParameter("reqCode");
if (StringUtils.equalsIgnoreCase(QRY_LOT_TRANS_DETAIL, reqCode)) {
return qryLotTransDetail(mapping, request);
}
return mapping.findForward("view");
}
private ActionForward qryLotTransDetail(ActionMapping mapping, HttpServletRequest request) {
Long facility = LocalContext.getFacilityRrn();
Long lotRrn = NumberUtils.toLong(request.getParameter("lotRrn"));
Long transRrn = NumberUtils.toLong(request.getParameter("transRrn"));
Map<String, Object> detail = new HashMap<>();
Map<String, Object> adjust = lotQueryService.qryAdjustTransHistory(transRrn, lotRrn);
if (adjust != null) {
Map<String, Object> beforeDetail = lotQueryService.qryTransHistoryDetail(transRrn, lotRrn);
detail.putAll(beforeDetail);
Map before = JsonUtils.toMap(MapUtils.getString(adjust, "adjustBefore"));
Map after = JsonUtils.toMap(MapUtils.getString(adjust, "adjustAfter"));
for (Object key : before.keySet()) {
if (checkShowChangeField(key.toString())) {
String beforeS = MapUtils.getString(before, key) == null ? "" : MapUtils.getString(before, key);
String afterS = MapUtils.getString(after, key) == null ? "" : MapUtils.getString(after, key);
if (StringUtils.equals("dueDate", key.toString())) {
beforeS = StringUtils.contains(beforeS, "00:00:00.0") ? StringUtils
.substring(beforeS, 0, beforeS.length() - 11) : beforeS;
afterS = StringUtils.contains(afterS, "00:00:00.0") ? StringUtils
.substring(afterS, 0, afterS.length() - 11) : afterS;
}
if (StringUtils.equals("priority", key.toString())) {
beforeS = MapUtils.getString(before, "hotFlag") + "-" + MapUtils.getString(before, "priority");
afterS = MapUtils.getString(after, "hotFlag") + "-" + MapUtils.getString(after, "priority");
}
if (StringUtils.equals(beforeS, afterS)) {
detail.put(key.toString(), beforeS);
} else {
detail.put(key.toString(), beforeS + "-->" + afterS);
}
}
}
List<Map> transList = lotQueryService.queryAllLotTrans(lotRrn);
for (int i = 0; i < transList.size(); i++) {
Map<String, Object> map = transList.get(i);
if (MapUtils.getLong(map, "transRrn").equals(transRrn) &&
checkHiddenTrans(MapUtils.getString(map, "transId"))) {
detail.put("carrierId", MapUtils.getString(map, "carrierId"));
detail.put("routeId", MapUtils.getString(map, "routeId"));
detail.put("routeRrn", MapUtils.getLong(map, "routeRrn"));
detail.put("flowSeq", MapUtils.getString(map, "flowSeq"));
detail.put("operationType", MapUtils.getString(map, "operationType"));
detail.put("workArea", MapUtils.getString(map, "workArea"));
detail.put("transComments", MapUtils.getString(map, "transComments"));
}
}
} else {
Map<String, Object> preDetail = lotQueryService.qryLotAfterTransDetail(transRrn, lotRrn);
Map<String, Object> preTrans = null;
Map<String, Object> postTrans = new HashMap<String, Object>();
List<Map> transList = lotQueryService.queryAllLotTrans(lotRrn);
for (int i = 0; i < transList.size(); i++) {
Map<String, Object> map = transList.get(i);
if (MapUtils.getLong(map, "transRrn").equals(transRrn) &&
checkHiddenTrans(MapUtils.getString(map, "transId"))) {
postTrans = map;
if (i < transList.size() - 1) {
preTrans = transList.get(i + 1);
}
break;
}
}
if (preDetail == null) {
Lot lot = lotQueryService.getLot(lotRrn);
preDetail = BeanUtils.copyBeanToMap(lot);
}
detail.putAll(preDetail);
if (postTrans != null) {
detail.putAll(postTrans);
}
for (String key : ADJUST_LOT_FIELDS) {
detail.put(key, MapUtils.getObject(preDetail, key));
}
for (String key : detail.keySet()) {
if (checkShowChangeField(key)) {
String beforeS = MapUtils.getString(preTrans, key);
String afterS = MapUtils.getString(detail, key) == null ? "" : MapUtils.getString(detail, key);
if (StringUtils.equals("priority", key)) {
beforeS = MapUtils.getString(preTrans, "hotFlag") + "-" +
MapUtils.getString(preTrans, "priority");
afterS = MapUtils.getString(detail, "hotFlag") + "-" + MapUtils.getString(detail, "priority");
}
if (StringUtils.equals(beforeS, afterS)) {
detail.put(key.toString(), beforeS);
} else {
if (MapUtils.getString(preTrans, key) == null) {
detail.put(key.toString(), afterS);
} else {
detail.put(key.toString(), beforeS + "-->" + afterS);
}
}
}
}
}
String transId = MapUtils.getString(detail, TRANS_ID);
if (StringUtils.equals(transId, TransactionNames.MOVEOUT_KEY)) {
String parameterData = wipQueryService.getParamCon(lotRrn, MapUtils.getString(detail, "stepSequence"));
if (parameterData.length() > 0) {
parameterData = StringUtils.replace(parameterData, "<br>", "\n");
}
detail.put("edcParameter", parameterData);
if (StringUtils.indexOf(parameterData, "(") > 0) {
String parameterId = StringUtils.substring(parameterData, 0, StringUtils.indexOf(parameterData, "("));
String chartId = StringUtils.substring(parameterId, 0, 1) +
StringUtils.substring(parameterId, 2, parameterId.length());
detail.put("hadUrl", "1");
detail.put("edcUrl", "");
}
} else if (StringUtils.equals(transId, TransactionNames.DATA_COLLECTION_KEY)) {
LotAutoMonitorInfo monitorInfo = lotAutoMonitorInqService.getLotAutoMonitorInfo(lotRrn);
if (Objects.nonNull(monitorInfo)) {
List<LotMonitorJobStepEdcInfo> stepEdcInfoList = lotAutoMonitorInqService.getStepEdcInfoList(transRrn);
String parameterData = stepEdcInfoList.stream().map(edcInfo -> {
return edcInfo.getUnitId() + " " + edcInfo.getSpcJobName() + " " + edcInfo.getDataValue();
}).collect(Collectors.joining("\n"));
detail.put("edcParameter", parameterData);
}
}
Map<String, Object> ctxSearch = new HashMap<>();
ctxSearch.put("facilityRrn", facility);
ctxSearch.put("productRrn", MapUtils.getLong(detail, "productRrn"));
ctxSearch.put("processRrn", MapUtils.getLong(detail, "processRrn"));
ctxSearch.put("routeRrn", MapUtils.getLong(detail, "routeRrn"));
ctxSearch.put("operationRrn", MapUtils.getLong(detail, "operationRrn"));
ctxSearch.put("processVersion", MapUtils.getLong(detail, "processVersion"));
detail.put("operationDesc", ctxExecService.getOperationDescByProcessInfo(ctxSearch));
request.setAttribute("detail", detail);
return mapping.findForward("transDetail");
}
private boolean checkShowChangeField(String key) {
String[] noChanges = new String[]{"transStartTime", "transEndTime", "transPerformedBy", "transComments",
"comments", "transId", "transRrn", "stepSequence"};
for (String str : noChanges) {
if (StringUtils.equals(str, key)) {
return false;
}
}
return true;
}
private boolean checkIsAdjustField(String key) {
for (String adjust : ADJUST_LOT_FIELDS) {
if (StringUtils.equals(adjust, key)) {
return true;
}
}
return false;
}
private boolean checkHiddenTrans(String transId) {
String[] transs = new String[]{TransactionNames.LBRD_KEY, TransactionNames.MOVENEXT_KEY,
TransactionNames.WS_MOVENEXT_KEY, TransactionNames.CREATE_KEY};
for (String trans : transs) {
if (StringUtils.equals(trans, transId)) {
return false;
}
}
return true;
}
}