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("同步成功"); } } 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; }*/ } 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); 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; } 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()); 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); } } } 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()) 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;