Browse Source

一级大屏+二级大屏折线图

liuwj 2 years ago
parent
commit
fa3ef1e117
50 changed files with 2921 additions and 28 deletions
  1. 2 1
      itdmServer/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  2. 3 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataHistory/mapper/ItdmWenxiangMapper.java
  3. 35 1
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataHistory/mapper/xml/ItdmWenxiangMapper.xml
  4. 177 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/controller/ItdmAlarmNowController.java
  5. 96 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/entity/ItdmAlarmNow.java
  6. 5 4
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/entity/ItdmEnvironmentQuyuNow.java
  7. 17 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/mapper/ItdmAlarmNowMapper.java
  8. 5 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/mapper/xml/ItdmAlarmNowMapper.xml
  9. 14 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/service/IItdmAlarmNowService.java
  10. 19 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/service/impl/ItdmAlarmNowServiceImpl.java
  11. 2 2
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDevice/entity/ItdmDevice.java
  12. 177 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/controller/ItdmDeviceStartController.java
  13. 28 20
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmgongdanshuju/entity/ItdmPeizhi.java
  14. 17 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/mapper/ItdmDeviceStartMapper.java
  15. 5 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/mapper/xml/ItdmDeviceStartMapper.xml
  16. 13 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/service/IItdmDeviceStartService.java
  17. 19 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/service/impl/ItdmDeviceStartServiceImpl.java
  18. 406 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmGongDan/dto/ItdmXMJLQueryListDTO.java
  19. 208 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/component/WebSocketSecondScreenServer.java
  20. 187 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/component/WebSocketServer2.java
  21. 68 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/config/CronTaskRegistrar.java
  22. 25 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/config/SchedulingConfig.java
  23. 33 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/controller/ASecondScreenChushihuaController.java
  24. 74 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/controller/CeshiController.java
  25. 32 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/controller/ItdmVoiceController.java
  26. 24 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmAlarmNowConvert.java
  27. 26 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmDeviceConvert.java
  28. 23 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmDeviceStartConvert.java
  29. 21 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmVoiceConvert.java
  30. 20 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmWenxiangNowConvert.java
  31. 26 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/TongyongDataVOConvert.java
  32. 17 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/dto/SocketSendData.java
  33. 49 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/entity/ItdmLixueNow.java
  34. 9 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/service/IASecondScreenService.java
  35. 91 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/service/impl/ASecondScreenServiceImpl.java
  36. 216 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/DemoTask2.java
  37. 22 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/ScheduledTask.java
  38. 80 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/SchedulingRunnable.java
  39. 43 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/SecondScreenTask.java
  40. 72 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/util/EncoderClassListVo.java
  41. 52 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/util/EncoderClassVo.java
  42. 146 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/util/SpringUtils.java
  43. 18 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ASecondScreenVO.java
  44. 21 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/AZhexianDataVO.java
  45. 63 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmAlarmNowWSVO.java
  46. 47 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmDeviceRepairAlarmListVO.java
  47. 44 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmDeviceWSVO.java
  48. 27 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmVoiceWSVO.java
  49. 49 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmWenxiangNowWSVO.java
  50. 48 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/TongyongDataVO.java

+ 2 - 1
itdmServer/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java

@@ -132,7 +132,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/jmreport/**", "anon");
         filterChainDefinitionMap.put("/**/*.js.map", "anon");
         filterChainDefinitionMap.put("/**/*.css.map", "anon");
-        
+
         //大屏模板例子
         filterChainDefinitionMap.put("/test/bigScreen/**", "anon");
         filterChainDefinitionMap.put("/bigscreen/template1/**", "anon");
@@ -146,6 +146,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/newsWebsocket/**", "anon");//CMS模块
         filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTable无痕刷新示例
 
+        filterChainDefinitionMap.put("/itdmWebsocket/**", "anon");//大屏
 
         //性能监控,放开排除会存在安全漏洞泄露TOEKN(durid连接池也有)
         //filterChainDefinitionMap.put("/actuator/**", "anon");

+ 3 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataHistory/mapper/ItdmWenxiangMapper.java

@@ -14,4 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ItdmWenxiangMapper extends BaseMapper<ItdmWenxiang> {
 
+    /**折线图*/
+    List<ItdmWenxiang> selectWXGraphList(String deviceId);
+
 }

+ 35 - 1
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataHistory/mapper/xml/ItdmWenxiangMapper.xml

@@ -2,4 +2,38 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.itdmDataHistory.mapper.ItdmWenxiangMapper">
 
-</mapper>
+    <resultMap type="org.jeecg.modules.itdmDataHistory.entity.ItdmWenxiang" id="WXGraphResult">
+        <result property="id"    column="id"    />
+        <result property="deviceId"    column="device_id"    />
+        <result property="deviceName"    column="device_name"    />
+        <result property="deviceNo"    column="device_no"    />
+        <result property="temperature"    column="temperature"    />
+        <result property="temperatureMax"    column="temperature_max"    />
+        <result property="temperatureMin"    column="temperature_min"    />
+        <result property="temperatureAlarm"    column="temperature_alarm"    />
+        <result property="humidity"    column="humidity"    />
+        <result property="humidityMax"    column="humidity_max"    />
+        <result property="humidityMin"    column="humidity_min"    />
+        <result property="humidityAlarm"    column="humidity_alarm"    />
+        <result property="currentA"    column="current_a"    />
+        <result property="currentAMax"    column="current_a_max"    />
+        <result property="currentAMin"    column="current_a_min"    />
+        <result property="currentAAlarm"    column="current_a_alarm"    />
+        <result property="currentB"    column="current_b"    />
+        <result property="currentBMax"    column="current_b_max"    />
+        <result property="currentBMin"    column="current_b_min"    />
+        <result property="currentBAlarm"    column="current_b_alarm"    />
+        <result property="currentC"    column="current_c"    />
+        <result property="currentCMax"    column="current_c_max"    />
+        <result property="currentCMin"    column="current_c_min"    />
+        <result property="currentCAlarm"    column="current_c_alarm"    />
+        <result property="createTime"    column="create_time"    />
+    </resultMap>
+
+
+    <select id="selectWXGraphList" parameterType="java.lang.String" resultMap="WXGraphResult">
+        select * from itdm_wenxiang
+        where device_id = #{deviceId} and create_time &gt;= DATE_SUB(date_format(now(),'%Y-%m-%d %T'),INTERVAL 1 DAY )
+    </select>
+
+</mapper>

+ 177 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/controller/ItdmAlarmNowController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.itdmDataNow.controller;
+
+import java.util.Arrays;
+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 org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.itdmDataNow.entity.ItdmAlarmNow;
+import org.jeecg.modules.itdmDataNow.service.IItdmAlarmNowService;
+
+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;
+
+ /**
+ * @Description: itdm_alarm_now
+ * @Author: jeecg-boot
+ * @Date:   2023-06-02
+ * @Version: V1.0
+ */
+@Api(tags="itdm_alarm_now")
+@RestController
+@RequestMapping("/itdmDataNow/itdmAlarmNow")
+@Slf4j
+public class ItdmAlarmNowController extends JeecgController<ItdmAlarmNow, IItdmAlarmNowService> {
+	@Autowired
+	private IItdmAlarmNowService itdmAlarmNowService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param itdmAlarmNow
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "itdm_alarm_now-分页列表查询")
+	@ApiOperation(value="itdm_alarm_now-分页列表查询", notes="itdm_alarm_now-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ItdmAlarmNow>> queryPageList(ItdmAlarmNow itdmAlarmNow,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ItdmAlarmNow> queryWrapper = QueryGenerator.initQueryWrapper(itdmAlarmNow, req.getParameterMap());
+		Page<ItdmAlarmNow> page = new Page<ItdmAlarmNow>(pageNo, pageSize);
+		IPage<ItdmAlarmNow> pageList = itdmAlarmNowService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param itdmAlarmNow
+	 * @return
+	 */
+	@AutoLog(value = "itdm_alarm_now-添加")
+	@ApiOperation(value="itdm_alarm_now-添加", notes="itdm_alarm_now-添加")
+	//@RequiresPermissions("org.jeecg.modules:itdm_alarm_now:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody ItdmAlarmNow itdmAlarmNow) {
+		itdmAlarmNowService.save(itdmAlarmNow);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param itdmAlarmNow
+	 * @return
+	 */
+	@AutoLog(value = "itdm_alarm_now-编辑")
+	@ApiOperation(value="itdm_alarm_now-编辑", notes="itdm_alarm_now-编辑")
+	//@RequiresPermissions("org.jeecg.modules:itdm_alarm_now:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody ItdmAlarmNow itdmAlarmNow) {
+		itdmAlarmNowService.updateById(itdmAlarmNow);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "itdm_alarm_now-通过id删除")
+	@ApiOperation(value="itdm_alarm_now-通过id删除", notes="itdm_alarm_now-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:itdm_alarm_now:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		itdmAlarmNowService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "itdm_alarm_now-批量删除")
+	@ApiOperation(value="itdm_alarm_now-批量删除", notes="itdm_alarm_now-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:itdm_alarm_now:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.itdmAlarmNowService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "itdm_alarm_now-通过id查询")
+	@ApiOperation(value="itdm_alarm_now-通过id查询", notes="itdm_alarm_now-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<ItdmAlarmNow> queryById(@RequestParam(name="id",required=true) String id) {
+		ItdmAlarmNow itdmAlarmNow = itdmAlarmNowService.getById(id);
+		if(itdmAlarmNow==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(itdmAlarmNow);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param itdmAlarmNow
+    */
+    //@RequiresPermissions("org.jeecg.modules:itdm_alarm_now:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ItdmAlarmNow itdmAlarmNow) {
+        return super.exportXls(request, itdmAlarmNow, ItdmAlarmNow.class, "itdm_alarm_now");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("itdm_alarm_now:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, ItdmAlarmNow.class);
+    }
+
+}

+ 96 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/entity/ItdmAlarmNow.java

@@ -0,0 +1,96 @@
+package org.jeecg.modules.itdmDataNow.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 org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: itdm_alarm_now
+ * @Author: jeecg-boot
+ * @Date:   2023-06-02
+ * @Version: V1.0
+ */
+@Data
+@TableName("itdm_alarm_now")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="itdm_alarm_now对象", description="itdm_alarm_now")
+public class ItdmAlarmNow implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**实时报警id*/
+    @ApiModelProperty(value = "实时报警id")
+    private java.lang.Integer id;
+	/**创建人*/
+    @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;
+	/**更新日期*/
+	@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;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**设备id*/
+	@Excel(name = "设备id", width = 15, dictTable = "itdm_device", dicText = "device_name", dicCode = "id")
+	@Dict(dictTable = "itdm_device", dicText = "device_name", dicCode = "id")
+    @ApiModelProperty(value = "设备id")
+    private java.lang.String deviceId;
+	/**设备名称*/
+	@Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+	/**设备类型*/
+	@Excel(name = "设备类型", width = 15)
+    @ApiModelProperty(value = "设备类型")
+    private java.lang.String deviceType;
+	/**数据类型*/
+	@Excel(name = "数据类型", width = 15)
+    @ApiModelProperty(value = "数据类型")
+    private java.lang.String valueType;
+	/**数据状态,0正常1报警*/
+	@Excel(name = "数据状态,0正常1报警", width = 15, dicCode = "data_status")
+	@Dict(dicCode = "data_status")
+    @ApiModelProperty(value = "数据状态,0正常1报警")
+    private java.lang.Integer dataStatus;
+	/**数据实时值*/
+	@Excel(name = "数据实时值", width = 15)
+    @ApiModelProperty(value = "数据实时值")
+    private java.math.BigDecimal value;
+	/**数据上限*/
+	@Excel(name = "数据上限", width = 15)
+    @ApiModelProperty(value = "数据上限")
+    private java.math.BigDecimal maxValue;
+	/**数据下限*/
+	@Excel(name = "数据下限", width = 15)
+    @ApiModelProperty(value = "数据下限")
+    private java.math.BigDecimal minValue;
+	/**是否语音播报,0关闭1开启*/
+	@Excel(name = "是否语音播报,0关闭1开启", width = 15, dicCode = "voice_status")
+	@Dict(dicCode = "voice_status")
+    @ApiModelProperty(value = "是否语音播报,0关闭1开启")
+    private java.lang.Integer voiceStatus;
+}

+ 5 - 4
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/entity/ItdmEnvironmentQuyuNow.java

@@ -48,13 +48,14 @@ public class ItdmEnvironmentQuyuNow implements Serializable {
 	@Excel(name = "湿度", width = 15)
     @ApiModelProperty(value = "湿度")
     private java.math.BigDecimal humidity;
+    /**气压*/
+    @Excel(name = "气压", width = 15)
+    @ApiModelProperty(value = "气压")
+    private java.math.BigDecimal airPrassure;
 	/**采集时间*/
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern="yyyy-MM-dd")
     @ApiModelProperty(value = "采集时间")
     private java.util.Date createTime;
-	/**气压*/
-	@Excel(name = "气压", width = 15)
-    @ApiModelProperty(value = "气压")
-    private java.math.BigDecimal airPrassure;
+
 }

