Просмотр исходного кода

Merge branch 'master' into dev

# Conflicts:
#	netflix-service/src/main/java/com/cyksj/redis/RedisService.java
zoujiajian 2 лет назад
Родитель
Сommit
0f3f82c573
26 измененных файлов с 231 добавлено и 75 удалено
  1. 2 0
      netflix-dao/src/main/java/com/cyksj/model/entity/Account.java
  2. 8 0
      netflix-dao/src/main/java/com/cyksj/model/entity/Channel.java
  3. 1 1
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpFollowActiveCode.java
  4. 1 1
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpWelcomeTemplate.java
  5. 1 0
      netflix-dao/src/main/java/com/cyksj/model/entity/YhShop.java
  6. 3 0
      netflix-dao/src/main/java/com/cyksj/model/excel/ExcelImportAccountData.java
  7. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/AccountView.java
  8. 4 0
      netflix-dao/src/main/java/com/cyksj/model/views/ChannelPopularizeView.java
  9. 5 1
      netflix-dao/src/main/java/com/cyksj/model/views/ChannelView.java
  10. 47 0
      netflix-dao/src/main/java/com/cyksj/model/views/CorpCustomerAcquisitionLinkExtraCustomerView.java
  11. 12 8
      netflix-dao/src/main/resources/mapper/StatisticsExportMapper.xml
  12. 1 0
      netflix-service/src/main/java/com/cyksj/redis/RedisService.java
  13. 6 2
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpEventActionServiceImpl.java
  14. 2 2
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpFollowServiceImpl.java
  15. 4 37
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpServiceImpl.java
  16. 11 0
      netflix-service/src/main/java/com/cyksj/service/mange/cms/service/CmsUserService.java
  17. 30 0
      netflix-service/src/main/java/com/cyksj/service/mange/cms/service/impl/CmsUserServiceImpl.java
  18. 7 2
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java
  19. 4 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java
  20. 26 9
      netflix-web/src/main/java/com/cyksj/web/controller/manage/channel/CmsChannelController.java
  21. 12 3
      netflix-web/src/main/java/com/cyksj/web/controller/manage/channel/CmsChannelPopularizeController.java
  22. 6 3
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpWelcomeTemplateController.java
  23. 3 2
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/WxCorpController.java
  24. 0 3
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/shop/YhShopUserController.java
  25. 4 1
      netflix-web/src/main/java/com/cyksj/web/controller/market/LuckyDrawFrontController.java
  26. 28 0
      netflix-web/src/main/java/com/cyksj/web/controller/sys/SysConfigController.java

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/Account.java

