Commit a5df4984 by kk

查数据:16832-简易视频任务导+刷数据

parent df1f427f
package cn.kk.spring_simple_operation.mapper;
import cn.kk.spring_simple_operation.entity.PhotoProgress;
import cn.kk.spring_simple_operation.model.vo.PhotoSkuInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -19,4 +20,6 @@ import java.util.List;
public interface PhotoProgressMapper extends BaseMapper<PhotoProgress> {
List<PhotoProgress> getListBySku(@Param("skuList") List<String> collect);
List<PhotoSkuInfo> getSkuInfo();
}
package cn.kk.spring_simple_operation.model.vo;
import lombok.Data;
/**
* @author kk
* @date 2025/5/16
*/
@Data
public class PhotoSkuInfo {
private String sku;
private Integer productType;
private Integer isCombVariant;
private Integer isChangeSimpleVideoStatus;
private String combParentSku;
private String relativeSku;
private String dept;
}
......@@ -17,4 +17,6 @@ import java.util.List;
public interface PhotoProgressService extends IService<PhotoProgress> {
void setUploadStatusIsDeleted(List<SkuSiteDTO> list);
void getVideoSkuArea();
}
......@@ -3,15 +3,23 @@ package cn.kk.spring_simple_operation.service.impl;
import cn.kk.spring_simple_operation.entity.PhotoProgress;
import cn.kk.spring_simple_operation.mapper.PhotoProgressMapper;
import cn.kk.spring_simple_operation.model.dto.SkuSiteDTO;
import cn.kk.spring_simple_operation.model.vo.PhotoSkuInfo;
import cn.kk.spring_simple_operation.service.PhotoProgressService;
import cn.kk.spring_simple_operation.service.VisualDesignLogService;
import cn.kk.spring_simple_operation.utils.CommonUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
......@@ -22,6 +30,7 @@ import java.util.stream.Collectors;
* @author guokunkun
* @since 2024-12-25
*/
@Slf4j
@Service
public class PhotoProgressServiceImpl extends ServiceImpl<PhotoProgressMapper, PhotoProgress> implements PhotoProgressService {
......@@ -42,4 +51,149 @@ public class PhotoProgressServiceImpl extends ServiceImpl<PhotoProgressMapper, P
);
visualDesignLogService.addBatchLog("photo_progress", "根据文件将sku的视频上传后台状态设置为已删除", ids);
}
@Override
public void getVideoSkuArea() {
List<PhotoSkuInfo> skuInfoList = baseMapper.getSkuInfo();
ConcurrentHashMap<String, Integer> areaCountSingleMap = new ConcurrentHashMap<>();
areaCountSingleMap.put("深圳", 0);
areaCountSingleMap.put("武汉", 0);
areaCountSingleMap.put("合肥", 0);
areaCountSingleMap.put("长沙", 0);
ConcurrentHashMap<String, ConcurrentSkipListSet<String>> areaCountMainMap = new ConcurrentHashMap<>();
areaCountMainMap.put("深圳", new ConcurrentSkipListSet<>());
areaCountMainMap.put("武汉", new ConcurrentSkipListSet<>());
areaCountMainMap.put("合肥", new ConcurrentSkipListSet<>());
areaCountMainMap.put("长沙", new ConcurrentSkipListSet<>());
skuInfoList.forEach(t -> {
String region = CommonUtils.getRegion(t.getDept());
areaCountSingleMap.put(region, areaCountSingleMap.getOrDefault(region, 0) + 1);
ConcurrentSkipListSet<String> skuList = areaCountMainMap.get(region);
if (Objects.isNull(skuList)) {
throw new RuntimeException("区域:" + region + "不存在");
}
switch (t.getProductType()) {
case 1:
// 普通产品
if (StringUtils.isEmpty(t.getRelativeSku())) {
skuList.add(t.getSku());
}
else {
skuList.add(t.getRelativeSku());
}
break;
case 2:
// 组合产品
if (t.getIsCombVariant() == 0) {
//母体
skuList.add(t.getSku());
}
else if (t.getIsCombVariant() == 1) {
// 变体,添加他的母体
skuList.add(t.getCombParentSku());
}
break;
case 3:
skuList.add(t.getRelativeSku());
break;
default:
log.error("产品类型错误:" + t.getProductType());
break;
}
});
AtomicInteger totalCount = new AtomicInteger(0);
log.info("区域统计结果:----母体sku总数");
areaCountMainMap.forEach((k, v) -> {
log.info("区域:" + k + ",SKU数量:" + v.size());
totalCount.addAndGet(v.size());
});
log.info("合计: " + totalCount.get());
totalCount.set(0);
log.info("区域统计结果:----sku总数");
areaCountSingleMap.forEach((k, v) -> {
log.info("区域:" + k + ",SKU数量:" + v);
totalCount.addAndGet(v);
});
log.info("合计: " + totalCount.get());
areaCountMainMap.clear();
areaCountSingleMap.clear();
areaCountSingleMap.put("深圳", 0);
areaCountSingleMap.put("武汉", 0);
areaCountSingleMap.put("合肥", 0);
areaCountSingleMap.put("长沙", 0);
areaCountMainMap.put("深圳", new ConcurrentSkipListSet<>());
areaCountMainMap.put("武汉", new ConcurrentSkipListSet<>());
areaCountMainMap.put("合肥", new ConcurrentSkipListSet<>());
areaCountMainMap.put("长沙", new ConcurrentSkipListSet<>());
skuInfoList.stream().filter(t -> t.getIsChangeSimpleVideoStatus() == 1).forEach(t -> {
String region = CommonUtils.getRegion(t.getDept());
areaCountSingleMap.put(region, areaCountSingleMap.getOrDefault(region, 0) + 1);
ConcurrentSkipListSet<String> skuList = areaCountMainMap.get(region);
if (Objects.isNull(skuList)) {
throw new RuntimeException("区域:" + region + "不存在");
}
switch (t.getProductType()) {
case 1:
// 普通产品
if (StringUtils.isEmpty(t.getRelativeSku())) {
skuList.add(t.getSku());
}
else {
skuList.add(t.getRelativeSku());
}
break;
case 2:
// 组合产品
if (t.getIsCombVariant() == 0) {
//母体
skuList.add(t.getSku());
}
else if (t.getIsCombVariant() == 1) {
// 变体,添加他的母体
skuList.add(t.getCombParentSku());
}
break;
case 3:
skuList.add(t.getRelativeSku());
break;
default:
log.error("产品类型错误:" + t.getProductType());
break;
}
});
totalCount.set(0);
log.info("老任务区域统计结果:----母体sku总数");
areaCountMainMap.forEach((k, v) -> {
log.info("区域:" + k + ",SKU数量:" + v.size());
totalCount.addAndGet(v.size());
});
log.info("合计: " + totalCount.get());
totalCount.set(0);
log.info("老任务区域统计结果:----sku总数");
areaCountSingleMap.forEach((k, v) -> {
log.info("区域:" + k + ",SKU数量:" + v);
totalCount.addAndGet(v);
});
log.info("合计: " + totalCount.get());
}
}
package cn.kk.spring_simple_operation.utils;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.client.HttpClientErrorException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* @description:
* @author: Devin
* @date: 2022-12-21
*/
public class CommonUtils {
private static final String[] EXCEL_ARRAY = new String[]{"xls", "xlsx"};
/**
* 判断是否为整数
*
* @param str 传入的字符串
* @return 是整数返回true, 否则返回false
*/
public static boolean isInteger(String str) {
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
}
/**
* 判断是否为null或者为0
*
* @param number 传入的数字
* @return 是null或者0,返回true,否则false
*/
public static boolean isNullOrZero(Number number) {
return null == number || 0 == number.intValue();
}
/**
* 判断数值是否大于0
*
* @param number
* @return
*/
public static boolean isGtZero(Object number) {
if (null == number) return false;
if (number instanceof BigDecimal) {
return ((BigDecimal) number).compareTo(BigDecimal.ZERO) > 0;
}
else if (number instanceof Number) {
return ((Number) number).doubleValue() > 0;
}
return false;
}
public static Object getValue(Object object, String fieldName) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return field.get(object);
} catch (NoSuchFieldException e) {
} catch (IllegalAccessException e) {
}
return null;
}
/**
* @Description: 获取文件名称的后缀名
* @Param: 文件名
* @return: 后缀名
* @Author: guokk
* @date: 2023/5/12
*/
public static String getFileExtension(String filePath) {
int dotIndex = filePath.lastIndexOf('.');
if (dotIndex == -1 || dotIndex == filePath.length() - 1) {
// 如果没有找到'.',或者'.'是最后一个字符
return "";
}
return filePath.substring(dotIndex + 1);
}
/**
* @Description: 判断文件是否是excel
* @Param: 文件名
* @return: true:是excel文件
* @Author: guokk
* @date: 2023/5/12
*/
public static Boolean isExcel(String filePath) {
String fileExtension = getFileExtension(filePath);
for (String s : EXCEL_ARRAY) {
if (s.equals(fileExtension)) {
return true;
}
}
return false;
}
public static String getRegion(String region) {
if (StringUtils.isEmpty(region)) {
return "";
}
if (region.contains("深圳")) {
return "深圳";
}
else if (region.contains("武汉")) {
return "武汉";
}
else if (region.contains("合肥")) {
return "合肥";
}
else if (region.contains("长沙")) {
return "长沙";
}
else if (region.contains("香港")) {
return "香港";
}
else if (region.contains("广州")) {
return "广州";
}
else {
return "深圳";
}
}
public static List<String> getRegionList(String region) {
if (StringUtils.isEmpty(region)) {
return Collections.emptyList();
}
List<String> list = new LinkedList<>();
switch (region) {
case "合肥":
list.add("合肥");
break;
case "武汉":
list.add("武汉");
break;
case "长沙":
list.add("长沙");
break;
case "广州":
list.add("广州");
break;
case "香港":
list.add("香港");
break;
default:
list.add("深圳");
list.add("微谷");
}
return list;
}
public static String defaultString(String str, String defaultStr) {
return str == null || str.trim().length() == 0 ? defaultStr : str;
}
public static boolean isNumeric(String str) {
if (str == null || str.length() == 0) {
return false;
}
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
public static Boolean securityCheck(String md5, String prefix, Long time) {
if (StringUtils.isEmpty(md5) || Objects.isNull(time)) {
return false;
}
if (StringUtils.isEmpty(prefix)) {
prefix = "";
}
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest((prefix + time).getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
// 将每个字节转换为两位十六进制数,并追加到结果字符串上
sb.append(String.format("%02x", b));
}
return sb.toString().equals(md5);
} catch (NoSuchAlgorithmException e) {
return false;
}
}
public static Boolean eq(Number number1, Number number2) {
if (number1 == null || number2 == null) {
return Boolean.FALSE;
}
return number1.intValue() == number2.intValue();
}
public static Boolean ne(Number number1, Number number2) {
if (number1 == null || number2 == null) {
return Boolean.FALSE;
}
return number1.intValue() != number2.intValue();
}
public static <T> List<T> emptyList() {
return new LinkedList<>();
}
public static <T> List<T> singletonList(T o) {
List<T> list = new LinkedList<>();
list.add(o);
return list;
}
@SafeVarargs
public static <T> List<T> lists(T... args) {
if (Objects.isNull(args) || args.length == 0) {
throw new RuntimeException("请传入有效的参数!");
}
List<T> list = new LinkedList<>();
for (T arg : args) {
list.add(arg);
}
return list;
}
/**
* 将秒级时间戳格式化输出字符串
*
* @param backlogStartTimestamp 起始时间戳
* @param backlogEndTimestamp 结束时间戳
* @param format 格式 如:yyyy-MM
* @param offset 时间间隔:天
* @return
*/
public static List<String> format10(Integer backlogStartTimestamp, Integer backlogEndTimestamp, String format, Long offset) {
// 将时间戳转换成Instant对象
Instant startInstant = Instant.ofEpochSecond(backlogStartTimestamp);
Instant endInstant = Instant.ofEpochSecond(backlogEndTimestamp);
// 可选:转换时区(若不需要时区转换,可跳过此步骤)
ZoneId zoneId = ZoneId.systemDefault(); // 或者使用ZoneId.of("时区代码")指定特定时区
LocalDate startDate = startInstant.atZone(zoneId).toLocalDate();
LocalDate endDate = endInstant.atZone(zoneId).toLocalDate();
// 使用Stream生成日期范围并输出
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(format);
Set<String> dateList = new HashSet<>(16);
do {
String dateString = startDate.format(dateFormatter);
dateList.add(dateString);
startDate = startDate.plusDays(offset);
} while ((startDate.toEpochDay() <= endDate.toEpochDay()));
return new LinkedList<>(dateList);
}
public static List<String> distinctSplit(List<String> list, String split) {
if (StringUtils.isEmpty(split)) {
split = ",";
}
Set<String> set = new HashSet<>(16);
String finalSplit = split;
list.stream().filter(t -> !StringUtils.isEmpty(t)).forEach(l -> {
String[] split1 = l.split(finalSplit);
set.addAll(Arrays.stream(split1).filter(t -> !StringUtils.isEmpty(t)).collect(Collectors.toList()));
});
return new LinkedList<>(set);
}
/**
* A+/视频策划 根据标签获取对应的权重
* 普通A+/视频默认1,高级A+默认 1.5,A+/视频优化默认0.2;A+品牌故事默认1/3(展示在页面默认保留两位小数)
*
* @param vdtId
* @return
*/
public static BigDecimal getWeight(Long vdtId) {
if (isNullOrZero(vdtId)) {
return BigDecimal.ZERO;
}
switch (vdtId.intValue()) {
case 2:
case 67:
case 82:
case 83:
case 107:
return BigDecimal.ONE;
case 68:
return new BigDecimal("1.5");
case 73:
case 74:
return new BigDecimal("0.2");
case 80:
return new BigDecimal("0.333");
case 66:
return new BigDecimal("0.5");
default:
return BigDecimal.ZERO;
}
}
public static <T, R> R dealHttp(Function<T, R> function, T dto) {
R apply = null;
if (function == null) {
return null;
}
try {
apply = function.apply(dto);
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
throw new RuntimeException("获取sku销量休眠失败!", e1);
}
} catch (HttpClientErrorException e) {
try {
Thread.sleep(60000);
} catch (InterruptedException e1) {
throw new RuntimeException("获取sku销量休眠失败!", e1);
}
apply = function.apply(dto);
}
return apply;
}
public static boolean isToday(Integer timestamp) {
if (CommonUtils.isNullOrZero(timestamp)) {
return false;
}
Integer currentTimeSecond = DateUtils.getCurrentTimeSecond();
Integer startOfDay = DateUtils.getStartOfDay(currentTimeSecond);
Integer endOfDay = DateUtils.getEndOfDay(currentTimeSecond);
return timestamp >= startOfDay && timestamp <= endOfDay;
}
/**
* 判断list1是否包含list2的所有元素
*
* @param list1
* @param list2
* @return boolean
*/
public static boolean allInclusive(Collection<Long> list1, Collection<Long> list2) {
if (CollectionUtils.isEmpty(list1) || CollectionUtils.isEmpty(list2)) {
return false;
}
for (Long l : list2) {
if (!list1.contains(l)) {
return false;
}
}
return true;
}
public static boolean isCurrentMonth(Integer createTime) {
String month = DateUtils.formatTimeSecond(createTime, "yyyy-MM");
String currentMonth = DateUtils.formatTimeSecond(DateUtils.getCurrentTimeSecond(), "yyyy-MM");
return month.equals(currentMonth);
}
}
......@@ -10,4 +10,31 @@
#{item}
</foreach>
</select>
<select id="getSkuInfo" resultType="cn.kk.spring_simple_operation.model.vo.PhotoSkuInfo">
SELECT
pp.id,
pp.sku,
ppp.is_change_simple_video_status,
spa.product_type,
spa.is_comb_variant,
spa.comb_parent_sku,
spa.relative_sku,
sd.dept
FROM
photo_progress pp
INNER JOIN photo_progress_person ppp ON ppp.id = pp.id
INNER JOIN sync_product_audit spa ON spa.sku = pp.sku
INNER JOIN sync_developer sd ON spa.developer_num = sd.developer_num
INNER JOIN sync_product_publish spp ON spp.sku = pp.sku
AND spp.sale_status = '正常销售'
AND spp.site = 'Amazon.com'
LEFT JOIN video_product vp ON vp.sku = pp.sku
AND vp.is_delete = 0
WHERE
vp.id IS NULL
AND pp.sku > ''
AND ppp.simple_video_status != 2
AND spp.sale_time > 1716048000
GROUP BY pp.sku
</select>
</mapper>
package cn.kk.spring_simple_operation;
import cn.kk.spring_simple_operation.mapper.PhotoProgressMapper;
import cn.kk.spring_simple_operation.model.dto.BrandAccountDto;
import cn.kk.spring_simple_operation.model.dto.SkuPeopleNameDto;
import cn.kk.spring_simple_operation.model.vo.PhotoSkuInfo;
import cn.kk.spring_simple_operation.service.*;
import cn.kk.spring_simple_operation.utils.ExcelUtil;
import org.junit.jupiter.api.Test;
......@@ -29,6 +31,9 @@ public class ApplicationTest {
private PhotoProgressService photoProgressService;
@Resource
private PhotoProgressMapper photoProgressMapper;
@Resource
private APlusProductService aPlusProductService;
@Resource
......@@ -44,7 +49,9 @@ public class ApplicationTest {
//updateBrandId();
updateBrandTransparencyPlan();
//updateBrandTransparencyPlan();
getVideoSkuArea();
}
//private void setUploadStatusIsDeleted() throws Exception {
......@@ -72,16 +79,21 @@ public class ApplicationTest {
//}
private void updateBrandTransparencyPlan() throws Exception {
File file = new File("2025-04-16_vlrd_高首批新品匹配透明计划账号.xlsx");
ExcelUtil<BrandAccountDto> util = new ExcelUtil<>(BrandAccountDto.class);
List<BrandAccountDto> list = util.importExcel(Files.newInputStream(file.toPath()));
//private void updateBrandTransparencyPlan() throws Exception {
// File file = new File("2025-04-16_vlrd_高首批新品匹配透明计划账号.xlsx");
// ExcelUtil<BrandAccountDto> util = new ExcelUtil<>(BrandAccountDto.class);
// List<BrandAccountDto> list = util.importExcel(Files.newInputStream(file.toPath()));
//
// list.forEach(dto -> {
// System.out.printf("update brand_record_tool set is_transparency_plan = 1 where record_brand = '%s' and account = '%s' and is_delete = 0;\n", dto.getBrand(), dto.getAccount());
// });
//}
list.forEach(dto -> {
System.out.printf("update brand_record_tool set is_transparency_plan = 1 where record_brand = '%s' and account = '%s' and is_delete = 0;\n", dto.getBrand(), dto.getAccount());
});
}
private void getVideoSkuArea() {
photoProgressService.getVideoSkuArea();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment