Explorar el Código

fix 修改绑定其他账号;企业微信接口分页、企业群发任务发送记录时间筛选、导出

zoujiajian hace 3 años
padre
commit
4808b27181
Se han modificado 27 ficheros con 444 adiciones y 84 borrados
  1. 3 4
      netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpTagGroupMapper.java
  2. 2 1
      netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpTagMapper.java
  3. 10 0
      netflix-dao/src/main/java/com/cyksj/model/dto/AuthRedirect.java
  4. 46 0
      netflix-dao/src/main/java/com/cyksj/model/excel/ExcelCorpMsgBulkTaskSendRecordData.java
  5. 4 0
      netflix-dao/src/main/java/com/cyksj/model/request/UserBindInfoReq.java
  6. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/CorpMsgBulkTaskSendRecordView.java
  7. 5 0
      netflix-dao/src/main/resources/mapper/CorpTagGroupMapper.xml
  8. 5 0
      netflix-service/src/main/java/com/cyksj/config/wxlogin/WxOpenPlatYHLXLoginConfig.java
  9. 2 2
      netflix-service/src/main/java/com/cyksj/redis/RedisService.java
  10. 1 1
      netflix-service/src/main/java/com/cyksj/service/authorization/AuthorizationService.java
  11. 2 2
      netflix-service/src/main/java/com/cyksj/service/authorization/impl/AuthorizationServiceImpl.java
  12. 2 2
      netflix-service/src/main/java/com/cyksj/service/corp/CorpTagService.java
  13. 9 9
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpTagServiceImpl.java
  14. 11 9
      netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonServiceImpl.java
  15. 1 1
      netflix-service/src/main/java/com/cyksj/service/market/task/BindTaskService.java
  16. 53 15
      netflix-service/src/main/java/com/cyksj/service/market/task/impl/BindTaskServiceImpl.java
  17. 2 0
      netflix-service/src/main/java/com/cyksj/service/user/UserService.java
  18. 48 4
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java
  19. 7 4
      netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsBackLoginController.java
  20. 44 1
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpMsgBulkTaskController.java
  21. 4 4
      netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpTagController.java
  22. 0 17
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java
  23. 13 3
      netflix-web/src/main/java/com/cyksj/web/controller/market/TaskFrontController.java
  24. 1 4
      netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java
  25. 0 0
      netflix-web/src/main/resources/application-dev.yml
  26. 0 0
      netflix-web/src/main/resources/application-prd.yml
  27. 168 0
      netflix-web/src/main/resources/application-pre.yml

+ 3 - 4
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpTagGroupMapper.java

@@ -1,13 +1,12 @@
 package com.cyksj.mapper.corp;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.CorpTagGroup;
 import com.cyksj.model.views.CorpTagBackView;
 import com.cyksj.model.views.CorpTagGroupView;
 import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
-
 /*
  *项目名: netflix
  *文件名: CorpTagGroupMapper
@@ -17,7 +16,7 @@ import java.util.List;
 public interface CorpTagGroupMapper extends BaseMapper<CorpTagGroup> {
 	CorpTagGroupView getOneCorpGroupTag(@Param("groupId") String groupId, @Param("groupName") String groupName);
 
-	List<CorpTagGroupView> getCorpTagList();
+	Page<CorpTagGroupView> getCorpTagList(@Param("groupName") String groupName, @Param("page") Page<CorpTagGroupView> page);
 
-	List<CorpTagBackView> getCorpTagBackView(@Param("groupIds") String[] groupIds, @Param("sort") String sort, @Param("order") String order, @Param("wxCorpId") Long wxCorpId);
+	Page<CorpTagBackView> getCorpTagBackView(@Param("page") Page<CorpTagBackView> page, @Param("groupIds") String[] groupIds, @Param("sort") String sort, @Param("order") String order, @Param("wxCorpId") Long wxCorpId);
 }

+ 2 - 1
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpTagMapper.java

@@ -1,6 +1,7 @@
 package com.cyksj.mapper.corp;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.CorpTag;
 import com.cyksj.model.views.CorpTagBackView;
 import com.cyksj.model.views.CorpTagHeadDataView;
@@ -15,7 +16,7 @@ import java.util.List;
  *创建时间:2022/10/13 18:07
  */
 public interface CorpTagMapper extends BaseMapper<CorpTag> {
-	List<CorpTagBackView> getCorpTagBackView(@Param("tagIds") String[] tagIds, @Param("sort") String sort, @Param("order") String order, @Param("wxCorpId") Long wxCorpId);
+	Page<CorpTagBackView> getCorpTagBackView(@Param("page") Page<CorpTagBackView> page, @Param("tagIds") String[] tagIds, @Param("sort") String sort, @Param("order") String order, @Param("wxCorpId") Long wxCorpId);
 
 	List<String> selectTagsIdByGroupId(String groupId);
 

+ 10 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/AuthRedirect.java

@@ -52,4 +52,14 @@ public class AuthRedirect {
      * 回传类型
      */
     private String ct;
+
+    /**
+     * 绑定手机号
+     */
+    private String lp;
+
+    /**
+     * 绑定邮箱
+     */
+    private String le;
 }

+ 46 - 0
netflix-dao/src/main/java/com/cyksj/model/excel/ExcelCorpMsgBulkTaskSendRecordData.java

@@ -0,0 +1,46 @@
+package com.cyksj.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: ExcelCorpMsgBulkTaskSendRecordData
+ *创建者: JavaZou
+ *创建时间:2023/8/3 16:10
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select * from corp_msg_bulk_task_record where :task_id: :time:) cmr left join corp_user_send_record cr on cr.corp_msg_record_id = cmr.id",
+		groupBy = "cmr.send_id")
+public class ExcelCorpMsgBulkTaskSendRecordData {
+	/**
+	 * 总数
+	 */
+	@DbField("count(cr.id)")
+	@ExcelProperty("总数")
+	private Integer total;
+
+	/**
+	 * 送达
+	 */
+	@DbField("count(if(cr.status = 1,cr.id,null))")
+	@ExcelProperty("已发送")
+	private Integer send;
+
+	/**
+	 * 未送达
+	 */
+	@DbField("count(if(cr.status != 1,cr.id,null))")
+	@ExcelProperty("未发送")
+	private Integer notSend;
+
+	@DbField("any_value(cmr.created_time)")
+	@ExcelProperty("发送时间")
+	private Date createTime;
+}

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/request/UserBindInfoReq.java

