Răsfoiți Sursa

普通渠道规格分销

zoujiajian 2 ani în urmă
părinte
comite
4c6590725b

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributeGeneralSkuRateMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.DistributeGeneralSkuRate;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributeGeneralSkuRateMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/24 14:05
+ */
+public interface DistributeGeneralSkuRateMapper extends BaseMapper<DistributeGeneralSkuRate> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/manage/distribute/DistributePosterGoodsMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper.manage.distribute;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.DistributePosterGoods;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributePosterGoodsMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/6/24 13:49
+ */
+public interface DistributePosterGoodsMapper extends BaseMapper<DistributePosterGoods> {
+}

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributeGeneralSkuRate.java

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributeGeneralSkuRate
+ * 创建者: JavaZou
+ * 创建时间:2024/6/24 14:04
+ */
+
+@Getter
+@Setter
+public class DistributeGeneralSkuRate extends BaseEntity {
+	private Long goodsId;
+
+	private Long skuId;
+
+	private Integer rate;
+}

+ 25 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DistributePosterGoods.java

@@ -0,0 +1,25 @@
+package com.cyksj.model.entity;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributePosterGoods
+ * 创建者: JavaZou
+ * 创建时间:2024/6/24 13:48
+ */
+
+@Getter
+@Setter
+public class DistributePosterGoods extends BaseEntity{
+
+	private String name;
+
+	private Long goodsId;
+
+	private String skuIds;
+
+	private String img;
+}

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributePosterGoodsDetailView.java

@@ -0,0 +1,39 @@
+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;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributePosterGoodsDetailView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/24 15:32
+ */
+
+@Getter
+@Setter
+@SearchBean(tables = "distribute_poster_goods dp inner join goods_don g on g.id = dp.goods_id",
+		where = "g.status is true and g.deleted is true")
+public class DistributePosterGoodsDetailView {
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("g.id")
+	private Long goodsId;
+
+	@DbField("dp.name")
+	private String name;
+
+	@DbField("dp.img")
+	private String img;
+
+	@DbField("dp.sku_ids")
+	private String skuIds;
+
+	@DbIgnore
+	private String nickname;
+}

+ 53 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributePosterGoodsFrontView.java

@@ -0,0 +1,53 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributePosterGoodsFrontView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/24 14:36
+ */
+
+@Getter
+@Setter
+@SearchBean(tables = "distribute_poster_goods dp inner join goods_don g on g.id = dp.goods_id" +
+		" left join user_distribute ud on ud.goods_id = g.id and ud.deleted is true :uid:",
+		where = "g.status is true and g.deleted is true",
+		orderBy = "dp.update_time desc")
+public class DistributePosterGoodsFrontView {
+	@DbField("g.id")
+	private Long goodsId;
+
+	@DbField("g.title")
+	private String title;
+
+	/**
+	 * 推广名称
+	 */
+	@DbField("dp.name")
+	private String name;
+
+	@DbField("dp.img")
+	private String img;
+
+	@DbField("g.logo")
+	private String logo;
+
+	@DbField("ifnull(ud.rate,g.rate)")
+	private Integer rate;
+
+	@DbField("g.is_sku_distribute")
+	private Boolean isSkuRate;
+
+	@DbField("ud.id")
+	private Long distributeId;
+
+	@DbField("g.min_price")
+	private BigDecimal price;
+}

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsDonSkuRateView.java

@@ -0,0 +1,39 @@
+package com.cyksj.model.views;
+
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: GoodsDonSkuRateView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/24 14:17
+ */
+
+@Getter
+@Setter
+@SearchBean(tables = "goods_don_sku sku inner join goods_don g on g.id = sku.goods_id" +
+		" left join distribute_general_sku_rate sr on sr.sku_id = sku.id",
+		where = "g.is_distribute is true and g.is_sku_distribute is true and g.type = 1 and g.status is true and g.deleted is true and sku.status is true")
+public class GoodsDonSkuRateView {
+	@DbField("sr.id")
+	private Long id;
+
+	@DbField("sku.goods_don")
+	private Long goodsId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("sku.id")
+	private Long skuId;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+
+	@DbField("sr.rate")
+	private Integer rate = 0;
+}

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

@@ -257,4 +257,7 @@ public class RenewalView {
      */
     @DbIgnore
     private Boolean qa;
+
+    @DbIgnore
+    private DistributePosterGoodsDetailView posterInfo;
 }

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/distribute/DistributeService.java

