server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
@@ -68,21 +68,21 @@ String result = hkSyncPrivilegeService.syncPrivilege(param); return ApiResponse.success(result); } @PreventRepeat // @PreventRepeat @ApiOperation("【海康】门禁事件订阅推送对接处理接口") @PostMapping("/push/acs") public ApiResponse pushAcs( HttpServletRequest request,@RequestBody EventAcsRequest param, HttpServletResponse response) { String result = hkSyncPushService.dealAcsEvent(param,response); return ApiResponse.success(result); } @PreventRepeat // @PreventRepeat @ApiOperation("【海康】访客事件订阅推送对接处理接口") @PostMapping("/push/visit") public ApiResponse pushVisit(@RequestBody EventVisitRequest param, HttpServletResponse response) { String result = hkSyncPushService.dealVisitEvent(param,response); return ApiResponse.success(result); } @PreventRepeat // @PreventRepeat @ApiOperation("【海康】停车场事件订阅推送对接处理接口") @PostMapping("/push/parks") public ApiResponse pushParks(@RequestBody EventParkRequest param, HttpServletResponse response) { server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -5,6 +5,7 @@ import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.utils.Constants; import com.doumee.service.business.InterfaceLogService; import com.doumee.service.business.MemberService; import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl; import com.doumee.service.business.impl.hksync.HkSyncImgServiceImpl; @@ -26,8 +27,8 @@ * @date 2021-10-10 14:40:35 * https://www.bejson.com/othertools/cron/ cron 表达式生成地址 */ //@Component //@EnableScheduling @Component @EnableScheduling public class ScheduleTool { @Autowired @@ -46,6 +47,8 @@ private HkSyncVisitServiceImpl hkSyncVisitService; @Autowired private MemberService memberService; @Autowired private InterfaceLogService interfaceLogService; /** * 是否开发者 */ @@ -143,7 +146,8 @@ public void syncEmpowerResultData() { hkSyncEmpowerService.syncEmpowerResultData(); } *//** */ /** * 定时查询人员实际下发权限结果,是否已经下载成功 * @throws Exception *//* @@ -160,7 +164,6 @@ hkSyncParkService.syncParkBookData(); } /** * 定时冻结内部人员 */ @@ -168,5 +171,12 @@ public void memberFreeze() { memberService.memberFreeze(); } /** * 每天清理超过一周的接口日志数据(清除和安防平台对接的接口数据) * @throws Exception */ @Scheduled(cron= "0 0 23 * * ?") public void clearThreeMonthLog() throws Exception { interfaceLogService.clearThreeMonthLog(); } } server/dmvisit_admin/src/main/resources/application.yml
@@ -10,7 +10,7 @@ # application: # name: doumeemes profiles: active: testHS active: proHS # JSON返回配置 jackson: server/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -16,6 +16,7 @@ private Logger logger = LoggerFactory.getLogger(HKConstants.class); //海康平台根据现场环境配置http还是https public static final String RESPONSE_SUCCEE = "0"; public static final String RESPONSE_DOWNLOAD_ERROR= "0x15406001"; public static String https ; /** * 能力开放平台的网站路径 路径不用修改,就是/artemis server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java
@@ -92,6 +92,8 @@ @ApiModelProperty(value = "人员组织公司") @ExcelColumn(name="公司/部门",index = 9,width = 16) private String personCompanyName; @ApiModelProperty(value = "访客公司1") private String visitCompanyName; @ApiModelProperty(value = "姓名") @ExcelColumn(name="姓名",index = 7,width = 16) server/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java
@@ -94,4 +94,6 @@ * @return long */ long count(InterfaceLog interfaceLog); void clearThreeMonthLog(); } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarEventServiceImpl.java
@@ -305,7 +305,10 @@ vo.setPlateNos(obj.getPlateNos()); vo.setPersonName(obj.getPersonName()); vo.setPersonPhone(obj.getPersonPhone()); vo.setPersonCompanyName(obj.getPersonCompanyName()); if(!Constants.equalsInteger(obj.getPersonType(),Constants.TWO)){ //如果不是内部人员,显示访客企业名称 vo.setPersonCompanyName(obj.getVisitCompanyName()); } vo.setParkName(obj.getParkName()); vo.setGateName(obj.getGateName()); vo.setInoutType(obj.getInoutType()); @@ -330,6 +333,7 @@ .selectAs(Member::getPhone,CarEventDTO::getPersonPhone) .selectAs(Member::getIdcardDecode,CarEventDTO::getPersonIdcardDecode) .selectAs(Member::getName,CarEventDTO::getPersonName) .selectAs(Member::getVisitCompanyName,CarEventDTO::getVisitCompanyName) .selectAs(Company::getName,CarEventDTO::getPersonCompanyName); queryWrapper @@ -377,6 +381,10 @@ +dataMap.get(Constants.CAR_EVENT_IMG).getCode() +obj.getPlatePicUrl()); } if(!Constants.equalsInteger(obj.getPersonType(),Constants.TWO)){ //如果不是内部人员,显示访客企业名称 obj.setPersonCompanyName(obj.getVisitCompanyName()); } obj.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType()) ); newDataList.add(obj); }); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
@@ -155,4 +155,10 @@ QueryWrapper<InterfaceLog> wrapper = new QueryWrapper<>(interfaceLog); return interfaceLogMapper.selectCount(wrapper); } @Override public void clearThreeMonthLog() { interfaceLogMapper.delete(new UpdateWrapper<InterfaceLog>().lambda() .apply("to_days(create_date)+15 < to_days(now())") .like(InterfaceLog::getUrl,"/artemis/api/")); } } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -291,7 +291,7 @@ update.setId(m.getId()); update.setFaceId(faceId); update.setRemark("人脸已同步最新"); update.setFaceStatus(Constants.ZERO); update.setFaceStatus(Constants.ONE); memberMapper.updateById(update); } } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -402,7 +402,7 @@ member.setErpDate(date); member.setErpId(param.getId()); member.setIdcardType(param.getIdType()); member.setFsStatus(Constants.ZERO); member.setFaceStatus(Constants.ZERO); member.setStatus(param.getStatus()); member.setType(Constants.memberType.internal); String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo()); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncEmpowerServiceImpl.java
@@ -81,7 +81,7 @@ BaseResponse<TaskPersonDetailListResponse> response = HKService.taskPersoDetail(param); if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ) { ){ if (response.getData().getList() != null && response.getData().getList().size() > 0) { TaskPersonDetailResponse model = response.getData().getList().get(0); @@ -108,6 +108,10 @@ .set(Empower::getRemark, remark) .set(Empower::getSendInfo, remark) .set(Empower::getSendStatus, Constants.EmpowerStatus.pass)); if(Constants.equalsInteger(c.getMemberDeleted(), Constants.ONE)&& Constants.equalsInteger(c.getIsdeleted(), Constants.ONE) ){ //如果是删除权限成功,检查是否删除人员 checkDelMemberTask(c.getMemberId(),c.getMemberHkId()); } } else { empowerMapper.update(null, new UpdateWrapper<Empower>() .lambda() @@ -119,14 +123,6 @@ } else { //如果是已删除的数据,下发失败(防止设备离线),则尝试重新下发任务 if(Constants.equalsInteger(c.getIsdeleted(), Constants.ONE) ){ // && Constants.formatIntegerNum(c.getTryNum())+1 < tryNum ){ /* empowerMapper.update(null, new UpdateWrapper<Empower>() .lambda() .eq(Empower::getId, c.getId()) .set(Empower::getRemark, "下发失败,等待重新删除权限") .set(Empower::getTryNum,Constants.formatIntegerNum(c.getTryNum())+1) .set(Empower::getSendInfo, "下发失败,等待重新删除权限") .set(Empower::getSendStatus, Constants.EmpowerStatus.wait));*/ empowerMapper.update(null, new UpdateWrapper<Empower>() .lambda() .eq(Empower::getId, c.getId()) @@ -144,7 +140,15 @@ .set(Empower::getSendStatus, Constants.EmpowerStatus.fail)); } } checkDelMemberTask(c.getMemberId()); }else if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_DOWNLOAD_ERROR) ){ empowerMapper.update(null, new UpdateWrapper<Empower>() .lambda() .eq(Empower::getId, c.getId()) .set(Empower::getRemark, "下发失败") // .set(Empower::getFailFlag, Constants.ONE)//无需重发(下载任务不存在) .set(Empower::getTryNum,Constants.formatIntegerNum(c.getTryNum())+1) .set(Empower::getSendInfo, "下发失败") .set(Empower::getSendStatus, Constants.EmpowerStatus.fail)); } } }catch (Exception e){ @@ -186,7 +190,7 @@ //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕) memberMapper.update(null,new UpdateWrapper<Member>().lambda() .set(Member::getHkStatus,Constants.ONE)//同步成功 .set(Member::getRemark,"同步海康删除失败")//同步失败 .set(Member::getRemark,"已同步")//同步失败 .set(Member::getHkDate,date) .in(Member::getId, id)); //删除所有绑定的卡片信息 @@ -200,17 +204,18 @@ /** * 检查删除人员的权限是否都删除完成,如果权限删除完成, 进行海康人员的删除操作 */ private void checkDelMemberTask(Integer memberId) { private void checkDelMemberTask(Integer memberId,String memberHkid) { Date date = new Date(); Member member = memberMapper.selectById(memberId); if(member!=null && Constants.equalsInteger(member.getIsdeleted(),Constants.ONE) ){ // Member member = memberMapper.selectById(memberId); // if(member!=null && Constants.equalsInteger(member.getIsdeleted(),Constants.ONE) ){ if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda() .eq(Empower::getMemberId,member.getId()) .eq(Empower::getMemberId,memberId) .eq(Empower::getIsdeleted,Constants.ONE) .ne(Empower::getFailFlag,Constants.ONE) .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0){ //如果权限都已经删除成功,则删除海康人员和卡片数据 doHkDeleteUser(member.getId(),member.getHkId(),date); } doHkDeleteUser(memberId,memberHkid,date); // } } } @@ -336,9 +341,9 @@ // .gt(Empower::getId,empower.getId()) // .last("limit 1")); if(empower.getTempCouunt() ==0){ //如果之后时间内又重新下发记录,则跳过不做处理 retryIds.add(empower.getId()); }else{ //如果之后时间内又重新下发记录,则跳过不做处理 noIds.add(empower.getId()); } } @@ -355,6 +360,8 @@ if(noIds.size()>0){ empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() .set(Empower::getEditDate,date) .set(Empower::getRemark,"下发失败,已失效~") .set(Empower::getSendInfo,"下发失败,已失效~") .set(Empower::getFailFlag,Constants.ONE) .in(Empower::getId,noIds)); } @@ -680,6 +687,7 @@ MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Empower.class); queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo); queryWrapper.selectAs(Member::getIsdeleted,Empower::getMemberDeleted); queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId); queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -541,14 +541,25 @@ event.setPlatePicUrl(getHkImgUrl(request.getData().getPicUrl().getPlatePicUrl())); } if(StringUtils.isNotBlank(event.getPlateNos())){ ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda() .eq(ParkBook::getCarCode,event.getPlateNos()) .eq(ParkBook::getIsdeleted,Constants.ZERO ) ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda() .eq(ParkBook::getCarCode,event.getPlateNos()) .eq(ParkBook::getIsdeleted,Constants.ZERO ) .last("limit 1" )); if(cars!=null){ event.setMemberId(cars.getMemberId()); }else{ Visits visits = visitsMapper.selectOne(new QueryWrapper<Visits>().lambda() .eq(Visits::getCarNos,event.getPlateNos()) .eq(Visits::getIsdeleted,Constants.ZERO ) .in(Visits::getStatus,Constants.VisitStatus.signin,Constants.VisitStatus.signout)//最近一个已到达或者已签离 .isNull(Visits::getParentId) .orderByDesc(Visits::getId) .last("limit 1" )); if(cars!=null){ event.setMemberId(cars.getMemberId()); if(visits!=null){ //最近使用该车的申请人(已到达) event.setMemberId(visits.getMemberId()); } } if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){ //如果是入厂放行 delRetentionList.add(event.getPlateNos()); server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -587,7 +587,6 @@ //删除所有绑定的卡片信息 memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,c.getId())); } }else{ //处理修改数据,并且更新人脸 UserAddRequest addHkModel = getUserAddModel(c,path,1);//修改 @@ -606,6 +605,7 @@ c.setFaceId(faceid); c.setFaceStatus(Constants.ONE); //如果人脸跟你,重新下发权限数据 c.setRemark("人员和人脸信息同步成功"+result.getMsg()); dealMemberRoleEmpower(c); } } @@ -642,6 +642,7 @@ //如果人脸数据不正确,下载失败等原因 noticeErpFail(c,Constants.ZERO,"人脸照片不存在,获取失败!"); c.setHkStatus(Constants.TWO); c.setFaceStatus(Constants.TWO); c.setRemark("人脸照片不存在,获取失败!"); c.setHkDate(new Date()); memberMapper.updateById(c); @@ -651,6 +652,11 @@ BaseResponse<UserAddResponse> result = HKService.addUser(addHkModel); if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){ c.setFaceId(result.getData().getFaceId()); if(StringUtils.isNotBlank(c.getFaceId())){ c.setFaceStatus(Constants.ONE); }else{ c.setFaceStatus(Constants.ZERO); } c.setHkStatus(Constants.ONE); c.setHkId(addHkModel.getPersonId()); c.setHkDate(new Date());