|  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
|---|
|  |  |  | import com.dingtalk.api.response.OapiV2DepartmentGetResponse; | 
|---|
|  |  |  | import com.dingtalk.api.response.OapiV2UserGetResponse; | 
|---|
|  |  |  | import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse; | 
|---|
|  |  |  | import com.doumee.biz.system.SystemDictDataBiz; | 
|---|
|  |  |  | import com.doumee.config.DataSyncConfig; | 
|---|
|  |  |  | import com.doumee.core.annotation.excel.ExcelImporter; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.dao.web.response.DDAuthorizeVO; | 
|---|
|  |  |  | import com.doumee.service.business.third.TmsService; | 
|---|
|  |  |  | import com.doumee.service.business.third.model.LoginUserInfo; | 
|---|
|  |  |  | import com.doumee.service.business.third.model.PageData; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | queryWrapper.orderByAsc(Member::getPinyin); | 
|---|
|  |  |  | 
|---|
|  |  |  | return wxAuthorizeVO; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 微信授权 内部人员登录 | 
|---|
|  |  |  | * @param wxAuthorizeVO | 
|---|
|  |  |  | * @param openId | 
|---|
|  |  |  | * @param source | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void dealSystemUserAuthBiz(WxAuthorizeVO wxAuthorizeVO, String openId, Integer source) { | 
|---|
|  |  |  | SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() | 
|---|
|  |  |  | .eq(SystemUser::getOpenid,openId) | 
|---|
|  |  |  | 
|---|
|  |  |  | wxAuthorizeVO.setToken(token); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 钉钉授权获取内部人员登录信息 | 
|---|
|  |  |  | * @param ddAuthorizeVO | 
|---|
|  |  |  | * @param unionId | 
|---|
|  |  |  | * @param source | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void dealSystemUserAuthBizByDD(DDAuthorizeVO ddAuthorizeVO, String unionId, Integer source) { | 
|---|
|  |  |  | SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() | 
|---|
|  |  |  | .eq(SystemUser::getDdUnionId,unionId) | 
|---|
|  |  |  | .in(SystemUser::getType,Constants.memberType.internal) | 
|---|
|  |  |  | .eq(SystemUser::getDeleted,Constants.ZERO) | 
|---|
|  |  |  | .last(" limit 1 ")); | 
|---|
|  |  |  | //非访客用户 进行判断是否存在用户 | 
|---|
|  |  |  | 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){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"账号绑定异常,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(member.getStatus() != Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"您的账号已禁用,请联系管理员"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(StringUtils.isNotBlank(member.getIdcardNo())){ | 
|---|
|  |  |  | member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() + | 
|---|
|  |  |  | systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode(); | 
|---|
|  |  |  | member.setPrefixUrl(prefixUrl); | 
|---|
|  |  |  | ddAuthorizeVO.setMember(member); | 
|---|
|  |  |  | //司机 与 内部人员 提供token | 
|---|
|  |  |  | String token = systemLoginService.loginByUserId(user.getId()); | 
|---|
|  |  |  | ddAuthorizeVO.setToken(token); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void dealDriverUserAuthBiz(WxAuthorizeVO wxAuthorizeVO, String openId, Integer source) { | 
|---|
|  |  |  | SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() | 
|---|
|  |  |  | .eq(SystemUser::getOpenid,openId) | 
|---|
|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 同步钉钉内部员工信息 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void syncDDUserInfo() throws ApiException { | 
|---|
|  |  |  | List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo(); | 
|---|
|  |  |  | if(CollectionUtils.isEmpty(list)){ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private Member syncDDAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) { | 
|---|
|  |  |  | member.setCreateDate(new Date()); | 
|---|
|  |  |  | member.setErpId(deptGetResponse.getUserid()); | 
|---|
|  |  |  | member.setErpId(deptGetResponse.getUnionid()); | 
|---|
|  |  |  | member.setPhone(deptGetResponse.getMobile()); | 
|---|
|  |  |  | member.setName(deptGetResponse.getName()); | 
|---|
|  |  |  | member.setCode(deptGetResponse.getJobNumber()); | 
|---|
|  |  |  | member.setDdId(deptGetResponse.getUserid()); | 
|---|
|  |  |  | isMemberParamValidDetail(member,deptGetResponse.getDeptIdList()); | 
|---|
|  |  |  | //获取出生日期 | 
|---|
|  |  |  | //脱敏操作 | 
|---|
|  |  |  | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Member syncDDEditMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member updateMember) { | 
|---|
|  |  |  | updateMember.setEditDate(new Date()); | 
|---|
|  |  |  | updateMember.setErpId(deptGetResponse.getUserid()); | 
|---|
|  |  |  | updateMember.setErpId(deptGetResponse.getUnionid()); | 
|---|
|  |  |  | updateMember.setPhone(deptGetResponse.getMobile()); | 
|---|
|  |  |  | updateMember.setName(deptGetResponse.getName()); | 
|---|
|  |  |  | updateMember.setCode(deptGetResponse.getJobNumber()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | updateMember.setDdId(deptGetResponse.getUserid()); | 
|---|
|  |  |  | 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()) | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 钉钉授权登录 | 
|---|
|  |  |  | * @param code | 
|---|
|  |  |  | * @param source | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | * @throws ApiException | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public DDAuthorizeVO ddAuthorize(String code, Integer source) throws ApiException { | 
|---|
|  |  |  | if(StringUtils.isBlank(code)||Objects.isNull(source)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | OapiV2UserGetuserinfoResponse.UserGetByCodeResponse userGetByCodeResponse = dingTalk.getDDUserByCode(code); | 
|---|
|  |  |  | if(Objects.isNull(userGetByCodeResponse) | 
|---|
|  |  |  | || StringUtils.isBlank(userGetByCodeResponse.getUnionid())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"钉钉授权失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String unionId = userGetByCodeResponse.getUnionid(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | DDAuthorizeVO ddAuthorizeVO = new DDAuthorizeVO(); | 
|---|
|  |  |  | if(StringUtils.isBlank(unionId)){ | 
|---|
|  |  |  | return ddAuthorizeVO; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ddAuthorizeVO.setUnionId(unionId); | 
|---|
|  |  |  | //        if(source==1){ | 
|---|
|  |  |  | //            //处理普通访客人员自动授权逻辑 | 
|---|
|  |  |  | //            dealVisitUserAuthBiz(wxAuthorizeVO,openId,source); | 
|---|
|  |  |  | //        }else if(source == 3){ | 
|---|
|  |  |  | //            //处理tms管控人员自动授权逻辑 | 
|---|
|  |  |  | //            dealGkUserAuthBiz(wxAuthorizeVO,openId,source); | 
|---|
|  |  |  | //        }else if(source == 0){ | 
|---|
|  |  |  | //            //如果是司机,则从system_user查询 | 
|---|
|  |  |  | //            dealDriverUserAuthBiz(wxAuthorizeVO,openId,source); | 
|---|
|  |  |  | //        }else{ | 
|---|
|  |  |  | //如果是内部人员,则从system_user查询 | 
|---|
|  |  |  | dealSystemUserAuthBizByDD(ddAuthorizeVO,unionId,source); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | return ddAuthorizeVO; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|