Jelajahi Sumber

分销订单数据

zoujiajian 1 tahun lalu
induk
melakukan
4f1ada77dd

+ 18 - 8
netflix-dao/src/main/java/com/cyksj/model/views/CpsOrderView.java

@@ -15,26 +15,36 @@ import java.math.BigDecimal;
  */
 @Getter
 @Setter
-@SearchBean(tables = "(select o.id,o.goods_id,o.money,o.is_dp,o.ori_money,o.created_time from order_don o inner join (select user_id from user_distribute_shared where :sharedId:) us on us.user_id = o.user_id where o.is_fixed_distribute is true and o.status not in ('close','noPayment') :time:) od left join goods_don g on g.id = od.goods_id" +
-		" inner join distribute_waiting_send_points dp on dp.order_id = od.id",
-		groupBy = "od.goods_id,g.title,date_format(od.created_time,'%Y-%m-%d')")
+@SearchBean(tables = "distribute_waiting_send_points dw left join order_don od on od.id = dw.order_id and dw.is_vip = false" +
+		" left join vip_order_don vod on vod.id = dw.order_id and vod.is_vip = true"
+		, where = ":userId: and dw.send_status not in ('not_exist','close')"
+		, groupBy = "ifnull(od.goods_id,vod.goods_id),date_format(ifnull(od.created_time,vod.created_time),'%Y-%m-%d')")
 public class CpsOrderView {
 
-	@DbField("od.goods_id")
+	@DbField("ifnull(od.goods_id,vod.goods_id)")
 	private Long goodsId;
 
-	@DbField("g.title")
+	/**
+	 * 平台名称
+	 */
+	@DbField("select title from goods_don where id = ifnull(od.goods_id,vod.goods_id)")
 	private String title;
 
-	@DbField("cast(sum(if(od.is_dp and od.ori_money != 0,od.ori_money,od.money))/100 as decimal(10,2))")
+	/**
+	 * 当前日期订单金额
+	 */
+	@DbField("cast(sum(if(od.id is null,vod.money,if(od.is_dp and od.ori_money != 0,od.ori_money,od.money))/100 as decimal(10,2)))")
 	private BigDecimal distributeOrderMoney;
 
-	@DbField("count(od.id)")
+	/**
+	 * 当前日期订单数
+	 */
+	@DbField("count(dw.order_id)")
 	private Integer orders;
 
 	/**
 	 * 日期
 	 */
-	@DbField("date_format(od.created_time,'%Y-%m-%d')")
+	@DbField("date_format(ifnull(od.created_time,vod.created_time),'%Y-%m-%d')")
 	private String date;
 }

+ 9 - 9
netflix-dao/src/main/java/com/cyksj/model/views/DistributePopularizeOrdersView.java

