yumeng 1 năm trước cách đây
mục cha
commit
36d67443d0

+ 1 - 1
ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouPromoterController.java

@@ -255,7 +255,7 @@ public class KuaishouPromoterController extends BaseController {
         for (int i = 0; i < list.size(); i++) {
             Long l = list.get(i);
             kuaishouPromoterService.addAuth(l);
-            Thread.sleep(10 * 1000L);
+            Thread.sleep(1 * 1000L);
         }
         return null;
     }

+ 3 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/mapper/AccessTokenMapper.java

@@ -2,6 +2,7 @@ package com.ruixuan.isc.mapper;
 
 import com.ruixuan.isc.entity.JYAccessToken;
 import com.ruixuan.isc.entity.KuaishouAccessToken;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -25,4 +26,6 @@ public interface AccessTokenMapper {
     List<JYAccessToken> getJYTokenInfos();
 
     void updateJYAccessToken(JYAccessToken updateToken);
+
+    JYAccessToken getJYTokenInfoByPromoter(@Param("promoterId") Long promoterId);
 }

+ 0 - 2
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouPromoterServiceImpl.java

@@ -638,8 +638,6 @@ public class KuaishouPromoterServiceImpl implements IKuaishouPromoterService {
         if (promoter.getMediaId().equals("2")) {
             addAuth(Long.valueOf(promoter.getPromoterId()));
         }
-
-
         editPromoter3(promoter.getId(), promoter.getMediaId(), promoter.getPromoterId(), true);
         result.put("code", 200);
         result.put("msg", "success");

+ 4 - 1
ruixuan-live/src/main/java/com/ruixuan/jiaoyang/controller/JiaoYangCallbackController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.ruixuan.common.utils.Check;
 import com.ruixuan.common.utils.http.HttpUtil;
 import com.ruixuan.jiaoyang.service.IJiaoYangCallbackService;
+import com.ruixuan.open.service.IKuaishouOpenPhotoListService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +20,8 @@ import java.util.*;
 public class JiaoYangCallbackController {
     @Autowired
     private IJiaoYangCallbackService jiaoYangCallbackService;
+    @Autowired
+    private IKuaishouOpenPhotoListService openPhotoListService;
     private static String appId = "ks690458118961229051";
     private static String appSecret = "sqc2y31qQEY2E3AIWWvmCg";
     private static String signSecret = "6ef1e2a231733bb0c38fb2bf0f50e45b";
@@ -50,7 +53,7 @@ public class JiaoYangCallbackController {
             String refreshToken = jsonObject.getString("refresh_token");
             Long promoterId = Long.valueOf(state);
             jiaoYangCallbackService.replaceTokenInfo(promoterId, appId, appSecret, signSecret, accessToken, refreshToken);
-
+            openPhotoListService.insertKuaishouOpenPhotoListByPromoter(promoterId);
         } else {
             return "授权失败,请联系技术解决";
         }

+ 184 - 0
ruixuan-live/src/main/java/com/ruixuan/jiaoyang/controller/JiaoYangDingPanController.java

@@ -879,4 +879,188 @@ public class JiaoYangDingPanController extends BaseController {
         return returnJson;
     }
 
+
+    @GetMapping("/getTeamExpertBusinessDetail")
+    @ApiOperation(value = "切片盯盘")
+    public JSONObject getTeamExpertBusinessDetail(Long userId, String userType, String startDate, String endDate) {
+        Map<String, Object> requestMap = new HashMap<>();
+        JSONObject returnJson = new JSONObject();
+        try {
+            if (Check.isNull(userType)) {
+                throw new Exception("请传入类型");
+            }
+            if (Check.isNull(userId)) {
+                throw new Exception("请传入用户id");
+            }
+            if (Check.isNull(startDate)) {
+                throw new Exception("请传入开始日期");
+            }
+            if (Check.isNull(endDate)) {
+                throw new Exception("请传入结束日期");
+            }
+            List<Long> promoterIds = new ArrayList<>();
+            if ("导师".equals(userType)) {
+                promoterIds = jiaoYangDingPanService.getPromoterIdsByMentorId(userId);
+            }
+            if ("商务".equals(userType)) {
+                promoterIds = jiaoYangDingPanService.getPromoterIdsByBusinessId(userId);
+
+            }
+
+            if (Check.isNull(promoterIds)) {
+                returnJson.put("data", null);
+                returnJson.put("code", 200);
+                returnJson.put("success", true);
+                return returnJson;
+            }
+            requestMap.put("promoterIds", promoterIds);
+            Long start = DateUtils.strDateToInt(startDate);
+            Long end = DateUtils.strDateToInt(endDate);
+            requestMap.put("start", start);
+            requestMap.put("end", end);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            int differDay = DateUtils.differentDaysByMillisecond(simpleDateFormat.parse(startDate), simpleDateFormat.parse(endDate));
+            String lastEndStr = DateUtils.getAnotherDay("yyyy-MM-dd", startDate, -1); // 上一时段结束日期
+            String lastStartStr = DateUtils.getAnotherDay("yyyy-MM-dd", lastEndStr, -differDay); // 上一时段开始日期
+            requestMap.put("lastEnd", DateUtils.strDateToInt(lastEndStr));
+            requestMap.put("lastStart", DateUtils.strDateToInt(lastStartStr));
+            Long nowDate = Long.valueOf(DateUtils.getNowDate("yyyyMMdd"));
+            if (start.equals(nowDate) && end.equals(nowDate)) {
+                Integer nowHour = DateUtils.getNowHour();
+                requestMap.put("nowHour", nowHour);
+            }
+            List<JSONObject> data = jiaoYangDingPanService.getTeamDetail(requestMap);
+            returnJson.put("data", data);
+            returnJson.put("code", 200);
+            returnJson.put("success", true);
+        } catch (Exception e) {
+            e.printStackTrace();
+            returnJson.put("code", 500);
+            returnJson.put("success", false);
+            returnJson.put("message", e.getMessage());
+        }
+        return returnJson;
+    }
+
+
+    @GetMapping("/getPromoterItemDetail")
+    @ApiOperation(value = "切片盯盘")
+    public JSONObject getPromoterItemDetail(Long clipUserId, String startDate, String endDate) {
+        Map<String, Object> requestMap = new HashMap<>();
+        JSONObject returnJson = new JSONObject();
+        try {
+            if (Check.isNull(clipUserId)) {
+                throw new Exception("请传入达人ID");
+            }
+
+            if (Check.isNull(startDate)) {
+                throw new Exception("请传入开始日期");
+            }
+            if (Check.isNull(endDate)) {
+                throw new Exception("请传入结束日期");
+            }
+
+
+            requestMap.put("clipUserId", clipUserId);
+            Long start = DateUtils.strDateToInt(startDate);
+            Long end = DateUtils.strDateToInt(endDate);
+            requestMap.put("start", start);
+            requestMap.put("end", end);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            int differDay = DateUtils.differentDaysByMillisecond(simpleDateFormat.parse(startDate), simpleDateFormat.parse(endDate));
+            String lastEndStr = DateUtils.getAnotherDay("yyyy-MM-dd", startDate, -1); // 上一时段结束日期
+            String lastStartStr = DateUtils.getAnotherDay("yyyy-MM-dd", lastEndStr, -differDay); // 上一时段开始日期
+            requestMap.put("lastEnd", DateUtils.strDateToInt(lastEndStr));
+            requestMap.put("lastStart", DateUtils.strDateToInt(lastStartStr));
+            Long nowDate = Long.valueOf(DateUtils.getNowDate("yyyyMMdd"));
+            if (start.equals(nowDate) && end.equals(nowDate)) {
+                Integer nowHour = DateUtils.getNowHour();
+                requestMap.put("nowHour", nowHour);
+            }
+            List<JSONObject> data = jiaoYangDingPanService.getPromoterItemDetail(requestMap);
+            returnJson.put("data", data);
+            returnJson.put("code", 200);
+            returnJson.put("success", true);
+        } catch (Exception e) {
+            e.printStackTrace();
+            returnJson.put("code", 500);
+            returnJson.put("success", false);
+            returnJson.put("message", e.getMessage());
+        }
+        return returnJson;
+    }
+
+
+    @GetMapping("/getItemPromoterDetail")
+    @ApiOperation(value = "切片盯盘")
+    public JSONObject getItemPromoterDetail(Long userId, String startDate, String endDate, Long itemId) {
+        Map<String, Object> requestMap = new HashMap<>();
+        JSONObject returnJson = new JSONObject();
+        try {
+            if (Check.isNull(userId)) {
+                throw new Exception("请传入用户id");
+            }
+            if (Check.isNull(startDate)) {
+                throw new Exception("请传入开始日期");
+            }
+            if (Check.isNull(endDate)) {
+                throw new Exception("请传入结束日期");
+            }
+            if (Check.isNull(itemId)) {
+                throw new Exception("请传入商品id");
+            }
+            String roleId = sysRoleService.getRoleBYUserId(userId);
+            // 剪手经理,渠道经理 查询部门下所有成员数据
+            List<Long> promoterIds = new ArrayList<>();
+            if ("jy_bd".equals(roleId) || "jy_bd_manage".equals(roleId) || "jy_scissors_manage".equals(roleId) || "jy_scissors".equals(roleId) || "jy_out_operation_manager".equals(roleId) || "jy_out_operation".equals(roleId)) {
+                List<Long> userIds = new ArrayList<>();
+                if ("jy_bd_manage".equals(roleId) || "jy_scissors_manage".equals(roleId) || "jy_out_operation_manager".equals(roleId)) {
+                    Long deptId = sysDeptService.getDeptIdByUserId(userId);
+                    userIds = sysDeptService.getDeptUserListByDeptId(deptId);
+                } else {
+                    userIds.add(userId);
+                }
+                promoterIds = jiaoYangDingPanService.getPromoterIdsByUserIds(userIds);
+            } else if ("jy_expert_business".equals(roleId)) {
+                promoterIds = jiaoYangDingPanService.getPromoterIdsByBusinessId(userId);
+            }
+            if (!"admin".equals(roleId) && !"jy_admnin".equals(roleId) && !"jy_expert_mentor".equals(roleId)) {
+                if (Check.isNull(promoterIds)) {
+                    throw new Exception("该用户下未查询到绑定达人");
+                }
+            }
+            if (!Check.isNull(promoterIds)) {
+                requestMap.put("promoterIds", promoterIds);
+            }
+
+            requestMap.put("itemId", itemId);
+
+            Long start = DateUtils.strDateToInt(startDate);
+            Long end = DateUtils.strDateToInt(endDate);
+            requestMap.put("start", start);
+            requestMap.put("end", end);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            int differDay = DateUtils.differentDaysByMillisecond(simpleDateFormat.parse(startDate), simpleDateFormat.parse(endDate));
+            String lastEndStr = DateUtils.getAnotherDay("yyyy-MM-dd", startDate, -1); // 上一时段结束日期
+            String lastStartStr = DateUtils.getAnotherDay("yyyy-MM-dd", lastEndStr, -differDay); // 上一时段开始日期
+            requestMap.put("lastEnd", DateUtils.strDateToInt(lastEndStr));
+            requestMap.put("lastStart", DateUtils.strDateToInt(lastStartStr));
+            Long nowDate = Long.valueOf(DateUtils.getNowDate("yyyyMMdd"));
+            if (start.equals(nowDate) && end.equals(nowDate)) {
+                Integer nowHour = DateUtils.getNowHour();
+                requestMap.put("nowHour", nowHour);
+            }
+            List<JSONObject> data = jiaoYangDingPanService.getItemPromoterDetail(requestMap);
+            returnJson.put("code", 200);
+            returnJson.put("data", data);
+            returnJson.put("success", true);
+        } catch (Exception e) {
+            e.printStackTrace();
+            returnJson.put("code", 500);
+            returnJson.put("message", e.getMessage());
+        }
+        return returnJson;
+    }
+
+
 }

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

@@ -46,4 +46,8 @@ public interface IJiaoYangDingMapper {
     List<JSONObject> getTeamDetail(Map<String, Object> requestMap);
 
     List<Long> getDeptUsers(@Param("deptId") Long deptId);
+
+    List<JSONObject> getPromoterItemDetail(Map<String, Object> requestMap);
+
+    List<JSONObject> getItemPromoterDetail(Map<String, Object> requestMap);
 }

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

@@ -45,4 +45,8 @@ public interface IJiaoYangDingPanService {
     List<JSONObject> getTeamDetail(Map<String, Object> requestMap);
 
     List<Long> getDeptUsers(Long deptId);
+
+    List<JSONObject> getPromoterItemDetail(Map<String, Object> requestMap);
+
+    List<JSONObject> getItemPromoterDetail(Map<String, Object> requestMap);
 }

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

@@ -113,4 +113,14 @@ public class JiaoYangDingPanServiceImpl implements IJiaoYangDingPanService {
     public List<Long> getDeptUsers(Long deptId) {
         return jiaoYangDingMapper.getDeptUsers(deptId);
     }
+
+    @Override
+    public List<JSONObject> getPromoterItemDetail(Map<String, Object> requestMap) {
+        return jiaoYangDingMapper.getPromoterItemDetail(requestMap);
+    }
+
+    @Override
+    public List<JSONObject> getItemPromoterDetail(Map<String, Object> requestMap) {
+        return jiaoYangDingMapper.getItemPromoterDetail(requestMap);
+    }
 }

+ 1 - 0
ruixuan-live/src/main/java/com/ruixuan/open/service/IKuaishouOpenPhotoListService.java

@@ -28,4 +28,5 @@ public interface IKuaishouOpenPhotoListService {
     public List<KuaishouOpenPhotoList> selectKuaishouOpenPhotoListList(KuaishouOpenPhotoList kuaishouOpenPhotoList);
 
     void insertKuaishouOpenPhotoList();
+    void insertKuaishouOpenPhotoListByPromoter(Long promoterId);
 }

+ 10 - 4
ruixuan-live/src/main/java/com/ruixuan/open/service/impl/KuaishouOpenPhotoListServiceImpl.java

@@ -6,6 +6,7 @@ import com.kuaishou.merchant.open.api.client.AccessTokenKsMerchantClient;
 import com.kuaishou.merchant.open.api.common.utils.GsonUtils;
 import com.kuaishou.merchant.open.api.request.video.OpenPhotoListRequest;
 import com.kuaishou.merchant.open.api.response.video.OpenPhotoListResponse;
+import com.ruixuan.common.utils.Check;
 import com.ruixuan.common.utils.DateUtils;
 import com.ruixuan.isc.entity.JYAccessToken;
 import com.ruixuan.isc.mapper.AccessTokenMapper;
@@ -64,14 +65,19 @@ public class KuaishouOpenPhotoListServiceImpl implements IKuaishouOpenPhotoListS
         }
     }
 
