Browse Source

fix 店铺商务

zoujiajian 2 years ago
parent
commit
830b60ea88
19 changed files with 729 additions and 6 deletions
  1. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/YhShopUserBusinessDefaultRateConfigMapper.java
  2. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/YhShopUserPlatDistributeRateMapper.java
  3. 4 0
      netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopMapper.java
  4. 31 0
      netflix-dao/src/main/java/com/cyksj/model/entity/YhShopUserBusinessDefaultRateConfig.java
  5. 31 0
      netflix-dao/src/main/java/com/cyksj/model/entity/YhShopUserPlatDistributeRate.java
  6. 4 0
      netflix-dao/src/main/java/com/cyksj/model/manage/entity/YhShop.java
  7. 14 1
      netflix-dao/src/main/java/com/cyksj/model/manage/entity/YhShopDistributeWaitingSendPoints.java
  8. 1 1
      netflix-dao/src/main/java/com/cyksj/model/views/UserBusinessDefaultRateConfigView.java
  9. 50 0
      netflix-dao/src/main/java/com/cyksj/model/views/YhShopDistributeOrderView.java
  10. 79 0
      netflix-dao/src/main/java/com/cyksj/model/views/YhShopDistributeView.java
  11. 45 0
      netflix-dao/src/main/java/com/cyksj/model/views/YhShopRegisterDetail.java
  12. 49 0
      netflix-dao/src/main/java/com/cyksj/model/views/YhShopRegisterOrderDetail.java
  13. 39 0
      netflix-dao/src/main/java/com/cyksj/model/views/YhShopUserBusinessDefaultRateConfigView.java
  14. 22 0
      netflix-dao/src/main/resources/mapper/YhShopMapper.xml
  15. 13 0
      netflix-service/src/main/java/com/cyksj/service/YhShopUserPlatDistributeRateService.java
  16. 9 0
      netflix-service/src/main/java/com/cyksj/service/mange/CmsYhShopCommonService.java
  17. 94 1
      netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsYhShopCommonServiceImpl.java
  18. 19 0
      netflix-service/src/main/java/com/cyksj/service/mange/goods/YhShopUserPlatDistributeRateServiceImpl.java
  19. 199 3
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsYhShopGoodsController.java

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/YhShopUserBusinessDefaultRateConfigMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.YhShopUserBusinessDefaultRateConfig;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopUserBusinessDefaultRateConfigMapper
+ *创建者: JavaZou
+ *创建时间:2023/9/18 17:05
+ */
+public interface YhShopUserBusinessDefaultRateConfigMapper extends BaseMapper<YhShopUserBusinessDefaultRateConfig> {
+}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/YhShopUserPlatDistributeRateMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.YhShopUserPlatDistributeRate;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopUserPlatDistributeRateMapper
+ *创建者: JavaZou
+ *创建时间:2023/9/18 14:26
+ */
+public interface YhShopUserPlatDistributeRateMapper extends BaseMapper<YhShopUserPlatDistributeRate> {
+}

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/mapper/shop/YhShopMapper.java

@@ -2,6 +2,7 @@ package com.cyksj.mapper.shop;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.cyksj.model.manage.entity.YhShop;
+import com.cyksj.model.views.YhShopDistributeView;
 
 /*
  *项目名: yhlxj
@@ -10,4 +11,7 @@ import com.cyksj.model.manage.entity.YhShop;
  *创建时间:2023/9/14 16:58
  */
 public interface YhShopMapper extends BaseMapper<YhShop> {
+	String selectSoldMaxGoods(Long userId);
+
+	YhShopDistributeView getApplyDetailByUserId(Long userId);
 }

+ 31 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/YhShopUserBusinessDefaultRateConfig.java