+ 17 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/mapper/ItdmAlarmNowMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.itdmDataNow.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.itdmDataNow.entity.ItdmAlarmNow;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: itdm_alarm_now
+ * @Author: jeecg-boot
+ * @Date:   2023-06-02
+ * @Version: V1.0
+ */
+public interface ItdmAlarmNowMapper extends BaseMapper<ItdmAlarmNow> {
+
+}

+ 5 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/mapper/xml/ItdmAlarmNowMapper.xml

@@ -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.itdmDataNow.mapper.ItdmAlarmNowMapper">
+
+</mapper>

+ 14 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/service/IItdmAlarmNowService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.itdmDataNow.service;
+
+import org.jeecg.modules.itdmDataNow.entity.ItdmAlarmNow;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: itdm_alarm_now
+ * @Author: jeecg-boot
+ * @Date:   2023-06-02
+ * @Version: V1.0
+ */
+public interface IItdmAlarmNowService extends IService<ItdmAlarmNow> {
+
+}

+ 19 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDataNow/service/impl/ItdmAlarmNowServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.itdmDataNow.service.impl;
+
+import org.jeecg.modules.itdmDataNow.entity.ItdmAlarmNow;
+import org.jeecg.modules.itdmDataNow.mapper.ItdmAlarmNowMapper;
+import org.jeecg.modules.itdmDataNow.service.IItdmAlarmNowService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: itdm_alarm_now
+ * @Author: jeecg-boot
+ * @Date:   2023-06-02
+ * @Version: V1.0
+ */
+@Service
+public class ItdmAlarmNowServiceImpl extends ServiceImpl<ItdmAlarmNowMapper, ItdmAlarmNow> implements IItdmAlarmNowService {
+
+}

+ 2 - 2
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDevice/entity/ItdmDevice.java

