| | |
| | | import com.github.yulichang.query.MPJQueryWrapper; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 海康组织人员通过步Service实现 |
| | |
| | | public class HkSyncOrgUserServiceImpl extends HkSyncBaseServiceImpl { |
| | | @Autowired |
| | | private CompanyMapper companyMapper; |
| | | |
| | | @Autowired |
| | | private MemberRoleMapper memberRoleMapper; |
| | | @Autowired |
| | | private DeviceRoleMapper deviceRoleMapper; |
| | | @Autowired |
| | | private DeviceMapper deviceMapper; |
| | | @Autowired |
| | | private EmpowerMapper empowerMapper; |
| | | @Autowired |
| | | private MemberCardMapper memberCardMapper; |
| | | @Autowired |
| | | private MemberJoinMapper memberMapper; |
| | | @Autowired |
| | | private ERPSyncService erpSyncService; |
| | | @Autowired |
| | | private DeviceMapper deviceMapper; |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | |
| | | Constants.DEALING_HK_USER =false; |
| | | } |
| | | } |
| | | |
| | | public static List<Integer> getRoleIdByParam( Member member,DeviceRoleMapper deviceRoleMapper) { |
| | | //查询数据库存在的权限 |
| | | List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda() |
| | | .eq(DeviceRole::getType,Constants.TWO) |
| | | .exists("(select b.id from member_role b where b.ROLE_ID = device_role.ID and b.MEMBER_ID="+member.getId()+")")); |
| | | if(CollectionUtils.isNotEmpty(deviceRoleList)){ |
| | | List<MemberRole> memberRoleList = new ArrayList<>(); |
| | | String ids = ""; |
| | | List<Integer> r = new ArrayList<>(); |
| | | for (int i = 0; i < deviceRoleList.size(); i++) { |
| | | DeviceRole deviceRole =deviceRoleList.get(i); |
| | | if(i>0){ |
| | | ids += ","; |
| | | } |
| | | String doorids =deviceRole.getDoorIds(); |
| | | if(StringUtils.isNotBlank(doorids)){ |
| | | String[] ss = doorids.split(","); |
| | | try { |
| | | for(String s :ss){ |
| | | r.add(Integer.parseInt(s)); |
| | | } |
| | | }catch (Exception e){ |
| | | //脏数据不处理 |
| | | } |
| | | } |
| | | } |
| | | return r; |
| | | } |
| | | return null; |
| | | } |
| | | @Transactional |
| | | private boolean dealMemberInfoBiz(Member c, Date date, String path) { |
| | | if( c.getCompanyId() == null){ |
| | | //如果没有组织不做处理 |
| | | return false; |
| | | } |
| | | if(StringUtils.isBlank(c.getHkId())){ |
| | | if(!Constants.equalsInteger(Constants.ONE,c.getIsdeleted()) && StringUtils.isBlank(c.getHkId())){ |
| | | //如果新增同步數據 |
| | | dealUserHkAddBiz(c,date,path); |
| | | }else{ |
| | |
| | | } |
| | | return false; |
| | | } |
| | | private void dealMemberRoleEmpower(Member member ) { |
| | | //处理新增的人员卡片数据(与海康同步) |
| | | List<MemberCard> cards = dealMemberHkCard(member); |
| | | dealMemberRoleEmpowerDo(cards,member,deviceRoleMapper,empowerMapper,deviceMapper); |
| | | } |
| | | |
| | | public static void dealMemberRoleEmpowerDo(List<MemberCard> cards,Member member , DeviceRoleMapper deviceRoleMapper, EmpowerMapper empowerMapper, DeviceMapper deviceMapper) { |
| | | if(cards == null || cards.size() == 0){ |
| | | return; |
| | | } |
| | | List<Integer> doorIds = getRoleIdByParam(member,deviceRoleMapper); |
| | | if(doorIds==null || doorIds.size() == 0){ |
| | | return; |
| | | } |
| | | if(StringUtils.isBlank(member.getFaceImg())){ |
| | | return; |
| | | } |
| | | |
| | | List<Integer> deviceIds =new ArrayList<>();//新设备编码集合 |
| | | List<Empower> list = new ArrayList<>();//新授权记录集合 |
| | | if(Constants.equalsInteger(member.getIsdeleted(),Constants.ZERO) |
| | | && Constants.equalsObject(member.getHkStatus(),Constants.ONE)){ |
| | | //如果用户是同步海康成功,添加带下发权限(只管理新增或者编辑的) |
| | | List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().lambda().in(Device::getId,doorIds)); |
| | | if(deviceList == null || deviceList.size() == 0){ |
| | | return; |
| | | } |
| | | for (Device deviceRole:deviceList) { |
| | | Empower model = new Empower(); |
| | | model.setCreateDate(new Date()); |
| | | model.setMemberId(member.getId()); |
| | | model.setIsdeleted(Constants.ZERO); |
| | | model.setDeviceId(deviceRole.getId()); |
| | | model.setSendStatus(Constants.ZERO); |
| | | model.setSendInfo("待同步安防平台"); |
| | | model.setRemark("待同步安防平台"); |
| | | model.setStartTime(member.getStartTime()); |
| | | model.setEndTime(member.getEndTime()); |
| | | //默认给于虚拟卡 |
| | | model.setCardNos(Constants.VIRTUAL_CARD_INDEX+member.getId()); |
| | | model.setSendType(Constants.ZERO); |
| | | //标记最新的授权设备编码集合 |
| | | 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() |
| | | .eq(Empower::getMemberId,member.getId()) |
| | | .eq(Empower::getIsdeleted,Constants.ZERO) |
| | | .in(Empower::getDeviceId,deviceIds) ); |
| | | empowerMapper.insertBatchSomeColumn(list); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 对人员带开卡数据进行自动开卡操作 |
| | | * @param member |
| | | * @return |
| | | */ |
| | | private List<MemberCard> dealMemberHkCard(Member member) { |
| | | List<MemberCard> memberCards = memberCardMapper.selectList(new QueryWrapper<MemberCard>().lambda() |
| | | .eq(MemberCard::getMemberId,member.getId()) |
| | | .eq(MemberCard::getType,Constants.TWO) |
| | | .eq(MemberCard::getHkStatus,Constants.ZERO) ); |
| | | if(memberCards==null || memberCards.size()==0){ |
| | | //没有带处理的数据,直接跳过 |
| | | return getNormalCardList(member,memberCardMapper); |
| | | } |
| | | |
| | | List<Integer> allCodes = new ArrayList<>(); |
| | | List<String> doneCodes = new ArrayList<>(); |
| | | CardBingdingRequest param = new CardBingdingRequest(); |
| | | if(member.getStartTime() !=null && member.getEndTime()!=null){ |
| | | param.setStartDate(DateUtil.getISO8601Timestamp(member.getStartTime())); |
| | | param.setEndDate(DateUtil.getISO8601Timestamp(member.getEndTime())); |
| | | } |
| | | param.setCardList(new ArrayList<>()); |
| | | for(MemberCard m : memberCards){ |
| | | allCodes.add(m.getId()); |
| | | if(StringUtils.isBlank(m.getCode())){ |
| | | continue; |
| | | } |
| | | CardInfoRequest cr = new CardInfoRequest(); |
| | | cr.setCardNo(m.getCode()); |
| | | cr.setOrgIndexCode(member.getCompanyHkId()); |
| | | cr.setPersonId(member.getHkId()); |
| | | cr.setCardType(m.getType()); |
| | | param.getCardList().add(cr); |
| | | } |
| | | |
| | | //处理新增数据 |
| | | BaseResponse<List<CardInfoResponse>> result = HKService.cardBingding(param); |
| | | if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) ){ |
| | | if(result.getData()!=null ){ |
| | | for(CardInfoResponse r : result.getData()){ |
| | | doneCodes.add(r.getCardNo()); |
| | | } |
| | | } |
| | | } |
| | | if(doneCodes.size()>0){ |
| | | memberCardMapper.update(null,new UpdateWrapper<MemberCard>().lambda() |
| | | .eq(MemberCard::getMemberId,member.getId()) |
| | | .eq(MemberCard::getHkStatus,Constants.ZERO) |
| | | .set(MemberCard::getHkStatus,Constants.ONE) |
| | | .set(MemberCard::getHkDate,new Date()) |
| | | .set(MemberCard::getRemark,"开卡成功") |
| | | .in(MemberCard::getCode,doneCodes)); |
| | | } |
| | | memberCardMapper.update(null,new UpdateWrapper<MemberCard>().lambda() |
| | | .eq(MemberCard::getMemberId,member.getId()) |
| | | .eq(MemberCard::getHkStatus,Constants.ZERO) |
| | | .set(MemberCard::getHkStatus,Constants.TWO) |
| | | .set(MemberCard::getRemark,"开卡失败") |
| | | .set(MemberCard::getHkDate,new Date()) |
| | | .notIn(doneCodes.size()>0,MemberCard::getCode,doneCodes) |
| | | .in(MemberCard::getId,allCodes)); |
| | | |
| | | return getNormalCardList(member,memberCardMapper); |
| | | } |
| | | |
| | | public static List<MemberCard> getNormalCardList(Member member,MemberCardMapper memberCardMapper) { |
| | | return memberCardMapper.selectList(new QueryWrapper<MemberCard>().lambda() |
| | | .eq(MemberCard::getMemberId,member.getId()) |
| | | .eq(MemberCard::getType,Constants.TWO) |
| | | .eq(MemberCard::getStatus,Constants.MemberCard.normal) |
| | | .eq(MemberCard::getHkStatus,Constants.ONE) ); |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 如果之前已经和海康同步,则更新用户数据以及人脸数据(可能新增人脸 也可能更新人脸) |
| | |
| | | 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())); |
| | | }else{ |
| | | //处理修改数据,并且更新人脸 |
| | | UserAddRequest addHkModel = getUserAddModel(c,path,1);//修改 |
| | |
| | | c.setHkStatus(Constants.TWO); |
| | | c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!"+(result!=null?result.getCode()+result.getMsg():"")); |
| | | } |
| | | |
| | | //重新下发权限数据 |
| | | dealMemberRoleEmpower(c); |
| | | } |
| | | c.setHkDate(date); |
| | | memberMapper.updateById(c); |
| | |
| | | c.setHkStatus(Constants.ONE); |
| | | c.setHkId(addHkModel.getPersonId()); |
| | | memberMapper.updateById(c); |
| | | dealMemberRoleEmpower(c); |
| | | return true; |
| | | }else{ |
| | | noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!"+result.getCode()+result.getMsg()); |
| | |
| | | */ |
| | | private boolean doHkDeleteUser(Integer id,String delHkIds, Date date ) { |
| | | if(StringUtils.isBlank(delHkIds)){ |
| | | return false; |
| | | return true; |
| | | } |
| | | UserDelRequest request = new UserDelRequest(); |
| | | request.setPersonIds(new String[]{delHkIds}); |