| | |
| | | package com.doumee.service.business.impl.hksync.ferp; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.service.business.ext.ERPSyncService; |
| | | import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl; |
| | | import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import io.swagger.models.auth.In; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | private MemberCardMapper memberCardMapper; |
| | | @Autowired |
| | | private MemberJoinMapper memberMapper; |
| | | @Autowired |
| | | private MemberMapper memberMapper1; |
| | | @Autowired |
| | | private ERPSyncService erpSyncService; |
| | | @Autowired |
| | |
| | | Constants.DEALING_HK_USER =false; |
| | | } |
| | | } |
| | | /** |
| | | * 同步海康人员信息 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public void syncMemberDelData(){ |
| | | if(Constants.DEALING_HK_DEL_USER || Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.erp){ |
| | | return ; |
| | | } |
| | | Constants.DEALING_HK_DEL_USER =true; |
| | | try { |
| | | dealWaitDelMemberData();//等待删除权限数据的删除下发 |
| | | // dealFailDelMemberData();//处理删除失败数据重新下发 |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | }finally { |
| | | Constants.DEALING_HK_DEL_USER =false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理删除失败数据重新下发 |
| | | */ |
| | | private void dealFailDelMemberData() { |
| | | //查询所有需要同步的企业数据 |
| | | List<Member> list = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>() |
| | | .selectAll(Member.class ) |
| | | .eq(Member::getHkStatus,Constants.TWO)//等待下发完成的 |
| | | .eq(Member::getIsdeleted,Constants.ONE)//已删除的 |
| | | .eq(Member::getType,Constants.memberType.internal) |
| | | .orderByAsc(Member::getEditDate)); |
| | | if(list ==null || list.size()==0){ |
| | | return; |
| | | } |
| | | Date date = new Date(); |
| | | for(Member member : list){ |
| | | if(member!=null && Constants.equalsInteger(member.getIsdeleted(),Constants.ONE) ){ |
| | | if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId, member.getId()) |
| | | .eq(Empower::getIsdeleted,Constants.ONE) |
| | | .ne(Empower::getFailFlag,Constants.ONE) |
| | | .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0) { |
| | | //如果权限都已经删除成功,则删除海康人员和卡片数据 |
| | | HkSyncEmpowerServiceImpl.doHkDeleteUser(member.getId(),member.getHkId(),new Date(),memberMapper1,memberCardMapper); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 等待删除权限数据的删除下发 |
| | | */ |
| | | private void dealWaitDelMemberData() { |
| | | //查询所有需要同步的企业数据 |
| | | List<Member> list = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>() |
| | | .selectAll(Member.class ) |
| | | .eq(Member::getHkStatus,Constants.FOUR)//等待下发完成的 |
| | | .eq(Member::getIsdeleted,Constants.ONE)//已删除的 |
| | | .eq(Member::getType,Constants.memberType.internal) |
| | | .orderByAsc(Member::getEditDate)); |
| | | if(list ==null || list.size()==0){ |
| | | return; |
| | | } |
| | | Date date = new Date(); |
| | | for(Member member : list){ |
| | | if(member!=null && Constants.equalsInteger(member.getIsdeleted(),Constants.ONE) ){ |
| | | if(empowerMapper.selectCount(new QueryWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId, member.getId()) |
| | | .eq(Empower::getIsdeleted,Constants.ONE) |
| | | .ne(Empower::getFailFlag,Constants.ONE) |
| | | .ne(Empower::getSendStatus,Constants.EmpowerStatus.pass)) ==0) { |
| | | //如果权限都已经删除成功,则删除海康人员和卡片数据 |
| | | |
| | | HkSyncEmpowerServiceImpl.doHkDeleteUser(member.getId(),member.getHkId(),date,memberMapper1,memberCardMapper); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static List<Integer> getRoleIdByParam( Member member,DeviceRoleMapper deviceRoleMapper) { |
| | | //查询数据库存在的权限 |
| | | List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda() |
| | |
| | | String doorids =deviceRole.getDoorIds(); |
| | | if(StringUtils.isNotBlank(doorids)){ |
| | | String[] ss = doorids.split(","); |
| | | try { |
| | | for(String s :ss){ |
| | | for(String s :ss){ |
| | | try { |
| | | Integer ts =Integer.parseInt(s); |
| | | r.add(ts); |
| | | }catch (Exception e){ |
| | | //脏数据不处理 |
| | | } |
| | | }catch (Exception e){ |
| | | //脏数据不处理 |
| | | } |
| | | |
| | | } |
| | | } |
| | | return r; |
| | |
| | | .set(ParkBook::getIsdeleted,Constants.ONE) |
| | | .eq(ParkBook::getIsdeleted,Constants.ZERO) |
| | | .set(ParkBook::getHkStatus,Constants.ZERO)); |
| | | //把所有待下发的任务改成 已取消 |
| | | empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId,member.getId()) |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .eq(Empower::getSendStatus,Constants.EmpowerStatus.wait) |
| | | .set(Empower::getIsdeleted,Constants.ONE) |
| | | .set(Empower::getSendStatus,Constants.EmpowerStatus.cancel)); |
| | | return empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId,member.getId()) |
| | | .set(Empower::getIsdeleted,Constants.ONE) |
| | | .notIn(Empower::getSendStatus,Constants.EmpowerStatus.fail) |
| | | .set(Empower::getRemark,"等待同步删除安防平台") |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .set(Empower::getSendStatus,Constants.ZERO)); |
| | | } |
| | |
| | | dealMemberRoleEmpowerDo(cards,member,deviceRoleMapper,empowerMapper,deviceMapper); |
| | | } |
| | | |
| | | public static void dealMemberRoleEmpowerDo(List<MemberCard> cards,Member member , DeviceRoleMapper deviceRoleMapper, EmpowerMapper empowerMapper, DeviceMapper deviceMapper) { |
| | | public static void dealMemberRoleEmpowerDo(List<MemberCard> cards1,Member member , DeviceRoleMapper deviceRoleMapper, EmpowerMapper empowerMapper, DeviceMapper deviceMapper) { |
| | | List<Integer> doorIds = getRoleIdByParam(member,deviceRoleMapper); |
| | | if(doorIds==null || doorIds.size() == 0){ |
| | | //如果权限清空,则清空人员授权的权限数据 |
| | |
| | | .set(Empower::getSendStatus,Constants.ZERO)); |
| | | return; |
| | | } |
| | | if((cards == null || cards.size() == 0) && StringUtils.isBlank(member.getFaceId())){ |
| | | // if((cards == null || cards.size() == 0) && StringUtils.isBlank(member.getFaceId())){ |
| | | if( StringUtils.isBlank(member.getFaceId())){ |
| | | //如果没有卡 也没有人脸 |
| | | return; |
| | | } |
| | | |
| | | List<Integer> deviceIds =new ArrayList<>();//新设备编码集合 |
| | | List<Empower> list = new ArrayList<>();//新授权记录集合 |
| | | if(Constants.equalsInteger(member.getIsdeleted(),Constants.ZERO) |
| | | && Constants.equalsObject(member.getHkStatus(),Constants.ONE)){ |
| | | if(Constants.equalsInteger(member.getIsdeleted(),Constants.ZERO)){ |
| | | // && Constants.equalsObject(member.getHkStatus(),Constants.ONE)){ |
| | | List<Integer> deviceIds =new ArrayList<>();//新设备编码集合 |
| | | List<Empower> list = new ArrayList<>();//新授权记录集合 |
| | | //如果用户是同步海康成功,添加带下发权限(只管理新增或者编辑的) |
| | | List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().lambda().in(Device::getId,doorIds)); |
| | | if(deviceList == null || deviceList.size() == 0){ |
| | |
| | | model.setSendInfo("待同步安防平台"); |
| | | model.setRemark("待同步安防平台"); |
| | | model.setStartTime(member.getStartTime()); |
| | | model.setFailFlag(Constants.ZERO); |
| | | model.setEndTime(member.getEndTime()); |
| | | //默认给于虚拟卡 |
| | | model.setCardNos(Constants.VIRTUAL_CARD_INDEX+member.getId()); |
| | |
| | | deviceIds.add(deviceRole.getId()); |
| | | list.add(model); |
| | | } |
| | | } |
| | | //待移除权限的设备数据授权记录(针对删除和更新丢失的权限,需要同步下发删除权限) |
| | | empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId,member.getId()) |
| | | .set(Empower::getIsdeleted,Constants.ONE) |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .notIn(deviceIds.size()>0,Empower::getDeviceId,deviceIds) |
| | | .set(Empower::getSendStatus,Constants.ZERO)); |
| | | //导入新增的授权信息 |
| | | if(list.size()>0){ |
| | | //直接覆盖重复的设备权限,直接删除即可 |
| | | empowerMapper.delete(new UpdateWrapper<Empower>().lambda() |
| | | //待移除权限的设备数据授权记录(针对删除和更新丢失的权限,需要同步下发删除权限) |
| | | empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId,member.getId()) |
| | | .set(Empower::getIsdeleted,Constants.ONE) |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .in(Empower::getDeviceId,deviceIds) ); |
| | | empowerMapper.insertBatchSomeColumn(list); |
| | | .notIn(deviceIds.size()>0,Empower::getDeviceId,deviceIds) |
| | | .set(Empower::getSendStatus,Constants.ZERO)); |
| | | //导入新增的授权信息 |
| | | if(list.size()>0){ |
| | | //直接覆盖重复的设备权限,直接删除即可 |
| | | empowerMapper.delete(new UpdateWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId,member.getId()) |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .in(Empower::getDeviceId,deviceIds) ); |
| | | empowerMapper.insertBatchSomeColumn(list); |
| | | } |
| | | } |
| | | } |
| | | public static void dealChangeDeviceRoleEmpower( Member member ,List<Integer> addDoorIds,List<Integer> delDoorIds, DeviceRoleMapper deviceRoleMapper, EmpowerMapper empowerMapper, DeviceMapper deviceMapper) { |
| | |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .in(Empower::getDeviceId,delDoorIds) |
| | | .set(Empower::getSendStatus,Constants.ZERO)); |
| | | } |
| | | if(addDoorIds==null || addDoorIds.size()==0){ |
| | | //待移除权限的设备数据授权记录(针对删除和更新丢失的权限,需要同步下发删除权限) |
| | | return; |
| | | } |
| | | if(StringUtils.isBlank(member.getFaceId())){ |
| | | //如果没有卡 也没有人脸 |
| | |
| | | model.setCreateDate(new Date()); |
| | | model.setMemberId(member.getId()); |
| | | model.setIsdeleted(Constants.ZERO); |
| | | model.setFailFlag(Constants.ZERO); |
| | | model.setDeviceId(deviceRole.getId()); |
| | | model.setSendStatus(Constants.ZERO); |
| | | model.setSendInfo("待同步安防平台"); |
| | |
| | | list.add(model); |
| | | } |
| | | } |
| | | //待移除权限的设备数据授权记录(针对删除和更新丢失的权限,需要同步下发删除权限) |
| | | empowerMapper.update(null,new UpdateWrapper<Empower>().lambda() |
| | | .eq(Empower::getMemberId,member.getId()) |
| | | .set(Empower::getIsdeleted,Constants.ONE) |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .notIn(deviceIds.size()>0,Empower::getDeviceId,deviceIds) |
| | | .set(Empower::getSendStatus,Constants.ZERO)); |
| | | //导入新增的授权信息 |
| | | if(list.size()>0){ |
| | | //直接覆盖重复的设备权限,直接删除即可 |
| | |
| | | if(rr >0){ |
| | | //如果有權限待刪除,等待删除完成再删除人员 |
| | | c.setHkStatus(Constants.FOUR ); |
| | | c.setFaceStatus(Constants.ONE);//把异常人脸状态改为正常,用于删除权限数据 |
| | | c.setRemark( "等待删除授权!"); |
| | | c.setEditDate(date); |
| | | memberMapper.updateById(c); |
| | | }else{ |
| | | //没有权限直接删除人员 |
| | | boolean r = doHkDeleteUser(c.getId(),c.getHkId(),date); |
| | | c.setHkStatus(r?Constants.ONE:Constants.TWO); |
| | | c.setRemark(r?null:"删除海康人员信息失败!"); |
| | | c.setIsdeleted(r? Constants.ONE: Constants.ZERO);//删除失败,恢复数据 |
| | | //删除所有绑定的卡片信息 |
| | | memberCardMapper.delete(new QueryWrapper<MemberCard>().lambda().eq(MemberCard::getMemberId,c.getId())); |
| | | HkSyncEmpowerServiceImpl.doHkDeleteUser(c.getId(),c.getHkId(),new Date(),memberMapper1,memberCardMapper);; |
| | | } |
| | | |
| | | }else{ |
| | | //处理修改数据,并且更新人脸 |
| | | UserAddRequest addHkModel = getUserAddModel(c,path,1);//修改 |
| | | //处理新增数据 |
| | | BaseResponse result = HKService.editUser(addHkModel); |
| | | if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) ){ |
| | | if(StringUtils.isNotBlank(c.getFaceImg())){ |
| | | if(StringUtils.isNotBlank(c.getFaceImg()) && Constants.equalsInteger(c.getFaceStatus(),Constants.ZERO)){ |
| | | //如果有人脸照片,处理人脸照片同步 |
| | | String faceid = dealMemberFace(c,path); |
| | | if(StringUtils.isBlank(faceid)){ |
| | | noticeErpFail(c,Constants.ZERO,"人脸信息更新失败,请检查人脸照片是否合法!"); |
| | | c.setHkStatus(Constants.TWO); |
| | | c.setFaceStatus(Constants.TWO); |
| | | c.setRemark("人脸信息更新失败,请检查人脸照片是否合法!!"+result.getMsg()); |
| | | noticeErpFail(c,Constants.ZERO,"人脸信息更新失败,请检查人脸照片是否合法!"); |
| | | }else{ |
| | | c.setFaceId(faceid); |
| | | c.setFaceStatus(Constants.ONE); |
| | | //如果人脸跟你,重新下发权限数据 |
| | | c.setRemark("人员和人脸信息同步成功"+result.getMsg()); |
| | | dealMemberRoleEmpower(c); |
| | | } |
| | | } |
| | | }else{ |
| | |
| | | c.setHkStatus(Constants.TWO); |
| | | c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!"+(result!=null?result.getCode()+result.getMsg():"")); |
| | | } |
| | | //重新下发权限数据 |
| | | dealMemberRoleEmpower(c); |
| | | c.setHkDate(date); |
| | | c.setEditDate(date); |
| | | memberMapper.updateById(c); |
| | | } |
| | | c.setHkDate(date); |
| | | memberMapper.updateById(c); |
| | | } |
| | | |
| | | /** |
| | |
| | | //如果人脸数据不正确,下载失败等原因 |
| | | noticeErpFail(c,Constants.ZERO,"人脸照片不存在,获取失败!"); |
| | | c.setHkStatus(Constants.TWO); |
| | | c.setFaceStatus(Constants.TWO); |
| | | c.setRemark("人脸照片不存在,获取失败!"); |
| | | c.setHkDate(new Date()); |
| | | memberMapper.updateById(c); |
| | |
| | | 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()); |
| | | memberMapper.updateById(c); |
| | | dealMemberRoleEmpower(c); |
| | | // dealMemberRoleEmpower(c); |
| | | return true; |
| | | }else{ |
| | | noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!"+result.getCode()+result.getMsg()); |
| | |
| | | * @param path |
| | | * @return |
| | | */ |
| | | private String dealMemberFace(Member c,String path) { |
| | | if(StringUtils.isBlank(c.getFaceId())){ |
| | | BaseResponse<FaceAddOrEditesponse> response = HKService.addFace(getFaceAddModel(c,path)); |
| | | if(response !=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)&& response.getData()!=null ){ |
| | | return response.getData().getFaceId(); |
| | | } |
| | | }else{ |
| | | FaceEditRequest param =getFaceUpdateModel(c,path); |
| | | if(param !=null){ |
| | | BaseResponse response = HKService.editFace(param); |
| | | if(StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) ){ |
| | | return c.getFaceId(); |
| | | public static String dealMemberFace(Member c,String path) { |
| | | try { |
| | | if(StringUtils.isBlank(c.getFaceId())){ |
| | | BaseResponse<FaceAddOrEditesponse> response = HKService.addFace(getFaceAddModel(c,path)); |
| | | if(response !=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)&& response.getData()!=null ){ |
| | | return response.getData().getFaceId(); |
| | | } |
| | | }else{ |
| | | FaceEditRequest param =getFaceUpdateModel(c,path); |
| | | if(param !=null){ |
| | | BaseResponse response = HKService.editFace(param); |
| | | if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) ){ |
| | | return c.getFaceId(); |
| | | } |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | |
| | | //通知ERP人脸数据不正确 |
| | | erpSyncService.noticeUserFail(r); |
| | | } |
| | | |
| | | /** |
| | | /* |
| | | *//** |
| | | * 对海康删除组织信息 |
| | | * @param id |
| | | * @param date |
| | | */ |
| | | *//* |
| | | private boolean doHkDeleteUser(Integer id,String delHkIds, Date date ) { |
| | | if(StringUtils.isBlank(delHkIds)){ |
| | | return true; |
| | |
| | | request.setPersonIds(new String[]{delHkIds}); |
| | | BaseResponse<List<UserDelResponse>> result = HKService.delBatchUser(request); |
| | | if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){ |
| | | List<String> fIds = new ArrayList<>(); |
| | | //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕) |
| | | if(result.getData()!=null && result.getData().size()>0){ |
| | | log.info("海康删除用户失败:==============="+result.getData().get(0).getPersonId()); |
| | | memberMapper.update(null,new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getHkStatus,Constants.TWO)//同步失败 |
| | | .set(Member::getHkDate,date) |
| | | .set(Member::getRemark,"同步海康删除失败:"+ JSONObject.toJSONString(result.getData().get(0) )) |
| | | .in(Member::getId, id)); |
| | | }else{ |
| | | //标记删除成功的数据(海康对接状态为已同步,,同步失败的仍为待同步,等下一次继续处理,知道全部删除完毕) |
| | | memberMapper.update(null,new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getHkStatus,Constants.ONE)//同步成功 |
| | | .set(Member::getHkDate,date) |
| | | .set(Member::getRemark,"已同步") |
| | | .in(Member::getId, id)); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | }*/ |
| | | |
| | | /** |
| | | * 删除人员所有设备上的权限信息 |
| | |
| | | } |
| | | return model; |
| | | } |
| | | private FaceAddRequest getFaceAddModel(Member c,String path) { |
| | | public static FaceAddRequest getFaceAddModel(Member c,String path) { |
| | | FaceAddRequest model = new FaceAddRequest(); |
| | | model.setPersonId(c.getHkId()); |
| | | if(StringUtils.isNotBlank(c.getFaceImg())){ |
| | |
| | | } |
| | | return model; |
| | | } |
| | | private FaceEditRequest getFaceUpdateModel(Member c,String path) { |
| | | public static FaceEditRequest getFaceUpdateModel(Member c,String path) { |
| | | FaceEditRequest model = new FaceEditRequest(); |
| | | model.setFaceId(c.getFaceId()); |
| | | if(StringUtils.isNotBlank(c.getFaceImg())){ |
| | |
| | | return model; |
| | | } |
| | | |
| | | |
| | | } |