huhu 5 сар өмнө
parent
commit
c99bf93b42

+ 4 - 0
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/mapper/enforce/job/EnforceJobNodeItemRecordMapper.java

@@ -21,4 +21,8 @@ public interface EnforceJobNodeItemRecordMapper extends BaseMapper<EnforceJobNod
      *  所有node的item信息的检车信息
      */
     List<EnforceJobNodeItemRecordDTO> findRecordByItemIds(@Param("ids") List<Long> ids);
+
+    List<EnforceJobNodeItemRecordDTO> findByIds(@Param("ids") List<Long> ids);
+
+    EnforceJobNodeItemRecordDTO getByIdEnforce(Long  id);
 }

+ 42 - 14
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/service/impl/enforce/job/EnforceJobServiceImpl.java

@@ -53,6 +53,7 @@ import com.zfjg.manage.config.Constant;
 import com.zfjg.manage.mapper.CommMapper;
 import com.zfjg.manage.mapper.enforce.job.EnforceJobMapper;
 import com.zfjg.manage.mapper.enforce.job.EnforceJobNodeItemMapper;
+import com.zfjg.manage.mapper.enforce.job.EnforceJobNodeItemRecordMapper;
 import com.zfjg.manage.mapper.enforce.job.EnforceJobNodeMapper;
 import com.zfjg.manage.mapper.enforce.template.EnforceTemplateMapper;
 import com.zfjg.manage.mapper.enforce.template.EnforceTemplateNodeItemMapper;
@@ -189,7 +190,8 @@ public class EnforceJobServiceImpl extends ServiceImpl<EnforceJobMapper, Enforce
     private RedisTemplate redisTemplate;
 
     @Autowired
-    private SequenceGenerator sequenceGenerator;
+    EnforceJobNodeItemRecordMapper enforceJobNodeItemRecordMapper;
+
 
     @Value("${enforce.root_org_id}")
     private String rootOrgId;
@@ -1313,6 +1315,7 @@ public class EnforceJobServiceImpl extends ServiceImpl<EnforceJobMapper, Enforce
         List<Long> deleteIds = new ArrayList<>();
         //EnforceJobNodeItemRecord 添加
         List<EnforceJobNodeItemRecord> recordsList = new ArrayList<>();
+        List<EnforceJobNodeItemRecord> updateList = new ArrayList<>();
         for (EnforceJobNodeItemDTO enforceJobNodeItemDTO :
                 enforceJobNodeItemDTOList) {
 
@@ -1372,29 +1375,29 @@ public class EnforceJobServiceImpl extends ServiceImpl<EnforceJobMapper, Enforce
 //            enforceJobNodeItemRecordService.deleteRecords(enforceJobNodeItemDTO.getId());
             deleteIds.add(enforceJobNodeItemDTO.getId());
 
+
+
             enforceJobNodeItemDTO.getRecords().forEach(e -> {
                 EnforceJobNodeItemRecord record = new EnforceJobNodeItemRecord();
                 BeanUtils.copyProperties(e, record);
+                record.setId(SequenceGenerator.getInstance().nextId());
                 record.setItemId(enforceJobNodeItemDTO.getId());
-                record.setId(sequenceGenerator.nextId());
                 recordsList.add(record);
-//                enforceJobNodeItemRecordService.saveRecord(e);
+
             });
         }
+
+
+//        enforceJobNodeItemRecordService.listByIds()
+
+
         if (StringUtils.isNotEmpty(deleteIds)) {
             enforceJobNodeItemRecordService.remove(new LambdaQueryWrapper<EnforceJobNodeItemRecord>()
                     .in(EnforceJobNodeItemRecord::getItemId, deleteIds));
         }
