Process0.java 3.9 KB
Newer Older
苗卫卫 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
package com.boco.nbd.wios.flow.process;

import cn.hutool.core.collection.CollUtil;
import com.boco.nbd.framework.workflow.entity.SubmitFlowRequest;
import com.boco.nbd.framework.workflow.entity.SubmitTypeEnum;
import com.boco.nbd.framework.workflow.entity.exception.FlowException;
import com.boco.nbd.framework.workflow.flow.AbstractFlow;
import com.boco.nbd.wios.flow.entity.bo.ConnectUserConfigBO;
import com.boco.nbd.wios.flow.entity.bo.LocalSubmitFlowBO;
import com.boco.nbd.wios.flow.enums.FlowNodeEnum;
import com.boco.nbd.wios.flow.service.INodeService;
import com.boco.nbd.wios.manage.entity.bo.OemContractVo;
import com.boco.nbd.wios.manage.entity.cams.enums.ContractStatus;
import com.boco.nbd.wios.manage.mapper.def.OemContractDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 * @author:cao hai
 * @date:2022/6/29 17:35
 * @version:V1.0
 * @description:ProcessStart
 * @modify:
 */
@Service("Process0")
public class Process0 extends AbstractFlow {

    @Autowired
    protected INodeService nodeService;

    @Autowired
    private OemContractDao oemContractDao;

    /**
     * 移转订单标识
     */
    private static final Integer[] ORDER_TYPE = {1, 2};


    /**
     * 预处理(业务数据调整)
     *
     * @param request
     */
    @Override
    protected void preProcess(SubmitFlowRequest request) {
        LocalSubmitFlowBO bo = (LocalSubmitFlowBO) request;
        if (SubmitTypeEnum.StartFlow.equals(bo.getSubmitType())) {
            if (bo.getBusiness().getOemId() == null) {
                throw new FlowException("工单:" + bo.getBusiness().getId() + ",主机厂信息缺失.");
            }
            //验证合同
            List<OemContractVo> contractList = oemContractDao.selectByStatusAndOemId(bo.getBusiness().getOemId(), ContractStatus.EFFECTIVE.getType());
            if (CollUtil.isEmpty(contractList)) {
                throw new FlowException("工单:" + bo.getBusiness().getId() + "没有有效合同");
            }
            bo.getBusiness().setContractId(contractList.get(0).getId());
            Integer type = bo.getBusiness().getType();
            if (type == null || !Arrays.asList(ORDER_TYPE).contains(type)) {
                bo.getBusiness().setType(1);
            }
            bo.setNextNodeEnum(FlowNodeEnum.NODE_101);
            try {
                ConnectUserConfigBO configBO = nodeService.getConnectUser(bo.getBusiness().getId(), bo.getBusiness().getOemId());
                bo.getUserNames().add(configBO.getUserId());
                //modify 2022-09-14 勘测、安装数据与新建时一致
                bo.getBusiness().setSurveyPackType(bo.getBusiness().getPackType());
                bo.getBusiness().setInstallPackType(bo.getBusiness().getPackType());
                bo.getBusiness().setSurveyWallboxModel(bo.getBusiness().getWallboxModel());
                bo.getBusiness().setInstallWallboxModel(bo.getBusiness().getWallboxModel());
                bo.getBusiness().setSurveyItemModel(bo.getBusiness().getItemModel());
                bo.getBusiness().setInstallItemModel(bo.getBusiness().getItemModel());
            } catch (FlowException ex) {
                throw new FlowException(bo.getBusiness().getOemName() + ex.getMessage());
            }
            bo.setCommentMsg("流程启动");
            bo.addTaskParam();
        }
    }

    /**
     * 验证参数
     * 验证注释掉 前端表单部分已验证
     * LocalSubmitFlowBO bo = (LocalSubmitFlowBO) request;
     * ValidateUtil.validate(bo.getBusiness(), OrderPO.VerifyStart.class);
     *
     * @param request
     */
    @Override
    protected void verifyParam(SubmitFlowRequest request) {
    }

    /**
     * 后续处理
     *
     * @param request
     */
    @Override
    protected void postProcess(SubmitFlowRequest request) {
    }
}