@@ -0,0 +1,31 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopUserBusinessDefaultRateConfig
+ *创建者: JavaZou
+ *创建时间:2023/9/18 17:05
+ */
+@Getter
+@Setter
+public class YhShopUserBusinessDefaultRateConfig extends BaseEntity {
+	private Long goodsId;
+
+	/**
+	 * 标准配置分销者比例
+	 */
+	private Integer rate;
+
+	/**
+	 * 最高可配置分销者比例
+	 */
+	private Integer maxRate;
+
+	/**
+	 * 超过配置最高分销者比例是否平台承担
+	 */
+	private Boolean isPlatPay;
+}

+ 31 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/YhShopUserPlatDistributeRate.java

@@ -0,0 +1,31 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopUserPlatDistributeRate
+ *创建者: JavaZou
+ *创建时间:2023/9/18 14:23
+ */
+@Getter
+@Setter
+public class YhShopUserPlatDistributeRate extends BaseEntity{
+	private Long goodsId;
+
+	/**
+	 * 店铺主id
+	 */
+	private Long userId;
+
+	/**
+	 * 分销比例
+	 */
+	private Integer rate = 0;
+
+	/**
+	 * 第二分销比例 不包含套餐
+	 */
+	private Integer secondRate;
+}

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

@@ -4,6 +4,8 @@ import com.cyksj.model.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /*
  *项目名: yhlxj
  *文件名: YhShop
@@ -33,6 +35,8 @@ public class YhShop extends BaseEntity {
 	 */
 	private Long businessId;
 
+	private Date businessBindTime;
+
 	/**
 	 * 是否审核通过
 	 */

+ 14 - 1
netflix-dao/src/main/java/com/cyksj/model/manage/entity/YhShopDistributeWaitingSendPoints.java

@@ -23,7 +23,7 @@ public class YhShopDistributeWaitingSendPoints extends BaseEntity {
 	/**
 	 * 店铺主id
 	 */
-	private Long soUserId;
+	private Long shopUserId;
 
 	private Long orderId;
 
@@ -40,4 +40,17 @@ public class YhShopDistributeWaitingSendPoints extends BaseEntity {
 	private BigDecimal refundMoney;
 
 	private Status sendStatus;
+
+	public enum Status{
+		close("店铺分销订单关闭,积分奖励不分发"),
+		success("积分发送成功"),
+		waiting("积分等待发送"),
+		not_exist("用户不存在,导致发送失败"),
+		;
+		String desc;
+
+		Status(String desc) {
+			this.desc = desc;
+		}
+	}
 }

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

@@ -14,7 +14,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @SearchBean(tables = "user_business_default_rate_config uc left join goods_don g on g.id = uc.goods_id"
-		, where = "g.deleted is true")
+		, where = "g.deleted is true and g.status is true")
 public class UserBusinessDefaultRateConfigView {
 	@DbField("uc.id")
 	private Long id;

+ 50 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopDistributeOrderView.java

@@ -0,0 +1,50 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.manage.entity.YhShopDistributeWaitingSendPoints;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopDistributeOrderView
+ *创建者: JavaZou
+ *创建时间:2023/9/18 15:02
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select * from yh_shop_distribute_waiting_send_points :suId:) dp left join order_don od on od.id = dp.order_id" +
+		" left join user u on u.id = dp.user_id" +
+		" left join goods_don gd on gd.id = od.goods_id")
+public class YhShopDistributeOrderView {
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("u.id")
+	private Long userId;
+
+	@DbField("dp.shop_user_id")
+	private Long shopUserId;
+
+	@DbField("gd.title")
+	private String platform;
+
+	@DbField("od.money")
+	private BigDecimal money;
+
+	@DbField("od.created_time")
+	private Date orderTime;
+
+	/**
+	 * 提成金额
+	 */
+	@DbField("dp.money")
+	private BigDecimal takeMoney;
+
+	@DbField("dp.send_status")
+	private YhShopDistributeWaitingSendPoints.Status sendStatus;
+}

+ 79 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopDistributeView.java

