Browse Source

feature 增加危险作业同步接口

xiahan 2 months ago
parent
commit
86303bf2a2
46 changed files with 2722 additions and 87 deletions
  1. 48 3
      js-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java
  2. 19 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspAcceptanceApplicationDao.java
  3. 18 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspCompanyBasicInfoDao.java
  4. 19 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspInspectrecordsDao.java
  5. 19 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspOperatorInformationDap.java
  6. 18 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspSafetyBriefingDao.java
  7. 0 9
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/RiskSynchronizationDao.java
  8. 1 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/SaveCheckCommonDao.java
  9. 13 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspAcceptanceApplicationService.java
  10. 13 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspCompanyBasicInfoService.java
  11. 13 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspInspectrecordsService.java
  12. 14 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspOperatorInformationService.java
  13. 13 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspSafetyBriefingService.java
  14. 3 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/SynchronizationService.java
  15. 23 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspAcceptanceApplicationServiceImpl.java
  16. 23 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspCompanyBasicInfoServiceImpl.java
  17. 22 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspInspectrecordsServiceImpl.java
  18. 23 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspOperatorInformationServiceImpl.java
  19. 23 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspSafetyBriefingServiceImpl.java
  20. 150 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DHStrategy.java
  21. 185 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DLStrategy.java
  22. 183 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DTStrategy.java
  23. 181 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DZStrategy.java
  24. 180 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/GCStrategy.java
  25. 182 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/LSYDStrategy.java
  26. 198 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/MBCDStrategy.java
  27. 23 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/RiskContext.java
  28. 130 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/RiskDataConversionStrategy.java
  29. 181 0
      js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/SXKJStrategy.java
  30. 57 1
      js-security/security-common/src/main/java/com/rongwei/sfcommon/utils/CommonUtil.java
  31. 7 3
      js-security/security-common/src/main/resources/mybatis/RiskSynchronizationDao.xml
  32. 7 0
      js-security/security-common/src/main/resources/mybatis/SaveCheckCommonDao.xml
  33. 172 0
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspAcceptanceApplicationDo.java
  34. 138 0
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspCompanyBasicInfoDo.java
  35. 38 47
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDhzyDo.java
  36. 2 1
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDlzzDo.java
  37. 2 0
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDtzyDo.java
  38. 2 1
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDzzyDo.java
  39. 2 1
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspGczyDo.java
  40. 128 0
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspInspectrecordsDo.java
  41. 2 1
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspLsydzyDo.java
  42. 2 1
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspMbcdzyDo.java
  43. 81 0
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspOperatorInformationDo.java
  44. 137 0
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspSafetyBriefingDo.java
  45. 2 0
      js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspSxkjzyDo.java
  46. 25 19
      js-security/security-server/src/main/java/com/rongwei/savecheck/controller/SynchronizationController.java

+ 48 - 3
js-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -559,6 +559,7 @@ public class SaveConstans {
         public static final String DATE_PATTERN_YMD_SLASH = "yyyy/MM/dd";
         public static final String DATE_PATTERN_YM_UNDERLINE = "yyyy_MM";
         public static final String DATE_PATTERN_YMD_POINT = "yyyy.MM.dd";
+        public static final String DATE_PATTERN_YMD14 = "yyyyMMddHHmmss";
     }
 
     /**
@@ -645,7 +646,7 @@ public class SaveConstans {
     }};
 
 
-    public static final class AsyncAddress{
+    public static final class AsyncAddress {
         /**
          * 风险四色图
          */
@@ -723,9 +724,41 @@ public class SaveConstans {
          * 上报专项检查隐患信息表结构
          */
         public static final String TBBASECHECKDANGERURL = "/api/wwyt/tb_base_check_danger_List";
+        /**
+         * 动火作业
+         */
+        public static final String  T_DHZY="/api/TSZY/t_dhzy/add";
+        /**
+         * 受限空间
+         */
+        public static final String  T_SXKJZY="/api/TSZY/t_sxkjzy/add";
+        /**
+         * 临时用电
+         */
+        public static final String  T_LSYDZY="/api/TSZY/t_lsydzy/add";
+        /**
+         * 高处
+         */
+        public static final String  T_GCZY="/api/TSZY/t_gczy/add";
+        /**
+         * 吊装
+         */
+        public static final String  T_DZZY="/api/TSZY/t_dzzy/add";
+        /**
+         * 盲板抽堵
+         */
+        public static final String  T_MBCDZY="/api/TSZY/t_mbcdzy/add";
+        /**
+         * 动土
+         */
+        public static final String  T_DTZY="/api/TSZY/t_dtzy/add";
+        /**
+         * 断路作业
+         */
+        public static final String  T_DLZY="/api/TSZY/t_dlzy/add";
     }
 