@@ -1,5 +1,6 @@
 package com.cyksj.service.distribute;
 
+import com.cyksj.model.entity.DistributeGeneralSkuRate;
 import com.cyksj.model.request.UserDistributeReq;
 
 import java.util.List;
@@ -29,4 +30,6 @@ public interface DistributeService {
 	void bindPopularizeCode(Long userId, String code);
 
 	void unbindUserDistributeShared(List<Object> userBind) throws Exception;
+
+	void setDistributeCommonSkuRate(List<DistributeGeneralSkuRate> skuRates);
 }

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

@@ -81,6 +81,8 @@ public class DistributeServiceImpl implements DistributeService {
 
 	private final UserDistributeSubMapper userDistributeSubMapper;
 
+	private final DistributeGeneralSkuRateMapper generalSkuRateMapper;
+
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public void insertDistribute(UserDistributeReq userDistributeReq) {
@@ -379,6 +381,24 @@ public class DistributeServiceImpl implements DistributeService {
 		}
 	}
 
+	@Override
+	public void setDistributeCommonSkuRate(List<DistributeGeneralSkuRate> skuRates) {
+		skuRates.forEach(e -> {
+			Integer rate = e.getRate();
+			if (rate == null || rate < 0 || rate > 100) {
+				throw BusinessRuntimeException.getInstance("请输入正确的比例");
+			}
+			if (e.getId() == null) {
+				try {
+					generalSkuRateMapper.insert(e);
+				} catch (DuplicateKeyException ex) {
+				}
+			} else {
+				generalSkuRateMapper.updateById(e);
+			}
+		});
+	}
+
 	public void checkDistributorAndBusinessRate(Integer distributeGoodsRate, Long goodsId, String goodsName) {
 		UserBusinessDefaultRateConfig defaultGoodsRateConfig = defaultRateConfigMapper.selectOne(Wrappers.lambdaQuery(UserBusinessDefaultRateConfig.class)
 				.eq(UserBusinessDefaultRateConfig::getGoodsId, goodsId)

+ 9 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -315,6 +315,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final OrderDonExceptionUserRecordMapper orderDonExceptionUserRecordMapper;
 
+	private final DistributeGeneralSkuRateMapper distributeGeneralSkuRateMapper;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -1558,6 +1560,13 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 							}
 						}
 					}
+					//该平台是否开启规格分销
+					if (goodsDon.getIsSkuDistribute()) {
+						//是否设置对应规格分销比例
+						DistributeGeneralSkuRate skuRate = distributeGeneralSkuRateMapper.selectOne(Wrappers.lambdaQuery(DistributeGeneralSkuRate.class)
+								.eq(DistributeGeneralSkuRate::getSkuId, goodsDonSku.getId()).last("limit 1"));
+						if (skuRate != null) rate = skuRate.getRate();
+					}
 					returnMoney = orderMoney.multiply(BigDecimal.valueOf(rate)).divide(BigDecimal.valueOf(100));
 				} else {
 					businessId = userDistribute.getBusinessId();

+ 11 - 0
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -21,6 +21,7 @@ import com.cyksj.common.util.StringUtil;
 import com.cyksj.common.util.TicketCodeCommonUtil;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.mapper.*;
+import com.cyksj.mapper.manage.distribute.DistributePosterGoodsMapper;
 import com.cyksj.mapper.sys.SysEmailMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.SpecialGoodsTicketReq;
@@ -127,6 +128,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final GroupsRelationNetflixService groupsRelationNetflixService;
 
+	private final DistributePosterGoodsMapper distributePosterGoodsMapper;
+
 	@Override
 	public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account) {
 		User u = userMapper.selectById(userId);
@@ -296,6 +299,14 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 			}
 			Long qaId = groupsRelationMapper.selectGoodsDonQaByGoodsId(ticket.getGoodsId());
 			ticket.setQa(qaId > 0 ? true : false);
+
+			//是否存在海报
+			DistributePosterGoodsDetailView distributePosterGoodsDetailView = beanSearcher.searchFirst(DistributePosterGoodsDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
+					.field(DistributePosterGoodsFrontView::getGoodsId, ticket.getGoodsId()).build());
+			if (distributePosterGoodsDetailView != null) {
+				distributePosterGoodsDetailView.setNickname(u.getNickname());
+			}
+			ticket.setPosterInfo(distributePosterGoodsDetailView);
 		});
 		userLoginRecordService.saveUserLoginDayRecord(userId);
 		return list;

+ 20 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java

