MaterialMappingAction.java
package com.mycim.webapp.actions.operation.run;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.wip.Job;
import com.mycim.valueobject.wip.Lot;
import com.mycim.valueobject.wip.Unit;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.WipSetupAction;
import com.mycim.webapp.forms.LbrdLotInfoForm;
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.List;
import java.util.Map;
/**
* @author Johnson.Wang
* @version 6.0.0
* @date 2019/10/9
**/
public class MaterialMappingAction extends WipSetupAction {
private static String UNITID_KEY = "unitId";
private static String MATERIAL_KEY = "materialId";
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
LbrdLotInfoForm theform = (LbrdLotInfoForm) form;
Job job = (Job) request.getAttribute(SessionNames.JOB_KEY);
if (job == null && theform.getCacheJob() != null) {
job = (Job) WebUtils.getCacheString2Obj(theform.getCacheJob());
request.setAttribute(SessionNames.JOB_KEY, job);
}
Map parameters = (Map) request.getAttribute(SessionNames.PARAMETERSINFO_KEY);
if (parameters == null && theform.getCacheParametersInfo() != null) {
parameters = (Map) WebUtils.getCacheString2Obj(theform.getCacheParametersInfo());
request.setAttribute(SessionNames.PARAMETERSINFO_KEY, parameters);
}
List<Map> lots = (List<Map>) request.getAttribute(SessionNames.COLLECTION_KEY);
if (lots == null && theform.getCacheCollection() != null) {
lots = (List<Map>) WebUtils.getCacheString2Obj(theform.getCacheCollection());
request.setAttribute(SessionNames.COLLECTION_KEY, lots);
}
// if (StringUtils.isNotBlank(WebUtils.getParameter("validateUnitAlias2", request))) {
// return validateUnitAlias2(request, response);
// }
// if (StringUtils.isNotBlank(WebUtils.getParameter("addMaterialInfo", request))) {
// return addMaterialInfo(mapping, request, response);
// }
return validateIsNeedMaterialMapping(mapping, request, response, theform);
}
public void validateUnitAlias2(HttpServletRequest request, HttpServletResponse response) {
String unitId = WebUtils.getParameterUpperCase("materialId", request);
Long unitRrn = WebUtils.getParameterLong("unitRrn", request);
Unit unit = wipQueryService.getUnit4Alias2(unitRrn, unitId);
Assert.isFalse(unit.getUnitRrn() > 0,
Errors.create().key(MessageIdList.UNIT_NOT_EMPTY).content("Unit is not Empty!").build());
}
public ActionForward addMaterialInfo(ActionMapping mapping, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map parameters = (Map) request.getAttribute(SessionNames.PARAMETERSINFO_KEY);
List<Map> lots = (List<Map>) request.getAttribute(SessionNames.COLLECTION_KEY);
List<Map> materialMappinglots = filterMaterialMappingLots(lots);
List<Unit> unitsList = getUnitsList(materialMappinglots);
List<Unit> units = new ArrayList<>();
String unitId;
String materialId;
Unit unit;
for (int i = 0; i < unitsList.size(); i++) {
unit = new Unit();
unitId = WebUtils.getParameterUpperCase(UNITID_KEY + i, request);
materialId = WebUtils.getParameterUpperCase(MATERIAL_KEY + i, request);
unit = wipQueryService.getUnit(LocalContext.getFacilityRrn(), unitId);
unit.setUnitAlias2(materialId);
units.add(unit);
}
wipService.updateUnitAlias2(units);
parameters.put(SessionNames.RUNSTEP_FLAG, "0");
request.getRequestDispatcher(mapping.findForward("workflow").getPath()).forward(request, response);
return null;
}
private ActionForward validateIsNeedMaterialMapping(ActionMapping mapping, HttpServletRequest request,
HttpServletResponse response,
LbrdLotInfoForm theform) throws Exception {
List<Map> lots = (List<Map>) request.getAttribute(SessionNames.COLLECTION_KEY);
Map parameters = (Map) request.getAttribute(SessionNames.PARAMETERSINFO_KEY);
Assert.isFalse(lots == null || parameters == null,
Errors.create().content("Parameters are not enough!").build());
List<Map> materialMappinglots = filterMaterialMappingLots(lots);
if (materialMappinglots != null && !materialMappinglots.isEmpty()) {
List<Unit> unitsList = getUnitsList(materialMappinglots);
request.setAttribute("units", unitsList);
setCache4WFL(request, theform);
return mapping.findForward("materialMapping");
} else {
parameters.put(SessionNames.RUNSTEP_FLAG, "0");
request.getRequestDispatcher(mapping.findForward("workflow").getPath()).forward(request, response);
return null;
}
}
private List<Map> filterMaterialMappingLots(List<Map> lots) {
List<Map> materialMappinglots = new ArrayList<>();
for (Map item : lots) {
Lot currentLot = lotQueryService.getLot(MapUtils.getLongValue(item, "lotRrn"));
if (lotQueryService.isMaterialMapping(currentLot)) {
materialMappinglots.add(item);
}
}
return materialMappinglots;
}
private List<Unit> getUnitsList(List<Map> lots) {
List<Unit> units = new ArrayList<>();
for (Map tmpLot : lots) {
List<Unit> unitsList = wipQueryService.getUnitList(MapUtils.getLongValue(tmpLot, "lotRrn"));
units.addAll(unitsList);
}
return units;
}
}