CarrierAction.java

package com.mycim.webapp.actions.carrierhistory;

import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.jdbc.Page;
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.webapp.Constants;
import com.mycim.webapp.TemplateLocation;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.CarrierSetupAction;
import com.mycim.webapp.forms.HoldReleaseObjectInfoForm;
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.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 晶舟状态修改以及历史信息查询相关
 *
 * @author pinyan.song
 * @version 6.0.0
 * @date 2019-9-2 10:52
 **/
public class CarrierAction extends CarrierSetupAction {

    private static final String THISPAGE_KEY = "thisPage";

    private static final Integer PAGESIZE = 20;


    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) {
        request.setAttribute("carrierHistory", new ArrayList<>());

        WebUtils.setDefaultPageInfo(request);
        request.setAttribute("dueDateS", "");
        request.setAttribute("dueDateE", "");
        return mapping.findForward(Constants.HISTORY_KEY);
    }

    public ActionForward query(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                               HttpServletResponse response) {

        HoldReleaseObjectInfoForm theform = (HoldReleaseObjectInfoForm) form;

        Map<String, Object> query = verifyParamsAndReturnQueryParams(theform, request);

        int current = WebUtils.getThisPage(request);
        int pageSize = WebUtils.getPageSize(request);

        Page page = new Page();
        page.setPageSize(pageSize);
        page.setPageNo(current);
        String processRrns = securityService.getProcessRrnWithPermission(LocalContext.getUserRrn());
        page = carrierService.queryCarrierHistory(page, query);
        List<Map> results = (List<Map>) page.getResults();
        String processRrn = null;
        for (int i = 0; i < results.size(); i++) {
            processRrn = (String) results.get(i).get("processRrn");
            if (!StringUtils.contains(processRrns, processRrn) && StringUtils.isNotEmpty(processRrn)) {
                results.remove(i);
            }
        }
        request.setAttribute("carrierHistory", results);
        request.setAttribute("dueDateS", query.get("dueDateS"));
        request.setAttribute("dueDateE", query.get("dueDateE"));

        WebUtils.setPageInfo(current, (int) page.getTotalPages(), pageSize, request);

        return mapping.findForward(Constants.HISTORY_KEY);
    }

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

        HoldReleaseObjectInfoForm theform = (HoldReleaseObjectInfoForm) form;

        Map<String, Object> titles = WebUtils.getExportTitles(request);
        Map<String, Object> query = verifyParamsAndReturnQueryParams(theform, request);

        int pageSize = WebUtils.getParameterInt("pageSize", request);
        int maxPage = WebUtils.getParameterInt("maxPage", request);
        if (pageSize <= 0) {
            pageSize = PAGESIZE;
        }

        Page page = new Page();
        page.setPageSize(pageSize * maxPage);
        page.setPageNo(1);
        page = carrierService.queryCarrierHistory(page, query);

        // 导出
        String exportDateTime = DateUtils.getNowTime(DateUtils.DATE_FORMAT4NOSPLICING);
        List<Map> data = (List<Map>) page.getResults();
        titles.put("title", theform.getInstanceId().toUpperCase() + " History Info");
        String fileName = "PcdHistoryInfo_" + exportDateTime + ".xlsx";
        WebUtils.exportExcel(fileName, titles, data, TemplateLocation.CARRIER_HISTORY, response);
        return WebUtils.NULLActionForward;
    }

    private Map<String, Object> verifyParamsAndReturnQueryParams(HoldReleaseObjectInfoForm theform,
                                                                 HttpServletRequest request) {
        String id = StringUtils.trim(theform.getInstanceId());
        String dueDateStart = StringUtils.trimToUpperCase(WebUtils.getParameter("dueDateS", request));
        String dueDateEnd = StringUtils.trimToUpperCase(WebUtils.getParameter("dueDateE", request));
        return queryParams(id, dueDateStart, dueDateEnd);
    }

    private Map<String, Object> queryParams(String id, String dueDateStart, String dueDateEnd) {
        Map<String, Object> query = new HashMap<String, Object>(5);
        Assert.isFalse(StringUtils.isEmpty(id),
                       Errors.create().key(MessageIdList.PCD_PCD_ID_CANNOT_EMPTY).content("PCD号不能为空!").build());

        long instanceRrn = getInstanceRrn(id, LocalContext.getFacilityRrn(), ObjectList.ENTITY_KEY);
        Assert.isFalse(instanceRrn <= 0,
                       Errors.create().key(MessageIdList.PCD_PCD_MISSING).content("PCD 不存在!").build());

        NamedObject obj = baseService.getNamedObject(new NamedObject(instanceRrn));
        Assert.isTrue(StringUtils.equals(obj.getObjectType(), ObjectList.CARRIER_KEY) ||
                              StringUtils.equals(obj.getObjectType(), ObjectList.POD_KEY) ||
                              StringUtils.equals(obj.getObjectType(), ObjectList.DOOR_KEY),
                      Errors.create().key(MessageIdList.PCD_INVALID_ID).content("Invalid PCD ID!").build());

        Assert.isTrue(StringUtils.isEmpty(dueDateStart) || DateUtils.isTimeYearMonthDay(dueDateStart),
                      Errors.create().key(MessageIdList.DATE_START_DATE_ILLEGAL).content("Start date illegal!")
                            .build());

        Assert.isTrue(StringUtils.isEmpty(dueDateEnd) || DateUtils.isTimeYearMonthDay(dueDateEnd),
                      Errors.create().key(MessageIdList.DATE_END_DATE_ILLEGAL).content("End date illegal!").build());

        Assert.isFalse(StringUtils.isNotEmpty(dueDateStart) && StringUtils.isNotEmpty(dueDateEnd) &&
                               DateUtils.stringToTimestamp(dueDateStart).after(DateUtils.stringToTimestamp(dueDateEnd)),
                       Errors.create().key(MessageIdList.DATE_START_LATER_THAN_END)
                             .content("Start date later than end date!").build());

        query.put("pcdId", id);
        query.put("pcdRrn", instanceRrn);
        query.put("pcdType", obj.getObjectType());
        query.put("dueDateS", dueDateStart);
        query.put("dueDateE", dueDateEnd);

        return query;
    }

}