From f1f0bf275adada9c3c6614e06cdcf45fae11c031 Mon Sep 17 00:00:00 2001
From: xiaowuler <xiaowuler@163.com>
Date: Mon, 21 Mar 2022 13:39:52 +0800
Subject: [PATCH] modify sone codes

---
 .../xxljobexecutor/dao/IDataRepository.java   |   1 +
 .../dao/impl/DataRepository.java              |  51 +++++++++++++---
 .../model/domain/RadarBlock.java              |  24 ++++++++
 .../service/impl/RadarService.java            |  57 ++++++++++++++++--
 .../core/weather/resolver/RadarReader.java    |   2 +
 .../core/weather/resolver/RadarReader$1.class | Bin 1345 -> 1345 bytes
 .../core/weather/resolver/RadarReader.class   | Bin 3049 -> 4152 bytes
 .../target/maven-archiver/pom.properties      |   2 +-
 .../compile/default-compile/inputFiles.lst    |  38 ++++++------
 .../target/radar-core-1.0.0-SNAPSHOT.jar      | Bin 36966 -> 37429 bytes
 10 files changed, 143 insertions(+), 32 deletions(-)
 create mode 100644 04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/model/domain/RadarBlock.java

diff --git a/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/IDataRepository.java b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/IDataRepository.java
index f3e37de..f929007 100644
--- a/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/IDataRepository.java
+++ b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/IDataRepository.java
@@ -14,4 +14,5 @@ import com.ping.chuan.ahpmsdp.xxljobexecutor.model.dao.DealInfo;
  */
 public interface IDataRepository {
     void insert(String keyspace, String tableName, Date initialTime, Date forecastTime, int timeEffect, Map<String, List<List<BigDecimal>>> columns);
+    void insert(String keyspace, String tableName, Date initialTime, Date forecastTime, String station, Map<String, byte[]> columns, int maxCount);
 }
diff --git a/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/impl/DataRepository.java b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/impl/DataRepository.java
index 20d9d36..1fd7a2a 100644
--- a/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/impl/DataRepository.java
+++ b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/dao/impl/DataRepository.java
@@ -38,17 +38,32 @@ public class DataRepository implements IDataRepository {
             return;
         }
 
-        groupInsert(keyspace, tableName, targetColumns, targetValues);
+        groupInsert(keyspace, tableName, targetColumns, targetValues, maxInsertCount, 2);
     }
 
