增加运行状态表
This commit is contained in:
parent
86b7290c7b
commit
5e3d392722
|
|
@ -24,15 +24,19 @@ import org.jeecg.common.system.util.JwtUtil;
|
|||
import org.jeecg.common.util.EntityFieldUtil;
|
||||
import org.jeecg.common.vo.DeviceCmdVo;
|
||||
import org.jeecg.common.vo.DeviceCmdVo2;
|
||||
import org.jeecg.common.vo.iot.common.DeviceRelayVo;
|
||||
import org.jeecg.modules.appmana.service.*;
|
||||
import org.jeecg.modules.appmana.service.impl.IotCommonP3ServiceImpl;
|
||||
import org.jeecg.modules.appmana.utils.Iotutils;
|
||||
import org.jeecg.modules.appmana.utils.YSUtils;
|
||||
import org.jeecg.modules.mqtt.MqttService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
|
|
@ -51,11 +55,6 @@ import java.util.List;
|
|||
public class SurvDeviceDeployController extends JeecgController<SurvDeviceDeploy, ISurvDeviceDeployService> {
|
||||
@Autowired
|
||||
private ISurvDeviceDeployService survDeviceDeployService;
|
||||
@Autowired
|
||||
private IScContService scContService;
|
||||
|
||||
@Autowired
|
||||
private IScContExeService scContExeService;
|
||||
|
||||
@Autowired
|
||||
private ISurvTransdataOrientwaterService orientwaterService;
|
||||
|
|
@ -78,8 +77,15 @@ public class SurvDeviceDeployController extends JeecgController<SurvDeviceDeploy
|
|||
@Autowired
|
||||
private Iotutils iotutils;
|
||||
|
||||
|
||||
@Autowired
|
||||
private ISurvIotVirtualDeviceService iotVirtualDeviceService;
|
||||
private IotCommonP3ServiceImpl p3Service;
|
||||
|
||||
@Autowired
|
||||
private ISurvDeviceDeployRunService runService;
|
||||
|
||||
@Autowired
|
||||
private ISurvDeviceDeployRelaygroupService relaygroupService;
|
||||
|
||||
/**
|
||||
* 分页列表查询
|
||||
|
|
@ -255,38 +261,13 @@ public class SurvDeviceDeployController extends JeecgController<SurvDeviceDeploy
|
|||
Assert.notNull(relay,"控制项无效");
|
||||
SurvDeviceDeploy deviceDeploy = deviceDeployService.getById(relay.getDeployId());
|
||||
if(deviceDeploy != null){
|
||||
boolean b = p3Service.sendMqttCmd(deviceDeploy,relay,deviceCmdVo.getOps());
|
||||
if(b){
|
||||
return Result.ok("指令发送成功");
|
||||
}else{
|
||||
return Result.error("指令发送失败");
|
||||
}
|
||||
|
||||
String cmds = "";
|
||||
String fieldName = relay.getEntityField();
|
||||
if (IotConstants.DEVICE_CLOSE.equals(deviceCmdVo.getOps())) {//关逻辑
|
||||
cmds = relay.getRegisterCmdOn();
|
||||
} else if (IotConstants.DEVICE_ON.equals(deviceCmdVo.getOps())) {//开逻辑
|
||||
cmds = relay.getRegisterCmdOff();
|
||||
} else if (IotConstants.DEVICE_STOP.equals(deviceCmdVo.getOps())) {//停逻辑
|
||||
cmds = relay.getRegisterCmdStop();
|
||||
}
|
||||
deviceDeploy.setSendInfo(cmds);
|
||||
//todo 调整为直接发送控制指令至mqtt
|
||||
|
||||
deviceDeployService.updateById(deviceDeploy);
|
||||
|
||||
try {
|
||||
Thread.sleep(8 * 1000);
|
||||
}catch (InterruptedException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
SurvTransdataOrientwater transdataOrientwater = orientwaterService.getOneByDeviceCode(deviceDeploy.getDeployCode());
|
||||
|
||||
if(transdataOrientwater!=null){
|
||||
String vals = EntityFieldUtil.getFieldValue(transdataOrientwater,fieldName,String.class);
|
||||
if(deviceCmdVo.getOps().equals(vals)){
|
||||
return Result.ok("操作成功");
|
||||
}else{
|
||||
return Result.error("最新数据的球阀状态与操作不一致,请联系管理员");
|
||||
}
|
||||
}else {
|
||||
return Result.error("未收到该设备的最新数据,请稍后再次查看是否成功");
|
||||
}
|
||||
}else {
|
||||
return Result.error("无效的设备");
|
||||
}
|
||||
|
|
@ -408,46 +389,97 @@ public class SurvDeviceDeployController extends JeecgController<SurvDeviceDeploy
|
|||
}
|
||||
|
||||
|
||||
@GetMapping(value = "/getRelayList")
|
||||
public Result<JSONObject> getRelayList(@RequestParam String deployId) {
|
||||
@GetMapping(value = "/getRelayList")
|
||||
public Result<DeviceRelayVo> getRelayList(@RequestParam String deployId) {
|
||||
|
||||
SurvDeviceDeploy deploy = deviceDeployService.getById(deployId);
|
||||
Assert.notNull(deploy,"无效设备");
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
Date dateTime = null;
|
||||
if(PollutionConstants.WATER_ORIENT.equals(deploy.getDeployType())){
|
||||
SurvTransdataOrientwater orientwater = orientwaterService.getOneByDeviceCode(deploy.getDeployCode());
|
||||
if(orientwater!=null) {
|
||||
dateTime = orientwater.getDataDateTime();
|
||||
}
|
||||
} else if (PollutionConstants.WATER_LIVE.contains(deploy.getDeployType())) {
|
||||
SurvTransdataLivestockwater livestockwater = livestockwaterService.getOneByDeviceCode(deploy.getDeployCode());
|
||||
if(livestockwater!=null) {
|
||||
dateTime = livestockwater.getDataDateTime();
|
||||
}
|
||||
}
|
||||
SurvDeviceDeploy deploy = deviceDeployService.getById(deployId);
|
||||
Assert.notNull(deploy,"无效设备");
|
||||
DeviceRelayVo deviceRelayVo = new DeviceRelayVo();
|
||||
Date dateTime = null;
|
||||
if(PollutionConstants.WATER_ORIENT.equals(deploy.getDeployType())){
|
||||
SurvTransdataOrientwater orientwater = orientwaterService.getOneByDeviceCode(deploy.getDeployCode());
|
||||
if(orientwater!=null) {
|
||||
dateTime = orientwater.getDataDateTime();
|
||||
}
|
||||
} else if (PollutionConstants.WATER_LIVE.contains(deploy.getDeployType())) {
|
||||
SurvTransdataLivestockwater livestockwater = livestockwaterService.getOneByDeviceCode(deploy.getDeployCode());
|
||||
if(livestockwater!=null) {
|
||||
dateTime = livestockwater.getDataDateTime();
|
||||
}
|
||||
}
|
||||
|
||||
switch (deploy.getProtocolCode()){
|
||||
case IotConstants.lhviot_standard:
|
||||
List<String> readType = new ArrayList<>(Arrays.asList("read_write"));
|
||||
List<SurvIotVirtualDeviceGroup> modules = iotVirtualDeviceService.getModuleByGroup(deploy.getDeployCode(),readType);
|
||||
jsonObject.put("moduleList",modules);
|
||||
List<String> readType2 = new ArrayList<>(Arrays.asList("read_only"));
|
||||
List<SurvIotVirtualDeviceModule> runs = iotVirtualDeviceService.getModuleByType(deploy.getDeployCode(),readType2);
|
||||
jsonObject.put("runStatus",runs);
|
||||
List<SurvDeviceDeployRelaygroup> relays = relaygroupService.getRelayByGroup(deploy.getId());
|
||||
deviceRelayVo.setModuleList(relays);
|
||||
//初始化指令
|
||||
if(!relays.isEmpty()){
|
||||
for (SurvDeviceDeployRelaygroup relaygroup : relays) {
|
||||
List<SurvDeviceDeployRelay> r = relayService.initCmd(relaygroup.getRelayList());
|
||||
relaygroup.setRelayList(r);
|
||||
}
|
||||
}
|
||||
|
||||
List<SurvDeviceDeployRun> runs = runService.listByDeploy(deploy.getId());
|
||||
deviceRelayVo.setRunStatus(runs);
|
||||
break;
|
||||
default:
|
||||
List<SurvDeviceDeployRelay> pageList = relayService.relayList(deployId,null);
|
||||
jsonObject.put("relayList",pageList);
|
||||
deviceRelayVo.setRelayList(pageList);
|
||||
break;
|
||||
}
|
||||
|
||||
if(dateTime==null) {
|
||||
jsonObject.put("dataTime", "该设备没有监测数据返回");
|
||||
}else{
|
||||
jsonObject.put("dataTime",dateTime);
|
||||
}
|
||||
return Result.OK(jsonObject);
|
||||
}
|
||||
if(dateTime==null) {
|
||||
deviceRelayVo.setDateTime("该设备没有监测数据返回");
|
||||
}else{
|
||||
SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
deviceRelayVo.setDateTime(time.format(dateTime));
|
||||
}
|
||||
return Result.OK(deviceRelayVo);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// @GetMapping(value = "/getRelayList")
|
||||
// public Result<JSONObject> getRelayList(@RequestParam String deployId) {
|
||||
//
|
||||
// SurvDeviceDeploy deploy = deviceDeployService.getById(deployId);
|
||||
// Assert.notNull(deploy,"无效设备");
|
||||
// JSONObject jsonObject = new JSONObject();
|
||||
// Date dateTime = null;
|
||||
// if(PollutionConstants.WATER_ORIENT.equals(deploy.getDeployType())){
|
||||
// SurvTransdataOrientwater orientwater = orientwaterService.getOneByDeviceCode(deploy.getDeployCode());
|
||||
// if(orientwater!=null) {
|
||||
// dateTime = orientwater.getDataDateTime();
|
||||
// }
|
||||
// } else if (PollutionConstants.WATER_LIVE.contains(deploy.getDeployType())) {
|
||||
// SurvTransdataLivestockwater livestockwater = livestockwaterService.getOneByDeviceCode(deploy.getDeployCode());
|
||||
// if(livestockwater!=null) {
|
||||
// dateTime = livestockwater.getDataDateTime();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// switch (deploy.getProtocolCode()){
|
||||
// case IotConstants.lhviot_standard:
|
||||
// List<String> readType = new ArrayList<>(Arrays.asList("read_write"));
|
||||
// List<SurvIotVirtualDeviceGroup> modules = iotVirtualDeviceService.getModuleByGroup(deploy.getDeployCode(),readType);
|
||||
// jsonObject.put("moduleList",modules);
|
||||
// List<String> readType2 = new ArrayList<>(Arrays.asList("read_only"));
|
||||
// List<SurvIotVirtualDeviceModule> runs = iotVirtualDeviceService.getModuleByType(deploy.getDeployCode(),readType2);
|
||||
// jsonObject.put("runStatus",runs);
|
||||
// break;
|
||||
// default:
|
||||
// List<SurvDeviceDeployRelay> pageList = relayService.relayList(deployId,null);
|
||||
// jsonObject.put("relayList",pageList);
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// if(dateTime==null) {
|
||||
// jsonObject.put("dataTime", "该设备没有监测数据返回");
|
||||
// }else{
|
||||
// jsonObject.put("dataTime",dateTime);
|
||||
// }
|
||||
// return Result.OK(jsonObject);
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,248 @@
|
|||
package org.jeecg.modules.appmana.controller;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRun;
|
||||
import org.jeecg.common.iot.common.DeviceRunTypeVo;
|
||||
import org.jeecg.common.system.query.QueryGenerator;
|
||||
import org.jeecg.common.util.oConvertUtils;
|
||||
import org.jeecg.common.vo.dict.DictVo;
|
||||
import org.jeecg.modules.appmana.service.ISurvConfigService;
|
||||
import org.jeecg.modules.appmana.service.ISurvDeviceDeployRunService;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
||||
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
||||
import org.jeecgframework.poi.excel.entity.ExportParams;
|
||||
import org.jeecgframework.poi.excel.entity.ImportParams;
|
||||
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
||||
import org.jeecg.common.system.base.controller.JeecgController;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.jeecg.common.aspect.annotation.AutoLog;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.jeecg.common.system.util.JwtUtil;
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 运行状态
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Api(tags="运行状态")
|
||||
@RestController
|
||||
@RequestMapping("/appmana/survDeviceDeployRun")
|
||||
@Slf4j
|
||||
public class SurvDeviceDeployRunController extends JeecgController<SurvDeviceDeployRun, ISurvDeviceDeployRunService> {
|
||||
@Autowired
|
||||
private ISurvDeviceDeployRunService survDeviceDeployRunService;
|
||||
@Autowired
|
||||
private ISurvConfigService configService;
|
||||
/**
|
||||
* 分页列表查询
|
||||
*
|
||||
* @param survDeviceDeployRun
|
||||
* @param pageNo
|
||||
* @param pageSize
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
//@AutoLog(value = "运行状态-分页列表查询")
|
||||
@ApiOperation(value="运行状态-分页列表查询", notes="运行状态-分页列表查询")
|
||||
@GetMapping(value = "/list")
|
||||
public Result<IPage<SurvDeviceDeployRun>> queryPageList(SurvDeviceDeployRun survDeviceDeployRun,
|
||||
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
||||
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
QueryWrapper<SurvDeviceDeployRun> queryWrapper = QueryGenerator.initQueryWrapper(survDeviceDeployRun, req.getParameterMap());
|
||||
Page<SurvDeviceDeployRun> page = new Page<SurvDeviceDeployRun>(pageNo, pageSize);
|
||||
IPage<SurvDeviceDeployRun> pageList = survDeviceDeployRunService.page(page, queryWrapper);
|
||||
survDeviceDeployRunService.fills(pageList.getRecords());
|
||||
return Result.OK(pageList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*
|
||||
* @param survDeviceDeployRun
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态-添加")
|
||||
@ApiOperation(value="运行状态-添加", notes="运行状态-添加")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_run:add")
|
||||
@PostMapping(value = "/add")
|
||||
public Result<String> add(@RequestBody SurvDeviceDeployRun survDeviceDeployRun, HttpServletRequest request) {
|
||||
String username = JwtUtil.getUserNameByToken(request);
|
||||
survDeviceDeployRun.setCreateBy(username);
|
||||
survDeviceDeployRun.setCreateTime(new Date());
|
||||
survDeviceDeployRunService.save(survDeviceDeployRun);
|
||||
return Result.OK("添加成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*
|
||||
* @param survDeviceDeployRun
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态-编辑")
|
||||
@ApiOperation(value="运行状态-编辑", notes="运行状态-编辑")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_run:edit")
|
||||
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
|
||||
public Result<String> edit(@RequestBody SurvDeviceDeployRun survDeviceDeployRun, HttpServletRequest request) {
|
||||
//创建、更新时间不能编辑
|
||||
survDeviceDeployRun.setCreateTime(null);
|
||||
survDeviceDeployRun.setUpdateTime(null);
|
||||
String username = JwtUtil.getUserNameByToken(request);
|
||||
survDeviceDeployRun.setUpdateBy(username);
|
||||
survDeviceDeployRunService.updateById(survDeviceDeployRun);
|
||||
return Result.OK("编辑成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过id删除
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态-通过id删除")
|
||||
@ApiOperation(value="运行状态-通过id删除", notes="运行状态-通过id删除")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_run:delete")
|
||||
@DeleteMapping(value = "/delete")
|
||||
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
|
||||
survDeviceDeployRunService.removeById(id);
|
||||
return Result.OK("删除成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态-批量删除")
|
||||
@ApiOperation(value="运行状态-批量删除", notes="运行状态-批量删除")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_run:deleteBatch")
|
||||
@DeleteMapping(value = "/deleteBatch")
|
||||
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
|
||||
this.survDeviceDeployRunService.removeByIds(Arrays.asList(ids.split(",")));
|
||||
return Result.OK("批量删除成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过id查询
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
//@AutoLog(value = "运行状态-通过id查询")
|
||||
@ApiOperation(value="运行状态-通过id查询", notes="运行状态-通过id查询")
|
||||
@GetMapping(value = "/queryById")
|
||||
public Result<SurvDeviceDeployRun> queryById(@RequestParam(name="id",required=true) String id) {
|
||||
SurvDeviceDeployRun survDeviceDeployRun = survDeviceDeployRunService.getById(id);
|
||||
if(survDeviceDeployRun==null) {
|
||||
return Result.error("未找到对应数据");
|
||||
}
|
||||
return Result.OK(survDeviceDeployRun);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel
|
||||
*
|
||||
* @param request
|
||||
* @param survDeviceDeployRun
|
||||
*/
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_run:exportXls")
|
||||
@RequestMapping(value = "/exportXls")
|
||||
public ModelAndView exportXls(HttpServletRequest request, SurvDeviceDeployRun survDeviceDeployRun) {
|
||||
return super.exportXls(request, survDeviceDeployRun, SurvDeviceDeployRun.class, "运行状态");
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过excel导入数据
|
||||
*
|
||||
* @param request
|
||||
* @param response
|
||||
* @return
|
||||
*/
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_run:importExcel")
|
||||
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
|
||||
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
|
||||
return super.importExcel(request, response, SurvDeviceDeployRun.class);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 重复校验
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/relayItemCheck", method = RequestMethod.GET)
|
||||
@ApiOperation("重复校验接口")
|
||||
public Result<Object> relayItemCheck(SurvDeviceDeployRun fDeviceDeployRun, HttpServletRequest request) {
|
||||
|
||||
Long num = Long.valueOf(0);
|
||||
LambdaQueryWrapper<SurvDeviceDeployRun> queryWrapper = new LambdaQueryWrapper<SurvDeviceDeployRun>();
|
||||
queryWrapper.eq(SurvDeviceDeployRun::getRunKey, fDeviceDeployRun.getRunKey());
|
||||
queryWrapper.eq(SurvDeviceDeployRun::getDeployId, fDeviceDeployRun.getDeployId());
|
||||
if (StringUtils.isNotBlank(fDeviceDeployRun.getId())) {
|
||||
// 编辑页面校验
|
||||
queryWrapper.ne(SurvDeviceDeployRun::getId, fDeviceDeployRun.getId());
|
||||
}
|
||||
num = survDeviceDeployRunService.count(queryWrapper);
|
||||
if (num == 0) {
|
||||
// 该值可用
|
||||
return Result.ok("该值可用!");
|
||||
} else {
|
||||
// 该值不可用
|
||||
log.info("该值不可用,系统中已存在!");
|
||||
return Result.error("该值不可用,系统中已存在!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("13.获取运行种类种类")
|
||||
@ApiOperationSupport(order = 13)
|
||||
@GetMapping("/getRelayType")
|
||||
public Result getRelayType() {
|
||||
/*1=工作类型*/
|
||||
List<DeviceRunTypeVo> relayTypeVos = new ArrayList<>();
|
||||
|
||||
|
||||
List<DictVo> dictModels = configService.getDictByCode("iot_run_type");
|
||||
if(!dictModels.isEmpty()){
|
||||
for (DictVo dictModel : dictModels) {
|
||||
DeviceRunTypeVo deviceRunTypeVo = new DeviceRunTypeVo();
|
||||
deviceRunTypeVo.setRunType(dictModel.getValue());
|
||||
deviceRunTypeVo.setRunTypeName(dictModel.getText());
|
||||
relayTypeVos.add(deviceRunTypeVo);
|
||||
}
|
||||
}
|
||||
|
||||
return Result.ok(relayTypeVos);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,224 @@
|
|||
package org.jeecg.modules.appmana.controller;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRungroup;
|
||||
import org.jeecg.common.system.query.QueryGenerator;
|
||||
import org.jeecg.common.util.oConvertUtils;
|
||||
import org.jeecg.modules.appmana.service.ISurvDeviceDeployRungroupService;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
||||
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
||||
import org.jeecgframework.poi.excel.entity.ExportParams;
|
||||
import org.jeecgframework.poi.excel.entity.ImportParams;
|
||||
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
||||
import org.jeecg.common.system.base.controller.JeecgController;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.jeecg.common.aspect.annotation.AutoLog;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.jeecg.common.system.util.JwtUtil;
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 运行状态分组
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Api(tags="运行状态分组")
|
||||
@RestController
|
||||
@RequestMapping("/appmana/survDeviceDeployRungroup")
|
||||
@Slf4j
|
||||
public class SurvDeviceDeployRungroupController extends JeecgController<SurvDeviceDeployRungroup, ISurvDeviceDeployRungroupService> {
|
||||
@Autowired
|
||||
private ISurvDeviceDeployRungroupService survDeviceDeployRungroupService;
|
||||
|
||||
/**
|
||||
* 分页列表查询
|
||||
*
|
||||
* @param survDeviceDeployRungroup
|
||||
* @param pageNo
|
||||
* @param pageSize
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
//@AutoLog(value = "运行状态分组-分页列表查询")
|
||||
@ApiOperation(value="运行状态分组-分页列表查询", notes="运行状态分组-分页列表查询")
|
||||
@GetMapping(value = "/list")
|
||||
public Result<IPage<SurvDeviceDeployRungroup>> queryPageList(SurvDeviceDeployRungroup survDeviceDeployRungroup,
|
||||
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
||||
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
QueryWrapper<SurvDeviceDeployRungroup> queryWrapper = QueryGenerator.initQueryWrapper(survDeviceDeployRungroup, req.getParameterMap());
|
||||
Page<SurvDeviceDeployRungroup> page = new Page<SurvDeviceDeployRungroup>(pageNo, pageSize);
|
||||
IPage<SurvDeviceDeployRungroup> pageList = survDeviceDeployRungroupService.page(page, queryWrapper);
|
||||
return Result.OK(pageList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
*
|
||||
* @param survDeviceDeployRungroup
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态分组-添加")
|
||||
@ApiOperation(value="运行状态分组-添加", notes="运行状态分组-添加")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_rungroup:add")
|
||||
@PostMapping(value = "/add")
|
||||
public Result<String> add(@RequestBody SurvDeviceDeployRungroup survDeviceDeployRungroup, HttpServletRequest request) {
|
||||
String username = JwtUtil.getUserNameByToken(request);
|
||||
survDeviceDeployRungroup.setCreateBy(username);
|
||||
survDeviceDeployRungroup.setCreateTime(new Date());
|
||||
survDeviceDeployRungroupService.save(survDeviceDeployRungroup);
|
||||
return Result.OK("添加成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*
|
||||
* @param survDeviceDeployRungroup
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态分组-编辑")
|
||||
@ApiOperation(value="运行状态分组-编辑", notes="运行状态分组-编辑")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_rungroup:edit")
|
||||
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
|
||||
public Result<String> edit(@RequestBody SurvDeviceDeployRungroup survDeviceDeployRungroup, HttpServletRequest request) {
|
||||
//创建、更新时间不能编辑
|
||||
survDeviceDeployRungroup.setCreateTime(null);
|
||||
survDeviceDeployRungroup.setUpdateTime(null);
|
||||
String username = JwtUtil.getUserNameByToken(request);
|
||||
survDeviceDeployRungroup.setUpdateBy(username);
|
||||
survDeviceDeployRungroupService.updateById(survDeviceDeployRungroup);
|
||||
return Result.OK("编辑成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过id删除
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态分组-通过id删除")
|
||||
@ApiOperation(value="运行状态分组-通过id删除", notes="运行状态分组-通过id删除")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_rungroup:delete")
|
||||
@DeleteMapping(value = "/delete")
|
||||
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
|
||||
survDeviceDeployRungroupService.removeById(id);
|
||||
return Result.OK("删除成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "运行状态分组-批量删除")
|
||||
@ApiOperation(value="运行状态分组-批量删除", notes="运行状态分组-批量删除")
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_rungroup:deleteBatch")
|
||||
@DeleteMapping(value = "/deleteBatch")
|
||||
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
|
||||
this.survDeviceDeployRungroupService.removeByIds(Arrays.asList(ids.split(",")));
|
||||
return Result.OK("批量删除成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过id查询
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
//@AutoLog(value = "运行状态分组-通过id查询")
|
||||
@ApiOperation(value="运行状态分组-通过id查询", notes="运行状态分组-通过id查询")
|
||||
@GetMapping(value = "/queryById")
|
||||
public Result<SurvDeviceDeployRungroup> queryById(@RequestParam(name="id",required=true) String id) {
|
||||
SurvDeviceDeployRungroup survDeviceDeployRungroup = survDeviceDeployRungroupService.getById(id);
|
||||
if(survDeviceDeployRungroup==null) {
|
||||
return Result.error("未找到对应数据");
|
||||
}
|
||||
return Result.OK(survDeviceDeployRungroup);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出excel
|
||||
*
|
||||
* @param request
|
||||
* @param survDeviceDeployRungroup
|
||||
*/
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_rungroup:exportXls")
|
||||
@RequestMapping(value = "/exportXls")
|
||||
public ModelAndView exportXls(HttpServletRequest request, SurvDeviceDeployRungroup survDeviceDeployRungroup) {
|
||||
return super.exportXls(request, survDeviceDeployRungroup, SurvDeviceDeployRungroup.class, "运行状态分组");
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过excel导入数据
|
||||
*
|
||||
* @param request
|
||||
* @param response
|
||||
* @return
|
||||
*/
|
||||
//@RequiresPermissions("appmana:surv_device_deploy_rungroup:importExcel")
|
||||
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
|
||||
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
|
||||
return super.importExcel(request, response, SurvDeviceDeployRungroup.class);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 重复校验
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/itemCheck", method = RequestMethod.GET)
|
||||
@ApiOperation("重复校验接口")
|
||||
public Result<Object> itemCheck(SurvDeviceDeployRungroup survDeviceDeployRungroup, HttpServletRequest request) {
|
||||
// SurvDeviceDeployRelaygroup relayGroup = fDeviceDeployRelaygroupService.getById(fDeviceDeployRelaygroup.getDeployId());
|
||||
// Assert.notNull(relayGroup,"无效分组");
|
||||
|
||||
Long num = Long.valueOf(0);
|
||||
LambdaQueryWrapper<SurvDeviceDeployRungroup> queryWrapper = new LambdaQueryWrapper<SurvDeviceDeployRungroup>();
|
||||
queryWrapper.eq(SurvDeviceDeployRungroup::getGroupName, survDeviceDeployRungroup.getGroupName());
|
||||
queryWrapper.eq(SurvDeviceDeployRungroup::getDeployId, survDeviceDeployRungroup.getDeployId());
|
||||
if (StringUtils.isNotBlank(survDeviceDeployRungroup.getId())) {
|
||||
// 编辑页面校验
|
||||
queryWrapper.ne(SurvDeviceDeployRungroup::getId, survDeviceDeployRungroup.getId());
|
||||
}
|
||||
num = survDeviceDeployRungroupService.count(queryWrapper);
|
||||
if (num == 0) {
|
||||
// 该值可用
|
||||
return Result.ok("该值可用!");
|
||||
} else {
|
||||
// 该值不可用
|
||||
log.info("该值不可用,系统中已存在!");
|
||||
return Result.error("该值不可用,系统中已存在!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ package org.jeecg.modules.appmana.mapper;
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelay;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelaygroup;
|
||||
import org.jeecg.common.iot.common.DeployRelayCountVo;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -20,4 +21,7 @@ public interface SurvDeviceDeployRelayMapper extends BaseMapper<SurvDeviceDeploy
|
|||
List<SurvDeviceDeployRelay> relayList(@Param("deployId") String deployId, @Param("groups") List<String> groups);
|
||||
|
||||
List<SurvDeviceDeployRelay> deployRelayList(@Param("deployId") List<String> deployId, @Param("groups") List<String> groups);
|
||||
|
||||
List<SurvDeviceDeployRelay> getRelayByGroup(@Param("deployId")String deployId);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
package org.jeecg.modules.appmana.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelaygroup;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: 继电器分组
|
||||
* @Author: jeecg-boot
|
||||
|
|
@ -11,4 +14,5 @@ import org.jeecg.common.entity.SurvDeviceDeployRelaygroup;
|
|||
*/
|
||||
public interface SurvDeviceDeployRelaygroupMapper extends BaseMapper<SurvDeviceDeployRelaygroup> {
|
||||
|
||||
List<SurvDeviceDeployRelaygroup> getRelayByGroup(@Param("deployId")String deployId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package org.jeecg.modules.appmana.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRun;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
public interface SurvDeviceDeployRunMapper extends BaseMapper<SurvDeviceDeployRun> {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package org.jeecg.modules.appmana.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRungroup;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态分组
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
public interface SurvDeviceDeployRungroupMapper extends BaseMapper<SurvDeviceDeployRungroup> {
|
||||
|
||||
}
|
||||
|
|
@ -52,6 +52,7 @@
|
|||
|
||||
|
||||
|
||||
|
||||
<select id="getItemCounts" resultType="org.jeecg.common.iot.common.DeployRelayCountVo">
|
||||
select DEPLOY_ID as deployId,count(ID) as relayCounts from surv_device_deploy_relay
|
||||
where IS_DEL = 0 AND DEPLOY_ID IN
|
||||
|
|
@ -99,4 +100,10 @@
|
|||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="getRelays" resultMap="SurvDeviceDeployRelayMap">
|
||||
select
|
||||
<include refid="baseSql"/>
|
||||
from surv_device_deploy_relay
|
||||
where GROUP_ID = #{groupId} order by SORT_NO,CREATE_TIME desc
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -1,5 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.jeecg.modules.appmana.mapper.SurvDeviceDeployRelaygroupMapper">
|
||||
<resultMap type="org.jeecg.common.entity.SurvDeviceDeployRelaygroup" id="SurvDeviceDeployRelaygroupMap">
|
||||
<result property="id" column="ID" jdbcType="VARCHAR"/>
|
||||
<result property="deployId" column="DEPLOY_ID" jdbcType="VARCHAR"/>
|
||||
<result property="groupType" column="GROUP_TYPE" jdbcType="VARCHAR"/>
|
||||
<result property="groupName" column="GROUP_NAME" jdbcType="VARCHAR"/>
|
||||
<result property="groupNotes" column="GROUP_NOTES" jdbcType="VARCHAR"/>
|
||||
<result property="sortNo" column="SORT_NO" jdbcType="INTEGER"/>
|
||||
<result property="isEnable" column="IS_ENABLE" jdbcType="INTEGER"/>
|
||||
<result property="tenantId" column="TENANT_ID" jdbcType="VARCHAR"/>
|
||||
<result property="reVision" column="RE_VISION" jdbcType="INTEGER"/>
|
||||
<result property="createBy" column="CREATE_BY" jdbcType="VARCHAR"/>
|
||||
<result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
|
||||
<result property="updateBy" column="UPDATE_BY" jdbcType="VARCHAR"/>
|
||||
<result property="isDel" column="IS_DEL" jdbcType="INTEGER"/>
|
||||
<result property="updateTime" column="UPDATE_TIME" jdbcType="TIMESTAMP"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="relayMap" type="org.jeecg.common.entity.SurvDeviceDeployRelaygroup" extends="SurvDeviceDeployRelaygroupMap">
|
||||
<collection property="relayList" column="{groupId = ID}" select="org.jeecg.modules.appmana.mapper.SurvDeviceDeployRelayMapper.getRelays"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="baseSql">
|
||||
ID,DEPLOY_ID,GROUP_TYPE,GROUP_NAME,GROUP_NOTES,SORT_NO,IS_ENABLE,TENANT_ID,RE_VISION,CREATE_BY,CREATE_TIME,UPDATE_BY,IS_DEL,UPDATE_TIME
|
||||
</sql>
|
||||
|
||||
|
||||
<select id="getRelayByGroup" resultMap="relayMap">
|
||||
select <include refid="baseSql"/>
|
||||
from surv_device_deploy_relaygroup
|
||||
where DEPLOY_ID = #{deployId} order by SORT_NO,CREATE_TIME desc
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.jeecg.modules.appmana.mapper.SurvDeviceDeployRunMapper">
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.jeecg.modules.appmana.mapper.SurvDeviceDeployRungroupMapper">
|
||||
|
||||
</mapper>
|
||||
|
|
@ -3,6 +3,7 @@ package org.jeecg.modules.appmana.service;
|
|||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.jeecg.common.entity.SurvDeviceDeploy;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelay;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelaygroup;
|
||||
import org.jeecg.common.iot.common.DeployRelayCountVo;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -34,4 +35,7 @@ public interface ISurvDeviceDeployRelayService extends IService<SurvDeviceDeploy
|
|||
void processGroupName(SurvDeviceDeployRelay fDeviceDeployRelay);
|
||||
|
||||
void fills(List<SurvDeviceDeployRelay> list);
|
||||
|
||||
|
||||
List<SurvDeviceDeployRelay> initCmd(List<SurvDeviceDeployRelay> relayList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,4 +14,6 @@ import java.util.List;
|
|||
public interface ISurvDeviceDeployRelaygroupService extends IService<SurvDeviceDeployRelaygroup> {
|
||||
|
||||
void fills(List<SurvDeviceDeployRelaygroup> records);
|
||||
|
||||
List<SurvDeviceDeployRelaygroup> getRelayByGroup(String id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
package org.jeecg.modules.appmana.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRun;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
public interface ISurvDeviceDeployRunService extends IService<SurvDeviceDeployRun> {
|
||||
|
||||
List<SurvDeviceDeployRun> listByDeploy(String deployId);
|
||||
|
||||
void fills(List<SurvDeviceDeployRun> pageList);
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
package org.jeecg.modules.appmana.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRungroup;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态分组
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
public interface ISurvDeviceDeployRungroupService extends IService<SurvDeviceDeployRungroup> {
|
||||
|
||||
}
|
||||
|
|
@ -8,16 +8,14 @@ import org.apache.commons.lang3.StringUtils;
|
|||
import org.jeecg.common.constant.IotConstants;
|
||||
import org.jeecg.common.constant.PollutionConstants;
|
||||
import org.jeecg.common.constant.enums.PollutionEnum;
|
||||
import org.jeecg.common.entity.ScEquZhibiao;
|
||||
import org.jeecg.common.entity.SurvConfig;
|
||||
import org.jeecg.common.entity.SurvDeviceDeploy;
|
||||
import org.jeecg.common.entity.SurvStationInfo;
|
||||
import org.jeecg.common.entity.*;
|
||||
import org.jeecg.common.util.DateUtilTools;
|
||||
import org.jeecg.common.util.EntityFieldUtil;
|
||||
import org.jeecg.common.vo.*;
|
||||
import org.jeecg.common.vo.statistic.DTOIotSummray;
|
||||
import org.jeecg.modules.appmana.service.IScEquZhibiaoService;
|
||||
import org.jeecg.modules.appmana.utils.Iotutils;
|
||||
import org.jeecg.modules.mqtt.MqttService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
|
@ -52,7 +50,9 @@ public class IotCommonP3ServiceImpl {
|
|||
@Autowired
|
||||
@Lazy
|
||||
private SurvConfigServiceImpl survConfigService;
|
||||
|
||||
@Lazy
|
||||
@Autowired(required = false)
|
||||
private MqttService mqttService;
|
||||
|
||||
/**
|
||||
* 物联网设备统计
|
||||
|
|
@ -708,4 +708,25 @@ public class IotCommonP3ServiceImpl {
|
|||
|
||||
return voHisResult;
|
||||
}
|
||||
|
||||
|
||||
public boolean sendMqttCmd(SurvDeviceDeploy deploy, SurvDeviceDeployRelay relay,String ops){
|
||||
if(deploy!=null){
|
||||
String cmds = "";
|
||||
String fieldName = relay.getEntityField();
|
||||
if (IotConstants.DEVICE_CLOSE.equals(ops)) {//关逻辑
|
||||
cmds = relay.getRegisterCmdOn();
|
||||
} else if (IotConstants.DEVICE_ON.equals(ops)) {//开逻辑
|
||||
cmds = relay.getRegisterCmdOff();
|
||||
} else if (IotConstants.DEVICE_STOP.equals(ops)) {//停逻辑
|
||||
cmds = relay.getRegisterCmdStop();
|
||||
}
|
||||
|
||||
switch (deploy.getProtocolCode()){
|
||||
// mqttService
|
||||
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -47,6 +49,10 @@ public class SurvDeviceDeployRelayServiceImpl extends ServiceImpl<SurvDeviceDepl
|
|||
@Autowired
|
||||
@Lazy
|
||||
private SurvConfigServiceImpl configService;
|
||||
private static final AtomicInteger counter = new AtomicInteger(0);
|
||||
private static final DateTimeFormatter FORMATTER =
|
||||
DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
|
||||
.withZone(ZoneId.systemDefault());
|
||||
|
||||
@Override
|
||||
public boolean syncRelays(List<String> list) {
|
||||
|
|
@ -302,4 +308,44 @@ public class SurvDeviceDeployRelayServiceImpl extends ServiceImpl<SurvDeviceDepl
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SurvDeviceDeployRelay> initCmd(List<SurvDeviceDeployRelay> relayList) {
|
||||
List<SurvDeviceDeployRelay> re = new ArrayList<>();
|
||||
if(relayList!=null && !relayList.isEmpty()){
|
||||
for (SurvDeviceDeployRelay survDeviceDeployRelay : relayList) {
|
||||
survDeviceDeployRelay.setRegisterCmdOn(completeCmd(survDeviceDeployRelay.getRegisterCmdOn()));
|
||||
survDeviceDeployRelay.setRegisterCmdOff(completeCmd(survDeviceDeployRelay.getRegisterCmdOff()));
|
||||
survDeviceDeployRelay.setRegisterCmdStop(completeCmd(survDeviceDeployRelay.getRegisterCmdStop()));
|
||||
re.add(survDeviceDeployRelay);
|
||||
}
|
||||
}
|
||||
return re;
|
||||
}
|
||||
|
||||
|
||||
private String completeCmd(String cmdStr){
|
||||
String cmds = "";
|
||||
if(StringUtils.isNotBlank(cmdStr)){
|
||||
cmds = String.format(cmdStr,generate());
|
||||
}
|
||||
return cmds;
|
||||
}
|
||||
|
||||
/**
|
||||
* 线程安全的高并发版本
|
||||
*/
|
||||
public static String generate() {
|
||||
// 1. 生成时间戳部分
|
||||
String timestamp = FORMATTER.format(Instant.now());
|
||||
|
||||
// 2. 生成4位随机数(使用AtomicInteger保证线程安全)
|
||||
int random = counter.incrementAndGet() % 10000;
|
||||
if (random < 0) {
|
||||
random = -random;
|
||||
}
|
||||
String randomStr = String.format("%04d", random);
|
||||
|
||||
return timestamp + randomStr;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,4 +41,10 @@ public class SurvDeviceDeployRelaygroupServiceImpl extends ServiceImpl<SurvDevic
|
|||
return list;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public List<SurvDeviceDeployRelaygroup> getRelayByGroup(String deployId) {
|
||||
return baseMapper.getRelayByGroup(deployId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,64 @@
|
|||
package org.jeecg.modules.appmana.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelaygroup;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRun;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRungroup;
|
||||
import org.jeecg.modules.appmana.mapper.SurvDeviceDeployRunMapper;
|
||||
import org.jeecg.modules.appmana.service.ISurvDeviceDeployRunService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Service
|
||||
public class SurvDeviceDeployRunServiceImpl extends ServiceImpl<SurvDeviceDeployRunMapper, SurvDeviceDeployRun> implements ISurvDeviceDeployRunService {
|
||||
|
||||
@Autowired
|
||||
@Lazy
|
||||
private SurvConfigServiceImpl configService;
|
||||
@Autowired
|
||||
@Lazy
|
||||
private SurvDeviceDeployRungroupServiceImpl rungroupService;
|
||||
|
||||
@Override
|
||||
public List<SurvDeviceDeployRun> listByDeploy(String deployId) {
|
||||
List<SurvDeviceDeployRun> list = lambdaQuery()
|
||||
.eq(SurvDeviceDeployRun::getDeployId,deployId)
|
||||
.orderByAsc(SurvDeviceDeployRun::getSortNo)
|
||||
.orderByDesc(SurvDeviceDeployRun::getCreateTime)
|
||||
.list();
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fills(List<SurvDeviceDeployRun> pageList) {
|
||||
if(pageList!=null && !pageList.isEmpty()){
|
||||
Map<String,String> typeMaps = configService.getDictMapByCode("iot_run_type");
|
||||
Map<String,String> cateMaps = configService.getDictMapByCode("iot_run_cate");
|
||||
List<SurvDeviceDeployRungroup> relaygroups = rungroupService.groupList(pageList.get(0).getDeployId());
|
||||
Map<String,String> groupMaps = new HashMap<>();
|
||||
if(!relaygroups.isEmpty()){
|
||||
relaygroups.forEach(item->groupMaps.put(item.getId(),item.getGroupName()));
|
||||
}
|
||||
|
||||
for (SurvDeviceDeployRun survDeviceDeployRun : pageList) {
|
||||
survDeviceDeployRun.setRunCateName(cateMaps.get(survDeviceDeployRun.getRunCate()+""));
|
||||
survDeviceDeployRun.setRunTypeName(typeMaps.get(survDeviceDeployRun.getRunType()+""));
|
||||
survDeviceDeployRun.setGroupNameStr(groupMaps.get(survDeviceDeployRun.getGroupId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package org.jeecg.modules.appmana.service.impl;
|
||||
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRungroup;
|
||||
import org.jeecg.modules.appmana.mapper.SurvDeviceDeployRungroupMapper;
|
||||
import org.jeecg.modules.appmana.service.ISurvDeviceDeployRungroupService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态分组
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Service
|
||||
public class SurvDeviceDeployRungroupServiceImpl extends ServiceImpl<SurvDeviceDeployRungroupMapper, SurvDeviceDeployRungroup> implements ISurvDeviceDeployRungroupService {
|
||||
|
||||
public List<SurvDeviceDeployRungroup> groupList(String deployId) {
|
||||
List<SurvDeviceDeployRungroup> list = lambdaQuery()
|
||||
.eq(SurvDeviceDeployRungroup::getIsEnable,1)
|
||||
.eq(SurvDeviceDeployRungroup::getDeployId,deployId)
|
||||
.list();
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ import org.springframework.format.annotation.DateTimeFormat;
|
|||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: 继电器分组
|
||||
|
|
@ -101,4 +102,7 @@ public class SurvDeviceDeployRelaygroup implements Serializable {
|
|||
|
||||
@TableField(exist = false)
|
||||
private String groupTypeName;
|
||||
|
||||
@TableField(exist = false)
|
||||
private List<SurvDeviceDeployRelay> relayList;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,149 @@
|
|||
package org.jeecg.common.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Date;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.06
|
||||
*/
|
||||
@Data
|
||||
@TableName("surv_device_deploy_run")
|
||||
@Accessors(chain = true)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@ApiModel(value="surv_device_deploy_run对象", description="运行状态")
|
||||
public class SurvDeviceDeployRun implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**主键*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键")
|
||||
private java.lang.String id;
|
||||
/**设备ID*/
|
||||
@Excel(name = "设备ID", width = 15)
|
||||
@ApiModelProperty(value = "设备ID")
|
||||
private java.lang.String deployId;
|
||||
/**类别,1=普通*/
|
||||
@Excel(name = "类别,1=普通", width = 15)
|
||||
@ApiModelProperty(value = "类别,1=普通")
|
||||
private java.lang.Integer runCate;
|
||||
/**1=工作运行状态*/
|
||||
@Excel(name = "1=工作运行状态", width = 15)
|
||||
@ApiModelProperty(value = "1=工作运行状态")
|
||||
private java.lang.Integer runType;
|
||||
/**状态key/编号*/
|
||||
@Excel(name = "状态key/编号", width = 15)
|
||||
@ApiModelProperty(value = "状态key/编号")
|
||||
private java.lang.String runKey;
|
||||
/**状态名称*/
|
||||
@Excel(name = "状态名称", width = 15)
|
||||
@ApiModelProperty(value = "状态名称")
|
||||
private java.lang.String runName;
|
||||
/**状态备注*/
|
||||
@Excel(name = "状态备注", width = 15)
|
||||
@ApiModelProperty(value = "状态备注")
|
||||
private java.lang.String relayNotes;
|
||||
/**状态标记*/
|
||||
@Excel(name = "状态标记", width = 15)
|
||||
@ApiModelProperty(value = "状态标记")
|
||||
private java.lang.String relayMark;
|
||||
/**回执状态开*/
|
||||
@Excel(name = "回执状态开", width = 15)
|
||||
@ApiModelProperty(value = "回执状态开")
|
||||
private java.lang.String registerOn;
|
||||
/**回执状态关*/
|
||||
@Excel(name = "回执状态关", width = 15)
|
||||
@ApiModelProperty(value = "回执状态关")
|
||||
private java.lang.String registerOff;
|
||||
/**回执状态停*/
|
||||
@Excel(name = "回执状态停", width = 15)
|
||||
@ApiModelProperty(value = "回执状态停")
|
||||
private java.lang.String registerStop;
|
||||
/**是否启用*/
|
||||
@Excel(name = "是否启用", width = 15)
|
||||
@ApiModelProperty(value = "是否启用")
|
||||
private java.lang.Integer isEnable;
|
||||
/**分组ID*/
|
||||
@Excel(name = "分组ID", width = 15)
|
||||
@ApiModelProperty(value = "分组ID")
|
||||
private java.lang.String groupId;
|
||||
/**分组CODE*/
|
||||
@Excel(name = "分组CODE", width = 15)
|
||||
@ApiModelProperty(value = "分组CODE")
|
||||
private java.lang.String groupCode;
|
||||
/**分组名称*/
|
||||
@Excel(name = "分组名称", width = 15)
|
||||
@ApiModelProperty(value = "分组名称")
|
||||
private java.lang.String groupName;
|
||||
/**排序号*/
|
||||
@Excel(name = "排序号", width = 15)
|
||||
@ApiModelProperty(value = "排序号")
|
||||
private java.lang.Integer sortNo;
|
||||
/**租户号*/
|
||||
@Excel(name = "租户号", width = 15)
|
||||
@ApiModelProperty(value = "租户号")
|
||||
private java.lang.String tenantId;
|
||||
/**乐观锁*/
|
||||
@Excel(name = "乐观锁", width = 15)
|
||||
@ApiModelProperty(value = "乐观锁")
|
||||
private java.lang.Integer reVision;
|
||||
/**创建人*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private java.lang.String createBy;
|
||||
/**创建时间*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private java.util.Date createTime;
|
||||
/**更新人*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private java.lang.String updateBy;
|
||||
/**逻辑删除*/
|
||||
@Excel(name = "逻辑删除", width = 15)
|
||||
@ApiModelProperty(value = "逻辑删除")
|
||||
private java.lang.Integer isDel;
|
||||
/**更新时间*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private java.util.Date updateTime;
|
||||
/**乐观锁*/
|
||||
@Excel(name = "乐观锁", width = 15)
|
||||
@ApiModelProperty(value = "乐观锁")
|
||||
private java.lang.Integer revision;
|
||||
|
||||
/**
|
||||
* 分组名称
|
||||
*/
|
||||
@ApiModelProperty(value = "分组名称")
|
||||
@TableField(exist = false)
|
||||
private String groupNameStr;
|
||||
|
||||
/**
|
||||
* 运行种类
|
||||
*/
|
||||
@ApiModelProperty(value = "运行种类")
|
||||
@TableField(exist = false)
|
||||
private String runTypeName;
|
||||
|
||||
/**
|
||||
* 运行类别
|
||||
*/
|
||||
@ApiModelProperty(value = "运行类别")
|
||||
@TableField(exist = false)
|
||||
private String runCateName;
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
package org.jeecg.common.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Date;
|
||||
import java.math.BigDecimal;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import lombok.Data;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* @Description: 运行状态分组
|
||||
* @Author: jeecg-boot
|
||||
* @Date: 2026-03-30
|
||||
* @Version: V1.06
|
||||
*/
|
||||
@Data
|
||||
@TableName("surv_device_deploy_rungroup")
|
||||
@Accessors(chain = true)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@ApiModel(value="surv_device_deploy_rungroup对象", description="运行状态分组")
|
||||
public class SurvDeviceDeployRungroup implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**主键*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
@ApiModelProperty(value = "主键")
|
||||
private java.lang.String id;
|
||||
/**设备id*/
|
||||
@Excel(name = "设备id", width = 15)
|
||||
@ApiModelProperty(value = "设备id")
|
||||
private java.lang.String deployId;
|
||||
/**分组类型;button=按钮,switch=两开关,shifter=三开关*/
|
||||
@Excel(name = "分组类型;button=按钮,switch=两开关,shifter=三开关", width = 15)
|
||||
@ApiModelProperty(value = "分组类型;button=按钮,switch=两开关,shifter=三开关")
|
||||
private java.lang.String groupType;
|
||||
/**分组名称*/
|
||||
@Excel(name = "分组名称", width = 15)
|
||||
@ApiModelProperty(value = "分组名称")
|
||||
private java.lang.String groupName;
|
||||
/**分组备注*/
|
||||
@Excel(name = "分组备注", width = 15)
|
||||
@ApiModelProperty(value = "分组备注")
|
||||
private java.lang.String groupNotes;
|
||||
/**序号*/
|
||||
@Excel(name = "序号", width = 15)
|
||||
@ApiModelProperty(value = "序号")
|
||||
private java.lang.Integer sortNo;
|
||||
/**是否启用*/
|
||||
@Excel(name = "是否启用", width = 15)
|
||||
@ApiModelProperty(value = "是否启用")
|
||||
private java.lang.Integer isEnable;
|
||||
/**租户号*/
|
||||
@Excel(name = "租户号", width = 15)
|
||||
@ApiModelProperty(value = "租户号")
|
||||
private java.lang.String tenantId;
|
||||
/**乐观锁*/
|
||||
@Excel(name = "乐观锁", width = 15)
|
||||
@ApiModelProperty(value = "乐观锁")
|
||||
private java.lang.Integer reVision;
|
||||
/**创建人*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private java.lang.String createBy;
|
||||
/**创建时间*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private java.util.Date createTime;
|
||||
/**更新人*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private java.lang.String updateBy;
|
||||
/**逻辑删除*/
|
||||
@Excel(name = "逻辑删除", width = 15)
|
||||
@ApiModelProperty(value = "逻辑删除")
|
||||
private java.lang.Integer isDel;
|
||||
/**更新时间*/
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private java.util.Date updateTime;
|
||||
}
|
||||
|
|
@ -226,4 +226,8 @@ public class SurvIotVirtualDeviceModule implements Serializable {
|
|||
@TableField(exist = false)
|
||||
@ApiModelProperty("设备状态,-1=获取失败,0=关闭,1=开启,2=异常")
|
||||
private String moduleStatus;
|
||||
|
||||
|
||||
@TableField(exist = false)
|
||||
private String value="";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
package org.jeecg.common.iot.common;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DeviceRunTypeVo {
|
||||
private String runTypeName;
|
||||
private String runType;
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package org.jeecg.common.vo.iot.common;
|
||||
|
||||
import lombok.Data;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelay;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRelaygroup;
|
||||
import org.jeecg.common.entity.SurvDeviceDeployRun;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DeviceRelayVo {
|
||||
/**
|
||||
* 控制项列表
|
||||
*/
|
||||
private List<SurvDeviceDeployRelaygroup> moduleList;
|
||||
/**
|
||||
* 控制项列表(无分组)
|
||||
*/
|
||||
private List<SurvDeviceDeployRelay> relayList;
|
||||
/**
|
||||
* 设备运行参数状态
|
||||
*/
|
||||
private List<SurvDeviceDeployRun> runStatus;
|
||||
/**
|
||||
* 最新数据时间
|
||||
*/
|
||||
private String dateTime;
|
||||
}
|
||||
Loading…
Reference in New Issue