-    public static final class AsyncStatus{
+    public static final class AsyncStatus {
         /**
          * 待同步
          */
@@ -742,6 +775,18 @@ public class SaveConstans {
 
     // 企业编码
     public final static String ENTERPRISECODE = "001";
-
+    /**
+     * 作业种类
+     */
+    public static final Map<String, String> CERTIFICATE_TYPE = new HashMap<String, String>() {{
+        put("80", "电焊工");
+        put("70", "低压电工");
+        put("60", "高压电工");
+        put("50", "高处操作工");
+        put("40", "压力管道工");
+        put("30", "压力容器工");
+        put("20", "行车工");
+        put("10", "叉车工");
+    }};
 
 }

+ 19 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspAcceptanceApplicationDao.java

@@ -0,0 +1,19 @@
+package com.rongwei.sfcommon.sys.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.scentity.domian.AspAcceptanceApplicationDo;
+
+/**
+* @author libai
+* @description 针对表【asp_acceptance_application(危险作业——验收申请)】的数据库操作Mapper
+* @createDate 2025-06-06 14:58:37
+* @Entity generator.domain.AspAcceptanceApplication
+*/
+public interface AspAcceptanceApplicationDao extends BaseMapper<AspAcceptanceApplicationDo> {
+
+}
+
+
+
+

+ 18 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspCompanyBasicInfoDao.java

@@ -0,0 +1,18 @@
+package com.rongwei.sfcommon.sys.dao;
+
+import com.rongwe.scentity.domian.AspCompanyBasicInfoDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author libai
+* @description 针对表【asp_company_basic_info(企业基本信息 )】的数据库操作Mapper
+* @createDate 2025-06-05 16:22:39
+* @Entity generator.domain.AspCompanyBasicInfo
+*/
+public interface AspCompanyBasicInfoDao extends BaseMapper<AspCompanyBasicInfoDo> {
+
+}
+
+
+
+

+ 19 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspInspectrecordsDao.java

@@ -0,0 +1,19 @@
+package com.rongwei.sfcommon.sys.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.scentity.domian.AspInspectrecordsDo;
+
+/**
+* @author libai
+* @description 针对表【asp_inspectrecords(危险作业——检查记录)】的数据库操作Mapper
+* @createDate 2025-06-05 15:17:04
+* @Entity generator.domain.AspInspectrecords
+*/
+public interface AspInspectrecordsDao extends BaseMapper<AspInspectrecordsDo> {
+
+}
+
+
+
+

+ 19 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspOperatorInformationDap.java

@@ -0,0 +1,19 @@
+package com.rongwei.sfcommon.sys.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.scentity.domian.AspOperatorInformationDo;
+
+/**
+* @author libai
+* @description 针对表【asp_operator_information(作业人员信息)】的数据库操作Mapper
+* @createDate 2025-06-05 14:45:23
+* @Entity generator.domain.AspOperatorInformation
+*/
+public interface AspOperatorInformationDap extends BaseMapper<AspOperatorInformationDo> {
+
+}
+
+
+
+

+ 18 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/AspSafetyBriefingDao.java

@@ -0,0 +1,18 @@
+package com.rongwei.sfcommon.sys.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.scentity.domian.AspSafetyBriefingDo;
+
+/**
+ * @author libai
+ * @description 针对表【asp_safety_briefing(安全交底)】的数据库操作Mapper
+ * @createDate 2025-06-05 15:29:46
+ * @Entity generator.domain.AspSafetyBriefing
+ */
+public interface AspSafetyBriefingDao extends BaseMapper<AspSafetyBriefingDo> {
+
+}
+
+
+
+

+ 0 - 9
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/RiskSynchronizationDao.java

@@ -15,15 +15,6 @@ import java.util.List;
 public interface RiskSynchronizationDao extends BaseMapper<AspRiskMapDo> {
 
 
-    @Select({
-            "<script>",
-            "SELECT * FROM sys_file_item",
-            "WHERE ID IN",
-            "<foreach item='id' collection='distributeIdList' open='(' separator=',' close=')'>",
-            "#{id}",
-            "</foreach>",
-            "</script>"
-    })
     List<SysFileItemDo> getFilePathById(@Param("distributeIdList") List<String> distributeIdList);
 
 

+ 1 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/SaveCheckCommonDao.java

@@ -38,6 +38,7 @@ public interface SaveCheckCommonDao {
     @Select("select * from sys_file_item where ID = #{id}")
     SysFileItemDo getFileItemByID(@Param("id") String id);
 
+    List<SysFileItemDo> getFileItemByIds(@Param("id") List<String> ids);
 
     List<CheckAreaVo> getCheckArea(@Param("tenantid") String tenantid);
 

+ 13 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspAcceptanceApplicationService.java

@@ -0,0 +1,13 @@
+package com.rongwei.sfcommon.sys.service;
+
+import com.rongwe.scentity.domian.AspAcceptanceApplicationDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author libai
+* @description 针对表【asp_acceptance_application(危险作业——验收申请)】的数据库操作Service
+* @createDate 2025-06-06 14:58:37
+*/
+public interface AspAcceptanceApplicationService extends IService<AspAcceptanceApplicationDo> {
+
+}

+ 13 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspCompanyBasicInfoService.java

@@ -0,0 +1,13 @@
+package com.rongwei.sfcommon.sys.service;
+
+import com.rongwe.scentity.domian.AspCompanyBasicInfoDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author libai
+* @description 针对表【asp_company_basic_info(企业基本信息 )】的数据库操作Service
+* @createDate 2025-06-05 16:22:39
+*/
+public interface AspCompanyBasicInfoService extends IService<AspCompanyBasicInfoDo> {
+
+}

+ 13 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspInspectrecordsService.java

@@ -0,0 +1,13 @@
+package com.rongwei.sfcommon.sys.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.scentity.domian.AspInspectrecordsDo;
+
+/**
+ * @author libai
+ * @description 针对表【asp_inspectrecords(危险作业——检查记录)】的数据库操作Service
+ * @createDate 2025-06-05 15:17:04
+ */
+public interface AspInspectrecordsService extends IService<AspInspectrecordsDo> {
+
+}

+ 14 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspOperatorInformationService.java

@@ -0,0 +1,14 @@
+package com.rongwei.sfcommon.sys.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.scentity.domian.AspOperatorInformationDo;
+
+/**
+ * @author libai
+ * @description 针对表【asp_operator_information(作业人员信息)】的数据库操作Service
+ * @createDate 2025-06-05 14:45:23
+ */
+public interface AspOperatorInformationService extends IService<AspOperatorInformationDo> {
+
+}

+ 13 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/AspSafetyBriefingService.java

@@ -0,0 +1,13 @@
+package com.rongwei.sfcommon.sys.service;
+
+import com.rongwe.scentity.domian.AspSafetyBriefingDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author libai
+* @description 针对表【asp_safety_briefing(安全交底)】的数据库操作Service
+* @createDate 2025-06-05 15:29:46
+*/
+public interface AspSafetyBriefingService extends IService<AspSafetyBriefingDo> {
+
+}

+ 3 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/SynchronizationService.java

@@ -3,6 +3,7 @@ package com.rongwei.sfcommon.sys.service;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.rongwei.sfcommon.utils.Result;
+import org.springframework.web.bind.annotation.PathVariable;
 
 import java.io.*;
 import java.net.*;
@@ -79,6 +80,8 @@ public interface SynchronizationService {
      **/
     void deviceStopSynchronizationList(List<String> ids);
 
+    void asyncRiskTask(List<String> ids,String type);
+
     default Result dataPush(String ip, String address, List<Map<String, Object>> syncDataMapList,String token) {
         StringBuilder failureReason = new StringBuilder();
         try {

+ 23 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspAcceptanceApplicationServiceImpl.java

@@ -0,0 +1,23 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.rongwe.scentity.domian.AspAcceptanceApplicationDo;
+import com.rongwei.sfcommon.sys.dao.AspAcceptanceApplicationDao;
+import com.rongwei.sfcommon.sys.service.AspAcceptanceApplicationService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【asp_acceptance_application(危险作业——验收申请)】的数据库操作Service实现
+* @createDate 2025-06-06 14:58:37
+*/
+@Service
+public class AspAcceptanceApplicationServiceImpl extends ServiceImpl<AspAcceptanceApplicationDao, AspAcceptanceApplicationDo>
+    implements AspAcceptanceApplicationService {
+
+}
+
+
+
+

+ 23 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspCompanyBasicInfoServiceImpl.java

@@ -0,0 +1,23 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.rongwe.scentity.domian.AspCompanyBasicInfoDo;
+import com.rongwei.sfcommon.sys.dao.AspCompanyBasicInfoDao;
+import com.rongwei.sfcommon.sys.service.AspCompanyBasicInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【asp_company_basic_info(企业基本信息 )】的数据库操作Service实现
+* @createDate 2025-06-05 16:22:39
+*/
+@Service
+public class AspCompanyBasicInfoServiceImpl extends ServiceImpl<AspCompanyBasicInfoDao, AspCompanyBasicInfoDo>
+    implements AspCompanyBasicInfoService {
+
+}
+
+
+
+

+ 22 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspInspectrecordsServiceImpl.java

@@ -0,0 +1,22 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwe.scentity.domian.AspInspectrecordsDo;
+import com.rongwei.sfcommon.sys.dao.AspInspectrecordsDao;
+import com.rongwei.sfcommon.sys.service.AspInspectrecordsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author libai
+ * @description 针对表【asp_inspectrecords(危险作业——检查记录)】的数据库操作Service实现
+ * @createDate 2025-06-05 15:17:04
+ */
+@Service
+public class AspInspectrecordsServiceImpl extends ServiceImpl<AspInspectrecordsDao, AspInspectrecordsDo>
+        implements AspInspectrecordsService {
+
+}
+
+
+
+

+ 23 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspOperatorInformationServiceImpl.java

@@ -0,0 +1,23 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwe.scentity.domian.AspOperatorInformationDo;
+import com.rongwei.sfcommon.sys.dao.AspOperatorInformationDap;
+
+import com.rongwei.sfcommon.sys.service.AspOperatorInformationService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【asp_operator_information(作业人员信息)】的数据库操作Service实现
+* @createDate 2025-06-05 14:45:23
+*/
+@Service
+public class AspOperatorInformationServiceImpl extends ServiceImpl<AspOperatorInformationDap, AspOperatorInformationDo>
+    implements AspOperatorInformationService {
+
+}
+
+
+
+

+ 23 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/AspSafetyBriefingServiceImpl.java

@@ -0,0 +1,23 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.rongwe.scentity.domian.AspSafetyBriefingDo;
+import com.rongwei.sfcommon.sys.dao.AspSafetyBriefingDao;
+import com.rongwei.sfcommon.sys.service.AspSafetyBriefingService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【asp_safety_briefing(安全交底)】的数据库操作Service实现
+* @createDate 2025-06-05 15:29:46
+*/
+@Service
+public class AspSafetyBriefingServiceImpl extends ServiceImpl<AspSafetyBriefingDao, AspSafetyBriefingDo>
+    implements AspSafetyBriefingService {
+
+}
+
+
+
+

+ 150 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DHStrategy.java

@@ -0,0 +1,150 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_DHZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.CERTIFICATE_TYPE;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * DHZYStrategy class
+ * 动火作业
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class DHStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(DHStrategy.class);
+    @Autowired
+    private DhzyServiceImpl dhzyService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s,%s,%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+        List<AspDhzyDo> aspDhzyDos = dhzyService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>().in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspDhzyDo::getId).collect(Collectors.toList())).eq(BaseDo::getDeleted, 0));
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>().in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspDhzyDo::getId).collect(Collectors.toList())).eq(BaseDo::getDeleted, 0));
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>().in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspDhzyDo::getId).collect(Collectors.toList())).eq(BaseDo::getDeleted, 0));
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>().in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspDhzyDo::getId).collect(Collectors.toList())).eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+            String workUsers = list.stream().filter(data -> zyDo.getId().equals(data.getJobid())).map(info -> String.format(HOMEWORKER_INFORMATION, info.getName(), info.getIdcard(), CERTIFICATE_TYPE.get(info.getJobtype()), info.getCertificateno())).collect(Collectors.joining(","));
+            // 降序排序
+            AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream().filter(data -> zyDo.getId().equals(data.getJobid())).max(Comparator.comparing(AspInspectrecordsDo::getCreatedate)).orElse(null);
+            // 降序排序
+            AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream().filter(data -> zyDo.getId().equals(data.getJobid())).max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate)).orElse(null);
+            AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream().filter(data -> zyDo.getId().equals(data.getJobid())).findFirst().orElse(null);
+            Map<String, Object> dataMap = new HashMap<>();
+            // 1-10
+            dataMap.put("UUID", zyDo.getId()); // 作业ID
+            dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+            dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+            dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+            dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+            dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+            dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+            dataMap.put("ZYNR", zyDo.getZynr()); // 作业内容
+            dataMap.put("ZYWZ", zyDo.getZywz()); // 作业位置
+            dataMap.put("DHZYJB", zyDo.getDhzyjb()); // 动火作业级别
+
+            // 11-20
+            dataMap.put("DHFS", zyDo.getDhfs()); // 动火方式
+            dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+            dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+            dataMap.put("ZYFZR", zyDo.getZyfzr()); // 作业负责人
+            dataMap.put("ZYRYXX", workUsers); // 作业人员信息
+            dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+            dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+            dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+            dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+            if (aspInspectrecordsDo != null) {
+                dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                dataMap.put("FHYP", aspInspectrecordsDo.getFhyp()); // 防护用品
+                dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+            }
+
+
+            // 21-30
+            dataMap.put("FXYFCS", ""); // 风险预防措施
+            dataMap.put("JHR", zyDo.getJhr()); // 监护人
+            dataMap.put("JHRGW", ""); // 监护人岗位
+            dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+            if (aspAcceptanceApplicationDo != null) {
+                dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+            }
+
+            if (aspSafetyBriefingDo != null) {
+                dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+            }
+
+            dataMap.put("DQZT", 3); // 当前状态 默认作业后
+            // 31-40
+            dataMap.put("LONGITUDE", zyDo.getLongitude().toString()); // 经度
+            dataMap.put("LATITUDE", zyDo.getLatitude().toString()); // 纬度
+            dataMap.put("VIDEO_URL", ""); // 视频回放地址
+            dataMap.put("CREATE_TIME", zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+            dataMap.put("CREATE_BY", zyDo.getCreateusername()); // 创建人
+            dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+            dataMap.put("UPDATE_BY", zyDo.getModifyusername()); // 最后修改人
+            dataMap.put("DELETE_MARK", zyDo.getDeleted()); // 删除标识
+            dataMap.put("COMPANY_CODE", ""); // 企业编码
+            dataMap.put("FileUrl", ""); // 电子作业票附件
+            dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj())); // 计划开始时间
+            // 41-42
+            dataMap.put("JHJSSJ", zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+
+            Result result = this.dataPush(ip, T_DHZY, dataMap, token);
+            String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+            String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+            // 状态更新
+            dhzyService.update(new LambdaUpdateWrapper<AspDhzyDo>().eq(AspDhzyDo::getId, id)
+                    .set(AspDhzyDo::getSyncresult, resultContent)
+                    .set(AspDhzyDo::getSyncstate, state));
+        });
+
+    }
+}

+ 185 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DLStrategy.java

