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