@@ -109,9 +109,9 @@ public class ItdmDevice implements Serializable {
     @ApiModelProperty(value = "设备运行标识")
     private java.lang.Integer biaoshi;
 	/**是否已维护*/
-	@Excel(name = "是否已维护", width = 15, dicCode = "is_repair")
+	@Excel(name = "是否已维护(0未维护1已维护)", width = 15, dicCode = "is_repair")
 	@Dict(dicCode = "is_repair")
-    @ApiModelProperty(value = "是否已维护")
+    @ApiModelProperty(value = "是否已维护(0未维护1已维护)")
     private java.lang.Integer isRepair;
 	/**设备树id*/
 	@Excel(name = "设备树id", width = 15)

+ 177 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/controller/ItdmDeviceStartController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.itdmDeviceStart.controller;
+
+import java.util.Arrays;
+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 org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.itdmDeviceStart.entity.ItdmDeviceStart;
+import org.jeecg.modules.itdmDeviceStart.service.IItdmDeviceStartService;
+
+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;
+
+ /**
+ * @Description: 设备启动缓冲表,用于设备启动报警
+ * @Author: jeecg-boot
+ * @Date:   2023-06-01
+ * @Version: V1.0
+ */
+@Api(tags="设备启动缓冲表,用于设备启动报警")
+@RestController
+@RequestMapping("/itdmDeviceStart/itdmDeviceStart")
+@Slf4j
+public class ItdmDeviceStartController extends JeecgController<ItdmDeviceStart, IItdmDeviceStartService> {
+	@Autowired
+	private IItdmDeviceStartService itdmDeviceStartService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param itdmDeviceStart
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "设备启动缓冲表,用于设备启动报警-分页列表查询")
+	@ApiOperation(value="设备启动缓冲表,用于设备启动报警-分页列表查询", notes="设备启动缓冲表,用于设备启动报警-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ItdmDeviceStart>> queryPageList(ItdmDeviceStart itdmDeviceStart,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ItdmDeviceStart> queryWrapper = QueryGenerator.initQueryWrapper(itdmDeviceStart, req.getParameterMap());
+		Page<ItdmDeviceStart> page = new Page<ItdmDeviceStart>(pageNo, pageSize);
+		IPage<ItdmDeviceStart> pageList = itdmDeviceStartService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param itdmDeviceStart
+	 * @return
+	 */
+	@AutoLog(value = "设备启动缓冲表,用于设备启动报警-添加")
+	@ApiOperation(value="设备启动缓冲表,用于设备启动报警-添加", notes="设备启动缓冲表,用于设备启动报警-添加")
+	//@RequiresPermissions("org.jeecg.modules:itdm_device_start:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody ItdmDeviceStart itdmDeviceStart) {
+		itdmDeviceStartService.save(itdmDeviceStart);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param itdmDeviceStart
+	 * @return
+	 */
+	@AutoLog(value = "设备启动缓冲表,用于设备启动报警-编辑")
+	@ApiOperation(value="设备启动缓冲表,用于设备启动报警-编辑", notes="设备启动缓冲表,用于设备启动报警-编辑")
+	//@RequiresPermissions("org.jeecg.modules:itdm_device_start:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody ItdmDeviceStart itdmDeviceStart) {
+		itdmDeviceStartService.updateById(itdmDeviceStart);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "设备启动缓冲表,用于设备启动报警-通过id删除")
+	@ApiOperation(value="设备启动缓冲表,用于设备启动报警-通过id删除", notes="设备启动缓冲表,用于设备启动报警-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:itdm_device_start:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		itdmDeviceStartService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "设备启动缓冲表,用于设备启动报警-批量删除")
+	@ApiOperation(value="设备启动缓冲表,用于设备启动报警-批量删除", notes="设备启动缓冲表,用于设备启动报警-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:itdm_device_start:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.itdmDeviceStartService.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<ItdmDeviceStart> queryById(@RequestParam(name="id",required=true) String id) {
+		ItdmDeviceStart itdmDeviceStart = itdmDeviceStartService.getById(id);
+		if(itdmDeviceStart==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(itdmDeviceStart);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param itdmDeviceStart
+    */
+    //@RequiresPermissions("org.jeecg.modules:itdm_device_start:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ItdmDeviceStart itdmDeviceStart) {
+        return super.exportXls(request, itdmDeviceStart, ItdmDeviceStart.class, "设备启动缓冲表,用于设备启动报警");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("itdm_device_start:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, ItdmDeviceStart.class);
+    }
+
+}

+ 28 - 20
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmgongdanshuju/entity/ItdmPeizhi.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.itdmgongdanshuju.entity;
+package org.jeecg.modules.itdmDeviceStart.entity;
 
 import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
@@ -11,29 +11,50 @@ 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 org.jeecg.common.aspect.annotation.Dict;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 /**
- * @Description: 系统配置
+ * @Description: 设备启动缓冲表,用于设备启动报警
  * @Author: jeecg-boot
- * @Date:   2023-05-18
+ * @Date:   2023-06-01
  * @Version: V1.0
  */
 @Data
-@TableName("itdm_peizhi")
+@TableName("itdm_device_start")
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
-@ApiModel(value="itdm_peizhi对象", description="系统配置")
-public class ItdmPeizhi implements Serializable {
+@ApiModel(value="itdm_device_start对象", description="设备启动缓冲表,用于设备启动报警")
+public class ItdmDeviceStart implements Serializable {
     private static final long serialVersionUID = 1L;
 
 	/**主键*/
-	@TableId(type = IdType.AUTO)
+	@TableId(type = IdType.ASSIGN_ID)
     @ApiModelProperty(value = "主键")
     private java.lang.String id;
+	/**设备id*/
+	@Excel(name = "设备id", width = 15, dictTable = "itdm_device", dicText = "device_name", dicCode = "id")
+	@Dict(dictTable = "itdm_device", dicText = "device_name", dicCode = "id")
+    @ApiModelProperty(value = "设备id")
+    private java.lang.String deviceId;
+	/**设备名称*/
+	@Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+	/**本次设备开始运行时间*/
+	@Excel(name = "本次设备开始运行时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@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 startTime;
+	/**数据状态(0未展示,1已展示)*/
+	@Excel(name = "数据状态(0未展示,1已展示)", width = 15)
+    @ApiModelProperty(value = "数据状态(0未展示,1已展示)")
+    private java.lang.Integer dataStatus;
 	/**创建人*/
     @ApiModelProperty(value = "创建人")
     private java.lang.String createBy;
@@ -53,17 +74,4 @@ public class ItdmPeizhi implements Serializable {
 	/**所属部门*/
     @ApiModelProperty(value = "所属部门")
     private java.lang.String sysOrgCode;
-	/**配置名称*/
-	//@Excel(name = "配置名称", width = 15)
-    @ApiModelProperty(value = "配置名称")
-    private java.lang.String peizhiName;
-	/**配置状态*/
-	//@Excel(name = "配置状态", width = 15, dicCode = "peizhi_state")
-	//@Dict(dicCode = "peizhi_state")
-    @ApiModelProperty(value = "配置状态")
-    private java.lang.Integer peizhiState;
-	/**备注*/
-	//@Excel(name = "备注", width = 15)
-    @ApiModelProperty(value = "备注")
-    private java.lang.String peizhiNotes;
 }

+ 17 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/mapper/ItdmDeviceStartMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.itdmDeviceStart.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.itdmDeviceStart.entity.ItdmDeviceStart;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 设备启动缓冲表,用于设备启动报警
+ * @Author: jeecg-boot
+ * @Date:   2023-06-01
+ * @Version: V1.0
+ */
+public interface ItdmDeviceStartMapper extends BaseMapper<ItdmDeviceStart> {
+
+}

+ 5 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/mapper/xml/ItdmDeviceStartMapper.xml

@@ -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.itdmDeviceStart.mapper.ItdmDeviceStartMapper">
+
+</mapper>

+ 13 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/service/IItdmDeviceStartService.java

@@ -0,0 +1,13 @@
+package org.jeecg.modules.itdmDeviceStart.service;
+
+import org.jeecg.modules.itdmDeviceStart.entity.ItdmDeviceStart;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 设备启动缓冲表,用于设备启动报警
+ * @Author: jeecg-boot
+ * @Date:   2023-06-01
+ * @Version: V1.0
+ */
+public interface IItdmDeviceStartService extends IService<ItdmDeviceStart> {
+}

+ 19 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmDeviceStart/service/impl/ItdmDeviceStartServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.itdmDeviceStart.service.impl;
+
+import org.jeecg.modules.itdmDeviceStart.entity.ItdmDeviceStart;
+import org.jeecg.modules.itdmDeviceStart.mapper.ItdmDeviceStartMapper;
+import org.jeecg.modules.itdmDeviceStart.service.IItdmDeviceStartService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 设备启动缓冲表,用于设备启动报警
+ * @Author: jeecg-boot
+ * @Date:   2023-06-01
+ * @Version: V1.0
+ */
+@Service
+public class ItdmDeviceStartServiceImpl extends ServiceImpl<ItdmDeviceStartMapper, ItdmDeviceStart> implements IItdmDeviceStartService {
+
+}

+ 406 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/itdmGongDan/dto/ItdmXMJLQueryListDTO.java

@@ -0,0 +1,406 @@
+package org.jeecg.modules.itdmGongDan.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.modules.itdmGongDan.entity.ItdmGongdanMaster;
+import org.jeecg.modules.itdmGongDan.entity.ItdmTestPlan;
+import org.jeecg.modules.itdmGongDan.vo.ItdmXMJLQueryListVO;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+public class ItdmXMJLQueryListDTO {
+    /**委托id*/
+    @Excel(name = "委托id", width = 15)
+    @ApiModelProperty(value = "委托id")
+    private String weituoId;
+    /**样品id*/
+    @Excel(name = "样品id", width = 15)
+    @ApiModelProperty(value = "样品id")
+    private String yangpinId;
+    /**检测项目id*/
+    @Excel(name = "检测项目id", width = 15)
+    @ApiModelProperty(value = "检测项目id")
+    private java.lang.String testItemsId;
+    /**检测项目*/
+    @Excel(name = "检测项目", width = 15)
+    @ApiModelProperty(value = "检测项目")
+    private String testItems;
+    /**试验计划id*/
+    @Excel(name = "试验计划id", width = 15)
+    @ApiModelProperty(value = "试验计划id")
+    private String testPlanId;
+    /**设备id*/
+    @Excel(name = "设备id", width = 15)
+    @ApiModelProperty(value = "设备id")
+    private java.lang.String shebeiId;
+    /**项目经理*/
+    @Excel(name = "项目经理", width = 15)
+    @ApiModelProperty(value = "项目经理")
+    private java.lang.String pm;
+    /**计划开始日期*/
+    @Excel(name = "计划开始日期", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "计划开始日期")
+    private Date jihuaStartDate;
+    /**计划结束日期*/
+    @Excel(name = "计划结束日期", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "计划结束日期")
+    private java.util.Date jihuaEndDate;
+    /**状态*/
+    @Excel(name = "状态", width = 15, dicCode = "test_plan_status")
+    @Dict(dicCode = "test_plan_status")
+    @ApiModelProperty(value = "状态")
+    private java.lang.Integer status;
+    /**报告编号*/
+    @Excel(name = "报告编号", width = 15)
+    @ApiModelProperty(value = "报告编号")
+    private java.lang.String reportNo;
+    /**传感器id*/
+    @Excel(name = "传感器id", width = 20)
+    @ApiModelProperty(value = "传感器id")
+    private java.lang.String chuanganqi;
+    /**委托编号*/
+    @Excel(name = "委托编号", width = 15)
+    @ApiModelProperty(value = "委托编号")
+    private String weituoNo;
+    /**样品名称*/
+    @Excel(name = "样品名称", width = 15)
+    @ApiModelProperty(value = "样品名称")
+    private java.lang.String sampleName;
+    /**设备名称*/
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+    /**父id*/
+    @Excel(name = "父id", width = 20)
+    @ApiModelProperty(value = "父id")
+    private java.lang.String parent;
+    /**持续时间*/
+    @Excel(name = "持续时间", width = 20)
+    @ApiModelProperty(value = "持续时间")
+    private java.lang.Integer lastTime;
+    /**试验类型*/
+    @Excel(name = "试验类型", width = 15)
+    @ApiModelProperty(value = "试验类型")
+    private java.lang.String shiiyanType;
+    /**试验员*/
+    @Excel(name = "试验员", width = 15)
+    @ApiModelProperty(value = "试验员")
+    private java.lang.String worker;
+    /**委托样品数量*/
+    @Excel(name = "委托样品数量", width = 15)
+    @ApiModelProperty(value = "委托样品数量")
+    private java.lang.Integer yangpinCount;
+    /**内容*/
+    @Excel(name = "内容", width = 15)
+    @ApiModelProperty(value = "内容")
+    private java.lang.String neirong;
+    /**status转化*/
+    @Excel(name = "status转化", width = 15)
+    @ApiModelProperty(value = "status转化")
+    private java.lang.String statusC;
+    /**实绩开始日期*/
+    @Excel(name = "实绩开始日期", width = 15, format = "yyyy-MM-dd")
+//    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-ddTHH:mm:SSSZ")
+    @DateTimeFormat(pattern="yyyy-MM-ddTHH:mm:SSSZ")
+    @ApiModelProperty(value = "实绩开始日期")
+    private java.util.Date shijiStartDate;
+    /**试验计划id或工单master的id*/
+    @Excel(name = "试验计划id或工单master的id", width = 15)
+    @ApiModelProperty(value = "试验计划id或工单master的id")
+    private String id;
+    /**传感器数组*/
+    @Excel(name = "传感器数组", width = 15)
+    @ApiModelProperty(value = "传感器数组")
+    private java.lang.String[] chuanganqiArray;
+    /**试验类型数组*/
+    @Excel(name = "试验类型数组", width = 15)
+    @ApiModelProperty(value = "试验类型数组")
+    private java.lang.String[] shiiyanTypeArray;
+
+
+    public String getWeituoId() {
+        return weituoId;
+    }
+
+    public void setWeituoId(String weituoId) {
+        this.weituoId = weituoId;
+    }
+
+    public String getYangpinId() {
+        return yangpinId;
+    }
+
+    public void setYangpinId(String yangpinId) {
+        this.yangpinId = yangpinId;
+    }
+
+    public String getTestItems() {
+        return testItems;
+    }
+
+    public void setTestItems(String testItems) {
+        this.testItems = testItems;
+    }
+
+    public String getShebeiId() {
+        return shebeiId;
+    }
+
+    public void setShebeiId(String shebeiId) {
+        this.shebeiId = shebeiId;
+    }
+
+    public String getPm() {
+        return pm;
+    }
+
+    public void setPm(String pm) {
+        this.pm = pm;
+    }
+
+    public String getWeituoNo() {
+        return weituoNo;
+    }
+
+    public void setWeituoNo(String weituoNo) {
+        this.weituoNo = weituoNo;
+    }
+
+    public String getSampleName() {
+        return sampleName;
+    }
+
+    public void setSampleName(String sampleName) {
+        this.sampleName = sampleName;
+    }
+
+    public String getDeviceName() {
+        return deviceName;
+    }
+
+    public void setDeviceName(String deviceName) {
+        this.deviceName = deviceName;
+    }
+
+    public Date getJihuaStartDate() {
+        return jihuaStartDate;
+    }
+
+    public void setJihuaStartDate(Date jihuaStartDate) {
+        this.jihuaStartDate = jihuaStartDate;
+    }
+
+    public Date getJihuaEndDate() {
+        return jihuaEndDate;
+    }
+
+    public void setJihuaEndDate(Date jihuaEndDate) {
+        this.jihuaEndDate = jihuaEndDate;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public String getReportNo() {
+        return reportNo;
+    }
+
+    public void setReportNo(String reportNo) {
+        this.reportNo = reportNo;
+    }
+
+    public String getChuanganqi() {
+        return chuanganqi;
+    }
+
+    public void setChuanganqi(String chuanganqi) {
+        this.chuanganqi = chuanganqi;
+    }
+
+    public String getParent() {
+        return parent;
+    }
+
+    public void setParent(String parent) {
+        this.parent = parent;
+    }
+
+    public String getTestPlanId() {
+        return testPlanId;
+    }
+
+    public void setTestPlanId(String testPlanId) {
+        this.testPlanId = testPlanId;
+    }
+
+    public String getTestItemsId() {
+        return testItemsId;
+    }
+
+    public void setTestItemsId(String testItemsId) {
+        this.testItemsId = testItemsId;
+    }
+
+    public Integer getLastTime() {
+        return lastTime;
+    }
+
+    public void setLastTime(Integer lastTime) {
+        this.lastTime = lastTime;
+    }
+
+
+    public String getShiiyanType() {
+        return shiiyanType;
+    }
+
+    public void setShiiyanType(String shiiyanType) {
+        this.shiiyanType = shiiyanType;
+    }
+
+    public String getWorker() {
+        return worker;
+    }
+
+    public void setWorker(String worker) {
+        this.worker = worker;
+    }
+
+    public Integer getYangpinCount() {
+        return yangpinCount;
+    }
+
+    public void setYangpinCount(Integer yangpinCount) {
+        this.yangpinCount = yangpinCount;
+    }
+
+    public String getNeirong() {
+        return neirong;
+    }
+
+    public void setNeirong(String neirong) {
+        this.neirong = neirong;
+    }
+
+    public String getStatusC() {
+        return statusC;
+    }
+
+    public void setStatusC(String statusC) {
+        this.statusC = statusC;
+    }
+    public Date getShijiStartDate() {
+        return shijiStartDate;
+    }
+
+    public void setShijiStartDate(Date shijiStartDate) {
+        this.shijiStartDate = shijiStartDate;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String[] getChuanganqiArray() {
+        return chuanganqiArray;
+    }
+
+    public void setChuanganqiArray(String[] chuanganqiArray) {
+        this.chuanganqiArray = chuanganqiArray;
+    }
+
+    public String[] getShiiyanTypeArray() {
+        return shiiyanTypeArray;
+    }
+
+    public void setShiiyanTypeArray(String[] shiiyanTypeArray) {
+        this.shiiyanTypeArray = shiiyanTypeArray;
+    }
+
+
+    /**
+     * 将二级对象转化为工单master,用于新增或修改
+     * */
+    public static ItdmGongdanMaster toItdmGongdanMaster(ItdmXMJLQueryListVO vo){
+        ItdmGongdanMaster m = new ItdmGongdanMaster();
+        m.setId(vo.getId());//如果用于新增,为空
+        m.setJihuaShiyanId(vo.getTestPlanId());
+        m.setTestItemsId(vo.getTestItemsId());
+        m.setWeituoYangpinId(vo.getYangpinId());
+        m.setShebeiId(vo.getShebeiId());
+        m.setShiiyanType(vo.getShiiyanType());
+        m.setWorker(vo.getWorker());
+        m.setYangpinCount(vo.getYangpinCount());
+
+        m.setStartDate(vo.getJihuaStartDate());
+        int lastTime = vo.getLastTime();//通过持续时间计算结束时间,注意开始时间2023-5-21,持续时间1,则结束时间为2023-5-21
+        Date endDate = new Date(vo.getJihuaStartDate().getTime() + (lastTime-1)*1000*3600*24);
+        m.setEndDate(endDate);
+
+        m.setShijiStartDate(vo.getShijiStartDate());//如果用于新增,为空
+        m.setNeirong(vo.getNeirong());
+
+        String[] arr = vo.getChuanganqiArray();
+        String chuanganqi = "";
+        for (int i = 0; i < arr.length; i++) {
+            if(i==0) chuanganqi = arr[i];
+            else chuanganqi = chuanganqi + ","+ arr[i];
+        }
+        m.setChuanganqi(chuanganqi);
+
+        String[] shiyanTypeArr = vo.getShiiyanTypeArray();
+        String shiyanType = "";
+        for (int i = 0; i < shiyanTypeArr.length; i++) {
+            if(i==0) shiyanType = shiyanTypeArr[i];
+            else shiyanType = shiyanType + ","+ shiyanTypeArr[i];
+        }
+        m.setShiiyanType(shiyanType);
+        return m;
+    }
+
+    /**转化成试验计划对象——项目经理修改试验计划*/
+    public static ItdmTestPlan toItdmTestPlan(ItdmXMJLQueryListVO vo){
+        ItdmTestPlan itdmTestPlan = new ItdmTestPlan();
+        itdmTestPlan.setId(vo.getTestPlanId());
+        itdmTestPlan.setWeituoId(vo.getWeituoId());
+        itdmTestPlan.setTestItemsId(vo.getTestItemsId());
+        itdmTestPlan.setWeituoYangpinId(vo.getYangpinId());
+        itdmTestPlan.setShebeiId(vo.getShebeiId());
+        itdmTestPlan.setPm(vo.getPm());
+
+        itdmTestPlan.setJihuaStartDate(vo.getJihuaStartDate());
+        int lastTime = vo.getLastTime();//通过持续时间计算结束时间,注意开始时间2023-5-21,持续时间1,则结束时间为2023-5-1
+        Date jihuaEndTime = new Date(vo.getJihuaStartDate().getTime() + (lastTime-1)*1000*3600*24);
+        itdmTestPlan.setJihuaEndDate(jihuaEndTime);
+
+        itdmTestPlan.setReportNo(vo.getReportNo());
+        itdmTestPlan.setChuanganqi(vo.getChuanganqi());
+        itdmTestPlan.setStatus(vo.getStatus());
+
+        String[] arr = vo.getChuanganqiArray();
+        String chuanganqi = "";
+        for (int i = 0; i < arr.length; i++) {
+            if(i==0) chuanganqi = arr[i];
+            else chuanganqi = chuanganqi + ","+ arr[i];
+        }
+        itdmTestPlan.setChuanganqi(chuanganqi);
+
+        return  itdmTestPlan;
+    }
+}

+ 208 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/component/WebSocketSecondScreenServer.java

@@ -0,0 +1,208 @@
+package org.jeecg.modules.largeScreen.component;
+
+import com.google.gson.Gson;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.modules.largeScreen.config.CronTaskRegistrar;
+import org.jeecg.modules.largeScreen.dto.SocketSendData;
+import org.jeecg.modules.largeScreen.task.SchedulingRunnable;
+import org.jeecg.modules.largeScreen.task.SecondScreenTask;
+import org.jeecg.modules.largeScreen.util.EncoderClassListVo;
+import org.jeecg.modules.largeScreen.util.EncoderClassVo;
+import org.jeecg.modules.largeScreen.util.SpringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * 二级大屏
+ * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
+ * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
+ */
+@Component
+@ServerEndpoint(value = "/itdmWebsocket/itdmSecondServer", encoders = {EncoderClassVo.class, EncoderClassListVo.class})
+public class WebSocketSecondScreenServer {
+
+    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
+    private static int onlineCount = 0;
+
+    //concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
+    private static CopyOnWriteArraySet<WebSocketSecondScreenServer> webSocketSet = new CopyOnWriteArraySet<WebSocketSecondScreenServer>();
+
+
+    private static ConcurrentHashMap<String, SchedulingRunnable> webSocketSet1 = new ConcurrentHashMap<String, SchedulingRunnable>();
+    //    private static String cabid = "";
+    //与某个客户端的连接会话,需要通过它来给客户端发送数据
+    private Session session;
+
+
+    public SecondScreenTask getDemoTask() {
+        return SpringUtils.getBean(SecondScreenTask.class);
+    }
+
+    public CronTaskRegistrar getCronTaskRegistrar() {
+        return SpringUtils.getBean(CronTaskRegistrar.class);
+    }
+
+
+    /**
+     * 连接建立成功调用的方法
+     *
+     * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
+     */
+    @OnOpen
+    public void onOpen(Session session) {
+        this.session = session;
+        webSocketSet.add(this);
+        addOnlineCount();           //在线数加1
+    }
+
+    /**
+     * 连接关闭调用的方法
+     */
+    @OnClose
+    public void onClose(Session session) {
+        webSocketSet.remove(this);
+
+        subOnlineCount();
+        if (webSocketSet1.get(session.getId()) != null) {
+            this.getCronTaskRegistrar().removeCronTask(webSocketSet1.get(session.getId()));
+        }
+
+    }
+
+    /**
+     * 收到客户端消息后调用的方法
+     *
+     * @param message 客户端发送过来的消息
+     */
+    @OnMessage
+    public void onMessage(String message, Session session) throws IOException, EncodeException {
+
+        System.out.println("来自客户端的消息:" + message);
+
+        Gson gson = new Gson();
+
+        SocketSendData stringMap = gson.fromJson(message, SocketSendData.class);
+        List<String> deviceIds = stringMap.getDeviceIds();
+        String id = deviceIds.get(0);
+        Integer day = stringMap.getDay();
+
+        if (StringUtils.isNotEmpty(message)) {
+            sendUser(this.getDemoTask().getList(id), session);
+            if (webSocketSet1.get(session.getId()) != null) {
+                this.getCronTaskRegistrar().removeCronTask(webSocketSet1.get(session.getId()));
+            }
+
+            SchedulingRunnable task = new SchedulingRunnable("sTask", "taskWithParamsListSecond",id,session);
+
+            this.getCronTaskRegistrar().addCronTask(task, "0/30 * * * * ?");
+            webSocketSet1.put(session.getId(), task);
+        }
+
+    }
+
+    /**
+     * 发生错误时调用
+     *
+     * @param session
+     * @param error
+     */
+    @OnError
+    public void onError (Session session, Throwable error){
+        System.out.println("发生错误");
+        error.printStackTrace();
+    }
+
+    /**
+     * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
+     *
+     * @param message
+     * @throws IOException
+     */
+    public void sendMessage (Object message) throws EncodeException, IOException {
+        this.session.getBasicRemote().sendObject(message);
+        //this.session.getAsyncRemote().sendText(message);
+    }
+
+
+    /**
+     * 暴露给外部的群发
+     *
+     * @param message
+     * @throws IOException
+     */
+
+    public void sendInfo (Object message) throws IOException {
+
+        sendAll(message);
+
+    }
+
+    /**
+     * 群发
+     *
+     * @param message
+     */
+
+
+    public void sendUser (Object message, Session session){
+
+        try {
+            session.getBasicRemote().sendObject(message);
+        } catch (EncodeException e) {
+            this.getCronTaskRegistrar().removeCronTask(webSocketSet1.get(session.getId()));
+            e.printStackTrace();
+        } catch (IOException e) {
+            this.getCronTaskRegistrar().removeCronTask(webSocketSet1.get(session.getId()));
+            e.printStackTrace();
+        }
+
+    }
+
+
+    private static void sendAll (Object message){
+
+        Arrays.asList(webSocketSet.toArray()).forEach(item -> {
+
+            WebSocketSecondScreenServer WebsocketServer = (WebSocketSecondScreenServer) item;
+
+            //群发
+
+            try {
+
+                WebsocketServer.sendMessage(message);
+
+            } catch (IOException e) {
+
+                e.printStackTrace();
+
+            } catch (EncodeException e) {
+
+                e.printStackTrace();
+
+            }
+
+        });
+
+    }
+
+
+    public static synchronized int getOnlineCount () {
+        return onlineCount;
+    }
+
+    public static synchronized void addOnlineCount () {
+        WebSocketSecondScreenServer.onlineCount++;
+    }
+
+    public static synchronized void subOnlineCount () {
+        WebSocketSecondScreenServer.onlineCount--;
+    }
+}
+

+ 187 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/component/WebSocketServer2.java

@@ -0,0 +1,187 @@
+package org.jeecg.modules.largeScreen.component;
+
+import org.jeecg.modules.largeScreen.config.CronTaskRegistrar;
+import org.jeecg.modules.largeScreen.task.DemoTask2;
+import org.jeecg.modules.largeScreen.task.SchedulingRunnable;
+import org.jeecg.modules.largeScreen.util.EncoderClassListVo;
+import org.jeecg.modules.largeScreen.util.SpringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
+ * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
+ */
+@Component
+@ServerEndpoint(value = "/itdmWebsocket/list2", encoders = {EncoderClassListVo.class})
+public class WebSocketServer2 {
+
+    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
+    private static int onlineCount = 0;
+
+    //concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
+    private static CopyOnWriteArraySet<WebSocketServer2> webSocketSet = new CopyOnWriteArraySet<WebSocketServer2>();
+
+
+    private static ConcurrentHashMap<String, SchedulingRunnable> webSocketSet1 = new ConcurrentHashMap<String, SchedulingRunnable>();
+    //    private static String cabid = "";
+    //与某个客户端的连接会话,需要通过它来给客户端发送数据
+    private Session session;
+
+    //改的地方
+    public DemoTask2 getDemoTask2() {
+        return SpringUtils.getBean(DemoTask2.class);
+    }
+
+    public CronTaskRegistrar getCronTaskRegistrar() {
+        return SpringUtils.getBean(CronTaskRegistrar.class);
+    }
+
+    /**
+     * 连接建立成功调用的方法
+     *
+     * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
+     */
+    @OnOpen
+    public void onOpen(Session session) {
+        this.session = session;
+        webSocketSet.add(this);
+
+        sendUser(this.getDemoTask2().chushihua(), session);
+
+        SchedulingRunnable task = new SchedulingRunnable("demoTask2", "taskWithParamsList", session);
+        addOnlineCount();//在线数加1
+        this.getCronTaskRegistrar().addCronTask(task, "0/30 * * * * ?");//30秒传一次数据
+        webSocketSet1.put(session.getId(), task);
+    }
+
+    /**
+     * 连接关闭调用的方法
+     */
+    @OnClose
+    public void onClose(Session session) {
+        webSocketSet.remove(this);
+        subOnlineCount();
+        this.getCronTaskRegistrar().removeCronTask(webSocketSet1.get(session.getId()));
+    }
+
+    /**
+     * 收到客户端消息后调用的方法
+     *
+     * @param message 客户端发送过来的消息
+     */
+    @OnMessage
+    public void onMessage(String message, Session session) throws IOException, EncodeException {
+
+        System.out.println("来自客户端的消息:" + message);
+
+    }
+
+    /**
+     * 发生错误时调用
+     *
+     * @param session
+     * @param error
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+        System.out.println("发生错误");
+        error.printStackTrace();
+    }
+
+    /**
+     * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
+     *
+     * @param message
+     * @throws IOException
+     */
+    public void sendMessage(Object message) throws EncodeException, IOException {
+        this.session.getBasicRemote().sendObject(message);
+        //this.session.getAsyncRemote().sendText(message);
+    }
+
+    /**
+     * 暴露给外部的群发
+     *
+     * @param message
+     * @throws IOException
+     */
+
+    public void sendInfo(Object message) throws IOException {
+
+        sendAll(message);
+
+    }
+
+    /**
+     * 群发
+     *
+     * @param message
+     */
+
+
+    public void sendUser(Object message, Session session) {
+
+        try {
+            session.getBasicRemote().sendObject(message);
+        } catch (EncodeException e) {
+            e.printStackTrace();
+            this.getCronTaskRegistrar().removeCronTask(webSocketSet1.get(session.getId()));
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            this.getCronTaskRegistrar().removeCronTask(webSocketSet1.get(session.getId()));
+
+        }
+
+    }
+
+
+    private static void sendAll(Object message) {
+
+        Arrays.asList(webSocketSet.toArray()).forEach(item -> {
+
+            WebSocketServer2 WebsocketServer = (WebSocketServer2) item;
+
+            //群发
+
+            try {
+
+                WebsocketServer.sendMessage(message);
+
+            } catch (IOException e) {
+
+                e.printStackTrace();
+
+            } catch (EncodeException e) {
+
+                e.printStackTrace();
+
+            }
+
+        });
+
+    }
+
+
+    public static synchronized int getOnlineCount() {
+        return onlineCount;
+    }
+
+    public static synchronized void addOnlineCount() {
+        WebSocketServer2.onlineCount++;
+    }
+
+    public static synchronized void subOnlineCount() {
+        WebSocketServer2.onlineCount--;
+    }
+
+}
+
+

+ 68 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/config/CronTaskRegistrar.java

@@ -0,0 +1,68 @@
+package org.jeecg.modules.largeScreen.config;
+
+import org.jeecg.modules.largeScreen.task.ScheduledTask;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.config.CronTask;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @program: simple-demo
+ * @description: 添加定时任务注册类,用来增加、删除定时任务。
+ * @author: CaoTing
+ * @date: 2019/5/23
+ **/
+@Component
+public class CronTaskRegistrar implements DisposableBean {
+    private final Map<Runnable, ScheduledTask> scheduledTasks = new ConcurrentHashMap<>(16);
+    @Autowired
+    @SuppressWarnings("all")
+    private TaskScheduler taskScheduler;
+
+    public TaskScheduler getScheduler() {
+        return this.taskScheduler;
+    }
+    /**
+     * 新增定时任务
+     * @param task
+     * @param cronExpression
+     */
+    public void addCronTask(Runnable task, String cronExpression) {
+        addCronTask(new CronTask(task, cronExpression));
+    }
+    public void addCronTask(CronTask cronTask) {
+        if (cronTask != null) {
+            Runnable task = cronTask.getRunnable();
+            if (this.scheduledTasks.containsKey(task)) {
+                removeCronTask(task);
+            }
+            this.scheduledTasks.put(task, scheduleCronTask(cronTask));
+        }
+    }
+    /**
+     * 移除定时任务
+     * @param task
+     */
+    public void removeCronTask(Runnable task) {
+        ScheduledTask scheduledTask = this.scheduledTasks.remove(task);
+        if (scheduledTask != null)
+            scheduledTask.cancel();
+    }
+    public ScheduledTask scheduleCronTask(CronTask cronTask) {
+        ScheduledTask scheduledTask = new ScheduledTask();
+        scheduledTask.future = this.taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger());
+        return scheduledTask;
+    }
+    @Override
+    public void destroy() {
+        for (ScheduledTask task : this.scheduledTasks.values()) {
+            task.cancel();
+        }
+        this.scheduledTasks.clear();
+    }
+}
+

+ 25 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/config/SchedulingConfig.java

@@ -0,0 +1,25 @@
+package org.jeecg.modules.largeScreen.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+/**
+ * @program: simple-demo
+ * @description: 定时任务配置类
+ * @author: CaoTing
+ * @date: 2019/5/23
+ **/
+@Configuration
+public class SchedulingConfig {
+    @Bean
+    public TaskScheduler taskScheduler() {
+        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+        // 定时任务执行线程池核心线程数
+        taskScheduler.setPoolSize(4);
+        taskScheduler.setRemoveOnCancelPolicy(true);
+        taskScheduler.setThreadNamePrefix("TaskSchedulerThreadPool-");
+        return taskScheduler;
+    }
+}

+ 33 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/controller/ASecondScreenChushihuaController.java

@@ -0,0 +1,33 @@
+package org.jeecg.modules.largeScreen.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.modules.largeScreen.service.impl.ASecondScreenServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+@Api(tags = ".二级大屏折线图初始化数据")
+@RequestMapping("/second/screen")
+public class ASecondScreenChushihuaController {
+
+
+    @Autowired
+    @SuppressWarnings("all")
+    private ASecondScreenServiceImpl secondScreenService;
+
+    /**
+     * 初始化数据(连接建立成功时调用)
+     * */
+    @GetMapping("/chushihua/{id}")
+    @ApiOperation("初始化数据")
+    public Map<String,Object> getList(@PathVariable("id")String id){
+        return secondScreenService.getList(id);
+    }
+
+}

+ 74 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/controller/CeshiController.java

@@ -0,0 +1,74 @@
+package org.jeecg.modules.largeScreen.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.itdmDataHistory.entity.ItdmWenxiang;
+import org.jeecg.modules.itdmDataHistory.mapper.ItdmWenxiangMapper;
+import org.jeecg.modules.itdmDevice.entity.ItdmDevice;
+import org.jeecg.modules.itdmDevice.service.IItdmDeviceService;
+import org.jeecg.modules.largeScreen.convert.ItdmDeviceConvert;
+import org.jeecg.modules.largeScreen.vo.ItdmDeviceRepairAlarmListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@Api(tags="测试设备维护预警列表")
+@RestController
+@RequestMapping("/ceshi/weihu")
+@Slf4j
+public class CeshiController {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IItdmDeviceService deviceService;
+    @Autowired
+    @SuppressWarnings("all")
+    private ItdmWenxiangMapper wenxiangMapper;
+
+    @ApiOperation(value="测试设备维护预警列表")
+    @GetMapping("/list")
+    public List<ItdmDeviceRepairAlarmListVO> ceshi(){
+
+        /**设备维护预警列表*/
+        ItdmDevice device = new ItdmDevice();
+        device.setIsRepair(0);//0未维护
+
+        QueryWrapper<ItdmDevice> wrapper  = new QueryWrapper<>(device);
+        wrapper.isNotNull("repair_time");
+        //维护时间小于等于当前时间+15天
+        Date afterNow15 = new Date(new Date().getTime() + 15*1000*3600*24);
+        wrapper.le("repair_time",afterNow15);
+
+        wrapper.orderByAsc("repair_time");
+        List<ItdmDevice> deviceList1 = deviceService.list(wrapper);
+
+        List<ItdmDeviceRepairAlarmListVO>  repairAlarmListVOList = deviceList1.stream().map(i->{
+            Date star = new Date();
+            Long starTime=star.getTime();
+            Long endTime=i.getRepairTime().getTime();
+            Long num=endTime-starTime;//时间戳相差的毫秒数
+            Integer day = Math.toIntExact(num / (24 * 60 * 60 * 1000));
+            return ItdmDeviceConvert.INSTANCE.toList(i,day);
+        }).collect(Collectors.toList());
+
+        return repairAlarmListVOList;
+    }
+
+
+    @ApiOperation(value="温箱折线图")
+    @GetMapping("/zxlist")
+    public List<ItdmWenxiang> getWXList(@RequestParam(value = "deviceId") String deviceId){
+        return wenxiangMapper.selectWXGraphList(deviceId);
+    }
+
+}

+ 32 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/controller/ItdmVoiceController.java

@@ -0,0 +1,32 @@
+package org.jeecg.modules.largeScreen.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.itdmDataNow.entity.ItdmAlarmNow;
+import org.jeecg.modules.itdmDataNow.service.IItdmAlarmNowService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags="单个关闭语音报警")
+@Slf4j
+@RestController
+@RequestMapping("/itdm/voice")
+public class ItdmVoiceController {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IItdmAlarmNowService alarmNowService;
+
+    @PostMapping("/delete")//"/delete/{deleteId}"
+    @ApiOperation("单个关闭语音报警)")//@PathVariable("deleteId")
+    public void deleteVoice(@RequestParam("deleteId") Integer deleteId, @RequestParam("alarmType")Integer alarmType){
+        if(alarmType==1){//设备实验数据异常报警
+            ItdmAlarmNow itdmAlarmNow = new ItdmAlarmNow();
+            itdmAlarmNow.setId(deleteId);
+            itdmAlarmNow.setVoiceStatus(0);
+            alarmNowService.updateById(itdmAlarmNow);
+        }
+    }
+
+}

+ 24 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmAlarmNowConvert.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.largeScreen.convert;
+
+import org.jeecg.modules.itdmDataNow.entity.ItdmAlarmNow;
+import org.jeecg.modules.largeScreen.vo.ItdmAlarmNowWSVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+import org.springframework.util.CollectionUtils;
+
+import java.util.stream.Collectors;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,imports ={ CollectionUtils.class, Collectors.class})
+public interface ItdmAlarmNowConvert {
+
+    ItdmAlarmNowConvert INSTANCE = Mappers.getMapper(ItdmAlarmNowConvert.class);
+
+    /**
+     *设备实验数据报警
+     * */
+    @Mapping(target = "alarmMessage", source = "alarmMessage")//报警信息
+    @Mapping(target = "alarmType", source = "alarmType")//数据类型(1数据报警 2通电变温预警 3设备启动报警)
+    ItdmAlarmNowWSVO convert(ItdmAlarmNow itdmAlarmNow,Integer alarmType,String alarmMessage);
+}

+ 26 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmDeviceConvert.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.largeScreen.convert;
+
+
+import org.jeecg.modules.itdmDevice.entity.ItdmDevice;
+import org.jeecg.modules.largeScreen.vo.ItdmDeviceRepairAlarmListVO;
+import org.jeecg.modules.largeScreen.vo.ItdmDeviceWSVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+import org.springframework.util.CollectionUtils;
+import org.mapstruct.factory.Mappers;
+
+import java.util.stream.Collectors;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,imports ={ CollectionUtils.class, Collectors.class})
+public interface ItdmDeviceConvert {
+
+    ItdmDeviceConvert INSTANCE = Mappers.getMapper(ItdmDeviceConvert.class);
+
+    ItdmDeviceWSVO convert(ItdmDevice convert);
+
+    @Mapping(target = "deviceId",source = "itdmDevice.id")
+    @Mapping(target = "day",source = "day")
+    ItdmDeviceRepairAlarmListVO toList(ItdmDevice itdmDevice,Integer day);
+
+}

+ 23 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmDeviceStartConvert.java

@@ -0,0 +1,23 @@
+package org.jeecg.modules.largeScreen.convert;
+
+import org.jeecg.modules.itdmDeviceStart.entity.ItdmDeviceStart;
+import org.jeecg.modules.largeScreen.vo.ItdmAlarmNowWSVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+import org.springframework.util.CollectionUtils;
+
+import java.util.stream.Collectors;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,imports ={ CollectionUtils.class, Collectors.class})
+public interface ItdmDeviceStartConvert {
+
+    ItdmDeviceStartConvert INSTANCE = Mappers.getMapper(ItdmDeviceStartConvert.class);
+
+    /**设备启动报警*/
+    @Mapping(target = "alarmMessage", source = "alarmMessage")//报警信息
+    @Mapping(target = "alarmType", source = "alarmType")//数据类型(1数据报警 2通电变温预警 3设备启动报警)
+    ItdmAlarmNowWSVO convert(ItdmDeviceStart itdmDeviceStart, Integer alarmType, String alarmMessage);
+
+}

+ 21 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmVoiceConvert.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.largeScreen.convert;
+
+import org.jeecg.modules.largeScreen.vo.ItdmAlarmNowWSVO;
+import org.jeecg.modules.largeScreen.vo.ItdmVoiceWSVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+import org.springframework.util.CollectionUtils;
+
+import java.util.stream.Collectors;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,imports ={ CollectionUtils.class, Collectors.class})
+public interface ItdmVoiceConvert {
+
+    ItdmVoiceConvert INSTANCE = Mappers.getMapper(ItdmVoiceConvert.class);
+
+    @Mapping(target = "voice",source = "alarmNowWSVO.alarmMessage")
+    ItdmVoiceWSVO convert(ItdmAlarmNowWSVO alarmNowWSVO);
+
+}

+ 20 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/ItdmWenxiangNowConvert.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.largeScreen.convert;
+
+
+import org.jeecg.modules.itdmDataNow.entity.ItdmWenxiangNow;
+import org.jeecg.modules.largeScreen.vo.ItdmWenxiangNowWSVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+import org.springframework.util.CollectionUtils;
+
+import java.util.stream.Collectors;
+
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,imports ={ CollectionUtils.class, Collectors.class})
+public interface ItdmWenxiangNowConvert {
+
+    ItdmWenxiangNowConvert INSTANCE = Mappers.getMapper(ItdmWenxiangNowConvert.class);
+
+    ItdmWenxiangNowWSVO convert(ItdmWenxiangNow convert);
+}

+ 26 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/convert/TongyongDataVOConvert.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.largeScreen.convert;
+
+
+import org.jeecg.modules.itdmDataNow.entity.ItdmEnvironmentWaterNow;
+import org.jeecg.modules.itdmDataNow.entity.ItdmEnvironmentYeweiNow;
+import org.jeecg.modules.itdmDataNow.entity.ItdmWenxiangVoltageNow;
+import org.jeecg.modules.largeScreen.vo.TongyongDataVO;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+import org.springframework.util.CollectionUtils;
+
+import java.util.stream.Collectors;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,imports ={ CollectionUtils.class, Collectors.class})
+public interface TongyongDataVOConvert {
+
+    TongyongDataVOConvert INSTANCE = Mappers.getMapper(TongyongDataVOConvert.class);
+
+    @Mapping(target = "inTemperature", source = "inWaterNow.temperature")
+    @Mapping(target = "inWaterPressure", source = "inWaterNow.waterPressure")
+    @Mapping(target = "outTemperature", source = "outWaterNow.temperature")
+    @Mapping(target = "outWaterPressure", source = "outWaterNow.waterPressure")
+    TongyongDataVO convert(ItdmWenxiangVoltageNow voltageNow, ItdmEnvironmentWaterNow inWaterNow, ItdmEnvironmentWaterNow outWaterNow, ItdmEnvironmentYeweiNow yeweiNow);
+}

