diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java new file mode 100644 index 0000000..335cd41 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java @@ -0,0 +1,89 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IWaterMeterDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; +import java.util.logging.Level; + +@Log +@Controller +@RequestMapping("/meter") +public class WaterMeterDataReceiver extends BaseController { + + @Resource + private IWaterMeterDataService waterMeterDataService; + + @Resource + private IDeviceService deviceService; + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map meterData) throws ParseException { + // 判断必填字段 + if (meterData.containsKey("MeterAddr") == false) { + return ResponseData.error("设备地址字段缺失"); + } + if (meterData.containsKey("MeterNumber") == false) { + return ResponseData.error("水表读数字段缺失"); + } + if (meterData.containsKey("ReadDate") == false) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataWaterMeter dataWaterMeter = new DataWaterMeter(); + + // 赋值设备地址 + String meterAddr = meterData.get("MeterAddr").toString(); + dataWaterMeter.setDevcode(meterAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(meterAddr); + if (null == wellDto) { + log.info("没有找到" + meterAddr + "对应的井编号"); + return ResponseData.success(); + } + dataWaterMeter.setWellCode(wellDto.getWellCode()); + + // 赋值水表读数 + Double meterNumber = 0.0; + String numType = meterData.get("MeterNumber").getClass().getSimpleName(); + if (numType.equals("String")) { + meterNumber = Double.parseDouble(meterData.get("MeterNumber").toString()); + } else if (numType.equals("BigDecimal")) { + meterNumber = ((Number) meterData.get("MeterNumber")).doubleValue(); + } + dataWaterMeter.setFlowAcc(String.valueOf(meterNumber)); + + // 赋值数据采集时间 + String readDate = meterData.get("ReadDate").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dataWaterMeter.setUptime(sdf.parse(readDate)); + + // 赋值阀门状态 + if (meterData.containsKey("ValveStatus") == true) { + dataWaterMeter.setStatus(meterData.get("ValveStatus").toString()); + } + + dataWaterMeter.setLogtime(Calendar.getInstance().getTime()); + + // 保存到数据库 同时计算日/月用水量 + waterMeterDataService.saveWaterMeterData(dataWaterMeter); + + return ResponseData.success(); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java new file mode 100644 index 0000000..335cd41 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java @@ -0,0 +1,89 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IWaterMeterDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; +import java.util.logging.Level; + +@Log +@Controller +@RequestMapping("/meter") +public class WaterMeterDataReceiver extends BaseController { + + @Resource + private IWaterMeterDataService waterMeterDataService; + + @Resource + private IDeviceService deviceService; + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map meterData) throws ParseException { + // 判断必填字段 + if (meterData.containsKey("MeterAddr") == false) { + return ResponseData.error("设备地址字段缺失"); + } + if (meterData.containsKey("MeterNumber") == false) { + return ResponseData.error("水表读数字段缺失"); + } + if (meterData.containsKey("ReadDate") == false) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataWaterMeter dataWaterMeter = new DataWaterMeter(); + + // 赋值设备地址 + String meterAddr = meterData.get("MeterAddr").toString(); + dataWaterMeter.setDevcode(meterAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(meterAddr); + if (null == wellDto) { + log.info("没有找到" + meterAddr + "对应的井编号"); + return ResponseData.success(); + } + dataWaterMeter.setWellCode(wellDto.getWellCode()); + + // 赋值水表读数 + Double meterNumber = 0.0; + String numType = meterData.get("MeterNumber").getClass().getSimpleName(); + if (numType.equals("String")) { + meterNumber = Double.parseDouble(meterData.get("MeterNumber").toString()); + } else if (numType.equals("BigDecimal")) { + meterNumber = ((Number) meterData.get("MeterNumber")).doubleValue(); + } + dataWaterMeter.setFlowAcc(String.valueOf(meterNumber)); + + // 赋值数据采集时间 + String readDate = meterData.get("ReadDate").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dataWaterMeter.setUptime(sdf.parse(readDate)); + + // 赋值阀门状态 + if (meterData.containsKey("ValveStatus") == true) { + dataWaterMeter.setStatus(meterData.get("ValveStatus").toString()); + } + + dataWaterMeter.setLogtime(Calendar.getInstance().getTime()); + + // 保存到数据库 同时计算日/月用水量 + waterMeterDataService.saveWaterMeterData(dataWaterMeter); + + return ResponseData.success(); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java index ae94fc5..9e4fb24 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -23,6 +23,7 @@ List selectDataScopePage(@Param("scope") DataScope dataScope, @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline, @Param("areaId") String areaId); DeviceWellDto selectWellIdByCode(@Param("wellCode") String wellCode); + DeviceWellDto selectWellByDevcode(@Param("devcode") String devcode); List getAreaIds(@Param("areaId") Long areaId); String getArea(@Param("id") String id); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java new file mode 100644 index 0000000..335cd41 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java @@ -0,0 +1,89 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IWaterMeterDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; +import java.util.logging.Level; + +@Log +@Controller +@RequestMapping("/meter") +public class WaterMeterDataReceiver extends BaseController { + + @Resource + private IWaterMeterDataService waterMeterDataService; + + @Resource + private IDeviceService deviceService; + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map meterData) throws ParseException { + // 判断必填字段 + if (meterData.containsKey("MeterAddr") == false) { + return ResponseData.error("设备地址字段缺失"); + } + if (meterData.containsKey("MeterNumber") == false) { + return ResponseData.error("水表读数字段缺失"); + } + if (meterData.containsKey("ReadDate") == false) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataWaterMeter dataWaterMeter = new DataWaterMeter(); + + // 赋值设备地址 + String meterAddr = meterData.get("MeterAddr").toString(); + dataWaterMeter.setDevcode(meterAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(meterAddr); + if (null == wellDto) { + log.info("没有找到" + meterAddr + "对应的井编号"); + return ResponseData.success(); + } + dataWaterMeter.setWellCode(wellDto.getWellCode()); + + // 赋值水表读数 + Double meterNumber = 0.0; + String numType = meterData.get("MeterNumber").getClass().getSimpleName(); + if (numType.equals("String")) { + meterNumber = Double.parseDouble(meterData.get("MeterNumber").toString()); + } else if (numType.equals("BigDecimal")) { + meterNumber = ((Number) meterData.get("MeterNumber")).doubleValue(); + } + dataWaterMeter.setFlowAcc(String.valueOf(meterNumber)); + + // 赋值数据采集时间 + String readDate = meterData.get("ReadDate").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dataWaterMeter.setUptime(sdf.parse(readDate)); + + // 赋值阀门状态 + if (meterData.containsKey("ValveStatus") == true) { + dataWaterMeter.setStatus(meterData.get("ValveStatus").toString()); + } + + dataWaterMeter.setLogtime(Calendar.getInstance().getTime()); + + // 保存到数据库 同时计算日/月用水量 + waterMeterDataService.saveWaterMeterData(dataWaterMeter); + + return ResponseData.success(); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java index ae94fc5..9e4fb24 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -23,6 +23,7 @@ List selectDataScopePage(@Param("scope") DataScope dataScope, @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline, @Param("areaId") String areaId); DeviceWellDto selectWellIdByCode(@Param("wellCode") String wellCode); + DeviceWellDto selectWellByDevcode(@Param("devcode") String devcode); List getAreaIds(@Param("areaId") Long areaId); String getArea(@Param("id") String id); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index de868cb..16545a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -39,6 +39,12 @@ AND WELL_CODE = #{wellCode} + + + + + + + + + + + SELECT FROM data_watermeter + where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 + + + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + d.ID AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.TYPE_NAME AS typeName + + + + + + + d + . + ID + AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.WATCH_TYPE AS watchType, t.id as type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + bus_well_info + SET bfzt = #{bfzt} + WHERE VALID = '1' + + and well_Type = #{wellType} + + + and deptid = #{deptid} + + + and (WELL_CODE like + + or POSITION like + + ) + + + + AND deptid IN + + #{i} + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java new file mode 100644 index 0000000..335cd41 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java @@ -0,0 +1,89 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IWaterMeterDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; +import java.util.logging.Level; + +@Log +@Controller +@RequestMapping("/meter") +public class WaterMeterDataReceiver extends BaseController { + + @Resource + private IWaterMeterDataService waterMeterDataService; + + @Resource + private IDeviceService deviceService; + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map meterData) throws ParseException { + // 判断必填字段 + if (meterData.containsKey("MeterAddr") == false) { + return ResponseData.error("设备地址字段缺失"); + } + if (meterData.containsKey("MeterNumber") == false) { + return ResponseData.error("水表读数字段缺失"); + } + if (meterData.containsKey("ReadDate") == false) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataWaterMeter dataWaterMeter = new DataWaterMeter(); + + // 赋值设备地址 + String meterAddr = meterData.get("MeterAddr").toString(); + dataWaterMeter.setDevcode(meterAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(meterAddr); + if (null == wellDto) { + log.info("没有找到" + meterAddr + "对应的井编号"); + return ResponseData.success(); + } + dataWaterMeter.setWellCode(wellDto.getWellCode()); + + // 赋值水表读数 + Double meterNumber = 0.0; + String numType = meterData.get("MeterNumber").getClass().getSimpleName(); + if (numType.equals("String")) { + meterNumber = Double.parseDouble(meterData.get("MeterNumber").toString()); + } else if (numType.equals("BigDecimal")) { + meterNumber = ((Number) meterData.get("MeterNumber")).doubleValue(); + } + dataWaterMeter.setFlowAcc(String.valueOf(meterNumber)); + + // 赋值数据采集时间 + String readDate = meterData.get("ReadDate").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dataWaterMeter.setUptime(sdf.parse(readDate)); + + // 赋值阀门状态 + if (meterData.containsKey("ValveStatus") == true) { + dataWaterMeter.setStatus(meterData.get("ValveStatus").toString()); + } + + dataWaterMeter.setLogtime(Calendar.getInstance().getTime()); + + // 保存到数据库 同时计算日/月用水量 + waterMeterDataService.saveWaterMeterData(dataWaterMeter); + + return ResponseData.success(); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java index ae94fc5..9e4fb24 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -23,6 +23,7 @@ List selectDataScopePage(@Param("scope") DataScope dataScope, @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline, @Param("areaId") String areaId); DeviceWellDto selectWellIdByCode(@Param("wellCode") String wellCode); + DeviceWellDto selectWellByDevcode(@Param("devcode") String devcode); List getAreaIds(@Param("areaId") Long areaId); String getArea(@Param("id") String id); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index de868cb..16545a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -39,6 +39,12 @@ AND WELL_CODE = #{wellCode} + + + SELECT FROM data_watermeter + where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 + + + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + d.ID AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.TYPE_NAME AS typeName + + + + + + + d + . + ID + AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.WATCH_TYPE AS watchType, t.id as type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + bus_well_info + SET bfzt = #{bfzt} + WHERE VALID = '1' + + and well_Type = #{wellType} + + + and deptid = #{deptid} + + + and (WELL_CODE like + + or POSITION like + + ) + + + + AND deptid IN + + #{i} + + + + + + + + + + + + + + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java new file mode 100644 index 0000000..6d68b47 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 水表原始记录 + *

+ * + * @author tanyue + * @since 2022-03-20 + */ +@TableName("data_watermeter") +@Data +public class DataWaterMeter extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井编号 + */ + @NotEmpty(message="井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @NotEmpty(message="设备编号不能为空") + @TableField("DEVCODE") + private String devcode; + /** + * 电池电量 + */ + @TableField("CELL") + private String cell; + /** + * 累计用水量 + */ + @NotEmpty(message="累计用水量不能为空") + @TableField("FLOW_ACC") + private String flowAcc; + /** + * 瞬时用水量 + */ + @TableField("FLOW") + private String flow; + /** + * 上传时间 + */ + @TableField("UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @NotEmpty(message="记录时间不能为空") + @TableField("LOGTIME") + private Date logtime; + /** + * 描述 + */ + @TableField("DESCN") + private String descn; + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java new file mode 100644 index 0000000..335cd41 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java @@ -0,0 +1,89 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IWaterMeterDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; +import java.util.logging.Level; + +@Log +@Controller +@RequestMapping("/meter") +public class WaterMeterDataReceiver extends BaseController { + + @Resource + private IWaterMeterDataService waterMeterDataService; + + @Resource + private IDeviceService deviceService; + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map meterData) throws ParseException { + // 判断必填字段 + if (meterData.containsKey("MeterAddr") == false) { + return ResponseData.error("设备地址字段缺失"); + } + if (meterData.containsKey("MeterNumber") == false) { + return ResponseData.error("水表读数字段缺失"); + } + if (meterData.containsKey("ReadDate") == false) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataWaterMeter dataWaterMeter = new DataWaterMeter(); + + // 赋值设备地址 + String meterAddr = meterData.get("MeterAddr").toString(); + dataWaterMeter.setDevcode(meterAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(meterAddr); + if (null == wellDto) { + log.info("没有找到" + meterAddr + "对应的井编号"); + return ResponseData.success(); + } + dataWaterMeter.setWellCode(wellDto.getWellCode()); + + // 赋值水表读数 + Double meterNumber = 0.0; + String numType = meterData.get("MeterNumber").getClass().getSimpleName(); + if (numType.equals("String")) { + meterNumber = Double.parseDouble(meterData.get("MeterNumber").toString()); + } else if (numType.equals("BigDecimal")) { + meterNumber = ((Number) meterData.get("MeterNumber")).doubleValue(); + } + dataWaterMeter.setFlowAcc(String.valueOf(meterNumber)); + + // 赋值数据采集时间 + String readDate = meterData.get("ReadDate").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dataWaterMeter.setUptime(sdf.parse(readDate)); + + // 赋值阀门状态 + if (meterData.containsKey("ValveStatus") == true) { + dataWaterMeter.setStatus(meterData.get("ValveStatus").toString()); + } + + dataWaterMeter.setLogtime(Calendar.getInstance().getTime()); + + // 保存到数据库 同时计算日/月用水量 + waterMeterDataService.saveWaterMeterData(dataWaterMeter); + + return ResponseData.success(); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java index ae94fc5..9e4fb24 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -23,6 +23,7 @@ List selectDataScopePage(@Param("scope") DataScope dataScope, @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline, @Param("areaId") String areaId); DeviceWellDto selectWellIdByCode(@Param("wellCode") String wellCode); + DeviceWellDto selectWellByDevcode(@Param("devcode") String devcode); List getAreaIds(@Param("areaId") Long areaId); String getArea(@Param("id") String id); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index de868cb..16545a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -39,6 +39,12 @@ AND WELL_CODE = #{wellCode} + + + SELECT FROM data_watermeter + where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 + + + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + d.ID AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.TYPE_NAME AS typeName + + + + + + + d + . + ID + AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.WATCH_TYPE AS watchType, t.id as type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + bus_well_info + SET bfzt = #{bfzt} + WHERE VALID = '1' + + and well_Type = #{wellType} + + + and deptid = #{deptid} + + + and (WELL_CODE like + + or POSITION like + + ) + + + + AND deptid IN + + #{i} + + + + + + + + + + + + + + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java new file mode 100644 index 0000000..6d68b47 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 水表原始记录 + *

+ * + * @author tanyue + * @since 2022-03-20 + */ +@TableName("data_watermeter") +@Data +public class DataWaterMeter extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井编号 + */ + @NotEmpty(message="井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @NotEmpty(message="设备编号不能为空") + @TableField("DEVCODE") + private String devcode; + /** + * 电池电量 + */ + @TableField("CELL") + private String cell; + /** + * 累计用水量 + */ + @NotEmpty(message="累计用水量不能为空") + @TableField("FLOW_ACC") + private String flowAcc; + /** + * 瞬时用水量 + */ + @TableField("FLOW") + private String flow; + /** + * 上传时间 + */ + @TableField("UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @NotEmpty(message="记录时间不能为空") + @TableField("LOGTIME") + private Date logtime; + /** + * 描述 + */ + @TableField("DESCN") + private String descn; + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/IWaterMeterDataService.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/IWaterMeterDataService.java new file mode 100644 index 0000000..2ed6970 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/IWaterMeterDataService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.service.IService; +import com.casic.missiles.modular.system.model.DataWaterMeter; + +import java.util.Map; + +public interface IWaterMeterDataService extends IService { + + boolean saveWaterMeterData(DataWaterMeter dataWaterMeter); + boolean insertWaterMeterDay(Map waterMeterDay); + boolean updateWaterMeterMonth(Map waterMeterMonth); + + DataWaterMeter selectLatestRecordByDevcode(String devcode, String uptime); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java new file mode 100644 index 0000000..335cd41 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/WaterMeterDataReceiver.java @@ -0,0 +1,89 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IWaterMeterDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Map; +import java.util.logging.Level; + +@Log +@Controller +@RequestMapping("/meter") +public class WaterMeterDataReceiver extends BaseController { + + @Resource + private IWaterMeterDataService waterMeterDataService; + + @Resource + private IDeviceService deviceService; + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map meterData) throws ParseException { + // 判断必填字段 + if (meterData.containsKey("MeterAddr") == false) { + return ResponseData.error("设备地址字段缺失"); + } + if (meterData.containsKey("MeterNumber") == false) { + return ResponseData.error("水表读数字段缺失"); + } + if (meterData.containsKey("ReadDate") == false) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataWaterMeter dataWaterMeter = new DataWaterMeter(); + + // 赋值设备地址 + String meterAddr = meterData.get("MeterAddr").toString(); + dataWaterMeter.setDevcode(meterAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(meterAddr); + if (null == wellDto) { + log.info("没有找到" + meterAddr + "对应的井编号"); + return ResponseData.success(); + } + dataWaterMeter.setWellCode(wellDto.getWellCode()); + + // 赋值水表读数 + Double meterNumber = 0.0; + String numType = meterData.get("MeterNumber").getClass().getSimpleName(); + if (numType.equals("String")) { + meterNumber = Double.parseDouble(meterData.get("MeterNumber").toString()); + } else if (numType.equals("BigDecimal")) { + meterNumber = ((Number) meterData.get("MeterNumber")).doubleValue(); + } + dataWaterMeter.setFlowAcc(String.valueOf(meterNumber)); + + // 赋值数据采集时间 + String readDate = meterData.get("ReadDate").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + dataWaterMeter.setUptime(sdf.parse(readDate)); + + // 赋值阀门状态 + if (meterData.containsKey("ValveStatus") == true) { + dataWaterMeter.setStatus(meterData.get("ValveStatus").toString()); + } + + dataWaterMeter.setLogtime(Calendar.getInstance().getTime()); + + // 保存到数据库 同时计算日/月用水量 + waterMeterDataService.saveWaterMeterData(dataWaterMeter); + + return ResponseData.success(); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java index ae94fc5..9e4fb24 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/DeviceMapper.java @@ -23,6 +23,7 @@ List selectDataScopePage(@Param("scope") DataScope dataScope, @Param("page") Page page, @Param("deviceType") String deviceType, @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords, @Param("isOnline") String isOnline, @Param("areaId") String areaId); DeviceWellDto selectWellIdByCode(@Param("wellCode") String wellCode); + DeviceWellDto selectWellByDevcode(@Param("devcode") String devcode); List getAreaIds(@Param("areaId") Long areaId); String getArea(@Param("id") String id); diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index de868cb..16545a3 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -39,6 +39,12 @@ AND WELL_CODE = #{wellCode} + + + SELECT FROM data_watermeter + where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 + + + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + d.ID AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.TYPE_NAME AS typeName + + + + + + + d + . + ID + AS deviceId, DEVCODE AS devcode, INSTALL_DATE AS installDate, ONLINE_STATE AS onlineState, t.WATCH_TYPE AS watchType, t.id as type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + bus_well_info + SET bfzt = #{bfzt} + WHERE VALID = '1' + + and well_Type = #{wellType} + + + and deptid = #{deptid} + + + and (WELL_CODE like + + or POSITION like + + ) + + + + AND deptid IN + + #{i} + + + + + + + + + + + + + + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java new file mode 100644 index 0000000..6d68b47 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/model/DataWaterMeter.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 水表原始记录 + *

+ * + * @author tanyue + * @since 2022-03-20 + */ +@TableName("data_watermeter") +@Data +public class DataWaterMeter extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Long id; + /** + * 井编号 + */ + @NotEmpty(message="井编号不能为空") + @TableField("WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @NotEmpty(message="设备编号不能为空") + @TableField("DEVCODE") + private String devcode; + /** + * 电池电量 + */ + @TableField("CELL") + private String cell; + /** + * 累计用水量 + */ + @NotEmpty(message="累计用水量不能为空") + @TableField("FLOW_ACC") + private String flowAcc; + /** + * 瞬时用水量 + */ + @TableField("FLOW") + private String flow; + /** + * 上传时间 + */ + @TableField("UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @NotEmpty(message="记录时间不能为空") + @TableField("LOGTIME") + private Date logtime; + /** + * 描述 + */ + @TableField("DESCN") + private String descn; + /** + * 状态 + */ + @TableField("STATUS") + private String status; + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/IWaterMeterDataService.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/IWaterMeterDataService.java new file mode 100644 index 0000000..2ed6970 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/IWaterMeterDataService.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.service.IService; +import com.casic.missiles.modular.system.model.DataWaterMeter; + +import java.util.Map; + +public interface IWaterMeterDataService extends IService { + + boolean saveWaterMeterData(DataWaterMeter dataWaterMeter); + boolean insertWaterMeterDay(Map waterMeterDay); + boolean updateWaterMeterMonth(Map waterMeterMonth); + + DataWaterMeter selectLatestRecordByDevcode(String devcode, String uptime); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/impl/WaterMeterDataServiceImpl.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/impl/WaterMeterDataServiceImpl.java new file mode 100644 index 0000000..66765ea --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/service/impl/WaterMeterDataServiceImpl.java @@ -0,0 +1,59 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DataWaterMeterMapper; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import com.casic.missiles.modular.system.service.IWaterMeterDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +@Service +@Log +public class WaterMeterDataServiceImpl extends ServiceImpl implements IWaterMeterDataService { + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @Override + @Transactional + public boolean saveWaterMeterData(DataWaterMeter dataWaterMeter) { + // 1. 保存原始记录 + this.baseMapper.insert(dataWaterMeter); + + // 2. 查询上一个最近的原始记录 + DataWaterMeter lastRec = this.selectLatestRecordByDevcode(dataWaterMeter.getDevcode(), sdf.format(dataWaterMeter.getUptime())); + if (null != lastRec) { + double lastFlowAcc = Double.parseDouble(lastRec.getFlowAcc()); + Date lastTime = lastRec.getUptime(); + + double flowAccDelt = Double.parseDouble(dataWaterMeter.getFlowAcc()) - lastFlowAcc; + long tmDelt = dataWaterMeter.getUptime().getTime() - lastTime.getTime(); + + // 计算日用水量 + + + // 计算和刷新月累计用水量 + } + + return true; + } + + @Override + public boolean insertWaterMeterDay(Map waterMeterDay) { + return false; + } + + @Override + public boolean updateWaterMeterMonth(Map waterMeterMonth) { + return false; + } + + @Override + public DataWaterMeter selectLatestRecordByDevcode(String devcode, String uptime) { + return this.baseMapper.selectLatestRecordByDevcode(devcode, uptime); + } +}