@@ -0,0 +1,185 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_DHZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_DLZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * DLStrategy class
+ * 断路作业
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class DLStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(DHStrategy.class);
+    @Autowired
+    private AspDlzzServiceImpl dlzzService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+
+        List<AspDlzzDo> aspDhzyDos = dlzzService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>()
+                .in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspDlzzDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>()
+                .in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspDlzzDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>()
+                .in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspDlzzDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>()
+                .in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspDlzzDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+            String workUsers = list.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .map(info -> String.format(HOMEWORKER_INFORMATION, info.getName(), info.getIdcard()))
+                    .collect(Collectors.joining(","));
+            // 降序排序
+            AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .max(Comparator.comparing(AspInspectrecordsDo::getCreatedate))
+                    .orElse(null);
+            // 降序排序
+            AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate))
+                    .orElse(null);
+            AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .findFirst()
+                    .orElse(null);
+            Map<String, Object> dataMap = new HashMap<>();
+
+
+            dataMap.put("UUID", zyDo.getId()); // 作业ID
+            dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+            dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+            dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+            dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+            dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+            dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+
+
+            // 断路专项组(8-15)
+            dataMap.put("SJXGDWBM", zyDo.getSjxgdwbm());                 // 涉及相关单位(部门)(M)
+            dataMap.put("DLYY", zyDo.getDlyy());                     // 断路原因(c..200)
+            dataMap.put("DLDDSYT", CommonUtil.fileConvertBase64(zyDo.getDlddsyt()));                  // 断路地段示意图(PNG/JPEG base64)
+            dataMap.put("bzrmc", zyDo.getBzrmc());                    // 编制人名称(M/O)
+            dataMap.put("bzsj", zyDo.getBzsj() == null ? "" : sdf.format(zyDo.getBzsj()));                     // 编制时间(M/O,yyyyMMddHHmmss)
+
+            // 实施信息组(16-22)
+            dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+            dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+
+            dataMap.put("ZYFZR", zyDo.getZyfzr()); // 作业负责人
+            dataMap.put("ZYRYXX", workUsers); // 作业人员信息
+            dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+            dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+            dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+            dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+            if (aspInspectrecordsDo != null) {
+                dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                dataMap.put("FHYP", aspInspectrecordsDo.getFhyp()); // 防护用品
+                dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+            }
+
+
+            // 风险管控组(25-27)
+            dataMap.put("FXYFCS", "");                   // 风险预防措施
+
+
+            // 安全监管组(28-34)
+            dataMap.put("JHR", zyDo.getJhr()); // 监护人
+            dataMap.put("JHRGW", ""); // 监护人岗位
+            dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+            if(aspAcceptanceApplicationDo!=null){
+                dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+            }
+            if (aspSafetyBriefingDo != null) {
+                dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+            }
+
+            dataMap.put("DQZT", 3);                     // 当前状态(1:作业前/2:作业中/3:作业后)
+
+            // 地理信息组(35-36)
+            dataMap.put("LONGITUDE", zyDo.getLongitude().toString()); // 经度
+            dataMap.put("LATITUDE", zyDo.getLatitude().toString()); // 纬度
+
+            // 系统管理组(37-44)
+            dataMap.put("VIDEO_URL", "");                // 视频回放地址
+            dataMap.put("CREATE_TIME", zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+            dataMap.put("CREATE_BY", zyDo.getCreateusername()); // 创建人
+            dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+            dataMap.put("UPDATE_BY", zyDo.getModifyusername()); // 最后修改人
+            dataMap.put("DELETE_MARK", zyDo.getDeleted()); // 删除标识
+            dataMap.put("COMPANY_CODE", ""); // 企业编码
+            dataMap.put("FileUrl", ""); // 电子作业票附件
+            // 计划信息组(45-47)
+            dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj())); // 计划开始时间
+            // 41-42
+            dataMap.put("JHJSSJ", zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+            // 补充说明组(12)
+            dataMap.put("XGSM", zyDo.getXgsm());                     // 相关说明(c..500)
+            Result result = this.dataPush(ip, T_DLZY, dataMap, token);
+            String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+            String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+            // 状态更新
+            dlzzService.update(new LambdaUpdateWrapper<AspDlzzDo>().eq(AspDlzzDo::getId, id)
+                    .set(AspDlzzDo::getSyncresult, resultContent)
+                    .set(AspDlzzDo::getSyncstate, state));
+        });
+    }
+}

+ 183 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DTStrategy.java

@@ -0,0 +1,183 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_DHZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_DTZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * DTStrategy class
+ * 动土作业
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class DTStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(DHStrategy.class);
+    @Autowired
+    private AspDtzyServiceImpl dtzyService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+
+        List<AspDtzyDo> aspDhzyDos = dtzyService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>()
+                .in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspDtzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>()
+                .in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspDtzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>()
+                .in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspDtzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>()
+                .in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspDtzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+            Map<String, Object> dataMap = new HashMap<>();
+            String workUsers = list.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .map(info->String.format(HOMEWORKER_INFORMATION,info.getName(),info.getIdcard()))
+                    .collect(Collectors.joining(","));
+            // 降序排序
+            AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .max(Comparator.comparing(AspInspectrecordsDo::getCreatedate))
+                    .orElse(null);
+            // 降序排序
+            AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate))
+                    .orElse(null);
+            AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .findFirst()
+                    .orElse(null);
+            // 基础信息组(1-7)
+
+            dataMap.put("UUID", zyDo.getId()); // 作业ID
+            dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+            dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+            dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+            dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+            dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+            dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+
+            // 作业描述组(8-10)
+            dataMap.put("ZYFWFS", zyDo.getZyfwfs());                   // 作业范围/内容/方式(c..500)
+            dataMap.put("ZYJT", CommonUtil.fileConvertBase64(zyDo.getZyjt()));                     // 作业简图(PNG/JPEG base64)
+            dataMap.put("ZYNR", zyDo.getZynr());                     // 作业内容(c..250)
+
+            // 实施信息组(11-17)
+            dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+            dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+
+            dataMap.put("ZYFZR", zyDo.getZyfzr()); // 作业负责人
+            dataMap.put("ZYWZ", zyDo.getZywz());                     // 作业位置(c..100)
+            dataMap.put("ZYRYXX", workUsers);                   // 作业人员信息(姓名:身份证号)
+            dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+            dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+
+            // 特殊作业关联组(18-19)
+            dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+            dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+
+
+            // 风险管控组(20-22)
+            if(aspInspectrecordsDo!=null){
+                dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                dataMap.put("FHYP",aspInspectrecordsDo.getFhyp()); // 防护用品
+                dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+            }
+            dataMap.put("FXYFCS", "");                   // 风险预防措施
+
+
+            // 安全监管组(23-29)
+            dataMap.put("DQZT", 3);                     // 当前状态(1:作业前/2:作业中/3:作业后)
+            dataMap.put("JHR", zyDo.getJhr()); // 监护人
+            dataMap.put("JHRGW", ""); // 监护人岗位
+            dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+            if(aspAcceptanceApplicationDo!=null){
+                dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+            }
+            if(aspSafetyBriefingDo!=null){
+                dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+            }
+
+            // 地理信息组(30-31)
+            dataMap.put("LONGITUDE", zyDo.getLongitude().toString()); // 经度
+            dataMap.put("LATITUDE", zyDo.getLatitude().toString()); // 纬度
+
+            // 系统管理组(32-39)
+            dataMap.put("CREATE_TIME",zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+            dataMap.put("CREATE_BY",zyDo.getCreateusername()); // 创建人
+            dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+            dataMap.put("UPDATE_BY",zyDo.getModifyusername()); // 最后修改人
+            dataMap.put("DELETE_MARK",zyDo.getDeleted()); // 删除标识
+            dataMap.put("COMPANY_CODE", "");             // 企业编码(n..9)
+            dataMap.put("FileUrl", "");                  // 电子作业票附件(PDF base64)
+
+            // 计划信息组(40-42)
+            dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj()) ); // 计划开始时间
+            // 41-42
+            dataMap.put("JHJSSJ",  zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+            Result result =this.dataPush(ip,T_DTZY,dataMap,token);
+            String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+            String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+            // 状态更新
+            dtzyService.update(new LambdaUpdateWrapper<AspDtzyDo>().eq(AspDtzyDo::getId, id)
+                    .set(AspDtzyDo::getSyncresult, resultContent)
+                    .set(AspDtzyDo::getSyncstate, state));
+        });
+    }
+}

+ 181 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/DZStrategy.java

@@ -0,0 +1,181 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_DHZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_DZZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * DZStrategy class
+ * 吊装作业
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class DZStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(DHStrategy.class);
+    @Autowired
+    private AspDzzyServiceImpl dtzyService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+
+        List<AspDzzyDo> aspDhzyDos = dtzyService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>()
+                .in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspDzzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>()
+                .in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspDzzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>()
+                .in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspDzzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>()
+                .in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspDzzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+            Map<String, Object> dataMap = new HashMap<>();
+            String workUsers = list.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .map(info->String.format(HOMEWORKER_INFORMATION,info.getName(),info.getIdcard()))
+                    .collect(Collectors.joining(","));
+            // 降序排序
+            AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .max(Comparator.comparing(AspInspectrecordsDo::getCreatedate))
+                    .orElse(null);
+            // 降序排序
+            AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate))
+                    .orElse(null);
+            AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream()
+                    .filter(data -> zyDo.getId().equals(data.getJobid()))
+                    .findFirst()
+                    .orElse(null);
+            // 基础信息组(1-9)
+            dataMap.put("UUID", zyDo.getId()); // 作业ID
+            dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+            dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+            dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+            dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+            dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+            dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+            dataMap.put("ZYWZ",zyDo.getZywz());                     // 作业位置(吊装作业地点)
+
+            // 吊装专项组(10-11)
+            dataMap.put("DJMC",zyDo.getDjmc());                     // 吊具名称(c..50)
+            dataMap.put("DWZL", zyDo.getDwzl());                     // 吊物质量(t)(n..4)
+
+            // 实施信息组(12-21)
+            dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+            dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+            dataMap.put("ZYFZR",zyDo.getZyfzr());                    // 作业负责人
+            dataMap.put("DZNR", zyDo.getDznr());                     // 吊装内容(c..250)
+            dataMap.put("ZYRYXX",workUsers);                   // 作业人员信息(姓名:身份证号)
+            dataMap.put("DZZHRY", zyDo.getDzzhry());                   // 吊装指挥人员(M)
+            dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+            dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+
+            dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+            dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+
+
+            // 风险管控组(20-22)
+            if(aspInspectrecordsDo!=null){
+                dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                dataMap.put("FHYP",aspInspectrecordsDo.getFhyp()); // 防护用品
+                dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+            }
+            dataMap.put("FXYFCS", "");                   // 风险预防措施
+
+
+            // 安全监管组(25-31)
+            dataMap.put("JHR", zyDo.getJhr()); // 监护人
+            dataMap.put("JHRGW", ""); // 监护人岗位
+            dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+            if(aspAcceptanceApplicationDo!=null){
+                dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+            }
+            if(aspSafetyBriefingDo!=null){
+                dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+            }
+            dataMap.put("SSR",zyDo.getSsr());                      // 司索人(M)
+            dataMap.put("DQZT", 3);                     // 当前状态(1:作业前/2:作业中/3:作业后)
+
+            // 地理信息组(32-33)
+            dataMap.put("LONGITUDE", zyDo.getLongitude().toString()); // 经度
+            dataMap.put("LATITUDE", zyDo.getLatitude().toString()); // 纬度
+
+            // 系统管理组(34-41)
+            dataMap.put("VIDEO_URL", "");                // 视频回放地址
+            dataMap.put("CREATE_TIME",zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+            dataMap.put("CREATE_BY",zyDo.getCreateusername()); // 创建人
+            dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+            dataMap.put("UPDATE_BY",zyDo.getModifyusername()); // 最后修改人
+            dataMap.put("DELETE_MARK",zyDo.getDeleted()); // 删除标识
+            dataMap.put("COMPANY_CODE", "");             // 企业编码(n..9)
+            dataMap.put("FileUrl", "");                  // 电子作业票附件(PDF base64)
+
+            // 计划信息组(42-44)
+            dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj()) ); // 计划开始时间
+            dataMap.put("JHJSSJ",  zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+            Result result = this.dataPush(ip,T_DZZY,dataMap,token);
+            String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+            String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+            // 状态更新
+            dtzyService.update(new LambdaUpdateWrapper<AspDzzyDo>().eq(AspDzzyDo::getId, id)
+                    .set(AspDzzyDo::getSyncresult, resultContent)
+                    .set(AspDzzyDo::getSyncstate, state));
+        });
+    }
+}