+ 17 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/dto/SocketSendData.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.largeScreen.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+public class SocketSendData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private List<String> deviceIds;
+    private Integer day;
+
+}

+ 49 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/entity/ItdmLixueNow.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.largeScreen.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+/**
+ * @Description: 力学设备实时数据
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class ItdmLixueNow implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**设备名称*/
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+
+    /** 电流 */
+    @Excel(name = "电流", width = 15)
+    @ApiModelProperty(value = "电流")
+    private java.math.BigDecimal current;
+
+    /** 电压 */
+    @Excel(name = "电压", width = 15)
+    @ApiModelProperty(value = "电压")
+    private java.math.BigDecimal voltage;
+
+    /** 水温 */
+    @Excel(name = "水温", width = 15)
+    @ApiModelProperty(value = "水温")
+    private java.math.BigDecimal waterTemperature;
+
+    /** 水压 */
+    @Excel(name = "水压", width = 15)
+    @ApiModelProperty(value = "水压")
+    private java.math.BigDecimal waterPressure;
+
+}

+ 9 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/service/IASecondScreenService.java

@@ -0,0 +1,9 @@
+package org.jeecg.modules.largeScreen.service;
+
+import java.util.Map;
+
+public interface IASecondScreenService {
+
+    public Map<String,Object> getList(String id);
+
+}

