|
|
@@ -1,15 +1,23 @@
|
|
|
package com.cyksj.web.controller.cps;
|
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.extra.qrcode.QrCodeUtil;
|
|
|
+import cn.hutool.extra.qrcode.QrConfig;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.cyksj.common.EnvCommonService;
|
|
|
import com.cyksj.common.annotation.NoSubmit;
|
|
|
import com.cyksj.dto.Result;
|
|
|
import com.cyksj.enums.GatewayResponse;
|
|
|
+import com.cyksj.mapper.DistributePopularizeClickRecordMapper;
|
|
|
+import com.cyksj.mapper.GoodsDonMapper;
|
|
|
+import com.cyksj.mapper.GoodsDonSkuMapper;
|
|
|
+import com.cyksj.mapper.UserDistributePosterRecordMapper;
|
|
|
import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
|
|
|
-import com.cyksj.model.entity.GoodsDon;
|
|
|
-import com.cyksj.model.entity.User;
|
|
|
-import com.cyksj.model.entity.UserDistributePopularize;
|
|
|
+import com.cyksj.mapper.manage.distribute.*;
|
|
|
+import com.cyksj.model.entity.*;
|
|
|
+import com.cyksj.model.views.DistributePosterGoodsCpsView;
|
|
|
import com.cyksj.model.views.UserDistributePopularizeView;
|
|
|
+import com.cyksj.model.views.UserDistributePosterOrderDetailView;
|
|
|
import com.cyksj.service.cps.CpsPopularizeService;
|
|
|
import com.cyksj.service.user.UserService;
|
|
|
import com.cyksj.web.util.StpCpsManageUser;
|
|
|
@@ -19,6 +27,7 @@ import com.ejlchina.searcher.param.Operator;
|
|
|
import com.ejlchina.searcher.util.MapBuilder;
|
|
|
import com.ejlchina.searcher.util.MapUtils;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import org.springframework.dao.DuplicateKeyException;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
@@ -48,17 +57,86 @@ public class CpsPopularizeController {
|
|
|
|
|
|
private final UserService userService;
|
|
|
|
|
|
+ private final GoodsDonMapper goodsDonMapper;
|
|
|
+
|
|
|
+ private final DistributePopularizeClickRecordMapper distributePopularizeClickRecordMapper;
|
|
|
+
|
|
|
+ private final UserDistributeMapper userDistributeMapper;
|
|
|
+
|
|
|
+ private final UserPlatDistributeRateMapper userPlatDistributeRateMapper;
|
|
|
+
|
|
|
+ private final GoodsDonSkuMapper skuMapper;
|
|
|
+
|
|
|
+ private final UserPlatSkuDistributeRateMapper userPlatSkuDistributeRateMapper;
|
|
|
+
|
|
|
+ private final DistributeGeneralSkuRateMapper distributeGeneralSkuRateMapper;
|
|
|
+
|
|
|
+ private final UserDistributePosterRecordMapper userDistributePosterRecordMapper;
|
|
|
+
|
|
|
+ private final DistributePosterGoodsMapper distributePosterGoodsMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 渠道推广链接列表
|
|
|
*/
|
|
|
@GetMapping("/get")
|
|
|
- public Result<SearchResult<UserDistributePopularizeView>> getList() {
|
|
|
+ public Result<SearchResult<UserDistributePopularizeView>> getList(String startTime, String endTime) {
|
|
|
long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
|
|
|
MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
builder.put("userId", String.format("and user_id = %s", cpsUserId));
|
|
|
+ String time = StrUtil.EMPTY;
|
|
|
+ if (startTime != null) {
|
|
|
+ time += String.format(" and od.created_time >= '%s'", startTime);
|
|
|
+ }
|
|
|
+ if (endTime != null) {
|
|
|
+ time += String.format(" and od.created_time < '%s'", endTime);
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(time)) {
|
|
|
+ builder.put("time", time);
|
|
|
+ }
|
|
|
+ UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class)
|
|
|
+ .eq(UserDistribute::getUserId, cpsUserId)
|
|
|
+ .eq(UserDistribute::getDeleted, 1)
|
|
|
+ .last("limit 1"));
|
|
|
SearchResult<UserDistributePopularizeView> search = beanSearcher.search(UserDistributePopularizeView.class, builder.build());
|
|
|
search.getDataList().forEach(data -> {
|
|
|
data.setPopularizeLink(String.format(envCommonService.DISTRIBUTE_DEFAULT_URL_PREFIX, data.getCode()));
|
|
|
+ Optional.ofNullable(goodsDonMapper.selectById(data.getGoodsId())).ifPresent(goods -> {
|
|
|
+ data.setTitle(goods.getTitle());
|
|
|
+ data.setLogo(goods.getLogo());
|
|
|
+ data.setPrice(goods.getMinPrice());
|
|
|
+ UserPlatDistributeRate userPlatDistributeRate = userPlatDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatDistributeRate.class)
|
|
|
+ .eq(UserPlatDistributeRate::getDistributeId, userDistribute.getId())
|
|
|
+ .eq(UserPlatDistributeRate::getGoodsId, data.getGoodsId())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (userPlatDistributeRate != null) {
|
|
|
+ data.setRate(userPlatDistributeRate.getRate());
|
|
|
+ }
|
|
|
+ if (goods.getIsSkuDistribute()) {
|
|
|
+ UserPlatSkuDistributeRate userPlatSkuDistributeRate = userPlatSkuDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatSkuDistributeRate.class)
|
|
|
+ .eq(UserPlatSkuDistributeRate::getDistributeId, userDistribute.getId())
|
|
|
+ .eq(UserPlatSkuDistributeRate::getGoodsId, data.getGoodsId())
|
|
|
+ .ne(UserPlatSkuDistributeRate::getRate, 0)
|
|
|
+ //上架
|
|
|
+ .apply("exists (select 1 from goods_don_sku sku where sku.id = sku_id and sku.status is true limit 1)")
|
|
|
+ .orderByAsc(UserPlatSkuDistributeRate::getRate)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (userPlatSkuDistributeRate != null) {
|
|
|
+ data.setRate(userPlatSkuDistributeRate.getRate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ data.setClickNum(distributePopularizeClickRecordMapper.selectCount(Wrappers.lambdaQuery(DistributePopularizeClickRecord.class)
|
|
|
+ .eq(DistributePopularizeClickRecord::getPopularizeId, data.getId())
|
|
|
+ .ge(startTime != null, DistributePopularizeClickRecord::getCreatedTime, startTime)
|
|
|
+ .lt(endTime != null, DistributePopularizeClickRecord::getCreatedTime, endTime)));
|
|
|
+ String link = data.getPopularizeLink();
|
|
|
+ if (data.getGoodsId() != null && data.getGoodsId() > 0) {
|
|
|
+ if (!envCommonService.isPrdEnv()) {
|
|
|
+ link += "/test/web";
|
|
|
+ }
|
|
|
+ link += "/?gid=" + data.getGoodsId();
|
|
|
+ }
|
|
|
+ data.setUrlCode(QrCodeUtil.generateAsBase64(link, QrConfig.create(), "png"));
|
|
|
});
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(search);
|
|
|
}
|
|
|
@@ -67,10 +145,10 @@ public class CpsPopularizeController {
|
|
|
* 默认链接详情
|
|
|
*/
|
|
|
@GetMapping("/get/default")
|
|
|
- public Result<UserDistributePopularizeView> getDefaultDetail() {
|
|
|
+ public Result<UserDistributePopularizeView> getDefaultDetail(String startTime, String endTime) {
|
|
|
long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
|
|
|
User user = userService.getById(cpsUserId);
|
|
|
- UserDistributePopularizeView view = Optional.ofNullable(cpsPopularizeService.getDefaultPopularizeDetail(cpsUserId)).orElseGet(() -> {
|
|
|
+ UserDistributePopularizeView view = Optional.ofNullable(cpsPopularizeService.getDefaultPopularizeDetail(cpsUserId, startTime, endTime)).orElseGet(() -> {
|
|
|
UserDistributePopularizeView newPopularizeView = new UserDistributePopularizeView();
|
|
|
newPopularizeView.setOrders(0);
|
|
|
newPopularizeView.setOrdersMoney(BigDecimal.ZERO);
|
|
|
@@ -84,6 +162,8 @@ public class CpsPopularizeController {
|
|
|
view.setPopularizeLink(String.format(envCommonService.DISTRIBUTE_DEFAULT_URL_PREFIX, user.getShowId()));
|
|
|
//优惠码
|
|
|
view.setCouponCode(couponDistributePopularizeMapper.getCouponCodeByUid(cpsUserId));
|
|
|
+ view.setClickNum(distributePopularizeClickRecordMapper.selectCount(Wrappers.lambdaQuery(DistributePopularizeClickRecord.class).eq(DistributePopularizeClickRecord::getShowId, user.getShowId())));
|
|
|
+ view.setUrlCode(QrCodeUtil.generateAsBase64(view.getPopularizeLink(), QrConfig.create(), "png"));
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(view);
|
|
|
}
|
|
|
|
|
|
@@ -126,7 +206,8 @@ public class CpsPopularizeController {
|
|
|
* 获取所有平台列表
|
|
|
*/
|
|
|
@GetMapping("/get/all/goods")
|
|
|
- public Result<List<GoodsDon>> getAllGoodsList(Boolean isNoBuyout) {
|
|
|
+ public Result<List<GoodsDon>> getAllGoodsList(Boolean isNoBuyout, Boolean isRate) {
|
|
|
+ Long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
|
|
|
MapBuilder mapBuilder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
//过滤买断制 平台
|
|
|
String conditionSql;
|
|
|
@@ -137,6 +218,13 @@ public class CpsPopularizeController {
|
|
|
conditionSql = "(special_type is null or special_type != 'giftCard')";
|
|
|
}
|
|
|
conditionSql += " and exists (select id from goods_don_sku sku where sku.goods_id = g.id limit 1)";
|
|
|
+ if (isRate != null && isRate) {
|
|
|
+ UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class)
|
|
|
+ .eq(UserDistribute::getUserId, cpsUserId)
|
|
|
+ .eq(UserDistribute::getDeleted, 1)
|
|
|
+ .last("limit 1"));
|
|
|
+ conditionSql += String.format(" and exists (select 1 from user_plat_distribute_rate upr where upr.distribute_id = %s and upr.goods_id = g.id and upr.rate > 0)", userDistribute.getId());
|
|
|
+ }
|
|
|
List<GoodsDon> goodsDons = beanSearcher.searchAll(GoodsDon.class, mapBuilder
|
|
|
.put("condition", conditionSql)
|
|
|
.field(GoodsDon::getType, 1)
|
|
|
@@ -155,4 +243,162 @@ public class CpsPopularizeController {
|
|
|
long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
|
|
|
return GatewayResponse.SUCCESS.newBuilder().toResult(cpsPopularizeService.getServiceCodeUrl(cpsUserId));
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 推广平台海报列表
|
|
|
+ */
|
|
|
+ @GetMapping("/get/ds/poster/goods")
|
|
|
+ public Result<List<DistributePosterGoodsCpsView>> getPosterGoods(String startTime, String endTime) {
|
|
|
+ long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
|
|
|
+ UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class)
|
|
|
+ .eq(UserDistribute::getUserId, cpsUserId)
|
|
|
+ .eq(UserDistribute::getDeleted, 1)
|
|
|
+ .last("limit 1"));
|
|
|
+ MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
+ StringBuilder time = new StringBuilder();
|
|
|
+ if (startTime != null) {
|
|
|
+ time.append(String.format(" and od.created_time >= '%s'", startTime));
|
|
|
+ }
|
|
|
+ if (endTime != null) {
|
|
|
+ time.append(String.format(" and od.created_time < '%s'", endTime));
|
|
|
+ }
|
|
|
+ List<DistributePosterGoodsCpsView> searchAll = beanSearcher.searchAll(DistributePosterGoodsCpsView.class, builder.build());
|
|
|
+ searchAll.forEach(e -> {
|
|
|
+ if (userDistribute != null) {
|
|
|
+ UserPlatDistributeRate userPlatDistributeRate = userPlatDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatDistributeRate.class)
|
|
|
+ .eq(UserPlatDistributeRate::getDistributeId, userDistribute.getId())
|
|
|
+ .eq(UserPlatDistributeRate::getGoodsId, e.getGoodsId())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (userPlatDistributeRate != null) {
|
|
|
+ e.setRate(userPlatDistributeRate.getRate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (e.getIsSkuRate()) {
|
|
|
+ GoodsDonSku sku = skuMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSku.class)
|
|
|
+ .eq(GoodsDonSku::getGoodsId, e.getGoodsId())
|
|
|
+ .eq(GoodsDonSku::getStatus, 1)
|
|
|
+ .orderByAsc(GoodsDonSku::getPrice)
|
|
|
+ .last("limit 1"));
|
|
|
+ //先获取价格最低的规格对应的 比例
|
|
|
+ //渠道
|
|
|
+ if (userDistribute != null) {
|
|
|
+ UserPlatSkuDistributeRate minPriceSkuRate = userPlatSkuDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatSkuDistributeRate.class)
|
|
|
+ .eq(UserPlatSkuDistributeRate::getDistributeId, userDistribute.getId())
|
|
|
+ .eq(UserPlatSkuDistributeRate::getGoodsId, e.getGoodsId())
|
|
|
+ .eq(UserPlatSkuDistributeRate::getSkuId, sku.getId())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (minPriceSkuRate != null && minPriceSkuRate.getRate() != 0) {
|
|
|
+ e.setRate(minPriceSkuRate.getRate());
|
|
|
+ } else {
|
|
|
+ UserPlatSkuDistributeRate userPlatSkuDistributeRate = userPlatSkuDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatSkuDistributeRate.class)
|
|
|
+ .eq(UserPlatSkuDistributeRate::getDistributeId, userDistribute.getId())
|
|
|
+ .eq(UserPlatSkuDistributeRate::getGoodsId, e.getGoodsId())
|
|
|
+ .ne(UserPlatSkuDistributeRate::getRate, 0)
|
|
|
+ //上架
|
|
|
+ .apply("exists (select 1 from goods_don_sku sku where sku.id = sku_id and sku.status is true limit 1)")
|
|
|
+ .orderByAsc(UserPlatSkuDistributeRate::getRate)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (userPlatSkuDistributeRate != null) {
|
|
|
+ e.setRate(userPlatSkuDistributeRate.getRate());
|
|
|
+ sku = skuMapper.selectById(userPlatSkuDistributeRate.getSkuId());
|
|
|
+ e.setPrice(sku.getPrice());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //普通
|
|
|
+ DistributeGeneralSkuRate minPriceRate = distributeGeneralSkuRateMapper.selectOne(Wrappers.lambdaQuery(DistributeGeneralSkuRate.class)
|
|
|
+ .eq(DistributeGeneralSkuRate::getGoodsId, e.getGoodsId())
|
|
|
+ .eq(DistributeGeneralSkuRate::getSkuId, sku.getId())
|
|
|
+ .last("limit 1"));
|
|
|
+ if (minPriceRate != null && minPriceRate.getRate() > 0) {
|
|
|
+ e.setRate(minPriceRate.getRate());
|
|
|
+ } else {
|
|
|
+ DistributeGeneralSkuRate distributeGeneralSkuRate = distributeGeneralSkuRateMapper.selectOne(Wrappers.lambdaQuery(DistributeGeneralSkuRate.class)
|
|
|
+ .eq(DistributeGeneralSkuRate::getGoodsId, e.getGoodsId())
|
|
|
+ .apply("exists (select 1 from goods_don_sku sku where sku.id = sku_id and sku.status is true limit 1)")
|
|
|
+ .ne(DistributeGeneralSkuRate::getRate, 0)
|
|
|
+ .orderByAsc(DistributeGeneralSkuRate::getRate)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (distributeGeneralSkuRate != null) {
|
|
|
+ e.setRate(distributeGeneralSkuRate.getRate());
|
|
|
+ sku = skuMapper.selectById(distributeGeneralSkuRate.getSkuId());
|
|
|
+ e.setPrice(sku.getPrice());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //用户推广海报订单详情
|
|
|
+ MapBuilder posterOrderBuilder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
+ if (time.length() > 0) {
|
|
|
+ posterOrderBuilder.put("time", time.toString());
|
|
|
+ }
|
|
|
+ UserDistributePosterOrderDetailView distributePosterOrderDetailView = beanSearcher.searchFirst(UserDistributePosterOrderDetailView.class, posterOrderBuilder.put("condition", String.format(String.format(" where user_id = %s and poster_id = %s", cpsUserId, e.getId()))).build());
|
|
|
+ if (distributePosterOrderDetailView != null) {
|
|
|
+ e.setOrdersMoney(distributePosterOrderDetailView.getOrdersMoney());
|
|
|
+ e.setOrders(distributePosterOrderDetailView.getOrders());
|
|
|
+ e.setWMoney(distributePosterOrderDetailView.getWMoney());
|
|
|
+ e.setGotMoney(distributePosterOrderDetailView.getGotMoney());
|
|
|
+ e.setClickNum(distributePopularizeClickRecordMapper.selectCount(Wrappers.lambdaQuery(DistributePopularizeClickRecord.class)
|
|
|
+ .eq(DistributePopularizeClickRecord::getRid, distributePosterOrderDetailView.getId())
|
|
|
+ .ge(startTime != null, DistributePopularizeClickRecord::getCreatedTime, startTime)
|
|
|
+ .lt(endTime != null, DistributePopularizeClickRecord::getCreatedTime, endTime)));
|
|
|
+ }
|
|
|
+
|
|
|
+ UserDistributePosterRecord distributePosterRecord = userDistributePosterRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributePosterRecord.class)
|
|
|
+ .eq(UserDistributePosterRecord::getPosterId, e.getId())
|
|
|
+ .eq(UserDistributePosterRecord::getUserId, cpsUserId)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (distributePosterRecord != null) {
|
|
|
+ e.setRid(distributePosterRecord.getId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(searchAll);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户下载海报记录
|
|
|
+ */
|
|
|
+ @PostMapping("/poster/record/{posterId}")
|
|
|
+ public Result<Long> posterRecord(@PathVariable Long posterId) {
|
|
|
+ long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
|
|
|
+ DistributePosterGoods distributePosterGoods = distributePosterGoodsMapper.selectById(posterId);
|
|
|
+ if (distributePosterGoods == null) {
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult();
|
|
|
+ }
|
|
|
+ UserDistributePosterRecord distributePosterRecord = new UserDistributePosterRecord();
|
|
|
+ distributePosterRecord.setPosterId(posterId);
|
|
|
+ distributePosterRecord.setUserId(cpsUserId);
|
|
|
+ try {
|
|
|
+ userDistributePosterRecordMapper.insert(distributePosterRecord);
|
|
|
+ } catch (DuplicateKeyException e) {
|
|
|
+ distributePosterRecord = userDistributePosterRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributePosterRecord.class)
|
|
|
+ .eq(UserDistributePosterRecord::getUserId, cpsUserId)
|
|
|
+ .eq(UserDistributePosterRecord::getPosterId, posterId)
|
|
|
+ .last("limit 1"));
|
|
|
+ }
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult(distributePosterRecord.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新推荐海报状态
|
|
|
+ */
|
|
|
+ @PutMapping("/update/recommend/status")
|
|
|
+ public Result<String> updateRecommendStatus() {
|
|
|
+ long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
|
|
|
+
|
|
|
+ UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class)
|
|
|
+ .eq(UserDistribute::getUserId, cpsUserId)
|
|
|
+ .eq(UserDistribute::getDeleted, 1)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (userDistribute != null) {
|
|
|
+ Boolean isPoster = userDistribute.getIsPoster();
|
|
|
+ userDistributeMapper.update(null, Wrappers.lambdaUpdate(UserDistribute.class)
|
|
|
+ .set(UserDistribute::getIsPoster, !isPoster)
|
|
|
+ .eq(UserDistribute::getId, userDistribute.getId()));
|
|
|
+ }
|
|
|
+ return GatewayResponse.SUCCESS.newBuilder().toResult();
|
|
|
+ }
|
|
|
}
|