+ 180 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/GCStrategy.java

@@ -0,0 +1,180 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_GCZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * GCStrategy class
+ * 高处作业
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class GCStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(GCStrategy.class);
+    @Autowired
+    private AspGczyServiceImpl dtzyService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+
+        List<AspGczyDo> aspDhzyDos = dtzyService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>()
+                .in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspGczyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>()
+                .in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspGczyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>()
+                .in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspGczyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>()
+                .in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspGczyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+                    Map<String, Object> dataMap = new HashMap<>();
+                    String workUsers = list.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .map(info -> String.format(HOMEWORKER_INFORMATION, info.getName(), info.getIdcard()))
+                            .collect(Collectors.joining(","));
+                    // 降序排序
+                    AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspInspectrecordsDo::getCreatedate))
+                            .orElse(null);
+                    // 降序排序
+                    AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate))
+                            .orElse(null);
+                    AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .findFirst()
+                            .orElse(null);
+
+                    // 基础信息组(1-8)
+                    dataMap.put("UUID", zyDo.getId()); // 作业ID
+                    dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+                    dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+                    dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+                    dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+                    dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+                    dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+                    dataMap.put("ZYWZ", zyDo.getZywz());                     // 作业位置(吊装作业地点)
+
+                    // 高处作业专项组(9-10)
+                    dataMap.put("ZYGD", zyDo.getZygd());                     // 作业高度(米)(n..3)
+                    dataMap.put("ZYJB", zyDo.getZyjb());                     // 作业级别(1:一级/2:二级/3:三级/4:四级)
+
+                    // 实施信息组(11-19)
+                    dataMap.put("ZYNR", zyDo.getZynr());                     // 作业内容
+                    dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+                    dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+                    dataMap.put("ZYFZR", zyDo.getZyfzr());                    // 作业负责人
+                    dataMap.put("ZYRYXX", workUsers);                   // 作业人员信息(姓名:身份证号)
+                    dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+                    dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+                    dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+                    dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+
+                    // 风险管控组(20-22)
+                    if (aspInspectrecordsDo != null) {
+                        dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                        dataMap.put("FHYP", aspInspectrecordsDo.getFhyp()); // 防护用品
+                        dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+                    }
+                    dataMap.put("FXYFCS", "");                   // 风险预防措施
+
+
+                    // 安全监管组(23-29)
+                    dataMap.put("JHR", zyDo.getJhr()); // 监护人
+                    dataMap.put("JHRGW", ""); // 监护人岗位
+                    dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+                    if (aspAcceptanceApplicationDo != null) {
+                        dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+                    }
+                    if (aspSafetyBriefingDo != null) {
+                        dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                        dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+                    }
+                    dataMap.put("DQZT", 3);                     // 当前状态(1:作业前/2:作业中/3:作业后)
+
+                    // 地理信息组(30-31)
+                    dataMap.put("LONGITUDE", zyDo.getLongitude().toString()); // 经度
+                    dataMap.put("LATITUDE", zyDo.getLatitude().toString()); // 纬度
+
+                    // 系统管理组(32-39)
+                    dataMap.put("VIDEO_URL", "");                // 视频回放地址
+                    dataMap.put("CREATE_TIME", zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+                    dataMap.put("CREATE_BY", zyDo.getCreateusername()); // 创建人
+                    dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+                    dataMap.put("UPDATE_BY", zyDo.getModifyusername()); // 最后修改人
+                    dataMap.put("DELETE_MARK", zyDo.getDeleted()); // 删除标识
+                    dataMap.put("COMPANY_CODE", "");             // 企业编码(n..9)
+                    dataMap.put("FileUrl", "");                  // 电子作业票附件(PDF base64)
+
+                    // 计划信息组(40-42)
+                    dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj())); // 计划开始时间
+                    dataMap.put("JHJSSJ", zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+                    Result result = this.dataPush(ip, T_GCZY, dataMap, token);
+                    String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+                    String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+                    // 状态更新
+                    dtzyService.update(new LambdaUpdateWrapper<AspGczyDo>().eq(AspGczyDo::getId, id)
+                            .set(AspGczyDo::getSyncresult, resultContent)
+                            .set(AspGczyDo::getSyncstate, state));
+                }
+        );
+    }
+
+    ;
+}

+ 182 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/LSYDStrategy.java

@@ -0,0 +1,182 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_LSYDZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * LSYDStrategy class
+ * 临时用电
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class LSYDStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(GCStrategy.class);
+    @Autowired
+    private AspLsydzyServiceImpl dtzyService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+
+        List<AspLsydzyDo> aspDhzyDos = dtzyService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>()
+                .in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspLsydzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>()
+                .in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspLsydzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>()
+                .in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspLsydzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>()
+                .in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspLsydzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+                    Map<String, Object> dataMap = new HashMap<>();
+                    String workUsers = list.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .map(info -> String.format(HOMEWORKER_INFORMATION, info.getName(), info.getIdcard()))
+                            .collect(Collectors.joining(","));
+                    // 降序排序
+                    AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspInspectrecordsDo::getCreatedate))
+                            .orElse(null);
+                    // 降序排序
+                    AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate))
+                            .orElse(null);
+                    AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .findFirst()
+                            .orElse(null);
+
+                    // 基础信息组(1-8)
+                    dataMap.put("UUID", zyDo.getId()); // 作业ID
+                    dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+                    dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+                    dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+                    dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+                    dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+                    dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+                    dataMap.put("ZYWZ", zyDo.getZywz());                     // 作业位置
+
+                    // 用电专项组(9-12)
+                    dataMap.put("DYJRDJXKYDGL", zyDo.getDyjrdjxkydgl());             // 电源接入点及许可用电功率
+                    dataMap.put("GZDY", zyDo.getGzdy());                     // 工作电压
+                    dataMap.put("YDSBMCJEDGL", zyDo.getYdsbmcjedgl());              // 用电设备名称及额定功率
+                    dataMap.put("YDR", zyDo.getYdr());                      // 用电人(M/O)
+
+                    // 实施信息组(13-20)
+                    dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+                    dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+                    dataMap.put("ZYFZR", zyDo.getZyfzr());                    // 作业负责人
+                    dataMap.put("ZYFZRDGZH", zyDo.getZyfzrdgzh());                // 作业负责人电工证号
+                    dataMap.put("ZYNR", zyDo.getZynr());                     // 作业内容
+                    dataMap.put("ZYRYXX", workUsers);                   // 作业人员信息(姓名:身份证号)
+                    dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+                    dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+
+                    // 特殊作业关联组(21-22)
+                    dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+                    dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+
+                    // 风险管控组(23-25)
+                    // 风险管控组(20-22)
+                    if (aspInspectrecordsDo != null) {
+                        dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                        dataMap.put("FHYP", aspInspectrecordsDo.getFhyp()); // 防护用品
+                        dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+                    }
+                    dataMap.put("FXYFCS", "");                   // 风险预防措施
+
+
+                    // 安全监管组(26-32)
+                    dataMap.put("JHR", zyDo.getJhr()); // 监护人
+                    dataMap.put("JHRGW", ""); // 监护人岗位
+                    dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+                    if (aspAcceptanceApplicationDo != null) {
+                        dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+                    }
+                    if (aspSafetyBriefingDo != null) {
+                        dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                        dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+                    }
+                    dataMap.put("DQZT", 3);                     // 当前状态(1:作业前/2:作业中/3:作业后)
+                    dataMap.put("LONGITUDE", zyDo.getLongitude().toString()); // 经度
+                    dataMap.put("LATITUDE", zyDo.getLatitude().toString()); // 纬度
+                    // 系统管理组(35-42)
+                    dataMap.put("VIDEO_URL", "");                // 视频回放地址
+                    dataMap.put("CREATE_TIME", zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+                    dataMap.put("CREATE_BY", zyDo.getCreateusername()); // 创建人
+                    dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+                    dataMap.put("UPDATE_BY", zyDo.getModifyusername()); // 最后修改人
+                    dataMap.put("DELETE_MARK", zyDo.getDeleted()); // 删除标识
+                    dataMap.put("COMPANY_CODE", "");             // 企业编码(n..9)
+                    dataMap.put("FileUrl", "");                  // 电子作业票附件(PDF base64)
+
+                    // 计划信息组(43-45)
+                    dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj())); // 计划开始时间
+                    dataMap.put("JHJSSJ", zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+                    Result result = this.dataPush(ip, T_LSYDZY, dataMap, token);
+
+                    String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+                    String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+                    // 状态更新
+                    dtzyService.update(new LambdaUpdateWrapper<AspLsydzyDo>().eq(AspLsydzyDo::getId, id)
+                            .set(AspLsydzyDo::getSyncresult, resultContent)
+                            .set(AspLsydzyDo::getSyncstate, state));
+                }
+        );
+    }
+}

+ 198 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/MBCDStrategy.java

