Commit 4b0a4282f744c2ab613dd9c5e609bb0fc8da8ff6
1 parent
f6777403
Exists in
master
海康 大华接口提交
Showing
13 changed files
with
582 additions
and
163 deletions
Show diff stats
cloud/dahua/pom.xml
| @@ -127,13 +127,17 @@ | @@ -127,13 +127,17 @@ | ||
| 127 | <artifactId>commons-codec</artifactId> | 127 | <artifactId>commons-codec</artifactId> |
| 128 | <version>1.10</version> | 128 | <version>1.10</version> |
| 129 | </dependency> | 129 | </dependency> |
| 130 | + <!--解析excel--> | ||
| 130 | <dependency> | 131 | <dependency> |
| 131 | <groupId>org.apache.poi</groupId> | 132 | <groupId>org.apache.poi</groupId> |
| 132 | <artifactId>poi</artifactId> | 133 | <artifactId>poi</artifactId> |
| 133 | - <version>4.1.0</version> | ||
| 134 | - <scope>compile</scope> | 134 | + <version>3.17</version> |
| 135 | + </dependency> | ||
| 136 | + <dependency> | ||
| 137 | + <groupId>org.apache.poi</groupId> | ||
| 138 | + <artifactId>poi-ooxml</artifactId> | ||
| 139 | + <version>3.17</version> | ||
| 135 | </dependency> | 140 | </dependency> |
| 136 | - | ||
| 137 | <dependency> | 141 | <dependency> |
| 138 | <groupId>com.belerweb</groupId> | 142 | <groupId>com.belerweb</groupId> |
| 139 | <artifactId>pinyin4j</artifactId> | 143 | <artifactId>pinyin4j</artifactId> |
cloud/dahua/src/main/java/com/example/dahua/MyTask.java
| @@ -21,6 +21,7 @@ import com.example.dahua.utils.JsonUtils; | @@ -21,6 +21,7 @@ import com.example.dahua.utils.JsonUtils; | ||
| 21 | import com.example.dahua.xiananDao.SearchMapper; | 21 | import com.example.dahua.xiananDao.SearchMapper; |
| 22 | import com.example.dahua.xiananDao.SendRecordDao; | 22 | import com.example.dahua.xiananDao.SendRecordDao; |
| 23 | import com.example.dahua.xstDao.MessageDao; | 23 | import com.example.dahua.xstDao.MessageDao; |
| 24 | +import com.google.gson.Gson; | ||
| 24 | import com.sun.jna.Pointer; | 25 | import com.sun.jna.Pointer; |
| 25 | import com.sun.jna.ptr.IntByReference; | 26 | import com.sun.jna.ptr.IntByReference; |
| 26 | import lombok.extern.slf4j.Slf4j; | 27 | import lombok.extern.slf4j.Slf4j; |
| @@ -219,10 +220,7 @@ public class MyTask implements ApplicationRunner { | @@ -219,10 +220,7 @@ public class MyTask implements ApplicationRunner { | ||
| 219 | //设备id | 220 | //设备id |
| 220 | String deviceId = ""; | 221 | String deviceId = ""; |
| 221 | try { | 222 | try { |
| 222 | - deviceId = new String(buffer1, "GBK").trim(); | ||
| 223 | - log.info("设备GBK心跳:" + deviceId); | ||
| 224 | deviceId = new String(buffer1, "UTF-8").trim(); | 223 | deviceId = new String(buffer1, "UTF-8").trim(); |
| 225 | - log.info("设备UTF-8心跳:" + deviceId); | ||
| 226 | } catch (UnsupportedEncodingException e) { | 224 | } catch (UnsupportedEncodingException e) { |
| 227 | e.printStackTrace(); | 225 | e.printStackTrace(); |
| 228 | } | 226 | } |
| @@ -436,7 +434,6 @@ public class MyTask implements ApplicationRunner { | @@ -436,7 +434,6 @@ public class MyTask implements ApplicationRunner { | ||
| 436 | if(cardBean ==null){ | 434 | if(cardBean ==null){ |
| 437 | return -1; | 435 | return -1; |
| 438 | } | 436 | } |
| 439 | - | ||
| 440 | // 缓存抓拍人脸 | 437 | // 缓存抓拍人脸 |
| 441 | String fileName = StringUtils.isEmpty(userId)? card + ".png" : userId + ".png"; | 438 | String fileName = StringUtils.isEmpty(userId)? card + ".png" : userId + ".png"; |
| 442 | String snapPicPath = path + "\\" + fileName; | 439 | String snapPicPath = path + "\\" + fileName; |
| @@ -451,7 +448,7 @@ public class MyTask implements ApplicationRunner { | @@ -451,7 +448,7 @@ public class MyTask implements ApplicationRunner { | ||
| 451 | //关联设备信息 | 448 | //关联设备信息 |
| 452 | AttendanceBean attendanceBean = myTaskUtil.userDao.getTypeByClint_id(szSn); | 449 | AttendanceBean attendanceBean = myTaskUtil.userDao.getTypeByClint_id(szSn); |
| 453 | if(attendanceBean !=null){ | 450 | if(attendanceBean !=null){ |
| 454 | - if(StringUtils.isEmpty(attendanceBean.getSchool_id())){ | 451 | + if(!StringUtils.isEmpty(attendanceBean.getSchool_id())){ |
| 455 | int schoolId = Integer.parseInt(attendanceBean.getSchool_id()); | 452 | int schoolId = Integer.parseInt(attendanceBean.getSchool_id()); |
| 456 | //门禁进出类型:1进0出 | 453 | //门禁进出类型:1进0出 |
| 457 | int eventType = 0; | 454 | int eventType = 0; |
| @@ -481,13 +478,16 @@ public class MyTask implements ApplicationRunner { | @@ -481,13 +478,16 @@ public class MyTask implements ApplicationRunner { | ||
| 481 | //刷卡结果,1表示成功, 0表示失败 | 478 | //刷卡结果,1表示成功, 0表示失败 |
| 482 | int status = msg.bStatus; | 479 | int status = msg.bStatus; |
| 483 | 480 | ||
| 481 | + log.info("考勤状态:{},学校:{},设备ID: {},学生信息:{}",status,schoolId,szSn,new Gson().toJson(userInfoBean)); | ||
| 484 | if(szSn.startsWith("ytj")) { | 482 | if(szSn.startsWith("ytj")) { |
| 485 | - //保存考勤记录 | ||
| 486 | - kaoQinRecord(status, eventType, card, szSn, eventTime,lAnalyzerHandle); | ||
| 487 | - // 艺校考勤 | ||
| 488 | - if(schoolId ==12 && status ==1){ | 483 | + log.info("考勤进来了,学校:{},设备ID: {},学生信息:{}",schoolId,szSn,new Gson().toJson(userInfoBean)); |
| 484 | + // 艺校考勤OA | ||
| 485 | + if(schoolId == 12 && status ==1){ | ||
| 489 | int intOrOut = eventType ==1? 1 : 2; | 486 | int intOrOut = eventType ==1? 1 : 2; |
| 490 | sendRecordToSXYX(userInfoBean.getName(),userInfoBean.getUser_id(),intOrOut,eventTime); | 487 | sendRecordToSXYX(userInfoBean.getName(),userInfoBean.getUser_id(),intOrOut,eventTime); |
| 488 | + }else{ | ||
| 489 | + //保存考勤记录 | ||
| 490 | + kaoQinRecord(status, eventType, card, szSn, eventTime,lAnalyzerHandle); | ||
| 491 | } | 491 | } |
| 492 | } | 492 | } |
| 493 | } | 493 | } |
| @@ -727,7 +727,7 @@ public class MyTask implements ApplicationRunner { | @@ -727,7 +727,7 @@ public class MyTask implements ApplicationRunner { | ||
| 727 | log.info("设备id: {},关联placeId: {},未查询到关联看板设备。",deviceId,placeId); | 727 | log.info("设备id: {},关联placeId: {},未查询到关联看板设备。",deviceId,placeId); |
| 728 | return; | 728 | return; |
| 729 | } | 729 | } |
| 730 | - log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(kanbanIds)); | 730 | +// log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(kanbanIds)); |
| 731 | for (String kanbanId : kanbanIds) { | 731 | for (String kanbanId : kanbanIds) { |
| 732 | String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + kanbanId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; | 732 | String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + kanbanId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; |
| 733 | // log.info("====== 开始推送看板======, kanbanId = {}, cardNum = {},content ={}",kanbanId,cardNum,data); | 733 | // log.info("====== 开始推送看板======, kanbanId = {}, cardNum = {},content ={}",kanbanId,cardNum,data); |
| @@ -745,7 +745,7 @@ public class MyTask implements ApplicationRunner { | @@ -745,7 +745,7 @@ public class MyTask implements ApplicationRunner { | ||
| 745 | log.info("学校下未查询到看板信息,学校id: {}",schoolId); | 745 | log.info("学校下未查询到看板信息,学校id: {}",schoolId); |
| 746 | return; | 746 | return; |
| 747 | } | 747 | } |
| 748 | - log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(clintIds)); | 748 | +// log.info("设备ID集: "+ JsonUtils.nonDefaultMapper().toJson(clintIds)); |
| 749 | for (int i = 0; i < clintIds.size(); i++) { | 749 | for (int i = 0; i < clintIds.size(); i++) { |
| 750 | String clintId = clintIds.get(i); | 750 | String clintId = clintIds.get(i); |
| 751 | String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + clintId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; | 751 | String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + clintId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; |
| @@ -787,7 +787,7 @@ public class MyTask implements ApplicationRunner { | @@ -787,7 +787,7 @@ public class MyTask implements ApplicationRunner { | ||
| 787 | HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers); | 787 | HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers); |
| 788 | ResponseEntity<String> response = restTemplate.postForEntity(api, param, String.class); | 788 | ResponseEntity<String> response = restTemplate.postForEntity(api, param, String.class); |
| 789 | String body = response.getBody(); | 789 | String body = response.getBody(); |
| 790 | - System.out.println(body); | 790 | + log.info("请求艺校OA,返回信息: " + body); |
| 791 | } catch (Exception e) { | 791 | } catch (Exception e) { |
| 792 | sendRecordToSXYX(name,userId,intOrOut,eventTime); | 792 | sendRecordToSXYX(name,userId,intOrOut,eventTime); |
| 793 | } | 793 | } |
cloud/dahua/src/main/java/com/example/dahua/async/MyScheduledTask.java
| @@ -59,9 +59,6 @@ public class MyScheduledTask { | @@ -59,9 +59,6 @@ public class MyScheduledTask { | ||
| 59 | @Autowired | 59 | @Autowired |
| 60 | MyTask myTasks; | 60 | MyTask myTasks; |
| 61 | 61 | ||
| 62 | -// @Value("${haikangpic}") | ||
| 63 | -// private String haikangpic; | ||
| 64 | - | ||
| 65 | public static boolean isSendHaikang = false; | 62 | public static boolean isSendHaikang = false; |
| 66 | 63 | ||
| 67 | public static boolean isSendWeigeng = false; | 64 | public static boolean isSendWeigeng = false; |
| @@ -75,24 +72,9 @@ public class MyScheduledTask { | @@ -75,24 +72,9 @@ public class MyScheduledTask { | ||
| 75 | private String imgFilPath = "C:\\EhomePicServer";//抓拍图片路径 | 72 | private String imgFilPath = "C:\\EhomePicServer";//抓拍图片路径 |
| 76 | 73 | ||
| 77 | @Scheduled(fixedRate = 5000) | 74 | @Scheduled(fixedRate = 5000) |
| 78 | - private void deleteFace() throws InterruptedException { | 75 | + private void deleteFace(){ |
| 79 | //删除抓拍人脸 | 76 | //删除抓拍人脸 |
| 80 | deleteFaceImg(); | 77 | deleteFaceImg(); |
| 81 | - | ||
| 82 | -// /** | ||
| 83 | -// * 目前分三个时间段(9:00-10:00) (13:00-14:00)(22:00-5:00)进行补发操作 | ||
| 84 | -// */ | ||
| 85 | -// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH"); | ||
| 86 | -// int hour = Integer.parseInt(simpleDateFormat.format(new Date())); | ||
| 87 | -// | ||
| 88 | -// if (hour >= 9 && hour < 11) { | ||
| 89 | -// dealData(); | ||
| 90 | -// } else if (hour >= 13 && hour < 14) { | ||
| 91 | -// dealData(); | ||
| 92 | -// } else if (hour >= 20 || hour < 5) { | ||
| 93 | -// dealData(); | ||
| 94 | -// } | ||
| 95 | - | ||
| 96 | } | 78 | } |
| 97 | 79 | ||
| 98 | /** | 80 | /** |
| @@ -109,96 +91,17 @@ public class MyScheduledTask { | @@ -109,96 +91,17 @@ public class MyScheduledTask { | ||
| 109 | } | 91 | } |
| 110 | } | 92 | } |
| 111 | 93 | ||
| 112 | - @Autowired | ||
| 113 | - private UserOperateService userOperateService; | ||
| 114 | - @Autowired | ||
| 115 | - private SearchMapper searchMapper; | ||
| 116 | -// /** | ||
| 117 | -// * 订阅任务 20秒执行一次 | ||
| 118 | -// */ | ||
| 119 | -// @Scheduled(cron = "0 51 18 * * ?") | ||
| 120 | -// protected synchronized void task(){ | ||
| 121 | -// log.info("开始执行----- 晚上到寝"); | ||
| 122 | -// //男 | ||
| 123 | -// Integer schoolId=27; | ||
| 124 | -// Integer roomId =12226; | ||
| 125 | -// Integer type = 7; | ||
| 126 | -// Integer outof = 1; | ||
| 127 | -// String clintId="253169192"; | ||
| 128 | -// String timeIds = "2021-01-08,2021-01-11,2021-01-12,2021-01-13,2021-01-14,2021-01-15,2021-01-18,2021-01-19,2021-01-20,2021-01-21,2021-01-22"; | ||
| 129 | -// String[] deviceArr = timeIds.split(","); | ||
| 130 | -// List<String> deviceList= new ArrayList<>(Arrays.asList(deviceArr)); | ||
| 131 | -// //启用多线程执行 | ||
| 132 | -// CountDownLatch begin = new CountDownLatch(1); | ||
| 133 | -// CountDownLatch end = new CountDownLatch(deviceList.size()); | ||
| 134 | -// ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-sendFace-runner-%d").build(); | ||
| 135 | -// ExecutorService exe = new ThreadPoolExecutor(4,8,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory); | ||
| 136 | -// for(String s : deviceList){ | ||
| 137 | -// String intime = s + " 20:26:14"; | ||
| 138 | -// String startTime= s + " 00:00:00"; | ||
| 139 | -// String endTime = s+" 23:59:59"; | ||
| 140 | -// exe.execute(new SendFaceBatchTask100(userDao,sendRecordDao,searchMapper,schoolId,roomId,type,outof,intime,clintId,startTime,endTime,begin,end)); | ||
| 141 | -// } | ||
| 142 | -// begin.countDown(); | ||
| 143 | -// try { | ||
| 144 | -// end.await(); | ||
| 145 | -// }catch (Exception e){ | ||
| 146 | -// log.error("失败"+e); | ||
| 147 | -// } | ||
| 148 | -// exe.shutdown(); | ||
| 149 | -// log.info("统计100服务器总共有"+deviceList.size()+"个设备,处理完毕"); | ||
| 150 | -// } | ||
| 151 | -// | ||
| 152 | -// // @Scheduled(cron = "0 50 15 * * ?") | ||
| 153 | -// @Scheduled(cron = "0 09 21 * * ?") | ||
| 154 | -// protected synchronized void task2(){ | ||
| 155 | -// log.info("开始执行----- 晚上到寝"); | ||
| 156 | -// //男 | ||
| 157 | -// Integer schoolId=27; | ||
| 158 | -// Integer roomId =12226; | ||
| 159 | -// Integer type = 4; | ||
| 160 | -// Integer outof = 1; | ||
| 161 | -// String clintId="253169212"; | ||
| 162 | -// String timeIds = "2021-01-08,2021-01-11,2021-01-12,2021-01-13,2021-01-14,2021-01-15,2021-01-18,2021-01-19,2021-01-20,2021-01-21,2021-01-22"; | ||
| 163 | -// String[] deviceArr = timeIds.split(","); | ||
| 164 | -// List<String> deviceList= new ArrayList<>(Arrays.asList(deviceArr)); | ||
| 165 | -// //启用多线程执行 | ||
| 166 | -// CountDownLatch begin = new CountDownLatch(1); | ||
| 167 | -// CountDownLatch end = new CountDownLatch(deviceList.size()); | ||
| 168 | -// ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-sendFace-runner-%d").build(); | ||
| 169 | -// ExecutorService exe = new ThreadPoolExecutor(8,16,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory); | ||
| 170 | -// for(String s : deviceList){ | ||
| 171 | -//// String intime = s + " 06:03:39"; | ||
| 172 | -//// String startTime= s + " 00:00:00"; | ||
| 173 | -//// String endTime = s+" 23:59:59"; | ||
| 174 | -// String intime = s + " 17:14:39"; | ||
| 175 | -// String startTime= s + " 00:00:00"; | ||
| 176 | -// String endTime = s+" 23:59:59"; | ||
| 177 | -// exe.execute(new SendFaceBatchTask2(userDao,sendRecordDao,searchMapper,schoolId,roomId,type,outof,intime,clintId,startTime,endTime,begin,end)); | ||
| 178 | -// } | ||
| 179 | -// begin.countDown(); | ||
| 180 | -// try { | ||
| 181 | -// end.await(); | ||
| 182 | -// }catch (Exception e){ | ||
| 183 | -// log.error("失败"+e); | ||
| 184 | -// } | ||
| 185 | -// exe.shutdown(); | ||
| 186 | -// log.info("统计100服务器总共有"+deviceList.size()+"个设备,处理完毕"); | ||
| 187 | -// } | ||
| 188 | - | ||
| 189 | /** | 94 | /** |
| 190 | * 定期删除人脸抓拍图片 | 95 | * 定期删除人脸抓拍图片 |
| 191 | */ | 96 | */ |
| 192 | private void deleteFaceImg() { | 97 | private void deleteFaceImg() { |
| 193 | - | ||
| 194 | String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); | 98 | String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); |
| 195 | -// System.out.println("deleteDate:" + deleteDate); | ||
| 196 | if (!deleteDate.equals(date)) { | 99 | if (!deleteDate.equals(date)) { |
| 197 | deleteDate = date; | 100 | deleteDate = date; |
| 198 | File file = new File(imgFilPath); | 101 | File file = new File(imgFilPath); |
| 199 | File[] files = file.listFiles(); | 102 | File[] files = file.listFiles(); |
| 200 | Date currentDate = new Date(); | 103 | Date currentDate = new Date(); |
| 201 | - if (null != files) | 104 | + if (null != files) { |
| 202 | for (int i = 0; i < files.length; i++) { | 105 | for (int i = 0; i < files.length; i++) { |
| 203 | File imgFile = files[i]; | 106 | File imgFile = files[i]; |
| 204 | String name = imgFile.getName().split("\\.")[0]; | 107 | String name = imgFile.getName().split("\\.")[0]; |
| @@ -220,47 +123,11 @@ public class MyScheduledTask { | @@ -220,47 +123,11 @@ public class MyScheduledTask { | ||
| 220 | 123 | ||
| 221 | } catch (ParseException e) { | 124 | } catch (ParseException e) { |
| 222 | imgFile.delete(); | 125 | imgFile.delete(); |
| 223 | -// e.printStackTrace(); | 126 | + e.printStackTrace(); |
| 224 | } | 127 | } |
| 225 | - | ||
| 226 | } | 128 | } |
| 227 | - | ||
| 228 | - } | ||
| 229 | - | ||
| 230 | - } | ||
| 231 | - | ||
| 232 | - private synchronized void dealData() { | ||
| 233 | - | ||
| 234 | - String ip = new Utils().getHostAddress(); | ||
| 235 | - System.out.println("ip:" + ip); | ||
| 236 | - if (ip.startsWith("192") || ip.contains("172.16.247.64")) | ||
| 237 | - return; | ||
| 238 | - | ||
| 239 | - /** | ||
| 240 | - * 微耕 | ||
| 241 | - */ | ||
| 242 | -//System.out.println("isSendWeigeng:"+isSendWeigeng+"isSendHaikang:"+isSendHaikang+"isSendDahua:"+isSendDahua); | ||
| 243 | - if (!isSendWeigeng) { | ||
| 244 | - isSendWeigeng = true; | ||
| 245 | - sendUserInfoTask.addWeiGen(); | ||
| 246 | - } | ||
| 247 | - | ||
| 248 | - /** | ||
| 249 | - * 海康 | ||
| 250 | - */ | ||
| 251 | - if (!isSendHaikang) { | ||
| 252 | - isSendHaikang = true; | ||
| 253 | - sendUserInfoTask.addHaikangface(); | ||
| 254 | - } | ||
| 255 | - | ||
| 256 | - /** | ||
| 257 | - * 大华人脸 | ||
| 258 | - */ | ||
| 259 | - if (!isSendDahua) { | ||
| 260 | - isSendDahua = true; | ||
| 261 | - sendUserInfoTask.addDahuaFace(); | 129 | + } |
| 262 | } | 130 | } |
| 263 | - | ||
| 264 | } | 131 | } |
| 265 | 132 | ||
| 266 | boolean isSendMQ = false; | 133 | boolean isSendMQ = false; |
| @@ -344,7 +211,7 @@ public class MyScheduledTask { | @@ -344,7 +211,7 @@ public class MyScheduledTask { | ||
| 344 | //关联的显示看板设备 | 211 | //关联的显示看板设备 |
| 345 | List<String> kanbanIds = new ArrayList<>(); | 212 | List<String> kanbanIds = new ArrayList<>(); |
| 346 | if(!StringUtils.isEmpty(placeId)) { | 213 | if(!StringUtils.isEmpty(placeId)) { |
| 347 | - log.info("关联场景ID: {},考勤设备ID:{}",placeId,qiandaoDevId); | 214 | +// log.info("关联场景ID: {},考勤设备ID:{}",placeId,qiandaoDevId); |
| 348 | kanbanIds = userDao.getKanBanIdWithPlaceId(placeId); | 215 | kanbanIds = userDao.getKanBanIdWithPlaceId(placeId); |
| 349 | }else{ | 216 | }else{ |
| 350 | List<String> kBIds = userDao.getClintIds(schoolId); | 217 | List<String> kBIds = userDao.getClintIds(schoolId); |
| @@ -362,7 +229,7 @@ public class MyScheduledTask { | @@ -362,7 +229,7 @@ public class MyScheduledTask { | ||
| 362 | String clintId = kanbanIds.get(i); | 229 | String clintId = kanbanIds.get(i); |
| 363 | String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + clintId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; | 230 | String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + clintId + "\",\"data\":{\"cardNum\":\"" + cardNum + "\",\"inOrOut\":\"" + inOrOut + "\"}}"; |
| 364 | mqttManager.sendMqQD(clintId, data); | 231 | mqttManager.sendMqQD(clintId, data); |
| 365 | - log.info("发送微耕考勤消息:学校ID: {},设备ID: {},关联看板room: {},",schoolId,clintId,placeId); | 232 | +// log.info("发送微耕考勤消息:学校ID: {},设备ID: {},关联看板room: {},",schoolId,clintId,placeId); |
| 366 | } | 233 | } |
| 367 | } | 234 | } |
| 368 | } | 235 | } |
cloud/dahua/src/main/java/com/example/dahua/bean/yx/ImportStudent.java
0 → 100644
| @@ -0,0 +1,77 @@ | @@ -0,0 +1,77 @@ | ||
| 1 | +package com.example.dahua.bean.yx; | ||
| 2 | + | ||
| 3 | +public class ImportStudent { | ||
| 4 | + | ||
| 5 | + private Integer id; | ||
| 6 | + private String name; | ||
| 7 | + private String userId; | ||
| 8 | + private String cardNum; | ||
| 9 | + private String sceneName; | ||
| 10 | + private Integer schoolId; | ||
| 11 | + private String photo; | ||
| 12 | + private String studentCode; | ||
| 13 | + | ||
| 14 | + public Integer getId() { | ||
| 15 | + return id; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + public void setId(Integer id) { | ||
| 19 | + this.id = id; | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + public String getName() { | ||
| 23 | + return name; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public void setName(String name) { | ||
| 27 | + this.name = name; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public String getUserId() { | ||
| 31 | + return userId; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + public void setUserId(String userId) { | ||
| 35 | + this.userId = userId; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public String getCardNum() { | ||
| 39 | + return cardNum; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + public void setCardNum(String cardNum) { | ||
| 43 | + this.cardNum = cardNum; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + public String getSceneName() { | ||
| 47 | + return sceneName; | ||
| 48 | + } | ||
| 49 | + | ||
| 50 | + public void setSceneName(String sceneName) { | ||
| 51 | + this.sceneName = sceneName; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + public Integer getSchoolId() { | ||
| 55 | + return schoolId; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + public void setSchoolId(Integer schoolId) { | ||
| 59 | + this.schoolId = schoolId; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + public String getPhoto() { | ||
| 63 | + return photo; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + public void setPhoto(String photo) { | ||
| 67 | + this.photo = photo; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + public String getStudentCode() { | ||
| 71 | + return studentCode; | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + public void setStudentCode(String studentCode) { | ||
| 75 | + this.studentCode = studentCode; | ||
| 76 | + } | ||
| 77 | +} |
cloud/dahua/src/main/java/com/example/dahua/bean/yx/YxSendFaceDto.java
0 → 100644
| @@ -0,0 +1,42 @@ | @@ -0,0 +1,42 @@ | ||
| 1 | +package com.example.dahua.bean.yx; | ||
| 2 | + | ||
| 3 | +import io.swagger.annotations.ApiModelProperty; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * 照片下发人脸实体类 | ||
| 7 | + * @author xuquan | ||
| 8 | + * @date 2020/12/16 09:10 | ||
| 9 | + */ | ||
| 10 | +public class YxSendFaceDto { | ||
| 11 | + | ||
| 12 | + @ApiModelProperty("学校ID") | ||
| 13 | + private Integer schoolId ; | ||
| 14 | + @ApiModelProperty("设备号,逗号隔开") | ||
| 15 | + private String sNos; | ||
| 16 | + @ApiModelProperty("区域名称") | ||
| 17 | + private String sceneName; | ||
| 18 | + | ||
| 19 | + public Integer getSchoolId() { | ||
| 20 | + return schoolId; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public void setSchoolId(Integer schoolId) { | ||
| 24 | + this.schoolId = schoolId; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public String getsNos() { | ||
| 28 | + return sNos; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public void setsNos(String sNos) { | ||
| 32 | + this.sNos = sNos; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + public String getSceneName() { | ||
| 36 | + return sceneName; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + public void setSceneName(String sceneName) { | ||
| 40 | + this.sceneName = sceneName; | ||
| 41 | + } | ||
| 42 | +} |
cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java
| 1 | package com.example.dahua.control; | 1 | package com.example.dahua.control; |
| 2 | 2 | ||
| 3 | import com.example.dahua.async.SendUserInfoTask2; | 3 | import com.example.dahua.async.SendUserInfoTask2; |
| 4 | -import com.example.dahua.bean.StudentBean; | 4 | +import com.example.dahua.bean.yx.Result; |
| 5 | +import com.example.dahua.bean.yx.YxSendFaceDto; | ||
| 5 | import com.example.dahua.dao.UserDao; | 6 | import com.example.dahua.dao.UserDao; |
| 6 | import com.example.dahua.service.UserOperateService; | 7 | import com.example.dahua.service.UserOperateService; |
| 7 | import com.example.dahua.service.imp.BaseService; | 8 | import com.example.dahua.service.imp.BaseService; |
| 8 | -import com.example.dahua.utils.HttpUtil; | 9 | +import com.example.dahua.utils.ExcelUtil; |
| 9 | import com.example.dahua.utils.HttpUtils; | 10 | import com.example.dahua.utils.HttpUtils; |
| 10 | -import io.micrometer.core.instrument.util.StringUtils; | 11 | +import com.example.dahua.utils.ReadExcelUtil; |
| 11 | import io.swagger.annotations.Api; | 12 | import io.swagger.annotations.Api; |
| 12 | import io.swagger.annotations.ApiOperation; | 13 | import io.swagger.annotations.ApiOperation; |
| 13 | import lombok.extern.slf4j.Slf4j; | 14 | import lombok.extern.slf4j.Slf4j; |
| 14 | -import org.apache.commons.collections4.CollectionUtils; | ||
| 15 | import org.springframework.beans.factory.annotation.Autowired; | 15 | import org.springframework.beans.factory.annotation.Autowired; |
| 16 | import org.springframework.http.MediaType; | 16 | import org.springframework.http.MediaType; |
| 17 | -import org.springframework.web.bind.annotation.RequestMapping; | ||
| 18 | -import org.springframework.web.bind.annotation.RequestMethod; | ||
| 19 | -import org.springframework.web.bind.annotation.RequestParam; | ||
| 20 | -import org.springframework.web.bind.annotation.RestController; | 17 | +import org.springframework.web.bind.annotation.*; |
| 18 | +import org.springframework.web.multipart.MultipartFile; | ||
| 19 | +import org.springframework.web.multipart.MultipartHttpServletRequest; | ||
| 21 | 20 | ||
| 21 | +import javax.servlet.http.HttpServletRequest; | ||
| 22 | +import java.io.IOException; | ||
| 23 | +import java.io.InputStream; | ||
| 24 | +import java.util.ArrayList; | ||
| 22 | import java.util.List; | 25 | import java.util.List; |
| 23 | 26 | ||
| 24 | /** | 27 | /** |
| @@ -98,4 +101,27 @@ public class UserOperateController { | @@ -98,4 +101,27 @@ public class UserOperateController { | ||
| 98 | @RequestParam(value = "deviceIds",required = false) String deviceIds){ | 101 | @RequestParam(value = "deviceIds",required = false) String deviceIds){ |
| 99 | userOperateService.deleteFaceByClassId(schoolId,deviceIds); | 102 | userOperateService.deleteFaceByClassId(schoolId,deviceIds); |
| 100 | } | 103 | } |
| 104 | + | ||
| 105 | + @ApiOperation(value = "导入学生信息") | ||
| 106 | + @RequestMapping(value = "importStudent", method = RequestMethod.POST) | ||
| 107 | + public void importExcel(@RequestParam(value="studentFile") MultipartFile file,HttpServletRequest request){ | ||
| 108 | + List<ArrayList<String>> readExcel = new ArrayList<>(); | ||
| 109 | + try { | ||
| 110 | + readExcel = new ReadExcelUtil().readExcel(file); | ||
| 111 | + } catch (IOException e) { | ||
| 112 | + e.printStackTrace(); | ||
| 113 | + } | ||
| 114 | + String originalFileName = file.getOriginalFilename(); | ||
| 115 | + int beginIndex = originalFileName.lastIndexOf("."); | ||
| 116 | + //原名 | ||
| 117 | + String fileName = originalFileName.substring(0,beginIndex); | ||
| 118 | + | ||
| 119 | + userOperateService.saveStudentInfo(readExcel, fileName); | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + @ApiOperation(value = "艺校照片特定下发") | ||
| 123 | + @RequestMapping(value = "sendYxFace", method = RequestMethod.POST) | ||
| 124 | + public Result sendFaceByThread(@RequestBody YxSendFaceDto sendFaceDto) { | ||
| 125 | + return userOperateService.sendYxUserFace(sendFaceDto); | ||
| 126 | + } | ||
| 101 | } | 127 | } |
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
| 1 | package com.example.dahua.dao; | 1 | package com.example.dahua.dao; |
| 2 | 2 | ||
| 3 | import com.example.dahua.bean.*; | 3 | import com.example.dahua.bean.*; |
| 4 | +import com.example.dahua.bean.yx.ImportStudent; | ||
| 4 | import org.apache.ibatis.annotations.*; | 5 | import org.apache.ibatis.annotations.*; |
| 5 | import org.springframework.stereotype.Repository; | 6 | import org.springframework.stereotype.Repository; |
| 6 | 7 | ||
| @@ -100,6 +101,9 @@ public interface UserDao { | @@ -100,6 +101,9 @@ public interface UserDao { | ||
| 100 | @Select(" select * from SZ_V_School_Student where student_num = #{student_num} and name = #{name}") | 101 | @Select(" select * from SZ_V_School_Student where student_num = #{student_num} and name = #{name}") |
| 101 | UserInfoBean getStudent(@Param("student_num") String student_num, @Param("name") String name); | 102 | UserInfoBean getStudent(@Param("student_num") String student_num, @Param("name") String name); |
| 102 | 103 | ||
| 104 | + @Select(" select Top(1) * from SZ_V_School_Student where school_id = #{schoolId} and name = #{name}") | ||
| 105 | + UserInfoBean getStudentByName(@Param("schoolId") Integer schoolId, @Param("name") String name); | ||
| 106 | + | ||
| 103 | @Select(" select * from SZ_V_School_Student where school_id = #{school_id} and sex = #{sex} and student_type = #{student_type}") | 107 | @Select(" select * from SZ_V_School_Student where school_id = #{school_id} and sex = #{sex} and student_type = #{student_type}") |
| 104 | List<UserInfoBean> getStudentWithSchoolId(@Param("school_id") String school_id, @Param("sex") String sex, @Param("student_type") String student_type); | 108 | List<UserInfoBean> getStudentWithSchoolId(@Param("school_id") String school_id, @Param("sex") String sex, @Param("student_type") String student_type); |
| 105 | 109 | ||
| @@ -281,4 +285,10 @@ public interface UserDao { | @@ -281,4 +285,10 @@ public interface UserDao { | ||
| 281 | List<StudentBean> getStudentByClassId(@Param("schoolId") int schoolId,@Param("classIds") List<Integer> classIds); | 285 | List<StudentBean> getStudentByClassId(@Param("schoolId") int schoolId,@Param("classIds") List<Integer> classIds); |
| 282 | 286 | ||
| 283 | List<Integer> getGroupByClassId(@Param("classId") Integer classId); | 287 | List<Integer> getGroupByClassId(@Param("classId") Integer classId); |
| 288 | + | ||
| 289 | + void insertStudent(ImportStudent studentBak); | ||
| 290 | + | ||
| 291 | + List<ImportStudent> selectYxStudentList(@Param("sceneName") String sceneName,@Param("schoolId") Integer schoolId); | ||
| 292 | + | ||
| 293 | + List<ImportStudent> selectStudentList(); | ||
| 284 | } | 294 | } |
cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java
| 1 | package com.example.dahua.service; | 1 | package com.example.dahua.service; |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | +import com.example.dahua.bean.yx.Result; | ||
| 5 | +import com.example.dahua.bean.yx.YxSendFaceDto; | ||
| 6 | + | ||
| 7 | +import java.util.ArrayList; | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 4 | /** | 10 | /** |
| 5 | * 下发用户信息、人脸、卡、权限接口 | 11 | * 下发用户信息、人脸、卡、权限接口 |
| 6 | * @author xuquan | 12 | * @author xuquan |
| @@ -23,4 +29,13 @@ public interface UserOperateService { | @@ -23,4 +29,13 @@ public interface UserOperateService { | ||
| 23 | void deleteFaceByClassId(Integer schoolId,String deviceIds); | 29 | void deleteFaceByClassId(Integer schoolId,String deviceIds); |
| 24 | 30 | ||
| 25 | void test6(Integer schoolId,Integer roomId,Integer type,Integer outof,String intime,String clintId,String startTime,String endTime); | 31 | void test6(Integer schoolId,Integer roomId,Integer type,Integer outof,String intime,String clintId,String startTime,String endTime); |
| 32 | + | ||
| 33 | + void saveStudentInfo(List<ArrayList<String>> readExcel, String fileName); | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 多线程照片下发 | ||
| 37 | + * @param sendFaceDto | ||
| 38 | + * @return | ||
| 39 | + */ | ||
| 40 | + Result sendYxUserFace(YxSendFaceDto sendFaceDto); | ||
| 26 | } | 41 | } |
cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java
| @@ -3,6 +3,7 @@ package com.example.dahua.service.imp; | @@ -3,6 +3,7 @@ package com.example.dahua.service.imp; | ||
| 3 | 3 | ||
| 4 | import com.example.dahua.bean.SendRecordBean; | 4 | import com.example.dahua.bean.SendRecordBean; |
| 5 | import com.example.dahua.bean.StudentBean; | 5 | import com.example.dahua.bean.StudentBean; |
| 6 | +import com.example.dahua.bean.yx.ImportStudent; | ||
| 6 | import com.example.dahua.dao.UserDao; | 7 | import com.example.dahua.dao.UserDao; |
| 7 | import com.example.dahua.xiananDao.SendRecordDao; | 8 | import com.example.dahua.xiananDao.SendRecordDao; |
| 8 | import lombok.extern.slf4j.Slf4j; | 9 | import lombok.extern.slf4j.Slf4j; |
| @@ -162,4 +163,17 @@ public class BaseService { | @@ -162,4 +163,17 @@ public class BaseService { | ||
| 162 | Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SendRecordBean::getNum))),ArrayList::new)); | 163 | Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SendRecordBean::getNum))),ArrayList::new)); |
| 163 | return studentList; | 164 | return studentList; |
| 164 | } | 165 | } |
| 166 | + | ||
| 167 | + /** | ||
| 168 | + * 获取学校下的老师数据信息 | ||
| 169 | + * @param schoolId | ||
| 170 | + * @return | ||
| 171 | + */ | ||
| 172 | + public List<ImportStudent> getYxStudentList(Integer schoolId, String sceneName) { | ||
| 173 | + List<ImportStudent> students = userDao.selectYxStudentList(sceneName,schoolId); | ||
| 174 | + //去重重复数据 | ||
| 175 | + List<ImportStudent> teacherist = students.stream().collect(Collectors.collectingAndThen( | ||
| 176 | + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ImportStudent::getCardNum))), ArrayList::new)); | ||
| 177 | + return teacherist; | ||
| 178 | + } | ||
| 165 | } | 179 | } |
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java
| @@ -4,6 +4,10 @@ import com.example.dahua.MyTask; | @@ -4,6 +4,10 @@ import com.example.dahua.MyTask; | ||
| 4 | import com.example.dahua.bean.SendRecordBean; | 4 | import com.example.dahua.bean.SendRecordBean; |
| 5 | import com.example.dahua.bean.StudentBean; | 5 | import com.example.dahua.bean.StudentBean; |
| 6 | import com.example.dahua.bean.UserInfoBean; | 6 | import com.example.dahua.bean.UserInfoBean; |
| 7 | +import com.example.dahua.bean.yx.ImportStudent; | ||
| 8 | +import com.example.dahua.bean.yx.Result; | ||
| 9 | +import com.example.dahua.bean.yx.ResultGenerator; | ||
| 10 | +import com.example.dahua.bean.yx.YxSendFaceDto; | ||
| 7 | import com.example.dahua.dao.UserDao; | 11 | import com.example.dahua.dao.UserDao; |
| 8 | import com.example.dahua.lib.CompressPic; | 12 | import com.example.dahua.lib.CompressPic; |
| 9 | import com.example.dahua.lib.FilePath; | 13 | import com.example.dahua.lib.FilePath; |
| @@ -16,12 +20,14 @@ import com.example.dahua.utils.HttpUtils; | @@ -16,12 +20,14 @@ import com.example.dahua.utils.HttpUtils; | ||
| 16 | import com.example.dahua.xiananDao.SearchMapper; | 20 | import com.example.dahua.xiananDao.SearchMapper; |
| 17 | import com.example.dahua.xiananDao.SendRecordDao; | 21 | import com.example.dahua.xiananDao.SendRecordDao; |
| 18 | import lombok.extern.slf4j.Slf4j; | 22 | import lombok.extern.slf4j.Slf4j; |
| 23 | +import org.springframework.beans.BeanUtils; | ||
| 19 | import org.springframework.beans.factory.annotation.Autowired; | 24 | import org.springframework.beans.factory.annotation.Autowired; |
| 20 | import org.springframework.stereotype.Service; | 25 | import org.springframework.stereotype.Service; |
| 21 | import org.springframework.util.CollectionUtils; | 26 | import org.springframework.util.CollectionUtils; |
| 22 | import org.springframework.util.StringUtils; | 27 | import org.springframework.util.StringUtils; |
| 23 | 28 | ||
| 24 | import java.io.File; | 29 | import java.io.File; |
| 30 | +import java.text.SimpleDateFormat; | ||
| 25 | import java.util.*; | 31 | import java.util.*; |
| 26 | import java.util.stream.Collectors; | 32 | import java.util.stream.Collectors; |
| 27 | 33 | ||
| @@ -59,7 +65,7 @@ public class UserOperateServiceImpl implements UserOperateService { | @@ -59,7 +65,7 @@ public class UserOperateServiceImpl implements UserOperateService { | ||
| 59 | studentBeanList = baseService.getTeacherList(schoolId); | 65 | studentBeanList = baseService.getTeacherList(schoolId); |
| 60 | } | 66 | } |
| 61 | log.info("下发用户总数:"+studentBeanList.size()); | 67 | log.info("下发用户总数:"+studentBeanList.size()); |
| 62 | - //下發人臉 | 68 | + //下发人脸 |
| 63 | sendFace(studentBeanList,deviceList,schoolId,userType); | 69 | sendFace(studentBeanList,deviceList,schoolId,userType); |
| 64 | } | 70 | } |
| 65 | 71 | ||
| @@ -228,4 +234,71 @@ public class UserOperateServiceImpl implements UserOperateService { | @@ -228,4 +234,71 @@ public class UserOperateServiceImpl implements UserOperateService { | ||
| 228 | } | 234 | } |
| 229 | } | 235 | } |
| 230 | } | 236 | } |
| 237 | + | ||
| 238 | + @Override | ||
| 239 | + public void saveStudentInfo(List<ArrayList<String>> readExcel, String fileName) { | ||
| 240 | + // 读取数据封装实体 | ||
| 241 | + if(readExcel.size() == 0) { | ||
| 242 | + log.error("未解析到数据。"); | ||
| 243 | + return; | ||
| 244 | + } | ||
| 245 | + List<ImportStudent> doList = new ArrayList<>(); | ||
| 246 | + //将解析的Excel数据集合封装到实体, | ||
| 247 | + for(List<String> sList : readExcel) { | ||
| 248 | + ImportStudent importStudent = new ImportStudent(); | ||
| 249 | + int count = 0 ; | ||
| 250 | + for (String str : sList){ | ||
| 251 | + if(0 == count){ | ||
| 252 | + importStudent.setSceneName(str); | ||
| 253 | + } | ||
| 254 | + if(3 == count) { | ||
| 255 | + UserInfoBean userInfoBean = userDao.getStudentByName(12,str); | ||
| 256 | + if(userInfoBean !=null){ | ||
| 257 | + importStudent.setSchoolId(12); | ||
| 258 | + importStudent.setCardNum(userInfoBean.getStudent_num()); | ||
| 259 | + importStudent.setName(userInfoBean.getName()); | ||
| 260 | + importStudent.setUserId(userInfoBean.getUser_id()); | ||
| 261 | + importStudent.setPhoto(userInfoBean.getPhoto()); | ||
| 262 | + importStudent.setStudentCode(userInfoBean.getStudentcode()); | ||
| 263 | + } | ||
| 264 | + } | ||
| 265 | + count ++; | ||
| 266 | + } | ||
| 267 | + doList.add(importStudent); | ||
| 268 | + } | ||
| 269 | + if(doList.size() > 0) { | ||
| 270 | + for(ImportStudent importStudent : doList) { | ||
| 271 | + userDao.insertStudent(importStudent); | ||
| 272 | + } | ||
| 273 | + } | ||
| 274 | + } | ||
| 275 | + | ||
| 276 | + @Override | ||
| 277 | + public Result sendYxUserFace(YxSendFaceDto sendFaceDto) { | ||
| 278 | + //下发设备集合 | ||
| 279 | + String[] deviceArr = sendFaceDto.getsNos().split(","); | ||
| 280 | + List<String> deviceList= new ArrayList<>(Arrays.asList(deviceArr)); | ||
| 281 | + if(deviceList.size()<1){ | ||
| 282 | + return ResultGenerator.genFailResult("未选择下发设备"); | ||
| 283 | + } | ||
| 284 | + Integer schoolId = sendFaceDto.getSchoolId(); | ||
| 285 | + String sceneName = sendFaceDto.getSceneName(); | ||
| 286 | + //根据类型获取下发用户信息 | ||
| 287 | + List<ImportStudent> studentBeanList = baseService.getYxStudentList(schoolId,sceneName); | ||
| 288 | + log.info("统计共有下发用户数量:{}",studentBeanList.size()); | ||
| 289 | + List<StudentBean> dtoList = studentBeanList.stream() | ||
| 290 | + .filter(e -> !StringUtils.isEmpty(e.getPhoto())) | ||
| 291 | + .map(e -> { | ||
| 292 | + StudentBean d = new StudentBean(); | ||
| 293 | + d.setSchool_id(e.getSchoolId()); | ||
| 294 | + d.setPhoto(e.getPhoto()); | ||
| 295 | + d.setName(e.getName()); | ||
| 296 | + d.setStudentcode(e.getStudentCode()); | ||
| 297 | + return d; | ||
| 298 | + }) | ||
| 299 | + .collect(Collectors.toList()); | ||
| 300 | + //下发人脸 | ||
| 301 | + sendFace(dtoList,deviceList,schoolId,2); | ||
| 302 | + return ResultGenerator.genSuccessResult(); | ||
| 303 | + } | ||
| 231 | } | 304 | } |
cloud/dahua/src/main/java/com/example/dahua/utils/ExcelUtil.java
0 → 100644
| @@ -0,0 +1,108 @@ | @@ -0,0 +1,108 @@ | ||
| 1 | +package com.example.dahua.utils; | ||
| 2 | + | ||
| 3 | +import lombok.extern.slf4j.Slf4j; | ||
| 4 | +import org.apache.poi.hssf.usermodel.HSSFCell; | ||
| 5 | +import org.apache.poi.hssf.usermodel.HSSFDateUtil; | ||
| 6 | +import org.apache.poi.hssf.usermodel.HSSFWorkbook; | ||
| 7 | +import org.apache.poi.ss.usermodel.*; | ||
| 8 | +import org.apache.poi.xssf.usermodel.XSSFCell; | ||
| 9 | +import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||
| 10 | + | ||
| 11 | +import java.io.InputStream; | ||
| 12 | +import java.text.DecimalFormat; | ||
| 13 | +import java.text.SimpleDateFormat; | ||
| 14 | +import java.util.ArrayList; | ||
| 15 | +import java.util.Calendar; | ||
| 16 | +import java.util.Date; | ||
| 17 | +import java.util.List; | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * excel工具类 | ||
| 21 | + */ | ||
| 22 | +@Slf4j | ||
| 23 | +public class ExcelUtil { | ||
| 24 | + | ||
| 25 | + public static final String OFFICE_EXCEL_2003_POSTFIX = "xls"; | ||
| 26 | + public static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx"; | ||
| 27 | + public static final String EMPTY = ""; | ||
| 28 | + public static final String POINT = "."; | ||
| 29 | + public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 获得path的后缀名 | ||
| 33 | + * @param path | ||
| 34 | + * @return | ||
| 35 | + */ | ||
| 36 | + public static String getPostfix(String path){ | ||
| 37 | + if(path==null || EMPTY.equals(path.trim())){ | ||
| 38 | + return EMPTY; | ||
| 39 | + } | ||
| 40 | + if(path.contains(POINT)){ | ||
| 41 | + return path.substring(path.lastIndexOf(POINT)+1,path.length()); | ||
| 42 | + } | ||
| 43 | + return EMPTY; | ||
| 44 | + } | ||
| 45 | + /** | ||
| 46 | + * 单元格格式 | ||
| 47 | + * @param hssfCell | ||
| 48 | + * @return | ||
| 49 | + */ | ||
| 50 | + @SuppressWarnings({ "static-access", "deprecation" }) | ||
| 51 | + public static String getHValue(HSSFCell hssfCell){ | ||
| 52 | + if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { | ||
| 53 | + return String.valueOf(hssfCell.getBooleanCellValue()); | ||
| 54 | + } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) { | ||
| 55 | + String cellValue = ""; | ||
| 56 | + if(HSSFDateUtil.isCellDateFormatted(hssfCell)){ | ||
| 57 | + Date date = HSSFDateUtil.getJavaDate(hssfCell.getNumericCellValue()); | ||
| 58 | + cellValue = sdf.format(date); | ||
| 59 | + }else{ | ||
| 60 | + DecimalFormat df = new DecimalFormat("#.##"); | ||
| 61 | + cellValue = df.format(hssfCell.getNumericCellValue()); | ||
| 62 | + String strArr = cellValue.substring(cellValue.lastIndexOf(POINT)+1,cellValue.length()); | ||
| 63 | + if(strArr.equals("00")){ | ||
| 64 | + cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT)); | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + return cellValue; | ||
| 68 | + } else { | ||
| 69 | + return String.valueOf(hssfCell.getStringCellValue()); | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | + /** | ||
| 73 | + * 单元格格式 | ||
| 74 | + * @param xssfCell | ||
| 75 | + * @return | ||
| 76 | + */ | ||
| 77 | + public static String getXValue(XSSFCell xssfCell){ | ||
| 78 | + if (xssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { | ||
| 79 | + return String.valueOf(xssfCell.getBooleanCellValue()); | ||
| 80 | + } else if (xssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) { | ||
| 81 | + String cellValue = ""; | ||
| 82 | + if(XSSFDateUtil.isCellDateFormatted(xssfCell)){ | ||
| 83 | + Date date = XSSFDateUtil.getJavaDate(xssfCell.getNumericCellValue()); | ||
| 84 | + cellValue = sdf.format(date); | ||
| 85 | + }else{ | ||
| 86 | + DecimalFormat df = new DecimalFormat("#.##"); | ||
| 87 | + cellValue = df.format(xssfCell.getNumericCellValue()); | ||
| 88 | + String strArr = cellValue.substring(cellValue.lastIndexOf(POINT)+1,cellValue.length()); | ||
| 89 | + if(strArr.equals("00")){ | ||
| 90 | + cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT)); | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + return cellValue; | ||
| 94 | + } else { | ||
| 95 | + return String.valueOf(xssfCell.getStringCellValue()); | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | + /** | ||
| 99 | + * 自定义xssf日期工具类 | ||
| 100 | + * | ||
| 101 | + */ | ||
| 102 | + static class XSSFDateUtil extends DateUtil { | ||
| 103 | + protected static int absoluteDay(Calendar cal, boolean use1904windowing) { | ||
| 104 | + return DateUtil.absoluteDay(cal, use1904windowing); | ||
| 105 | + } | ||
| 106 | + } | ||
| 107 | +} | ||
| 108 | + |
cloud/dahua/src/main/java/com/example/dahua/utils/ReadExcelUtil.java
0 → 100644
| @@ -0,0 +1,161 @@ | @@ -0,0 +1,161 @@ | ||
| 1 | +package com.example.dahua.utils; | ||
| 2 | + | ||
| 3 | +import org.apache.poi.hssf.usermodel.HSSFCell; | ||
| 4 | +import org.apache.poi.hssf.usermodel.HSSFRow; | ||
| 5 | +import org.apache.poi.hssf.usermodel.HSSFSheet; | ||
| 6 | +import org.apache.poi.hssf.usermodel.HSSFWorkbook; | ||
| 7 | +import org.apache.poi.xssf.usermodel.XSSFCell; | ||
| 8 | +import org.apache.poi.xssf.usermodel.XSSFRow; | ||
| 9 | +import org.apache.poi.xssf.usermodel.XSSFSheet; | ||
| 10 | +import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||
| 11 | +import org.springframework.web.multipart.MultipartFile; | ||
| 12 | + | ||
| 13 | +import java.io.IOException; | ||
| 14 | +import java.io.InputStream; | ||
| 15 | +import java.util.ArrayList; | ||
| 16 | +import java.util.List; | ||
| 17 | + | ||
| 18 | +public class ReadExcelUtil { | ||
| 19 | + | ||
| 20 | + public int totalRows; //sheet中总行数 | ||
| 21 | + | ||
| 22 | + public static int totalCells; //每一行总单元格数 | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * read the Excel .xlsx,.xls | ||
| 26 | + * @param file jsp中的上传文件 | ||
| 27 | + * @return | ||
| 28 | + * @throws IOException | ||
| 29 | + */ | ||
| 30 | + public List<ArrayList<String>> readExcel(MultipartFile file) throws IOException { | ||
| 31 | + if(file==null||ExcelUtil.EMPTY.equals(file.getOriginalFilename().trim())){ | ||
| 32 | + return null; | ||
| 33 | + }else{ | ||
| 34 | + String postfix = ExcelUtil.getPostfix(file.getOriginalFilename()); | ||
| 35 | + if(!ExcelUtil.EMPTY.equals(postfix)){ | ||
| 36 | + if(ExcelUtil.OFFICE_EXCEL_2003_POSTFIX.equals(postfix)){ | ||
| 37 | + return readXls(file); | ||
| 38 | + }else if(ExcelUtil.OFFICE_EXCEL_2010_POSTFIX.equals(postfix)){ | ||
| 39 | + return readXlsx(file); | ||
| 40 | + }else{ | ||
| 41 | + return null; | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + return null; | ||
| 46 | + } | ||
| 47 | + /** | ||
| 48 | + * read the Excel 2010 .xlsx | ||
| 49 | + * @param file | ||
| 50 | + * @return | ||
| 51 | + * @throws IOException | ||
| 52 | + */ | ||
| 53 | + @SuppressWarnings("deprecation") | ||
| 54 | + public List<ArrayList<String>> readXlsx(MultipartFile file){ | ||
| 55 | + List<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); | ||
| 56 | + // IO流读取文件 | ||
| 57 | + InputStream input = null; | ||
| 58 | + XSSFWorkbook wb = null; | ||
| 59 | + ArrayList<String> rowList = null; | ||
| 60 | + try { | ||
| 61 | + input = file.getInputStream(); | ||
| 62 | + // 创建文档 | ||
| 63 | + wb = new XSSFWorkbook(input); | ||
| 64 | + //读取sheet(页) | ||
| 65 | + for(int numSheet=0;numSheet<wb.getNumberOfSheets();numSheet++){ | ||
| 66 | + XSSFSheet xssfSheet = wb.getSheetAt(numSheet); | ||
| 67 | + if(xssfSheet == null){ | ||
| 68 | + continue; | ||
| 69 | + } | ||
| 70 | + totalRows = xssfSheet.getLastRowNum(); | ||
| 71 | + //读取Row,从第4行开始 | ||
| 72 | + for(int rowNum = 1;rowNum <= totalRows;rowNum++){ | ||
| 73 | + XSSFRow xssfRow = xssfSheet.getRow(rowNum); | ||
| 74 | + if(xssfRow!=null){ | ||
| 75 | + rowList = new ArrayList<String>(); | ||
| 76 | + totalCells = xssfRow.getLastCellNum(); | ||
| 77 | + //读取列,从第一列开始 | ||
| 78 | + for(int c=0;c<=totalCells+1;c++){ | ||
| 79 | + XSSFCell cell = xssfRow.getCell(c); | ||
| 80 | + if(cell==null){ | ||
| 81 | + rowList.add(ExcelUtil.EMPTY); | ||
| 82 | + continue; | ||
| 83 | + } | ||
| 84 | + rowList.add(ExcelUtil.getXValue(cell).trim()); | ||
| 85 | + } | ||
| 86 | + list.add(rowList); | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + return list; | ||
| 91 | + } catch (IOException e) { | ||
| 92 | + e.printStackTrace(); | ||
| 93 | + } finally{ | ||
| 94 | + try { | ||
| 95 | + input.close(); | ||
| 96 | + } catch (IOException e) { | ||
| 97 | + e.printStackTrace(); | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + return null; | ||
| 101 | + | ||
| 102 | + } | ||
| 103 | + /** | ||
| 104 | + * read the Excel 2003-2007 .xls | ||
| 105 | + * @param file | ||
| 106 | + * @return | ||
| 107 | + * @throws IOException | ||
| 108 | + */ | ||
| 109 | + public List<ArrayList<String>> readXls(MultipartFile file){ | ||
| 110 | + List<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); | ||
| 111 | + // IO流读取文件 | ||
| 112 | + InputStream input = null; | ||
| 113 | + HSSFWorkbook wb = null; | ||
| 114 | + ArrayList<String> rowList = null; | ||
| 115 | + try { | ||
| 116 | + input = file.getInputStream(); | ||
| 117 | + // 创建文档 | ||
| 118 | + wb = new HSSFWorkbook(input); | ||
| 119 | + //读取sheet(页) | ||
| 120 | + for(int numSheet = 0; numSheet < wb.getNumberOfSheets(); numSheet++){ | ||
| 121 | + HSSFSheet hssfSheet = wb.getSheetAt(numSheet); | ||
| 122 | + String sheetName = hssfSheet.getSheetName(); | ||
| 123 | + if(hssfSheet == null){ | ||
| 124 | + continue; | ||
| 125 | + } | ||
| 126 | + totalRows = hssfSheet.getLastRowNum(); | ||
| 127 | + //读取Row,从第二行开始 | ||
| 128 | + for(int rowNum = 1;rowNum <= totalRows;rowNum++){ | ||
| 129 | + HSSFRow hssfRow = hssfSheet.getRow(rowNum); | ||
| 130 | + if(hssfRow!=null){ | ||
| 131 | + rowList = new ArrayList<String>(); | ||
| 132 | + totalCells = hssfRow.getLastCellNum(); | ||
| 133 | + rowList.add(sheetName); | ||
| 134 | + //读取列,从第一列开始 | ||
| 135 | + for(short c=0;c<=totalCells+1;c++){ | ||
| 136 | + HSSFCell cell = hssfRow.getCell(c); | ||
| 137 | + if(cell==null){ | ||
| 138 | +// rowList.add(ExcelUtil.EMPTY); | ||
| 139 | + continue; | ||
| 140 | + } | ||
| 141 | + rowList.add(ExcelUtil.getHValue(cell).trim()); | ||
| 142 | + | ||
| 143 | + } | ||
| 144 | + list.add(rowList); | ||
| 145 | + } | ||
| 146 | + } | ||
| 147 | + } | ||
| 148 | + return list; | ||
| 149 | + } catch (IOException e) { | ||
| 150 | + e.printStackTrace(); | ||
| 151 | + } finally{ | ||
| 152 | + try { | ||
| 153 | + input.close(); | ||
| 154 | + } catch (IOException e) { | ||
| 155 | + e.printStackTrace(); | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + return null; | ||
| 159 | + } | ||
| 160 | +} | ||
| 161 | + |
cloud/dahua/src/main/resources/mapper/usermapper.xml
| @@ -70,4 +70,26 @@ | @@ -70,4 +70,26 @@ | ||
| 70 | AND state = 1 | 70 | AND state = 1 |
| 71 | </select> | 71 | </select> |
| 72 | 72 | ||
| 73 | + <resultMap id="YxStudentMap" type="com.example.dahua.bean.yx.ImportStudent"> | ||
| 74 | + <id column="id" jdbcType="INTEGER" property="id"/> | ||
| 75 | + <result column="name" property="name"/> | ||
| 76 | + <result column="user_id" property="userId"/> | ||
| 77 | + <result column="card_num" property="cardNum"/> | ||
| 78 | + <result column="photo" property="photo"/> | ||
| 79 | + <result column="school_Id" property="schoolId"/> | ||
| 80 | + <result column="student_code" property="studentCode"/> | ||
| 81 | + <result column="scene_name" property="sceneName"/> | ||
| 82 | + </resultMap> | ||
| 83 | + | ||
| 84 | + <insert id="insertStudent" parameterType="com.example.dahua.bean.yx.ImportStudent"> | ||
| 85 | + insert into sz_student_yx values (#{name},#{userId},#{cardNum},#{photo},#{studentCode},#{schoolId},#{sceneName}) | ||
| 86 | + </insert> | ||
| 87 | + | ||
| 88 | + <select id="selectStudentList" resultMap="YxStudentMap"> | ||
| 89 | + select * from sz_student_bak | ||
| 90 | + </select> | ||
| 91 | + | ||
| 92 | + <select id="selectYxStudentList" resultMap="YxStudentMap"> | ||
| 93 | + select * from sz_student_yx where school_id =#{schoolId} and scene_name = #{sceneName} | ||
| 94 | + </select> | ||
| 73 | </mapper> | 95 | </mapper> |
| 74 | \ No newline at end of file | 96 | \ No newline at end of file |