1、修改了数据推送功能,推送失败和要推送的补传记录,单独一个表
2、推送历史记录的时间在推送当前记录成功5分钟后执行 3、增加项目2ID
This commit is contained in:
parent
2e3348fa5c
commit
a3b16829a2
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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<ResendRecord> {
|
||||
}
|
||||
@ -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<GnssGroupFwd> 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<GnssDevice> 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<GnssCalcData> recordsToSend = projects.get(projectId);
|
||||
@ -126,8 +145,7 @@ public class Forwarder {
|
||||
|
||||
// 按项目打包推送
|
||||
totalSendNum = 0;
|
||||
fwdFailed = false;
|
||||
List<FwdRecord> fwdRecordList = new ArrayList<>();
|
||||
boolean fwdResult = true;
|
||||
for (Map.Entry<String, List<GnssCalcData>> entry: projects.entrySet()){
|
||||
String projectId = entry.getKey();
|
||||
List<GnssCalcData> 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);
|
||||
});
|
||||
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<ResendRecord> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("fwd_group_id",fwdGroupId);
|
||||
List<ResendRecord> resendRecordsList = resendRecordMapper.selectList(queryWrapper);
|
||||
// 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传
|
||||
List<Long> 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<FwdRecord> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("fwd_group_id",fwdGroupId);
|
||||
queryWrapper.eq("state",FwdRecord.STATE_UPLOAD_DONE);
|
||||
List<FwdRecord> 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<GnssCalcData> records, LocalDateTime sentTime) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void updateFwd(int fwd_num, boolean isFwdOK){
|
||||
QueryWrapper<GnssGroupFwd> 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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -24,14 +24,14 @@ public class MultiLineGNSSCalcService {
|
||||
}
|
||||
private static final Logger logger = LoggerFactory.getLogger(SingleLineGNSSCalcService.class);
|
||||
private static final Map<String, D342Time> deviceMap = new ConcurrentHashMap<>();
|
||||
private static final Map<String, FwdRecord> fwdRecordMap = new ConcurrentHashMap<>();
|
||||
private static final Map<String, ResendRecord> 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);
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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<FwdRecord, FwdRecord> {
|
||||
@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<GnssGroupFwd> 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<FwdRecord> pageable = new Page<>(page, limit);
|
||||
QueryWrapper<FwdRecord> 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);
|
||||
public JSONObject listRecords(HttpSession session, Integer page, Integer limit, String searchParams) {
|
||||
return this.pageList(session, page, limit, searchParams);
|
||||
}
|
||||
IPage<FwdRecord> cs = fwdRecordMapper.selectPage(pageable, queryWrapper);
|
||||
|
||||
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<FwdRecord> getEntityClass() {
|
||||
return FwdRecord.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取实体类对应的mybatis mapper
|
||||
*
|
||||
* @return 实体类对应的mybatis mapper
|
||||
*/
|
||||
@Override
|
||||
public BaseMapper<FwdRecord> getMapper() {
|
||||
return fwdRecordMapper;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<ResendRecord, ResendRecord> {
|
||||
@Autowired
|
||||
GnssGroupFwdMapper gnssGroupFwdMapper;
|
||||
@Autowired
|
||||
ResendRecordMapper resendRecordMapper;
|
||||
|
||||
/********* 推送页面 *********/
|
||||
@RequestMapping("/page/resend_records")
|
||||
public String fwdRecords(Model m, HttpSession session) {
|
||||
initModel(m, session);
|
||||
//以下用于下拉框数据
|
||||
List<GnssGroupFwd> 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<ResendRecord> getEntityClass() {
|
||||
return ResendRecord.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取实体类对应的mybatis mapper
|
||||
*
|
||||
* @return 实体类对应的mybatis mapper
|
||||
*/
|
||||
@Override
|
||||
public BaseMapper<ResendRecord> getMapper() {
|
||||
return resendRecordMapper;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
/***
|
||||
常用指令
|
||||
*/
|
||||
|
||||
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
{field: 'description', title: '描述'},
|
||||
{field: 'updatetime', title: '更新时间', templet: "<div>{{layui.util.toDateString(d.updatetime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'fwd_device_num', title: '推送设备数'},
|
||||
{field: 'result', title: '推送结果',templet: '#resultTrans'}
|
||||
{field: 'result', title: '推送结果',templet: "<div>{{d.result==1?'成功':'失败'}}</div>"}
|
||||
]],
|
||||
limit: 10,
|
||||
page: true,
|
||||
@ -44,13 +44,6 @@
|
||||
});
|
||||
|
||||
</script>
|
||||
<script type="text/html" id="resultTrans">
|
||||
{{# if(d.syn == 0){ }}
|
||||
<span class="layui-badge layui-bg-orange">失败</span>
|
||||
{{# } else { }}
|
||||
<span class="layui-badge layui-bg-green">成功</span>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -12,6 +12,56 @@
|
||||
<body>
|
||||
<div class="layuimini-container">
|
||||
<div class="layuimini-main">
|
||||
<fieldset class="table-search-fieldset">
|
||||
<legend>搜索信息</legend>
|
||||
<div style="margin: 10px 10px 10px 10px">
|
||||
<form class="layui-form layui-form-pane" action="" id="searchFrm">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline" th:if="${tenant_id==0}">
|
||||
<label class="layui-form-label">推送组</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="sl_fwd_group_id" id="fwd_group_id" lay-search="">
|
||||
<option value="">全部</option>
|
||||
<option th:each="item : ${gnss_group_fwd_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">推送时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dgt_createtime" autocomplete="off" id="ID-laydate-start-date1" class="layui-input" placeholder="开始日期">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dlt_createtime" autocomplete="off" id="ID-laydate-end-date1" class="layui-input" placeholder="结束日期">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">数据时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dgt_recordtime" autocomplete="off" id="ID-laydate-start-date2" class="layui-input" placeholder="开始日期">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dlt_recordtime" autocomplete="off" id="ID-laydate-end-date2" class="layui-input" placeholder="结束日期">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">推送结果</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="n_result" id="result" lay-search="">
|
||||
<option value="">全部</option>
|
||||
<option value="1">成功</option>
|
||||
<option value="0">失败</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<table class="layui-hide" id="forwardParaTableId" lay-filter="forwardParaTableFilter"></table>
|
||||
</div>
|
||||
|
||||
@ -21,8 +71,25 @@
|
||||
layui.use(['form', 'table'], function () {
|
||||
var $ = layui.$,
|
||||
form = layui.form,
|
||||
table = layui.table;
|
||||
table = layui.table,
|
||||
laydate = layui.laydate;
|
||||
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-start-date1',
|
||||
type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-end-date1',
|
||||
type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-start-date2',
|
||||
type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-end-date2',
|
||||
type: 'datetime'
|
||||
});
|
||||
/**
|
||||
** 推送参数组
|
||||
**/
|
||||
@ -35,32 +102,35 @@
|
||||
{field: 'project_id', title: '项目号', sort: true},
|
||||
{field: 'devicenum', title: '推送设备数'},
|
||||
{field: 'deviceid', title: '设备号'},
|
||||
{field: 'starttime', title: '起始时间', templet: "<div>{{layui.util.toDateString(d.starttime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'endtime', title: '结束时间', templet: "<div>{{layui.util.toDateString(d.endtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'createtime', title: '推送时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'recordtime', title: '数据时间', templet: "<div>{{layui.util.toDateString(d.recordtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'fwd_group_id', title: '推送组'},
|
||||
{field: 'state', title: '状态',templet: '#stateTrans'}
|
||||
{field: 'result', title: '状态',templet: "<div>{{d.result==1?'成功':'失败'}}</div>"}
|
||||
]],
|
||||
limit: 10,
|
||||
page: true,
|
||||
skin: 'line'
|
||||
});
|
||||
|
||||
// 监听搜索操作
|
||||
form.on('submit(data-search-btn)', function (data) {
|
||||
var result = JSON.stringify(data.field);
|
||||
|
||||
//执行搜索重载
|
||||
table.reload('forwardParaTableId', {
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
, where: {
|
||||
searchParams: result
|
||||
}
|
||||
}, 'data');
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<script type="text/html" id="stateTrans">
|
||||
{{# if(d.state == 0){ }}
|
||||
<span>推送完成</span>
|
||||
{{# } else if(d.state == 2){ }}
|
||||
<span>补传中</span>
|
||||
{{# } else if(d.state == 3){ }}
|
||||
<span>补传完成</span>
|
||||
{{# } else if(d.state == -1){ }}
|
||||
<span>推送失败</span>
|
||||
{{# } else { }}
|
||||
<span >等待</span>
|
||||
{{# } }}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</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'},
|
||||
|
||||
125
sec-beidou/src/main/resources/templates/page/resend_records.html
Normal file
125
sec-beidou/src/main/resources/templates/page/resend_records.html
Normal file
@ -0,0 +1,125 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>等待推送</title>
|
||||
<meta name="renderer" content="webkit">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link rel="stylesheet" href="../lib/layui-v2.6.3/css/layui.css" media="all">
|
||||
<link rel="stylesheet" href="../css/public.css" media="all">
|
||||
</head>
|
||||
<body>
|
||||
<div class="layuimini-container">
|
||||
<div class="layuimini-main">
|
||||
<fieldset class="table-search-fieldset">
|
||||
<legend>搜索信息</legend>
|
||||
<div style="margin: 10px 10px 10px 10px">
|
||||
<form class="layui-form layui-form-pane" action="" id="searchFrm">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline" th:if="${tenant_id==0}">
|
||||
<label class="layui-form-label">推送组</label>
|
||||
<div class="layui-input-inline">
|
||||
<select name="sl_fwd_group_id" id="fwd_group_id" lay-search="">
|
||||
<option value="">全部</option>
|
||||
<option th:each="item : ${gnss_group_fwd_list}" th:text="${item.name}" th:value="${item.name}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">创建时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dgt_createtime" autocomplete="off" id="ID-laydate-start-date1" class="layui-input" placeholder="开始日期">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dlt_createtime" autocomplete="off" id="ID-laydate-end-date1" class="layui-input" placeholder="结束日期">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">数据时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dgt_begintime" autocomplete="off" id="ID-laydate-start-date2" class="layui-input" placeholder="开始日期">
|
||||
</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" name="dgt_begintime" autocomplete="off" id="ID-laydate-end-date2" class="layui-input" placeholder="结束日期">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<table class="layui-hide" id="forwardParaTableId" lay-filter="forwardParaTableFilter"></table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script src="../lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
|
||||
<script th:inline="none">
|
||||
layui.use(['form', 'table'], function () {
|
||||
var $ = layui.$,
|
||||
form = layui.form,
|
||||
table = layui.table,
|
||||
laydate = layui.laydate;
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-start-date1',
|
||||
type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-end-date1',
|
||||
type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-start-date2',
|
||||
type: 'datetime'
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#ID-laydate-end-date2',
|
||||
type: 'datetime'
|
||||
});
|
||||
/**
|
||||
** 推送参数组
|
||||
**/
|
||||
table.render({
|
||||
elem: '#forwardParaTableId',
|
||||
url: '/fwd/resend_records',
|
||||
toolbar: '#toolbarTable',
|
||||
defaultToolbar: ['filter'],
|
||||
cols: [[
|
||||
{field: 'project_id', title: '项目号', sort: true},
|
||||
{field: 'deviceid', title: '设备号'},
|
||||
{field: 'createtime', title: '推送时间', templet: "<div>{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'starttime', title: '开始时间', templet: "<div>{{layui.util.toDateString(d.starttime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'endtime', title: '结束时间', templet: "<div>{{layui.util.toDateString(d.endtime, 'yyyy-MM-dd HH:mm:ss')}}</div>"},
|
||||
{field: 'fwd_group_id', title: '推送组'}
|
||||
]],
|
||||
limit: 10,
|
||||
page: true,
|
||||
skin: 'line'
|
||||
});
|
||||
|
||||
// 监听搜索操作
|
||||
form.on('submit(data-search-btn)', function (data) {
|
||||
var result = JSON.stringify(data.field);
|
||||
|
||||
//执行搜索重载
|
||||
table.reload('forwardParaTableId', {
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
, where: {
|
||||
searchParams: result
|
||||
}
|
||||
}, 'data');
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -83,6 +83,12 @@
|
||||
<input type="text" name="project_id" id="project_id" placeholder="请输入项目编号" value="" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">项目2号</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="project2_id" id="project2_id" placeholder="请输入项目编号" value="" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user