Commit 6184590c2aa56b889062229d3000b81fcba002e3

Authored by 徐泉
1 parent 60fd0445
Exists in master

海康大华接口提交

cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java
@@ -190,8 +190,6 @@ public class UserControl { @@ -190,8 +190,6 @@ public class UserControl {
190 } 190 }
191 } 191 }
192 } 192 }
193 -  
194 -  
195 } 193 }
196 194
197 195
cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java
@@ -83,4 +83,12 @@ public class UserOperateController { @@ -83,4 +83,12 @@ public class UserOperateController {
83 public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) { 83 public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) {
84 return sendUserInfoTask.deleteFaceByCard(schoolId,cardNum,deviceId); 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,6 +17,8 @@ public interface UserDao {
17 @Select("select school_id from SZ_Attendance where clint_id = #{clint_id} ") 17 @Select("select school_id from SZ_Attendance where clint_id = #{clint_id} ")
18 String getSchoolIdbyClint_id( @Param("clint_id") String clint_id); 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 * @param clint_id 24 * @param clint_id
@@ -269,4 +271,6 @@ public interface UserDao { @@ -269,4 +271,6 @@ public interface UserDao {
269 List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId); 271 List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId);
270 272
271 List<String> queryStudentIdList(@Param("schoolId") Integer schoolId,@Param("roomId")Integer roomId); 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,6 +12,13 @@ public interface UserOperateService {
12 * 照片下发 12 * 照片下发
13 */ 13 */
14 void sendUserFaces(Integer schoolId,Integer userType,String deviceIds,Integer studentType,String sex); 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 void test6(Integer schoolId,Integer roomId,Integer type,Integer outof,String intime,String clintId,String startTime,String endTime); 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,4 +130,19 @@ public class BaseService {
130 return; 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,6 +7,7 @@ import com.example.dahua.lib.CompressPic;
7 import com.example.dahua.lib.FilePath; 7 import com.example.dahua.lib.FilePath;
8 import com.example.dahua.service.UserOperateService; 8 import com.example.dahua.service.UserOperateService;
9 import com.example.dahua.utils.DateFormatUtil; 9 import com.example.dahua.utils.DateFormatUtil;
  10 +import com.example.dahua.utils.DateUtils;
10 import com.example.dahua.utils.HttpUtils; 11 import com.example.dahua.utils.HttpUtils;
11 import com.example.dahua.xiananDao.SearchMapper; 12 import com.example.dahua.xiananDao.SearchMapper;
12 import com.example.dahua.xiananDao.SendRecordDao; 13 import com.example.dahua.xiananDao.SendRecordDao;
@@ -17,10 +18,8 @@ import org.springframework.util.CollectionUtils; @@ -17,10 +18,8 @@ import org.springframework.util.CollectionUtils;
17 import org.springframework.util.StringUtils; 18 import org.springframework.util.StringUtils;
18 19
19 import java.io.File; 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,27 +48,47 @@ public class UserOperateServiceImpl implements UserOperateService {
49 log.error("未选择下发设备"); 48 log.error("未选择下发设备");
50 return; 49 return;
51 } 50 }
52 - //根据类型获取下发用户信息、文件名目录  
53 - String typeName="";  
54 List<StudentBean> studentBeanList = null; 51 List<StudentBean> studentBeanList = null;
55 if(userType.intValue()==2){ 52 if(userType.intValue()==2){
56 - typeName= "Student";  
57 studentBeanList = baseService.getStudentList(schoolId,studentType,sex); 53 studentBeanList = baseService.getStudentList(schoolId,studentType,sex);
58 }else{ 54 }else{
59 - typeName= "Teacher";  
60 studentBeanList = baseService.getTeacherList(schoolId); 55 studentBeanList = baseService.getTeacherList(schoolId);
61 } 56 }
62 log.info("下发用户总数:"+studentBeanList.size()); 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 for(StudentBean studentBean : studentBeanList){ 81 for(StudentBean studentBean : studentBeanList){
64 try{ 82 try{
65 String photo= userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); 83 String photo= userType.intValue()==1?studentBean.getFace():studentBean.getPhoto();
66 - //以学籍号为名的文件名  
67 - String fileName = photo.split(typeName +"/")[1];  
68 //学籍号 84 //学籍号
69 String studentCode=userType.intValue()==1?studentBean.getNum():studentBean.getStudentcode(); 85 String studentCode=userType.intValue()==1?studentBean.getNum():studentBean.getStudentcode();
70 if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){ 86 if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){
71 continue; 87 continue;
72 } 88 }
  89 + //以学籍号为名的文件名
  90 + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length());
  91 + String typeName = userType.intValue() ==1?"Teacher":"Student";
73 String filePath=""; 92 String filePath="";
74 //100服务器人脸照绝对路径 93 //100服务器人脸照绝对路径
75 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; 94 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
@@ -139,4 +158,21 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -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,6 +2,7 @@ package com.example.dahua.utils;
2 2
3 import java.text.ParseException; 3 import java.text.ParseException;
4 import java.text.SimpleDateFormat; 4 import java.text.SimpleDateFormat;
  5 +import java.util.Calendar;
5 import java.util.Date; 6 import java.util.Date;
6 7
7 /** 8 /**
@@ -68,4 +69,17 @@ public class DateUtils { @@ -68,4 +69,17 @@ public class DateUtils {
68 return difference; 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,7 +41,6 @@ public class HttpUtils {
41 } 41 }
42 String targPath = FilePath.picPathComp + studentCode + ".jpg"; 42 String targPath = FilePath.picPathComp + studentCode + ".jpg";
43 String url = "http://121.40.109.21:8991/file/uploadImg"; 43 String url = "http://121.40.109.21:8991/file/uploadImg";
44 - //String url = "http://localhost:8991/file/uploadImg";  
45 MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>(); 44 MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>();
46 HttpHeaders headers = new HttpHeaders(); 45 HttpHeaders headers = new HttpHeaders();
47 RestTemplate restTemplate = new RestTemplate(); 46 RestTemplate restTemplate = new RestTemplate();
cloud/dahua/src/main/resources/mapper/usermapper.xml
@@ -49,4 +49,15 @@ @@ -49,4 +49,15 @@
49 and StudentId in (select student_id from SZ_V_School_Student where school_id= #{schoolId}) order by newid() 49 and StudentId in (select student_id from SZ_V_School_Student where school_id= #{schoolId}) order by newid()
50 </select> 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 </mapper> 63 </mapper>
53 \ No newline at end of file 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,13 +24,12 @@ import com.sincere.haikangface.xiananDao.SendRecordDao;
24 import com.sun.jna.NativeLong; 24 import com.sun.jna.NativeLong;
25 import com.sun.jna.Pointer; 25 import com.sun.jna.Pointer;
26 import lombok.extern.slf4j.Slf4j; 26 import lombok.extern.slf4j.Slf4j;
  27 +import org.apache.commons.lang3.StringUtils;
27 import org.apache.http.util.TextUtils; 28 import org.apache.http.util.TextUtils;
28 import org.springframework.beans.factory.annotation.Autowired; 29 import org.springframework.beans.factory.annotation.Autowired;
29 -import org.springframework.beans.factory.annotation.Value;  
30 import org.springframework.boot.ApplicationArguments; 30 import org.springframework.boot.ApplicationArguments;
31 import org.springframework.boot.ApplicationRunner; 31 import org.springframework.boot.ApplicationRunner;
32 import org.springframework.stereotype.Component; 32 import org.springframework.stereotype.Component;
33 -import org.springframework.util.StringUtils;  
34 import org.springframework.web.client.RestTemplate; 33 import org.springframework.web.client.RestTemplate;
35 34
36 import java.io.*; 35 import java.io.*;
@@ -386,8 +385,10 @@ public class CMSServer implements ApplicationRunner { @@ -386,8 +385,10 @@ public class CMSServer implements ApplicationRunner {
386 //人脸记录 385 //人脸记录
387 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); 386 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
388 //944柯桥实验幼儿园,海康一体机考勤签到 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 break; 393 break;
393 case "0x426"://人证设备在线 394 case "0x426"://人证设备在线
@@ -401,16 +402,20 @@ public class CMSServer implements ApplicationRunner { @@ -401,16 +402,20 @@ public class CMSServer implements ApplicationRunner {
401 log.info("人证比对通过,事件次类型:"+minorType); 402 log.info("人证比对通过,事件次类型:"+minorType);
402 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); 403 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
403 //944柯桥实验幼儿园,海康一体机考勤签到 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 break; 410 break;
408 case "0x6": 411 case "0x6":
409 log.info("通过,事件次类型:"+minorType); 412 log.info("通过,事件次类型:"+minorType);
410 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn); 413 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature,outOrIn);
411 //944柯桥实验幼儿园,海康一体机考勤签到 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 break; 420 break;
416 } 421 }
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java
@@ -123,4 +123,13 @@ public class UserOperateController { @@ -123,4 +123,13 @@ public class UserOperateController {
123 @RequestParam("faceSrcPath") String faceSrcPath){ 123 @RequestParam("faceSrcPath") String faceSrcPath){
124 return userOperateService.exportFace(schoolId,userType,deviceIds,faceSrcPath); 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,7 +22,10 @@ public interface DeviceDao {
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, 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 @Param("state") String state, @Param("isConnection") String isConnection); 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 AttendanceBean selectDevice(@Param("clint_id") String clint_id); 29 AttendanceBean selectDevice(@Param("clint_id") String clint_id);
27 30
28 // @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}") 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,7 +235,6 @@ public interface UserDao {
235 235
236 List<String> getStudentCard(@Param("schoolId") int schoolId , @Param("studentType") int studentType, @Param("sex") List<Integer> sex); 236 List<String> getStudentCard(@Param("schoolId") int schoolId , @Param("studentType") int studentType, @Param("sex") List<Integer> sex);
237 237
238 -  
239 List<String> getDeviceRoomRelation(@Param("clint_id") String clint_id); 238 List<String> getDeviceRoomRelation(@Param("clint_id") String clint_id);
240 239
241 void insertBaiduFaceRecorder(BaiduFaceRecorder baiduFaceRecorder); 240 void insertBaiduFaceRecorder(BaiduFaceRecorder baiduFaceRecorder);
@@ -266,6 +265,8 @@ public interface UserDao { @@ -266,6 +265,8 @@ public interface UserDao {
266 265
267 List<StudentBean> getTeacherList(@Param("schoolId") Integer schoolId); 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 List<String> getDeviceIds(@Param("schoolId") Integer schoolId,@Param("deviceId") String deviceId); 270 List<String> getDeviceIds(@Param("schoolId") Integer schoolId,@Param("deviceId") String deviceId);
270 271
271 void updateUser(@Param("userId") String userId,@Param("face") String face); 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,4 +105,6 @@ public interface UserOperateService {
105 Result insertUpdateCard(String cardNums); 105 Result insertUpdateCard(String cardNums);
106 106
107 Result exportFace(Integer schoolId,Integer userType,String deviceIds,String faceSrcPath); 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,6 +12,7 @@ import com.sincere.haikangface.enums.EnumSzBusinessType;
12 import com.sincere.haikangface.utils.CompressPic; 12 import com.sincere.haikangface.utils.CompressPic;
13 import com.sincere.haikangface.utils.DateUtils; 13 import com.sincere.haikangface.utils.DateUtils;
14 import com.sincere.haikangface.utils.FileUtils; 14 import com.sincere.haikangface.utils.FileUtils;
  15 +import com.sincere.haikangface.utils.HttpUtil;
15 import com.sincere.haikangface.xiananDao.SendRecordDao; 16 import com.sincere.haikangface.xiananDao.SendRecordDao;
16 import lombok.extern.slf4j.Slf4j; 17 import lombok.extern.slf4j.Slf4j;
17 import org.apache.commons.lang3.StringUtils; 18 import org.apache.commons.lang3.StringUtils;
@@ -304,18 +305,15 @@ public class BaseService { @@ -304,18 +305,15 @@ public class BaseService {
304 for(StudentBean studentBean : studentBeanList){ 305 for(StudentBean studentBean : studentBeanList){
305 try{ 306 try{
306 String userName= studentBean.getName(); 307 String userName= studentBean.getName();
  308 + String userId = studentBean.getUser_id();
307 String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); 309 String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto();
308 String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); 310 String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num();
309 String typeName=userType.intValue()==1?"Teacher":"Student"; 311 String typeName=userType.intValue()==1?"Teacher":"Student";
310 if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ 312 if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){
311 continue; 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 //100服务器人脸照绝对路径 317 //100服务器人脸照绝对路径
320 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; 318 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
321 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; 319 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName;
@@ -331,7 +329,6 @@ public class BaseService { @@ -331,7 +329,6 @@ public class BaseService {
331 if(photo.indexOf("face17e50")!=-1){ 329 if(photo.indexOf("face17e50")!=-1){
332 filePath = path_1 + "\\" + fileName; 330 filePath = path_1 + "\\" + fileName;
333 } 331 }
334 - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath);  
335 File file = new File(filePath);//图片 332 File file = new File(filePath);//图片
336 if(file.exists()){ 333 if(file.exists()){
337 String targetPath = FileUtils.picPathComp + file.getName(); 334 String targetPath = FileUtils.picPathComp + file.getName();
@@ -342,14 +339,16 @@ public class BaseService { @@ -342,14 +339,16 @@ public class BaseService {
342 continue; 339 continue;
343 } 340 }
344 for(String sno : deviceIds){ 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,7 +361,6 @@ public class BaseService {
362 361
363 protected void sendFaceToDevice253(List<String> deviceIds,List<StudentBean> studentBeanList,Integer schoolId,Integer userType){ 362 protected void sendFaceToDevice253(List<String> deviceIds,List<StudentBean> studentBeanList,Integer schoolId,Integer userType){
364 log.info("------------------------开始执行253服务,人脸照下发---------------------"); 363 log.info("------------------------开始执行253服务,人脸照下发---------------------");
365 -  
366 String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); 364 String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
367 Calendar calendar = Calendar.getInstance(); 365 Calendar calendar = Calendar.getInstance();
368 calendar.add(Calendar.YEAR, 10); 366 calendar.add(Calendar.YEAR, 10);
@@ -372,18 +370,15 @@ public class BaseService { @@ -372,18 +370,15 @@ public class BaseService {
372 for(StudentBean studentBean : studentBeanList){ 370 for(StudentBean studentBean : studentBeanList){
373 try{ 371 try{
374 String userName= studentBean.getName(); 372 String userName= studentBean.getName();
  373 + String userId = studentBean.getUser_id();
375 String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); 374 String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto();
376 String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); 375 String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num();
377 String typeName=userType.intValue()==1?"Teacher":"Student"; 376 String typeName=userType.intValue()==1?"Teacher":"Student";
378 if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ 377 if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){
379 continue; 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 //100服务器人脸照绝对路径 382 //100服务器人脸照绝对路径
388 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; 383 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
389 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; 384 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName;
@@ -399,7 +394,6 @@ public class BaseService { @@ -399,7 +394,6 @@ public class BaseService {
399 if(photo.indexOf("face17e50")!=-1){ 394 if(photo.indexOf("face17e50")!=-1){
400 filePath = path_1 + "\\" + fileName; 395 filePath = path_1 + "\\" + fileName;
401 } 396 }
402 - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath);  
403 File file = new File(filePath);//图片 397 File file = new File(filePath);//图片
404 if(file.exists()) { 398 if(file.exists()) {
405 String targetPath = FileUtils.picPathComp + file.getName(); 399 String targetPath = FileUtils.picPathComp + file.getName();
@@ -410,8 +404,10 @@ public class BaseService { @@ -410,8 +404,10 @@ public class BaseService {
410 continue; 404 continue;
411 } 405 }
412 for (String sno : deviceIds) { 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 }catch (Exception e){ 413 }catch (Exception e){
@@ -454,6 +450,21 @@ public class BaseService { @@ -454,6 +450,21 @@ public class BaseService {
454 return studentList; 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 * @param schoolId 470 * @param schoolId
cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java
@@ -26,6 +26,7 @@ import java.io.FileOutputStream; @@ -26,6 +26,7 @@ import java.io.FileOutputStream;
26 import java.io.IOException; 26 import java.io.IOException;
27 import java.nio.file.Files; 27 import java.nio.file.Files;
28 import java.util.*; 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,7 +217,7 @@ public class UserOperateServiceImpl implements UserOperateService {
216 return ResultGenerator.genSuccessResult("文件名为空"); 217 return ResultGenerator.genSuccessResult("文件名为空");
217 } 218 }
218 //以学籍号为名的文件名 219 //以学籍号为名的文件名
219 - String fileName = fileNameStr[1]; 220 + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length());
220 //100服务器人脸照绝对路径 221 //100服务器人脸照绝对路径
221 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; 222 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
222 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; 223 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName;
@@ -232,8 +233,7 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -232,8 +233,7 @@ public class UserOperateServiceImpl implements UserOperateService {
232 if(photo.indexOf("face17e50")!=-1){ 233 if(photo.indexOf("face17e50")!=-1){
233 filePath = path_1 + "\\" + fileName; 234 filePath = path_1 + "\\" + fileName;
234 } 235 }
235 - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath);  
236 - //校验100服务上是否存在此人脸 236 + //校验100服务文件存储地址上是否存在此人脸
237 File file = new File(filePath.trim());//图片 237 File file = new File(filePath.trim());//图片
238 if (!file.exists()) { 238 if (!file.exists()) {
239 log.error("文件不存在:" + filePath); 239 log.error("文件不存在:" + filePath);
@@ -413,12 +413,8 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -413,12 +413,8 @@ public class UserOperateServiceImpl implements UserOperateService {
413 //不在线,去253服务器上删除 413 //不在线,去253服务器上删除
414 HttpUtil.deleteCard(deviceId, cardNum); 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 //100服务器人脸照绝对路径 418 //100服务器人脸照绝对路径
423 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; 419 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
424 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; 420 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName;
@@ -433,7 +429,6 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -433,7 +429,6 @@ public class UserOperateServiceImpl implements UserOperateService {
433 if(photo.indexOf("face17e50")!=-1){ 429 if(photo.indexOf("face17e50")!=-1){
434 filePath = path_1 + "\\" + fileName; 430 filePath = path_1 + "\\" + fileName;
435 } 431 }
436 - log.info("卡号:{},人脸路径:{}, ",cardNum,filePath);  
437 File file = new File(filePath);//图片 432 File file = new File(filePath);//图片
438 if(file.exists()){ 433 if(file.exists()){
439 String targetPath = FileUtils.picPathComp + file.getName(); 434 String targetPath = FileUtils.picPathComp + file.getName();
@@ -572,12 +567,8 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -572,12 +567,8 @@ public class UserOperateServiceImpl implements UserOperateService {
572 continue; 567 continue;
573 } 568 }
574 String typeName= userType.intValue()==1?"Teacher":"Student"; 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 //100服务器人脸照绝对路径 572 //100服务器人脸照绝对路径
582 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; 573 String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
583 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; 574 String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName;
@@ -596,7 +587,6 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -596,7 +587,6 @@ public class UserOperateServiceImpl implements UserOperateService {
596 if(filePath.indexOf("?v=")!=-1){ 587 if(filePath.indexOf("?v=")!=-1){
597 filePath = filePath.split("\\?")[0]; 588 filePath = filePath.split("\\?")[0];
598 } 589 }
599 - log.info("卡号:{},人脸路径:{}",cardNum,filePath);  
600 File file = new File(filePath);//图片 590 File file = new File(filePath);//图片
601 if(file.exists()){ 591 if(file.exists()){
602 String targetPath = FileUtils.picPathComp + file.getName(); 592 String targetPath = FileUtils.picPathComp + file.getName();
@@ -657,7 +647,6 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -657,7 +647,6 @@ public class UserOperateServiceImpl implements UserOperateService {
657 String fileName = studentCode + ".png"; 647 String fileName = studentCode + ".png";
658 //人脸文件路径 648 //人脸文件路径
659 String facePath = path + "\\" +fileName; 649 String facePath = path + "\\" +fileName;
660 - log.info("卡号:{}, 人脸路径:{}, ",cardNum,facePath);  
661 try { 650 try {
662 File absolutePath = new File(facePath); 651 File absolutePath = new File(facePath);
663 FileOutputStream fileOutputStream = new FileOutputStream(absolutePath); 652 FileOutputStream fileOutputStream = new FileOutputStream(absolutePath);
@@ -826,4 +815,59 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -826,4 +815,59 @@ public class UserOperateServiceImpl implements UserOperateService {
826 e.printStackTrace(); 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,6 +77,17 @@
77 and student_num != '' and photo !='' 77 and student_num != '' and photo !=''
78 </select> 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 <select id="getStudentCardGroup" resultType="com.sincere.haikangface.bean.StudentBean"> 91 <select id="getStudentCardGroup" resultType="com.sincere.haikangface.bean.StudentBean">
81 select * from SZ_V_School_Student where sex = #{sex} and student_type = #{studentType} and 92 select * from SZ_V_School_Student where sex = #{sex} and student_type = #{studentType} and
82 class_id in(select DISTINCT ClassId from SZ_OneCardGrouping where Pid = #{groupId} and state = 1) 93 class_id in(select DISTINCT ClassId from SZ_OneCardGrouping where Pid = #{groupId} and state = 1)