## Feat - 业绩统计

This commit is contained in:
sangelxiu1 2025-09-23 11:54:03 +08:00
parent a2172da9ed
commit 07f8dbe8d3
9 changed files with 390 additions and 0 deletions

View File

@ -0,0 +1,19 @@
package com.hzs.report.order;
import com.hzs.common.core.domain.R;
import com.hzs.system.sys.dto.ApprovalBusinessResultDTO;
/**
* 订单服务对外提供接口
*/
public interface IPerformanceSummaryServiceApi {
/**
* 按天创建统计数据
*
* @param day
* @return
*/
R<Boolean> createDataByDay(String day);
}

View File

@ -0,0 +1,20 @@
package com.hzs.report.order.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 销售业绩统计表 前端控制器
* </p>
*
* @author sangelxiu1
* @since 2025-09-22
*/
@RestController
@RequestMapping("/order/performance-summary")
public class CuMemberPerformanceSummaryController {
}

View File

@ -0,0 +1,21 @@
package com.hzs.report.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.report.CuMemberPerformanceSummary;
import com.hzs.common.domain.sale.order.SaOrder;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* <p>
* 销售业绩统计表 Mapper 接口
* </p>
*
* @author sangelxiu1
* @since 2025-09-22
*/
public interface CuMemberPerformanceSummaryMapper extends BaseMapper<CuMemberPerformanceSummary> {
List<SaOrder> getOrderByDay(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("orderTypeList") List<Integer> orderTypeList);
}

View File

@ -0,0 +1,24 @@
package com.hzs.report.order.provider;
import com.hzs.common.core.domain.R;
import com.hzs.report.order.IPerformanceSummaryServiceApi;
import com.hzs.report.order.service.ICuMemberPerformanceSummaryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import javax.annotation.Resource;
/**
* 销售业绩统计
*/
@DubboService
@Slf4j
public class PerformanceSummaryProvider implements IPerformanceSummaryServiceApi {
@Resource
ICuMemberPerformanceSummaryService iCuMemberPerformanceSummaryService;
@Override
public R<Boolean> createDataByDay(String day) {
iCuMemberPerformanceSummaryService.createDataByDay(day);
return R.ok();
}
}

View File

@ -0,0 +1,16 @@
package com.hzs.report.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.report.CuMemberPerformanceSummary;
/**
* <p>
* 销售业绩统计表 服务类
* </p>
*
* @author sangelxiu1
* @since 2025-09-22
*/
public interface ICuMemberPerformanceSummaryService extends IService<CuMemberPerformanceSummary> {
void createDataByDay(String day);
}

View File

@ -0,0 +1,73 @@
package com.hzs.report.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.report.CuMemberPerformanceSummary;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.report.order.mapper.CuMemberPerformanceSummaryMapper;
import com.hzs.report.order.service.ICuMemberPerformanceSummaryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 销售业绩统计表 服务实现类
* </p>
*
* @author sangelxiu1
* @since 2025-09-22
*/
@Service
@Slf4j
public class CuMemberPerformanceSummaryServiceImpl extends ServiceImpl<CuMemberPerformanceSummaryMapper, CuMemberPerformanceSummary> implements ICuMemberPerformanceSummaryService {
@Override
public void createDataByDay(String day) {
Date startDate = DateUtils.getStartOfDay(day);
Date endDate = DateUtils.getEndOfDay(day);
LambdaQueryWrapper<CuMemberPerformanceSummary> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberPerformanceSummary::getSummaryDate, startDate);
baseMapper.delete(queryWrapper);
List<Integer> orderTypeList = Arrays.asList(41, 42, 43);
List<SaOrder> orderList = baseMapper.getOrderByDay(startDate, endDate, orderTypeList);
Map<Integer, List<SaOrder>> groupedOrders = orderList.stream().collect(Collectors.groupingBy(SaOrder::getOrderType));
CuMemberPerformanceSummary summary = CuMemberPerformanceSummary.getInitCuMemberPerformanceSummary(startDate);
for (SaOrder saOrder : groupedOrders.get(41)) {
summary.setRetailRegisterAmount(summary.getRetailDiscountAmount().add(saOrder.getOrderAmount()));
summary.setRetailRegisterPv(summary.getRetailDiscountPv().add(saOrder.getOrderAchieve()));
summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount()));
summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount()));
}
for (SaOrder saOrder : groupedOrders.get(42)) {
summary.setRetailUpgradeAmount(summary.getRetailUpgradeAmount().add(saOrder.getOrderAmount()));
summary.setRetailUpgradePv(summary.getRetailUpgradePv().add(saOrder.getOrderAchieve()));
summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount()));
summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount()));
}
for (SaOrder saOrder : groupedOrders.get(43)) {
summary.setRetailRepurchaseAmount(summary.getRetailRepurchaseAmount().add(saOrder.getOrderAmount()));
summary.setRetailRepurchasePv(summary.getRetailRepurchasePv().add(saOrder.getOrderAchieve()));
summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount()));
summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount()));
}
for (SaOrder saOrder : groupedOrders.get(44)) {
summary.setRetailDiscountAmount(summary.getRetailDiscountAmount().add(saOrder.getOrderAmount()));
summary.setDividendPv(summary.getDividendPv().add(saOrder.getOrderAchieve()));
summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount()));
summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount()));
}
summary.setDividendPv(summary.getTotalPv().multiply(new BigDecimal("0.015")));
baseMapper.insert(summary);
}
}

