MaterialSaveAction.java

package com.mycim.webapp.actions.material;

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.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.inv.MaterialDO;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.AsmSetupAction;
import com.mycim.webapp.forms.MaterialInfoForm;
import org.apache.commons.beanutils.PropertyUtils;
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;

/**
 * 物料设置
 *
 * @author weike.li
 * @date 2019/8/22
 * @since 1.8
 **/
public class MaterialSaveAction extends AsmSetupAction {

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

        Long facilityRrn = LocalContext.getFacilityRrn();

        MaterialInfoForm theform = (MaterialInfoForm) form;

        String materialId = theform.getInstanceId().trim().toUpperCase();

        MaterialDO material = asmService.getMaterial(facilityRrn, materialId);

        if (material == null || material.getInstanceRrn() < 1) {
            material = new MaterialDO(materialId, this.getNamedSpace(ObjectList.ITEM_KEY, facilityRrn),
                                      ObjectList.ITEM_KEY);

            material.setExpirationLength(28);

            material.setTransId(Constants.CREATE_KEY);
        } else {
            material.setTransId(Constants.MODIFY_KEY);
        }

        PropertyUtils.copyProperties(theform, material);
        return mapping.findForward(Constants.MODIFY_KEY);
    }

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

        MaterialInfoForm theform = (MaterialInfoForm) form;
        theform.setInstanceId("");
        return mapping.findForward(Constants.SETUP_KEY);
    }

    public ActionForward modify(ActionMapping mapping, MaterialInfoForm theform) throws Exception {

        Long facilityRrn = LocalContext.getFacilityRrn();

        MaterialDO material = asmService.getMaterial(facilityRrn, theform.getInstanceId());

        validateMaterial(theform, material.getInstanceRrn());

        PropertyUtils.copyProperties(material, theform);
        material.setItemExtendNumber(
                StringUtils.isBlank(material.getItemExtendNumber()) ? null : material.getItemExtendNumber());
        material.setTransPerformedby(LocalContext.getUserId());
        material.setObjectType(ObjectList.ITEM_MATERIAL_KEY);
        asmService.updateMaterial(material);

        theform.setTransId(Constants.MODIFY_KEY);
        return mapping.findForward(Constants.MODIFY_KEY);
    }

    public ActionForward delete(ActionMapping mapping, MaterialInfoForm theform) {

        Long facilityRrn = LocalContext.getFacilityRrn();
        MaterialDO material = asmService.getMaterial(facilityRrn, theform.getInstanceId());

        Assert.isFalse(asmService.isMaterialInUsed(material.getInstanceRrn()),
                       Errors.create().key(MessageIdList.MATERIAL_HAS_BEEN_USED)
                             .content("The Material is " + "being used and " + "cannot be " + "deleted!").build());

        material.setTransPerformedby(LocalContext.getUserId());
        asmService.deleteMaterial(material);

        return mapping.findForward(Constants.SETUP_KEY);
    }

    public ActionForward create(ActionMapping mapping, MaterialInfoForm theform) throws Exception {

        Long facilityRrn = LocalContext.getFacilityRrn();
        validateMaterial(theform, 0L);

        MaterialDO material = new MaterialDO(theform.getInstanceId(),
                                             this.getNamedSpace(ObjectList.ITEM_KEY, facilityRrn), ObjectList.ITEM_KEY);

        PropertyUtils.copyProperties(material, theform);
        material.setItemExtendNumber(
                StringUtils.isBlank(material.getItemExtendNumber()) ? null : material.getItemExtendNumber());
        material.setTransPerformedby(LocalContext.getUserId());
        material.setObjectType(ObjectList.ITEM_MATERIAL_KEY);
        asmService.insertMaterial(material);

        theform.setTransId(Constants.MODIFY_KEY);

        return mapping.findForward(Constants.MODIFY_KEY);
    }

    void validateMaterial(MaterialInfoForm theform, Long materialRrn) {

        Assert.isFalse(StringUtils.isEmpty(theform.getObjectSubtype()),
                       Errors.create().key(MessageIdList.MATERIAL_TYPE_SELECT).content("请选择材料类型").build());

        validateAlarmId(theform);

        Assert.isFalse(asmService.hasMaterialExtNumber(materialRrn, theform.getItemExtendNumber()),
                       Errors.create().key(MessageIdList.MATERIAL_ID_ALREADY_EXISTS).content("物料附加号已经存在!请重新输入")
                             .build());
    }

    protected void validateAlarmId(MaterialInfoForm theform) {
        String alarmId = theform.getExpirationAlarmId().trim().toUpperCase();

        if (StringUtils.isNotEmpty(alarmId)) {
            boolean isalarm = alarmService.isAlarmID("SYSTEM", alarmId);
            Assert.isTrue(isalarm, Errors.create().key(MessageIdList.ALARM_MISSING).content("警报不存在").build());
            theform.setExpirationAlarmId(alarmId);
        }
    }

}