| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- 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;
- @Autowired
- SmartAccessService smartAccessService;
- @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);
- ArrayList<LastSevenDaysTrackVo> vos = new ArrayList<>();
- for (SmartFaceDiscern faceDiscern : smartFaceDiscerns) {
- 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(stateTime, endTime, id);
- // 获取班级名称
- SmartUser smartUser = smartUserService.getSmartById(id);
- 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);
- }
- // 门禁信息
- List<SmartAccess> smartAccesses = smartAccessService.track(stateTime, endTime, id);
- for (SmartAccess faceDiscern : smartAccesses) {
- 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);
- }
- // 排序
- Collections.sort(vos, Comparator.comparing((h) -> {
- return h.getDateTime();
- }));
- return CommonResult.ok(vos);
- }
- @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<SmartAccess> smartAccessWrapper = new LambdaQueryWrapper<>();
- smartAccessWrapper.between(SmartAccess::getDateTime, stateTime, endTime);
- int faceDiscernCount = smartAccessService.count(smartAccessWrapper);
- 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);
- }
- // 门禁信息
- List<SmartAccess> smartAccesses = smartAccessService.track(startTime, endTime, userId);
- for (SmartAccess faceDiscern : smartAccesses) {
- 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);
- }
- // 排序
- 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);
- Integer userId = 0;
- SmartUser smartUser = null;
- if (ObjectUtils.isNotEmpty(idNum)) {
- smartUser = smartUserService.getBsStudentNo(idNum);
- if (ObjectUtils.isNotEmpty(smartUser)) {
- userId = smartUser.getId();
- } else {
- userId = 0;
- }
- }
- // 出入标识: 1-进, 0-出
- Integer inout = jsonObject.getInteger("inout");
- // 开门方式:0-白名单比对,1-人证比对,2-IC卡比对
- Integer openType = jsonObject.getInteger("openType");
- SmartAccess smartFaceDiscern = new SmartAccess();
- smartFaceDiscern.setName(s);
- smartFaceDiscern.setLocation(address);
- smartFaceDiscern.setType(type);
- smartFaceDiscern.setUserId(userId);
- smartFaceDiscern.setDateTime(time);
- smartFaceDiscern.setIdNum(idNum);
- smartFaceDiscern.setSn(sn);
- smartFaceDiscern.setInOut(inout);
- smartFaceDiscern.setOpenType(openType);
- smartFaceDiscern.setResultStatus(resultStatus);
- if (userId != 0) {
- // 判断是否已经添加
- LambdaQueryWrapper<SmartAccess> wrapperFD = new LambdaQueryWrapper<>();
- wrapperFD.eq(SmartAccess::getDateTime, smartFaceDiscern.getDateTime())
- .eq(SmartAccess::getUserId, userId);
- List<SmartAccess> list = smartAccessService.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);
- smartAccessService.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<SmartAccess> wrapperFD = new LambdaQueryWrapper<>();
- wrapperFD.eq(SmartAccess::getDateTime, time)
- .eq(SmartAccess::getName, s)
- .eq(SmartAccess::getType, type);
- List<SmartAccess> list = smartAccessService.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);
- smartAccessService.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();
- }
- @Override
- public CommonResult selectTrack(Integer userId, String startTime, String endTime) {
- 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);
- }
- // 门禁信息
- List<SmartAccess> smartAccesses = smartAccessService.track(startTime, endTime, userId);
- for (SmartAccess faceDiscern : smartAccesses) {
- 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);
- }
- // 排序
- Collections.sort(vos, Comparator.comparing((h) -> {
- return h.getDateTime();
- }));
- return CommonResult.ok(vos);
- }
- 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);
- }
- }
|