@@ -25,4 +25,8 @@ public class UserBindInfoReq {
 	private Long userId;
 
 	private String code;
+
+	private String envType;
+
+	private String returnUrl;
 }

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

@@ -15,7 +15,7 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "(select * from corp_msg_bulk_task_record where :task_id:) cmr left join corp_user_send_record cr on cr.corp_msg_record_id = cmr.id",
+@SearchBean(tables = "(select * from corp_msg_bulk_task_record where :task_id: :time:) cmr left join corp_user_send_record cr on cr.corp_msg_record_id = cmr.id",
 		groupBy = "cmr.send_id")
 public class CorpMsgBulkTaskSendRecordView {
 

+ 5 - 0
netflix-dao/src/main/resources/mapper/CorpTagGroupMapper.xml

@@ -30,6 +30,11 @@
 
     <select id="getCorpTagList" resultMap="groupTag">
         select * from corp_tag_group
+        <where>
+            <if test="groupName!=null and groupName != ''">
+                group_name like concat('%',#{groupName},'%')
+            </if>
+        </where>
     </select>
 
     <select id="getCorpTagBackView" resultType="com.cyksj.model.views.CorpTagBackView">

+ 5 - 0
netflix-service/src/main/java/com/cyksj/config/wxlogin/WxOpenPlatYHLXLoginConfig.java

@@ -35,5 +35,10 @@ public class WxOpenPlatYHLXLoginConfig {
 
 	private String cpsLoginUrl;
 
+	/**
+	 * 绑定账号回调接口地址
+	 */
+	private String baRedirectUrl;
+
 	private String remark;
 }

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

@@ -592,7 +592,7 @@ public class RedisService {
 	    CORP_AUTH_MAPPING_KEY("mapping:corp:", "企业微信授权跳转", 60 * 60 * 24L),
 	    CORP_ACCESSO_TOKEN_KEY("corp:access_token:", "corp_access_token", 60 * 30L),
 	    MAPPING_INDEX_KEY("mapper:index:", "授权跳转", 60 * 10L),
-        WX_LOGIN_AUTH_URI("wx_login_auth_uri:%s", "微信网页授权登录uri", 60 * 60 * 24L),
+        WX_LOGIN_AUTH_URI("wx_login_auth_uri:%s:%s", "微信网页授权登录uri", 60 * 60 * 24L),
         RECOMMEND_COUPON_DAY("recommend_coupon_day:%s", "推荐优惠券弹窗", 60 * 60 * 24L),
         EMAIL_CODE_KEY("email_code_key:%s", "邮箱验证码", 60 * 3),
         PHONE_CODE_KEY("phone_code_key:", "短信验证码", 60 * 3),
@@ -641,7 +641,7 @@ public class RedisService {
         private long timeout;
 
 
-        public String getNameFormat(Object str) {
+        public String getNameFormat(Object... str) {
             return String.format(this.getName(), str);
         }
 

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/authorization/AuthorizationService.java

@@ -20,5 +20,5 @@ public interface AuthorizationService {
 
     JsSdkTicket getJsTicket(String appId, String url) throws Exception;
 
-    String createWxAuthLoginUrl(String state, Boolean isCpsLogin);
+    String createWxAuthLoginUrl(String state, String redirectUrl);
 }

+ 2 - 2
netflix-service/src/main/java/com/cyksj/service/authorization/impl/AuthorizationServiceImpl.java

@@ -62,8 +62,8 @@ public class AuthorizationServiceImpl implements AuthorizationService {
     }
 
     @Override
-    public String createWxAuthLoginUrl(String state, Boolean isCpsLogin) {
-        return weChatService.createWxAuthLoginUrl(state, wxOpenPlatYHLXLoginConfig.getAppId(), URLEncoder.encode(isCpsLogin ? wxOpenPlatYHLXLoginConfig.getCpsRedirectUri() : wxOpenPlatYHLXLoginConfig.getRedirectUri(), StandardCharsets.UTF_8));
+    public String createWxAuthLoginUrl(String state, String redirectUrl) {
+        return weChatService.createWxAuthLoginUrl(state, wxOpenPlatYHLXLoginConfig.getAppId(), URLEncoder.encode(redirectUrl, StandardCharsets.UTF_8));
     }
 
 }

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

@@ -25,11 +25,11 @@ public interface CorpTagService {
 
 	void editCorpTag(CorpTagGroupView tagGroup) throws Exception;
 
-	List<CorpTagGroupView> getCorpTagList();
+	Page<CorpTagGroupView> getCorpTagList(String groupName, Integer start, Integer limit);
 
 	void saveOrUpdateRule(CorpTagRule rule);
 
-	List<CorpTagBackView> getCorpTagBackView(Integer type, String[] tagIds, String[] groupIds, String sort, String order);
+	Page<CorpTagBackView> getCorpTagBackView(Integer start, Integer limit, Integer type, String[] tagIds, String[] groupIds, String sort, String order);
 
 	List<CorpTag> getGroupTagDetail(String groupId);
 

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

@@ -254,9 +254,9 @@ public class CorpTagServiceImpl implements CorpTagService {
 	}
 
 	@Override
-	public List<CorpTagGroupView> getCorpTagList() {
-		List<CorpTagGroupView> tagGroupList = corpTagGroupMapper.getCorpTagList();
-		tagGroupList.forEach(tagGrous -> {
+	public Page<CorpTagGroupView> getCorpTagList(String groupName, Integer start, Integer limit) {
+		Page<CorpTagGroupView> tagGroupListPage = corpTagGroupMapper.getCorpTagList(groupName, new Page<>(start, limit));
+		tagGroupListPage.getRecords().forEach(tagGrous -> {
 			tagGrous.getTagList().forEach(tag -> {
 				if (tag.getType() == 2) {
 					Optional.ofNullable(corpTagRuleRelationMapper.selectList(Wrappers.lambdaQuery(CorpTagRuleRelation.class)
@@ -273,7 +273,7 @@ public class CorpTagServiceImpl implements CorpTagService {
 				}
 			});
 		});
-		return tagGroupList;
+		return tagGroupListPage;
 	}
 
 	@Override
@@ -284,11 +284,11 @@ public class CorpTagServiceImpl implements CorpTagService {
 	}
 
 	@Override
-	public List<CorpTagBackView> getCorpTagBackView(Integer type, String[] tagIds, String[] groupIds, String sort, String order) {
+	public Page<CorpTagBackView> getCorpTagBackView(Integer start, Integer limit, Integer type, String[] tagIds, String[] groupIds, String sort, String order) {
 		Long wxCorpId = 2l;
 		if (type == 1) {
-			List<CorpTagBackView> corpTagBackView = corpTagMapper.getCorpTagBackView(tagIds, sort, order, wxCorpId);
-			corpTagBackView.forEach(view -> {
+			Page<CorpTagBackView> corpTagBackViewPage = corpTagMapper.getCorpTagBackView(new Page<>(start, limit), tagIds, sort, order, wxCorpId);
+			corpTagBackViewPage.getRecords().forEach(view -> {
 				if (StrUtil.isNotEmpty(view.getRuleNameListStr())) {
 					try {
 						view.setRuleNameList(Jsons.parseList(view.getRuleNameListStr(), String.class));
@@ -296,9 +296,9 @@ public class CorpTagServiceImpl implements CorpTagService {
 					}
 				}
 			});
-			return corpTagBackView;
+			return corpTagBackViewPage;
 		}
-		return corpTagGroupMapper.getCorpTagBackView(groupIds, sort, order, wxCorpId);
+		return corpTagGroupMapper.getCorpTagBackView(new Page<>(start, limit), groupIds, sort, order, wxCorpId);
 	}
 
 	@Override

+ 11 - 9
netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsGoodsDonServiceImpl.java

@@ -1,12 +1,13 @@
 package com.cyksj.service.mange.goods;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.model.entity.GoodsDon;
-import com.cyksj.model.views.GoodsDonSkuFrontView;
+import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.service.mange.CmsGoodsDonService;
 import com.ejlchina.searcher.BeanSearcher;
-import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -24,16 +25,17 @@ public class CmsGoodsDonServiceImpl extends ServiceImpl<GoodsDonMapper, GoodsDon
 
 	private final GoodsDonMapper goodsDonMapper;
 
+	private final GoodsDonSkuMapper goodsDonSkuMapper;
+
 	@Override
 	public void updateGoodsSkuPrice(Long goodsId, GoodsDon goods) {
 		goods = Optional.ofNullable(goods).orElse(goodsDonMapper.selectById(goodsId));
-		List<GoodsDonSkuFrontView> skuViews = beanSearcher.searchAll(GoodsDonSkuFrontView.class, MapUtils.builder()
-				.field(GoodsDonSkuFrontView::getGoodsId, goodsId)
-				.field(GoodsDonSkuFrontView::getStatus, true)
-				.orderBy(GoodsDonSkuFrontView::getPrice).asc().onlySelect(GoodsDonSkuFrontView::getPrice, GoodsDonSkuFrontView::getMonths, GoodsDonSkuFrontView::getDays)
-				.build());
+		List<GoodsDonSku> skuViews = goodsDonSkuMapper.selectList(Wrappers.lambdaQuery(GoodsDonSku.class)
+				.eq(GoodsDonSku::getGoodsId, goodsId)
+				.eq(GoodsDonSku::getStatus, true)
+				.orderByAsc(GoodsDonSku::getPrice));
 		if (!skuViews.isEmpty()) {
-			GoodsDonSkuFrontView min = skuViews.get(0);
+			GoodsDonSku min = skuViews.get(0);
 			goods.setMinPrice(min.getPrice());
 			if (min.getDays() == null) {
 				min.setDays(0);
@@ -48,7 +50,7 @@ public class CmsGoodsDonServiceImpl extends ServiceImpl<GoodsDonMapper, GoodsDon
 				goods.setMaxMonths(min.getMonths());
 				goods.setMaxDays(min.getDays());
 			} else {
-				GoodsDonSkuFrontView max = skuViews.get(skuViews.size() - 1);
+				GoodsDonSku max = skuViews.get(skuViews.size() - 1);
 				if (max.getDays() == null) {
 					max.setDays(0);
 				}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/market/task/BindTaskService.java

@@ -24,7 +24,7 @@ public interface BindTaskService {
 
 	UserBindDetail bindEmail(User user, String email, String code);
 
-	Result<Object> bindOtherAccount(UserBindInfoReq request) throws Exception;
+	Result<String> bindOtherAccount(UserBindInfoReq request) throws Exception;
 
 	void updateBindAccount(UserBindInfoReq request);
 

+ 53 - 15
netflix-service/src/main/java/com/cyksj/service/market/task/impl/BindTaskServiceImpl.java

@@ -6,8 +6,13 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.EnvCommonService;
 import com.cyksj.common.constant.TaskTypeEnum;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.snowflake.Sequence;
+import com.cyksj.common.util.Codec;
+import com.cyksj.common.util.Jsons;
+import com.cyksj.config.wxlogin.WxOpenPlatYHLXLoginConfig;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.enums.GatewayResponse;
@@ -15,16 +20,16 @@ import com.cyksj.mapper.PhoneCodeMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.market.task.TaskTypeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
+import com.cyksj.model.dto.AuthRedirect;
 import com.cyksj.model.entity.PhoneCode;
 import com.cyksj.model.entity.TaskType;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.entity.UserBindDetail;
 import com.cyksj.model.request.UserBindInfoReq;
-import com.cyksj.model.response.WxGzhQrCodeTicketRep;
 import com.cyksj.redis.RedisService;
+import com.cyksj.service.authorization.AuthorizationService;
 import com.cyksj.service.market.task.BindTaskService;
 import com.cyksj.service.market.task.TaskService;
-import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -52,7 +57,13 @@ public class BindTaskServiceImpl implements BindTaskService {
 
 	private final UserMapper userMapper;
 
-	private final WeChatService weChatService;
+	private final AuthorizationService authorizationService;
+
+	private final EnvCommonService envCommonService;
+
+	private final WxOpenPlatYHLXLoginConfig wxOpenPlatYHLXLoginConfig;
+
+	private final static Sequence SEQUENCE = new Sequence(0);
 
 	@Override
 	public UserBindDetail bindPhone(User user, String phone, String code) {
@@ -68,18 +79,23 @@ public class BindTaskServiceImpl implements BindTaskService {
 				.eq(StrUtil.isNotBlank(user.getOpenId()), UserBindDetail::getUserId, user.getId())
 				.last("limit 1");
 
-		UserBindDetail bindPhone = Optional.ofNullable(userBindDetailMapper.selectOne(wrapper)).orElse(new UserBindDetail());
-		if (StrUtil.isNotBlank(bindPhone.getPhone())) {
+		UserBindDetail bindPhone = userBindDetailMapper.selectOne(wrapper);
+		if (bindPhone != null && StrUtil.isNotBlank(bindPhone.getPhone())) {
 			throw BusinessRuntimeException.getInstance("您已绑定手机号");
 		}
 
 		UserBindDetail other = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
 				.eq(UserBindDetail::getPhone, phone)
-				.select(UserBindDetail::getId)
+				.ne(StrUtil.isNotBlank(user.getEmail()), UserBindDetail::getEmail, StrUtil.EMPTY)
+				.isNotNull(StrUtil.isNotEmpty(user.getOpenId()), UserBindDetail::getUserId)
 				.last("limit 1"));
 		if (other != null) {
 			throw BusinessRuntimeException.getInstance("该手机号已被绑定");
 		}
+		if (bindPhone == null) {
+			bindPhone = Optional.ofNullable(userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+					.eq(UserBindDetail::getPhone, phone).last("limit 1"))).orElse(new UserBindDetail());
+		}
 
 		if (StrUtil.isNotBlank(code)) {
 			//校验
@@ -139,7 +155,7 @@ public class BindTaskServiceImpl implements BindTaskService {
 			throw BusinessRuntimeException.getInstance("换绑手机号重复");
 		}
 		UserBindDetail other = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
-				.eq(UserBindDetail::getPhone, phone).ne(UserBindDetail::getUserId, userId).select(UserBindDetail::getId).last("limit 1"));
+				.eq(UserBindDetail::getPhone, phone).select(UserBindDetail::getId).last("limit 1"));
 		if (other != null) {
 			throw BusinessRuntimeException.getInstance("该手机号已被绑定");
 		}
@@ -179,7 +195,7 @@ public class BindTaskServiceImpl implements BindTaskService {
 			throw BusinessRuntimeException.getInstance("换绑邮箱重复");
 		}
 		UserBindDetail other = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
-				.eq(UserBindDetail::getEmail, email).ne(UserBindDetail::getUserId, userId).select(UserBindDetail::getId).last("limit 1"));
+				.eq(UserBindDetail::getEmail, email).select(UserBindDetail::getId).last("limit 1"));
 		if (other != null) {
 			throw BusinessRuntimeException.getInstance("该邮箱已被绑定");
 		}
@@ -211,18 +227,24 @@ public class BindTaskServiceImpl implements BindTaskService {
 				.eq(StrUtil.isNotBlank(user.getLoginPhone()), UserBindDetail::getPhone, user.getLoginPhone())
 				.eq(StrUtil.isNotBlank(user.getOpenId()), UserBindDetail::getUserId, user.getId())
 				.last("limit 1");
-		UserBindDetail bindPhone = Optional.ofNullable(userBindDetailMapper.selectOne(wrapper)).orElse(new UserBindDetail());
-		if (StrUtil.isNotBlank(bindPhone.getEmail())) {
+		UserBindDetail bindPhone = userBindDetailMapper.selectOne(wrapper);
+		if (bindPhone != null && StrUtil.isNotBlank(bindPhone.getEmail())) {
 			throw BusinessRuntimeException.getInstance("您已绑定邮箱");
 		}
 
 		UserBindDetail other = userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
 				.eq(UserBindDetail::getEmail, account)
+				.ne(StrUtil.isNotBlank(user.getPhone()), UserBindDetail::getPhone, StrUtil.EMPTY)
+				.isNotNull(StrUtil.isNotBlank(user.getOpenId()), UserBindDetail::getUserId)
 				.select(UserBindDetail::getId)
 				.last("limit 1"));
 		if (other != null) {
 			throw BusinessRuntimeException.getInstance("该邮箱已被绑定");
 		}
+		if (bindPhone == null) {
+			bindPhone = Optional.ofNullable(userBindDetailMapper.selectOne(Wrappers.lambdaQuery(UserBindDetail.class)
+					.eq(UserBindDetail::getEmail, account).last("limit 1"))).orElse(new UserBindDetail());
+		}
 
 		if (StrUtil.isNotBlank(inputCode)) {
 			checkEmailCode(account, inputCode);
@@ -258,7 +280,7 @@ public class BindTaskServiceImpl implements BindTaskService {
 	}
 
 	@Override
-	public Result<Object> bindOtherAccount(UserBindInfoReq request) throws Exception {
+	public Result<String> bindOtherAccount(UserBindInfoReq request) throws Exception {
 		Long userId = request.getUserId();
 		User user = userMapper.selectById(userId);
 		Integer type = request.getType();
@@ -300,10 +322,26 @@ public class BindTaskServiceImpl implements BindTaskService {
 			if (StrUtil.isNotBlank(user.getOpenId())) {
 				throw BusinessRuntimeException.getInstance("您通过微信登录,无法绑定其他微信");
 			}
-			//绑定微信 获取临时带参数二维码
-			//获取gzh带参数的二维码
-			WxGzhQrCodeTicketRep result = weChatService.getWxGzhQrCode(null, null, null, user.getLoginPhone(), user.getEmail(), null);
-			return GatewayResponse.SUCCESS.newBuilder().toResult(result);
+			//网页授权二维码
+			Long mappingId = SEQUENCE.nextId();
+			AuthRedirect redirect = new AuthRedirect()
+					.setMappingId(mappingId)
+					.setLp(user.getLoginPhone())
+					.setLe(user.getEmail());
+			String returnUrl = request.getReturnUrl();
+			String envType = request.getEnvType();
+			if (StrUtil.isNotBlank(returnUrl)) {
+				if (StrUtil.isNotBlank(envType)) {
+					returnUrl = envCommonService.getDomain() + envType + "/web/" + returnUrl;
+				} else {
+					returnUrl = envCommonService.getDomain() + "/web/" + returnUrl;
+				}
+			}
+			redisService.set(mappingId.toString(), returnUrl, 60 * 60 * 24L);
+			String redirectUrl = wxOpenPlatYHLXLoginConfig.getBaRedirectUrl();
+			String state = Codec.DoBase64.custom().setData(Jsons.toJson(redirect)).encodeAsText();
+			String wxAuthUrl = authorizationService.createWxAuthLoginUrl(state, redirectUrl);
+			return GatewayResponse.SUCCESS.newBuilder().toResult(wxAuthUrl);
 		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/user/UserService.java

@@ -44,4 +44,6 @@ public interface UserService extends IService<User> {
 	 * 验证码登录
 	 */
 	User webLogin(LoginReq loginReq) throws Exception;
+
+	String bindWxAccountRedirect(String code, String state) throws Exception;
 }

+ 48 - 4
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -13,23 +13,23 @@ import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.Codec;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
+import com.cyksj.config.wxlogin.WxOpenPlatYHLXLoginConfig;
 import com.cyksj.mapper.PhoneCodeMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.channel.ChannelPopularizeMapper;
 import com.cyksj.mapper.manage.cps.UserDistributePopularizeMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
-import com.cyksj.model.dto.GzhOAuth2UserInfo;
-import com.cyksj.model.dto.NewUserWelfareDto;
-import com.cyksj.model.dto.OrderDonPostDataDto;
-import com.cyksj.model.dto.UserWhoami;
+import com.cyksj.model.dto.*;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.LoginReq;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.distribute.DistributeService;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeService;
 import com.cyksj.service.mange.coupon.CouponCommonService;
+import com.cyksj.service.market.task.BindTaskService;
 import com.cyksj.service.sys.SysConfigService;
 import com.cyksj.service.user.UserService;
+import com.cyksj.service.wechat.WeChatService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.dao.DuplicateKeyException;
@@ -69,6 +69,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	private final PhoneCodeMapper phoneCodeMapper;
 
+	private final WeChatService weChatService;
+
+	private final BindTaskService bindTaskService;
+
+	private final WxOpenPlatYHLXLoginConfig wxOpenPlatYHLXLoginConfig;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
 	@Override
@@ -445,6 +451,44 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 		return user;
 	}
 
+	@Override
+	public String bindWxAccountRedirect(String code, String state) throws Exception {
+		AuthToken token = weChatService.getAuthToken(code, wxOpenPlatYHLXLoginConfig.getAppId());
+		//重定向
+		// 根据openid 与 access_token 获取用户信息
+		GzhOAuth2UserInfo userinfo = weChatService.getUserInfo(token.getAccessToken(), token.getOpenid());
+
+		// 转跳参数
+		String json = Codec.DoBase64.custom().setData(state).decodeAsText();
+		AuthRedirect re = Jsons.parseObject(json, AuthRedirect.class);
+		//保存用户信息
+		User user = saveAuth(userinfo, re.getSharedId(), re.getDsType(), re.getPid(), User.RegisterEnv.pc, re.getDsCode(), re.getCk(), re.getCt());
+		if (user == null) {
+			throw BusinessRuntimeException.getInstance("系统错误,请重新授权");
+		}
+		String loginPhone = re.getLp();
+		String loginEmail = re.getLe();
+
+		if (StrUtil.isNotBlank(loginPhone)) {
+			log.info("手机号phone:{}登录用户,微信扫描网页授权二维码进行用户信息绑定", loginPhone);
+			try {
+				bindTaskService.bindPhone(user, loginPhone, null);
+			} catch (Exception e) {
+				log.info(StringUtil.getErrorText(e));
+			}
+		}
+
+		if (StrUtil.isNotBlank(loginEmail)) {
+			log.info("邮箱email:{}登录用户,微信扫描网页授权二维码进行用户信息绑定", loginEmail);
+			try {
+				bindTaskService.bindEmail(user, loginEmail, null);
+			} catch (Exception e) {
+				log.info(StringUtil.getErrorText(e));
+			}
+		}
+		return redisService.getStr(re.getMappingId().toString());
+	}
+
 	/**
 	 * 发放新用户福利
 	 */

+ 7 - 4
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsBackLoginController.java

@@ -106,18 +106,21 @@ public class CpsBackLoginController {
 	 */
 	@GetMapping("/wx/authLogin")
 	public Result<CpsAuthDto> wxAuthorize() throws Exception {
+		Object authUrlObj = redisService.get(RedisService.key.WX_LOGIN_AUTH_URI.getNameFormat("cps", wxOpenPlatYHLXLoginConfig.getAppId()));
+		if (authUrlObj != null) {
+			CpsAuthDto cpsAuthDto = Jsons.parseObject(authUrlObj.toString(), CpsAuthDto.class);
+			return GatewayResponse.SUCCESS.newBuilder().toResult(cpsAuthDto);
+		}
 		CpsAuthDto cpsAuthDto = new CpsAuthDto();
-		String wxAuthUrl = redisService.getStr(RedisService.key.WX_LOGIN_AUTH_URI.getNameFormat(wxOpenPlatYHLXLoginConfig.getAppId()));
 		Long mappingId = SEQUENCE.nextId();
 		String authState = mappingId.toString();
 		redisService.set(authState, authState, 60 * 60 * 24L);
 		AuthRedirect redirect = new AuthRedirect().setMappingId(mappingId);
 		String state = Codec.DoBase64.custom().setData(Jsons.toJson(redirect)).encodeAsText();
-		if (StrUtil.isEmpty(wxAuthUrl)) {
-			wxAuthUrl = authorizationService.createWxAuthLoginUrl(state, true);
-		}
+		String wxAuthUrl = authorizationService.createWxAuthLoginUrl(state, wxOpenPlatYHLXLoginConfig.getCpsRedirectUri());
 		cpsAuthDto.setAuthUrl(wxAuthUrl);
 		cpsAuthDto.setAuthState(authState);
+		redisService.set(RedisService.key.WX_LOGIN_AUTH_URI.getNameFormat("cps", wxOpenPlatYHLXLoginConfig.getAppId()), Jsons.toJson(cpsAuthDto), RedisService.key.WX_LOGIN_AUTH_URI.getTimeout());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(cpsAuthDto);
 	}
 

+ 44 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpMsgBulkTaskController.java

@@ -1,7 +1,9 @@
 package com.cyksj.web.controller.manage.corp;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -13,10 +15,12 @@ import com.cyksj.mapper.manage.coupon.CouponMapper;
 import com.cyksj.model.dto.CornMetaDto;
 import com.cyksj.model.entity.CorpMsgBulkTask;
 import com.cyksj.model.entity.CorpTag;
+import com.cyksj.model.excel.ExcelCorpMsgBulkTaskSendRecordData;
 import com.cyksj.model.request.corp.Attachments;
 import com.cyksj.model.views.CorpMsgBulkTaskCorpFollowSendRecordView;
 import com.cyksj.model.views.CorpMsgBulkTaskSendRecordView;
 import com.cyksj.service.corp.CorpMsgBulkTaskService;
+import com.cyksj.web.util.EasyExcelUtils;
 import com.cyksj.xxljob.XxlJobUtil;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -28,6 +32,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -152,15 +157,53 @@ public class CorpMsgBulkTaskController {
 	 * 群发记录
 	 */
 	@GetMapping("/get/sendRecord/{id}")
-	public Result<SearchResult<CorpMsgBulkTaskSendRecordView>> getSendRecord(@PathVariable Long id) {
+	public Result<SearchResult<CorpMsgBulkTaskSendRecordView>> getSendRecord(@PathVariable Long id, Long startTime, Long endTime) {
 		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
 		builder.put("task_id", String.format("task_id = %s", id));
+		String time = StrUtil.EMPTY;
+		if (startTime != null) {
+			time += String.format(" and created_time >= '%s'", DateTime.of(startTime));
+		}
+		if (endTime != null) {
+			time += String.format(" and created_time < '%s'", DateTime.of(endTime));
+		}
+		if (StrUtil.isNotEmpty(time)) {
+			builder.put("time", time);
+		}
 		SearchResult<CorpMsgBulkTaskSendRecordView> search = beanSearcher.search(CorpMsgBulkTaskSendRecordView.class, builder
 				.orderBy(CorpMsgBulkTaskSendRecordView::getCreateTime).desc()
 				.build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 
+	/**
+	 * 导出某任务群发记录
+	 */
+	@GetMapping("/export/sendRecord/{id}")
+	public void exportSendRecord(@PathVariable Long id, Long startTime, Long endTime, HttpServletResponse response) {
+		CorpMsgBulkTask byId = corpMsgBulkTaskService.getById(id);
+		if (byId == null) {
+			throw BusinessRuntimeException.getInstance("群发任务不存在");
+		}
+		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+		builder.put("task_id", String.format("task_id = %s", id));
+		String time = StrUtil.EMPTY;
+		if (startTime != null) {
+			time += String.format(" and created_time >= '%s'", DateTime.of(startTime));
+		}
+		if (endTime != null) {
+			time += String.format(" and created_time < '%s'", DateTime.of(endTime));
+		}
+		if (StrUtil.isNotEmpty(time)) {
+			builder.put("time", time);
+		}
+		List<ExcelCorpMsgBulkTaskSendRecordData> list = beanSearcher.searchAll(ExcelCorpMsgBulkTaskSendRecordData.class, builder
+				.orderBy(ExcelCorpMsgBulkTaskSendRecordData::getCreateTime).desc()
+				.build());
+		String fileName = String.format("%s群发任务发送记录", byId.getName());
+		EasyExcelUtils.createExcelStreamMutilByEasyExcel(response, ExcelCorpMsgBulkTaskSendRecordData.class, list, fileName, fileName, ExcelTypeEnum.XLSX, null);
+	}
+
 	/**
 	 * 群发记录 客服发送详情
 	 */

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

@@ -76,8 +76,8 @@ public class CorpTagController {
 	 * @date 2022-03-24 下午1:58
 	 */
 	@RequestMapping("/get/corpTagList")
-	public Result<List<CorpTagGroupView>> getCorpTagList(){
-		List<CorpTagGroupView> tagGroupList = corpTagService.getCorpTagList();
+	public Result<Page<CorpTagGroupView>> getCorpTagList(String groupName, @RequestParam(defaultValue = "0") Integer start, @RequestParam(defaultValue = "10") Integer limit) {
+		Page<CorpTagGroupView> tagGroupList = corpTagService.getCorpTagList(groupName, start, limit);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(tagGroupList);
 	}
 
@@ -112,8 +112,8 @@ public class CorpTagController {
 	 * 标签管理详情
 	 */
 	@GetMapping("/get/corpTag")
-	public Result<List<CorpTagBackView>> getCorpTagBackView(@RequestParam(required = false, defaultValue = "1") Integer type, String[] tagIds, String[] groupIds, String sort, String order) {
-		List<CorpTagBackView> corpTagBackViews = corpTagService.getCorpTagBackView(type, tagIds, groupIds, sort, order);
+	public Result<Page<CorpTagBackView>> getCorpTagBackView(@RequestParam(defaultValue = "0") Integer start, @RequestParam(defaultValue = "10") Integer limit, @RequestParam(required = false, defaultValue = "1") Integer type, String[] tagIds, String[] groupIds, String sort, String order) {
+		Page<CorpTagBackView> corpTagBackViews = corpTagService.getCorpTagBackView(start, limit, type, tagIds, groupIds, sort, order);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(corpTagBackViews);
 	}
 

+ 0 - 17
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java

@@ -1,15 +1,8 @@
 package com.cyksj.web.controller.manage.goods;
 
 import com.baomidou.mybatisplus.core.toolkit.Assert;
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollUtil;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.Log;
 import com.cyksj.common.exception.BusinessRuntimeException;
-import com.cyksj.common.snowflake.Sequence;
-import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.BusinessType;
 import com.cyksj.enums.GatewayResponse;
@@ -17,15 +10,12 @@ import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.entity.GoodsDonSpec;
 import com.cyksj.model.manage.request.ReqGoodsSkuInsert;
-import com.cyksj.model.manage.request.ReqGoodsSkuSpec;
-import com.cyksj.model.manage.request.ReqGoodsSpecSingle;
 import com.cyksj.model.request.CombinationSkuReq;
 import com.cyksj.model.views.GoodsDonSkuView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.CmsGoodsDonService;
 import com.cyksj.service.mange.CmsGoodsDonSkuService;
 import com.cyksj.service.mange.CmsGoodsDonSpecService;
-import com.cyksj.service.sys.SysConfigService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
@@ -36,10 +26,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
 
 /**
  * @author chan
@@ -64,10 +51,6 @@ public class CmsGoodsDonSkuController {
 
     private final RedisService redisService;
 
-    private final SysConfigService sysConfigService;
-
-    private final static Sequence SEQUENCE = new Sequence(0);
-
 
     /**
      * 新增 商品spec & sku

+ 13 - 3
netflix-web/src/main/java/com/cyksj/web/controller/market/TaskFrontController.java

@@ -10,9 +10,9 @@ import com.cyksj.model.request.LoginReq;
 import com.cyksj.model.request.TaskFollowReq;
 import com.cyksj.model.request.UserBindInfoReq;
 import com.cyksj.model.views.TaskFrontView;
-import com.cyksj.redis.RedisService;
 import com.cyksj.service.market.MarketFrontService;
 import com.cyksj.service.market.task.BindTaskService;
+import com.cyksj.service.user.UserService;
 import com.cyksj.web.util.StpUserUtil;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -22,6 +22,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /*
  *项目名: netflix
@@ -42,7 +43,7 @@ public class TaskFrontController {
 
 	private final BindTaskService bindTaskService;
 
-	private final RedisService redisService;
+	private final UserService userService;
 
 	/**
 	 * 任务列表
@@ -110,7 +111,7 @@ public class TaskFrontController {
 	 */
 	@PostMapping("/bind/account")
 	@NoSubmit
-	public Result<Object> bindOtherAccount(@RequestBody @Validated UserBindInfoReq request) throws Exception {
+	public Result<String> bindOtherAccount(@RequestBody @Validated UserBindInfoReq request) throws Exception {
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		request.setUserId(userId);
 		return bindTaskService.bindOtherAccount(request);
@@ -128,6 +129,15 @@ public class TaskFrontController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult();
 	}
 
+	/**
+	 * 绑定微信信息回调
+	 */
+	@GetMapping("/bind/wx/baseRedirect")
+	public void bindWxAccountRedirect(String code, String state, HttpServletResponse response) throws Exception {
+		String redirectUrl = userService.bindWxAccountRedirect(code, state);
+		response.sendRedirect(redirectUrl);
+	}
+
 	/**
 	 * 去完成关注任务
 	 */

+ 1 - 4
netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java

@@ -198,7 +198,6 @@ public class AuthorizationController {
      */
     @GetMapping("/wx/authLogin")
     public Result<String> wxAuthorize(Long sharedId, Integer dsType, Long popularizeId, String dsCode, String type, String callbackType, String callback) throws Exception {
-        String wxAuthUrl = redisService.getStr(RedisService.key.WX_LOGIN_AUTH_URI.getNameFormat(wxOpenPlatYHLXLoginConfig.getAppId()));
         Long mappingId = SEQUENCE.nextId();
         String loginUrl = wxOpenPlatYHLXLoginConfig.getLoginUrl();
         if (StrUtil.isNotBlank(type)) {
@@ -212,9 +211,7 @@ public class AuthorizationController {
                 .setCk(callback)
                 .setCt(callbackType);
         String state = Codec.DoBase64.custom().setData(Jsons.toJson(redirect)).encodeAsText();
-        if (StrUtil.isEmpty(wxAuthUrl)) {
-            wxAuthUrl = authorizationService.createWxAuthLoginUrl(state, false);
-        }
+        String wxAuthUrl = authorizationService.createWxAuthLoginUrl(state, wxOpenPlatYHLXLoginConfig.getRedirectUri());
         return GatewayResponse.SUCCESS.newBuilder().toResult(wxAuthUrl);
     }
 

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
netflix-web/src/main/resources/application-dev.yml


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
netflix-web/src/main/resources/application-prd.yml


+ 168 - 0
netflix-web/src/main/resources/application-pre.yml

@@ -0,0 +1,168 @@
+server:
+  port: 8082
+  undertow:
+    buffer-size: 1024
+    direct-buffers: true
+  max-http-header-size: 8192
+
+spring:
+  servlet:
+    multipart:
+      max-file-size: 50MB
+  mail:
+    host: smtp.163.com
+    username: yinheluxiangju@163.com
+    password: CLQPJPRRUERGTDXO
+    protocol: smtp
+    properties.mail.smtp.auth: true
+    properties.mail.smtp.port: 465
+    properties.mail.smtp.starttls.enable: true
+    properties.mail.smtp.starttls.required: true
+    properties.mail.smtp.ssl.enable: true
+    default-encoding: utf-8
+  datasource:
+    type: com.zaxxer.hikari.HikariDataSource
+    url: jdbc:mysql://172.17.0.17:3306/yhlxj?useAffectedRows=true
+    username: yhlxj
+    password: yhlxj123
+    platform: mysql
+    continue-on-error: false
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    hikari:
+      pool-name: hikariCP-mysql-
+      maximum-pool-size: 10
+      minimum-idle: 6
+      idle-timeout: 180000
+      max-lifetime: 600000
+      read-only: false
+      connection-timeout: 30000
+      connection-test-query: SELECT 1
+      # # 以下配置推荐mysql 5.7.27+ 或 8.0.18+
+      # https://cdn.oreillystatic.com/en/assets/1/event/21/Connector_J%20Performance%20Gems%20Presentation.pdf
+      data-source-properties: {
+        useSSL: false,
+        useAffectedRows: true,
+        useUnicode: true,
+        characterEncoding: utf8,
+        connectTimeout: 30000,
+        socketTimeout: 20000,
+
+        # 服务端缓存PrepStmts
+        useServerPrepStmts: true,
+        cachePrepStmts: true,
+        # 官方推荐250-500
+        prepStmtCacheSize: 512,
+        # 官方推荐2048
+        prepStmtCacheSqlLimit: 2048,
+
+        cacheServerConfiguration: true,
+        useLocalSessionState: true,
+        rewriteBatchedStatements: true,
+        useLocalTransactionState: true,
+        cacheResultSetMetadata: true,
+        elideSetAutoCommits: true,
+        maintainTimeStats: false,
+      }
+  redis:
+    # Redis数据库索引(默认为 0)
+    database: 0
+    # Redis服务器地址
+    host: 127.0.0.1
+    # Redis服务器连接端口
+    port: 63222
+    # Redis 密码
+    password: yinhe9913
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 8
+        # 连接池中的最大空闲连接
+        max-idle: 500
+        # 连接池最大连接数(使用负值表示没有限制)
+        max-active: 2000
+        # 连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: 10000
+    # 连接超时时间(毫秒)
+    timeout: 5000
+
+sa-token:
+  # token名称 (同时也是cookie名称)
+  token-name: satoken
+  # token有效期,单位s 默认30天, -1代表永不过期
+  timeout: 2592000
+  # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
+  activity-timeout: -1
+  # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
+  is-share: false
+  # token风格
+  token-style: uuid
+
+
+logging:
+  config: classpath:config/logback.xml
+
+#mybatis
+mybatis:
+  mapper-locations: classpath:mapper/*Mapper.xml
+  executor-type: simple
+  type-aliases-package: com.cyksj.dao.model
+  configuration:
+    local-cache-scope: statement
+    cache-enabled: false
+
+#Bean Searcher 分页配置
+bean-searcher:
+  params:
+    pagination:
+      default-size: 10
+      page: start
+      size: limit
+      start: 1
+
+wechat:
+  oldAppid: wxd58016eee53b6558
+  appid: wx6cbc2de2a55e5579
+  secret: 2ab6340e7787ab24de9f29094dee9d24
+  domain: https://nf.video/8081/api/
+  #默认微信商户
+  shopid: 1634772026
+  shopKey: p2B8BAKi2V3PgMDSSez82V67aIvMKBt5
+  payMsg: 银河录像局
+
+wx-login:
+  appid: wx7c5494c38c6a78bd
+  secret: 95c7c542a583b42840765d758ec49bf5
+  redirectUri: https://nf.video/8082/api/auth/wx/authLogin/baseRedirect
+  loginUrl: https://nf.video
+  cpsRedirectUri: https://nf.video/8082/api/cps/manage/wx/authLogin/baseRedirect
+  cpsLoginUrl: https://cps.nf.video/yinhe/cps/loginNexte
+  baRedirectUrl: https://nf.video/8082/api/applets/market/task/bind/wx/baseRedirect
+  remark: 银河录像网页微信登录
+
+yhlx:
+  corpId: ww9c0ccaad2e9d3822
+  corpSecret: Ov0mlArSItBrs9EuOMt5Ou_faGdplDDIvPgIhgup51E
+  encodingAESKey: bqoACJutQEgW7KOgBoezuQkk7y2HQSyRp1sQ8qnAi6C
+  token: 2e0aWIfBewWNN5BNMq9cBeLf9x
+  domain: https://nf.video/8081/api/
+
+#银河录像局小程序
+yhmini:
+  appid: wx383c483d3bcf155a
+  secret: bf6ca029a3102f390486a7a14b218b06
+
+#广告投放小程序
+advertisement:
+  appId: wx895f960ea6b8c5d0
+  secret: 19b5f5121bc7cc1bc010ee7c4ac509e9
+  shopId: 1644299849
+  shopKey: 5y5ZScTJGm0q0umHQOD4r3EfjRvCioUx
+  notify: https://nf.video/8081/api/
+
+#广告投放公众号
+advertisementwxapp:
+  appId: wx6158deb06d316e0b
+  secret: 44c1e7431099fc0bd21dc320822b0108
+  shopId: 1644299849
+  shopKey: 5y5ZScTJGm0q0umHQOD4r3EfjRvCioUx
+  notify: https://xue.niupian.com.cn/8081/api/

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio