Explorar el Código

实现SOP模板下载的功能

lijie hace 4 años
padre
commit
dc5ebdc797
Se han modificado 89 ficheros con 3441 adiciones y 1385 borrados
  1. 70 2
      fm-sop/src/main/java/com/persagy/fm/sop/client/SaasClient.java
  2. 1 4
      fm-sop/src/main/java/com/persagy/fm/sop/client/SaasFallBackFactory.java
  3. 140 0
      fm-sop/src/main/java/com/persagy/fm/sop/constant/SopCommonConst.java
  4. 0 6
      fm-sop/src/main/java/com/persagy/fm/sop/constant/SopQueryConst.java
  5. 54 0
      fm-sop/src/main/java/com/persagy/fm/sop/controller/BatchHandleSopController.java
  6. 2 2
      fm-sop/src/main/java/com/persagy/fm/sop/controller/EquipCompanyController.java
  7. 3 2
      fm-sop/src/main/java/com/persagy/fm/sop/controller/GeneralDictController.java
  8. 2 2
      fm-sop/src/main/java/com/persagy/fm/sop/controller/GroupSopController.java
  9. 2 2
      fm-sop/src/main/java/com/persagy/fm/sop/controller/ObjectController.java
  10. 2 0
      fm-sop/src/main/java/com/persagy/fm/sop/controller/SopController.java
  11. 0 2
      fm-sop/src/main/java/com/persagy/fm/sop/enums/AttTypeEnum.java
  12. 41 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/ClassTypeEnum.java
  13. 2 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/ObjTypeEnum.java
  14. 0 45
      fm-sop/src/main/java/com/persagy/fm/sop/enums/ResultEnum.java
  15. 38 0
      fm-sop/src/main/java/com/persagy/fm/sop/enums/SheetNameEnum.java
  16. 0 41
      fm-sop/src/main/java/com/persagy/fm/sop/handler/DbJsonTypeHandler.java
  17. 1 1
      fm-sop/src/main/java/com/persagy/fm/sop/handler/JsonTypeHandlerFactory.java
  18. 4 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/CmptDataBean.java
  19. 35 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ObjBean.java
  20. 1 2
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/AutoReviseMsgVo.java
  21. 0 30
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/BaseVo.java
  22. 0 78
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/GeneralDictVo.java
  23. 1 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryAutoReviseMsgVo.java
  24. 1 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryCovertClassVo.java
  25. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryGeneralDictVo.java
  26. 1 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryObjectClassVo.java
  27. 1 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryPublishedListBaseVo.java
  28. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryPublishedSopVo.java
  29. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryReferencedSopVo.java
  30. 1 0
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryReviseMsgVo.java
  31. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QuerySopDetailVo.java
  32. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QuerySopVo.java
  33. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryVerifySopNameBaseVo.java
  34. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/ReferencedSopListVo.java
  35. 2 1
      fm-sop/src/main/java/com/persagy/fm/sop/model/vo/SaveSopVo.java
  36. 210 19
      fm-sop/src/main/java/com/persagy/fm/sop/service/BaseService.java
  37. 25 0
      fm-sop/src/main/java/com/persagy/fm/sop/service/IBatchHandleSopService.java
  38. 1 2
      fm-sop/src/main/java/com/persagy/fm/sop/service/IGeneralDictService.java
  39. 44 0
      fm-sop/src/main/java/com/persagy/fm/sop/service/ObjService.java
  40. 587 0
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/BatchHandleSopServiceImpl.java
  41. 4 4
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/DictionaryServiceImpl.java
  42. 6 10
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/GeneralDictServiceImpl.java
  43. 0 9
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/GroupSopServiceImpl.java
  44. 6 6
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/InstanceServiceImpl.java
  45. 144 141
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/ObjectServiceImpl.java
  46. 46 43
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/ProjectSopServiceImpl.java
  47. 4 1
      fm-sop/src/main/java/com/persagy/fm/sop/service/impl/WoFlowPlanServiceImpl.java
  48. 0 140
      fm-sop/src/main/java/com/persagy/fm/sop/utils/OldResponseResultUtil.java
  49. 1 1
      fm-sop/src/main/java/com/persagy/old/cache/ComponentRelationCache.java
  50. 1 1
      fm-sop/src/main/java/com/persagy/old/cache/GraphCache.java
  51. 1 1
      fm-sop/src/main/java/com/persagy/old/cache/InfoPointCache.java
  52. 4 4
      fm-sop/src/main/java/com/persagy/old/cache/ProjectCache.java
  53. 0 145
      fm-sop/src/main/java/com/persagy/old/common/CommonConst.java
  54. 6 4
      fm-sop/src/main/java/com/persagy/old/common/DataRequestProcessUtil.java
  55. 3 1
      fm-sop/src/main/java/com/persagy/old/common/DateUtil.java
  56. 5 2
      fm-sop/src/main/java/com/persagy/old/common/JSONUtil.java
  57. 2 0
      fm-sop/src/main/java/com/persagy/old/common/SopUtil.java
  58. 0 350
      fm-sop/src/main/java/com/persagy/old/common/StringUtil.java
  59. 0 270
      fm-sop/src/main/java/com/persagy/old/common/ToolsUtil.java
  60. 1 1
      fm-sop/src/main/java/com/persagy/old/dao/DBCommonMethods.java
  61. 3 3
      fm-sop/src/main/resources/bootstrap.yml
  62. BIN
      fm-sop/src/main/resources/template/SOP导入模板.xlsx
  63. 142 0
      fm-workorder/pom.xml
  64. 37 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/client/FeignConfig.java
  65. 23 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/client/SaasClient.java
  66. 26 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/client/SaasFallBackFactory.java
  67. 15 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/constant/FlowPlanConstant.java
  68. 35 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/constant/enums/WoApplyItemEnum.java
  69. 40 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/constant/enums/WoControlModelEnum.java
  70. 290 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/controller/WoFlowPlanController.java
  71. 16 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/dao/WoFlowPlanMapper.java
  72. 28 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/ApplyItemBean.java
  73. 52 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/DutyBean.java
  74. 22 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/NextRouteBean.java
  75. 32 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/NextRouteNobodyNotify.java
  76. 43 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/Position.java
  77. 29 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/PostAndDuty.java
  78. 161 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/PostAndDutyNative.java
  79. 159 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/TimeLimitBean.java
  80. 56 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/WoOrderTimeNotify.java
  81. 138 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/entity/WoFlowPlan.java
  82. 44 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/vo/QueryFlowPlanListVo.java
  83. 49 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/domain/vo/QueryVerifyFlowPlanVo.java
  84. 12 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/handler/JsonTypeHandlerFactory.java
  85. 25 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/service/IGeneralDictService.java
  86. 36 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/service/IWoFlowPlanService.java
  87. 122 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/service/impl/GeneralDictServiceImpl.java
  88. 281 0
      fm-workorder/src/main/java/com/persagy/fm/workorder/service/impl/WoFlowPlanServiceImpl.java
  89. 5 0
      fm-workorder/src/main/resources/mapper/WoFlowPlanMapper.xml

+ 70 - 2
fm-sop/src/main/java/com/persagy/fm/sop/client/SaasClient.java

@@ -1,8 +1,6 @@
 package com.persagy.fm.sop.client;
 
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.fm.common.response.FmResponseContent;
-import com.persagy.fm.sop.model.vo.GeneralDictVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -21,6 +19,76 @@ public interface SaasClient {
 	 */
 	@PostMapping(value = "/restGeneralDictService/queryGeneralDictByDictType")
 	String queryGeneralDictByDictType(@RequestBody JSONObject param);
+	/***
+	 * Description: 查询通用系统类数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restObjectService/querySystemClass")
+	String querySystemClass(@RequestBody JSONObject param);
+	/***
+	 * Description: 查询通用设备类数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restObjectService/queryEquipClass")
+	String queryEquipClass(@RequestBody JSONObject param);
+	/***
+	 * Description: 查询空间功能类型数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restObjectService/querySpaceClass")
+	String querySpaceClass(@RequestBody JSONObject param);
+	/***
+	 * Description: 查询建筑功能类型数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restObjectService/queryBuildFuncType")
+	String queryBuildFuncType(@RequestBody JSONObject param);
+	/***
+	 * Description: 查询楼层类型数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restObjectService/queryFloorType")
+	String queryFloorType(@RequestBody JSONObject param);
+	/***
+	 * Description: 查询楼层类型数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restShaftService/queryShaftType")
+	String queryShaftType(@RequestBody JSONObject param);
+	/***
+	 * Description: 查询所有信息点数据
+	 * @param param : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/9 21:51
+	 * Update By lijie 2021/4/9 21:51
+	 */
+	@PostMapping(value = "/restObjectService/queryAllInfoPointForObject")
+	String queryAllInfoPointForObject(@RequestBody JSONObject param);
 
 
 }

+ 1 - 4
fm-sop/src/main/java/com/persagy/fm/sop/client/SaasFallBackFactory.java

@@ -1,15 +1,12 @@
 package com.persagy.fm.sop.client;
 
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.fm.sop.model.vo.GeneralDictVo;
-import com.persagy.fm.sop.model.vo.QueryGeneralDictVo;
-import com.persagy.fm.sop.utils.OldResponseResult;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
 import com.persagy.fm.sop.utils.OldResponseResultUtil;
 import feign.hystrix.FallbackFactory;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
-import java.util.Arrays;
 import java.util.Collections;
 
 /**

+ 140 - 0
fm-sop/src/main/java/com/persagy/fm/sop/constant/SopCommonConst.java

@@ -9,6 +9,8 @@ public class SopCommonConst {
 
     /**通用sop的项目ID(默认)*/
     public final static String GROUP_SOP_ID = "group_sop_id";
+    /**下划线*/
+    public final static String UNDER_LINE = "_";
 
     /**发布状态-1-正常*/
     public final static String PUBLISH_STATUS_NORMAL = "1";
@@ -34,4 +36,142 @@ public class SopCommonConst {
     /**SOP版本描述*/
     public final static String VERSION_EXPLAIN_CREATE = "发布标准操作";
 
+    //通用sop的项目ID(默认)
+    public final static String group_sop_id = "group_sop_id";
+    //时间格式-显示
+    public final static String date_format_show = "yyyy-MM-dd HH:mm:ss";
+    //时间格式-存储
+    public final static String date_format_save = "yyyyMMddHHmmss";
+
+    //数据字典类型-专业、系统大类、设备大类
+    public final static String dict_type_object_domain = "domain_require";
+    //数据字典类型-信息点
+    public final static String dict_type_info_point = "info_point";
+
+    //字段名称-数据平台
+    public final static String info_name_datas = "infos";
+    //字段名称-本地名称-项目
+    public final static String info_name_local_name_project = "ProjLocalName";
+    //字段名称-本地名称-项目
+    public final static String info_name_local_id_project = "ProjLocalID";
+    //字段名称-本地名称-建筑
+    public final static String info_name_local_name_build = "BuildLocalName";
+    //字段名称-本地编码-建筑
+    public final static String info_name_local_id_build = "BuildLocalID";
+    //字段名称-本地名称-楼层
+    public final static String info_name_local_name_floor = "FloorLocalName";
+    //字段名称-本地编码-楼层
+    public final static String info_name_local_id_floor = "FloorLocalID";
+    //字段名称-本地编码-竖井
+    public final static String info_name_local_id_shaft = "ShaftLocalID";
+    //字段名称-本地编码-竖井
+    public final static String info_name_local_name_shaft = "ShaftLocalName";
+    //字段名称-本地名称-空间
+    public final static String info_name_local_name_space = "RoomLocalName";
+    //字段名称-本地编码-空间
+    public final static String info_name_local_id_space = "RoomLocalID";
+    //字段名称-本地名称-系统
+    public final static String info_name_local_name_system = "SysLocalName";
+    //字段名称-本地编码-系统
+    public final static String info_name_local_id_system = "SysLocalID";
+    //字段名称-本地名称-设备
+    public final static String info_name_local_name_equip = "EquipLocalName";
+    //字段名称-本地编码-设备
+    public final static String info_name_local_id_equip = "EquipLocalID";
+    //字段名称-信息点-code
+    public final static String info_name_info_point_code = "infoPointCode";
+    //字段名称-信息点-name
+    public final static String info_name_info_point_name = "infoPointName";
+    //字段名称-信息点-输入方式(原始组件)
+    public final static String info_name_info_point_baseCmpt = "inputMode";
+
+    //关系-关联code
+    public final static String relation_from_id = "from_id";
+    //关系-被关联code
+    public final static String relation_to_id = "to_id";
+
+    //图类型-设备所在空间
+    public final static String graph_type_equip_in_space = "EquipinSpace";
+    //图类型-设备服务空间
+    public final static String graph_type_equip_service_space = "EquipforSpace";
+    //图类型-系统包含设备
+    public final static String graph_type_system_contain_equip = "SystemEquip";
+    //竖井关联的建筑
+    public final static String graph_type_shaft_and_building = "ShaftandBuilding";
+
+    //关系类型-设备所在空间
+    public final static String relation_type_equip_in_space = "1";
+    //关系类型-设备服务空间
+    public final static String relation_type_equip_service_space = "1";
+    //关系类型-系统包含设备
+    public final static String relation_type_system_contain_equip = "1";
+
+    //数据类型-建筑
+    public final static String data_type_build = "build";
+    //数据类型-楼层
+    public final static String data_type_floor = "floor";
+    //数据类型-空间
+    public final static String data_type_space = "space";
+    //数据类型-系统
+    public final static String data_type_system = "system";
+    //数据类型-设备
+    public final static String data_type_equip = "equip";
+    //数据类型-系统大类
+    public final static String data_type_system_class = "system_class";
+    //数据类型-设备大类
+    public final static String data_type_equip_class = "equip_class";
+    //数据类型-空间大类
+    public final static String data_type_space_class = "space_class";
+    //数据类型-建筑功能类型
+    public final static String data_type_build_func_type = "build_func_type";
+    //数据类型-楼层类型
+    public final static String data_type_floor_type = "floor_type";
+    //数据类型-竖井功能类型
+    public final static String data_type_shaft_type = "shaft_type";
+    //数据类型-竖井
+    public final static String data_type_shaft = "shaft";
+    //标识-项目
+    public final static String tag_project = "Pj";
+    //标识-建筑
+    public final static String tag_build = "Bd";
+    //标识-楼层
+    public final static String tag_floor = "Fl";
+    //标识-空间
+    public final static String tag_space = "Sp";
+    //标识-设备
+    public final static String tag_equip = "Eq";
+    //标识-系统
+    public final static String tag_system = "Sy";
+    //标识-设备对象
+    public final static String tag_equip_object = "EqObj";
+    //标识-系统对象
+    public final static String tag_system_object = "SyObj";
+    //标识-设备字典-专业
+    public final static String tag_dict_class = "Clazz";
+    //标识-设备字典-系统
+    public final static String tag_dict_sytstem = "System";
+    //标识-设备字典-设备
+    public final static String tag_dict_equip = "Equip";
+    //系统主键
+    public final static String SYSTEM_ID = "systemId";
+
+
+    public final static int desc = -1;
+    public final static int asc = 1;
+
+    //SOP版本描述
+    public final static String version_explain_create = "发布标准操作";
+    //
+    public final static String remind_recovery_failed = "引用的sop已作废,请恢复后再操作";
+
+    public static class JsonToData{
+        //public static final String equipSpaceOptions = "saas_equipSpaceOptions";
+        //public static final String EquipUploadValidate = "saas_EquipUploadValidate";
+        //public static final String InfoPointInputMode = "saas_InfoPointInputMode";
+        //public static final String nounType = "saas_nounType";
+        //public static final String SpaceUploadValidate = "saas_SpaceUploadValidate";
+        public static final String Flooridentity = "saas_FloorIdentity";
+        public static final String SpaceFunction = "saas_H_spaceFunction";
+    }
+
 }

+ 0 - 6
fm-sop/src/main/java/com/persagy/fm/sop/constant/SopQueryConst.java

@@ -40,16 +40,10 @@ public class SopQueryConst {
     public static final String REL_SOP_ID="rel_sop_id";
     /**sop_his_id*/
     public static final String SOP_HIS_ID="sop_his_id";
-    /**user_id*/
-    public static final String USER_ID="user_id";
-    /**dict_type*/
-    public static final String DICT_TYPE="dict_type";
     /**--*/
     public static final String SPECIAL_ROD="--";
     /**""*/
     public static final String SPECIAL_QUO="\"\"";
-    /**systemId*/
-    public static final String SYSTEM_ID="systemId";
     /**version_explain*/
     public static final String VERSION_EXPLAIN="version_explain";
     /**version_count*/

+ 54 - 0
fm-sop/src/main/java/com/persagy/fm/sop/controller/BatchHandleSopController.java

@@ -0,0 +1,54 @@
+package com.persagy.fm.sop.controller;
+
+import com.persagy.common.exception.BusinessException;
+import com.persagy.fm.common.model.vo.BaseVo;
+import com.persagy.fm.sop.model.vo.SaveSopVo;
+import com.persagy.fm.sop.service.IBatchHandleSopService;
+import com.persagy.fm.sop.utils.OldResponseResult;
+import com.persagy.fm.sop.utils.OldResponseResultUtil;
+import com.persagy.fm.sop.validator.Insert;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+
+/***
+ * Description: 批量导入下载SOP的controler类
+ * @author : lijie
+ * @date :2021/4/28 10:45
+ * Update By lijie 2021/4/28 10:45
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/restInputSopService/")
+@Api("批量导入SOP业务")
+public class BatchHandleSopController {
+
+    private final IBatchHandleSopService batchHandleSopService;
+
+    /**
+     * Description: 集团sop-新增页-添加发布状态sop
+     * @param baseVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/3/31 20:46
+     * Update By lijie 2021/3/31 20:46
+     */
+    @ApiOperation("下载导入模板")
+    @PostMapping("downloadSopTemplate")
+    public void addPublishedSop(@RequestBody @Validated BaseVo baseVo, HttpServletResponse httpServletResponse) throws Exception {
+        batchHandleSopService.downloadSopTemplate(baseVo,httpServletResponse);
+    }
+
+
+}

+ 2 - 2
fm-sop/src/main/java/com/persagy/fm/sop/controller/EquipCompanyController.java

@@ -3,11 +3,11 @@ package com.persagy.fm.sop.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.fm.sop.service.IEquipCompanyBookService;
 import com.persagy.fm.sop.service.IEquipCompanyService;
 import com.persagy.fm.sop.service.IEquipModelService;
-import com.persagy.old.common.StringUtil;
-import com.persagy.old.common.ToolsUtil;
 import com.persagy.old.dao.DBConst.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;

+ 3 - 2
fm-sop/src/main/java/com/persagy/fm/sop/controller/GeneralDictController.java

@@ -2,12 +2,13 @@ package com.persagy.fm.sop.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.fm.sop.model.vo.*;
 import com.persagy.fm.sop.service.IGeneralDictService;
 import com.persagy.fm.sop.utils.OldResponseResult;
 import com.persagy.fm.sop.utils.OldResponseResultUtil;
-import com.persagy.old.common.StringUtil;
-import com.persagy.old.common.ToolsUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;

+ 2 - 2
fm-sop/src/main/java/com/persagy/fm/sop/controller/GroupSopController.java

@@ -3,6 +3,8 @@ package com.persagy.fm.sop.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.persagy.common.exception.BusinessException;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.fm.sop.model.dto.RefedSopBean;
 import com.persagy.fm.sop.model.dto.SopBean;
 import com.persagy.fm.sop.model.vo.*;
@@ -11,8 +13,6 @@ import com.persagy.fm.sop.utils.OldResponseResult;
 import com.persagy.fm.sop.utils.OldResponseResultUtil;
 import com.persagy.fm.sop.validator.Insert;
 import com.persagy.fm.sop.validator.Update;
-import com.persagy.old.common.StringUtil;
-import com.persagy.old.common.ToolsUtil;
 import com.persagy.fm.sop.service.IObjectService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 2 - 2
fm-sop/src/main/java/com/persagy/fm/sop/controller/ObjectController.java

@@ -3,8 +3,8 @@ package com.persagy.fm.sop.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.old.common.StringUtil;
-import com.persagy.old.common.ToolsUtil;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.fm.sop.service.IObjectService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;

+ 2 - 0
fm-sop/src/main/java/com/persagy/fm/sop/controller/SopController.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.persagy.common.exception.BusinessException;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.fm.sop.annotations.JsonFieldFilter;
 import com.persagy.fm.sop.entity.Sop;
 import com.persagy.fm.sop.enums.MsgTypeEnum;

+ 0 - 2
fm-sop/src/main/java/com/persagy/fm/sop/enums/AttTypeEnum.java

@@ -1,7 +1,5 @@
 package com.persagy.fm.sop.enums;
 
