Преглед изворни кода

fix 企业微信端绑定订单信息;获取GPT邮箱验证码

zoujiajian пре 1 година
родитељ
комит
a18263dc58

+ 3 - 0
netflix-common/src/main/java/com/cyksj/common/util/TicketCodeCommonUtil.java

@@ -88,6 +88,9 @@ public class TicketCodeCommonUtil {
 			str = "X-OriginatorOrg: sct-15-20-7719-20-msonline-outlook-80345.templateTenant";
 			if (!body.contains(str)) {
 				str = "ChatGPT Log-in Code";
+				if (!body.contains(str)) {
+					str = "Enter this temporary verification code";
+				}
 			}
 		}
 		return str;

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/kf/CorpKfUserInfo.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.kf;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CorpKfUserInfo
+ * 创建者: JavaZou
+ * 创建时间:2025/1/2 16:14
+ */
+@Getter
+@Setter
+public class CorpKfUserInfo {
+	@JsonProperty("external_userid")
+	private String externalUserid;
+
+	private String nickname;
+
+	private String avatar;
+
+	private String unionid;
+
+	private Integer gender;
+}

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/corp/WxCorpOps.java

@@ -2,6 +2,7 @@ package com.cyksj.service.corp;
 
 import cn.hutool.json.JSONObject;
 import com.cyksj.dto.CorpOauth2UserInfo;
+import com.cyksj.model.kf.CorpKfUserInfo;
 import com.cyksj.model.request.corp.CorpFollowContact;
 import com.cyksj.model.request.corp.CorpGroupConfig;
 import com.cyksj.model.request.corp.CorpMsgTemplate;
@@ -188,4 +189,6 @@ public interface WxCorpOps {
 	 * 获取会话内容存档开启成员列表
 	 */
 	List<String> getPermitUserList(String corpId, String type) throws Exception;
+
+	CorpKfUserInfo getCorpKfUserInfo(String externalUserid) throws Exception;
 }

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpEventActionServiceImpl.java

@@ -157,7 +157,7 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 		CorpExternalContactInfo externalContact = wxCorpOps.getExternalContact(corpId, externalUserId);
 		ExternalContact corpUserInfo = externalContact.getExternalContact();
 		if (corpUserInfo == null) {
-			return null;
+			throw BusinessRuntimeException.getInstance("暂无客服成员关系");
 		}
 
 

+ 28 - 9
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpUserServiceImpl.java

@@ -5,19 +5,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.config.corp.WeChatCorpFactory;
-import com.cyksj.mapper.AddressMapper;
-import com.cyksj.mapper.OrderDonMapper;
-import com.cyksj.mapper.SpotifyUserSelfServiceRecordMapper;
-import com.cyksj.mapper.UserIdentityMapper;
-import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.*;
 import com.cyksj.mapper.corp.CorpUserAuthMapper;
 import com.cyksj.mapper.corp.CorpUserMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
 import com.cyksj.model.entity.*;
+import com.cyksj.model.kf.CorpKfUserInfo;
 import com.cyksj.model.request.corp.CorpCommonReq;
 import com.cyksj.model.request.corp.CorpXmlMessage;
 import com.cyksj.model.views.YHLXUserDetailView;
 import com.cyksj.service.corp.CorpUserService;
+import com.cyksj.service.corp.WxCorpOps;
 import com.cyksj.service.corp.msg.CorpEventActionService;
 import com.cyksj.service.user.UserBindRelationService;
 import com.ejlchina.searcher.BeanSearcher;
