FlowNodeEnum.java 7.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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
package com.boco.nbd.wios.flow.enums;

import cn.hutool.core.convert.Convert;
import com.boco.nbd.cams.core.constant.CamsConstant;
import com.boco.nbd.framework.workflow.entity.SubmitTypeEnum;
import com.boco.nbd.wios.manage.contants.WiosConstant;
import com.boco.nbd.wios.manage.entity.cams.enums.OrderStatus;

/**
 * @author:cao hai
 * @date:2022/6/29 16:59
 * @version:V1.0
 * @description:流程节点枚举
 * @modify:
 */
public enum FlowNodeEnum {

    /**
     * 集中分析流程节点枚举
     * NODE_120(120, "订单回访")=》取消节点
     */
    NODE_BACK(-1, "驳回"), NODE_START(0, "开始"),

    NODE_101(101, "首联"), NODE_102(102, "待派单"),

    NODE_103(103, "接单"), NODE_104(104, "勘测预约"),

    NODE_105(105, "待勘测"), NODE_106(106, "待勘测资料上传"),

    NODE_107(107, "勘测资料审核"), NODE_108(108, "预约安装"),

    NODE_109(109, "安装预约变更"), NODE_110(110, "待安装"),

    NODE_111(111, "待安装资料上传"), NODE_112(112, "安装资料审核"),

    NODE_113(113, "上传开票系统"), NODE_114(114, "更新结算状态"),

    NODE_115(115, "电力报装"),
    NODE_END(199, "归档");

    FlowNodeEnum(Integer key, String value) {
        this.value = value;
        this.key = key;
    }

    public String getValue() {
        return value;
    }


    public Integer getKey() {
        return key;
    }

    /**
     * 枚举值
     */
    private String value;

    /**
     * 枚举
     */
    private Integer key;

