From 6184590c2aa56b889062229d3000b81fcba002e3 Mon Sep 17 00:00:00 2001 From: xuquan <1099815072@qq.com> Date: Mon, 13 Sep 2021 16:48:47 +0800 Subject: [PATCH] 海康大华接口提交 --- cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java | 2 -- cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java | 8 ++++++++ cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java | 4 ++++ cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java | 7 +++++++ cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java | 15 +++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++---------- cloud/dahua/src/main/java/com/example/dahua/utils/DateUtils.java | 14 ++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java | 1 - cloud/dahua/src/main/resources/mapper/usermapper.xml | 11 +++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java | 21 +++++++++++++-------- cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java | 9 +++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java | 5 ++++- cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java | 3 ++- cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java | 2 ++ cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java | 55 +++++++++++++++++++++++++++++++++---------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------- cloud/haikangface/src/main/resources/mapper/usermapper.xml | 11 +++++++++++ 17 files changed, 239 insertions(+), 61 deletions(-) diff --git a/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java b/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java index 07c2323..00ad6d7 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java +++ b/cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java @@ -190,8 +190,6 @@ public class UserControl { } } } - - } diff --git a/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java b/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java index 2be2017..c29d660 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java +++ b/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java @@ -83,4 +83,12 @@ public class UserOperateController { public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) { return sendUserInfoTask.deleteFaceByCard(schoolId,cardNum,deviceId); } + + @ApiOperation(value = "按班级指定下发") + @RequestMapping(value = "sendFaceByClassId", method = RequestMethod.POST) + public void exportFace(@RequestParam("schoolId") Integer schoolId, + @RequestParam(value = "classIds",required = false) String classIds, + @RequestParam(value = "deviceIds",required = false) String deviceIds){ + userOperateService.sendFaceByClassId(schoolId,classIds,deviceIds); + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java index 97e0bc5..54e3cf0 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java +++ b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java @@ -17,6 +17,8 @@ public interface UserDao { @Select("select school_id from SZ_Attendance where clint_id = #{clint_id} ") String getSchoolIdbyClint_id( @Param("clint_id") String clint_id); + @Select("select * from SZ_Attendance where school_id = #{schoolId} and clint_type = 29") + List selectDeviceBySchoolId(@Param("schoolId") Integer schoolId); /** * 获取设备出入类型 * @param clint_id @@ -269,4 +271,6 @@ public interface UserDao { List queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId); List queryStudentIdList(@Param("schoolId") Integer schoolId,@Param("roomId")Integer roomId); + + List getStudentByClassId(@Param("schoolId") int schoolId,@Param("classIds") List classIds); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java b/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java index 7138786..2611730 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java @@ -12,6 +12,13 @@ public interface UserOperateService { * 照片下发 */ void sendUserFaces(Integer schoolId,Integer userType,String deviceIds,Integer studentType,String sex); + /** + * 按班級下發 + * @param schoolId + * @param classIds + * @param deviceIds + */ + void sendFaceByClassId(Integer schoolId,String classIds,String deviceIds); void test6(Integer schoolId,Integer roomId,Integer type,Integer outof,String intime,String clintId,String startTime,String endTime); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java index 2ad2764..a18c10e 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java @@ -130,4 +130,19 @@ public class BaseService { return; } } + + public List getStudentByClassId(Integer schoolId,String classIds) { + List list = new ArrayList<>(); + if(!StringUtils.isEmpty(classIds)){ + String[] msg = classIds.split(","); + for(String s : msg){ + list.add(Integer.valueOf(s)); + } + } + List students = userDao.getStudentByClassId(schoolId,list); + //去重重复数据 + List studentList = students.stream().collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); + return studentList; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java index d63dec2..f6cfab4 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java @@ -7,6 +7,7 @@ import com.example.dahua.lib.CompressPic; import com.example.dahua.lib.FilePath; import com.example.dahua.service.UserOperateService; import com.example.dahua.utils.DateFormatUtil; +import com.example.dahua.utils.DateUtils; import com.example.dahua.utils.HttpUtils; import com.example.dahua.xiananDao.SearchMapper; import com.example.dahua.xiananDao.SendRecordDao; @@ -17,10 +18,8 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.stream.Collectors; /** * 下发用户信息、人脸、卡、权限接口实现类 @@ -49,27 +48,47 @@ public class UserOperateServiceImpl implements UserOperateService { log.error("未选择下发设备"); return; } - //根据类型获取下发用户信息、文件名目录 - String typeName=""; List studentBeanList = null; if(userType.intValue()==2){ - typeName= "Student"; studentBeanList = baseService.getStudentList(schoolId,studentType,sex); }else{ - typeName= "Teacher"; studentBeanList = baseService.getTeacherList(schoolId); } log.info("下发用户总数:"+studentBeanList.size()); + //下發人臉 + sendFace(studentBeanList,deviceList,schoolId,userType); + } + + + @Override + public void sendFaceByClassId(Integer schoolId,String classIds,String deviceIds) { + //下发设备集合 + List deviceList = new ArrayList<>(); + if(StringUtils.isEmpty(deviceIds)){ + deviceList = userDao.selectDeviceBySchoolId(schoolId); + }else{ + String[] deviceArr = deviceIds.split(","); + deviceList= new ArrayList<>(Arrays.asList(deviceArr)); + } + //根据类型获取下发用户信息 + List studentBeanList = baseService.getStudentByClassId(schoolId,classIds); + log.info("统计共有下发用户数量:{}",studentBeanList.size()); + //下發人臉 + sendFace(studentBeanList,deviceList,schoolId,2); + } + + private void sendFace(List studentBeanList,List deviceList,Integer schoolId,Integer userType){ for(StudentBean studentBean : studentBeanList){ try{ String photo= userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); - //以学籍号为名的文件名 - String fileName = photo.split(typeName +"/")[1]; //学籍号 String studentCode=userType.intValue()==1?studentBean.getNum():studentBean.getStudentcode(); if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){ continue; } + //以学籍号为名的文件名 + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); + String typeName = userType.intValue() ==1?"Teacher":"Student"; String filePath=""; //100服务器人脸照绝对路径 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; @@ -139,4 +158,21 @@ public class UserOperateServiceImpl implements UserOperateService { } } } + + /** + * 下发时长统计下发截止时间 + * 每条数据执行0.06分钟 + * @param size 文件数 + * @param clientNum 设备数 + * @return + */ + public String getTime(int size,int clientNum,int timeLength){ + Date date = new Date(); + if(clientNum ==0){ + return DateUtils.date2String(date, DateUtils.format3); + } + Date afterDate = DateUtils.getDateByTime(timeLength,date); + String dateStr = DateUtils.date2String(afterDate,DateUtils.format3); + return dateStr; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/utils/DateUtils.java b/cloud/dahua/src/main/java/com/example/dahua/utils/DateUtils.java index a495239..3387063 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/utils/DateUtils.java +++ b/cloud/dahua/src/main/java/com/example/dahua/utils/DateUtils.java @@ -2,6 +2,7 @@ package com.example.dahua.utils; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; /** @@ -68,4 +69,17 @@ public class DateUtils { return difference; } + /** + * 获取N分钟后时间 + * @param length + * @param date + * @return + */ + public static Date getDateByTime(int length, Date date){ + Calendar cal = Calendar.getInstance(); + cal.setTime(date);//设置起时间 + cal.add(Calendar.MINUTE,length);//把日期往后增加 + return cal.getTime(); + } + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java b/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java index 3a59636..855bc7b 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java +++ b/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java @@ -41,7 +41,6 @@ public class HttpUtils { } String targPath = FilePath.picPathComp + studentCode + ".jpg"; String url = "http://121.40.109.21:8991/file/uploadImg"; - //String url = "http://localhost:8991/file/uploadImg"; MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); HttpHeaders headers = new HttpHeaders(); RestTemplate restTemplate = new RestTemplate(); diff --git a/cloud/dahua/src/main/resources/mapper/usermapper.xml b/cloud/dahua/src/main/resources/mapper/usermapper.xml index f7c3646..e349fbb 100644 --- a/cloud/dahua/src/main/resources/mapper/usermapper.xml +++ b/cloud/dahua/src/main/resources/mapper/usermapper.xml @@ -49,4 +49,15 @@ and StudentId in (select student_id from SZ_V_School_Student where school_id= #{schoolId}) order by newid() + + \ No newline at end of file diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java index ab837bc..629d3e9 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java @@ -24,13 +24,12 @@ import com.sincere.haikangface.xiananDao.SendRecordDao; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.http.util.TextUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; import java.io.*; @@ -386,8 +385,10 @@ public class CMSServer implements ApplicationRunner { //人脸记录 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); //944柯桥实验幼儿园,海康一体机考勤签到 - if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ - kaoQinRecord(outOrIn,cardNo,deviceID,time); + if(StringUtils.isNotBlank(schoolId)){ + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ + kaoQinRecord(outOrIn,cardNo,deviceID,time); + } } break; case "0x426"://人证设备在线 @@ -401,16 +402,20 @@ public class CMSServer implements ApplicationRunner { log.info("人证比对通过,事件次类型:"+minorType); saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); //944柯桥实验幼儿园,海康一体机考勤签到 - if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo)&& isNumeric(cardNo)){ - kaoQinRecord(outOrIn,cardNo,deviceID,time); + if(StringUtils.isNotBlank(schoolId)){ + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ + kaoQinRecord(outOrIn,cardNo,deviceID,time); + } } break; case "0x6": log.info("通过,事件次类型:"+minorType); saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); //944柯桥实验幼儿园,海康一体机考勤签到 - if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ - kaoQinRecord(outOrIn,cardNo,deviceID,time); + if(StringUtils.isNotBlank(schoolId)){ + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ + kaoQinRecord(outOrIn,cardNo,deviceID,time); + } } break; } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java index 1d77477..8a0fd42 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java @@ -123,4 +123,13 @@ public class UserOperateController { @RequestParam("faceSrcPath") String faceSrcPath){ return userOperateService.exportFace(schoolId,userType,deviceIds,faceSrcPath); } + + @ApiOperation(value = "按班级指定下发") + @RequestMapping(value = "sendFaceByClassId", method = RequestMethod.POST) + public Result exportFace(@RequestParam("schoolId") Integer schoolId, + @RequestParam(value = "classIds",required = false) String classIds, + @RequestParam(value = "deviceIds",required = false) String deviceIds, + @RequestParam(value = "isCheck",required = false) Integer isCheck){ + return userOperateService.sendFaceByClassId(schoolId,classIds,deviceIds,isCheck); + } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java index 4b77d76..c00b3eb 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java @@ -22,7 +22,10 @@ public interface DeviceDao { int addDevide(@Param("clint_id") String clint_id, @Param("clint_type") String clint_type, @Param("intime") String intime, @Param("school_id") String school_id, @Param("state") String state, @Param("isConnection") String isConnection); - @Select("select * from SZ_Attendance where clint_id = #{clint_id}") + @Select("select * from SZ_Attendance where school_id = #{schoolId} and clint_type = 18") + List selectDeviceBySchoolId(@Param("schoolId") Integer schoolId); + + @Select("select clint_id from SZ_Attendance where clint_id = #{clint_id}") AttendanceBean selectDevice(@Param("clint_id") String clint_id); // @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}") diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java index e2e20db..0e4bce8 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java @@ -235,7 +235,6 @@ public interface UserDao { List getStudentCard(@Param("schoolId") int schoolId , @Param("studentType") int studentType, @Param("sex") List sex); - List getDeviceRoomRelation(@Param("clint_id") String clint_id); void insertBaiduFaceRecorder(BaiduFaceRecorder baiduFaceRecorder); @@ -266,6 +265,8 @@ public interface UserDao { List getTeacherList(@Param("schoolId") Integer schoolId); + List getStudentByClassId(@Param("schoolId") int schoolId,@Param("classIds") List classIds); + List getDeviceIds(@Param("schoolId") Integer schoolId,@Param("deviceId") String deviceId); void updateUser(@Param("userId") String userId,@Param("face") String face); diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java index 71c14f0..304ea82 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java @@ -105,4 +105,6 @@ public interface UserOperateService { Result insertUpdateCard(String cardNums); Result exportFace(Integer schoolId,Integer userType,String deviceIds,String faceSrcPath); + + Result sendFaceByClassId(Integer schoolId,String classIds,String deviceIds,Integer isCheck); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java index ed6916a..ff67c96 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java @@ -12,6 +12,7 @@ import com.sincere.haikangface.enums.EnumSzBusinessType; import com.sincere.haikangface.utils.CompressPic; import com.sincere.haikangface.utils.DateUtils; import com.sincere.haikangface.utils.FileUtils; +import com.sincere.haikangface.utils.HttpUtil; import com.sincere.haikangface.xiananDao.SendRecordDao; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -304,18 +305,15 @@ public class BaseService { for(StudentBean studentBean : studentBeanList){ try{ String userName= studentBean.getName(); + String userId = studentBean.getUser_id(); String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); String typeName=userType.intValue()==1?"Teacher":"Student"; if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ continue; } - String[] fileNameStr = photo.split(typeName +"/"); - if(fileNameStr.length==0){ - continue; - } //以学籍号为名的文件名 - String fileName = fileNameStr[1]; + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); //100服务器人脸照绝对路径 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; @@ -331,7 +329,6 @@ public class BaseService { if(photo.indexOf("face17e50")!=-1){ filePath = path_1 + "\\" + fileName; } - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); File file = new File(filePath);//图片 if(file.exists()){ String targetPath = FileUtils.picPathComp + file.getName(); @@ -342,14 +339,16 @@ public class BaseService { continue; } for(String sno : deviceIds){ - if(cmsServer.getIsDeviceOnline(sno)){ - if(!StringUtils.isBlank(cardNum)){ - String cardNumLong = Long.parseLong(getCard(cardNum),16) + ""; - //下发100海康设备 - sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, String.valueOf(userType),schoolId,cardNum); + if(sendRecordDao.getRecordIsExit(sno,cardNum,userId).size()<1){ + if(cmsServer.getIsDeviceOnline(sno)){ + if(!StringUtils.isBlank(cardNum)){ + String cardNumLong = Long.parseLong(getCard(cardNum),16) + ""; + //下发100海康设备 + sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, String.valueOf(userType),schoolId,cardNum); + } + }else{ + log.error("100服务器,设备不在线"); } - }else{ - log.error("100服务器,设备不在线"); } } } @@ -362,7 +361,6 @@ public class BaseService { protected void sendFaceToDevice253(List deviceIds,List studentBeanList,Integer schoolId,Integer userType){ log.info("------------------------开始执行253服务,人脸照下发---------------------"); - String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.YEAR, 10); @@ -372,18 +370,15 @@ public class BaseService { for(StudentBean studentBean : studentBeanList){ try{ String userName= studentBean.getName(); + String userId = studentBean.getUser_id(); String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); String typeName=userType.intValue()==1?"Teacher":"Student"; if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ continue; } - String[] fileNameStr = photo.split(typeName +"/"); - if(fileNameStr.length==0){ - continue; - } //以学籍号为名的文件名 - String fileName = fileNameStr[1]; + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); //100服务器人脸照绝对路径 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; @@ -399,7 +394,6 @@ public class BaseService { if(photo.indexOf("face17e50")!=-1){ filePath = path_1 + "\\" + fileName; } - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); File file = new File(filePath);//图片 if(file.exists()) { String targetPath = FileUtils.picPathComp + file.getName(); @@ -410,8 +404,10 @@ public class BaseService { continue; } for (String sno : deviceIds) { - //下发253服务器 - sendUserAsync.uploadImgs(targetPath,cardNum, userName, sno, startTime, endTime, validTimeEnabled, String.valueOf(userType),schoolId); + if(sendRecordDao.getRecordIsExit(sno,cardNum,userId).size()<1){ + //下发253服务器 + sendUserAsync.uploadImgs(targetPath,cardNum, userName, sno, startTime, endTime, validTimeEnabled, String.valueOf(userType),schoolId); + } } } }catch (Exception e){ @@ -454,6 +450,21 @@ public class BaseService { return studentList; } + public List getStudentByClassId(Integer schoolId,String classIds) { + List list = new ArrayList<>(); + if(StringUtils.isNotBlank(classIds)){ + String[] msg = classIds.split(","); + for(String s : msg){ + list.add(Integer.valueOf(s)); + } + } + List students = userDao.getStudentByClassId(schoolId,list); + //去重重复数据 + List studentList = students.stream().collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); + return studentList; + } + /** * 获取学校下学生数据 * @param schoolId diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java index efbdd07..ca3267d 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java @@ -26,6 +26,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.util.*; +import java.util.stream.Collectors; /** * 海康设备用户操作业务实现 @@ -216,7 +217,7 @@ public class UserOperateServiceImpl implements UserOperateService { return ResultGenerator.genSuccessResult("文件名为空"); } //以学籍号为名的文件名 - String fileName = fileNameStr[1]; + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); //100服务器人脸照绝对路径 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; @@ -232,8 +233,7 @@ public class UserOperateServiceImpl implements UserOperateService { if(photo.indexOf("face17e50")!=-1){ filePath = path_1 + "\\" + fileName; } - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); - //校验100服务上是否存在此人脸 + //校验100服务文件存储地址上是否存在此人脸 File file = new File(filePath.trim());//图片 if (!file.exists()) { log.error("文件不存在:" + filePath); @@ -413,12 +413,8 @@ public class UserOperateServiceImpl implements UserOperateService { //不在线,去253服务器上删除 HttpUtil.deleteCard(deviceId, cardNum); } - String[] fileNameStr = photo.split(typeName +"/"); - if(fileNameStr.length==0){ - continue; - } //以学籍号为名的文件名 - String fileName = fileNameStr[1]; + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); //100服务器人脸照绝对路径 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; @@ -433,7 +429,6 @@ public class UserOperateServiceImpl implements UserOperateService { if(photo.indexOf("face17e50")!=-1){ filePath = path_1 + "\\" + fileName; } - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); File file = new File(filePath);//图片 if(file.exists()){ String targetPath = FileUtils.picPathComp + file.getName(); @@ -572,12 +567,8 @@ public class UserOperateServiceImpl implements UserOperateService { continue; } String typeName= userType.intValue()==1?"Teacher":"Student"; - String[] fileNameStr = photo.split(typeName +"/"); - if(fileNameStr.length==0){ - continue; - } //以学籍号为名的文件名 - String fileName = fileNameStr[1]; + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); //100服务器人脸照绝对路径 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; @@ -596,7 +587,6 @@ public class UserOperateServiceImpl implements UserOperateService { if(filePath.indexOf("?v=")!=-1){ filePath = filePath.split("\\?")[0]; } - log.info("卡号:{},人脸路径:{}",cardNum,filePath); File file = new File(filePath);//图片 if(file.exists()){ String targetPath = FileUtils.picPathComp + file.getName(); @@ -657,7 +647,6 @@ public class UserOperateServiceImpl implements UserOperateService { String fileName = studentCode + ".png"; //人脸文件路径 String facePath = path + "\\" +fileName; - log.info("卡号:{}, 人脸路径:{}, ",cardNum,facePath); try { File absolutePath = new File(facePath); FileOutputStream fileOutputStream = new FileOutputStream(absolutePath); @@ -826,4 +815,59 @@ public class UserOperateServiceImpl implements UserOperateService { e.printStackTrace(); } } + + @Override + public Result sendFaceByClassId(Integer schoolId,String classIds,String deviceIds,Integer isCheck) { + //下发设备集合 + List deviceList = new ArrayList<>(); + if(StringUtils.isBlank(deviceIds)){ + deviceList = deviceDao.selectDeviceBySchoolId(schoolId); + }else{ + String[] deviceArr = deviceIds.split(","); + deviceList= new ArrayList<>(Arrays.asList(deviceArr)); + } + List resultCard = new ArrayList<>(); + List resultDevices = new ArrayList<>(); + //根据类型获取下发用户信息 + List studentBeanList = baseService.getStudentByClassId(schoolId,classIds); + log.info("统计共有下发用户数量:{}",studentBeanList.size()); + if(isCheck !=null){ + for(StudentBean studentBean : studentBeanList){ + String cardNum = studentBean.getStudent_num(); + boolean isOk = true; + for(String deviceId : deviceList){ + if (cmsServer.getIsDeviceOnline(deviceId)) { + String cardNo = Long.parseLong(baseService.getCard(cardNum), 16) + ""; + isOk = cmsServer.getFace(deviceId,cardNo,null); + }else{ + isOk = HttpUtil.deleteCard(deviceId, cardNum); + } + if(!isOk){ + resultCard.add(studentBean); + resultCard.add(studentBean); + resultDevices.add(deviceId); + } + } + } + //去重重复数据 + studentBeanList = resultCard.stream().collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); + //去重重复数据 + deviceList = resultDevices.stream().distinct().collect(Collectors.toList()); + } + //发送海康设备:异步执行 + baseService.sendUserFaceByAsyncThread(schoolId,2,studentBeanList,deviceList); + + int fileSize = studentBeanList.size(); + int clintNum = deviceList.size(); + //下发所用时长 + int timeLength = new Double(clintNum * fileSize * 0.06).intValue(); + //下发截止时间 + String dateStr = baseService.getTime(fileSize,clintNum,timeLength); + Map map = new HashMap(); + map.put("timeLength",timeLength); + map.put("afterDate",dateStr); + map.put("fileSize",fileSize); + return ResultGenerator.genSuccessResult(objectMapper.toJson(map)); + } } diff --git a/cloud/haikangface/src/main/resources/mapper/usermapper.xml b/cloud/haikangface/src/main/resources/mapper/usermapper.xml index 6223f33..9b600a7 100644 --- a/cloud/haikangface/src/main/resources/mapper/usermapper.xml +++ b/cloud/haikangface/src/main/resources/mapper/usermapper.xml @@ -77,6 +77,17 @@ and student_num != '' and photo !='' + +