WorkOrderAction.java
package com.mycim.webapp.actions.workOrder;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.LinkTypeList;
import com.mycim.valueobject.prp.WorkOrder;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.PrpSetupAction;
import com.mycim.webapp.forms.WorkOrderForm;
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.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class WorkOrderAction extends PrpSetupAction {
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
WorkOrderForm wfo = (WorkOrderForm) form;
wfo.setWorkorderId(wfo.getInstanceId());
String workorderId = StringUtils.upperCase(wfo.getWorkorderId());
WorkOrder workOrder = workOrderService.getWorkOrderById(workorderId);
if (workOrder != null) {
workOrder.setProductList(buildProductInfo(workOrder.getWorkorderRrn()));
PropertyUtils.copyProperties(wfo, workOrder);
} else {
workOrder = new WorkOrder();
wfo.setWorkorderId(workorderId);
}
Integer completeTotal = lotService.getLotTotalByWorkOrderAndStatus(wfo.getWorkorderId(), "completed");
Integer scrapTotal = lotService.getLotTotalByWorkOrderAndStatus(wfo.getWorkorderId(), "scrap");
Integer runingTotal = lotService.getLotTotalByWorkOrderAndStatus(wfo.getWorkorderId(), "inrun");
wfo.setCompleteWafer(completeTotal);
wfo.setRuningWafer(runingTotal);
wfo.setScrapWafer(scrapTotal);
Integer unCompleteWafer = wfo.getPlannedYield() - completeTotal;
wfo.setUnCompleteWafer(unCompleteWafer > 0 ? unCompleteWafer : 0);
request.setAttribute("startDay", workOrder.getStartDay());
request.setAttribute("requireDay", workOrder.getRequireDay());
request.setAttribute("dayDay", workOrder.getDayDay());
request.setAttribute("dueDate", workOrder.getDueDate());
return mapping.findForward("workOrderInfo");
}
/**
* 增加工单
*
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward addWorkOrder(ActionMapping mapping, WorkOrderForm form, HttpServletRequest request,
HttpServletResponse response) {
String namedSpace = getNamedSpace(ObjectList.WORKORDER, LocalContext.getFacilityRrn());
WorkOrder workOrder = new WorkOrder();
PropertyUtils.copyProperties(workOrder, form);
workOrder.setNamedSpace(namedSpace);
workOrder.setInstanceId(workOrder.getWorkorderId());
workOrder.setCreateUser(LocalContext.getUserId());
workOrder.setTransPerformedby(LocalContext.getUserId());
workOrder.setTransId("CREATE");
if (StringUtils.isNotEmpty(form.getStartDayStr())) {
workOrder.setStartDay(new Timestamp(DateUtils.parse(form.getStartDayStr(), "yyyy/MM/dd").getTime()));
}
if (StringUtils.isNotEmpty(form.getRequireDayStr())) {
workOrder.setRequireDay(new Timestamp(DateUtils.parse(form.getRequireDayStr(), "yyyy/MM/dd").getTime()));
}
if (StringUtils.isNotEmpty(form.getDayDayStr())) {
workOrder.setDayDay(new Timestamp(DateUtils.parse(form.getDayDayStr(), "yyyy/MM/dd").getTime()));
}
if (StringUtils.isNotEmpty(form.getDueDateStr())) {
workOrder.setDueDate(new Timestamp(DateUtils.parse(form.getDueDateStr(), "yyyy/MM/dd").getTime()));
}
workOrder = workOrderService.insertWorkOrder(workOrder);
PropertyUtils.copyProperties(form, workOrder);
request.setAttribute("startDay", workOrder.getStartDay());
request.setAttribute("requireDay", workOrder.getRequireDay());
request.setAttribute("dayDay", workOrder.getDayDay());
request.setAttribute("dueDate", workOrder.getDueDate());
request.setAttribute("operationSuccess", "true");
return mapping.findForward("workOrderInfo");
}
/**
* 修改工单
*
* @param mapping
* @param request
* @param form
* @return
*/
public ActionForward updateWorkOrder(ActionMapping mapping, HttpServletRequest request, WorkOrderForm form) {
String namedSpace = getNamedSpace(ObjectList.WORKORDER, LocalContext.getFacilityRrn());
WorkOrder workOrder = new WorkOrder(form.getWorkorderId(), namedSpace, ObjectList.WORKORDER);
PropertyUtils.copyProperties(workOrder, form);
if (StringUtils.isNotEmpty(form.getStartDayStr())) {
workOrder.setStartDay(new Timestamp(DateUtils.parse(form.getStartDayStr(), "yyyy/MM/dd").getTime()));
}
if (StringUtils.isNotEmpty(form.getRequireDayStr())) {
workOrder.setRequireDay(new Timestamp(DateUtils.parse(form.getRequireDayStr(), "yyyy/MM/dd").getTime()));
}
if (StringUtils.isNotEmpty(form.getDayDayStr())) {
workOrder.setDayDay(new Timestamp(DateUtils.parse(form.getDayDayStr(), "yyyy/MM/dd").getTime()));
}
if (StringUtils.isNotEmpty(form.getDueDateStr())) {
workOrder.setDueDate(new Timestamp(DateUtils.parse(form.getDueDateStr(), "yyyy/MM/dd").getTime()));
}
workOrderService.updateWorkOrder(workOrder);
workOrder.setProductList(buildProductInfo(workOrder.getWorkorderRrn()));
PropertyUtils.copyProperties(form, workOrder);
request.setAttribute("startDay", workOrder.getStartDay());
request.setAttribute("requireDay", workOrder.getRequireDay());
request.setAttribute("dayDay", workOrder.getDayDay());
request.setAttribute("dueDate", workOrder.getDueDate());
return mapping.findForward("workOrderInfo");
}
/**
* 增加产品
*
* @param mapping
* @param wfo
* @param request
* @param response
* @return
*/
public ActionForward addProduct(ActionMapping mapping, WorkOrderForm wfo, HttpServletRequest request,
HttpServletResponse response) {
String productId = WebUtils.getParameterNoTrim("productId", request);
Long workOrderRrn = wfo.getWorkorderRrn();
if (workOrderRrn == null || workOrderRrn.longValue() <= 0) {
workOrderRrn = getInstanceRrn(wfo.getWorkorderId(),
getNamedSpace(ObjectList.WORKORDER, LocalContext.getFacilityRrn()),
ObjectList.WORKORDER);
}
Assert.isFalse(workOrderRrn == null || workOrderRrn.longValue() <= 0,
Errors.create().key(MessageIdList.WORKORDER_ERRORWORKORDER).content("WorkOrder id error")
.build());
Long productRrn = getInstanceRrn(productId,
getNamedSpace(ObjectList.PRODUCT_KEY, LocalContext.getFacilityRrn()),
ObjectList.PRODUCT_KEY);
Assert.isFalse(productRrn == null || productRrn.longValue() <= 0,
Errors.create().key(MessageIdList.PRODUCT_ERRORPRODUCT).content("Error product id").build());
Relation relation = new Relation(workOrderRrn, productRrn, LinkTypeList.WORKORDER_TO_PRODUCT_KEY);
relation.setTransPerformedby(LocalContext.getUserId());
baseService.insertRelation(relation);
wfo.setProductList(buildProductInfo(workOrderRrn));
wfo.setProductId(null);
return mapping.findForward("workOrderInfo");
}
/**
* 删除产品
*
* @param mapping
* @param wfo
* @param request
* @param response
* @return
*/
public ActionForward delProduct(ActionMapping mapping, WorkOrderForm wfo, HttpServletRequest request,
HttpServletResponse response) {
long productRrn = WebUtils.getParameterLong("delProduct", request);
Long workOrderRrn = wfo.getWorkorderRrn();
Assert.isFalse(workOrderRrn == null || workOrderRrn.longValue() <= 0,
Errors.create().key(MessageIdList.WORKORDER_ERRORWORKORDER).content("WorkOrder id error")
.build());
Relation relation = new Relation(workOrderRrn, productRrn, LinkTypeList.WORKORDER_TO_PRODUCT_KEY);
relation.setTransPerformedby(LocalContext.getUserId());
baseService.deleteRelation(relation);
wfo.setProductList(buildProductInfo(workOrderRrn));
return mapping.findForward("workOrderInfo");
}
/**
* 冻结工单
*
* @param mapping
* @param request
* @param form
* @return
*/
public ActionForward freezeWorkOrder(ActionMapping mapping, HttpServletRequest request, WorkOrderForm form) {
form.setStatus("COMPLETED");
updateWorkOrder(form);
request.setAttribute("startDay", DateUtils.parse(form.getRequireDayStr(), "yyyy/MM/dd"));
request.setAttribute("requireDay", DateUtils.parse(form.getRequireDayStr(), "yyyy/MM/dd"));
request.setAttribute("dayDay", DateUtils.parse(form.getDayDayStr(), "yyyy/MM/dd"));
request.setAttribute("dueDate", DateUtils.parse(form.getDueDateStr(), "yyyy/MM/dd"));
return mapping.findForward("workOrderInfo");
}
/**
* 激活工单
*
* @param mapping
* @param request
* @param form
* @return
*/
public ActionForward activeWorkOrder(ActionMapping mapping, HttpServletRequest request, WorkOrderForm form) {
form.setStatus("ACTIVE");
updateWorkOrder(form);
request.setAttribute("startDay", DateUtils.parse(form.getRequireDayStr(), "yyyy/MM/dd"));
request.setAttribute("requireDay", DateUtils.parse(form.getRequireDayStr(), "yyyy/MM/dd"));
request.setAttribute("dayDay", DateUtils.parse(form.getDayDayStr(), "yyyy/MM/dd"));
request.setAttribute("dueDate", DateUtils.parse(form.getDueDateStr(), "yyyy/MM/dd"));
request.setAttribute("operationSuccess", "true");
return mapping.findForward("workOrderInfo");
}
/**
* 关闭工单
*
* @param mapping
* @param request
* @param form
* @return
*/
public ActionForward closeWorkOrder(ActionMapping mapping, HttpServletRequest request, WorkOrderForm form) {
form.setStatus("CLOSE");
updateWorkOrder(form);
return mapping.findForward("workOrderInfo");
}
/**
* 详情
*
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward initDetail(ActionMapping mapping, WorkOrderForm form, HttpServletRequest request,
HttpServletResponse response) {
if (StringUtils.isEmpty(form.getWorkorderId())) {
return mapping.findForward("initDetail");
}
form.setWorkorderId(form.getWorkorderId().trim().toUpperCase());
WorkOrder workOrder = workOrderService.getWorkOrderById(form.getWorkorderId());
Assert.notNull(workOrder,
Errors.create().key(MessageIdList.WORKORDER_ERRORWORKORDER).content("work order not exists")
.build());
Integer completeTotal = lotService.getLotTotalByWorkOrderAndStatus(form.getWorkorderId(), "completed");
Integer scrapTotal = lotService.getLotTotalByWorkOrderAndStatus(form.getWorkorderId(), "scrap");
Integer runingTotal = lotService.getLotTotalByWorkOrderAndStatus(form.getWorkorderId(), "inrun");
PropertyUtils.copyProperties(form, workOrder);
form.setCompleteWafer(completeTotal);
form.setRuningWafer(runingTotal);
form.setScrapWafer(scrapTotal);
Integer unCompleteWafer = form.getPlannedYield() - completeTotal;
form.setUnCompleteWafer(unCompleteWafer > 0 ? unCompleteWafer : 0);
return mapping.findForward("initDetail");
}
private void updateWorkOrder(WorkOrderForm form) {
String namedSpace = getNamedSpace(ObjectList.WORKORDER, LocalContext.getFacilityRrn());
WorkOrder workOrder = new WorkOrder(form.getWorkorderId(), namedSpace, ObjectList.WORKORDER);
PropertyUtils.copyProperties(workOrder, form);
workOrderService.updateWorkOrder(workOrder);
workOrder.setProductList(buildProductInfo(workOrder.getWorkorderRrn()));
PropertyUtils.copyProperties(form, workOrder);
}
private List<Map<String, String>> buildProductInfo(Long workOrderRrn) {
List<Relation> relationInfos = baseService
.getRelationsUseFromRrn(workOrderRrn, LinkTypeList.WORKORDER_TO_PRODUCT_KEY);
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> productInfo;
NamedObject namedObject;
for (Relation relation : relationInfos) {
productInfo = new HashMap<String, String>();
namedObject = new NamedObject(relation.getToRrn());
namedObject = baseService.getNamedObject(namedObject);
productInfo.put("productRrn", Long.toString(namedObject.getInstanceRrn()));
productInfo.put("productId", namedObject.getInstanceId());
productInfo.put("productDesc", namedObject.getInstanceDesc());
list.add(productInfo);
}
return list;
}
}