View File

@ -0,0 +1,49 @@
<?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.hzs.report.order.mapper.CuMemberPerformanceSummaryMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.hzs.common.domain.report.CuMemberPerformanceSummary">
<result column="DEL_FLAG" property="delFlag" />
<result column="PK_COUNTRY" property="pkCountry" />
<result column="CREATION_TIME" property="creationTime" />
<result column="MODIFIED_TIME" property="modifiedTime" />
<result column="PK_CREATOR" property="pkCreator" />
<result column="PK_MODIFIED" property="pkModified" />
<result column="PK_ID" property="pkId" />
<result column="SUMMARY_DATE" property="summaryDate" />
<result column="RETAIL_REGISTER_AMOUNT" property="retailRegisterAmount" />
<result column="RETAIL_REGISTER_PV" property="retailRegisterPv" />
<result column="RETAIL_UPGRADE_AMOUNT" property="retailUpgradeAmount" />
<result column="RETAIL_UPGRADE_PV" property="retailUpgradePv" />
<result column="RETAIL_REPURCHASE_AMOUNT" property="retailRepurchaseAmount" />
<result column="RETAIL_REPURCHASE_PV" property="retailRepurchasePv" />
<result column="RETAIL_DISCOUNT_AMOUNT" property="retailDiscountAmount" />
<result column="RETAIL_DISCOUNT_PV" property="retailDiscountPv" />
<result column="TOTAL_AMOUNT" property="totalAmount" />
<result column="TOTAL_PV" property="totalPv" />
<result column="DIVIDEND_PV" property="dividendPv" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
DEL_FLAG,
PK_COUNTRY,
CREATION_TIME,
MODIFIED_TIME,
PK_CREATOR,
PK_MODIFIED,
PK_ID, SUMMARY_DATE, RETAIL_REGISTER_AMOUNT, RETAIL_REGISTER_PV, RETAIL_UPGRADE_AMOUNT, RETAIL_UPGRADE_PV, RETAIL_REPURCHASE_AMOUNT, RETAIL_REPURCHASE_PV, RETAIL_DISCOUNT_AMOUNT, RETAIL_DISCOUNT_PV, TOTAL_AMOUNT, TOTAL_PV, DIVIDEND_PV
</sql>
<select id="getOrderByDay" resultType="com.hzs.common.domain.sale.order.SaOrder">
select * from sa_order
where del_flag = 0
and order_status = 1
and pay_time between #{startDate} and #{endDate}
and order_type in
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>

View File

