ChecklistDetailSaveAction.java

package com.mycim.webapp.actions.checklist;

import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.ems.Checklist;
import com.mycim.valueobject.ems.ChecklistItem;
import com.mycim.webapp.Constants;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.EmsSetupAction;
import com.mycim.webapp.forms.ChecklistInfoForm;
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.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * CheckList Action
 *
 * @author pinyan.song
 * @version 6.0.0
 * @date 2019-11-7 09:43
 **/
public class ChecklistDetailSaveAction extends EmsSetupAction {

    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
        ChecklistInfoForm theform = (ChecklistInfoForm) form;
        Checklist checklist = getCheckList(theform);

        if (StringUtils.isNotEmpty(request.getParameter("onchange"))) {
            return mapping.getInputForward();
        }

        PropertyUtils.copyProperties(theform, checklist);

        if (request.getParameter(Constants.ITEM_KEY) != null) {
            int checklistSequence = WebUtils.getParameterInt(Constants.ITEM_KEY, request);
            for (Object o : checklist.getChecklistItems()) {
                ChecklistItem checklistItem = (ChecklistItem) o;
                if (checklistItem.getChecklistSequence() == checklistSequence) {
                    PropertyUtils.copyProperties(theform, checklistItem);
                }
            }
            theform.setTransId(Constants.MODIFY_KEY);
        } else {
            if(request.getParameter("transId")!=null) {
                theform.setTransId(request.getParameter("transId"));
            }else {
                theform.setTransId(Constants.CREATE_KEY);
            }
        }
        return mapping.getInputForward();
    }

    public ActionForward create(ActionMapping mapping, ChecklistInfoForm theform, HttpServletRequest request,
                                HttpServletResponse response) throws Exception {

        Checklist checklist = verify(theform);
        ChecklistItem checklistItem = getChecklistItem(theform, checklist);
        validateThis(checklistItem);
        checklistItem.setChecklistSequence(checklist.getChecklistItems().size() + 1);
        checklistItem.setTransId(Constants.CREATE_KEY);
        emsService.insertChecklistItem(checklistItem);
        WebUtils.setSuccessMsg(request);
        return mapping.findForward(Constants.CANCEL_KEY);
    }

    public ActionForward delete(ActionMapping mapping, ChecklistInfoForm theform, HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        Checklist checklist = getCheckList(theform);
        ChecklistItem checklistItem = getChecklistItem(theform, checklist);
        checklistItem.setTransId(Constants.DELETE_KEY);
        emsService.deleteChecklistItem(checklistItem);
        WebUtils.setSuccessMsg(request);
        return mapping.findForward(Constants.CANCEL_KEY);
    }

    public ActionForward modify(ActionMapping mapping, ChecklistInfoForm theform, HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        Checklist checklist = verify(theform);
        ChecklistItem checklistItem = getChecklistItem(theform, checklist);
        checklistItem.setTransId(Constants.MODIFY_KEY);
        emsService.updateChecklistItem(checklistItem);
        WebUtils.setSuccessMsg(request);
        return mapping.findForward(Constants.CANCEL_KEY);
    }

    private void validateThis(ChecklistItem checklistItem) throws Exception {
        if (StringUtils.isNotEmpty(checklistItem.getParameterSetId())) {
            long parameterSetRrn = getInstanceRrn(checklistItem.getParameterSetId(),
                                                  getNamedSpace(ObjectList.PARAMETERSET_KEY,
                                                                LocalContext.getFacilityRrn()),
                                                  ObjectList.PARAMETERSET_KEY);

            Assert.isFalse(parameterSetRrn <= 0,
                           Errors.create().key(MessageIdList.SYSTEM_INSTANCE_NOT_FOUND).content("{} 没有找到对象!")
                                 .args("Parameter set").build());
            checklistItem.setParameterSetRrn(parameterSetRrn);
        }
    }

    private void toUpCase(ChecklistInfoForm theform) {
        if (theform.getParameterSetId() != null) {
            theform.setParameterSetId(theform.getParameterSetId().trim().toUpperCase());
        }
    }


    private Checklist getCheckList(ChecklistInfoForm theform) {
        Checklist checklist = new Checklist(theform.getInstanceId().toUpperCase(),
                                            getNamedSpace(ObjectList.CHECKLIST_KEY, LocalContext.getFacilityRrn()),
                                            ObjectList.CHECKLIST_KEY);
        checklist = (Checklist) getInstance(checklist);
        checklist.setChecklistItems(emsService.getChecklistItems(checklist.getInstanceRrn()));
        return checklist;
    }

    private Checklist verify(ChecklistInfoForm theform) {
        Checklist checklist = getCheckList(theform);

        if ((theform.getUpperLimit() != null) && (theform.getLowerLimit() != null)) {
            Assert.isFalse(theform.getUpperLimit() < theform.getLowerLimit(),
                           Errors.create().key(MessageIdList.ENTITYPM_LOWER_NOT_GREATER_UPPER).content("下限值不能大于上限值!")
                                 .build());
        }
        Assert.isFalse(StringUtils.isEmpty(theform.getDataType()),
                          Errors.create().key(MessageIdList.ENTITYPM_CHECKLIST_ITEM_TYPE_CANNOT_EMPTY).content("Checklist Item type不能为空!")
                                .build());

        toUpCase(theform);
        return checklist;
    }

    private ChecklistItem getChecklistItem(ChecklistInfoForm theform, Checklist checklist) {
        ChecklistItem checklistItem = new ChecklistItem();
        checklistItem.setChecklistItemId(theform.getChecklistItemId());
        checklistItem.setChecklistItemDesc(theform.getChecklistItemDesc());
        checklistItem.setDataType(theform.getDataType());
        checklistItem.setUnit(theform.getUnit());
        checklistItem.setBool(theform.getBool());

        if (theform.getUpperLimit() != null) {
            checklistItem.setUpperLimit(new Double(doubleFormat(theform.getUpperLimit())));
        } else {
            checklistItem.setUpperLimit(theform.getUpperLimit());
        }
        if (theform.getLowerLimit() != null) {
            checklistItem.setLowerLimit(new Double(doubleFormat(theform.getLowerLimit())));
        } else {
            checklistItem.setLowerLimit(theform.getLowerLimit());
        }

        checklistItem.setBorRrn(theform.getBorRrn());
        checklistItem.setParameterSetId(theform.getParameterSetId());

        checklistItem.setChecklistVersion(0);
        checklistItem.setChecklistSequence(theform.getChecklistSequence());
        checklistItem.setChecklistRrn(checklist.getInstanceRrn());

        // populate the new information thru the new instance id
        checklistItem.setTransPerformedby(LocalContext.getUserId());

        return checklistItem;
    }

    private String doubleFormat(Double d) {
        DecimalFormat df = new DecimalFormat("0.###");
        return df.format(d);
    }

}