liu 2 лет назад
Родитель
Сommit
724e0227cc

+ 8 - 1
src/main/java/com/template/api/SmartFaceDiscernControllerAPI.java

@@ -1,7 +1,14 @@
 package com.template.api;
 
+import com.template.model.result.CommonResult;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
-@RequestMapping("/auto/smart-face-discern")
+@RequestMapping("/api/smartFaceDiscern")
 public interface SmartFaceDiscernControllerAPI {
+
+        @GetMapping(value = "/track")
+    CommonResult track(@RequestParam Integer id, @RequestParam int dateTime);
+
 }

+ 1 - 1
src/main/java/com/template/common/utils/ExcelUtil3.java

@@ -16,7 +16,7 @@ public class ExcelUtil3 {
         response.setCharacterEncoding("UTF-8");
         response.setContentType("application/vnd.ms-excel");
         response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
-        EasyExcel.write(response.getOutputStream(), clazs).excelType(ExcelTypeEnum.XLS).autoCloseStream(Boolean.TRUE)
+        EasyExcel.write(response.getOutputStream(), clazs).excelType(ExcelTypeEnum.XLSX).autoCloseStream(Boolean.TRUE)
                 .sheet("预警报表").doWrite(target);
     }
 }

+ 40 - 31
src/main/java/com/template/controller/SmartFaceDiscernController.java

@@ -1,17 +1,34 @@
 package com.template.controller;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.template.api.SmartFaceDiscernControllerAPI;
-import com.template.common.utils.Md5Utils;
+import com.template.common.utils.*;
+import com.template.config.ControlConfig;
+import com.template.model.pojo.SmartFaceDiscern;
+import com.template.model.pojo.SmartUser;
+import com.template.model.result.CommonResult;
 import com.template.services.SmartFaceDiscernService;
+import com.template.services.SmartUserService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.time.LocalDateTime;
-import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+
+import static com.template.common.utils.AesTestOne.decrypt;
 
 /**
  * <p>
@@ -27,46 +44,38 @@ public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI
     @Autowired
     SmartFaceDiscernService smartFaceDiscernService;
 
-    static String appid = "sc1eb792c1ea3237e9";
-    static String appSecret = "61afd794ed3244e995c5e894e5788193";
-    static String schoolCode = "SL1704880825203963";
-
-    public void a() {
-        String url = "http://schoolopenapi.szymzh.com/openapi/record/searchrecord";
 
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("appid",appid);
-        jsonObject.put("timestamp", "20240122162820000");
-        jsonObject.put("schoolno", schoolCode);
-        JSONObject data = new JSONObject();
-        data.put("pageindex", "1");
-        data.put("pagesize", "10");
-        String dataString = data.toJSONString();
+    @Override
+    public CommonResult track(Integer id,int dateTime) {
+        JSONObject date = getDate(dateTime);
 
+        String stateTime = date.getString("stateTime");
+        String endTime = date.getString("endTime");
 
-        jsonObject.put("data", data);
+        List<SmartFaceDiscern> smartFaceDiscerns =smartFaceDiscernService.track(stateTime,endTime,id);
 
-        String stringA="appid="+appid+"&data="+dataString+"&schoolno="+schoolCode+"&timestamp="+"20240122162820000"+"&";
+        return CommonResult.ok(smartFaceDiscerns);
+    }
 
-        String stringSignTemp=stringA+"key="+appSecret;
+    public static JSONObject getDate(Integer date){
+        JSONObject jsonObject = new JSONObject();
 
-        String sign = Md5Utils.md5One(stringSignTemp);
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime stateTime = now.withHour(0).withMinute(0).withSecond(0).minusDays(date);
 
-        jsonObject.put("sign", sign);
+        LocalDateTime endTime = now.withHour(23).withMinute(59).withSecond(59).minusDays(date);
 
+        jsonObject.put("stateTime",stateTime.format(dateTimeFormatter1));
+        jsonObject.put("endTime",endTime.format(dateTimeFormatter1));
 
+        return jsonObject;
 
     }
 
     public static void main(String[] args) {
-        String s = String.valueOf(LocalDateTime.now(ZoneOffset.UTC).toInstant(ZoneOffset.of("+8")).toEpochMilli());
-        System.out.println("s = " + s);
-        JSONObject data = new JSONObject();
-        data.put("pageindex", "1");
-        data.put("pagesize", "10");
-        String s1 = data.toJSONString();
-        System.out.println("s1 = " + s1);
-
+        JSONObject date = getDate(1);
+        System.out.println("date = " + date);
     }
 
 }

+ 1 - 1
src/main/java/com/template/controller/SmartWarningController.java

@@ -151,7 +151,7 @@ public class SmartWarningController implements SmartWarningControllerAPI {
 //        sheetDataList.add(head);
 
 
-        String fileName = "预警.xls";
+        String fileName = "预警.xlsx";
         List<WarningEntity> warningEntities = new ArrayList<>();
 
 //        获取数据

+ 11 - 5
src/main/java/com/template/handler/MyMetaObjectHandler.java

@@ -21,15 +21,21 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
     @Override
     public void insertFill(MetaObject metaObject) {
         HttpServletRequest request = getHttpServletRequest();
-        if(request != null){
+        if (request != null) {
             String user_id = request.getHeader("user_head") == null ? "0" : AesUtils.decrypt(request.getHeader("user_head"));
             log.info("start insert fill.....");
             // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject
             this.setFieldValByName("createTime", new Date(), metaObject);
             this.setFieldValByName("updateTime", new Date(), metaObject);
-            this.setFieldValByName("createUser", user_id , metaObject);
-            this.setFieldValByName("updateUser", user_id , metaObject);
-            this.setFieldValByName("deleted", 0 , metaObject);
+            this.setFieldValByName("createUser", user_id, metaObject);
+            this.setFieldValByName("updateUser", user_id, metaObject);
+            this.setFieldValByName("deleted", 0, metaObject);
+        } else {
+            this.setFieldValByName("createTime", new Date(), metaObject);
+            this.setFieldValByName("updateTime", new Date(), metaObject);
+            this.setFieldValByName("createUser","0", metaObject);
+            this.setFieldValByName("updateUser","0", metaObject);
+            this.setFieldValByName("deleted", 0, metaObject);
         }
     }
 
@@ -37,7 +43,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
     @Override
     public void updateFill(MetaObject metaObject) {
         HttpServletRequest request = getHttpServletRequest();
-        if(request != null){
+        if (request != null) {
             String user_id = request.getHeader("user_head") == null ? "0" : AesUtils.decrypt(request.getHeader("user_head"));
             log.info("start update fill.....");
             this.setFieldValByName("updateTime", new Date(), metaObject);

+ 24 - 1
src/main/java/com/template/services/SmartFaceDiscernService.java

@@ -1,16 +1,39 @@
 package com.template.services;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.common.utils.AesTestOne;
+import com.template.common.utils.CommonUtil;
+import com.template.common.utils.RequestUtils;
+import com.template.common.utils.TimeExchange;
 import com.template.model.pojo.SmartFaceDiscern;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.template.model.pojo.SmartUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+import static com.template.common.utils.AesTestOne.decrypt;
 
 /**
  * <p>
- *  服务类
+ * 服务类
  * </p>
  *
  * @author ceshi
  * @since 2024-01-18
  */