-import lombok.Data;
-
 /***
  * Description: 附件类型
  * @author : lijie

+ 41 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/ClassTypeEnum.java

@@ -0,0 +1,41 @@
+package com.persagy.fm.sop.enums;
+
+/***
+ * Description: 附件类型
+ * @author : lijie
+ * @date :2021/4/1 22:13
+ * Update By lijie 2021/4/1 22:13
+ */
+public enum ClassTypeEnum {
+
+    SYSTEM("通用系统类","通用系统类"),
+    EQUIP("通用设备类","通用设备类"),
+    SPACE("空间功能类型","空间功能类型"),
+    BUILD("建筑功能类型","建筑功能类型"),
+    FLOOR("楼层类","楼层类"),
+    SHAFT("竖井类","竖井类");
+
+    ClassTypeEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 2 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/ObjTypeEnum.java

@@ -8,6 +8,8 @@ package com.persagy.fm.sop.enums;
 public enum ObjTypeEnum {
     /**建筑*/
     BUILD("build","建筑"),
+    /**建筑*/
+    BUILDING("building","建筑"),
     /**楼层*/
     FLOOR("floor","楼层"),
     /**空间*/

+ 0 - 45
fm-sop/src/main/java/com/persagy/fm/sop/enums/ResultEnum.java

@@ -1,45 +0,0 @@
-package com.persagy.fm.sop.enums;
-/***
- * Description: 结果枚举
- * @author : lijie
- * @date :2021/4/2 18:19
- * Update By lijie 2021/4/2 18:19
- */
-public enum ResultEnum {
-    /**Result*/
-    RESULT("Result","结果key"),
-    /**success-成功*/
-    SUCCESS("success","成功"),
-    /**failure-失败*/
-    FAILURE("failure","失败"),
-    /**ResultMsg-错误消息*/
-    RESULT_MSG("ResultMsg","错误消息"),
-    /**内容数组*/
-    CONTENT("Content","内容数组"),
-    /**总数*/
-    COUNT("Count","总数");
-
-    ResultEnum(String type, String describe) {
-        this.type = type;
-        this.describe = describe;
-    }
-
-    private String type;
-    private String describe;
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getDescribe() {
-        return describe;
-    }
-
-    public void setDescribe(String describe) {
-        this.describe = describe;
-    }
-}

+ 38 - 0
fm-sop/src/main/java/com/persagy/fm/sop/enums/SheetNameEnum.java

@@ -0,0 +1,38 @@
+package com.persagy.fm.sop.enums;
+
+/***
+ * Description: 附件类型
+ * @author : lijie
+ * @date :2021/4/1 22:13
+ * Update By lijie 2021/4/1 22:13
+ */
+public enum SheetNameEnum {
+
+    CLASS_DATA("classData","系统类信息的sheet名称"),
+    CODE_DATA("codeData","对象类的code的sheet名称"),
+    INFO_DATA("infoData","信息点信息的sheet名称");
+
+    SheetNameEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 0 - 41
fm-sop/src/main/java/com/persagy/fm/sop/handler/DbJsonTypeHandler.java

@@ -1,41 +0,0 @@
-package com.persagy.fm.sop.handler;
-
-import cn.hutool.json.JSONUtil;
-import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.type.JdbcType;
-import org.apache.ibatis.type.MappedJdbcTypes;
-import org.apache.ibatis.type.MappedTypes;
-import org.springframework.util.Assert;
-
-@Slf4j
-@MappedTypes({ Object.class })
-@MappedJdbcTypes(JdbcType.VARCHAR)
-public class DbJsonTypeHandler extends AbstractJsonTypeHandler<Object> {
-
-    private final Class<?> clazz;
-
-    public DbJsonTypeHandler(Class<?> type, Class<?> innerType) {
-        if (log.isTraceEnabled()) {
-            log.trace("JacksonTypeHandler(" + type + ")");
-        }
-        Assert.notNull(type, "Type argument cannot be null");
-
-        this.clazz = innerType;
-    }
-
-    @Override
-    protected Object parse(String json) {
-        if (JSONUtil.isJsonArray(json)) {
-            return JSONUtil.toList(JSONUtil.parseArray(json), this.clazz);
-        } else {
-            return JSONUtil.toBean(json, this.clazz);
-        }
-    }
-
-    @Override
-    protected String toJson(Object obj) {
-        return JSONUtil.toJsonStr(obj);
-    }
-
-}

+ 1 - 1
fm-sop/src/main/java/com/persagy/fm/sop/handler/JsonTypeHandlerFactory.java

@@ -1,6 +1,6 @@
 package com.persagy.fm.sop.handler;
 
-import com.persagy.fm.sop.entity.CustomInfoPoint;
+import com.persagy.fm.mybatis.handler.DbJsonTypeHandler;
 import com.persagy.fm.sop.model.dto.*;
 
 public class JsonTypeHandlerFactory {

+ 4 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/CmptDataBean.java

@@ -1,11 +1,15 @@
 package com.persagy.fm.sop.model.dto;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Builder
 @Data
+@NoArgsConstructor
+@AllArgsConstructor
 public class CmptDataBean {
     /**
      * code : ***

+ 35 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/dto/ObjBean.java

@@ -0,0 +1,35 @@
+package com.persagy.fm.sop.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ObjBean {
+    /**
+     * obj_id : ***
+     * obj_name : 对象名称1
+     * obj_type : equip_class
+     * type_code :
+     * parents : [{"parent_ids":["***","***","***"],"parent_names":["建筑1","楼层1","空间"]},{"parent_ids":["***","***"],"parent_names":["专业1","系统1"]},{"parent_ids":["***","***","***"],"parent_names":["专业1","系统大类","设备大类"]}]
+     */
+    @JsonAlias({"obj_id", "objId"})
+    @JsonProperty("obj_id")
+    private String objId;
+    @JsonAlias({"obj_name", "objName"})
+    @JsonProperty("obj_name")
+    private String objName;
+    @JsonAlias({"obj_code", "objCode"})
+    @JsonProperty("obj_code")
+    private String objCode;
+    private List<ObjBean> content;
+    private List<ParentsBean> parents;
+}

+ 1 - 2
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/AutoReviseMsgVo.java

@@ -2,14 +2,13 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import javax.validation.constraints.NotBlank;
-
 @Data
 @Builder
 @NoArgsConstructor

+ 0 - 30
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/BaseVo.java

@@ -1,30 +0,0 @@
-package com.persagy.fm.sop.model.vo;
-
-import com.fasterxml.jackson.annotation.JsonAlias;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyOrder;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import javax.validation.constraints.NotBlank;
-/***
- * Description: SOP的VO基类
- * @author : lijie
- * @date :2021/4/10 14:02
- * Update By lijie 2021/4/10 14:02
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class BaseVo {
-    /**用户id*/
-    @ApiModelProperty(value = "账号id",required = true)
-    @NotBlank(message = "缺少非空项:user_id")
-    @JsonProperty("user_id")
-    @JsonAlias({"user_id","userId","accountId","account_id"})
-    private String userId;
-
-}

+ 0 - 78
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/GeneralDictVo.java

@@ -1,78 +0,0 @@
-package com.persagy.fm.sop.model.vo;
-
-import com.alibaba.fastjson.annotation.JSONField;
-import com.fasterxml.jackson.annotation.JsonAlias;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.*;
-
-import javax.validation.constraints.NotBlank;
-
-@EqualsAndHashCode
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@Builder
-public class GeneralDictVo {
-    @ApiModelProperty(value = "字典code")
-    private String code;
-
-    @ApiModelProperty(value = "字典名称")
-    private String name;
-
-    @ApiModelProperty(value = "字典描述")
-    private String description;
-
-    @ApiModelProperty(value = "有效值",hidden = true)
-    @JsonIgnore
-    private Boolean valid;
-
-    @ApiModelProperty(value = "字典类型",hidden = true)
-    @JSONField(alternateNames = {"dict_type","dictType"})
-    @JsonProperty("dict_type")
-    private String dictType;
-
-    @ApiModelProperty(value = "默认使用与否",hidden = true)
-    @JSONField(alternateNames = {"default_use","defaultUse"})
-    @JsonIgnore
-    private Boolean defaultUse;
-
-    @ApiModelProperty(value = "字典唯一标识",hidden = true)
-    @JSONField(alternateNames = {"dict_id","dictId"})
-    @JsonIgnore
-    private String dictId;
-
-    @ApiModelProperty(value = "更新时间",hidden = true)
-    @JSONField(alternateNames = {"update_time","updateTime"})
-    @JsonIgnore
-    private String updateTime;
-
-    @ApiModelProperty(value = "创建时间",hidden = true)
-    @JSONField(alternateNames = {"create_time","createTime"})
-    @JsonIgnore
-    private String createTime;
-
-    @ApiModelProperty(value = "扩展字段",hidden = true)
-    @JSONField(alternateNames = {"extend_field","extendField"})
-    @JsonIgnore
-    private String extendField;
-
-    @ApiModelProperty(value = "自定义名称",hidden = true)
-    @JSONField(alternateNames = {"customer_name","customerName"})
-    @JsonIgnore
-    private String customerName;
-
-    @ApiModelProperty(value = "是否使用自定义名称",hidden = true)
-    @JSONField(alternateNames = {"customer_use","customerUse"})
-    @JsonIgnore
-    private String customerUse;
-
-    @ApiModelProperty(value = "排序",hidden = true)
-    @JsonIgnore
-    private Integer order;
-
-
-}

+ 1 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryAutoReviseMsgVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;

+ 1 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryCovertClassVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import com.persagy.fm.sop.model.dto.ConvertClassBean;
 import com.persagy.fm.sop.model.dto.RuleBean;
 import io.swagger.annotations.ApiModelProperty;

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryGeneralDictVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
@@ -11,7 +12,7 @@ import javax.validation.constraints.NotBlank;
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
-public class QueryGeneralDictVo extends BaseVo{
+public class QueryGeneralDictVo extends BaseVo {
 
     @ApiModelProperty(value = "字典类型,domain_require-专业,wo_control_require-工单管控需求")
     @NotBlank(message = "缺少非空项:字典类型")

+ 1 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryObjectClassVo.java

@@ -1,5 +1,6 @@
 package com.persagy.fm.sop.model.vo;
 
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 
 /***

+ 1 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryPublishedListBaseVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import com.persagy.fm.sop.validator.ProjectQuery;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryPublishedSopVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -16,7 +17,7 @@ import java.util.List;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class QueryPublishedSopVo extends BaseVo{
+public class QueryPublishedSopVo extends BaseVo {
     /**SOP的id数组*/
     @ApiModelProperty("SOP的id数组")
     @JsonAlias({"sop_ids","sopIds"})

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryReferencedSopVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import com.persagy.fm.sop.validator.ProjectQuery;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -21,7 +22,7 @@ import java.util.List;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class QueryReferencedSopVo extends BaseVo{
+public class QueryReferencedSopVo extends BaseVo {
     
     @ApiModelProperty("项目id,查询集团SOP时不需要")
     @JsonProperty("project_id")

+ 1 - 0
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryReviseMsgVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QuerySopDetailVo.java

@@ -1,6 +1,7 @@
 package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -17,7 +18,7 @@ import javax.validation.constraints.NotBlank;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class QuerySopDetailVo extends BaseVo{
+public class QuerySopDetailVo extends BaseVo {
     @ApiModelProperty("SOP的唯一标识id")
     @JsonProperty("sop_id")
     @NotBlank(message = "缺少非空项:sop_id")

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QuerySopVo.java

@@ -1,6 +1,7 @@
 package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -18,7 +19,7 @@ import javax.validation.constraints.NotBlank;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class QuerySopVo extends BaseVo{
+public class QuerySopVo extends BaseVo {
     @ApiModelProperty("SOP的唯一标识id")
     @JsonProperty("sop_id")
     @NotBlank(message = "缺少非空项:sop_id")

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/QueryVerifySopNameBaseVo.java

@@ -3,6 +3,7 @@ package com.persagy.fm.sop.model.vo;
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.persagy.fm.common.model.vo.BaseVo;
 import com.persagy.fm.sop.validator.ProjectInsert;
 import com.persagy.fm.sop.validator.ProjectUpdate;
 import com.persagy.fm.sop.validator.Update;
@@ -12,7 +13,7 @@ import lombok.Data;
 import javax.validation.constraints.NotBlank;
 
 @Data
-public class QueryVerifySopNameBaseVo extends BaseVo{
+public class QueryVerifySopNameBaseVo extends BaseVo {
 
     /**
      * user_id : ***

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/ReferencedSopListVo.java

@@ -2,6 +2,7 @@ package com.persagy.fm.sop.model.vo;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
 import com.persagy.fm.sop.model.dto.OperatorBean;
 import com.persagy.fm.sop.validator.ProjectQuery;
 import io.swagger.annotations.ApiModelProperty;
@@ -22,7 +23,7 @@ import javax.validation.constraints.NotBlank;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class ReferencedSopListVo extends BaseVo{
+public class ReferencedSopListVo extends BaseVo {
     
     @ApiModelProperty("sop的id,编码")
     @JsonProperty("ref_sop_id")

+ 2 - 1
fm-sop/src/main/java/com/persagy/fm/sop/model/vo/SaveSopVo.java

@@ -3,6 +3,7 @@ package com.persagy.fm.sop.model.vo;
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.persagy.fm.common.model.vo.BaseVo;
 import com.persagy.fm.sop.deserializers.SpecialParamDeserializer;
 import com.persagy.fm.sop.model.dto.*;
 import com.persagy.fm.sop.validator.*;
@@ -26,7 +27,7 @@ import java.util.List;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class SaveSopVo extends BaseVo{
+public class SaveSopVo extends BaseVo {
 
     /**项目id*/
     public static final String PROJECT_ID = "project_id";

+ 210 - 19
fm-sop/src/main/java/com/persagy/fm/sop/service/BaseService.java

@@ -12,6 +12,9 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.old.common.*;
 import com.persagy.old.dao.DBConst.Result;
 import org.apache.commons.lang.StringUtils;
@@ -83,7 +86,7 @@ public class BaseService {
 		 * 统一处理:调用非运维系统时,user_id统一使用systemId
 		 */
 //		JSONObject jsonParam = JSONObject.parseObject(jsonStr);
-//		jsonParam.put("user_id", CommonConst.SYSTEM_ID);
+//		jsonParam.put("user_id", SopCommonConst.SYSTEM_ID);
 //		jsonStr = jsonParam.toJSONString();
 		
 		/***********统一处理:调用非运维系统时,user_id统一使用systemId  结束**************************/
@@ -343,7 +346,7 @@ public class BaseService {
 			}
 			return requestUrl;
 		}
-		
+
 	/**
 	 *
 	 * 功能描述:获取数据平台请求路径
@@ -371,7 +374,7 @@ public class BaseService {
 ////		}
 //		return requestUrl;
 //	}
-	
+
 	/**
 	 * 获取创建自定义信息点参数中的objType
 	 * @param objId
@@ -383,14 +386,14 @@ public class BaseService {
 		objTypeMap = objTypeMap == null ? Maps.newHashMap() : objTypeMap;
 		String ctmObjType = objTypeMap.get(objId);
 		if(!StringUtil.isNull(ctmObjType)){
-		}else if(objType.equals(CommonConst.data_type_build)){
+		}else if(objType.equals(SopCommonConst.data_type_build)){
 			ctmObjType = "building";
-		}else if(objType.equals(CommonConst.data_type_floor)){
+		}else if(objType.equals(SopCommonConst.data_type_floor)){
 			ctmObjType = "floor";
-		}else if(objType.equals(CommonConst.data_type_space)){
+		}else if(objType.equals(SopCommonConst.data_type_space)){
 			ctmObjType = "space";
-		}else if(objType.equals(CommonConst.data_type_equip)){
-			String project_id = StringUtil.transferId(objId, CommonConst.tag_project, dataPlatBasePath);
+		}else if(objType.equals(SopCommonConst.data_type_equip)){
+			String project_id = transferId(objId, SopCommonConst.tag_project, dataPlatBasePath);
 			String params = "{\"projectId\":\""+ project_id +"\", \"criterias\":[{\"id\":\""+objId+"\"}]}";
 			String requestUrl = getDataPlatformPath(DataRequestPathUtil.dataPlat_object_batch_query);
 //			String resultStr = httpPostRequest(requestUrl, params);
@@ -403,10 +406,10 @@ public class BaseService {
 				relation = relation == null ? new JSONObject() : relation;
 				ctmObjType = relation.getString("equipment_category");
 			}
-		}else if(objType.equals(CommonConst.data_type_equip_class)){
+		}else if(objType.equals(SopCommonConst.data_type_equip_class)){
 			ctmObjType = objId;
-		}else if(objType.equals(CommonConst.data_type_system)){
-			String project_id = StringUtil.transferId(objId, CommonConst.tag_project, dataPlatBasePath);
+		}else if(objType.equals(SopCommonConst.data_type_system)){
+			String project_id = transferId(objId, SopCommonConst.tag_project, dataPlatBasePath);
 			String params = "{\"projectId\":\""+ project_id +"\", \"criterias\":[{\"id\":\""+objId+"\"}]}";
 			String requestUrl = getDataPlatformPath(DataRequestPathUtil.dataPlat_object_batch_query);
 //			String resultStr = httpPostRequest(requestUrl, params);
@@ -419,7 +422,7 @@ public class BaseService {
 				relation = relation == null ? new JSONObject() : relation;
 				ctmObjType = relation.getString("equipment_category");
 			}
-		}else if(objType.equals(CommonConst.data_type_system_class)){
+		}else if(objType.equals(SopCommonConst.data_type_system_class)){
 			ctmObjType = objId;
 		}
 		objTypeMap.put(objId, ctmObjType);
@@ -427,25 +430,213 @@ public class BaseService {
 	}
 
 	/**
+	 * 转换ID
+	 * @param id     ID
+	 * @param taget 转换目标ID标识
+	 * @return
+	 */
+	public static String transferId(String id, String taget, String dataPlatBasePath){
+		Map<String, String> parentIdMap = null;
+		try {
+			parentIdMap = getParentIdAndCategoryMap(id, dataPlatBasePath);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		Map<String, String> map = new HashMap<String, String>();
+		if(id.startsWith(SopCommonConst.tag_project)){
+
+		}else if(id.startsWith(SopCommonConst.tag_build)){
+			map.put(SopCommonConst.tag_project, SopCommonConst.tag_project+ id.substring(2, 12));
+		}else if(id.startsWith(SopCommonConst.tag_floor)){
+			map.put(SopCommonConst.tag_project, SopCommonConst.tag_project+ id.substring(2, 12));
+			map.put(SopCommonConst.tag_build, parentIdMap.get("building"));
+		}else if(id.startsWith(SopCommonConst.tag_space)){
+			map.put(SopCommonConst.tag_project, SopCommonConst.tag_project+ id.substring(2, 12));
+			map.put(SopCommonConst.tag_build, parentIdMap.get("building"));
+			map.put(SopCommonConst.tag_floor, parentIdMap.get("floor"));
+		}else if(id.startsWith(SopCommonConst.tag_equip)){
+			map.put(SopCommonConst.tag_project, SopCommonConst.tag_project+ id.substring(2, 12));
+			map.put(SopCommonConst.tag_build, parentIdMap.get("building"));
+		}else if(id.startsWith(SopCommonConst.tag_system)){
+			map.put(SopCommonConst.tag_project, SopCommonConst.tag_project+ id.substring(2, 12));
+			map.put(SopCommonConst.tag_build, parentIdMap.get("building"));
+		}
+		return map.get(taget);
+	}
+
+	/**
+	 *
+	 * Description:获取同一项目下同一类型对象的关联建筑id、楼层id、设备id信息
+	 * @param ids 设备(空间、部件)id的集合,集合内容应为同一类型的id
+	 * @return {"id值":{"building":"", "floor":"", "equipment":"", "category":""}}, 只有传入的id为设备和系统时,才会返回category,其值为类型码组合,如SETDLS(前两位是专业码,中间两位是系统码,后四位是设备类别码)
+	 * @throws Exception Map<String,String>
+	 * @author cuixubin
+	 * @since 2018年5月15日: 下午6:42:17
+	 * Update By cuixubin 2018年5月15日: 下午6:42:17
+	 */
+	public static Map<String, Map<String, String>> getParentIds(List<String> ids, String dataPlatBasePath) throws Exception {
+		Map<String, Map<String, String>> resultMap = new HashMap<>();
+		if(null == ids || ids.isEmpty()) {
+			return resultMap;
+		}
+		String id = ids.get(0);
+		String projectId = "Pj" + id.substring(2, 12);
+		String requestUrl = DataRequestPathUtil.dataPlat_object_batch_query;
+		requestUrl = requestUrl.replace("BASEPATH", dataPlatBasePath);
+		if (null != projectId && !"".equals(projectId)) {
+			requestUrl = requestUrl.replace("PROJECTID", projectId);
+		}
+
+		String buildParamStr = "{\"criterias\":[{\"id\":\"" + id + "\"}";
+		for(int i=1; i<ids.size(); i++) {
+			buildParamStr += ",{\"id\":\"" + ids.get(i) + "\"}";
+		}
+		buildParamStr += "],\"valid\":null,\"projectId\":\""+ projectId +"\"}";
+
+		String result = new BaseService().httpPostRequestDataPlatform(requestUrl, buildParamStr);
+		JSONObject resultJson = JSONObject.parseObject(result);
+		JSONArray content = (JSONArray) resultJson.get("Content");
+		if (content != null && content.size() != 0) {
+			Map<String, String> locationMap = new HashMap<>();
+			for(int i=0; i<content.size(); i++) {
+				JSONObject item = content.getJSONObject(i);
+				locationMap = (Map<String, String>) item.get("location");
+				locationMap.put("category",(String) ((JSONObject) content.get(i)).get("category"));
+//              resultMap.put("category",(String) ((JSONObject) content.get(0)).get("category"));
+				resultMap.put(item.getString("id"), locationMap);
+			}
+		}
+		return resultMap;
+	}
+
+	private static Map<String, String> getParentIdAndCategoryMap(String id, String dataPlatBasePath) throws Exception {
+		String projectId = "Pj" + id.substring(2, 12);
+		String requestUrl = DataRequestPathUtil.dataPlat_object_batch_query;
+		requestUrl = requestUrl.replace("BASEPATH", dataPlatBasePath);
+		if (null != projectId && !"".equals(projectId)) {
+			requestUrl = requestUrl.replace("PROJECTID", projectId);
+		}
+		String buildParamStr = "{\"criterias\":[{\"id\":\"" + id + "\"}]}";
+		JSONObject requstParams = JSONObject.parseObject(buildParamStr);
+		requstParams.put("projectId", projectId);
+//        String result = new BaseService().httpPostRequest(requestUrl, requstParams.toString());
+		String result = new BaseService().httpPostRequestDataPlatform(requestUrl, requstParams.toString());
+
+		JSONObject resultJson = JSONObject.parseObject(result);
+		JSONArray content = (JSONArray) resultJson.get("Content");
+		Map<String, String> resultMap = new HashMap<>();
+		if (content != null) {
+			Map<String, String> locationMap = (Map<String, String>) ((JSONObject) content.get(0)).get("location");
+			resultMap.putAll(locationMap);
+			resultMap.put("category",(String) ((JSONObject) content.get(0)).get("category"));
+		}
+		return resultMap;
+	}
+
+
+
+	/**
+	 * 获取设备或系统的类型
+	 * @param id 设备、系统ID
+	 * @Param taget 类型标识
+	 * @return
+	 */
+	public static String getEquipOrSystemCodeFromId(String id, String taget, String dataPlatBasePath){
+		Map<String, String> map = new HashMap<String, String>();
+		Map<String, String> parentCategoryMap = null;
+		try {
+			parentCategoryMap = getParentIdAndCategoryMap(id, dataPlatBasePath);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		String category = parentCategoryMap.get("category");
+		if (id.startsWith(SopCommonConst.tag_equip)) {
+			map.put(SopCommonConst.tag_dict_class, category == null || category.length()<6 ? null : category.substring(0, 2));
+			map.put(SopCommonConst.tag_dict_equip, category == null || category.length()<6  ? null : category.substring(2, 6));
+		} else if (id.startsWith(SopCommonConst.tag_system)) {
+			map.put(SopCommonConst.tag_dict_class, category == null || category.length()<4 ? null : category.substring(0, 2));
+			map.put(SopCommonConst.tag_dict_sytstem, category == null || category.length()<4  ? null : category.substring(2, 4));
+		}
+		return map.get(taget);
+	}
+
+	/**
+	 * 获取设备的类型
+	 * @param projectId 项目id
+	 * @Param ids 设备ids
+	 * @return
+	 */
+	public static JSONArray getEquipCodeFromEquipIds(String projectId, JSONArray ids, String dataPlatBasePath) {
+		JSONArray content = null;
+		try {
+//			Properties properties = new Properties();
+//			properties.load(StringUtil.class.getResourceAsStream("/config.properties"));
+//			String dataPlatBasePath = properties.getProperty("data.platform.basePath");
+			String requestUrl = DataRequestPathUtil.dataPlat_object_batch_query;
+			requestUrl = requestUrl.replace("BASEPATH", dataPlatBasePath);
+			if (null != projectId && !"".equals(projectId)) {
+				requestUrl = requestUrl.replace("PROJECTID", projectId);
+			}
+			JSONObject requstParams = new JSONObject();
+			requstParams.put("criterias", ids);
+			requstParams.put("projectId", projectId);
+//			String result = new BaseService().httpPostRequest(requestUrl, requstParams.toJSONString());
+			String result = new BaseService().httpPostRequestDataPlatform(requestUrl, requstParams.toJSONString());
+
+			JSONObject resultJson = JSONObject.parseObject(result);
+			content = (JSONArray) resultJson.get("Content");
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		JSONArray equipCodes = new JSONArray();
+		if (content != null && content.size() != 0) {
+			for (int i = 0, length = content.size(); i < length; i++) {
+				JSONObject jsonObject = content.getJSONObject(i);
+				String category = jsonObject.getString("category");
+				String equipCode = category == null || category.length() < 6 ? null : category.substring(2, 6);
+				if (!equipCodes.contains(equipCode)) {
+					equipCodes.add(equipCode);
+				}
+			}
+		}
+		return equipCodes;
+	}
+
+
+	/**
+	 * 右侧补齐String长度
+	 * @param str
+	 * @param length
+	 * @param sign
+	 * @return
+	 */
+	public static String completLengthFromRight(String str, int length, String sign){
+		while(str.length() < length){
+			str = str + sign;
+		}
+		return str;
+	}
+
+	/**
 	 * 获取信息点的id中的对象类型
 	 * @param objType	confirm_result中的对象类型
 	 * @return
 	 */
 	public String getObjTypeForInfoId(String objType) throws Exception {
 		String ctmObjType = null;
-		if(objType.equals(CommonConst.data_type_build)){
+		if(objType.equals(SopCommonConst.data_type_build)){
 			ctmObjType = "build";
-		}else if(objType.equals(CommonConst.data_type_floor)){
+		}else if(objType.equals(SopCommonConst.data_type_floor)){
 			ctmObjType = "floor";
-		}else if(objType.equals(CommonConst.data_type_space)){
+		}else if(objType.equals(SopCommonConst.data_type_space)){
 			ctmObjType = "space";
-		}else if(objType.equals(CommonConst.data_type_equip)){
+		}else if(objType.equals(SopCommonConst.data_type_equip)){
 			ctmObjType = "equip";
-		}else if(objType.equals(CommonConst.data_type_equip_class)){
+		}else if(objType.equals(SopCommonConst.data_type_equip_class)){
 			ctmObjType = "equip";
-		}else if(objType.equals(CommonConst.data_type_system)){
+		}else if(objType.equals(SopCommonConst.data_type_system)){
 			ctmObjType = "system";
-		}else if(objType.equals(CommonConst.data_type_system_class)){
+		}else if(objType.equals(SopCommonConst.data_type_system_class)){
 			ctmObjType = "system";
 		}
 		return ctmObjType;

+ 25 - 0
fm-sop/src/main/java/com/persagy/fm/sop/service/IBatchHandleSopService.java

@@ -0,0 +1,25 @@
+package com.persagy.fm.sop.service;
+
+import com.persagy.fm.common.model.vo.BaseVo;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/***
+ * Description: 批量导入SOP的逻辑类
+ * @author : lijie
+ * @date :2021/4/28 10:50
+ * Update By lijie 2021/4/28 10:50
+ */
+public interface IBatchHandleSopService {
+    /***
+     * Description: 下载批量导入的SOP模板
+     * @param baseVo : 请求参数
+     * @param response : 响应对象
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/28 10:53
+     * Update By lijie 2021/4/28 10:53
+     */
+    void downloadSopTemplate(BaseVo baseVo, HttpServletResponse response) throws IOException;
+}

+ 1 - 2
fm-sop/src/main/java/com/persagy/fm/sop/service/IGeneralDictService.java

@@ -1,8 +1,7 @@
 package com.persagy.fm.sop.service;
 
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.fm.sop.model.vo.GeneralDictVo;
-import com.persagy.fm.sop.model.vo.QueryGeneralDictVo;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
 
 import java.util.List;
 /***

+ 44 - 0
fm-sop/src/main/java/com/persagy/fm/sop/service/ObjService.java

@@ -0,0 +1,44 @@
+package com.persagy.fm.sop.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.constant.CommonConstant;
+import com.persagy.fm.common.constant.enums.ResultEnum;
+import com.persagy.fm.sop.model.dto.ObjBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class ObjService {
+    /***
+     * Description:通用查询对象数据的模板方法
+     * @return : java.util.List<com.persagy.fm.sop.model.dto.ObjBean>
+     * @author : lijie
+     * @date :2021/4/28 20:59
+     * Update By lijie 2021/4/28 20:59
+     */
+    public List<ObjBean> queryObjsData() {
+        JSONObject param = new JSONObject();
+        param.put("need_back_parents",false);
+        param.put(CommonConstant.USER_ID,CommonConstant.SYSTEM_ID);
+        String queryStr = queryDataFromSaas(param);
+        JSONObject queryObj = JSONObject.parseObject(queryStr);
+        if (ResultEnum.FAILURE.getType().equals(queryObj.getString(ResultEnum.RESULT.getType()))){
+            return new ArrayList<>();
+        }
+        JSONArray content = queryObj.getJSONArray(ResultEnum.CONTENT.getType());
+        if (null==content || content.size()<=0){
+            return new ArrayList<>();
+        }
+        return content.toJavaList(ObjBean.class);
+    }
+    /***
+     * Description: 从saas服务调用不同方法查询
+     * @param param : 查询参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/28 20:59
+     * Update By lijie 2021/4/28 20:59
+     */
+    protected abstract String queryDataFromSaas(JSONObject param);
+}

+ 587 - 0
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/BatchHandleSopServiceImpl.java

@@ -0,0 +1,587 @@
+package com.persagy.fm.sop.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
+import cn.hutool.poi.excel.RowUtil;
+import cn.hutool.poi.excel.StyleSet;
+import cn.hutool.poi.excel.cell.CellUtil;
+import cn.hutool.poi.excel.cell.FormulaCellValue;
+import com.alibaba.excel.util.SheetUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.persagy.fm.common.constant.CommonConstant;
+import com.persagy.fm.common.constant.enums.ObjTagEnum;
+import com.persagy.fm.common.constant.enums.ResultEnum;
+import com.persagy.fm.common.model.vo.BaseVo;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+import com.persagy.fm.common.service.DownloadService;
+import com.persagy.fm.sop.client.SaasClient;
+import com.persagy.fm.sop.constant.SopCommonConst;
+import com.persagy.fm.sop.enums.ClassTypeEnum;
+import com.persagy.fm.sop.enums.ObjTypeEnum;
+import com.persagy.fm.sop.enums.SheetNameEnum;
+import com.persagy.fm.sop.model.dto.InfoPointsBean;
+import com.persagy.fm.sop.model.dto.ObjBean;
+import com.persagy.fm.sop.service.IBatchHandleSopService;
+import com.persagy.fm.sop.service.ObjService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellAddress;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
+import org.apache.poi.ss.util.SheetUtil;
+import org.apache.poi.xssf.usermodel.*;
+import org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
+
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class BatchHandleSopServiceImpl implements IBatchHandleSopService {
+
+    private final SaasClient saasClient;
+
+    /**SOP批量导入模板的位置*/
+    private static final String TEMPLATE_FILE_PATH="/template/SOP导入模板.xlsx";
+    /**存储codeData的Sheet页的行数*/
+    private static final ThreadLocal<Integer> LOOK_INDEX = new ThreadLocal<>();
+    /**存储infoData的Sheet页的行数*/
+    private static final ThreadLocal<Integer> INFO_INDEX = new ThreadLocal<>();
+
+    /***
+     * Description: 下载批量导入的SOP模板
+     * @param baseVo : 请求参数
+     * @param response : 响应对象
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/28 10:53
+     * Update By lijie 2021/4/28 10:53
+     */
+    @Override
+    public void downloadSopTemplate(BaseVo baseVo, HttpServletResponse response) throws IOException {
+        // 下载Excel模板类
+        new DownloadService() {
+            @Override
+            protected void handleWorkbook(Workbook workbook) {
+                try{
+                    // 1.填充对象类数据
+                    LOOK_INDEX.set(0);
+                    INFO_INDEX.set(0);
+                    fillObjClassDataToWorkbook(workbook);
+                }finally {
+                    LOOK_INDEX.remove();
+                    INFO_INDEX.remove();
+                }
+            }
+
+            @Override
+            protected String getFilePath() {
+                return TEMPLATE_FILE_PATH;
+            }
+
+            @Override
+            protected HttpServletResponse getHttpServletResponse() {
+                return response;
+            }
+        }.downloadFile();
+    }
+    /***
+     * Description: 填充对象类数据
+     * @param workbook : 工作簿
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/28 19:05
+     * Update By lijie 2021/4/28 19:05
+     */
+    private void fillObjClassDataToWorkbook(Workbook workbook) {
+        // 做列表的数据
+        Sheet listSheet = workbook.getSheetAt(1);
+        // 做VooLook列表的数据
+        Sheet lookSheet = workbook.getSheetAt(2);
+        // 1.填充对象类数据
+        // 2.填充信息点数据
+        // 做信息点的sheet
+        Sheet infoSheet = workbook.getSheetAt(3);
+        Map<String, List<InfoPointsBean>> infoCodeMap = queryAllInfoCodeData();
+        writeObjClassDataToSheet(listSheet,lookSheet,workbook,infoSheet,infoCodeMap);
+        // 3.设置第一个sheet的有效性:对象分类,第二列(1),第三行(2)开始
+        Sheet firstSheet = workbook.getSheetAt(0);
+        rewriteExcelTempAtEmp("=classData!$A$1:$A$6",firstSheet,2,65535,1,1);
+        rewriteExcelTempAtEmp("=INDIRECT($B:$B)",firstSheet,2,65535,2,2);
+        rewriteExcelTempAtEmp("=INDIRECT($D:$D)",firstSheet,2,65535,15,15);
+        //创建下拉框对象
+        //CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(firstSheet,2),1),"通用系统类",null);
+        //CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(firstSheet,2),2),"给排水专业-水景系统",null);
+        for (int i=2;i<65535;i++){
+            CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(firstSheet,i),3).setCellFormula("IFERROR(VLOOKUP($C:$C,codeData!A:B,2,FALSE),\"\")");
+        }
+        // 4.隐藏三个sheet页
+        workbook.setSheetHidden(1,true);
+        workbook.setSheetHidden(2,true);
+        workbook.setSheetHidden(3,true);
+    }
+    /***
+     * Description: 写入信息点的数据
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/29 21:54
+     * Update By lijie 2021/4/29 21:54
+     */
+    private Map<String,List<InfoPointsBean>> queryAllInfoCodeData() {
+        JSONObject param = new JSONObject();
+        param.put(CommonConstant.USER_ID,CommonConstant.SYSTEM_ID);
+        String queryStr = saasClient.queryAllInfoPointForObject(param);
+        JSONObject queryObj = JSONObject.parseObject(queryStr);
+        if (ResultEnum.FAILURE.getType().equals(queryObj.getString(ResultEnum.RESULT.getType()))){
+            return new HashMap<>();
+        }
+        JSONObject item = queryObj.getJSONObject(ResultEnum.ITEM.getType());
+        if (null==item || 0==item.size()){
+            return new HashMap<>();
+        }
+        Map<String,List<InfoPointsBean>> result = new HashMap<>();
+        Set<String> keySet = item.keySet();
+        for (String key : keySet) {
+            JSONArray temp = item.getJSONArray(key);
+            if (null==temp || temp.size()<=0){
+                continue;
+            }
+            List<InfoPointsBean> infoPointsBeans = temp.toJavaList(InfoPointsBean.class);
+            result.put(key,infoPointsBeans);
+        }
+        return result;
+    }
+
+    /**
+     *<p>Description:将表中的某一区域设置成下拉框.</p>
+     *<p>@param sheet
+     *<p>@param dataSet
+     *<p>@param firstRow
+     *<p>@param lastRow
+     *<p>@param firstCol
+     *<p>@param lastCol void
+     *@since 2018年5月10日: 上午11:28:02
+     *@author lijie
+     *@version 1.0
+     */
+    public static void rewriteExcelTempAtEmp(String formulaString, Sheet sheet, int firstRow, int lastRow, int firstCol, int lastCol) {
+        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
+        //创建下拉框对象
+        XSSFDataValidationHelper helper = new XSSFDataValidationHelper((XSSFSheet) sheet);
+        XSSFDataValidationConstraint dvConstraint =  (XSSFDataValidationConstraint) helper.createFormulaListConstraint(formulaString);
+        DataValidation dataValidation = helper.createValidation(dvConstraint, addressList);
+        //处理Excel兼容性问题
+        if(dataValidation instanceof XSSFDataValidation) {
+            dataValidation.setSuppressDropDownArrow(true);
+            dataValidation.setShowErrorBox(true);
+        }else {
+            dataValidation.setSuppressDropDownArrow(false);
+        }
+        sheet.addValidationData(dataValidation);
+    }
+
+    /***
+     * Description: 写数据到Sheet中
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/28 21:27
+     * Update By lijie 2021/4/28 21:27
+     */
+    private void writeObjClassDataToSheet(Sheet listSheet, Sheet lookSheet,Workbook workbook, Sheet infoSheet,
+                                          Map<String, List<InfoPointsBean>> infoCodeMap) {
+        // 1.填写行头
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,0),0), ClassTypeEnum.SYSTEM.getType(),null);
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,1),0), ClassTypeEnum.EQUIP.getType(),null);
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,2),0), ClassTypeEnum.SPACE.getType(),null);
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,3),0), ClassTypeEnum.BUILD.getType(),null);
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,4),0), ClassTypeEnum.FLOOR.getType(),null);
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,5),0), ClassTypeEnum.SHAFT.getType(),null);
+        // 2.填充"通用系统类"数据
+        fillSystemClassData(listSheet, lookSheet,workbook,infoSheet,infoCodeMap);
+        // 3.填充"通用设备类"数据
+        fillEquipClassData(listSheet,lookSheet,workbook,infoSheet,infoCodeMap);
+        // 4.填充"空间功能类型"数据
+        fillSpaceClassData(listSheet,lookSheet,workbook,infoSheet,infoCodeMap);
+        // 5.填充"建筑功能类型"数据
+        fillBuildClassData(listSheet,lookSheet,workbook,infoSheet,infoCodeMap);
+        // 6.填充楼层类数据
+        fillFloorClassData(listSheet,lookSheet,workbook,infoSheet,infoCodeMap);
+        // 7.填充竖井类数据
+        fillShaftClassData(listSheet,lookSheet,workbook,infoSheet,infoCodeMap);
+    }
+    /***
+     * Description: 填充竖井类数据
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @param infoSheet
+     * @param infoCodeMap
+     * @return : java.lang.Integer
+     * @author : lijie
+     * @date :2021/4/28 21:12
+     * Update By lijie 2021/4/28 21:12
+     */
+    private void fillShaftClassData(Sheet listSheet, Sheet lookSheet, Workbook workbook, Sheet infoSheet, Map<String, List<InfoPointsBean>> infoCodeMap) {
+        List<ObjBean> objBeans = new ObjService() {
+            @Override
+            protected String queryDataFromSaas(JSONObject param) {
+                return saasClient.queryShaftType(param);
+            }
+        }.queryObjsData();
+        if (CollUtil.isEmpty(objBeans)){
+            return;
+        }
+        int index = 1;
+        for (ObjBean firstBean : objBeans) {
+            if (StrUtil.isBlank(firstBean.getObjId()) || StrUtil.isBlank(firstBean.getObjName())){
+                continue;
+            }
+            setCellValue(firstBean.getObjName(),firstBean.getObjId(),5,listSheet,lookSheet,index);
+            setInfoValue(workbook,lookSheet,infoCodeMap,firstBean.getObjId(),firstBean.getObjName(),infoSheet,ObjTypeEnum.SHAFT.getType());
+            index++;
+        }
+        setSheetRefersToFormula(workbook,1,6,index,SheetNameEnum.CLASS_DATA.getType(),ClassTypeEnum.SHAFT.getType());
+    }
+
+    /***
+     * Description: 填充楼层类数据
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @param infoSheet
+     * @param infoCodeMap
+     * @return : java.lang.Integer
+     * @author : lijie
+     * @date :2021/4/28 21:12
+     * Update By lijie 2021/4/28 21:12
+     */
+    private void fillFloorClassData(Sheet listSheet, Sheet lookSheet, Workbook workbook, Sheet infoSheet, Map<String, List<InfoPointsBean>> infoCodeMap) {
+        List<ObjBean> objBeans = new ObjService() {
+            @Override
+            protected String queryDataFromSaas(JSONObject param) {
+                return saasClient.queryFloorType(param);
+            }
+        }.queryObjsData();
+        if (CollUtil.isEmpty(objBeans)){
+            return;
+        }
+        int index = 1;
+        for (ObjBean firstBean : objBeans) {
+            if (StrUtil.isBlank(firstBean.getObjId()) || StrUtil.isBlank(firstBean.getObjName())){
+                continue;
+            }
+            setCellValue(firstBean.getObjName(),firstBean.getObjId(),4,listSheet,lookSheet,index);
+            setInfoValue(workbook,lookSheet,infoCodeMap,firstBean.getObjId(),firstBean.getObjName(),infoSheet,ObjTypeEnum.FLOOR.getType());
+            index++;
+        }
+        setSheetRefersToFormula(workbook,1,5,index,SheetNameEnum.CLASS_DATA.getType(),ClassTypeEnum.FLOOR.getType());
+    }
+
+    /***
+     * Description: 填充建筑功能类型
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @param infoSheet
+     * @param infoCodeMap
+     * @return : java.lang.Integer
+     * @author : lijie
+     * @date :2021/4/28 21:05
+     * Update By lijie 2021/4/28 21:05
+     */
+    private void fillBuildClassData(Sheet listSheet, Sheet lookSheet,
+                                    Workbook workbook, Sheet infoSheet, Map<String, List<InfoPointsBean>> infoCodeMap) {
+        List<ObjBean> objBeans = new ObjService() {
+            @Override
+            protected String queryDataFromSaas(JSONObject param) {
+                return saasClient.queryBuildFuncType(param);
+            }
+        }.queryObjsData();
+        if (CollUtil.isEmpty(objBeans)){
+            return;
+        }
+        int index = 1;
+        for (ObjBean firstBean : objBeans) {
+            if (StrUtil.isBlank(firstBean.getObjId()) || StrUtil.isBlank(firstBean.getObjName())){
+                continue;
+            }
+            setCellValue(firstBean.getObjName(),firstBean.getObjId(),3,listSheet,lookSheet,index);
+            setInfoValue(workbook,lookSheet,infoCodeMap,firstBean.getObjId(),firstBean.getObjName(),infoSheet,ObjTypeEnum.BUILDING.getType());
+            index++;
+            List<ObjBean> secondBeans = firstBean.getContent();
+            if (CollUtil.isEmpty(secondBeans)){
+                continue;
+            }
+            for (ObjBean secondBean : secondBeans) {
+                if (StrUtil.isBlank(firstBean.getObjId()) || StrUtil.isBlank(firstBean.getObjName())){
+                    continue;
+                }
+                setCellValue(firstBean.getObjName()+SopCommonConst.UNDER_LINE+secondBean.getObjName(),secondBean.getObjId(),3,listSheet,lookSheet,index);
+                setInfoValue(workbook,lookSheet,infoCodeMap,secondBean.getObjId(),firstBean.getObjName()+SopCommonConst.UNDER_LINE+secondBean.getObjName(),infoSheet,ObjTypeEnum.BUILDING.getType());
+                index++;
+                List<ObjBean> thirdBeans = secondBean.getContent();
+                if (CollUtil.isEmpty(thirdBeans)){
+                    continue;
+                }
+                for (ObjBean thirdBean : thirdBeans) {
+                    if (StrUtil.isBlank(firstBean.getObjId()) || StrUtil.isBlank(firstBean.getObjName())){
+                        continue;
+                    }
+                    setCellValue(firstBean.getObjName()+SopCommonConst.UNDER_LINE+secondBean.getObjName()+SopCommonConst.UNDER_LINE+thirdBean.getObjName(),thirdBean.getObjId(),3,listSheet,lookSheet,index);
+                    setInfoValue(workbook,lookSheet,infoCodeMap,thirdBean.getObjId(),firstBean.getObjName()+SopCommonConst.UNDER_LINE+secondBean.getObjName()+SopCommonConst.UNDER_LINE+thirdBean.getObjName(),infoSheet,ObjTypeEnum.BUILDING.getType());
+                    index++;
+                }
+            }
+        }
+        setSheetRefersToFormula(workbook,1,4,index,SheetNameEnum.CLASS_DATA.getType(),ClassTypeEnum.BUILD.getType());
+    }
+
+    /***
+     * Description: 填充空间功能类型数据
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @param infoSheet
+     * @param infoCodeMap
+     * @return : java.lang.Integer
+     * @author : lijie
+     * @date :2021/4/28 20:46
+     * Update By lijie 2021/4/28 20:46
+     */
+    private void fillSpaceClassData(Sheet listSheet, Sheet lookSheet, Workbook workbook, Sheet infoSheet, Map<String, List<InfoPointsBean>> infoCodeMap) {
+        List<ObjBean> objBeans = new ObjService() {
+            @Override
+            protected String queryDataFromSaas(JSONObject param) {
+                return saasClient.querySpaceClass(param);
+            }
+        }.queryObjsData();
+        if (CollUtil.isEmpty(objBeans)){
+            return;
+        }
+        int index = 1;
+        for (ObjBean objBean : objBeans) {
+            if (StrUtil.isBlank(objBean.getObjId()) || StrUtil.isBlank(objBean.getObjName())){
+                continue;
+            }
+            setCellValue(objBean.getObjName(),objBean.getObjId(),2,listSheet,lookSheet,index);
+            setInfoValue(workbook, lookSheet,infoCodeMap,objBean.getObjId(),objBean.getObjName(),infoSheet, ObjTypeEnum.SPACE.getType());
+            index++;
+        }
+        setSheetRefersToFormula(workbook,1,3,index,SheetNameEnum.CLASS_DATA.getType(),ClassTypeEnum.SPACE.getType());
+    }
+
+    /***
+     * Description: 填充通用设备类数据
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/28 20:13
+     * Update By lijie 2021/4/28 20:13
+     */
+    private void fillEquipClassData(Sheet listSheet, Sheet lookSheet, Workbook workbook,
+                                    Sheet infoSheet, Map<String, List<InfoPointsBean>> infoCodeMap) {
+        // 1.查询通用设备类数据
+        List<ObjBean> objBeans = new ObjService() {
+            @Override
+            protected String queryDataFromSaas(JSONObject param) {
+                return saasClient.queryEquipClass(param);
+            }
+        }.queryObjsData();
+        int index = 1;
+        // 专业层
+        for (ObjBean domainBean : objBeans) {
+            List<ObjBean> classBeans = domainBean.getContent();
+            if (CollUtil.isEmpty(classBeans)){
+                continue;
+            }
+            // 系统类层
+            for (ObjBean classBean : classBeans) {
+                if (CollUtil.isEmpty(classBean.getContent())){
+                    continue;
+                }
+                List<ObjBean> equipBeans = classBean.getContent();
+                // 设备类层
+                for (ObjBean equipBean : equipBeans) {
+                    if (StrUtil.isBlank(equipBean.getObjName()) || StrUtil.isBlank(equipBean.getObjId())){
+                        continue;
+                    }
+                    String equipName = equipBean.getObjName();
+                    if (StrUtil.isNotBlank(classBean.getObjName())){
+                        equipName = classBean.getObjName()+SopCommonConst.UNDER_LINE+equipName;
+                    }
+                    if (StrUtil.isNotBlank(domainBean.getObjName())){
+                        equipName = domainBean.getObjName()+SopCommonConst.UNDER_LINE+equipName;
+                    }
+                    setCellValue(equipName,equipBean.getObjId(),1,listSheet,lookSheet,index);
+                    setInfoValue(workbook, lookSheet,infoCodeMap,equipBean.getObjId(),equipName,infoSheet,equipBean.getObjId());
+                    index++;
+                }
+            }
+        }
+        setSheetRefersToFormula(workbook,1,2,index,SheetNameEnum.CLASS_DATA.getType(),ClassTypeEnum.EQUIP.getType());
+    }
+    /***
+     * Description: 创建名称
+     * @param workbook : 工作簿
+     * @param offset : 便宜量
+     * @param rowId : 行id
+     * @param index : 索引数
+     * @param sheetName : sheet名称
+     * @param manageName : 名称管理器中的名称
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/29 10:23
+     * Update By lijie 2021/4/29 10:23
+     */
+    private void setSheetRefersToFormula(Workbook workbook, int offset, int rowId, int index,String sheetName,String manageName) {
+        String range = getRange('A', offset, rowId, index);
+        Name name = workbook.createName();
+        //key不可重复
+        name.setNameName(manageName);
+        String formula = sheetName+"!" + range;
+        name.setRefersToFormula(formula);
+    }
+
+    /***
+     * Description:填充Cell的值
+     * @param objName : 对象名称
+     * @param objId : 对象id
+     * @param index : listSheet的行索引
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @param listCellIndex : listSheet的单元格索引
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/28 20:52
+     * Update By lijie 2021/4/28 20:52
+     */
+    private void setCellValue(String objName, String objId, Integer index, Sheet listSheet,
+                              Sheet lookSheet,Integer listCellIndex) {
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(listSheet,index),listCellIndex), objName,null);
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(lookSheet,LOOK_INDEX.get()),0), objName,null);
+        CellUtil.setCellValue(CellUtil
+                .getOrCreateCell(RowUtil.getOrCreateRow(lookSheet,LOOK_INDEX.get()),1), "_"+objId,null);
+        LOOK_INDEX.set(LOOK_INDEX.get()+1);
+    }
+
+    /***
+     * Description: 填充通用系统类的数据
+     * @param listSheet : 做下拉列表的sheet页
+     * @param lookSheet : 做VOLOOKUP的sheet页
+     * @return : void  
+     * @author : lijie
+     * @date :2021/4/28 19:32
+     * Update By lijie 2021/4/28 19:32
+     */
+    private void fillSystemClassData(Sheet listSheet, Sheet lookSheet,
+            Workbook workbook,Sheet infoSheet, Map<String, List<InfoPointsBean>> infoCodeMap) {
+        // 1.查询通用系统类的数据
+        List<ObjBean> objBeans = new ObjService() {
+            @Override
+            protected String queryDataFromSaas(JSONObject param) {
+                return saasClient.querySystemClass(param);
+            }
+        }.queryObjsData();
+        int index = 1;
+        for (ObjBean objBean : objBeans) {
+            List<ObjBean> subObjBeans = objBean.getContent();
+            if (CollUtil.isEmpty(subObjBeans)){
+                continue;
+            }
+            for (ObjBean subObjBean : subObjBeans) {
+                if (StrUtil.isBlank(subObjBean.getObjName()) || StrUtil.isBlank(subObjBean.getObjId())){
+                    continue;
+                }
+                String objName = StrUtil.isBlank(objBean.getObjName()) ?subObjBean.getObjName():objBean.getObjName()+ SopCommonConst.UNDER_LINE +subObjBean.getObjName();
+                setCellValue(objName,subObjBean.getObjId(),0,listSheet,lookSheet,index);
+                setInfoValue(workbook,lookSheet,infoCodeMap,subObjBean.getObjId(),objName,infoSheet,subObjBean.getObjId());
+                index++;
+            }
+        }
+        setSheetRefersToFormula(workbook,1,1,index,SheetNameEnum.CLASS_DATA.getType(),ClassTypeEnum.SYSTEM.getType());
+    }
+    /***
+     * Description: 设置信息点数据
+     * @param workbook :工作簿
+     * @param lookSheet :存储对象类code的数据
+     * @param infoCodeMap :信息点映射
+     * @param objId :对象id
+     * @return : void
+     * @author : lijie
+     * @date :2021/4/30 9:39
+     * Update By lijie 2021/4/30 9:39
+     */
+    private void setInfoValue(Workbook workbook, Sheet lookSheet, Map<String, List<InfoPointsBean>> infoCodeMap,
+                              String objId, String objName,Sheet infoSheet,String objType) {
+        List<InfoPointsBean> infoPointsBeans = infoCodeMap.getOrDefault(objType, new ArrayList<>());
+        for (int i = 0; i < infoPointsBeans.size(); i++) {
+            InfoPointsBean infoPointsBean = infoPointsBeans.get(i);
+            CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(lookSheet, LOOK_INDEX.get()-1),i+2),infoPointsBean.getName(),null);
+            CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(infoSheet, INFO_INDEX.get()),0),objName+SopCommonConst.UNDER_LINE+infoPointsBean.getName(),null);
+            CellUtil.setCellValue(CellUtil.getOrCreateCell(RowUtil.getOrCreateRow(infoSheet, INFO_INDEX.get()),1),JSONObject.toJSONString(infoPointsBean),null);
+            INFO_INDEX.set(INFO_INDEX.get()+1);
+        }
+        setSheetRefersToFormula(workbook,2,LOOK_INDEX.get(),infoPointsBeans.size()+1, SheetNameEnum.CODE_DATA.getType(),"_"+objId);
+    }
+
+    /**
+     *  计算formula
+     * @param offset 偏移量,如果给0,表示从A列开始,1,就是从B列
+     * @param rowId 第几行
+     * @param colCount 一共多少列
+     * @return 如果给入参 1,1,10. 表示从B1-K1。最终返回 $B$1:$K$1
+     *
+     */
+    public static String getRange(char colFlag, int offset, int rowId, int colCount) {
+        char start = (char)(colFlag + offset);
+        if (colCount <= 25) {
+            char end;
+            if (colCount<2){
+                end = (char)(start + colCount - 1);
+            }else {
+                end = (char)(start + colCount - 2);
+            }
+            return "$" + start + "$" + rowId + ":$" + end + "$" + rowId;
+        } else {
+            char endPrefix = colFlag;
+            char endSuffix = colFlag;
+            // 26-51之间,包括边界(仅两次字母表计算)
+            if ((colCount - 25) / 26 == 0 || colCount == 51) {
+                if ((colCount - 25) % 26 == 0) {// 边界值
+                    endSuffix = (char)(colFlag + 25);
+                } else {
+                    endSuffix = (char)(colFlag + (colCount - 25) % 26 - 1);
+                }
+            } else {// 51以上
+                if ((colCount - 25) % 26 == 0) {
+                    endSuffix = (char)(colFlag + 25);
+                    endPrefix = (char)(endPrefix + (colCount - 25) / 26 - 1);
+                } else {
+                    if ((colCount - 25) % 26 < 2){
+                        endSuffix = (char)(colFlag + (colCount - 25) % 26 - 1);
+                    }else {
+                        endSuffix = (char)(colFlag + (colCount - 25) % 26 - 2);
+                    }
+                    endPrefix = (char)(endPrefix + (colCount - 25) / 26);
+                }
+            }
+            return "$" + start + "$" + rowId + ":$" + endPrefix + endSuffix + "$" + rowId;
+        }
+    }
+
+}

