Commit 6184590c2aa56b889062229d3000b81fcba002e3
1 parent
60fd0445
Exists in
master
海康大华接口提交
Showing
17 changed files
with
239 additions
and
61 deletions
Show diff stats
cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java
cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java
| ... | ... | @@ -83,4 +83,12 @@ public class UserOperateController { |
| 83 | 83 | public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) { |
| 84 | 84 | return sendUserInfoTask.deleteFaceByCard(schoolId,cardNum,deviceId); |
| 85 | 85 | } |
| 86 | + | |
| 87 | + @ApiOperation(value = "按班级指定下发") | |
| 88 | + @RequestMapping(value = "sendFaceByClassId", method = RequestMethod.POST) | |
| 89 | + public void exportFace(@RequestParam("schoolId") Integer schoolId, | |
| 90 | + @RequestParam(value = "classIds",required = false) String classIds, | |
| 91 | + @RequestParam(value = "deviceIds",required = false) String deviceIds){ | |
| 92 | + userOperateService.sendFaceByClassId(schoolId,classIds,deviceIds); | |
| 93 | + } | |
| 86 | 94 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
| ... | ... | @@ -17,6 +17,8 @@ public interface UserDao { |
| 17 | 17 | @Select("select school_id from SZ_Attendance where clint_id = #{clint_id} ") |
| 18 | 18 | String getSchoolIdbyClint_id( @Param("clint_id") String clint_id); |
| 19 | 19 | |
| 20 | + @Select("select * from SZ_Attendance where school_id = #{schoolId} and clint_type = 29") | |
| 21 | + List<String> selectDeviceBySchoolId(@Param("schoolId") Integer schoolId); | |
| 20 | 22 | /** |
| 21 | 23 | * 获取设备出入类型 |
| 22 | 24 | * @param clint_id |
| ... | ... | @@ -269,4 +271,6 @@ public interface UserDao { |
| 269 | 271 | List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId); |
| 270 | 272 | |
| 271 | 273 | List<String> queryStudentIdList(@Param("schoolId") Integer schoolId,@Param("roomId")Integer roomId); |
| 274 | + | |
| 275 | + List<StudentBean> getStudentByClassId(@Param("schoolId") int schoolId,@Param("classIds") List<Integer> classIds); | |
| 272 | 276 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java
| ... | ... | @@ -12,6 +12,13 @@ public interface UserOperateService { |
| 12 | 12 | * 照片下发 |
| 13 | 13 | */ |
| 14 | 14 | void sendUserFaces(Integer schoolId,Integer userType,String deviceIds,Integer studentType,String sex); |
| 15 | + /** | |
| 16 | + * 按班級下發 | |
| 17 | + * @param schoolId | |
| 18 | + * @param classIds | |
| 19 | + * @param deviceIds | |
| 20 | + */ | |
| 21 | + void sendFaceByClassId(Integer schoolId,String classIds,String deviceIds); | |
| 15 | 22 | |
| 16 | 23 | void test6(Integer schoolId,Integer roomId,Integer type,Integer outof,String intime,String clintId,String startTime,String endTime); |
| 17 | 24 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java
| ... | ... | @@ -130,4 +130,19 @@ public class BaseService { |
| 130 | 130 | return; |
| 131 | 131 | } |
| 132 | 132 | } |
| 133 | + | |
| 134 | + public List<StudentBean> getStudentByClassId(Integer schoolId,String classIds) { | |
| 135 | + List<Integer> list = new ArrayList<>(); | |
| 136 | + if(!StringUtils.isEmpty(classIds)){ | |
| 137 | + String[] msg = classIds.split(","); | |
| 138 | + for(String s : msg){ | |
| 139 | + list.add(Integer.valueOf(s)); | |
| 140 | + } | |
| 141 | + } | |
| 142 | + List<StudentBean> students = userDao.getStudentByClassId(schoolId,list); | |
| 143 | + //去重重复数据 | |
| 144 | + List<StudentBean> studentList = students.stream().collect(Collectors.collectingAndThen( | |
| 145 | + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); | |
| 146 | + return studentList; | |
| 147 | + } | |
| 133 | 148 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java
| ... | ... | @@ -7,6 +7,7 @@ import com.example.dahua.lib.CompressPic; |
| 7 | 7 | import com.example.dahua.lib.FilePath; |
| 8 | 8 | import com.example.dahua.service.UserOperateService; |
| 9 | 9 | import com.example.dahua.utils.DateFormatUtil; |
| 10 | +import com.example.dahua.utils.DateUtils; | |
| 10 | 11 | import com.example.dahua.utils.HttpUtils; |
| 11 | 12 | import com.example.dahua.xiananDao.SearchMapper; |
| 12 | 13 | import com.example.dahua.xiananDao.SendRecordDao; |
| ... | ... | @@ -17,10 +18,8 @@ import org.springframework.util.CollectionUtils; |
| 17 | 18 | import org.springframework.util.StringUtils; |
| 18 | 19 | |
| 19 | 20 | import java.io.File; |
| 20 | -import java.util.ArrayList; | |
| 21 | -import java.util.Arrays; | |
| 22 | -import java.util.List; | |
| 23 | -import java.util.UUID; | |
| 21 | +import java.util.*; | |
| 22 | +import java.util.stream.Collectors; | |
| 24 | 23 | |
| 25 | 24 | /** |
| 26 | 25 | * 下发用户信息、人脸、卡、权限接口实现类 |
| ... | ... | @@ -49,27 +48,47 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 49 | 48 | log.error("未选择下发设备"); |
| 50 | 49 | return; |
| 51 | 50 | } |
| 52 | - //根据类型获取下发用户信息、文件名目录 | |
| 53 | - String typeName=""; | |
| 54 | 51 | List<StudentBean> studentBeanList = null; |
| 55 | 52 | if(userType.intValue()==2){ |
| 56 | - typeName= "Student"; | |
| 57 | 53 | studentBeanList = baseService.getStudentList(schoolId,studentType,sex); |
| 58 | 54 | }else{ |
| 59 | - typeName= "Teacher"; | |
| 60 | 55 | studentBeanList = baseService.getTeacherList(schoolId); |
| 61 | 56 | } |
| 62 | 57 | log.info("下发用户总数:"+studentBeanList.size()); |
| 58 | + //下發人臉 | |
| 59 | + sendFace(studentBeanList,deviceList,schoolId,userType); | |
| 60 | + } | |
| 61 | + | |
| 62 | + | |
| 63 | + @Override | |
| 64 | + public void sendFaceByClassId(Integer schoolId,String classIds,String deviceIds) { | |
| 65 | + //下发设备集合 | |
| 66 | + List<String> deviceList = new ArrayList<>(); | |
| 67 | + if(StringUtils.isEmpty(deviceIds)){ | |
| 68 | + deviceList = userDao.selectDeviceBySchoolId(schoolId); | |
| 69 | + }else{ | |
| 70 | + String[] deviceArr = deviceIds.split(","); | |
| 71 | + deviceList= new ArrayList<>(Arrays.asList(deviceArr)); | |
| 72 | + } | |
| 73 | + //根据类型获取下发用户信息 | |
| 74 | + List<StudentBean> studentBeanList = baseService.getStudentByClassId(schoolId,classIds); | |
| 75 | + log.info("统计共有下发用户数量:{}",studentBeanList.size()); | |
| 76 | + //下發人臉 | |
| 77 | + sendFace(studentBeanList,deviceList,schoolId,2); | |
| 78 | + } | |
| 79 | + | |
| 80 | + private void sendFace(List<StudentBean> studentBeanList,List<String> deviceList,Integer schoolId,Integer userType){ | |
| 63 | 81 | for(StudentBean studentBean : studentBeanList){ |
| 64 | 82 | try{ |
| 65 | 83 | String photo= userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); |
| 66 | - //以学籍号为名的文件名 | |
| 67 | - String fileName = photo.split(typeName +"/")[1]; | |
| 68 | 84 | //学籍号 |
| 69 | 85 | String studentCode=userType.intValue()==1?studentBean.getNum():studentBean.getStudentcode(); |
| 70 | 86 | if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){ |
| 71 | 87 | continue; |
| 72 | 88 | } |
| 89 | + //以学籍号为名的文件名 | |
| 90 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 91 | + String typeName = userType.intValue() ==1?"Teacher":"Student"; | |
| 73 | 92 | String filePath=""; |
| 74 | 93 | //100服务器人脸照绝对路径 |
| 75 | 94 | String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; |
| ... | ... | @@ -139,4 +158,21 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 139 | 158 | } |
| 140 | 159 | } |
| 141 | 160 | } |
| 161 | + | |
| 162 | + /** | |
| 163 | + * 下发时长统计下发截止时间 | |
| 164 | + * 每条数据执行0.06分钟 | |
| 165 | + * @param size 文件数 | |
| 166 | + * @param clientNum 设备数 | |
| 167 | + * @return | |
| 168 | + */ | |
| 169 | + public String getTime(int size,int clientNum,int timeLength){ | |
| 170 | + Date date = new Date(); | |
| 171 | + if(clientNum ==0){ | |
| 172 | + return DateUtils.date2String(date, DateUtils.format3); | |
| 173 | + } | |
| 174 | + Date afterDate = DateUtils.getDateByTime(timeLength,date); | |
| 175 | + String dateStr = DateUtils.date2String(afterDate,DateUtils.format3); | |
| 176 | + return dateStr; | |
| 177 | + } | |
| 142 | 178 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/utils/DateUtils.java
| ... | ... | @@ -2,6 +2,7 @@ package com.example.dahua.utils; |
| 2 | 2 | |
| 3 | 3 | import java.text.ParseException; |
| 4 | 4 | import java.text.SimpleDateFormat; |
| 5 | +import java.util.Calendar; | |
| 5 | 6 | import java.util.Date; |
| 6 | 7 | |
| 7 | 8 | /** |
| ... | ... | @@ -68,4 +69,17 @@ public class DateUtils { |
| 68 | 69 | return difference; |
| 69 | 70 | } |
| 70 | 71 | |
| 72 | + /** | |
| 73 | + * 获取N分钟后时间 | |
| 74 | + * @param length | |
| 75 | + * @param date | |
| 76 | + * @return | |
| 77 | + */ | |
| 78 | + public static Date getDateByTime(int length, Date date){ | |
| 79 | + Calendar cal = Calendar.getInstance(); | |
| 80 | + cal.setTime(date);//设置起时间 | |
| 81 | + cal.add(Calendar.MINUTE,length);//把日期往后增加 | |
| 82 | + return cal.getTime(); | |
| 83 | + } | |
| 84 | + | |
| 71 | 85 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java
| ... | ... | @@ -41,7 +41,6 @@ public class HttpUtils { |
| 41 | 41 | } |
| 42 | 42 | String targPath = FilePath.picPathComp + studentCode + ".jpg"; |
| 43 | 43 | String url = "http://121.40.109.21:8991/file/uploadImg"; |
| 44 | - //String url = "http://localhost:8991/file/uploadImg"; | |
| 45 | 44 | MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>(); |
| 46 | 45 | HttpHeaders headers = new HttpHeaders(); |
| 47 | 46 | RestTemplate restTemplate = new RestTemplate(); | ... | ... |
cloud/dahua/src/main/resources/mapper/usermapper.xml
| ... | ... | @@ -49,4 +49,15 @@ |
| 49 | 49 | and StudentId in (select student_id from SZ_V_School_Student where school_id= #{schoolId}) order by newid() |
| 50 | 50 | </select> |
| 51 | 51 | |
| 52 | + <select id="getStudentByClassId" resultType="com.example.dahua.bean.StudentBean"> | |
| 53 | + select * from SZ_V_School_Student where school_id = #{schoolId} | |
| 54 | + <if test="classIds != null and classIds.size() >0"> | |
| 55 | + and class_id in | |
| 56 | + <foreach item="item" collection="classIds" separator="," open="(" close=")" index=""> | |
| 57 | + #{item} | |
| 58 | + </foreach> | |
| 59 | + </if> | |
| 60 | + and student_num != '' and photo !='' | |
| 61 | + </select> | |
| 62 | + | |
| 52 | 63 | </mapper> |
| 53 | 64 | \ No newline at end of file | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
| ... | ... | @@ -24,13 +24,12 @@ import com.sincere.haikangface.xiananDao.SendRecordDao; |
| 24 | 24 | import com.sun.jna.NativeLong; |
| 25 | 25 | import com.sun.jna.Pointer; |
| 26 | 26 | import lombok.extern.slf4j.Slf4j; |
| 27 | +import org.apache.commons.lang3.StringUtils; | |
| 27 | 28 | import org.apache.http.util.TextUtils; |
| 28 | 29 | import org.springframework.beans.factory.annotation.Autowired; |
| 29 | -import org.springframework.beans.factory.annotation.Value; | |
| 30 | 30 | import org.springframework.boot.ApplicationArguments; |
| 31 | 31 | import org.springframework.boot.ApplicationRunner; |
| 32 | 32 | import org.springframework.stereotype.Component; |
| 33 | -import org.springframework.util.StringUtils; | |
| 34 | 33 | import org.springframework.web.client.RestTemplate; |
| 35 | 34 | |
| 36 | 35 | import java.io.*; |
| ... | ... | @@ -386,8 +385,10 @@ public class CMSServer implements ApplicationRunner { |
| 386 | 385 | //人脸记录 |
| 387 | 386 | saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); |
| 388 | 387 | //944柯桥实验幼儿园,海康一体机考勤签到 |
| 389 | - if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ | |
| 390 | - kaoQinRecord(outOrIn,cardNo,deviceID,time); | |
| 388 | + if(StringUtils.isNotBlank(schoolId)){ | |
| 389 | + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ | |
| 390 | + kaoQinRecord(outOrIn,cardNo,deviceID,time); | |
| 391 | + } | |
| 391 | 392 | } |
| 392 | 393 | break; |
| 393 | 394 | case "0x426"://人证设备在线 |
| ... | ... | @@ -401,16 +402,20 @@ public class CMSServer implements ApplicationRunner { |
| 401 | 402 | log.info("人证比对通过,事件次类型:"+minorType); |
| 402 | 403 | saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); |
| 403 | 404 | //944柯桥实验幼儿园,海康一体机考勤签到 |
| 404 | - if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo)&& isNumeric(cardNo)){ | |
| 405 | - kaoQinRecord(outOrIn,cardNo,deviceID,time); | |
| 405 | + if(StringUtils.isNotBlank(schoolId)){ | |
| 406 | + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ | |
| 407 | + kaoQinRecord(outOrIn,cardNo,deviceID,time); | |
| 408 | + } | |
| 406 | 409 | } |
| 407 | 410 | break; |
| 408 | 411 | case "0x6": |
| 409 | 412 | log.info("通过,事件次类型:"+minorType); |
| 410 | 413 | saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); |
| 411 | 414 | //944柯桥实验幼儿园,海康一体机考勤签到 |
| 412 | - if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ | |
| 413 | - kaoQinRecord(outOrIn,cardNo,deviceID,time); | |
| 415 | + if(StringUtils.isNotBlank(schoolId)){ | |
| 416 | + if(Integer.parseInt(schoolId)== 944 && !StringUtils.isEmpty(cardNo) && isNumeric(cardNo)){ | |
| 417 | + kaoQinRecord(outOrIn,cardNo,deviceID,time); | |
| 418 | + } | |
| 414 | 419 | } |
| 415 | 420 | break; |
| 416 | 421 | } | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java
| ... | ... | @@ -123,4 +123,13 @@ public class UserOperateController { |
| 123 | 123 | @RequestParam("faceSrcPath") String faceSrcPath){ |
| 124 | 124 | return userOperateService.exportFace(schoolId,userType,deviceIds,faceSrcPath); |
| 125 | 125 | } |
| 126 | + | |
| 127 | + @ApiOperation(value = "按班级指定下发") | |
| 128 | + @RequestMapping(value = "sendFaceByClassId", method = RequestMethod.POST) | |
| 129 | + public Result exportFace(@RequestParam("schoolId") Integer schoolId, | |
| 130 | + @RequestParam(value = "classIds",required = false) String classIds, | |
| 131 | + @RequestParam(value = "deviceIds",required = false) String deviceIds, | |
| 132 | + @RequestParam(value = "isCheck",required = false) Integer isCheck){ | |
| 133 | + return userOperateService.sendFaceByClassId(schoolId,classIds,deviceIds,isCheck); | |
| 134 | + } | |
| 126 | 135 | } | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java
| ... | ... | @@ -22,7 +22,10 @@ public interface DeviceDao { |
| 22 | 22 | int addDevide(@Param("clint_id") String clint_id, @Param("clint_type") String clint_type, @Param("intime") String intime, @Param("school_id") String school_id, |
| 23 | 23 | @Param("state") String state, @Param("isConnection") String isConnection); |
| 24 | 24 | |
| 25 | - @Select("select * from SZ_Attendance where clint_id = #{clint_id}") | |
| 25 | + @Select("select * from SZ_Attendance where school_id = #{schoolId} and clint_type = 18") | |
| 26 | + List<String> selectDeviceBySchoolId(@Param("schoolId") Integer schoolId); | |
| 27 | + | |
| 28 | + @Select("select clint_id from SZ_Attendance where clint_id = #{clint_id}") | |
| 26 | 29 | AttendanceBean selectDevice(@Param("clint_id") String clint_id); |
| 27 | 30 | |
| 28 | 31 | // @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}") | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java
| ... | ... | @@ -235,7 +235,6 @@ public interface UserDao { |
| 235 | 235 | |
| 236 | 236 | List<String> getStudentCard(@Param("schoolId") int schoolId , @Param("studentType") int studentType, @Param("sex") List<Integer> sex); |
| 237 | 237 | |
| 238 | - | |
| 239 | 238 | List<String> getDeviceRoomRelation(@Param("clint_id") String clint_id); |
| 240 | 239 | |
| 241 | 240 | void insertBaiduFaceRecorder(BaiduFaceRecorder baiduFaceRecorder); |
| ... | ... | @@ -266,6 +265,8 @@ public interface UserDao { |
| 266 | 265 | |
| 267 | 266 | List<StudentBean> getTeacherList(@Param("schoolId") Integer schoolId); |
| 268 | 267 | |
| 268 | + List<StudentBean> getStudentByClassId(@Param("schoolId") int schoolId,@Param("classIds") List<Integer> classIds); | |
| 269 | + | |
| 269 | 270 | List<String> getDeviceIds(@Param("schoolId") Integer schoolId,@Param("deviceId") String deviceId); |
| 270 | 271 | |
| 271 | 272 | void updateUser(@Param("userId") String userId,@Param("face") String face); | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java
| ... | ... | @@ -105,4 +105,6 @@ public interface UserOperateService { |
| 105 | 105 | Result insertUpdateCard(String cardNums); |
| 106 | 106 | |
| 107 | 107 | Result exportFace(Integer schoolId,Integer userType,String deviceIds,String faceSrcPath); |
| 108 | + | |
| 109 | + Result sendFaceByClassId(Integer schoolId,String classIds,String deviceIds,Integer isCheck); | |
| 108 | 110 | } | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java
| ... | ... | @@ -12,6 +12,7 @@ import com.sincere.haikangface.enums.EnumSzBusinessType; |
| 12 | 12 | import com.sincere.haikangface.utils.CompressPic; |
| 13 | 13 | import com.sincere.haikangface.utils.DateUtils; |
| 14 | 14 | import com.sincere.haikangface.utils.FileUtils; |
| 15 | +import com.sincere.haikangface.utils.HttpUtil; | |
| 15 | 16 | import com.sincere.haikangface.xiananDao.SendRecordDao; |
| 16 | 17 | import lombok.extern.slf4j.Slf4j; |
| 17 | 18 | import org.apache.commons.lang3.StringUtils; |
| ... | ... | @@ -304,18 +305,15 @@ public class BaseService { |
| 304 | 305 | for(StudentBean studentBean : studentBeanList){ |
| 305 | 306 | try{ |
| 306 | 307 | String userName= studentBean.getName(); |
| 308 | + String userId = studentBean.getUser_id(); | |
| 307 | 309 | String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); |
| 308 | 310 | String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); |
| 309 | 311 | String typeName=userType.intValue()==1?"Teacher":"Student"; |
| 310 | 312 | if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ |
| 311 | 313 | continue; |
| 312 | 314 | } |
| 313 | - String[] fileNameStr = photo.split(typeName +"/"); | |
| 314 | - if(fileNameStr.length==0){ | |
| 315 | - continue; | |
| 316 | - } | |
| 317 | 315 | //以学籍号为名的文件名 |
| 318 | - String fileName = fileNameStr[1]; | |
| 316 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 319 | 317 | //100服务器人脸照绝对路径 |
| 320 | 318 | String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; |
| 321 | 319 | String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; |
| ... | ... | @@ -331,7 +329,6 @@ public class BaseService { |
| 331 | 329 | if(photo.indexOf("face17e50")!=-1){ |
| 332 | 330 | filePath = path_1 + "\\" + fileName; |
| 333 | 331 | } |
| 334 | - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); | |
| 335 | 332 | File file = new File(filePath);//图片 |
| 336 | 333 | if(file.exists()){ |
| 337 | 334 | String targetPath = FileUtils.picPathComp + file.getName(); |
| ... | ... | @@ -342,14 +339,16 @@ public class BaseService { |
| 342 | 339 | continue; |
| 343 | 340 | } |
| 344 | 341 | for(String sno : deviceIds){ |
| 345 | - if(cmsServer.getIsDeviceOnline(sno)){ | |
| 346 | - if(!StringUtils.isBlank(cardNum)){ | |
| 347 | - String cardNumLong = Long.parseLong(getCard(cardNum),16) + ""; | |
| 348 | - //下发100海康设备 | |
| 349 | - sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, String.valueOf(userType),schoolId,cardNum); | |
| 342 | + if(sendRecordDao.getRecordIsExit(sno,cardNum,userId).size()<1){ | |
| 343 | + if(cmsServer.getIsDeviceOnline(sno)){ | |
| 344 | + if(!StringUtils.isBlank(cardNum)){ | |
| 345 | + String cardNumLong = Long.parseLong(getCard(cardNum),16) + ""; | |
| 346 | + //下发100海康设备 | |
| 347 | + sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, String.valueOf(userType),schoolId,cardNum); | |
| 348 | + } | |
| 349 | + }else{ | |
| 350 | + log.error("100服务器,设备不在线"); | |
| 350 | 351 | } |
| 351 | - }else{ | |
| 352 | - log.error("100服务器,设备不在线"); | |
| 353 | 352 | } |
| 354 | 353 | } |
| 355 | 354 | } |
| ... | ... | @@ -362,7 +361,6 @@ public class BaseService { |
| 362 | 361 | |
| 363 | 362 | protected void sendFaceToDevice253(List<String> deviceIds,List<StudentBean> studentBeanList,Integer schoolId,Integer userType){ |
| 364 | 363 | log.info("------------------------开始执行253服务,人脸照下发---------------------"); |
| 365 | - | |
| 366 | 364 | String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); |
| 367 | 365 | Calendar calendar = Calendar.getInstance(); |
| 368 | 366 | calendar.add(Calendar.YEAR, 10); |
| ... | ... | @@ -372,18 +370,15 @@ public class BaseService { |
| 372 | 370 | for(StudentBean studentBean : studentBeanList){ |
| 373 | 371 | try{ |
| 374 | 372 | String userName= studentBean.getName(); |
| 373 | + String userId = studentBean.getUser_id(); | |
| 375 | 374 | String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); |
| 376 | 375 | String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); |
| 377 | 376 | String typeName=userType.intValue()==1?"Teacher":"Student"; |
| 378 | 377 | if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ |
| 379 | 378 | continue; |
| 380 | 379 | } |
| 381 | - String[] fileNameStr = photo.split(typeName +"/"); | |
| 382 | - if(fileNameStr.length==0){ | |
| 383 | - continue; | |
| 384 | - } | |
| 385 | 380 | //以学籍号为名的文件名 |
| 386 | - String fileName = fileNameStr[1]; | |
| 381 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 387 | 382 | //100服务器人脸照绝对路径 |
| 388 | 383 | String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; |
| 389 | 384 | String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; |
| ... | ... | @@ -399,7 +394,6 @@ public class BaseService { |
| 399 | 394 | if(photo.indexOf("face17e50")!=-1){ |
| 400 | 395 | filePath = path_1 + "\\" + fileName; |
| 401 | 396 | } |
| 402 | - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); | |
| 403 | 397 | File file = new File(filePath);//图片 |
| 404 | 398 | if(file.exists()) { |
| 405 | 399 | String targetPath = FileUtils.picPathComp + file.getName(); |
| ... | ... | @@ -410,8 +404,10 @@ public class BaseService { |
| 410 | 404 | continue; |
| 411 | 405 | } |
| 412 | 406 | for (String sno : deviceIds) { |
| 413 | - //下发253服务器 | |
| 414 | - sendUserAsync.uploadImgs(targetPath,cardNum, userName, sno, startTime, endTime, validTimeEnabled, String.valueOf(userType),schoolId); | |
| 407 | + if(sendRecordDao.getRecordIsExit(sno,cardNum,userId).size()<1){ | |
| 408 | + //下发253服务器 | |
| 409 | + sendUserAsync.uploadImgs(targetPath,cardNum, userName, sno, startTime, endTime, validTimeEnabled, String.valueOf(userType),schoolId); | |
| 410 | + } | |
| 415 | 411 | } |
| 416 | 412 | } |
| 417 | 413 | }catch (Exception e){ |
| ... | ... | @@ -454,6 +450,21 @@ public class BaseService { |
| 454 | 450 | return studentList; |
| 455 | 451 | } |
| 456 | 452 | |
| 453 | + public List<StudentBean> getStudentByClassId(Integer schoolId,String classIds) { | |
| 454 | + List<Integer> list = new ArrayList<>(); | |
| 455 | + if(StringUtils.isNotBlank(classIds)){ | |
| 456 | + String[] msg = classIds.split(","); | |
| 457 | + for(String s : msg){ | |
| 458 | + list.add(Integer.valueOf(s)); | |
| 459 | + } | |
| 460 | + } | |
| 461 | + List<StudentBean> students = userDao.getStudentByClassId(schoolId,list); | |
| 462 | + //去重重复数据 | |
| 463 | + List<StudentBean> studentList = students.stream().collect(Collectors.collectingAndThen( | |
| 464 | + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); | |
| 465 | + return studentList; | |
| 466 | + } | |
| 467 | + | |
| 457 | 468 | /** |
| 458 | 469 | * 获取学校下学生数据 |
| 459 | 470 | * @param schoolId | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java
| ... | ... | @@ -26,6 +26,7 @@ import java.io.FileOutputStream; |
| 26 | 26 | import java.io.IOException; |
| 27 | 27 | import java.nio.file.Files; |
| 28 | 28 | import java.util.*; |
| 29 | +import java.util.stream.Collectors; | |
| 29 | 30 | |
| 30 | 31 | /** |
| 31 | 32 | * 海康设备用户操作业务实现 |
| ... | ... | @@ -216,7 +217,7 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 216 | 217 | return ResultGenerator.genSuccessResult("文件名为空"); |
| 217 | 218 | } |
| 218 | 219 | //以学籍号为名的文件名 |
| 219 | - String fileName = fileNameStr[1]; | |
| 220 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 220 | 221 | //100服务器人脸照绝对路径 |
| 221 | 222 | String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; |
| 222 | 223 | String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; |
| ... | ... | @@ -232,8 +233,7 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 232 | 233 | if(photo.indexOf("face17e50")!=-1){ |
| 233 | 234 | filePath = path_1 + "\\" + fileName; |
| 234 | 235 | } |
| 235 | - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); | |
| 236 | - //校验100服务上是否存在此人脸 | |
| 236 | + //校验100服务文件存储地址上是否存在此人脸 | |
| 237 | 237 | File file = new File(filePath.trim());//图片 |
| 238 | 238 | if (!file.exists()) { |
| 239 | 239 | log.error("文件不存在:" + filePath); |
| ... | ... | @@ -413,12 +413,8 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 413 | 413 | //不在线,去253服务器上删除 |
| 414 | 414 | HttpUtil.deleteCard(deviceId, cardNum); |
| 415 | 415 | } |
| 416 | - String[] fileNameStr = photo.split(typeName +"/"); | |
| 417 | - if(fileNameStr.length==0){ | |
| 418 | - continue; | |
| 419 | - } | |
| 420 | 416 | //以学籍号为名的文件名 |
| 421 | - String fileName = fileNameStr[1]; | |
| 417 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 422 | 418 | //100服务器人脸照绝对路径 |
| 423 | 419 | String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; |
| 424 | 420 | String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; |
| ... | ... | @@ -433,7 +429,6 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 433 | 429 | if(photo.indexOf("face17e50")!=-1){ |
| 434 | 430 | filePath = path_1 + "\\" + fileName; |
| 435 | 431 | } |
| 436 | - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); | |
| 437 | 432 | File file = new File(filePath);//图片 |
| 438 | 433 | if(file.exists()){ |
| 439 | 434 | String targetPath = FileUtils.picPathComp + file.getName(); |
| ... | ... | @@ -572,12 +567,8 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 572 | 567 | continue; |
| 573 | 568 | } |
| 574 | 569 | String typeName= userType.intValue()==1?"Teacher":"Student"; |
| 575 | - String[] fileNameStr = photo.split(typeName +"/"); | |
| 576 | - if(fileNameStr.length==0){ | |
| 577 | - continue; | |
| 578 | - } | |
| 579 | 570 | //以学籍号为名的文件名 |
| 580 | - String fileName = fileNameStr[1]; | |
| 571 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 581 | 572 | //100服务器人脸照绝对路径 |
| 582 | 573 | String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; |
| 583 | 574 | String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; |
| ... | ... | @@ -596,7 +587,6 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 596 | 587 | if(filePath.indexOf("?v=")!=-1){ |
| 597 | 588 | filePath = filePath.split("\\?")[0]; |
| 598 | 589 | } |
| 599 | - log.info("卡号:{},人脸路径:{}",cardNum,filePath); | |
| 600 | 590 | File file = new File(filePath);//图片 |
| 601 | 591 | if(file.exists()){ |
| 602 | 592 | String targetPath = FileUtils.picPathComp + file.getName(); |
| ... | ... | @@ -657,7 +647,6 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 657 | 647 | String fileName = studentCode + ".png"; |
| 658 | 648 | //人脸文件路径 |
| 659 | 649 | String facePath = path + "\\" +fileName; |
| 660 | - log.info("卡号:{}, 人脸路径:{}, ",cardNum,facePath); | |
| 661 | 650 | try { |
| 662 | 651 | File absolutePath = new File(facePath); |
| 663 | 652 | FileOutputStream fileOutputStream = new FileOutputStream(absolutePath); |
| ... | ... | @@ -826,4 +815,59 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 826 | 815 | e.printStackTrace(); |
| 827 | 816 | } |
| 828 | 817 | } |
| 818 | + | |
| 819 | + @Override | |
| 820 | + public Result sendFaceByClassId(Integer schoolId,String classIds,String deviceIds,Integer isCheck) { | |
| 821 | + //下发设备集合 | |
| 822 | + List<String> deviceList = new ArrayList<>(); | |
| 823 | + if(StringUtils.isBlank(deviceIds)){ | |
| 824 | + deviceList = deviceDao.selectDeviceBySchoolId(schoolId); | |
| 825 | + }else{ | |
| 826 | + String[] deviceArr = deviceIds.split(","); | |
| 827 | + deviceList= new ArrayList<>(Arrays.asList(deviceArr)); | |
| 828 | + } | |
| 829 | + List<StudentBean> resultCard = new ArrayList<>(); | |
| 830 | + List<String> resultDevices = new ArrayList<>(); | |
| 831 | + //根据类型获取下发用户信息 | |
| 832 | + List<StudentBean> studentBeanList = baseService.getStudentByClassId(schoolId,classIds); | |
| 833 | + log.info("统计共有下发用户数量:{}",studentBeanList.size()); | |
| 834 | + if(isCheck !=null){ | |
| 835 | + for(StudentBean studentBean : studentBeanList){ | |
| 836 | + String cardNum = studentBean.getStudent_num(); | |
| 837 | + boolean isOk = true; | |
| 838 | + for(String deviceId : deviceList){ | |
| 839 | + if (cmsServer.getIsDeviceOnline(deviceId)) { | |
| 840 | + String cardNo = Long.parseLong(baseService.getCard(cardNum), 16) + ""; | |
| 841 | + isOk = cmsServer.getFace(deviceId,cardNo,null); | |
| 842 | + }else{ | |
| 843 | + isOk = HttpUtil.deleteCard(deviceId, cardNum); | |
| 844 | + } | |
| 845 | + if(!isOk){ | |
| 846 | + resultCard.add(studentBean); | |
| 847 | + resultCard.add(studentBean); | |
| 848 | + resultDevices.add(deviceId); | |
| 849 | + } | |
| 850 | + } | |
| 851 | + } | |
| 852 | + //去重重复数据 | |
| 853 | + studentBeanList = resultCard.stream().collect(Collectors.collectingAndThen( | |
| 854 | + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); | |
| 855 | + //去重重复数据 | |
| 856 | + deviceList = resultDevices.stream().distinct().collect(Collectors.toList()); | |
| 857 | + } | |
| 858 | + //发送海康设备:异步执行 | |
| 859 | + baseService.sendUserFaceByAsyncThread(schoolId,2,studentBeanList,deviceList); | |
| 860 | + | |
| 861 | + int fileSize = studentBeanList.size(); | |
| 862 | + int clintNum = deviceList.size(); | |
| 863 | + //下发所用时长 | |
| 864 | + int timeLength = new Double(clintNum * fileSize * 0.06).intValue(); | |
| 865 | + //下发截止时间 | |
| 866 | + String dateStr = baseService.getTime(fileSize,clintNum,timeLength); | |
| 867 | + Map map = new HashMap(); | |
| 868 | + map.put("timeLength",timeLength); | |
| 869 | + map.put("afterDate",dateStr); | |
| 870 | + map.put("fileSize",fileSize); | |
| 871 | + return ResultGenerator.genSuccessResult(objectMapper.toJson(map)); | |
| 872 | + } | |
| 829 | 873 | } | ... | ... |
cloud/haikangface/src/main/resources/mapper/usermapper.xml
| ... | ... | @@ -77,6 +77,17 @@ |
| 77 | 77 | and student_num != '' and photo !='' |
| 78 | 78 | </select> |
| 79 | 79 | |
| 80 | + <select id="getStudentByClassId" resultType="com.sincere.haikangface.bean.StudentBean"> | |
| 81 | + select * from SZ_V_School_Student where school_id = #{schoolId} | |
| 82 | + <if test="classIds != null and classIds.size() >0"> | |
| 83 | + and class_id in | |
| 84 | + <foreach item="item" collection="classIds" separator="," open="(" close=")" index=""> | |
| 85 | + #{item} | |
| 86 | + </foreach> | |
| 87 | + </if> | |
| 88 | + and student_num != '' and photo !='' | |
| 89 | + </select> | |
| 90 | + | |
| 80 | 91 | <select id="getStudentCardGroup" resultType="com.sincere.haikangface.bean.StudentBean"> |
| 81 | 92 | select * from SZ_V_School_Student where sex = #{sex} and student_type = #{studentType} and |
| 82 | 93 | class_id in(select DISTINCT ClassId from SZ_OneCardGrouping where Pid = #{groupId} and state = 1) | ... | ... |