From fa672aad1a91b2a8481324339e063230d378039e Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期五, 09 八月 2024 14:56:36 +0800
Subject: [PATCH] 7.17

---
 guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/AppController.java |  208 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 195 insertions(+), 13 deletions(-)

diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/AppController.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/AppController.java
index 5bac0ea..de6c827 100644
--- a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/AppController.java
+++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/AppController.java
@@ -1,35 +1,41 @@
 package com.stylefeng.guns.modular.system.controller;
 
+
 import com.alibaba.druid.support.json.JSONUtils;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.stylefeng.guns.core.base.tips.ErrorTip;
 import com.stylefeng.guns.core.common.constant.JwtConstants;
 import com.stylefeng.guns.core.common.exception.BizExceptionEnum;
 import com.stylefeng.guns.core.exception.GunsException;
 import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.util.DateUtil;
 import com.stylefeng.guns.modular.system.dto.QuestionDto;
-import com.stylefeng.guns.modular.system.model.TDevice;
-import com.stylefeng.guns.modular.system.model.TUserData;
-import com.stylefeng.guns.modular.system.model.TUserDateData;
-import com.stylefeng.guns.modular.system.model.User;
+import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.ITDeviceService;
 import com.stylefeng.guns.modular.system.service.ITUserDataService;
 import com.stylefeng.guns.modular.system.service.ITUserDateDataService;
 import com.stylefeng.guns.modular.system.service.IUserService;