+ 4 - 4
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/DictionaryServiceImpl.java

@@ -2,11 +2,11 @@ package com.persagy.fm.sop.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.old.cache.DictionaryCache;
-import com.persagy.old.common.CommonConst;
 import com.persagy.old.common.DataRequestPathUtil;
 import com.persagy.old.common.JSONUtil;
-import com.persagy.old.common.StringUtil;
 import com.persagy.old.dao.DBCommonMethods;
 import com.persagy.old.dao.DBConst;
 import com.persagy.fm.sop.service.BaseService;
@@ -67,7 +67,7 @@ public class DictionaryServiceImpl extends BaseService implements IDictionarySer
 						}
 					}
 					//处理省级数据
-					regionMap.put(StringUtil.completLengthFromRight(provinceItem.getString("provinceCode"), 6, "0"), provinceItem.getString("provinceName"));
+					regionMap.put(completLengthFromRight(provinceItem.getString("provinceCode"), 6, "0"), provinceItem.getString("provinceName"));
 				}
 			}
 			//处理直辖市
@@ -438,7 +438,7 @@ public class DictionaryServiceImpl extends BaseService implements IDictionarySer
 			JSONObject resultProfession = new JSONObject();
 			resultProfession.put("code", professionCode);
 			if(!StringUtil.isNull(projectId)){
-				resultProfession.put("name", dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, professionCode));
+				resultProfession.put("name", dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, professionCode));
 			}else{
 				resultProfession.put("name", professionName);
 			}

+ 6 - 10
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/GeneralDictServiceImpl.java

@@ -4,17 +4,13 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.fm.common.response.FmResponseContent;
+import com.persagy.fm.common.constant.CommonConstant;
+import com.persagy.fm.common.constant.enums.ResultEnum;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.fm.sop.client.SaasClient;
-import com.persagy.fm.sop.constant.SopQueryConst;
-import com.persagy.fm.sop.entity.Sop;
-import com.persagy.fm.sop.enums.ResultEnum;
-import com.persagy.fm.sop.model.vo.GeneralDictVo;
-import com.persagy.fm.sop.model.vo.QueryGeneralDictVo;
 import com.persagy.fm.sop.service.IGeneralDictService;
 import com.persagy.old.common.JSONUtil;
-import com.persagy.old.common.StringUtil;
-import com.persagy.old.common.ToolsUtil;
 import com.persagy.old.dao.DBCommonMethods;
 import com.persagy.old.dao.DBConst;
 import lombok.RequiredArgsConstructor;
@@ -127,8 +123,8 @@ public class GeneralDictServiceImpl implements IGeneralDictService {
      */
     private List<GeneralDictVo> queryGeneralDictDataFromSaas(String dictType){
         JSONObject param = new JSONObject();
-        param.put(SopQueryConst.USER_ID, SopQueryConst.SYSTEM_ID);
-        param.put(SopQueryConst.DICT_TYPE, dictType);
+        param.put(CommonConstant.USER_ID, CommonConstant.SYSTEM_ID);
+        param.put(CommonConstant.DICT_TYPE, dictType);
         String queryStr = saasClient.queryGeneralDictByDictType(param);
         JSONObject queryObj = JSONObject.parseObject(queryStr);
         if (ResultEnum.FAILURE.getType().equals(queryObj.getString(ResultEnum.RESULT.getType()))){

+ 0 - 9
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/GroupSopServiceImpl.java

@@ -1,26 +1,17 @@
 package com.persagy.fm.sop.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.fm.sop.model.dto.RefedSopBean;
 import com.persagy.fm.sop.model.dto.SopBean;
 import com.persagy.fm.sop.model.vo.*;
 import com.persagy.fm.sop.service.IGroupSopService;
 import com.persagy.fm.sop.service.IProjectSopService;
-import com.persagy.old.common.CommonConst;
-import com.persagy.old.common.DataRequestPathUtil;
-import com.persagy.old.common.StringUtil;
-import com.persagy.old.common.ToolsUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.text.ParseException;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /***
  * Description: 集团SOP业务逻辑处理实现类

+ 6 - 6
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/InstanceServiceImpl.java

@@ -2,11 +2,11 @@ package com.persagy.fm.sop.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.fm.sop.service.IInstanceService;
 import com.persagy.fm.sop.service.IObjectService;
 import com.persagy.old.cache.GraphCache;
-import com.persagy.old.common.CommonConst;
-import com.persagy.old.common.StringUtil;
 import com.persagy.fm.sop.service.BaseService;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,7 +50,7 @@ public class InstanceServiceImpl extends BaseService implements IInstanceService
 			objId = clazz.getString("obj_id");
 			objType = clazz.getString("obj_type");
 			containScopeFlag = false;
-			if (CommonConst.data_type_equip_class.equals(objType) && !StringUtil.isEmptyList(clazz, "space_scope")) {
+			if (SopCommonConst.data_type_equip_class.equals(objType) && !StringUtil.isEmptyList(clazz, "space_scope")) {
 				JSONObject spaceClazz = clazz.getJSONArray("space_scope").getJSONObject(0);
 				containScopeFlag = true;
 				objId = spaceClazz.getString("obj_id");
@@ -118,7 +118,7 @@ public class InstanceServiceImpl extends BaseService implements IInstanceService
 			id2equip.put(equip.getString("obj_id"), equip);
 		}
 		//======获取空间内的所有设备===
-		String graphId = graphCache.getGraphIdByProjectIdAndGraph(projectId, CommonConst.graph_type_equip_in_space);
+		String graphId = graphCache.getGraphIdByProjectIdAndGraph(projectId, SopCommonConst.graph_type_equip_in_space);
 		for (Object object : spaceObjs) {
 			space = (JSONObject) object;
 			spaceId = space.getString("obj_id");
@@ -142,9 +142,9 @@ public class InstanceServiceImpl extends BaseService implements IInstanceService
 	}
 
 	private JSONArray querySpaceOrEquipByType(String projectId, String id , String type) throws Exception {
-		if (CommonConst.data_type_equip_class.equals(type)) {
+		if (SopCommonConst.data_type_equip_class.equals(type)) {
 			return objectService.queryEquipByType(projectId, id);
-		}else if (CommonConst.data_type_space_class.equals(type)) {
+		}else if (SopCommonConst.data_type_space_class.equals(type)) {
 			return objectService.querySpaceByType(projectId, id);
 		}
 		return new JSONArray();

+ 144 - 141
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/ObjectServiceImpl.java

@@ -4,6 +4,9 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Maps;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.old.cache.ComponentRelationCache;
 import com.persagy.old.cache.DictionaryCache;
 import com.persagy.old.cache.GraphCache;
@@ -97,7 +100,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                  * 若获取项目下字典名称为空,name使用数据平台的数据
                  * update by yuecaipu on 2018-5-9 18:15
                  */
-                objName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, object.getString("obj_id"));
+                objName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, object.getString("obj_id"));
                 objName = objName == null ? result.getString("eqName"):objName;
                 object.put("obj_name", objName);
                 object.put("obj_code", result.getString("eq"));
@@ -193,7 +196,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 			JSONObject spaceClassJson = JSONObject.parseObject(spaceClass);
 			if (DBConst.Result.SUCCESS.equals(spaceClassJson.getString(DBConst.Result.RESULT))) {
 				JSONArray content = spaceClassJson.getJSONArray(DBConst.Result.CONTENT);
-				filterObjByKeyWords(keyWords, objects, content, CommonConst.data_type_space_class);
+				filterObjByKeyWords(keyWords, objects, content, SopCommonConst.data_type_space_class);
 			}
 		}
 		// 3.搜索 build_func_type-建筑功能类型
@@ -240,7 +243,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 			}
 		}
 		if (!criterias.isEmpty()) {
-//			String projectId = StringUtil.transferId(criterias.getJSONObject(0).getString("id"), CommonConst.tag_project);		
+//			String projectId = StringUtil.transferId(criterias.getJSONObject(0).getString("id"), SopCommonConst.tag_project);		
 //			String requestUrl = getDataPlatformPath(DataRequestPathUtil.dataPlat_object_batch_query_post, projectId, null);
 			String requestUrl = getDataPlatformPath(DataRequestPathUtil.dataPlat_object_batch_query_post);
 			JSONObject params = new JSONObject();
@@ -307,7 +310,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 	@Override
     public String searchObjectClass(String jsonStr) throws Exception {
     	JSONObject jsonObject = JSONObject.parseObject(jsonStr);
-    	String projectId = CommonConst.group_sop_id;
+    	String projectId = SopCommonConst.group_sop_id;
     	String keyWord = jsonObject.getString("keyword");
     	keyWord = keyWord == null ? "" : keyWord;
     	String[] keyWords = keyWord.split(" +");
@@ -505,7 +508,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 clazz = new JSONObject();
                 classId = classItem.getString("code");
                 clazzName = classItem.getString("class");
-//                clazzName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, classId, projectId);
+//                clazzName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, classId, projectId);
                 systemArray = classItem.getJSONArray("content");
                 systems = new JSONArray();
                 parentsStr = "[{\"parent_ids\":[\""+classId+"\"],\"parent_names\":[\""+clazzName+"\"]}]";
@@ -555,7 +558,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 clazz = new JSONObject();
                 clazzId = clazzItem.getString("code");
                 clazzName = clazzItem.getString("class");
-//                clazzName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, clazzId, projectId);
+//                clazzName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, clazzId, projectId);
                 systemArray = clazzItem.getJSONArray("content");
                 systems = new JSONArray();
                 for(int j=0; j<systemArray.size(); j++){
@@ -612,7 +615,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 //		resultJson.put(Result.CONTENT, contents);
 //		resultJson.put(Result.COUNT, contents.size());
 //		return resultJson.toJSONString();
-        JSONArray contents = dictionaryService.queryDataSourceById(CommonConst.JsonToData.SpaceFunction);
+        JSONArray contents = dictionaryService.queryDataSourceById(SopCommonConst.JsonToData.SpaceFunction);
         contents = transformDataFormat2(contents,needBack,null);
         return ToolsUtil.successJsonMsg(contents);
 	}
@@ -735,8 +738,8 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         String buildStr = httpPostRequestDataPlatform(url, "{\"projectId\":\"" + projectId + "\",\"criteria\":{\"type\":[\"Bd\"]}}");
         JSONObject buildJson = JSONObject.parseObject(buildStr);
         if("success".equals(buildJson.getString("Result"))){
-        	Map<String, String> idLocalNameMap = getObjectIdNameMap(buildJson, CommonConst.info_name_local_name_build);
-        	Map<String, String> idLocalIdMap = getObjectIdNameMap(buildJson, CommonConst.info_name_local_id_build);
+        	Map<String, String> idLocalNameMap = getObjectIdNameMap(buildJson, SopCommonConst.info_name_local_name_build);
+        	Map<String, String> idLocalIdMap = getObjectIdNameMap(buildJson, SopCommonConst.info_name_local_id_build);
         	JSONArray builds = new JSONArray();
         	JSONObject build;
         	//for(String id : idLocalNameMap.keySet()){
@@ -755,7 +758,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 //                buildItem = buildArray.getJSONObject(i);
 //                build = new JSONObject();
 //                build.put("obj_id", buildItem.getString("id"));
-//                build.put("obj_name", buildItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_build));
+//                build.put("obj_name", buildItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_build));
 //                builds.add(build);
 //            }
             buildStr = ToolsUtil.successJsonMsg(builds);
@@ -813,16 +816,16 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     floor = new JSONObject();
                     floorId = floorItem.getString("id");
                     floor.put("obj_id", floorId);
-                    floor.put("obj_name", floorItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_floor));
-                    floor.put("obj_code", floorItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_id_floor));
-					//buildId = StringUtil.transferId(floorId, CommonConst.tag_build);
+                    floor.put("obj_name", floorItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_floor));
+                    floor.put("obj_code", floorItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_id_floor));
+					//buildId = StringUtil.transferId(floorId, SopCommonConst.tag_build);
                     buildId = floorId_location.get(floorId) == null ? null : floorId_location.get(floorId).getString("building");
 					floorList = floorMap.getOrDefault(buildId, new JSONArray());
                     floorList.add(floor);
                     floorMap.put(buildId, floorList);
                 }
                 //遍历建筑 {"buildingId":"buildingName"}
-                Map<String, String> map = getObjectIdNameMap(buildJson, CommonConst.info_name_local_name_build);
+                Map<String, String> map = getObjectIdNameMap(buildJson, SopCommonConst.info_name_local_name_build);
             	builds = new JSONArray();
             	//for(String id : map.keySet()){
                 String id;
@@ -869,10 +872,10 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         String buildUrl = getDataPlatformPath(DataRequestPathUtil.dataPlat_object_batch_query);
         String floorParamStr, buildParamStr, spaceStr, floorStr, buildStr;
         String floorUrl, spaceParmaStr = "{\"projectId\":\"" + projectId + "\",\"criteria\":{\"id\":\""+objId+"\",\"type\":[\"Sp\"]}}";
-        if(CommonConst.data_type_floor.equals(objType)){
+        if(SopCommonConst.data_type_floor.equals(objType)){
 //            floorUrl = getDataPlatformPath(DataRequestPathUtil.dataPlat_object_batch_query, projectId, projectCache.getProjectSecretById(projectId));
             floorUrl = getDataPlatformPath(DataRequestPathUtil.dataPlat_object_batch_query);
-            String buildId = StringUtil.transferId(objId, CommonConst.tag_build, dataPlatBasePath);
+            String buildId = transferId(objId, SopCommonConst.tag_build, dataPlatBasePath);
             buildParamStr = "{\"projectId\":\"" + projectId + "\",\"criterias\":[{\"id\":\""+buildId+"\"}]}";
             floorParamStr = "{\"projectId\":\"" + projectId + "\",\"criterias\":[{\"id\":\""+objId+"\"}]}";
         }else{
@@ -910,13 +913,13 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
             buildArray = buildJson.getJSONArray("Content");
             for(int i=0; i<buildArray.size(); i++){
                 buildItem = buildArray.getJSONObject(i);
-                buildMap.put(buildItem.getString("id"), buildItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_build));
+                buildMap.put(buildItem.getString("id"), buildItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_build));
             }
             //处理楼层数据
             floorArray = floorJson.getJSONArray("Content");
             for(int i=0; i<floorArray.size(); i++){
                 floorItem = floorArray.getJSONObject(i);
-                floorMap.put(floorItem.getString("id"), floorItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_floor));
+                floorMap.put(floorItem.getString("id"), floorItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_floor));
             }
             //处理空间数据
             spaceArray = spaceJson.getJSONArray("Content");
@@ -934,8 +937,8 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 space = new JSONObject();
                 spaceId = spaceItem.getString("id");
                 if(needBack){
-                    //floorId = StringUtil.transferId(spaceId, CommonConst.tag_floor);
-                    //buildId = StringUtil.transferId(spaceId, CommonConst.tag_build);
+                    //floorId = StringUtil.transferId(spaceId, SopCommonConst.tag_floor);
+                    //buildId = StringUtil.transferId(spaceId, SopCommonConst.tag_build);
                 	floorId = spaceId_location.get(spaceId) == null ? null : spaceId_location.get(spaceId).getString("floor");
                 	buildId = spaceId_location.get(spaceId) == null ? null : spaceId_location.get(spaceId).getString("building");		
                     if(floorMap.containsKey(floorId)){
@@ -946,8 +949,8 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     space.put("parents", JSONArray.parseArray(parentStr));
                 }
                 space.put("obj_id", spaceId);
-                space.put("obj_name", spaceItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_space));
-                space.put("obj_code", spaceItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_id_space));
+                space.put("obj_name", spaceItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_space));
+                space.put("obj_code", spaceItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_id_space));
                 spaces.add(space);
             }
             resultStr = ToolsUtil.successJsonMsg(spaces);
@@ -1013,12 +1016,12 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 systemItem = systemArray.getJSONObject(i);
                 system = new JSONObject();
                 systemId = systemItem.getString("id");
-                systemName = systemItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_system);
+                systemName = systemItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_system);
                 String category = systemItem.getString("category");
                 systemClass = category == null || category.length() < 2 ? null : category.substring(0, 2);
                 system.put("obj_id", systemId);
                 system.put("obj_name", systemName);
-                system.put("obj_code", systemItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_id_system));
+                system.put("obj_code", systemItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_id_system));
                 //位置信息(所属建筑)
                 system.put("location", systemItem.getJSONObject("location"));
                 systemList = systemMap.getOrDefault(systemClass, new ArrayList<String>());
@@ -1029,7 +1032,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
             buildArray = buildJson.getJSONArray("Content");
             for(int i=0; i<buildArray.size(); i++){
                 buildItem = buildArray.getJSONObject(i);
-                buildMap.put(buildItem.getString("id"), buildItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_build));
+                buildMap.put(buildItem.getString("id"), buildItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_build));
             }
             //处理数据字典
             dictArray = dictJson.getJSONArray("Content");
@@ -1039,7 +1042,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 dict = new JSONObject();
                 dictId = dictItem.getString("code");
                 dictName = dictItem.getString("class");
-//                dictName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, dictId, projectId);
+//                dictName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, dictId, projectId);
                 systemList = systemMap.getOrDefault(dictId, new ArrayList<String>());
                 systems = new JSONArray();
                 
