From 36f691267e45ca2861bed663fdcf5f2efcefdfce Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 10 十一月 2025 15:27:08 +0800
Subject: [PATCH] 最新版本541200007
---
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 278 ++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 240 insertions(+), 38 deletions(-)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 43c2c6f..dfd57cf 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,13 +2,16 @@
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.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;
@@ -22,6 +25,11 @@
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 com.doumee.service.business.third.model.PageData;
@@ -76,6 +84,7 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -91,6 +100,9 @@
@Autowired
private MemberJoinMapper memberJoinMapper;
+
+ @Autowired
+ private JkCabinetMapper jkCabinetMapper;
@Autowired
private TrainTimeMapper trainTimeMapper;
@@ -219,9 +231,9 @@
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);
@@ -231,6 +243,8 @@
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);
@@ -601,7 +615,7 @@
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("浜哄憳宸插垹闄わ紝绛夊緟鍒犻櫎闂ㄧ鏉冮檺");
@@ -1205,6 +1219,21 @@
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);
@@ -1845,6 +1874,12 @@
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)
@@ -1874,6 +1909,44 @@
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)
@@ -2092,7 +2165,7 @@
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;
@@ -2345,23 +2418,61 @@
/**
* 鍚屾閽夐拤鍐呴儴鍛樺伐淇℃伅
*/
- 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<>();//淇敼涓轰娇鐢ㄩ拤閽塱d 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<>();//淇敼涓轰娇鐢ㄩ拤閽塱d 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<>();//淇敼涓轰娇鐢ㄩ拤閽塱d 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) {
@@ -2397,24 +2508,65 @@
}
}
}
+ 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);
@@ -2440,7 +2592,7 @@
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());
@@ -2449,7 +2601,7 @@
}
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) {
@@ -2467,13 +2619,13 @@
}
}
- 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);
@@ -2495,6 +2647,7 @@
.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())
@@ -2534,8 +2687,16 @@
}
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()){
@@ -2553,20 +2714,61 @@
}
}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;
+ }
+
}
--
Gitblit v1.9.3