+ 91 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/service/impl/ASecondScreenServiceImpl.java

@@ -0,0 +1,91 @@
+package org.jeecg.modules.largeScreen.service.impl;
+
+import org.jeecg.modules.itdmDataHistory.entity.ItdmWenxiang;
+import org.jeecg.modules.itdmDataHistory.mapper.ItdmWenxiangMapper;
+import org.jeecg.modules.itdmDevice.entity.ItdmDevice;
+import org.jeecg.modules.itdmDevice.service.IItdmDeviceService;
+import org.jeecg.modules.largeScreen.service.IASecondScreenService;
+import org.jeecg.modules.largeScreen.vo.ASecondScreenVO;
+import org.jeecg.modules.largeScreen.vo.AZhexianDataVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class ASecondScreenServiceImpl implements IASecondScreenService {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IItdmDeviceService deviceService;
+    @Autowired
+    @SuppressWarnings("all")
+    private ItdmWenxiangMapper wenxiangMapper;
+
+
+    public Map<String,Object> getList(String id){
+        Map<String,Object> secondMap = new HashMap<>();
+        ItdmDevice itdmDevice = deviceService.getById(id);
+        String deviceName = itdmDevice.getDeviceName();
+        if(itdmDevice.getDeviceType().equals("温箱")){
+            List<ItdmWenxiang> wenxiangList = wenxiangMapper.selectWXGraphList(id);
+            List<String> xAxis = wenxiangList.stream().map(i->{
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                Date date = i.getCreateTime();
+                String x = sdf.format(date);
+                return x;
+            }).collect(Collectors.toList());//x轴,时间列表
+
+            AZhexianDataVO[] data = new AZhexianDataVO[2];
+            String typeName = "";
+            int d = 0;
+            List<Map<String,Object>> seriesT = new ArrayList<>();//y
+            List<BigDecimal> listT = wenxiangList.stream().map(i->{
+                BigDecimal decimal = i.getTemperature();
+                return decimal;
+            }).collect(Collectors.toList());
+            typeName = "温度";
+            Map<String,Object> mapT = new HashMap<>();
+            mapT.put("data", listT);
+            mapT.put("name", typeName);
+            seriesT.add(mapT);
+            AZhexianDataVO voT = new AZhexianDataVO();
+            voT.setType(typeName);
+            voT.setXAxis(xAxis);
+            voT.setSeries(seriesT);
+            data[d] = voT;
+            d++;
+
+            List<Map<String,Object>> seriesH = new ArrayList<>();//y
+            List<BigDecimal> listH = wenxiangList.stream().map(i->{
+                BigDecimal decimal = i.getHumidity();
+                return decimal;
+            }).collect(Collectors.toList());
+            typeName = "湿度";
+            Map<String,Object> mapH = new HashMap<>();
+            mapH.put("data", listH);
+            mapH.put("name", typeName);
+            seriesH.add(mapH);
+            AZhexianDataVO voH = new AZhexianDataVO();
+            voH.setType(typeName);
+            voH.setXAxis(xAxis);
+            voH.setSeries(seriesH);
+            data[d] = voH;
+            d++;
+
+            ASecondScreenVO vo = new ASecondScreenVO();
+            vo.setId(id);
+            vo.setTotal(data.length);
+            vo.setDeviceName(deviceName);
+            vo.setData(data);
+
+            secondMap.put("data", vo);
+            secondMap.put("name", "二级大屏数据");
+        }
+        return secondMap;
+    }
+
+}