@@ -1056,7 +1059,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 for(String systemObj : systemList){
                     system = JSONObject.parseObject(systemObj);
                     systemId = system.getString("obj_id");
-                    //buildId = StringUtil.transferId(systemId, CommonConst.tag_build);
+                    //buildId = StringUtil.transferId(systemId, SopCommonConst.tag_build);
                     buildId = systemId_location.get(systemId) == null ? null : systemId_location.get(systemId).getString("building");
                     buildName = buildMap.get(buildId);
                     if(needBack){
@@ -1103,7 +1106,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 systemItem = systemArray.getJSONObject(i);
                 system = new JSONObject();
                 system.put("system_id", systemItem.getString("id"));
-                system.put("system_name", systemItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_system));
+                system.put("system_name", systemItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_system));
                 systems.add(system);
             }
             resultStr = ToolsUtil.successJsonMsg(systems);
@@ -1147,42 +1150,42 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 			for(int i = 0; i < objectArray.size(); i++) {
 				JSONObject queryContent= objectArray.getJSONObject(i);
 				String obj_id = queryContent.getString("id");
-				if(obj_id.startsWith(CommonConst.tag_floor)) {
+				if(obj_id.startsWith(SopCommonConst.tag_floor)) {
 					floorIdInContents.add(obj_id);
-				}else if(obj_id.startsWith(CommonConst.tag_space)) {
+				}else if(obj_id.startsWith(SopCommonConst.tag_space)) {
 					spaceIdInContents.add(obj_id);
 				}
 			}
 			//根据空间或者楼层id获取上层的id
-			Map<String, Map<String, String>> spaceId_location = StringUtil.getParentIds(spaceIdInContents,dataPlatBasePath);
+			Map<String, Map<String, String>> spaceId_location = getParentIds(spaceIdInContents,dataPlatBasePath);
 			spaceId_location = spaceId_location == null ? new HashMap<>() : spaceId_location;
 			
-			Map<String, Map<String, String>> floorId_location = StringUtil.getParentIds(floorIdInContents,dataPlatBasePath);
+			Map<String, Map<String, String>> floorId_location = getParentIds(floorIdInContents,dataPlatBasePath);
 			floorId_location = floorId_location == null ? new HashMap<>() : floorId_location;
             
             for(int i=0; i<objectArray.size(); i++){
                 objectItem = objectArray.getJSONObject(i);
                 objectId = objectItem.getString("id");
-                floor_sequence_id = objectItem.getJSONObject(CommonConst.info_name_datas).getString("FloorSequenceID");
-                if(objectId.startsWith(CommonConst.tag_build)){
+                floor_sequence_id = objectItem.getJSONObject(SopCommonConst.info_name_datas).getString("FloorSequenceID");
+                if(objectId.startsWith(SopCommonConst.tag_build)){
                     //建筑
-                    buildMap.put(objectId, objectItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_build));
-                }else if(objectId.startsWith(CommonConst.tag_floor)){
+                    buildMap.put(objectId, objectItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_build));
+                }else if(objectId.startsWith(SopCommonConst.tag_floor)){
                     //楼层
-                    //buildId = StringUtil.transferId(objectId, CommonConst.tag_build);
+                    //buildId = StringUtil.transferId(objectId, SopCommonConst.tag_build);
                 	buildId = floorId_location.get(objectId) == null ? null : floorId_location.get(objectId).get("building");
                     mapValues = relBuildStepObjectMap.get(buildId);
                     mapValues = mapValues == null ? new JSONArray() : mapValues;
                     mapValues.add(objectId);
                     relBuildStepObjectMap.put(buildId, mapValues);
-                    floorMap.put(objectId, objectItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_floor));
+                    floorMap.put(objectId, objectItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_floor));
                     floorSequenceMap.put(objectId, floor_sequence_id);
-                }else if(objectId.startsWith(CommonConst.tag_space)){
+                }else if(objectId.startsWith(SopCommonConst.tag_space)){
                     //空间
-                    //floorId = StringUtil.transferId(objectId, CommonConst.tag_floor);
+                    //floorId = StringUtil.transferId(objectId, SopCommonConst.tag_floor);
                 	floorId = spaceId_location.get(objectId) == null ? null : spaceId_location.get(objectId).get("floor");
                     if(null != floorId && floorId.endsWith("000")){
-                        //buildId = StringUtil.transferId(objectId, CommonConst.tag_build);
+                        //buildId = StringUtil.transferId(objectId, SopCommonConst.tag_build);
                     	buildId = spaceId_location.get(objectId) == null ? null : spaceId_location.get(objectId).get("building");
                         mapValues = relBuildStepObjectMap.get(buildId);
                         mapValues = mapValues == null ? new JSONArray() : mapValues;
@@ -1194,7 +1197,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                         mapValues.add(objectId);
                         relFloorSpaceMap.put(floorId, mapValues);
                     }
-                    spaceMap.put(objectId, objectItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_space));
+                    spaceMap.put(objectId, objectItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_space));
                 }
             }
             String stepObjectId, spaceId;
@@ -1210,7 +1213,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 for(int i=0; i<relStepObjects.size(); i++){
                     stepObjectId = relStepObjects.getString(i);
                     buildStepObject = new JSONObject();
-                    if(stepObjectId.startsWith(CommonConst.tag_floor)){
+                    if(stepObjectId.startsWith(SopCommonConst.tag_floor)){
                         //楼层
                         spaces = new JSONArray();
                         relSpaces = relFloorSpaceMap.getOrDefault(stepObjectId, new JSONArray());
@@ -1377,13 +1380,13 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         // 查询关系请求参数对象
         params.clear();
         // 项目下的 设备-空间  图实例id
-        String graphIdOfEquipAndSPace = graphCache.getGraphIdByProjectIdAndGraph(projectId, CommonConst.graph_type_equip_in_space);
+        String graphIdOfEquipAndSPace = graphCache.getGraphIdByProjectIdAndGraph(projectId, SopCommonConst.graph_type_equip_in_space);
         
         if(!StringUtil.isNull(graphIdOfEquipAndSPace)) {
         	if(needBackParents) {
         		criteria.clear();
         		criteria.put("graph_id", graphIdOfEquipAndSPace);
-        		criteria.put("rel_type", CommonConst.relation_type_equip_in_space);
+        		criteria.put("rel_type", SopCommonConst.relation_type_equip_in_space);
         		if(!StringUtil.isNull(spaceId)){
         			criteria.put("to_id", spaceId);
         		}
@@ -1394,12 +1397,12 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         		
         		if(resultStr.contains("success")){
         			// resultStr 设备与空间关系查询的结果集
-        			eqid_spid_map = getRelationMap(resultStr, CommonConst.relation_from_id, CommonConst.relation_to_id);
+        			eqid_spid_map = getRelationMap(resultStr, SopCommonConst.relation_from_id, SopCommonConst.relation_to_id);
         		}
         	}else if(!StringUtil.isNull(spaceId)) {
         		criteria.clear();
         		criteria.put("graph_id", graphIdOfEquipAndSPace);
-        		criteria.put("rel_type", CommonConst.relation_type_equip_in_space);
+        		criteria.put("rel_type", SopCommonConst.relation_type_equip_in_space);
         		criteria.put("to_id", spaceId);
         		params.put("criteria", criteria);
         		params.put("projectId", projectId);
@@ -1408,7 +1411,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         		
         		if(resultStr.contains("success")){
         			// resultStr 设备与空间关系查询的结果集
-        			eqid_spid_map = getRelationMap(resultStr, CommonConst.relation_from_id, CommonConst.relation_to_id);
+        			eqid_spid_map = getRelationMap(resultStr, SopCommonConst.relation_from_id, SopCommonConst.relation_to_id);
         		}
         	}
         }
@@ -1419,12 +1422,12 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         Map<String, String> eqid_syid_map = new HashMap<>();
         // ------------------- 查询设备和系统关系 start---------------------- //
         //项目下的设备-系统图实例id
-        String graphIdOfEquipAndSystem = graphCache.getGraphIdByProjectIdAndGraph(projectId, CommonConst.graph_type_system_contain_equip);
+        String graphIdOfEquipAndSystem = graphCache.getGraphIdByProjectIdAndGraph(projectId, SopCommonConst.graph_type_system_contain_equip);
         if(!StringUtil.isNull(graphIdOfEquipAndSystem)){
         	if(needBackParents) {
         		criteria.clear();
         		criteria.put("graph_id", graphIdOfEquipAndSystem);
-        		criteria.put("rel_type", CommonConst.relation_type_system_contain_equip);
+        		criteria.put("rel_type", SopCommonConst.relation_type_system_contain_equip);
         		if(!StringUtil.isNull(systemId)){
         			criteria.put("from_id", systemId);
         		}
@@ -1436,12 +1439,12 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         		
         		if(resultStr.contains("success")){
         			// resultStr 设备与系统关系查询的结果集
-        			eqid_syid_map = getRelationMap(resultStr, CommonConst.relation_to_id, CommonConst.relation_from_id);
+        			eqid_syid_map = getRelationMap(resultStr, SopCommonConst.relation_to_id, SopCommonConst.relation_from_id);
         		}
         	}else if(!StringUtil.isNull(systemId)) {
         		criteria.clear();
         		criteria.put("graph_id", graphIdOfEquipAndSystem);
-        		criteria.put("rel_type", CommonConst.relation_type_system_contain_equip);
+        		criteria.put("rel_type", SopCommonConst.relation_type_system_contain_equip);
     			criteria.put("from_id", systemId);
         		params.clear();
         		params.put("criteria", criteria);
@@ -1451,7 +1454,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         		
         		if(resultStr.contains("success")){
         			// resultStr 设备与系统关系查询的结果集
-        			eqid_syid_map = getRelationMap(resultStr, CommonConst.relation_to_id, CommonConst.relation_from_id);
+        			eqid_syid_map = getRelationMap(resultStr, SopCommonConst.relation_to_id, SopCommonConst.relation_from_id);
         		}
         	}
         }
@@ -1576,7 +1579,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 relSystemName = objectIdNameMap.get(relSystemId);
                 // 专业编码
                 domainId = syid_domaincode_map.get(relSystemId);
-                domainName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, domainId);
+                domainName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, domainId);
 				if (domainId != null) {
 					parentIds.add(domainId);
 				}
@@ -1601,8 +1604,8 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 equip.put("parents", parents);
             }
             equip.put("obj_id", equipId);
-            equip.put("obj_name", equipItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_name_equip));
-            equip.put("obj_code", equipItem.getJSONObject(CommonConst.info_name_datas).getString(CommonConst.info_name_local_id_equip));
+            equip.put("obj_name", equipItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_name_equip));
+            equip.put("obj_code", equipItem.getJSONObject(SopCommonConst.info_name_datas).getString(SopCommonConst.info_name_local_id_equip));
             equips.add(equip);
         }
         resultStr = ToolsUtil.successJsonMsg(equips);
@@ -1732,7 +1735,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 info = new JSONObject();
                 parents = new JSONArray();
                 infoType = infoItem.getString("type");