+
         if (StringUtils.isNotEmpty(recordsList)) {
-            try {
-                enforceJobNodeItemRecordService.saveOrUpdateBatch(recordsList);
-            }catch (Exception e){
-                e.printStackTrace();
-                for (EnforceJobNodeItemRecord bean:recordsList){
-                    bean.setId(sequenceGenerator.nextId());
-                }
-                enforceJobNodeItemRecordService.saveOrUpdateBatch(recordsList);
-            }
+            enforceJobNodeItemRecordService.saveBatch(initData(recordsList));
         }
         if (StringUtils.isNotEmpty(updateEnforceJobNodeItemList)) {
             enforceJobNodeItemService.updateBatchById(updateEnforceJobNodeItemList);
@@ -1404,6 +1407,31 @@ public class EnforceJobServiceImpl extends ServiceImpl<EnforceJobMapper, Enforce
         }
     }
 
+    private List<EnforceJobNodeItemRecord> initData(List<EnforceJobNodeItemRecord> list){
+        if(list==null){
+            return null;
+        }
+        List<Long> collect = list.stream().map(EnforceJobNodeItemRecord::getId).collect(Collectors.toList());
+        List<EnforceJobNodeItemRecordDTO> enforceJobNodeItemRecords = enforceJobNodeItemRecordMapper.findByIds(collect);
+        if(enforceJobNodeItemRecords!=null&&enforceJobNodeItemRecords.size()>0){
+            log.error("生成id有重复______________________");
+            enforceJobNodeItemRecords.forEach(e->{
+                list.forEach(e1->{
+                   if(e.getId().equals(e1.getId())){
+                       long l = SequenceGenerator.getInstance().nextId();
+                       EnforceJobNodeItemRecordDTO byId = enforceJobNodeItemRecordMapper.getByIdEnforce(l);
+                       if(byId!=null){
+                           l=SequenceGenerator.getInstance().nextId();
+                           log.error("再次重复______________________");
+                       }
+                       e1.setId(l);
+                   }
+                });
+            });
+        }
+        return list;
+    }
+
     @Override
     public Optional<EnforceJobDTO> find(long id) {
         EnforceJob enforceJob = baseMapper.selectById(id);
@@ -2691,7 +2719,7 @@ public class EnforceJobServiceImpl extends ServiceImpl<EnforceJobMapper, Enforce
         BeanUtils.copyProperties(enforceHandbook, templateHandbook);
         //新增  EnforceJobTemplateHandbook
 
-        templateHandbook.setId(sequenceGenerator.nextId());
+        templateHandbook.setId(SequenceGenerator.getInstance().nextId());
         templateHandbook.setJobId(enforceJobNode.getJobId());
         templateHandbook.setJobNodeId(enforceJobNode.getId());
         templateHandbook.setItemType("0");
@@ -2710,7 +2738,7 @@ public class EnforceJobServiceImpl extends ServiceImpl<EnforceJobMapper, Enforce
         enforceJobNodeItem.setItemName(enforceHandbook.getEnforceItem());
         enforceJobNodeItem.setItemContent(enforceHandbook.getEnforceContent());
         enforceJobNodeItem.setEnforceObjClass(enforceHandbook.getEnforceClass());
-        enforceJobNodeItem.setId(sequenceGenerator.nextId());
+        enforceJobNodeItem.setId(SequenceGenerator.getInstance().nextId());
         enforceJobNodeItem.setCheckOptions(null);
         enforceJobNodeItem.setCreateTime(new Date());
         enforceJobNodeItem.setUpdateTime(new Date());

+ 1 - 3
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/task/job/UnfreezeEnforceObjJobClient.java

@@ -39,8 +39,6 @@ public class UnfreezeEnforceObjJobClient {
     @Value("${fire.corn.unfreeze-enforce-obj-rsync.isopen}")
     private Boolean isopen;
 
-    @Autowired
-    SequenceGenerator sequenceGenerator;
     /**
      * 冻结执法对象自动解封任务(用新的)
      */
@@ -75,7 +73,7 @@ public class UnfreezeEnforceObjJobClient {
         enforceObjChangeHis.setUpdateUserName("系统操作");
         enforceObjChangeHis.setCreateTime(new Date());
         enforceObjChangeHis.setUpdateUserType(1L);
-        enforceObjChangeHis.setId(sequenceGenerator.nextId());
+        enforceObjChangeHis.setId(SequenceGenerator.getInstance().nextId());
         enforceObjChangeHisMapper.insert(enforceObjChangeHis);
         t.setManageStatus(0L);
         EnforceObjDTO enforceObjDTO = new EnforceObjDTO();

+ 1 - 3
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/task/obj/ObjCountTask.java

@@ -41,8 +41,6 @@ public class ObjCountTask {
     @Autowired
     private EnforceObjChangeHisMapper enforceObjChangeHisMapper;
 
-    @Autowired
-    SequenceGenerator sequenceGenerator;
     /**
      * 定时更新执法对象抽泣次数
      */
@@ -102,7 +100,7 @@ public class ObjCountTask {
             enforceObjChangeHis.setUpdateUserName("系统操作");
             enforceObjChangeHis.setCreateTime(new Date());
             enforceObjChangeHis.setUpdateUserType(1L);
-            enforceObjChangeHis.setId(sequenceGenerator.nextId());
+            enforceObjChangeHis.setId(SequenceGenerator.getInstance().nextId());
             enforceObjChangeHisMapper.insert(enforceObjChangeHis);
             log.info("定时更新执法对象经营状态ID:{},时间{}", enforceObj.getId(), enforceObj.getBlockedEndTime());
         });

+ 1 - 4
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/task/obj/ObjSyncTask.java

@@ -71,9 +71,6 @@ public class ObjSyncTask {
     @Autowired
     private RestTemplate restTemplate;
 
-    @Autowired
-    private SequenceGenerator sequenceGenerator;
-
     @Value("${fire.corn.obj-sync-task.isopen}")
     private Boolean isopen;
 
@@ -542,7 +539,7 @@ public class ObjSyncTask {
      */
     public <T> T execute(ObjSyncSearch search, String path, Class<T> object, String type) {
         SysPullLog sysPullLog = new SysPullLog();
-        sysPullLog.setId(sequenceGenerator.nextId());
+        sysPullLog.setId(SequenceGenerator.getInstance().nextId());
         sysPullLog.setRunTime(DateUtils.getNowDate());
         sysPullLog.setReq_json(search.toString());
         sysPullLog.setState(0l);

+ 1 - 4
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/task/video/DataShareVeidoListClient.java

@@ -184,8 +184,6 @@ public class DataShareVeidoListClient {
         private IDeviceService deviceRepository;
         private IEnforceVideoService enforceVideoRepository;
         private VideoBindJobTask videoBindJobService;
-
-        private SequenceGenerator sequenceGenerator;
         /**
          * STEP4:设置参数提交方式
          */
@@ -206,7 +204,6 @@ public class DataShareVeidoListClient {
             this.deviceRepository = SpringUtils.getBean(IDeviceService.class);
             this.enforceVideoRepository = SpringUtils.getBean(IEnforceVideoService.class);
             this.videoBindJobService = SpringUtils.getBean(VideoBindJobTask.class);
-            this.sequenceGenerator=SpringUtils.getBean(SequenceGenerator.class);
         }
 
         @Override
@@ -226,7 +223,7 @@ public class DataShareVeidoListClient {
                 sysPullLogMapper.insert(sysPullLog);
                 return;
             }
-            sysPullLog.setId(sequenceGenerator.nextId());
+            sysPullLog.setId(SequenceGenerator.getInstance().nextId());
             sysPullLogMapper.insert(sysPullLog);
             log.info("线程:" + Thread.currentThread().getName() + " , 读取数据耗时 :" + (System.currentTimeMillis() - start) + "ms");
             List<EnforceVideoHkRes> enforceVideoHkRes = result.getJSONObject("data").getJSONArray("list").toJavaList(EnforceVideoHkRes.class);

+ 18 - 8
zfjg-modules/zfjg-manage/src/main/java/com/zfjg/manage/utils/SequenceGenerator.java

@@ -1,7 +1,5 @@
 package com.zfjg.manage.utils;
 
-import org.springframework.stereotype.Service;
-
 import java.net.NetworkInterface;
 import java.security.SecureRandom;
 import java.time.Instant;
@@ -14,9 +12,9 @@ import java.util.Enumeration;
  * <p>This class should be used as a Singleton. Make sure that you create and reuse a Single
  * instance of SequenceGenerator per node in your distributed system cluster.
  */
-@Service
 public class SequenceGenerator {
-  private static final int TOTAL_BITS = 60;
+
+  private static final int TOTAL_BITS = 64;
   private static final int EPOCH_BITS = 42;
   private static final int NODE_ID_BITS = 10;
   private static final int SEQUENCE_BITS = 12;
@@ -27,13 +25,15 @@ public class SequenceGenerator {
   // Custom Epoch (January 1, 2015 Midnight UTC = 2015-01-01T00:00:00Z)
   private static final long CUSTOM_EPOCH = 1420070400000L;
 
+  private static final SequenceGenerator INSTANCE = new SequenceGenerator();
+
   private final int nodeId;
 
   private volatile long lastTimestamp = -1L;
   private volatile long sequence = 0L;
 
   // Create SequenceGenerator with a nodeId
-  public SequenceGenerator(int nodeId) {
+  private SequenceGenerator(int nodeId) {
     if (nodeId < 0 || nodeId > maxNodeId) {
       throw new IllegalArgumentException(
           String.format("NodeId must be between %d and %d", 0, maxNodeId));
@@ -42,11 +42,20 @@ public class SequenceGenerator {
   }
 
   // Let SequenceGenerator generate a nodeId
-  public SequenceGenerator() {
+  private  SequenceGenerator() {
     this.nodeId = createNodeId();
   }
+  // 公开的静态方法,用于获取单例实例
+  public static SequenceGenerator getInstance() {
+    return INSTANCE;
+  }
 
   public synchronized long nextId() {
+    try {
+      Thread.sleep(3);
+    }catch (Exception e){
+
+    }
     long currentTimestamp = timestamp();
 
     if (currentTimestamp < lastTimestamp) {
@@ -69,7 +78,9 @@ public class SequenceGenerator {
     long id = currentTimestamp << (TOTAL_BITS - EPOCH_BITS);
     id |= (nodeId << (TOTAL_BITS - EPOCH_BITS - NODE_ID_BITS));
     id |= sequence;
-    return id;
+    long result = id % 100000000000000000L;
+    long l = result / 10;
+    return l;
   }
 
   // Get current timestamp in milliseconds, adjust for the custom epoch.
@@ -108,5 +119,4 @@ public class SequenceGenerator {
     return nodeId;
   }
 
-
 }

+ 32 - 0
zfjg-modules/zfjg-manage/src/main/resources/mapper/enforce/job/EnforceJobNodeItemRecordMapper.xml

@@ -28,4 +28,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 )
             </if>
     </select>
+
+    <select id="findByIds"
+            resultType="com.zfjg.manage.api.dto.enforce.job.EnforceJobNodeItemRecordDTO">
+        select
+        id,
+        item_id,
+        is_deleted
+        from enforce_job_node_item_record
+        where
+
+        <if test="ids != null and ids.size>0">
+            id in
+            <foreach collection="ids" index="index" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="getByIdEnforce"
+            resultType="com.zfjg.manage.api.dto.enforce.job.EnforceJobNodeItemRecordDTO">
+        select
+        id,
+        item_id,
+        is_deleted
+        from enforce_job_node_item_record
+        where
+
+        <if test="id != null">
+            id =  #{id}
+        </if>
+    </select>
+
 </mapper>