+ 216 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/DemoTask2.java

@@ -0,0 +1,216 @@
+package org.jeecg.modules.largeScreen.task;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.tomcat.websocket.WsSession;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.itdmDataNow.entity.*;
+import org.jeecg.modules.itdmDataNow.service.*;
+import org.jeecg.modules.itdmDeviceStart.entity.ItdmDeviceStart;
+import org.jeecg.modules.itdmDeviceStart.service.IItdmDeviceStartService;
+import org.jeecg.modules.largeScreen.convert.*;
+import org.jeecg.modules.largeScreen.entity.ItdmLixueNow;
+import org.jeecg.modules.itdmDevice.entity.ItdmDevice;
+import org.jeecg.modules.itdmDevice.service.IItdmDeviceService;
+import org.jeecg.modules.largeScreen.vo.*;
+import org.jeecg.modules.largeScreen.component.WebSocketServer2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Component("demoTask2")
+@SuppressWarnings("all")
+public class DemoTask2 {
+
+    @Autowired
+    private WebSocketServer2 webSocketServer;
+    @Autowired
+    private IItdmWenxiangNowService wenxiangNowService;
+    @Autowired
+    private IItdmDeviceService deviceService;
+    @Autowired
+    private IItdmAlarmNowService alarmNowService;
+    @Autowired
+    private IItdmDeviceStartService deviceStartService;
+    @Autowired
+    private IItdmWenxiangVoltageNowService voltageNowService;
+    @Autowired
+    private IItdmEnvironmentQuyuNowService quyuNowService;
+    @Autowired
+    private IItdmEnvironmentWaterNowService waterNowService;
+    @Autowired
+    private IItdmEnvironmentYeweiNowService yeweiNowService;
+
+    static List<Map<String,Object>> list = new ArrayList<>();//总的
+
+    /**
+     * 数据初始化List<Map<String,Object>
+     * */
+    public List<Map<String,Object>> chushihua(){
+
+        list= new ArrayList<>();//清空原来的数据
+        Map<String, Object> columnMap = new HashMap<>();//用于列表搜索
+        HashMap<String,Object> map = new HashMap<String, Object>();//用于返回的结果
+
+        /**温箱实时数据*/
+        List<ItdmWenxiangNow> wenxiangNowList = wenxiangNowService.list();
+        List<ItdmWenxiangNowWSVO> wenxiangVOList = wenxiangNowList.stream().map(i-> {
+            return ItdmWenxiangNowConvert.INSTANCE.convert(i);
+                }).collect(Collectors.toList());
+
+        map = new HashMap<String, Object>();
+        map.put("data",wenxiangVOList);
+        map.put("name","温箱试验数据");
+        list.add(map);
+
+        /**力学设备实时数据*/
+        List<ItdmLixueNow> lixueVOList= new ArrayList<>();
+        for(int i=1; i<=6; i++){
+            Random random1 = new Random();//随机数
+            int current = random1.nextInt(20)+100;//电流
+            int voltage = random1.nextInt(30)+70;//电压
+            int waterTemperature = random1.nextInt(100);//水温
+            int waterPressure = random1.nextInt(100);//水压
+
+            ItdmLixueNow liXue = new ItdmLixueNow();
+            liXue.setDeviceName("力学设备"+i);
+            liXue.setCurrent(BigDecimal.valueOf(current));
+            liXue.setVoltage(BigDecimal.valueOf(voltage));
+            liXue.setWaterTemperature(BigDecimal.valueOf(waterTemperature));
+            liXue.setWaterPressure(BigDecimal.valueOf(waterPressure));
+            lixueVOList.add(liXue);
+        }
+        map = new HashMap<String, Object>();
+        map.put("data",lixueVOList);
+        map.put("name","力学设备试验数据");
+        list.add(map);
+
+
+        /**设备运行状况2
+         * 0 待机
+         * 1 运行中
+         * 2 报警
+         * 3 故障——故障状态中,不根据硬件传过来的设备状态而修改故障状态
+         * 4 解除故障
+         * */
+        List<ItdmDevice> deviceList = deviceService.queryList();
+        List<ItdmDeviceWSVO> deviceWSVOList = deviceList.stream().map(i->{
+                return ItdmDeviceConvert.INSTANCE.convert(i);
+        }).collect(Collectors.toList());
+        map = new HashMap<String, Object>();
+        map.put("data",deviceWSVOList);
+        map.put("name","设备运行状况");
+        list.add(map);
+
+        /**报警3——实时报警*/
+        columnMap = new HashMap<>();
+        columnMap.put("data_status",1);//数据状态,0正常1报警
+        columnMap.put("voice_status",1);//是否语音播报,0关闭1开启
+        List<ItdmAlarmNow> alarmNowList = alarmNowService.listByMap(columnMap);
+        List<ItdmAlarmNowWSVO> alarmNowWSVOList = alarmNowList.stream().map(i->{
+            Integer alarmType = 1; //数据类型(1数据报警 2通电变温预警 3设备启动报警)
+            String alarmMessage = i.getDeviceName()+i.getValueType()+"异常";
+            return ItdmAlarmNowConvert.INSTANCE.convert(i,alarmType,alarmMessage);
+        }).collect(Collectors.toList());
+        /**设备启动报警*/
+        ItdmDeviceStart deviceStart = new ItdmDeviceStart();
+        deviceStart.setDataStatus(0);
+        QueryWrapper<ItdmDeviceStart> queryWrapper = new QueryWrapper<>(deviceStart);
+        queryWrapper.orderByAsc("start_time");
+        List<ItdmDeviceStart> deviceStartList = deviceStartService.list(queryWrapper);
+        List<ItdmAlarmNowWSVO> deviceStartWSVOList = deviceStartList.stream().map(i->{
+            Integer alarmType = 3; //数据类型(1数据报警 2通电变温预警 3设备启动报警)
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String alarmMessage = i.getDeviceName()+sdf.format(i.getStartTime())+"已启动";
+            return ItdmDeviceStartConvert.INSTANCE.convert(i,alarmType,alarmMessage);
+        }).collect(Collectors.toList());
+
+        alarmNowWSVOList.addAll(deviceStartWSVOList);
+
+        map = new HashMap<String, Object>();
+        map.put("data",alarmNowWSVOList);
+        map.put("name","报警列表");
+        list.add(map);
+
+        /**已展示的数据状态更新*/
+        for (ItdmDeviceStart start : deviceStartList){
+            start.setDataStatus(1);
+            deviceStartService.updateById(start);
+        }
+
+        /**语音列表*/
+        List<ItdmVoiceWSVO> voiceWSVOList = alarmNowWSVOList.stream().map(i->{
+            return ItdmVoiceConvert.INSTANCE.convert(i);
+        }).collect(Collectors.toList());
+
+        map = new HashMap<String, Object>();
+        map.put("data",voiceWSVOList);
+        map.put("name","语音列表");
+        list.add(map);
+
+        /**温箱通用数据1(a线电压 b线电压 c线电压 进出水口温度、水压,水箱液位)*/
+        ItdmWenxiangVoltageNow voltageNow = voltageNowService.getById(1);
+        ItdmEnvironmentWaterNow inWaterNow = waterNowService.getById(1);//进水口
+        ItdmEnvironmentWaterNow outWaterNow = waterNowService.getById(2);//出水口
+        ItdmEnvironmentYeweiNow yeweiNow = yeweiNowService.getById(1);
+        TongyongDataVO tongyongDataVO = TongyongDataVOConvert.INSTANCE.convert(voltageNow,inWaterNow,outWaterNow,yeweiNow);
+
+        map = new HashMap<String, Object>();
+        map.put("data",tongyongDataVO);
+        map.put("name","通用数据1");
+        list.add(map);
+
+        /**温箱通用数据2(温箱、力学、霉菌区域的温度、湿度、气压)*/
+        List<ItdmEnvironmentQuyuNow> quyuNowList = quyuNowService.list();
+        map = new HashMap<String, Object>();
+        map.put("data",quyuNowList);
+        map.put("name","通用数据2");
+        list.add(map);
+
+        /**设备维护预警列表*/
+        ItdmDevice device = new ItdmDevice();
+        device.setIsRepair(0);//0未维护
+
+        QueryWrapper<ItdmDevice> wrapper  = new QueryWrapper<>(device);
+        wrapper.isNotNull("repair_time");
+        //维护时间小于等于当前时间+15天
+        Date afterNow15 = new Date(new Date().getTime() + 15*1000*3600*24);
+        wrapper.le("repair_time",afterNow15);
+        wrapper.orderByAsc("repair_time");
+        List<ItdmDevice> deviceList1 = deviceService.list(wrapper);
+
+        List<ItdmDeviceRepairAlarmListVO>  repairAlarmListVOList = deviceList1.stream().map(i->{
+            Date star = new Date();
+            Long starTime=star.getTime();
+            Long endTime=i.getRepairTime().getTime();
+            Long num=endTime-starTime;//时间戳相差的毫秒数
+            Integer day = Math.toIntExact(num / (24 * 60 * 60 * 1000));
+            return ItdmDeviceConvert.INSTANCE.toList(i,day);
+        }).collect(Collectors.toList());
+
+        map = new HashMap<String, Object>();
+        map.put("data",repairAlarmListVOList);
+        map.put("name","设备维护预警");
+        list.add(map);
+
+        return list;
+    }
+
+
+    //一级大屏
+    public void taskWithParamsList(WsSession session) {
+        System.out.println("发送数据");
+        webSocketServer.sendUser(this.chushihua(), session);
+    }
+
+
+
+
+
+}
+