-                if(CommonConst.tag_equip.equals(infoType)){
+                if(SopCommonConst.tag_equip.equals(infoType)){
                     //设备大类信息点
                     parents = new JSONArray();
                     infoPoint = new JSONObject();
@@ -1741,7 +1744,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     parentIds = new JSONArray();
                     parentNames = new JSONArray();
                     parentId = infoItem.getString("major");
-                    parentName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, parentId);
+                    parentName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, parentId);
                     if(!StringUtil.isNull(parentId, parentName)) {
                         parentIds.add(parentId);
                         parentNames.add(parentName);
@@ -1765,7 +1768,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     info.put("obj_type", "equip_class");
                     info.put("parents", parents);
                     info.put("info_point", infoPoint);
-                }else if(CommonConst.tag_system.equals(infoType)){
+                }else if(SopCommonConst.tag_system.equals(infoType)){
                     //系统大类信息点
                     parents = new JSONArray();
                     infoPoint = new JSONObject();
@@ -1774,7 +1777,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     parentIds = new JSONArray();
                     parentNames = new JSONArray();
                     parentId = infoItem.getString("major");
-                    parentName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, parentId);
+                    parentName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, parentId);
                     if(!StringUtil.isNull(parentId, parentName)) {
                         parentIds.add(parentId);
                         parentNames.add(parentName);
@@ -1792,7 +1795,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     info.put("obj_type", "system_class");
                     info.put("parents", parents);
                     info.put("info_point", infoPoint);
-                }else if(CommonConst.tag_equip_object.equals(infoType)){
+                }else if(SopCommonConst.tag_equip_object.equals(infoType)){
                     //设备对象信息点
                     parents = new JSONArray();
                     infoPoint = new JSONObject();
@@ -1803,7 +1806,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                         parentIds = new JSONArray();
                         parentNames = new JSONArray();
                         parentId = infoItem.getString("major");
-                        parentName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, parentId);
+                        parentName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, parentId);
                         if (!StringUtil.isNull(parentId, parentName)) {
                             parentIds.add(parentId);
                             parentNames.add(parentName);
@@ -1845,7 +1848,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     parents.add(parent);
 
                     //处理信息点
-                    infoPoint.put("id", "equip_" + StringUtil.getEquipOrSystemCodeFromId(infoItem.getString("eqObj"), CommonConst.tag_dict_equip, dataPlatBasePath) + "_" + infoItem.getString("info"));
+                    infoPoint.put("id", "equip_" + getEquipOrSystemCodeFromId(infoItem.getString("eqObj"), SopCommonConst.tag_dict_equip, dataPlatBasePath) + "_" + infoItem.getString("info"));
                     infoPoint.put("code", infoItem.getString("info"));
                     infoPoint.put("name", infoItem.getString("infoName"));
 
@@ -1854,7 +1857,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     info.put("obj_type", "equip");
                     info.put("parents", parents);
                     info.put("info_point", infoPoint);
-                }else if(CommonConst.tag_system_object.equals(infoType)){
+                }else if(SopCommonConst.tag_system_object.equals(infoType)){
                     //系统对象信息点
                     parents = new JSONArray();
                     infoPoint = new JSONObject();
@@ -1863,7 +1866,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     parentIds = new JSONArray();
                     parentNames = new JSONArray();
                     parentId = infoItem.getString("major");
-                    parentName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, parentId);
+                    parentName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, parentId);
                     if(!StringUtil.isNull(parentId, parentName)) {
                         parentIds.add(parentId);
                         parentNames.add(parentName);
@@ -1885,7 +1888,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     parent.put("parent_names", parentNames);
                     parents.add(parent);
                     //处理信息点
-                    infoPoint.put("id", "system_" + StringUtil.getEquipOrSystemCodeFromId(infoItem.getString("sysObj"), CommonConst.tag_dict_sytstem, dataPlatBasePath) + "_" + infoItem.getString("info"));
+                    infoPoint.put("id", "system_" + getEquipOrSystemCodeFromId(infoItem.getString("sysObj"), SopCommonConst.tag_dict_sytstem, dataPlatBasePath) + "_" + infoItem.getString("info"));
                     infoPoint.put("code", infoItem.getString("info"));
                     infoPoint.put("name", infoItem.getString("infoName"));
 
@@ -1896,7 +1899,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                     info.put("info_point", infoPoint);
                 }
                 if(info.containsKey("info_point") 
-                		&& infoPointCache.isShowInApp(info.getJSONObject("info_point").getString("id"), infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+                		&& infoPointCache.isShowInApp(info.getJSONObject("info_point").getString("id"), infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
                 	infos.add(info);
                 }
             }
@@ -1940,7 +1943,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         if(!StringUtil.isNull(keyword)){
         	 keywords = keyword.split(" ");
         }
-        String systemType = StringUtil.getEquipOrSystemCodeFromId(systemId, CommonConst.tag_dict_sytstem, dataPlatBasePath);
+        String systemType = getEquipOrSystemCodeFromId(systemId, SopCommonConst.tag_dict_sytstem, dataPlatBasePath);
         String url = getDataPlatDictPath(DataRequestPathUtil.dataPlat_infoPoint_special, systemType);
 //        String infoStr = httpGetRequest(url);
         String infoStr = httpPostRequestDataPlatform(url,"{}");
@@ -1954,9 +1957,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
             infos = new JSONArray();
             for(int i=0; i<infoArray.size(); i++){
                 infoItem = infoArray.getJSONObject(i);
-                code = infoItem.getString(CommonConst.info_name_info_point_code);
-                name = infoItem.getString(CommonConst.info_name_info_point_name);
-                baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+                code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+                name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+                baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
                 boolean flag = true;
                 if(keywords != null){
                 	for(String key : keywords){
@@ -1969,11 +1972,11 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 	continue;
                 }
                 id = "system"+"_" +systemType+"_"+code;
-                if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+                if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
                     info = new JSONObject();
                     info.put("id", id);
                     info.put("code", code);
-                    info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+                    info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
                     info.put("unit", infoItem.getString("unit"));
                     info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap ));
@@ -1995,7 +1998,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         if(!StringUtil.isNull(keyword)){
         	 keywords = keyword.split(" ");
         }
-        String equipType = StringUtil.getEquipOrSystemCodeFromId(equipId, CommonConst.tag_dict_equip, dataPlatBasePath);
+        String equipType = getEquipOrSystemCodeFromId(equipId, SopCommonConst.tag_dict_equip, dataPlatBasePath);
         String url = getDataPlatDictPath(DataRequestPathUtil.dataPlat_infoPoint_special, equipType);
 //        String infoStr = httpGetRequest(url);
         String infoStr = httpPostRequestDataPlatform(url,"{}");
@@ -2009,9 +2012,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
             infos = new JSONArray();
             for(int i=0; i<infoArray.size(); i++){
                 infoItem = infoArray.getJSONObject(i);
-                code = infoItem.getString(CommonConst.info_name_info_point_code);
-                name = infoItem.getString(CommonConst.info_name_info_point_name);
-                baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+                code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+                name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+                baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
                 boolean flag = true;
                 if(keywords != null){
                 	for(String key : keywords){
@@ -2024,11 +2027,11 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 	continue;
                 }
                 id = "equip"+"_" +equipType+"_"+code;
-                if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+                if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
                     info = new JSONObject();
                     info.put("id", id);
                     info.put("code", code);
-                    info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+                    info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
                     info.put("unit", infoItem.getString("unit"));
                     info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap ));
@@ -2062,9 +2065,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
             infos = new JSONArray();
             for(int i=0; i<infoArray.size(); i++){
                 infoItem = infoArray.getJSONObject(i);
-                code = infoItem.getString(CommonConst.info_name_info_point_code);
-                name = infoItem.getString(CommonConst.info_name_info_point_name);
-                baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+                code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+                name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+                baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
                 boolean flag = true;
                 if(keywords != null){
                 	for(String key : keywords){
@@ -2077,11 +2080,11 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 	continue;
                 }
                 id = "system"+"_" +systemType+"_"+code;
-                if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+                if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
                     info = new JSONObject();
                     info.put("id", id);
                     info.put("code", code);
-                    info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+                    info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
                     info.put("unit", infoItem.getString("unit"));
                     info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap ));
@@ -2116,9 +2119,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
             infos = new JSONArray();
             for(int i=0; i<infoArray.size(); i++){
                 infoItem = infoArray.getJSONObject(i);
-                code = infoItem.getString(CommonConst.info_name_info_point_code);
-                name = infoItem.getString(CommonConst.info_name_info_point_name);
-                baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+                code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+                name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+                baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
                 boolean flag = true;
                 if(keywords != null){
                 	for(String key : keywords){
@@ -2131,11 +2134,11 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 	continue;
                 }
                 id = "shaft"+"_" +type+"_"+code;
-                if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+                if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
                     info = new JSONObject();
                     info.put("id", id);
                     info.put("code", code);
-                    info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+                    info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
                     info.put("unit", infoItem.getString("unit"));
                     info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap ));
@@ -2170,9 +2173,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     		infos = new JSONArray();
     		for(int i=0; i<infoArray.size(); i++){
     			infoItem = infoArray.getJSONObject(i);
-    			code = infoItem.getString(CommonConst.info_name_info_point_code);
-    			name = infoItem.getString(CommonConst.info_name_info_point_name);
-    			baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+    			code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+    			name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+    			baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
     			boolean flag = true;
     			if(keywords != null){
     				for(String key : keywords){
@@ -2185,11 +2188,11 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     				continue;
     			}
     			id = "build_0_"+code;
-    			if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+    			if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
     				info = new JSONObject();
     				info.put("id", id);
     				info.put("code", code);
-    				info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+    				info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
                     info.put("unit", infoItem.getString("unit"));
                     info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap ));
@@ -2223,9 +2226,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     		infos = new JSONArray();
     		for(int i=0; i<infoArray.size(); i++){
     			infoItem = infoArray.getJSONObject(i);
-    			code = infoItem.getString(CommonConst.info_name_info_point_code);
-    			name = infoItem.getString(CommonConst.info_name_info_point_name);
-    			baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+    			code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+    			name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+    			baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
     			boolean flag = true;
     			if(keywords != null){
     				for(String key : keywords){
@@ -2238,15 +2241,15 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     				continue;
     			}
     			id = "floor"+"_0_"+code;
-    			if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+    			if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
     				info = new JSONObject();
     				info.put("id", id);
     				info.put("code", code);
-    				info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+    				info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
 					info.put("unit", infoItem.getString("unit"));
 	                info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     if ("FloorIdentity".equals(code)) {
-                        info.put("cmpt_data", dictionaryService.queryDataSourceById(CommonConst.JsonToData.Flooridentity));
+                        info.put("cmpt_data", dictionaryService.queryDataSourceById(SopCommonConst.JsonToData.Flooridentity));
                     } else {
                         info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap));
                     }
@@ -2277,8 +2280,8 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     		infos = new JSONArray();
     		for(int i=0; i<infoArray.size(); i++){
     			infoItem = infoArray.getJSONObject(i);
-    			code = infoItem.getString(CommonConst.info_name_info_point_code);
-    			name = infoItem.getString(CommonConst.info_name_info_point_name);
+    			code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+    			name = infoItem.getString(SopCommonConst.info_name_info_point_name);
     			boolean flag = true;
     			if(keywords != null){
     				for(String key : keywords){
@@ -2291,11 +2294,11 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     				continue;
     			}
     			id = "space_0_"+code;
-    			if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+    			if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
     				info = new JSONObject();
     				info.put("id", id);
     				info.put("code", code);
-    				info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+    				info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
     				infos.add(info);
     			}
     		}
@@ -2325,9 +2328,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     		infos = new JSONArray();
     		for(int i=0; i<infoArray.size(); i++){
     			infoItem = infoArray.getJSONObject(i);
-    			code = infoItem.getString(CommonConst.info_name_info_point_code);
-    			name = infoItem.getString(CommonConst.info_name_info_point_name);
-    			baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+    			code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+    			name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+    			baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
     			boolean flag = true;
     			if(keywords != null){
     				for(String key : keywords){
@@ -2340,15 +2343,15 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
     				continue;
     			}
     			id = "space_0_"+code;
-    			if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+    			if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
     				info = new JSONObject();
     				info.put("id", id);
     				info.put("code", code);
-    				info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+    				info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
                     info.put("unit", infoItem.getString("unit"));
                     info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     if ("RoomFuncType".equals(code) || "ProjRoomFuncType".equals(code)) {
-                        info.put("cmpt_data", dictionaryService.queryDataSourceById(CommonConst.JsonToData.SpaceFunction));
+                        info.put("cmpt_data", dictionaryService.queryDataSourceById(SopCommonConst.JsonToData.SpaceFunction));
                     } else {
                         info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap ));
                     }
@@ -2383,9 +2386,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
             infos = new JSONArray();
             for(int i=0; i<infoArray.size(); i++){
                 infoItem = infoArray.getJSONObject(i);
-                code = infoItem.getString(CommonConst.info_name_info_point_code);
-                name = infoItem.getString(CommonConst.info_name_info_point_name);
-                baseCmpt = infoItem.getString(CommonConst.info_name_info_point_baseCmpt);
+                code = infoItem.getString(SopCommonConst.info_name_info_point_code);
+                name = infoItem.getString(SopCommonConst.info_name_info_point_name);
+                baseCmpt = infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt);
                 boolean flag = true;
                 if(keywords != null){
                 	for(String key : keywords){
@@ -2398,11 +2401,11 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
                 	continue;
                 }
                 id = "equip"+"_" +equipType+"_"+code;
-                if(infoPointCache.isShowInApp(id, infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+                if(infoPointCache.isShowInApp(id, infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
                     info = new JSONObject();
                     info.put("id", id);
                     info.put("code", code);
-                    info.put("name", infoItem.getString(CommonConst.info_name_info_point_name));
+                    info.put("name", infoItem.getString(SopCommonConst.info_name_info_point_name));
                     info.put("unit", infoItem.getString("unit"));
                     info.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(baseCmpt));
                     info.put("cmpt_data", getInfoPointCmptData(infoItem.get("dataSource"), info.getString("name"), cmptDataMap ));
@@ -2512,21 +2515,21 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
         results = resultJson.getJSONArray("Content");
         for(int i=0; i<results.size(); i++){
             result = results.getJSONObject(i);
-            infoDatas = result.getJSONObject(CommonConst.info_name_datas);
-            if(infoDatas.containsKey(CommonConst.info_name_local_name_project)){
-                localName = infoDatas.getString(CommonConst.info_name_local_name_project);
-            }else if(infoDatas.containsKey(CommonConst.info_name_local_name_build)){
-                localName = infoDatas.getString(CommonConst.info_name_local_name_build);
-            }else if(infoDatas.containsKey(CommonConst.info_name_local_name_floor)){
-                localName = infoDatas.getString(CommonConst.info_name_local_name_floor);
-            }else if(infoDatas.containsKey(CommonConst.info_name_local_name_space)){
-                localName = infoDatas.getString(CommonConst.info_name_local_name_space);
-            }else if(infoDatas.containsKey(CommonConst.info_name_local_name_equip)){
-                localName = infoDatas.getString(CommonConst.info_name_local_name_equip);
-            }else if(infoDatas.containsKey(CommonConst.info_name_local_name_system)){
-                localName = infoDatas.getString(CommonConst.info_name_local_name_system);
-            }else if(infoDatas.containsKey(CommonConst.info_name_local_name_shaft)){
-                localName = infoDatas.getString(CommonConst.info_name_local_name_shaft);
+            infoDatas = result.getJSONObject(SopCommonConst.info_name_datas);
+            if(infoDatas.containsKey(SopCommonConst.info_name_local_name_project)){
+                localName = infoDatas.getString(SopCommonConst.info_name_local_name_project);
+            }else if(infoDatas.containsKey(SopCommonConst.info_name_local_name_build)){
+                localName = infoDatas.getString(SopCommonConst.info_name_local_name_build);
+            }else if(infoDatas.containsKey(SopCommonConst.info_name_local_name_floor)){
+                localName = infoDatas.getString(SopCommonConst.info_name_local_name_floor);
+            }else if(infoDatas.containsKey(SopCommonConst.info_name_local_name_space)){
+                localName = infoDatas.getString(SopCommonConst.info_name_local_name_space);
+            }else if(infoDatas.containsKey(SopCommonConst.info_name_local_name_equip)){
+                localName = infoDatas.getString(SopCommonConst.info_name_local_name_equip);
+            }else if(infoDatas.containsKey(SopCommonConst.info_name_local_name_system)){
+                localName = infoDatas.getString(SopCommonConst.info_name_local_name_system);
+            }else if(infoDatas.containsKey(SopCommonConst.info_name_local_name_shaft)){
+                localName = infoDatas.getString(SopCommonConst.info_name_local_name_shaft);
             }
             idNameMap.put(result.getString("id"), localName);
         }
@@ -2580,7 +2583,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 		array = array == null ? new JSONArray() : array;
 		for(int i=0; i<array.size(); i++){
 			JSONObject item = array.getJSONObject(i);
-			map.put(item.getString("id"), item.getJSONObject(CommonConst.info_name_datas).getString(localName));
+			map.put(item.getString("id"), item.getJSONObject(SopCommonConst.info_name_datas).getString(localName));
 		}
 		return map;
 	}
@@ -3233,7 +3236,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 	public String queryFloorInfoPointByCode(String infoPointCode) throws Exception {
         if ("FloorIdentity".equals(infoPointCode)) {
             //获取楼层编码数据源
-            JSONArray jsonArray = dictionaryService.queryDataSourceById(CommonConst.JsonToData.Flooridentity);
+            JSONArray jsonArray = dictionaryService.queryDataSourceById(SopCommonConst.JsonToData.Flooridentity);
             return ToolsUtil.successJsonMsg(jsonArray);
         }
 		// 1.调用数据平台获取楼层信息点方法 http://localhost:8080/data-platform-3/infocode/query/floor
@@ -3386,7 +3389,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 			String objId = clazz.getString("obj_id");
 			String objType = clazz.getString("obj_type");
 			boolean containScopeFlag = false;
-			if (CommonConst.data_type_equip_class.equals(objType) && !StringUtil.isEmptyList(clazz, "space_scope")) {
+			if (SopCommonConst.data_type_equip_class.equals(objType) && !StringUtil.isEmptyList(clazz, "space_scope")) {
 				JSONObject spaceClazz = clazz.getJSONArray("space_scope").getJSONObject(0);
 				containScopeFlag = true;
 				objId = spaceClazz.getString("obj_id");
@@ -3436,7 +3439,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 			JSONObject equip = (JSONObject) object;
 			id2equip.put(equip.getString("obj_id"), equip);
 		}
-		String graphId = graphCache.getGraphIdByProjectIdAndGraph(projectId, CommonConst.graph_type_equip_in_space);
+		String graphId = graphCache.getGraphIdByProjectIdAndGraph(projectId, SopCommonConst.graph_type_equip_in_space);
 		for (Object object : spaceObjs) {
 			JSONObject space = (JSONObject) object;
 			String spaceId = space.getString("obj_id");
@@ -3460,9 +3463,9 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 	}
 
 	private JSONArray querySpaceOrEquipByType(String projectId, String id , String type) throws Exception {
-		if (CommonConst.data_type_equip_class.equals(type)) {
+		if (SopCommonConst.data_type_equip_class.equals(type)) {
 			return queryEquipByType(projectId, id);
-		}else if (CommonConst.data_type_space_class.equals(type)) {
+		}else if (SopCommonConst.data_type_space_class.equals(type)) {
 			return querySpaceByType(projectId, id);
 		}
 		return new JSONArray();
@@ -4055,7 +4058,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 				infoItem = infoArray.getJSONObject(i);
 				info = new JSONObject();
 				infoType = infoItem.getString("type");
-				if(CommonConst.tag_equip.equals(infoType)){
+				if(SopCommonConst.tag_equip.equals(infoType)){
 					//设备大类信息点
 					parents = new JSONArray();
 					infoPoint = new JSONObject();
@@ -4064,7 +4067,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 					parentIds = new JSONArray();
 					parentNames = new JSONArray();
 					parentId = infoItem.getString("major");
-					parentName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, parentId);
+					parentName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, parentId);
 					if(!StringUtil.isNull(parentId, parentName)) {
 						parentIds.add(parentId);
 						parentNames.add(parentName);
@@ -4090,7 +4093,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 					info.put("obj_type", "equip_class");
 					info.put("parents", parents);
 					info.put("info_point", infoPoint);
-				}else if(CommonConst.tag_system.equals(infoType)){
+				}else if(SopCommonConst.tag_system.equals(infoType)){
 					//系统大类信息点
 					parents = new JSONArray();
 					infoPoint = new JSONObject();
@@ -4099,7 +4102,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 					parentIds = new JSONArray();
 					parentNames = new JSONArray();
 					parentId = infoItem.getString("major");
-					parentName = dictionaryCache.getNameByTypeCode(CommonConst.dict_type_object_domain, parentId);
+					parentName = dictionaryCache.getNameByTypeCode(SopCommonConst.dict_type_object_domain, parentId);
 					if(!StringUtil.isNull(parentId, parentName)) {
 						parentIds.add(parentId);
 						parentNames.add(parentName);
@@ -4122,7 +4125,7 @@ public class ObjectServiceImpl extends BaseService implements IObjectService {
 					info.put("info_point", infoPoint);
 				}
 				if(info.containsKey("info_point")
-						&& infoPointCache.isShowInApp(info.getJSONObject("info_point").getString("id"), infoItem.getString(CommonConst.info_name_info_point_baseCmpt))){
+						&& infoPointCache.isShowInApp(info.getJSONObject("info_point").getString("id"), infoItem.getString(SopCommonConst.info_name_info_point_baseCmpt))){
 					infoPoint = info.getJSONObject("info_point");
 					infoPoint.put("cmpt", componentRelationCache.getAppComponentCodeByBaseCmptCode(infoItem.getString("inputMode")));
 				}

+ 46 - 43
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/ProjectSopServiceImpl.java

@@ -8,14 +8,17 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.persagy.common.exception.BusinessException;
 import com.persagy.fm.common.constant.enums.BoolEnum;
+import com.persagy.fm.common.constant.enums.ResultEnum;
 import com.persagy.fm.common.constant.enums.ValidEnum;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.fm.sop.constant.SopQueryConst;
 import com.persagy.fm.sop.entity.*;
@@ -44,7 +47,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.validation.Valid;
 import java.text.ParseException;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -81,7 +83,8 @@ public class ProjectSopServiceImpl implements IProjectSopService {
     private final ProjectCache projectCache;
     private final IGeneralDictService generalDictService;
     private final IDictionaryService dictionaryService;
- 	private GraphCache graphCache;
+ 	private final GraphCache graphCache;
+ 	private final BaseService baseService;
     @Value("${data.platform.basePath}")
     public String dataPlatBasePath;
 
@@ -701,9 +704,9 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         // 项目id
         Set<String> projectIds = new HashSet<>();
         projectIds.add(queryPublishedListVo.getProjectId());
-        if (!CommonConst.group_sop_id.equals(queryPublishedListVo.getProjectId())
+        if (!SopCommonConst.group_sop_id.equals(queryPublishedListVo.getProjectId())
              && (CollUtil.isEmpty(queryPublishedListVo.getSignCodes()) || queryPublishedListVo.getSignCodes().contains("public"))){
-            projectIds.add(CommonConst.group_sop_id);
+            projectIds.add(SopCommonConst.group_sop_id);
         }
         queryWrapper.in(Sop::getProjectId,projectIds);
         queryWrapper.eq(Sop::getValid,true);
@@ -712,22 +715,22 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         String updateTimeFrom = queryPublishedListVo.getUpdateTimeFrom();
         String updateTimeTo = queryPublishedListVo.getUpdateTimeTo();
         if (StrUtil.isNotBlank(updateTimeFrom)) {
-            queryWrapper.ge(Sop::getUpdateTime,DateUtil.transferDateFormat(updateTimeFrom, CommonConst.date_format_show, CommonConst.date_format_save));
+            queryWrapper.ge(Sop::getUpdateTime,DateUtil.transferDateFormat(updateTimeFrom, SopCommonConst.date_format_show, SopCommonConst.date_format_save));
         }
         if (StrUtil.isNotBlank(updateTimeTo)) {
-            queryWrapper.le(Sop::getUpdateTime,DateUtil.transferDateFormat(updateTimeTo, CommonConst.date_format_show, CommonConst.date_format_save));
+            queryWrapper.le(Sop::getUpdateTime,DateUtil.transferDateFormat(updateTimeTo, SopCommonConst.date_format_show, SopCommonConst.date_format_save));
         }
         // SOP名称
         if (StrUtil.isNotBlank(queryPublishedListVo.getSopName())) {
             queryWrapper.like(Sop::getSopName, queryPublishedListVo.getSopName());
         }
         // ========2.移除待修订状态sop=======
-        if (!CommonConst.group_sop_id.equals(queryPublishedListVo.getProjectId())) {
+        if (!SopCommonConst.group_sop_id.equals(queryPublishedListVo.getProjectId())) {
             queryWrapper.and(wrapper->{
-                wrapper.or(subWrapper->subWrapper.ne(Sop::getProjectId,CommonConst.group_sop_id));
+                wrapper.or(subWrapper->subWrapper.ne(Sop::getProjectId,SopCommonConst.group_sop_id));
                 wrapper.or(subWrapper->{
                     subWrapper.ne(Sop::getPublishStatus,SopPublishStatusEnum.REVISE.getType());
-                    subWrapper.eq(Sop::getProjectId, CommonConst.group_sop_id);
+                    subWrapper.eq(Sop::getProjectId, SopCommonConst.group_sop_id);
                 });
             });
             String rootProjFuncType = objectService.queryRootProjFuncTypeById(queryPublishedListVo.getProjectId());
@@ -1038,7 +1041,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         relSopIds.removeAll(publishedSopIds);
         removeRefFromStep(sopBean,relSopIds,needRemoveCellIds);
         if (CollUtil.isEmpty(sopBean.getSteps())) {
-            return Collections.singletonList(CommonConst.remind_recovery_failed);
+            return Collections.singletonList(SopCommonConst.remind_recovery_failed);
         }
         //处理对象
         //查询所有对象ID
@@ -1186,10 +1189,10 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         String updateTimeFrom = queryPublishedSelVo.getUpdateTimeFrom();
         String updateTimeTo = queryPublishedSelVo.getUpdateTimeTo();
         if (!StringUtil.isNull(updateTimeFrom)) {
-            queryWrapper.ge(Sop.UPDATE_TIME, DateUtil.transferDateFormat(updateTimeFrom, CommonConst.date_format_show, CommonConst.date_format_save));
+            queryWrapper.ge(Sop.UPDATE_TIME, DateUtil.transferDateFormat(updateTimeFrom, SopCommonConst.date_format_show, SopCommonConst.date_format_save));
         }
         if (!StringUtil.isNull(updateTimeTo)) {
-            queryWrapper.le(Sop.UPDATE_TIME, DateUtil.transferDateFormat(updateTimeTo, CommonConst.date_format_show, CommonConst.date_format_save));
+            queryWrapper.le(Sop.UPDATE_TIME, DateUtil.transferDateFormat(updateTimeTo, SopCommonConst.date_format_show, SopCommonConst.date_format_save));
         }
         if (StrUtil.isNotBlank(queryPublishedSelVo.getSopName())) {
             queryWrapper.like(Sop.SOP_NAME, queryPublishedSelVo.getSopName());
@@ -1197,7 +1200,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         List<Sop> sops = sopService.list(queryWrapper);
         //========2.移除待修订状态sop=======
         removeReviseSop(sops);
-        if (!CommonConst.group_sop_id.equals(queryPublishedSelVo.getProjectId())) {
+        if (!SopCommonConst.group_sop_id.equals(queryPublishedSelVo.getProjectId())) {
             String rootProjFuncType = objectService.queryRootProjFuncTypeById(queryPublishedSelVo.getProjectId());
             removeWithoutProJFuncType(sops, rootProjFuncType);
         }
@@ -1266,7 +1269,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                         .version(refSop.getVersion())
                         .sopType(refSop.getSopType())
                         .statusExplain(getSopStatus(refSop.getSopStatus(), refSop.getPublishStatus()))
-                        .updateTime(DateUtil.transferDateFormat(refSop.getUpdateTime(), CommonConst.date_format_save, CommonConst.date_format_show))
+                        .updateTime(DateUtil.transferDateFormat(refSop.getUpdateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show))
                         .build();
                 if (!SopCommonConst.GROUP_SOP_ID.equals(refSop.getProjectId())){
                     sopListVo.setProjectId(refSop.getProjectId());
@@ -1431,7 +1434,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                     .msgId(sopReviseMsg.getSopId())
                     .content(sopReviseMsg.getContent())
                     .reviseObjId(sopReviseMsg.getObjId())
-                    .createTime(DateUtil.transferDateFormat(sopReviseMsg.getCreateTime(), CommonConst.date_format_save, CommonConst.date_format_show))
+                    .createTime(DateUtil.transferDateFormat(sopReviseMsg.getCreateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show))
                     .build());
         }
         return result;
@@ -1478,7 +1481,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                 .version(destSop.getVersion())
                 .versionExplain(destSop.getVersionExplain())
                 .currentVersion(true)
-                .updateTime(DateUtil.transferDateFormat(destSop.getUpdateTime(), CommonConst.date_format_save, CommonConst.date_format_show))
+                .updateTime(DateUtil.transferDateFormat(destSop.getUpdateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show))
                 .build();
         if (StrUtil.isNotBlank(destSop.getOperatorId())
                 && StrUtil.isNotBlank(destSop.getOperatorName())){
@@ -1495,7 +1498,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         for (SopHis sopHis : sopHisList) {
             result.add(SopHisListVo.builder()
                     .sopId(sopHis.getSopId())
-                    .updateTime(DateUtil.transferDateFormat(sopHis.getUpdateTime(), CommonConst.date_format_save, CommonConst.date_format_show))
+                    .updateTime(DateUtil.transferDateFormat(sopHis.getUpdateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show))
                     .currentVersion(false)
                     .versionExplain(sopHis.getVersionExplain())
                     .version(sopHis.getVersion())
@@ -1870,7 +1873,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
             return ToolsUtil.successJsonMsg(publishedListVo.getContent());
         }
         String project_id = jsonObject.getString("project_id");
-        project_id = project_id == null ? CommonConst.group_sop_id : project_id;
+        project_id = project_id == null ? SopCommonConst.group_sop_id : project_id;
 //    	String secret = projectCache.getProjectSecretById(project_id);
         List<String> lastSopIds = null;
         if (!CollectionUtils.isEmpty(fitObjIds)) {
@@ -1888,7 +1891,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                 relObjs.add(createObj(obj_id, obj_type));
                 JSONArray equip_model_ids = new JSONArray();
                 //获取该建筑下的所有楼层,空间,设备
-                if(CommonConst.data_type_build.equals(obj_type)) {
+                if(SopCommonConst.data_type_build.equals(obj_type)) {
                     //				obj_ids.add(obj_id);
                     String obj = objectService.queryObjById(obj_id, project_id);
                     JSONObject objJson = JSONObject.parseObject(obj);
@@ -1935,7 +1938,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                                 }
                             }
                             if (equipIds!=null && equipIds.size()!=0) {
-                                JSONArray equipCodes = StringUtil.getEquipCodeFromEquipIds(project_id, equipIds,dataPlatBasePath);
+                                JSONArray equipCodes = baseService.getEquipCodeFromEquipIds(project_id, equipIds,dataPlatBasePath);
                                 //							obj_ids.addAll(equipCodes);
                                 for (int j = 0; j < equipCodes.size(); j++) {
                                     relObjs.add(createObj(equipCodes.getString(j), "equip_class"));
@@ -1943,7 +1946,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                             }
                         }
                     }
-                } else if(CommonConst.data_type_floor.equals(obj_type)) {
+                } else if(SopCommonConst.data_type_floor.equals(obj_type)) {
 
                     //				obj_ids.add(obj_id);
                     String obj = objectService.queryObjById(obj_id, project_id);
@@ -2000,7 +2003,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                                     equipIds.add(idJson);
                                 }
                                 if (equipIds!=null && equipIds.size()!=0) {
-                                    JSONArray EquipCodes = StringUtil.getEquipCodeFromEquipIds(project_id, equipIds, dataPlatBasePath);
+                                    JSONArray EquipCodes = baseService.getEquipCodeFromEquipIds(project_id, equipIds, dataPlatBasePath);
                                     //								obj_ids.addAll(EquipCodes);
                                     for (int j = 0; j < EquipCodes.size(); j++) {
                                         relObjs.add(createObj(EquipCodes.getString(j), "equip_class"));
@@ -2009,7 +2012,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                             }
                         }
                     }
-                }  else if(CommonConst.data_type_shaft.equals(obj_type)) {
+                }  else if(SopCommonConst.data_type_shaft.equals(obj_type)) {
                     //				obj_ids.add(obj_id);
                     String obj = objectService.queryObjById(obj_id, project_id);
                     JSONObject objJson = JSONObject.parseObject(obj);
@@ -2051,7 +2054,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                                 equipIds.add(idJson);
                             }
                             if (equipIds != null && equipIds.size() != 0) {
-                                JSONArray EquipCodes = StringUtil.getEquipCodeFromEquipIds(project_id, equipIds, dataPlatBasePath);
+                                JSONArray EquipCodes = baseService.getEquipCodeFromEquipIds(project_id, equipIds, dataPlatBasePath);
                                 //							obj_ids.addAll(EquipCodes);
                                 for (int j = 0; j < EquipCodes.size(); j++) {
                                     relObjs.add(createObj(EquipCodes.getString(j), "equip_class"));
@@ -2059,7 +2062,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                             }
                         }
                     }
-                }else if(CommonConst.data_type_space.equals(obj_type)) {
+                }else if(SopCommonConst.data_type_space.equals(obj_type)) {
                     JSONArray criterias = new JSONArray();
                     JSONObject criteria = new JSONObject();
                     criteria.put("to_id", obj_id);
@@ -2081,7 +2084,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                             equipIds.add(idJson);
                         }
                         if (equipIds!=null && equipIds.size()!=0) {
-                            JSONArray EquipCodes = StringUtil.getEquipCodeFromEquipIds(project_id, equipIds, dataPlatBasePath);
+                            JSONArray EquipCodes = baseService.getEquipCodeFromEquipIds(project_id, equipIds, dataPlatBasePath);
                             //						obj_ids.addAll(EquipCodes);
                             for (int j = 0; j < EquipCodes.size(); j++) {
                                 relObjs.add(createObj(EquipCodes.getString(j), "equip_class"));
@@ -2105,10 +2108,10 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                             }
                         }
                     }
-                } else if(CommonConst.data_type_system.equals(obj_type)) {
+                } else if(SopCommonConst.data_type_system.equals(obj_type)) {
                     //系统id
                     //系统类型id
-                    String systemClass = StringUtil.getEquipOrSystemCodeFromId(obj_id, CommonConst.tag_dict_sytstem, dataPlatBasePath);
+                    String systemClass = baseService.getEquipOrSystemCodeFromId(obj_id, SopCommonConst.tag_dict_sytstem, dataPlatBasePath);
                     relObjs.add(createObj(systemClass, "system_class"));
                     //系统
                     JSONObject params = new JSONObject();
@@ -2131,7 +2134,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                             for (int j = 0; j < queryConstents.size(); j++) {
                                 JSONObject queryConstent = queryConstents.getJSONObject(j);
                                 String id = queryConstent.getString("id");
-                                String equipClass = StringUtil.getEquipOrSystemCodeFromId(id, CommonConst.tag_dict_equip, dataPlatBasePath);
+                                String equipClass = baseService.getEquipOrSystemCodeFromId(id, SopCommonConst.tag_dict_equip, dataPlatBasePath);
                                 //设备类型id
                                 if(!obj_ids.contains(equipClass)) {
                                     obj_ids.add(equipClass);
@@ -2143,9 +2146,9 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                             }
                         }
                     }
-                } else if(CommonConst.data_type_equip.equals(obj_type)) {
+                } else if(SopCommonConst.data_type_equip.equals(obj_type)) {
                     //设备id
-                    String equipClass = StringUtil.getEquipOrSystemCodeFromId(obj_id, CommonConst.tag_dict_equip, dataPlatBasePath);
+                    String equipClass = baseService.getEquipOrSystemCodeFromId(obj_id, SopCommonConst.tag_dict_equip, dataPlatBasePath);
                     //设备类型id
                     if(!obj_ids.contains(equipClass)) {
                         obj_ids.add(equipClass);
@@ -2206,10 +2209,10 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                wrapper.in(Sop::getSopId,querySopIds);
                wrapper.eq(Sop::getProjectId,queryProjectId);
             });
-            if (!CommonConst.group_sop_id.equals(project_id)){
+            if (!SopCommonConst.group_sop_id.equals(project_id)){
                 sopLambdaQueryWrapper.or(wrapper->{
                     wrapper.in(Sop::getSopId,querySopIds);
-                    wrapper.eq(Sop::getProjectId,CommonConst.group_sop_id);
+                    wrapper.eq(Sop::getProjectId,SopCommonConst.group_sop_id);
                 });
             }
             sopLambdaQueryWrapper.in(Sop::getSopId,JSONArray.parseArray(JSON.toJSONString(lastSopIds)).toJavaList(String.class));
@@ -2218,7 +2221,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
             List<SopBean> sopBeans = fillSopDetail(sopList);
             List<SopBean> sopBeanList = CollUtil.sort(sopBeans, Comparator.comparing(SopBean::getCreateTime));
             String rootProjFuncType = null;
-            if (!CommonConst.group_sop_id.equals(project_id)) {
+            if (!SopCommonConst.group_sop_id.equals(project_id)) {
                 rootProjFuncType = objectService.queryRootProjFuncTypeById(project_id);
             }
             for (SopBean sopBean : sopBeanList) {
@@ -3148,7 +3151,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
 		}
     	//=====竖井查询====
     	if (!shaftIds.isEmpty()) {
-    		String graphId = graphCache.getGraphIdByProjectIdAndGraph(projectId, CommonConst.graph_type_shaft_and_building);
+    		String graphId = graphCache.getGraphIdByProjectIdAndGraph(projectId, SopCommonConst.graph_type_shaft_and_building);
     		JSONObject relation ;
     		for (Object object : shaftIds) {
     			relation = objectService.queryRelation(projectId, null, (String) object, null, graphId, "1");
@@ -3514,7 +3517,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                 String refSopId = refSop.getSopId();
                 log.error("移除作废的引用sop后步骤为空,作废该sop:"+refSopId);
                 QueryDestroySopVo destroySopVo = QueryDestroySopVo.builder()
-                        .operator(OperatorBean.builder().id(SopQueryConst.SYSTEM_ID).name("系统").build())
+                        .operator(OperatorBean.builder().id(SopCommonConst.SYSTEM_ID).name("系统").build())
                         .build();
                 destroySopVo.setSopId(refSopId);
                 destroySopVo.setUserId(userId);
@@ -3743,7 +3746,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                     .sopName(sop.getSopName())
                     .version(sop.getVersion())
                     .scopes(scopes)
-                    .updateTime(DateUtil.transferDateFormat(sop.getUpdateTime(), CommonConst.date_format_save, CommonConst.date_format_show))
+                    .updateTime(DateUtil.transferDateFormat(sop.getUpdateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show))
                     .build();
             if (!destoryFlag) {
                 sopBean.setSopStatus(sop.getSopStatus());
@@ -3820,7 +3823,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                     .sopName(sopName)
                     .version(sopEdit.getVersion())
                     .scopes(scopes)
-                    .updateTime(DateUtil.transferDateFormat(sopEdit.getUpdateTime(), CommonConst.date_format_save, CommonConst.date_format_show))
+                    .updateTime(DateUtil.transferDateFormat(sopEdit.getUpdateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show))
                     .build();
             if (!destoryFlag) {
                 sopBean.setSopStatus(sopEdit.getSopStatus());
@@ -4021,7 +4024,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
                     .collect(Collectors.toList());
             for (int i = 0, length = sopBeans.size(); i < length; i++) {
                 sop = sopBeans.get(i);
-                sop.setUpdateTime(DateUtil.transferDateFormat(sop.getUpdateTime(), CommonConst.date_format_save, CommonConst.date_format_show));
+                sop.setUpdateTime(DateUtil.transferDateFormat(sop.getUpdateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show));
                 if ("2".equals(queryType)) {
                     sop.setSopType(sop.getSopType());
                     sop.setStepCount(sop.getSteps().size());
@@ -4070,7 +4073,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
      */
     private SopSignBean getSopSign(SopBean sopBean, String projectId) {
         SopSignBean sign = null;
-        if (CommonConst.group_sop_id.equals(projectId)) {
+        if (SopCommonConst.group_sop_id.equals(projectId)) {
             String publishStatus = sopBean.getPublishStatus();
             if (SopConst.PUBLISH_STATUS_REVISE.equals(publishStatus)) {
                 sign = SopSignBean.builder().code("revise").name("待修订").build();
@@ -4231,7 +4234,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         for (int i = 0; i < sops.size(); i++) {
             Sop sop = sops.get(i);
             if (SopConst.PUBLISH_STATUS_REVISE.equals(sop.getPublishStatus())
-                    && CommonConst.group_sop_id.equals(sop.getProjectId())) {
+                    && SopCommonConst.group_sop_id.equals(sop.getProjectId())) {
                 sops.remove(i);
                 i--;
             }
@@ -5238,7 +5241,7 @@ public class ProjectSopServiceImpl implements IProjectSopService {
         for (SopBean sopBean : sopBeans) {
             sopBean.setStepCount(sopBean.getSteps().size());
             sopBean.setStautsExplain(getSopStatus(sopBean.getSopStatus(),sopBean.getPublishStatus()));
-            sopBean.setUpdateTime(DateUtil.transferDateFormat(sopBean.getUpdateTime(), CommonConst.date_format_save, CommonConst.date_format_show));
+            sopBean.setUpdateTime(DateUtil.transferDateFormat(sopBean.getUpdateTime(), SopCommonConst.date_format_save, SopCommonConst.date_format_show));
             map.put(sopBean.getSopId(), sopBean);
         }
         return map;

+ 4 - 1
fm-sop/src/main/java/com/persagy/fm/sop/service/impl/WoFlowPlanServiceImpl.java

@@ -3,6 +3,9 @@ package com.persagy.fm.sop.service.impl;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.fm.sop.service.IObjectService;
 import com.persagy.fm.sop.service.IWoFlowPlanService;
 import com.persagy.old.cache.GraphCache;
@@ -223,7 +226,7 @@ public class WoFlowPlanServiceImpl extends BaseService implements IWoFlowPlanSer
 			skips = JSONObject.parseObject(content.getJSONObject(0).getString("skips"));
 			skips = skips == null ? new JSONObject() : skips;
 			if (!StringUtil.isNull(skips, "resetTime") && new Date()
-					.after(DateUtil.parseDate(CommonConst.date_format_save, skips.getString("resetTime")))) {
+					.after(DateUtil.parseDate(SopCommonConst.date_format_save, skips.getString("resetTime")))) {
 				skips.clear();
 			}
 		}

+ 0 - 140
fm-sop/src/main/java/com/persagy/fm/sop/utils/OldResponseResultUtil.java

@@ -18,146 +18,6 @@ import java.util.List;
  */
 public class OldResponseResultUtil {
 	
-	public static final String RESP_CODE_KEY = "respCode";
-	public static final String RESP_CONTENT_KEY = "content";
-
-	public static final String SUCCESS_CODE = ResponseCode.A00000.getCode();
-	public static final String FAILURE_CODE = ResponseCode.A10000.getCode();
-	
-	/**
-	 * 判断是否响应成功, respCode=00000
-	 */
-	public static boolean isSuccess(String resultJson) {
-		if (StringUtil.isBlank(resultJson)) {
-			return false;
-		}
-		try {
-			return isSuccess(JSONObject.parseObject(resultJson));
-		} catch (Exception e) {
-		}
-		return false;
-	}
-	
-	/**
-	 * 判断是否响应成功, respCode=00000
-	 */
-	public static boolean isSuccess(JSONObject jsonObject) {
-		if (jsonObject == null) {
-			return false;
-		}
-		if (SUCCESS_CODE.equals(jsonObject.getString(RESP_CODE_KEY))) {
-			return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * 判断是否响应成功, respCode=00000
-	 */
-	public static boolean isSuccess(ResponseResult result) {
-		if (result == null) {
-			return false;
-		}
-		if (SUCCESS_CODE.equals(result.getRespCode())) {
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * 判断响应是否失败
-	 */
-	public static boolean isError(String resultJson) {
-		return !isSuccess(resultJson);
-	}
-	/**
-	 * 判断响应是否失败
-	 */
-	public static boolean isError(JSONObject jsonObject) {
-		return !isSuccess(jsonObject);
-	}
-	/**
-	 * 判断响应是否失败
-	 */
-	public static boolean isError(ResponseResult result) {
-		return !isSuccess(result);
-	}
-
-	/**
-	 * 获取响应体对象
-	 *
-	 * @param resultJson
-	 * @return
-	 */
-	public static ResponseResult convertResponse(String resultJson) {
-		if (StringUtil.isBlank(resultJson)) {
-			return null;
-		}
-		try {
-			return JSONObject.parseObject(resultJson, ResponseResult.class);
-		} catch (Exception e) {
-		}
-		return null;
-	}
-
-	/**
-	 * 获取响应体中content内容所表示的class对象
-	 *
-	 * @param resultJson
-	 * @return
-	 */
-	public static Class<?> convertResponse(String resultJson, Class<?> clazz) {
-		JSONObject jsonObject = toJSONObject(resultJson);
-		return (Class<?>)jsonObject.toJavaObject(clazz);
-	}
-
-	/**
-	 * 获取响应体中content内容所表示的集合对象
-	 *
-	 * @param resultJson
-	 * @return
-	 */
-	public static Class<?>[] convertResponse(String resultJson, Class<?>[] clazz) {
-		JSONArray jsonArray = toJSONArray(resultJson);
-		return (Class<?>[]) jsonArray.toArray(clazz);
-	}
-
-
-	/**
-	 * 成功响应才会返回content
-	 *
-	 * @param resultJson
-	 * @return 此方法不会返回null
-	 */
-	public static JSONObject toJSONObject(String resultJson) {
-		if (StringUtil.isBlank(resultJson)) {
-			return new JSONObject();
-		}
-		JSONObject jsonObject = JSONObject.parseObject(resultJson);
-		if (isSuccess(jsonObject)) {
-			return jsonObject.getJSONObject(RESP_CONTENT_KEY);
-		}
-		return new JSONObject();
-	}
-
-	/**
-	 * 成功响应才会返回content
-	 *
-	 * @param resultJson
-	 * @return 此方法不会返回null
-	 */
-	public static JSONArray toJSONArray(String resultJson) {
-		if (StringUtil.isBlank(resultJson)) {
-			return new JSONArray();
-		}
-		JSONObject jsonObject = JSONObject.parseObject(resultJson);
-		if (isSuccess(jsonObject)) {
-			return jsonObject.getJSONArray(RESP_CONTENT_KEY);
-		}
-		return new JSONArray();
-	}
-
-
 	public static OldResponseResult<Void> successResult() {
 		OldResponseResult<Void> result = new OldResponseResult<>();
 		result.setRespCode(ResponseCode.A00000.getCode());

+ 1 - 1
fm-sop/src/main/java/com/persagy/old/cache/ComponentRelationCache.java

@@ -1,8 +1,8 @@
 package com.persagy.old.cache;
 
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
 import com.persagy.old.common.RedisConstant;
-import com.persagy.old.common.StringUtil;
 import org.apache.log4j.Logger;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;

+ 1 - 1
fm-sop/src/main/java/com/persagy/old/cache/GraphCache.java

@@ -1,9 +1,9 @@
 package com.persagy.old.cache;
 
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
 import com.persagy.old.common.DataRequestPathUtil;
 import com.persagy.old.common.RedisConstant;
-import com.persagy.old.common.StringUtil;
 import com.persagy.old.dao.DBConst;
 import com.persagy.fm.sop.service.BaseService;
 import org.apache.log4j.Logger;

+ 1 - 1
fm-sop/src/main/java/com/persagy/old/cache/InfoPointCache.java

@@ -1,8 +1,8 @@
 package com.persagy.old.cache;
 
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
 import com.persagy.old.common.RedisConstant;
-import com.persagy.old.common.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;

+ 4 - 4
fm-sop/src/main/java/com/persagy/old/cache/ProjectCache.java

@@ -1,9 +1,9 @@
 package com.persagy.old.cache;
 
 import com.alibaba.fastjson.JSONObject;
-import com.persagy.old.common.CommonConst;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.old.common.RedisConstant;
-import com.persagy.old.common.StringUtil;
 import org.apache.log4j.Logger;
 import org.springframework.data.redis.core.RedisOperations;
 import org.springframework.stereotype.Component;
@@ -30,12 +30,12 @@ public class ProjectCache  {
 
     public String getProjectNameById(String projectId){
 
-        return getProjectById(projectId).getString(CommonConst.info_name_local_name_project);
+        return getProjectById(projectId).getString(SopCommonConst.info_name_local_name_project);
     }
 
     public String getProjLocalIDById(String projectId){
 
-        return getProjectById(projectId).getString(CommonConst.info_name_local_id_project);
+        return getProjectById(projectId).getString(SopCommonConst.info_name_local_id_project);
     }
 
     /**

+ 0 - 145
fm-sop/src/main/java/com/persagy/old/common/CommonConst.java

@@ -1,145 +0,0 @@
-package com.persagy.old.common;
-
-/**
- * Created by guosongchao on 2017/8/17.
- */
-public class CommonConst {
-    //通用sop的项目ID(默认)
-    public final static String group_sop_id = "group_sop_id";
-    //时间格式-显示
-    public final static String date_format_show = "yyyy-MM-dd HH:mm:ss";
-    //时间格式-存储
-    public final static String date_format_save = "yyyyMMddHHmmss";
-
-    //数据字典类型-专业、系统大类、设备大类
-    public final static String dict_type_object_domain = "domain_require";
-    //数据字典类型-信息点
-    public final static String dict_type_info_point = "info_point";
-
-    //字段名称-数据平台
-    public final static String info_name_datas = "infos";
-    //字段名称-本地名称-项目
-    public final static String info_name_local_name_project = "ProjLocalName";
-    //字段名称-本地名称-项目
-    public final static String info_name_local_id_project = "ProjLocalID";
-    //字段名称-本地名称-建筑
-    public final static String info_name_local_name_build = "BuildLocalName";
-    //字段名称-本地编码-建筑
-    public final static String info_name_local_id_build = "BuildLocalID";
-    //字段名称-本地名称-楼层
-    public final static String info_name_local_name_floor = "FloorLocalName";
-    //字段名称-本地编码-楼层
-    public final static String info_name_local_id_floor = "FloorLocalID";
-    //字段名称-本地编码-竖井
-    public final static String info_name_local_id_shaft = "ShaftLocalID";
-    //字段名称-本地编码-竖井
-    public final static String info_name_local_name_shaft = "ShaftLocalName";
-    //字段名称-本地名称-空间
-    public final static String info_name_local_name_space = "RoomLocalName";
-    //字段名称-本地编码-空间
-    public final static String info_name_local_id_space = "RoomLocalID";
-    //字段名称-本地名称-系统
-    public final static String info_name_local_name_system = "SysLocalName";
-    //字段名称-本地编码-系统
-    public final static String info_name_local_id_system = "SysLocalID";
-    //字段名称-本地名称-设备
-    public final static String info_name_local_name_equip = "EquipLocalName";
-    //字段名称-本地编码-设备
-    public final static String info_name_local_id_equip = "EquipLocalID";
-    //字段名称-信息点-code
-    public final static String info_name_info_point_code = "infoPointCode";
-    //字段名称-信息点-name
-    public final static String info_name_info_point_name = "infoPointName";
-  //字段名称-信息点-输入方式(原始组件)
-    public final static String info_name_info_point_baseCmpt = "inputMode";
-
-    //关系-关联code
-    public final static String relation_from_id = "from_id";
-    //关系-被关联code
-    public final static String relation_to_id = "to_id";
-
-    //图类型-设备所在空间
-    public final static String graph_type_equip_in_space = "EquipinSpace";
-    //图类型-设备服务空间
-    public final static String graph_type_equip_service_space = "EquipforSpace";
-    //图类型-系统包含设备
-    public final static String graph_type_system_contain_equip = "SystemEquip";
-    //竖井关联的建筑
-    public final static String graph_type_shaft_and_building = "ShaftandBuilding";
-    
-    //关系类型-设备所在空间
-    public final static String relation_type_equip_in_space = "1";
-    //关系类型-设备服务空间
-    public final static String relation_type_equip_service_space = "1";
-    //关系类型-系统包含设备
-    public final static String relation_type_system_contain_equip = "1";
-
-    //数据类型-建筑
-    public final static String data_type_build = "build";
-    //数据类型-楼层
-    public final static String data_type_floor = "floor";
-    //数据类型-空间
-    public final static String data_type_space = "space";
-    //数据类型-系统
-    public final static String data_type_system = "system";
-    //数据类型-设备
-    public final static String data_type_equip = "equip";
-    //数据类型-系统大类
-    public final static String data_type_system_class = "system_class";
-    //数据类型-设备大类
-    public final static String data_type_equip_class = "equip_class";
-    //数据类型-空间大类
-    public final static String data_type_space_class = "space_class";
-    //数据类型-建筑功能类型
-    public final static String data_type_build_func_type = "build_func_type";
-    //数据类型-楼层类型
-    public final static String data_type_floor_type = "floor_type";
-    //数据类型-竖井功能类型
-    public final static String data_type_shaft_type = "shaft_type";
-    //数据类型-竖井
-    public final static String data_type_shaft = "shaft";
-    //标识-项目
-    public final static String tag_project = "Pj";
-    //标识-建筑
-    public final static String tag_build = "Bd";
-    //标识-楼层
-    public final static String tag_floor = "Fl";
-    //标识-空间
-    public final static String tag_space = "Sp";
-    //标识-设备
-    public final static String tag_equip = "Eq";
-    //标识-系统
-    public final static String tag_system = "Sy";
-    //标识-设备对象
-    public final static String tag_equip_object = "EqObj";
-    //标识-系统对象
-    public final static String tag_system_object = "SyObj";
-    //标识-设备字典-专业
-    public final static String tag_dict_class = "Clazz";
-    //标识-设备字典-系统
-    public final static String tag_dict_sytstem = "System";
-    //标识-设备字典-设备
-    public final static String tag_dict_equip = "Equip";
-    //系统主键
-    public final static String SYSTEM_ID = "systemId";
-    
-
-    public final static int desc = -1;
-    public final static int asc = 1;
-    
-    //SOP版本描述
-    public final static String version_explain_create = "发布标准操作";
-    public final static String distory_sop = "[\"作废标准操作\"]";
-    //
-    public final static String remind_recovery_failed = "引用的sop已作废,请恢复后再操作";
-
-    public static class JsonToData{
-        //public static final String equipSpaceOptions = "saas_equipSpaceOptions";
-        //public static final String EquipUploadValidate = "saas_EquipUploadValidate";
-        //public static final String InfoPointInputMode = "saas_InfoPointInputMode";
-        //public static final String nounType = "saas_nounType";
-        //public static final String SpaceUploadValidate = "saas_SpaceUploadValidate";
-        public static final String Flooridentity = "saas_FloorIdentity";
-        public static final String SpaceFunction = "saas_H_spaceFunction";
-    }
-}

+ 6 - 4
fm-sop/src/main/java/com/persagy/old/common/DataRequestProcessUtil.java

@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Maps;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 import com.persagy.old.dao.DBConst.Result;
 
 import java.text.SimpleDateFormat;
@@ -238,8 +240,8 @@ public class DataRequestProcessUtil {
      * tranfer infoValue of date type
      */
     public static IJSONOperator tranferTimeFormat = (jsonObject, marjors) ->{
-        SimpleDateFormat fsdf = new SimpleDateFormat(CommonConst.date_format_save);
-        SimpleDateFormat tsdf = new SimpleDateFormat(CommonConst.date_format_show);
+        SimpleDateFormat fsdf = new SimpleDateFormat(SopCommonConst.date_format_save);
+        SimpleDateFormat tsdf = new SimpleDateFormat(SopCommonConst.date_format_show);
         for(String marjor : marjors){
             if(jsonObject.containsKey(marjor))
                 jsonObject.put(marjor, tsdf.format(fsdf.parse(jsonObject.getString(marjor))));
@@ -613,8 +615,8 @@ public class DataRequestProcessUtil {
     				String order1_Str = obj1.getString(field);
     				String order2_Str = obj2.getString(field);
     				try {
-    					Date order1 = DateUtil.parseDate(CommonConst.date_format_save, order1_Str);
-    					Date order2 = DateUtil.parseDate(CommonConst.date_format_save, order2_Str);
+    					Date order1 = DateUtil.parseDate(SopCommonConst.date_format_save, order1_Str);
+    					Date order2 = DateUtil.parseDate(SopCommonConst.date_format_save, order2_Str);
     					
     					if(order1.getTime() > order2.getTime()){
     						return order;

+ 3 - 1
fm-sop/src/main/java/com/persagy/old/common/DateUtil.java

@@ -8,6 +8,8 @@
 
 package com.persagy.old.common;
 
+import com.persagy.fm.sop.constant.SopCommonConst;
+
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -23,7 +25,7 @@ public class DateUtil {
     public static String sdfHour = "yyyyMMddHH";
 
 	public static String getNowTimeStr() {
-    	SimpleDateFormat sdf = new SimpleDateFormat(CommonConst.date_format_save);
+    	SimpleDateFormat sdf = new SimpleDateFormat(SopCommonConst.date_format_save);
         return sdf.format(new Date());
     }
     

+ 5 - 2
fm-sop/src/main/java/com/persagy/old/common/JSONUtil.java

@@ -3,6 +3,9 @@ package com.persagy.old.common;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
+import com.persagy.fm.sop.constant.SopCommonConst;
 
 import java.text.SimpleDateFormat;
 import java.util.Collections;
@@ -351,8 +354,8 @@ public class JSONUtil {
      * tranfer infoValue of date type
      */
     public static IJSONOperator tranferTimeFormat = (jsonObject, marjors) ->{
-        SimpleDateFormat fsdf = new SimpleDateFormat(CommonConst.date_format_save);
-        SimpleDateFormat tsdf = new SimpleDateFormat(CommonConst.date_format_show);
+        SimpleDateFormat fsdf = new SimpleDateFormat(SopCommonConst.date_format_save);
+        SimpleDateFormat tsdf = new SimpleDateFormat(SopCommonConst.date_format_show);
         for(String marjor : marjors){
             if(jsonObject.containsKey(marjor))
                 jsonObject.put(marjor, tsdf.format(fsdf.parse(jsonObject.getString(marjor))));

+ 2 - 0
fm-sop/src/main/java/com/persagy/old/common/SopUtil.java

@@ -2,6 +2,8 @@ package com.persagy.old.common;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.old.dao.DBConst;
 
 import java.util.HashMap;

+ 0 - 350
fm-sop/src/main/java/com/persagy/old/common/StringUtil.java

@@ -1,350 +0,0 @@
-package com.persagy.old.common;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.persagy.fm.sop.service.BaseService;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created by gsc on 17/5/16.
- */
-@SuppressWarnings("unchecked")
-public class StringUtil {
-	
-	public static boolean isNull(JSONArray lackFields, JSONObject jsonObject, String... params){
-		lackFields = lackFields == null ? new JSONArray() : lackFields;
-		if(jsonObject == null)
-			return false;
-		Object value;
-		boolean flag = false;
-		for(String param : params){
-			value = jsonObject.get(param);
-			if(value instanceof JSONObject){
-				if(value == null || ((JSONObject)value).isEmpty()){
-					flag = true;
-					if(!lackFields.contains(param))
-						lackFields.add(param);
-				}
-			}else if(value instanceof JSONArray){
-				if(value == null || ((JSONArray)value).isEmpty()){
-					flag = true;
-					if(!lackFields.contains(param))
-						lackFields.add(param);
-				}
-			}else{
-				if(value == null || "".equals(JSON.toJSON(value))){
-					flag = true;
-					if(!lackFields.contains(param))
-						lackFields.add(param);
-				}
-			}
-		}
-		return flag;
-	}
-	
-	public static boolean isExist(JSONArray lackFields, JSONObject jsonObject, String... params){
-		lackFields = lackFields == null ? new JSONArray() : lackFields;
-		if(jsonObject == null)
-			return false;
-		Object value;
-		boolean flag = false;
-		for(String param : params){
-			value = jsonObject.get(param);
-			if(value instanceof JSONObject){
-				if(value == null || ((JSONObject)value).isEmpty()){
-					if(!lackFields.contains(param))
-						lackFields.add(param);
-				}else{
-					flag = true;
-				}
-			}else if(value instanceof JSONArray){
-				if(value == null || ((JSONArray)value).isEmpty()){
-					if(!lackFields.contains(param))
-						lackFields.add(param);
-				}else{
-					flag = true;
-				}
-			}else{
-				if(value == null || "".equals(JSON.toJSON(value))){
-					if(!lackFields.contains(param))
-						lackFields.add(param);
-				}else{
-					flag = true;
-				}
-			}
-		}
-		return flag;
-	}
-	
-    /**
-     * 判断String是否为null或空
-     * @param params
-     * @return
-     */
-    public static boolean isNull(String... params){
-        for(String param : params){
-            if(param == null || "".equals(param)){
-                return true;
-            }
-        }
-        return false;
-    }
-    /**
-     * 判断String是否为null或空
-     * @param params
-     * @return
-     */
-    public static boolean isNotNull(String... params){
-
-        return !isNull(params);
-    }
-    /**
-     * 判断JSONObects是否包含parmas中的字段
-     * @param jsonObject
-     * @param params
-     * @return
-     */
-    public static boolean isNull(JSONObject jsonObject, String... params){
-        for(String param : params){
-            if(isNull(jsonObject.getString(param))){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 判断JSONObect中时候包含parmas中字段的为空数组
-     * @param jsonObject
-     * @param params
-     * @return
-     */
-    public static boolean isEmptyList(JSONObject jsonObject, String... params){
-        JSONArray jsonArray;
-        for(String param : params){
-            jsonArray = jsonObject.getJSONArray(param);
-            if(jsonArray == null || jsonArray.isEmpty()){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 转换ID
-     * @param id     ID
-     * @param taget 转换目标ID标识
-     * @return
-     */
-    public static String transferId(String id, String taget, String dataPlatBasePath){
-        Map<String, String> parentIdMap = null;
-        try {
-            parentIdMap = getParentIdAndCategoryMap(id, dataPlatBasePath);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        Map<String, String> map = new HashMap<String, String>();
-       /* if(id.startsWith(CommonConst.tag_project)){
-
-        }else if(id.startsWith(CommonConst.tag_build)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+ id.substring(2, id.length()-3));
-        }else if(id.startsWith(CommonConst.tag_floor)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+id.substring(2, id.length()-6));
-            map.put(CommonConst.tag_build, CommonConst.tag_build+id.substring(2, id.length()-3));
-        }else if(id.startsWith(CommonConst.tag_space)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+id.substring(2, id.length()-9));
-            map.put(CommonConst.tag_build, CommonConst.tag_build+id.substring(2, id.length()-6));
-            map.put(CommonConst.tag_floor, CommonConst.tag_floor+id.substring(2, id.length()-3));
-        }else if(id.startsWith(CommonConst.tag_equip)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+id.substring(2, id.length()-12));
-            map.put(CommonConst.tag_build, CommonConst.tag_build+id.substring(2, id.length()-9));
-        }else if(id.startsWith(CommonConst.tag_system)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+id.substring(2, id.length()-10));
-            map.put(CommonConst.tag_build, CommonConst.tag_build+id.substring(2, id.length()-7));
-        }*/
-        if(id.startsWith(CommonConst.tag_project)){
-
-        }else if(id.startsWith(CommonConst.tag_build)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+ id.substring(2, 12));
-        }else if(id.startsWith(CommonConst.tag_floor)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+ id.substring(2, 12));
-            map.put(CommonConst.tag_build, parentIdMap.get("building"));
-        }else if(id.startsWith(CommonConst.tag_space)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+ id.substring(2, 12));
-            map.put(CommonConst.tag_build, parentIdMap.get("building"));
-            map.put(CommonConst.tag_floor, parentIdMap.get("floor"));
-        }else if(id.startsWith(CommonConst.tag_equip)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+ id.substring(2, 12));
-            map.put(CommonConst.tag_build, parentIdMap.get("building"));
-        }else if(id.startsWith(CommonConst.tag_system)){
-            map.put(CommonConst.tag_project, CommonConst.tag_project+ id.substring(2, 12));
-            map.put(CommonConst.tag_build, parentIdMap.get("building"));
-        }
-        return map.get(taget);
-    }
-    
-    /**
-     * 
-     * Description:获取同一项目下同一类型对象的关联建筑id、楼层id、设备id信息 
-     * @param ids 设备(空间、部件)id的集合,集合内容应为同一类型的id
-     * @return {"id值":{"building":"", "floor":"", "equipment":"", "category":""}}, 只有传入的id为设备和系统时,才会返回category,其值为类型码组合,如SETDLS(前两位是专业码,中间两位是系统码,后四位是设备类别码)
-     * @throws Exception Map<String,String>
-     * @author cuixubin
-     * @since 2018年5月15日: 下午6:42:17
-     * Update By cuixubin 2018年5月15日: 下午6:42:17
-     */
-    public static Map<String, Map<String, String>> getParentIds(List<String> ids, String dataPlatBasePath) throws Exception {
-    	Map<String, Map<String, String>> resultMap = new HashMap<>();
-    	if(null == ids || ids.isEmpty()) {
-    		return resultMap;
-    	}
-    	String id = ids.get(0);
-        String projectId = "Pj" + id.substring(2, 12);
-        String requestUrl = DataRequestPathUtil.dataPlat_object_batch_query;
-        requestUrl = requestUrl.replace("BASEPATH", dataPlatBasePath);
-        if (null != projectId && !"".equals(projectId)) {
-            requestUrl = requestUrl.replace("PROJECTID", projectId);
-        }
-        
-        String buildParamStr = "{\"criterias\":[{\"id\":\"" + id + "\"}";
-        for(int i=1; i<ids.size(); i++) {
-        	buildParamStr += ",{\"id\":\"" + ids.get(i) + "\"}";
-        }
-        buildParamStr += "],\"valid\":null,\"projectId\":\""+ projectId +"\"}";
-        
-//        String result = new BaseService().httpPostRequest(requestUrl, buildParamStr);
-        String result = new BaseService().httpPostRequestDataPlatform(requestUrl, buildParamStr);
-        JSONObject resultJson = JSONObject.parseObject(result);
-        JSONArray content = (JSONArray) resultJson.get("Content");
-        if (content != null && content.size() != 0) {
-        	Map<String, String> locationMap = new HashMap<>();
-        	for(int i=0; i<content.size(); i++) {
-        		JSONObject item = content.getJSONObject(i);
-        		locationMap = (Map<String, String>) item.get("location");
-        		locationMap.put("category",(String) ((JSONObject) content.get(i)).get("category"));
-//              resultMap.put("category",(String) ((JSONObject) content.get(0)).get("category"));
-        		resultMap.put(item.getString("id"), locationMap);
-        	}
-        }
-        return resultMap;
-    }
-
-    private static Map<String, String> getParentIdAndCategoryMap(String id, String dataPlatBasePath) throws Exception {
-        String projectId = "Pj" + id.substring(2, 12);
-        String requestUrl = DataRequestPathUtil.dataPlat_object_batch_query;
-        requestUrl = requestUrl.replace("BASEPATH", dataPlatBasePath);
-        if (null != projectId && !"".equals(projectId)) {
-            requestUrl = requestUrl.replace("PROJECTID", projectId);
-        }
-        String buildParamStr = "{\"criterias\":[{\"id\":\"" + id + "\"}]}";
-        JSONObject requstParams = JSONObject.parseObject(buildParamStr);
-        requstParams.put("projectId", projectId);
-//        String result = new BaseService().httpPostRequest(requestUrl, requstParams.toString());
-        String result = new BaseService().httpPostRequestDataPlatform(requestUrl, requstParams.toString());
-
-        JSONObject resultJson = JSONObject.parseObject(result);
-        JSONArray content = (JSONArray) resultJson.get("Content");
-        Map<String, String> resultMap = new HashMap<>();
-        if (content != null) {
-            Map<String, String> locationMap = (Map<String, String>) ((JSONObject) content.get(0)).get("location");
-            resultMap.putAll(locationMap);
-            resultMap.put("category",(String) ((JSONObject) content.get(0)).get("category"));
-        }
-        return resultMap;
-    }
-
-
-
-    /**
-     * 获取设备或系统的类型
-     * @param id 设备、系统ID
-     * @Param taget 类型标识
-     * @return
-     */
-    public static String getEquipOrSystemCodeFromId(String id, String taget, String dataPlatBasePath){
-        Map<String, String> map = new HashMap<String, String>();
-     /*   if(id.startsWith(CommonConst.tag_equip)){
-            map.put(CommonConst.tag_dict_class, id.substring(15, 17));
-            map.put(CommonConst.tag_dict_equip, id.substring(17, 21));
-        }else if(id.startsWith(CommonConst.tag_system)){
-            map.put(CommonConst.tag_dict_class, id.substring(15, 17));
-            map.put(CommonConst.tag_dict_sytstem, id.substring(17, 19));
-        }*/
-        Map<String, String> parentCategoryMap = null;
-        try {
-            parentCategoryMap = getParentIdAndCategoryMap(id, dataPlatBasePath);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        String category = parentCategoryMap.get("category");
-        if (id.startsWith(CommonConst.tag_equip)) {
-            map.put(CommonConst.tag_dict_class, category == null || category.length()<6 ? null : category.substring(0, 2));
-            map.put(CommonConst.tag_dict_equip, category == null || category.length()<6  ? null : category.substring(2, 6));
-        } else if (id.startsWith(CommonConst.tag_system)) {
-            map.put(CommonConst.tag_dict_class, category == null || category.length()<4 ? null : category.substring(0, 2));
-            map.put(CommonConst.tag_dict_sytstem, category == null || category.length()<4  ? null : category.substring(2, 4));
-        }
-        return map.get(taget);
-    }
-    
-    /**
-     * 获取设备的类型
-     * @param projectId 项目id
-     * @Param ids 设备ids
-     * @return
-     */
-	public static JSONArray getEquipCodeFromEquipIds(String projectId, JSONArray ids, String dataPlatBasePath) {
-		JSONArray content = null;
-		try {
-//			Properties properties = new Properties();
-//			properties.load(StringUtil.class.getResourceAsStream("/config.properties"));
-//			String dataPlatBasePath = properties.getProperty("data.platform.basePath");
-			String requestUrl = DataRequestPathUtil.dataPlat_object_batch_query;
-			requestUrl = requestUrl.replace("BASEPATH", dataPlatBasePath);
-			if (null != projectId && !"".equals(projectId)) {
-				requestUrl = requestUrl.replace("PROJECTID", projectId);
-			}
-			JSONObject requstParams = new JSONObject();
-			requstParams.put("criterias", ids);
-			requstParams.put("projectId", projectId);
-//			String result = new BaseService().httpPostRequest(requestUrl, requstParams.toJSONString());
-			String result = new BaseService().httpPostRequestDataPlatform(requestUrl, requstParams.toJSONString());
-
-			JSONObject resultJson = JSONObject.parseObject(result);
-			content = (JSONArray) resultJson.get("Content");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		JSONArray equipCodes = new JSONArray();
-		if (content != null && content.size() != 0) {
-			for (int i = 0, length = content.size(); i < length; i++) {
-				JSONObject jsonObject = content.getJSONObject(i);
-				String category = jsonObject.getString("category");
-				String equipCode = category == null || category.length() < 6 ? null : category.substring(2, 6);
-				if (!equipCodes.contains(equipCode)) {
-					equipCodes.add(equipCode);
-				}
-			}
-		}
-		return equipCodes;
-	}
-    
-
-    /**
-     * 右侧补齐String长度
-     * @param str
-     * @param length
-     * @param sign
-     * @return
-     */
-    public static String completLengthFromRight(String str, int length, String sign){
-        while(str.length() < length){
-            str = str + sign;
-        }
-        return str;
-    }
-}

+ 0 - 270
fm-sop/src/main/java/com/persagy/old/common/ToolsUtil.java

@@ -1,270 +0,0 @@
-/**
- * @包名称 com.sagacloud.common
- * @文件名 ToolsUtil.java
- * @创建者 wanghailong
- * @邮箱 wanghailong@persagy.com  
- * @修改描述 
- */
-
-package com.persagy.old.common;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.persagy.old.dao.DBConst.Result;
-import org.apache.poi.ss.formula.functions.T;
-import sun.misc.BASE64Encoder;
-
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.*;
-import java.util.stream.Stream;
-
-
-/** 
- * 功能描述: 常用工具方法
- * @类型名称 ToolsUtil
- * @创建者 wanghailong
- * @邮箱 wanghailong@persagy.com  
- * @修改描述 
- */
-public class ToolsUtil {
-    //返回项-缺少必填项
-    public final static String return_error_json = "{\"Result\":\"failure\",\"ResultMsg\":\"缺少必填项\"}";
-    public static String errorJsonMsg(String msg) {
-        JSONObject jsonRes = new JSONObject();
-		jsonRes.put("Result", "failure");
-		jsonRes.put("ResultMsg", msg);
-		return jsonRes.toString();
-    }
-    public static String errorJsonMsg(JSONObject item){
-        JSONObject jsonRes = new JSONObject();
-        jsonRes.put("Result", "failure");
-        jsonRes.put("Item", item);
-        return jsonRes.toJSONString();
-    }
-    
-    public static String successJsonMsg(JSONArray array){
-        JSONObject jsonRes = new JSONObject();
-        jsonRes.put("Result", "success");
-        jsonRes.put("Content", array);
-        jsonRes.put("Count", array.size());
-        return jsonRes.toJSONString();
-    }
-    public static <T> String successJsonMsg(List<T> array){
-        JSONObject jsonRes = new JSONObject();
-        jsonRes.put("Result", "success");
-        jsonRes.put("Content", array);
-        jsonRes.put("Count", array.size());
-        return jsonRes.toJSONString();
-    }
-
-    public static String successJsonMsg(JSONObject item){
-        JSONObject jsonRes = new JSONObject();
-        jsonRes.put("Result", "success");
-        jsonRes.put("Item", item);
-        return jsonRes.toJSONString();
-    }
-
-    public static String successJsonMsg(String successMsg){
-        JSONObject jsonRes = new JSONObject();
-        jsonRes.put("Result", "success");
-        jsonRes.put("ResultMsg", successMsg);
-        return jsonRes.toJSONString();
-    }
-
-
-    public static String getUuid() {
-    	String uuid = UUID.randomUUID().toString().replace("-","");
-    	return uuid;
-    }
-
-    /**
-     * 生成前缀+uuid的字符串
-     * @param prefix  --前缀字符串
-     * @return recordId --prefix+uuid(去除-)
-     */
-	public static String getRecordId(String prefix) {
-		String recordId = "";
-		if (!StringUtil.isNull(prefix)) {
-			recordId = prefix;
-		}
-		recordId = recordId + UUID.randomUUID().toString().replace("-", "");
-		return recordId;
-	}
-    /**
-     * 倒序排序
-     * @param array
-     * @return
-     */
-    public static JSONArray sortDesc(JSONArray array){
-        JSONArray newArray = new JSONArray();
-        for(int i=array.size()-1; i>-1; i--){
-            newArray.add(array.get(i));
-        }
-        return newArray;
-    }
-
-    /**
-     * 根据条件过滤数组字段
-     * @param array
-     * @param filterCondition
-     * @return
-     */
-    public static JSONArray filterRemind(JSONArray array, JSONArray filterCondition){
-        JSONArray newArray = new JSONArray();
-        JSONObject item, newItem;
-        if(array != null){
-            for(int i=0; i<array.size(); i++){
-                item = array.getJSONObject(i);
-                newItem = new JSONObject();
-                for(int j=0; j<filterCondition.size(); j++){
-                    newItem.put(filterCondition.getString(j), item.get(filterCondition.getString(j)));
-                }
-                newArray.add(newItem);
-            }
-        }
-        return newArray;
-    }
-    /**
-     * 根据条件过滤数组字段
-     * @param filterCondition
-     * @return
-     */
-    public static JSONObject filterRemind(JSONObject jsonObject, JSONArray filterCondition){
-    	JSONObject newItem = new JSONObject();
-    	if(jsonObject != null){
-			for(int j=0; j<filterCondition.size(); j++){
-				newItem.put(filterCondition.getString(j), jsonObject.get(filterCondition.getString(j)));
-			}
-    	}
-    	return newItem;
-    }
-    /**
-     * 根据条件过滤数组字段
-     * @param array
-     * @param filterConditions
-     * @return
-     */
-    public static JSONArray filterRemind(JSONArray array, String... filterConditions){
-    	JSONArray newArray = new JSONArray();
-    	JSONObject item, newItem;
-    	if(array != null){
-    		for(int i=0; i<array.size(); i++){
-    			item = array.getJSONObject(i);
-    			newItem = new JSONObject();
-    			for(String filterCondition : filterConditions){
-    				newItem.put(filterCondition, item.get(filterCondition));
-    			}
-    			newArray.add(newItem);
-    		}
-    	}
-    	return newArray;
-    }
-    /**
-     * 根据条件过滤数组字段
-     * @param queryResult
-     * @param filterConditions
-     * @return
-     */
-    public static String filterRemind(String queryResult, String... filterConditions){
-    	if(queryResult.contains(Result.RESULT) && queryResult.contains(Result.CONTENT)) {
-    		JSONObject resultJson = JSONObject.parseObject(queryResult);
-			JSONArray contents = resultJson.getJSONArray(Result.CONTENT);
-			contents = filterRemind(contents, filterConditions);
-			resultJson.put(Result.CONTENT, contents);
-			queryResult = JSON.toJSONString(resultJson);
-    	}
-    	return queryResult;
-    }
-    /**
-     * 根据条件过滤数组字段
-     * @param queryResult
-     * @param filterCondition
-     * @return
-     */
-    public static String filterRemind(String queryResult, JSONArray filterCondition){
-    	if(queryResult.contains(Result.RESULT) && queryResult.contains(Result.CONTENT)) {
-    		JSONObject resultJson = JSONObject.parseObject(queryResult);
-    		JSONArray contents = resultJson.getJSONArray(Result.CONTENT);
-    		contents = filterRemind(contents, filterCondition);
-    		resultJson.put(Result.CONTENT, contents);
-    		queryResult = JSON.toJSONString(resultJson);
-    	}
-    	return queryResult;
-    }
-
-    /**
-     * MD5加密
-     * @param str
-     * @return
-     * @throws NoSuchAlgorithmException
-     * @throws UnsupportedEncodingException
-     */
-    public static String encodeByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException {
-        //确定计算方法
-        MessageDigest md5= MessageDigest.getInstance("MD5");
-        BASE64Encoder base64en = new BASE64Encoder();
-        //加密后的字符串
-        String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
-        return newstr;
-    }
-    
-    /**
-     * 根据map的value排序 倒序
-     * @param map
-     * @param <K>
-     * @return
-     */
-    public static <K> JSONArray sortMapByValue(Map<K, Integer> map){
-        JSONArray array = new JSONArray();
-        Stream<Map.Entry<K, Integer>> stream = map.entrySet().stream();
-        stream.sorted(Comparator.comparing(e -> Integer.valueOf(e.getValue()) * -1)).forEach(e -> array.add(e.getKey()));
-        return array;
-    }
-    
-    
-    /**
-     * 
-     * Description: ZillionAgent返回结果是否成功
-     * @param resultStr
-     * @return boolean
-     * @author yuecaipu
-     * @since 2018年7月9日: 下午12:20:22
-     * Update By yuecaipu 2018年7月9日: 下午12:20:22
-     */
-    public static boolean isSuccessForResult(String resultStr) {
-		JSONObject resultJson = JSONObject.parseObject(resultStr);
-		return isSuccessForResult(resultJson);
-	}
-
-    public static boolean isSuccessForResult(JSONObject resultJson) {
-		String result = resultJson.getString(Result.RESULT);
-		if (Result.SUCCESS.equals(result)) {
-			return true;
-		}
-		return false;
-	}
-    
-    
-	/**
-	 * Description: 获取一个key升序排序的map
-	 * @return Map<String,JSONArray>
-	 * @author yuecaipu
-	 * @since 2018年7月26日: 下午1:35:01
-	 * Update By yuecaipu 2018年7月26日: 下午1:35:01
-	 */
-	public static Map<String, JSONArray> getAscMap(){
-		 Map<String, JSONArray> map = new TreeMap<String, JSONArray>(
-	                new Comparator<String>() {
-	                    public int compare(String obj1, String obj2) {
-	                        // 升序排序
-	                    	Integer order1 = Integer.valueOf(obj1);
-	                    	Integer order2 = Integer.valueOf(obj2);
-	                        return order1.compareTo(order2);
-	                    }
-	                });
-		 return map;
-	}
- }

+ 1 - 1
fm-sop/src/main/java/com/persagy/old/dao/DBCommonMethods.java

@@ -1,7 +1,7 @@
 package com.persagy.old.dao;
 
+import com.persagy.fm.common.old.utils.ToolsUtil;
 import com.persagy.old.common.DateUtil;
-import com.persagy.old.common.ToolsUtil;
 import com.sagacloud.json.JSONArray;
 import com.sagacloud.json.JSONObject;
 import com.sagacloud.json.JSONValue;

+ 3 - 3
fm-sop/src/main/resources/bootstrap.yml

@@ -2,7 +2,7 @@ server:
   port: 9936
 spring: 
   application:
-    name: sop
+    name: fm-sop
   datasource:
     dynamic:
       druid:
@@ -22,7 +22,7 @@ spring:
       datasource:
         master:
           driver-class-name: com.p6spy.engine.spy.P6SpyDriver
-          url: jdbc:p6spy:mysql://192.168.100.210:33306/fm-sop?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&tinyInt1isBit=true
+          url: jdbc:p6spy:mysql://192.168.100.210:33306/${spring.application.name}?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&tinyInt1isBit=true
           username: "root"
           password: "123456"
           # 配置则生效,自动初始化表结构
@@ -37,7 +37,7 @@ spring:
             max-wait: 60000
             min-idle: 5
 mybatis-plus:
-  mapper-locations: classpath*:/mapper/*Mapper.xml
+  # mapper-locations: classpath*:/mapper/*Mapper.xml
   typeAliasesPackage: com.persagy.fm.sop.entity
   global-config:
     db-config:

BIN
fm-sop/src/main/resources/template/SOP导入模板.xlsx


+ 142 - 0
fm-workorder/pom.xml

@@ -10,11 +10,153 @@
     <modelVersion>4.0.0</modelVersion>
     <artifactId>fm-workorder</artifactId>
     <packaging>jar</packaging>
+    <properties>
+        <hbase.version>1.3.0</hbase.version>
+        <platform.version>1.0.0</platform.version>
+    </properties>
+    <repositories>
+        <repository>
+            <id>SagaCloud</id>
+            <name>SagaCloud</name>
+            <url>http://47.93.33.207:8082/repository/SagaCloud/</url>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+        <repository>
+            <id>Persagy</id>
+            <name>Persagy</name>
+            <url>http://47.93.132.139:8081/nexus/content/groups/public/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+        <repository>
+            <id>alimaven</id>
+            <name>aliyun maven</name>
+            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
+        </repository>
+        <repository>
+            <id>spring-milestones</id>
+            <name>Spring Milestones</name>
+            <url>https://repo.spring.io/milestone</url>
+        </repository>
+    </repositories>
     <dependencies>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <optional>true</optional>
         </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>fm-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>fm-server</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-config-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>fm-mybatis</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.3</version>
+        </dependency>
+        <!-- swagger -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-swagger2-spring-boot-starter</artifactId>
+            <version>${platform.version}</version>
+        </dependency>
+        <!--执行 SQL 分析打印插件-->
+        <dependency>
+            <groupId>p6spy</groupId>
+            <artifactId>p6spy</artifactId>
+            <version>3.8.1</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.5.9</version>
+        </dependency>
+        <!-- redis -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hbase</groupId>
+            <artifactId>hbase-server</artifactId>
+            <version>${hbase.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.sun.jersey</groupId>
+                    <artifactId>jersey-server</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.sun.jersey</groupId>
+                    <artifactId>jersey-core</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.sun.jersey</groupId>
+                    <artifactId>jersey-json</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hbase</groupId>
+            <artifactId>hbase-client</artifactId>
+            <version>${hbase.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.guava</groupId>
+                    <artifactId>guava</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.sagacloud</groupId>
+            <artifactId>zillion-util</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sagacloud</groupId>
+            <artifactId>json-lib-zillion</artifactId>
+            <version>1.0</version>
+            <type>jar</type>
+        </dependency>
+        <!-- 映入JSON -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.47</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-db-spring-boot-starter</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
 </project>

+ 37 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/client/FeignConfig.java

@@ -0,0 +1,37 @@
+package com.persagy.fm.workorder.client;
+
+import feign.Logger;
+import feign.codec.Encoder;
+import feign.form.spring.SpringFormEncoder;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.support.SpringEncoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Scope;
+
+import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
+
+@Configuration
+public class FeignConfig {
+
+
+    @Autowired
+    private ObjectFactory<HttpMessageConverters> messageConverters;
+
+
+    @Bean
+    @Primary
+    @Scope(SCOPE_PROTOTYPE)
+    Encoder feignFormEncoder() {
+        return new SpringFormEncoder(new SpringEncoder(this.messageConverters));
+    }
+
+
+    @Bean
+    Logger.Level feignLevel(){
+        return Logger.Level.FULL;
+    }
+}

+ 23 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/client/SaasClient.java

@@ -0,0 +1,23 @@
+package com.persagy.fm.workorder.client;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(name = "SAAS" ,fallbackFactory = SaasFallBackFactory.class, configuration = FeignConfig.class)
+public interface SaasClient {
+
+    /***
+     * Description: 查询数据字典数据
+     * @param param : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/9 21:51
+     * Update By lijie 2021/4/9 21:51
+     */
+    @PostMapping(value = "/restGeneralDictService/queryGeneralDictByDictType")
+    String queryGeneralDictByDictType(@RequestBody JSONObject param);
+
+
+}

+ 26 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/client/SaasFallBackFactory.java

@@ -0,0 +1,26 @@
+package com.persagy.fm.workorder.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+import com.persagy.fm.common.old.utils.OldResponseResultUtil;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+
+/**
+ * @author yuecaipu
+ * @version 1.0
+ * @description
+ * @date 2021/3/12 14:19
+ */
+@Slf4j
+@Component
+public class SaasFallBackFactory implements FallbackFactory<SaasClient> {
+	@Override
+	public SaasClient create(Throwable throwable) {
+		return queryGeneralDictVo -> JSONObject.toJSONString(OldResponseResultUtil
+				.successResult(Collections.singletonList(GeneralDictVo.builder().build())));
+	}
+}

+ 15 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/constant/FlowPlanConstant.java

@@ -0,0 +1,15 @@
+package com.persagy.fm.workorder.constant;
+/***
+ * Description: 工单类型常量
+ * @author : lijie
+ * @date :2021/4/27 16:30
+ * Update By lijie 2021/4/27 16:30
+ */
+public class FlowPlanConstant {
+    /**集团项目默认id*/
+    public final static String GROUP_ID = "groupId";
+    /**工单类型名称*/
+    public final static String PLAN_NAME = "plan_name";
+    /**工作类型*/
+    public final static String WORK_TYPE = "work_type";
+}

+ 35 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/constant/enums/WoApplyItemEnum.java

@@ -0,0 +1,35 @@
+package com.persagy.fm.workorder.constant.enums;
+
+public enum WoApplyItemEnum {
+    ADDING_PEOPLE("applyAddingPeople","申请加人"),
+    REPLACE_PEOPLE("applyReplacePeople","申请换人"),
+    DELAY("applyDelay","申请延期"),
+    CLOSE("applyClose","申请结束"),
+    STOP("applyStop","申请中止"),
+    PAUSE("applyPause","申请暂停"),
+    MATTERS("applyMatters","申请事项");
+
+    WoApplyItemEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 40 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/constant/enums/WoControlModelEnum.java

@@ -0,0 +1,40 @@
+package com.persagy.fm.workorder.constant.enums;
+/***
+ * Description: 工单控制模块枚举
+ * @author : lijie
+ * @date :2021/4/27 18:39
+ * Update By lijie 2021/4/27 18:39
+ */
+public enum WoControlModelEnum {
+    CREATE("create","新建"),
+    AUDIT("audit","审核"),
+    APPROVE("approve","审批"),
+    ASSIGN("assign","指派"),
+    APPLY("apply","申请"),
+    EVALUATE("evaluate","评价"),
+    EXECUTE("execute","执行");
+
+    WoControlModelEnum(String type, String describe) {
+        this.type = type;
+        this.describe = describe;
+    }
+
+    private String type;
+    private String describe;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+}

+ 290 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/controller/WoFlowPlanController.java

@@ -0,0 +1,290 @@
+/**
+ * @包名称 com.sagacloud.resource
+ * @文件名 RestFlowPlanController.java
+ * @创建者 wanghailong
+ * @邮箱 wanghailong@persagy.com  
+ * @修改描述 
+ */
+
+package com.persagy.fm.workorder.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
+import com.persagy.fm.workorder.domain.vo.QueryFlowPlanListVo;
+import com.persagy.fm.workorder.domain.vo.QueryVerifyFlowPlanVo;
+import com.persagy.fm.workorder.service.IWoFlowPlanService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/***
+ * Description: 工单流转方案接口Controller层
+ * @author : lijie
+ * @date :2021/4/26 17:11
+ * Update By lijie 2021/4/26 17:11
+ */
+@RestController("/restFlowPlanService/")
+@RequestMapping(produces="application/json;charset=UTF-8",value = "/restFlowPlanService")
+public class WoFlowPlanController{
+	@Autowired
+	private IWoFlowPlanService flowPlanService;
+	/***
+	 * Description: 查询所有的工单类型
+	 * @param queryFlowPlanListVo : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/27 17:54
+	 * Update By lijie 2021/4/27 17:54
+	 */
+	@PostMapping("queryFlowPlan")
+	public String queryFlowPlan(@RequestBody @Validated QueryFlowPlanListVo queryFlowPlanListVo) throws Exception {
+	    return flowPlanService.queryFlowPlan(queryFlowPlanListVo);
+	}
+	
+	/***
+	 * Description:验证工单类型岗位职责信息
+	 * @param queryVerifyFlowPlanVo : 请求参数
+	 * @return : java.lang.String
+	 * @author : lijie
+	 * @date :2021/4/27 17:55
+	 * Update By lijie 2021/4/27 17:55
+	 */
+	@PostMapping("/verifyFlowPlan")
+	public String verifyFlowPlan(@RequestBody @Validated QueryVerifyFlowPlanVo queryVerifyFlowPlanVo) throws Exception {
+		return flowPlanService.verifyFlowPlan(queryVerifyFlowPlanVo);
+	}
+//
+//	/**
+//	 *
+//	 * Description: 查询部门岗位树
+//	 * @return 中心部门和项目通用部门的岗位
+//	 * @throws Exception String
+//	 * @author ChenQuanWei
+//	 * @since 2018年5月11日: 下午2:40:57
+//	 * Update By ChenQuanWei 2018年5月11日: 下午2:40:57
+//	 */
+//	@PostMapping("/queryDeptPositionTree")
+//	public String queryDeptPositionTree(@RequestBody JSONObject jsonObject) throws Exception{
+//		if( ! StringUtil.isNull(jsonObject, "user_id")){
+//			return flowPlanService.queryDeptPositionTree(jsonObject.toJSONString());
+//		}
+//		return ToolsUtil.return_error_json;
+//
+//	}
+//
+//	/**
+//	 *
+//	 * 功能描述:根据Id删除工单类型
+//	 * @return
+//	 * @throws Exception
+//	 * @创建者 wanghailong
+//	 * @邮箱 wanghailong@persagy.com
+//	 * @修改描述
+//	 */
+//	@PostMapping("/deleteFlowPlanById")
+//	public String deleteFlowPlanById(@RequestBody JSONObject jsonObject) throws Exception {
+//		if(!StringUtil.isNull(jsonObject, "user_id", "plan_id")){
+//			return flowPlanService.deleteFlowPlanById(jsonObject.toJSONString());
+//		}else{
+//			return ToolsUtil.return_error_json;
+//		}
+//	}
+//
+//	/**
+//	 *
+//	 * 功能描述:查询项目下所有流转方案
+//	 * @return
+//	 * @throws Exception
+//	 * @创建者 wanghailong
+//	 * @邮箱 wanghailong@persagy.com
+//	 * @修改描述
+//	 */
+//	@PostMapping("/queryProjectFlowPlan")
+//	public String queryProjectFlowPlan(@RequestBody JSONObject jsonObject) throws Exception {
+//		if(!StringUtil.isNull(jsonObject, "user_id", "project_id")){
+//			return flowPlanService.queryProjectFlowPlan(jsonObject.toJSONString());
+//		}else{
+//			return ToolsUtil.return_error_json;
+//		}
+//	}
+//
+//
+//	/**
+//	 * 功能描述:验证工单方案岗位职责
+//	 * @param jsonStr
+//	 * @return
+//	 * @throws Exception
+//	 */
+////	@Path("verifyPostAndDuty")
+////	@POST
+////	@PostMapping("/planBatchUpdate")
+////	public String verifyPostAndDuty(@RequestBody JSONObject jsonObject) throws Exception{
+////		JSONObject jsonObject = JSONObject.parseObject(jsonObject.toJSONString());
+////		if(!StringUtil.isNull(jsonObject, "user_id", "project_id") && !StringUtil.isEmptyList(jsonObject, "post_and_duty")){
+////			return flowPlanService.verifyPostAndDuty(jsonObject.toJSONString());
+////		}
+////		return ToolsUtil.return_error_json;
+////	}
+//
+//	/**
+//	 *
+//	 * 功能描述:添加工单流转方案信息
+//	 * @return
+//	 * @throws Exception
+//	 * @创建者 wanghailong
+//	 * @邮箱 wanghailong@persagy.com
+//	 * @修改描述
+//	 */
+//	@PostMapping("/addFlowPlan")
+//	public String addFlowPlan(@RequestBody JSONObject jsonObject) throws Exception {
+//		if(!StringUtil.isNull(jsonObject, "user_id", "work_type", "execute_type","plan_name") && !StringUtil.isEmptyList(jsonObject, "post_and_duty")){
+//			return flowPlanService.addFlowPlan(jsonObject.toJSONString());
+//		}else{
+//			return ToolsUtil.return_error_json;
+//		}
+//	}
+//
+//	/**
+//	 *
+//	 * 功能描述:根据Id查询工单详细信息
+//	 * @return
+//	 * @throws Exception
+//	 * @创建者 wanghailong
+//	 * @邮箱 wanghailong@persagy.com
+//	 * @修改描述
+//	 */
+//	@PostMapping("/queryFlowPlanById")
+//	public String queryFlowPlanById(@RequestBody JSONObject jsonObject) throws Exception {
+//		if(!StringUtil.isNull(jsonObject, "user_id", "plan_id")){
+//			return flowPlanService.queryFlowPlanById(jsonObject.toJSONString());
+//		}else{
+//			return ToolsUtil.return_error_json;
+//		}
+//	}
+//
+//	/**
+//	 *
+//	 * 功能描述:根据Id编辑流转方案信息
+//	 * @return
+//	 * @throws Exception
+//	 * @创建者 wanghailong
+//	 * @邮箱 wanghailong@persagy.com
+//	 * @修改描述
+//	 */
+//	@PostMapping("/updateFlowPlanById")
+//	public String updateFlowPlanById(@RequestBody JSONObject jsonObject) throws Exception {
+//		if(!StringUtil.isNull(jsonObject, "user_id", "plan_id", "work_type", "execute_type")){
+//			return flowPlanService.updateFlowPlanById(jsonObject.toJSONString());
+//		}else{
+//			return ToolsUtil.return_error_json;
+//		}
+//	}
+//
+//	/**
+//	 * Description: 根据工作类型查询所有有效工单流转方案信息
+//	 * @return String
+//	 * @author ChenQuanWei
+//	 * @throws Exception
+//	 * @since 2018年7月5日: 上午8:53:26
+//	 * Update By ChenQuanWei 2018年7月5日: 上午8:53:26
+//	 */
+//	@PostMapping("/queryFlowPlanByWorkType")
+//	public String queryFlowPlanByWorkType(@RequestBody JSONObject jsonObject) throws Exception{
+//		if( ! StringUtil.isNull(jsonObject, "user_id", "work_type")){
+//			return flowPlanService.queryFlowPlanByWorkType(jsonObject.toJSONString());
+//		} else {
+//			return ToolsUtil.return_error_json;
+//		}
+//	}
+//	/**
+//	 * Description: 根据时间类型查询所有有效流转方案信息
+//	 * @return
+//	 * @throws Exception String
+//	 * @author ChenQuanWei
+//	 * @since 2018年7月5日: 上午10:34:23
+//	 * Update By ChenQuanWei 2018年7月5日: 上午10:34:23
+//	 */
+//	@PostMapping("/queryFlowPlanByExecuteType")
+//	public String queryFlowPlanByExecuteType(@RequestBody JSONObject jsonObject) throws Exception{
+//		if( ! StringUtil.isNull(jsonObject, "user_id", "execute_type")){
+//			return flowPlanService.queryFlowPlanByExecuteType(jsonObject.toJSONString());
+//		} else {
+//			return ToolsUtil.return_error_json;
+//		}
+//
+//	}
+//	/**
+//	 * Description: 通过工单类型名称查询所有有效工单
+//	 * @return
+//	 * @throws Exception String
+//	 * @author ChenQuanWei
+//	 * @since 2018年7月5日: 上午10:38:37
+//	 * Update By ChenQuanWei 2018年7月5日: 上午10:38:37
+//	 */
+//	@PostMapping("/queryFlowPlanByPlanName")
+//	public String queryFlowPlanByPlanName(@RequestBody JSONObject jsonObject) throws Exception{
+//		if( ! StringUtil.isNull(jsonObject, "user_id", "plan_name")){
+//			return flowPlanService.queryFlowPlanByPlanName(jsonObject.toJSONString());
+//		} else {
+//			return ToolsUtil.return_error_json;
+//		}
+//	}
+//
+//
+//
+//	/**
+//	 * @Author yuecaipu
+//	 * @Description 维修管理-维修项内容配置:更新
+//	 * @Date 11:08 2019/10/10
+//	 * @Param
+//	 * @return
+//	 **/
+//    @PostMapping("/updateMaintenanceConfiguration")
+//    public String updateMaintenanceConfiguration(@RequestBody JSONObject jsonObject) throws Exception{
+//        if( StringUtil.isNull(jsonObject, "user_id", "maintenance_configuration")){
+//            return ToolsUtil.errorJsonMsg("入参不正确");
+//        }
+//
+//        JSONObject maintenance_configuration = jsonObject.getJSONObject("maintenance_configuration");
+//
+//        boolean b = maintenanceConfigurationCache.updateMaintenanceConfiguration(maintenance_configuration);
+//        return ToolsUtil.successJsonMsg(maintenance_configuration);
+//
+//    }
+//
+//
+//    @Autowired
+//    private MaintenanceItemServiceImpl maintenanceItemService;
+//    /**
+//     * @Author yuecaipu
+//     * @Description 维修项内容配置:查询配置
+//     * @Date 11:08 2019/10/10
+//     * @Param
+//     * @return
+//     **/
+//    @PostMapping("/queryMaintenanceConfiguration")
+//    public String queryMaintenanceConfiguration(@RequestBody JSONObject jsonObject) throws Exception{
+//        if( StringUtil.isNull(jsonObject, "user_id")){
+//            return ToolsUtil.errorJsonMsg("入参不正确");
+//        }
+//        String order_id = jsonObject.getString("order_id");
+//        String version = jsonObject.getString("version");
+//        if (StringUtil.isNull(version) && StringUtil.isNotNull(order_id)){
+//            //---查询当前工单使用的维修项配置版本
+//            JSONArray maintenanceItems = maintenanceItemService.queryRecordByCondition(jsonObject);
+//            if (CollectionUtils.isNotEmpty(maintenanceItems)){
+//                version = maintenanceItems.getJSONObject(0).getString("maintenance_configuration_version");
+//            }
+//        }
+//
+//        jsonObject = maintenanceConfigurationCache.getMaintenanceConfiguration(version);
+//        return ToolsUtil.successJsonMsg(jsonObject);
+//    }
+
+
+}

+ 16 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/dao/WoFlowPlanMapper.java

@@ -0,0 +1,16 @@
+package com.persagy.fm.workorder.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.fm.workorder.domain.entity.WoFlowPlan;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-26
+ */
+public interface WoFlowPlanMapper extends BaseMapper<WoFlowPlan> {
+
+}

+ 28 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/ApplyItemBean.java

@@ -0,0 +1,28 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ApplyItemBean {
+    @ApiModelProperty("职责模块code")
+    private String code;
+    @ApiModelProperty("职责模块名称")
+    private String name;
+    @ApiModelProperty("根据下级路由方式选择下级路由岗位 execute-执行,assign-指派,robbing-执行")
+    @JsonAlias({"next_route","nextRoute"})
+    @JsonProperty("next_route")
+    private List<NextRouteBean> nextRoute;
+    @ApiModelProperty("audit-需要审核,approve-需要审批")
+    @JsonAlias({"next_code","nextCode"})
+    @JsonProperty("next_code")
+    private String nextCode;
+}

+ 52 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/DutyBean.java

@@ -0,0 +1,52 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class DutyBean {
+    @ApiModelProperty("职责模块code")
+    private String code;
+    @ApiModelProperty("职责模块名称")
+    private String name;
+    @ApiModelProperty("下级路由方式:execute-新建后执行,assign-新建后指派,robbing-新建后抢单")
+    @JsonAlias({"executie_mode","executieMode"})
+    @JsonProperty("executie_mode")
+    private String executieMode;
+    @ApiModelProperty("到达工单要求开始时间时才允许执行")
+    @JsonAlias({"arrival_time_allow_execute","arrivalTimeAllowExecute"})
+    @JsonProperty("arrival_time_allow_execute")
+    private Boolean arrivalTimeAllowExecute;
+    @ApiModelProperty("是否需要按照排班表过滤每次可转交的人员范围")
+    @JsonAlias({"filter_scheduling","filterScheduling"})
+    @JsonProperty("filter_scheduling")
+    private Boolean filterScheduling;
+    @ApiModelProperty("请选择是否启用专业控制")
+    @JsonAlias({"limit_domain","limitDomain"})
+    @JsonProperty("limit_domain")
+    private Boolean limitDomain;
+    @ApiModelProperty("期望该操作持续时间不超过")
+    @JsonAlias({"expecte_operation","expecteOperation"})
+    @JsonProperty("expecte_operation")
+    private Boolean expecteOperation;
+    @ApiModelProperty("分钟")
+    private Integer minute;
+    @ApiModelProperty("根据下级路由方式选择下级路由岗位 execute-执行,assign-指派,robbing-执行")
+    @JsonAlias({"next_route","nextRoute"})
+    @JsonProperty("next_route")
+    private List<NextRouteBean> nextRoute;
+    @ApiModelProperty("根据下级路由方式选择下级路由岗位 execute-执行,assign-指派,robbing-执行")
+    @JsonAlias({"apply_items","applyItems"})
+    @JsonProperty("apply_items")
+    private List<ApplyItemBean> applyItems;
+
+
+}

+ 22 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/NextRouteBean.java

@@ -0,0 +1,22 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class NextRouteBean {
+    @ApiModelProperty("类型,2-岗位")
+    private String type;
+    @ApiModelProperty("岗位id")
+    @JsonAlias({"position_id","positionId"})
+    @JsonProperty("position_id")
+    private String positionId;
+    @ApiModelProperty("岗位名称")
+    private String name;
+}

+ 32 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/NextRouteNobodyNotify.java

@@ -0,0 +1,32 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/***
+ * Description: 下级路由节点通知类
+ * @author : lijie
+ * @date :2021/4/26 19:35
+ * Update By lijie 2021/4/26 19:35
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class NextRouteNobodyNotify {
+    @ApiModelProperty("位置验证")
+    @JsonAlias({"positionVerifi","position_verifi"})
+    @JsonProperty("positionVerifi")
+    private Boolean positionVerifi;
+    @ApiModelProperty("校验")
+    private Boolean checked;
+    @ApiModelProperty("位置")
+    private List<Position> positions;
+
+
+}

+ 43 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/Position.java

@@ -0,0 +1,43 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Position{
+    @ApiModelProperty("岗位id")
+    @JsonAlias({"positionId","position_id"})
+    @JsonProperty("positionId")
+    private String positionId;
+    @ApiModelProperty("岗位名称")
+    @JsonAlias({"positionName","position_name"})
+    @JsonProperty("positionName")
+    private String positionName;
+    @ApiModelProperty("岗位id")
+    @JsonAlias({"objId","obj_id"})
+    @JsonProperty("obj_id")
+    private String objId;
+    @ApiModelProperty("岗位名称")
+    @JsonAlias({"objName","obj_name"})
+    @JsonProperty("obj_name")
+    private String objName;
+    @ApiModelProperty("检测")
+    private Boolean checked;
+    @ApiModelProperty("岗位类型")
+    @JsonAlias({"objType","obj_type"})
+    @JsonProperty("obj_type")
+    private String objType;
+    @ApiModelProperty("子对象数组")
+    @JsonAlias({"childObjs","child_objs"})
+    @JsonProperty("child_objs")
+    private List<String> childObjs;
+
+}

+ 29 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/PostAndDuty.java

@@ -0,0 +1,29 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PostAndDuty {
+    @ApiModelProperty("类型,2-岗位")
+    private String type;
+    @ApiModelProperty("岗位id")
+    @JsonAlias({"position_id","positionId"})
+    @JsonProperty("position_id")
+    private String positionId;
+    @ApiModelProperty("岗位名称")
+    private String name;
+    @ApiModelProperty("职责数组")
+    private List<DutyBean> duty;
+
+
+
+}

+ 161 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/PostAndDutyNative.java

@@ -0,0 +1,161 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.workorder.constant.enums.WoApplyItemEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class PostAndDutyNative {
+    /**单精度窗口组件名称*/
+    @ApiModelProperty("单精度窗口组件名称")
+    @JsonAlias({"float_window_modular","floatWindowModular"})
+    @JsonProperty("floatWindowModular")
+    private String floatWindowModular;
+    @ApiModelProperty("通知单")
+    @JsonAlias({"messageReminder","message_reminder"})
+    @JsonProperty("messageReminder")
+    private MessageReminder messageReminder;
+    @ApiModelProperty("时间限制")
+    @JsonAlias({"timeLimit","time_limit"})
+    @JsonProperty("timeLimit")
+    private TimeLimitBean timeLimit;
+    @ApiModelProperty("时间类型编码")
+    @JsonAlias({"executeType","execute_type"})
+    @JsonProperty("executeType")
+    private String executeType;
+    @ApiModelProperty("申请信息")
+    private Apply apply;
+    @ApiModelProperty("工作类型:1-维保,2-维修,3-巡检,4-运行,5-安全")
+    @JsonAlias({"workType","work_type"})
+    @JsonProperty("workType")
+    private String workType;
+    @ApiModelProperty("建筑功能类型")
+    @JsonAlias({"functionType","function_type"})
+    @JsonProperty("functionType")
+    private String functionType;
+    @ApiModelProperty("报修是否可以转此类工单,0-不可以,1-可以")
+    @JsonAlias({"repairFlag","repair_flag"})
+    @JsonProperty("repairFlag")
+    private String repairFlag;
+    @ApiModelProperty("执行信息")
+    private BaseMode execute;
+    @ApiModelProperty("审批信息")
+    private List<Audit> audit;
+    @ApiModelProperty("审核信息")
+    private Audit approve;
+    @ApiModelProperty("新建信息")
+    private Create create;
+    @ApiModelProperty("评价信息")
+    private Audit evaluate;
+    @ApiModelProperty("指派信息")
+    private Assign assign;
+
+
+
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class MessageReminder {
+        @ApiModelProperty("下级路由节点通知")
+        @JsonAlias({"nextRouteNobodyNotify","next_route_nobody_notify"})
+        @JsonProperty("nextRouteNobodyNotify")
+        private NextRouteNobodyNotify nextRouteNobodyNotify;
+        @ApiModelProperty("工单时间通知")
+        @JsonAlias({"woOrderTimeNotify","wo_order_time_notify"})
+        @JsonProperty("woOrderTimeNotify")
+        private List<WoOrderTimeNotify> woOrderTimeNotify;
+        @ApiModelProperty("消息通知索引")
+        @JsonAlias({"messageNotificationIndex","message_notification_index"})
+        @JsonProperty("messageNotificationIndex")
+        private Integer messageNotificationIndex;
+    }
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class Apply  extends BaseMode{
+        /**
+         * 申请类型
+         * {@link WoApplyItemEnum}
+         * */
+        @ApiModelProperty(value = "申请类型")
+        private String code;
+        @ApiModelProperty("申请类型名称")
+        private String name;
+        @ApiModelProperty("审批步骤")
+        private List<Audit> audit;
+        @ApiModelProperty("审核步骤")
+        private Audit approve;
+    }
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class BaseMode {
+        @ApiModelProperty("检测")
+        private Boolean checked;
+        @ApiModelProperty("非位置")
+        @JsonProperty("noPosition")
+        @JsonAlias({"noPosition","no_position"})
+        private Boolean noPosition;
+        @ApiModelProperty("岗位信息")
+        private List<Position> positions;
+    }
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class Audit extends BaseMode{
+        @ApiModelProperty(value = "审批类型")
+        private String code;
+        @ApiModelProperty(value = "审批类型")
+        private String code_;
+        @ApiModelProperty("是否展示")
+        @JsonProperty("isShow")
+        @JsonAlias({"isShow","is_show"})
+        private Boolean isShow;
+    }
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class Create extends BaseMode{
+        @ApiModelProperty(value = "是否需要按照排班表过滤每次可转交的人员范围")
+        @JsonAlias({"filter_scheduling","filterScheduling"})
+        @JsonProperty("filter_scheduling")
+        private Boolean filterScheduling;
+        @ApiModelProperty(value = "到达工单要求开始时间时才允许执行")
+        @JsonAlias({"arrival_time_allow_execute","arrivalTimeAllowExecute"})
+        @JsonProperty("arrival_time_allow_execute")
+        private Boolean arrivalTimeAllowExecute;
+        @ApiModelProperty(value = "请选择是否启用专业控制")
+        @JsonAlias({"limit_domain","limitDomain"})
+        @JsonProperty("limit_domain")
+        private Boolean limitDomain;
+        @ApiModelProperty(value = "下级路由方式:execute-新建后执行,assign-新建后指派,robbing-新建后抢单")
+        @JsonAlias({"executie_mode","executieMode"})
+        @JsonProperty("executie_mode")
+        private String executieMode;
+    }
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class Assign extends Create{
+        @ApiModelProperty(value = "期望该操作持续时间不超过")
+        @JsonAlias({"expecte_operation","expecteOperation"})
+        @JsonProperty("expecte_operation")
+        private Boolean expecteOperation;
+        @ApiModelProperty(value = "到达工单要求开始时间时才允许执行")
+        private Integer minute;
+        @ApiModelProperty(value = "可操作与否")
+        private Boolean disabled;
+    }
+
+
+
+}

+ 159 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/TimeLimitBean.java

@@ -0,0 +1,159 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TimeLimitBean {
+    @ApiModelProperty("是否需要执行人填写收费明细(如人工费、材料费等),0-否,1-是")
+    @JsonAlias({"importOutlayFlag","import_outlay_flag"})
+    @JsonProperty("import_outlay_flag")
+    private String importOutlayFlag;
+    @ApiModelProperty("维修项 0-不展示 1-展示 2-展示且维修反馈必须执行后才可提交工单")
+    @JsonAlias({"maintenanceConfigurationFlag","maintenance_configuration_flag"})
+    @JsonProperty("maintenance_configuration_flag")
+    private String maintenanceConfigurationFlag;
+    @ApiModelProperty("否需要客户签字,0-否,1-是")
+    @JsonAlias({"signFlag","sign_flag"})
+    @JsonProperty("sign_flag")
+    private String signFlag;
+    @ApiModelProperty("审核结束后是否需要评价,0或空-否,1-是")
+    @JsonAlias({"auditorEvaluationFlag","auditor_evaluation_flag"})
+    @JsonProperty("auditor_evaluation_flag")
+    private String auditorEvaluationFlag;
+    @ApiModelProperty("自动数据获取,0或空-否,1-是")
+    @JsonAlias({"automaticDataCaptureFlag","automatic_data_capture_flag"})
+    @JsonProperty("automatic_data_capture_flag")
+    private String automaticDataCaptureFlag;
+    @ApiModelProperty("对接视频实时照片,0或空-否,1-是")
+    @JsonAlias({"videoCaptureFlag","video_capture_flag"})
+    @JsonProperty("video_capture_flag")
+    private String videoCaptureFlag;
+    @ApiModelProperty("超时后无人接单是否关闭")
+    @JsonAlias({"timeoutOrderReceiving","timeout_order_receiving"})
+    @JsonProperty("timeout_order_receiving")
+    private TimeoutOrderReceiving timeoutOrderReceiving;
+    @ApiModelProperty("签字说明")
+    @JsonAlias({"signDesc","sign_desc"})
+    @JsonProperty("sign_desc")
+    private String signDesc;
+    @ApiModelProperty("开始时间")
+    @JsonAlias({"startTime","start_time"})
+    @JsonProperty("startTime")
+    private StartTime startTime;
+    @ApiModelProperty("结束时间")
+    @JsonAlias({"endTime","end_time"})
+    @JsonProperty("endTime")
+    private BaseTime endTime;
+    @ApiModelProperty("消息提醒设置(工单配置提取)")
+    @JsonAlias({"remindSet","remind_set"})
+    @JsonProperty("remindSet")
+    private RemindSetBean remindSet;
+    @ApiModelProperty("扩展字段集")
+    @JsonAlias({"customField","custom_field"})
+    @JsonProperty("customField")
+    private List<String> customField;
+    /***
+     * Description: 下级路由节点通知类
+     * @author : lijie
+     * @date :2021/4/26 19:35
+     * Update By lijie 2021/4/26 19:35
+     */
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class TimeoutOrderReceiving {
+        @ApiModelProperty("9-异常中止,10-撤销")
+        @JsonAlias({"closedState","closed_state"})
+        @JsonProperty("closed_state")
+        private String closedState;
+        @ApiModelProperty("是否选中")
+        private Boolean selected;
+    }
+
+    /***
+     * Description: 消息提醒设置(工单配置提取)类
+     * @author : lijie
+     * @date :2021/4/26 19:35
+     * Update By lijie 2021/4/26 19:35
+     */
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class RemindSetBean {
+        @ApiModelProperty("发单后下级岗位无人员时通知岗位")
+        @JsonAlias({"nextRouteNobodyNotify","next_route_nobody_notify"})
+        @JsonProperty("nextRouteNobodyNotify")
+        private NextRouteNobodyNotify nextRouteNobodyNotify;
+        @ApiModelProperty("到达工单开始、结束时间提醒")
+        private List<WoOrderTimeNotify> woOrderTimeNotify;
+    }
+
+    /***
+     * Description: 开始时间类
+     * @author : lijie
+     * @date :2021/4/26 19:35
+     * Update By lijie 2021/4/26 19:35
+     */
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class StartTime extends BaseTime{
+        @ApiModelProperty("9-异常中止,10-撤销")
+        @JsonAlias({"closedState","closed_state"})
+        @JsonProperty("closedState")
+        private String closedState;
+        @ApiModelProperty("超时后是否发起超时事件     false -否,不发起  true-是,发起")
+        @JsonAlias({"isGenerate","is_generate"})
+        @JsonProperty("isGenerate")
+        private Boolean isGenerate;
+        @ApiModelProperty("处理部门")
+        @JsonAlias({"dealDept","deal_dept"})
+        @JsonProperty("dealDept")
+        private Department dealDept;
+        @ApiModelProperty("紧急程度,高、中、低")
+        private String urgency;
+
+        @Data
+        @AllArgsConstructor
+        @NoArgsConstructor
+        public static class Department{
+            @ApiModelProperty("部门id")
+            @JsonProperty("deptId")
+            @JsonAlias({"deptId","dept_id"})
+            private String deptId;
+            @ApiModelProperty("部门名称")
+            @JsonProperty("deptName")
+            @JsonAlias({"deptName","dept_name"})
+            private String deptName;
+
+        }
+
+    }
+    /***
+     * Description: 开始时间类
+     * @author : lijie
+     * @date :2021/4/26 19:35
+     * Update By lijie 2021/4/26 19:35
+     */
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class BaseTime{
+        @ApiModelProperty("是否选中")
+        private Boolean selected;
+        @ApiModelProperty("after-后  front-前")
+        private String around;
+        @ApiModelProperty("分钟")
+        private Integer minute;
+    }
+
+}

+ 56 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/dto/WoOrderTimeNotify.java

@@ -0,0 +1,56 @@
+package com.persagy.fm.workorder.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/***
+ * Description: 工单时间通知
+ * @author : lijie
+ * @date :2021/4/26 19:35
+ * Update By lijie 2021/4/26 19:35
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class WoOrderTimeNotify {
+    @ApiModelProperty("消息通知标题")
+    @JsonAlias({"messageNotificationTitle","message_notification_title"})
+    @JsonProperty("messageNotificationTitle")
+    private String messageNotificationTitle;
+    @ApiModelProperty("位置验证")
+    @JsonAlias({"positionVerifi","position_verifi"})
+    @JsonProperty("positionVerifi")
+    private Boolean positionVerifi;
+    @ApiModelProperty("校验")
+    private Boolean checked_;
+    @ApiModelProperty("校验")
+    private Boolean checked;
+    @ApiModelProperty("重复周期(eg.每3分钟重复通知一次)")
+    @JsonAlias({"notifyCycle","notify_cycle"})
+    @JsonProperty("notifyCycle")
+    private String notifyCycle;
+    @ApiModelProperty("通知岗位")
+    private List<Position> positions;
+    @ApiModelProperty("after-后  front-前")
+    private String around;
+    @ApiModelProperty("是否展示")
+    @JsonAlias({"isShow","is_show"})
+    @JsonProperty("isShow")
+    private Boolean isShow;
+    @ApiModelProperty("时间选项:startTime-工单开始时间;endTime-工单结束时间")
+    @JsonAlias({"timeOption","time_option"})
+    @JsonProperty("timeOption")
+    private String timeOption;
+    @ApiModelProperty("分钟")
+    private String minute;
+    @ApiModelProperty("工单状态:1-未接单,2-未抢单,3-未指派,4-未结束")
+    @JsonAlias({"orderState","order_state"})
+    @JsonProperty("orderState")
+    private String orderState;
+}

+ 138 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/entity/WoFlowPlan.java

@@ -0,0 +1,138 @@
+package com.persagy.fm.workorder.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.persagy.fm.workorder.domain.dto.PostAndDuty;
+import com.persagy.fm.workorder.domain.dto.PostAndDutyNative;
+import com.persagy.fm.workorder.domain.dto.TimeLimitBean;
+import com.persagy.fm.workorder.handler.JsonTypeHandlerFactory;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @author lijie
+ * @since 2021-04-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("wo_flow_plan")
+public class WoFlowPlan extends Model<WoFlowPlan> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 工单类型id
+     */
+    @TableId(value = "plan_id", type = IdType.ASSIGN_ID)
+    private String planId;
+
+    /**
+     * 工单类型名称
+     */
+    @TableField("plan_name")
+    private String planName;
+
+    /**
+     * 项目id
+     */
+    @TableField("project_id")
+    private String projectId;
+
+    /**
+     * 报修是否可以转此类工单,0-不可以,1-可以
+     */
+    @TableField("repair_flag")
+    private String repairFlag;
+
+    /**
+     * 工作类型id,1-维保,2-维修,3-巡检,4-运行,5-安全
+     */
+    @TableField("work_type")
+    private String workType;
+
+    /**
+     * 建筑功能类型
+     */
+    @TableField("function_type")
+    private String functionType;
+
+    /**
+     * 部门id
+     */
+    @TableField("department_id")
+    private String departmentId;
+
+    /**
+     * 设置的此类工单相关要求
+     */
+    @TableField(value = "time_limit",typeHandler = JacksonTypeHandler.class)
+    private TimeLimitBean timeLimit;
+
+    /**
+     * 时间类型,temp-临时,plan-计划
+     */
+    @TableField("excute_type")
+    private String excuteType;
+
+    /**
+     * 岗位职责数据
+     */
+    @TableField(value = "post_and_duty",typeHandler = JsonTypeHandlerFactory.PostAndDutyHandler.class)
+    private List<PostAndDuty> postAndDuty;
+
+    /**
+     * 原生岗位职责数据
+     */
+    @TableField(value = "post_and_duty_native",typeHandler = JacksonTypeHandler.class)
+    private PostAndDutyNative postAndDutyNative;
+
+    /**
+     * 工单类型状态,0-需修订,1-正常
+     */
+    @TableField("plan_status")
+    private String planStatus;
+
+    /**
+     * 版本号
+     */
+    @TableField("version")
+    private Integer version;
+
+    /**
+     * 创建者id
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time",fill = FieldFill.INSERT)
+    private String createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private String updateTime;
+
+    /**
+     * 是否有效
+     */
+    @TableField("valid")
+    private Boolean valid;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.planId;
+    }
+
+}

+ 44 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/vo/QueryFlowPlanListVo.java

@@ -0,0 +1,44 @@
+package com.persagy.fm.workorder.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/***
+ * Description: 查询工单类型列表的VO类
+ * @author : lijie
+ * @date :2021/4/27 16:40
+ * Update By lijie 2021/4/27 16:40
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class QueryFlowPlanListVo extends BaseVo {
+    @ApiModelProperty("项目id")
+    @JsonProperty("project_id")
+    @JsonAlias({"project_id","projectId"})
+    private String projectId;
+    @ApiModelProperty("工单类型名称(支持模糊查询)")
+    @JsonProperty("plan_name")
+    @JsonAlias({"plan_name","planName"})
+    private String planName;
+    @ApiModelProperty("工作类型id,1-维保,2-维修,3-巡检,4-运行,5-安全")
+    @JsonProperty("work_type")
+    @JsonAlias({"work_type","workType"})
+    private String workType;
+    @ApiModelProperty("时间类型,temp-临时,plan-计划")
+    @JsonProperty("execute_type")
+    @JsonAlias({"execute_type","executeType"})
+    private String executeType;
+    @ApiModelProperty(value = "报修是否可以转此类工单,0-不可以,1-可以")
+    @JsonProperty("repair_flag")
+    @JsonAlias({"repair_flag","repairFlag"})
+    private String repairFlag;
+    @ApiModelProperty("是否返回集团工单类型(project_id不为空时有效),0-不返 1-反,默认0")
+    private String returnGroup;
+
+}

+ 49 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/domain/vo/QueryVerifyFlowPlanVo.java

@@ -0,0 +1,49 @@
+package com.persagy.fm.workorder.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.fm.common.model.vo.BaseVo;
+import com.persagy.fm.workorder.domain.dto.PostAndDuty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/***
+ * Description: 验证工单类型岗位职责信息Vo类
+ * @author : lijie
+ * @date :2021/4/27 17:57
+ * Update By lijie 2021/4/27 17:57
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class QueryVerifyFlowPlanVo extends BaseVo {
+    @ApiModelProperty("工单类型id,编辑是需要传,验证工单类型名称是否重复")
+    @JsonAlias({"plan_id","planId"})
+    @JsonProperty("plan_id")
+    private String planId;
+    @ApiModelProperty("工单类型名称")
+    @JsonAlias({"plan_name","planName"})
+    @JsonProperty("plan_name")
+    private String planName;
+    @ApiModelProperty("时间类型编码temp-临时性,plan-计划性")
+    @JsonAlias({"execute_type","executeType"})
+    @JsonProperty("execute_type")
+    @NotBlank(message = "缺少必填项:execute_type")
+    private String executeType;
+    @ApiModelProperty("岗位职责")
+    @JsonAlias({"post_and_duty","postAndDuty"})
+    @JsonProperty("post_and_duty")
+    @NotEmpty(message = "缺少必填项:post_and_duty")
+    private List<PostAndDuty> postAndDuty;
+
+
+
+
+}

+ 12 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/handler/JsonTypeHandlerFactory.java

@@ -0,0 +1,12 @@
+package com.persagy.fm.workorder.handler;
+
+import com.persagy.fm.mybatis.handler.DbJsonTypeHandler;
+import com.persagy.fm.workorder.domain.dto.PostAndDuty;
+
+public class JsonTypeHandlerFactory {
+    public static class PostAndDutyHandler extends DbJsonTypeHandler {
+        public PostAndDutyHandler(Class<?> type) {
+            super(type, PostAndDuty.class);
+        }
+    }
+}

+ 25 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/service/IGeneralDictService.java

@@ -0,0 +1,25 @@
+package com.persagy.fm.workorder.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+
+import java.util.List;
+
+/***
+ * Description: 字典服务接口
+ * @author : lijie
+ * @date :2021/4/9 16:17
+ * Update By lijie 2021/4/9 16:17
+ */
+public interface IGeneralDictService {
+    /***
+     * Description: 根据字典类型查询字典数据
+     * @param dictType :字典类型
+     * @param srcProjectId :项目id
+     * @return : java.util.List<com.persagy.fm.sop.model.vo.GeneralDictVo>
+     * @author : lijie
+     * @date :2021/4/9 16:17
+     * Update By lijie 2021/4/9 16:17
+     */
+    List<GeneralDictVo> queryGeneralDictByKey(String dictType, String srcProjectId);
+}

+ 36 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/service/IWoFlowPlanService.java

@@ -0,0 +1,36 @@
+package com.persagy.fm.workorder.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.persagy.fm.workorder.domain.entity.WoFlowPlan;
+import com.persagy.fm.workorder.domain.vo.QueryFlowPlanListVo;
+import com.persagy.fm.workorder.domain.vo.QueryVerifyFlowPlanVo;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-26
+ */
+public interface IWoFlowPlanService extends IService<WoFlowPlan> {
+    /***
+     * Description: 查询所有的工单类型
+     * @param queryFlowPlanListVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/26 19:13
+     * Update By lijie 2021/4/26 19:13
+     */
+    String queryFlowPlan(QueryFlowPlanListVo queryFlowPlanListVo);
+    /***
+     * Description: 验证工单类型岗位职责信息
+     * @param queryVerifyFlowPlanVo : 请求参数
+     * @return : java.lang.String  
+     * @author : lijie
+     * @date :2021/4/27 17:54
+     * Update By lijie 2021/4/27 17:54
+     */
+    String verifyFlowPlan(QueryVerifyFlowPlanVo queryVerifyFlowPlanVo);
+}

+ 122 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/service/impl/GeneralDictServiceImpl.java

@@ -0,0 +1,122 @@
+package com.persagy.fm.workorder.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.fm.common.constant.CommonConstant;
+import com.persagy.fm.common.constant.enums.ResultEnum;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+import com.persagy.fm.workorder.client.SaasClient;
+import com.persagy.fm.workorder.service.IGeneralDictService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Service
+@RequiredArgsConstructor
+public class GeneralDictServiceImpl implements IGeneralDictService {
+
+    private final SaasClient saasClient;
+
+    /***
+     * Description: 根据字典类型查询字典数据
+     * @param dictType :字典类型
+     * @param srcProjectId :项目id
+     * @return : java.util.List<com.persagy.fm.sop.model.vo.GeneralDictVo>
+     * @author : lijie
+     * @date :2021/4/9 16:17
+     * Update By lijie 2021/4/9 16:17
+     */
+    @Override
+    public List<GeneralDictVo> queryGeneralDictByKey(String dictType, String srcProjectId) {
+        // 1.从saas服务查询符合条件的字典数据
+        List<GeneralDictVo> generalDictVos = queryGeneralDictDataFromSaas(dictType);
+        if (CollUtil.isEmpty(generalDictVos)){
+            return new ArrayList<>();
+        }
+        // 2.处理自定义名称
+        String projectId = StrUtil.blankToDefault(srcProjectId,"");
+        for (GeneralDictVo generalDictVo : generalDictVos) {
+            String customerName = generalDictVo.getCustomerName();
+            if (StrUtil.isNotBlank(customerName) && customerName.startsWith("{")){
+                String tempName = JSONObject.parseObject(customerName).getString(projectId);
+                if (StrUtil.isNotBlank(tempName)){
+                    generalDictVo.setName(tempName);
+                }
+            }
+        }
+        // 3.处理重复数据
+        Set<String> codeNames = new HashSet<>();
+        int size = generalDictVos.size();
+        for (int i=size-1;i>=0;i--){
+            GeneralDictVo generalDictVo = generalDictVos.get(i);
+            String key = generalDictVo.getCode() + "-" + generalDictVo.getName();
+            if (codeNames.contains(key)){
+                generalDictVos.remove(i);
+                continue;
+            }
+            codeNames.add(key);
+        }
+        // 4.根据项目和使用情况过滤
+        List<GeneralDictVo> dictVos = generalDictVos.stream().filter(generalDictVo -> {
+            // 1.根据自定义项目使用与否过滤
+            if (StrUtil.isNotBlank(generalDictVo.getCustomerUse()) && generalDictVo.getCustomerUse().startsWith("{")) {
+                Boolean proCustomerUse = JSONObject.parseObject(generalDictVo.getCustomerUse()).getBoolean(projectId);
+                if (!proCustomerUse) {
+                    return false;
+                }
+            }
+            // 2.根据是否使用过滤
+            return generalDictVo.getDefaultUse();
+        }).collect(Collectors.toList());
+        return dictVos.stream().sorted((o1,o2)->o2.getCode().compareTo(o1.getCode())).collect(Collectors.toList());
+    }
+
+    /***
+     * Description: 从saas服务查询数据字典数据
+     * @param dictType : 字典类型
+     * @return : java.util.List<com.persagy.fm.sop.model.vo.GeneralDictVo>  
+     * @author : lijie
+     * @date :2021/4/9 21:55
+     * Update By lijie 2021/4/9 21:55
+     */
+    private List<GeneralDictVo> queryGeneralDictDataFromSaas(String dictType){
+        JSONObject param = new JSONObject();
+        param.put(CommonConstant.USER_ID, CommonConstant.SYSTEM_ID);
+        param.put(CommonConstant.DICT_TYPE, dictType);
+        String queryStr = saasClient.queryGeneralDictByDictType(param);
+        JSONObject queryObj = JSONObject.parseObject(queryStr);
+        if (ResultEnum.FAILURE.getType().equals(queryObj.getString(ResultEnum.RESULT.getType()))){
+            return new ArrayList<>();
+        }
+        JSONArray content = queryObj.getJSONArray(ResultEnum.CONTENT.getType());
+        if (null==content || content.size()<=0){
+            return new ArrayList<>();
+        }
+        List<GeneralDictVo> generalDictVos = content.toJavaList(GeneralDictVo.class);
+        if (CollUtil.isNotEmpty(generalDictVos)){
+            generalDictVos = generalDictVos
+                    .stream()
+                    .sorted((d1,d2)->{
+                        if (null==d1.getOrder()){
+                            d1.setOrder(-1);
+                        }
+                        if (null==d2.getOrder()){
+                            d2.setOrder(-1);
+                        }
+                        return d1.getOrder().compareTo(d2.getOrder());
+                    })
+                    .collect(Collectors.toList());
+        }
+        return generalDictVos;
+    }
+
+
+
+}

+ 281 - 0
fm-workorder/src/main/java/com/persagy/fm/workorder/service/impl/WoFlowPlanServiceImpl.java

@@ -0,0 +1,281 @@
+package com.persagy.fm.workorder.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.fm.common.constant.enums.BoolEnum;
+import com.persagy.fm.common.constant.enums.DictTypeEnum;
+import com.persagy.fm.common.model.vo.GeneralDictVo;
+import com.persagy.fm.common.old.utils.StringUtil;
+import com.persagy.fm.common.old.utils.ToolsUtil;
+import com.persagy.fm.workorder.constant.FlowPlanConstant;
+import com.persagy.fm.workorder.constant.enums.WoApplyItemEnum;
+import com.persagy.fm.workorder.constant.enums.WoControlModelEnum;
+import com.persagy.fm.workorder.dao.WoFlowPlanMapper;
+import com.persagy.fm.workorder.domain.dto.ApplyItemBean;
+import com.persagy.fm.workorder.domain.dto.DutyBean;
+import com.persagy.fm.workorder.domain.dto.PostAndDuty;
+import com.persagy.fm.workorder.domain.entity.WoFlowPlan;
+import com.persagy.fm.workorder.domain.vo.QueryFlowPlanListVo;
+import com.persagy.fm.workorder.domain.vo.QueryVerifyFlowPlanVo;
+import com.persagy.fm.workorder.service.IGeneralDictService;
+import com.persagy.fm.workorder.service.IWoFlowPlanService;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
+import org.springframework.stereotype.Service;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author lijie
+ * @since 2021-04-26
+ */
+@Service
+@RequiredArgsConstructor
+public class WoFlowPlanServiceImpl extends ServiceImpl<WoFlowPlanMapper, WoFlowPlan> implements IWoFlowPlanService {
+
+    private final IGeneralDictService generalDictService;
+
+    private static final String promptMessageOne = "一套分配方案至少有一个岗位的职责要包含“新建工单”";
+    private static final String promptMessageTwo = "一套分配方案至少有一个岗位的职责要包含“执行”";
+    private static final String promptMessageThree = "一套分配方案至少有一个岗位的职责要包含“申请结束”";
+    private static final String promptMessageFour = "配置一个岗位的职责中有“申请结束”时,必须要有“执行”";
+    private static final String promptMessageFive = "“新建”职责设置新建后指派时,必须要有“指派”";
+    private static final String promptMessageSix = "“申请”、“审核”职责必须选择下级路由岗位";
+
+    /***
+     * Description: 查询所有的工单类型
+     * @param queryFlowPlanListVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/26 19:13
+     * Update By lijie 2021/4/26 19:13
+     */
+    @Override
+    public String queryFlowPlan(QueryFlowPlanListVo queryFlowPlanListVo) {
+        //依据条件进行筛选
+        LambdaQueryWrapper<WoFlowPlan> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WoFlowPlan::getValid,true);
+        if (StrUtil.isNotBlank(queryFlowPlanListVo.getPlanName())){
+            queryWrapper.like(WoFlowPlan::getPlanName, queryFlowPlanListVo.getPlanName());
+        }
+        if (StrUtil.isNotBlank(queryFlowPlanListVo.getWorkType())){
+            queryWrapper.eq(WoFlowPlan::getWorkType, queryFlowPlanListVo.getWorkType());
+        }
+        if (StrUtil.isNotBlank(queryFlowPlanListVo.getRepairFlag())){
+            queryWrapper.eq(WoFlowPlan::getRepairFlag,queryFlowPlanListVo.getRepairFlag());
+        }
+        if (StrUtil.isNotBlank(queryFlowPlanListVo.getExecuteType())){
+            queryWrapper.eq(WoFlowPlan::getExcuteType,queryFlowPlanListVo.getExecuteType());
+        }
+        if (StrUtil.isBlank(queryFlowPlanListVo.getProjectId())){
+            queryWrapper.eq(WoFlowPlan::getProjectId, FlowPlanConstant.GROUP_ID);
+        }
+        List<WoFlowPlan> woFlowPlans = this.list(queryWrapper);
+        if (CollUtil.isEmpty(woFlowPlans)){
+            return ToolsUtil.successJsonMsg(new ArrayList<>());
+        }
+        return ToolsUtil.successJsonMsg(fixQueryResult(woFlowPlans));
+    }
+    /***
+     * Description: 验证工单类型岗位职责信息
+     * @param queryVerifyFlowPlanVo : 请求参数
+     * @return : java.lang.String
+     * @author : lijie
+     * @date :2021/4/27 17:54
+     * Update By lijie 2021/4/27 17:54
+     */
+    @Override
+    public String verifyFlowPlan(QueryVerifyFlowPlanVo queryVerifyFlowPlanVo) {
+        List<PostAndDuty> postAndDutys = queryVerifyFlowPlanVo.getPostAndDuty();
+        JSONArray promptMessages = new JSONArray();
+
+        Map<String, JSONArray> map = new HashMap<String, JSONArray>();
+        map.put("promptMessageOne", JSONArray.parseArray("[\""+promptMessageOne+"\"]"));
+        map.put("promptMessageTwo", JSONArray.parseArray("[\""+promptMessageTwo+"\"]"));
+        map.put("promptMessageThree", JSONArray.parseArray("[\""+promptMessageThree+"\"]"));
+        if (CollUtil.isNotEmpty(postAndDutys)){
+            JSONObject applyItem;
+            String controlCode,applyCode ;
+            boolean applyCloseFlag, executeFlag, assignFlag = false, createEndAssignFlag = false, nextRouteFlag = false;
+            for (PostAndDuty postAndDuty : postAndDutys) {
+                applyCloseFlag = false;
+                executeFlag = false;
+                List<DutyBean> dutyBeans = postAndDuty.getDuty();
+                if (CollUtil.isEmpty(dutyBeans)){
+                    continue;
+                }
+                for (DutyBean dutyBean : dutyBeans) {
+                    controlCode = dutyBean.getCode();
+                    if (WoControlModelEnum.CREATE.getType().equals(controlCode)) {
+                        //-------一个岗位的职责要包含“新建工单”-----
+                        map.remove("promptMessageOne");
+                        //-------判断有无新建后指派功能----------
+                        if (WoControlModelEnum.ASSIGN.getType().equals(dutyBean.getExecutieMode())) {
+                            createEndAssignFlag = true;
+                        }
+                    }
+                    if (WoControlModelEnum.EXECUTE.getType().equals(controlCode)) {
+                        //-------一个岗位的职责要包含“执行”-----
+                        map.remove("promptMessageTwo");
+                        executeFlag = true;
+                    }
+                    if (WoControlModelEnum.APPLY.getType().equals(controlCode)) {
+                        List<ApplyItemBean> applyItems = dutyBean.getApplyItems();
+                        if (CollUtil.isEmpty(applyItems)){
+                            continue;
+                        }
+                        for (ApplyItemBean applyItemBean : applyItems) {
+                            applyCode = applyItemBean.getCode();
+                            if (WoApplyItemEnum.CLOSE.getType().equals(applyCode)) {
+                                //-------一个岗位的职责要包含“申请结束”-----
+                                map.remove("promptMessageThree");
+                                applyCloseFlag = true;
+                            }
+                            if (CollUtil.isNotEmpty(applyItemBean.getNextRoute())){
+                                nextRouteFlag = true;
+                            }
+                        }
+                    }else if (WoControlModelEnum.ASSIGN.getType().equals(controlCode)) {
+                        assignFlag = true;
+                    }else if (WoControlModelEnum.AUDIT.getType().equals(controlCode)) {
+                        List<ApplyItemBean> applyItems = dutyBean.getApplyItems();
+                        if (CollUtil.isEmpty(applyItems)){
+                            continue;
+                        }
+                        for (ApplyItemBean applyItemBean : applyItems) {
+                            if (CollUtil.isNotEmpty(applyItemBean.getNextRoute())){
+                                nextRouteFlag = true;
+                            }
+                        }
+                    }
+                }
+                if (applyCloseFlag && !executeFlag) {
+                    //----------配置一个岗位的职责中有“申请结束”时,必须要有“执行”
+                    map.put("promptMessageFour", JSONArray.parseArray("[\""+promptMessageFour+"\"]"));
+                }
+            }
+            if (createEndAssignFlag && !assignFlag) {
+                map.put("promptMessageFive", JSONArray.parseArray("[\""+promptMessageFive+"\"]"));
+            }
+            if (nextRouteFlag) {
+                map.put("promptMessageFive", JSONArray.parseArray("[\""+promptMessageSix+"\"]"));
+            }
+        }
+        promptMessages.addAll(map.values());
+        verifyFlowPlanName(queryVerifyFlowPlanVo.getPlanId(),queryVerifyFlowPlanVo.getPlanName(),null, null, promptMessages);
+        return ToolsUtil.successJsonMsg(promptMessages);
+    }
+
+    /**
+     * Description: 验证工单类型名是否重复
+     * @param planId: 工单类型id
+     * @param planName: 工单类型名称
+     * @param projectId: 项目id
+     * @param reminds: 提醒语
+     * @param remindArr: 提醒语数组
+     * @author ChenQuanWei
+     * @since 2018年7月27日: 下午5:16:08
+     * Update By ChenQuanWei 2018年7月27日: 下午5:16:08
+     */
+    private void verifyFlowPlanName(String planId, String planName, String projectId, JSONArray reminds, JSONArray remindArr){
+        List<WoFlowPlan> flowPlanArrays = queryFlowPlanByName(planName);
+        if (CollUtil.isEmpty(flowPlanArrays)){
+            return;
+        }
+        for (WoFlowPlan flowPlan : flowPlanArrays) {
+            if (!planName.equals(flowPlan.getPlanName()) || flowPlan.getPlanId().equals(planId)){
+                continue;
+            }
+            String destProjectId = flowPlan.getProjectId();
+            if (StrUtil.isBlank(projectId)
+                  || StrUtil.isBlank(destProjectId)
+                  || FlowPlanConstant.GROUP_ID.equals(destProjectId)
+                  || projectId.equals(destProjectId)){
+                reminds = reminds == null ? new JSONArray() : reminds;
+                reminds.add("工单类型名称重复!");
+                remindArr.add(reminds);
+                break;
+            }
+        }
+    }
+
+    /***
+     * Description: 根据工单类型名称查询工单类型
+     * @param planName : 工单类型名称
+     * @return : com.alibaba.fastjson.JSONArray
+     * @author : lijie
+     * @date :2021/4/28 10:27
+     * Update By lijie 2021/4/28 10:27
+     */
+    private List<WoFlowPlan> queryFlowPlanByName(String planName){
+        if (StrUtil.isBlank(planName)){
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<WoFlowPlan> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WoFlowPlan::getPlanName,planName);
+        queryWrapper.eq(WoFlowPlan::getValid, true);
+        return this.list(queryWrapper);
+    }
+
+    /**
+     * Description: 整理查询出的流转方案返回格式
+     * @param woFlowPlans:结果集
+     * @return
+     * @throws Exception JSONArray
+     * @author ChenQuanWei
+     * @since 2018年7月5日: 上午9:37:54
+     * Update By lijie 2021年4月27日17:52:11
+     */
+    private JSONArray fixQueryResult(List<WoFlowPlan> woFlowPlans){
+        String workType, executeType;
+        JSONArray flowPlanArrays = new JSONArray();
+        List<GeneralDictVo> workTypes = generalDictService.queryGeneralDictByKey(DictTypeEnum.WORK_TYPE.getType(), null);
+        List<GeneralDictVo> woExecuteTypes = generalDictService.queryGeneralDictByKey(DictTypeEnum.WO_EXECUTE_TYPE.getType(), null);
+        Map<String,String> dictTypeNameMap = new HashMap<>();
+        dictTypeNameMap.putAll(workTypes.stream().collect(Collectors.toMap(GeneralDictVo::getCode,GeneralDictVo::getName,(k1,k2)->k1)));
+        dictTypeNameMap.putAll(woExecuteTypes.stream().collect(Collectors.toMap(GeneralDictVo::getCode,GeneralDictVo::getName,(k1,k2)->k1)));
+        for (int i = 0; i < woFlowPlans.size(); i++) {
+            JSONObject flowPlans = new JSONObject(),postDuty;
+            //获取具体的一条信息,从中筛选前端所需信息
+            WoFlowPlan flowPlan = woFlowPlans.get(i);
+            workType = flowPlan.getWorkType();
+            executeType = flowPlan.getExcuteType();
+            flowPlans.put("plan_id", flowPlan.getPlanId());
+            flowPlans.put("plan_name", flowPlan.getPlanName());
+            flowPlans.put("project_id", flowPlan.getProjectId());
+            flowPlans.put("work_type", workType);
+            flowPlans.put("execute_type", executeType);
+            flowPlans.put("repair_flag", flowPlan.getRepairFlag());
+            flowPlans.put("plan_status", flowPlan.getPlanStatus());
+            flowPlans.put("create_time", flowPlan.getCreateTime());
+            flowPlans.put("work_type_name", dictTypeNameMap.getOrDefault(workType,""));
+            flowPlans.put("execute_type_name", dictTypeNameMap.getOrDefault(executeType,""));
+            //岗位名称
+            List<PostAndDuty> postAndDutys = flowPlan.getPostAndDuty();
+            if (CollUtil.isNotEmpty(postAndDutys)){
+                String positionStr = postAndDutys.stream()
+                        .filter(postAndDuty -> StrUtil.isNotBlank(postAndDuty.getName()))
+                        .map(PostAndDuty::getName)
+                        .collect(Collectors.joining("、"));
+                flowPlans.put("position", positionStr);
+            }
+            flowPlanArrays.add(flowPlans);
+        }
+        return flowPlanArrays;
+    }
+}

+ 5 - 0
fm-workorder/src/main/resources/mapper/WoFlowPlanMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.persagy.fm.workorder.dao.WoFlowPlanMapper">
+
+</mapper>