Răsfoiți Sursa

Merge branch 'tag_func'

# Conflicts:
#	netflix-dao/src/main/java/com/cyksj/mapper/OrderDonMapper.java
#	netflix-dao/src/main/resources/mapper/OrderDonMapper.xml
zoujiajian 2 ani în urmă
părinte
comite
f60d8b7bd0

+ 4 - 2
netflix-dao/src/main/java/com/cyksj/mapper/OrderDonMapper.java

@@ -66,9 +66,9 @@ public interface OrderDonMapper extends BaseMapper<OrderDon> {
 
 	BrokenLineObjView selectDsPlatBrokenLineMoney(@Param("sharedId") Long sharedId, @Param("first") String first, @Param("end") String end);
 
-	UserOrderDetailView getTagUserData(@Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime);
+	UserOrderDetailView getTagUserData(@Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("consumeStTime") String consumeStTime, @Param("consumeEtTime") String consumeEtTime);
 
-	Page<UserOrderDetailView> getTagUserDataPage(@Param("page") Page<UserOrderDetailView> page, @Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime);
+	Page<UserOrderDetailView> getTagUserDataPage(@Param("page") Page<UserOrderDetailView> page, @Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("consumeStTime") String consumeStTime, @Param("consumeEtTime") String consumeEtTime);
 
 	Page<CorpTagUserOrderDataView> getTagUserTimeOrderData(@Param("page") Page<Object> objectPage, @Param("tagIdStr") String tagIdStr, @Param("toDate") String toDate, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
@@ -79,4 +79,6 @@ public interface OrderDonMapper extends BaseMapper<OrderDon> {
 	OrderDonCustomerServiceRelate selectOrderRelate(Long orderId);
 
 	BigDecimal selectSubChannelOrderMoney(@Param("sharedId") Long sharedId, @Param("invitedTime") Date invitedTime, @Param("limitTime") Date limitTime);
+
+	Page<UserOrderDetailView> getPastRecord(@Param("objectPage") Page<Object> objectPage, @Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("consumeStTime") String consumeStTime, @Param("consumeEtTime") String consumeEtTime);
 }

+ 1 - 2
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpUserTagMapper.java

@@ -7,7 +7,6 @@ import com.cyksj.model.excel.CorpUserTagExcelData;
 import com.cyksj.model.views.CorpUserIntentionView;
 import com.cyksj.model.views.CorpUserView;
 import com.cyksj.model.views.UserIntentionPieView;
-import com.cyksj.model.views.UserOrderDetailView;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -22,7 +21,7 @@ public interface CorpUserTagMapper extends BaseMapper<CorpUserTag> {
 
 	List<CorpUserTagExcelData> exportUserTagDetail(@Param("tagIds") String[] tagIds, @Param("groupIds") String[] groupIds, @Param("wxCorpId") Long wxCorpId);
 
-	UserOrderDetailView countTagUser(@Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("thisDate") String thisDate);
+	Integer getDelCorpUserNum(@Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime);
 
 	List<Long> getTagIdByCorpUserId(Long corpUserId);
 

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

@@ -31,5 +31,13 @@ public class UserOrderDetailView {
 
 	private String date;
 
-	Page<UserOrderDetailView> records;
+	/**
+	 * 进粉记录
+	 */
+	Page<UserOrderDetailView> fansRecords;
+
+	/**
+	 * 往期标签用户订单记录
+	 */
+	Page<UserOrderDetailView> pastRecords;
 }

+ 6 - 8
netflix-dao/src/main/resources/mapper/CorpUserTagMapper.xml

@@ -61,9 +61,8 @@
         group by cu.id, cu.unionid)s order by s.tagTime desc, s.userId asc
     </select>
 
-    <select id="countTagUser" resultType="com.cyksj.model.views.UserOrderDetailView">
-        select count(distinct ca.corp_user_id) as numOfUser,
-        count(distinct if(cufr.status = 0,ca.corp_user_id,NULL)) as delNumOfUser
+    <select id="getDelCorpUserNum" resultType="java.lang.Integer">
+        select count(distinct if(cufr.status = 0,ca.corp_user_id,NULL)) as delNumOfUser
         from (select relation_id
         from `corp_user_tag` ct
         where tag_id = #{tagIdStr}
@@ -72,9 +71,6 @@
         </if>
         <if test="endTime != null">
             and ct.created_time &lt; #{endTime}
-        </if>
-        <if test="thisDate != null">
-            and date_format(ct.created_time,'%Y-%m-%d') = #{thisDate}
         </if>) s
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
@@ -94,8 +90,9 @@
         from (select relation_id
         from `corp_user_tag` ct
         where tag_id = #{tagIdStr}
+        group by relation_id
         <if test="thisDate != null">
-            and date_format(ct.created_time,'%Y-%m-%d') = #{thisDate}
+            having date_format(min(ct.created_time),'%Y-%m-%d') = #{thisDate}
         </if>) s
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
@@ -109,8 +106,9 @@
         from (select relation_id
         from `corp_user_tag` ct
         where tag_id = #{tagIdStr}
+        group by relation_id
         <if test="thisDate != null">
-            and date_format(ct.created_time,'%Y-%m-%d') = #{thisDate}
+            having date_format(min(ct.created_time),'%Y-%m-%d') = #{thisDate}
         </if>) s
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id

+ 78 - 46
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -320,56 +320,62 @@
     </select>
 
     <select id="getTagUserData" resultType="com.cyksj.model.views.UserOrderDetailView">
-        select count(if(status != 'refund', 1, NULL)) as numOfOrder, (sum(money) - sum(ifnull(refund_money, 0))) / 100
-        as orderMoney,
-        count(if(status != 'refund' and o.goods_id = 15,1,NULL)) as numOfEpOrder,
-        (sum(if(o.goods_id = 15,money,0)) - sum(ifnull(if(o.goods_id = 15,refund_money,0), 0))) / 100 as epOrderMoney
-        from (select cu.user_id
-        from (select relation_id
+        select count(if(status != 'refund', 1, NULL)) as numOfOrder,
+               (sum(money) - sum(ifnull(refund_money, 0))) / 100 as orderMoney,
+               count(if(status != 'refund' and o.goods_id = 15,1,NULL)) as numOfEpOrder,
+               (sum(if(o.goods_id = 15,money,0)) - sum(ifnull(if(o.goods_id = 15,refund_money,0), 0))) / 100 as epOrderMoney,
+               count(distinct corpUserId) as numOfUser
+        from (select cu.id as corpUserId,
+        cu.user_id,
+        s.created_time
+        from (select relation_id,
+        min(ct.created_time) as created_time
         from `corp_user_tag` ct
         where tag_id = #{tagIdStr}
+        group by ct.relation_id
         <if test="startTime != null">
-            and ct.created_time >= #{startTime}
+            having min(ct.created_time) >= #{startTime}
         </if>
         <if test="endTime != null">
-            and ct.created_time &lt; #{endTime}
+            and min(ct.created_time) &lt; #{endTime}
         </if>) s
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
-        left join corp_user cu on cu.id = ca.corp_user_id where cu.user_id != 0) s inner join order_don o on o.user_id =
-        s.user_id
+        left join corp_user cu on cu.id = ca.corp_user_id) s
+        left join order_don o on o.user_id = s.user_id and o.user_id != 0
         and o.status not in ('close', 'noPayment')
         and o.money > 0
-        and o.money > ifnull(o.refund_money,0)
-        <if test="startTime != null">
-            and o.created_time >= #{startTime}
+        and o.created_time > s.created_time
+        <if test="consumeStTime != null">
+            and o.created_time >= #{consumeStTime}
+        </if>
+        <if test="consumeEtTime != null">
+            and o.created_time &lt; #{consumeEtTime}
         </if>
     </select>
 
     <select id="getTagUserDataPage" resultType="com.cyksj.model.views.UserOrderDetailView">
-        select count(if(status != 'refund', 1, NULL)) as numOfOrder, (sum(money) - sum(ifnull(refund_money, 0))) / 100
-        as orderMoney,date_format(o.created_time,'%Y-%m-%d') as date from (select cu.user_id
-        from (select relation_id
-        from `corp_user_tag` ct
-        where tag_id = #{tagIdStr}
-        <if test="startTime != null">
-            and ct.created_time >= #{startTime}
-        </if>
-        <if test="endTime != null">
-            and ct.created_time &lt; #{endTime}
-        </if>) s
-        left join corp_user_follow_relation cufr on cufr.id = s.relation_id
-        left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
-        left join corp_user cu on cu.id = ca.corp_user_id where cu.user_id != 0) s inner join order_don o on o.user_id =
-        s.user_id
-        and o.status not in ('close', 'noPayment')
+        select joinTime                               as `date`,
+               count(DISTINCT corpUserId)             as numOfUser,
+               count(if(status != 'refund', 1, NULL)) as numOfOrder,
+               (ifnull(sum(money), 0) - sum(ifnull(refund_money, 0))) / 100 as orderMoney
+        from (select cu.id as                                corpUserId,
+                     cu.user_id,
+                     date_format(s.created_time, '%Y-%m-%d') joinTime
+              from (select relation_id,
+                           min(ct.created_time) as created_time
+                    from `corp_user_tag` ct
+                    where tag_id = #{tagIdStr}
+                    group by ct.relation_id) s
+                       left join corp_user_follow_relation cufr on cufr.id = s.relation_id
+                       left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
+                       left join corp_user cu on cu.id = ca.corp_user_id) s
+                 left join order_don o on o.user_id = s.user_id and o.user_id != 0
+        and o.status not in ('close','noPayment')
+        and date_format(o.created_time, '%Y-%m-%d') = joinTime
         and o.money > 0
-        and o.money > ifnull(o.refund_money,0)
-        <if test="startTime != null">
-            and o.created_time >= #{startTime}
-        </if>
-        group by date_format(o.created_time,'%Y-%m-%d')
-        order by date_format(o.created_time,'%Y-%m-%d') desc
+        group by joinTime
+        order by joinTime desc
     </select>
 
     <select id="getTagUserTimeOrderData" resultType="com.cyksj.model.views.CorpTagUserOrderDataView">
@@ -377,22 +383,20 @@
         (select nickname from user u where u.id = o.user_id limit 1),
         o.order_no,o.goods_id,g.title,o.sku_id,sku.spec_val,
         o.money/100 as money,o.created_time
-        from (select
-        cu.user_id
-        from (select relation_id
+        from (select cu.id as corpUserId,
+        cu.user_id,
+        date_format(s.created_time, '%Y-%m-%d') joinTime
+        from (select relation_id,
+        min(ct.created_time) as created_time
         from `corp_user_tag` ct
         where tag_id = #{tagIdStr}
-        <if test="startTime != null">
-            and ct.created_time >= #{startTime}
-        </if>
-        <if test="endTime != null">
-            and ct.created_time &lt; #{endTime}
-        </if>) s
+        group by ct.relation_id) s
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
-        left join corp_user cu on cu.id = ca.corp_user_id where cu.user_id != 0) s inner join order_don o on o.user_id =
-        s.user_id
+        left join corp_user cu on cu.id = ca.corp_user_id) s
+        inner join order_don o on o.user_id = s.user_id and o.user_id != 0
         and o.status not in ('close', 'noPayment','refund')
+        and date_format(o.created_time, '%Y-%m-%d') = joinTime
         and o.money > 0
         <if test="toDate != null and toDate != ''">
             and date_format(o.created_time,'%Y-%m-%d') = #{toDate}
@@ -455,4 +459,32 @@
         and o.created_time > #{invitedTime}
           and o.created_time &lt; #{limitTime}
     </select>
+
+    <select id="getPastRecord" resultType="com.cyksj.model.views.UserOrderDetailView">
+        select date_format(o.created_time,'%Y-%m-%d') as `date`,
+        count(if(status != 'refund', 1, NULL)) as numOfOrder,
+        (ifnull(sum(money),0) - sum(ifnull(refund_money, 0))) / 100 as orderMoney
+        from (select cu.id as corpUserId,
+        cu.user_id,
+        date_format(s.created_time, '%Y-%m-%d') joinTime
+        from (select relation_id,
+        min(ct.created_time) as created_time
+        from `corp_user_tag` ct
+        where tag_id = #{tagIdStr}
+        group by ct.relation_id) s
+        left join corp_user_follow_relation cufr on cufr.id = s.relation_id
+        left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
+        left join corp_user cu on cu.id = ca.corp_user_id where cu.user_id != 0)s
+        inner join order_don o on o.user_id = s.user_id
+        and o.status not in ('close','noPayment')
+        and date_format(o.created_time, '%Y-%m-%d') > joinTime
+        <if test="consumeStTime != null">
+            and o.created_time >= #{consumeStTime}
+        </if>
+        <if test="consumeEtTime != null">
+            and o.created_time &lt; #{consumeEtTime}
+        </if>
+        group by date_format(o.created_time,'%Y-%m-%d')
+        order by date_format(o.created_time,'%Y-%m-%d') desc
+    </select>
 </mapper>

+ 5 - 1
netflix-service/src/main/java/com/cyksj/service/corp/CorpTagService.java

@@ -45,7 +45,11 @@ public interface CorpTagService {
 	 */
 	CorpTagGroupView addGroup(CorpTagGroupView tagGroup) throws Exception;
 
-	UserOrderDetailView getTagUserData(Integer start, Integer limit, String tagIdStr, String startTime, String endTime);
+	Page<UserOrderDetailView>  getTagUserData(Integer start, Integer limit, String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime);
 
 	Page<CorpTagUserOrderDataView> getTagUserTimeOrderData(Integer start, Integer limit, String tagIdStr, String toDate, String startTime, String endTime);
+
+	Page<UserOrderDetailView> getTagUserPastRecord(Integer start, Integer limit, String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime);
+
+	UserOrderDetailView tagUserHeadData(String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime);
 }

+ 19 - 16
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpTagServiceImpl.java

@@ -421,23 +421,15 @@ public class CorpTagServiceImpl implements CorpTagService {
 	}
 
 	@Override
-	public UserOrderDetailView getTagUserData(Integer start, Integer limit, String tagIdStr, String startTime, String endTime) {
-		UserOrderDetailView u = orderDonMapper.getTagUserData(tagIdStr, startTime, endTime);
-
-		UserOrderDetailView u2 = corpUserTagMapper.countTagUser(tagIdStr, startTime, endTime,null);
-
-		u.setNumOfUser(u2.getNumOfUser());
-		u.setDelNumOfUser(u2.getDelNumOfUser());
-		u.setOrderRate(u.getNumOfUser() == 0 ? BigDecimal.ZERO : BigDecimal.valueOf(u.getNumOfEpOrder()).divide(BigDecimal.valueOf(u.getNumOfUser()), 2, RoundingMode.HALF_DOWN));
-		Page<UserOrderDetailView> records = orderDonMapper.getTagUserDataPage(new Page<>(start, limit), tagIdStr, startTime, endTime);
-		records.getRecords().forEach(e->{
-			String date = e.getDate();
-			UserOrderDetailView userOrderDetailView = corpUserTagMapper.countTagUser(tagIdStr, null, null, date);
-			e.setNumOfUser(userOrderDetailView.getNumOfUser());
-		});
+	public Page<UserOrderDetailView> getTagUserData(Integer start, Integer limit, String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime) {
+		Page<UserOrderDetailView> fansRecords = orderDonMapper.getTagUserDataPage(new Page<>(start, limit), tagIdStr, startTime, endTime, consumeStTime, consumeEtTime);
+		return fansRecords;
+	}
 
-		u.setRecords(records);
-		return u;
+	@Override
+	public Page<UserOrderDetailView>  getTagUserPastRecord(Integer start, Integer limit, String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime) {
+		Page<UserOrderDetailView> pastRecords = orderDonMapper.getPastRecord(new Page<>(start, limit), tagIdStr, startTime, endTime, consumeStTime, consumeEtTime);
+		return pastRecords;
 	}
 
 	@Override
@@ -445,4 +437,15 @@ public class CorpTagServiceImpl implements CorpTagService {
 		Page<CorpTagUserOrderDataView> records = orderDonMapper.getTagUserTimeOrderData(new Page<>(start, limit), tagIdStr, toDate, startTime, endTime);
 		return records;
 	}
+
+	@Override
+	public UserOrderDetailView tagUserHeadData(String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime) {
+		UserOrderDetailView u = orderDonMapper.getTagUserData(tagIdStr, startTime, endTime, consumeStTime, consumeEtTime);
+		//被删除用户数
+		Integer delNumOfUser = corpUserTagMapper.getDelCorpUserNum(tagIdStr, startTime, endTime);
+		u.setDelNumOfUser(delNumOfUser);
+
+		u.setOrderRate(u.getNumOfUser() == 0 ? BigDecimal.ZERO : BigDecimal.valueOf(u.getNumOfEpOrder()).divide(BigDecimal.valueOf(u.getNumOfUser()), 2, RoundingMode.HALF_DOWN));
+		return u;
+	}
 }

+ 25 - 6
netflix-web/src/main/java/com/cyksj/web/controller/manage/corp/CorpTagController.java

@@ -170,17 +170,36 @@ public class CorpTagController {
 	}
 
 	/**
-	 * 通过标签 查找对应用户订单数据
+	 * 按照标签时间,消费时间 查看用户总览
 	 */
-	@GetMapping("/get/tagUser/data")
-	public Result<UserOrderDetailView> getTagUserData(@RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "10") Integer limit, @RequestParam(required = true) String tagIdStr, String startTime, String endTime) {
+	@GetMapping("/get/tagUser/headData")
+	public Result<UserOrderDetailView> tagUserHeadData(@RequestParam(required = true) String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime) {
 		Assert.notEmpty(tagIdStr, "请输入对应标签");
-		UserOrderDetailView userOrderDetailView = corpTagService.getTagUserData(start, limit, tagIdStr, startTime, endTime);
-		return GatewayResponse.SUCCESS.newBuilder().toResult(userOrderDetailView);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(corpTagService.tagUserHeadData(tagIdStr,startTime,endTime,consumeStTime,consumeEtTime));
 	}
 
 	/**
-	 * 标签用户订单详情
+	 * 通过标签 查找进粉订单记录
+	 */
+	@GetMapping("/get/tagUser/fansData")
+	public Result<Page<UserOrderDetailView> > getTagUserData(@RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "10") Integer limit, @RequestParam(required = true) String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime) {
+		Assert.notEmpty(tagIdStr, "请输入对应标签");
+		Page<UserOrderDetailView>  page = corpTagService.getTagUserData(start, limit, tagIdStr, startTime, endTime, consumeStTime, consumeEtTime);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(page);
+	}
+
+	/**
+	 * 通过标签 查找标签用户历史订单记录
+	 */
+	@GetMapping("/get/tagUser/pastData")
+	public Result<Page<UserOrderDetailView>> getTagUserPastRecord(@RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "10") Integer limit, @RequestParam(required = true) String tagIdStr, String startTime, String endTime, String consumeStTime, String consumeEtTime) {
+		Assert.notEmpty(tagIdStr, "请输入对应标签");
+		Page<UserOrderDetailView> page = corpTagService.getTagUserPastRecord(start, limit, tagIdStr, startTime, endTime, consumeStTime, consumeEtTime);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(page);
+	}
+
+	/**
+	 * 当日进粉户订单详情
 	 */
 	@GetMapping("/get/tagUser/time/orderData")
 	public Result<Page<CorpTagUserOrderDataView>> getTagUserTimeOrderData(@RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "10") Integer limit, @RequestParam(required = true) String tagIdStr, String toDate, String startTime, String endTime) {