+ 22 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/ScheduledTask.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.largeScreen.task;
+
+import java.util.concurrent.ScheduledFuture;
+
+/**
+ * @program: simple-demo
+ * @description: 定时任务控制类
+ * @author: CaoTing
+ * @date: 2019/5/23
+ **/
+public final class ScheduledTask {
+    public volatile ScheduledFuture<?> future;
+    /**
+     * 取消定时任务
+     */
+    public void cancel() {
+        ScheduledFuture<?> future = this.future;
+        if (future != null) {
+            future.cancel(true);
+        }
+    }
+}

+ 80 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/SchedulingRunnable.java

@@ -0,0 +1,80 @@
+package org.jeecg.modules.largeScreen.task;
+
+import org.jeecg.modules.largeScreen.util.SpringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.ReflectionUtils;
+
+import java.lang.reflect.Method;
+import java.util.Objects;
+
+/**
+ * @program: simple-demo
+ * @description: 定时任务运行类
+ * @author: CaoTing
+ * @date: 2019/5/23
+ **/
+public class SchedulingRunnable implements Runnable {
+    private static final Logger logger = LoggerFactory.getLogger(SchedulingRunnable.class);
+    private String beanName;
+    private String methodName;
+    private Object[] params;
+    public SchedulingRunnable(String beanName, String methodName) {
+        this(beanName, methodName, null);
+    }
+    public SchedulingRunnable(String beanName, String methodName, Object...params ) {
+        this.beanName = beanName;
+        this.methodName = methodName;
+        this.params = params;
+    }
+    @Override
+    public void run() {
+        logger.info("定时任务开始执行 - bean:{},方法:{},参数:{}", beanName, methodName, params);
+        long startTime = System.currentTimeMillis();
+        try {
+            Object target = SpringUtils.getBean(beanName);
+            Method method = null;
+            if (null != params && params.length > 0) {
+                Class<?>[] paramCls = new Class[params.length];
+                for (int i = 0; i < params.length; i++) {
+                    paramCls[i] = params[i].getClass();
+                }
+                method = target.getClass().getDeclaredMethod(methodName, paramCls);
+            } else {
+                method = target.getClass().getDeclaredMethod(methodName);
+            }
+            ReflectionUtils.makeAccessible(method);
+            if (null != params && params.length > 0) {
+                method.invoke(target, params);
+            } else {
+                method.invoke(target);
+            }
+        } catch (Exception ex) {
+            logger.error(String.format("定时任务执行异常 - bean:%s,方法:%s,参数:%s ", beanName, methodName, params), ex);
+        }
+        long times = System.currentTimeMillis() - startTime;
+        logger.info("定时任务执行结束 - bean:{},方法:{},参数:{},耗时:{} 毫秒", beanName, methodName, params, times);
+    }
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        SchedulingRunnable that = (SchedulingRunnable) o;
+        if (params == null) {
+            return beanName.equals(that.beanName) &&
+                    methodName.equals(that.methodName) &&
+                    that.params == null;
+        }
+        return beanName.equals(that.beanName) &&
+                methodName.equals(that.methodName) &&
+                params.equals(that.params);
+    }
+    @Override
+    public int hashCode() {
+        if (params == null) {
+            return Objects.hash(beanName, methodName);
+        }
+        return Objects.hash(beanName, methodName, params);
+    }
+}
+

+ 43 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/task/SecondScreenTask.java

@@ -0,0 +1,43 @@
+package org.jeecg.modules.largeScreen.task;
+
+import org.apache.tomcat.websocket.WsSession;
+import org.jeecg.modules.largeScreen.component.WebSocketSecondScreenServer;
+import org.jeecg.modules.largeScreen.service.IASecondScreenService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 二级大屏折线图sTask
+ * **/
+@Component("sTask")
+public class SecondScreenTask {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IASecondScreenService secondScreenService;
+
+    @Autowired
+    @SuppressWarnings("all")
+    private WebSocketSecondScreenServer webSocketSecondScreenServer;
+
+
+    //二级大屏
+    public void taskWithParamsListSecond(String id, WsSession session) {
+        this.getList(id);
+        System.out.println("发送数据");
+        webSocketSecondScreenServer.sendUser(this.getList(id), session);
+    }
+
+    /**
+     * 数据
+     * */
+    public Map<String,Object> getList(String id){
+        return secondScreenService.getList(id);
+    }
+
+
+}
+
+

+ 72 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/util/EncoderClassListVo.java

@@ -0,0 +1,72 @@
+package org.jeecg.modules.largeScreen.util;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+import java.io.IOException;
+import java.util.List;
+import java.util.TimeZone;
+
+public class EncoderClassListVo implements Encoder.Text<List> {
+
+    @Override
+    public void init(EndpointConfig config) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void destroy() {
+        // TODO Auto-generated method stub
+
+    }
+
+    //我向web端传递的是Map类型的
+    @Override
+    public String encode(List list) throws EncodeException {
+        ObjectMapper mapMapper = new ObjectMapper();
+
+        mapMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
+
+        try {
+            String json = "";
+            json = mapMapper.writeValueAsString(list);
+            return json;
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return "false";
+        }
+    }
+
+//    @Override
+//    public String encode(List map) throws EncodeException {
+//        ObjectMapper mapMapper = new ObjectMapper();
+//        try {
+//            String json = "";
+//            json = mapMapper.writeValueAsString(map);
+//            return json;
+//        } catch (IOException e) {
+//            // TODO Auto-generated catch block
+//            e.printStackTrace();
+//            return "false";
+//        }
+//    }
+
+
+    //如果你传递的是一个类,则使用如下写法
+//        @Override
+//        public String encode(Person person) throws EncodeException {
+//            try {
+//                return Java2Json.JavaToJson(person, false);
+//            } catch (MapperException e) {
+//                // TODO Auto-generated catch block
+//                e.printStackTrace();
+//                return null;
+//            }
+//        }
+
+}
+