+    @Override
+    public void insertKuaishouOpenPhotoListByPromoter(Long promoterId) {
+        JYAccessToken jyTokenInfo = accessTokenMapper.getJYTokenInfoByPromoter(promoterId);
+        if(Check.isNull(jyTokenInfo)){
+            return;
+        }
+        insertInfo(jyTokenInfo, null);
+    }
+
     private void insertInfo(JYAccessToken token, String cursor) {
         try {
             String url = "https://openapi.kwaixiaodian.com";
 
-//            String appKey = "ks690458118961229051";
-//            String signSecret = "6ef1e2a231733bb0c38fb2bf0f50e45b";
-//            String accessToken = "ChFvYXV0aC5hY2Nlc3NUb2tlbhJAhhjrjfDtPkuAuUN5pOWY1hl3SUdOrNORPbgFhIJ1uxNFUrKSaCTdaOcWUvlLqPOZWnnR-1_wWga0cNw-ZsmuYBoSdJTaZfTbRbe4zPS88hU0zxRHIiBA8uLLXu_BaAsO7k5WZayprQWLkUi_G-cvvV_XJMVzBCgFMAE";
-
             String appKey = token.getAppKey();
             String signSecret = token.getSignSecret();
             String accessToken = token.getAccessToken();

+ 7 - 0
ruixuan-live/src/main/resources/mapper/isc/AccessTokenMapper.xml

@@ -61,5 +61,12 @@
         select *
         from bytedance_access_token
     </select>
+    <select id="getJYTokenInfoByPromoter" resultType="com.ruixuan.isc.entity.JYAccessToken"
+            parameterType="java.lang.Long">
+        SELECT *
+        FROM jy_promoter_access_token
+        WHERE promoter_id = #{promoterId}
+
+    </select>
 
 </mapper>

+ 115 - 4
ruixuan-live/src/main/resources/mapper/jiaoyang/JiaoYangDingPanMapper.xml

@@ -628,7 +628,8 @@
         2) as 'deliveryRadio',
         count(distinct t2.clip_user_id) as 'promoterCount',
         count(distinct t2.item_id) as 'itemCount',
-        count(distinct t3.item_id) as 'addItemCount'
+        count(distinct t3.item_id) as 'addItemCount',
+        count(DISTINCT t1.user_id) as 'teamCount'
         from jy_kuaishou_promoter t1
         left join jy_order_list t2
         on t1.promoter_id = t2.clip_user_id
@@ -686,7 +687,8 @@
         2) as 'deliveryRadio',
         count(distinct t2.clip_user_id) as 'promoterCount',
         count(distinct t2.item_id) as 'itemCount',
