浏览代码

毛利测算

yumeng 1 年之前
父节点
当前提交
282dbd8fa5

+ 34 - 4
ruixuan-common/src/main/java/com/ruixuan/common/utils/DateUtils.java

@@ -49,7 +49,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
     public static Date getNowDate() {
         return new Date();
     }
-
+    public static String getNowDate(String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        Date date = new Date();
+        return sdf.format(date);
+    }
 
     public static String getNowDateStr() {
         SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd");
@@ -424,6 +428,32 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return format.format(c.getTime());
     }
 
+
+
+    public static String getLastMonthFirstDay() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.MONTH, -1);
+        c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
+        return format.format(c.getTime());
+    }
+
+    public static String getLastMonthNowDay(String date) throws ParseException {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.setTime(format.parse(date));
+        c.add(Calendar.MONTH, -1);
+     //   c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
+        return format.format(c.getTime());
+
+
+    }
+
+    public static void main(String[] args) throws ParseException {
+        System.out.println(getLastMonthNowDay("2023-12-20"));
+    }
+
+
     /**
      * 获取 两个日期之间的所有 日期
      *
@@ -452,7 +482,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return dateList;
     }
 
-    public static void main(String[] args) {
-        System.out.println(getAllDatesOfTwoTimes("2023-02-01", "2023-02-15"));
-    }
+
+
+
 }

+ 101 - 0
ruixuan-live/src/main/java/com/ruixuan/jiaoyang/controller/JiaoYangReportController.java

@@ -1,5 +1,6 @@
 package com.ruixuan.jiaoyang.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ruixuan.common.core.controller.BaseController;
 import com.ruixuan.common.core.page.TableDataInfo;
@@ -25,7 +26,9 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.util.*;
 
 @RestController
@@ -40,6 +43,104 @@ public class JiaoYangReportController extends BaseController {
     @Autowired
     private ISysUserService sysUserService;
 
+
+    /**
+     * 商品数据
+     *
+     * @return
+     */
+    @GetMapping("/profitData")
+    @ApiOperation(value = "商品列表")
+    public JSONObject profitData(String date) throws ParseException {
+
+        JSONObject returnJson = new JSONObject();
+
+        try {
+            String lastDate = DateUtils.getAnotherDay("yyyy-MM-dd", date, -1);  //  日期 -1
+            String firstDateByMonth = DateUtils.getFirstDayByMonth(); // 本月第一天
+            // date 为本月结束时间
+            String lastMonthFirstDate = DateUtils.getLastMonthFirstDay();// 上个月开始时间
+            String lastMonthEndDate = DateUtils.getLastMonthNowDay(date);// 上个月结束时间
+            JSONObject dayData = jiaoYangReportService.dayData(DateUtils.strDateTimsToInt(date), DateUtils.strDateTimsToInt(lastDate));
+            JSONArray dayArray = new JSONArray();
+            JSONObject obj1 = new JSONObject();
+            obj1.put("date", dayData.getString("date"));
+            obj1.put("gmv", dayData.getString("gmv"));
+            obj1.put("orderNum", dayData.getString("orderNum"));
+            obj1.put("validGmv", dayData.getString("validGmv"));
+            obj1.put("validOrderNum", dayData.getString("validOrderNum"));
+            obj1.put("mcnPromotionAmount", dayData.getString("mcnPromotionAmount"));
+            obj1.put("grossMargin", dayData.getString("grossMargin"));
+
+
+            JSONObject obj2 = new JSONObject();
+            obj2.put("date", dayData.getString("lastDate"));
+            obj2.put("gmv", dayData.getString("lastGmv"));
+            obj2.put("orderNum", dayData.getString("lastOrderNum"));
+            obj2.put("validGmv", dayData.getString("lastValidGmv"));
+            obj2.put("validOrderNum", dayData.getString("lastValidOrderNum"));
+            obj2.put("mcnPromotionAmount", dayData.getString("lastMcnPromotionAmount"));
+            obj2.put("grossMargin", dayData.getString("lastGrossMargin"));
+
+
+            JSONObject obj3 = new JSONObject();
+            obj3.put("date", "Gap");
+            obj3.put("gmv", dayData.getString("gvmGap"));
+            obj3.put("orderNum", dayData.getString("orderNumGap"));
+            obj3.put("validGmv", dayData.getString("validGmvGap"));
+            obj3.put("validOrderNum", dayData.getString("validOrderNumGap"));
+            obj3.put("mcnPromotionAmount", dayData.getString("mcnPromotionAmountGap"));
+            obj3.put("grossMargin", dayData.getString("grossMarginGap"));
+            dayArray.add(obj1);
+            dayArray.add(obj2);
+            dayArray.add(obj3);
+            dayArray.add(new JSONObject());
+
+            JSONObject monthData = jiaoYangReportService.monthData(DateUtils.strDateTimsToInt(firstDateByMonth), DateUtils.strDateTimsToInt(date), DateUtils.strDateTimsToInt(lastMonthFirstDate), DateUtils.strDateTimsToInt(lastMonthEndDate));
+
+
+            JSONObject obj4 = new JSONObject();
+            obj4.put("date", monthData.getString("date"));
+            obj4.put("gmv", monthData.getString("gmv"));
+            obj4.put("orderNum", monthData.getString("orderNum"));
+            obj4.put("validGmv", monthData.getString("validGmv"));
+            obj4.put("validOrderNum", monthData.getString("validOrderNum"));
+            obj4.put("mcnPromotionAmount", monthData.getString("mcnPromotionAmount"));
+            obj4.put("grossMargin", monthData.getString("grossMargin"));
+
+            JSONObject obj5 = new JSONObject();
+            obj5.put("date", monthData.getString("lastDate"));
+            obj5.put("gmv", monthData.getString("lastGmv"));
+            obj5.put("orderNum", monthData.getString("lastOrderNum"));
+            obj5.put("validGmv", monthData.getString("lastValidGmv"));
+            obj5.put("validOrderNum", monthData.getString("lastValidOrderNum"));
+            obj5.put("mcnPromotionAmount", monthData.getString("lastMcnPromotionAmount"));
+            obj5.put("grossMargin", monthData.getString("lastGrossMargin"));
+
+            JSONObject obj6 = new JSONObject();
+            obj6.put("date", "环比");
+            obj6.put("gmv", monthData.getString("gvmRadio"));
+            obj6.put("orderNum", monthData.getString("orderNumRadio"));
+            obj6.put("validGmv", monthData.getString("validGmvRadio"));
+            obj6.put("validOrderNum", monthData.getString("validOrderNumRadio"));
+            obj6.put("mcnPromotionAmount", monthData.getString("mcnPromotionAmountRadio"));
+            obj6.put("grossMargin", monthData.getString("grossMarginRadio"));
+
+            dayArray.add(obj4);
+            dayArray.add(obj5);
+            dayArray.add(obj6);
+            returnJson.put("code", 200);
+            returnJson.put("dayArray", dayArray);
+        } catch (Exception e) {
+            e.printStackTrace();
+            returnJson.put("code", 500);
+            returnJson.put("message", e.getMessage());
+        }
+
+        return returnJson;
+    }
+
+
     /**
      * 商品数据
      *

+ 3 - 0
ruixuan-live/src/main/java/com/ruixuan/jiaoyang/controller/JyMaterialListController.java

@@ -1,6 +1,8 @@
 package com.ruixuan.jiaoyang.controller;
 
 
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -15,6 +17,7 @@ import com.ruixuan.common.core.domain.AjaxResult;
 import com.ruixuan.common.core.page.TableDataInfo;
 import com.ruixuan.common.enums.BusinessType;
 import com.ruixuan.common.utils.Check;
+import com.ruixuan.common.utils.DateUtils;
 import com.ruixuan.common.utils.poi.ExcelUtil;
 import com.ruixuan.jiaoyang.entity.JyMaterialList;
 import com.ruixuan.jiaoyang.service.IJyMaterialListService;

+ 4 - 0
ruixuan-live/src/main/java/com/ruixuan/jiaoyang/mapper/JiaoYangReportMapper.java

@@ -42,4 +42,8 @@ public interface JiaoYangReportMapper {
     JSONObject getTimeIntervalRatio(Map<String, Object> requestMap);
 
     List<Long> getPromoterIdsByUserIds(@Param("userIds") List<Long> userIds);
+
+    JSONObject dayData(@Param("date") Long date, @Param("lastDate") Long lastDate);
+
+    JSONObject monthData(@Param("nowMonthStartDate") Long nowMonthStartDate, @Param("nowMonthEndDate") Long nowMonthEndDate, @Param("lastMonthStartDate") Long lastMonthStartDate, @Param("lastMonthEndDate") Long lastMonthEndDate);
 }

+ 4 - 0
ruixuan-live/src/main/java/com/ruixuan/jiaoyang/service/IJiaoYangReportService.java

@@ -41,4 +41,8 @@ public interface IJiaoYangReportService {
     JSONObject getTimeIntervalRatio(Map<String, Object> requestMap);
 
     List<Long> getPromoterIdsByUserIds(List<Long> userIds);
+
+    JSONObject dayData(Long date, Long lastDate);
+
+    JSONObject monthData(Long nowMonthStartDate, Long nowMonthEndDate, Long lastMonthStartDate, Long lastMonthEndDate);
 }

+ 10 - 0
ruixuan-live/src/main/java/com/ruixuan/jiaoyang/service/impl/JiaoYangReportServiceImpl.java

@@ -103,4 +103,14 @@ public class JiaoYangReportServiceImpl implements IJiaoYangReportService {
     public List<Long> getPromoterIdsByUserIds(List<Long> userIds) {
         return jiaoYangReportMapper.getPromoterIdsByUserIds(userIds);
     }
+
+    @Override
+    public JSONObject dayData(Long date, Long lastDate) {
+        return jiaoYangReportMapper.dayData(date, lastDate);
+    }
+
+    @Override
+    public JSONObject monthData(Long nowMonthStartDate, Long nowMonthEndDate, Long lastMonthStartDate, Long lastMonthEndDate) {
+        return jiaoYangReportMapper.monthData(nowMonthStartDate, nowMonthEndDate, lastMonthStartDate, lastMonthEndDate);
+    }
 }

+ 75 - 1
ruixuan-live/src/main/resources/mapper/jiaoyang/JiaoYangReportMapper.xml

@@ -123,7 +123,8 @@
             </foreach>
         </if>
         group by clip_user_id) t
-        left join ( select * from jy_clip_cooperation where stat_date =  DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY),'%Y%m%d') ) tt on t.promoterId = tt.clip_id
+        left join ( select * from jy_clip_cooperation where stat_date = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1
+        DAY),'%Y%m%d') ) tt on t.promoterId = tt.clip_id
         left join jy_kuaishou_promoter ttt on t.promoterId = ttt.promoter_id
         where 1 = 1
         <if test="type != null and type != '' ">
@@ -615,6 +616,79 @@
             #{userId}
         </foreach>
     </select>
+    <select id="dayData" resultType="com.alibaba.fastjson.JSONObject">
+        select *,
+       t1.gmv - t2.lastGmv                               as 'gvmGap',
+       t1.orderNum - t2.lastOrderNum                     as 'orderNumGap',
+       t1.validGmv - t2.lastValidGmv                     as 'validGmvGap',
+       t1.validOrderNUm - t2.lastValidOrderNUm           as 'validOrderNumGap',
+       t1.mcnPromotionAmount - t2.lastMcnPromotionAmount as 'mcnPromotionAmountGap',
+       t1.grossMargin - t2.lastGrossMargin               as 'grossMarginGap'
+from (select date_format(#{date},'%Y/%m/%d')                                                                   as 'date',
+             round(sum(pay_amount) / 100, 2)                                              as 'gmv',
+             count(oid)                                                                   as 'orderNum',
+             round(sum(case when order_status != 80 then pay_amount else 0 end) / 100, 2) as 'validGmv',
+             sum(case when order_status != 80 then 1 else 0 end)                          as 'validOrderNum',
+             round(sum(mcn_promotion_amount) / 100, 2)                                    as 'mcnPromotionAmount',
+             round(sum(mcn_promotion_amount) / sum(pay_amount) * 100, 2)                  as 'grossMargin'
+      from  jy_order_list t1 left join jy_kuaishou_promoter t2
+     on t1.clip_user_id = t2.promoter_id
+      where t1.stat_date = #{date}
+      and t2.type = 1
+      ) t1
+         join (select date_format(#{lastDate} ,'%Y/%m/%d')                                                                       as 'lastDate',
+                      round(sum(pay_amount) / 100, 2)                                              as 'lastGmv',
+                      count(oid)                                                                   as 'lastOrderNum',
+                      round(sum(case when order_status != 80 then pay_amount else 0 end) / 100, 2) as 'lastValidGmv',
+                      sum(case when order_status != 80 then 1 else 0 end)                          as 'lastValidOrderNum',
+                      round(sum(mcn_promotion_amount) / 100, 2)                                    as 'lastMcnPromotionAmount',
+                      round(sum(mcn_promotion_amount) / sum(pay_amount) * 100, 2)                  as 'lastGrossMargin'
+               from jy_order_list t1 left join jy_kuaishou_promoter t2
+               on t1.clip_user_id = t2.promoter_id
+               where t1.stat_date = #{lastDate}
+               and t2.type = 1
+               ) t2
+
+    </select>
+    <select id="monthData" resultType="com.alibaba.fastjson.JSONObject">
+
+        select *,
+        concat(ROUND((t1.gmv - t2.lastGmv) / t2.lastGmv * 100, 2)         ,'%')       as 'gvmRadio',
+        concat(ROUND((t1.orderNum - t2.lastOrderNum) / t2.lastOrderNum * 100, 2),'%') as 'orderNumRadio',
+        concat(ROUND((t1.validGmv - t2.lastValidGmv) / t2.lastValidGmv * 100, 2) ,'%')as 'validGmvRadio',
+        concat(ROUND((t1.validOrderNUm - t2.lastValidOrderNUm) / t2.lastValidOrderNUm * 100,
+        2)                                                          ,'%')as 'validOrderNumRadio',
+        concat(ROUND((t1.mcnPromotionAmount - t2.lastMcnPromotionAmount) / t2.lastMcnPromotionAmount * 100,
+        2)                                                          ,'%')as 'mcnPromotionAmountRadio',
+        ROUND((t1.grossMargin - t2.lastGrossMargin) / t2.lastGrossMargin * 100,
+        2)                                                         as 'grossMarginRadio'
+        from (select CONCAT(date_format(#{nowMonthEndDate} ,'%Y/%m/%d') , '合计')                                                     as 'date',
+        round(sum(pay_amount) / 100, 2)                                              as 'gmv',
+        count(oid)                                                                   as 'orderNum',
+        round(sum(case when order_status != 80 then pay_amount else 0 end) / 100, 2) as 'validGmv',
+        sum(case when order_status != 80 then 1 else 0 end)                          as 'validOrderNum',
+        round(sum(mcn_promotion_amount) / 100, 2)                                    as 'mcnPromotionAmount',
+        round(sum(mcn_promotion_amount) / sum(pay_amount) * 100, 2)                  as 'grossMargin'
+        from jy_order_list t1 left join jy_kuaishou_promoter t2
+        on t1.clip_user_id = t2.promoter_id
+        where t1.stat_date >= #{nowMonthStartDate}
+        and t1.stat_date &lt;= #{nowMonthEndDate}
+        and t2.type = 1
+        ) t1
+        join (select  CONCAT(date_format(#{lastMonthEndDate} ,'%Y/%m/%d')  , '合计')                                                                   as 'lastDate',
+        round(sum(pay_amount) / 100, 2)                                              as 'lastGmv',
+        count(oid)                                                                   as 'lastOrderNum',
+        round(sum(case when order_status != 80 then pay_amount else 0 end) / 100, 2) as 'lastValidGmv',
+        sum(case when order_status != 80 then 1 else 0 end)                          as 'lastValidOrderNum',
+        round(sum(mcn_promotion_amount) / 100, 2)                                    as 'lastMcnPromotionAmount',
+        round(sum(mcn_promotion_amount) / sum(pay_amount) * 100, 2)                  as 'lastGrossMargin'
+        from jy_order_list t1 left join jy_kuaishou_promoter t2
+        on t1.clip_user_id = t2.promoter_id
+        where t1.stat_date >= #{lastMonthStartDate}
+        and t1.stat_date &lt;=  #{lastMonthEndDate}
+        and t2.type = 1
+        ) t2
+    </select>
 
 
 </mapper>