@@ -65,6 +63,8 @@ public class CorpUserServiceImpl implements CorpUserService {
 
 	private final UserIdentityMapper userIdentityMapper;
 
+	private final WxCorpOps wxCorpOps;
+
 	@Override
 	public YHLXUserDetailView getUserDetailView(String externalUserid, String corpId) throws Exception {
 		CorpUser corpUser = getExternalUserId(corpId, externalUserid);
@@ -269,10 +269,29 @@ public class CorpUserServiceImpl implements CorpUserService {
 			CorpXmlMessage message = new CorpXmlMessage();
 			message.setToUserName(corpId);
 			message.setExternalUserId(externalUserid);
-			corpEventActionService.addExternalContact(message, null);
-			corpUserAuth = corpUserAuthMapper.selectOne(corpUserAuthWrapper);
-			if (corpUserAuth != null) {
-				corpUser = corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class).eq(CorpUser::getId, corpUserAuth.getCorpUserId()).last("limit 1"));
+			try {
+				corpEventActionService.addExternalContact(message, null);
+				corpUserAuth = corpUserAuthMapper.selectOne(corpUserAuthWrapper);
+				if (corpUserAuth != null) {
+					corpUser = corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class).eq(CorpUser::getId, corpUserAuth.getCorpUserId()).last("limit 1"));
+				}
+			} catch (Exception e) {
+				if (corpUser == null) {
+					corpUser = new CorpUser();
+					CorpKfUserInfo corpKfUserInfo = wxCorpOps.getCorpKfUserInfo(externalUserid);
+					corpUser.setUnionid(corpKfUserInfo.getUnionid());
+					corpUser.setName(corpKfUserInfo.getNickname());
+					corpUser.setGender(corpKfUserInfo.getGender());
+					corpUser.setAvatar(corpKfUserInfo.getAvatar());
+					corpUser.setType(1);
+					corpUserMapper.insert(corpUser);
+
+					corpUserAuth = new CorpUserAuth();
+					corpUserAuth.setWxCorpId(wxCorpApp.getId());
+					corpUserAuth.setCorpUserId(corpUser.getId());
+					corpUserAuth.setExternalUserid(corpKfUserInfo.getExternalUserid());
+					corpUserAuthMapper.insert(corpUserAuth);
+				}
 			}
 		} else {
 			corpUser = corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class).eq(CorpUser::getId, corpUserAuth.getCorpUserId()).last("limit 1"));

+ 24 - 0
netflix-service/src/main/java/com/cyksj/service/corp/impl/WxCorpOpsImpl.java

@@ -15,6 +15,7 @@ import com.cyksj.config.corp.YHLXWxCorpConfig;
 import com.cyksj.dto.CorpOauth2UserInfo;
 import com.cyksj.dto.RedisKey;
 import com.cyksj.model.entity.WxCorpApp;
+import com.cyksj.model.kf.CorpKfUserInfo;
 import com.cyksj.model.request.corp.CorpFollowContact;
 import com.cyksj.model.request.corp.CorpGroupConfig;
 import com.cyksj.model.request.corp.CorpMsgTemplate;
@@ -826,4 +827,27 @@ public class WxCorpOpsImpl implements WxCorpOps {
 		}
 		return JSONUtil.parseObj(res.body()).getJSONArray("ids").toList(String.class);
 	}
+
+	@Override
+	public CorpKfUserInfo getCorpKfUserInfo(String externalUserid) throws Exception {
+		String url = "https://qyapi.weixin.qq.com/cgi-bin/kf/customer/batchget?access_token=" + getAccessToken(yhlXWxCorpConfig.getCorpId());
+		JSONObject params = new JSONObject();
+		params.putOpt("external_userid_list", List.of(externalUserid));
+		HttpResponse<String> res =
+				J11HttpC.custom()
+						.ofPost()
+						.url(url)
+						.headers(J11HttpC.ReqType.raw_json)
+						.body(HttpRequest.BodyPublishers.ofString(Jsons.toJson(params), IoKit.Charsets.UTF_8.getCharset()))
+						.send(HttpResponse.BodyHandlers.ofString());
+		if (200 != res.statusCode()) {
+			throw BusinessRuntimeException.getInstance("客户基础信息: " + res.body());
+		}
+		JSONObject re = Jsons.parseObject(res.body(), JSONObject.class);
+		if (re.getInt("errcode") != 0) {
+			throw BusinessRuntimeException.getInstance("客户基础信息错误: " + re.getStr("errmsg"));
+		}
+		List<CorpKfUserInfo> customerList = re.getJSONArray("customer_list").toList(CorpKfUserInfo.class);
+		return customerList.isEmpty() ? null : customerList.get(0);
+	}
 }