+ 52 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/util/EncoderClassVo.java

@@ -0,0 +1,52 @@
+package org.jeecg.modules.largeScreen.util;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+import java.io.IOException;
+import java.util.Map;
+
+public class EncoderClassVo implements Encoder.Text<Map<String, Object>> {
+    @Override
+    public void init(EndpointConfig config) {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void destroy() {
+        // TODO Auto-generated method stub
+
+    }
+
+    //我向web端传递的是Map类型的
+    @Override
+    public String encode(Map<String, Object> map) throws EncodeException {
+        ObjectMapper mapMapper = new ObjectMapper();
+        try {
+            String json = "";
+            json = mapMapper.writeValueAsString(map);
+            return json;
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return "false";
+        }
+    }
+
+    //如果你传递的是一个类,则使用如下写法
+//        @Override
+//        public String encode(Person person) throws EncodeException {
+//            try {
+//                return Java2Json.JavaToJson(person, false);
+//            } catch (MapperException e) {
+//                // TODO Auto-generated catch block
+//                e.printStackTrace();
+//                return null;
+//            }
+//        }
+
+}
+

+ 146 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/util/SpringUtils.java

@@ -0,0 +1,146 @@
+package org.jeecg.modules.largeScreen.util;
+
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * spring工具类 方便在非spring管理环境中获取bean
+ *
+ * @author ruoyi
+ */
+@Component
+public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware
+{
+    /** Spring应用上下文环境 */
+    private static ConfigurableListableBeanFactory beanFactory;
+
+    private static ApplicationContext applicationContext;
+
+    @Override
+    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
+    {
+        SpringUtils.beanFactory = beanFactory;
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
+    {
+        SpringUtils.applicationContext = applicationContext;
+    }
+
+    /**
+     * 获取对象
+     *
+     * @param name
+     * @return Object 一个以所给名字注册的bean的实例
+     * @throws org.springframework.beans.BeansException
+     *
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getBean(String name) throws BeansException
+    {
+        return (T) beanFactory.getBean(name);
+    }
+
+    /**
+     * 获取类型为requiredType的对象
+     *
+     * @param clz
+     * @return
+     * @throws org.springframework.beans.BeansException
+     *
+     */
+    public static <T> T getBean(Class<T> clz) throws BeansException
+    {
+        T result = (T) beanFactory.getBean(clz);
+        return result;
+    }
+
+    /**
+     * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
+     *
+     * @param name
+     * @return boolean
+     */
+    public static boolean containsBean(String name)
+    {
+        return beanFactory.containsBean(name);
+    }
+
+    /**
+     * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
+     *
+     * @param name
+     * @return boolean
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.isSingleton(name);
+    }
+
+    /**
+     * @param name
+     * @return Class 注册对象的类型
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getType(name);
+    }
+
+    /**
+     * 如果给定的bean名字在bean定义中有别名,则返回这些别名
+     *
+     * @param name
+     * @return
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getAliases(name);
+    }
+
+    /**
+     * 获取aop代理对象
+     *
+     * @param invoker
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getAopProxy(T invoker)
+    {
+        return (T) AopContext.currentProxy();
+    }
+
+    /**
+     * 获取当前的环境配置,无配置返回null
+     *
+     * @return 当前的环境配置
+     */
+    public static String[] getActiveProfiles()
+    {
+        return applicationContext.getEnvironment().getActiveProfiles();
+    }
+
+//    /**
+//     * 获取当前的环境配置,当有多个环境配置时,只获取第一个
+//     *
+//     * @return 当前的环境配置
+//     */
+//    public static String getActiveProfile()
+//    {
+//        final String[] activeProfiles = getActiveProfiles();
+//        return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;
+//    }
+}
+

+ 18 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ASecondScreenVO.java

@@ -0,0 +1,18 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+public class ASecondScreenVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+    private String deviceName;
+    private Integer total;
+    private AZhexianDataVO[] data ;
+
+}

+ 21 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/AZhexianDataVO.java

@@ -0,0 +1,21 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@Accessors(chain = true)
+public class AZhexianDataVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String type;
+
+    public List<String> xAxis;
+
+    public List<Map<String,Object>> series;
+
+}

+ 63 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmAlarmNowWSVO.java

@@ -0,0 +1,63 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+@Data
+@Accessors(chain = true)
+public class ItdmAlarmNowWSVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**实时报警id*/
+    @ApiModelProperty(value = "实时报警id")
+    private java.lang.Integer id;
+    /**设备名称*/
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+    /**数据类型*/
+    @Excel(name = "数据类型", width = 15)
+    @ApiModelProperty(value = "数据类型")
+    private java.lang.String valueType;
+    /**数据实时值*/
+    @Excel(name = "数据实时值", width = 15)
+    @ApiModelProperty(value = "数据实时值")
+    private java.math.BigDecimal value;
+    /**数据上限*/
+    @Excel(name = "数据上限", width = 15)
+    @ApiModelProperty(value = "数据上限")
+    private java.math.BigDecimal maxValue;
+    /**数据下限*/
+    @Excel(name = "数据下限", width = 15)
+    @ApiModelProperty(value = "数据下限")
+    private java.math.BigDecimal minValue;
+    /** 报警信息 */
+    @Excel(name = "报警信息", width = 15)
+    @ApiModelProperty(value = "报警信息")
+    private java.lang.String alarmMessage;
+    /**更新日期*/
+    @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;
+    /**是否语音播报 0关闭1开启*/
+    @Excel(name = "是否语音播报", width = 15, dicCode = "voice_status")
+    @Dict(dicCode = "voice_status")
+    @ApiModelProperty(value = "是否语音播报,0关闭1开启")
+    private java.lang.Integer voiceStatus;
+    /** 数据类型(1数据报警 2通电变温预警 3设备启动报警)*/
+    @Excel(name = "数据类型(1数据报警 2通电变温预警 3设备启动报警)")
+    private java.lang.Integer alarmType;
+
+}

+ 47 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmDeviceRepairAlarmListVO.java

@@ -0,0 +1,47 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+public class ItdmDeviceRepairAlarmListVO  implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 设备ID */
+    @Excel(name = "设备ID")
+    @ApiModelProperty(value = "设备ID")
+    private java.lang.String deviceId;
+
+    /**设备名称*/
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+
+    /**设备编号*/
+    @Excel(name = "设备编号", width = 15)
+    @ApiModelProperty(value = "设备编号")
+    private java.lang.String deviceNo;
+
+    /** 维护时间 */
+    @Excel(name = "维护时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @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 repairTime;
+
+    /** 剩余天数 */
+    @Excel(name = "剩余天数")
+    @ApiModelProperty(value = "剩余天数")
+    private java.lang.Integer day;
+
+}

+ 44 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmDeviceWSVO.java

@@ -0,0 +1,44 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+
+@Data
+@Accessors(chain = true)
+public class ItdmDeviceWSVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**主键*/
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+
+    /**设备名称*/
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+
+    /**设备类型*/
+    @Excel(name = "设备类型", width = 15)
+    @ApiModelProperty(value = "设备类型")
+    private java.lang.String deviceType;
+    /**设备编号*/
+    @Excel(name = "设备编号", width = 15)
+    @ApiModelProperty(value = "设备编号")
+    private java.lang.String deviceNo;
+    /**设备状态*/
+    @Excel(name = "设备状态", width = 15, dicCode = "device_status")
+    @Dict(dicCode = "device_status")
+    @ApiModelProperty(value = "设备状态")
+    private java.lang.Integer deviceStatus;
+
+}

+ 27 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmVoiceWSVO.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+
+@Data
+@Accessors(chain = true)
+public class ItdmVoiceWSVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**id*/
+    @ApiModelProperty(value = "id")
+    private java.lang.Integer id;
+
+    /** 报警信息(后端传文字,前端转换为语音)*/
+    @Excel(name = "报警信息", width = 15)
+    @ApiModelProperty(value = "报警信息")
+    private java.lang.String voice;
+
+}

+ 49 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/ItdmWenxiangNowWSVO.java

@@ -0,0 +1,49 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+public class ItdmWenxiangNowWSVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**设备名称*/
+    @Excel(name = "设备名称", width = 15)
+    @ApiModelProperty(value = "设备名称")
+    private java.lang.String deviceName;
+    /**温度*/
+    @Excel(name = "温度", width = 15)
+    @ApiModelProperty(value = "温度")
+    private java.math.BigDecimal temperature;
+    /**湿度*/
+    @Excel(name = "湿度", width = 15)
+    @ApiModelProperty(value = "湿度")
+    private java.math.BigDecimal humidity;
+    /**A相电流*/
+    @Excel(name = "A相电流", width = 15)
+    @ApiModelProperty(value = "A相电流")
+    private java.math.BigDecimal currentA;
+    /**B相电流*/
+    @Excel(name = "B相电流", width = 15)
+    @ApiModelProperty(value = "B相电流")
+    private java.math.BigDecimal currentB;
+    /**C相电流*/
+    @Excel(name = "C相电流", width = 15)
+    @ApiModelProperty(value = "C相电流")
+    private java.math.BigDecimal currentC;
+    /**创建时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private java.util.Date createTime;
+}

+ 48 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/largeScreen/vo/TongyongDataVO.java

@@ -0,0 +1,48 @@
+package org.jeecg.modules.largeScreen.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+public class TongyongDataVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**A线电压*/
+    @Excel(name = "A线电压", width = 15)
+    @ApiModelProperty(value = "A线电压")
+    private java.math.BigDecimal voltageA;
+    /**B线电压*/
+    @Excel(name = "B线电压", width = 15)
+    @ApiModelProperty(value = "B线电压")
+    private java.math.BigDecimal voltageB;
+    /**C线电压*/
+    @Excel(name = "C线电压", width = 15)
+    @ApiModelProperty(value = "C线电压")
+    private java.math.BigDecimal voltageC;
+    /**进水口温度*/
+    @Excel(name = "进水口温度", width = 15)
+    @ApiModelProperty(value = "进水口温度")
+    private java.math.BigDecimal inTemperature;
+    /**进水口水压*/
+    @Excel(name = "进水口水压", width = 15)
+    @ApiModelProperty(value = "进水口水压")
+    private java.math.BigDecimal inWaterPressure;
+    /**出水口温度*/
+    @Excel(name = "出水口温度", width = 15)
+    @ApiModelProperty(value = "出水口温度")
+    private java.math.BigDecimal outTemperature;
+    /**出水口水压*/
+    @Excel(name = "出水口水压", width = 15)
+    @ApiModelProperty(value = "出水口水压")
+    private java.math.BigDecimal outWaterPressure;
+    /**水液位*/
+    @Excel(name = "水液位", width = 15)
+    @ApiModelProperty(value = "水液位")
+    private java.math.BigDecimal waterLevel;
+
+}