Explorar o código

欢迎语模板功能;获客链接列表;加粉列表

zoujiajian %!s(int64=2) %!d(string=hai) anos
pai
achega
ac86f82ba0
Modificáronse 18 ficheiros con 545 adicións e 29 borrados
  1. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpWelcomeTemplateMapper.java
  2. 10 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpCustomerAcquisitionLink.java
  3. 5 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpFollowActiveCode.java
  4. 72 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpWelcomeTemplate.java
  5. 2 1
      netflix-dao/src/main/java/com/cyksj/model/entity/CouponUser.java
  6. 2 1
      netflix-dao/src/main/java/com/cyksj/model/response/corp/CorpUserInfo.java
  7. 66 0
      netflix-dao/src/main/java/com/cyksj/model/views/CorpCustomerAcquisitionLinkPopularizeView.java
  8. 6 0
      netflix-dao/src/main/java/com/cyksj/model/views/CorpFollowActiveCodeView.java
  9. 14 0
      netflix-service/src/main/java/com/cyksj/service/corp/CorpWelcomeTemplateService.java
  10. 56 20
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpEventActionServiceImpl.java
  11. 44 0
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpWelcomeTemplateServiceImpl.java
  12. 2 0
      netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java
  13. 4 0
      netflix-service/src/main/java/com/cyksj/service/mange/coupon/impl/CouponCommonServiceImpl.java
  14. 24 2
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java
  15. 19 4
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CmsCorpFollowActiveCodeController.java
  16. 53 1
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpCustomerAcquistionLinkController.java
  17. 19 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpCustomerAcquistionLinkPopularizeController.java
  18. 134 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpWelcomeTemplateController.java

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.corp;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.CorpWelcomeTemplate;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CorpWelcomeTemplateMapper
+ * 创建者: JavaZou
+ * 创建时间:2023/12/5 18:21
+ */
+public interface CorpWelcomeTemplateMapper extends BaseMapper<CorpWelcomeTemplate> {
+}

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CorpCustomerAcquisitionLink.java

