Commit 90a4f2083ac4a80b2672b2b22b7c85fb01a8df7c

Authored by liujun001
1 parent ee908e27

设备和场地

Bsth-admin/src/main/java/com/ruoyi/controller/dss/DssCarInfoController.java
@@ -26,13 +26,13 @@ import java.util.stream.Collectors; @@ -26,13 +26,13 @@ import java.util.stream.Collectors;
26 */ 26 */
27 @RestController 27 @RestController
28 @RequestMapping("/dss") 28 @RequestMapping("/dss")
29 -@Api(tags = "【蓝斯一期】岗前设备报警信息") 29 +@Api(tags = "【蓝斯一期】车辆信息")
30 public class DssCarInfoController { 30 public class DssCarInfoController {
31 @Autowired 31 @Autowired
32 private CarInfoService carInfoService; 32 private CarInfoService carInfoService;
33 33
34 @GetMapping(value = "/device/getPlates") 34 @GetMapping(value = "/device/getPlates")
35 - @ApiModelProperty("模糊查询车辆车牌列表") 35 + @ApiModelProperty(value="模糊查询车辆车牌列表")
36 public ResponseResult<Set<String>> getPlates(@Valid @RequestBody GetPlatesDTO dto, BindingResult bindingResult) { 36 public ResponseResult<Set<String>> getPlates(@Valid @RequestBody GetPlatesDTO dto, BindingResult bindingResult) {
37 if (bindingResult.hasErrors()) { 37 if (bindingResult.hasErrors()) {
38 return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage()); 38 return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
Bsth-admin/src/main/java/com/ruoyi/controller/dss/DssDriverController.java
@@ -88,11 +88,6 @@ public class DssDriverController extends BaseController { @@ -88,11 +88,6 @@ public class DssDriverController extends BaseController {
88 if (bindingResult.hasErrors()) { 88 if (bindingResult.hasErrors()) {
89 return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage()); 89 return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
90 } 90 }
91 -// Integer id = checkFace();  
92 -// if (Objects.isNull(id)) {  
93 -// return AjaxResult.error("登陆数据错误,无法识别人脸");  
94 -// }  
95 -// NewDriver newDriver = newDriverService.getById(id);  
96 NewDriver driver = faceService.checkFace(convertLoginDriverDTO(loginDriverDTO)); 91 NewDriver driver = faceService.checkFace(convertLoginDriverDTO(loginDriverDTO));
97 return ResponseResult.success(convertNewDriver(driver)); 92 return ResponseResult.success(convertNewDriver(driver));
98 } 93 }
@@ -106,10 +101,22 @@ public class DssDriverController extends BaseController { @@ -106,10 +101,22 @@ public class DssDriverController extends BaseController {
106 SignIn signIn = convertSignIn(dto); 101 SignIn signIn = convertSignIn(dto);
107 try { 102 try {
108 AjaxResult ajaxResult = signInService.addSignIn(signIn); 103 AjaxResult ajaxResult = signInService.addSignIn(signIn);
109 - if (ajaxResult.isSuccess()) { 104 + if (Objects.nonNull(ajaxResult) && ajaxResult.isSuccess()) {
  105 +// if(Objects.nonNull(ajaxResult.get(AjaxResult.MSG_TAG))){
  106 +// String msg = ajaxResult.get(AjaxResult.MSG_TAG).toString();
  107 +// if(StringUtils.isNotEmpty(msg)){
  108 +// return ResponseResult.error(Convert.toInt(ajaxResult.get(AjaxResult.CODE_TAG)), Convert.toStr(ajaxResult.get(AjaxResult.MSG_TAG)));
  109 +// }
  110 +// }
  111 + SysDictData sysDictData = new SysDictData();
  112 + sysDictData.setDictType("drinking");
  113 + SysDictData dictData = sysDictDataService.getOne(sysDictData);
  114 +
110 SignInResponseVo responseVo = (SignInResponseVo) ajaxResult.get(AjaxResult.DATA_TAG); 115 SignInResponseVo responseVo = (SignInResponseVo) ajaxResult.get(AjaxResult.DATA_TAG);
111 if (Objects.nonNull(responseVo)) { 116 if (Objects.nonNull(responseVo)) {
112 - return ResponseResult.success(convertSignInVo(responseVo)); 117 + ResponseResult<DssSignVo> responseResult = ResponseResult.success(convertSignInVo(responseVo,dto,dictData));
  118 + responseResult.setMsg(Convert.toStr(ajaxResult.get(AjaxResult.MSG_TAG)));
  119 + return responseResult;
113 } 120 }
114 } 121 }
115 122
@@ -132,7 +139,12 @@ public class DssDriverController extends BaseController { @@ -132,7 +139,12 @@ public class DssDriverController extends BaseController {
132 try { 139 try {
133 AjaxResult ajaxResult = signInService.addSignIn(signIn); 140 AjaxResult ajaxResult = signInService.addSignIn(signIn);
134 if (Objects.nonNull(ajaxResult) && ajaxResult.isSuccess()) { 141 if (Objects.nonNull(ajaxResult) && ajaxResult.isSuccess()) {
135 - return ResponseResult.success(convertSignOutVo(dto)); 142 + SignInResponseVo responseVo = (SignInResponseVo) ajaxResult.get(AjaxResult.DATA_TAG);
  143 + if (Objects.nonNull(responseVo)) {
  144 + ResponseResult<SignOutVo> responseResult = ResponseResult.success(convertSignOutVo(dto,responseVo));
  145 + responseResult.setMsg(Convert.toStr(ajaxResult.get(AjaxResult.MSG_TAG)));
  146 + return responseResult;
  147 + }
136 } 148 }
137 149
138 return ResponseResult.error(Convert.toInt(ajaxResult.get(AjaxResult.CODE_TAG)), Convert.toStr(ajaxResult.get(AjaxResult.MSG_TAG))); 150 return ResponseResult.error(Convert.toInt(ajaxResult.get(AjaxResult.CODE_TAG)), Convert.toStr(ajaxResult.get(AjaxResult.MSG_TAG)));
@@ -149,6 +161,8 @@ public class DssDriverController extends BaseController { @@ -149,6 +161,8 @@ public class DssDriverController extends BaseController {
149 return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage()); 161 return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
150 } 162 }
151 163
  164 +
  165 +
152 SignIn signIn = convertSignIn(dto); 166 SignIn signIn = convertSignIn(dto);
153 SignIn dataSignIn = signInService.getLastOne(signIn); 167 SignIn dataSignIn = signInService.getLastOne(signIn);
154 return ResponseResult.success(convertGetWineRecordVo(dataSignIn)); 168 return ResponseResult.success(convertGetWineRecordVo(dataSignIn));
@@ -259,7 +273,7 @@ public class DssDriverController extends BaseController { @@ -259,7 +273,7 @@ public class DssDriverController extends BaseController {
259 */ 273 */
260 private LoginDriverVo convertNewDriver(NewDriver newDriver) { 274 private LoginDriverVo convertNewDriver(NewDriver newDriver) {
261 LoginDriverVo loginDriverVo = new LoginDriverVo(); 275 LoginDriverVo loginDriverVo = new LoginDriverVo();
262 - loginDriverVo.setDriverCode(newDriver.getIcRfid()); 276 + loginDriverVo.setDriverCode(newDriver.getIcCardCode());
263 loginDriverVo.setDriverName(newDriver.getPersonnelName()); 277 loginDriverVo.setDriverName(newDriver.getPersonnelName());
264 loginDriverVo.setWorkCode(newDriver.getJobCode()); 278 loginDriverVo.setWorkCode(newDriver.getJobCode());
265 loginDriverVo.setStaffCode(newDriver.getJobCode()); 279 loginDriverVo.setStaffCode(newDriver.getJobCode());
@@ -289,7 +303,7 @@ public class DssDriverController extends BaseController { @@ -289,7 +303,7 @@ public class DssDriverController extends BaseController {
289 LoginUserInfoVo loginUserInfoVo = new LoginUserInfoVo(); 303 LoginUserInfoVo loginUserInfoVo = new LoginUserInfoVo();
290 loginUserInfoVo.setStaffId(Convert.toStr(newDriver.getId())); 304 loginUserInfoVo.setStaffId(Convert.toStr(newDriver.getId()));
291 loginUserInfoVo.setStaffName(newDriver.getPersonnelName()); 305 loginUserInfoVo.setStaffName(newDriver.getPersonnelName());
292 - loginUserInfoVo.setIcCardNo(newDriver.getIcRfid()); 306 + loginUserInfoVo.setIcCardNo(newDriver.getIcCardCode());
293 loginUserInfoVo.setFacePhotoPath(newDriver.getImage()); 307 loginUserInfoVo.setFacePhotoPath(newDriver.getImage());
294 308
295 loginDriverVo.setUserInfo(loginUserInfoVo); 309 loginDriverVo.setUserInfo(loginUserInfoVo);
@@ -420,6 +434,14 @@ public class DssDriverController extends BaseController { @@ -420,6 +434,14 @@ public class DssDriverController extends BaseController {
420 return signIn; 434 return signIn;
421 } 435 }
422 436
  437 +// private LinggangScheduling convertLinggangScheduling(DssGetWineRecordDTO dto) {
  438 +// SignIn signIn = new SignIn();
  439 +// signIn.setJobCode(dto.getStaffCode());
  440 +// signIn.setDeviceId(dto.getDevice());
  441 +//
  442 +// return signIn;
  443 +// }
  444 +
423 private List<LinggangSignInResource> convertLinggangSignInResource(UpLoadPictureDTO dto) { 445 private List<LinggangSignInResource> convertLinggangSignInResource(UpLoadPictureDTO dto) {
424 if (CollectionUtils.isEmpty(dto.getPicData())) { 446 if (CollectionUtils.isEmpty(dto.getPicData())) {
425 return Collections.emptyList(); 447 return Collections.emptyList();
@@ -452,12 +474,15 @@ public class DssDriverController extends BaseController { @@ -452,12 +474,15 @@ public class DssDriverController extends BaseController {
452 return resource; 474 return resource;
453 } 475 }
454 476
455 - private DssSignVo convertSignInVo(SignInResponseVo responseVo) { 477 + private DssSignVo convertSignInVo(SignInResponseVo responseVo,DssSignDTO dto,SysDictData dictData ) {
456 DssSignVo vo = new DssSignVo(); 478 DssSignVo vo = new DssSignVo();
457 vo.setTestId(Convert.toStr(responseVo.getId())); 479 vo.setTestId(Convert.toStr(responseVo.getId()));
458 480
459 Integer testResult = Objects.equals(responseVo.getExType(), 3) ? 2 : 0; 481 Integer testResult = Objects.equals(responseVo.getExType(), 3) ? 2 : 0;
460 vo.setTestResult(testResult); 482 vo.setTestResult(testResult);
  483 + if(Objects.isNull(dictData) || Objects.equals(testResult,0) && dto.getTestValue()>Convert.toLong(dictData.getDictValue())){
  484 + vo.setTestResult(1);
  485 + }
461 486
462 Integer result = Objects.isNull(responseVo.getStatus()) ? 0 : responseVo.getStatus() - 1; 487 Integer result = Objects.isNull(responseVo.getStatus()) ? 0 : responseVo.getStatus() - 1;
463 vo.setResult(result); 488 vo.setResult(result);
@@ -465,8 +490,8 @@ public class DssDriverController extends BaseController { @@ -465,8 +490,8 @@ public class DssDriverController extends BaseController {
465 return vo; 490 return vo;
466 } 491 }
467 492
468 - private SignOutVo convertSignOutVo(DssSignOutDTO dto) {  
469 - return new SignOutVo(dto.getDevice(), dto.getDriverCode(), dto.getLogoutTime()); 493 + private SignOutVo convertSignOutVo(DssSignOutDTO dto,SignInResponseVo vo) {
  494 + return new SignOutVo(dto.getDevice(), dto.getDriverCode(), dto.getLogoutTime(),vo.getId());
470 } 495 }
471 496
472 private GetWineRecordVo convertGetWineRecordVo(SignIn signIn) { 497 private GetWineRecordVo convertGetWineRecordVo(SignIn signIn) {
Bsth-admin/src/main/java/com/ruoyi/controller/dss/DssFaceController.java
@@ -133,7 +133,8 @@ public class DssFaceController extends BaseController { @@ -133,7 +133,8 @@ public class DssFaceController extends BaseController {
133 133
134 private NewDriver convertNewDriver(ResDataDriveDTO dto) { 134 private NewDriver convertNewDriver(ResDataDriveDTO dto) {
135 NewDriver newDriver = new NewDriver(); 135 NewDriver newDriver = new NewDriver();
136 - newDriver.setJobCode(dto.getStaffId()); 136 + newDriver.setId(Convert.toInt(dto.getStaffId()));
  137 + newDriver.setJobCode(dto.getStaffCode());
137 newDriver.setPersonnelName(dto.getStaffName()); 138 newDriver.setPersonnelName(dto.getStaffName());
138 newDriver.setIcCardCode(dto.getIcCardNo()); 139 newDriver.setIcCardCode(dto.getIcCardNo());
139 newDriver.setImage(dto.getFacePhotoPath()); 140 newDriver.setImage(dto.getFacePhotoPath());
@@ -142,15 +143,16 @@ public class DssFaceController extends BaseController { @@ -142,15 +143,16 @@ public class DssFaceController extends BaseController {
142 newDriver.setInteger(dto.getInteger()); 143 newDriver.setInteger(dto.getInteger());
143 newDriver.setSyncontent((dto.getSynContent())); 144 newDriver.setSyncontent((dto.getSynContent()));
144 newDriver.setCsn(dto.getCsn()); 145 newDriver.setCsn(dto.getCsn());
  146 + newDriver.setImageVersion(dto.getVersionNo());
145 147
146 return newDriver; 148 return newDriver;
147 } 149 }
148 150
149 private NewDriver convertFaceRegister(FaceRegisterDTO dto) { 151 private NewDriver convertFaceRegister(FaceRegisterDTO dto) {
150 NewDriver newDriver = new NewDriver(); 152 NewDriver newDriver = new NewDriver();
151 - newDriver.setIcCardCode(dto.getFaceValue()); 153 + newDriver.setIcCardCode(dto.getDriverCode());
152 newDriver.setFaceSignIn(1); 154 newDriver.setFaceSignIn(1);
153 - newDriver.setSignInEquipment(dto.getDriverCode()); 155 + newDriver.setSignInEquipment(dto.getDevice());
154 newDriver.setImage(dto.getFaceValue()); 156 newDriver.setImage(dto.getFaceValue());
155 157
156 return newDriver; 158 return newDriver;
Bsth-admin/src/main/java/com/ruoyi/domain/driver/NewDriver.java
@@ -155,7 +155,7 @@ public class NewDriver { @@ -155,7 +155,7 @@ public class NewDriver {
155 155
156 /***图片版本号*/ 156 /***图片版本号*/
157 @Excel(name = "图片版本号") 157 @Excel(name = "图片版本号")
158 - private java.lang.Integer imageVersion; 158 + private java.lang.String imageVersion;
159 159
160 @TableField(exist = false) 160 @TableField(exist = false)
161 private float imageScore; 161 private float imageScore;
Bsth-admin/src/main/java/com/ruoyi/domain/driver/dss/syn/res/dto/FaceCheckDTO.java
@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor; @@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
11 import lombok.experimental.Accessors; 11 import lombok.experimental.Accessors;
12 12
13 import javax.validation.constraints.NotEmpty; 13 import javax.validation.constraints.NotEmpty;
  14 +import javax.validation.constraints.NotNull;
14 import java.util.Date; 15 import java.util.Date;
15 16
16 /** 17 /**
@@ -32,7 +33,7 @@ public class FaceCheckDTO implements java.io.Serializable { @@ -32,7 +33,7 @@ public class FaceCheckDTO implements java.io.Serializable {
32 @ApiModelProperty(value = "IC卡号", required = true) 33 @ApiModelProperty(value = "IC卡号", required = true)
33 private String driverCode; 34 private String driverCode;
34 35
35 - @NotEmpty(message = "时间不能为空") 36 + @NotNull(message = "时间不能为空")
36 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 37 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
37 @ApiModelProperty(value = "时间", required = true) 38 @ApiModelProperty(value = "时间", required = true)
38 private Date checkTime; 39 private Date checkTime;
Bsth-admin/src/main/java/com/ruoyi/domain/dss/sign/vo/SignOutVo.java
@@ -27,6 +27,8 @@ public class SignOutVo { @@ -27,6 +27,8 @@ public class SignOutVo {
27 27
28 @ApiModelProperty(value = "设备时间,yyyy-MM-dd HH:mm:ss") 28 @ApiModelProperty(value = "设备时间,yyyy-MM-dd HH:mm:ss")
29 private Date logoutTime; 29 private Date logoutTime;
  30 + @ApiModelProperty(value = "签退ID")
  31 + private Long id;
30 32
31 @Override 33 @Override
32 public String toString() { 34 public String toString() {
Bsth-admin/src/main/java/com/ruoyi/in/domain/SignIn.java
1 package com.ruoyi.in.domain; 1 package com.ruoyi.in.domain;
2 2
  3 +import com.baomidou.mybatisplus.annotation.TableField;
3 import com.ruoyi.common.annotation.Excel; 4 import com.ruoyi.common.annotation.Excel;
4 import com.ruoyi.common.core.domain.BaseEntity; 5 import com.ruoyi.common.core.domain.BaseEntity;
5 import io.swagger.annotations.ApiModel; 6 import io.swagger.annotations.ApiModel;
@@ -33,6 +34,7 @@ public class SignIn extends BaseEntity { @@ -33,6 +34,7 @@ public class SignIn extends BaseEntity {
33 @Excel(name = "工号") 34 @Excel(name = "工号")
34 @ApiModelProperty("工号") 35 @ApiModelProperty("工号")
35 @NotBlank(message = "工号不能为空") 36 @NotBlank(message = "工号不能为空")
  37 + @TableField(value = "jobCode")
36 private String jobCode; 38 private String jobCode;
37 39
38 @Excel(name = "设备号") 40 @Excel(name = "设备号")
Bsth-admin/src/main/java/com/ruoyi/in/service/impl/SignInServiceImpl.java
@@ -193,6 +193,7 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme @@ -193,6 +193,7 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme
193 List<DriverScheduling> dto = schedulingService.queryScheduling(signIn.getJobCode(), now); 193 List<DriverScheduling> dto = schedulingService.queryScheduling(signIn.getJobCode(), now);
194 handleSignBody(signIn, driver, globalIndex, now, dto); 194 handleSignBody(signIn, driver, globalIndex, now, dto);
195 195
  196 + log.info("签到的数据为:[{}]",dto.get(globalIndex.getIndex()));
196 if (PERSONNEL_POSTS_DRIVER.equals(driver.getPosts()) && Objects.equals(dto.get(globalIndex.getIndex()).getBcType(), BC_TYPE_OUT)) { 197 if (PERSONNEL_POSTS_DRIVER.equals(driver.getPosts()) && Objects.equals(dto.get(globalIndex.getIndex()).getBcType(), BC_TYPE_OUT)) {
197 AjaxResult result = getAjaxResultByDriverSignInfo(signIn, vo); 198 AjaxResult result = getAjaxResultByDriverSignInfo(signIn, vo);
198 if (!Objects.isNull(result)) { 199 if (!Objects.isNull(result)) {
@@ -201,16 +202,20 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme @@ -201,16 +202,20 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme
201 return result; 202 return result;
202 } 203 }
203 } 204 }
204 -  
205 - uploadImage(signIn, vo); 205 + if(org.apache.commons.lang3.StringUtils.isNotEmpty(signIn.getImage())){
  206 + uploadImage(signIn, vo);
  207 + }
  208 + signIn.setSchedulingId(dto.get(globalIndex.getIndex()).getId());
206 signInMapper.insertSignIn(signIn); 209 signInMapper.insertSignIn(signIn);
207 // 更新考勤 210 // 更新考勤
208 schedulingService.computedSignInBySignIn(dto, signIn, globalIndex); 211 schedulingService.computedSignInBySignIn(dto, signIn, globalIndex);
209 - 212 + vo.setId(signIn.getId());
210 if (TempCache.checkJobCodeExist(signIn.getJobCode())) { 213 if (TempCache.checkJobCodeExist(signIn.getJobCode())) {
211 TempCache.updateSignStatus(signIn.getJobCode()); 214 TempCache.updateSignStatus(signIn.getJobCode());
212 } 215 }
213 216
  217 +
  218 +
214 // 异常保存到异常异常中 219 // 异常保存到异常异常中
215 threadJobService.asyncInsertExceptionRecord(signIn, driver, dto, globalIndex); 220 threadJobService.asyncInsertExceptionRecord(signIn, driver, dto, globalIndex);
216 221
@@ -239,9 +244,9 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme @@ -239,9 +244,9 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme
239 if (SIGN_IN_SUCCESS.equals(signIn.getStatus())) { 244 if (SIGN_IN_SUCCESS.equals(signIn.getStatus())) {
240 String prompt = signIn.getRemark().replace("正常", ""); 245 String prompt = signIn.getRemark().replace("正常", "");
241 if (signIn.getType().equals(SIGN_OUT)) { 246 if (signIn.getType().equals(SIGN_OUT)) {
242 - return AjaxResult.success(SIGN_OUT_SUCCESS_STRING + prompt, vo); 247 + return AjaxResult.success(null, vo);
243 } else { 248 } else {
244 - return AjaxResult.success(SIGN_IN_SUCCESS_STRING + prompt, vo); 249 + return AjaxResult.success(null, vo);
245 } 250 }
246 } else { 251 } else {
247 if (signIn.getType().equals(SIGN_OUT)) { 252 if (signIn.getType().equals(SIGN_OUT)) {
@@ -482,7 +487,7 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme @@ -482,7 +487,7 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme
482 redisCache.setCacheObject(key, ++count, 1, TimeUnit.DAYS); 487 redisCache.setCacheObject(key, ++count, 1, TimeUnit.DAYS);
483 } 488 }
484 if (SIGN_IN_ERROR_COUNT.compareTo(count) <= 0) { 489 if (SIGN_IN_ERROR_COUNT.compareTo(count) <= 0) {
485 - return AjaxResult.success(SIGN_IN_ERROR + ": " + signIn.getRemark() + "酒精测试不通过" + count + "次请更换车辆驾驶员。", vo); 490 + return AjaxResult.error(SIGN_IN_ERROR + ": " + signIn.getRemark() + "酒精测试不通过" + count + "次请更换车辆驾驶员。", vo);
486 } 491 }
487 return null; 492 return null;
488 } 493 }
@@ -673,8 +678,8 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme @@ -673,8 +678,8 @@ public class SignInServiceImpl extends ServiceImpl&lt;SignInMapper, SignIn&gt; impleme
673 if (BC_TYPE_OUT.equals(currentScheduling.getBcType())) { 678 if (BC_TYPE_OUT.equals(currentScheduling.getBcType())) {
674 LocalDateTime time = ConstDateUtil.stringTransformLocalDateTime(ConstDateUtil.formatDate("yyyy-MM-dd HH:mm:ss", new Date(currentScheduling.getTimestamps())), "yyyy-MM-dd HH:mm:ss"); 679 LocalDateTime time = ConstDateUtil.stringTransformLocalDateTime(ConstDateUtil.formatDate("yyyy-MM-dd HH:mm:ss", new Date(currentScheduling.getTimestamps())), "yyyy-MM-dd HH:mm:ss");
675 LocalDateTime subHours = time.plusHours(-1); 680 LocalDateTime subHours = time.plusHours(-1);
676 - return "请在" + ConstDateUtil.formatDate("HH:mm", time) + "到"  
677 - + ConstDateUtil.formatDate("HH:mm", subHours) + "之间打卡"; 681 + return "请在" + ConstDateUtil.formatDate("HH:mm", subHours) + "到"
  682 + + ConstDateUtil.formatDate("HH:mm", time) + "之间打卡";
678 } else { 683 } else {
679 // 延后一小时 684 // 延后一小时
680 LocalDateTime time = ConstDateUtil.stringTransformLocalDateTime(ConstDateUtil.formatDate("yyyy-MM-dd HH:mm:ss", new Date(currentScheduling.getTimestamps())), "yyyy-MM-dd HH:mm:ss"); 685 LocalDateTime time = ConstDateUtil.stringTransformLocalDateTime(ConstDateUtil.formatDate("yyyy-MM-dd HH:mm:ss", new Date(currentScheduling.getTimestamps())), "yyyy-MM-dd HH:mm:ss");
Bsth-admin/src/main/java/com/ruoyi/pojo/response/SignInResponseVo.java
1 package com.ruoyi.pojo.response; 1 package com.ruoyi.pojo.response;
2 -import java.math.BigDecimal;  
3 -import java.util.Date;  
4 -import com.google.common.collect.Maps;  
5 2
6 import com.alibaba.excel.annotation.ExcelIgnore; 3 import com.alibaba.excel.annotation.ExcelIgnore;
7 -import com.alibaba.excel.annotation.ExcelProperty;  
8 import com.ruoyi.common.annotation.Excel; 4 import com.ruoyi.common.annotation.Excel;
9 import com.ruoyi.in.domain.SignIn; 5 import com.ruoyi.in.domain.SignIn;
10 import lombok.Data; 6 import lombok.Data;
@@ -30,6 +26,7 @@ public class SignInResponseVo extends SignIn { @@ -30,6 +26,7 @@ public class SignInResponseVo extends SignIn {
30 */ 26 */
31 String date; 27 String date;
32 28
  29 +
33 public SignInResponseVo(SignIn signIn){ 30 public SignInResponseVo(SignIn signIn){
34 this.setDeviceId(signIn.getDeviceId()); 31 this.setDeviceId(signIn.getDeviceId());
35 this.setId(signIn.getId()); 32 this.setId(signIn.getId());
Bsth-admin/src/main/java/com/ruoyi/service/impl/driver/NewDriverServiceImpl.java
@@ -173,7 +173,10 @@ public class NewDriverServiceImpl extends ServiceImpl&lt;NewDriverMapper, NewDriver @@ -173,7 +173,10 @@ public class NewDriverServiceImpl extends ServiceImpl&lt;NewDriverMapper, NewDriver
173 @Override 173 @Override
174 public TipEnum updateClient(NewDriver entity) { 174 public TipEnum updateClient(NewDriver entity) {
175 NewDriver driver = new NewDriver(); 175 NewDriver driver = new NewDriver();
176 - driver.setJobCode(entity.getJobCode()); 176 + if(StringUtils.isNotEmpty(entity.getJobCode())) {
  177 + driver.setJobCode(entity.getJobCode());
  178 + }
  179 + driver.setId(entity.getId());
177 NewDriver source = getOne(driver); 180 NewDriver source = getOne(driver);
178 if (Objects.isNull(source)) { 181 if (Objects.isNull(source)) {
179 log.info("[{}]找不到数据", entity); 182 log.info("[{}]找不到数据", entity);
@@ -185,7 +188,8 @@ public class NewDriverServiceImpl extends ServiceImpl&lt;NewDriverMapper, NewDriver @@ -185,7 +188,8 @@ public class NewDriverServiceImpl extends ServiceImpl&lt;NewDriverMapper, NewDriver
185 wrapper.set(NewDriver::getImage, entity.getImage()).set(NewDriver::getFaceFeature, entity.getFaceFeature()) 188 wrapper.set(NewDriver::getImage, entity.getImage()).set(NewDriver::getFaceFeature, entity.getFaceFeature())
186 .set(NewDriver::getBlueTooth, entity.getBlueTooth()).set(NewDriver::getInteger, entity.getInteger()) 189 .set(NewDriver::getBlueTooth, entity.getBlueTooth()).set(NewDriver::getInteger, entity.getInteger())
187 .set(NewDriver::getSyncontent, entity.getSyncontent()).set(NewDriver::getCsn, entity.getCsn()) 190 .set(NewDriver::getSyncontent, entity.getSyncontent()).set(NewDriver::getCsn, entity.getCsn())
188 - .eq(NewDriver::getId, entity.getJobCode()); 191 + .set(NewDriver::getIcCardCode,entity.getIcCardCode()).set(NewDriver::getImageVersion,entity.getImageVersion())
  192 + .eq(NewDriver::getId, entity.getId());
189 boolean flag = update(wrapper); 193 boolean flag = update(wrapper);
190 return flag ? TipEnum.TIP_200 : TipEnum.TIP_500; 194 return flag ? TipEnum.TIP_200 : TipEnum.TIP_500;
191 } 195 }
@@ -193,7 +197,7 @@ public class NewDriverServiceImpl extends ServiceImpl&lt;NewDriverMapper, NewDriver @@ -193,7 +197,7 @@ public class NewDriverServiceImpl extends ServiceImpl&lt;NewDriverMapper, NewDriver
193 @Override 197 @Override
194 public TipEnum faceRegister(NewDriver entity) { 198 public TipEnum faceRegister(NewDriver entity) {
195 NewDriver driver = new NewDriver(); 199 NewDriver driver = new NewDriver();
196 - driver.setIdRfid(entity.getIcCardCode()); 200 + driver.setIcCardCode(entity.getIcCardCode());
197 NewDriver source = getOne(driver); 201 NewDriver source = getOne(driver);
198 if (Objects.isNull(source)) { 202 if (Objects.isNull(source)) {
199 log.info("[{}]找不到数据", entity); 203 log.info("[{}]找不到数据", entity);
Bsth-admin/src/main/java/com/ruoyi/service/impl/dss/FaceServiceImpl.java
1 package com.ruoyi.service.impl.dss; 1 package com.ruoyi.service.impl.dss;
2 2
3 -import cn.hutool.core.codec.Base64;  
4 import com.arcsoft.face.FaceEngine; 3 import com.arcsoft.face.FaceEngine;
5 import com.arcsoft.face.FaceFeature; 4 import com.arcsoft.face.FaceFeature;
6 import com.arcsoft.face.FaceInfo; 5 import com.arcsoft.face.FaceInfo;
7 import com.arcsoft.face.FaceSimilar; 6 import com.arcsoft.face.FaceSimilar;
8 import com.arcsoft.face.enums.ErrorInfo; 7 import com.arcsoft.face.enums.ErrorInfo;
  8 +import com.arcsoft.face.toolkit.ImageFactory;
9 import com.arcsoft.face.toolkit.ImageInfo; 9 import com.arcsoft.face.toolkit.ImageInfo;
  10 +import com.ruoyi.common.utils.file.FileUploadUtils;
10 import com.ruoyi.config.BsthSystemConfig; 11 import com.ruoyi.config.BsthSystemConfig;
11 import com.ruoyi.domain.driver.NewDriver; 12 import com.ruoyi.domain.driver.NewDriver;
12 import com.ruoyi.service.driver.NewDriverService; 13 import com.ruoyi.service.driver.NewDriverService;
13 import com.ruoyi.service.dss.FaceService; 14 import com.ruoyi.service.dss.FaceService;
14 import lombok.extern.slf4j.Slf4j; 15 import lombok.extern.slf4j.Slf4j;
15 import org.apache.commons.collections4.CollectionUtils; 16 import org.apache.commons.collections4.CollectionUtils;
  17 +import org.apache.commons.io.IOUtils;
16 import org.apache.commons.lang3.StringUtils; 18 import org.apache.commons.lang3.StringUtils;
17 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.stereotype.Service; 20 import org.springframework.stereotype.Service;
19 21
  22 +import javax.imageio.ImageIO;
  23 +import java.awt.image.BufferedImage;
  24 +import java.io.ByteArrayInputStream;
20 import java.io.File; 25 import java.io.File;
  26 +import java.io.IOException;
21 import java.util.*; 27 import java.util.*;
22 28
23 import static com.arcsoft.face.toolkit.ImageFactory.getRGBData; 29 import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
@@ -47,24 +53,41 @@ public class FaceServiceImpl implements FaceService { @@ -47,24 +53,41 @@ public class FaceServiceImpl implements FaceService {
47 if (CollectionUtils.isEmpty(drivers)) { 53 if (CollectionUtils.isEmpty(drivers)) {
48 return null; 54 return null;
49 } 55 }
50 -  
51 - ImageInfo sourceImage = new ImageInfo();  
52 -  
53 - byte[] sourceImageData = Base64.decode(sourceDriver.getImage());  
54 - sourceImage.setImageData(sourceImageData);  
55 - FaceFeature sourceFaceFeature = generateFaceFeature(sourceDriver, sourceImage);  
56 - if (Objects.isNull(sourceFaceFeature)) { 56 + if (StringUtils.isEmpty(sourceDriver.getImage())) {
57 return null; 57 return null;
58 } 58 }
59 -  
60 -  
61 - Optional<NewDriver> optional = drivers.stream().map(dr -> {  
62 - float imageScore = checkFaceScore(dr, sourceFaceFeature);  
63 - dr.setImageScore(imageScore);  
64 -  
65 - return dr;  
66 - }).max(Comparator.comparing(NewDriver::getImageScore));  
67 - return optional.isPresent() ? optional.get() : null; 59 + ByteArrayInputStream byteArrayInputStream = null;
  60 + BufferedImage bufferedImage = null;
  61 + try {
  62 + String content = FileUploadUtils.choosePrictureContent(sourceDriver.getImage());
  63 + byte[] sourceImageData = cn.hutool.core.codec.Base64.decode(content);
  64 + byteArrayInputStream = new ByteArrayInputStream(sourceImageData);
  65 + bufferedImage = ImageIO.read(byteArrayInputStream);
  66 + ImageInfo sourceImage = ImageFactory.bufferedImage2ImageInfo(bufferedImage);
  67 +
  68 +
  69 + FaceFeature sourceFaceFeature = generateFaceFeature(sourceDriver, sourceImage);
  70 + if (Objects.isNull(sourceFaceFeature)) {
  71 + return null;
  72 + }
  73 +
  74 +
  75 + Optional<NewDriver> optional = drivers.stream().map(dr -> {
  76 + float imageScore = checkFaceScore(dr, sourceFaceFeature);
  77 + dr.setImageScore(imageScore);
  78 +
  79 + return dr;
  80 + }).max(Comparator.comparing(NewDriver::getImageScore));
  81 +
  82 + bufferedImage.flush();
  83 + return optional.isPresent() ? optional.get() : null;
  84 + } catch (IOException e) {
  85 + sourceDriver.setImage(null);
  86 + log.error("图片校验异常:[{}]", sourceDriver, e);
  87 + } finally {
  88 + IOUtils.closeQuietly(byteArrayInputStream);
  89 + }
  90 + return null;
68 } 91 }
69 92
70 private float checkFaceScore(NewDriver dr, FaceFeature sourceFaceFeature) { 93 private float checkFaceScore(NewDriver dr, FaceFeature sourceFaceFeature) {
@@ -104,14 +127,14 @@ public class FaceServiceImpl implements FaceService { @@ -104,14 +127,14 @@ public class FaceServiceImpl implements FaceService {
104 List<FaceInfo> faceInfoList = new ArrayList<>(); 127 List<FaceInfo> faceInfoList = new ArrayList<>();
105 int errorCode = faceEngine.detectFaces(image.getImageData(), image.getWidth(), image.getHeight(), image.getImageFormat(), faceInfoList); 128 int errorCode = faceEngine.detectFaces(image.getImageData(), image.getWidth(), image.getHeight(), image.getImageFormat(), faceInfoList);
106 if (errorCode != ErrorInfo.MOK.getValue()) { 129 if (errorCode != ErrorInfo.MOK.getValue()) {
107 - log.error("人脸对比失败,请检查数据:[{}]", driver); 130 + log.error("人脸对比失败,请检查数据:[{}];错误代码:[{}]", driver,errorCode);
108 return null; 131 return null;
109 } 132 }
110 133
111 FaceFeature faceFeature = new FaceFeature(); 134 FaceFeature faceFeature = new FaceFeature();
112 errorCode = faceEngine.extractFaceFeature(image.getImageData(), image.getWidth(), image.getHeight(), image.getImageFormat(), faceInfoList.get(0), faceFeature); 135 errorCode = faceEngine.extractFaceFeature(image.getImageData(), image.getWidth(), image.getHeight(), image.getImageFormat(), faceInfoList.get(0), faceFeature);
113 if (errorCode != ErrorInfo.MOK.getValue()) { 136 if (errorCode != ErrorInfo.MOK.getValue()) {
114 - log.error("提取对比特征失败,请检查数据:[{}]", driver); 137 + log.error("提取对比特征失败,请检查数据:[{}];错误代码:[{}]", driver,errorCode);
115 return null; 138 return null;
116 } 139 }
117 return faceFeature; 140 return faceFeature;
Bsth-admin/src/main/resources/application-druid-devTest.yml
@@ -207,8 +207,8 @@ bsth: @@ -207,8 +207,8 @@ bsth:
207 app: 207 app:
208 id: 8jPk3SNnaoGsd9SidMefgZXg1zbst64jB44vVyx9Cijq 208 id: 8jPk3SNnaoGsd9SidMefgZXg1zbst64jB44vVyx9Cijq
209 sdk: 209 sdk:
210 - # key: C21s5J1n1rHwXPkvVjubKshtfYuvuSe2GHus41Q1NPcT  
211 - key: C21s5J1n1rHwXPkvVjubKshtofV5sHXvyUQqSWYxHp2b 210 + key: C21s5J1n1rHwXPkvVjubKshtfYuvuSe2GHus41Q1NPcT
  211 + # key: C21s5J1n1rHwXPkvVjubKshtofV5sHXvyUQqSWYxHp2b
212 lib: 212 lib:
213 - # path: /data/test/bath-alcoho-sign/LINUX64  
214 - path: D:/work/code/jienengjiancha/bsth-alcohol-sign/Bsth-admin/src/main/resources/libs/WIN64 213 + path: /data/test/bath-alcoho-sign/LINUX64
  214 + # path: D:/work/code/jienengjiancha/bsth-alcohol-sign/Bsth-admin/src/main/resources/libs/WIN64
Bsth-admin/src/main/resources/mapper/driver/NewDriverMapper.xml
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 <result column="integer" jdbcType="INTEGER" property="integer"/> 29 <result column="integer" jdbcType="INTEGER" property="integer"/>
30 <result column="synContent" jdbcType="VARCHAR" property="syncontent"/> 30 <result column="synContent" jdbcType="VARCHAR" property="syncontent"/>
31 <result column="csn" jdbcType="VARCHAR" property="csn"/> 31 <result column="csn" jdbcType="VARCHAR" property="csn"/>
32 - <result column="image_version" jdbcType="INTEGER" property="imageVersion"/> 32 + <result column="image_version" jdbcType="VARCHAR" property="imageVersion"/>
33 </resultMap> 33 </resultMap>
34 34
35 <insert id="insertSelective" keyColumn="job_code" keyProperty="jobCode" useGeneratedKeys="true" 35 <insert id="insertSelective" keyColumn="job_code" keyProperty="jobCode" useGeneratedKeys="true"
@@ -176,7 +176,7 @@ @@ -176,7 +176,7 @@
176 <if test="null!=integer">integer = #{integer,jdbcType=INTEGER},</if> 176 <if test="null!=integer">integer = #{integer,jdbcType=INTEGER},</if>
177 <if test="null!=syncontent">synContent = #{syncontent,jdbcType=VARCHAR},</if> 177 <if test="null!=syncontent">synContent = #{syncontent,jdbcType=VARCHAR},</if>
178 <if test="null!=csn">csn = #{csn,jdbcType=VARCHAR},</if> 178 <if test="null!=csn">csn = #{csn,jdbcType=VARCHAR},</if>
179 - <if test="null!=imageVersion">image_version = #{imageVersion,jdbcType=INTEGER},</if> 179 + <if test="null!=imageVersion">image_version = #{imageVersion,jdbcType=VARCHAR},</if>
180 </set> 180 </set>
181 </sql> 181 </sql>
182 182
@@ -208,6 +208,6 @@ @@ -208,6 +208,6 @@
208 <if test="null!=integer">AND integer = #{integer,jdbcType=INTEGER},</if> 208 <if test="null!=integer">AND integer = #{integer,jdbcType=INTEGER},</if>
209 <if test="null!=syncontent">AND synContent = #{syncontent,jdbcType=VARCHAR},</if> 209 <if test="null!=syncontent">AND synContent = #{syncontent,jdbcType=VARCHAR},</if>
210 <if test="null!=csn">AND csn = #{csn,jdbcType=VARCHAR},</if> 210 <if test="null!=csn">AND csn = #{csn,jdbcType=VARCHAR},</if>
211 - <if test="null!=imageVersion">AND image_version = #{imageVersion,jdbcType=INTEGER},</if> 211 + <if test="null!=imageVersion">AND image_version = #{imageVersion,jdbcType=VARCHAR},</if>
212 </sql> 212 </sql>
213 </mapper> 213 </mapper>
214 \ No newline at end of file 214 \ No newline at end of file
Bsth-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
@@ -47,6 +47,7 @@ public class FileUploadUtils { @@ -47,6 +47,7 @@ public class FileUploadUtils {
47 * 默认上传的地址 47 * 默认上传的地址
48 */ 48 */
49 private static String defaultBaseDir = RuoYiConfig.getProfile(); 49 private static String defaultBaseDir = RuoYiConfig.getProfile();
  50 + private static String uploadContent;
50 51
51 public static void setDefaultBaseDir(String defaultBaseDir) { 52 public static void setDefaultBaseDir(String defaultBaseDir) {
52 FileUploadUtils.defaultBaseDir = defaultBaseDir; 53 FileUploadUtils.defaultBaseDir = defaultBaseDir;
@@ -128,17 +129,23 @@ public class FileUploadUtils { @@ -128,17 +129,23 @@ public class FileUploadUtils {
128 * @return ResponseResult 文件上传成功返回文件路径;上传异常返回500;文件超大返回1;不是图片返回2 129 * @return ResponseResult 文件上传成功返回文件路径;上传异常返回500;文件超大返回1;不是图片返回2
129 */ 130 */
130 public static ResponseResult<String> uploadBase64OfImage(String filePath, String fileName, String type, String uploadContent) { 131 public static ResponseResult<String> uploadBase64OfImage(String filePath, String fileName, String type, String uploadContent) {
  132 + FileUploadUtils.uploadContent = uploadContent;
131 ByteArrayInputStream byteArrayInputStream = null; 133 ByteArrayInputStream byteArrayInputStream = null;
132 BufferedImage bufferedImage = null; 134 BufferedImage bufferedImage = null;
133 try { 135 try {
  136 + if (org.apache.commons.lang3.StringUtils.isEmpty(uploadContent)) {
  137 + return new ResponseResult<>(2, "请上传图片");
  138 + }
  139 +
  140 + uploadContent = choosePrictureContent(uploadContent);
134 File file = new File(filePath); 141 File file = new File(filePath);
135 if (!file.isDirectory()) { 142 if (!file.isDirectory()) {
136 FileUtils.forceMkdir(file); 143 FileUtils.forceMkdir(file);
137 } 144 }
  145 +
138 byte[] content = Base64.decode(uploadContent); 146 byte[] content = Base64.decode(uploadContent);
139 if (ArrayUtils.getLength(content) > DEFAULT_MAX_SIZE) { 147 if (ArrayUtils.getLength(content) > DEFAULT_MAX_SIZE) {
140 - LOGGER.info("[{}]上传的图片超过了50M", filePath);  
141 - return new ResponseResult<>(1); 148 +
142 } 149 }
143 byteArrayInputStream = new ByteArrayInputStream(content); 150 byteArrayInputStream = new ByteArrayInputStream(content);
144 bufferedImage = ImageIO.read(byteArrayInputStream); 151 bufferedImage = ImageIO.read(byteArrayInputStream);
@@ -158,15 +165,28 @@ public class FileUploadUtils { @@ -158,15 +165,28 @@ public class FileUploadUtils {
158 boolean flag = ImageIO.write(bufferedImage, type, new File(path.toString())); 165 boolean flag = ImageIO.write(bufferedImage, type, new File(path.toString()));
159 bufferedImage.flush(); 166 bufferedImage.flush();
160 167
161 - return flag ? ResponseResult.success(path.toString()) : new ResponseResult<>(500); 168 + if (Objects.equals(Boolean.FALSE, flag)) {
  169 + return new ResponseResult<>(500);
  170 + }
  171 + ResponseResult<String> responseResult = ResponseResult.success();
  172 + responseResult.setData(path.toString());
  173 +
  174 + return responseResult;
162 } catch (Exception e) { 175 } catch (Exception e) {
163 - LOGGER.error("上传图片异常,上传的路径为:[{}]", filePath); 176 + LOGGER.error("上传图片异常,上传的路径为:[{}]", filePath, e);
164 } finally { 177 } finally {
165 IOUtils.closeQuietly(byteArrayInputStream); 178 IOUtils.closeQuietly(byteArrayInputStream);
166 } 179 }
167 return new ResponseResult<>(500); 180 return new ResponseResult<>(500);
168 } 181 }
169 182
  183 + public static String choosePrictureContent(String uploadContent) {
  184 + if (org.apache.commons.lang3.StringUtils.indexOf(uploadContent, ";base64,")>0) {
  185 + uploadContent = org.apache.commons.lang3.StringUtils.substringAfter(uploadContent, ";base64,");
  186 + }
  187 + return uploadContent;
  188 + }
  189 +
170 /** 190 /**
171 * 编码文件名 191 * 编码文件名
172 */ 192 */