zoujiajian %!s(int64=2) %!d(string=hai) anos
pai
achega
8f086a67b6

+ 7 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/YhShopInfo.java

@@ -1,6 +1,8 @@
 package com.cyksj.model.dto;
 
 import com.cyksj.model.entity.YhShop;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -14,7 +16,10 @@ import java.util.Date;
  */
 @Getter
 @Setter
+@SearchBean(tables = "yh_shop ys",
+		where = ":uid:")
 public class YhShopInfo {
+	@DbField("ys.id")
 	private Long yhsId;
 
 	private String customId;
@@ -27,5 +32,7 @@ public class YhShopInfo {
 
 	private String contact;
 
+	private String reason;
+
 	private Date createdTime;
 }

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

@@ -17,11 +17,11 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 @SearchBean(tables = "(select distinct business_id from yh_shop_user_distribute_business_rate) ur inner join yh_shop ys on ys.business_id = ur.business_id :time1:" +
-		" left join ys_shop_user_distribute_shared us on us.shop_user_id = ud.user_id :time2:" +
+		" left join yh_shop_user_distribute_shared us on us.shop_user_id = ys.user_id :time2:" +
 		" left join order_don od on od.user_id = us.user_id and od.status not in ('close','refund','noPayment') and od.yhs_id = ys.id  :time3:",
 		groupBy = "ur.business_id")
 public class YhShopBusinessDistributesDataView {
-	@DbField("ud.business_id")
+	@DbField("ur.business_id")
 	private Long businessId;
 
 	/**
@@ -33,7 +33,7 @@ public class YhShopBusinessDistributesDataView {
 	/**
 	 * 渠道数量
 	 */
-	@DbField("count(distinct ud.id)")
+	@DbField("count(distinct ys.id)")
 	private Integer numOfDistributor;
 
 	/**

+ 61 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopBusinessTakeMoneyDetail.java

@@ -0,0 +1,61 @@
+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
+ *文件名: YhShopBusinessTakeMoneyDetail
+ *创建者: JavaZou
+ *创建时间:2023/9/22 10:53
+ */
+@Getter
+@Setter
+@SearchBean(tables = "yh_shop_user_distribute_business_order_don_record ubr",
+		where = ":time:"
+		, groupBy = "ubr.shop_user_id,ubr.business_id")
+public class YhShopBusinessTakeMoneyDetail {
+	@DbField("ubr.shop_user_id")
+	private Long userId;
+
+	@DbIgnore
+	private String nickname;
+
+	@DbIgnore
+	private Date createdTime;
+
+	@DbField("ubr.business_id")
+	private Long businessId;
+
+	@DbIgnore
+	private String businessName;
+
+	@DbField("count(distinct ubr.user_id)")
+	private Integer distributeNum;
+
+	@DbField("count(if(ubr.order_type = 1 and ubr.status = 'success',1,NULL))")
+	private Integer numOfFirstOrderThisMonth;
+
+	@DbField("cast(sum(if(ubr.order_type = 1 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal moneyOfFirstOrderThisMonth;
+
+	@DbField("count(if(ubr.order_type = 2 and ubr.status = 'success',1,NULL))")
+	private Integer numOfRenewOrderThisMonth;
+
+	@DbField("cast(sum(if(ubr.order_type = 2 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal moneyOfRenewOrderThisMonth;
+
+	@DbField("cast(sum(if(ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal takeMoney;
+
+	@DbField("cast(sum(if(ubr.status = 'refund', ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal refundMoney;
+
+}
+

+ 43 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopBusinessTakeMoneyHeadView.java

@@ -0,0 +1,43 @@
+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
+ *文件名: YhShopBusinessTakeMoneyHeadView
+ *创建者: JavaZou
+ *创建时间:2023/9/22 10:52
+ */
+@Getter
+@Setter
+@SearchBean(tables = "yh_shop_user_distribute_business_order_don_record ubr",
+		where = ":time:"
+		, groupBy = "ubr.business_id")
+public class YhShopBusinessTakeMoneyHeadView {
+
+	@DbField("ubr.business_id")
+	private Long businessId;
+
+	@DbField("count(if(ubr.order_type = 1 and ubr.status = 'success',1,NULL))")
+	private Integer numOfFirstOrder;
+
+	@DbField("cast(sum(if(ubr.order_type = 1 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal moneyOfFirstOrder;
+
+	@DbField("count(if(ubr.order_type = 2 and ubr.status = 'success',1,NULL))")
+	private Integer numOfRenewOrder;
+
+	@DbField("cast(sum(if(ubr.order_type = 2 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal moneyOfRenewOrder;
+
+	@DbField("cast(sum(if(ubr.status = 'success', ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal takeMoney;
+
+	@DbField("cast(sum(if(ubr.status = 'refund', ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal refundMoney;
+}

+ 55 - 0
netflix-dao/src/main/java/com/cyksj/model/views/YhShopDistributeBusinessView.java

@@ -0,0 +1,55 @@
+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;
+
+/*
+ *项目名: yhlxj
+ *文件名: YhShopDistributeBusinessView
+ *创建者: JavaZou
+ *创建时间:2023/9/22 10:56
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select distinct business_id from yh_shop_user_distribute_business_rate) ur left join yh_shop_user_distribute_business_order_don_record ubr on ubr.business_id = ur.business_id and :time:" +
+		" left join cms_user cu on cu.id = ur.business_id",
+		groupBy = "ur.business_id,cu.nickname,date_format(ubr.order_created_time,'%Y-%m')")
+public class YhShopDistributeBusinessView {
+	@DbField("ur.business_id")
+	private Long businessId;
+
+	@DbField("cu.nickname")
+	private String businessName;
+
+	/**
+	 * 关联人数
+	 */
+	@DbIgnore
+	private Integer numOfRelation;
+
+	@DbField("count(if(ubr.order_type = 1 and ubr.status = 'success',1,NULL))")
+	private Integer numOfFirstOrderThisMonth;
+
+	@DbField("cast(sum(if(ubr.order_type = 1 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal moneyOfFirstOrderThisMonth;
+
+	@DbField("count(if(ubr.order_type = 2 and ubr.status = 'success',1,NULL))")
+	private Integer numOfRenewOrderThisMonth;
+
+	@DbField("cast(sum(if(ubr.order_type = 2 and ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal moneyOfRenewOrderThisMonth;
+
+	@DbField("cast(sum(if(ubr.status = 'success',ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal takeMoney;
+
+	@DbField("cast(sum(if(ubr.status = 'refund', ubr.take_money,0))/100 as decimal(10,2))")
+	private BigDecimal refundMoney;
+
+	@DbField("date_format(ubr.order_created_time,'%Y-%m')")
+	private String monthDate;
+}

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

@@ -25,6 +25,12 @@ public class YhShopDistributeView {
 	@DbField("ys.id")
 	private Long id;
 
+	/**
+	 * 店铺名
+	 */
+	@DbField("ys.name")
+	private String name;
+
 	@DbField("ys.user_id")
 	private Long userId;
 

+ 93 - 5
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/shop/CmsYhShopGoodsController.java

@@ -2,12 +2,14 @@ package com.cyksj.web.controller.manage.goods.shop;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.common.util.StringUtil;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.UserMapper;
@@ -27,6 +29,7 @@ import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -40,7 +43,7 @@ import java.util.concurrent.ConcurrentHashMap;
 
 
 /**
- * admin/小店店铺/银河后台/店铺管理
+ * admin/小店店铺/银河后台/商务管理
  * @author zwhui
  * @date 2023/9/14 16:42
  */
@@ -83,8 +86,13 @@ public class CmsYhShopGoodsController {
      * 设置店铺平台价格浮动比例
      */
     @PutMapping("/put/goods/rate")
+    @Transactional(rollbackFor = Throwable.class)
     public Result<Void> updShopGoodsRate(@RequestBody GoodsDonShopRateReq req) {
         req.getList().forEach(e -> {
+            Integer rate = e.getRate();
+            if (rate == null || (rate < 0 && rate > 100)) {
+                throw BusinessRuntimeException.getInstance("请输入正确的比例");
+            }
             YhShopGoodsRate one = yhShopGoodsRateService.getOne(Wrappers.lambdaQuery(YhShopGoodsRate.class)
                     .eq(YhShopGoodsRate::getSkuId, e.getSkuId()).last("limit 1"));
             if (one == null) {
@@ -340,9 +348,90 @@ public class CmsYhShopGoodsController {
     }
 
     /**
-     * 店铺商务 数据列表
+     * 商务人员列表 详情
      */
     @GetMapping("/get/business/list")
+    public Result<SearchResult<YhShopDistributeBusinessView>> getDistributeBusinessView() {
+        long adminId = StpUtil.getLoginIdAsLong();
+        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+        DateTime beginOfMonth = DateUtil.beginOfMonth(DateTime.now());
+        String thisMonth = beginOfMonth.toString("yyyy-MM");
+        //是否是商务人员
+        if (userBusinessRateService.isBusiness(adminId)) {
+            builder.field(YhShopDistributeBusinessView::getBusinessId, adminId);
+        }
+        builder.put("time", String.format("date_format(ubr.order_created_time,'%%Y-%%m') = '%s'", thisMonth));
+        SearchResult<YhShopDistributeBusinessView> search = beanSearcher.search(YhShopDistributeBusinessView.class, builder.build());
+        search.getDataList().forEach(data -> {
+            Number numOfRelation = beanSearcher.searchCount(UserDistribute.class, MapUtils.builder().field(UserDistribute::getBusinessId, data.getBusinessId()).field(UserDistribute::getDeleted, true).build());
+            data.setNumOfRelation(numOfRelation.intValue());
+        });
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 商务人员提成详情
+     */
+    @GetMapping("/get/takeMoney/detail")
+    public Result<SearchResult<YhShopBusinessTakeMoneyDetail>> getTakeMoneyDetail(String firstMonthDate, String secondMonthDate) {
+        long adminId = StpUtil.getLoginIdAsLong();
+        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+        //是否是商务人员
+        if (userBusinessRateService.isBusiness(adminId)) {
+            builder.field(YhShopBusinessTakeMoneyDetail::getBusinessId, adminId);
+        }
+        String timeSql = StringUtil.EMPTY;
+        if (StrUtil.isNotBlank(firstMonthDate)) {
+            timeSql += String.format("date_format(ubr.order_created_time,'%%Y-%%m') >= '%s'", firstMonthDate);
+        }
+        if (StrUtil.isNotBlank(secondMonthDate)) {
+            timeSql += String.format("and date_format(ubr.order_created_time,'%%Y-%%m') <= '%s'", secondMonthDate);
+        }
+        if (StrUtil.isNotBlank(timeSql)) {
+            builder.put("time", timeSql);
+        }
+        SearchResult<YhShopBusinessTakeMoneyDetail> search = beanSearcher.search(YhShopBusinessTakeMoneyDetail.class, builder.build());
+        search.getDataList().forEach(data -> {
+            User user = userMapper.selectById(data.getUserId());
+            Optional.ofNullable(user).ifPresent(u -> {
+                data.setNickname(u.getNickname());
+                data.setCreatedTime(u.getCreatedTime());
+            });
+            CmsUser business = cmsUserMapper.selectById(data.getBusinessId());
+            Optional.ofNullable(business).ifPresent(bs -> data.setBusinessName(bs.getNickname()));
+        });
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 商务提成head
+     */
+    @GetMapping("/get/business/headData")
+    public Result<YhShopBusinessTakeMoneyHeadView> getTakeMoneyHeadDetail(String firstMonthDate, String secondMonthDate) {
+        long adminId = StpUtil.getLoginIdAsLong();
+        MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+        //是否是商务人员
+        if (userBusinessRateService.isBusiness(adminId)) {
+            builder.field(YhShopBusinessTakeMoneyHeadView::getBusinessId, adminId);
+        }
+        String timeSql = StringUtil.EMPTY;
+        if (StrUtil.isNotBlank(firstMonthDate)) {
+            timeSql += String.format("date_format(ubr.order_created_time,'%%Y-%%m') >= '%s'", firstMonthDate);
+        }
+        if (StrUtil.isNotBlank(secondMonthDate)) {
+            timeSql += String.format("and date_format(ubr.order_created_time,'%%Y-%%m') <= '%s'", secondMonthDate);
+        }
+        if (StrUtil.isNotBlank(timeSql)) {
+            builder.put("time", timeSql);
+        }
+        YhShopBusinessTakeMoneyHeadView headView = beanSearcher.searchFirst(YhShopBusinessTakeMoneyHeadView.class, builder.build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(headView);
+    }
+
+    /**
+     * 店铺商务 数据列表
+     */
+    @GetMapping("/get/business/data")
     public Result<SearchResult<YhShopBusinessDistributesDataView>> getBusinessDistributesData(String startTime, String endTime) {
         long adminId = StpUtil.getLoginIdAsLong();
         MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
@@ -350,12 +439,12 @@ public class CmsYhShopGoodsController {
         String time2Sql = StrUtil.EMPTY;
         String time3Sql = StrUtil.EMPTY;
         if (StrUtil.isNotBlank(startTime)) {
-            time1Sql += String.format(" and ud.business_bind_time >= '%s'", startTime);
+            time1Sql += String.format(" and ys.business_bind_time >= '%s'", startTime);
             time2Sql += String.format(" and us.created_time >= '%s'", startTime);
             time3Sql += String.format(" and od.created_time >= '%s'", startTime);
         }
         if (StrUtil.isNotBlank(endTime)) {
-            time1Sql += String.format(" and ud.business_bind_time < '%s'", endTime);
+            time1Sql += String.format(" and ys.business_bind_time < '%s'", endTime);
             time2Sql += String.format(" and us.created_time < '%s'", endTime);
             time3Sql += String.format(" and od.created_time < '%s'", endTime);
         }
@@ -407,7 +496,6 @@ public class CmsYhShopGoodsController {
     @GetMapping("/get/apply")
     public Result<SearchResult<YhShopView>> getUserShopApply() {
         SearchResult<YhShopView> search = beanSearcher.search(YhShopView.class, MapUtils.flatBuilder(request.getParameterMap())
-                .field(YhShopView::getVerifyStatus, List.of(YhShopApplyRecord.Status.verify.name(), YhShopApplyRecord.Status.modify.name())).op(Operator.InList)
                 .build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
     }

+ 4 - 5
netflix-web/src/main/java/com/cyksj/web/controller/shop/OpenShopController.java

@@ -2,6 +2,7 @@ package com.cyksj.web.controller.shop;
 
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.dto.YhShopInfo;
 import com.cyksj.model.entity.YhShop;
 import com.cyksj.service.shop.YhShopFrontService;
 import com.cyksj.web.util.StpUserUtil;
@@ -52,12 +53,10 @@ public class OpenShopController {
 	 * 个人店铺审核详情
 	 */
 	@GetMapping("/get/detail")
-	public Result<YhShop> getYhShopDetail() {
+	public Result<YhShopInfo> getYhShopDetail() {
 		long userId = StpUserUtil.getLoginIdAsLong();
-		YhShop yhShop = beanSearcher.searchFirst(YhShop.class, MapUtils.builder()
-				.field(YhShop::getUserId, userId)
-				.selectExclude(YhShop::getId)
-				.build());
+		YhShopInfo yhShop = beanSearcher.searchFirst(YhShopInfo.class, MapUtils.builder()
+				.put("uid", String.format("user_id = %s", userId)).build());
 		return GatewayResponse.SUCCESS.newBuilder().toResult(yhShop);
 	}