@@ -64,4 +64,14 @@ public class CorpCustomerAcquisitionLink extends BaseEntity {
     @DbIgnore
     private List<String> tagStrList;
 
+    /**
+     * 模板id
+     */
+    private Long msgId;
+
+
+    @TableField(exist = false)
+    @DbIgnore
+    private String msgName;
+
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CorpFollowActiveCode.java

@@ -34,6 +34,11 @@ public class CorpFollowActiveCode extends BaseEntity{
 	 */
 	private String followStr;
 
+	/**
+	 * 欢迎语模板id
+	 */
+	private Long msgId;
+
 	/**
 	 * 欢迎语内容 文本、附件
 	 */

+ 72 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CorpWelcomeTemplate.java

@@ -0,0 +1,72 @@
+package com.cyksj.model.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.cyksj.model.request.corp.Attachments;
+import com.ejlchina.searcher.bean.DbIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CorpWelcomeTemplate
+ * 创建者: JavaZou
+ * 创建时间:2023/12/5 18:19
+ */
+@Getter
+@Setter
+public class CorpWelcomeTemplate extends BaseEntity {
+	@NotEmpty(message = "模板名不为空")
+	private String name;
+
+	@NotNull
+	private Integer type;
+
+	/**
+	 * 群发文本内容
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String text;
+
+	@TableField(exist = false)
+	@DbIgnore
+	private List<Attachments> attachments;
+
+	/**
+	 * 附件字符串
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String attachmentsStr;
+
+	/**
+	 * 优惠券id
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Long couponId;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private String couponName;
+
+	private Boolean deleted;
+
+	@Getter
+	public enum Type {
+		natural("自然流量"), activeCode("渠道活码"), follow("加分链接");
+
+		String desc;
+
+		Type(String desc) {
+			this.desc = desc;
+		}
+
+		public static Boolean checkType(Integer type) {
+			return Arrays.stream(Type.values()).filter(t -> t.ordinal() == type.intValue()).findAny().isPresent();
+		}
+	}
+}

+ 2 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/CouponUser.java

@@ -70,7 +70,8 @@ public class CouponUser extends BaseEntity {
 		corp_bulk_task("corp_bulk_task", "企业微信群发任务"),
 		channel_popularize("channel_popularize", "渠道推广"),
 		new_welfare("new_welfare", "新人福利"),
-		corp_active_code("corp_active_code", "企业微信活码")
+		corp_active_code("corp_active_code", "企业微信活码"),
+		customer_link("customer_link", "获客链接")
 		;
 		private String channel;
 		private String desc;

+ 2 - 1
netflix-dao/src/main/java/com/cyksj/model/response/corp/CorpUserInfo.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author chan
@@ -64,6 +65,6 @@ public class CorpUserInfo implements Serializable {
      */
     private Integer status;
 
-
+    private List<Integer> department;
 
 }

+ 66 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CorpCustomerAcquisitionLinkPopularizeView.java

@@ -0,0 +1,66 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CorpCustomerAcquisitionLinkPopularizeView
+ * 创建者: JavaZou
+ * 创建时间:2023/12/8 14:39
+ */
+@Getter
+@Setter
+@SearchBean(tables = "corp_customer_acquisition_link_popularize cap left join channel_popularize cp on cp.id = cap.popularize_id" +
+		" left join channel c on c.id = cp.channel_id")
+public class CorpCustomerAcquisitionLinkPopularizeView {
+
+	@DbField("cap.id")
+	private Long id;
+
+	@DbField("cap.popularize_id")
+	private Long popularizeId;
+
+	@DbField("cp.name")
+	private String popularizeName;
+
+	@DbField("cp.channel_id")
+	private Long channelId;
+
+	@DbField("c.name")
+	private String channelName;
+
+	@DbField("cp.customer_acquistion_link_id")
+	private Long customerAcquistionLinkId;
+
+	/**
+	 * 1.加粉 2.深度回传
+	 */
+	@DbField("cap.type")
+	private Integer type;
+
+	/**
+	 * 回传事件
+	 */
+	@DbField("cap.event")
+	private String event;
+
+	/**
+	 * 前置回传
+	 */
+	@DbField("cap.add_event")
+	private String addEvent;
+
+	/**
+	 * 监测时间
+	 */
+	@DbField("cap.time")
+	private Long time;
+
+	@DbField("cap.created_time")
+	private Date createdTime;
+}

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CorpFollowActiveCodeView.java

@@ -105,6 +105,12 @@ public class CorpFollowActiveCodeView {
 	@DbIgnore
 	private BigDecimal orderMoney = BigDecimal.ZERO;
 
+	@DbField("cfa.msg_id")
+	private Long msgId;
+
+	@DbIgnore
+	private String msgName;
+
 	@DbField("cfa.created_time")
 	private Date createdTime;
 }

+ 14 - 0
netflix-service/src/main/java/com/cyksj/service/corp/CorpWelcomeTemplateService.java

@@ -0,0 +1,14 @@
+package com.cyksj.service.corp;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.CorpWelcomeTemplate;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CorpWelcomeTemplateService
+ * 创建者: JavaZou
+ * 创建时间:2023/12/5 18:21
+ */
+public interface CorpWelcomeTemplateService extends IService<CorpWelcomeTemplate> {
+	void saveOrUpdateTemplate(CorpWelcomeTemplate template) throws Exception;
+}

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

@@ -131,6 +131,8 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 
 	private final OrderDonPostService orderDonPostService;
 
+	private final CorpWelcomeTemplateMapper corpWelcomeTemplateMapper;
+
 	private static final String DEFAULT_MSG = "您好,欢迎加入银河录像局";
 
 	/**
@@ -186,8 +188,8 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 		});
 
 		//如果是该客服添加用户,代表通过巨量平台 添加用户.执行广告回传.
-		if(userId.equals("yami")){
-			THREAD_POOL.execute(()->{
+		if (userId != null && userId.equals("yami")) {
+			THREAD_POOL.execute(() -> {
 				oceanengineService.monitorAddCorpPost();
 			});
 		}
@@ -684,22 +686,16 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 					if (corpUser.getId() == null) {
 						corpUser.setAcId(acId);
 					}
-					String welcomeContent = corpFollowActiveCode.getText();
-					String attachmentsStr = corpFollowActiveCode.getAttachmentsStr();
-					//发送对应欢迎语
-					if (StrUtil.isNotBlank(welcomeContent) && StrUtil.isNotBlank(attachmentsStr)) {
-						THREAD_POOL.execute(() -> {
-							sendCorpFollowActiveCode(message, welcomeContent, attachmentsStr);
-						});
+					//欢迎语模板id
+					Long msgId = corpFollowActiveCode.getMsgId();
+					sendWelcomeMsg(msgId, message);
+					try {
+						//对客户进行标记
+						markAddUserTag(corpFollowActiveCode.getMarkTag(), message);
+						state = corpFollowActiveCode.getMarkTag();
+					} catch (Exception e) {
 					}
 				}
-				try {
-					//对客户进行标记
-					markAddUserTag(corpFollowActiveCode.getMarkTag(), message);
-					state = corpFollowActiveCode.getMarkTag();
-				} catch (Exception e) {
-				}
-
 			}
 		}
 
@@ -707,7 +703,7 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 		if(StrUtil.isNotBlank(message.getState()) && message.getState().contains(Constant.ACQUISTION_LINK_STATE_KEY)){
 			String customer = message.getState().replaceAll("customer_", "");
 			THREAD_POOL.execute(()->{
-				saveAcqusitionCallback(customer, corpUser, message.getExternalUserId(), message.getUserId());
+				saveAcqusitionCallback(customer, corpUser, message);
 			});
 		}
 
@@ -793,6 +789,17 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 				}
 			});
 		}
+
+		//若没找到规则的欢迎语 发送默认欢迎语
+		if (StrUtil.isNotEmpty(message.getWelcomeCode())) {
+			CorpWelcomeTemplate corpWelcomeTemplate = corpWelcomeTemplateMapper.selectOne(Wrappers.lambdaQuery(CorpWelcomeTemplate.class)
+					.eq(CorpWelcomeTemplate::getType, 0)
+					.eq(CorpWelcomeTemplate::getDeleted, 1)
+					.last("limit 1"));
+			if (corpWelcomeTemplate != null) {
+				senCorpWelcomeMsg(message, corpWelcomeTemplate.getText(), corpWelcomeTemplate.getAttachmentsStr());
+			}
+		}
 		return corpUser;
 	}
 
@@ -830,9 +837,9 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 	}
 
 	/**
-	 * 发送添加活动活码客服 发送欢迎语
+	 * 发送欢迎语
 	 */
-	public void sendCorpFollowActiveCode(CorpXmlMessage message, String content, String attachmentsStr) {
+	public void senCorpWelcomeMsg(CorpXmlMessage message, String content, String attachmentsStr) {
 		try {
 			String welcomeCode = message.getWelcomeCode();
 			String followId = message.getUserId();
@@ -980,7 +987,9 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 	}
 
 
-	private void saveAcqusitionCallback(String customer, CorpUser corpUser,String externalUserid ,String userId) {
+	private void saveAcqusitionCallback(String customer, CorpUser corpUser,CorpXmlMessage message) {
+		String externalUserid = message.getExternalUserId() ;
+		String userId = message.getUserId();
 		//获客链接
 		Long linkId = customerAcquisitionSaveClickId(customer, corpUser.getUnionid());
 		CorpCustomerAcquisitionLink customerAcquisitionLink = corpCustomerAcquisitionLinkMapper.getByLinkPopularizeId(linkId);
@@ -998,6 +1007,9 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 						wxCorpOps.markTag(externalUserid, userId, tagList.stream().map(CorpTag::getTagId).toArray(String[]::new), null);
 					}
 				}
+				//发送欢迎语
+				Long msgId = customerAcquisitionLink.getMsgId();
+				sendWelcomeMsg(msgId, message);
 			} catch (Exception e) {
 				log.error("处理获客链接解析标签id出错了,内容{},获客链接id: {}", customerAcquisitionLink.getTags(), customerAcquisitionLink.getId());
 			}
@@ -1049,4 +1061,28 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 			throw BusinessRuntimeException.getInstance("加粉回传出错. error:" + StringUtil.getErrorText(e));
 		}
 	}
+
+
+	/**
+	 * 发送欢迎语
+	 * @param msgId 模板id
+	 * @param message
+	 */
+	public void sendWelcomeMsg(Long msgId, CorpXmlMessage message) {
+		if (StrUtil.isEmpty(message.getWelcomeCode())) {
+			return;
+		}
+		CorpWelcomeTemplate corpWelcomeTemplate = corpWelcomeTemplateMapper.selectById(msgId);
+		if (corpWelcomeTemplate != null) {
+			String welcomeContent = corpWelcomeTemplate.getText();
+			String attachmentsStr = corpWelcomeTemplate.getAttachmentsStr();
+			//发送对应欢迎语
+			if (StrUtil.isNotBlank(welcomeContent) && StrUtil.isNotBlank(attachmentsStr)) {
+				THREAD_POOL.execute(() -> {
+					message.setWelcomeCode(null);
+					senCorpWelcomeMsg(message, welcomeContent, attachmentsStr);
+				});
+			}
+		}
+	}
 }