+
 public interface SmartFaceDiscernService extends IService<SmartFaceDiscern> {
 
+
+    List<SmartFaceDiscern> track(String stateTime, String endTime, Integer id);
 }

+ 170 - 1
src/main/java/com/template/services/impl/SmartFaceDiscernServiceImpl.java

@@ -1,14 +1,35 @@
 package com.template.services.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.template.common.utils.AesTestOne;
+import com.template.common.utils.CommonUtil;
+import com.template.common.utils.RequestUtils;
+import com.template.common.utils.TimeExchange;
 import com.template.model.pojo.SmartFaceDiscern;
 import com.template.mapper.SmartFaceDiscernMapper;
+import com.template.model.pojo.SmartUser;
 import com.template.services.SmartFaceDiscernService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.template.services.SmartUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+import static com.template.common.utils.AesTestOne.decrypt;
+
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author ceshi
@@ -16,5 +37,153 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class SmartFaceDiscernServiceImpl extends ServiceImpl<SmartFaceDiscernMapper, SmartFaceDiscern> implements SmartFaceDiscernService {
+    @Autowired
+    SmartUserService smartUserService;
+
+
+    //    static String appid = "sc5efc60f2bd373df9";
+    static String appid = "sc1eb792c1ea3237e9";
+    //    static String appSecret = "fe0d767a2a394d1b81ccda6fc0ce5ecc";
+    static String appSecret = "61afd794ed3244e995c5e894e5788193";
+    //    static String schoolCode = "SL1701743624375793";
+    static String schoolCode = "SL1704880825203963";
+
+    private Integer page = 1;
+    private Integer size = 20;
+
+//    @Scheduled(cron = "0 0/30 * * * ? ")
+    public void baiS()  {
+        try {
+            getFaceDiscern(page, size);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+
+    public void getFaceDiscern(Integer pageindex, Integer pagesize) throws Exception {
+//        String url = "http://schoolopenapi.szymzh.com/openapi/record/searchrecord";
+        String url = "https://schoolopenapi.ymiot.net/openapi/record/searchrecord";
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("appid", appid);
+        String timestamp = TimeExchange.DateNowTimeStamo();
+        jsonObject.put("timestamp", timestamp);
+        jsonObject.put("schoolno", schoolCode);
+        JSONObject data = new JSONObject();
+        data.put("pageindex", pageindex + "");
+        data.put("pagesize", pagesize + "");
+
+//        时间
+        DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime stateTime = now.withHour(0).withMinute(0).withSecond(0);
+        LocalDateTime endTime = now.withHour(23).withMinute(59).withSecond(59);
+//        开始时间
+        data.put("record_begintime", stateTime.format(dateTimeFormatter1));
+//        结束时间
+        data.put("record_endtime", endTime.format(dateTimeFormatter1));
+
+
+        String dataString = data.toJSONString();
+        System.out.println(dataString);
+//        加密
+        String aesStr = URLEncoder.encode(AesTestOne.encrypt(dataString, appSecret), "UTF-8");
+
+        jsonObject.put("data", aesStr);
+
+        String stringA = "appid=" + appid + "&data=" + dataString + "&schoolno=" + schoolCode + "&timestamp=" + timestamp + "&key=" + appSecret;
+
+        String sign = CommonUtil.MD5(stringA);
+
+        jsonObject.put("sign", sign);
+
+        String s = RequestUtils.httpPost(url, jsonObject.toJSONString());
+        JSONObject jsonObject1 = JSONObject.parseObject(s);
+        String data1 = jsonObject1.getString("data");
+        // URL解码
+        String decodedUrl = URLDecoder.decode(data1, "UTF-8");
+
+        String decrypt = decrypt(decodedUrl, appSecret);
+        System.out.println("decrypt = " + decrypt);
+        if (ObjectUtils.isNotEmpty(decrypt)) {
+            JSONObject jsonObject2 = JSONObject.parseObject(decrypt);
+//            获取总数
+            Integer total = Integer.valueOf(jsonObject2.getString("total"));
+
+            if (total > pageindex * pagesize) {
+                page = pageindex + 1;
+            } else {
+                page = pageindex - 1;
+            }
+
+
+            JSONArray data2 = jsonObject2.getJSONArray("data");
+            for (int i = 0; i < data2.size(); i++) {
+                JSONObject jsonObject3 = data2.getJSONObject(i);
+                SmartFaceDiscern smartFaceDiscern = new SmartFaceDiscern();
+
+//                事件
+                String deviceName = jsonObject3.getString("device_name");
+                smartFaceDiscern.setType(deviceName);
+
+//                地点
+                String deviceArea = jsonObject3.getString("device_area");
+                smartFaceDiscern.setLocation(deviceArea);
+
+//                图片
+                String recordPhoto = jsonObject3.getString("record_photo");
+                smartFaceDiscern.setImage(recordPhoto);
+
+//                时间
+                String recordAddtime = jsonObject3.getString("record_addtime");
+                smartFaceDiscern.setDateTime(recordAddtime);
+
+//                名字
+                String student_name = jsonObject3.getString("student_name");
+                smartFaceDiscern.setName(student_name);
+//                 学号
+                String student_number = jsonObject3.getString("student_number");
+//                编号
+                String student_no = jsonObject3.getString("student_no");
+
+                LambdaQueryWrapper<SmartUser> wrapper = new LambdaQueryWrapper<>();
+                wrapper.eq(SmartUser::getBsStudentNo, student_no);
+                wrapper.eq(SmartUser::getName, student_name);
+                SmartUser smartUser = smartUserService.getOne(wrapper);
+
+                if (ObjectUtils.isNotEmpty(smartUser)) {
+                    smartFaceDiscern.setUserId(smartUser.getId());
+
+//                    判断是否已经添加
+                    LambdaQueryWrapper<SmartFaceDiscern> wrapperFD = new LambdaQueryWrapper<>();
+                    wrapperFD.eq(SmartFaceDiscern::getDateTime, recordAddtime)
+                            .eq(SmartFaceDiscern::getId, smartUser.getId());
+                    SmartFaceDiscern one = this.getOne(wrapperFD);
+
+                    if (ObjectUtils.isEmpty(one)) {
+                        this.save(smartFaceDiscern);
+                    }
+
+
+                }
+
+            }
+
+        }
+    }
+
+    @Override
+    public List<SmartFaceDiscern> track(String stateTime, String endTime, Integer id) {
+
+        LambdaQueryWrapper<SmartFaceDiscern> wrapper=new LambdaQueryWrapper<>();
+        wrapper.between(SmartFaceDiscern::getDateTime,stateTime,endTime)
+                .eq(SmartFaceDiscern::getUserId,id)
+                .orderByDesc(SmartFaceDiscern::getDateTime);
+
+        List<SmartFaceDiscern> list = this.list(wrapper);
 
+        return list;
+    }
 }