@@ -0,0 +1,198 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_MBCDZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * MBCTStrategy class
+ * 盲板抽堵
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class MBCDStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(GCStrategy.class);
+    @Autowired
+    private AspMbcdzyServiceImpl dtzyService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+
+        List<AspMbcdzyDo> aspDhzyDos = dtzyService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>()
+                .in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspMbcdzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>()
+                .in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspMbcdzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>()
+                .in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspMbcdzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>()
+                .in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspMbcdzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+                    Map<String, Object> dataMap = new HashMap<>();
+                    String workUsers = list.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .map(info -> String.format(HOMEWORKER_INFORMATION, info.getName(), info.getIdcard()))
+                            .collect(Collectors.joining(","));
+                    // 降序排序
+                    AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspInspectrecordsDo::getCreatedate))
+                            .orElse(null);
+                    // 降序排序
+                    AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate))
+                            .orElse(null);
+                    AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .findFirst()
+                            .orElse(null);
+
+
+                    // 基础信息组(1-7)
+                    dataMap.put("UUID", zyDo.getId()); // 作业ID
+                    dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+                    dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+                    dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+                    dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+                    dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+                    dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+
+                    // 盲板专项组(8-16)
+                    dataMap.put("GDJZ", zyDo.getGdjz());                     // 管道介质(M/O)
+                    dataMap.put("GDWDU", zyDo.getGdwdu());                    // 管道温度(M/O,带计量单位)
+                    dataMap.put("GDYL", zyDo.getGdyl());                     // 管道压力(M/O,带计量单位)
+                    dataMap.put("MBCZ", zyDo.getMbcz());                     // 盲板材质(M/O)
+                    dataMap.put("MBGG", zyDo.getMbgg());                     // 盲板规格(M/O)
+                    dataMap.put("MBBM", zyDo.getMbbm());                     // 盲板编码(M/O)
+                    dataMap.put("MBWZTBH", zyDo.getMbwztbh());                  // 盲板位置图编号(M)
+                    dataMap.put("MBWZT", CommonUtil.fileConvertBase64(zyDo.getMbwzt()));                    // 盲板位置图(M/O,PNG/JPEG base64)
+
+                    // 实施信息组(17-23)
+                    dataMap.put("SCDWZYZH", zyDo.getScdwzyzh());                 // 生产单位作业指挥(O)
+                    dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+                    dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+                    dataMap.put("ZYFZR", zyDo.getZyfzr());                    // 作业负责人
+                    dataMap.put("ZYRYXX", workUsers);                   // 作业人员信息(姓名:身份证号)
+                    dataMap.put("MBDSJ", zyDo.getMbdsj() == null ? "" : sdf.format(zyDo.getMbdsj()));                    // 盲板堵时间(d14)
+                    dataMap.put("MBCSJ", zyDo.getMbcsj() == null ? "" : sdf.format(zyDo.getMbcsj()));                    // 盲板抽时间(d14)
+
+                    // 作业属性组(24-27)
+                    dataMap.put("QRR", zyDo.getQrr());                      // 编制人(M)
+                    dataMap.put("BZSJ", zyDo.getBzsj() == null ? "" : sdf.format(zyDo.getBzsj()));                     // 编制时间(M/O,yyyyMMddHHmmss)
+                    dataMap.put("ZYLB", zyDo.getZylb());                     // 作业类别(1:堵盲板/2:抽盲板)
+                    dataMap.put("ZYWZ", zyDo.getZywz());                     // 作业位置(本次任务位置)
+
+                    // 关联单位组(28-30)
+                    dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+                    dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+
+                    dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+                    dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+
+
+                    // 风险管控组(31-33)
+                    // 风险管控组(20-22)
+                    if (aspInspectrecordsDo != null) {
+                        dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                        dataMap.put("FHYP", aspInspectrecordsDo.getFhyp()); // 防护用品
+                        dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+                    }
+                    dataMap.put("FXYFCS", "");                   // 风险预防措施
+
+
+                    // 安全监管组(34-40)
+                    dataMap.put("JHR", zyDo.getJhr()); // 监护人
+                    dataMap.put("JHRGW", ""); // 监护人岗位
+                    dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+                    if (aspAcceptanceApplicationDo != null) {
+                        dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+                    }
+                    if (aspSafetyBriefingDo != null) {
+                        dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                        dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+                    }
+                    dataMap.put("DQZT", 3);                     // 当前状态(1:作业前/2:作业中/3:作业后)
+
+                    // 地理信息组(41-42)
+                    dataMap.put("LONGITUDE", zyDo.getLongitude().toString()); // 经度
+                    dataMap.put("LATITUDE", zyDo.getLatitude().toString()); // 纬度
+
+                    // 系统管理组(43-52)
+                    dataMap.put("VIDEO_URL", "");                // 视频回放地址
+                    dataMap.put("CREATE_TIME", zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+                    dataMap.put("CREATE_BY", zyDo.getCreateusername()); // 创建人
+                    dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+                    dataMap.put("UPDATE_BY", zyDo.getModifyusername()); // 最后修改人
+                    dataMap.put("DELETE_MARK", zyDo.getDeleted()); // 删除标识
+                    dataMap.put("COMPANY_CODE", "");             // 企业编码(n..9)
+                    dataMap.put("FileUrl", "");                  // 电子作业票附件(PDF base64)
+
+                    // 计划信息组(53-55)
+                    dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj())); // 计划开始时间
+                    dataMap.put("JHJSSJ", zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+                    Result result = this.dataPush(ip, T_MBCDZY, dataMap, token);
+
+                    String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+                    String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+                    // 状态更新
+                    dtzyService.update(new LambdaUpdateWrapper<AspMbcdzyDo>().eq(AspMbcdzyDo::getId, id)
+                            .set(AspMbcdzyDo::getSyncresult, resultContent)
+                            .set(AspMbcdzyDo::getSyncstate, state));
+                }
+        );
+    }
+}

+ 23 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/RiskContext.java

@@ -0,0 +1,23 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import java.util.List;
+
+/**
+ * RiskContext class
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+public class RiskContext {
+
+    private RiskDataConversionStrategy strategy;
+
+    //构造函数
+    public RiskContext(RiskDataConversionStrategy strategy) {
+        this.strategy = strategy;
+    }
+
+    public void executeStrategy(List<String> id) {
+        this.strategy.convertCellValue(id);
+    }
+}

+ 130 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/RiskDataConversionStrategy.java

@@ -0,0 +1,130 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.rongwei.sfcommon.utils.Result;
+import org.apache.commons.lang.StringUtils;
+
+import java.io.*;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * DataConversionStrategy class
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+public interface RiskDataConversionStrategy {
+    /**
+     * 业务数据主键
+     *
+     * @param id
+     */
+    void convertCellValue(List<String> id);
+
+    default Result dataPush(String ip, String address, Map<String, Object> syncDataMapList,String token) {
+        StringBuilder failureReason = new StringBuilder();
+        try {
+            // 验证输入参数
+            if (ip == null || ip.isEmpty()) {
+                failureReason.append("IP地址为空;");
+            }
+            if (address == null || address.isEmpty()) {
+                failureReason.append("接口路径为空;");
+            }
+            if (syncDataMapList == null || syncDataMapList.isEmpty()) {
+                failureReason.append("同步数据为空;");
+            }
+            if (failureReason.length() > 0) {
+                return Result.error(failureReason.toString());
+            }
+
+            // 构造完整的URL(ip包含端口)
+            String urlStr = "http://" + ip + address;
+            URL url = new URL(urlStr);
+            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+
+            // 设置连接超时和读取超时(防止长时间挂起)
+            conn.setConnectTimeout(5000); // 5秒连接超时
+            conn.setReadTimeout(10000);    // 10秒读取超时
+
+            // 设置请求属性
+            conn.setRequestMethod("POST");
+            conn.setRequestProperty("Content-Type", "application/json; utf-8");
+            conn.setRequestProperty("Accept", "application/json");
+            conn.setRequestProperty("token", token);
+            conn.setDoOutput(true);
+
+            // 将数据转换为JSON字符串
+            ObjectMapper mapper = new ObjectMapper();
+            String jsonInputString = mapper.writeValueAsString(syncDataMapList);
+
+            // 发送请求体
+            try (OutputStream os = conn.getOutputStream()) {
+                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
+                os.write(input, 0, input.length);
+            }
+
+            // 检查响应码
+            int responseCode = conn.getResponseCode();
+            if (responseCode == HttpURLConnection.HTTP_OK) {
+                // 读取响应
+                try (BufferedReader br = new BufferedReader(
+                        new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
+                    StringBuilder response = new StringBuilder();
+                    String responseLine;
+                    while ((responseLine = br.readLine()) != null) {
+                        response.append(responseLine.trim());
+                    }
+                    System.out.println("推送成功,响应内容:" + response.toString());
+                    if (response.toString().contains("200")) {
+                        return Result.ok(jsonInputString);
+                    }
+                    return Result.error(response.toString());
+                }
+            } else {
+                // 读取错误响应信息
+                try (BufferedReader br = new BufferedReader(
+                        new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8))) {
+                    StringBuilder errorResponse = new StringBuilder();
+                    String responseLine;
+                    while ((responseLine = br.readLine()) != null) {
+                        errorResponse.append(responseLine.trim());
+                    }
+                    failureReason.append("HTTP错误码: ").append(responseCode);
+                    if (errorResponse.length() > 0) {
+                        failureReason.append("; 错误详情: ").append(errorResponse.toString());
+                    }
+                } catch (Exception e) {
+                    failureReason.append("; 读取错误响应失败: ").append(e.getMessage());
+                }
+            }
+        } catch (MalformedURLException e) {
+            failureReason.append("URL格式错误: ").append(e.getMessage());
+        } catch (ConnectException e) {
+            failureReason.append("连接失败: ").append(e.getMessage());
+            if (e.getMessage().contains("refused")) {
+                failureReason.append("(连接被拒绝,检查IP和端口)");
+            } else if (e.getMessage().contains("timed out")) {
+                failureReason.append("(连接超时,检查网络或增加超时时间)");
+            }
+        } catch (SocketTimeoutException e) {
+            failureReason.append("读取超时: ").append(e.getMessage());
+        } catch (UnsupportedEncodingException e) {
+            failureReason.append("编码不支持: ").append(e.getMessage());
+        } catch (IOException e) {
+            failureReason.append("IO异常: ").append(e.getMessage());
+        } catch (Exception e) {
+            failureReason.append("未知异常: ").append(e.getMessage());
+        }
+
+        String reasonStr = failureReason.toString();
+        System.err.println("推送失败,原因: " + reasonStr);
+        return Result.error(reasonStr);
+    }
+}

+ 181 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/strategy/riskSyncStrategy/SXKJStrategy.java