@@ -0,0 +1,79 @@
+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.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopDistributeOrderView
+ *创建者: JavaZou
+ *创建时间:2023/9/18 13:51
+ */
+@Getter
+@Setter
+@SearchBean(tables = "yh_shop ys left join yh_shop_user_distribute_shared us on us.shop_user_id = ys.user_id" +
+		" left join order_don od on od.yhs_id = ys.id and od.status not in ('noPayment', 'close') :time:",
+		where = "ys.verify_status = 'success'",
+		groupBy = "ys.id,ys.user_id,ys.business_id,ys.created_time,ys.update_time")
+public class YhShopDistributeView {
+	@DbField("ys.id")
+	private Long id;
+
+	@DbField("ys.user_id")
+	private Long userId;
+
+	@DbField("ys.business_id")
+	private Long businessId;
+
+	@DbIgnore
+	private String businessName;
+
+	@DbIgnore
+	private String nickname;
+
+	@DbField("count(yp.order_id)")
+	private Integer orders;
+
+	/**
+	 * 分销人数
+	 * 其中拉新用户购买一单又退款,且无后续下单动作的不算分销用户,不统计在此字段内
+	 */
+	@DbField("count(DISTINCT CASE WHEN od.status != 'refund' THEN us.user_id ELSE null END)")
+	private Integer distributeUserNum;
+
+	/**
+	 * 邀请人数
+	 */
+	@DbField("count(DISTINCT us.user_id)")
+	private Integer inviteNum;
+
+	/**
+	 * 分销订单金额(无需产生积分)
+	 */
+	@DbField("(ifnull(sum(od.money),0) - ifnull(sum(od.refund_money),0))")
+	private BigDecimal distributeOrdersMoney;
+
+	/**
+	 * 销量最高的产品
+	 */
+	@DbIgnore
+	private String goodsTitle;
+
+	@DbField("ys.created_time")
+	private Date createdTime;
+
+	@DbField("ys.update_time")
+	private Date updateTime;
+
+	@DbIgnore
+	private BigDecimal availableMoney;
+
+	@DbIgnore
+	private BigDecimal gotMoney;
+}

+ 45 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopRegisterDetail.java

@@ -0,0 +1,45 @@
+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.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopRegisterDetail
+ *创建者: JavaZou
+ *创建时间:2023/9/18 14:36
+ */
+@Getter
+@Setter
+@SearchBean(tables = "yh_shop_user_distribute_shared us left join user u on u.id = us.user_id")
+public class YhShopRegisterDetail {
+	@DbField("us.id")
+	private Long id;
+
+	/**
+	 * 店铺主id
+	 */
+	@DbField("us.shop_user_id")
+	private Long shopUserId;
+
+	@DbField("u.created_time")
+	private Date registerDate;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("us.user_id")
+	private Long userId;
+
+	@DbIgnore
+	private Integer orderNums;
+
+	@DbIgnore
+	private BigDecimal money;
+}

+ 49 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopRegisterOrderDetail.java

@@ -0,0 +1,49 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.OrderDon;
+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.math.BigDecimal;
+import java.util.Date;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopRegisterOrderDetail
+ *创建者: JavaZou
+ *创建时间:2023/9/18 14:43
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select * from order_don :condition:) od left join goods_don g on g.id = od.goods_id left join goods_don_sku sku on sku.id = od.sku_id")
+public class YhShopRegisterOrderDetail {
+	@DbField("od.created_time")
+	private Date createdTime;
+
+	@DbField("od.money")
+	private BigDecimal money;
+
+	@DbField("od.status")
+	private OrderDon.Status status;
+
+	@DbField("od.user_id")
+	private Long userId;
+
+	@DbIgnore
+	private String nickname;
+
+	@DbField("gd.id")
+	private Long goodsId;
+
+	@DbField("gd.title")
+	private String platform;
+
+	@DbField("od.sku_id")
+	private Long skuId;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+}

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopUserBusinessDefaultRateConfigView.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
+ *文件名: YhShopUserBusinessDefaultRateConfigView
+ *创建者: JavaZou
+ *创建时间:2023/9/18 17:01
+ */
+@Getter
+@Setter
+@SearchBean(tables = "yh_shop_user_business_default_rate_config uc left join goods_don g on g.id = uc.goods_id"
+		, where = "g.deleted is true and g.status is true")
+public class YhShopUserBusinessDefaultRateConfigView {
+	@DbField("uc.id")
+	private Long id;
+
+	@DbField("uc.goods_id")
+	private Long goodsId;
+
+	@DbField("g.type")
+	private Integer type;
+
+	@DbField("g.title")
+	private String goodsName;
+
+	@DbField("uc.rate")
+	private Integer rate;
+
+	@DbField("uc.max_rate")
+	private Integer maxRate;
+
+	@DbField("uc.is_plat_pay")
+	private Boolean isPlatPay;
+}