+ 44 - 0
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpWelcomeTemplateServiceImpl.java

@@ -0,0 +1,44 @@
+package com.cyksj.service.corp.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.mapper.corp.CorpWelcomeTemplateMapper;
+import com.cyksj.model.entity.CorpWelcomeTemplate;
+import com.cyksj.model.request.corp.Attachments;
+import com.cyksj.service.corp.CorpWelcomeTemplateService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CorpWelcomeTemplateServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2023/12/5 18:22
+ */
+@Service
+@RequiredArgsConstructor
+public class CorpWelcomeTemplateServiceImpl extends ServiceImpl<CorpWelcomeTemplateMapper, CorpWelcomeTemplate> implements CorpWelcomeTemplateService {
+	@Override
+	public void saveOrUpdateTemplate(CorpWelcomeTemplate template) throws Exception {
+		handleParams(template);
+		this.saveOrUpdate(template);
+	}
+
+
+	public void handleParams(CorpWelcomeTemplate template) throws Exception {
+		List<Attachments> attachments = template.getAttachments();
+		if (CollUtil.isNotEmpty(attachments)) {
+			String attachmentsStr = Jsons.toJson(attachments);
+			template.setAttachmentsStr(attachmentsStr);
+		} else {
+			template.setAttachmentsStr(null);
+		}
+		if (!CorpWelcomeTemplate.Type.checkType(template.getType())) {
+			throw BusinessRuntimeException.getInstance("请选择正确的类型");
+		}
+	}
+}

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java