@@ -19,14 +19,14 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "distribute_waiting_send_points dw left join order_don od on od.id = dw.order_id" +
-		" left join user u on u.id = od.user_id ",
-		where = "od.is_distribute is true")
+@SearchBean(tables = "distribute_waiting_send_points dw left join order_don od on od.id = dw.order_id and dw.is_vip = false" +
+		" left join vip_order_don vod on vod.id = dw.oder_id and dw.is_vip = true" +
+		" left join user u on u.id = od.user_id ")
 public class DistributePopularizeOrdersView {
-	@DbField("od.id")
+	@DbField("ifnull(od.id,dw.order_id)")
 	private Long orderId;
 
-	@DbField("od.goods_id")
+	@DbField("ifnull(od.goods_id,dw.goods_id)")
 	@JsonIgnore
 	private Long goodsId;
 
@@ -34,7 +34,7 @@ public class DistributePopularizeOrdersView {
 	@JsonIgnore
 	private Long skuId;
 
-	@DbField("if(od.is_dp and od.ori_money != 0,od.ori_money,od.money)")
+	@DbField("cast(sum(if(od.id is null,vod.money,if(od.is_dp and od.ori_money != 0,od.ori_money,od.money))/100 as decimal(10,2)))")
 	private BigDecimal money;
 
 	@DbField("dw.shared_id")
@@ -68,12 +68,12 @@ public class DistributePopularizeOrdersView {
 	@DbIgnore
 	private String goodsTitle;
 
-	@DbField("od.status")
+	@DbField("ifnull(od.status,vod.status)")
 	private OrderDon.Status orderStatus;
 
-	@DbField("od.pay_title")
+	@DbField("if(od.id is null,vod.pay_title,od.pay_title)")
 	private String specVal;
 
-	@DbField("od.created_time")
+	@DbField("ifnull(od.created_time,vod.created_time)")
 	private Date createdTime;
 }

+ 9 - 8
netflix-dao/src/main/java/com/cyksj/model/views/PersonDistributeBrokenLineView.java

@@ -15,34 +15,35 @@ import java.math.BigDecimal;
  */
 @Getter
 @Setter
-@SearchBean(tables = "distribute_waiting_send_points dw left join order_don od on od.id = dw.order_id"
-		, where = ":userId: and od.is_distribute is true and dw.send_status not in ('not_exist','close')"
-		, groupBy = "od.goods_id,date_format(od.created_time,'%Y-%m-%d')")
+@SearchBean(tables = "distribute_waiting_send_points dw left join order_don od on od.id = dw.order_id and dw.is_vip = false" +
+		" left join vip_order_don vod on vod.id = dw.order_id and vod.is_vip = true"
+		, where = ":userId: and dw.send_status not in ('not_exist','close')"
+		, groupBy = "ifnull(od.goods_id,vod.goods_id),date_format(ifnull(od.created_time,vod.created_time),'%Y-%m-%d')")
 public class PersonDistributeBrokenLineView {
-	@DbField("od.goods_id")
+	@DbField("ifnull(od.goods_id,vod.goods_id)")
 	private Long goodsId;
 
 	/**
 	 * 平台名称
 	 */
-	@DbField("select title from goods_don where id = od.goods_id")
+	@DbField("select title from goods_don where id = ifnull(od.goods_id,vod.goods_id)")
 	private String goodsTitle;
 
 	/**
 	 * 当前日期订单数
 	 */
-	@DbField("count(od.id)")
+	@DbField("count(dw.order_id)")
 	private Integer orderNum;
 
 	/**
 	 * 当前日期订单金额
 	 */
-	@DbField("cast(sum(if(od.is_dp and od.ori_money != 0,od.ori_money,od.money))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(od.id is null,vod.money,if(od.is_dp and od.ori_money != 0,od.ori_money,od.money))/100 as decimal(10,2)))")
 	private BigDecimal money;
 
 	/**
 	 * 日期
 	 */
-	@DbField("date_format(od.created_time,'%Y-%m-%d')")
+	@DbField("date_format(ifnull(od.created_time,vod.created_time),'%Y-%m-%d')")
 	private String date;
 }

+ 5 - 4
netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeOrdersDetailView.java

@@ -17,12 +17,13 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = "(select o.id,o.user_id,o.goods_id,o.sku_id,o.money,o.refund_money,o.coupon_money,o.created_time,o.is_dp,o.ori_money from order_don o inner join (select user_id from user_distribute_shared where :sharedId:) us on us.user_id = o.user_id where o.is_fixed_distribute is true and o.status not in ('close','noPayment') :time:) od" +
-		" left join goods_don g on g.id = od.goods_id" +
-		" inner join distribute_waiting_send_points dp on dp.order_id = od.id")
+@SearchBean(tables = "(select * from distribute_waiting_send_points where :sharedId: :time:) dw left join order_don od on od.id = dw.order_id and dw.is_vip = false and od.status not in ('close','noPayment')" +
+		" left join vip_order_don vod on vod.id = dw.oder_id and dw.is_vip = true and vod.status not in ('close','noPayment')" +
+		" left join goods_don g on g.id = ifnull(od.goods_id,vod.goods_id)"
+)
 public class UserDistributeOrdersDetailView {
 
-	@DbField("select nickname from user where id = od.user_id limit 1")
+	@DbField("select nickname from user where id = dw.user_id limit 1")
 	private String nickname;
 
 	@JsonIgnore

+ 8 - 7
netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeOrdersStatisticsView.java

@@ -15,26 +15,27 @@ import java.math.BigDecimal;
  */
 @Getter
 @Setter
-@SearchBean(tables = "(select o.id,o.user_id,o.goods_id,o.money,o.refund_money,o.status,o.is_dp,o.ori_money from order_don o inner join (select user_id from user_distribute_shared where :sharedId:) us on us.user_id = o.user_id where o.is_fixed_distribute is true and o.status not in ('close','noPayment') :time:) od left join goods_don g on g.id = od.goods_id" +
-		" inner join distribute_waiting_send_points dp on dp.order_id = od.id",
-		groupBy = "od.goods_id,g.title")
+@SearchBean(tables = "(select * from distribute_waiting_send_points where :sharedId: :time:) dw left join order_don od on od.id = dw.order_id and dw.is_vip = false and od.status not in ('close','noPayment')" +
+		" left join vip_order_don vod on vod.id = dw.oder_id and dw.is_vip = true and vod.status not in ('close','noPayment')" +
+		" left join goods_don g on g.id = ifnull(od.goods_id,vod.goods_id)",
+		groupBy = "ifnull(od.goods_id,vod.goods_id),g.title")
 public class UserDistributeOrdersStatisticsView {
 
 	@DbField("g.title")
 	private String title;
 
-	@DbField("cast(sum(if(od.is_dp and od.ori_money != 0,od.ori_money,od.money))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(od.id is null,vod.money,if(od.is_dp and od.ori_money != 0,od.ori_money,od.money))/100 as decimal(10,2)))")
 	private BigDecimal distributeOrderMoney;
 
-	@DbField("count(od.id)")
+	@DbField("count(dw.order_id)")
 	private Integer orders;
 
 	@DbField("TRUNCATE(sum(if(dp.send_status != 'close',dp.points,0))/1000,2)")
 	private BigDecimal takeMoney;
 
-	@DbField("count(if(od.status = 'refund',1,NULL))")
+	@DbField("count(if(ifnull(od.status,vod.status) = 'refund',1,NULL))")
 	private Integer refundOrders;
 
-	@DbField("cast(sum(ifnull(if(od.is_dp and od.ori_money != 0 and od.refund_money > od.ori_money,od.ori_money,od.refund_money),0))/100 as decimal(10,2))")
+	@DbField("cast(sum(if(od.id is null,vod.refund_money,ifnull(if(od.is_dp and od.ori_money != 0 and od.refund_money > od.ori_money,od.ori_money,od.refund_money),0))/100 as decimal(10,2)))")
 	private BigDecimal refundMoney;
 }

+ 3 - 4
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -90,14 +90,13 @@
     <select id="selectPersonDistributeBrokenLine" resultType="com.cyksj.model.views.BrokenLineObjView">
         select min(curdate) as firstDate,
                max(curdate) as lastDate
-        from (select date_format(od.created_time,'%Y-%m-%d') curdate,
-                     count(od.id) curdateOrderCount
+        from (select date_format(ifnull(od.created_time,vod.created_time),'%Y-%m-%d') curdate,
+                     count(dw.order_id) curdateOrderCount
         from distribute_waiting_send_points dw
         left join order_don od on od.id = dw.order_id
         where dw.shared_id = #{userId}
-          and od.is_distribute is true
           and dw.send_status not in ('not_exist', 'close')
-        group by od.goods_id, date_format(od.created_time, '%Y-%m-%d'))s
+        group by ifnull(od.goods_id,vod.goods_id), date_format(ifnull(od.created_time,vod.created_time), '%Y-%m-%d'))s
         where 1 = 1
         <if test="first != null">
             and curdate >= #{first}

+ 15 - 12
netflix-dao/src/main/resources/mapper/UserDistributeMapper.xml

@@ -4,8 +4,8 @@
 
     <select id="count" resultType="java.lang.Integer">
         select count(*)
-        from distribute_waiting_send_points dw left join order_don o on o.id = dw.order_id
-        where dw.shared_id = #{userId} and o.is_distribute is true
+        from distribute_waiting_send_points dw
+        where dw.shared_id = #{userId}
     </select>
 
     <select id="countUserNum" resultType="java.lang.Integer">
@@ -99,18 +99,21 @@
     </select>
 
     <select id="selectOrderBrokenLineMoney" resultType="com.cyksj.model.views.CpsOrderDataStatisticsView">
-        select min(curdate) as firstDate,max(curdate) as lastDate from (select date_format(od.created_time,'%Y-%m-%d') as curdate
-        from (select o.id,o.goods_id,o.created_time from order_don o inner join
-        (select user_id from user_distribute_shared where shared_id = #{cpsUserId}) us on us.user_id = o.user_id where
-        o.is_fixed_distribute is true and o.status not in ('close','noPayment')
+        select min(curdate) as firstDate,
+        max(curdate) as lastDate
+        from (select date_format(ifnull(od.created_time,vod.created_time),'%Y-%m-%d') curdate,
+        count(dw.order_id) curdateOrderCount
+        from distribute_waiting_send_points dw
+        left join order_don od on od.id = dw.order_id
+        where dw.shared_id = #{userId}
+        and dw.send_status not in ('not_exist', 'close')
+        group by ifnull(od.goods_id,vod.goods_id), date_format(ifnull(od.created_time,vod.created_time), '%Y-%m-%d'))s
+        where 1 = 1
         <if test="first != null">
-            and o.created_time >= #{first}
+            and curdate >= #{first}
         </if>
         <if test="end != null">
-            and o.created_time &lt; #{end}
-        </if>)od
-        left join goods_don g on g.id = od.goods_id
-        inner join distribute_waiting_send_points dp on dp.order_id = od.id
-        group by date_format(od.created_time,'%Y-%m-%d'))s
+            and curdate &lt; #{end}
+        </if>
     </select>
 </mapper>

+ 10 - 12
netflix-web/src/main/java/com/cyksj/web/controller/cps/CpsDistribtueDataController.java

@@ -131,14 +131,14 @@ public class CpsDistribtueDataController {
 		long cpsUserId = StpCpsManageUser.getLoginIdAsLong();
 		String first = null;
 		String end = null;
-		String timeSql = StrUtil.EMPTY;
+		String timeSql = null;
 		if (firstDate != null) {
 			first = DateUtil.format(DateTime.of(firstDate), "yyyy-MM-dd HH:mm:ss");
-			timeSql += String.format(" and o.created_time >= '%s'", first);
+			timeSql += String.format(" and dw.created_time >= '%s'", first);
 		}
 		if (lastDate != null) {
 			end = DateUtil.format(DateTime.of(lastDate), "yyyy-MM-dd HH:mm:ss");
-			timeSql += String.format(" and o.created_time < '%s'", end);
+			timeSql += String.format(" and dw.created_time < '%s'", end);
 		}
 		MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
 		builder.put("sharedId", String.format("shared_id = %s", cpsUserId));
@@ -203,22 +203,20 @@ public class CpsDistribtueDataController {
 				.orElse(new CpsOrderDataStatisticsView());
 
 		if (brokenLineObjView != null) {
-			String timeSql = StrUtil.EMPTY;
+			MapBuilder builder = MapUtils.builder();
 			if (firstDate != null) {
 				first = DateUtil.format(DateTime.of(firstDate), "yyyy-MM-dd HH:mm:ss");
-				timeSql += String.format(" and o.created_time >= '%s'", first);
 			}
 			if (lastDate != null) {
 				end = DateUtil.format(DateTime.of(lastDate), "yyyy-MM-dd HH:mm:ss");
-				timeSql += String.format(" and o.created_time < '%s'", end);
 			}
-			MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
-			builder.put("sharedId", String.format("shared_id = %s", cpsUserId));
-			if (StrUtil.isNotEmpty(timeSql)) {
-				builder.put("time", timeSql);
+			if (first != null && end != null) {
+				builder.field(CpsOrderView::getDate, first, end).op(Operator.Between);
 			}
-			builder.put("sharedId", String.format("shared_id = %s", cpsUserId));
-			List<CpsOrderView> views = beanSearcher.searchAll(CpsOrderView.class,builder.build());
+			List<CpsOrderView> views = beanSearcher.searchAll(CpsOrderView.class, builder
+					.put("userId", String.format("dw.shared_id = %s", cpsUserId))
+					.orderBy(CpsOrderView::getDate).asc()
+					.build());
 			Map<Long, List<CpsOrderView>> goodsMap = views.stream().collect(Collectors.groupingBy(CpsOrderView::getGoodsId));
 			brokenLineObjView.setGoodsData(goodsMap);
 		}

+ 5 - 3
netflix-web/src/main/java/com/cyksj/web/controller/user/DistributePopularizeController.java

@@ -102,10 +102,12 @@ public class DistributePopularizeController {
 		BigDecimal oneHundred = BigDecimal.valueOf(100);
 		search.getDataList().forEach(data -> {
 			GoodsDon goodsDon = goodsDonMapper.selectById(data.getGoodsId());
-			GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(data.getSkuId());
 			data.setGoodsTitle(goodsDon.getTitle());
-			if (goodsDonSku != null) {
-				data.setSpecVal(goodsDonSku.getSpecVal());
+			if (data.getSkuId() != null) {
+				GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(data.getSkuId());
+				if (goodsDonSku != null) {
+					data.setSpecVal(goodsDonSku.getSpecVal());
+				}
 			}
 			data.setWaitGetMoney(data.getPoints().divide(points).multiply(money).divide(oneHundred, 2, RoundingMode.DOWN));
 			//原先奖励