-        count(distinct t3.item_id) as 'addItemCount'
+        count(distinct t3.item_id) as 'addItemCount',
+        count(DISTINCT t1.user_id) as 'teamCount'
         from jy_kuaishou_promoter t1
         left join jy_order_list t2
         on t1.promoter_id = t2.clip_user_id
@@ -772,12 +774,12 @@
         select t.*,
         round((t.orderNum - tt.orderNum) / tt.orderNum * 100, 2) as 'orderNumRate',
         round((t.payAmount - tt.payAmount) / tt.payAmount * 100, 2) as 'payAmountRate'
-        from (select t2.user_id as 'userId',
+        from (
+        select t2.user_id as 'userId',
         t2.user_name as 'userName',
         count(t1.oid) as 'orderNum',
         round(sum(case when t1.order_status != 80 then 1 else 0 end) / count(t1.oid) * 100,
         2) as 'validRadio',
-
         round(sum(pay_amount) / 100, 2) as 'payAmount',
         round(sum(case when order_status != 80 then pay_amount else 0 end) / 100,
         2) as 'validPayAmount',
@@ -845,4 +847,113 @@
                           WHERE dept_id = #{deptId})
         GROUP BY promoter_id
     </select>
+    <select id="getPromoterItemDetail" resultType="com.alibaba.fastjson.JSONObject">
+        select t1.*,
+        round((t1.orderNum - t2.orderNum) / t2.orderNum * 100, 2) as 'orderNumRate',
+        round((t1.payAmount - t2.payAmount) / t2.payAmount * 100, 2) as 'payAmountRate'
+        from (select item_id as 'itemId',
+        item_title as 'itemTitle',
+        image_url as 'imageUrl',
+        count(oid) as 'orderNum',
+        round(sum(case when order_status != 80 then 1 else 0 end) / count(oid) * 100,
+        2) as 'validRadio',
+        round(sum(pay_amount) / 100, 2) as 'payAmount',
+        round(sum(case when order_status != 80 then pay_amount else 0 end) / 100,
+        2) as 'validPayAmount',
+        round(sum(case when order_status != 80 then pay_amount else 0 end) / sum(pay_amount) * 100,
+        2) as 'validPayAmountRadio',
+        sum(case when send_status = 0 and order_status != 80 then 1 else 0 end) as 'notDeliveryNum',
+        round(sum(case when send_status = 1 and order_status != 80 then 1 else 0 end) / sum(case
+        when order_status != 80
+        then 1
+        else 0 end) *
+        100,
+        2) as 'deliveryRadio'
+        from jy_order_list
+        where clip_user_id = #{clipUserId}
+        and stat_date &gt;= #{start}
+        and stat_date &lt;= #{end}
+        <if test='nowHour != null and nowHour != ""'>
+            and stat_hour &lt;= #{nowHour}
+        </if>
+        group by item_id) t1
+        left join (select item_id as 'itemId',
+        count(oid) as 'orderNum',
+        round(sum(pay_amount) / 100, 2) as 'payAmount'
+        from jy_order_list
+        where clip_user_id = #{clipUserId}
+        and stat_date &gt;= #{lastStart}
+        and stat_date &lt;= #{lastEnd}
+        <if test='nowHour != null and nowHour != ""'>
+            and stat_hour &lt;= #{nowHour}
+        </if>
+        group by item_id) t2 on t1.itemId = t2.itemId
+        order by t1.orderNum desc
+
+    </select>
+    <select id="getItemPromoterDetail" resultType="com.alibaba.fastjson.JSONObject">
+        select t.*,
+        round((t.orderNum - tt.orderNum) / tt.orderNum * 100, 2) as 'orderNumRate',
+        round((t.payAmount - tt.payAmount) / tt.payAmount * 100, 2) as 'payAmountRate'
+        from (select t1.*,
+        t2.promoter_url as 'promoterUrl',
+        t2.user_name as 'userName',
+        (case WHEN t2.type = 1 then '自营'
+        when t2.type = 2 then '分销'
+        else '-'
+        end
+        ) as 'promoterType'
+        from (select clip_user_id as 'clipUserId',
+        clip_nick_name as 'clipNickName',
+        count(oid) as 'orderNum',
+        round(sum(case when order_status != 80 then 1 else 0 end) / count(oid) * 100,
+        2) as 'validRadio',
+        round(sum(pay_amount) / 100, 2) as 'payAmount',
+        round(sum(case when order_status != 80 then pay_amount else 0 end) / 100,
+        2) as 'validPayAmount',
+        round(sum(case when order_status != 80 then pay_amount else 0 end) / sum(pay_amount) * 100,
+        2) as 'validPayAmountRadio',
+        sum(case when send_status = 0 and order_status != 80 then 1 else 0 end) as 'notDeliveryNum',
+        round(sum(case when send_status = 1 and order_status != 80 then 1 else 0 end) / sum(case
+        when order_status != 80
+        then 1
+        else 0 end) *
+        100,
+        2) as 'deliveryRadio'
+        from jy_order_list
+        where item_id = #{itemId}
+        and stat_date &gt;= #{start}
+        and stat_date &lt;= #{end}
+        <if test='nowHour != null and nowHour != ""'>
+            and stat_hour &lt;= #{nowHour}
+        </if>
+        <if test='promoterIds != null and promoterIds.size() > 0'>
+            AND clip_user_id in
+            <foreach collection="promoterIds" item="item" separator=","
+                     open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        group by clip_user_id) t1
+        left join jy_kuaishou_promoter t2 on t1.clipUserId = t2.promoter_id) t
+        left join (select clip_user_id as 'clipUserId',
+        count(oid) as 'orderNum',
+        round(sum(pay_amount) / 100, 2) as 'payAmount'
+        from jy_order_list
+        where item_id = #{itemId}
+        and stat_date &gt;= #{lastStart}
+        and stat_date &lt;= #{lastEnd}
+        <if test='nowHour != null and nowHour != ""'>
+            and stat_hour &lt;= #{nowHour}
+        </if>
+        <if test='promoterIds != null and promoterIds.size() > 0'>
+            AND clip_user_id in
+            <foreach collection="promoterIds" item="item" separator=","
+                     open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        group by clip_user_id) tt on t.clipUserId = tt.clipUserId
+        order by t.orderNum desc
+    </select>
 </mapper>