-    private void groupInsert(String keyspace, String tableName, List<String> columns, List<Object> values){
-        int len = CalcUtil.calcClip(columns.size() - 2, maxInsertCount);
+    @Override
+    public void insert(String keyspace, String tableName, Date initialTime, Date forecastTime, String station, Map<String, byte[]> columns, int maxCount) {
+        List<String> targetColumns = prepareRadarColumnNames(columns.keySet());
+        List<Object> targetValues = prepareColumnValues(initialTime, forecastTime, station, columns.values());
+
+        if (targetColumns.size() <= maxCount){
+            Insert builder = QueryBuilder.insertInto(keyspace, tableName)
+                    .values(targetColumns, targetValues);
+            cassandraTemplate.getSession().execute(builder);
+            return;
+        }
+
+        groupInsert(keyspace, tableName, targetColumns, targetValues, maxCount, 3);
+    }
+
+    private void groupInsert(String keyspace, String tableName, List<String> columns, List<Object> values, int maxCount, int limit){
+        int len = CalcUtil.calcClip(columns.size() - limit, maxCount);
         for(int index = 0; index < len; index ++){
-            int startIndex = (index) * maxInsertCount + 2;
-            List<String> targetColumns = columns.stream().limit(2).collect(Collectors.toList());
-            targetColumns.addAll(columns.stream().skip(startIndex).limit(maxInsertCount).collect(Collectors.toList()));
-            List<Object> targetValues = values.stream().limit(2).collect(Collectors.toList());
-            targetValues.addAll(values.stream().skip(startIndex).limit(maxInsertCount).collect(Collectors.toList()));
+            int startIndex = (index) * maxCount + limit;
+            List<String> targetColumns = columns.stream().limit(limit).collect(Collectors.toList());
+            targetColumns.addAll(columns.stream().skip(startIndex).limit(maxCount).collect(Collectors.toList()));
+            List<Object> targetValues = values.stream().limit(limit).collect(Collectors.toList());
+            targetValues.addAll(values.stream().skip(startIndex).limit(maxCount).collect(Collectors.toList()));
             Insert builder = QueryBuilder.insertInto(keyspace, tableName)
                     .values(targetColumns, targetValues);
             cassandraTemplate.getSession().execute(builder);
@@ -65,6 +80,16 @@ public class DataRepository implements IDataRepository {
         return columns;
     }
 
+    private List<String> prepareRadarColumnNames(Set<String> columnSet){
+        List<String> columns = new ArrayList<>();
+        columns.add("initial_time");
+        columns.add("forecast_time");
+        columns.add("station");
+        columns.add("create_time");
+        columns.addAll(columnSet);
+        return columns;
+    }
+
     private List<Object> prepareColumnValues(Date initialTime, Date forecastTime, int timeEffect, Collection<List<List<BigDecimal>>> values){
         List<Object> columns = new ArrayList<>();
         columns.add(initialTime);
@@ -74,4 +99,14 @@ public class DataRepository implements IDataRepository {
         columns.addAll(values);
         return columns;
     }
+
+    private List<Object> prepareColumnValues(Date initialTime, Date forecastTime, String station, Collection<byte[]> values){
+        List<Object> columns = new ArrayList<>();
+        columns.add(initialTime);
+        columns.add(forecastTime);
+        columns.add(station);
+        columns.add(new Date());
+        columns.addAll(values);
+        return columns;
+    }
 }
diff --git a/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/model/domain/RadarBlock.java b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/model/domain/RadarBlock.java
new file mode 100644
index 0000000..4c99adf
--- /dev/null
+++ b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/model/domain/RadarBlock.java
@@ -0,0 +1,24 @@
+package com.ping.chuan.ahpmsdp.xxljobexecutor.model.domain;
+
+import java.util.List;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import com.xiaowuler.radar.core.weather.domain.CutConfiguration;
+import com.xiaowuler.radar.core.weather.domain.MomentBlock;
+import com.xiaowuler.radar.core.weather.domain.Radial;
+import com.xiaowuler.radar.core.weather.domain.RadialHeader;
+
+/**
+ * @describe: leida
+ * @author: xiaowuler
+ * @createTime: 2022-03-18 16:57
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class RadarBlock {
+    private CutConfiguration cutConfiguration;
+    private List<Radial> radials;
+}
diff --git a/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/service/impl/RadarService.java b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/service/impl/RadarService.java
index 16cc05f..6d15831 100644
--- a/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/service/impl/RadarService.java
+++ b/04.系统编码/01.xxl-job/xxl-job-executor/src/main/java/com/ping/chuan/ahpmsdp/xxljobexecutor/service/impl/RadarService.java
@@ -1,14 +1,28 @@
 package com.ping.chuan.ahpmsdp.xxljobexecutor.service.impl;
 
+import com.ping.chuan.ahpmsdp.xxljobexecutor.dao.IDataRepository;
+import com.ping.chuan.ahpmsdp.xxljobexecutor.dao.IDealInfoRepository;
+import com.ping.chuan.ahpmsdp.xxljobexecutor.model.constant.StateConstant;
+import com.ping.chuan.ahpmsdp.xxljobexecutor.model.constant.TimeConstant;
 import com.ping.chuan.ahpmsdp.xxljobexecutor.model.dao.DealInfo;
 import com.ping.chuan.ahpmsdp.xxljobexecutor.model.dao.MetaInfo;
 import com.ping.chuan.ahpmsdp.xxljobexecutor.model.domain.Coordinate;
+import com.ping.chuan.ahpmsdp.xxljobexecutor.model.domain.RadarBlock;
 import com.ping.chuan.ahpmsdp.xxljobexecutor.service.IRadarService;
+import com.ping.chuan.ahpmsdp.xxljobexecutor.util.GZipUtils;
+
 import org.springframework.stereotype.Service;
 
-import java.util.Map;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.xiaowuler.radar.core.exceptions.RadarReadException;
+import com.xiaowuler.radar.core.weather.domain.CommonBlock;
+import com.xiaowuler.radar.core.weather.domain.CutConfiguration;
+import com.xiaowuler.radar.core.weather.domain.Radial;
 import com.xiaowuler.radar.core.weather.resolver.RadarReader;
 
 /**
@@ -16,16 +30,51 @@ import com.xiaowuler.radar.core.weather.resolver.RadarReader;
  */
 @Service
 public class RadarService implements IRadarService {
+
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+    private final IDataRepository dataRepository;
+    private final IDealInfoRepository dealInfoRepository;
+    public RadarService(IDataRepository dataRepository, IDealInfoRepository dealInfoRepository){
+        this.dataRepository = dataRepository;
+        this.dealInfoRepository = dealInfoRepository;
+    }
+
     @Override
     public String read(Map.Entry<DealInfo, Map.Entry<MetaInfo, Coordinate>> entry) {
+        SimpleDateFormat sdf = new SimpleDateFormat(TimeConstant.YYYYMM_STR);
+        String keyspace = "data_%s".formatted(sdf.format( entry.getKey().getInitialTime()));
+        String error = null;
         try {
             RadarReader radarReader = new RadarReader();
             radarReader.read(entry.getKey().getLocalPath());
 
+            Map<String, byte[]> columns = toColumns(radarReader.getRadarBlock().getCommonBlock());
+            toColumns(columns, radarReader.getRadarBlock().getCommonBlock().getCutConfigurations(), radarReader.getRadarBlock().getRadialBlock().getRadials());
+            dataRepository.insert(keyspace, entry.getValue().getKey().toTableName(), entry.getKey().getInitialTime(), entry.getKey().getInitialTime(), radarReader.getRadarBlock().getCommonBlock().getSiteConfiguration().getSiteCode(), columns, 2);
+            entry.getKey().setState(StateConstant.SUCCESS);
+        } catch (RadarReadException | IOException e) {
+            entry.getKey().setState(StateConstant.FAILED);
+            entry.getKey().setMessage(e.getMessage());
+            error = e.getMessage();
+        }
+        dealInfoRepository.insert(keyspace, entry.getKey());
+        return Objects.isNull(error) ? "文件解析成功" : "文件解析失败,%s".formatted(error);
+    }
+
+    private Map<String, byte[]> toColumns(CommonBlock commonBlock) throws IOException {
+        return new LinkedHashMap<>(){{
+            put("site_configuration", GZipUtils.compress(mapper.writeValueAsBytes(commonBlock.getSiteConfiguration())));
+            put("task_configuration", GZipUtils.compress(mapper.writeValueAsBytes(commonBlock.getTaskConfiguration())));
+            put("generic_header", GZipUtils.compress(mapper.writeValueAsBytes(commonBlock.getGenericHeader())));
+        }};
+    }
 
-        } catch (RadarReadException e) {
-            e.printStackTrace();
+    private void toColumns(Map<String, byte[]> columns, List<CutConfiguration> cutConfigurations, List<Radial> radials) throws IOException {
+        for(int index = 0, len = cutConfigurations.size(); index < len; index++){
+            int num = index + 1;
+            List<Radial> targetRadial = radials.stream().filter(r -> r.getRadialHeader().getElevationNumber() == num).collect(Collectors.toList());
+            columns.put("col_%s".formatted(index), GZipUtils.compress(mapper.writeValueAsBytes(new RadarBlock(cutConfigurations.get(index), targetRadial))));
         }
-        return null;
     }
 }
diff --git a/04.系统编码/03.radar-resolver/radar-core/src/main/java/com/xiaowuler/radar/core/weather/resolver/RadarReader.java b/04.系统编码/03.radar-resolver/radar-core/src/main/java/com/xiaowuler/radar/core/weather/resolver/RadarReader.java
index 113db2a..57e6768 100644
--- a/04.系统编码/03.radar-resolver/radar-core/src/main/java/com/xiaowuler/radar/core/weather/resolver/RadarReader.java
+++ b/04.系统编码/03.radar-resolver/radar-core/src/main/java/com/xiaowuler/radar/core/weather/resolver/RadarReader.java
@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import com.xiaowuler.radar.core.custom.impl.CustomRadarInputStream;
 import com.xiaowuler.radar.core.exceptions.RadarReadException;
@@ -17,6 +18,7 @@ import com.xiaowuler.radar.core.weather.domain.*;
  * @createTime: 2022-03-09 11:09
  */
 @Slf4j
+@Data
 public class RadarReader implements Serializable {
 
     private static final double DEG2RAD = Math.PI / 180;
diff --git a/04.系统编码/03.radar-resolver/radar-core/target/classes/com/xiaowuler/radar/core/weather/resolver/RadarReader$1.class b/04.系统编码/03.radar-resolver/radar-core/target/classes/com/xiaowuler/radar/core/weather/resolver/RadarReader$1.class
index 52ecab3184ed73dd6091a5e904ed1cb26316697c..d8cbdc7abf6329664fe1df075ea699fc36c233e8 100644
GIT binary patch
delta 25
gcmX@eb&zYrBNko-20jKw23ZCr1|0_F$?sW$09DBa?*IS*

delta 25
gcmX@eb&zYrBNkpc20jLP23ZCL1|0^)$?sW$09A1X=Kufz

diff --git a/04.系统编码/03.radar-resolver/radar-core/target/classes/com/xiaowuler/radar/core/weather/resolver/RadarReader.class b/04.系统编码/03.radar-resolver/radar-core/target/classes/com/xiaowuler/radar/core/weather/resolver/RadarReader.class
index 14fb3f83e540954478426640bea742368146712e..edadb33ea473c5caae215deca1b954a322fb194e 100644
GIT binary patch
literal 4152
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
O^DY1V0&n6i)c+Swo%9y~

delta 1351
zcmY*YTT@$A7+pKbIVU+BPBDZgV1)((O+wPNlv|)s+DergD73bM^+KAaX&@$;q!$s5
z*GFdT?5Dozldsl}f@Q|m8E2gF&7a_-|3Js_vi3nso6OmJ?eBb-^{xG#?SsDs=YRhD
z!S?`0@TmcpfW4BvnN5|l<w9yUTfc6?1I>VL!GKqwW$*2|D=Yb2T|hrxEEnsO0`6$+
zk^%Ehc&g6_O9eCwv_&&}As6b^V!1G`-1Z5KNTCl|k)tMTJfqzGcYfKh186g_-$D=}
zfg$B0KNDw~I`FK40~Ve`r~FlnF8XlLLReAKa-~WwZ=gq@b+6R)?OcAXUaXXT2%y(O
z9}baWsZtQ|XDZb~s#dx-xRT0L3Wa=i+)n{w7UJlaw_MXrNgOtivTy`P<xj4&o?`;T
z@(a-}54*d(0~k_dhvh|gmp*DCjWN0I?&zMhZ~|j2QY)7AsmqU;5-@QZ&l{Mwa0V~P
zA3XD7M*6i;xu7NG@7hVtQ_W|u$_;HpruCWNYflNhtCoQ`?%&l1g#6q)Yu`5U4%Q94
ztGI5+KfOPS_vIsBxJ|&CDVOur)1_>!maiH3P@q>%nVn`NQ>m=pSTpdkoG_D(0Pj=a
zMYz$SG$F+foW)DDWr$rE=R@g<HQIRRTxWSoaTm%O--7#|<2uJxcZ>m?Ber%OFpmYE
z1kR(G$rvo!m`tPXylBksz_--Dg{IlWTzm)iQarhZmT%CS*hc$Z97}wQt}l_8`x=q{
z2Z#d6?~rg~2LnrV9DF$D*>yCOW4q_!J$B+^4^ebG`$?9GQgpSup(qZMhU(IV188b+
zfSS?iG#_UBDlCQ`j3UC2K1y+jK{0j^cX}Em?`Hll;AN(ZQJ9OkM8sbH>r<guu*iO0
zv@Frjg;)8$2cCbJ-fbXY;IaW9gn{nHqJh`{qEy`epy!+PR2MS9XBk<pO0O2mu10b>
zvbl|sp3T+X%>c$%iC5FQvQ0c~^M>>QrYdPOWCpd(T-pkGc@A0s2UXH`$PRk=M#ii_
zL#fh92EZ6Uj&ZU)&QYJB2$K}x1RI)inqMbRl6c(cGOi#;ipqAC$mO6skrHGX*N8k0
zDiCSRoxyd^md*;JC=z*D=STx9geFZ<tP)u)x*sJXo26~MMbyGFWmH%~4PSyMRn{fG
zQmb>VyOX!@#N;Xc)#R-?K5w&F_3`+Iop`|K4{Xol)O|$M42vf+wUT<xiLB!WcXcZ^
bZW5_a;1-|v(BR3>`Zjm<`v4!|6SV&ezWLMx

diff --git a/04.系统编码/03.radar-resolver/radar-core/target/maven-archiver/pom.properties b/04.系统编码/03.radar-resolver/radar-core/target/maven-archiver/pom.properties
index b66d66c..153707c 100644
--- a/04.系统编码/03.radar-resolver/radar-core/target/maven-archiver/pom.properties
+++ b/04.系统编码/03.radar-resolver/radar-core/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
 #Generated by Maven
-#Fri Mar 18 15:26:32 CST 2022
+#Fri Mar 18 17:07:47 CST 2022
 groupId=com.xiaowuler
 artifactId=radar-core
 version=1.0.0-SNAPSHOT
diff --git a/04.系统编码/03.radar-resolver/radar-core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/04.系统编码/03.radar-resolver/radar-core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
index 2fb11b9..5848a97 100644
--- a/04.系统编码/03.radar-resolver/radar-core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ b/04.系统编码/03.radar-resolver/radar-core/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -1,19 +1,19 @@
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\RadarBlock.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\SiteConfiguration.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\Radial.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\custom\ICustomInputStream.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\GenericHeader.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\CommonBlock.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\util\ByteUtils.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\RadialBlock.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\MomentHeader.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\resolver\RadarReader.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\enums\RadarSuffixEnum.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\RadialHeader.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\CutConfiguration.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\custom\impl\CustomRadarInputStream.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\MomentData.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\custom\impl\CustomerDataOutputStream.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\TaskConfiguration.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\exceptions\RadarReadException.java
-C:\Project\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\MomentBlock.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\exceptions\RadarReadException.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\custom\ICustomInputStream.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\custom\impl\CustomRadarInputStream.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\MomentBlock.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\util\ByteUtils.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\Radial.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\SiteConfiguration.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\CommonBlock.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\custom\impl\CustomerDataOutputStream.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\CutConfiguration.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\enums\RadarSuffixEnum.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\TaskConfiguration.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\RadarBlock.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\RadialBlock.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\RadialHeader.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\GenericHeader.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\resolver\RadarReader.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\MomentHeader.java
+E:\Projects\2021\AnhuiPublicMeteorologicalServiceDataPlatform\04.系统编码\03.radar-resolver\radar-core\src\main\java\com\xiaowuler\radar\core\weather\domain\MomentData.java
diff --git a/04.系统编码/03.radar-resolver/radar-core/target/radar-core-1.0.0-SNAPSHOT.jar b/04.系统编码/03.radar-resolver/radar-core/target/radar-core-1.0.0-SNAPSHOT.jar
index 519b6e5f1623b90025d6d52fee9d17715a29f79d..876ec62a38115b03bf825179cb9f824a21c8c636 100644
GIT binary patch
delta 4321
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

delta 3739
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
S>liSv3~f)|!4(mP<o*vSj`H*X