@@ -0,0 +1,181 @@
+package com.rongwei.sfcommon.sys.strategy.riskSyncStrategy;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.rongwe.scentity.domian.*;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.sfcommon.sys.service.impl.*;
+import com.rongwei.sfcommon.utils.CommonUtil;
+import com.rongwei.sfcommon.utils.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncAddress.T_SXKJZY;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.FAILURESYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.AsyncStatus.SUCCESSSYNC;
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD14;
+
+/**
+ * SXKJStrategy class
+ * 受限空间
+ *
+ * @author XH
+ * @date 2025/06/05
+ */
+@Component
+public class SXKJStrategy implements RiskDataConversionStrategy {
+    private static final Logger log = LoggerFactory.getLogger(GCStrategy.class);
+    @Autowired
+    private AspSxkjzyServiceImpl dtzyService;
+    @Autowired
+    private AspOperatorInformationServiceImpl aspOperatorInformationService;
+    @Autowired
+    private AspInspectrecordsServiceImpl aspInspectrecordsService;
+    @Autowired
+    private AspSafetyBriefingServiceImpl aspSafetyBriefingService;
+    @Autowired
+    private AspAcceptanceApplicationServiceImpl aspAcceptanceApplicationService;
+    //姓名、身份证号、特殊作业工种、特殊工作证号
+    public static final String HOMEWORKER_INFORMATION = "%s:%s";
+    @Value("${third-party.service.ip}")
+    private String ip;
+    @Value("${third-party.service.token}")
+    private String token;
+
+    @Override
+    public void convertCellValue(List<String> id) {
+
+        List<AspSxkjzyDo> aspDhzyDos = dtzyService.getBaseMapper().selectBatchIds(id);
+        if (aspDhzyDos.isEmpty()) {
+            log.error("无法通过:{}获取到需要同步的动火作业信息", id);
+            return;
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN_YMD14);
+        // 作业人员
+        List<AspOperatorInformationDo> list = aspOperatorInformationService.list(new LambdaQueryWrapper<AspOperatorInformationDo>()
+                .in(AspOperatorInformationDo::getJobid, aspDhzyDos.stream().map(AspSxkjzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 措施检查
+        List<AspInspectrecordsDo> aspInspectrecordsDos = aspInspectrecordsService.list(new LambdaQueryWrapper<AspInspectrecordsDo>()
+                .in(AspInspectrecordsDo::getJobid, aspDhzyDos.stream().map(AspSxkjzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 安全交底
+        List<AspSafetyBriefingDo> aspSafetyBriefingDos = aspSafetyBriefingService.list(new LambdaQueryWrapper<AspSafetyBriefingDo>()
+                .in(AspSafetyBriefingDo::getJobid, aspDhzyDos.stream().map(AspSxkjzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0)
+        );
+        // 验收申请
+        List<AspAcceptanceApplicationDo> aspAcceptanceApplicationDos = aspAcceptanceApplicationService.list(new LambdaQueryWrapper<AspAcceptanceApplicationDo>()
+                .in(AspAcceptanceApplicationDo::getJobid, aspDhzyDos.stream().map(AspSxkjzyDo::getId).collect(Collectors.toList()))
+                .eq(BaseDo::getDeleted, 0));
+        aspDhzyDos.forEach(zyDo -> {
+                    Map<String, Object> dataMap = new HashMap<>();
+                    String workUsers = list.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .map(info -> String.format(HOMEWORKER_INFORMATION, info.getName(), info.getIdcard()))
+                            .collect(Collectors.joining(","));
+                    // 降序排序
+                    AspInspectrecordsDo aspInspectrecordsDo = aspInspectrecordsDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspInspectrecordsDo::getCreatedate))
+                            .orElse(null);
+                    // 降序排序
+                    AspSafetyBriefingDo aspSafetyBriefingDo = aspSafetyBriefingDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .max(Comparator.comparing(AspSafetyBriefingDo::getCreatedate))
+                            .orElse(null);
+                    AspAcceptanceApplicationDo aspAcceptanceApplicationDo = aspAcceptanceApplicationDos.stream()
+                            .filter(data -> zyDo.getId().equals(data.getJobid()))
+                            .findFirst()
+                            .orElse(null);
+
+
+                    // 基础信息组(1-9)
+                    dataMap.put("UUID", zyDo.getId()); // 作业ID
+                    dataMap.put("SFSSTQY", zyDo.getSfsstqy()); // 是否在四色图区域内
+                    dataMap.put("FSSSTID", zyDo.getFssstid()); // 风险四色图ID
+                    dataMap.put("ZYZBH", zyDo.getZyzbh()); // 作业证编号
+                    dataMap.put("SQDW", zyDo.getSqdw()); // 作业申请单位
+                    dataMap.put("SQR", zyDo.getSqr()); // 作业申请人
+                    dataMap.put("ZYSQSJ", zyDo.getZysqsj() == null ? "" : sdf.format(zyDo.getZysqsj())); // 作业申请时间
+                    dataMap.put("ZYNR", zyDo.getZynr());                     // 作业内容
+                    dataMap.put("ZYWZ", zyDo.getZywz());                     // 作业位置
+
+                    // 受限空间专项组(10-11)
+                    dataMap.put("SXKJSSDW", zyDo.getSxkjssdw());                 // 受限空间所属单位
+                    dataMap.put("YYJZMC", zyDo.getYyjzmc());                   // 受限空间内原有介质名称
+
+                    // 实施信息组(12-19)
+                    dataMap.put("ZYKSSJ", zyDo.getZykssj() == null ? "" : sdf.format(zyDo.getZykssj())); // 作业实施开始时间
+                    dataMap.put("ZYJSSJ", zyDo.getZyjssj() == null ? "" : sdf.format(zyDo.getZyjssj())); // 作业实施结束时间
+                    dataMap.put("ZYFZR", zyDo.getZyfzr());                    // 作业负责人
+                    dataMap.put("ZYRYXX", workUsers);                   // 作业人员信息(姓名:身份证号)
+                    dataMap.put("ZYDWLX", zyDo.getZydwlx()); // 作业单位类型
+                    dataMap.put("ZYDWMC", zyDo.getZydwmc()); // 作业单位名称
+                    dataMap.put("SFSJQTTSZY", zyDo.getSfsjqttszy()); // 涉及的其他特殊作业
+                    dataMap.put("SJQTTSZYZBH", zyDo.getSjqttszyzbh()); // 其他特殊作业证编号
+
+
+                    // 风险管控组(20-22)
+                    if (aspInspectrecordsDo != null) {
+                        dataMap.put("FXBS", aspInspectrecordsDo.getFxbs()); // 风险辨识
+                        dataMap.put("FHYP", aspInspectrecordsDo.getFhyp()); // 防护用品
+                        dataMap.put("JSAFileUrl", CommonUtil.fileConvertBase64(aspInspectrecordsDo.getJasfj())); // JAS附件
+                    }
+                    dataMap.put("FXYFCS", "");                   // 风险预防措施
+
+                    // 安全监管组(23-29)
+                    dataMap.put("DQZT", 3);                     // 当前状态(1:作业前/2:作业中/3:作业后)
+                    dataMap.put("JHR", zyDo.getJhr()); // 监护人
+                    dataMap.put("JHRGW", ""); // 监护人岗位
+                    dataMap.put("JHRZJBH", zyDo.getJhrzjbh()); // 监护人证件编号
+                    if (aspAcceptanceApplicationDo != null) {
+                        dataMap.put("YSR", aspAcceptanceApplicationDo.getAcceptancepeople()); // 验收人
+                    }
+                    if (aspSafetyBriefingDo != null) {
+                        dataMap.put("AQJDR", aspSafetyBriefingDo.getAqjdr()); // 安全交底人
+                        dataMap.put("JSJDR", aspSafetyBriefingDo.getJsjdr()); // 接受交底人
+                    }
+
+                    // 地理信息组(30-31)
+                    dataMap.put("LONGITUDE", zyDo.getLongitude()); // 经度
+                    dataMap.put("LATITUDE", zyDo.getLatitude()); // 纬度
+
+                    // 系统管理组(32-39)
+                    dataMap.put("VIDEO_URL", "");                // 视频回放地址
+                    dataMap.put("CREATE_TIME", zyDo.getCreatedate() == null ? "" : sdf.format(zyDo.getCreatedate())); // 创建时间
+                    dataMap.put("CREATE_BY", zyDo.getCreateusername()); // 创建人
+                    dataMap.put("UPDATE_TIME", zyDo.getModifydate() == null ? "" : sdf.format(zyDo.getModifydate())); // 最后修改时间
+                    dataMap.put("UPDATE_BY", zyDo.getModifyusername()); // 最后修改人
+                    dataMap.put("DELETE_MARK", zyDo.getDeleted()); // 删除标识
+                    dataMap.put("COMPANY_CODE", "");             // 企业编码(n..9)
+                    dataMap.put("FileUrl", "");                  // 电子作业票附件(PDF base64)
+                    // 计划信息组(40-42)
+                    dataMap.put("JHKSSJ", zyDo.getJhkssj() == null ? "" : sdf.format(zyDo.getJhkssj())); // 计划开始时间
+                    dataMap.put("JHJSSJ", zyDo.getJhjssj() == null ? "" : sdf.format(zyDo.getJhjssj())); // 计划结束时间
+
+                    Result result = this.dataPush(ip, T_SXKJZY, dataMap, token);
+
+
+                    String state = 200 == result.getStatus() ? SUCCESSSYNC : FAILURESYNC;
+                    String resultContent = 200 == result.getStatus() ? "同步成功" : result.getMessage();
+                    // 状态更新
+                    dtzyService.update(new LambdaUpdateWrapper<AspSxkjzyDo>().eq(AspSxkjzyDo::getId, id)
+                            .set(AspSxkjzyDo::getSyncresult, resultContent)
+                            .set(AspSxkjzyDo::getSyncstate, state));
+                }
+        );
+    }
+}

+ 57 - 1
js-security/security-common/src/main/java/com/rongwei/sfcommon/utils/CommonUtil.java

@@ -3,7 +3,10 @@ package com.rongwei.sfcommon.utils;
 import com.rongwei.commonservice.serial.service.SysSerialNumberService;
 import com.rongwei.commonservice.service.RedisService;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysSerialVo;
+import com.rongwei.sfcommon.sys.dao.SaveCheckCommonDao;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +16,9 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.nio.file.Files;
+import java.util.Base64;
 import java.util.Calendar;
 import java.util.Date;
 
@@ -31,10 +37,14 @@ public class CommonUtil {
     private static final Logger log = LoggerFactory.getLogger(CommonUtil.class.getName());
     private static SysSerialNumberService sysSerialNumberService;
     private static RedisService redisService;
+    private static SaveCheckCommonDao saveCheckCommonDao;
     @Autowired
     private SysSerialNumberService autoSysSerialNumberService;
     @Autowired
     private RedisService autoRedisService;
+    @Autowired
+    private SaveCheckCommonDao autoSaveCheckCommonDao;
+
 
     public static String getWeekForYear(boolean returnLastWeek) {
         return getWeekForYear(new Date(), returnLastWeek);
@@ -76,7 +86,7 @@ public class CommonUtil {
             HttpServletRequest request = attributes.getRequest();
             if (request != null) {
                 String token = request.getHeader("token");
-                if (com.rongwei.rwcommon.utils.StringUtils.isNotEmpty(token)) {
+                if (StringUtils.isNotEmpty(token)) {
                     currUser = redisService.getLoginUser(token);
                 }
             }
@@ -127,9 +137,55 @@ public class CommonUtil {
         return streamCode;
     }
 
+    public static String fileConvertBase64(String fileId) {
+        if (StringUtils.isBlank(fileId)) {
+            return "";
+        }
+        if (fileId.split("-;-").length <= 2) {
+            return "";
+        }
+        fileId = fileId.split("-;-")[1];
+        if (StringUtils.isBlank(fileId)) {
+            return "";
+        }
+        SysFileItemDo sysFileItemDo = saveCheckCommonDao.getFileItemByID(fileId);
+        if (sysFileItemDo == null) {
+            log.error("文件记录不存在");
+            return "";
+        }
+        String fullpath = sysFileItemDo.getFullpath();
+        File file = new File(fullpath);
+        if (!file.exists()) {
+            log.error("文件不存在");
+            return "";
+        }
+        String mimeType = "";
+        byte[] fileContent = new byte[0];
+        try {
+            // 1. 读取文件全部字节
+            fileContent = Files.readAllBytes(file.toPath());
+
+            // 2. 获取MIME类型(需要Java 7+,或使用第三方库如Apache Tika)
+            mimeType = Files.probeContentType(file.toPath());
+            if (mimeType == null) {
+                mimeType = "application/octet-stream"; // 默认二进制类型
+            }
+
+        } catch (Exception e) {
+            log.error("文件转base64异常:{},具体原因:{}", e.getMessage(), e);
+            return "";
+        }
+
+        // 3. 组合MIME类型和Base64编码
+        return "data:" + mimeType + ";base64," + Base64.getEncoder().encodeToString(fileContent);
+
+    }
+
+
     @PostConstruct
     public void init() {
         redisService = autoRedisService;
         sysSerialNumberService = autoSysSerialNumberService;
+        saveCheckCommonDao = autoSaveCheckCommonDao;
     }
 }

+ 7 - 3
js-security/security-common/src/main/resources/mybatis/RiskSynchronizationDao.xml

@@ -24,7 +24,11 @@
         </where>
     </select>
 
-
-
-
+    <select id="getFilePathById" resultType="com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo">
+        SELECT * FROM sys_file_item
+        WHERE ID IN
+        <foreach item='id' collection='distributeIdList' open='(' separator=',' close=')'>
+            #{id}
+        </foreach>
+    </select>
 </mapper>

+ 7 - 0
js-security/security-common/src/main/resources/mybatis/SaveCheckCommonDao.xml

@@ -148,4 +148,11 @@
             AND (FIND_IN_SET(#{tenantid},so.FULLPID) or so.ID=#{tenantid})
         </where>
     </select>
+    <select id="getFileItemByIds" resultType="com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo">
+        SELECT * FROM sys_file_item
+        WHERE ID IN
+        <foreach item='id' collection='distributeIdList' open='(' separator=',' close=')'>
+            #{id}
+        </foreach>
+    </select>
 </mapper>

+ 172 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspAcceptanceApplicationDo.java

@@ -0,0 +1,172 @@
+package com.rongwe.scentity.domian;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 危险作业——验收申请
+ * @TableName asp_acceptance_application
+ */
+@TableName(value ="asp_acceptance_application")
+@Data
+public class AspAcceptanceApplicationDo extends BaseDo implements Serializable {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 流程ID
+     */
+    private String processinstid;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    /**
+     * 作业票ID
+     */
+    private String jobid;
+
+    /**
+     * 作业类型
+     */
+    private String jobtype;
+
+    /**
+     * 作业证编号
+     */
+    private String zyzbh;
+
+    /**
+     * 作业内容
+     */
+    private String zynr;
+
+    /**
+     * 作业位置
+     */
+    private String zywz;
+
+    /**
+     * 动火作业级别,1:特级,2:一级,3:二级
+     */
+    private String dhzyjb;
+
+    /**
+     * 作业完成时间
+     */
+    private Date zywcsj;
+
+    /**
+     * 作业单位类型,1:本厂,2:第三方/承包商
+     */
+    private String zydwlx;
+
+    /**
+     * 作业单位名称
+     */
+    private String zydwmc;
+
+    /**
+     * 作业负责人
+     */
+    private String zyfzr;
+
+    /**
+     * 作业负责人ID
+     */
+    private String zyfzrid;
+
+    /**
+     * 作业结果
+     */
+    private String zyjg;
+
+    /**
+     * 作业结果说明
+     */
+    private String zyjgsm;
+
+    /**
+     * 作业后照片
+     */
+    private String zyhzp;
+
+    /**
+     * 视屏回访地址
+     */
+    private String sphfdz;
+
+    /**
+     * 作业视屏上传
+     */
+    private String zyspsc;
+
+    /**
+     * 验收人ID
+     */
+    private String acceptancepeopleid;
+
+    /**
+     * 验收人
+     */
+    private String acceptancepeople;
+
+    /**
+     * 作业前照片
+     */
+    private String zyqzp;
+
+    /**
+     * 部门经理ID
+     */
+    private String bmjlid;
+
+    /**
+     * 部门经理名称
+     */
+    private String bmjlname;
+
+    /**
+     * 部门副总ID
+     */
+    private String bmfzid;
+
+    /**
+     * 部门副总名称
+     */
+    private String bmfzname;
+
+    /**
+     * 安环部危险作业主管ID
+     */
+    private String ahbwxzyzgid;
+
+    /**
+     * 安环部危险作业主管名称
+     */
+    private String ahbwxzyzgname;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 138 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspCompanyBasicInfoDo.java

@@ -0,0 +1,138 @@
+package com.rongwe.scentity.domian;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 企业基本信息 
+ * @TableName asp_company_basic_info
+ */
+@TableName(value ="asp_company_basic_info")
+@Data
+public class AspCompanyBasicInfoDo extends BaseDo implements Serializable {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 企业编码
+     */
+    private String companyid;
+
+    /**
+     * 化工行业编码
+     */
+    private String chemicalindustrycode;
+
+    /**
+     * 化学品登记系统编码
+     */
+    private String chemicalregistrycode;
+
+    /**
+     * 父级企业编码
+     */
+    private String parentcompanycode;
+
+    /**
+     * 企业名称
+     */
+    private String companyname;
+
+    /**
+     * 企业简称
+     */
+    private String companyshortname;
+
+    /**
+     * 行政区域编码
+     */
+    private String administrativeareacode;
+
+    /**
+     * 工商注册地址
+     */
+    private String businessregistrationaddress;
+
+    /**
+     * 生产场所地址
+     */
+    private String productionsiteaddress;
+
+    /**
+     * 经度
+     */
+    private BigDecimal longitude;
+
+    /**
+     * 纬度
+     */
+    private BigDecimal latitude;
+
+    /**
+     * 法定代表人
+     */
+    private String legalrepresentative;
+
+    /**
+     * 企业负责人
+     */
+    private String companyleader;
+
+    /**
+     * 企业负责人电话
+     */
+    private String companyleaderphone;
+
+    /**
+     * 安全负责人
+     */
+    private String safetyperson;
+
+    /**
+     * 安全负责人电话
+     */
+    private String safetypersonphone;
+
+    /**
+     * 安全值班电话
+     */
+    private String safetyondutyphone;
+
+    /**
+     * 法定代表人ID
+     */
+    private String legalrepresentativeid;
+
+    /**
+     * 企业负责人ID
+     */
+    private String companyleaderid;
+
+    /**
+     * 安全负责人ID
+     */
+    private String safetypersonid;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 38 - 47
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDhzyDo.java

@@ -18,7 +18,6 @@ import java.util.Date;
 @Data
 public class AspDhzyDo extends BaseDo implements Serializable {
 
-    private static final long serialVersionUID = 1L;
     /**
      * 主键ID
      */
@@ -188,43 +187,36 @@ public class AspDhzyDo extends BaseDo implements Serializable {
     /**
      * 视频回放地址
      */
-    @TableField("VIDEO_URL")
     private String videoUrl;
 
     /**
      * 创建时间
      */
-    @TableField("CREATE_TIME")
     private Date createTime;
 
     /**
      * 创建人
      */
-    @TableField("CREATE_BY")
     private String createBy;
 
     /**
      * 最后修改时间
      */
-    @TableField("UPDATE_TIME")
     private Date updateTime;
 
     /**
      * 最后修改人
      */
-    @TableField("UPDATE_BY")
     private String updateBy;
 
     /**
      * 删除标识,0:正常,1:已删除
      */
-    @TableField("DELETE_MARK")
     private Integer deleteMark;
 
     /**
      * 企业编码
      */
-    @TableField("COMPANY_CODE")
     private Integer companyCode;
 
     /**
@@ -257,45 +249,6 @@ public class AspDhzyDo extends BaseDo implements Serializable {
      */
     private String roption;
 
-    /**
-     * 是否删除Y/N
-     */
-    private String deleted;
-
-    /**
-     * 备注
-     */
-    private String remark;
-
-    /**
-     * 创建时间
-     */
-    private Date createdate;
-
-    /**
-     * 创建用户ID
-     */
-    private String createuserid;
-
-    /**
-     * 修改日期
-     */
-    private Date modifydate;
-
-    /**
-     * 修改用户ID
-     */
-    private String modifyuserid;
-
-    /**
-     * 创建人名称
-     */
-    private String createusername;
-
-    /**
-     * 修改人名称
-     */
-    private String modifyusername;
 
     /**
      * 其他风险辨识
@@ -517,5 +470,43 @@ public class AspDhzyDo extends BaseDo implements Serializable {
      */
     private String zjlid;
 
+    /**
+     * 报备人签名
+     */
+    private String bbrqm;
+
+    /**
+     * 部门经理签名
+     */
+    private String bmjlqm;
+
+    /**
+     * 部门副总签名
+     */
+    private String bmfzqm;
+
+    /**
+     * 安环部签名
+     */
+    private String ahbqm;
+
+    /**
+     * 总工程师签名
+     */
+    private String zgcsqm;
+
+    /**
+     * 总经理签名
+     */
+    private String zjlqm;
+
+
+    private String syncstate;
+    private String syncresult;
+
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
 
 }

+ 2 - 1
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDlzzDo.java

@@ -473,5 +473,6 @@ public class AspDlzzDo extends BaseDo implements Serializable {
      * 作业交底图
      */
     private String zyjdt;
-
+    private String syncstate;
+    private String syncresult;
 }

+ 2 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDtzyDo.java

@@ -452,4 +452,6 @@ public class AspDtzyDo extends BaseDo implements Serializable {
      * 作业交底图
      */
     private String zyjdt;
+    private String syncstate;
+    private String syncresult;
 }

+ 2 - 1
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspDzzyDo.java

@@ -472,5 +472,6 @@ public class AspDzzyDo extends BaseDo implements Serializable {
      * 属地部门负责人签字
      */
     private String sdbmfzrqz;
-
+    private String syncstate;
+    private String syncresult;
 }

+ 2 - 1
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspGczyDo.java

@@ -447,5 +447,6 @@ public class AspGczyDo extends BaseDo implements Serializable {
      */
     private String sdbmfzrqz;
 
-
+    private String syncstate;
+    private String syncresult;
 }

+ 128 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspInspectrecordsDo.java

@@ -0,0 +1,128 @@
+package com.rongwe.scentity.domian;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 危险作业——检查记录
+ * @TableName asp_inspectrecords
+ */
+@TableName(value ="asp_inspectrecords")
+@Data
+public class AspInspectrecordsDo extends BaseDo implements Serializable {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 检查时间
+     */
+    private Date inspectiontime;
+
+    /**
+     * 检查人
+     */
+    private String inspector;
+
+    /**
+     * 是否生成处罚
+     */
+    private String generatepenaltyornot;
+
+    /**
+     * 处罚人员
+     */
+    private String punishpersonnel;
+
+    /**
+     * 上传附件
+     */
+    private String uploadattachments;
+
+    /**
+     * 处罚金额
+     */
+    private BigDecimal penaltyamount;
+
+    /**
+     * 处罚说明
+     */
+    private String penaltydescription;
+
+    /**
+     * 缴纳罚金收据(附件)
+     */
+    private String paymentpenaltyreceipt;
+
+    /**
+     * 状态(进行中,关闭
+     */
+    private String status;
+
+    /**
+     * 作业管理 ID
+     */
+    private String jobid;
+
+    /**
+     * 作业编号
+     */
+    private String jobnumberfrom;
+
+    /**
+     * 处罚人员 ID
+     */
+    private String punishpersonnelid;
+
+    /**
+     * 作业类型
+     */
+    private String jobtype;
+
+    /**
+     * 发现项
+     */
+    private String discoveryitem;
+
+    /**
+     * 确认人ID
+     */
+    private String inspectorid;
+
+    /**
+     * 风险辨识
+     */
+    private String fxbs;
+
+    /**
+     * 防护用品
+     */
+    private String fhyp;
+
+    /**
+     * 附件
+     */
+    private String jasfj;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 2 - 1
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspLsydzyDo.java

@@ -461,5 +461,6 @@ public class AspLsydzyDo extends BaseDo implements Serializable {
      * 属地部门负责人签字
      */
     private String sdbmfzrqz;
-
+    private String syncstate;
+    private String syncresult;
 }

+ 2 - 1
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspMbcdzyDo.java

@@ -517,5 +517,6 @@ public class AspMbcdzyDo extends BaseDo implements Serializable {
      * 作业交底图
      */
     private String zyjdt;
-
+    private String syncstate;
+    private String syncresult;
 }

+ 81 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspOperatorInformationDo.java

@@ -0,0 +1,81 @@
+package com.rongwe.scentity.domian;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 作业人员信息
+ * @TableName asp_operator_information
+ */
+@TableName(value ="asp_operator_information")
+@Data
+public class AspOperatorInformationDo extends BaseDo implements Serializable {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 证书类别
+     */
+    private String jobtype;
+
+    /**
+     * 身份证号
+     */
+    private String idcard;
+
+    /**
+     * 证书有效期
+     */
+    private Date dareofissuance;
+
+    /**
+     * 证书附件
+     */
+    private String certificateattachment;
+
+    /**
+     * 作业ID
+     */
+    private String jobid;
+
+    /**
+     * 作业类型
+     */
+    private String jpbtype;
+
+    /**
+     * 承包商ID
+     */
+    private String contractor;
+    /**
+     * 作业证编号
+     */
+    private String certificateno;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 137 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspSafetyBriefingDo.java

@@ -0,0 +1,137 @@
+package com.rongwe.scentity.domian;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 安全交底
+ *
+ * @TableName asp_safety_briefing
+ */
+@TableName(value = "asp_safety_briefing")
+@Data
+public class AspSafetyBriefingDo extends BaseDo implements Serializable {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 作业证编号
+     */
+    private String zyzbh;
+
+    /**
+     * 作业位置
+     */
+    private String zywz;
+
+    /**
+     * 作业申请单位
+     */
+    private String sqdw;
+
+    /**
+     * 作业负责人
+     */
+    private String zyfzr;
+
+    /**
+     * 作业申请时间
+     */
+    private Date zysqsj;
+
+    /**
+     * 作业内容
+     */
+    private String zynr;
+
+    /**
+     * 作业申请人
+     */
+    private String sqr;
+
+    /**
+     * 基本要求
+     */
+    private String jbyq;
+
+    /**
+     * 作业许可范国及作业环境
+     */
+    private String zyxkfwjzyhj;
+
+    /**
+     * 作业风险
+     */
+    private String zyfx;
+
+    /**
+     * 防范风险
+     */
+    private String fffx;
+
+    /**
+     * 应急措施
+     */
+    private String yycs;
+
+    /**
+     * 其他注意事项:
+     */
+    private String qtzysx;
+
+    /**
+     * 安全交底人签名
+     */
+    private String aqjdrqm;
+
+    /**
+     * 接受交底人签名
+     */
+    private String jsjdrqm;
+
+    /**
+     * 确认内容
+     */
+    private String qrnr;
+
+    /**
+     * 作业ID
+     */
+    private String jobid;
+
+    /**
+     * 作业类型
+     */
+    private String jobtype;
+
+    /**
+     * 安全交底人
+     */
+    private String aqjdr;
+    /**
+     * 接受交底人
+     */
+    private String jsjdr;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}

+ 2 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/domian/AspSxkjzyDo.java

@@ -490,4 +490,6 @@ public class AspSxkjzyDo extends BaseDo implements Serializable {
      * 承包商ID
      */
     private String cbsid;
+    private String syncstate;
+    private String syncresult;
 }

+ 25 - 19
js-security/security-server/src/main/java/com/rongwei/savecheck/controller/SynchronizationController.java

@@ -31,12 +31,11 @@ public class SynchronizationController {
 
     /**
      * 四色图和分布信息同步
-     *
      */
     @PostMapping("/fourColor/upload")
     public R riskSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行四色图和分布信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行四色图和分布信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.fourColorSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -48,12 +47,11 @@ public class SynchronizationController {
 
     /**
      * 单元、事件和措施信息同步
-     *
      */
     @PostMapping("/unit/upload")
     public R unitSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行单元、事件和措施信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行单元、事件和措施信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.unitSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -65,12 +63,11 @@ public class SynchronizationController {
 
     /**
      * 安全维护信息同步
-     *
      */
     @PostMapping("/safeMaintenance/upload")
     public R safeMaintenanceSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行安全维护信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行安全维护信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.safeMaintenanceSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -82,12 +79,11 @@ public class SynchronizationController {
 
     /**
      * 安全检查记录信息同步
-     *
      */
     @PostMapping("/safeRecord/upload")
     public R safeRecordSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行安全检查记录信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行安全检查记录信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.safeRecordSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -99,12 +95,11 @@ public class SynchronizationController {
 
     /**
      * 隐患排查任务信息同步、隐患排查记录信息同步
-     *
      */
     @PostMapping("/hiddenTask/upload")
     public R hiddenTaskSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行隐患排查任务信息和隐患排查记录信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行隐患排查任务信息和隐患排查记录信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.hiddenTaskSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -116,12 +111,11 @@ public class SynchronizationController {
 
     /**
      * 隐患治理信息同步
-     *
      */
     @PostMapping("/hiddenAdminister/upload")
     public R hiddenAdministerSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行隐患治理信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行隐患治理信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.hiddenAdministerSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -133,12 +127,11 @@ public class SynchronizationController {
 
     /**
      * 1.1.11安全生产任务承诺卡信息
-     *
      */
     @PostMapping("/safeCommitmentCard/upload")
     public R safeCommitmentCardSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行安全生产任务承诺卡信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行安全生产任务承诺卡信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.safeCommitmentCardSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -149,16 +142,16 @@ public class SynchronizationController {
     }
 
     /**
+     * @return com.rongwei.rwcommon.base.R
      * @Description 1.1.12危害特性应知卡信息
      * @Author qkj
      * @Date 9:17 2025/5/26
      * @Param [ids]
-     * @return com.rongwei.rwcommon.base.R
      **/
     @PostMapping("/dangerCard/upload")
     public R dangerCardSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行危害特性应知卡信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行危害特性应知卡信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.dangerCardSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -167,18 +160,19 @@ public class SynchronizationController {
             return R.error();
         }
     }
-    
+
     /**
      * @Description 1.1.13应急处置卡信息
+     * @return com.rongwei.rwcommon.base.R
+     * @Description 5.3.13应急处置卡信息
      * @Author qkj
      * @Date 9:19 2025/6/5
      * @Param [ids]
-     * @return com.rongwei.rwcommon.base.R
      **/
     @PostMapping("/urgencyHandleCard/upload")
     public R urgencyHandleCardSynchronizationList(@RequestBody List<String> ids) {
         try {
-            log.info("开始执行应急处置卡信息推送,需要推送的数据为:{}",ids);
+            log.info("开始执行应急处置卡信息推送,需要推送的数据为:{}", ids);
             riskSynchronizationList.urgencyHandleCardSynchronizationList(ids);
             return R.ok();
         } catch (Exception e) {
@@ -296,5 +290,17 @@ public class SynchronizationController {
             return R.error();
         }
     }
+    /**
+     * 危险作业同步
+     *
+     * @param ids
+     * @return
+     */
+    @PostMapping("/risk/task/{type}")
+    public R asyncRiskTask(@RequestBody List<String> ids, @PathVariable(name = "type") String type) {
+        log.info("开始执行微信作业同步:{},作业类型为:{}", ids, type);
+        riskSynchronizationList.asyncRiskTask(ids, type);
+        return R.ok();
+    }
 
 }