+ 22 - 0
netflix-dao/src/main/resources/mapper/YhShopMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.cyksj.mapper.shop.YhShopMapper">
+
+    <select id="selectSoldMaxGoods" resultType="java.lang.String">
+        select title
+        from goods_don
+        where id = (select od.goods_id
+                    from (select id from yh_shop where user_id = #{userId} limit 1) s
+                             inner join order_don od
+                                        on od.ysh_id = s.id and od.status not in ('close', 'noPayment', 'refund')
+                    group by od.goods_id
+                    order by max(od.money) desc limit 1)
+    </select>
+
+    <select id="getApplyDetailByUserId" resultType="com.cyksj.model.views.YhShopDistributeView">
+        select ifnull(sum(da.money), 0) as gotMoney, u.yhs_money as availableMoney
+        from (select id, points from user where id = #{userId} limit 1) u
+                 left join yh_shop_distribute_money_apply da on da.user_id = u.id and verify_status = 'success'
+        group by u.id, u.points
+    </select>
+</mapper>

+ 13 - 0
netflix-service/src/main/java/com/cyksj/service/YhShopUserPlatDistributeRateService.java

@@ -0,0 +1,13 @@
+package com.cyksj.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cyksj.model.entity.YhShopUserPlatDistributeRate;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopUserPlatDistributeRateService
+ *创建者: JavaZou
+ *创建时间:2023/9/18 14:26
+ */
+public interface YhShopUserPlatDistributeRateService extends IService<YhShopUserPlatDistributeRate> {
+}

+ 9 - 0
netflix-service/src/main/java/com/cyksj/service/mange/CmsYhShopCommonService.java

@@ -1,5 +1,8 @@
 package com.cyksj.service.mange;
 
+import com.cyksj.model.entity.YhShopUserBusinessDefaultRateConfig;
+import com.cyksj.model.entity.YhShopUserPlatDistributeRate;
+import com.cyksj.model.manage.entity.YhShop;
 import com.cyksj.model.request.ShopGeneralGoodsRateReq;
 import com.cyksj.model.request.YhShopVerifyReq;
 
@@ -15,4 +18,10 @@ public interface CmsYhShopCommonService {
 	void setGeneralGoodsRate(List<ShopGeneralGoodsRateReq> rates);
 
 	void verifyYhShopApply(YhShopVerifyReq verifyReq);
+
+	void setYhShopGoodsRate(List<YhShopUserPlatDistributeRate> yhShopUserPlatDistributeRates);
+
+	void setYhShopBusiness(YhShop yhShop);
+
+	void setBusinessDefaultRate(List<YhShopUserBusinessDefaultRateConfig> configs);
 }

+ 94 - 1
netflix-service/src/main/java/com/cyksj/service/mange/goods/CmsYhShopCommonServiceImpl.java

@@ -1,23 +1,35 @@
 package com.cyksj.service.mange.goods;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.mapper.GoodsDonMapper;
 import com.cyksj.mapper.YhShopGeneralGoodsRateMapper;
+import com.cyksj.mapper.YhShopUserBusinessDefaultRateConfigMapper;
 import com.cyksj.mapper.shop.YhShopMapper;
-import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.entity.YhShop;
 import com.cyksj.model.request.ShopGeneralGoodsRateReq;
 import com.cyksj.model.request.YhShopVerifyReq;
+import com.cyksj.model.views.GoodsDonSkuView;
+import com.cyksj.service.YhShopUserPlatDistributeRateService;
 import com.cyksj.service.mange.CmsYhShopCommonService;
+import com.cyksj.service.mange.business.UserBusinessRateService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 /*
  *项目名: yhlxj
@@ -34,6 +46,14 @@ public class CmsYhShopCommonServiceImpl implements CmsYhShopCommonService {
 
 	private final YhShopMapper yhShopMapper;
 
+	private final UserBusinessRateService userBusinessRateService;
+
+	private final YhShopUserPlatDistributeRateService yhShopUserPlatDistributeRateService;
+
+	private final YhShopUserBusinessDefaultRateConfigMapper yhShopUserBusinessDefaultRateConfigMapper;
+
+	private final BeanSearcher beanSearcher;
+
 	@Override
 	public void setGeneralGoodsRate(List<ShopGeneralGoodsRateReq> rates) {
 		List<ShopGeneralGoodsRateReq> saveShopGoodsRate = new ArrayList<>(rates.size());
@@ -80,4 +100,77 @@ public class CmsYhShopCommonServiceImpl implements CmsYhShopCommonService {
 				.set(verifyStatus == YhShop.Status.success, YhShop::getReason, null)
 				.eq(YhShop::getId, id));
 	}
+
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void setYhShopGoodsRate(List<YhShopUserPlatDistributeRate> yhShopUserPlatDistributeRates) {
+		AtomicBoolean checkShopOwner = new AtomicBoolean(false);
+		yhShopUserPlatDistributeRates.forEach(data -> {
+			Long userId = data.getUserId();
+			if (!checkShopOwner.get()) {
+				YhShop yhShop = yhShopMapper.selectOne(Wrappers.lambdaQuery(YhShop.class)
+						.eq(YhShop::getVerifyStatus, YhShop.Status.success)
+						.eq(YhShop::getUserId, userId).last("limit 1"));
+				Assert.notNull(yhShop, "请检查该店铺是不是存在或审核成功");
+				checkShopOwner.set(true);
+			}
+			Long goodsId = data.getGoodsId();
+			GoodsDon goodsDon = goodsDonMapper.selectById(goodsId);
+			Assert.notNull(goodsDon, "请检查你设置的平台是否存在");
+			Integer rate = data.getRate();
+			if (rate == null || rate < 0 || rate > 100) {
+				throw BusinessRuntimeException.getInstance("请输入正确的店铺分销平台比例");
+			}
+			Integer secondRate = data.getSecondRate();
+			if (secondRate != null && (secondRate < 0 || secondRate > 100)) {
+				throw BusinessRuntimeException.getInstance("请输入正确的分销比例");
+			}
+		});
+		yhShopUserPlatDistributeRateService.saveOrUpdateBatch(yhShopUserPlatDistributeRates);
+	}
+
+	@Override
+	public void setYhShopBusiness(YhShop yhShop) {
+		Long businessId = yhShop.getBusinessId();
+		Long id = yhShop.getId();
+		YhShop dbShop = yhShopMapper.selectById(id);
+		Assert.notNull(dbShop, "请检查店铺是否存在");
+		if (businessId != null) {
+			if (!userBusinessRateService.isBusiness(businessId)) {
+				throw BusinessRuntimeException.getInstance("请选择对应的商务人员");
+			}
+		}
+		yhShopMapper.update(null, Wrappers.lambdaUpdate(YhShop.class)
+				.set(businessId == null, YhShop::getBusinessId, 0)
+				.set(businessId == null, YhShop::getBusinessBindTime, null)
+				.set(businessId != null, YhShop::getBusinessId, businessId)
+				.set(businessId != null, YhShop::getBusinessBindTime, DateTime.now())
+				.eq(YhShop::getId, id));
+	}
+
+	@Override
+	public void setBusinessDefaultRate(List<YhShopUserBusinessDefaultRateConfig> configs) {
+		configs.forEach(rateConfig -> {
+			Long rateConfigId = rateConfig.getId();
+			YhShopUserBusinessDefaultRateConfig config = Optional.ofNullable(yhShopUserBusinessDefaultRateConfigMapper.selectById(rateConfigId)).orElse(new YhShopUserBusinessDefaultRateConfig());
+			BeanUtil.copyProperties(rateConfig, config);
+			Number number = beanSearcher.searchCount(GoodsDonSkuView.class, MapUtils.builder()
+					.field(GoodsDonSkuView::getGoodsId, rateConfig.getGoodsId())
+					.field(GoodsDonSkuView::getGoodsDonDeleted, true)
+					.build());
+			if (number.intValue() == 0) {
+				yhShopUserBusinessDefaultRateConfigMapper.delete(Wrappers.lambdaQuery(YhShopUserBusinessDefaultRateConfig.class)
+						.eq(YhShopUserBusinessDefaultRateConfig::getGoodsId, rateConfig.getGoodsId()));
+				return;
+			}
+			if (rateConfig.getId() == null) {
+				try {
+					yhShopUserBusinessDefaultRateConfigMapper.insert(config);
+					return;
+				} catch (DuplicateKeyException e) {
+				}
+			}
+			yhShopUserBusinessDefaultRateConfigMapper.updateById(config);
+		});
+	}
 }

+ 19 - 0
netflix-service/src/main/java/com/cyksj/service/mange/goods/YhShopUserPlatDistributeRateServiceImpl.java

@@ -0,0 +1,19 @@
+package com.cyksj.service.mange.goods;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyksj.mapper.YhShopUserPlatDistributeRateMapper;
+import com.cyksj.model.entity.YhShopUserPlatDistributeRate;
+import com.cyksj.service.YhShopUserPlatDistributeRateService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopUserPlatDistributeRateServiceImpl
+ *创建者: JavaZou
+ *创建时间:2023/9/18 14:25
+ */
+@Service
+@RequiredArgsConstructor
+public class YhShopUserPlatDistributeRateServiceImpl extends ServiceImpl<YhShopUserPlatDistributeRateMapper, YhShopUserPlatDistributeRate> implements YhShopUserPlatDistributeRateService {
+}

+ 199 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsYhShopGoodsController.java

@@ -1,26 +1,41 @@
 package com.cyksj.web.controller.manage.goods;
 
+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;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.UserMapper;
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
+import com.cyksj.mapper.shop.YhShopMapper;
+import com.cyksj.model.entity.User;
 import com.cyksj.model.entity.YhShopGoodsRate;
+import com.cyksj.model.entity.YhShopUserBusinessDefaultRateConfig;
+import com.cyksj.model.entity.YhShopUserPlatDistributeRate;
+import com.cyksj.model.manage.entity.YhShop;
 import com.cyksj.model.request.GoodsDonShopRateReq;
 import com.cyksj.model.request.ShopGeneralGoodsRateReq;
 import com.cyksj.model.request.YhShopVerifyReq;
-import com.cyksj.model.views.ShopGeneralGoodsRateView;
-import com.cyksj.model.views.YhShopGoodsRateView;
-import com.cyksj.model.views.YhShopView;
+import com.cyksj.model.views.*;
 import com.cyksj.service.mange.CmsYhShopCommonService;
 import com.cyksj.service.mange.CmsYhShopGoodsRateService;
+import com.cyksj.service.mange.business.UserBusinessRateService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.param.Operator;
+import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 /**
@@ -41,6 +56,14 @@ public class CmsYhShopGoodsController {
 
     private final HttpServletRequest request;
 
+    private final UserBusinessRateService userBusinessRateService;
+
+    private final UserMapper userMapper;
+
+    private final CmsUserMapper cmsUserMapper;
+
+    private final YhShopMapper yhShopMapper;
+
 
     /**
      * 获取店铺平台价格
@@ -87,6 +110,179 @@ public class CmsYhShopGoodsController {
         return GatewayResponse.SUCCESS.newBuilder().toResult(shopGeneralGoodsRateViews);
     }
 
+    /**
+     * 店铺管理列表
+     */
+    @GetMapping("/get")
+    public Result<SearchResult<YhShopDistributeView>> getYhShopDistributeView(String showId, String nickname, String startTime, String endTime) {
+        long adminId = StpUtil.getLoginIdAsLong();
+        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+        //是否是商务人员
+        if (userBusinessRateService.isBusiness(adminId)) {
+            builder.field(YhShopDistributeView::getBusinessId, adminId);
+        }
+        if (StrUtil.isNotBlank(showId)) {
+            builder.field(YhShopDistributeView::getUserId, userMapper.getUserIdByShowId(showId));
+        }
+        if (StrUtil.isNotBlank(nickname)) {
+            List<Long> userIds = userMapper.selectListByNickname(nickname);
+            builder.field(YhShopDistributeView::getUserId, userIds).op(Operator.InList);
+        }
+        String timeSql = StrUtil.EMPTY;
+        if (StrUtil.isNotBlank(startTime)) {
+            timeSql += String.format("and od.created_time >= '%s'", startTime);
+        }
+        if (StrUtil.isNotBlank(endTime)) {
+            timeSql += String.format("and od.created_time < '%s'", endTime);
+        }
+        if (StrUtil.isNotBlank(timeSql)) {
+            builder.put("time", timeSql);
+            //按时间筛选 固定推广人分销情况 倒序
+            builder.orderBy(YhShopDistributeView::getDistributeOrdersMoney).desc();
+        }
+        Map<Long, String> businessNameMap = new ConcurrentHashMap<>();
+        SearchResult<YhShopDistributeView> search = beanSearcher.search(YhShopDistributeView.class, builder.build());
+        search.getDataList().forEach(view -> {
+            if (view.getDistributeOrdersMoney().compareTo(BigDecimal.ZERO) > 0) {
+                Optional.ofNullable(yhShopMapper.selectSoldMaxGoods(view.getUserId())).ifPresent(title -> view.setGoodsTitle(title));
+            }
+            String businessName = businessNameMap.get(view.getBusinessId());
+            view.setBusinessName(businessName);
+            if (StrUtil.isEmpty(businessName)) {
+                Optional.ofNullable(cmsUserMapper.selectById(view.getBusinessId())).ifPresent(cmsUser -> {
+                    businessNameMap.putIfAbsent(view.getBusinessId(), cmsUser.getNickname());
+                    view.setBusinessName(cmsUser.getNickname());
+                });
+            }
+            Optional.ofNullable(userMapper.selectById(view.getUserId())).ifPresent(user -> view.setNickname(user.getNickname()));
+        });
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 店铺关闭
+     */
+    @PutMapping("/update/status/{id}")
+    public Result<String> updateShopStatus(@PathVariable Long id) {
+        YhShop yhShop = yhShopMapper.selectById(id);
+        if (yhShop != null) {
+            yhShop.setStatus(!yhShop.getStatus());
+            yhShopMapper.updateById(yhShop);
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 设置店铺对应商务
+     */
+    @PutMapping("/set/business")
+    public Result<String> setYhShopBusiness(@RequestBody YhShop yhShop) {
+        cmsYhShopCommonService.setYhShopBusiness(yhShop);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 店铺提现记录详情
+     */
+    @GetMapping("/get/apply/detail/{shopUserId}")
+    public Result<YhShopDistributeView> getYhShopApplyDetail(@PathVariable Long shopUserId) {
+        YhShopDistributeView yhShopDistributeOrderView = yhShopMapper.getApplyDetailByUserId(shopUserId);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(yhShopDistributeOrderView);
+    }
+
+    /**
+     * 设置店铺提成比例
+     */
+    @PutMapping("/set/rate")
+    public Result<String> setYhShopGoodsRate(@RequestBody List<YhShopUserPlatDistributeRate> yhShopUserPlatDistributeRates) {
+        cmsYhShopCommonService.setYhShopGoodsRate(yhShopUserPlatDistributeRates);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 店铺注册人数列表
+     */
+    @GetMapping("/get/register/detail/{shopUserId}")
+    public Result<SearchResult<YhShopRegisterDetail>> getRegisterDetail(@PathVariable Long shopUserId) {
+        SearchResult<YhShopRegisterDetail> search = beanSearcher.search(YhShopRegisterDetail.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+        search.getDataList().forEach(data -> {
+            List<RegisterDistributeOrdersDetailView> ordersDetailViewList = beanSearcher.searchAll(RegisterDistributeOrdersDetailView.class, MapUtils.builder().field(RegisterDistributeOrdersDetailView::getUserId, data.getUserId()).op(Operator.Equal).build());
+            data.setOrderNums(ordersDetailViewList.size());
+            Optional<BigDecimal> money = ordersDetailViewList.stream().filter(order -> {
+                if (!Constant.noOrderAllStatus.contains(order.getStatus().name())) {
+                    return true;
+                }
+                return false;
+            }).map(RegisterDistributeOrdersDetailView::getMoney).reduce(BigDecimal::add);
+            data.setMoney(money.isPresent() ? money.get() : BigDecimal.ZERO);
+        });
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 店铺注册人数 订单详情
+     */
+    @GetMapping("/get/register/order/detail/{yhsId}/{userId}")
+    public Result<SearchResult<YhShopRegisterOrderDetail>> getRegisterOrderDetail(@PathVariable Long yhsId, @PathVariable Long userId) {
+        String condition = String.format("where yhs_id = %s and user_id = %s", yhsId, userId);
+        SearchResult<YhShopRegisterOrderDetail> search = beanSearcher.search(YhShopRegisterOrderDetail.class, MapUtils.flatBuilder(request.getParameterMap())
+                .put("condition", condition)
+                .build());
+        String nickname = StrUtil.EMPTY;
+        for (YhShopRegisterOrderDetail data : search.getDataList()) {
+            if (StrUtil.isEmpty(nickname)) {
+                User user = userMapper.selectById(data.getUserId());
+                nickname = user.getNickname();
+                data.setNickname(nickname);
+                continue;
+            }
+            data.setNickname(nickname);
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 店铺订单详情
+     */
+    @GetMapping("/get/order/detail/{shopUserId}")
+    public Result<SearchResult<YhShopDistributeOrderView>> getOrderDetail(@PathVariable Long shopUserId) {
+        SearchResult<YhShopDistributeOrderView> search = beanSearcher.search(YhShopDistributeOrderView.class, MapUtils.flatBuilder(request.getParameterMap())
+                .put("suId", String.format("where shop_user_id = %s", shopUserId))
+                .build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 设置店铺商务默认分销比例
+     */
+    @PutMapping("/set/business/default/rate")
+    public Result<String> setBusinessDefaultRate(@RequestBody List<YhShopUserBusinessDefaultRateConfig> configs) {
+        cmsYhShopCommonService.setBusinessDefaultRate(configs);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 店铺商务默认比例列表展示
+     */
+    @GetMapping("/get/business/default/rate")
+    public Result<List<YhShopUserBusinessDefaultRateConfigView>> setBusinessDefaultRate() {
+        List<YhShopUserBusinessDefaultRateConfigView> search = beanSearcher.searchAll(YhShopUserBusinessDefaultRateConfigView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 设置店铺商务分销比例
+     */
+
+    /**
+     * 店铺商务 列表
+     */
+
+    /**
+     * 店铺提现 列表
+     */
+
+
 
     /**
      * 开店审核列表