diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcDataMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcDataMapper.java index 8cda63f9..ffc38899 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcDataMapper.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcDataMapper.java @@ -1,11 +1,14 @@ package com.imdroid.secapi.dto; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.base.MPJBaseMapper; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Param; + @Mapper public interface GnssCalcDataMapper extends MPJBaseMapper { - @Select({"select * from gnssdevicelocationrecords where deviceid = #{deviceId} limit 1"}) - GnssCalcData queryByDeviceId(String deviceId); + Page queryByDeviceId(@Param("page") IPage page, @Param("deviceId") String deviceId, + @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("count") Integer count); } diff --git a/sec-api/src/main/resources/mapper/GnssCalcDataMapper.xml b/sec-api/src/main/resources/mapper/GnssCalcDataMapper.xml new file mode 100644 index 00000000..1d29be08 --- /dev/null +++ b/sec-api/src/main/resources/mapper/GnssCalcDataMapper.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/auth/AuthInterceptor.java b/sec-beidou/src/main/java/com/imdroid/beidou/auth/AuthInterceptor.java index 10e9d1dd..ad39a672 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/auth/AuthInterceptor.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/auth/AuthInterceptor.java @@ -20,7 +20,7 @@ public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String username = SessionUtils.getCurrentUser(request); - if (!StringUtils.isEmpty(username)) { + if (!StringUtils.hasText(username)) { return true; } String clientType = request.getHeader("x-imdroid-type"); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java index 0ee0e92c..a324057b 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java @@ -1,7 +1,9 @@ package com.imdroid.beidou.controller; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.query.MPJQueryWrapper; import com.imdroid.beidou.entity.Tenant; import com.imdroid.beidou.entity.TenantMapper; @@ -16,6 +18,10 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Enumeration; import java.util.List; /** @@ -27,20 +33,71 @@ public class GnssCalcDataController extends BasicController implements CommonExc GnssCalcDataMapper dataMapper; @Autowired TenantMapper tenantMapper; + @Autowired + GnssDeviceMapper deviceMapper; boolean isJoinQuery = false; + final DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @RequestMapping("/page/gnss_data_calc") public String gnssData(Model m, HttpSession session) { initModel(m, session); List tenants = tenantMapper.selectList(null); m.addAttribute("tenant_list", tenants); + + if(tenantId != Tenant.SAAS_PROVIDER_ID) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("tenantid", tenantId); + queryWrapper.select("project_id"); + queryWrapper.groupBy("project_id"); + List gnssDeviceList = deviceMapper.selectList(queryWrapper); + m.addAttribute("project_list", gnssDeviceList); + } return "/page/gnss_data_calc"; } /**** 推送数据 *****/ @RequestMapping("/gnss/data/list_calc") @ResponseBody - public JSONObject listMsg(HttpSession session, Integer page, Integer limit, String searchParams) { + public JSONObject listData(HttpSession session, Integer page, Integer limit, String searchParams) { + // 检查查询条件 + JSONObject search = null; + if (searchParams != null) { + search = (JSONObject) JSONObject.parse(searchParams); + String deviceId = search.getString("sl_t.deviceid"); + Integer freqency = search.getInteger("freqency"); + String begin = search.getString("dgt_t.createtime"); + String end = search.getString("dlt_t.createtime"); + + if(deviceId != null && !deviceId.isBlank() && freqency!=0){ + Page pageable = new Page<>(page == null ? 1 : page, limit == null ? 10 : limit); + + // 缺省按1小时采样,如果时间跨度较大,则按最多300条记录的采样率采样 + int sample = 6; + + if(freqency == 2){ + LocalDateTime endTime = LocalDateTime.now(); + LocalDateTime beginTime = endTime.minusDays(30); + if(begin!=null && !begin.isBlank()){ + beginTime = LocalDateTime.parse(begin,df); + } + if(end!=null && !end.isBlank()){ + endTime = LocalDateTime.parse(end,df); + } + Duration duration = Duration.between(beginTime, endTime); + int hours = (int)duration.toHours(); + if(hours > 300) sample = hours*6/300; + } + Page calcDataList = dataMapper.queryByDeviceId(pageable, deviceId,begin,end,sample); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("code", 0); + jsonObject.put("msg", ""); + jsonObject.put("count", calcDataList.getTotal()); + jsonObject.put("data", calcDataList.getRecords()); + return jsonObject; + } + } + return this.pageList(session, page, limit, searchParams); } @@ -86,6 +143,19 @@ public class GnssCalcDataController extends BasicController implements CommonExc } else isJoinQuery=false; } + @Override + public void checkSearchParams(Enumeration enu){ + isJoinQuery=false; + if(enu != null) { + while (enu.hasMoreElements()) { + if(enu.nextElement().contains("d.parentid")){ + isJoinQuery = true; + break; + } + } + } + } + @Override public MPJQueryWrapper prepareQueryWrapper() { if(isJoinQuery) { diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java index 7647a9e0..c56c64a4 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java @@ -106,22 +106,22 @@ public class GnssDeviceController extends BasicController{ JSONObject search = (JSONObject) JSONObject.parse(searchParams); //设备号 String deviceid = search.getString("deviceid"); - if (!StringUtils.isEmpty(deviceid)) { + if (!StringUtils.hasText(deviceid)) { queryWrapper.like("deviceid", deviceid); } //父设备号 String parentid = search.getString("parentid"); - if (!StringUtils.isEmpty(parentid)) { + if (!StringUtils.hasText(parentid)) { queryWrapper.like("parentid", parentid); } //项目号 String project_id = search.getString("project_id"); - if (!StringUtils.isEmpty(project_id)) { + if (!StringUtils.hasText(project_id)) { queryWrapper.like("project_id", project_id); } //所属组织 String tenantname = search.getString("tenantname"); - if (!StringUtils.isEmpty(tenantname)) { + if (!StringUtils.hasText(tenantname)) { queryWrapper.like("tenantname", tenantname); } //设备类型 @@ -337,12 +337,12 @@ public class GnssDeviceController extends BasicController{ JSONObject search = (JSONObject) JSONObject.parse(searchParams); //设备号 String deviceid = search.getString("deviceid"); - if (!StringUtils.isEmpty(deviceid)) { + if (!StringUtils.hasText(deviceid)) { queryWrapper.like("deviceid", deviceid); } //父设备号 String parentid = search.getString("parentid"); - if (!StringUtils.isEmpty(parentid)) { + if (!StringUtils.hasText(parentid)) { queryWrapper.like("parentid", parentid); } //设备类型 @@ -367,4 +367,48 @@ public class GnssDeviceController extends BasicController{ return jsonObject; } + @RequestMapping("/gnss/device/q_project") + @ResponseBody + public JSONObject queryProject(HttpSession session, Integer tenantid) { + JSONObject jsonObject = new JSONObject(); + if(tenantid != null){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("tenantid",tenantid); + queryWrapper.select("project_id"); + queryWrapper.groupBy("project_id"); + List gnssDeviceList = gnssDeviceMapper.selectList(queryWrapper); + jsonObject.put("data",gnssDeviceList); + } + return jsonObject; + } + + @RequestMapping("/gnss/device/q_parentid") + @ResponseBody + public JSONObject queryParent(HttpSession session, String projectid) { + JSONObject jsonObject = new JSONObject(); + if(projectid != null){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("project_id",projectid); + queryWrapper.select("parentid"); + queryWrapper.groupBy("parentid"); + List gnssDeviceList = gnssDeviceMapper.selectList(queryWrapper); + jsonObject.put("data",gnssDeviceList); + } + return jsonObject; + } + + @RequestMapping("/gnss/device/q_deviceid") + @ResponseBody + public JSONObject queryDevice(HttpSession session, String parentid) { + JSONObject jsonObject = new JSONObject(); + if(parentid != null){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("parentid",parentid); + queryWrapper.select("deviceid"); + queryWrapper.groupBy("deviceid"); + List gnssDeviceList = gnssDeviceMapper.selectList(queryWrapper); + jsonObject.put("data",gnssDeviceList); + } + return jsonObject; + } } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/OssFileController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/OssFileController.java index c0daf47c..5d4e6974 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/OssFileController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/OssFileController.java @@ -54,7 +54,7 @@ public class OssFileController { @RequestMapping("/upload-device-image") public HttpResult upload(@RequestParam("file") MultipartFile multipartFile, String deviceId) throws Exception { System.out.println("upload device image:" + multipartFile.getOriginalFilename()); - if (StringUtils.isEmpty(deviceId)) { + if (StringUtils.hasText(deviceId)) { return HttpResult.fail("设备编号不能为空"); } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java b/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java index 12ccc7db..85ee22d5 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/service/CommonExcelService.java @@ -47,7 +47,7 @@ public interface CommonExcelService { */ default AbstractWrapper prepareQueryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); - if (!StringUtils.isEmpty(getOrderByColumn())) { + if (!StringUtils.hasText(getOrderByColumn())) { if ("desc".equals(getOrder())) { queryWrapper.orderByDesc(getOrderByColumn()); } else { @@ -146,6 +146,7 @@ public interface CommonExcelService { * @throws Exception */ default void export(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception { + checkSearchParams(request.getParameterNames()); AbstractWrapper queryWrapper = prepareQueryWrapper(); Integer tenantId = (Integer) session.getAttribute(SessionUtils.SESSION_TENANT_ID); @@ -160,6 +161,7 @@ public interface CommonExcelService { String paraValue = request.getParameter(paraName); setQueryWrapper(queryWrapper, paraName, paraValue); } + List cs = null; if (isJoinSelect()) { MPJBaseMapper baseMapper = (MPJBaseMapper) getMapper(); @@ -179,6 +181,7 @@ public interface CommonExcelService { } default void checkSearchParams(JSONObject search){} + default void checkSearchParams(Enumeration enu){} /** * 设置查询条件 @@ -189,19 +192,19 @@ public interface CommonExcelService { */ default void setQueryWrapper(AbstractWrapper queryWrapper, String paraName, Object paraValue) { // String - if (paraName.startsWith("s") && !StringUtils.isEmpty(paraValue)) { + if (paraName.startsWith("s") && !StringUtils.hasText((String)paraValue)) { addStringQueryWrapper(queryWrapper, paraName, paraValue); } // Number - else if (paraName.startsWith("n") && !StringUtils.isEmpty(paraValue)) { + else if (paraName.startsWith("n") && !StringUtils.hasText((String)paraValue)) { addNumberQueryWrapper(queryWrapper, paraName, paraValue); } // Date & Time - else if (paraName.startsWith("d") && !StringUtils.isEmpty(paraValue)) { + else if (paraName.startsWith("d") && !StringUtils.hasText((String)paraValue)) { addDateQueryWrapper(queryWrapper, paraName, paraValue); } // Boolean - else if (paraName.startsWith("b") && !StringUtils.isEmpty(paraValue)) { + else if (paraName.startsWith("b") && !StringUtils.hasText((String)paraValue)) { addBooleanQueryWrapper(queryWrapper, paraName, paraValue); } } @@ -213,7 +216,7 @@ public interface CommonExcelService { default void addStringQueryWrapper(AbstractWrapper queryWrapper, String paraName, Object paraValue) { String column = getColumn(paraName); String value = paraValue.toString(); - if (StringUtils.isEmpty(value)) { + if (StringUtils.hasText(value)) { return; } if (paraName.startsWith("s_")) { diff --git a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html index 82556f79..b3c94ec2 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html @@ -21,22 +21,36 @@
- + +
-
- +
- + +
+
+
+ +
+
@@ -48,7 +62,17 @@
- +
+ +
+ +
+
+
@@ -58,18 +82,27 @@
-
- +
+
    +
  • 数据表格
  • +
  • 单个设备曲线
  • +
+
+
+
+
+
+
+
+
+
+ -
-
-
-
-
+ @@ -82,6 +115,7 @@ table = layui.table, laydate = layui.laydate; var searchDeviceId = false; + var echartsDevice = echarts.init(document.getElementById('echarts-gnss'), 'walden'); var data_cols = [ {field: 'deviceid', title: '设备号'}, {field: 'createtime', title: '产生时间', width:'18%', templet: "
{{layui.util.toDateString(d.createtime, 'yyyy-MM-dd HH:mm:ss')}}
"}, @@ -123,7 +157,7 @@ cols: [ data_cols ], - limits: [10, 15, 20, 25, 50, 100], + limits: [10, 50, 100, 200, 300], limit: 15, page: true, skin: 'line', @@ -160,8 +194,92 @@ return false; }); + form.on('select(device)', function (data) { + //对select和input进行监控渲染 + if (data.value != "") { + $("#input_deviceid").val(data.value); + } + }); + + // 所属部门下拉框改变,修改项目下拉框 + form.on('select(tenant)', function (data) { + //console.log(data.value); + $.ajax({ + type:"GET", + url:"/gnss/device/q_project", + data:{ + 'tenantid':data.value + }, + success: function(result) { + $('#projectid').empty(); + $('#projectid').append(new Option("全部", "")); + $('#parentid').empty(); + $('#parentid').append(new Option("全部", "")); + $('#deviceid').empty(); + //console.log(result); + $.each(result.data, function (index, item) { + $('#projectid') + .append(new Option(item.project_id, item.project_id)); + }); + layui.form.render("select"); + }, + error: function () { + console.log("ajax error"); + } + }); + }); + // 项目下拉框改变,修改基站下拉框 + form.on('select(project)', function (data) { + $.ajax({ + type:"GET", + url:"/gnss/device/q_parentid", + data:{ + 'projectid':data.value + }, + success: function(result) { + $('#parentid').empty(); + $('#parentid').append(new Option("全部", "")); + //console.log(result); + $.each(result.data, function (index, item) { + $('#parentid').append(new Option(item.parentid, item.parentid)); + }); + layui.form.render("select"); + }, + error: function () { + console.log("ajax error"); + } + }); + }); + //基站下拉框改变,修改设备号下拉框 + form.on('select(ref_device)', function (data) { + $.ajax({ + type:"GET", + url:"/gnss/device/q_deviceid", + data:{ + 'parentid':data.value + }, + success: function(result) { + $('#deviceid').empty(); + //console.log(result); + $.each(result.data, function (index, item) { + $('#deviceid').append(new Option(item.deviceid, item.deviceid)); + }); + layui.form.render("select"); + }, + error: function () { + console.log("ajax error"); + } + }); + }); + + //监听Tab切换,重新resize图表,否则显示不出来 + layui.element.on('tab(data-tab)', function(data){ + if (data.index == 1) { + echartsDevice.resize(); + } + }); + function showChart(chartData){ - var echartsDevice = echarts.init(document.getElementById('echarts-gnss'), 'walden'); var t = []; var e = []; var n = [];