Kaynağa Gözat

fix 添加企业微信欢迎语

zoujiajian 3 yıl önce
ebeveyn
işleme
7d0fd55f3f

+ 2 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -45,4 +45,6 @@ public interface Constant {
 	 * 特定订单有效时间
 	 */
 	String LOTTERY_SPECIFIC_ORDER_EFFECTIVE_TIME = "lottery_specific_order_effective_time";
+
+	String CORP_POPULARIZE_CUSTOMER = "corp_popularize_customer";
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpNewUserWelcomeMsgMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.corp;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.CorpNewUserWelcomeMsg;
+
+/*
+ *项目名: netflix
+ *文件名: CorpNewUserWelcomeMsgMapper
+ *创建者: JavaZou
+ *创建时间:2023/2/27 16:43
+ */
+public interface CorpNewUserWelcomeMsgMapper extends BaseMapper<CorpNewUserWelcomeMsg> {
+}

+ 81 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CorpNewUserWelcomeMsg.java

@@ -0,0 +1,81 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 企业新用户欢迎语
+ * </p>
+ *
+ * @author zoujiajian
+ * @since 2022-06-16
+ */
+@Data
+@NoArgsConstructor
+public class CorpNewUserWelcomeMsg extends BaseEntity {
+
+	@TableId(value = "id", type = IdType.AUTO)
+	private Long id;
+
+	/**
+	 * 欢迎语
+	 */
+	@NotBlank(message = "欢迎语不能为空")
+	private String text;
+
+	/**
+	 * 企业微信id
+	 */
+	@NotNull(message = "企业微信id为空")
+	private String corpId;
+
+	/**
+	 * 企业成员id
+	 */
+	@JsonIgnore
+	private String followId;
+
+	/**
+	 * 是否默认使用(true是,false否)
+	 */
+	@TableField("isDefault")
+	private Boolean isDefault = false;
+
+	/**
+	 * 是否使用链接
+	 */
+	private Boolean isLink = false;
+
+	/**
+	 * 链接标题
+	 */
+	private String linkTitle;
+
+	/**
+	 * 链接描述
+	 */
+	private String linkDesc;
+
+	/**
+	 * 链接封面
+	 */
+	@TableField("link_picurl")
+	private String linkPicUrl;
+
+	/**
+	 * 链接项目地址
+	 */
+	private String linkUrl;
+
+	public CorpNewUserWelcomeMsg(String text) {
+		this.text = text;
+	}
+}

+ 50 - 0
netflix-dao/src/main/java/com/cyksj/model/request/corp/Attachments.java

@@ -0,0 +1,50 @@
+package com.cyksj.model.request.corp;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/*
+ *项目名: netflix
+ *文件名: LinkTitle
+ *创建者: JavaZou
+ *创建时间:2022/6/20 16:01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Attachments implements Serializable {
+	private String msgtype;
+
+	private Link link;
+
+	private static final long serialVersionUID = 3529000560142115378L;
+
+	@Data
+	@AllArgsConstructor
+	@NoArgsConstructor
+	public static class Link implements Serializable{
+		private static final long serialVersionUID = -1036758941402144780L;
+
+		/**
+		 * 标题
+		 */
+		private String title;
+		/**
+		 * 封面
+		 */
+		private String picurl;
+
+		/**
+		 * 描述
+		 */
+		private String desc;
+
+		/**
+		 * 项目地址
+		 */
+		private String url;
+	}
+}

+ 15 - 0
netflix-dao/src/main/java/com/cyksj/model/request/corp/Text.java

@@ -0,0 +1,15 @@
+package com.cyksj.model.request.corp;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author chan
+ * @date 2022-03-16 下午2:37
+ */
+@Data
+public class Text implements Serializable {
+  private static final long serialVersionUID = 6608288753719551600L;
+  private String content;
+}

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

@@ -4,14 +4,19 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
+import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
+import com.cyksj.common.util.IoKit;
+import com.cyksj.common.util.J11HttpC;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.config.corp.WeChatCorpFactory;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.corp.*;
 import com.cyksj.model.entity.*;
