提交 9bdf5c5c authored 作者: 吕本才's avatar 吕本才 提交者: Coding

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

Merge Request: 货需和蝉妈妈bi展示需求提交 Created By: @吕本才 Accepted By: @吕本才 URL: https://g-pkkp8204.coding.net/p/wangxiaolu-sfa/d/wangxiaolu-link-module-bi/git/merge/76?initial=true
......@@ -91,6 +91,12 @@
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
</dependencies>
<build>
......
package com.link.bi.controller.core;
import com.link.bi.service.IEcGoodsSupplyDemandService;
import com.sfa.common.core.web.controller.BaseController;
import com.sfa.common.log.annotation.Log;
import com.sfa.common.log.enums.BusinessType;
import com.sfa.common.security.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
* 电商-货物供需Controller
*
* @author admin
* @date 2024-12-05
*/
@RestController
@RequestMapping("/demand/core")
public class EcGoodsSupplyDemandCoreController extends BaseController
{
@Autowired
private IEcGoodsSupplyDemandService ecGoodsSupplyDemandService;
/**
* 导出电商-货物供需列表
*/
@RequiresPermissions("bi:demand:import")
@Log(title = "电商-货物供需", businessType = BusinessType.IMPORT)
@PostMapping("/import")
public String importData(HttpServletResponse response, MultipartFile file,Integer year)
{
ecGoodsSupplyDemandService.importData(file,year);
return "导入货需数据完成";
}
}
package com.link.bi.controller.query;
import com.link.bi.service.IEcBaStoreDailyDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/ba/store/query")
public class EcBaStoreDailyDataQueryController {
@Autowired
IEcBaStoreDailyDataService ecBaStoreDailyDataService;
}
package com.link.bi.controller.query;
import com.link.bi.pojo.request.EcStoreVo;
import com.link.bi.service.IEcGoodsSupplyDemandService;
import com.sfa.common.core.web.controller.BaseController;
import com.sfa.common.core.web.domain.PageInfo;
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;
/**
* 电商-货物供需Controller
*
* @author admin
* @date 2024-12-05
*/
@RestController
@RequestMapping("/demand/core")
public class EcGoodsSupplyDemandQueryController extends BaseController
{
@Autowired
private IEcGoodsSupplyDemandService ecGoodsSupplyDemandService;
/**
* 导出电商-货物供需列表
*/
@RequiresPermissions("bi:demand:list")
@GetMapping("/list")
public PageInfo list(EcStoreVo ecStoreVo)
{
return ecGoodsSupplyDemandService.selectPage(ecStoreVo);
}
}
package com.link.bi.controller.query;
import com.link.bi.pojo.request.OppoCmmDto;
import com.link.bi.pojo.response.OppoCmmVO;
import com.link.bi.service.IOppoCmmService;
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-19
*/
@RestController
@RequestMapping("/oppo/cmm")
public class OppoCmmQueryController extends BaseController {
@Autowired
private IOppoCmmService oppoCmmService;
/**
* 查询电商竞品-蝉妈妈数据(抖音后台)列表
* zbj 直播间数据
*/
@RequiresPermissions("bi:cmm:list")
@GetMapping("/zbj")
public List<List<OppoCmmVO>> selectOppoCmmZbjBiList(OppoCmmDto oppoCmmDto) {
return oppoCmmService.selectOppoCmmZbjBiList(oppoCmmDto);
}
}
package com.link.bi.controller.query;
import com.link.bi.pojo.request.OppoSycmDto;
import com.link.bi.pojo.response.OppoSycmVO;
import com.link.bi.service.IOppoSycmService;
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")
public class OppoSycmQueryController extends BaseController
{
@Autowired
private IOppoSycmService oppoSycmService;
/**
* 查询电商竞品-生意参谋数据(天猫)列表
*/
@RequiresPermissions("sycm:sycm:list")
@GetMapping("/list")
public List<List<OppoSycmVO>> list(OppoSycmDto oppoSycmDto)
{
return oppoSycmService.selectOppoSycmStoreBi(oppoSycmDto);
}
}
package com.link.bi.domain.dao;
import com.link.bi.domain.entity.EcGoodsSupplyDemand;
import com.link.bi.domain.wq.MarketDetailWq;
import java.util.List;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2024-11-21 16
* @describe :
*/
public interface IEcGoodsSupplyDemandDao {
void batchSaveEcGoodsSupplyDemands(List<EcGoodsSupplyDemand> demandList);
Integer deleteByYear(Integer year);
Map<String, Map<String, String>> getSupplyDemandYearAndMonth(MarketDetailWq mqw);
}
package com.link.bi.domain.dao;
import com.link.bi.domain.entity.OppoCmm;
import com.link.bi.domain.wq.OppoCmmWq;
import java.util.List;
/**
* 电商竞品-蝉妈妈数据(抖音后台)Mapper接口
*
* @author admin
* @date 2024-12-19
*/
public interface IOppoCmmDao {
List<OppoCmm> selectList(OppoCmmWq oppoCmmDto);
}
package com.link.bi.domain.dao;
import com.link.bi.domain.entity.OppoSycm;
import com.link.bi.domain.wq.OppoSycmWq;
import java.util.List;
/**
* 电商竞品-蝉妈妈数据(抖音后台)Mapper接口
*
* @author admin
* @date 2024-12-19
*/
public interface IOppoSycmDao {
List<OppoSycm> selectList(OppoSycmWq wq);
}
package com.link.bi.domain.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.link.bi.domain.dao.IEcGoodsSupplyDemandDao;
import com.link.bi.domain.entity.EcGoodsSupplyDemand;
import com.link.bi.domain.mapper.EcGoodsSupplyDemandMapper;
import com.link.bi.domain.wq.MarketDetailWq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author : liqiulin
* @date : 2024-11-21 16
* @describe :
*/
@Service
public class EcGoodsSupplyDemandDaoImpl implements IEcGoodsSupplyDemandDao {
@Autowired
EcGoodsSupplyDemandMapper mapper;
@Override
public void batchSaveEcGoodsSupplyDemands(List<EcGoodsSupplyDemand> demandList) {
mapper.batchSaveEcGoodsSupplyDemands(demandList);
}
@Override
public Integer deleteByYear(Integer year) {
Integer delete = mapper.delete(new LambdaQueryWrapper<EcGoodsSupplyDemand>()
.eq(EcGoodsSupplyDemand::getYear, year));
System.out.println("删除" + delete + "条数据");
return delete;
}
@Override
public Map<String, Map<String, String>> getSupplyDemandYearAndMonth(MarketDetailWq mqw) {
QueryWrapper<EcGoodsSupplyDemand> yearWrapper = new QueryWrapper<EcGoodsSupplyDemand>();
yearWrapper.lambda().eq(EcGoodsSupplyDemand::getYear, mqw.getYear())
.eq(EcGoodsSupplyDemand::getReportDateType, 1L)
// 年度
.isNotNull(EcGoodsSupplyDemand::getPlatformId)
.groupBy(EcGoodsSupplyDemand::getPlatformId, EcGoodsSupplyDemand::getYear);
yearWrapper.lambda().select(EcGoodsSupplyDemand::getPlatformId);
String columns = yearWrapper.getSqlSelect() + ",IFNULL(sum(supply_demand_amount),0) AS supplyDemandCount";
yearWrapper.select(columns);
List<Map<String, Object>> yearMaps = mapper.selectMaps(yearWrapper);
// List转Map<String,Map<String,Object>>
Map<String, String> yearMap = yearMaps.stream().collect(Collectors.toMap(k -> k.get("platform_id").toString(), v -> ObjectUtil.isNotEmpty(v.get("supplyDemandCount")) ? v.get("supplyDemandCount").toString() : "0"));
QueryWrapper<EcGoodsSupplyDemand> wrapper = new QueryWrapper<EcGoodsSupplyDemand>();
wrapper.lambda().eq(EcGoodsSupplyDemand::getYear, mqw.getYear())
.eq(EcGoodsSupplyDemand::getMonth, mqw.getMonth())
.eq(EcGoodsSupplyDemand::getReportDateType, 2L)
// 年度
.isNotNull(EcGoodsSupplyDemand::getPlatformId)
.groupBy(EcGoodsSupplyDemand::getPlatformId, EcGoodsSupplyDemand::getYear, EcGoodsSupplyDemand::getMonth);
wrapper.lambda().select(EcGoodsSupplyDemand::getPlatformId);
String monthColumns = yearWrapper.getSqlSelect() + ",IFNULL(sum(supply_demand_amount),0) AS supplyDemandCount";
wrapper.select(monthColumns);
// 月度
List<Map<String, Object>> montMaps = mapper.selectMaps(wrapper);
Map<String, String> monthMap = montMaps.stream().collect(Collectors.toMap(k -> k.get("platform_id").toString(), v -> ObjectUtil.isNotEmpty(v.get("supplyDemandCount")) ? v.get("supplyDemandCount").toString() : "0"));
Map<String, Map<String, String>> allMaps = new HashMap<>();
allMaps.put("year", yearMap);
allMaps.put("month", monthMap);
return allMaps;
}
}
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.IOppoCmmDao;
import com.link.bi.domain.entity.OppoCmm;
import com.link.bi.domain.mapper.OppoCmmMapper;
import com.link.bi.domain.wq.OppoCmmWq;
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 OppoCmmDaoImpl implements IOppoCmmDao {
@Autowired
OppoCmmMapper oppoCmmMapper;
@Override
public List<OppoCmm> selectList(OppoCmmWq wq) {
// 查询数据库数据
QueryWrapper<OppoCmm> wrapper = new QueryWrapper<>();
wrapper.select("`date`,name,SUM(gkrc_num) AS gkrc_num_total, SUM(sale_sum) AS sale_sum_total ");
wrapper.between(ObjectUtil.isNotEmpty(wq.getStartDate()), "date", wq.getStartDate(), wq.getEndDate());
wrapper.groupBy("name,`date`");
wrapper.orderByDesc("`date`");
return oppoCmmMapper.selectList(wrapper);
}
}
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.entity.OppoSycm;
import com.link.bi.domain.mapper.OppoSycmMapper;
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 OppoSycmDaoImpl implements IOppoSycmDao {
@Autowired
OppoSycmMapper oppoSycmMapper;
@Override
public List<OppoSycm> selectList(OppoSycmWq 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 = "三只松鼠旗舰店,良品铺子旗舰店,比比赞旗舰店,百草味官方旗舰店,沃隆旗舰店,每果时光旗舰店,老街口旗舰店,洽洽食品官方旗舰店,好利来官方旗舰店,盐津铺子食品旗舰店,德芙官方旗舰店,蒙都旗舰店,脱骨侠旗舰店,炭食光食品旗舰店,藤桥官方旗舰店,蒙时代旗舰店,周黑鸭食品旗舰店";
wrapper.in("platform_store",storeStr.split(","));
wrapper.between(ObjectUtil.isNotEmpty(wq.getStartDate()), "date", wq.getStartDate(), wq.getEndDate());
wrapper.groupBy("platform_store,`date`");
wrapper.orderByDesc("`date`");
//
return oppoSycmMapper.selectList(wrapper);
}
}
package com.link.bi.domain.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.link.bi.domain.dao.IProductDao;
......@@ -63,7 +64,7 @@ public class ProductDaoImpl implements IProductDao {
@Override
public List<PrdInfoDto> selectListByCodes(List<String> prdCodes) {
List<PrdInfo> prdInfos = prdInfoMapper.selectList(new LambdaQueryWrapper<PrdInfo>().in(PrdInfo::getPrdCode, prdCodes));
List<PrdInfo> prdInfos = prdInfoMapper.selectList(new LambdaQueryWrapper<PrdInfo>().in(ObjectUtil.isNotEmpty(prdCodes),PrdInfo::getPrdCode, prdCodes));
return BeanUtils.transitionDtos(prdInfos, PrdInfoDto.class);
}
}
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 org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal;
import java.util.Date;
/**
* 王小卤后台数据对象 ec_ba_store_daily_data
*
* @author admin
* @date 2024-12-19
*/
@TableName(value ="ec_ba_store_daily_data")
@Data
public class EcBaStoreDailyData extends BaseDo
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/** id标识 */
private Long ebtId;
/** 年份 */
@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 */
@Excel(name = "平台id")
private Long platformId;
/** 1 天猫; 2 抖音; 3 拼多多; 4 京东; 5 私域; 6 分销; 7 线下; 8 样品; 9 团购; 10 其他; */
@Excel(name = "1 天猫; 2 抖音; 3 拼多多; 4 京东; 5 私域; 6 分销; 7 线下; 8 样品; 9 团购; 10 其他;")
private String platform;
/** 取数平台:生意参谋、拼多多后台、抖音罗盘 */
@Excel(name = "取数平台:生意参谋、拼多多后台、抖音罗盘")
private String dataPlatform;
/** $column.columnComment */
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String storeCode;
/** 店铺名称 */
@Excel(name = "店铺名称")
private String storeName;
/** 成交总额-支付金额 */
@Excel(name = "成交总额-支付金额")
private BigDecimal gmv;
/** 净成交总额-支付金额-退款 */
@Excel(name = "净成交总额-支付金额-退款")
private BigDecimal netGmv;
/** 投资回报率,单位% */
@Excel(name = "投资回报率,单位%")
private BigDecimal roi;
/** 推广花费(包含每日额外平均) */
@Excel(name = "推广花费", readConverterExp = "包=含每日额外平均")
private BigDecimal promotionCost;
/** 推广花费-每日额外平均,淘宝天猫有 */
@Excel(name = "推广花费-每日额外平均,淘宝天猫有")
private BigDecimal promotionCostExtra;
/** 推广产出-推广总交易额 */
@Excel(name = "推广产出-推广总交易额")
private BigDecimal promotionOutput;
/** 浏览量 */
@Excel(name = "浏览量")
private Long pv;
/** 点击人数-unique visitor(访客) */
@Excel(name = "点击人数-unique visitor(访客)")
private Long uv;
/** 成交人数-支付买家 */
@Excel(name = "成交人数-支付买家")
private Long transactionsNum;
/** 成交转化率Conversion Rate-支付转化 */
@Excel(name = "成交转化率Conversion Rate-支付转化")
private BigDecimal cvr;
/** 退款金额 */
@Excel(name = "退款金额")
private BigDecimal refundAmount;
/** 退款率:退款金额/gmv */
@Excel(name = "退款率:退款金额/gmv")
private BigDecimal refundRate;
/** 客单价Average Transaction Value */
@Excel(name = "客单价Average Transaction Value")
private BigDecimal atv;
/** 批次号 */
@Excel(name = "批次号")
private String batchNo;
/** 是否删除标志0未删除1已删除 */
private String delFlag;
/** 创建人UserID */
@Excel(name = "创建人UserID")
private Long createUserId;
/** 修改人UserID */
@Excel(name = "修改人UserID")
private Long updateUserId;
public void setEbtId(Long ebtId)
{
this.ebtId = ebtId;
}
public Long getEbtId()
{
return ebtId;
}
public void setYear(Long year)
{
this.year = year;
}
public Long getYear()
{
return year;
}
public void setMonth(Long month)
{
this.month = month;
}
public Long getMonth()
{
return month;
}
public void setDate(Date date)
{
this.date = date;
}
public Date getDate()
{
return date;
}
public void setPlatformId(Long platformId)
{
this.platformId = platformId;
}
public Long getPlatformId()
{
return platformId;
}
public void setPlatform(String platform)
{
this.platform = platform;
}
public String getPlatform()
{
return platform;
}
public void setDataPlatform(String dataPlatform)
{
this.dataPlatform = dataPlatform;
}
public String getDataPlatform()
{
return dataPlatform;
}
public void setStoreCode(String storeCode)
{
this.storeCode = storeCode;
}
public String getStoreCode()
{
return storeCode;
}
public void setStoreName(String storeName)
{
this.storeName = storeName;
}
public String getStoreName()
{
return storeName;
}
public void setGmv(BigDecimal gmv)
{
this.gmv = gmv;
}
public BigDecimal getGmv()
{
return gmv;
}
public void setNetGmv(BigDecimal netGmv)
{
this.netGmv = netGmv;
}
public BigDecimal getNetGmv()
{
return netGmv;
}
public void setRoi(BigDecimal roi)
{
this.roi = roi;
}
public BigDecimal getRoi()
{
return roi;
}
public void setPromotionCost(BigDecimal promotionCost)
{
this.promotionCost = promotionCost;
}
public BigDecimal getPromotionCost()
{
return promotionCost;
}
public void setPromotionCostExtra(BigDecimal promotionCostExtra)
{
this.promotionCostExtra = promotionCostExtra;
}
public BigDecimal getPromotionCostExtra()
{
return promotionCostExtra;
}
public void setPromotionOutput(BigDecimal promotionOutput)
{
this.promotionOutput = promotionOutput;
}
public BigDecimal getPromotionOutput()
{
return promotionOutput;
}
public void setPv(Long pv)
{
this.pv = pv;
}
public Long getPv()
{
return pv;
}
public void setUv(Long uv)
{
this.uv = uv;
}
public Long getUv()
{
return uv;
}
public void setTransactionsNum(Long transactionsNum)
{
this.transactionsNum = transactionsNum;
}
public Long getTransactionsNum()
{
return transactionsNum;
}
public void setCvr(BigDecimal cvr)
{
this.cvr = cvr;
}
public BigDecimal getCvr()
{
return cvr;
}
public void setRefundAmount(BigDecimal refundAmount)
{
this.refundAmount = refundAmount;
}
public BigDecimal getRefundAmount()
{
return refundAmount;
}
public void setRefundRate(BigDecimal refundRate)
{
this.refundRate = refundRate;
}
public BigDecimal getRefundRate()
{
return refundRate;
}
public void setAtv(BigDecimal atv)
{
this.atv = atv;
}
public BigDecimal getAtv()
{
return atv;
}
public void setBatchNo(String batchNo)
{
this.batchNo = batchNo;
}
public String getBatchNo()
{
return batchNo;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getDelFlag()
{
return delFlag;
}
public void setCreateUserId(Long createUserId)
{
this.createUserId = createUserId;
}
public Long getCreateUserId()
{
return createUserId;
}
public void setUpdateUserId(Long updateUserId)
{
this.updateUserId = updateUserId;
}
public Long getUpdateUserId()
{
return updateUserId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("ebtId", getEbtId())
.append("year", getYear())
.append("month", getMonth())
.append("date", getDate())
.append("platformId", getPlatformId())
.append("platform", getPlatform())
.append("dataPlatform", getDataPlatform())
.append("storeCode", getStoreCode())
.append("storeName", getStoreName())
.append("gmv", getGmv())
.append("netGmv", getNetGmv())
.append("roi", getRoi())
.append("promotionCost", getPromotionCost())
.append("promotionCostExtra", getPromotionCostExtra())
.append("promotionOutput", getPromotionOutput())
.append("pv", getPv())
.append("uv", getUv())
.append("transactionsNum", getTransactionsNum())
.append("cvr", getCvr())
.append("refundAmount", getRefundAmount())
.append("refundRate", getRefundRate())
.append("atv", getAtv())
.append("batchNo", getBatchNo())
.append("delFlag", getDelFlag())
.append("createBy", getCreateBy())
.append("createUserId", getCreateUserId())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateUserId", getUpdateUserId())
.append("updateTime", getUpdateTime())
.toString();
}
}
package com.link.bi.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sfa.common.core.annotation.Excel;
import lombok.Data;
import java.util.Date;
/**
* 电商-货物供需对象 ec_goods_supply_demand
*
* @author admin
* @date 2024-12-05
*/
@TableName(value ="ec_goods_supply_demand")
@Data
public class EcGoodsSupplyDemand
{
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.AUTO)
private Long supplyDemandId;
/** 年 */
@Excel(name = "年")
private Long year;
/** 月 */
@Excel(name = "月")
private Long month;
/** 周 */
@Excel(name = "周")
private Integer week;
/** 统计日期类型:1年 2月 3周 4日 */
@Excel(name = "统计日期类型:1年 2月 3周 4日")
private Long reportDateType;
/** 统计日期开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "统计日期开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date reportDateBegin;
/** 统计日期结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "统计日期结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date reportDateEnd;
/** 商品/货品编码 */
@Excel(name = "商品/货品编码")
private String prdCode;
/** 商品/货品名称 */
@Excel(name = "商品/货品名称")
private String prdName;
/** 商品条码,69码 */
@Excel(name = "商品条码,69码")
private String prdBarcode;
/** 商品/货品状态 */
@Excel(name = "商品/货品状态")
private Long prdStatus;
/** 商品系列id */
@Excel(name = "商品系列id")
private Integer seriesId;
/** 商品系列 */
@Excel(name = "商品系列")
private String series;
/** 平台id */
@Excel(name = "平台id")
private Long platformId;
/** platform平台:1 天猫; 2 抖音; 3 拼多多; 4 京东; 5 私域; 6 分销; 7 线下; 8 样品; 9 团购; 10 其他; */
@Excel(name = "platform平台:1 天猫; 2 抖音; 3 拼多多; 4 京东; 5 私域; 6 分销; 7 线下; 8 样品; 9 团购; 10 其他;")
private String platform;
/** 货需数量 */
@Excel(name = "货需数量")
// 做校验下 是否为正整数
private Long supplyDemandAmount;
@Excel(name = "创建时间")
private Date createTime;
/** 创建人id */
@Excel(name = "创建人id")
private Long createUserId;
/** 创建人 */
@Excel(name = "创建人")
private String createBy;
/** 修改人id */
@Excel(name = "修改人id")
private Long updateUserId;
/** 修改人 */
@Excel(name = "修改人")
private Long updateBy;
@Excel(name = "修改时间")
private Date updateTime;
}
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 lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 电商竞品-蝉妈妈数据(抖音后台)对象 oppo_cmm
*
* @author admin
* @date 2024-12-19
*/
@TableName(value = "oppo_cmm")
@Data
public class OppoCmm implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* id标识
*/
private Long cmmId;
/**
* 年份
*/
@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;
/**
* 日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date dateinfo;
/**
* 平台id-2
*/
@Excel(name = "平台id-2")
private Long platformId;
/**
* 2 抖音
*/
@Excel(name = "2 抖音")
private String platform;
/**
* 取数平台:蝉妈妈
*/
@Excel(name = "取数平台:蝉妈妈")
private String dataPlatform;
/**
* 店铺名
*/
@Excel(name = "店铺名")
private String name;
/**
* 直播场次
*/
@Excel(name = "直播场次")
private String zbcc;
/**
* 观看人次
*/
@Excel(name = "观看人次")
private Long gkrcNum;
/**
* 观看人次求和
*/
@Excel(name = "观看人次求和")
@TableField(exist = false)
private Long gkrcNumTotal;
/**
* 人气峰值
*/
@Excel(name = "人气峰值")
private Long rqfz;
/**
* unique visitor(独立访客)
*/
@Excel(name = "unique visitor(独立访客)")
private Long uv;
/**
* 销售量
*/
@Excel(name = "销售量")
private BigDecimal saleCount;
/**
* 销售额
*/
@Excel(name = "销售额")
private BigDecimal saleSum;
/**
* 销售额求和
*/
@Excel(name = "销售额求和")
@TableField(exist = false)
private BigDecimal saleSumTotal;
/**
* 创建日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "创建日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date creatDatetime;
}
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 lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.io.Serializable;
import java.util.Date;
/**
* 电商竞品-生意参谋数据(天猫)对象 oppo_sycm
*
* @author admin
* @date 2024-12-20
*/
@TableName(value = "oppo_sycm")
@Data
public class OppoSycm implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**
* id标识
*/
private Long sycmId;
/**
* 年份
*/
@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;
/**
* 商品/货品名称(【百补】洽洽焦糖/五香/山核桃味大包装瓜子500g*2袋恰恰葵花籽)
*/
@Excel(name = "商品/货品名称", readConverterExp = "【=百补】洽洽焦糖/五香/山核桃味大包装瓜子500g*2袋恰恰葵花籽")
private String prdName;
/**
* 支付买家数(范围-低)
*/
@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;
public void setSycmId(Long sycmId) {
this.sycmId = sycmId;
}
public Long getSycmId() {
return sycmId;
}
public void setYear(Long year) {
this.year = year;
}
public Long getYear() {
return year;
}
public void setMonth(Long month) {
this.month = month;
}
public Long getMonth() {
return month;
}
public void setDate(Date date) {
this.date = date;
}
public Date getDate() {
return date;
}
public void setPlatformId(Long platformId) {
this.platformId = platformId;
}
public Long getPlatformId() {
return platformId;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public String getPlatform() {
return platform;
}
public void setDataPlatform(String dataPlatform) {
this.dataPlatform = dataPlatform;
}
public String getDataPlatform() {
return dataPlatform;
}
public void setPlatformStore(String platformStore) {
this.platformStore = platformStore;
}
public String getPlatformStore() {
return platformStore;
}
public void setPrdName(String prdName) {
this.prdName = prdName;
}
public String getPrdName() {
return prdName;
}
public void setZfmjUnder(Long zfmjUnder) {
this.zfmjUnder = zfmjUnder;
}
public Long getZfmjUnder() {
return zfmjUnder;
}
public void setZfmjPeak(Long zfmjPeak) {
this.zfmjPeak = zfmjPeak;
}
public Long getZfmjPeak() {
return zfmjPeak;
}
public void setJyzsUnder(Long jyzsUnder) {
this.jyzsUnder = jyzsUnder;
}
public Long getJyzsUnder() {
return jyzsUnder;
}
public void setJyzsPeak(Long jyzsPeak) {
this.jyzsPeak = jyzsPeak;
}
public Long getJyzsPeak() {
return jyzsPeak;
}
public void setUvUnder(Long uvUnder) {
this.uvUnder = uvUnder;
}
public Long getUvUnder() {
return uvUnder;
}
public void setUvPeak(Long uvPeak) {
this.uvPeak = uvPeak;
}
public Long getUvPeak() {
return uvPeak;
}
public void setLlzsUnder(Long llzsUnder) {
this.llzsUnder = llzsUnder;
}
public Long getLlzsUnder() {
return llzsUnder;
}
public void setLlzsPeak(Long llzsPeak) {
this.llzsPeak = llzsPeak;
}
public Long getLlzsPeak() {
return llzsPeak;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("sycmId", getSycmId())
.append("year", getYear())
.append("month", getMonth())
.append("date", getDate())
.append("platformId", getPlatformId())
.append("platform", getPlatform())
.append("dataPlatform", getDataPlatform())
.append("platformStore", getPlatformStore())
.append("prdName", getPrdName())
.append("zfmjUnder", getZfmjUnder())
.append("zfmjPeak", getZfmjPeak())
.append("jyzsUnder", getJyzsUnder())
.append("jyzsPeak", getJyzsPeak())
.append("uvUnder", getUvUnder())
.append("uvPeak", getUvPeak())
.append("llzsUnder", getLlzsUnder())
.append("llzsPeak", getLlzsPeak())
.toString();
}
}
package com.link.bi.domain.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.link.bi.domain.entity.EcBaStoreDailyData;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* 王小卤后台数据Mapper接口
*
* @author admin
* @date 2024-12-19
*/
@Repository
@Mapper
public interface EcBaStoreDailyDataMapper extends BaseMapper<EcBaStoreDailyData> {
}
package com.link.bi.domain.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.link.bi.domain.entity.EcGoodsSupplyDemand;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 电商-货物供需Mapper接口
*
* @author admin
* @date 2024-12-05
*/
@Repository
@Mapper
public interface EcGoodsSupplyDemandMapper extends BaseMapper<EcGoodsSupplyDemand> {
void batchSaveEcGoodsSupplyDemands(List<EcGoodsSupplyDemand> demandList);
}
package com.link.bi.domain.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.link.bi.domain.entity.OppoCmm;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* 电商竞品-蝉妈妈数据(抖音后台)Mapper接口
*
* @author admin
* @date 2024-12-19
*/
@Repository
@Mapper
public interface OppoCmmMapper extends BaseMapper<OppoCmm> {
}
package com.link.bi.domain.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.link.bi.domain.entity.OppoSycm;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* 电商竞品-生意参谋数据(天猫)Mapper接口
*
* @author admin
* @date 2024-12-20
*/
@Repository
@Mapper
public interface OppoSycmMapper extends BaseMapper<OppoSycm> {
}
package com.link.bi.domain.wq;
import lombok.Data;
import java.util.Date;
/**
* @author : lvbencai
* @date : 2024-12-20 10::41
* @describe : 竞品蝉妈妈查询参数
*/
@Data
public class OppoCmmWq {
// 入参 时间开始时间
private Date startDate;
// 入参 时间结束时间
private Date endDate;
}
package com.link.bi.domain.wq;
import lombok.Data;
import java.util.Date;
/**
* @author : lvbencai
* @date : 2024-12-20 10::41
* @describe : 竞品生意参谋查询参数
*/
@Data
public class OppoSycmWq {
// 入参 时间开始时间
private Date startDate;
// 入参 时间结束时间
private Date endDate;
}
package com.link.bi.pojo.request;
import lombok.Data;
import java.util.Date;
@Data
public class OppoCmmDto {
// 入参 时间开始时间
private Date startDate;
// 入参 时间结束时间
private Date endDate;
}
package com.link.bi.pojo.request;
import lombok.Data;
import java.util.Date;
@Data
public class OppoSycmDto {
// 入参 时间开始时间
private Date startDate;
// 入参 时间结束时间
private Date endDate;
}
......@@ -25,6 +25,10 @@ public class MarketSummaryDto {
private Date date;
private BigDecimal targetSaleSum;
// 货需年
private BigDecimal goodsSupplyDemandCountY;
// 货需月
private BigDecimal goodsSupplyDemandCountM;
// 实际销售量-Y
private BigDecimal saleCountY;
......
package com.link.bi.pojo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author lvbencai
* @date 2022/12/20 10:18
*/
@Data
public class OppoCmmVO {
// 日期
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date;
// 店铺名
private String name;
// 直播场次
// private String zbcc;
// 销售额
private BigDecimal saleSumTotal;
// 观看人次
private Long gkrcNumTotal;
}
package com.link.bi.pojo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @author lvbencai
* @date 2022/12/20 10:18
*/
@Data
public class OppoSycmVO {
// 日期
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date;
/**
* 平台店铺
*/
private String platformStore;
/**
* 支付买家数(范围-低)
*/
private Long zfmjUnderTotal;
/**
* 支付买家数(范围-高)
*/
private Long zfmjPeakTotal;
/**
* %交易增速(范围-低)
*/
private Long jyzsUnderTotal;
/**
* %交易增速(范围-高)
*/
private Long jyzsPeakTotal;
/**
* unique visitor(独立访客范围-低)
*/
private Long uvUnderTotal;
/**
* unique visitor(独立访客范围-高)
*/
private Long uvPeakTotal;
/**
* %流量增速(范围-低)
*/
private Long llzsUnderTotal;
/**
* %流量增速(范围-高)
*/
private Long llzsPeakTotal;
}
package com.link.bi.service;
/**
* 王小卤后台数据Service接口
*
* @author admin
* @date 2024-12-19
*/
public interface IEcBaStoreDailyDataService {
}
package com.link.bi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.link.bi.domain.entity.EcGoodsSupplyDemand;
import com.link.bi.domain.wq.MarketDetailWq;
import com.link.bi.pojo.request.EcStoreVo;
import com.sfa.common.core.web.domain.PageInfo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
* 电商-货物供需Service接口
*
* @author admin
* @date 2024-12-05
*/
public interface IEcGoodsSupplyDemandService extends IService<EcGoodsSupplyDemand> {
List<EcGoodsSupplyDemand> importData(MultipartFile ecGoodsSupplyDemand, Integer year);
// 批量保存
void batchSaveEcGoodsSupplyDemands(List<EcGoodsSupplyDemand> demandList);
void deleteByYear(Integer year);
Map<String, Map<String, String>> getSupplyDemandYearAndMonth(MarketDetailWq mqw);
PageInfo selectPage(EcStoreVo ecStoreVo);
}
package com.link.bi.service;
import com.link.bi.pojo.request.OppoCmmDto;
import com.link.bi.pojo.response.OppoCmmVO;
import java.util.List;
/**
* 电商竞品-蝉妈妈数据(抖音后台)Service接口
*
* @author admin
* @date 2024-12-19
*/
public interface IOppoCmmService {
List<List<OppoCmmVO>> selectOppoCmmZbjBiList(OppoCmmDto oppoCmmDto);
}
package com.link.bi.service;
import com.link.bi.pojo.request.OppoSycmDto;
import com.link.bi.pojo.response.OppoSycmVO;
import java.util.List;
/**
* 电商竞品-生意参谋数据(天猫)Service接口
*
* @author admin
* @date 2024-12-20
*/
public interface IOppoSycmService {
List<List<OppoSycmVO>> selectOppoSycmStoreBi(OppoSycmDto oppoSycmDto);
}
package com.link.bi.service;
import com.link.bi.pojo.request.ProductVo;
import com.link.bi.pojo.response.PrdInfoDto;
import com.sfa.common.core.web.domain.PageInfo;
import java.util.List;
......@@ -15,4 +16,6 @@ public interface IProductService {
PageInfo productPage(ProductVo productVo);
List<PrdInfoDto> selectListByCodes(List<String> codeLists);
}
package com.link.bi.service.impl;
import com.link.bi.service.IEcBaStoreDailyDataService;
import org.springframework.stereotype.Service;
/**
* 王小卤后台数据Service业务层处理
*
* @author admin
* @date 2024-12-19
*/
@Service
public class EcBaStoreDailyDataServiceImpl implements IEcBaStoreDailyDataService {
}
package com.link.bi.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.link.bi.config.listener.EcGoodsSupplyDemandListener;
import com.link.bi.domain.dao.IEcGoodsSupplyDemandDao;
import com.link.bi.domain.entity.EcGoodsSupplyDemand;
import com.link.bi.domain.mapper.EcGoodsSupplyDemandMapper;
import com.link.bi.domain.wq.MarketDetailWq;
import com.link.bi.pojo.request.EcStoreVo;
import com.link.bi.pojo.response.PrdInfoDto;
import com.link.bi.service.IEcGoodsSupplyDemandService;
import com.link.bi.service.IProductService;
import com.sfa.common.core.web.domain.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 电商-货物供需Service业务层处理
*
* @author admin
* @date 2024-12-05
*/
@Service
@Slf4j
public class EcGoodsSupplyDemandServiceImpl extends ServiceImpl<EcGoodsSupplyDemandMapper, EcGoodsSupplyDemand> implements IEcGoodsSupplyDemandService {
@Autowired
IEcGoodsSupplyDemandDao demandDao;
@Autowired
IProductService productService;
/**
* 导入数据
* @param multipartFile
* @param year
* @return
*/
@Override
public List<EcGoodsSupplyDemand> importData(MultipartFile multipartFile, Integer year) {
// 上传并解析excel
File file = transferToFile(multipartFile);
List<String> codeLists = new ArrayList<>();
List<PrdInfoDto> prdInfoDtos = productService.selectListByCodes(codeLists);
// 创建EcGoodsSupplyDemandListener实例
EcGoodsSupplyDemandListener listener = new EcGoodsSupplyDemandListener(this, prdInfoDtos, year);
// 读取文件内容
EasyExcel.read(file, listener).ignoreEmptyRow(true)
.headRowNumber(4).sheet("电商-需求").doRead();
// 获取读取到的数据
List<EcGoodsSupplyDemand> data = listener.getDemandList();
return data;
}
/**
* 文件转File
* 参考https://blog.csdn.net/qq_42383970/article/details/120201524
*
* @param multipartFile
* @return
*/
public File transferToFile(MultipartFile multipartFile) {
// 选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。
File file = null;
try {
String originalFilename = multipartFile.getOriginalFilename();
String[] filename = originalFilename.split("\\.");
file = File.createTempFile(filename[0], filename[1] + ".");
multipartFile.transferTo(file);
file.deleteOnExit();
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
}
return file;
}
/**
* 批量保存
*/
@Override
public void batchSaveEcGoodsSupplyDemands(List<EcGoodsSupplyDemand> demandList) {
demandDao.batchSaveEcGoodsSupplyDemands(demandList);
}
@Override
public void deleteByYear(Integer year) {
if (ObjectUtil.isEmpty(year)) {
year = DateUtil.thisYear();
}
demandDao.deleteByYear(year);
}
/**
* bi报表查询
* @param mqw
* @return
*/
@Override
public Map<String, Map<String, String>> getSupplyDemandYearAndMonth(MarketDetailWq mqw) {
return demandDao.getSupplyDemandYearAndMonth(mqw);
}
@Override
public PageInfo selectPage(EcStoreVo ecStoreVo) {
return null;
}
}
package com.link.bi.service.impl;
import com.link.bi.domain.dao.IOppoCmmDao;
import com.link.bi.domain.entity.OppoCmm;
import com.link.bi.domain.wq.OppoCmmWq;
import com.link.bi.pojo.request.OppoCmmDto;
import com.link.bi.pojo.response.OppoCmmVO;
import com.link.bi.service.IOppoCmmService;
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-19
*/
@Service
public class OppoCmmServiceImpl implements IOppoCmmService {
@Autowired
IOppoCmmDao oppoCmmDao;
@Override
public List<List<OppoCmmVO>> selectOppoCmmZbjBiList(OppoCmmDto oppoCmmDto) {
// 设置默认入参时间,倒数30天
// Optional判断入参为空设置默认值
Date startDate = Optional.ofNullable(oppoCmmDto.getStartDate())
.orElse(DateUtils.addDays(DateUtils.dateStart(new Date()), -31));
Date endDate = Optional.ofNullable(oppoCmmDto.getEndDate()).orElse(
DateUtils.addDays(DateUtils.dateStart(new Date()), -1));
oppoCmmDto.setStartDate(startDate);
oppoCmmDto.setEndDate(endDate);
OppoCmmWq wq = new OppoCmmWq();
BeanUtils.copyProperties(oppoCmmDto, wq);
List<OppoCmm> oppoCmms = oppoCmmDao.selectList(wq);
List<List<OppoCmmVO>> vos = new ArrayList<>();
// 按照name分成不同的list
Map<String, List<OppoCmm>> map = oppoCmms.stream()
.collect(Collectors.groupingBy(OppoCmm::getName));
map.forEach((name, objects) -> {
System.out.println("Name: " + name);
List<OppoCmmVO> oppoCmmVOS = new ArrayList<>();
objects.forEach(obj -> {
OppoCmmVO vo = new OppoCmmVO();
BeanUtils.copyProperties(obj, vo);
vo.setSaleSumTotal(vo.getSaleSumTotal().setScale(2));
oppoCmmVOS.add(vo);
});
vos.add(oppoCmmVOS);
});
return vos;
}
}
package com.link.bi.service.impl;
import com.link.bi.domain.dao.IOppoSycmDao;
import com.link.bi.domain.entity.OppoSycm;
import com.link.bi.domain.wq.OppoSycmWq;
import com.link.bi.pojo.request.OppoSycmDto;
import com.link.bi.pojo.response.OppoSycmVO;
import com.link.bi.service.IOppoSycmService;
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 OppoSycmServiceImpl implements IOppoSycmService
{
@Autowired
IOppoSycmDao sycmDao;
@Override
public List<List<OppoSycmVO>> selectOppoSycmStoreBi(OppoSycmDto oppoSycmDto) {
// 设置默认入参时间,倒数30天
// Optional判断入参为空设置默认值
Date startDate = Optional.ofNullable(oppoSycmDto.getStartDate())
.orElse(DateUtils.addDays(DateUtils.dateStart(new Date()), -31));
Date endDate = Optional.ofNullable(oppoSycmDto.getEndDate()).orElse(
DateUtils.addDays(DateUtils.dateStart(new Date()), -1));
oppoSycmDto.setStartDate(startDate);
oppoSycmDto.setEndDate(endDate);
OppoSycmWq wq = new OppoSycmWq();
BeanUtils.copyProperties(oppoSycmDto, wq);
List<OppoSycm> oppoSycms = sycmDao.selectList(wq);
List<List<OppoSycmVO>> lists = new ArrayList<>();
// 按照name分成不同的list
Map<String, List<OppoSycm>> map = oppoSycms.stream()
.collect(Collectors.groupingBy(OppoSycm::getPlatformStore));
map.forEach((name, objects) -> {
// System.out.println("Name: " + name);
List<OppoSycmVO> oppoCmmVOS = new ArrayList<>();
objects.forEach(obj -> {
OppoSycmVO vo = new OppoSycmVO();
BeanUtils.copyProperties(obj, vo);
oppoCmmVOS.add(vo);
});
lists.add(oppoCmmVOS);
});
return lists;
}
}
......@@ -3,6 +3,7 @@ package com.link.bi.service.impl;
import com.link.bi.domain.dao.IProductDao;
import com.link.bi.domain.wq.ProductWq;
import com.link.bi.pojo.request.ProductVo;
import com.link.bi.pojo.response.PrdInfoDto;
import com.link.bi.service.IProductService;
import com.sfa.common.core.web.domain.PageInfo;
import org.springframework.beans.BeanUtils;
......@@ -30,8 +31,14 @@ public class ProductServiceImpl implements IProductService {
@Override
public PageInfo productPage(ProductVo productVo) {
ProductWq qw = new ProductWq();
BeanUtils.copyProperties(productVo,qw);
BeanUtils.copyProperties(productVo, qw);
qw.setPrdNameLike(productVo.getPrdName());
return productDao.productPage(qw);
}
@Override
public List<PrdInfoDto> selectListByCodes(List<String> prdCodes) {
List<PrdInfoDto> prdInfos = productDao.selectListByCodes(prdCodes);
return prdInfos;
}
}
......@@ -5,10 +5,10 @@ import com.link.bi.domain.dao.IEcMarketDailyDetailDao;
import com.link.bi.domain.wq.MarketDetailWq;
import com.link.bi.pojo.request.MarketSummaryVo;
import com.link.bi.pojo.response.MarketSummaryDto;
import com.link.bi.service.IEcGoodsSupplyDemandService;
import com.link.bi.service.ISummaryMarketDailyDetailService;
import com.sfa.common.redis.keys.RedisKeyBi;
import com.sfa.common.redis.service.RedisService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -29,7 +29,8 @@ public class SummaryMarketDailyDetailImpl implements ISummaryMarketDailyDetailSe
IEcMarketDailyDetailDao ecMarketDailyDetailDao;
@Autowired
RedisService redisService;
@Autowired
IEcGoodsSupplyDemandService supplyDemandService;
@Override
public Map marketSummary(MarketSummaryVo summaryVo) {
MarketDetailWq mqw = new MarketDetailWq();
......@@ -49,6 +50,12 @@ public class SummaryMarketDailyDetailImpl implements ISummaryMarketDailyDetailSe
mDto.setTargetSaleSum(onlyPlatform ? new BigDecimal(tMap.get(String.valueOf(mDto.getPlatformId()))) : BigDecimal.ZERO);
tMap.remove(String.valueOf(mDto.getPlatformId()));
}
// 获取平台-年度和月度的货需数据:
Map<String, Map<String, String>> supplyDemandYearAndMonthMap = supplyDemandService.getSupplyDemandYearAndMonth(mqw);
for (MarketSummaryDto mDto : marketSummaryDtos) {
mDto.setGoodsSupplyDemandCountY(onlyPlatform ? new BigDecimal(supplyDemandYearAndMonthMap.get("year").get(String.valueOf(mDto.getPlatformId()))) : BigDecimal.ZERO);
mDto.setGoodsSupplyDemandCountM(onlyPlatform ? new BigDecimal(supplyDemandYearAndMonthMap.get("month").get(String.valueOf(mDto.getPlatformId()))) : BigDecimal.ZERO);
}
for (Map.Entry<String, String> entry : tMap.entrySet()) {
String key = entry.getKey();
......@@ -56,7 +63,7 @@ public class SummaryMarketDailyDetailImpl implements ISummaryMarketDailyDetailSe
.setTargetSaleSum(onlyPlatform ? new BigDecimal(entry.getValue()) : BigDecimal.ZERO);
marketSummaryDtos.add(dto);
}
List<MarketSummaryDto> table = marketSummaryDtos.stream().sorted(Comparator.comparing(MarketSummaryDto::getPlatformId)).collect(Collectors.toList());
Map<Integer, List<MarketSummaryDto>> chart = chartDtos.stream().collect(Collectors.groupingBy(MarketSummaryDto::getPlatformId));
......
<?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.EcGoodsSupplyDemandMapper">
<resultMap type="com.link.bi.domain.entity.EcGoodsSupplyDemand" id="EcGoodsSupplyDemandResult">
<result property="supplyDemandId" column="supply_demand_id"/>
<result property="year" column="year"/>
<result property="month" column="month"/>
<result property="week" column="week"/>
<result property="reportDateType" column="report_date_type"/>
<result property="reportDateBegin" column="report_date_begin"/>
<result property="reportDateEnd" column="report_date_end"/>
<result property="prdCode" column="prd_code"/>
<result property="prdName" column="prd_name"/>
<result property="prdBarcode" column="prd_barcode"/>
<result property="prdStatus" column="prd_status"/>
<result property="seriesId" column="series_id"/>
<result property="series" column="series"/>
<result property="platformId" column="platform_id"/>
<result property="platform" column="platform"/>
<result property="supplyDemandAmount" column="supply_demand_amount"/>
<result property="createBy" column="create_by"/>
<result property="createUserId" column="create_user_id"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateUserId" column="update_user_id"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<sql id="selectEcGoodsSupplyDemandVo">
select supply_demand_id, year, month, week, report_date_type, report_date_begin, report_date_end, prd_code, prd_name, prd_barcode, prd_status, series_id, series, platform_id, platform, supply_demand_amount, create_by, create_user_id, create_time, update_by, update_user_id, update_time
from ec_goods_supply_demand
</sql>
<select id="selectEcGoodsSupplyDemandList" parameterType="com.link.bi.domain.entity.EcGoodsSupplyDemand"
resultMap="EcGoodsSupplyDemandResult">
<include refid="selectEcGoodsSupplyDemandVo"/>
<where>
<if test="year != null ">and year = #{year}</if>
<if test="month != null ">and month = #{month}</if>
<if test="week != null ">and week = #{week}</if>
<if test="reportDateType != null ">and report_date_type = #{reportDateType}</if>
<if test="reportDateBegin != null ">and report_date_begin = #{reportDateBegin}</if>
<if test="reportDateEnd != null ">and report_date_end = #{reportDateEnd}</if>
<if test="prdCode != null and prdCode != ''">and prd_code = #{prdCode}</if>
<if test="prdName != null and prdName != ''">and prd_name like concat('%', #{prdName}, '%')</if>
<if test="prdBarcode != null and prdBarcode != ''">and prd_barcode = #{prdBarcode}</if>
<if test="prdStatus != null ">and prd_status = #{prdStatus}</if>
<if test="seriesId != null ">and series_id = #{seriesId}</if>
<if test="series != null and series != ''">and series = #{series}</if>
<if test="platformId != null ">and platform_id = #{platformId}</if>
<if test="platform != null and platform != ''">and platform = #{platform}</if>
<if test="supplyDemandAmount != null ">and supply_demand_amount = #{supplyDemandAmount}</if>
<if test="createUserId != null ">and create_user_id = #{createUserId}</if>
<if test="updateUserId != null ">and update_user_id = #{updateUserId}</if>
</where>
</select>
<select id="selectEcGoodsSupplyDemandById" parameterType="Long" resultMap="EcGoodsSupplyDemandResult">
<include refid="selectEcGoodsSupplyDemandVo"/>
where supply_demand_id = #{supplyDemandId}
</select>
<insert id="batchSaveEcGoodsSupplyDemands" parameterType="java.util.List">
insert into ec_goods_supply_demand
(year, month, week, report_date_type, report_date_begin, report_date_end, prd_code,
prd_name, prd_barcode, prd_status, series_id, series, platform_id, platform,
supply_demand_amount, create_user_id, update_user_id)
values
<foreach collection="list" item="item" index="index" separator=",">
( #{item.year}, #{item.month}, #{item.week}, #{item.reportDateType}, #{item.reportDateBegin},
#{item.reportDateEnd}, #{item.prdCode}, #{item.prdName}, #{item.prdBarcode}, #{item.prdStatus},
#{item.seriesId},
#{item.series}, #{item.platformId}, #{item.platform}, #{item.supplyDemandAmount}, #{item.createUserId},
#{item.updateUserId})
</foreach>
</insert>
</mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论