|
@@ -1,16 +1,12 @@
|
|
|
package org.jeecg.modules.api.imf.msg;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
-import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
-import com.google.common.base.Strings;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.jeecg.modules.admin_aircraft_position.entity.AdminAircraftPosition;
|
|
|
import org.jeecg.modules.admin_dfdl_list.entity.AdminDfdlList;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Date;
|
|
|
-import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* @author 王葆权
|
|
@@ -39,259 +35,12 @@ public class StlsImfMsg extends ImfMsgAbstract {
|
|
|
// 没有的计划
|
|
|
return;
|
|
|
}
|
|
|
- // 计划时间
|
|
|
- setStlsDate(dfdlList);
|
|
|
// 机位
|
|
|
- String CODE = getStrVal("/MSG/DFLT/STLS/STND/CODE");
|
|
|
- dfdlList.setPositionCode(CODE);
|
|
|
+ //String CODE = getStrVal("/MSG/DFLT/STLS/STND/CODE");
|
|
|
+ //dfdlList.setPositionCode(CODE);
|
|
|
+ // 计划时间
|
|
|
+ setStlsStnd(dfdlList);
|
|
|
updateAdminDfdl(dfdlList);
|
|
|
- /*if ("A".equals(dfdlList.getFlio())) {
|
|
|
- log.info("进站飞机");
|
|
|
- if (Strings.isNullOrEmpty(CODE)) {
|
|
|
- log.error("未获取到机位!(/MSG/DFLT/STLS/STND/CODE)");
|
|
|
- return;
|
|
|
- }
|
|
|
- AdminAircraftPosition codeAircraftPosition = getApByCode(CODE);
|
|
|
- if (codeAircraftPosition != null) {
|
|
|
- log.info("查询到相应的机位:{}", CODE);
|
|
|
- log.info("机位当前信息:{}", codeAircraftPosition);
|
|
|
- // 有这个机位
|
|
|
- AdminDfdlList stlsDfdlList = getAdminDfdlListService().getById(FLID);
|
|
|
- if (stlsDfdlList == null) {
|
|
|
- // 没有计划
|
|
|
- log.error("此航班【{}】,没有计划", FLID);
|
|
|
- return;
|
|
|
- }
|
|
|
- log.info("查询到计划内容:{}", stlsDfdlList);
|
|
|
- if (stlsDfdlList.getArrival() > 0) {
|
|
|
- //已经到站
|
|
|
- log.info("此航班【{}】,已经到站,判断是否出站", FLID);
|
|
|
- //判断是否出站
|
|
|
- if (stlsDfdlList.getRend() != null) {
|
|
|
- // 已经出站
|
|
|
- log.info("出站清空机位");
|
|
|
- getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
|
|
|
- return;
|
|
|
- } else {
|
|
|
- log.info("没有出站");
|
|
|
- // 没出站
|
|
|
- }
|
|
|
- }
|
|
|
- //判断是否出站 防止arrival为0但是已经出战
|
|
|
- if (stlsDfdlList.getRend() != null) {
|
|
|
- // 已经出站
|
|
|
- getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
|
|
|
- stlsDfdlList.setArrival(1);
|
|
|
- updateAdminDfdl(stlsDfdlList);
|
|
|
- log.info("计划中此航班【{}】,已经出站,{}", FLID, stlsDfdlList);
|
|
|
- return;
|
|
|
- }
|
|
|
- //标识是否交换过数据
|
|
|
- boolean isChangeFlag = false;
|
|
|
- //判断是否更换了机位
|
|
|
- LambdaQueryWrapper<AdminAircraftPosition> aircraftPositionByFlidQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
- aircraftPositionByFlidQueryWrapper.eq(AdminAircraftPosition::getFlightSole, FLID);
|
|
|
- // 通过flid 查询到的机位
|
|
|
- AdminAircraftPosition flidAircraftPosition = getAdminAircraftPositionService().getOne(aircraftPositionByFlidQueryWrapper);
|
|
|
- if (flidAircraftPosition != null) {
|
|
|
- log.info("此航班【{}】在机位表中被发现", FLID);
|
|
|
- //FLID匹配到的机位号 和 进来的机位号 不是 一个 换机位 清空原机位信息
|
|
|
- if (!flidAircraftPosition.getAircraftPositionNum().equals(CODE)) {
|
|
|
- log.info("此航班【{}】与对应机位所属数据不匹配,进行交换机位数据操作", FLID);
|
|
|
- //表中有但不是一个机位
|
|
|
- //给新匹配到的机位上附上信息
|
|
|
- //codeAircraftPosition.setAircraftNum(flidAircraftPosition.getAircraftNum());
|
|
|
- //codeAircraftPosition.setType(flidAircraftPosition.getType());
|
|
|
- //codeAircraftPosition.setDropTime(flidAircraftPosition.getDropTime());
|
|
|
- //codeAircraftPosition.setFlightNum(flidAircraftPosition.getFlightNum());
|
|
|
- //codeAircraftPosition.setFlightAfid(flidAircraftPosition.getFlightAfid());
|
|
|
- //codeAircraftPosition.setFlightSole(FLID);
|
|
|
- //清空旧的机位
|
|
|
- getAdminAircraftPositionService().dept(flidAircraftPosition.getId());
|
|
|
- //isChangeFlag = true;
|
|
|
- } else {
|
|
|
- // 是一个机位
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 判断是否已经占用机位
|
|
|
- Map map = getStlsDateMap(getXmlStr());
|
|
|
- Object rstr = map.get("RSTR");
|
|
|
-
|
|
|
- if (rstr != null) {
|
|
|
- log.info("判断flid:{}是否已经占用机位", stlsDfdlList.getFlid());
|
|
|
- // 有开始占用时间,证明到站了
|
|
|
- Object rend = map.get("REND");
|
|
|
- if (rend != null) {
|
|
|
- log.info("flid:{},有实际结束占用时间{}", stlsDfdlList.getFlid(), String.valueOf(rend).replace("null", ""));
|
|
|
- // 有结束占用机位的时间
|
|
|
- Date rendDate = strToDate(String.valueOf(rend).replace("null", ""));
|
|
|
- if (rendDate.before(now)) {
|
|
|
- log.info("flid:{},有实际结束占用时间{}, 且小于当前时间, 清空机位", stlsDfdlList.getFlid(), String.valueOf(rend).replace("null", ""));
|
|
|
- //不在占用时间范围内,结束占用机位,清空机位后续不做处理
|
|
|
- getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
|
|
|
- stlsDfdlList.setArrival(1);
|
|
|
- updateAdminDfdl(stlsDfdlList);
|
|
|
- //结束
|
|
|
- return;
|
|
|
- } else {
|
|
|
- // 在占用时间范围内,到站
|
|
|
- log.info("flid:{},有实际结束占用时间{},且大于当前时间", stlsDfdlList.getFlid(), rendDate);
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 没有结束占用时间,到站
|
|
|
- log.info("flid:{},没有实际结束占用时间,判断是否有实际开始占用时间", stlsDfdlList.getFlid());
|
|
|
- // 判断到站时间是否在当前时间之前,避免脏数据
|
|
|
- Date rstrDate = strToDate(String.valueOf(rstr).replace("null", ""));
|
|
|
- if (rstrDate != null) {
|
|
|
- log.info("flid:{},有实际开始占用时间{},应占用机位", rstrDate, stlsDfdlList.getFlid());
|
|
|
- setUsePosition(codeAircraftPosition, stlsDfdlList, isChangeFlag);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 没有实际占用时间
|
|
|
- log.info("flid:{},没有实际占用时间", stlsDfdlList.getFlid());
|
|
|
- }
|
|
|
-
|
|
|
- // 走到此处表名stls中的航班没有实际占用,矫正机位上的航班是否占用
|
|
|
- if (flidAircraftPosition == null) {
|
|
|
- log.info("此航班【{}】未在机位表中被发现,判断机位上航班【{}】是否结束占用没结束就不占用", FLID, codeAircraftPosition.getFlightSole());
|
|
|
- // 在机位表中没有找到航班对应的机位, 判断机位上航班是否结束占用
|
|
|
- if (codeAircraftPosition.getFlightSole() != null && !FLID.equals(codeAircraftPosition.getFlightSole())) {
|
|
|
- // 不是一个航班,判断谁应该在这段时间占用
|
|
|
- //机位上的航班计划
|
|
|
- AdminDfdlList codeDfdlList = getAdminDfdlListService().getById(codeAircraftPosition.getFlightSole());
|
|
|
- if (codeDfdlList != null) {
|
|
|
- log.info("机位【{}】上的航班flid:{}在计划中", CODE, codeDfdlList.getFlid());
|
|
|
- if (codeDfdlList.getArrival() > 0) {
|
|
|
- log.info("当前机位【{}】的航班到站FLID:{}", CODE, codeDfdlList.getFlid());
|
|
|
- // 已经到站, 判断是否结束占用
|
|
|
- if (isArrival(CODE, now, codeDfdlList)) {
|
|
|
- // 需要占用
|
|
|
- if ("空置".equals(codeAircraftPosition.getType())) {
|
|
|
- // 改为占用
|
|
|
- log.info("空置状态,改为占用");
|
|
|
- setUsePosition(codeAircraftPosition, codeDfdlList, isChangeFlag);
|
|
|
- }
|
|
|
- return;
|
|
|
- } else {
|
|
|
- //不需要占用,先置空,走到此处表明上一条数据没到站,新来的数据也没到站(但是计划里面设置到站了数据异常!),暂时不反回先把新来的数据flid放到机位上
|
|
|
- if ("使用中".equals(codeAircraftPosition.getType())) {
|
|
|
- // 改为空置
|
|
|
- log.info("使用状态改为空置");
|
|
|
- getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- log.info("当前机位【{}】的航班未到站FLID:{},状态:{}", CODE, codeDfdlList.getFlid(), codeAircraftPosition.getType());
|
|
|
- // 机位上的数据未到站
|
|
|
- // 机位上的航班不需要占用机位就返回
|
|
|
- if (!isArrival(CODE, now, codeDfdlList)) {
|
|
|
- log.info("不需要占用");
|
|
|
- if ("使用中".equals(codeAircraftPosition.getType())) {
|
|
|
- log.info("使用状态改为空置");
|
|
|
- getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
|
|
|
- // 更新机位对应的航班
|
|
|
- AdminAircraftPosition adminAircraftPosition = new AdminAircraftPosition();
|
|
|
- adminAircraftPosition.setId(codeAircraftPosition.getId());
|
|
|
- adminAircraftPosition.setFlightSole(FLID);
|
|
|
- getAdminAircraftPositionService().updateById(adminAircraftPosition);
|
|
|
- }
|
|
|
- return;
|
|
|
- } else {
|
|
|
- log.info("需要占用");
|
|
|
- if ("空置".equals(codeAircraftPosition.getType())) {
|
|
|
- log.info("空置状态,改为占用");
|
|
|
- // 改为占用
|
|
|
- setUsePosition(codeAircraftPosition, codeDfdlList, isChangeFlag);
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- log.info("机位【{}】上的航班flid:{}不在计划中", CODE, codeAircraftPosition.getFlightSole());
|
|
|
- // 没有此计划
|
|
|
- log.error("判断机位冲突时发现此航班【{}】,没有计划", flidAircraftPosition.getFlightSole());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 更新数据
|
|
|
- // 更新机位对应的航班
|
|
|
- codeAircraftPosition.setFlightSole(FLID);
|
|
|
- getAdminAircraftPositionService().updateById(codeAircraftPosition);
|
|
|
- // 更新计划
|
|
|
- updateAdminDfdl(stlsDfdlList);
|
|
|
- log.info("最终更新计划数据:{}", stlsDfdlList);
|
|
|
- log.info("最终更新机位数据:{}", codeAircraftPosition);
|
|
|
- } else {
|
|
|
- log.error("未找到对应机位【{}】", CODE);
|
|
|
- }
|
|
|
- } else if ("D".equals(dfdlList.getFlio())) {
|
|
|
- // 出站飞机
|
|
|
- // 判断是否已经离开机位
|
|
|
- log.info("是出站飞机");
|
|
|
- Map map = null;
|
|
|
- try {
|
|
|
- map = getStlsDateMap(getXmlStr());
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("此出站消息没有时间标签");
|
|
|
- e.printStackTrace();
|
|
|
- return;
|
|
|
- }
|
|
|
- if (map == null || map.isEmpty()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- Object rend = map.get("REND");
|
|
|
- if (rend == null) {
|
|
|
- log.info("没有实际结束占用时间,判断是否是始发站飞机");
|
|
|
- // 没有实际结束占用时间
|
|
|
- Object rstr = map.get("RSTR");
|
|
|
- if (rstr == null) {
|
|
|
- // 没有实际开始占用时间,没占用
|
|
|
- log.info("没有实际开始占用时间,不做操作");
|
|
|
- } else {
|
|
|
- log.info("有实际开始占用时间,判断是否有Afid");
|
|
|
- // 有实际开始占用时间证明占用了
|
|
|
- if (dfdlList.getAfid() == null) {
|
|
|
- log.info("没有Afid,是始发站飞机");
|
|
|
- // 没有进站的关联id,证明是始发站id
|
|
|
- AdminAircraftPosition codeAircraftPosition = getApByCode(CODE);
|
|
|
- if (codeAircraftPosition != null) {
|
|
|
- log.info("有对应机位,占用机位:{}",CODE);
|
|
|
- // 占用机位
|
|
|
- setUsePosition(codeAircraftPosition, dfdlList, false);
|
|
|
- } else {
|
|
|
- log.info("未找到机位:{}",CODE);
|
|
|
- }
|
|
|
- } else {
|
|
|
- log.info("有Afid:{}", dfdlList.getAfid());
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- log.info("有实际结束占用时间");
|
|
|
- // 有实际结束占用时间
|
|
|
- if (dfdlList.getAfid() == null) {
|
|
|
- // 始发站飞机
|
|
|
- Date rendDate = strToDate(String.valueOf(rend).replace("null", ""));
|
|
|
- if (rendDate != null && rendDate.before(now)) {
|
|
|
- // 离站了
|
|
|
- DepeImfMsg depeImfMsg = new DepeImfMsg(getXmlStr());
|
|
|
- depeImfMsg.depeHandle(dfdlList.getFlid(), rendDate);
|
|
|
- }
|
|
|
- } else {
|
|
|
- Date rendDate = strToDate(String.valueOf(rend).replace("null", ""));
|
|
|
- if (rendDate != null && rendDate.before(now)) {
|
|
|
- // 离站了
|
|
|
- DepeImfMsg depeImfMsg = new DepeImfMsg(getXmlStr());
|
|
|
- depeImfMsg.depeHandleD(String.valueOf(dfdlList.getFlid()).replace("null", ""), rendDate);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }*/
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -320,7 +69,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
|
|
|
// 到站
|
|
|
codeAircraftPosition.setType("使用中");
|
|
|
dfdlList.setArrival(1);
|
|
|
- setStlsDate(dfdlList);
|
|
|
+ setStlsStnd(dfdlList);
|
|
|
if (!isChangeFlag) {
|
|
|
log.info("flid:{},copy", dfdlList.getFlid());
|
|
|
adminDfdlCopyToAirPosition(dfdlList, codeAircraftPosition);
|
|
@@ -376,37 +125,9 @@ public class StlsImfMsg extends ImfMsgAbstract {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取计划
|
|
|
- *
|
|
|
- * @param FLID
|
|
|
- * @return
|
|
|
- */
|
|
|
- private 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);
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 缓存没有从表里面取
|
|
|
- dfdlList = getAdminDfdlListService().getById(FLID);
|
|
|
- try {
|
|
|
- getRedisUtil().set(ImfMsgType.DFDL.getRedisKey() + FLID, objectMapper.writeValueAsString(dfdlList));
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
- return dfdlList;
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
private void updateAdminDfdlTime(AdminDfdlList dfdlList) {
|
|
|
- setStlsDate(dfdlList);
|
|
|
+ setStlsStnd(dfdlList);
|
|
|
updateAdminDfdl(dfdlList);
|
|
|
}
|
|
|
}
|