|
@@ -3,6 +3,7 @@ package com.cyksj.web.controller.manage.distribute;
|
|
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.date.BetweenFormater;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
@@ -24,9 +25,11 @@ import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.request.DistributeApplyMoneyReq;
|
|
import com.cyksj.model.request.DistributeApplyMoneyReq;
|
|
|
import com.cyksj.model.request.UserDistributeReq;
|
|
import com.cyksj.model.request.UserDistributeReq;
|
|
|
import com.cyksj.model.views.*;
|
|
import com.cyksj.model.views.*;
|
|
|
|
|
+import com.cyksj.redis.RedisService;
|
|
|
import com.cyksj.service.distribute.DistributeService;
|
|
import com.cyksj.service.distribute.DistributeService;
|
|
|
import com.cyksj.service.mange.business.UserBusinessRateService;
|
|
import com.cyksj.service.mange.business.UserBusinessRateService;
|
|
|
import com.cyksj.service.mange.statistics.StatisticsDataService;
|
|
import com.cyksj.service.mange.statistics.StatisticsDataService;
|
|
|
|
|
+import com.cyksj.service.sys.SysConfigService;
|
|
|
import com.cyksj.service.user.UserBenefitsService;
|
|
import com.cyksj.service.user.UserBenefitsService;
|
|
|
import com.ejlchina.searcher.BeanSearcher;
|
|
import com.ejlchina.searcher.BeanSearcher;
|
|
|
import com.ejlchina.searcher.SearchResult;
|
|
import com.ejlchina.searcher.SearchResult;
|
|
@@ -93,6 +96,12 @@ public class DistributeController {
|
|
|
|
|
|
|
|
private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
|
|
private final CouponDistributePopularizeMapper couponDistributePopularizeMapper;
|
|
|
|
|
|
|
|
|
|
+ private final SysConfigService sysConfigService;
|
|
|
|
|
+
|
|
|
|
|
+ private final RedisService redisService;
|
|
|
|
|
+
|
|
|
|
|
+ private final UserDistributeRuleOrderRecordMapper userDistributeRuleOrderRecordMapper;
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 添加固定推广者
|
|
* 添加固定推广者
|
|
|
*/
|
|
*/
|
|
@@ -707,4 +716,112 @@ public class DistributeController {
|
|
|
UserDistributeViews userDistributeViews = userDistributeMapper.getApplyDetailByUserId(userId);
|
|
UserDistributeViews userDistributeViews = userDistributeMapper.getApplyDetailByUserId(userId);
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(userDistributeViews);
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(userDistributeViews);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取渠道分销规则开启 状态
|
|
|
|
|
+ */
|
|
|
|
|
+ @GetMapping("/get/rule/status")
|
|
|
|
|
+ public Result<Boolean> getRuleStatus() {
|
|
|
|
|
+ String ruleKey = Constant.DISTRIBUTE_RULE_KEY;
|
|
|
|
|
+ SysConfig ruleConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
|
|
|
|
|
+ .eq(SysConfig::getSysKey, ruleKey).last("limit 1"));
|
|
|
|
|
+ if (ruleConfig == null) {
|
|
|
|
|
+ ruleConfig = new SysConfig();
|
|
|
|
|
+ ruleConfig.setSysKey(ruleKey);
|
|
|
|
|
+ ruleConfig.setRemark("渠道分销规则key");
|
|
|
|
|
+ //默认开启
|
|
|
|
|
+ ruleConfig.setSysValue(Constant.ONE_STR);
|
|
|
|
|
+ if (redisService.setNx(ruleKey, 1, 5l)) {
|
|
|
|
|
+ sysConfigService.save(ruleConfig);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StrUtil.equals(Constant.ONE_STR, ruleConfig.getSysValue())) {
|
|
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(true);
|
|
|
|
|
+ }
|
|
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(false);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 开启/关闭 渠道分销规则 默认开启
|
|
|
|
|
+ */
|
|
|
|
|
+ @PutMapping("/update/status/rule")
|
|
|
|
|
+ public Result<String> updateDsRuleStatus() {
|
|
|
|
|
+ String ruleKey = Constant.DISTRIBUTE_RULE_KEY;
|
|
|
|
|
+ SysConfig ruleConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
|
|
|
|
|
+ .eq(SysConfig::getSysKey, ruleKey).last("limit 1"));
|
|
|
|
|
+ if (ruleConfig == null) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("渠道分销规则配置不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (Constant.ZERO_STR.equals(ruleConfig.getSysValue())) {
|
|
|
|
|
+ ruleConfig.setSysValue(Constant.ONE_STR);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ruleConfig.setSysValue(Constant.ZERO_STR);
|
|
|
|
|
+ }
|
|
|
|
|
+ sysConfigService.saveOrUpdate(ruleConfig);
|
|
|
|
|
+ //记录关闭打开状态
|
|
|
|
|
+ //关闭 记录一次
|
|
|
|
|
+ //距离上一次时间
|
|
|
|
|
+ UserDistributeRuleOrderRecord userDistributeRuleOrderRecord = Optional.ofNullable(userDistributeRuleOrderRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributeRuleOrderRecord.class)
|
|
|
|
|
+ .orderByDesc(UserDistributeRuleOrderRecord::getId).last("limit 1"))).orElse(new UserDistributeRuleOrderRecord());
|
|
|
|
|
+ if (StrUtil.equals(Constant.ZERO_STR, ruleConfig.getSysValue())) {
|
|
|
|
|
+ //距离上次关闭时间少于10分钟 不记录关闭时间
|
|
|
|
|
+ if (userDistributeRuleOrderRecord.getId() == null) {
|
|
|
|
|
+ if (redisService.setNx(RedisService.key.DISTRIBUTE_RULE_TIME_KEY.getName(), 1, RedisService.key.DISTRIBUTE_RULE_TIME_KEY.getTimeout())) {
|
|
|
|
|
+ userDistributeRuleOrderRecord.setEndTime(DateTime.now());
|
|
|
|
|
+ userDistributeRuleOrderRecordMapper.insert(userDistributeRuleOrderRecord);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (userDistributeRuleOrderRecord.getStartTime() != null) {
|
|
|
|
|
+ Date startTime = userDistributeRuleOrderRecord.getStartTime();
|
|
|
|
|
+ if (DateTime.now().isAfter(DateUtil.offsetMinute(startTime, 10))) {
|
|
|
|
|
+ if (redisService.setNx(RedisService.key.DISTRIBUTE_RULE_TIME_KEY.getName(), 1, RedisService.key.DISTRIBUTE_RULE_TIME_KEY.getTimeout())) {
|
|
|
|
|
+ UserDistributeRuleOrderRecord newRecord = new UserDistributeRuleOrderRecord();
|
|
|
|
|
+ newRecord.setEndTime(DateTime.now());
|
|
|
|
|
+ userDistributeRuleOrderRecordMapper.insert(newRecord);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (userDistributeRuleOrderRecord.getId() != null && userDistributeRuleOrderRecord.getStartTime() == null) {
|
|
|
|
|
+ if (DateTime.now().isAfter(DateUtil.offsetMinute(userDistributeRuleOrderRecord.getEndTime(), 10))) {
|
|
|
|
|
+ userDistributeRuleOrderRecord.setStartTime(DateTime.now());
|
|
|
|
|
+ userDistributeRuleOrderRecord.setDuration(DateUtil.formatBetween(userDistributeRuleOrderRecord.getEndTime(), userDistributeRuleOrderRecord.getStartTime(), BetweenFormater.Level.SECOND));
|
|
|
|
|
+ userDistributeRuleOrderRecordMapper.updateById(userDistributeRuleOrderRecord);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 渠道分销规则列表
|
|
|
|
|
+ */
|
|
|
|
|
+ @GetMapping("/get/rule/list")
|
|
|
|
|
+ public Result<SearchResult<UserDistributeRuleOrderRecordView>> getDistributeRuleList() {
|
|
|
|
|
+ SearchResult<UserDistributeRuleOrderRecordView> search = beanSearcher.search(UserDistributeRuleOrderRecordView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
|
|
|
|
|
+ search.getDataList().forEach(data -> {
|
|
|
|
|
+ Date endTime = data.getEndTime();
|
|
|
|
|
+ Date startTime = data.getStartTime();
|
|
|
|
|
+ String time = StrUtil.EMPTY;
|
|
|
|
|
+ if (endTime != null) {
|
|
|
|
|
+ time = String.format("created_time >= '%s'", DateUtil.format(endTime, "yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (startTime != null) {
|
|
|
|
|
+ if (StrUtil.isNotBlank(time)) {
|
|
|
|
|
+ time += " and ";
|
|
|
|
|
+ }
|
|
|
|
|
+ time += String.format("created_time < '%s'", DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
+ }
|
|
|
|
|
+ String condition = "where is_rule is true";
|
|
|
|
|
+ if (StrUtil.isNotBlank(time)) {
|
|
|
|
|
+ condition += String.format(" and %s", time);
|
|
|
|
|
+ }
|
|
|
|
|
+ DistributeWaitingOrderPointsRuleView ruleView = beanSearcher.searchFirst(DistributeWaitingOrderPointsRuleView.class, MapUtils.builder()
|
|
|
|
|
+ .put("condition", condition).build());
|
|
|
|
|
+ data.setNumOfOrder(ruleView.getNumOfOrder());
|
|
|
|
|
+ data.setOrderAmount(ruleView.getOrderAmount() == null ? BigDecimal.ZERO : ruleView.getOrderAmount());
|
|
|
|
|
+ });
|
|
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(search);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|