@ -0,0 +1,125 @@
package com.hzs.common.domain.report;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hzs.common.core.web.domain.BaseEntity;
import lombok.*;
import lombok.experimental.Accessors;
/**
* <p>
* 销售业绩统计表
* </p>
*
* @author sangelxiu1
* @since 2025-09-22
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("CU_MEMBER_PERFORMANCE_SUMMARY")
@KeySequence("C_M_PERFORMANCE_SUMMARY_SEQ")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CuMemberPerformanceSummary extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableField("PK_ID")
private Long pkId;
/**
* 统计日期
*/
@TableField("SUMMARY_DATE")
private Date summaryDate;
/**
* 精品专区销售金额
*/
@TableField("RETAIL_REGISTER_AMOUNT")
private BigDecimal retailRegisterAmount;
/**
* 精品专区销售业绩
*/
@TableField("RETAIL_REGISTER_PV")
private BigDecimal retailRegisterPv;
/**
* 甄选专区销售金额
*/
@TableField("RETAIL_UPGRADE_AMOUNT")
private BigDecimal retailUpgradeAmount;
/**
* 甄选专区销售业绩
*/
@TableField("RETAIL_UPGRADE_PV")
private BigDecimal retailUpgradePv;
/**
* 商城专区销售金额
*/
@TableField("RETAIL_REPURCHASE_AMOUNT")
private BigDecimal retailRepurchaseAmount;
/**
* 商城专区销售业绩
*/
@TableField("RETAIL_REPURCHASE_PV")
private BigDecimal retailRepurchasePv;
/**
* 五折专区销售金额
*/
@TableField("RETAIL_DISCOUNT_AMOUNT")
private BigDecimal retailDiscountAmount;
/**
* 五折专区销售业绩
*/
@TableField("RETAIL_DISCOUNT_PV")
private BigDecimal retailDiscountPv;
/**
* 当期销售金额合计
*/
@TableField("TOTAL_AMOUNT")
private BigDecimal totalAmount;
/**
* 当期销售业绩合计
*/
@TableField("TOTAL_PV")
private BigDecimal totalPv;
/**
* 当日分红合计(分红所有专区PV值的1.5%每天进行记录)
*/
@TableField("DIVIDEND_PV")
private BigDecimal dividendPv;
public static CuMemberPerformanceSummary getInitCuMemberPerformanceSummary(Date summaryDate){
return CuMemberPerformanceSummary.builder()
.summaryDate(summaryDate)
.retailRegisterAmount(BigDecimal.ZERO)
.retailRegisterPv(BigDecimal.ZERO)
.retailUpgradeAmount(BigDecimal.ZERO)
.retailUpgradePv(BigDecimal.ZERO)
.retailRepurchaseAmount(BigDecimal.ZERO)
.retailRepurchasePv(BigDecimal.ZERO)
.retailDiscountAmount(BigDecimal.ZERO)
.retailDiscountPv(BigDecimal.ZERO)
.totalAmount(BigDecimal.ZERO)
.totalPv(BigDecimal.ZERO)
.dividendPv(BigDecimal.ZERO)
.build();
}
}

View File

@ -0,0 +1,43 @@
CREATE TABLE CU_MEMBER_PERFORMANCE_SUMMARY
(
"PK_ID" NUMBER(20,0) NOT NULL ENABLE,
"SUMMARY_DATE" DATE NOT NULL ENABLE,
"RETAIL_REGISTER_AMOUNT" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"RETAIL_REGISTER_PV" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"RETAIL_UPGRADE_AMOUNT" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"RETAIL_UPGRADE_PV" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"RETAIL_REPURCHASE_AMOUNT" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"RETAIL_REPURCHASE_PV" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"RETAIL_DISCOUNT_AMOUNT" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"RETAIL_DISCOUNT_PV" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"TOTAL_AMOUNT" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"TOTAL_PV" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"DIVIDEND_PV" NUMBER(17,6) DEFAULT 0 NOT NULL ENABLE,
"DEL_FLAG" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
"PK_COUNTRY" NUMBER(4,0) DEFAULT 1 NOT NULL ENABLE,
"CREATION_TIME" DATE DEFAULT sysdate NOT NULL ENABLE,
"MODIFIED_TIME" DATE,
"PK_CREATOR" NUMBER(20,0) NOT NULL ENABLE,
"PK_MODIFIED" NUMBER(20,0)
);
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."SUMMARY_DATE" IS '统计日期';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_REGISTER_AMOUNT" IS '精品专区销售金额';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_REGISTER_PV" IS '精品专区销售业绩';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_UPGRADE_AMOUNT" IS '甄选专区销售金额';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_UPGRADE_PV" IS '甄选专区销售业绩';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_REPURCHASE_AMOUNT" IS '商城专区销售金额';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_REPURCHASE_PV" IS '商城专区销售业绩';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_DISCOUNT_AMOUNT" IS '五折专区销售金额';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."RETAIL_DISCOUNT_PV" IS '五折专区销售业绩';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."TOTAL_AMOUNT" IS '当期销售金额合计';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."TOTAL_PV" IS '当期销售业绩合计';
COMMENT ON COLUMN CU_MEMBER_PERFORMANCE_SUMMARY."DIVIDEND_PV" IS '当日分红合计(分红所有专区PV值的1.5%每天进行记录)';
COMMENT ON TABLE "CU_MEMBER_PERFORMANCE_SUMMARY" IS '销售业绩统计表';
CREATE SEQUENCE C_M_PERFORMANCE_SUMMARY_SEQ
START WITH 1
INCREMENT BY 1;