@@ -85,6 +85,7 @@ public class DistributeServiceImpl implements DistributeService {
 		UserDistribute userDistribute = new UserDistribute();
 		userDistribute.setUserId(userDistributeReq.getUserId());
 		userDistribute.setRemark(userDistributeReq.getRemark());
+		userDistribute.setType(userDistributeReq.getType());
 		userDistribute.setBusinessId(businessId);
 		if (businessId != null && businessId != 0) {
 			userDistribute.setBusinessBindTime(DateTime.now());
@@ -171,6 +172,7 @@ public class DistributeServiceImpl implements DistributeService {
 			}
 			userDistribute.setBusinessId(businessId);
 		}
+		userDistribute.setType(userDistributeReq.getType());
 		userDistributeMapper.updateById(userDistribute);
 		YhShop yhShop = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
 				.eq(YhShop::getUserId, userDistribute.getUserId())

+ 4 - 0
netflix-service/src/main/java/com/cyksj/service/mange/coupon/impl/CouponCommonServiceImpl.java

@@ -165,6 +165,10 @@ public class CouponCommonServiceImpl implements CouponCommonService {
 
 	@Override
 	public Boolean sendCouponToUser(Long userId, Long couponId, Long couponActiveId, Long recommendId, Long popularizeId, CouponUser.Channel channel) {
+		Coupon coupon = couponMapper.selectById(couponId);
+		if (coupon == null) {
+			return false;
+		}
 		CouponUser couponUser = couponUserMapper.selectOne(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getUserId, userId).eq(CouponUser::getCouponId, couponId).last("limit 1"));
 		if (couponUser == null) {
 			couponUser = new CouponUser();

+ 24 - 2
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -18,8 +18,10 @@ import com.cyksj.common.util.StringUtil;
 import com.cyksj.config.wxlogin.WxOpenPlatYHLXLoginConfig;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.channel.ChannelPopularizeMapper;
+import com.cyksj.mapper.corp.CorpCustomerAcquisitionLinkMapper;
 import com.cyksj.mapper.corp.CorpFollowActiveCodeMapper;
 import com.cyksj.mapper.corp.CorpUserMapper;
+import com.cyksj.mapper.corp.CorpWelcomeTemplateMapper;
 import com.cyksj.mapper.manage.cps.UserDistributePopularizeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
 import com.cyksj.model.dto.*;
@@ -105,6 +107,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	private final CorpFollowActiveCodeMapper corpFollowActiveCodeMapper;
 
+	private final CorpCustomerAcquisitionLinkMapper corpCustomerAcquisitionLinkMapper;
+
+	private final CorpWelcomeTemplateMapper corpWelcomeTemplateMapper;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
 	@Override
@@ -670,14 +676,30 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 	private void relateCorpUserAndSengWelfare(Long fUid, String unionid) {
 		CorpUser corpUser = corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class)
 				.eq(CorpUser::getUnionid, unionid).last("limit 1"));
+		Long msgId = null;
+		CouponUser.Channel channel = null;
 		if (corpUser != null) {
 			corpUser.setUserId(fUid);
 			corpUserMapper.updateById(corpUser);
 			//活码福利
 			if (corpUser.getAcId() != null && corpUser.getAcId() > 0) {
 				CorpFollowActiveCode corpFollowActiveCode = corpFollowActiveCodeMapper.selectById(corpUser.getAcId());
-				if (corpFollowActiveCode != null && corpFollowActiveCode.getCouponId() > 0) {
-					couponCommonService.sendCouponToUser(fUid, corpFollowActiveCode.getCouponId(), 0l, 0l, 0l, CouponUser.Channel.corp_active_code);
+				if (corpFollowActiveCode != null) {
+					msgId = corpFollowActiveCode.getMsgId();
+					channel = CouponUser.Channel.corp_active_code;
+				}
+			}
+			if (corpUser.getCustomerAcquisitionLinkId() != null && corpUser.getCustomerAcquisitionLinkId() > 0) {
+				CorpCustomerAcquisitionLink corpCustomerAcquisitionLink = corpCustomerAcquisitionLinkMapper.selectById(corpUser.getCustomerAcquisitionLinkId());
+				if (corpCustomerAcquisitionLink != null) {
+					msgId = corpCustomerAcquisitionLink.getMsgId();
+					channel = CouponUser.Channel.customer_link;
+				}
+			}
+			if (msgId != null) {
+				CorpWelcomeTemplate corpWelcomeTemplate = corpWelcomeTemplateMapper.selectById(msgId);
+				if (corpWelcomeTemplate != null && corpWelcomeTemplate.getCouponId() != null) {
+					couponCommonService.sendCouponToUser(fUid, corpWelcomeTemplate.getCouponId(), 0l, 0l, 0l, channel);
 				}
 			}
 		}

+ 19 - 4
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CmsCorpFollowActiveCodeController.java

@@ -8,11 +8,9 @@ import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.corp.CorpUserMapper;
+import com.cyksj.mapper.corp.CorpWelcomeTemplateMapper;
 import com.cyksj.mapper.manage.coupon.CouponMapper;
-import com.cyksj.model.entity.CorpFollowActiveCode;
-import com.cyksj.model.entity.CorpFollowActiveCodeClickRecord;
-import com.cyksj.model.entity.CorpFollowServiceRelate;
-import com.cyksj.model.entity.CorpUser;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.request.corp.Attachments;
 import com.cyksj.model.request.corp.CorpFollowContact;
 import com.cyksj.model.views.CorpActiveCodeGoodsOrderView;
@@ -63,8 +61,21 @@ public class CmsCorpFollowActiveCodeController {
 
 	private final RedisService redisService;
 
+	private final CorpWelcomeTemplateMapper corpWelcomeTemplateMapper;
+
 	private final HttpServletRequest request;
 
+	/**
+	 * 获取企业成员列表
+	 */
+	@GetMapping("/get")
+	public Result<SearchResult<CorpFollow>> getCorpFollow() {
+		SearchResult<CorpFollow> search = beanSearcher.search(CorpFollow.class, MapUtils.flatBuilder(request.getParameterMap())
+				.onlySelect(CorpFollow::getId, CorpFollow::getUserid, CorpFollow::getName)
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
 
 	/**
 	 * 生成动态配置
@@ -136,6 +147,10 @@ public class CmsCorpFollowActiveCodeController {
 				}
 			} catch (Exception e) {
 			}
+			CorpWelcomeTemplate corpWelcomeTemplate = corpWelcomeTemplateMapper.selectById(data.getMsgId());
+			if (corpWelcomeTemplate != null) {
+				data.setMsgName(corpWelcomeTemplate.getName());
+			}
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}

+ 53 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpCustomerAcquistionLinkController.java

@@ -1,12 +1,27 @@
 package com.cyksj.web.controller.manage.corp;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.corp.CorpFollowMapper;
+import com.cyksj.mapper.corp.CorpTagMapper;
+import com.cyksj.mapper.corp.CorpWelcomeTemplateMapper;
 import com.cyksj.model.entity.CorpCustomerAcquisitionLink;
+import com.cyksj.model.entity.CorpFollow;
+import com.cyksj.model.entity.CorpTag;
+import com.cyksj.model.entity.CorpWelcomeTemplate;
 import com.cyksj.service.corp.CorpCustomerAcquisitionLinkService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  *  获客助手
  * @author chan
@@ -19,6 +34,16 @@ public class CorpCustomerAcquistionLinkController {
 
     private final CorpCustomerAcquisitionLinkService corpCustomerAcquisitionLinkService;
 
+    private final CorpFollowMapper corpFollowMapper;
+
+    private final CorpTagMapper corpTagMapper;
+
+    private final CorpWelcomeTemplateMapper corpWelcomeTemplateMapper;
+
+    private final BeanSearcher beanSearcher;
+
+    private final HttpServletRequest request;
+
     /**
      * 新增获客助手链接
      */
@@ -41,10 +66,37 @@ public class CorpCustomerAcquistionLinkController {
     /**
      * 删除获客助手链接
      */
-    @PutMapping("/{id}")
+    @DeleteMapping("/{id}")
     public Result<String> up(@PathVariable Long id) throws Exception {
         corpCustomerAcquisitionLinkService.del(id);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 获取获客助手链接
+     */
+    @GetMapping("/get")
+    public Result<SearchResult<CorpCustomerAcquisitionLink>> get() throws Exception {
+        SearchResult<CorpCustomerAcquisitionLink> search = beanSearcher.search(CorpCustomerAcquisitionLink.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+
+        search.getDataList().forEach(e->{
+            try {
+                List<String> userStrList = corpFollowMapper.selectList(Wrappers.lambdaQuery(CorpFollow.class)
+                        .in(CorpFollow::getUserid, Jsons.parseList(e.getUserList(),String.class))).stream().map(CorpFollow::getName).collect(Collectors.toList());
+                e.setUserStrList(userStrList);
+
+                List<String> tagStrList = corpTagMapper.selectList(Wrappers.lambdaQuery(CorpTag.class)
+                        .in(CorpTag::getId, Jsons.parseList(e.getTags(),Long.class))).stream().map(CorpTag::getName).collect(Collectors.toList());
+                e.setTagStrList(tagStrList);
+            } catch (Exception ex) {
+            }
+
+            CorpWelcomeTemplate corpWelcomeTemplate = corpWelcomeTemplateMapper.selectById(e.getMsgId());
+            if (corpWelcomeTemplate != null) {
+                e.setMsgName(corpWelcomeTemplate.getName());
+            }
+        });
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
 }

+ 19 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpCustomerAcquistionLinkPopularizeController.java

@@ -5,10 +5,16 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.model.entity.CorpCustomerAcquisitionLinkPopularize;
+import com.cyksj.model.views.CorpCustomerAcquisitionLinkPopularizeView;
 import com.cyksj.service.corp.CorpCustomerAcquisitionLinkPopularizeService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  *  获客助手
  * @author chan
@@ -22,6 +28,10 @@ public class CorpCustomerAcquistionLinkPopularizeController {
 
     private final CorpCustomerAcquisitionLinkPopularizeService corpCustomerAcquisitionLinkPopularizeService;
 
+    private final BeanSearcher beanSearcher;
+
+    private final HttpServletRequest request;
+
     /**
      * 创建加粉链接
      */
@@ -66,5 +76,14 @@ public class CorpCustomerAcquistionLinkPopularizeController {
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 加粉链接列表
+     */
+    @GetMapping("/get")
+    public Result<SearchResult<CorpCustomerAcquisitionLinkPopularizeView>> get(){
+        SearchResult<CorpCustomerAcquisitionLinkPopularizeView> search = beanSearcher.search(CorpCustomerAcquisitionLinkPopularizeView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
 
 }

+ 134 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpWelcomeTemplateController.java

@@ -0,0 +1,134 @@
+package com.cyksj.web.controller.manage.corp;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.corp.CorpCustomerAcquisitionLinkMapper;
+import com.cyksj.mapper.corp.CorpFollowActiveCodeMapper;
+import com.cyksj.mapper.manage.coupon.CouponMapper;
+import com.cyksj.model.entity.CorpCustomerAcquisitionLink;
+import com.cyksj.model.entity.CorpFollowActiveCode;
+import com.cyksj.model.entity.CorpWelcomeTemplate;
+import com.cyksj.model.request.corp.Attachments;
+import com.cyksj.service.corp.CorpWelcomeTemplateService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * admin/企业微信/欢迎语模板
+ * 项目名: yhlxj
+ * 文件名: CorpWelcomeTemplateController
+ * 创建者: JavaZou
+ * 创建时间:2023/12/5 18:23
+ */
+@RestController
+@RequestMapping("/manage/corp/welcome")
+@RequiredArgsConstructor
+public class CorpWelcomeTemplateController {
+
+	private final CorpWelcomeTemplateService corpWelcomeTemplateService;
+
+	private final CouponMapper couponMapper;
+
+	private final CorpFollowActiveCodeMapper corpFollowActiveCodeMapper;
+
+	private final CorpCustomerAcquisitionLinkMapper acquisitionLinkMapper;
+
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	/**
+	 * 新增欢迎语 模板
+	 */
+	@PostMapping("/post")
+	public Result<String> post(@RequestBody @Validated CorpWelcomeTemplate template) throws Exception {
+		corpWelcomeTemplateService.saveOrUpdateTemplate(template);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 删除欢迎语 模板
+	 */
+	@DeleteMapping("/delete/{id}")
+	public Result<String> deleteById(@PathVariable Long id) {
+		CorpWelcomeTemplate byId = corpWelcomeTemplateService.getById(id);
+		Integer count = null;
+		if (byId.getType() == 0) {
+			int count1 = corpWelcomeTemplateService.count(Wrappers.lambdaQuery(CorpWelcomeTemplate.class)
+					.eq(CorpWelcomeTemplate::getType, 0).eq(CorpWelcomeTemplate::getDeleted, 1));
+			if (count1 == 0) {
+				throw BusinessRuntimeException.getInstance("自然渠道欢迎语默认存在一条");
+			}
+		} else if (byId.getType() == 1) {
+			count = corpFollowActiveCodeMapper.selectCount(Wrappers.lambdaQuery(CorpFollowActiveCode.class)
+					.eq(CorpFollowActiveCode::getMsgId, byId.getId()));
+		} else if (byId.getType() == 2) {
+			count = acquisitionLinkMapper.selectCount(Wrappers.lambdaQuery(CorpCustomerAcquisitionLink.class)
+					.eq(CorpCustomerAcquisitionLink::getMsgId, byId.getId()));
+		}
+		if (count != null && count > 0) {
+			throw BusinessRuntimeException.getInstance("该欢迎语已使用");
+		}
+		if (byId != null) {
+			byId.setDeleted(false);
+			corpWelcomeTemplateService.updateById(byId);
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 修改欢迎语 模板
+	 */
+	@PutMapping("/update")
+	public Result<String> update(@RequestBody CorpWelcomeTemplate template) throws Exception {
+		corpWelcomeTemplateService.saveOrUpdateTemplate(template);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
+	/**
+	 * 欢迎语模板列表
+	 */
+	@GetMapping("/get")
+	public Result<SearchResult<CorpWelcomeTemplate>> get() {
+		SearchResult<CorpWelcomeTemplate> search = beanSearcher.search(CorpWelcomeTemplate.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(CorpWelcomeTemplate::getDeleted, 1)
+				.build());
+		search.getDataList().forEach(e -> {
+			String attachmentsStr = e.getAttachmentsStr();
+			if (StrUtil.isNotEmpty(attachmentsStr)) {
+				try {
+					e.setAttachments(Jsons.parseList(attachmentsStr, Attachments.class));
+				} catch (Exception ex) {
+				}
+			}
+			if (e.getCouponId() != null) {
+				Optional.ofNullable(couponMapper.selectById(e.getCouponId())).ifPresent(c -> e.setCouponName(c.getName()));
+			}
+		});
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+	/**
+	 * 不分页 欢迎语模板
+	 */
+	@GetMapping("/get/all")
+	public Result<List<CorpWelcomeTemplate>> getAll() {
+		List<CorpWelcomeTemplate> list = beanSearcher.searchAll(CorpWelcomeTemplate.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(CorpWelcomeTemplate::getDeleted, 1)
+				.onlySelect(CorpWelcomeTemplate::getId, CorpWelcomeTemplate::getType, CorpWelcomeTemplate::getName).build());
+
+		return GatewayResponse.SUCCESS.newBuilder().toResult(list);
+	}
+}