From 3fb081217f0d1b08edc02c74b0d84bca8de8097a Mon Sep 17 00:00:00 2001 From: king Date: Wed, 11 Mar 2026 14:38:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=94=80=E5=94=AE=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/job/GenerateSalesReportJob.java | 34 +++++ .../core/framework/entity/GrBiSaAgg.java | 139 ++++++++++++++++++ .../framework/mapper/GrBiSaAggMapper.java | 22 +++ .../framework/service/IGrBiSaAggService.java | 12 ++ .../service/impl/GrBiSaAggServiceImpl.java | 79 ++++++++++ .../mapper/framework/GrBiSaAggMapper.xml | 77 ++++++++++ 6 files changed, 363 insertions(+) create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java create mode 100644 lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java create mode 100644 lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java new file mode 100644 index 0000000..c67a59e --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/config/job/GenerateSalesReportJob.java @@ -0,0 +1,34 @@ +package com.lideeyunji.core.framework.config.job; + +import com.lideeyunji.core.framework.service.IGrBiSaAggService; +import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant; +import com.lideeyunji.tool.framework.quartz.core.handler.JobHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 计算销售报表 + * erp_bi_data.GR_BI_PUB_GOODS + * erp_bi_data.GR_BI_PUB_SALEZONE + * erp_bi_data.GR_BI_PUB_PROVINCE + * erp_bi_data.GR_BI_PUB_SALETYPE + * erp_bi_data.GR_BI_PUB_DOSAGE + * erp_bi_data.GR_BI_PUB_CUSTOM + * erp_bi_data.GR_BI_PUB_SALER + * --> mysql erp_bi_data.yunji_gr_bi_sa_agg + */ +@Slf4j +@Component("generateSalesReportJob") +public class GenerateSalesReportJob implements JobHandler { + + @Resource + private IGrBiSaAggService grBiSaAggService; + public String execute(String param) { + log.info("*********** 开始生成销售报表 ************"); + grBiSaAggService.generateSalesReportJob(lideeYunJiBaseConstant.DS_ERP_BI_DATA); + log.info("*********** 生成销售报表完成 ************"); + return "*********** 生成销售报表完成 ************"; + } +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java new file mode 100644 index 0000000..f5955bc --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/entity/GrBiSaAgg.java @@ -0,0 +1,139 @@ +package com.lideeyunji.core.framework.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 lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +@TableName("yunji_gr_bi_sa_agg") +@Data +@EqualsAndHashCode +public class GrBiSaAgg implements Serializable { + private final static long serialVersionUID = 1L; + + @TableId(value = "ID", type = IdType.INPUT) + private Integer id; + + @TableField(value = "USEYEAR") + private Integer useYear; + + @TableField(value = "USEMONTH") + private Integer useMonth; + + @TableField(value = "ZONEID") + private String zoneId; + + @TableField(value = "ZONENAME") + private String zoneName; + + @TableField(value = "SALETYPEID") + private String saleTypeId; + + @TableField(value = "SALETYPENAME") + private String saleTypeName; + + @TableField(value = "CUSTOMID") + private String customId; + + @TableField(value = "CUSTOMNAME") + private String customName; + + @TableField(value = "DOSAGEID") + private String dosageId; + + @TableField(value = "DOSAGENAME") + private String dosageName; + + @TableField(value = "GOODSNAME") + private String goodsName; + + @TableField(value = "PROVINCEID") + private String provinceId; + + @TableField(value = "PROVINCENAME") + private String provinceName; + + @TableField(value = "SALERID") + private String salerId; + + @TableField(value = "SALERNAME") + private String salerName; + + @TableField(value = "MONTHSAQTY") + private String monthSaqty; + + @TableField(value = "THISSAQTY") + private String thisSaqty; + + @TableField(value = "LASTSAQTY") + private String lastSaqty; + + @TableField(value = "MONTHSAMONEY") + private String monthSaMoney; + + @TableField(value = "THISSAMONEY") + private String thisSaMoney; + + @TableField(value = "LASTSAMONEY") + private String lastSaMoney; + + @TableField(value = "MONTHPROFIT") + private String monthProfit; + + @TableField(value = "THISPROFIT") + private String thisProfit; + + @TableField(value = "LASTPROFIT") + private String lastProfit; + + @TableField(value = "MONTHCOST") + private String monthCost; + + @TableField(value = "THISCOST") + private String thisCost; + + @TableField(value = "LASTCOST") + private String lastCost; + + @TableField(value = "MONTHPROFITRATE") + private String monthProfitRate; + + @TableField(value = "THISPROFITRATE") + private String thisProfitRate; + + @TableField(value = "LASTPROFITRATE") + private String lastProfitRate; + + @TableField(value = "MONTHSAMONEYSHARE") + private String monthSaMoneyShare; + + @TableField(value = "THISSAMONEYSHARE") + private String thisSaMoneyShare; + + @TableField(value = "LASTSAMONEYSHARE") + private String lastSaMoneyShare; + + @TableField(value = "MONTHPROFITSHARE") + private String monthProfitShare; + + @TableField(value = "THISPROFITSHARE") + private String thisProfitShare; + + @TableField(value = "LASTPROFITSHARE") + private String lastProfitShare; + + @TableField(value = "SAMONEYGROWTH") + private String saMoneyGrowth; + + @TableField(value = "PROFITGROWTH") + private String profitGrowth; + + @TableField(value = "PROFITCHANGE") + private String profitChange; + +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java new file mode 100644 index 0000000..033bc48 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/mapper/GrBiSaAggMapper.java @@ -0,0 +1,22 @@ +package com.lideeyunji.core.framework.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.lideeyunji.core.framework.entity.GrBiSaAgg; +import com.lideeyunji.tool.framework.common.constant.lideeYunJiBaseConstant; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +@DS(lideeYunJiBaseConstant.DS_ERP_BI_DATA) +public interface GrBiSaAggMapper extends BaseMapper { + + + List generateSalesReport(@Param("pastYearMonth") Integer pastYearMonth, + @Param("currentYearMonth") Integer currentYearMonth); + + int deleteSalesReport(@Param("pastYearMonth") Integer pastYearMonth, + @Param("currentYearMonth") Integer currentYearMonth); + +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java new file mode 100644 index 0000000..0556b34 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/IGrBiSaAggService.java @@ -0,0 +1,12 @@ +package com.lideeyunji.core.framework.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.lideeyunji.core.framework.entity.GrBiSaAgg; +import org.apache.ibatis.annotations.Param; + +public interface IGrBiSaAggService extends IService { + + //同步销售明细表 + void generateSalesReportJob(@Param("dataSourceType") String dataSourceType); + +} diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java new file mode 100644 index 0000000..7651291 --- /dev/null +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/service/impl/GrBiSaAggServiceImpl.java @@ -0,0 +1,79 @@ +package com.lideeyunji.core.framework.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.lideeyunji.core.framework.entity.GrBiSaAgg; +import com.lideeyunji.core.framework.mapper.GrBiSaAggMapper; +import com.lideeyunji.core.framework.service.IGrBiSaAggService; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +@Slf4j +@Service +public class GrBiSaAggServiceImpl extends ServiceImpl implements IGrBiSaAggService { + + /** + * 计算销售报表 + */ + @Override + @Transactional + @DS(value = "#dataSourceType") + public void generateSalesReportJob(@Param("dataSourceType") String dataSourceType) { + //获取本地mysql数据库中表中UPDATE_TIME最新的数据 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().orderByDesc(GrBiSaAgg::getUseYear, GrBiSaAgg::getUseMonth).last("LIMIT 1"); + GrBiSaAgg grBiSaAgg = this.baseMapper.selectOne(queryWrapper); + Integer lastUserMonth = grBiSaAgg.getUseMonth(); + Integer lastUserYear = grBiSaAgg.getUseYear(); + // 获取当前时间的年和月 + LocalDateTime now = LocalDateTime.now(); + int currentYear = now.getYear(); + int currentMonth = now.getMonthValue(); + + // 获取三个月前的时间和年月 + LocalDateTime threeMonthsAgo = now.minusMonths(3); + int pastYear = threeMonthsAgo.getYear(); + int pastMonth = threeMonthsAgo.getMonthValue(); + + log.info("最后更新的年月:{}年{}月", lastUserYear, lastUserMonth); + log.info("当前:{}年{}月", currentYear, currentMonth); + log.info("三个月前:{}年{}月", pastYear, pastMonth); + if (lastUserYear < pastYear || (lastUserYear == pastYear && lastUserMonth < pastMonth)) { + pastYear = lastUserYear; + pastMonth = lastUserMonth; + + } + log.info("开始时间:{}年{}月, 结束时间:{}年{}月", pastYear, pastMonth, currentYear, currentMonth); + // 获取三个月前的数据 + List grBiSaSetdtlList = this.baseMapper.generateSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); + if (CollUtil.isEmpty(grBiSaSetdtlList)) { + return; + } + //保存数据 + removeAndSaveBatch(pastYear, pastMonth, currentYear, currentMonth, grBiSaSetdtlList); + } + + + //批量新增 + + public void removeAndSaveBatch(Integer pastYear, Integer pastMonth, Integer currentYear, Integer currentMonth, List grBiSaSetdtlList) { + + int reNum = this.baseMapper.deleteSalesReport(pastYear * 100 + pastMonth, currentYear * 100 + currentMonth); + log.info("删除数量:{}", reNum); + int result = 0; + for (GrBiSaAgg grBiSaSetdtl : grBiSaSetdtlList) { + int re = this.baseMapper.insert(grBiSaSetdtl); + if (re < 1) { + throw new RuntimeException("批量新增异常"); + } + result += re; + } + } + +} diff --git a/lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml b/lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml new file mode 100644 index 0000000..8c64ea9 --- /dev/null +++ b/lidee-core/src/main/resources/mapper/framework/GrBiSaAggMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + delete from yunji_gr_bi_sa_agg + where (USEYEAR * 100 + USEMONTH) BETWEEN #{pastYearMonth} AND #{currentYearMonth} + +