| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- 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.annotation.DESRespondSecret;
- import com.template.annotation.PassToken;
- import com.template.api.SmartCarAccessControllerAPI;
- import com.template.api.SmartFaceDiscernControllerAPI;
- import com.template.common.utils.*;
- import com.template.config.ControlConfig;
- import com.template.model.pojo.*;
- import com.template.model.result.CommonResult;
- import com.template.model.vo.LastSevenDaysTrackVo;
- import com.template.services.*;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- 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 org.springframework.web.multipart.MultipartFile;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.net.URLDecoder;
- import java.net.URLEncoder;
- import java.text.SimpleDateFormat;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- import static com.template.common.utils.AesTestOne.decrypt;
- /**
- * <p>
- * 前端控制器
- * </p>
- *
- * @author ceshi
- * @since 2024-01-18
- */
- @RestController
- //返回参数加密注解
- @DESRespondSecret
- public class SmartFaceDiscernController implements SmartFaceDiscernControllerAPI {
- private static Logger logger = LoggerFactory.getLogger(SmartFaceDiscernController.class);
- @Autowired
- SmartFaceDiscernService smartFaceDiscernService;
- @Autowired
- SmartQrcodeService smartQrcodeService;
- @Autowired
- SmartCarAccessService smartCarAccessService;
- @Autowired
- SmartAttendanceService smartAttendanceService;
- @Autowired
- SmartUserService smartUserService;
- @Autowired
- SmartClassService smartClassService;
- @Autowired
- SmartUploadService smartUploadService;
- @Autowired
- SmartNotificationService smartNotificationService;
- @Autowired
- SmartDeviceService smartDeviceService;
- @Override
- @DESRespondSecret(validated = true)
- public CommonResult track(Integer id, int dateTime) {
- JSONObject date = getDate(dateTime);
- String stateTime = date.getString("stateTime");
- String endTime = date.getString("endTime");
- List<SmartFaceDiscern> smartFaceDiscerns = smartFaceDiscernService.track(stateTime, endTime, id);
- return CommonResult.ok(smartFaceDiscerns);
- }
- @Override
- @DESRespondSecret(validated = true)
- public CommonResult access() {
- LocalDateTime now = LocalDateTime.now();
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
- JSONArray jsonArray = new JSONArray();
- for (int i = 0; i < 30; i++) {
- LocalDateTime stateTime = now.minusDays(i + 1);
- LocalDateTime endTime = now.minusDays(i);
- String dateTime = endTime.format(dateTimeFormatter);
- LambdaQueryWrapper<SmartFaceDiscern> faceDiscernWrapper = new LambdaQueryWrapper<>();
- faceDiscernWrapper.between(SmartFaceDiscern::getDateTime, stateTime, endTime)
- .ne(SmartFaceDiscern::getType, "人脸比对");
- int faceDiscernCount = smartFaceDiscernService.count(faceDiscernWrapper);
- LambdaQueryWrapper<SmartQrcode> qrcodeWrapper = new LambdaQueryWrapper<>();
- qrcodeWrapper.between(SmartQrcode::getCreateTime, stateTime, endTime);
- int qrcodeCount = smartQrcodeService.count(qrcodeWrapper);
- LambdaQueryWrapper<SmartCarAccess> smartCarAccessWrapper = new LambdaQueryWrapper<>();
- smartCarAccessWrapper.between(SmartCarAccess::getEnterTime, stateTime, endTime);
- int carCount = smartCarAccessService.count(smartCarAccessWrapper);
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("date", dateTime);
- jsonObject.put("face", faceDiscernCount);
- jsonObject.put("code", qrcodeCount);
- jsonObject.put("car", carCount);
- jsonArray.add(jsonObject);
- }
- return CommonResult.ok(jsonArray);
- }
- @Override
- @DESRespondSecret(validated = true)
- public CommonResult lastSevenDaysTrack(int userId) {
- LocalDateTime end = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).plusDays(1);
- LocalDateTime satrt = end.minusDays(7);
- DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- String endTime = end.format(dateTimeFormatter1);
- String startTime = satrt.format(dateTimeFormatter1);
- ArrayList<LastSevenDaysTrackVo> vos = new ArrayList<>();
- List<SmartFaceDiscern> faceDiscerns = smartFaceDiscernService.track(startTime, endTime, userId);
- for (SmartFaceDiscern faceDiscern : faceDiscerns) {
- LastSevenDaysTrackVo lastSevenDaysTrackVo = new LastSevenDaysTrackVo();
- lastSevenDaysTrackVo.setName(faceDiscern.getName());
- lastSevenDaysTrackVo.setType(faceDiscern.getType());
- lastSevenDaysTrackVo.setLocation(faceDiscern.getLocation());
- lastSevenDaysTrackVo.setImage(faceDiscern.getImage());
- lastSevenDaysTrackVo.setDateTime(faceDiscern.getDateTime());
- vos.add(lastSevenDaysTrackVo);
- }
- List<SmartAttendance> attendances = smartAttendanceService.track(startTime, endTime, userId);
- // 获取班级名称
- SmartUser smartUser = smartUserService.getSmartById(userId);
- SmartClass smartClass = smartClassService.getSmartClassById(smartUser.getSchoolClass());
- String className = smartClass.getName();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- for (SmartAttendance attendance : attendances) {
- LastSevenDaysTrackVo lastSevenDaysTrackVo = new LastSevenDaysTrackVo();
- lastSevenDaysTrackVo.setName(attendance.getXwUserName());
- lastSevenDaysTrackVo.setType("打卡");
- lastSevenDaysTrackVo.setLocation(className);
- Date attendTime = attendance.getAttendTime();
- lastSevenDaysTrackVo.setDateTime(sdf.format(attendTime));
- vos.add(lastSevenDaysTrackVo);
- }
- // 排序
- Collections.sort(vos, Comparator.comparing((h) -> {
- return h.getDateTime();
- }));
- return CommonResult.ok(vos);
- }
- @Override
- @PassToken
- @DESRespondSecret(validated = false)
- public String callBack(HttpServletRequest request, HttpServletResponse response) {
- try {
- BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
- StringBuilder responseStrBuilder = new StringBuilder();
- String inputStr;
- while ((inputStr = streamReader.readLine()) != null) {
- responseStrBuilder.append(inputStr);
- }
- JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
- DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- // 比对时间
- String time = jsonObject.getString("time");
- logger.info("time = " + time);
- LocalDateTime localDateTime = LocalDateTime.now().withHour(0).withSecond(0).withMinute(0);
- LocalDateTime localDateTime2 = LocalDateTime.parse(time, dateTimeFormatter1);
- // 只获取当天的
- if (localDateTime.isBefore(localDateTime2)) {
- // 比对结果
- Integer resultStatus = jsonObject.getInteger("resultStatus");
- if (1 == resultStatus) {
- // 设备sn
- String sn = jsonObject.getString("sn");
- SmartDevice smartDevice = smartDeviceService.getNum(sn);
- String address = "";
- String type = "";
- if (ObjectUtils.isNotEmpty(smartDevice)) {
- // 地点
- address = smartDevice.getAddress();
- // 类型
- type = smartDevice.getName();
- }
- // 名字,学生会加班级[]
- String name = jsonObject.getString("name");
- System.out.println("name = " + name);
- String[] split = name.split("\\[");
- String s = split[0];
- logger.info("name = " + s);
- // 百胜门禁编号
- String idNum = jsonObject.getString("idNum");
- logger.info("idNum = " + idNum);
- SmartUser smartUser = smartUserService.getBsStudentNo(idNum);
- Integer userId = 0;
- if (ObjectUtils.isNotEmpty(smartUser)) {
- userId = smartUser.getId();
- } else {
- userId = 0;
- }
- SmartFaceDiscern smartFaceDiscern = new SmartFaceDiscern();
- smartFaceDiscern.setName(s);
- smartFaceDiscern.setLocation(address);
- smartFaceDiscern.setType(type);
- smartFaceDiscern.setUserId(userId);
- smartFaceDiscern.setDateTime(time);
- smartFaceDiscern.setIdNum(idNum);
- smartFaceDiscern.setSn(sn);
- if (userId != 0) {
- // 判断是否已经添加
- LambdaQueryWrapper<SmartFaceDiscern> wrapperFD = new LambdaQueryWrapper<>();
- wrapperFD.eq(SmartFaceDiscern::getDateTime, smartFaceDiscern.getDateTime())
- .eq(SmartFaceDiscern::getUserId, userId);
- List<SmartFaceDiscern> list = smartFaceDiscernService.list(wrapperFD);
- if (ObjectUtils.isEmpty(list) && list.size() == 0) {
- // 抓拍的照片 base64字符串
- String scenePhoto = jsonObject.getString("scenePhoto");
- scenePhoto = "data:image/jpeg;base64," + scenePhoto;
- logger.info("scenePhoto =" + scenePhoto.substring(0, 50));
- // base64转文件
- MultipartFile multipartFile = MultipartFileUtils.base64ToMultipartFile(scenePhoto);
- String image="";
- try {
- // 上传到cos桶,并生成图片地址
- image = smartUploadService.upload(new MultipartFile[]{multipartFile});
- }catch (Exception e){
- e.printStackTrace();
- logger.error("上传cos桶失败");
- }
- smartFaceDiscern.setImage(image);
- smartFaceDiscernService.save(smartFaceDiscern);
- // 通过学生id找到关联的家长affiliate,并找到公众号,如果openid为空则不传
- List<SmartUser> userList = smartUserService.getAffiliateList(userId);
- if (ObjectUtils.isNotEmpty(userList) && userList.size() > 0) {
- for (SmartUser user : userList) {
- String gzhOpenId = user.getGzhOpenId();
- if (ObjectUtils.isNotEmpty(gzhOpenId)) {
- String pushType = "";
- if (type.contains("进校")) {
- pushType = "进入大门";
- } else if (type.contains("出校")) {
- pushType = "离开大门";
- }
- LocalDateTime date = LocalDateTime.now();
- String format = date.format(dateTimeFormatter1);
- // 公众号信息推送
- Message2.send(gzhOpenId, pushType, address, format);
- SmartNotification smartNotification = new SmartNotification();
- smartNotification.setUserId(smartUser.getId());
- smartNotification.setUserName(smartUser.getName());
- smartNotification.setTypeName(pushType);
- smartNotification.setLocation(address);
- smartNotification.setImage(image);
- smartNotification.setDateTime(time);
- smartNotification.setType(2);
- smartNotificationService.save(smartNotification);
- }
- }
- }
- }
- } else {
- smartFaceDiscern.setUserId(0);
- // 判断是否已经添加
- LambdaQueryWrapper<SmartFaceDiscern> wrapperFD = new LambdaQueryWrapper<>();
- wrapperFD.eq(SmartFaceDiscern::getDateTime, time)
- .eq(SmartFaceDiscern::getName, s)
- .eq(SmartFaceDiscern::getType, type);
- List<SmartFaceDiscern> list = smartFaceDiscernService.list(wrapperFD);
- if (ObjectUtils.isEmpty(list) && list.size() == 0) {
- // 抓拍的照片 base64字符串
- String scenePhoto = jsonObject.getString("scenePhoto");
- scenePhoto = "data:image/jpeg;base64," + scenePhoto;
- logger.info("scenePhoto =" + scenePhoto.substring(0, 50));
- // base64转文件
- MultipartFile multipartFile = MultipartFileUtils.base64ToMultipartFile(scenePhoto);
- String image="";
- try {
- // 上传到cos桶,并生成图片地址
- image = smartUploadService.upload(new MultipartFile[]{multipartFile});
- }catch (Exception e){
- e.printStackTrace();
- logger.error("上传cos桶失败");
- }
- smartFaceDiscern.setImage(image);
- smartFaceDiscernService.save(smartFaceDiscern);
- }
- }
- }
- }
- } catch (
- Exception e) {
- e.printStackTrace();
- JSONObject r = new JSONObject();
- r.put("message", "Success");
- r.put("result", 0);
- return r.toJSONString();
- }
- JSONObject r = new JSONObject();
- r.put("message", "Success");
- r.put("result", 0);
- return r.toJSONString();
- }
- public static JSONObject getDate(Integer date) {
- JSONObject jsonObject = new JSONObject();
- 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);
- 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) {
- LocalDateTime dateTime1 = LocalDateTime.of(2022, 8, 29, 12, 0, 0);
- LocalDateTime dateTime2 = LocalDateTime.of(2022, 8, 30, 12, 0, 0);
- LocalDateTime dateTime3 = LocalDateTime.of(2022, 8, 28, 12, 0, 0);
- boolean isBefore = dateTime1.isBefore(dateTime2);
- boolean isBefore2 = dateTime1.isBefore(dateTime3);
- System.out.println("dateTime1 is before dateTime2: " + isBefore);
- System.out.println("dateTime1 is before dateTime2: " + isBefore2);
- }
- }
|