Commit 97c483a6 authored by kiritoausna's avatar kiritoausna

2026-1.22 新增不均匀沉降-改自表面位移

parent ad6d5dfd
package me.zhengjie.gemho.controller.data;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import me.zhengjie.gemho.service.data.BjyCjDataService;
import me.zhengjie.gemho.service.data.DmDataService;
import me.zhengjie.gemho.util.PageResult;
import me.zhengjie.gemho.util.RealVo;
import me.zhengjie.gemho.x_datavo.DataVo;
import me.zhengjie.gemho.x_datavo.data.DataQueryCriteria;
import me.zhengjie.gemho.x_datavo.data.ImgDataVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.HashMap;
/**
* <p>
* 内部位移数据 前端控制器
* </p>
*
* @author llj
* @since 2022-01-05
*/
@Api(tags = "数据管理: e.getMessage()")
@RestController
@RequestMapping("data/bjycj")
public class BjyCjDataController {
@Autowired
private BjyCjDataService bjycjDataService;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
/**
* 获取内部位移的历史数据
*
* @param dataQueryCriteria
* @return
*/
@ApiOperation("获取内部位移的历史数据")
@GetMapping("history")
public ResponseEntity<Object> gethistory(DataQueryCriteria dataQueryCriteria, HttpServletRequest request) {
try {
HashMap<String, Object> map = bjycjDataService.pageall(dataQueryCriteria, request);
return new ResponseEntity<>(new PageResult().success(map), HttpStatus.OK);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return new ResponseEntity<>(new PageResult().failed(), HttpStatus.INTERNAL_SERVER_ERROR);
}
@ApiOperation(value = "图标历史")
@GetMapping("imghistory")
public ResponseEntity<Object> imgList(DataQueryCriteria dataQueryCriteria, HttpServletRequest request) {
ImgDataVo dbData = bjycjDataService.imgList(dataQueryCriteria, request);
return new ResponseEntity<>(new PageResult().success(dbData), HttpStatus.OK);
}
@ApiOperation(value = "导出excel")
@GetMapping("download")
public void download(HttpServletResponse response, DataQueryCriteria dataQueryCriteria, HttpServletRequest request) {
bjycjDataService.download(response, dataQueryCriteria, request);
}
}
package me.zhengjie.gemho.mapper.data;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import me.zhengjie.gemho.entity.data.DmData;
import me.zhengjie.gemho.entity.data.MpData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.HashMap;
import java.util.List;
/**
* <p>
* 内部位移数据 Mapper 接口
* </p>
*
* @author llj
* @since 2022-01-05
*/
@Mapper
public interface BjyCjDataMapper extends BaseMapper<MpData> {
Page<MpData> pageall(@Param("page") Page<MpData> page, @Param("ew") QueryWrapper<MpData> queryWrapper);
@Select("SELECT a.disp_x as dispx ,a.disp_y as dispy,a.disp_h as disph ,a.time as time FROM `tb_mp_data` a join(select max(time) as time ,sensorid from tb_mp_data GROUP BY sensorid,DATE_FORMAT( time, '%y-%m-%d' ))b on a.time =b.time and a.sensorid=b.sensorid where a.sensorid=#{deviceid} and a.time>=#{start} and a.time <=#{end}GROUP BY DATE_FORMAT(a.time,'%y-%m-%d')")
List<MpData> dealmonth(String deviceid, String start, String end);
@Select(value = "select b.eqdanwei as eqdanwei,b.equipno equipno,b.equipname as sensorname,a.disp_x as disp_x , a.disp_y as disp_y ,a.disp_h as disp_h ,DATE_FORMAT(a.time,'%Y-%m-%d %H:%i:%m') as time from tb_mp_data a join tb_drybeachequipinfor b on a.sensorid=b.equipno join (select max(time) as time ,sensorid from tb_mp_data GROUP BY sensorid) c on a.time =c.time and a.sensorid=c.sensorid where a.datasource =1 and b.tailingid=#{tailingid} ORDER BY time DESC")
List<HashMap<String, Object>> real(String tailingid);
}
package me.zhengjie.gemho.service.data;
import com.baomidou.mybatisplus.extension.service.IService;
import me.zhengjie.gemho.entity.data.DmData;
import me.zhengjie.gemho.entity.data.MpData;
import me.zhengjie.gemho.x_datavo.DataVo;
import me.zhengjie.gemho.x_datavo.RealDataVo;
import me.zhengjie.gemho.x_datavo.data.DataQueryCriteria;
import me.zhengjie.gemho.x_datavo.data.ImgDataVo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
/**
* <p>
* 内部位移数据 服务类
* </p>
*
* @author llj
* @since 2022-01-05
*/
public interface BjyCjDataService extends IService<MpData> {
/**
* 实时数据
*
* @return
*/
List<RealDataVo> real(String equipno, HttpServletRequest request);
List<RealDataVo> real(String equipno, HttpServletRequest request,String tailInfoNo);
/**
* 分页历史
*
* @param dataQueryCriteria
* @param request
* @return
*/
HashMap<String, Object> pageall(DataQueryCriteria dataQueryCriteria, HttpServletRequest request);
/**
* 图表数据
*
* @param dataQueryCriteria
* @param request
* @return
*/
ImgDataVo imgList(DataQueryCriteria dataQueryCriteria, HttpServletRequest request);
void download(HttpServletResponse response, DataQueryCriteria dataQueryCriteria, HttpServletRequest request);
}
package me.zhengjie.gemho.service.data.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.SneakyThrows;
import me.zhengjie.gemho.entity.artificial.ArtificialData;
import me.zhengjie.gemho.entity.data.MpData;
import me.zhengjie.gemho.entity.tab.Drybeachequipinfor;
import me.zhengjie.gemho.mapper.artificial.ArtificialDataMapper;
import me.zhengjie.gemho.mapper.data.BjyCjDataMapper;
import me.zhengjie.gemho.mapper.data.MpDataMapper;
import me.zhengjie.gemho.mapper.tab.DrybeachequipinforMapper;
import me.zhengjie.gemho.service.data.BjyCjDataService;
import me.zhengjie.gemho.service.data.MpDataService;
import me.zhengjie.gemho.util.*;
import me.zhengjie.gemho.x_datavo.DataVo;
import me.zhengjie.gemho.x_datavo.NameVo;
import me.zhengjie.gemho.x_datavo.RealDataVo;
import me.zhengjie.gemho.x_datavo.Result;
import me.zhengjie.gemho.x_datavo.data.DataQueryCriteria;
import me.zhengjie.gemho.x_datavo.data.ImgDataVo;
import me.zhengjie.utils.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* <p>
* 表面位移数据 服务实现类
* </p>
*
* @author llj
* @since 2022-01-05
*/
@Service
public class BjyCjDataServiceImpl extends ServiceImpl<BjyCjDataMapper, MpData> implements BjyCjDataService {
@Autowired
private BjyCjDataMapper bjyCjDataMapper;
@Autowired
private DrybeachequipinforMapper drybeachequipinforMapper;
@Autowired
private ArtificialDataMapper artificialDataMapper;
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
@Override
public HashMap<String, Object> pageall(DataQueryCriteria dataQueryCriteria, HttpServletRequest request) {
long page = dataQueryCriteria.getPage();
long size = dataQueryCriteria.getSize();
//构建返回map
HashMap<String, Object> map = new HashMap<>();
//构建查询条件
QueryWrapper<MpData> mpDataQueryWrapper = new QueryWrapper<>();
ServiceUtil.dbquery(mpDataQueryWrapper, dataQueryCriteria, request);
//分页对象
Page<MpData> mpDataPage = new Page<>(page + 1, size);
mpDataPage = bjyCjDataMapper.pageall(mpDataPage, mpDataQueryWrapper);
List<MpData> records = mpDataPage.getRecords();
String checkArtificial = ServiceUtil.checkArtificial(dataQueryCriteria);
//获取编码-名字map
HashMap<String, String> noName = ServiceUtil.getNoName(request);
HashMap<String, String> noDan = ServiceUtil.getNoDan(request);
//处理人工巡检
if (checkArtificial != null) {
//获取所有的检测子项id 和 name的hashmap
HashMap<Integer, String> jczx = ServiceUtil.jczx();
HashMap<String, Integer> point = ServiceUtil.artificialPoint();
//
QueryWrapper<ArtificialData> artificialDataQueryWrapper = new QueryWrapper<>();
ServiceUtil.artificialQuery(artificialDataQueryWrapper, dataQueryCriteria, checkArtificial);
List<ArtificialData> artificialDataPageRecords = artificialDataMapper.selectList(artificialDataQueryWrapper);
//
for (MpData record : records) {
record.setSensorname(noName.get(record.getSensorid()));
record.setDanwei(noDan.get(record.getSensorid()));
Date time = record.getTime();
for (ArtificialData artificialDataPageRecord : artificialDataPageRecords) {
Date time1 = artificialDataPageRecord.getTime();
boolean b = false;
//判断数据是否在同一小时内
if (time1 != null) {
b = DateUtil.timeInterval(time, time1);
}
//判断当前设备是否绑定的监测点是否一致
boolean check = point.get(record.getSensorid()) == artificialDataPageRecord.getPoint_id();
if (b && check) {
record.setJcziitemname(jczx.get(artificialDataPageRecord.getJczx_id()));
record.setJcvalue(artificialDataPageRecord.getValue());
record.setJctime(time1);
//计算差值
if (checkArtificial.equals("14")) {
Double aDouble = Double.valueOf(record.getDispx());
Double aDouble1 = Double.valueOf(record.getJcvalue());
Double difference = aDouble - aDouble1;
double v = (difference < 0) ? -difference : difference;
record.setDifference(String.valueOf(v));
} else if (checkArtificial.equals("22")) {
Double aDouble = Double.valueOf(record.getDispy());
Double aDouble1 = Double.valueOf(record.getJcvalue());
Double difference = aDouble - aDouble1;
double v = (difference < 0) ? -difference : difference;
record.setDifference(String.valueOf(v));
} else if (checkArtificial.equals("23")) {
Double aDouble = Double.valueOf(record.getDisph());
Double aDouble1 = Double.valueOf(record.getJcvalue());
Double difference = aDouble - aDouble1;
double v = (difference < 0) ? -difference : difference;
record.setDifference(String.format("%.3f", v));
}
}
}
}
} else {
for (MpData record : records) {
//单位从mm->cm 数值/10(只对某个项目 所以打包完 注释)
/* String dispx = record.getDispx();
String dispy = record.getDispy();
String disph = record.getDisph();
record.setDispx(String.format("%.2f",Double.valueOf(dispx)/10));
record.setDispy(String.format("%.2f",Double.valueOf(dispy)/10));
record.setDisph(String.format("%.2f",Double.valueOf(disph)/10));*/
record.setSensorname(noName.get(record.getSensorid()));
record.setDanwei(noDan.get(record.getSensorid()));
}
}
map.put("list", records);
map.put("total", mpDataPage.getTotal());
return map;
}
@Override
public List<RealDataVo> real(String equipno1, HttpServletRequest request) {
String tailInfoNo = TailNoForInfoUtil.getTailInfoNo(request);
if (tailInfoNo == null) {
return null;
}
List<HashMap<String, Object>> reals = bjyCjDataMapper.real(tailInfoNo);
Map dbdata = ReadJsonFileUtil.getMap("realdata");
Object keys1 = dbdata.get("mpdata");
ArrayList<RealDataVo> realDataVos = new ArrayList<>();
for (int i = 0; i < reals.size(); i++) {
HashMap<String, Object> real = reals.get(i);
String sensorname = (String) real.get("sensorname");
String eqdanwei = (String) real.get("eqdanwei");
String equipno = (String) real.get("equipno");
String time = (String) real.get("time");
real.remove("time");
real.remove("equipno");
real.remove("sensorname");
real.remove("eqdanwei");
RealDataVo realDataVo = new RealDataVo();
realDataVo.setTime(time);
realDataVo.setEquipno(equipno);
realDataVo.setData(real);
realDataVo.setKeys(keys1);
realDataVo.setName(sensorname);
realDataVo.setType(equipno1);
realDataVo.setEqdanwei(eqdanwei);
realDataVos.add(realDataVo);
}
return realDataVos;
}
@Override
public List<RealDataVo> real(String equipno1, HttpServletRequest request, String tailInfoNo) {
List<HashMap<String, Object>> reals = bjyCjDataMapper.real(tailInfoNo);
Map dbdata = ReadJsonFileUtil.getMap("realdata");
Object keys1 = dbdata.get("mpdata");
ArrayList<RealDataVo> realDataVos = new ArrayList<>();
for (int i = 0; i < reals.size(); i++) {
HashMap<String, Object> real = reals.get(i);
String sensorname = (String) real.get("sensorname");
String eqdanwei = (String) real.get("eqdanwei");
String equipno = (String) real.get("equipno");
String time = (String) real.get("time");
real.remove("time");
real.remove("equipno");
real.remove("sensorname");
real.remove("eqdanwei");
RealDataVo realDataVo = new RealDataVo();
realDataVo.setTime(time);
realDataVo.setEquipno(equipno);
realDataVo.setData(real);
realDataVo.setKeys(keys1);
realDataVo.setName(sensorname);
realDataVo.setType(equipno1);
realDataVo.setEqdanwei(eqdanwei);
realDataVos.add(realDataVo);
}
return realDataVos;
}
@Override
public ImgDataVo imgList(DataQueryCriteria dataQueryCriteria, HttpServletRequest request) {
String code = dataQueryCriteria.getCode();
if (code == null) {
//获取当前尾矿库
String tailInfoNo = TailNoForInfoUtil.getTailInfoNo(request);
if (tailInfoNo == null) {
return null;
}
QueryWrapper<Drybeachequipinfor> drybeachequipinforQueryWrapper = new QueryWrapper<>();
drybeachequipinforQueryWrapper.eq("devicetype", "3").eq("tailingid", tailInfoNo).orderByDesc("id");
Drybeachequipinfor drybeachequipinfor = drybeachequipinforMapper.selectList(drybeachequipinforQueryWrapper).get(0);
dataQueryCriteria.setCode(drybeachequipinfor.getEquipno());
}
QueryWrapper<MpData> mpDataQueryWrapper = new QueryWrapper<>();
ServiceUtil.imgQuery(mpDataQueryWrapper, dataQueryCriteria);
List<MpData> mpData = bjyCjDataMapper.selectList(mpDataQueryWrapper);
//获取编码-名
HashMap<String, String> noName = ServiceUtil.getNoName(request);
HashMap<String, String> noDan = ServiceUtil.getNoDan(request);
String sensorname = noName.get(dataQueryCriteria.getCode());
String danwei = noDan.get(dataQueryCriteria.getCode());
//处理封装数据
ImgDataVo mpdata = ServiceUtil.deal("mpdata1", sensorname, mpData, danwei,dataQueryCriteria.getCode());
return mpdata;
}
@SneakyThrows
@Override
public void download(HttpServletResponse response, DataQueryCriteria dataQueryCriteria, HttpServletRequest request) {
dataQueryCriteria.setSize(9999999999L);
List<MpData> mpData = (List<MpData>) pageall(dataQueryCriteria, request).get("list");
//判断是否需要人工
boolean result = false;
String checkArtificial = ServiceUtil.checkArtificial(dataQueryCriteria);
if (checkArtificial != null) {
result = true;
}
ArrayList<Map<String, Object>> list = new ArrayList<>();
if (!ObjectUtils.isEmpty(mpData)) {
for (MpData mpDatum : mpData) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("设备名称", mpDatum.getSensorname());
map.put("设备ID", mpDatum.getSensorid());
map.put("x变化量", mpDatum.getDispx());
map.put("y变化量", mpDatum.getDispy());
map.put("z变化量", mpDatum.getDisph());
map.put("大地坐标x", mpDatum.getVelocityx());
map.put("大地坐标y", mpDatum.getVelocityy());
map.put("大地坐标h", mpDatum.getVelocityh());
map.put("是否报警", mpDatum.getState() == 0 ? "否" : "是");
map.put("监测时间", mpDatum.getTime());
if (result) {
map.put("人工监测项", mpDatum.getJcziitemname());
map.put("人工监测值", mpDatum.getJcvalue());
map.put("人工监测时间", mpDatum.getJctime());
map.put("人工监测差异", mpDatum.getDifference());
}
list.add(map);
}
}
FileUtil.downloadExcel(list, "监测数据: 表面位移", response);
}
public String deal(Date date) throws ParseException {
String[] stringListHashMap = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(date);
String[] arr = format.split("-");
Calendar instance = Calendar.getInstance();
instance.set(Integer.parseInt(arr[0]), Integer.parseInt(arr[1]) - 1, Integer.parseInt(arr[2]));
int i = instance.get(Calendar.DAY_OF_WEEK) - 1;
return stringListHashMap[i];
}
}
...@@ -5,7 +5,7 @@ spring: ...@@ -5,7 +5,7 @@ spring:
connectionProperties: druid.stat.mergeSql=false;druid.stat.slowSqlMillis=5000 connectionProperties: druid.stat.mergeSql=false;druid.stat.slowSqlMillis=5000
db-type: com.alibaba.druid.pool.DruidDataSource db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3310}/${DB_NAME:zhonghe}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=true&requireSSL=true url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:ak}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=true&requireSSL=false
username: ${DB_USER:root} username: ${DB_USER:root}
#password: ${DB_PWD:jinghe2021//} #password: ${DB_PWD:jinghe2021//}
password: ${DB_PWD:jinghe2023} password: ${DB_PWD:jinghe2023}
......
...@@ -5,7 +5,7 @@ spring: ...@@ -5,7 +5,7 @@ spring:
freemarker: freemarker:
check-template-location: false check-template-location: false
profiles: profiles:
active: prod active: dev
jackson: jackson:
time-zone: GMT+8 time-zone: GMT+8
data: data:
...@@ -28,9 +28,9 @@ spring: ...@@ -28,9 +28,9 @@ spring:
redis: redis:
#数据库索引 #数据库索引
database: ${REDIS_DB:0} database: ${REDIS_DB:0}
host: ${REDIS_HOST:8.142.46.126} host: ${REDIS_HOST:127.0.0.1}
port: ${REDIS_PORT:6379} port: ${REDIS_PORT:6399}
password: ${REDIS_PWD:} password: ${REDIS_PWD:R#9Xz&2Lp$Wq8v!u}
#连接超时时间 #连接超时时间
timeout: 5000 timeout: 5000
......
<?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="me.zhengjie.gemho.mapper.data.BjyCjDataMapper">
<!-- MpData实体类的resultMap -->
<resultMap id="MpDataResultMap" type="me.zhengjie.gemho.entity.data.MpData">
<!-- 主键字段 -->
<id column="id" property="id" jdbcType="INTEGER"/>
<!-- 基本字段 -->
<result column="sensorid" property="sensorid" jdbcType="VARCHAR"/>
<result column="sensorname" property="sensorname" jdbcType="VARCHAR"/>
<result column="time" property="time" jdbcType="TIMESTAMP"/>
<!-- 位移相关字段 -->
<result column="disp_x" property="dispx" jdbcType="VARCHAR"/>
<result column="disp_y" property="dispy" jdbcType="VARCHAR"/>
<result column="disp_h" property="disph" jdbcType="VARCHAR"/>
<!-- 速度相关字段 -->
<result column="velocity_x" property="velocityx" jdbcType="VARCHAR"/>
<result column="velocity_y" property="velocityy" jdbcType="VARCHAR"/>
<result column="velocity_h" property="velocityh" jdbcType="VARCHAR"/>
<!-- 加速度相关字段 -->
<result column="acceler_x" property="accelerx" jdbcType="VARCHAR"/>
<result column="acceler_y" property="accelery" jdbcType="VARCHAR"/>
<result column="acceler_h" property="accelerh" jdbcType="VARCHAR"/>
<!-- 其他测量字段 -->
<result column="azimuth" property="azimuth" jdbcType="VARCHAR"/>
<result column="vds" property="vds" jdbcType="VARCHAR"/>
<result column="ads" property="ads" jdbcType="VARCHAR"/>
<result column="vdh" property="vdh" jdbcType="VARCHAR"/>
<result column="adh" property="adh" jdbcType="VARCHAR"/>
<!-- 时间戳字段 -->
<result column="createtime" property="createtime" jdbcType="TIMESTAMP"/>
<result column="updatetime" property="updatetime" jdbcType="TIMESTAMP"/>
<!-- 状态字段 -->
<result column="datasource" property="datasource" jdbcType="INTEGER"/>
<result column="state" property="state" jdbcType="INTEGER"/>
<result column="bjjb" property="bjjb" jdbcType="VARCHAR"/>
</resultMap>
<select id="pageall" resultMap="MpDataResultMap">
select *
from tb_mp_data a join
tb_drybeachequipinfor as b
on a.sensorid=b.equipno and b.devicetype='20'
${ew.customSqlSegment}
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment