Jelajahi Sumber

第三方导出增加重置点号功能

欧阳劲驰 2 bulan lalu
induk
melakukan
f78cd618a7

+ 2 - 2
src/main/java/com/shkpr/service/alambizplugin/apiparam/GisSurveyThirdImportParams.java

@@ -36,9 +36,9 @@ public class GisSurveyThirdImportParams {
      */
     private String nature;
     /**
-     * 点线规则
+     * 是否重置点号
      */
-    private String codeRule;
+    private Boolean resetNo;
     /**
      * 忽略失败
      */

+ 1 - 1
src/main/java/com/shkpr/service/alambizplugin/bizservice/GisSurveySystemCheckBizService.java

@@ -189,7 +189,7 @@ public class GisSurveySystemCheckBizService {
         if (systemCheckId.getCheckType() == GisSurveyCheckTypeEnum.PROJECT)
             refreshTime = projectInfoService.findRefreshTimeByUid(systemCheckId.getCode());
         if (systemCheckId.getCheckType() == GisSurveyCheckTypeEnum.JOB)
-            refreshTime = jobInfoService.findRefreshTimeByUid(systemCheckId.getCode());
+            refreshTime = jobInfoService.findRefreshTime(systemCheckId.getCode());
         return refreshTime;
     }
 

+ 1 - 1
src/main/java/com/shkpr/service/alambizplugin/bizservice/GisSurveyThirdExportBizService.java

@@ -88,7 +88,7 @@ public class GisSurveyThirdExportBizService {
         CommAsyncResult<Map<String, String>> fileResult = asyncResultManager.getResult(FLAG, new TypeReference<CommAsyncResult<Map<String, String>>>() {
         });
         //获取数据更新时间
-        LocalDateTime refreshTime = jobInfoService.findRefreshTimeByUid(jobId);
+        LocalDateTime refreshTime = jobInfoService.findRefreshTime(jobId);
         //直接返回文件结果判断:结果\刷新时间\数据不为空,结果数据包含当前项,文件结果落后数据库
         if (fileResult != null && refreshTime != null
                 //文件结果包含数据库时间

+ 16 - 6
src/main/java/com/shkpr/service/alambizplugin/bizservice/GisSurveyThirdImportBizService.java

@@ -7,6 +7,7 @@ import com.shkpr.service.alambizplugin.commproperties.AsyncTaskProperties;
 import com.shkpr.service.alambizplugin.components.GisSurveyThirdImporter;
 import com.shkpr.service.alambizplugin.constants.GisSurveyImportStatusEnum;
 import com.shkpr.service.alambizplugin.constants.LogFlagBusiType;
+import com.shkpr.service.alambizplugin.dto.CommAsyncCache;
 import com.shkpr.service.alambizplugin.dto.GisSurveyThirdImportResult;
 import com.shkpr.service.alambizplugin.dto.GisSurveyThirdImportSubtask;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -45,7 +46,7 @@ public class GisSurveyThirdImportBizService {
     /**
      * 开始时间缓存
      */
-    private final static Map<String, LocalDateTime> TIME_CACHE = new ConcurrentHashMap<>();
+    private final static Map<String, CommAsyncCache> INFO_CACHE = new ConcurrentHashMap<>();
     /**
      * log
      */
@@ -90,7 +91,10 @@ public class GisSurveyThirdImportBizService {
         //启动检查任务
         startTask(params, inputStreams);
         //返回进行中
-        return GisSurveyThirdImportResult.inProgress(params, SUBTASK_CACHE.get(params.getJobId()), LocalDateTime.now());
+        return GisSurveyThirdImportResult.inProgress(params, SUBTASK_CACHE.get(params.getJobId()),
+                LocalDateTime.now(),
+                params.getOperator()
+        );
     }
 
     /**
@@ -126,8 +130,14 @@ public class GisSurveyThirdImportBizService {
         }
 
         //进行中判断(未完成且未清除)
-        if (previousFuture != null && !previousFuture.isDone() && !previousFuture.isCancelled())
-            return GisSurveyThirdImportResult.inProgress(params, SUBTASK_CACHE.get(params.getJobId()), TIME_CACHE.get(params.getJobId()));
+        if (previousFuture != null && !previousFuture.isDone() && !previousFuture.isCancelled()) {
+            CommAsyncCache asyncCache = INFO_CACHE.get(params.getJobId());
+            if (asyncCache != null)
+                return GisSurveyThirdImportResult.inProgress(params,
+                        SUBTASK_CACHE.get(params.getJobId()),
+                        asyncCache.getStartTime(), asyncCache.getOperator()
+                );
+        }
 
         return null;
     }
@@ -191,7 +201,7 @@ public class GisSurveyThirdImportBizService {
         //缓存任务句柄
         TASK_CACHE.put(jobId, future);
         //缓存时间
-        TIME_CACHE.put(jobId, LocalDateTime.now());
+        INFO_CACHE.put(jobId, new CommAsyncCache(LocalDateTime.now(), params.getOperator()));
     }
 
     /**
@@ -215,6 +225,6 @@ public class GisSurveyThirdImportBizService {
     private void removeCache(String jobId) {
         TASK_CACHE.remove(jobId);
         SUBTASK_CACHE.remove(jobId);
-        TIME_CACHE.remove(jobId);
+        INFO_CACHE.remove(jobId);
     }
 }

+ 2 - 0
src/main/java/com/shkpr/service/alambizplugin/commtools/norule/JPSurveyApplyColumn.java

@@ -1,11 +1,13 @@
 package com.shkpr.service.alambizplugin.commtools.norule;
 
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
 
 
 @Getter
 @Setter
+@AllArgsConstructor
 public class JPSurveyApplyColumn {
     private String property = "";
     private String value = "";

+ 1 - 1
src/main/java/com/shkpr/service/alambizplugin/components/GisSurveyThirdExporter.java

@@ -97,7 +97,7 @@ public class GisSurveyThirdExporter {
             );
 
             //查询元素更新时间
-            LocalDateTime refreshTime = jobInfoService.findRefreshTimeByUid(jobId);
+            LocalDateTime refreshTime = jobInfoService.findRefreshTime(jobId);
             //查询点线数据
             List<GisSurveyLayerApply> points = gisSurveyLayerApplyService.findAllByJobIdAndKind(jobId, GisMetadataDefine.TYPE_KINE.POINT);
             List<GisSurveyLayerApply> lines = gisSurveyLayerApplyService.findAllByJobIdAndKind(jobId, GisMetadataDefine.TYPE_KINE.LINE);

+ 53 - 1
src/main/java/com/shkpr/service/alambizplugin/components/GisSurveyThirdImporter.java

@@ -6,6 +6,9 @@ import com.shkpr.service.alambizplugin.apiparam.GisSurveyThirdImportParams;
 import com.shkpr.service.alambizplugin.commtools.ExcelUtils;
 import com.shkpr.service.alambizplugin.commtools.PointCodeUtil;
 import com.shkpr.service.alambizplugin.commtools.ThirdImportTemplateUtils;
+import com.shkpr.service.alambizplugin.commtools.norule.JPSurveyApplyColumn;
+import com.shkpr.service.alambizplugin.commtools.norule.RuleFormatSetting;
+import com.shkpr.service.alambizplugin.commtools.norule.SurveyCommonAssistant;
 import com.shkpr.service.alambizplugin.components.checker.DuplicatePointsFinder;
 import com.shkpr.service.alambizplugin.components.checker.InvalidLinesFinder;
 import com.shkpr.service.alambizplugin.components.checker.InvalidPropertiesFinder;
@@ -16,6 +19,7 @@ import com.shkpr.service.alambizplugin.constants.GisSurveyExcelDefine;
 import com.shkpr.service.alambizplugin.constants.GisSurveyImportStatusEnum;
 import com.shkpr.service.alambizplugin.constants.LogFlagBusiType;
 import com.shkpr.service.alambizplugin.dbdao.services.intef.GisMetadataLayerTemplateService;
+import com.shkpr.service.alambizplugin.dbdao.services.intef.GisSurveyJobInfoService;
 import com.shkpr.service.alambizplugin.dbdao.services.intef.GisSurveyLayerApplyThirdCopyService;
 import com.shkpr.service.alambizplugin.dto.GisMetadataLayerTemplate;
 import com.shkpr.service.alambizplugin.dto.GisMetadataPropertyTemplate;
@@ -72,9 +76,10 @@ public class GisSurveyThirdImporter {
     private final DuplicatePointsFinder duplicatePointsFinder;
     private final InvalidLinesFinder invalidLinesFinder;
     private final InvalidPropertiesFinder invalidPropertiesFinder;
+    private final GisSurveyJobInfoService gisSurveyJobInfoService;
 
     public GisSurveyThirdImporter(GisMetadataLayerTemplateService layerTemplateService, GisSurveyLayerApplyThirdCopyService gisSurveyLayerApplyThirdCopyService
-            , DuplicatePointsFinder duplicatePointsFinder, InvalidLinesFinder invalidLinesFinder, InvalidPropertiesFinder invalidPropertiesFinder) {
+            , DuplicatePointsFinder duplicatePointsFinder, InvalidLinesFinder invalidLinesFinder, InvalidPropertiesFinder invalidPropertiesFinder, GisSurveyJobInfoService gisSurveyJobInfoService) {
         mStrClassName = "GisSurveyThirdImporter";
         mBizType = LogFlagBusiType.BUSI_GIS_SURVEY.toStrValue();
         geometryFactory = new GeometryFactory(new PrecisionModel(), 4490);
@@ -83,6 +88,7 @@ public class GisSurveyThirdImporter {
         this.duplicatePointsFinder = duplicatePointsFinder;
         this.invalidLinesFinder = invalidLinesFinder;
         this.invalidPropertiesFinder = invalidPropertiesFinder;
+        this.gisSurveyJobInfoService = gisSurveyJobInfoService;
     }
 
     /**
@@ -99,6 +105,7 @@ public class GisSurveyThirdImporter {
             , Consumer<GisSurveyThirdImportSubtask> onStartSubtask, Consumer<String> onDeprecatedSubtask) {
         //构建返回
         GisSurveyThirdImportResult result = GisSurveyThirdImportResult.fail(params);
+        result.setOperator(params.getOperator());
         //无效属性任务
         ListenableFuture<GisSurveyThirdImportResultDetail<Map<String, List<GisSurveyThirdImportElement>>>> invalidPropertiesFuture = null;
         //重复点号任务
@@ -169,6 +176,10 @@ public class GisSurveyThirdImporter {
 
             //解码点线数据
             List<GisSurveyLayerApplyThirdCopy> layerApplyList = decodeDataToLayerApply(points, lines, pointLayerTemplates, lineLayerTemplates, params);
+
+            //重置点号
+            if (params.getResetNo()) resetNo(params.getJobId(), layerApplyList);
+
             //批量写入
             Boolean saved = gisSurveyLayerApplyThirdCopyService.saveAll(params.getJobId(), layerApplyList);
             if (!saved) {
@@ -524,4 +535,45 @@ public class GisSurveyThirdImporter {
 
         return null;
     }
+
+    /**
+     * 重置点号
+     *
+     * @param jobId          任务id
+     * @param layerApplyList 采集元素集合
+     */
+    private void resetNo(String jobId, List<GisSurveyLayerApplyThirdCopy> layerApplyList) {
+        LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBizType, mStrClassName, "开始重置点号   ======>");
+        long begin = System.currentTimeMillis();
+
+        //点号规则
+        final List<RuleFormatSetting> ruleFormat = gisSurveyJobInfoService.findRuleFormat(jobId);
+        //并行遍历元素
+        layerApplyList.parallelStream()
+                .filter(la -> Objects.equals(la.getKind(), GisMetadataDefine.TYPE_KINE.POINT))
+                .forEach(la -> {
+                    //生成点号
+                    String no = SurveyCommonAssistant.genNo(
+                            la.getCode(),
+                            la.getPropertyValues().stream()
+                                    .map(pv -> new JPSurveyApplyColumn(pv.getProperty(), pv.getProperty()))
+                                    .collect(Collectors.toList()),
+                            ruleFormat
+                    );
+                    //设置元素点号
+                    la.setNo(no);
+                    //设置属性点号
+                    la.getPropertyValues().stream()
+                            .filter(it -> Objects.equals(it.getProperty(), GisSurveyExcelDefine.TEMPLATE.NO))
+                            .forEach(it -> it.setValue(no));
+                });
+
+        long end = System.currentTimeMillis();
+        LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_INFO, mBizType, mStrClassName
+                , String.format(
+                        "结束执行执行重置点号,用时(毫秒):%d"
+                        , (end - begin)
+                )
+        );
+    }
 }

+ 3 - 3
src/main/java/com/shkpr/service/alambizplugin/controller/ApiGisSurveyController.java

@@ -266,7 +266,7 @@ public class ApiGisSurveyController {
      * @param operator      操作人
      * @param jobId         任务id
      * @param nature        用水性质,supply/drain
-     * @param codeRule      点号规则
+     * @param resetNo       是否重置点号
      * @param ignoreFail    是否忽略失败
      * @return 第三方导入结果
      */
@@ -278,7 +278,7 @@ public class ApiGisSurveyController {
             , @RequestParam(value = "operator", required = false) String operator
             , @RequestParam(value = "jobId", required = false) String jobId
             , @RequestParam(value = "nature", required = false) String nature
-            , @RequestParam(value = "codeRule", required = false) String codeRule
+            , @RequestParam(value = "resetNo", required = false) Boolean resetNo
             , @RequestParam(value = "ignoreFail", required = false, defaultValue = "false") String ignoreFail) throws SelfException {
         //入参校验
         final String URI_PATH = request.getRequestURI();
@@ -292,7 +292,7 @@ public class ApiGisSurveyController {
                     , ResponseCode.STATUS_ERROR_PARAM_FORMAT.toStrMsg()));
         }
         //构建入参数
-        GisSurveyThirdImportParams params = new GisSurveyThirdImportParams(files, operator, jobId, nature, codeRule, Boolean.parseBoolean(ignoreFail));
+        GisSurveyThirdImportParams params = new GisSurveyThirdImportParams(files, operator, jobId, nature, resetNo, Boolean.parseBoolean(ignoreFail));
         //begin
         long llReqBefore = System.currentTimeMillis();
         String strRunSeq = String.format("%d-%d", llReqBefore, mSeqThirdImportReq.incrementAndGet());

+ 14 - 1
src/main/java/com/shkpr/service/alambizplugin/dbdao/services/GisSurveyJobInfoServiceImpl.java

@@ -1,10 +1,12 @@
 package com.shkpr.service.alambizplugin.dbdao.services;
 
+import com.shkpr.service.alambizplugin.commtools.norule.RuleFormatSetting;
 import com.shkpr.service.alambizplugin.dbdao.mapper.GisSurveyJobInfoMapper;
 import com.shkpr.service.alambizplugin.dbdao.services.intef.GisSurveyJobInfoService;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 采集任务基本信息service实现
@@ -28,7 +30,18 @@ public class GisSurveyJobInfoServiceImpl implements GisSurveyJobInfoService {
      * @return 刷新时间
      */
     @Override
-    public LocalDateTime findRefreshTimeByUid(String uid) {
+    public LocalDateTime findRefreshTime(String uid) {
         return jobInfoMapper.findRefreshTimeByUid(uid);
     }
+
+    /**
+     * 根据uid查询点号规则
+     *
+     * @param uid uid
+     * @return 点号规则
+     */
+    @Override
+    public List<RuleFormatSetting> findRuleFormat(String uid) {
+        return jobInfoMapper.findRuleFormatByUid(uid);
+    }
 }

+ 11 - 2
src/main/java/com/shkpr/service/alambizplugin/dbdao/services/intef/GisSurveyJobInfoService.java

@@ -1,8 +1,9 @@
 package com.shkpr.service.alambizplugin.dbdao.services.intef;
 
-import org.apache.ibatis.annotations.Param;
+import com.shkpr.service.alambizplugin.commtools.norule.RuleFormatSetting;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 采集任务基本信息service
@@ -17,5 +18,13 @@ public interface GisSurveyJobInfoService {
      * @param uid uid
      * @return 刷新时间
      */
-    LocalDateTime findRefreshTimeByUid(@Param("uid") String uid);
+    LocalDateTime findRefreshTime(String uid);
+
+    /**
+     * 根据uid查询点号规则
+     *
+     * @param uid uid
+     * @return 点号规则
+     */
+    List<RuleFormatSetting> findRuleFormat(String uid);
 }

+ 2 - 1
src/main/java/com/shkpr/service/alambizplugin/dto/GisSurveyThirdImportResult.java

@@ -77,7 +77,7 @@ public class GisSurveyThirdImportResult {
     /**
      * 进行中
      */
-    public static GisSurveyThirdImportResult inProgress(GisSurveyThirdImportParams params, GisSurveyThirdImportSubtask subtask, LocalDateTime requestTime) {
+    public static GisSurveyThirdImportResult inProgress(GisSurveyThirdImportParams params, GisSurveyThirdImportSubtask subtask, LocalDateTime requestTime,String operator) {
         GisSurveyThirdImportResult result = new GisSurveyThirdImportResult();
         BeanUtils.copyProperties(params, result);
 
@@ -97,6 +97,7 @@ public class GisSurveyThirdImportResult {
 
         result.setImportStatus(GisSurveyImportStatusEnum.IN_PROGRESS.getCode());
         result.setRequestTime(requestTime);
+        result.setOperator(operator);
         return result;
     }