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; } }