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;
}
}