LotConsumesMaterialHistoryAction.java

package com.mycim.webapp.actions.warehouse;

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.collections.MapUtils;
import com.mycim.valueobject.inv.MaterialDO;
import com.mycim.valueobject.prp.BOR;
import com.mycim.valueobject.prp.Operation;
import com.mycim.valueobject.wip.LotConsumesMaterialHistory;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.AsmSetupAction;
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.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 批次消耗物料历史
 */
public class LotConsumesMaterialHistoryAction extends AsmSetupAction {

    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) {
        return mapping.findForward(Constants.HISTORY_KEY);
    }


    public Map<String, Object> getHistory(ActionMapping mapping, Map<String, String> theform,
                                          HttpServletRequest request,
                                          HttpServletResponse response) throws ParseException {
        Map<String, Object> conditions = buildCondition(request, theform);

        int pageNo = MapUtils.getIntValue(theform, "currentPage", 1);
        int pageSize = 10;
        Page page = new Page();
        page.setPageSize(pageSize);
        page.setPageNo(pageNo);

        page = warehouseService.getLotConsumesMaterialHistoryForPage(page, conditions);

        buildLotConsumesMaterialHistoryShow(page);

        Map<String, Object> result = new HashMap<>();

        result.put("pageSize", page.getNextPage());
        result.put("pageNum", page.getPageNo());
        result.put("maxPage", page.getTotalPages());
        result.put("startRowNum", page.getStartRow());

        result.put("isFirstPage", page.isFirstPage());
        result.put("hasPreviousPage", page.isHasPrePage());
        result.put("isLastPage", page.isLastPage());
        result.put("hasNextPage", page.isHasNextPage());

        result.put("list", page.getResults());

        return result;
    }


    private Map<String, Object> buildCondition(HttpServletRequest request,
                                               Map<String, String> theform) throws ParseException {
        Map<String, Object> conditions = new HashMap<>();


        Long borRrn = null;
        if (StringUtils.isNotEmpty(theform.get("borId"))) {
            BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.get("borId"));
            Assert.isFalse(bor.getInstanceRrn() <= 0, Errors.create().content("BOM id not exist!").build());
            borRrn = bor.getInstanceRrn();
        }

        Integer borVersion = StringUtils.isNotEmpty(MapUtils.getString(theform, "borVersion")) ? MapUtils
                .getInteger(theform, "borVersion") : null;
        String borLossType = StringUtils.trimToUpperCase(MapUtils.getString(theform, "borLossType"));

        Long warehouseRrn = null;
        if (StringUtils.isNotEmpty(theform.get("warehouseId"))) {
            Operation warehouse = warehouseService
                    .getWarehouse(LocalContext.getFacilityRrn(), theform.get("warehouseId"));
            Assert.isFalse(warehouse.getInstanceRrn() <= 0, Errors.create().content("Warehouse id not exist!").build());
            warehouseRrn = warehouse.getInstanceRrn();
        }

        Long materialRrn = null;
        if (StringUtils.isNotEmpty(theform.get("materialId"))) {
            MaterialDO material = asmService.getMaterial(LocalContext.getFacilityRrn(), theform.get("materialId"));
            Assert.isFalse(material == null || material.getInstanceRrn() <= 0,
                           Errors.create().content("Material id not exist!").build());

            materialRrn = material.getInstanceRrn();
        }
        String lotId = StringUtils.isNotEmpty(MapUtils.getString(theform, "lotId")) ? StringUtils
                .trimToUpperCase(MapUtils.getString(theform, "lotId")) : null;
        String lotStepSequence = StringUtils.isNotEmpty(MapUtils.getString(theform, "lotStepSequence")) ? MapUtils
                .getString(theform, "lotStepSequence") : null;

        String effectiveDateFrom = MapUtils.getString(theform, "effectiveDateFrom");
        String effectiveDateTo = MapUtils.getString(theform, "effectiveDateTo");

        DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        Date startDateTime = StringUtils.isEmpty(effectiveDateFrom) ? null : df.parse(effectiveDateFrom);
        Date endDateTime = StringUtils.isEmpty(effectiveDateTo) ? null : df.parse(effectiveDateTo);

        conditions.put("borRrn", borRrn);
        conditions.put("borVersion", borVersion);
        conditions.put("borLossType", borLossType);
        conditions.put("warehouseRrn", warehouseRrn);
        conditions.put("materialRrn", materialRrn);
        conditions.put("lotId", lotId);
        conditions.put("lotStepSequence", lotStepSequence);
        conditions.put("startDateTime", startDateTime);
        conditions.put("endDateTime", endDateTime);

        return conditions;
    }

    private void buildLotConsumesMaterialHistoryShow(Page page) {
        DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
        List<Map<String, String>> results = new ArrayList<>();

        Map<String, String> showMsg;

        for (Iterator<?> iterator = page.getResults().iterator(); iterator.hasNext(); ) {
            LotConsumesMaterialHistory lotConsumesMaterialHistory = (LotConsumesMaterialHistory) iterator.next();

            showMsg = new HashMap<>();
            showMsg.put("borId", getInstanceId(lotConsumesMaterialHistory.getBorRrn()));
            showMsg.put("borVersion", StringUtils.toString(lotConsumesMaterialHistory.getBorVersion()));
            showMsg.put("borLossType", lotConsumesMaterialHistory.getBorLossType());
            showMsg.put("lotNumber", lotConsumesMaterialHistory.getLotNumber());
            showMsg.put("materialId", getInstanceId(lotConsumesMaterialHistory.getItemRrn()));
            showMsg.put("materialType", lotConsumesMaterialHistory.getMaterialType());
            showMsg.put("warehouseId", getInstanceId(lotConsumesMaterialHistory.getWarehouseRrn()));
            showMsg.put("lotIds", lotConsumesMaterialHistory.getLotIds());
            showMsg.put("consumptionQty", StringUtils.toString(lotConsumesMaterialHistory.getConsumptionQty()));
            showMsg.put("consumptionDate", df.format(lotConsumesMaterialHistory.getConsumptionDate()));
            showMsg.put("consumptionUserId", lotConsumesMaterialHistory.getConsumptionUserId());

            results.add(showMsg);
        }

        page.setResults(results);
    }

}