@@ -21,6 +21,8 @@ public class Account extends BaseEntity {
 
     private String password;
 
+    private Boolean isMonth;
+
     private Long goodsId;
 
     private String bankCard;

+ 8 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/Channel.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.entity;
 
+import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -9,6 +10,8 @@ import lombok.Setter;
  */
 @Getter
 @Setter
+@SearchBean(tables = "channel c",
+		where = ":condition:")
 public class Channel extends BaseEntity{
 
     /**
@@ -35,4 +38,9 @@ public class Channel extends BaseEntity{
      * 备注
      */
     private String remark;
+
+    /**
+     * 创建人
+     */
+    private String creator;
 }

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

@@ -77,7 +77,7 @@ public class CorpFollowActiveCode extends BaseEntity{
 	 */
 	private String operator;
 
-	private Long couponId;
+	private String couponIds;
 
 	private Boolean deleted;
 }

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

@@ -47,7 +47,7 @@ public class CorpWelcomeTemplate extends BaseEntity {
 	 * 优惠券id
 	 */
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
-	private Long couponId;
+	private String couponIds;
 
 	@DbIgnore
 	@TableField(exist = false)

+ 1 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/YhShop.java

@@ -58,6 +58,7 @@ public class YhShop extends BaseEntity {
 	/**
 	 * 联系方式
 	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String contact;
 
 	/**

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/excel/ExcelImportAccountData.java

@@ -27,4 +27,7 @@ public class ExcelImportAccountData {
 
 	@ExcelProperty("到期时间")
 	private String expiryTime;
+
+	@ExcelProperty("是否月抛")
+	private String isMonth;
 }

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/AccountView.java

@@ -46,6 +46,9 @@ public class AccountView {
     @DbField("a.password")
     private String password;
 
+    @DbField("a.is_month")
+    private Boolean isMonth;
+
     @DbField("a.api_key")
     private String apiKey;
 

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ChannelPopularizeView.java

@@ -17,6 +17,7 @@ import java.util.Date;
 @Setter
 @SearchBean(tables = "channel_popularize cp " +
         " LEFT JOIN channel c on c.id = cp.channel_id "
+        ,where = ":condition:"
         ,groupBy = "cp.id,cp.name,cp.url,cp.modality,cp.pay_method,cp.created_time,cp.update_time"
 )
 public class ChannelPopularizeView {
@@ -36,6 +37,9 @@ public class ChannelPopularizeView {
     @DbField("c.name")
     private String channelName;
 
+    @DbField("c.creator")
+    private String creator;
+
     /**
      * 链接名称
      */

+ 5 - 1
netflix-dao/src/main/java/com/cyksj/model/views/ChannelView.java

@@ -19,7 +19,8 @@ import java.util.Date;
         " LEFT JOIN order_don o on cp.id = o.popularize_id :time: " +
         " LEFT JOIN order_don o1 on o.id = o1.id and o1.`status` not in ('close','noPayment') " +
         " LEFT JOIN order_don o2 on o.id = o2.id and o2.`status` = 'refund' "
-        ,groupBy = " c.id,c.`name`,c.wx_shop_id,c.host,c.zfb_shop_id,c.created_time,c.update_time"
+        , where = ":condition:"
+        , groupBy = " c.id,c.`name`,c.wx_shop_id,c.host,c.zfb_shop_id,c.created_time,c.update_time"
         ,distinct = true
 )
 public class ChannelView {
@@ -81,6 +82,9 @@ public class ChannelView {
     @DbField("c.remark")
     private String remark;
 
+    @DbField("c.creator")
+    private String creator;
+
 
     @DbField("c.created_time")
     private Date createdTime;

+ 47 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CorpCustomerAcquisitionLinkExtraCustomerView.java

@@ -0,0 +1,47 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+
+
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CorpCustomerAcquisitionLinkExtraCustomerView
+ * 创建者: JavaZou
+ * 创建时间:2024/3/5 11:52
+ */
+@Getter
+@Setter
+@SearchBean(tables = "corp_customer_acquisition_link_extra_customer cc inner join corp_customer_acquisition_link cl on cl.id = cc.ac_id",
+		where = "cc.deleted is true")
+public class CorpCustomerAcquisitionLinkExtraCustomerView {
+	@DbField("cc.id")
+	private Long id;
+
+	@DbField("cc.ac_id")
+	private Long acId;
+
+	@DbField("cl.link_name")
+	private String linkName;
+
+	@DbField("cc.service_id")
+	private Integer serviceId;
+
+	@DbIgnore
+	private String serviceName;
+
+	@DbField("cc.start_time")
+	private String startTime;
+
+	@DbField("cc.end_time")
+	private String endTime;
+
+	@DbField("cc.created_time")
+	private Date createdTime;
+}

+ 12 - 8
netflix-dao/src/main/resources/mapper/StatisticsExportMapper.xml

@@ -72,9 +72,10 @@
     </select>
 
     <select id="getMonthAiExNumOfUser" resultType="java.lang.Integer">
-        select count(distinct user_id)
+        select count(distinct buyer_id)
         from `order_don` od
-        where status not in ('close','refund','noPayment')
+        where status not in ('close','noPayment')
+        and (refund_money is null or refund_money != money)
         and created_time BETWEEN #{lastMonth} and #{thisMonth}
         and sku_id in
         <foreach collection="skuIds" item="item" open="(" separator="," close=")">
@@ -83,19 +84,21 @@
     </select>
 
     <select id="getMonthAiExNumOfUserByType" resultType="java.lang.Integer">
-        select count(distinct user_id) from (select user_id
+        select count(distinct buyer_id) from (select buyer_id
         from `order_don` od
-        where status not in ('close','refund','noPayment')
+        where status not in ('close','noPayment')
+        and (refund_money is null or refund_money != money)
         and created_time BETWEEN #{lastMonth} and #{thisMonth}
         and sku_id in
         <foreach collection="skuIds" item="item" open="(" separator="," close=")">
             #{item}
         </foreach>) s where EXISTS(select id
         from order_don
-        where status not in ('close','refund','noPayment')
+        where status not in ('close','noPayment')
+        and (refund_money is null or refund_money != money)
         and created_time between #{thisMonth} and #{nextMonth}
         and order_type = #{type}
-        and user_id = s.user_id
+        and buyer_id = s.buyer_id
         and sku_id in
         <foreach collection="skuIds" item="item" open="(" separator="," close=")">
             #{item}
@@ -104,9 +107,10 @@
     </select>
 
     <select id="getMonthAiRenewNumOfUser" resultType="java.lang.Integer">
-        select count(distinct user_id)
+        select count(distinct buyer_id)
         from `order_don` od
-        where status not in ('close','refund','noPayment')
+        where status not in ('close','noPayment')
+        and (refund_money is null or refund_money != money)
         and created_time BETWEEN #{thisMonth} and #{nextMonth}
         and order_type = 2
         and sku_id in

+ 1 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -669,6 +669,7 @@ public class RedisService {
         DOUBLE_VERIFY_CODE_VIEW_MINUTES_KEY("double_verify_code_view_minutes_key","双重验证码查看同时间段人数限制",60),
 
         WX_INDENT_BIND_KEY("wx_indent_bind:key:", "微信身份授权绑定key", 60 * 60 * 24),
+        EQUIPMENT_USER_SERVICE_RECORD("equipment_user_service_record:", "用户设备客服获取记录key", 60 * 60 * 24),
         INFORMATION_KEY("information_key:", "文章", 30 * 60L),
         ;
 

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

@@ -800,8 +800,12 @@ public class CorpEventActionServiceImpl implements CorpEventActionService {
 				isJoinFixedCustomer(user.getId(), message.getUserId());
 
 				//活码 优惠券发送
-				if (corpFollowActiveCode != null && corpFollowActiveCode.getCouponId() > 0) {
-					couponCommonService.sendCouponToUser(user.getId(), corpFollowActiveCode.getCouponId(), 0l, 0l, 0l, CouponUser.Channel.corp_active_code);
+				if (corpFollowActiveCode != null && StrUtil.isNotBlank(corpFollowActiveCode.getCouponIds())) {
+					try {
+						List<Long> couponIds = Jsons.parseList(corpFollowActiveCode.getCouponIds(), Long.class);
+						couponIds.forEach(couponId -> couponCommonService.sendCouponToUser(user.getId(), couponId, 0l, 0l, 0l, CouponUser.Channel.corp_active_code));
+					} catch (Exception e) {
+					}
 				}
 			}
 			corpUserMapper.insert(corpUser);

+ 2 - 2
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpFollowServiceImpl.java

@@ -156,8 +156,8 @@ public class CorpFollowServiceImpl implements CorpFollowService {
 		} else if (isUpdateAcCode) {
 			corpFollowDynamicConfigService.updateCorpFollowActiveCode(dbActiveCode.getMarkTag(), activeCode.getMarkTag());
 		}
-		if (activeCode.getCouponId() == null) {
-			activeCode.setCouponId(0l);
+		if (StrUtil.isEmpty(activeCode.getCouponIds())) {
+			activeCode.setCouponIds(null);
 		}
 		if (activeCode.getMsgId() == null) {
 			activeCode.setMsgId(0l);

+ 4 - 37
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpServiceImpl.java

@@ -7,7 +7,6 @@ import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
-import com.cyksj.common.util.ListsUtil;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.common.util.Xmls;
 import com.cyksj.common.util.corp.WxCryptUtil;
@@ -201,6 +200,10 @@ public class CorpServiceImpl implements CorpService {
 					e.printStackTrace();
 					return;
 				}
+				if (!userInfo.getDepartment().contains(2)) {
+					System.out.println("不是客服");
+					return;
+				}
 				CorpFollow corpFollow = new CorpFollow();
 				BeanUtil.copyProperties(userInfo, corpFollow);
 				CorpFollow follow = corpFollowMapper.selectOne(Wrappers.lambdaQuery(CorpFollow.class).eq(CorpFollow::getUserid, corpFollow.getUserid()).eq(CorpFollow::getWxCorpId, wxCorpId));
@@ -211,42 +214,6 @@ public class CorpServiceImpl implements CorpService {
 					corpFollow.setId(follow.getId());
 					corpFollowMapper.updateById(corpFollow);
 				}
-
-				List<String> externalList = null;
-				try {
-					externalList = wxCorpOps.listExternalContacts(corpId, userId);
-				} catch (Exception e) {
-					e.printStackTrace();
-					return;
-				}
-				if (externalList.size() > 1000) {
-					List<List<String>> lists = ListsUtil.averageAssign(externalList, 5);
-					for (List<String> list : lists) {
-						THREAD_POOL.execute(() -> {
-							for (String externalUserid : list) {
-								try {
-									CorpXmlMessage message = new CorpXmlMessage();
-									message.setToUserName(corpId);
-									message.setExternalUserId(externalUserid);
-									corpEventActionService.addExternalContact(message, null);
-								} catch (Exception e) {
-									e.printStackTrace();
-								}
-							}
-						});
-					}
-				} else {
-					for (String externalUserid : externalList) {
-						try {
-							CorpXmlMessage message = new CorpXmlMessage();
-							message.setToUserName(corpId);
-							message.setExternalUserId(externalUserid);
-							corpEventActionService.addExternalContact(message, null);
-						} catch (Exception e) {
-							e.printStackTrace();
-						}
-					}
-				}
 			});
 		}
 		return "";

+ 11 - 0
netflix-service/src/main/java/com/cyksj/service/mange/cms/service/CmsUserService.java

@@ -0,0 +1,11 @@
+package com.cyksj.service.mange.cms.service;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CmsUserService
+ * 创建者: JavaZou
+ * 创建时间:2024/3/1 13:49
+ */
+public interface CmsUserService {
+	Boolean isRootRole(long adminId);
+}

+ 30 - 0
netflix-service/src/main/java/com/cyksj/service/mange/cms/service/impl/CmsUserServiceImpl.java

@@ -0,0 +1,30 @@
+package com.cyksj.service.mange.cms.service.impl;
+
+import com.cyksj.model.views.CmsUserVO;
+import com.cyksj.service.mange.cms.service.CmsUserService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: CmsUserServiceImpl
+ * 创建者: JavaZou
+ * 创建时间:2024/3/1 13:50
+ */
+@Service
+@RequiredArgsConstructor
+public class CmsUserServiceImpl implements CmsUserService {
+	private final BeanSearcher beanSearcher;
+
+	@Override
+	public Boolean isRootRole(long adminId) {
+		CmsUserVO root = beanSearcher.searchFirst(CmsUserVO.class, MapUtils.builder()
+				.field(CmsUserVO::getId, adminId)
+				.field(CmsUserVO::getRoleNames, "root").op(Operator.Contain)
+				.build());
+		return root != null ? true : false;
+	}
+}

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

@@ -685,8 +685,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 			}
 			if (msgId != null) {
 				CorpWelcomeTemplate corpWelcomeTemplate = corpWelcomeTemplateMapper.selectById(msgId);
-				if (corpWelcomeTemplate != null && corpWelcomeTemplate.getCouponId() != null) {
-					couponCommonService.sendCouponToUser(fUid, corpWelcomeTemplate.getCouponId(), 0l, 0l, 0l, channel);
+				if (corpWelcomeTemplate != null && StrUtil.isNotBlank(corpWelcomeTemplate.getCouponIds())) {
+					final CouponUser.Channel fChannel = channel;
+					try {
+						List<Long> couponIds = Jsons.parseList(corpWelcomeTemplate.getCouponIds(), Long.class);
+						couponIds.forEach(couponId -> couponCommonService.sendCouponToUser(fUid, couponId, 0l, 0l, 0l, fChannel));
+					} catch (Exception e) {
+					}
 				}
 			}
 

+ 4 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -469,6 +469,10 @@ public class CmsAccountController {
 					at.setGoodsId(goodsId);
 					at.setSkuId(skuId);
 					at.setBankCard(bankCard);
+					String isMonth = data.getIsMonth();
+					if (StrUtil.isNotBlank(isMonth)) {
+						at.setIsMonth(true);
+					}
 					if (StrUtil.isNotBlank(startTime)) {
 						at.setStartTime(DateUtil.parse(startTime));
 					} else {

+ 26 - 9
netflix-web/src/main/java/com/cyksj/web/controller/manage/channel/CmsChannelController.java

@@ -1,5 +1,6 @@
 package com.cyksj.web.controller.manage.channel;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
@@ -8,8 +9,10 @@ import com.cyksj.model.entity.ChannelPopularize;
 import com.cyksj.model.views.ChannelView;
 import com.cyksj.service.mange.channel.ChannelPopularizeService;
 import com.cyksj.service.mange.channel.ChannelService;
+import com.cyksj.service.mange.cms.service.CmsUserService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -35,21 +38,27 @@ public class CmsChannelController {
 
     private final BeanSearcher beanSearcher;
 
+    private final CmsUserService cmsUserService;
+
     private final HttpServletRequest request;
 
     @GetMapping
-    public Result<SearchResult<ChannelView>> get(String startTime, String endTime){
+    public Result<SearchResult<ChannelView>> get(String startTime, String endTime) {
         String timeSql = StringUtils.EMPTY;
-        if(StringUtils.isNotBlank(startTime)){
-            timeSql += String.format(" and o.created_time >= '%s'",startTime);
+        long adminId = StpUtil.getLoginIdAsLong();
+        Boolean isRootRole = cmsUserService.isRootRole(adminId);
+        if (StringUtils.isNotBlank(startTime)) {
+            timeSql += String.format(" and o.created_time >= '%s'", startTime);
+        }
+        if (StringUtils.isNotBlank(endTime)) {
+            timeSql += String.format(" and o.created_time <= '%s'", endTime);
         }
-        if(StringUtils.isNotBlank(endTime)){
-            timeSql += String.format(" and o.created_time <= '%s'" , endTime);
+        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+        if (!isRootRole) {
+            builder.put("condition", String.format("FIND_IN_SET(%s,c.creator) > 0", adminId));
         }
         SearchResult<ChannelView> searchResult = beanSearcher.search(ChannelView.class,
-                MapUtils.flatBuilder(request.getParameterMap())
-                        .put("time",timeSql)
-                        .build());
+                builder.put("time", timeSql).build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(searchResult);
     }
 
@@ -58,7 +67,13 @@ public class CmsChannelController {
      */
     @GetMapping("/get/channelList")
     public Result<List<Channel>> getChannels() {
-        List<Channel> list = beanSearcher.searchAll(Channel.class, MapUtils.flatBuilder(request.getParameterMap())
+        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+        long adminId = StpUtil.getLoginIdAsLong();
+        Boolean isRootRole = cmsUserService.isRootRole(adminId);
+        if (!isRootRole) {
+            builder.put("condition", String.format("FIND_IN_SET(%s,c.creator) > 0", adminId));
+        }
+        List<Channel> list = beanSearcher.searchAll(Channel.class, builder
                 .onlySelect(Channel::getId, Channel::getName)
                 .build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(list);
@@ -66,6 +81,8 @@ public class CmsChannelController {
 
     @PostMapping
     public Result<String> post(@RequestBody Channel channel){
+        Long adminId = StpUtil.getLoginIdAsLong();
+        channel.setCreator(adminId.toString());
         channelService.save(channel);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }

+ 12 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/channel/CmsChannelPopularizeController.java

@@ -1,6 +1,7 @@
 package com.cyksj.web.controller.manage.channel;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
@@ -14,8 +15,10 @@ import com.cyksj.model.entity.*;
 import com.cyksj.model.views.ChannelPopularizeDetailView;
 import com.cyksj.model.views.ChannelPopularizeView;
 import com.cyksj.service.mange.channel.ChannelPopularizeService;
+import com.cyksj.service.mange.cms.service.CmsUserService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -49,12 +52,18 @@ public class CmsChannelPopularizeController {
 
     private final CorpCustomerAcquisitionLinkPopularizeMapper acquisitionLinkPopularizeMapper;
 
+    private final CmsUserService cmsUserService;
+
     @GetMapping
     @SaCheckPermission("promotion:view")
     public Result<SearchResult<ChannelPopularizeView>> get(String startTime, String endTime) {
-        SearchResult<ChannelPopularizeView> searchResult = beanSearcher.search(ChannelPopularizeView.class,
-                MapUtils.flatBuilder(request.getParameterMap())
-                        .build());
+        long adminId = StpUtil.getLoginIdAsLong();
+        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+        Boolean isRootRole = cmsUserService.isRootRole(adminId);
+        if (!isRootRole) {
+            builder.put("condition", String.format("FIND_IN_SET(%s,c.creator) > 0", adminId));
+        }
+        SearchResult<ChannelPopularizeView> searchResult = beanSearcher.search(ChannelPopularizeView.class, builder.build());
         searchResult.getDataList().forEach(data -> {
             Integer emailCount = userMapper.selectCount(Wrappers.lambdaQuery(User.class)
                     .eq(User::getPopularizeId, data.getId())

+ 6 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpWelcomeTemplateController.java

@@ -23,7 +23,6 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * admin/企业微信/欢迎语模板
@@ -114,8 +113,12 @@ public class CorpWelcomeTemplateController {
 				} catch (Exception ex) {
 				}
 			}
-			if (e.getCouponId() != null) {
-				Optional.ofNullable(couponMapper.selectById(e.getCouponId())).ifPresent(c -> e.setCouponName(c.getName()));
+			if (StrUtil.isNotBlank(e.getCouponIds())) {
+				try {
+					List<Long> couponIds = Jsons.parseList(e.getCouponIds(), Long.class);
+					e.setCouponName(couponMapper.getCouponNameByIds(couponIds));
+				} catch (Exception ex) {
+				}
 			}
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);

+ 3 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/WxCorpController.java

@@ -224,8 +224,9 @@ public class WxCorpController {
 	/**
 	 * 初始化企业微信入库信息
 	 */
-	@GetMapping("/dataInit/{corpId}")
-	public Result<String> dataInitByCorpId(@PathVariable("corpId") String corpId) throws Exception {
+	@GetMapping("/dataInit")
+	public Result<String> dataInitByCorpId(String corpId) throws Exception {
+		corpId = Optional.ofNullable(corpId).orElse(yhlxWxCorpConfig.getCorpId());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(corpService.dataInitByCorpId(corpId));
 	}
 

+ 0 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/shop/YhShopUserController.java

@@ -75,9 +75,6 @@ public class YhShopUserController {
 	public Result<String> setShopContact(@RequestBody YhShop yhShop) {
 		long userId = StpYhShopManageUser.getLoginIdAsLong();
 		String contact = yhShop.getContact();
-		if (StrUtil.isEmpty(contact)) {
-			throw BusinessRuntimeException.getInstance("请输入联系方式");
-		}
 		YhShop dbShop = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
 				.eq(YhShop::getUserId, userId).last("limit 1"));
 		if (dbShop == null) {

+ 4 - 1
netflix-web/src/main/java/com/cyksj/web/controller/market/LuckyDrawFrontController.java

@@ -80,7 +80,10 @@ public class LuckyDrawFrontController {
 	 */
 	@GetMapping("/get/record")
 	public Result<SearchResult<LuckyDrawRecordView>> getLuckyDrawRecord(HttpServletRequest request) {
-		SearchResult<LuckyDrawRecordView> search = beanSearcher.search(LuckyDrawRecordView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		long userId = StpUserUtil.getLoginIdAsLong();
+		SearchResult<LuckyDrawRecordView> search = beanSearcher.search(LuckyDrawRecordView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(LuckyDrawRecordView::getUserId, userId)
+				.build());
 		search.getDataList().forEach(data -> {
 			User user = userMapper.selectById(data.getUserId());
 			if (user != null) {

+ 28 - 0
netflix-web/src/main/java/com/cyksj/web/controller/sys/SysConfigController.java

@@ -2,6 +2,8 @@ package com.cyksj.web.controller.sys;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,8 +23,10 @@ import com.cyksj.model.entity.HelpQuestionClassification;
 import com.cyksj.model.entity.SysConfig;
 import com.cyksj.model.entity.SysConfigChangeRecord;
 import com.cyksj.model.views.HelpQuestionClassificationView;
+import com.cyksj.redis.RedisService;
 import com.cyksj.service.sys.SysConfigChangeRecordService;
 import com.cyksj.service.sys.SysConfigService;
+import com.cyksj.web.util.StpUserUtil;
 import com.cyksj.xxljob.XxlJobInfo;
 import com.cyksj.xxljob.XxlJobUtil;
 import com.ejlchina.searcher.BeanSearcher;
@@ -58,6 +62,8 @@ public class SysConfigController {
 
 	private final HttpServletRequest request;
 
+	private final RedisService redisService;
+
 	private final SysConfigChangeRecordService sysConfigChangeRecordService;
 
 	@GetMapping("/get")
@@ -181,4 +187,26 @@ public class SysConfigController {
 				.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
+
+	/**
+	 * 当前用户是否获取了客服
+	 */
+	@GetMapping("/get/service/indx")
+	public Result getServiceIndx() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		long time = DateUtil.beginOfDay(DateTime.now()).getTime();
+		Object re = redisService.get(RedisService.key.EQUIPMENT_USER_SERVICE_RECORD.getEnvName() + time + userId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(re);
+	}
+
+	/**
+	 * 记录用户获取的客服
+	 */
+	@PostMapping("/service/record/{indx}")
+	public Result<Integer> serviceRecord(@PathVariable Long indx) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		long time = DateUtil.beginOfDay(DateTime.now()).getTime();
+		redisService.set(RedisService.key.EQUIPMENT_USER_SERVICE_RECORD.getEnvName() + time + userId, indx, RedisService.key.EQUIPMENT_USER_SERVICE_RECORD.getTimeout());
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
 }