提交 840d87d3 authored 作者: 吕本才's avatar 吕本才 提交者: Coding

Accept Merge Request #81: (qa -> main)

Merge Request: 增加生意参谋竞品和竞店数据分析 Created By: @吕本才 Accepted By: @吕本才 URL: https://g-pkkp8204.coding.net/p/wangxiaolu-sfa/d/wangxiaolu-link-module-bi/git/merge/81?initial=true
...@@ -2,6 +2,7 @@ package com.link.bi.controller.query; ...@@ -2,6 +2,7 @@ package com.link.bi.controller.query;
import com.link.bi.pojo.request.OppoSycmVo; import com.link.bi.pojo.request.OppoSycmVo;
import com.link.bi.pojo.response.OppoSycmDto; import com.link.bi.pojo.response.OppoSycmDto;
import com.link.bi.pojo.response.OppoSycmPrdInfoDto;
import com.link.bi.service.IOppoSycmService; import com.link.bi.service.IOppoSycmService;
import com.sfa.common.core.web.controller.BaseController; import com.sfa.common.core.web.controller.BaseController;
import com.sfa.common.security.annotation.RequiresPermissions; import com.sfa.common.security.annotation.RequiresPermissions;
...@@ -32,7 +33,13 @@ public class OppoSycmQueryController extends BaseController ...@@ -32,7 +33,13 @@ public class OppoSycmQueryController extends BaseController
@GetMapping("/list") @GetMapping("/list")
public List<List<OppoSycmDto>> list(OppoSycmVo oppoSycmVo) public List<List<OppoSycmDto>> list(OppoSycmVo oppoSycmVo)
{ {
return oppoSycmService.selectOppoSycmStoreBi(oppoSycmVo); return oppoSycmService.selectOppoSycmPrdBi(oppoSycmVo);
} }
@RequiresPermissions("bi:competitor:list")
@GetMapping("/prdInfo")
public List<OppoSycmPrdInfoDto> prdInfo()
{
return oppoSycmService.selectOppoSycmPrdInfo();
}
} }
package com.link.bi.controller.query;
import com.link.bi.pojo.request.OppoSycmVo;
import com.link.bi.pojo.response.OppoSycmStoreDto;
import com.link.bi.pojo.response.OppoSycmStoreInfoDto;
import com.link.bi.service.IOppoSycmStoreService;
import com.sfa.common.core.web.controller.BaseController;
import com.sfa.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 电商竞品-生意参谋数据(天猫)Controller
*
* @author admin
* @date 2024-12-20
*/
@RestController
@RequestMapping("/oppo/sycm/store")
public class OppoSycmStoreQueryController extends BaseController {
@Autowired
private IOppoSycmStoreService oppoSycmStoreService;
/**
* 查询电商竞品-生意参谋数据(天猫)列表
*/
@RequiresPermissions("bi:competitor:list")
@GetMapping("/list")
public List<List<OppoSycmStoreDto>> list(OppoSycmVo oppoSycmVo) {
return oppoSycmStoreService.selectOppoSycmStoreBi(oppoSycmVo);
}
/**
* 查询电商竞品-生意参谋数据(天猫)列表
*/
@RequiresPermissions("bi:competitor:list")
@GetMapping("/all")
public List<OppoSycmStoreInfoDto> info() {
return oppoSycmStoreService.selectOppoSycmStoreInfoBi();
}
}
...@@ -13,5 +13,7 @@ import java.util.List; ...@@ -13,5 +13,7 @@ import java.util.List;
*/ */
public interface IOppoSycmDao { public interface IOppoSycmDao {
List<OppoSycm> selectList(OppoSycmWq wq); List<OppoSycm> selectOppoSycmPrdList(OppoSycmWq wq);
List<OppoSycm> selectOppoSycmPrdInfo();
} }
package com.link.bi.domain.dao;
import com.link.bi.domain.entity.OppoSycmStore;
import com.link.bi.domain.wq.OppoSycmWq;
import java.util.List;
/**
* 电商竞品-蝉妈妈数据(抖音后台)Mapper接口
*
* @author admin
* @date 2024-12-19
*/
public interface IOppoSycmStoreDao {
List<OppoSycmStore> selectList(OppoSycmWq wq);
List<OppoSycmStore> selectOppoSycmStoreInfoBi();
}
package com.link.bi.domain.dao.impl; package com.link.bi.domain.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.link.bi.domain.dao.IOppoSycmDao; import com.link.bi.domain.dao.IOppoSycmDao;
import com.link.bi.domain.entity.OppoSycm; import com.link.bi.domain.entity.OppoSycm;
import com.link.bi.domain.mapper.OppoSycmMapper; import com.link.bi.domain.mapper.OppoSycmMapper;
...@@ -22,15 +20,12 @@ public class OppoSycmDaoImpl implements IOppoSycmDao { ...@@ -22,15 +20,12 @@ public class OppoSycmDaoImpl implements IOppoSycmDao {
OppoSycmMapper oppoSycmMapper; OppoSycmMapper oppoSycmMapper;
@Override @Override
public List<OppoSycm> selectList(OppoSycmWq wq) { public List<OppoSycm> selectOppoSycmPrdList(OppoSycmWq wq) {
// 查询数据库数据 return oppoSycmMapper.selectOppoSycmPrdList(wq);
QueryWrapper<OppoSycm> wrapper = new QueryWrapper<>(); }
wrapper.select("`date`,platform_store,SUM(zfmj_under) AS zfmj_under_total, SUM(zfmj_peak) AS zfmj_peak_total , SUM(jyzs_under) AS jyzs_under_total , SUM(jyzs_peak) AS jyzs_peak_total , SUM(uv_under) AS uv_under_total , SUM(uv_peak) AS uv_peak_total, SUM(llzs_under) AS llzs_under_total, SUM(llzs_peak) AS llzs_peak_total ");
String storeStr = "三只松鼠旗舰店,良品铺子旗舰店,比比赞旗舰店,百草味官方旗舰店,沃隆旗舰店,每果时光旗舰店,老街口旗舰店,洽洽食品官方旗舰店,好利来官方旗舰店,盐津铺子食品旗舰店,德芙官方旗舰店,蒙都旗舰店,脱骨侠旗舰店,炭食光食品旗舰店,藤桥官方旗舰店,蒙时代旗舰店,周黑鸭食品旗舰店"; @Override
wrapper.in("platform_store", storeStr.split(",")); public List<OppoSycm> selectOppoSycmPrdInfo() {
wrapper.between(ObjectUtil.isNotEmpty(wq.getStartDate()), "date", wq.getStartDate(), wq.getEndDate()); return oppoSycmMapper.selectOppoSycmPrdInfo();
wrapper.groupBy("platform_store,`date`");
wrapper.orderByDesc("`date`");
return oppoSycmMapper.selectList(wrapper);
} }
} }
package com.link.bi.domain.dao.impl;
import com.link.bi.domain.dao.IOppoSycmStoreDao;
import com.link.bi.domain.entity.OppoSycmStore;
import com.link.bi.domain.mapper.OppoSycmStoreMapper;
import com.link.bi.domain.wq.OppoSycmWq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : lvbencai
* @date : 2024-12-20 10:32
* @describe :
*/
@Service
public class OppoSycmStoreDaoImpl implements IOppoSycmStoreDao {
@Autowired
OppoSycmStoreMapper oppoSycmStoreMapper;
@Override
public List<OppoSycmStore> selectList(OppoSycmWq wq) {
// 查询数据库数据
return oppoSycmStoreMapper.selectOppoSycmStoreList(wq);
}
@Override
public List<OppoSycmStore> selectOppoSycmStoreInfoBi() {
return oppoSycmStoreMapper.selectOppoSycmStoreInfoBi();
}
}
...@@ -75,6 +75,8 @@ public class OppoSycm implements Serializable { ...@@ -75,6 +75,8 @@ public class OppoSycm implements Serializable {
@Excel(name = "商品/货品名称", readConverterExp = "【=百补】洽洽焦糖/五香/山核桃味大包装瓜子500g*2袋恰恰葵花籽") @Excel(name = "商品/货品名称", readConverterExp = "【=百补】洽洽焦糖/五香/山核桃味大包装瓜子500g*2袋恰恰葵花籽")
private String prdName; private String prdName;
@Excel(name = "商品/货品url,名称会改变,链接地址不会改变")
private String prdId;
/** /**
* 支付买家数(范围-低) * 支付买家数(范围-低)
*/ */
......
package com.link.bi.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sfa.common.core.annotation.Excel;
import com.sfa.common.core.web.domain.BaseDo;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 电商竞品-生意参谋数据(天猫)对象 oppo_sycm
*
* @author admin
* @date 2024-12-20
*/
@TableName(value = "oppo_sycm")
@Data
public class OppoSycmStore extends BaseDo implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* id标识
*/
private Long sycmsId;
/**
* 年份
*/
@Excel(name = "年份")
private Long year;
/**
* 月份
*/
@Excel(name = "月份")
private Long month;
/**
* 日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date date;
/**
* 平台id-1
*/
@Excel(name = "平台id-1")
private Long platformId;
/**
* 1 天猫
*/
@Excel(name = "1 天猫")
private String platform;
/**
* 取数平台:生意参谋
*/
@Excel(name = "取数平台:生意参谋")
private String dataPlatform;
/**
* 平台店铺
*/
@Excel(name = "平台店铺")
private String platformStore;
/**
* 支付买家数(范围-低)
*/
@Excel(name = "支付买家数(范围-低)")
private Long zfmjUnder;
/**
* 支付买家数(范围-高)
*/
@Excel(name = "支付买家数(范围-高)")
private Long zfmjPeak;
/**
* %交易增速(范围-低)
*/
@Excel(name = "%交易增速(范围-低)")
private Long jyzsUnder;
/**
* %交易增速(范围-高)
*/
@Excel(name = "%交易增速(范围-高)")
private Long jyzsPeak;
/**
* unique visitor(独立访客范围-低)
*/
@Excel(name = "unique visitor(独立访客范围-低)")
private Long uvUnder;
/**
* unique visitor(独立访客范围-高)
*/
@Excel(name = "unique visitor(独立访客范围-高)")
private Long uvPeak;
/**
* %流量增速(范围-低)
*/
@Excel(name = "%流量增速(范围-低)")
private Long llzsUnder;
/**
* %流量增速(范围-高)
*/
@Excel(name = "%流量增速(范围-高)")
private Long llzsPeak;
/**
* 支付买家数(范围-低)
*/
@TableField(exist = false)
private Long zfmjUnderTotal;
/**
* 支付买家数(范围-高)
*/
@TableField(exist = false)
private Long zfmjPeakTotal;
/**
* %交易增速(范围-低)
*/
@TableField(exist = false)
private Long jyzsUnderTotal;
/**
* %交易增速(范围-高)
*/
@TableField(exist = false)
private Long jyzsPeakTotal;
/**
* unique visitor(独立访客范围-低)
*/
@TableField(exist = false)
private Long uvUnderTotal;
/**
* unique visitor(独立访客范围-高)
*/
@TableField(exist = false)
private Long uvPeakTotal;
/**
* %流量增速(范围-低)
*/
@TableField(exist = false)
private Long llzsUnderTotal;
/**
* %流量增速(范围-高)
*/
@TableField(exist = false)
private Long llzsPeakTotal;
}
...@@ -2,9 +2,12 @@ package com.link.bi.domain.mapper; ...@@ -2,9 +2,12 @@ package com.link.bi.domain.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.link.bi.domain.entity.OppoSycm; import com.link.bi.domain.entity.OppoSycm;
import com.link.bi.domain.wq.OppoSycmWq;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
/** /**
* 电商竞品-生意参谋数据(天猫)Mapper接口 * 电商竞品-生意参谋数据(天猫)Mapper接口
* *
...@@ -15,4 +18,7 @@ import org.springframework.stereotype.Repository; ...@@ -15,4 +18,7 @@ import org.springframework.stereotype.Repository;
@Mapper @Mapper
public interface OppoSycmMapper extends BaseMapper<OppoSycm> { public interface OppoSycmMapper extends BaseMapper<OppoSycm> {
List<OppoSycm> selectOppoSycmPrdList(OppoSycmWq wq);
List<OppoSycm> selectOppoSycmPrdInfo();
} }
package com.link.bi.domain.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.link.bi.domain.entity.OppoSycmStore;
import com.link.bi.domain.wq.OppoSycmWq;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 电商竞品-生意参谋数据(天猫)Mapper接口
*
* @author admin
* @date 2024-12-20
*/
@Repository
@Mapper
public interface OppoSycmStoreMapper extends BaseMapper<OppoSycmStore> {
List<OppoSycmStore> selectOppoSycmStoreList(OppoSycmWq wq);
List<OppoSycmStore> selectOppoSycmStoreInfoBi();
}
...@@ -3,6 +3,7 @@ package com.link.bi.domain.wq; ...@@ -3,6 +3,7 @@ package com.link.bi.domain.wq;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* @author : lvbencai * @author : lvbencai
...@@ -15,5 +16,11 @@ public class OppoSycmWq { ...@@ -15,5 +16,11 @@ public class OppoSycmWq {
private Date startDate; private Date startDate;
// 入参 时间结束时间 // 入参 时间结束时间
private Date endDate; private Date endDate;
// 入参 产品名称
private List<String> prdIds;
// 入参 店铺
private List<String> platformStores;
// 数据类型
private String dataType;
} }
...@@ -10,4 +10,12 @@ public class OppoSycmVo { ...@@ -10,4 +10,12 @@ public class OppoSycmVo {
private Date startDate; private Date startDate;
// 入参 时间结束时间 // 入参 时间结束时间
private Date endDate; private Date endDate;
// 入参 产品名称
private String prdId;
// 入参 店铺
private String platformStore;
// 数据类型
private String dataType;
} }
package com.link.bi.pojo.response; package com.link.bi.pojo.response;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
...@@ -19,44 +20,60 @@ public class OppoSycmDto { ...@@ -19,44 +20,60 @@ public class OppoSycmDto {
* 平台店铺 * 平台店铺
*/ */
private String platformStore; private String platformStore;
/**
* 产品编码
*/
private String prdId;
/**
* 产品名称
*/
private String prdName;
/** /**
* 支付买家数(范围-低) * 支付买家数(范围-低)
*/ */
private Long zfmjUnderTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long zfmjUnder;
/** /**
* 支付买家数(范围-高) * 支付买家数(范围-高)
*/ */
private Long zfmjPeakTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long zfmjPeak;
/** /**
* %交易增速(范围-低) * %交易增速(范围-低)
*/ */
private Long jyzsUnderTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long jyzsUnder;
/** /**
* %交易增速(范围-高) * %交易增速(范围-高)
*/ */
private Long jyzsPeakTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long jyzsPeak;
/** /**
* unique visitor(独立访客范围-低) * unique visitor(独立访客范围-低)
*/ */
private Long uvUnderTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long uvUnder;
/** /**
* unique visitor(独立访客范围-高) * unique visitor(独立访客范围-高)
*/ */
private Long uvPeakTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long uvPeak;
/** /**
* %流量增速(范围-低) * %流量增速(范围-低)
*/ */
private Long llzsUnderTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long llzsUnder;
/** /**
* %流量增速(范围-高) * %流量增速(范围-高)
*/ */
private Long llzsPeakTotal; @JsonInclude(JsonInclude.Include.NON_NULL)
private Long llzsPeak;
} }
package com.link.bi.pojo.response;
import lombok.Data;
/**
* 生意参谋竞品下拉列表返参
* @author lvbencai
* @date 2022/12/20 10:18
*/
@Data
public class OppoSycmPrdInfoDto {
/**
* 商品编码
*/
private String prdId;
/**、
* 产品名称
*/
private String prdName;
/**
* 平台店铺
*/
private String platformStore;
}
package com.link.bi.pojo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.Date;
/**
* @author lvbencai
* @date 2022/12/20 10:18
*/
@Data
public class OppoSycmStoreDto {
// 日期
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date;
/**
* 平台店铺
*/
private String platformStore;
/**
* 支付买家数(范围-低)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long zfmjUnder;
/**
* 支付买家数(范围-高)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long zfmjPeak;
/**
* %交易增速(范围-低)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long jyzsUnder;
/**
* %交易增速(范围-高)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long jyzsPeak;
/**
* unique visitor(独立访客范围-低)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long uvUnder;
/**
* unique visitor(独立访客范围-高)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long uvPeak;
/**
* %流量增速(范围-低)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long llzsUnder;
/**
* %流量增速(范围-高)
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private Long llzsPeak;
}
package com.link.bi.pojo.response;
import lombok.Data;
/**
* @author lvbencai
* @date 2022/12/20 10:18
*/
@Data
public class OppoSycmStoreInfoDto {
/**
* 平台店铺
*/
private String platformStore;
private String platformStoreId;
}
...@@ -2,6 +2,7 @@ package com.link.bi.service; ...@@ -2,6 +2,7 @@ package com.link.bi.service;
import com.link.bi.pojo.request.OppoSycmVo; import com.link.bi.pojo.request.OppoSycmVo;
import com.link.bi.pojo.response.OppoSycmDto; import com.link.bi.pojo.response.OppoSycmDto;
import com.link.bi.pojo.response.OppoSycmPrdInfoDto;
import java.util.List; import java.util.List;
...@@ -12,5 +13,7 @@ import java.util.List; ...@@ -12,5 +13,7 @@ import java.util.List;
* @date 2024-12-20 * @date 2024-12-20
*/ */
public interface IOppoSycmService { public interface IOppoSycmService {
List<List<OppoSycmDto>> selectOppoSycmStoreBi(OppoSycmVo oppoSycmVo); List<List<OppoSycmDto>> selectOppoSycmPrdBi(OppoSycmVo oppoSycmVo);
List<OppoSycmPrdInfoDto> selectOppoSycmPrdInfo();
} }
package com.link.bi.service;
import com.link.bi.pojo.request.OppoSycmVo;
import com.link.bi.pojo.response.OppoSycmStoreDto;
import com.link.bi.pojo.response.OppoSycmStoreInfoDto;
import java.util.List;
public interface IOppoSycmStoreService {
List<List<OppoSycmStoreDto>> selectOppoSycmStoreBi(OppoSycmVo oppoSycmVo);
List<OppoSycmStoreInfoDto> selectOppoSycmStoreInfoBi();
}
package com.link.bi.service.impl; package com.link.bi.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.link.bi.domain.dao.IOppoSycmDao; import com.link.bi.domain.dao.IOppoSycmDao;
import com.link.bi.domain.entity.OppoSycm; import com.link.bi.domain.entity.OppoSycm;
import com.link.bi.domain.wq.OppoSycmWq; import com.link.bi.domain.wq.OppoSycmWq;
import com.link.bi.pojo.request.OppoSycmVo; import com.link.bi.pojo.request.OppoSycmVo;
import com.link.bi.pojo.response.OppoSycmDto; import com.link.bi.pojo.response.OppoSycmDto;
import com.link.bi.pojo.response.OppoSycmPrdInfoDto;
import com.link.bi.service.IOppoSycmService; import com.link.bi.service.IOppoSycmService;
import com.sfa.common.core.utils.DateUtils; import com.sfa.common.core.utils.DateUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -15,19 +17,19 @@ import java.util.*; ...@@ -15,19 +17,19 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* 电商竞品-生意参谋数据(天猫)Service业务层处理 * 电商竞品-生意参谋竞品数据(天猫)Service业务层处理
* *
* @author admin * @author admin
* @date 2024-12-20 * @date 2024-12-20
*/ */
@Service @Service
public class OppoSycmServiceImpl implements IOppoSycmService public class OppoSycmServiceImpl implements IOppoSycmService {
{
@Autowired @Autowired
IOppoSycmDao sycmDao; IOppoSycmDao sycmDao;
@Override @Override
public List<List<OppoSycmDto>> selectOppoSycmStoreBi(OppoSycmVo sycmVo) { public List<List<OppoSycmDto>> selectOppoSycmPrdBi(OppoSycmVo sycmVo) {
// 设置默认入参时间,倒数30天 // 设置默认入参时间,倒数30天
// Optional判断入参为空设置默认值 // Optional判断入参为空设置默认值
Date startDate = Optional.ofNullable(sycmVo.getStartDate()) Date startDate = Optional.ofNullable(sycmVo.getStartDate())
...@@ -38,24 +40,47 @@ public class OppoSycmServiceImpl implements IOppoSycmService ...@@ -38,24 +40,47 @@ public class OppoSycmServiceImpl implements IOppoSycmService
sycmVo.setEndDate(endDate); sycmVo.setEndDate(endDate);
OppoSycmWq wq = new OppoSycmWq(); OppoSycmWq wq = new OppoSycmWq();
BeanUtils.copyProperties(sycmVo, wq); BeanUtils.copyProperties(sycmVo, wq);
List<OppoSycm> oppoSycms = sycmDao.selectList(wq);
// prdId不为空,则prdId转成List
if (ObjectUtil.isNotEmpty(sycmVo.getPrdId())) {
List<String> prdIds = Arrays.asList(sycmVo.getPrdId().split(","));
wq.setPrdIds(prdIds);
}
if (ObjectUtil.isNotEmpty(sycmVo.getPlatformStore())) {
List<String> platformStores = Arrays.asList(sycmVo.getPlatformStore().split(","));
wq.setPlatformStores(platformStores);
}
List<OppoSycm> oppoSycms = sycmDao.selectOppoSycmPrdList(wq);
List<List<OppoSycmDto>> lists = new ArrayList<>(); List<List<OppoSycmDto>> lists = new ArrayList<>();
// 按照name分成不同的list // 按照name分成不同的list
Map<String, List<OppoSycm>> map = oppoSycms.stream() Map<String, List<OppoSycm>> map = oppoSycms.stream()
.collect(Collectors.groupingBy(OppoSycm::getPlatformStore)); .collect(Collectors.groupingBy(OppoSycm::getPrdId));
map.forEach((name, objects) -> { map.forEach((name, objects) -> {
List<OppoSycmDto> oppoCmmVOS = new ArrayList<>(); List<OppoSycmDto> oppoCmmVOS = new ArrayList<>();
objects.forEach(obj -> { objects.forEach(obj -> {
OppoSycmDto vo = new OppoSycmDto(); OppoSycmDto vo = new OppoSycmDto();
BeanUtils.copyProperties(obj, vo); BeanUtils.copyProperties(obj, vo);
oppoCmmVOS.add(vo); oppoCmmVOS.add(vo);
}); });
lists.add(oppoCmmVOS); lists.add(oppoCmmVOS);
}); });
return lists; return lists;
} }
@Override
public List<OppoSycmPrdInfoDto> selectOppoSycmPrdInfo() {
List<OppoSycm> oppoSycms = sycmDao.selectOppoSycmPrdInfo();
// 转换成结果
List<OppoSycmPrdInfoDto> oppoCmmVOS = new ArrayList<>();
oppoSycms.forEach(obj -> {
OppoSycmPrdInfoDto vo = new OppoSycmPrdInfoDto();
BeanUtils.copyProperties(obj, vo);
oppoCmmVOS.add(vo);
});
return oppoCmmVOS;
}
} }
package com.link.bi.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.link.bi.domain.dao.IOppoSycmStoreDao;
import com.link.bi.domain.entity.OppoSycmStore;
import com.link.bi.domain.wq.OppoSycmWq;
import com.link.bi.pojo.request.OppoSycmVo;
import com.link.bi.pojo.response.OppoSycmStoreDto;
import com.link.bi.pojo.response.OppoSycmStoreInfoDto;
import com.link.bi.service.IOppoSycmStoreService;
import com.sfa.common.core.utils.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 电商竞品-生意参谋竞店数据(天猫)Service业务层处理
*
* @author admin
* @date 2024-12-20
*/
@Service
public class OppoSycmStoreServiceImpl implements IOppoSycmStoreService {
@Autowired
IOppoSycmStoreDao sycmStoreDao;
@Override
public List<List<OppoSycmStoreDto>> selectOppoSycmStoreBi(OppoSycmVo sycmVo) {
// 设置默认入参时间,倒数30天
// Optional判断入参为空设置默认值
Date startDate = Optional.ofNullable(sycmVo.getStartDate())
.orElse(DateUtils.addDays(DateUtils.dateStart(new Date()), -31));
Date endDate = Optional.ofNullable(sycmVo.getEndDate()).orElse(
DateUtils.addDays(DateUtils.dateStart(new Date()), -1));
sycmVo.setStartDate(startDate);
sycmVo.setEndDate(endDate);
OppoSycmWq wq = new OppoSycmWq();
BeanUtils.copyProperties(sycmVo, wq);
// prdId不为空,则prdId转成List
// if (ObjectUtil.isNotEmpty(sycmVo.getPrdId())) {
// List<String> prdIds = Arrays.asList(sycmVo.getPrdId().split(","));
// wq.setPrdIds(prdIds);
// }
if (ObjectUtil.isNotEmpty(sycmVo.getPlatformStore())) {
List<String> platformStores = Arrays.asList(sycmVo.getPlatformStore().split(","));
wq.setPlatformStores(platformStores);
}
List<OppoSycmStore> oppoSycms = sycmStoreDao.selectList(wq);
List<List<OppoSycmStoreDto>> lists = new ArrayList<>();
// 按照name分成不同的list
Map<String, List<OppoSycmStore>> map = oppoSycms.stream()
.collect(Collectors.groupingBy(OppoSycmStore::getPlatformStore));
map.forEach((name, objects) -> {
List<OppoSycmStoreDto> oppoCmmVOS = new ArrayList<>();
objects.forEach(obj -> {
OppoSycmStoreDto vo = new OppoSycmStoreDto();
BeanUtils.copyProperties(obj, vo);
oppoCmmVOS.add(vo);
});
lists.add(oppoCmmVOS);
});
return lists;
}
@Override
public List<OppoSycmStoreInfoDto> selectOppoSycmStoreInfoBi() {
List<OppoSycmStore> oppoSycms = sycmStoreDao.selectOppoSycmStoreInfoBi();
List<OppoSycmStoreInfoDto> dtoList = new ArrayList<>();
oppoSycms.forEach(obj -> {
OppoSycmStoreInfoDto dto = new OppoSycmStoreInfoDto();
BeanUtils.copyProperties(obj, dto);
dtoList.add(dto);
});
return dtoList;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.link.bi.domain.mapper.OppoSycmMapper">
<sql id="User_Column_Chooser">
<if test="dataType!= null and dataType.contains('支付买家数')">
,zfmj_under AS zfmj_under,
zfmj_peak AS zfmj_peak
</if>
<if test="dataType!= null and dataType.contains('交易增速')">
,jyzs_under AS jyzs_under,
jyzs_peak AS jyzs_peak
</if>
<if test="dataType!= null and dataType.contains('独立访客范围')">
,uv_under AS uv_under,
uv_peak AS uv_peak
</if>
<if test="dataType!= null and dataType.contains('流量增速')">
,llzs_under AS llzs_under,
llzs_peak AS llzs_peak
</if>
<if test="dataType == null or dataType == '' ">
,zfmj_under AS zfmj_under,
zfmj_peak AS zfmj_peak,
jyzs_under AS jyzs_under,
jyzs_peak AS jyzs_peak,
uv_under AS uv_under,
uv_peak AS uv_peak,
llzs_under AS llzs_under,
llzs_peak AS llzs_peak
</if>
</sql>
<!-- 查询所有数据 -->
<select id="selectOppoSycmPrdList" resultType="com.link.bi.domain.entity.OppoSycm">
SELECT `date`,
platform_store,
prd_name,
prd_id
<include refid="User_Column_Chooser"/>
FROM oppo_sycm
<where>
<!--> 固定14个店铺<!-->
platform_store in
("三只松鼠旗舰店", "良品铺子旗舰店", "比比赞旗舰店", "百草味官方旗舰店", "沃隆旗舰店", "每果时光旗舰店", "老街口旗舰店", "洽洽食品官方旗舰店", "好利来官方旗舰店",
"盐津铺子食品旗舰店", "德芙官方旗舰店", "蒙都旗舰店", "脱骨侠旗舰店", "炭食光食品旗舰店", "藤桥官方旗舰店", "蒙时代旗舰店", "周黑鸭食品旗舰店", "王小卤旗舰店")
<if test="startDate!= null">and `date` between #{startDate} and #{endDate}</if>
<if test="prdIds!= null and prdIds.size() > 0">
and prd_id in
<foreach collection="prdIds" item="prdId" open="(" separator="," close=")">
#{prdId}
</foreach>
</if>
<if test="platformStores!= null and platformStores.size() > 0">
and platform_store in
<foreach collection="platformStores" item="platformStore" open="(" separator="," close=")">
#{platformStore}
</foreach>
</if>
</where>
order by `date` desc
</select>
<select id="selectOppoSycmPrdInfo" resultType="com.link.bi.domain.entity.OppoSycm">
SELECT prd_name,prd_id ,platform_store FROM oppo_sycm
<where>
<!--> 固定14个店铺<!-->
platform_store in ("三只松鼠旗舰店", "良品铺子旗舰店", "比比赞旗舰店", "百草味官方旗舰店", "沃隆旗舰店", "每果时光旗舰店", "老街口旗舰店", "洽洽食品官方旗舰店",
"好利来官方旗舰店",
"盐津铺子食品旗舰店", "德芙官方旗舰店", "蒙都旗舰店", "脱骨侠旗舰店", "炭食光食品旗舰店", "藤桥官方旗舰店", "蒙时代旗舰店", "周黑鸭食品旗舰店", "王小卤旗舰店")
</where>
-- group by prd_id,prd_name
order by sycm_id desc
limit 0,76
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.link.bi.domain.mapper.OppoSycmStoreMapper">
<!-- 插入数据 -->
<insert id="insertOppoSycmStore" keyProperty="sycmsId" useGeneratedKeys="true">
INSERT INTO oppo_sycm (year, month, date, platformId, platform, dataPlatform,
platformStore, zfmjUnder, zfmjPeak, jyzsUnder, jyzsPeak,
uvUnder, uvPeak, llzsUnder, llzsPeak)
VALUES (#{year}, #{month}, #{date}, #{platformId}, #{platform}, #{dataPlatform},
#{platformStore}, #{zfmjUnder}, #{zfmjPeak}, #{jyzsUnder}, #{jyzsPeak},
#{uvUnder}, #{uvPeak}, #{llzsUnder}, #{llzsPeak})
</insert>
<!-- 根据 id 删除数据 -->
<delete id="deleteOppoSycmStoreById">
DELETE
FROM oppo_sycm
WHERE sycmsId = #{sycmsId}
</delete>
<!-- 更新数据 -->
<update id="updateOppoSycmStore">
UPDATE oppo_sycm
<set>
<if test="year!= null">year = #{year},</if>
<if test="month!= null">month = #{month},</if>
<if test="date!= null">date = #{date},</if>
<if test="platformId!= null">platformId = #{platformId},</if>
<if test="platform!= null">platform = #{platform},</if>
<if test="dataPlatform!= null">dataPlatform = #{dataPlatform},</if>
<if test="platformStore!= null">platformStore = #{platformStore},</if>
<if test="zfmjUnder!= null">zfmjUnder = #{zfmjUnder},</if>
<if test="zfmjPeak!= null">zfmjPeak = #{zfmjPeak},</if>
<if test="jyzsUnder!= null">jyzsUnder = #{jyzsUnder},</if>
<if test="jyzsPeak!= null">jyzsPeak = #{jyzsPeak},</if>
<if test="uvUnder!= null">uvUnder = #{uvUnder},</if>
<if test="uvPeak!= null">uvPeak = #{uvPeak},</if>
<if test="llzsUnder!= null">llzsUnder = #{llzsUnder},</if>
<if test="llzsPeak!= null">llzsPeak = #{llzsPeak}</if>
</set>
WHERE sycmsId = #{sycmsId}
</update>
<!-- 根据 id 查询数据 -->
<select id="selectOppoSycmStoreById" resultType="com.link.bi.domain.entity.OppoSycmStore">
SELECT *
FROM oppo_sycm
WHERE sycmsId = #{sycmsId}
</select>
<sql id="User_Column_Chooser">
<if test="dataType!= null and dataType.contains('支付买家数')">
,zfmj_under AS zfmj_under,
zfmj_peak AS zfmj_peak
</if>
<if test="dataType!= null and dataType.contains('交易增速')">
,jyzs_under AS jyzs_under,
jyzs_peak AS jyzs_peak
</if>
<if test="dataType!= null and dataType.contains('独立访客范围')">
,uv_under AS uv_under,
uv_peak AS uv_peak
</if>
<if test="dataType!= null and dataType.contains('流量增速')">
,llzs_under AS llzs_under,
llzs_peak AS llzs_peak
</if>
<if test="dataType == null or dataType == '' ">
,zfmj_under AS zfmj_under,
zfmj_peak AS zfmj_peak,
jyzs_under AS jyzs_under,
jyzs_peak AS jyzs_peak,
uv_under AS uv_under,
uv_peak AS uv_peak,
llzs_under AS llzs_under,
llzs_peak AS llzs_peak
</if>
</sql>
<!-- 查询所有数据 -->
<select id="selectOppoSycmStoreList" resultType="com.link.bi.domain.entity.OppoSycmStore">
SELECT `date`, platform_store
<include refid="User_Column_Chooser"/>
FROM oppo_sycm_store
<where>
platform_store in
("三只松鼠旗舰店", "良品铺子旗舰店", "比比赞旗舰店", "百草味官方旗舰店", "沃隆旗舰店", "每果时光旗舰店", "老街口旗舰店", "洽洽食品官方旗舰店", "好利来官方旗舰店",
"盐津铺子食品旗舰店", "德芙官方旗舰店", "蒙都旗舰店", "脱骨侠旗舰店", "炭食光食品旗舰店", "藤桥官方旗舰店", "蒙时代旗舰店", "周黑鸭食品旗舰店", "王小卤旗舰店")
<if test="startDate!= null">and `date` between #{startDate} and #{endDate}</if>
<if test="platformStores!= null and platformStores.size() > 0">
and platform_store in
<foreach collection="platformStores" item="platformStore" open="(" separator="," close=")">
#{platformStore}
</foreach>
</if>
</where>
order by `date` desc
</select>
<select id="selectOppoSycmStoreInfoBi" resultType="com.link.bi.domain.entity.OppoSycmStore">
SELECT platform_store FROM oppo_sycm_store
<where>
platform_store in
("三只松鼠旗舰店", "良品铺子旗舰店", "比比赞旗舰店", "百草味官方旗舰店", "沃隆旗舰店", "每果时光旗舰店", "老街口旗舰店", "洽洽食品官方旗舰店", "好利来官方旗舰店",
"盐津铺子食品旗舰店", "德芙官方旗舰店", "蒙都旗舰店", "脱骨侠旗舰店", "炭食光食品旗舰店", "藤桥官方旗舰店", "蒙时代旗舰店", "周黑鸭食品旗舰店", "王小卤旗舰店")
</where>
group by platform_store
order by platform_store desc
</select>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论