Commit 0695b437 by kk

17257-运营导数据

parent 18ebeff4
......@@ -52,14 +52,6 @@ public class APlusProduct implements Serializable {
@TableField("sale_30")
private Integer sale30;
@ApiModelProperty("A+策划进度,本表中该字段已弃用")
@TableField("a_plus_plan_progress")
private Integer aPlusPlanProgress;
@ApiModelProperty("摄影A+进度,本表中该字段已弃用")
@TableField("photo_a_plus_progress")
private Integer photoAPlusProgress;
@ApiModelProperty("A+是否合格,0-否,1-是\"")
@TableField("is_qualified")
private Integer isQualified;
......@@ -88,10 +80,6 @@ public class APlusProduct implements Serializable {
@TableField("is_share_a_plus")
private Integer isShareAPlus;
@ApiModelProperty("传达设计进度,本表中该字段已弃用")
@TableField("communication_design_progress")
private Integer communicationDesignProgress;
@ApiModelProperty("[优化A+]A+优化类型:1-版面重新设计(整版调色、整版改排版),2-老品详情页替换新品。(老品外观变更、老品侵权、批次大货不一致);3-增加新模板设计")
@TableField("a_plus_optimize_type")
private Integer aPlusOptimizeType;
......@@ -116,22 +104,6 @@ public class APlusProduct implements Serializable {
@TableField("optimize_type")
private Integer optimizeType;
@ApiModelProperty("A+策划编号,本表中该字段已弃用")
@TableField("a_plus_plan_number")
private String aPlusPlanNumber;
@ApiModelProperty("A+策划,本表中该字段已弃用")
@TableField("a_plus_plan_name")
private String aPlusPlanName;
@ApiModelProperty("分配A+策划时间,本表中该字段已弃用")
@TableField("a_plus_plan_time")
private Integer aPlusPlanTime;
@ApiModelProperty("A+策划完成时间,本表中该字段已弃用")
@TableField("a_plus_plan_finish_time")
private Integer aPlusPlanFinishTime;
@ApiModelProperty("创建人id")
@TableField("create_id")
private Integer createId;
......@@ -148,22 +120,6 @@ public class APlusProduct implements Serializable {
@TableField("communication_design_id")
private Long communicationDesignId;
@ApiModelProperty("摄影A+编号,本表中该字段已弃用")
@TableField("photo_a_plus_number")
private String photoAPlusNumber;
@ApiModelProperty("摄影A+,本表中该字段已弃用")
@TableField("photo_a_plus_name")
private String photoAPlusName;
@ApiModelProperty("分配摄影A+时间,本表中该字段已弃用")
@TableField("photo_a_plus_time")
private Long photoAPlusTime;
@ApiModelProperty("摄影A+完成时间,本表中该字段已弃用")
@TableField("photo_a_plus_finish_time")
private Long photoAPlusFinishTime;
@ApiModelProperty("A+上传后台时间")
@TableField("upload_backstage_time")
private Integer uploadBackstageTime;
......@@ -180,22 +136,6 @@ public class APlusProduct implements Serializable {
@TableField("a_plus_level")
private String aPlusLevel;
@ApiModelProperty("传达设计编号,本表中该字段已弃用")
@TableField("communication_design_number")
private String communicationDesignNumber;
@ApiModelProperty("传达设计,本表中该字段已弃用")
@TableField("communication_design_name")
private String communicationDesignName;
@ApiModelProperty("分配传达设计时间,本表中该字段已弃用")
@TableField("communication_design_time")
private Integer communicationDesignTime;
@ApiModelProperty("传达设计完成时间,本表中该字段已弃用")
@TableField("communication_design_finish_time")
private Integer communicationDesignFinishTime;
@ApiModelProperty("visual_a_plus_plan表id")
@TableField("a_plus_plan_id")
private Long aPlusPlanId;
......@@ -249,5 +189,9 @@ public class APlusProduct implements Serializable {
@TableField("trademark_audit_memo")
private String trademarkAuditMemo;
@ApiModelProperty("亚马逊平台A+发布状态,0-未发布,1-已发布")
@TableField("a_plus_publish_plat_status")
private Integer aPlusPublishPlatStatus;
}
package cn.kk.spring_simple_operation.mapper;
import cn.kk.spring_simple_operation.entity.APlusProduct;
import cn.kk.spring_simple_operation.model.vo.PublishInfoVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
......@@ -15,4 +19,9 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface APlusProductMapper extends BaseMapper<APlusProduct> {
List<String> getSuperiorSkuList(@Param("list") List<String> list);
List<String> getRelatedProduct(@Param("list") List<String> skuList);
List<PublishInfoVo> getPublishInfoByIds(@Param("idList") List<Long> idList);
}
package cn.kk.spring_simple_operation.model.vo;
import cn.kk.spring_simple_operation.utils.Excel;
import lombok.Data;
/**
* @author kk
* @date 2025/6/18
*/
@Data
public class PublishInfoVo {
@Excel(name = "账号简称")
private String account;
@Excel(name = "SKU")
private String sku;
@Excel(name = "站点")
private String site;
@Excel(name = "账管姓名")
private String manager;
@Excel(name = "A+上传后台状态", readConverterExp = "0=默认值,1=未完成,2=完成,3=不需要处理成")
private Integer isUploadBackstage;
@Excel(name = "A+发布状态")
private String status;
}
......@@ -2,6 +2,7 @@ package cn.kk.spring_simple_operation.service;
import cn.kk.spring_simple_operation.entity.APlusProduct;
import cn.kk.spring_simple_operation.model.dto.SkuPeopleNameDto;
import cn.kk.spring_simple_operation.model.vo.PublishInfoVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
......@@ -16,5 +17,9 @@ import java.util.List;
*/
public interface APlusProductService extends IService<APlusProduct> {
List<String> getRelatedProduct(List<String> list);
void setAPlusProductUploadInfo(List<SkuPeopleNameDto> list);
List<PublishInfoVo> exportAPlusPublishData();
}
......@@ -7,17 +7,21 @@ import cn.kk.spring_simple_operation.mapper.APlusProductMapper;
import cn.kk.spring_simple_operation.mapper.SyncProductPublishMapper;
import cn.kk.spring_simple_operation.mapper.VisualDesignerMapper;
import cn.kk.spring_simple_operation.model.dto.SkuPeopleNameDto;
import cn.kk.spring_simple_operation.model.vo.PublishInfoVo;
import cn.kk.spring_simple_operation.service.APlusProductService;
import cn.kk.spring_simple_operation.service.VisualDesignLogService;
import cn.kk.spring_simple_operation.utils.DateUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.Lists;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
......@@ -41,6 +45,35 @@ public class APlusProductServiceImpl extends ServiceImpl<APlusProductMapper, APl
private VisualDesignerMapper visualDesignerMapper;
@Override
public List<String> getRelatedProduct(List<String> list) {
if (Objects.isNull(list)) {
return Collections.emptyList();
}
list = new ArrayList<>(list);
list.removeIf(StringUtils::isEmpty);
if (CollectionUtils.isEmpty(list)) {
return Lists.newArrayList();
}
List<String> skuList = baseMapper.getSuperiorSkuList(list);
Set<String> skus = new HashSet<>();
skus.addAll(list);
if (!CollectionUtils.isEmpty(skuList)) {
skuList.stream().filter(t -> !StringUtils.isEmpty(t)).forEach(s -> {
String[] split = s.split(",");
skus.addAll(Arrays.asList(split));
});
}
skuList = new LinkedList<>(skus);
List<String> relatedProduct = baseMapper.getRelatedProduct(skuList);
return org.apache.commons.collections4.CollectionUtils.union(relatedProduct, list)
.stream().filter(t -> !StringUtils.isEmpty(t)).collect(Collectors.toList());
}
@Override
public void setAPlusProductUploadInfo(List<SkuPeopleNameDto> list) {
int count = 0;
......@@ -101,4 +134,46 @@ public class APlusProductServiceImpl extends ServiceImpl<APlusProductMapper, APl
log.info("共上传{}个A+产品信息", count);
}
@Override
public List<PublishInfoVo> exportAPlusPublishData() {
Map<String, List<APlusProduct>> siteMap = this.list(Wrappers.<APlusProduct>lambdaQuery().eq(APlusProduct::getAPlusPublishPlatStatus, 1).select(APlusProduct::getSku, APlusProduct::getSite))
.stream().collect(Collectors.groupingBy(APlusProduct::getSite));
List<Long> idList = new LinkedList<>();
Set<String> skuSet = new HashSet<>(51200);
siteMap.forEach((site, list) -> {
for (APlusProduct t : list) {
if (skuSet.contains(t.getSku() + "#" + site)) continue;
List<String> relatedProduct = getRelatedProduct(Collections.singletonList(t.getSku()));
relatedProduct.forEach(sku -> skuSet.add(sku + "#" + t.getSku()));
if (relatedProduct.size() <= 1) continue;
List<APlusProduct> aPlusProducts = this.list(Wrappers.<APlusProduct>lambdaQuery()
.in(APlusProduct::getSku, relatedProduct)
.eq(APlusProduct::getSite, site)
.select(APlusProduct::getId, APlusProduct::getAPlusPublishPlatStatus)
);
Optional<APlusProduct> published = aPlusProducts.stream().filter(p -> p.getAPlusPublishPlatStatus() == 1).findFirst();
List<Long> collect = aPlusProducts.stream().filter(p -> p.getAPlusPublishPlatStatus() == 0).map(APlusProduct::getId).collect(Collectors.toList());
// 同站点变体,既存在已发布的,又存在未发布的
if (published.isPresent() && !CollectionUtils.isEmpty(collect)) {
idList.addAll(collect);
}
if (idList.size() > 40) {
break;
}
}
return;
});
if (CollectionUtils.isEmpty(idList)) {
log.error("没有数据需要查询!");
}
List<PublishInfoVo> publishInfoVOList = baseMapper.getPublishInfoByIds(idList);
if (CollectionUtils.isEmpty(publishInfoVOList)) {
log.error("未查询到数据!");
}
return publishInfoVOList;
}
}
......@@ -2,4 +2,69 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.kk.spring_simple_operation.mapper.APlusProductMapper">
<select id="getSuperiorSkuList" resultType="string">
SELECT relative_sku sku from sync_product_audit where sku in
<foreach item="sku" collection="list" open="(" separator="," close=")">
#{sku}
</foreach>
and relative_sku != '' and product_type != 2
UNION
select comb_parent_sku sku from sync_product_audit where sku in
<foreach item="sku" collection="list" open="(" separator="," close=")">
#{sku}
</foreach>
and comb_parent_sku != '' and product_type = 2
</select>
<select id="getRelatedProduct" resultType="String">
(SELECT sku from sync_product_audit where sku in
<foreach item="sku" collection="list" open="(" separator="," close=")">
#{sku}
</foreach>
)
UNION
(SELECT sku from sync_product_audit where relative_sku in
<foreach item="sku" collection="list" open="(" separator="," close=")">
#{sku}
</foreach>
)
UNION
(SELECT sku from sync_product_audit where eu_product_sku in
<foreach item="sku" collection="list" open="(" separator="," close=")">
#{sku}
</foreach>
)
UNION
(SELECT sku from sync_product_audit where comb_parent_sku in
<foreach item="sku" collection="list" open="(" separator="," close=")">
#{sku}
</foreach>
)
UNION
(SELECT sku from sync_product_publish where is_delete = 0 and raw_sku in
<foreach item="sku" collection="list" open="(" separator="," close=")">
#{sku}
</foreach>
)
</select>
<select id="getPublishInfoByIds" resultType="cn.kk.spring_simple_operation.model.vo.PublishInfoVo">
SELECT
soos.account_nick_name account,
app.sku,
app.site,
soos.account_manager manager,
app.is_upload_backstage,
if(app.a_plus_publish_plat_status = 1, '已发布', '未发布') status
FROM
a_plus_product app
LEFT JOIN sync_product_publish_category sppc ON sppc.sku = app.sku
AND sppc.site = app.site
LEFT JOIN sync_other_operate_staff soos ON soos.account_nick_name = sppc.account
WHERE
app.id IN
<foreach item="id" collection="idList" open="(" separator="," close=")">
#{id}
</foreach>
group by app.id
order by app.sku
</select>
</mapper>
......@@ -4,6 +4,7 @@ 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.model.vo.PublishInfoVo;
import cn.kk.spring_simple_operation.service.*;
import cn.kk.spring_simple_operation.utils.ExcelUtil;
import org.junit.jupiter.api.Test;
......@@ -11,6 +12,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;
......@@ -53,13 +55,21 @@ public class ApplicationTest {
//getVideoSkuArea();
brushSimpleVideoData();
//brushSimpleVideoData();
exportAPlusPublishData();
}
private void brushSimpleVideoData() {
photoProgressService.brushSimpleVideoData();
private void exportAPlusPublishData() throws Exception {
List<PublishInfoVo> publishInfoVos = aPlusProductService.exportAPlusPublishData();
ExcelUtil<PublishInfoVo> util = new ExcelUtil<>(PublishInfoVo.class);
util.exportExcelFile(publishInfoVos, "运营导数据-20250618.xlsx");
}
//private void brushSimpleVideoData() {
// photoProgressService.brushSimpleVideoData();
//}
//private void setUploadStatusIsDeleted() throws Exception {
// File file = new File("已删除页面直接调整视频状态.xlsx");
// ExcelUtil<SkuSiteDTO> util = new ExcelUtil<SkuSiteDTO>(SkuSiteDTO.class);
......
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