diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecord.java b/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecord.java index f0eabc31..e2609b88 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecord.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/FwdRecord.java @@ -15,20 +15,17 @@ import java.time.LocalDateTime; @Data @TableName(value = "fwdrecords") public class FwdRecord { - public static final short STATE_READY = 1; - public static final short STATE_UPLOADING = 2; - public static final short STATE_UPLOAD_DONE = 3; - public static final short STATE_FWD_DONE = 0; - public static final short STATE_FWD_FAILED = -1; + public static final short RESULT_OK = 1; + public static final short RESULT_FAILED = 0; @TableId(value = "id", type = IdType.AUTO) Long id; Integer tenantid; String deviceid; - String project_id; + String projectid; Short devicenum; - LocalDateTime starttime; - LocalDateTime endtime; - Short state; + LocalDateTime createtime; + LocalDateTime recordtime; + Short result; String fwd_group_id; } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java index fa804a9e..198feeab 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java @@ -37,6 +37,7 @@ public class GnssDevice { private Integer devicetype; private String tenantname; private String project_id; + private String project2_id; private Integer group_id = 1; //组参数,缓存自动下发 private Integer calc_group_id = 1; private String fwd_group_id; diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecord.java b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecord.java new file mode 100644 index 00000000..556472ee --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecord.java @@ -0,0 +1,28 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * GNSS收发统计消息,每个工作周期结束的时候统计一次 + * + * @author LiGang + */ +@Data +@TableName(value = "resendrecords") +public class ResendRecord { + @TableId(value = "id", type = IdType.AUTO) + Long id; + Integer tenantid; + String deviceid; + String projectid; + LocalDateTime createtime; + LocalDateTime starttime; + LocalDateTime endtime; + String fwd_group_id; + +} diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecordMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecordMapper.java new file mode 100644 index 00000000..82b4b59f --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecordMapper.java @@ -0,0 +1,8 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ResendRecordMapper extends BaseMapper { +} diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java index f738e05b..e7fa292f 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java @@ -11,14 +11,16 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; public class Forwarder { - String name; + String fwdGroupId; String description; Integer tenantId; boolean useFwdId; int totalSendNum = 0; - boolean fwdFailed = false; + + int fwdCycleMinutes = 30; static boolean isFwdTableInit = false; @Autowired @@ -29,28 +31,39 @@ public class Forwarder { @Autowired private FwdRecordMapper fwdRecordsMapper; + @Autowired + private ResendRecordMapper resendRecordMapper; @Autowired GnssGroupFwdMapper fwdMapper; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - void init(String name, String desc, Integer tenantId, boolean useFwdId){ - this.name = name; + /*** + * + * @param fwdGroupId,推送组名 + * @param desc,推送组描述 + * @param tenantId,租户Id + * @param useFwdId,是否使用转发名,如果不使用,则用deviceId + * @param cycle,发送周期 + */ + void init(String fwdGroupId, String desc, Integer tenantId, boolean useFwdId, int cycle){ + this.fwdGroupId = fwdGroupId; this.description = desc; this.tenantId = tenantId; this.useFwdId = useFwdId; + this.fwdCycleMinutes = cycle; if(!isFwdTableInit){ isFwdTableInit = true; fwdMapper.delete(null); } QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("name",name); + queryWrapper.eq("name",fwdGroupId); GnssGroupFwd gnssGroupFwd = fwdMapper.selectOne(queryWrapper); if(gnssGroupFwd == null){ gnssGroupFwd = new GnssGroupFwd(); - gnssGroupFwd.setName(name); + gnssGroupFwd.setName(fwdGroupId); gnssGroupFwd.setDescription(description); gnssGroupFwd.setDevice_num(0); fwdMapper.insert(gnssGroupFwd); @@ -62,14 +75,13 @@ public class Forwarder { } /*** - * 推送指定推送组、设备ID、时间的GNSS记录,查找指定时间前半小时的有效数据推送 - * @param fwdGroupId:推送组 - * @param deviceId:设备ID,如果没有指定,则推送全部 + * 推送指定企业、设备ID、时间的GNSS记录,查找指定时间前cycle分钟的有效数据推送 * @param sendTime:要推送的记录的时间 + * @param deviceId:设备ID,如果没有指定,则推送全部 */ - void forwardGnssRecords(String fwdGroupId, String deviceId, LocalDateTime sendTime) { + boolean forwardGnssRecords(LocalDateTime sendTime, String deviceId) { String endTime = sendTime.format(formatter); - String beginTime = sendTime.minusMinutes(30).format(formatter); + String beginTime = sendTime.minusMinutes(fwdCycleMinutes).format(formatter); // 查找属于指定推送组的设备列表 QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -98,6 +110,13 @@ public class Forwarder { for(GnssDevice device:gnssDeviceList){ if(device.getOpmode() != GnssDevice.OP_MODE_USE) continue; String projectId = device.getProject_id(); + if(device.getProject2_id()!=null) { + // 推送组2用项目2的id号 + String fwdGroupId2 = device.getFwd_group_id2(); + if (fwdGroupId2 != null && fwdGroupId2.equals(fwdGroupId)) { + projectId = device.getProject2_id(); + } + } if(projectId == null) continue; List recordsToSend = projects.get(projectId); @@ -126,8 +145,7 @@ public class Forwarder { // 按项目打包推送 totalSendNum = 0; - fwdFailed = false; - List fwdRecordList = new ArrayList<>(); + boolean fwdResult = true; for (Map.Entry> entry: projects.entrySet()){ String projectId = entry.getKey(); List records = entry.getValue(); @@ -135,45 +153,70 @@ public class Forwarder { int sendNum = send(projectId, records, sendTime); + // 记录推送 FwdRecord fwdRecord = new FwdRecord(); - fwdRecord.setProject_id(projectId); + fwdRecord.setProjectid(projectId); fwdRecord.setTenantid(tenantId); fwdRecord.setDevicenum((short) records.size()); - fwdRecord.setStarttime(sendTime); - fwdRecord.setEndtime(sendTime); + fwdRecord.setRecordtime(sendTime); + fwdRecord.setCreatetime(LocalDateTime.now()); fwdRecord.setFwd_group_id(fwdGroupId); - if(sendNum > 0) { totalSendNum += sendNum; - // 记录推送 - fwdRecord.setState(FwdRecord.STATE_FWD_DONE); + fwdRecord.setResult(FwdRecord.RESULT_OK); } else{ - fwdRecord.setState(FwdRecord.STATE_FWD_FAILED); - fwdFailed = true; + fwdResult = false; + fwdRecord.setResult(FwdRecord.RESULT_FAILED); + // 新增重发记录 + ResendRecord resendRecord = new ResendRecord(); + resendRecord.setProjectid(projectId); + resendRecord.setTenantid(tenantId); + resendRecord.setCreatetime(LocalDateTime.now()); + resendRecord.setStarttime(sendTime); + resendRecord.setEndtime(sendTime.plusMinutes(10)); + resendRecord.setFwd_group_id(fwdGroupId); + resendRecordMapper.insert(resendRecord); } - fwdRecordList.add(fwdRecord); + fwdRecordsMapper.insert(fwdRecord); } - // 更新推送信息 - ThreadManager.getFixedThreadPool().submit(() -> { - for(FwdRecord record:fwdRecordList){ - fwdRecordsMapper.insert(record); - } - if(totalSendNum>0) updateFwd(totalSendNum, true); - else if(fwdFailed) updateFwd(totalSendNum, false); - }); + // 更新推送记录 + if(totalSendNum>0) updateFwd(totalSendNum, true); + else if(!fwdResult) updateFwd(totalSendNum, false); + + return fwdResult; } - void forwardCurrentGnss(String fwdGroupId) { - forwardGnssRecords(fwdGroupId,null,LocalDateTime.now()); + void forwardCurrentGnss() { + if(forwardGnssRecords(LocalDateTime.now(),null)) { + // 推送失败记录、补发记录 + ThreadManager.getScheduledThreadPool().schedule(() -> { + forwardHistoryGnss(); + },300, TimeUnit.SECONDS); + } } - void forwardBatchGnssRecords(String fwdGroupId, String deviceId, LocalDateTime beginTime, LocalDateTime endTime) { + void forwardHistoryGnss() { + // 1.从转发记录表里检索待补传记录时间表,含设备Id,时间段 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("fwd_group_id",fwdGroupId); + List resendRecordsList = resendRecordMapper.selectList(queryWrapper); + // 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传 + List ids = new ArrayList<>(); + for(ResendRecord record:resendRecordsList){ + ids.add(record.getId()); + forwardBatchGnssRecords( + record.getStarttime(), record.getEndtime(), record.getDeviceid()); + } + resendRecordMapper.deleteBatchIds(ids); + } + + void forwardBatchGnssRecords(LocalDateTime beginTime, LocalDateTime endTime, String deviceId) { LocalDateTime sendTime = beginTime; while(sendTime.isBefore(endTime)){ - forwardGnssRecords(fwdGroupId,deviceId,sendTime); - sendTime = sendTime.plusMinutes(30); + forwardGnssRecords(sendTime,deviceId); + sendTime = sendTime.plusMinutes(fwdCycleMinutes); try { Thread.sleep(500); } @@ -183,28 +226,13 @@ public class Forwarder { } } - void forwardHistoryGnss(String fwdGroupId) { - // 1.从转发记录表里检索待补传记录时间表,含设备Id,时间段 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("fwd_group_id",fwdGroupId); - queryWrapper.eq("state",FwdRecord.STATE_UPLOAD_DONE); - List fwdRecordsList = fwdRecordsMapper.selectList(queryWrapper); - // 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传 - for(FwdRecord fwdRecord:fwdRecordsList){ - forwardBatchGnssRecords(fwdRecord.getFwd_group_id(), fwdRecord.getDeviceid(), - fwdRecord.getStarttime(), fwdRecord.getEndtime()); - fwdRecord.setState(FwdRecord.STATE_FWD_DONE); - fwdRecordsMapper.updateById(fwdRecord); - } - } - int send(String projectId, List records, LocalDateTime sentTime) { return 0; } void updateFwd(int fwd_num, boolean isFwdOK){ QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("name",name); + queryWrapper.eq("name",fwdGroupId); GnssGroupFwd gnssGroupFwd = fwdMapper.selectOne(queryWrapper); if(gnssGroupFwd != null){ gnssGroupFwd.setFwd_device_num(fwd_num); diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java index 80b42080..95130a4f 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java @@ -38,7 +38,7 @@ public class GXXfzForwarder extends Forwarder{ @PostConstruct void registerMe(){ - init(FORWARDER_NAME, "TCP "+host+":"+port,1,false); + init(FORWARDER_NAME, "TCP "+host+":"+port,1,false,30); xfzTcpClient = new TCPClient(); xfzTcpClient.init(host, port); xfzTcpClient.start(); @@ -50,13 +50,7 @@ public class GXXfzForwarder extends Forwarder{ @Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次 private void forwardGnss() { logger.info("xfz forwardGnss"); - forwardCurrentGnss(FORWARDER_NAME); - } - - @Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次 - //@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次 - private void forwardHistoryGnss() { - forwardHistoryGnss(FORWARDER_NAME); + forwardCurrentGnss(); } @Override diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java index e0175679..5ee26a6c 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYForwarder.java @@ -34,7 +34,7 @@ public class GZYForwarder extends Forwarder{ @PostConstruct void registerMe(){ - init(FORWARDER_NAME, "UDP "+host+":"+port,2,true); + init(FORWARDER_NAME, "UDP "+host+":"+port,2,true,30); udpClient = new UDPClient(); udpClient.init(host, port); } @@ -44,13 +44,7 @@ public class GZYForwarder extends Forwarder{ @Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次 private void forwardGnss() { logger.info("gzy UDP forwardGnss"); - forwardCurrentGnss(FORWARDER_NAME); - } - - @Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次 - //@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次 - private void forwardHistoryGnss() { - forwardHistoryGnss(FORWARDER_NAME); + forwardCurrentGnss(); } @Override diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java index 865d321d..0d337803 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZYMQTTForwarder.java @@ -42,7 +42,7 @@ public class GZYMQTTForwarder extends Forwarder { @PostConstruct void registerMe() throws MqttException { - init(FORWARDER_NAME, "MQTT "+brokerUrl,2,true); + init(FORWARDER_NAME, "MQTT "+brokerUrl,2,true,30); mqttClient = new MQTTClient(brokerUrl, username, password,clientid,topic); mqttClient.connect(); } @@ -53,13 +53,7 @@ public class GZYMQTTForwarder extends Forwarder { @Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次 private void forwardGnss() { logger.info("gzy mqtt forwardGnss"); - forwardCurrentGnss(FORWARDER_NAME); - } - - @Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次 - //@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次 - private void forwardHistoryGnss() { - forwardHistoryGnss(FORWARDER_NAME); + forwardCurrentGnss(); } @Override diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java index 3de716e0..d3ff84df 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/KingMaForwarder.java @@ -44,7 +44,7 @@ public class KingMaForwarder extends Forwarder{ @PostConstruct void registerMe(){ - init(FORWARDER_NAME, data_host,3,true); + init(FORWARDER_NAME, data_host,3,true,60); } /** * 每半小时转发GNSS解算结果 @@ -52,13 +52,7 @@ public class KingMaForwarder extends Forwarder{ @Scheduled(cron = "0 0 0/1 * * ?") // 每小时执行一次 private void forwardGnss() { logger.info("kingma forwardGnss"); - forwardCurrentGnss(FORWARDER_NAME); - } - - @Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次 - //@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次 - private void forwardHistoryGnss() { - forwardHistoryGnss(FORWARDER_NAME); + forwardCurrentGnss(); } boolean updateToken() throws Exception{ diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java index a6235229..a623b6dc 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/ZNYForwarder.java @@ -33,7 +33,7 @@ public class ZNYForwarder extends Forwarder{ @PostConstruct void registerMe(){ - init(FORWARDER_NAME, data_host,4,true); + init(FORWARDER_NAME, data_host,4,true,30); } /** * 每半小时转发GNSS解算结果 @@ -41,13 +41,7 @@ public class ZNYForwarder extends Forwarder{ @Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次 private void forwardGnss() { logger.info("zny forwardGnss"); - forwardCurrentGnss(FORWARDER_NAME); - } - - @Scheduled(cron = "0 40 * * * ?") // 每小时的40分钟执行一次 - //@Scheduled(cron = "0 0/20 * * * ?") // 每20分钟执行一次 - private void forwardHistoryGnss() { - forwardHistoryGnss(FORWARDER_NAME); + forwardCurrentGnss(); } @Override diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java index 3db35619..75cdb630 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java @@ -24,14 +24,14 @@ public class MultiLineGNSSCalcService { } private static final Logger logger = LoggerFactory.getLogger(SingleLineGNSSCalcService.class); private static final Map deviceMap = new ConcurrentHashMap<>(); - private static final Map fwdRecordMap = new ConcurrentHashMap<>(); + private static final Map fwdRecordMap = new ConcurrentHashMap<>(); @Autowired SingleLineGNSSCalcService calcService; @Autowired GNSSCalcFilterService gnssCalcFilterService; @Autowired - private FwdRecordMapper fwdRecordMapper; + private ResendRecordMapper resendRecordMapper; @Autowired private BeidouClient beidouClient; @Autowired @@ -98,11 +98,10 @@ public class MultiLineGNSSCalcService { // 重算最近的 lastDate = gnssCalcFilterService.updateRpos(deviceId,lastDate); // 记录转发表更新为upload done - FwdRecord fwdRecord = fwdRecordMap.get(deviceId); + ResendRecord fwdRecord = fwdRecordMap.get(deviceId); if(fwdRecord != null){ fwdRecord.setEndtime(lastDate); - fwdRecord.setState(FwdRecord.STATE_UPLOAD_DONE); - fwdRecordMapper.insert(fwdRecord); + resendRecordMapper.insert(fwdRecord); fwdRecordMap.remove(deviceId); } // 移除记录、发完成指示、更新设备状态 @@ -122,13 +121,12 @@ public class MultiLineGNSSCalcService { d342Message.getFwdId().length() ==0 || d342Message.getFwdId().equals(GnssGroupFwd.FWD_TYPE_NONE)) return; - FwdRecord fwdRecord = new FwdRecord(); + ResendRecord fwdRecord = new ResendRecord(); fwdRecord.setDeviceid(deviceId); fwdRecord.setTenantid(d342Message.getTenantId()); - fwdRecord.setProject_id(d342Message.getProjectId()); - fwdRecord.setState(FwdRecord.STATE_UPLOADING); + fwdRecord.setProjectid(d342Message.getProjectId()); + fwdRecord.setCreatetime(LocalDateTime.now()); fwdRecord.setStarttime(d342Message.getOriginalTime()); - fwdRecord.setDevicenum((short) 1); fwdRecord.setFwd_group_id(d342Message.getFwdId()); fwdRecordMap.put(deviceId, fwdRecord); } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java index f42a6ff8..4b4da321 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java @@ -99,6 +99,7 @@ public class GnssDeviceController extends BasicController{ if(tenantId != null && tenantId != Tenant.SAAS_PROVIDER_ID) { queryWrapper.eq("tenantid", tenantId); } + queryWrapper.orderByAsc("deviceid"); // 条件查询 if(searchParams != null) { diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssFwdController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssFwdController.java index b0b0d037..fb122990 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssFwdController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssFwdController.java @@ -1,11 +1,10 @@ package com.imdroid.beidou.controller; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.imdroid.beidou.auth.SessionUtils; -import com.imdroid.beidou.entity.Tenant; +import com.imdroid.beidou.service.CommonExcelService; import com.imdroid.secapi.dto.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -13,9 +12,10 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpSession; +import java.util.List; @Controller -public class GnssFwdController extends BasicController{ +public class GnssFwdController extends BasicController implements CommonExcelService { @Autowired GnssGroupFwdMapper gnssGroupFwdMapper; @Autowired @@ -31,10 +31,14 @@ public class GnssFwdController extends BasicController{ @RequestMapping("/page/fwd_records") public String fwdRecords(Model m, HttpSession session) { initModel(m, session); + //以下用于下拉框数据 + List gnssGroupFwds = gnssGroupFwdMapper.selectList(null); + m.addAttribute("gnss_group_fwd_list", gnssGroupFwds); + return "/page/fwd_records"; } - /********* 基本参数组 *********/ + /********* 推送数据 *********/ @RequestMapping("/fwd/agents") @ResponseBody public JSONObject listAgents(int page, int limit) { @@ -51,21 +55,27 @@ public class GnssFwdController extends BasicController{ @RequestMapping("/fwd/records") @ResponseBody - public JSONObject listRecords(HttpSession session, int page, int limit) { - Page pageable = new Page<>(page, limit); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.orderByDesc("starttime"); - Integer tenantId = (Integer) session.getAttribute(SessionUtils.SESSION_TENANT_ID); - if (tenantId != null && tenantId != Tenant.SAAS_PROVIDER_ID) { - queryWrapper.eq("tenantid", tenantId); - } - IPage cs = fwdRecordMapper.selectPage(pageable, queryWrapper); + public JSONObject listRecords(HttpSession session, Integer page, Integer limit, String searchParams) { + return this.pageList(session, page, limit, searchParams); + } - JSONObject jsonObject = new JSONObject(); - jsonObject.put("code", 0); - jsonObject.put("msg", ""); - jsonObject.put("count", cs.getTotal()); - jsonObject.put("data", cs.getRecords()); - return jsonObject; + /** + * 获取实体类的class + * + * @return 实体类的class + */ + @Override + public Class getEntityClass() { + return FwdRecord.class; + } + + /** + * 获取实体类对应的mybatis mapper + * + * @return 实体类对应的mybatis mapper + */ + @Override + public BaseMapper getMapper() { + return fwdRecordMapper; } } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssResendController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssResendController.java new file mode 100644 index 00000000..7074cb9a --- /dev/null +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssResendController.java @@ -0,0 +1,60 @@ +package com.imdroid.beidou.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.imdroid.beidou.service.CommonExcelService; +import com.imdroid.secapi.dto.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpSession; +import java.util.List; + +@Controller +public class GnssResendController extends BasicController implements CommonExcelService { + @Autowired + GnssGroupFwdMapper gnssGroupFwdMapper; + @Autowired + ResendRecordMapper resendRecordMapper; + + /********* 推送页面 *********/ + @RequestMapping("/page/resend_records") + public String fwdRecords(Model m, HttpSession session) { + initModel(m, session); + //以下用于下拉框数据 + List gnssGroupFwds = gnssGroupFwdMapper.selectList(null); + m.addAttribute("gnss_group_fwd_list", gnssGroupFwds); + + return "/page/resend_records"; + } + + /********* 推送数据 *********/ + @RequestMapping("/fwd/resend_records") + @ResponseBody + public JSONObject listRecords(HttpSession session, Integer page, Integer limit, String searchParams) { + return this.pageList(session, page, limit, searchParams); + } + + /** + * 获取实体类的class + * + * @return 实体类的class + */ + @Override + public Class getEntityClass() { + return ResendRecord.class; + } + + /** + * 获取实体类对应的mybatis mapper + * + * @return 实体类对应的mybatis mapper + */ + @Override + public BaseMapper getMapper() { + return resendRecordMapper; + } +} diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index c2fd2a40..1f80f633 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -49,6 +49,7 @@ CREATE TABLE IF NOT EXISTS `gnssdevices` ( `devicetype` smallint DEFAULT 0, `tenantname` varchar(100) NOT NULL, `project_id` varchar(64) DEFAULT NULL COMMENT '项目id', + `project2_id` varchar(64) DEFAULT NULL COMMENT '项目2id', `group_id` int DEFAULT 1, `calc_group_id` int DEFAULT 1, `fwd_group_id` varchar(64) DEFAULT NULL, @@ -246,16 +247,27 @@ CREATE TABLE IF NOT EXISTS `warningcfg` ( CREATE TABLE IF NOT EXISTS `fwdrecords` ( `id` bigint AUTO_INCREMENT, `tenantid` int NOT NULL, - `project_id` varchar(64) DEFAULT NULL COMMENT '项目id', + `projectid` varchar(64) DEFAULT NULL COMMENT '项目id', `devicenum` smallint NOT NULL, `deviceid` varchar(20) DEFAULT NULL, - `starttime` datetime DEFAULT NULL, - `endtime` datetime DEFAULT NULL, - `state` smallint DEFAULT 0, + `createtime` datetime DEFAULT NULL, + `recordtime` datetime DEFAULT NULL, + `result` smallint DEFAULT 0, `fwd_group_id` varchar(64) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +CREATE TABLE IF NOT EXISTS `resendrecords` ( + `id` bigint AUTO_INCREMENT, + `tenantid` int NOT NULL, + `projectid` varchar(64) DEFAULT NULL COMMENT '项目id', + `deviceid` varchar(20) DEFAULT NULL, + `createtime` datetime DEFAULT NULL, + `starttime` datetime DEFAULT NULL, + `endtime` datetime DEFAULT NULL, + `fwd_group_id` varchar(64) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*** 常用指令 */ diff --git a/sec-beidou/src/main/resources/static/api/init.json b/sec-beidou/src/main/resources/static/api/init.json index 1beda685..2b8372f9 100644 --- a/sec-beidou/src/main/resources/static/api/init.json +++ b/sec-beidou/src/main/resources/static/api/init.json @@ -122,6 +122,12 @@ "href": "page/fwd_records", "icon": "fa fa-minus", "target": "_self" + }, + { + "title": "等待推送", + "href": "page/resend_records", + "icon": "fa fa-minus", + "target": "_self" } ] } diff --git a/sec-beidou/src/main/resources/templates/page/fwd_agents.html b/sec-beidou/src/main/resources/templates/page/fwd_agents.html index 877f173a..dc6d6af1 100644 --- a/sec-beidou/src/main/resources/templates/page/fwd_agents.html +++ b/sec-beidou/src/main/resources/templates/page/fwd_agents.html @@ -34,7 +34,7 @@ {field: 'description', title: '描述'}, {field: 'updatetime', title: '更新时间', templet: "
{{layui.util.toDateString(d.updatetime, 'yyyy-MM-dd HH:mm:ss')}}
"}, {field: 'fwd_device_num', title: '推送设备数'}, - {field: 'result', title: '推送结果',templet: '#resultTrans'} + {field: 'result', title: '推送结果',templet: "
{{d.result==1?'成功':'失败'}}
"} ]], limit: 10, page: true, @@ -44,13 +44,6 @@ }); - \ No newline at end of file diff --git a/sec-beidou/src/main/resources/templates/page/fwd_records.html b/sec-beidou/src/main/resources/templates/page/fwd_records.html index b0d03ea9..aa680054 100644 --- a/sec-beidou/src/main/resources/templates/page/fwd_records.html +++ b/sec-beidou/src/main/resources/templates/page/fwd_records.html @@ -12,6 +12,56 @@
+
+ 搜索信息 +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
@@ -20,9 +70,26 @@ - \ No newline at end of file diff --git a/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html b/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html index c34145c7..3e088c9e 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html @@ -88,11 +88,11 @@ {field: 'deviceid', title: '设备号', sort: true}, {field: 'name', title: '设备名称'}, {field: 'devicetype', title: '类型',templet: '#typeTrans'}, - {field: 'parentid', title: '父设备号'}, + {field: 'parentid', title: '父设备号', sort: true}, {field: 'tenantname', title: '所属组织'}, - {field: 'project_id', title: '项目号'}, - {field: 'group_id', title: '基本参数组'}, - {field: 'calc_group_id', title: '解算参数组'}, + {field: 'project_id', title: '项目号', sort: true}, + {field: 'group_id', title: '基本参数组', sort: true}, + {field: 'calc_group_id', title: '解算参数组', sort: true}, {field: 'fwd_group_id', title: '推送组'}, {field: 'fwd_group_id2', title: '推送2'}, {field: 'opmode', title: '使用状态',templet: '#modeTrans'}, diff --git a/sec-beidou/src/main/resources/templates/page/resend_records.html b/sec-beidou/src/main/resources/templates/page/resend_records.html new file mode 100644 index 00000000..18fc13f0 --- /dev/null +++ b/sec-beidou/src/main/resources/templates/page/resend_records.html @@ -0,0 +1,125 @@ + + + + + 等待推送 + + + + + + + +
+
+
+ 搜索信息 +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+
+
+
+
+ +
+
+ +
+ + + + + \ No newline at end of file diff --git a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html index d07ab492..645a983f 100644 --- a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html +++ b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html @@ -83,6 +83,12 @@
+
+ +
+ +
+
@@ -216,6 +222,7 @@ $('#parentid').val(data.parentid); $('#tenantname').val(data.tenantname); $('#project_id').val(data.project_id); + $('#project2_id').val(data.project2_id); $('#group_id').val(data.group_id); $('#calc_group_id').val(data.calc_group_id); $('#fwd_group_id').val(data.fwd_group_id);