Переглянути джерело

Merge branch 'business_monthly_data'

# Conflicts:
#	netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java
zoujiajian 2 роки тому
батько
коміт
b295f206a0

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

@@ -0,0 +1,61 @@
+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
+ * 文件名: BusinessDistributesMonthlyDataView
+ * 创建者: JavaZou
+ * 创建时间:2023/9/22 14:08
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select distinct business_id from user_distribute_business_rate) ur inner join user_distribute ud on ud.business_id = ur.business_id and ud.deleted is true :time1:" +
+		" left join user_distribute_shared us on us.shared_id = ud.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.is_fixed_distribute = 1 :time3:",
+		groupBy = "ud.business_id")
+public class BusinessDistributesMonthlyDataView {
+	@DbField("ud.business_id")
+	private Long businessId;
+
+	/**
+	 * 商务名
+	 */
+	@DbField(":n:")
+	private String businessName;
+
+	/**
+	 * 渠道数量
+	 */
+	@DbField("count(distinct ud.id)")
+	private Integer numOfDistributor;
+
+	/**
+	 * 分销单数
+	 */
+	@DbField("count(od.id)")
+	private Integer numOfDistributeOrders;
+
+	/**
+	 * 分销金额
+	 */
+	@DbField("ifnull(sum(od.money),0)")
+	private BigDecimal distributeOrdersMoney;
+
+	/**
+	 * 拉新用户
+	 */
+	@DbField("count(distinct us.id)")
+	private Integer numOfNewUser;
+
+	/**
+	 * 1本月,2历史
+	 */
+	@DbField(":type:")
+	private Integer type;
+}

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

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.BetweenFormater;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
@@ -49,6 +50,7 @@ import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 /*
  *项目名: netflix
@@ -824,4 +826,77 @@ public class DistributeController {
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
+
+	/**
+	 * 商务分销当月渠道商以及历史渠道商在当月的数据
+	 */
+	@GetMapping("/get/business/distribute/monthlyData")
+	public Result<List<BusinessDistributesMonthlyDataView>> getBusinessMonthlyData(String firstMonthDate, String secondMonthDate) {
+		long adminId = StpUtil.getLoginIdAsLong();
+		if (StrUtil.isEmpty(firstMonthDate)) {
+			firstMonthDate = DateUtil.beginOfMonth(DateTime.now()).toDateStr();
+		}
+		if (StrUtil.isEmpty(secondMonthDate)) {
+			secondMonthDate = DateUtil.offsetMonth(DateUtil.beginOfMonth(DateTime.now()), 1).toDateStr();
+		}
+		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
+		//是否是商务人员
+		Boolean isBusiness = userBusinessRateService.isBusiness(adminId);
+		if (isBusiness) {
+			builder.field(BusinessDistributesMonthlyDataView::getBusinessId, adminId);
+		}
+		builder.put("n", "(select nickname from cms_user where id = ud.business_id limit 1)");
+		//当月渠道本月数据
+		String time1Sql = StrUtil.EMPTY;
+		String time2Sql = StrUtil.EMPTY;
+		String time3Sql = StrUtil.EMPTY;
+		if (StrUtil.isNotBlank(firstMonthDate)) {
+			time1Sql += String.format(" and ud.business_bind_time >= '%s'", firstMonthDate);
+			time2Sql += String.format(" and us.created_time >= '%s'", firstMonthDate);
+			time3Sql += String.format(" and od.created_time >= '%s'", firstMonthDate);
+		}
+		if (StrUtil.isNotBlank(secondMonthDate)) {
+			time1Sql += String.format(" and ud.business_bind_time < '%s'", secondMonthDate);
+			time2Sql += String.format(" and us.created_time < '%s'", secondMonthDate);
+			time3Sql += String.format(" and od.created_time < '%s'", secondMonthDate);
+		}
+		if (StrUtil.isNotBlank(time1Sql)) {
+			builder.put("time1", time1Sql);
+		}
+		if (StrUtil.isNotBlank(time2Sql)) {
+			builder.put("time2", time2Sql);
+		}
+		if (StrUtil.isNotBlank(time3Sql)) {
+			builder.put("time3", time3Sql);
+		}
+		builder.put("type", 1);
+		List<BusinessDistributesMonthlyDataView> search = beanSearcher.searchAll(BusinessDistributesMonthlyDataView.class, builder.build());
+		//历史渠道 当月数据
+		time1Sql = StrUtil.EMPTY;
+		time2Sql = StrUtil.EMPTY;
+		time3Sql = StrUtil.EMPTY;
+		if (StrUtil.isNotBlank(firstMonthDate)) {
+			time1Sql += String.format(" and ud.business_bind_time < '%s'", firstMonthDate);
+			time2Sql += String.format(" and us.created_time >= '%s'", firstMonthDate);
+			time3Sql += String.format(" and od.created_time >= '%s'", firstMonthDate);
+		}
+		if (StrUtil.isNotBlank(secondMonthDate)) {
+			time2Sql += String.format(" and us.created_time < '%s'", secondMonthDate);
+			time3Sql += String.format(" and od.created_time < '%s'", secondMonthDate);
+		}
+		if (StrUtil.isNotBlank(time1Sql)) {
+			builder.put("time1", time1Sql);
+		}
+		if (StrUtil.isNotBlank(time2Sql)) {
+			builder.put("time2", time2Sql);
+		}
+		if (StrUtil.isNotBlank(time3Sql)) {
+			builder.put("time3", time3Sql);
+		}
+		builder.put("type", 2);
+		List<BusinessDistributesMonthlyDataView> search2 = beanSearcher.searchAll(BusinessDistributesMonthlyDataView.class, builder.build());
+		Collection<BusinessDistributesMonthlyDataView> businessDistributesDataViews = CollUtil.addAll(search, search2);
+		List<BusinessDistributesMonthlyDataView> collect = businessDistributesDataViews.stream().sorted(Comparator.comparing(BusinessDistributesMonthlyDataView::getBusinessId).thenComparing(BusinessDistributesMonthlyDataView::getType)).collect(Collectors.toList());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(collect);
+	}
 }