    /**
     * 判断是否包含key
     *
     * @param key
     * @return
     */
    public static Boolean contains(Integer key) {
        FlowNodeEnum[] enums = FlowNodeEnum.values();
        for (int i = 0; i < enums.length; i++) {
            if (enums[i].getKey().equals(key)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 获取枚举
     *
     * @param key
     * @return
     */
    public static FlowNodeEnum getEnum(Integer key) {
        FlowNodeEnum[] enums = FlowNodeEnum.values();
        for (FlowNodeEnum item : enums) {
            if (item.getKey().equals(key)) {
                return item;
            }
        }

        return null;
    }

    /**
     * 获取订单安装项目表 type
     *
     * @param currentNode
     * @return
     */
    public static Integer getInstallItemType(FlowNodeEnum currentNode) {
        switch (currentNode) {
            case NODE_105:
            case NODE_106:
                return WiosConstant.SURVEY_TYPE;
            case NODE_110:
            case NODE_111:
                return WiosConstant.INSTALL_TYPE;
            default:
                break;
        }
        return null;
    }

    /**
     * 获取节点名称
     *
     * @param flowNodeEnum
     * @return
     */
    public static String getFlowNodeStr(FlowNodeEnum flowNodeEnum) {
        if (flowNodeEnum == null) {
            return "";
        }

        return flowNodeEnum.getKey() + CamsConstant.DASH_FLAG + flowNodeEnum.getValue();
    }

    /**
     * 保留一期逻辑
     * 104=>104 存在两种状态,逻辑上应该是存在问题的,目前104=104的记录不返回界面
     *
     * @param currentNode
     * @param nextNode
     * @return
     */
    public static OrderStatus getOrderStatus(String currentNode, String nextNode) {
        FlowNodeEnum currentNodeEnum = getEnum(Convert.toInt(currentNode));
        FlowNodeEnum nextNodeEnum = getEnum(Convert.toInt(nextNode));
        return getOrderStatus(null, currentNodeEnum, nextNodeEnum);
    }

    /**
     * 新建:0
     * 首联:101=》102[DISPATCHING(待派单)]
     * 待派单:102=>
     * 接单:103=>104[SURVEY_RESERVING(勘测待预约)]
     * 勘测预约:104=>104[SURVEY_RESERVE_EXCEPTION(勘测预约异常)、SURVEY_DISPATCHED],105[SURVEY_RESERVED(勘测已预约)]
     * 勘察完成:105=>106[SURVEY_FINISH(勘测完成)]
     * 上传资料:106=>107[SURVEY_EXAMINING(勘测完成待审核)]
     * 勘察资料审核:107=>108[SURVEY_EXAMINE_SUCCESS(勘测审核通过)],106[SURVEY_RECTIFYING(勘测待整改)]
     * 预约安装:108=>109[INSTALL_RESERVE_EXCEPTION(安装预约异常)],110[INSTALL_RESERVED(安装已预约)]
     * 安装预约变更:109=>108[INSTALL_RESERVE_EXCEPTION(安装预约异常)],110[INSTALL_RESERVED(安装已预约)]
     * 安装完成:110=>111[INSTALL_FINISH(安装完成)]
     * 上传资料:111=>112[INSTALL_EXAMINING(安装完成待审核)]
     * 资料审核:112=>111[INSTALL_RECTIFYING(安装待整改)],113[INSTALL_EXAMINE_SUCCESS(安装审核通过)]
     * 上传开票系统:113
     * 更新结算状态:114
     *
     * @param submitTypeEnum
     * @param currentNode
     * @param nextNode
     * @return
     */
    public static OrderStatus getOrderStatus(SubmitTypeEnum submitTypeEnum, FlowNodeEnum currentNode, FlowNodeEnum nextNode) {
        if (currentNode == null || nextNode == null) {
            return null;
        }
        if (FlowNodeEnum.NODE_END.equals(nextNode)) {
            return OrderStatus.CLOSED;
        }
        if (SubmitTypeEnum.Transfer.equals(submitTypeEnum) && currentNode.equals(nextNode)) {
            if (FlowNodeEnum.NODE_104.equals(currentNode) || FlowNodeEnum.NODE_105.equals(currentNode) || FlowNodeEnum.NODE_106.equals(currentNode)) {
                return OrderStatus.SURVEY_DISPATCHED;
            }
        }
        switch (currentNode) {
            case NODE_101:
                return FlowNodeEnum.NODE_102.equals(nextNode) ? OrderStatus.DISPATCHING : null;
            case NODE_103:
                return FlowNodeEnum.NODE_104.equals(nextNode) ? OrderStatus.SURVEY_RESERVING : null;
            case NODE_104:
                if (FlowNodeEnum.NODE_104.equals(nextNode)) {
                    return OrderStatus.SURVEY_RESERVE_EXCEPTION;
                } else if (FlowNodeEnum.NODE_105.equals(nextNode)) {
                    return OrderStatus.SURVEY_RESERVED;
                }
                break;
            case NODE_105:
                if (FlowNodeEnum.NODE_106.equals(nextNode)) {
                    return OrderStatus.SURVEY_FINISH;
                }
                break;
            case NODE_106:
                if (FlowNodeEnum.NODE_107.equals(nextNode)) {
                    return OrderStatus.SURVEY_EXAMINING;
                }
                break;
            case NODE_107:
                if (FlowNodeEnum.NODE_108.equals(nextNode)) {
                    return OrderStatus.SURVEY_EXAMINE_SUCCESS;
                } else if (FlowNodeEnum.NODE_106.equals(nextNode)) {
                    return OrderStatus.SURVEY_RECTIFYING;
                }
                break;
            case NODE_108:
                if (FlowNodeEnum.NODE_109.equals(nextNode)) {
                    return OrderStatus.INSTALL_RESERVE_EXCEPTION;
                } else if (FlowNodeEnum.NODE_110.equals(nextNode)) {
                    return OrderStatus.INSTALL_RESERVED;
                }
                break;
            case NODE_109:
                if (FlowNodeEnum.NODE_108.equals(nextNode)) {
                    return OrderStatus.INSTALL_RESERVE_EXCEPTION;
                } else if (FlowNodeEnum.NODE_110.equals(nextNode)) {
                    return OrderStatus.INSTALL_RESERVED;
                }
                break;
            case NODE_110:
                if (FlowNodeEnum.NODE_111.equals(nextNode)) {
                    return OrderStatus.INSTALL_FINISH;
                }
                break;
            case NODE_111:
                if (FlowNodeEnum.NODE_112.equals(nextNode)) {
                    return OrderStatus.INSTALL_EXAMINING;
                }
                break;
            case NODE_112:
                if (FlowNodeEnum.NODE_111.equals(nextNode)) {
                    return OrderStatus.INSTALL_RECTIFYING;
                } else if (FlowNodeEnum.NODE_113.equals(nextNode)) {
                    return OrderStatus.INSTALL_EXAMINE_SUCCESS;
                }
                break;
            default:
                break;
        }
        return null;
    }

}