-import com.stylefeng.guns.modular.system.util.R;
-import com.stylefeng.guns.modular.system.util.RedisService;
+import com.stylefeng.guns.modular.system.util.*;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.ss.formula.functions.T;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -76,15 +82,34 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public R<TDevice> checkeq(HttpServletRequest request){
+    public R checkeq(HttpServletRequest request){
         Integer uid =  redisService.getCacheObject(request.getHeader(JwtConstants.AUTH_HEADER));
 
         List<TDevice> bindId = deviceService.selectList(new EntityWrapper<TDevice>().eq("bindId", uid));
         if (bindId.isEmpty()){
-            return R.fail("未绑定硬件");
+            return R.fail("当前用户暂未绑定设备");
         }
 
         return R.ok(bindId.get(0));
+    }
+
+
+    @ResponseBody
+    @PostMapping("/api/unbind")
+    @ApiOperation(value = "解绑", tags = {"App接口"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public R unbind(HttpServletRequest request){
+        Integer uid =  redisService.getCacheObject(request.getHeader(JwtConstants.AUTH_HEADER));
+
+        List<TDevice> bindId = deviceService.selectList(new EntityWrapper<TDevice>().eq("bindId", uid));
+
+        for (TDevice tDevice : bindId) {
+            deviceService.deleteById(tDevice.getId());
+        }
+
+        return R.ok();
     }
 
     @ResponseBody
@@ -112,10 +137,12 @@
         device.setBindId(uid);
         if (deviceService.selectList(new EntityWrapper<TDevice>().eq("mac", device.getMac())).isEmpty()) {
             device.setBindId(uid);
+            device.setBindTime(new Date());
             deviceService.insert(device);
         }else {
             TDevice serNum = deviceService.selectOne(new EntityWrapper<TDevice>().eq("serNum", device.getSerNum()));
             serNum.setBindId(uid);
+            serNum.setBindTime(new Date());
             deviceService.updateById(serNum);
         }
         return R.ok();
@@ -165,7 +192,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public R<PageInfo<TUserDateData>> datalist(HttpServletRequest request,Integer pageNum,Integer pageSize,Integer night,String date) {
+    public R<PageInfo<TUserDateData>> datalist(HttpServletRequest request, Integer pageNum, Integer pageSize, Integer night, String date) {
         Integer userId =  redisService.getCacheObject(request.getHeader(JwtConstants.AUTH_HEADER));
 
         PageHelper.startPage(pageNum,pageSize);
@@ -179,12 +206,95 @@
 
         tUserDateDataEntityWrapper.setSqlSelect("id","date","night");
         List<TUserDateData> tUserDateData = dateDataService.selectList(tUserDateDataEntityWrapper);
+        for (TUserDateData tUserDateDatum : tUserDateData) {
+            tUserDateDatum.setTUserDataArray(new TUserData[]{});
+        }
         PageInfo<TUserDateData> info=new PageInfo<>(tUserDateData);
         System.err.println(info);
 
         return R.ok(info);
 
     }
+
+    @PostMapping("/api/clear")
+    @ApiOperation(value = "设备clear", tags = {"App接口"}, notes = "")
+    @ResponseBody
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public R clear(String serNum) {
+        //获取当天18点的时间
+        redisService.setCacheObject("CLEAR:"+serNum, new Date());
+
+        return R.ok();
+
+
+    }
+
+    @PostMapping("/api/ifclear")
+    @ApiOperation(value = "设备是否需要clear", tags = {"App接口"}, notes = "")
+    @ResponseBody
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public R ifclear(String serNum) {
+        //获取当天18点的时间
+        Date cacheObject = redisService.getCacheObject("CLEAR:"+serNum);
+
+        if (cacheObject!=null){
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(Calendar.HOUR_OF_DAY, 18);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MILLISECOND, 0);
+
+            Date dateAt1800 = calendar.getTime();
+            if (cacheObject.before(dateAt1800)){
+                return R.ok(false);
+            }else {
+                return R.ok(true);
+            }
+        }else {
+            return R.ok(true);
+        }
+    }
+
+
+
+
+
+    @PostMapping("/api/link")
+    @ApiOperation(value = "设备连接断开", tags = {"App接口"}, notes = "")
+    @ResponseBody
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public R link(@RequestBody LinkQuery linkQuery) {
+        TDevice serNum = deviceService.selectOne(new EntityWrapper<TDevice>().eq("serNum", linkQuery.getSerNum()));
+        serNum.setStatus(linkQuery.getStatus());
+        deviceService.updateById(serNum);
+        if (linkQuery.getStatus()==0){
+            Long timestamp = new Date().getTime();
+            redisService.setCacheObject(linkQuery.getSerNum(), timestamp.toString());
+        }
+        return R.ok();
+
+
+    }
+
+    @PostMapping("/api/last")
+    @ApiOperation(value = "获取上次断开时间", tags = {"App接口"}, notes = "")
+    @ResponseBody
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public R last(String serNum) {
+        String date = (String)redisService.getCacheObject(serNum);
+        return R.ok(date);
+
+
+    }
+
 
     @PostMapping("/api/datadetail")
     @ApiOperation(value = "检测记录详情", tags = {"App接口"}, notes = "")
@@ -194,6 +304,23 @@
     })
     public R<TUserDateData> datadetail(HttpServletRequest request,Integer dataId) {
         TUserDateData tUserDateData = dateDataService.selectById(dataId);
+
+
+        ObjectMapper mapper = new ObjectMapper();
+        TUserData[] tUserDataArray = new TUserData[]{};
+        try {
+            // 将JSON字符串转换为TUserData数组
+            tUserDataArray = mapper.readValue(tUserDateData.getData(), TUserData[].class);
+            for (TUserData tUserData : tUserDataArray) {
+                tUserData.setTime(tUserData.getDetectionTime().getTime());
+            }
+            tUserDateData.setTUserDataArray(tUserDataArray);
+            // 打印转换后的数组,以便验证
+            System.out.println(Arrays.toString(tUserDataArray));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        tUserDateData.setData(null);
 
         return R.ok(tUserDateData);
 
@@ -208,10 +335,61 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public R pulldata(HttpServletRequest request, @RequestBody List<TUserData> data){
+    public R pulldata(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws ParseException, JsonProcessingException {
         Integer uid =  redisService.getCacheObject(request.getHeader(JwtConstants.AUTH_HEADER));
+        List<TUserData> data = new ArrayList<>();
 
-        data = userDataService.selectList(null);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        Workbook book = WoUtil.ImportFile(file);
+        Sheet sh = book.getSheetAt(0);   //获取到第一个表
+        for (int i = 1; i <= sh.getLastRowNum(); i++) {
+            Row row = sh.getRow(i);
+
+
+            Cell cell2 = row.getCell(2);  //所属加盟商[提示:加盟车辆选填]
+            Integer two = null;
+            if (SinataUtil.isNotEmpty(cell2)) {
+                two = (int)cell2.getNumericCellValue();
+            }
+
+
+            Cell cell4 = row.getCell(4);  //服务模式:出租车[是/否]
+            String four = null;
+            if (SinataUtil.isNotEmpty(cell4)) {
+                four = String.valueOf(cell4.getStringCellValue()).trim();
+            }
+
+            Cell cell5 = row.getCell(1);  // 服务模式: 出租车[是/否]
+            Date five = null;
+            int divisor = 5;
+            if (SinataUtil.isNotEmpty(cell5)) {
+                double numericValue = cell5.getNumericCellValue();
+                long timestamp = (long) numericValue; // 如果数值是整数毫秒时间戳
+                five = new Date(timestamp);
+                long seconds = timestamp / 1000;
+
+                // 判断秒数是否为divisor的倍数
+                boolean isMultiple = seconds % divisor == 0;
+                if (!isMultiple){
+//                    continue;
+                }
+            } else {
+                // 处理单元格为空的情况
+            }
+//            System.err.println("====");
+            TUserData tUserData = new TUserData();
+            tUserData.setUserId(uid);
+            tUserData.setDetectionTime(five);
+            tUserData.setPosition(four);
+            tUserData.setShapeVariable(Integer.valueOf(two));
+            data.add(tUserData);
+        }
+
+
+
+
+//        data = userDataService.selectList(null);
         Map<String, List<TUserData>> groupedData = data.stream()
                 .collect(Collectors.groupingBy(
                         item -> {
@@ -257,8 +435,12 @@
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
-                List<TUserData> list = Arrays.asList(tUserDataArray);
-                list.addAll(entry.getValue());
+                List<TUserData> list = new ArrayList<>(); // 初始化一个空的 ArrayList
+                list.addAll(Arrays.asList(tUserDataArray)); // 将原始数组添加到列表中
+                List<TUserData> value = entry.getValue();
+                list.addAll(value);
+                String jsonInString = mapper.writeValueAsString(list);
+                tUserDateData1.setData(jsonInString);
                 dateDataService.updateById(tUserDateData1);
             }else {
                 TUserDateData tUserDateData2 = new TUserDateData();

--
Gitblit v1.7.1