@@ -352,6 +352,26 @@ public class DistributeController {
 				.select(GoodsDon::getId, GoodsDon::getType, GoodsDon::getTitle, GoodsDon::getRate, GoodsDon::getSecondRate)));
 	}
 
+	/**
+	 * 平台开启规格分销
+	 */
+	@GetMapping("/get/sku/rate")
+	public Result<List<GoodsDonSkuRateView>> getSkuRate() {
+		List<GoodsDonSkuRateView> goodsDonSkuRateViews = beanSearcher.searchAll(GoodsDonSkuRateView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.orderBy(GoodsDonSkuRateView::getGoodsId).asc()
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(goodsDonSkuRateViews);
+	}
+
+	/**
+	 * 设置普通分销平台规格比例
+	 */
+	@PutMapping("/set/common/sku/rate")
+	public Result<String> setDistributeCommonSkuRate(@RequestBody List<DistributeGeneralSkuRate> skuRates) {
+		distributeService.setDistributeCommonSkuRate(skuRates);
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+
 	/**
 	 * 获取推广者分销订单详情
 	 */

+ 52 - 0
netflix-web/src/main/java/com/cyksj/web/controller/user/UserController.java

@@ -8,8 +8,11 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayApiCode;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsDonSkuMapper;
 import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
+import com.cyksj.mapper.manage.distribute.DistributeGeneralSkuRateMapper;
+import com.cyksj.mapper.manage.distribute.UserPlatSkuDistributeRateMapper;
 import com.cyksj.model.dto.UserWhoami;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
@@ -36,6 +39,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -73,6 +77,12 @@ public class UserController {
 
     private final CorpInteractiveReaderFrontService corpInteractiveReaderFrontService;
 
+    private final UserPlatSkuDistributeRateMapper userPlatSkuDistributeRateMapper;
+
+    private final DistributeGeneralSkuRateMapper distributeGeneralSkuRateMapper;
+
+    private final GoodsDonSkuMapper skuMapper;
+
     @GetMapping(value = "/wx/whoami")
     public Result<UserWhoami> whoami() {
         long userId = StpUserUtil.getLoginIdAsLong();
@@ -426,4 +436,46 @@ public class UserController {
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 推广平台海报列表
+     */
+    @GetMapping("/get/ds/poster/goods")
+    public Result<List<DistributePosterGoodsFrontView>> getPosterGoods() {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        List<DistributePosterGoodsFrontView> searchAll = beanSearcher.searchAll(DistributePosterGoodsFrontView.class, MapUtils
+                .flatBuilder(request.getParameterMap())
+                .put("uid", String.format(" and ud.user_id = %s", userId))
+                .build());
+        searchAll.forEach(e -> {
+            if (e.getIsSkuRate()) {
+                BigDecimal price = e.getPrice();
+                GoodsDonSku sku = skuMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSku.class)
+                        .eq(GoodsDonSku::getGoodsId, e.getGoodsId())
+                        .eq(GoodsDonSku::getPrice, price)
+                        .last("limit 1"));
+                if (sku != null) {
+                    if (e.getDistributeId() != null) {
+                        UserPlatSkuDistributeRate userPlatSkuDistributeRate = userPlatSkuDistributeRateMapper.selectOne(Wrappers.lambdaQuery(UserPlatSkuDistributeRate.class)
+                                .eq(UserPlatSkuDistributeRate::getDistributeId, e.getDistributeId())
+                                .eq(UserPlatSkuDistributeRate::getGoodsId, e.getGoodsId())
+                                .eq(UserPlatSkuDistributeRate::getSkuId, sku.getId())
+                                .last("limit 1"));
+                        if (userPlatSkuDistributeRate != null) {
+                            e.setRate(userPlatSkuDistributeRate.getRate());
+                        }
+                    } else {
+                        DistributeGeneralSkuRate distributeGeneralSkuRate = distributeGeneralSkuRateMapper.selectOne(Wrappers.lambdaQuery(DistributeGeneralSkuRate.class)
+                                .eq(DistributeGeneralSkuRate::getGoodsId, e.getGoodsId())
+                                .eq(DistributeGeneralSkuRate::getSkuId, sku.getId())
+                                .last("limit 1"));
+                        if (distributeGeneralSkuRate != null) {
+                            e.setRate(distributeGeneralSkuRate.getRate());
+                        }
+                    }
+                }
+            }
+        });
+        return GatewayResponse.SUCCESS.newBuilder().toResult(searchAll);
+    }
+
 }