| | |
| | | |
| | | import cn.hutool.core.util.IdcardUtil; |
| | | import cn.hutool.core.util.PhoneUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.alibaba.fastjson.TypeReference; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | |
| | | import com.doumee.core.haikang.model.param.respose.UserAddResponse; |
| | | import com.doumee.core.haikang.model.param.respose.UserDelResponse; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.core.jiandaoyun.api.arch.DeptApiClient; |
| | | import com.doumee.core.jiandaoyun.constants.HttpConstant; |
| | | import com.doumee.core.jiandaoyun.model.dept.DeptEntityModel; |
| | | import com.doumee.core.jiandaoyun.model.user.UserEntityModel; |
| | | import com.doumee.dao.web.response.DDAuthorizeVO; |
| | | import com.doumee.service.business.third.TmsService; |
| | | import com.doumee.service.business.third.model.LoginUserInfo; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | |
| | | @Autowired |
| | | private MemberJoinMapper memberJoinMapper; |
| | | |
| | | @Autowired |
| | | private JkCabinetMapper jkCabinetMapper; |
| | | |
| | | @Autowired |
| | | private TrainTimeMapper trainTimeMapper; |
| | |
| | | |
| | | private Member initAddMemberModel(Member member, LoginUserInfo loginUserInfo) { |
| | | Member insert= new Member(); |
| | | insert.setCreator(Objects.nonNull(loginUserInfo.getId())?loginUserInfo.getId():null); |
| | | insert.setCreator(Objects.nonNull(loginUserInfo)?loginUserInfo.getId():null); |
| | | insert.setCreateDate(new Date()); |
| | | insert.setEditor(Objects.nonNull(loginUserInfo.getId())?loginUserInfo.getId():null); |
| | | insert.setEditor(Objects.nonNull(loginUserInfo)?loginUserInfo.getId():null); |
| | | insert.setEditDate(new Date()); |
| | | insert.setHkOrgId(member.getHkOrgId()); |
| | | insert.setIsdeleted(Constants.ZERO); |
| | |
| | | insert.setCode(member.getCode()); |
| | | insert.setType(Constants.TWO); |
| | | insert.setHkDate(new Date()); |
| | | insert.setDdId(member.getDdId()); |
| | | insert.setErpId(member.getErpId()); |
| | | insert.setWorkStatus(Constants.ZERO);//默认在职 |
| | | insert.setCanVisit(Constants.ZERO);//默认不可访问 |
| | | insert.setAuthStatus(Constants.ZERO); |
| | |
| | | Member member=new Member(); |
| | | member.setId(id); |
| | | member.setIsdeleted(Constants.ONE); |
| | | member.setEditor(loginUserInfo.getId()); |
| | | member.setEditor(loginUserInfo!=null?loginUserInfo.getId():null); |
| | | member.setEditDate(date); |
| | | member.setHkStatus(Constants.ZERO); |
| | | member.setRemark("人员已删除,等待删除门禁权限"); |
| | |
| | | if(StringUtils.isNotBlank(companySpecialId)){ |
| | | queryWrapper.apply(" find_in_set('"+companySpecialId+"',REPLACE(t3.company_path,'/',',')) "); |
| | | } |
| | | } |
| | | if(null != member.getQueryAuth() && Constants.equalsInteger(member.getQueryAuth(),Constants.ONE)){ |
| | | List<JkCabinet> jkCabinets = jkCabinetMapper.selectList(new QueryWrapper<JkCabinet>().lambda() |
| | | .eq(JkCabinet::getIsdeleted,Constants.ZERO) |
| | | .isNotNull(JkCabinet::getAuthMemberId) |
| | | ); |
| | | if(CollectionUtils.isNotEmpty(jkCabinets)){ |
| | | List<String> memberIdList = new ArrayList<>(); |
| | | List<String> authMemberId = jkCabinets.stream().map(i->i.getAuthMemberId()).collect(Collectors.toList()); |
| | | for (String s:authMemberId) { |
| | | memberIdList.addAll(Arrays.asList(s.split(","))) ; |
| | | } |
| | | queryWrapper.in(Member::getId,memberIdList); |
| | | } |
| | | |
| | | } |
| | | queryWrapper.eq(Member::getIsdeleted,Constants.ZERO); |
| | | queryWrapper.eq(Member::getWorkStatus,Constants.ZERO); |
| | |
| | | .eq(SystemUser::getDeleted,Constants.ZERO) |
| | | .last(" limit 1 ")); |
| | | //非访客用户 进行判断是否存在用户 |
| | | if(!Objects.isNull(user)){ |
| | | if(Objects.isNull(user)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"您的账号暂未绑定系统,请联系管理员"); |
| | | }else{ |
| | | Member member = memberMapper.selectById(user.getMemberId()); |
| | | if(member == null || member.getIsdeleted() == Constants.ONE){ |
| | | return; |
| | | // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员"); |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"账号绑定异常,请联系管理员"); |
| | | } |
| | | if(member.getStatus() != Constants.ZERO){ |
| | | return; |
| | | // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员"); |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"您的账号已禁用,请联系管理员"); |
| | | } |
| | | if(StringUtils.isNotBlank(member.getIdcardNo())){ |
| | | member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo())); |
| | |
| | | if(importing!=null && importing){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,已存在员工导入任务正在执行中,请稍后再试!"); |
| | | } |
| | | redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_MEMBER,true); |
| | | redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_MEMBER,true,30, TimeUnit.MINUTES); |
| | | try { |
| | | ExcelImporter ie = null; |
| | | List<MemberImport> dataList =null; |
| | |
| | | /** |
| | | * 同步钉钉内部员工信息 |
| | | */ |
| | | public void syncDDUserInfo() throws ApiException { |
| | | List<OapiV2UserGetResponse.UserGetResponse> list = dingTalk.syncAllUserInfo(); |
| | | if(CollectionUtils.isEmpty(list)){ |
| | | return; |
| | | } |
| | | List<Member> addList = new ArrayList<>(); |
| | | List<Member> updateList = new ArrayList<>(); |
| | | List<String> delIds = new ArrayList<>();//修改为使用钉钉id erpId |
| | | List<Member> allList = memberMapper.selectList(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .eq(Member::getType,Constants.TWO)); |
| | | dealMemberChangeList(list,addList,updateList,delIds,allList); |
| | | @Override |
| | | public void syncDDUserInfo(){ |
| | | try { |
| | | List<OapiV2UserGetResponse.UserGetResponse> list = dingTalk.syncAllUserInfo(); |
| | | if(CollectionUtils.isEmpty(list)){ |
| | | return; |
| | | } |
| | | List<Member> addList = new ArrayList<>(); |
| | | List<Member> updateList = new ArrayList<>(); |
| | | List<String> delIds = new ArrayList<>();//修改为使用钉钉id erpId |
| | | List<Member> allList = memberMapper.selectList(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .eq(Member::getType,Constants.TWO)); |
| | | dealMemberChangeList(list,addList,updateList,delIds,allList); |
| | | |
| | | if(delIds.size()>0){ |
| | | syncDelMember(delIds); |
| | | if(delIds.size()>0){ |
| | | syncDelMember(delIds); |
| | | } |
| | | }catch (Exception e){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"同步钉钉人员信息异常!"); |
| | | } |
| | | |
| | | |
| | | } |
| | | @Override |
| | | public String syncJdyUserInfo() { |
| | | DeptApiClient deptApiClient = new DeptApiClient(HttpConstant.API_KEY, HttpConstant.HOST); |
| | | try { |
| | | Map<String, Object> result = deptApiClient.deptMemberList(1,true,deptApiClient.getDefaultVersion()); |
| | | if(result!=null && result.get("users")!=null ){ |
| | | TypeReference<List<UserEntityModel>> typeReference = new TypeReference<List<UserEntityModel>>(){}; |
| | | Object obj = result.get("users"); |
| | | List<UserEntityModel> list = com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(obj), typeReference.getType()); |
| | | if(list !=null && list.size()>0){ |
| | | List<Member> addList = new ArrayList<>(); |
| | | List<Member> updateList = new ArrayList<>(); |
| | | List<String> delIds = new ArrayList<>();//修改为使用钉钉id erpId |
| | | List<Member> allList = memberMapper.selectList(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .eq(Member::getType,Constants.TWO)); |
| | | dealMemberChangeListJdy(list,addList,updateList,delIds,allList); |
| | | if(delIds.size()>0){ |
| | | syncDelMember(delIds); |
| | | } |
| | | return "同步数据:新增【"+addList.size()+"】条,更新【"+updateList.size()+"】条,删除【"+delIds.size()+"】条"; |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步钉钉数据为空!"); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步数据异常!"); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | private void syncDelMember(List<String> delIds) { |
| | |
| | | } |
| | | } |
| | | } |
| | | private void dealMemberChangeListJdy(List<UserEntityModel> list, List<Member> addList, List<Member> updateList, List<String> delIds, List<Member> allList) { |
| | | Date date = new Date(); |
| | | for(UserEntityModel respone : list){ |
| | | //根据erpid查询企业信息,判断是新增还是更新 |
| | | Member param = new Member(); |
| | | param.setErpId(respone.getUsername()); |
| | | param.setName(respone.getName()); |
| | | param.setDdId(respone.getIntegrate_id()); |
| | | param.setCompanyIdList(respone.getDepartments()); |
| | | Member member = findMemberByERPId(allList,respone.getUsername()); |
| | | if(member == null){ |
| | | //如果是新增 |
| | | //封装新增组织对象数据 |
| | | addList.add(syncDDAddMemberModel(param,new Member())); |
| | | }else{ |
| | | updateList.add(syncDDEditMemberModel(param,member)); |
| | | } |
| | | } |
| | | if(allList!=null && allList.size()>0){ |
| | | for(Member m : allList){ |
| | | if(!isMemberDeletedJdy(m,list)){ |
| | | delIds.add(m.getErpId()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private Member getAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) { |
| | | return syncDDAddMemberModel(deptGetResponse,member); |
| | | Member param = new Member(); |
| | | param.setErpId(deptGetResponse.getUnionid()); |
| | | param.setPhone(deptGetResponse.getMobile()); |
| | | param.setName(deptGetResponse.getName()); |
| | | param.setCode(deptGetResponse.getJobNumber()); |
| | | param.setDdId(deptGetResponse.getUserid()); |
| | | param.setCompanyIdList(deptGetResponse.getDeptIdList()); |
| | | return syncDDAddMemberModel(param,member); |
| | | } |
| | | |
| | | |
| | | private Member getUpdateMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) { |
| | | return syncDDEditMemberModel(deptGetResponse,member); |
| | | Member param = new Member(); |
| | | param.setErpId(deptGetResponse.getUnionid()); |
| | | param.setPhone(deptGetResponse.getMobile()); |
| | | param.setName(deptGetResponse.getName()); |
| | | param.setCode(deptGetResponse.getJobNumber()); |
| | | param.setDdId(deptGetResponse.getUserid()); |
| | | param.setCompanyIdList(deptGetResponse.getDeptIdList()); |
| | | return syncDDEditMemberModel(param,member); |
| | | } |
| | | |
| | | |
| | | private Member syncDDAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) { |
| | | private Member syncDDAddMemberModel(Member deptGetResponse,Member member) { |
| | | member.setCreateDate(new Date()); |
| | | member.setErpId(deptGetResponse.getUserid()); |
| | | member.setPhone(deptGetResponse.getMobile()); |
| | | member.setErpId(deptGetResponse.getErpId()); |
| | | member.setPhone(deptGetResponse.getPhone()); |
| | | member.setName(deptGetResponse.getName()); |
| | | member.setCode(deptGetResponse.getJobNumber()); |
| | | isMemberParamValidDetail(member,deptGetResponse.getDeptIdList()); |
| | | member.setCode(deptGetResponse.getCode()); |
| | | member.setDdId(deptGetResponse.getDdId()); |
| | | isMemberParamValidDetail(member,deptGetResponse.getCompanyIdList()); |
| | | //获取出生日期 |
| | | //脱敏操作 |
| | | Member insert = initAddMemberModel(member,null); |
| | |
| | | if(Objects.nonNull(deptIdList)){ |
| | | List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda().in(Company::getErpId,deptIdList) |
| | | .eq(Company::getType,Constants.ONE).eq(Company::getIsdeleted,Constants.ZERO) |
| | | .isNotNull(Company::getHkId) |
| | | // .isNotNull(Company::getHkId) 暂时无法同步海康 先注释 |
| | | ); |
| | | if(CollectionUtils.isNotEmpty(companyList)){ |
| | | member.setHkOrgId(companyList.get(Constants.ZERO).getHkId()); |
| | |
| | | } |
| | | member.setCompanyType(Constants.ONE); |
| | | SystemUser queryUserDto = new SystemUser(); |
| | | queryUserDto.setUsername(member.getPhone()); |
| | | queryUserDto.setUsername(StringUtils.defaultString(member.getPhone(),member.getErpId())); |
| | | queryUserDto.setDeleted(Boolean.FALSE); |
| | | SystemUser user = systemUserMapper.selectOne(new QueryWrapper<>(queryUserDto).last("limit 1")); |
| | | if (user != null) { |
| | |
| | | } |
| | | } |
| | | |
| | | public Member syncDDEditMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member updateMember) { |
| | | public Member syncDDEditMemberModel(Member deptGetResponse1,Member updateMember) { |
| | | updateMember.setEditDate(new Date()); |
| | | updateMember.setErpId(deptGetResponse.getUserid()); |
| | | updateMember.setPhone(deptGetResponse.getMobile()); |
| | | updateMember.setName(deptGetResponse.getName()); |
| | | updateMember.setCode(deptGetResponse.getJobNumber()); |
| | | |
| | | // updateMember.setErpId(deptGetResponse.getErpId()); |
| | | // updateMember.setPhone(deptGetResponse.getPhone()); |
| | | // updateMember.setName(deptGetResponse.getName()); |
| | | // updateMember.setCode(deptGetResponse.getCode()); |
| | | // updateMember.setDdId(deptGetResponse.getDdId()); |
| | | updateMember.setHkId(null); |
| | | updateMember.setAuthStatus(Constants.ZERO); |
| | | Boolean hkFlag = dealHkUserForUpdateBiz(updateMember); |
| | |
| | | .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate()) |
| | | .set(StringUtils.isNotBlank(updateMember.getRemark()),Member::getRemark,updateMember.getRemark()) |
| | | .set(StringUtils.isNotBlank(updateMember.getFaceImg()),Member::getFaceImg,updateMember.getFaceImg()) |
| | | .set(StringUtils.isNotBlank(updateMember.getDdId()),Member::getDdId,updateMember.getDdId()) |
| | | .set(updateMember.getFaceId()!=null,Member::getFaceId,updateMember.getFaceId()) |
| | | .set(updateMember.getCompanyId()!=null,Member::getCompanyId,updateMember.getCompanyId()) |
| | | .set(Member::getCode,updateMember.getCode()) |
| | |
| | | } |
| | | return false; |
| | | } |
| | | private boolean isMemberDeletedJdy(Member member, List<UserEntityModel> list) { |
| | | for(UserEntityModel m : list){ |
| | | if(StringUtils.equals(m.getUsername(),member.getErpId())){ |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException { |
| | | JSONArray jsonArray = eventData.getJSONArray("userId"); |
| | | if(jsonArray.isEmpty()){ |
| | |
| | | } |
| | | }else if(eventType.equals("user_add_org")||eventType.equals("user_modify_org")){ |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | OapiV2UserGetResponse.UserGetResponse userGetResponse = dingTalk.syncUserInfo(jsonArray.getString(i)); |
| | | Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getIsdeleted,Constants.ZERO) |
| | | .eq(Member::getErpId,jsonArray.getLong(i)) |
| | | .eq(Member::getErpId,userGetResponse.getUnionid()) |
| | | .last(" limit 1") |
| | | ); |
| | | OapiV2UserGetResponse.UserGetResponse deptGetResponse = dingTalk.syncUserInfo(jsonArray.getString(i)); |
| | | if(Objects.isNull(member)){ |
| | | getAddMemberModel(deptGetResponse,member); |
| | | member = new Member(); |
| | | getAddMemberModel(userGetResponse,member); |
| | | }else{ |
| | | getUpdateMemberModel(deptGetResponse,member); |
| | | getUpdateMemberModel(userGetResponse,member); |
| | | } |
| | | } |
| | | } |