+import com.cyksj.model.request.corp.Attachments;
 import com.cyksj.model.request.corp.CorpXmlMessage;
 import com.cyksj.model.request.corp.CorpXmlOutMessage;
 import com.cyksj.model.response.CorpExternalContactInfo;
@@ -28,6 +33,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -67,6 +74,12 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 
 	private final MarketFrontService marketFrontService;
 
+	private final CorpNewUserWelcomeMsgMapper corpNewUserWelcomeMsgMapper;
+
+	private final GlobalThreadPoolTaskExecutor THREAD_POOL;
+
+	private static final String DEFAULT_MSG = "您好,欢迎加入银河录像局";
+
 	/**
 	 * 客户添加成员
 	 */
@@ -127,7 +140,8 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 		followedUsers.stream()
 				.filter((followedUser) -> !relationFollowUserIds.contains(followedUser.getUserId()))
 				.forEach(followedUser -> updateUserFollowRelation(followedUser, corpUserInfo.getExternalUserId(), wxCorpApp.getId()));
-
+		//发送自定义欢迎语
+		sendDesignWelcomeMsg(corpId, welcomeCode, userId, corpUserInfo.getCorpName());
 		return null;
 	}
 
@@ -318,4 +332,47 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 			});
 		});
 	}
+
+	public void sendDesignWelcomeMsg(String corpId, String welcomeCode, String followId, String corpUserName) {
+		//新用户欢迎语
+		if (StrUtil.isNotEmpty(welcomeCode)) {
+			THREAD_POOL.execute(() -> {
+				SysConfig corpConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
+						.eq(SysConfig::getSysKey, Constant.CORP_POPULARIZE_CUSTOMER)
+						.eq(SysConfig::getSysValue, followId)
+						.last("limit 1"));
+				Optional.ofNullable(corpConfig).ifPresent(config -> {
+					JSONObject params = new JSONObject();
+					CorpNewUserWelcomeMsg corpNewUserWelcomeMsg = Optional.ofNullable(corpNewUserWelcomeMsgMapper.selectOne(Wrappers.lambdaQuery(CorpNewUserWelcomeMsg.class).eq(CorpNewUserWelcomeMsg::getIsDefault, true).eq(CorpNewUserWelcomeMsg::getCorpId, corpId).eq(CorpNewUserWelcomeMsg::getFollowId, followId).last("limit 1"))).orElseGet(() -> new CorpNewUserWelcomeMsg(DEFAULT_MSG));
+					HashMap<String, Object> text = new HashMap<>(1);
+					text.put("content", corpNewUserWelcomeMsg.getText());
+					params.putOpt("welcome_code", welcomeCode);
+					params.putOpt("text", text);
+					if (corpNewUserWelcomeMsg.getIsLink()) {
+						List<Attachments> attachments = new ArrayList<>();
+						Attachments link = new Attachments("link", new Attachments.Link(corpNewUserWelcomeMsg.getLinkTitle(), corpNewUserWelcomeMsg.getLinkPicUrl(), corpNewUserWelcomeMsg.getLinkDesc(), corpNewUserWelcomeMsg.getLinkUrl()));
+						attachments.add(link);
+						params.putOpt("attachments", attachments);
+					}
+					HttpResponse<byte[]> res = null;
+					try {
+						res = J11HttpC.custom()
+								.ofPost()
+								.url(String.format("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/send_welcome_msg?access_token=%s", wxCorpOps.getAccessToken(corpId)))
+								.body(HttpRequest.BodyPublishers.ofString(params.toString(), IoKit.Charsets.UTF_8.getCharset()))
+								.headers(J11HttpC.ReqType.raw_json)
+								.send(HttpResponse.BodyHandlers.ofByteArray());
+						JSONObject jsonObject = Jsons.parseObject(res.body(), JSONObject.class);
+						if (jsonObject.getInt("errcode") != 0) {
+							log.info("{}成员,发送欢迎语至客户{}失败,msg:{}", followId, corpUserName, jsonObject.get("errmsg"));
+							return;
+						}
+						log.info("{}成员,发送欢迎语至客户{}成功", followId, corpUserName);
+					} catch (Exception e) {
+						log.info("发送欢迎语过程异常,{}", e);
+					}
+				});
+			});
+		}
+	}
 }