From bfaf38f9788baacc2f239cf56e745e451490600c Mon Sep 17 00:00:00 2001 From: rk <94314517@qq.com> Date: 星期一, 29 九月 2025 10:19:35 +0800 Subject: [PATCH] 钉钉授权 与 通知开发 --- server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java | 4 + server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java | 11 ++ server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java | 2 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 22 +++-- server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java | 10 ++ server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java | 2 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java | 6 + server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java | 124 ++++++++++++++++++++++++++---- 8 files changed, 149 insertions(+), 32 deletions(-) diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java index ee19a81..b8f1acc 100644 --- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java +++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java @@ -21,6 +21,7 @@ import com.doumee.service.business.ext.ERPSyncService; import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromHKServiceImpl; import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromSelfServiceImpl; +import com.taobao.api.ApiException; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -367,4 +368,14 @@ return ApiResponse.success(null); } + + @ApiOperation("鍏ㄩ噺浜哄憳淇℃伅鍚屾 - 閽夐拤") + @PostMapping("/syncAllDingding") +// @CloudRequiredPermission("business:company:sync") + public ApiResponse syncAllDingding() throws ApiException { + memberService.syncDDUserInfo(); + return ApiResponse.success("鍚屾鎴愬姛"); + } + + } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java index e4a88b3..84ac5f5 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java @@ -14,16 +14,21 @@ import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.utils.Constants; +import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.dao.CompanyMapper; +import com.doumee.dao.business.model.CarUseBook; import com.doumee.dao.business.model.Company; +import com.doumee.dao.business.model.Visits; import com.doumee.dao.system.model.SystemDictData; import com.doumee.service.business.CompanyService; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import com.taobao.api.ApiException; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.text.DateFormat; import java.util.*; import java.util.stream.Collectors; @@ -383,23 +388,7 @@ request.setAgentId(agentId); request.setUseridList(userIds); request.setToAllUser(false); -// OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); -// msg.setMsgtype("oa"); -// OapiMessageCorpconversationAsyncsendV2Request.OA oa = new OapiMessageCorpconversationAsyncsendV2Request.OA(); -// oa.setMessageUrl(""); -// OapiMessageCorpconversationAsyncsendV2Request.Head head = new OapiMessageCorpconversationAsyncsendV2Request.Head(); -// head.setText(""); -// head.setBgcolor("#279BAA"); -// -// oa.setHead(head); -// -// OapiMessageCorpconversationAsyncsendV2Request.Body body = new OapiMessageCorpconversationAsyncsendV2Request.Body(); -// body.setTitle(""); -// List<OapiMessageCorpconversationAsyncsendV2Request.Form> form = new ArrayList<>(); -// -// body.setForm(form); -// oa.setBody(body); -// msg.setOa(oa); + request.setMsg(msg); OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(request, getToken()); if(rsp.getErrcode().equals(Constants.DD_ERR_CODE)){ @@ -410,8 +399,109 @@ } + /** + * 璁垮鐢宠/鎶ュ OA 宸ヤ綔閫氱煡 鍐呭 + * @param visits + * @param title + * @return + */ + public OapiMessageCorpconversationAsyncsendV2Request.Msg getVisitNoticeMsg(Visits visits,String title){ + OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); + msg.setMsgtype("oa"); + OapiMessageCorpconversationAsyncsendV2Request.OA oa = new OapiMessageCorpconversationAsyncsendV2Request.OA(); + oa.setMessageUrl(""); + OapiMessageCorpconversationAsyncsendV2Request.Head head = new OapiMessageCorpconversationAsyncsendV2Request.Head(); + head.setText(title); + head.setBgcolor("#279BAA"); + oa.setHead(head); + + OapiMessageCorpconversationAsyncsendV2Request.Body body = new OapiMessageCorpconversationAsyncsendV2Request.Body(); + body.setTitle(!Constants.equalsInteger(visits.getType(),Constants.TWO)?visits.getName()+"鐨勮瀹㈢敵璇�":"鐨勮瀹㈡姤澶�"); + List<OapiMessageCorpconversationAsyncsendV2Request.Form> formList = new ArrayList<>(); + + OapiMessageCorpconversationAsyncsendV2Request.Form visitUser = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + visitUser.setKey("鏉ヨ浜�"); + visitUser.setValue(visits.getName()); + formList.add(visitUser); + + OapiMessageCorpconversationAsyncsendV2Request.Form inDate = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + inDate.setKey("鍏ュ洯鏃堕棿"); + inDate.setValue(DateUtil.formatDate(visits.getStarttime(),"MM-dd HH:mm")); + formList.add(inDate); + + OapiMessageCorpconversationAsyncsendV2Request.Form outDate = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + outDate.setKey("绂诲洯鏃堕棿"); + outDate.setValue(DateUtil.formatDate(visits.getEndtime(),"MM-dd HH:mm")); + formList.add(outDate); + + OapiMessageCorpconversationAsyncsendV2Request.Form inReason = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + inReason.setKey("鏉ヨ浜嬬敱"); + inReason.setValue(visits.getReason()); + formList.add(inReason); + + if(StringUtils.isNotBlank(visits.getCarNos())){ + OapiMessageCorpconversationAsyncsendV2Request.Form carNos = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + carNos.setKey("闅忚杞﹁締"); + carNos.setValue(visits.getCarNos()); + formList.add(visitUser); + } + + body.setForm(formList); + oa.setBody(body); + msg.setOa(oa); + + return msg; + } + /* public OapiMessageCorpconversationAsyncsendV2Request.Msg getCarUseNoticeMsg(CarUseBook carUseBook,String title){ + OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); + msg.setMsgtype("oa"); + OapiMessageCorpconversationAsyncsendV2Request.OA oa = new OapiMessageCorpconversationAsyncsendV2Request.OA(); + oa.setMessageUrl(""); + OapiMessageCorpconversationAsyncsendV2Request.Head head = new OapiMessageCorpconversationAsyncsendV2Request.Head(); + head.setText(title); + head.setBgcolor("#279BAA"); + oa.setHead(head); + OapiMessageCorpconversationAsyncsendV2Request.Body body = new OapiMessageCorpconversationAsyncsendV2Request.Body(); + body.setTitle("鍏姟鐢ㄨ溅"); + List<OapiMessageCorpconversationAsyncsendV2Request.Form> formList = new ArrayList<>(); + + + OapiMessageCorpconversationAsyncsendV2Request.Form startDate = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + startDate.setKey("寮�濮嬫椂闂�"); + startDate.setValue(DateUtil.formatDate(carUseBook.getStartTime(),"MM-dd HH:mm")); + formList.add(startDate); + + OapiMessageCorpconversationAsyncsendV2Request.Form endDate = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + endDate.setKey("缁撴潫鏃堕棿"); + endDate.setValue(DateUtil.formatDate(carUseBook.getEndTime(),"MM-dd HH:mm")); + formList.add(endDate); + + + OapiMessageCorpconversationAsyncsendV2Request.Form userNum = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + userNum.setKey("涔樿溅浜烘暟"); + userNum.setValue(DateUtil.formatDate(carUseBook.getEndTime(),"MM-dd HH:mm")); + formList.add(userNum); + + OapiMessageCorpconversationAsyncsendV2Request.Form inReason = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + inReason.setKey("鏉ヨ浜嬬敱"); + inReason.setValue(visits.getReason()); + formList.add(inReason); + + if(StringUtils.isNotBlank(visits.getCarNos())){ + OapiMessageCorpconversationAsyncsendV2Request.Form carNos = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + carNos.setKey("闅忚杞﹁締"); + carNos.setValue(visits.getCarNos()); + formList.add(visitUser); + } + + body.setForm(formList); + oa.setBody(body); + msg.setOa(oa); + + return msg; + }*/ } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java index 474b586..5dfd1a8 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java @@ -76,7 +76,7 @@ if(eventType.startsWith("org")){ companyService.ddPushCompanyInfo(eventType,bizData); }else if(eventType.startsWith("user")){ - + memberService.ddPushMemberInfo(eventType,bizData); } //澶勭悊浜嬩欢 // process(bizData); diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java index 06d9df9..024145c 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java @@ -211,4 +211,8 @@ List<Member> findDriveList(Member model); void initPinyinTool(); + + void syncDDUserInfo() throws ApiException; + + void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException; } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java index 7336cb7..575f5a3 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java @@ -961,7 +961,7 @@ company.setCompanyNamePath(company.getName());//鍚嶇О璺緞 company.setHkParentId(rootOrgId); String idPath = ""; - if(StringUtils.isNotBlank(company.getErpParentId()) && !StringUtils.equals(company.getErpParentId(),Constants.ONE+"")){ + if(StringUtils.isNotBlank(company.getErpParentId())){ Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId()) .eq(Company::getIsdeleted,Constants.ZERO).last(" limit 1 ")); if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){ @@ -981,6 +981,7 @@ company.setHkParentId(parent.getHkId()); company.setCompanyPath(parent.getCompanyPath()+company.getId()+"/"); company.setCompanyNamePath(parent.getCompanyNamePath()+"/"+company.getName()); + company.setParentId(parent.getId()); } company.setHkCompanyPath(company.getCompanyNamePath()); company.setCreateDate(new Date()); @@ -1009,7 +1010,7 @@ public Company syncDDEditCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company){ company.setErpParentId(deptGetResponse.getParentId().toString()); String idPath = ""; - if(StringUtils.isNotBlank(company.getErpParentId()) && !StringUtils.equals(company.getErpParentId(),Constants.ONE+"")){ + if(StringUtils.isNotBlank(company.getErpParentId())){ Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId()) .eq(Company::getIsdeleted,Constants.ZERO).last("limit 1 ")); if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){ @@ -1026,6 +1027,7 @@ company.setHkParentId(parent.getHkId()); company.setCompanyPath(parent.getCompanyPath()+company.getId()+"/"); company.setCompanyNamePath(parent.getCompanyNamePath()+"/"+company.getName()); + company.setParentId(parent.getId()); } company.setName(deptGetResponse.getName()); 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 624ce03..b30488b 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 @@ -221,9 +221,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); @@ -233,6 +233,7 @@ insert.setCode(member.getCode()); insert.setType(Constants.TWO); insert.setHkDate(new Date()); + insert.setErpId(member.getErpId()); insert.setWorkStatus(Constants.ZERO);//榛樿鍦ㄨ亴 insert.setCanVisit(Constants.ZERO);//榛樿涓嶅彲璁块棶 insert.setAuthStatus(Constants.ZERO); @@ -2391,6 +2392,7 @@ /** * 鍚屾閽夐拤鍐呴儴鍛樺伐淇℃伅 */ + @Override public void syncDDUserInfo() throws ApiException { List<OapiV2UserGetResponse.UserGetResponse> list = dingTalk.syncAllUserInfo(); if(CollectionUtils.isEmpty(list)){ @@ -2456,7 +2458,7 @@ 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()); @@ -2486,7 +2488,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()); @@ -2515,7 +2517,7 @@ 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()); @@ -2582,6 +2584,7 @@ } + @Override public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException { JSONArray jsonArray = eventData.getJSONArray("userId"); if(jsonArray.isEmpty()){ @@ -2599,16 +2602,17 @@ } }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); } } } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java index a98b0e8..4ad2587 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java @@ -239,7 +239,7 @@ //妫�鏌ユ槸鍚﹀繀椤荤瓟棰橈紝骞朵笖绗﹀悎绛旈瑕佹眰 ProblemLog problemLog = isValidProblemLog(visits,source); //鑾峰彇鐢宠鐨勬捣搴疯闂棬绂佺粍淇℃伅 - getHkDeviceRoles(visits,isERP); +// getHkDeviceRoles(visits,isERP); //妫�楠屾嫓璁夸汉鏄惁鍚堟硶 Member visitMember = isValideVisitedUser(visits.getReceptMemberId()); if(StringUtils.isNotBlank(visits.getIdcardNo()) && Constants.equalsInteger(Constants.ZERO, visits.getIdcardType()) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java index c525f0e..552d487 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java @@ -1360,12 +1360,18 @@ List<Long> startTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam1())) .filter(i->Objects.nonNull(i.getParam1())&&i.getParam1().indexOf(today)>=0) .map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam1()).getTime()).collect(Collectors.toList()); - Long startTime = Collections.min(startTimeList); + Long startTime = null ; + if(CollectionUtils.isNotEmpty(startTimeList)){ + startTime = Collections.min(startTimeList); + } //鑾峰彇缁撴潫鏃堕棿 List<Long> endTimeList = platformLogList.stream() .filter(i->Objects.nonNull(i.getParam2())&&i.getParam2().indexOf(today)>=0) .map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam2()).getTime()).collect(Collectors.toList()); - Long endTime = Collections.max(endTimeList); + Long endTime = null ; + if(CollectionUtils.isNotEmpty(endTimeList)){ + endTime = Collections.max(endTimeList); + } if(Objects.isNull(startTime) || Objects.isNull(endTime) || (startTime>=endTime)){ return BigDecimal.ZERO; -- Gitblit v1.9.3