|
@@ -1,5 +1,7 @@
|
|
|
package org.jeecg.modules.api.imf.msg;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
|
import com.fasterxml.jackson.databind.MapperFeature;
|
|
@@ -33,6 +35,7 @@ import java.io.StringReader;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
@@ -83,6 +86,9 @@ public abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
|
|
|
// 到达时间的正则
|
|
|
public static final String STND_REGEX = "<STND>(.*?)</STND>";
|
|
|
|
|
|
+ // 到达时间的正则
|
|
|
+ public static final String AIRL_REGEX = "<ARPT>(.*?)</ARPT>";
|
|
|
+
|
|
|
//xml字符串
|
|
|
private String xmlStr;
|
|
|
|
|
@@ -110,12 +116,6 @@ public abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
|
|
|
@Override
|
|
|
public synchronized void process() {
|
|
|
log.info("【{}】开始处理", getTypeDescription());
|
|
|
- if (msgHandlerEvent) {
|
|
|
- //转发消息到消息总栈测试, 避免本地测试消费消息
|
|
|
- BaseMap params = new BaseMap();
|
|
|
- params.put("xml", getXmlStr());
|
|
|
- rabbitMqClient.sendMessage("Test3HandlerEvent", params);
|
|
|
- }
|
|
|
handle();
|
|
|
log.info("【{}】结束处理", getTypeDescription());
|
|
|
}
|
|
@@ -239,6 +239,24 @@ public abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 获取DFDL计划中AIRL标签中的多个ARPT标签的json
|
|
|
+ *
|
|
|
+ * @param str
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<String> regAirlArpt(String str) {
|
|
|
+ Pattern pattern = Pattern.compile(AIRL_REGEX);
|
|
|
+ Matcher matcher = pattern.matcher(str);
|
|
|
+ int matcher_start = 0;
|
|
|
+ Vector<String> res = new Vector<>();
|
|
|
+ while (matcher.find(matcher_start)) {
|
|
|
+ res.add(ConversionUtil.xmlToJson(matcher.group()));
|
|
|
+ matcher_start = matcher.end();
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取类型描述
|
|
|
*
|
|
|
* @return
|
|
@@ -311,7 +329,7 @@ public abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
|
|
|
* @param str
|
|
|
* @return
|
|
|
*/
|
|
|
- public Date strToDate(String str) {
|
|
|
+ public static Date strToDate(String str) {
|
|
|
|
|
|
if (!Strings.isNullOrEmpty(str)) {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
@@ -494,24 +512,103 @@ public abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
|
|
|
* @return
|
|
|
*/
|
|
|
protected AdminDfdlList getAdminDfdl(String FLID) {
|
|
|
- AdminDfdlList dfdlList;
|
|
|
-/* ObjectMapper objectMapper = getObjectMapper();
|
|
|
- if (getRedisUtil().hasKey(ImfMsgType.DFDL.getRedisKey() + FLID)) {
|
|
|
- String dfdlJson = (String) getRedisUtil().get(ImfMsgType.DFDL.getRedisKey() + FLID);
|
|
|
- try {
|
|
|
- dfdlList = objectMapper.readValue(dfdlJson, AdminDfdlList.class);
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
+ AdminDfdlList dfdlList = getAdminDfdlListService().getById(FLID);
|
|
|
+ return dfdlList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取flid
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getFlid() {
|
|
|
+ return getStrVal("/MSG/DFLT/FLID");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置LambdaUpdateWrapper的时间,仅限时间类型 yyyyMMddHHmmss
|
|
|
+ * @param updateWrapper LambdaUpdateWrapper
|
|
|
+ * @param function 列方法
|
|
|
+ * @param timeStr 时间字符串
|
|
|
+ */
|
|
|
+ public static void setLambdaUpdateWrapperAsTime(LambdaUpdateWrapper<AdminDfdlList> updateWrapper, SFunction<AdminDfdlList, ?> function, String timeStr) {
|
|
|
+ if (Strings.isNullOrEmpty(timeStr)) {
|
|
|
+ updateWrapper.set(function, null);
|
|
|
+ } else {
|
|
|
+ updateWrapper.set(function, strToDate(timeStr));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置起飞时间
|
|
|
+ * @param objectMapper
|
|
|
+ * @param nodeStr
|
|
|
+ * @param adminDfdlList
|
|
|
+ */
|
|
|
+ protected boolean setAirlArpt(ObjectMapper objectMapper, String nodeStr, AdminDfdlList adminDfdlList) {
|
|
|
+ boolean updateFlag = false;
|
|
|
+ List<String> arptList = regAirlArpt(nodeStr);
|
|
|
+ if (arptList == null || arptList.isEmpty()) {
|
|
|
+ //为空不设置
|
|
|
+ return updateFlag;
|
|
|
+ }
|
|
|
+ ArrayList<Map> arptMaps = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ for (String arpt : arptList) {
|
|
|
+ arptMaps.add(objectMapper.readValue(arpt, Map.class));
|
|
|
}
|
|
|
- } else {*/
|
|
|
- // 缓存没有从表里面取
|
|
|
- dfdlList = getAdminDfdlListService().getById(FLID);
|
|
|
-/* try {
|
|
|
- getRedisUtil().set(ImfMsgType.DFDL.getRedisKey() + FLID, objectMapper.writeValueAsString(dfdlList));
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ log.error("转换ARPT标签时发生错误");
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ Map arptMap = null;
|
|
|
+ if ("A".equals(adminDfdlList.getFlio())) {
|
|
|
+ // 进港取最后一个
|
|
|
+ if (!arptMaps.isEmpty()) {
|
|
|
+ arptMap = arptMaps.get(arptMaps.size() - 1);
|
|
|
}
|
|
|
- }*/
|
|
|
- return dfdlList;
|
|
|
+ } else if ("D".equals(adminDfdlList.getFlio())) {
|
|
|
+ // 出港取第一个
|
|
|
+ if (!arptMaps.isEmpty()) {
|
|
|
+ arptMap = arptMaps.get(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 计划起飞时间
|
|
|
+ Object fptt = arptMap.get("FPTT");
|
|
|
+ if (fptt != null) {
|
|
|
+ adminDfdlList.setFptt(strToDate(String.valueOf(fptt).replace("null", "")));
|
|
|
+ updateFlag = true;
|
|
|
+ }
|
|
|
+ // 预计起飞时间
|
|
|
+ Object fett = arptMap.get("FETT");
|
|
|
+ if (fett != null) {
|
|
|
+ adminDfdlList.setFett(strToDate(String.valueOf(fett).replace("null", "")));
|
|
|
+ updateFlag = true;
|
|
|
+ }
|
|
|
+ // 实际起飞时间
|
|
|
+ Object frtt = arptMap.get("FRTT");
|
|
|
+ if (frtt != null) {
|
|
|
+ adminDfdlList.setEstr(strToDate(String.valueOf(frtt).replace("null", "")));
|
|
|
+ updateFlag = true;
|
|
|
+ }
|
|
|
+ // 计划降落时间
|
|
|
+ Object fplt = arptMap.get("FPLT");
|
|
|
+ if (fplt != null) {
|
|
|
+ adminDfdlList.setEstr(strToDate(String.valueOf(fplt).replace("null", "")));
|
|
|
+ updateFlag = true;
|
|
|
+ }
|
|
|
+ // 预计到达时间
|
|
|
+ Object felt = arptMap.get("FELT");
|
|
|
+ if (felt != null) {
|
|
|
+ adminDfdlList.setEstr(strToDate(String.valueOf(felt).replace("null", "")));
|
|
|
+ updateFlag = true;
|
|
|
+ }
|
|
|
+ // 实际到达时间
|
|
|
+ Object frlt = arptMap.get("FRLT");
|
|
|
+ if (frlt != null) {
|
|
|
+ adminDfdlList.setEstr(strToDate(String.valueOf(frlt).replace("null", "")));
|
|
|
+ updateFlag = true;
|
|
|
+ }
|
|
|
+ return updateFlag;
|
|
|
}
|
|
|
}
|