LotLocation4ExtAction.java

/**
 * @ Copyright 2001 FA Software; All right reserved. No part of this program may be reproduced or transmitted
 * in any form or by any means, electronic or mechanical, including photocopying, recording, or by any
 * information storage or retrieval system without written permission from FA Software, except for inclusion
 * of brief quotations in a review.
 */
package com.mycim.webapp.actions.operation;

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.bas.ErrorMsg;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.EventName;
import com.mycim.valueobject.ems.EntityStatus;
import com.mycim.valueobject.ems.Equipment;
import com.mycim.valueobject.inv.Order;
import com.mycim.valueobject.wip.Lot;
import com.mycim.webapp.actions.WipSetupAction;
import com.mycim.webapp.forms.lot.LotInfoForm;
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.*;

/**
 * LotLocation4ExtAction
 *
 * @author kang.zhang
 */
public class LotLocation4ExtAction extends WipSetupAction {

    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
        return null;
    }

    public Map lotLocation4Ext(ActionMapping mapping, LotInfoForm theform, HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
        Map map = new HashMap();

        String lotId = theform.getLotId();
        Map lotInfo = null;
        List jsonArray = new ArrayList<>();
        Map jsonObject = null;

        if (lotId != null && !lotId.trim().equals("")) {
            lotInfo = isValidLot(LocalContext.getFacilityRrn(), lotId.trim().toUpperCase());
        }
        Assert.isFalse(lotInfo == null,
                       Errors.create().key(MessageIdList.SHIPLOT_LOT_NOT_EXISTS).content("This lot does not exist!")
                             .build());

        map.put("lotRrn", MapUtils.getLongValue(lotInfo, "lotRrn"));
        request.setAttribute("map", map);
        request.setAttribute("lotInfo", lotInfo);
        Map lotordmap = new HashMap();
        //TODO
        // lotordmap =
        // this.getBaseManager().getLotPreOrderInfo(lotInfo.get("lotRrn").toString());
        if (!lotordmap.isEmpty()) {
            request.setAttribute("market_order_id", MapUtils.getString(lotordmap, "market_order_id"));
            request.setAttribute("order_type", MapUtils.getString(lotordmap, "order_type"));
            request.setAttribute("order_id", MapUtils.getString(lotordmap, "order_id"));
            // ***************Add by Holly 2008/07/01
            Order ord = new Order();
            /*ord = this.getBaseManager().getOrder((String) lotordmap.get("order_id"),
            "LOTLOCATION");*/
            String custduedate = (ord.getCust_due_date());
            custduedate = custduedate + " 00:00:00.0";
            String custId = (ord.getCust_Id());
            request.setAttribute("lotpurpose", ord.getLot_purpose().toString());
            request.setAttribute("custduedate", custduedate);
            request.setAttribute("custid", custId);
        } else {
            request.setAttribute("market_order_id", "");
            request.setAttribute("order_type", "");
            request.setAttribute("order_id", "");
            request.setAttribute("custduedate", "");
            request.setAttribute("lotpurpose", "");
            request.setAttribute("custid", "");
        }
        String lotstatus = MapUtils.getString(lotInfo, "lot_status");

        if (StringUtils.equalsIgnoreCase(lotstatus, "WAITING") || StringUtils.equalsIgnoreCase(lotstatus, "RUNNING") ||
                StringUtils.equalsIgnoreCase(lotstatus, "DISPATCH") ||
                StringUtils.equalsIgnoreCase(lotstatus, "PROCESSED")) {
            String eqpt = MapUtils.getString(lotInfo, "equipmentId");
            if (StringUtils.isEmpty(eqpt) || StringUtils.equalsIgnoreCase(lotstatus, "WAITING")) {
                Lot lotQuery = lotQueryService.getLot(MapUtils.getLongValue(lotInfo, "lotRrn"));

                Collection entitys = this.getEntitiesWithLotSpecial(lotQuery);
                for (Iterator it = entitys.iterator(); it.hasNext(); ) {
                    Relation en = (Relation) it.next();
                    Collection entityStatus = emsService.getEntityStatuss(en.getInstanceRrn());
                    Iterator itt = entityStatus.iterator();
                    String entity_Status = "";
                    while (itt.hasNext()) {
                        EntityStatus instance = (EntityStatus) itt.next();
                        entity_Status = instance.getCurrentStatus();
                    }

                    if (StringUtils.equalsIgnoreCase(entity_Status, EventName.RUN) ||
                            StringUtils.equalsIgnoreCase(entity_Status, EventName.SRUN) ||
                            StringUtils.equalsIgnoreCase(entity_Status, EventName.ERUN) ||
                            StringUtils.equalsIgnoreCase(entity_Status, EventName.REWORK) ||
                            StringUtils.equalsIgnoreCase(entity_Status, EventName.IDLE) ||
                            StringUtils.equalsIgnoreCase(entity_Status, EventName.ENG)) {
                        jsonObject = new HashMap();
                        jsonObject.put("equipRrn", String.valueOf(en.getInstanceRrn()));
                        jsonObject.put("equipId", en.getInstanceId());
                        jsonObject.put("equipDesc", en.getInstanceDesc());
                        jsonObject.put("pollutionLevel", StringUtils.isEmpty(en.getAttributedata1()) ? "" : en
                                .getAttributedata1());// 污染等级
                        jsonObject.put("entityGroupRrn", en.getAttributedata2());// 设备分组

                        // start: 检查批次在当前设备是否有constrain
                        String constrainFlag = "NO";

                        if (en.getInstanceRrn() > 0) {
                            Equipment equipment = new Equipment();
                            equipment.setInstanceRrn(en.getInstanceRrn());
                            long tLotRrn = MapUtils.getLongValue(map, "lotRrn");
                            Lot sLot = new Lot();
                            sLot.setLotRrn(tLotRrn);
                            sLot = lotQueryService.getLot(tLotRrn);

                            ErrorMsg errorMsg = constrainService.checkLotConstrain(equipment, sLot);

                            if (errorMsg.getError()) {
                                constrainFlag = "YES";
                            }
                        }
                        jsonObject.put("constrainFlag", constrainFlag);
                        // end: 检查批次在当前设备是否有constrain

                        jsonArray.add(jsonObject);
                    }
                }
            }
        }
        Map result = new HashMap();
        result.put("results", jsonArray.size());
        result.put("rows", jsonArray);
        return result;
    } // end of perform()

    private Map isValidLot(Long facility, String id) throws Exception {
        return lotQueryService.getLotInfoasMap(facility.longValue(), id);

    }

}