EqpMonitorUnitInfoAction.java

package com.mycim.webapp.actions.dmmunitinfo;

import com.fa.sesa.i18n.I18nUtils;
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.time.DateUtils;
import com.mycim.valueobject.ems.Carrier;
import com.mycim.valueobject.wip.Lot;
import com.mycim.valueobject.wip.Unit;
import com.mycim.webapp.Constants;
import com.mycim.webapp.TemplateLocation;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.NpwSetupAction;
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.*;

/**
 * @author sandy
 * @version 6.0.0
 * @date 2019/9/21
 **/
public class EqpMonitorUnitInfoAction extends NpwSetupAction {

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

        String lotId = WebUtils.getParameter("lotId", request);
        Lot lot = lotQueryService.getLot(lotId, LocalContext.getFacilityRrn());
        List<Unit> unitList = buildLotUnit(lot);
        request.setAttribute("unitList", unitList);
        request.setAttribute("lot", lot);
        return mapping.findForward(Constants.INIT_KEY);

    }

    public ActionForward export(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        Long lotRrn = WebUtils.getParameterLong("lotRrn", request);
        Lot lot = lotQueryService.getLot(lotRrn);
        List unitList = buildLotUnit(lot);
        List<Map> unitListMap = new ArrayList<Map>();
        for (int i = 0; i < unitList.size(); i++) {
            Unit unit = (Unit) unitList.get(i);
            Map map = BeanUtils.copyBeanToMap(unit);
            map.put("seq", i + 1);
            unitListMap.add(map);
        }
        Map<String, Object> titles = WebUtils.getExportTitles(request);
        if (StringUtils.equalsIgnoreCase("CN", I18nUtils.getCurrentLanguage().toString())) {
            titles.put("seq", "序号");
            titles.put("lotUnitInfo", "批次晶圆片信息");
        } else {
            titles.put("seq", "seq");
            titles.put("lotUnitInfo", "Dmm Unit Info");
        }
        // 导出
        String exportDateTime = DateUtils.getNowTime(DateUtils.DATE_FORMAT4NOSPLICING);
        String fileName = "DmmUnitInfo_" + exportDateTime + ".xlsx";
        WebUtils.exportExcel(fileName, titles, unitListMap, TemplateLocation.LOT_UNIT_INFO, response);
        return WebUtils.NULLActionForward;
    }

    private List<Unit> buildLotUnit(Lot lot) throws Exception {

        List<Unit> unitList = wipQueryService.getUnitList(lot.getLotRrn());

        Collections.sort(unitList, new Comparator<Unit>() {
            @Override
            public int compare(Unit o1, Unit o2) {
                return o1.getPositionInCarrier() - o2.getPositionInCarrier();
            }

        });

        Carrier carrier = carrierService.getCarrier(lot.getCarrierRrn());

        int tmp = 0;
        List<Unit> tmpList = new ArrayList<Unit>();
        for (Iterator it = unitList.iterator(); it.hasNext(); ) {
            tmp++;
            Unit unit = (Unit) it.next();
            Integer position = unit.getPositionInCarrier();
            int diff = position - tmp;
            diff = diff < 0 ? tmp - position : diff;
            for (int m = 0; m < diff; m++) {
                tmp++;
                tmpList.add(new Unit());
            }

            tmpList.add(unit);
        }
        int maxPosition = 25;
        if (carrier != null && carrier.getSlotCount() != null && carrier.getSlotCount() > 0) {
            maxPosition = carrier.getSlotCount().intValue();
        }
        int diff = maxPosition - tmpList.size();
        for (int m = 0; m < diff; m++) {
            tmpList.add(new Unit());
        }

        return tmpList;
    }

}