From c003cbb11cdeb48daa8dfaf843fa89bf3adf33b6 Mon Sep 17 00:00:00 2001 From: cst61 Date: Sun, 8 Feb 2026 17:10:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=BB=9F=E8=AE=A1=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HikariCP连接池问题分析.md | 3 + customer_management_statistics.sql | 16 ++ .../CustomerManagementController.java | 4 +- ...ustomerManagementStatisticsController.java | 148 ++++++++++++++ .../entity/CustomerManagementStatistics.java | 75 ++++++++ .../CustomerManagementStatisticsMapper.java | 88 +++++++++ .../ICustomerManagementStatisticsService.java | 58 ++++++ ...stomerManagementStatisticsServiceImpl.java | 182 ++++++++++++++++++ .../CustomerManagementStatisticsMapper.xml | 12 ++ 9 files changed, 584 insertions(+), 2 deletions(-) create mode 100644 customer_management_statistics.sql create mode 100644 src/main/java/com/rj/controller/CustomerManagementStatisticsController.java create mode 100644 src/main/java/com/rj/entity/CustomerManagementStatistics.java create mode 100644 src/main/java/com/rj/mapper/CustomerManagementStatisticsMapper.java create mode 100644 src/main/java/com/rj/service/ICustomerManagementStatisticsService.java create mode 100644 src/main/java/com/rj/service/impl/CustomerManagementStatisticsServiceImpl.java create mode 100644 src/main/resources/mapper/CustomerManagementStatisticsMapper.xml diff --git a/HikariCP连接池问题分析.md b/HikariCP连接池问题分析.md index a39001b..fdb3669 100644 --- a/HikariCP连接池问题分析.md +++ b/HikariCP连接池问题分析.md @@ -140,6 +140,9 @@ hikari: + + + diff --git a/customer_management_statistics.sql b/customer_management_statistics.sql new file mode 100644 index 0000000..d2d715d --- /dev/null +++ b/customer_management_statistics.sql @@ -0,0 +1,16 @@ +CREATE TABLE `customer_management_statistics` ( + `id` VARCHAR(36) NOT NULL COMMENT '主键ID', + `tenant_id` VARCHAR(64) DEFAULT NULL COMMENT '租户ID', + `dealership_id` VARCHAR(64) DEFAULT NULL COMMENT '经销商ID', + `dealership_name` VARCHAR(255) DEFAULT NULL COMMENT '经销商名称', + `sales_id` VARCHAR(64) DEFAULT NULL COMMENT '销售ID', + `count_by_dealership` INT DEFAULT 0 COMMENT '按经销商统计数量', + `count_by_sales` INT DEFAULT 0 COMMENT '按销售统计数量', + `count_by_project` INT DEFAULT 0 COMMENT '按项目统计数量', + `statistics_date` DATE NOT NULL COMMENT '统计日期', + `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`), + KEY `idx_statistics_date` (`statistics_date`) COMMENT '统计日期索引' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户统计表'; + diff --git a/src/main/java/com/rj/controller/CustomerManagementController.java b/src/main/java/com/rj/controller/CustomerManagementController.java index a9804a5..b69b02d 100644 --- a/src/main/java/com/rj/controller/CustomerManagementController.java +++ b/src/main/java/com/rj/controller/CustomerManagementController.java @@ -86,11 +86,11 @@ public class CustomerManagementController { queryWrapper.eq(AudioManagement::getSalesPhone, salesPhone.trim()) .eq(AudioManagement::getServiceStatus, AudioManagementConstants.SERVICE_STATUS_IN_SERVICE); long count = audioManagementService.count(queryWrapper); - if (count > 0) { + if (count > 0) { //如果正在服务,就直接返回,不能新增记录 result.put("success", true); result.put("message", isUpdate ? "客户信息更新成功" : "客户添加成功"); result.put("message", "该销售人员正在服务其他客户,无法创建新的服务记录"); - return ResponseEntity.badRequest().body(result); + return ResponseEntity.badRequest().body(result); //如果正在服务,就直接返回,不能新增记录 } } AudioManagement audioRecord = buildAudioRecordFromCustomer(customerManagement, now); diff --git a/src/main/java/com/rj/controller/CustomerManagementStatisticsController.java b/src/main/java/com/rj/controller/CustomerManagementStatisticsController.java new file mode 100644 index 0000000..05dc463 --- /dev/null +++ b/src/main/java/com/rj/controller/CustomerManagementStatisticsController.java @@ -0,0 +1,148 @@ +package com.rj.controller; + +import com.rj.common.Result; +import com.rj.entity.CustomerManagementStatistics; +import com.rj.service.ICustomerManagementStatisticsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDate; +import java.util.List; + +/** + * 客户统计控制器 + * + * @author 李中华 ,spllzh + * @since 2025-08-07 + */ +@Tag(name = "客户统计", description = "客户统计相关接口") +@RestController +@RequestMapping("/api/customer-statistics") +public class CustomerManagementStatisticsController { + + @Autowired + private ICustomerManagementStatisticsService customerStatisticsService; + + /** + * 手动生成指定日期的统计数据 + */ + @Operation(summary = "手动生成指定日期的统计数据", description = "手动触发指定日期的客户统计") + @PostMapping("/generate") + public Result generateStatistics( + @Parameter(description = "统计日期,格式:yyyy-MM-dd") + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) { + try { + int count = customerStatisticsService.generateStatisticsByDate(date); + Result result = Result.ok(count); + result.setMsg("统计生成成功"); + return result; + } catch (Exception e) { + return Result.error("统计生成失败:" + e.getMessage()); + } + } + + /** + * 查询指定日期范围的统计数据 + */ + @Operation(summary = "查询指定日期范围的统计数据", description = "查询指定日期范围内的客户统计数据") + @GetMapping("/range") + public Result getStatisticsByDateRange( + @Parameter(description = "开始日期,格式:yyyy-MM-dd") + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @Parameter(description = "结束日期,格式:yyyy-MM-dd") + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate) { + try { + List statistics = customerStatisticsService.getStatisticsByDateRange(startDate, endDate); + Result result = Result.ok(statistics); + result.setMsg("查询成功"); + return result; + } catch (Exception e) { + return Result.error("查询失败:" + e.getMessage()); + } + } + + /** + * 查询指定经销商的统计数据 + */ + @Operation(summary = "查询指定经销商的统计数据", description = "查询指定经销商在指定日期范围内的客户统计数据") + @GetMapping("/dealership/{dealershipId}") + public Result getStatisticsByDealership( + @Parameter(description = "经销商ID") + @PathVariable String dealershipId, + @Parameter(description = "开始日期,格式:yyyy-MM-dd") + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @Parameter(description = "结束日期,格式:yyyy-MM-dd") + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate) { + try { + List statistics = customerStatisticsService.getStatisticsByDealership(dealershipId, startDate, endDate); + Result result = Result.ok(statistics); + result.setMsg("查询成功"); + return result; + } catch (Exception e) { + return Result.error("查询失败:" + e.getMessage()); + } + } + + /** + * 查询指定销售的统计数据 + */ + @Operation(summary = "查询指定销售的统计数据", description = "查询指定销售在指定日期范围内的客户统计数据") + @GetMapping("/sales/{salesId}") + public Result getStatisticsBySales( + @Parameter(description = "销售ID") + @PathVariable String salesId, + @Parameter(description = "开始日期,格式:yyyy-MM-dd") + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @Parameter(description = "结束日期,格式:yyyy-MM-dd") + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate) { + try { + List statistics = customerStatisticsService.getStatisticsBySales(salesId, startDate, endDate); + Result result = Result.ok(statistics); + result.setMsg("查询成功"); + return result; + } catch (Exception e) { + return Result.error("查询失败:" + e.getMessage()); + } + } + + /** + * 查询指定日期的统计数据 + */ + @Operation(summary = "查询指定日期的统计数据", description = "查询指定日期的所有客户统计数据") + @GetMapping("/date/{date}") + public Result getStatisticsByDate( + @Parameter(description = "统计日期,格式:yyyy-MM-dd") + @PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) { + try { + List statistics = customerStatisticsService.getStatisticsByDateRange(date, date); + Result result = Result.ok(statistics); + result.setMsg("查询成功"); + return result; + } catch (Exception e) { + return Result.error("查询失败:" + e.getMessage()); + } + } + + /** + * 获取统计概览(最近7天) + */ + @Operation(summary = "获取统计概览", description = "获取最近7天的客户统计概览") + @GetMapping("/overview") + public Result getStatisticsOverview() { + try { + LocalDate endDate = LocalDate.now().minusDays(1); // 昨天 + LocalDate startDate = endDate.minusDays(6); // 7天前 + List statistics = customerStatisticsService.getStatisticsByDateRange(startDate, endDate); + Result result = Result.ok(statistics); + result.setMsg("查询成功"); + return result; + } catch (Exception e) { + return Result.error("查询失败:" + e.getMessage()); + } + } +} + diff --git a/src/main/java/com/rj/entity/CustomerManagementStatistics.java b/src/main/java/com/rj/entity/CustomerManagementStatistics.java new file mode 100644 index 0000000..04c3e89 --- /dev/null +++ b/src/main/java/com/rj/entity/CustomerManagementStatistics.java @@ -0,0 +1,75 @@ +package com.rj.entity; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 客户统计表 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-08-07 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("customer_management_statistics") +@Schema(description="客户统计表") +public class CustomerManagementStatistics implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "主键ID") + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + @Schema(description = "租户ID") + @TableField("tenant_id") + private String tenantId; + + @Schema(description = "经销商ID") + @TableField("dealership_id") + private String dealershipId; + + @Schema(description = "经销商名称") + @TableField("dealership_name") + private String dealershipName; + + @Schema(description = "销售ID") + @TableField("sales_id") + private String salesId; + + @Schema(description = "按经销商统计数量") + @TableField("count_by_dealership") + private Integer countByDealership; + + @Schema(description = "按销售统计数量") + @TableField("count_by_sales") + private Integer countBySales; + + @Schema(description = "按项目统计数量") + @TableField("count_by_project") + private Integer countByProject; + + @Schema(description = "统计日期") + @TableField("statistics_date") + private LocalDate statisticsDate; + + @Schema(description = "创建时间") + @TableField("created_at") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + @TableField("updated_at") + private LocalDateTime updatedAt; +} + diff --git a/src/main/java/com/rj/mapper/CustomerManagementStatisticsMapper.java b/src/main/java/com/rj/mapper/CustomerManagementStatisticsMapper.java new file mode 100644 index 0000000..ed28c59 --- /dev/null +++ b/src/main/java/com/rj/mapper/CustomerManagementStatisticsMapper.java @@ -0,0 +1,88 @@ +package com.rj.mapper; + +import com.rj.entity.CustomerManagementStatistics; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.time.LocalDate; +import java.util.List; +import java.util.Map; + +/** + *

+ * 客户统计表 Mapper 接口 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-08-07 + */ +@Mapper +public interface CustomerManagementStatisticsMapper extends BaseMapper { + + /** + * 按经销商统计指定日期的客户数据 + * @param date 统计日期 + * @return 经销商统计结果列表 + */ + @Select("SELECT " + + "dealership_id, " + + "dealership_name, " + + "COUNT(*) as count_by_dealership " + + "FROM customer_management " + + "WHERE DATE(create_time) = #{date} " + + "AND dealership_id IS NOT NULL " + + "AND dealership_id != '' " + + "GROUP BY dealership_id, dealership_name") + List> getDealershipStatisticsByDate(@Param("date") LocalDate date); + + /** + * 按销售统计指定日期的客户数据 + * @param date 统计日期 + * @return 销售统计结果列表 + */ + @Select("SELECT " + + "sales_id, " + + "COUNT(*) as count_by_sales " + + "FROM customer_management " + + "WHERE DATE(create_time) = #{date} " + + "AND sales_id IS NOT NULL " + + "AND sales_id != '' " + + "GROUP BY sales_id") + List> getSalesStatisticsByDate(@Param("date") LocalDate date); + + /** + * 按项目统计指定日期的客户数据 + * @param date 统计日期 + * @return 项目统计结果列表 + */ + @Select("SELECT " + + "dealership_id, " + + "sales_id, " + + "COUNT(*) as count_by_project " + + "FROM customer_management " + + "WHERE DATE(create_time) = #{date} " + + "AND dealership_id IS NOT NULL " + + "AND dealership_id != '' " + + "AND sales_id IS NOT NULL " + + "AND sales_id != '' " + + "GROUP BY dealership_id, sales_id") + List> getProjectStatisticsByDate(@Param("date") LocalDate date); + + /** + * 检查指定日期的统计数据是否已存在 + * @param date 统计日期 + * @return 统计记录数量 + */ + @Select("SELECT COUNT(*) FROM customer_management_statistics WHERE statistics_date = #{date}") + int countByStatisticsDate(@Param("date") LocalDate date); + + /** + * 删除指定日期的统计数据 + * @param date 统计日期 + * @return 删除的记录数 + */ + int deleteByStatisticsDate(@Param("date") LocalDate date); +} + diff --git a/src/main/java/com/rj/service/ICustomerManagementStatisticsService.java b/src/main/java/com/rj/service/ICustomerManagementStatisticsService.java new file mode 100644 index 0000000..8dbb1ab --- /dev/null +++ b/src/main/java/com/rj/service/ICustomerManagementStatisticsService.java @@ -0,0 +1,58 @@ +package com.rj.service; + +import com.rj.entity.CustomerManagementStatistics; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.time.LocalDate; +import java.util.List; + +/** + *

+ * 客户统计表 服务类 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-08-07 + */ +public interface ICustomerManagementStatisticsService extends IService { + + /** + * 生成指定日期的客户统计数据 + * @param date 统计日期 + * @return 生成的统计记录数量 + */ + int generateStatisticsByDate(LocalDate date); + + /** + * 生成昨天的客户统计数据 + * @return 生成的统计记录数量 + */ + int generateYesterdayStatistics(); + + /** + * 查询指定日期范围的统计数据 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 统计记录列表 + */ + List getStatisticsByDateRange(LocalDate startDate, LocalDate endDate); + + /** + * 查询指定经销商的统计数据 + * @param dealershipId 经销商ID + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 统计记录列表 + */ + List getStatisticsByDealership(String dealershipId, LocalDate startDate, LocalDate endDate); + + /** + * 查询指定销售的统计数据 + * @param salesId 销售ID + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 统计记录列表 + */ + List getStatisticsBySales(String salesId, LocalDate startDate, LocalDate endDate); +} + diff --git a/src/main/java/com/rj/service/impl/CustomerManagementStatisticsServiceImpl.java b/src/main/java/com/rj/service/impl/CustomerManagementStatisticsServiceImpl.java new file mode 100644 index 0000000..e299ad1 --- /dev/null +++ b/src/main/java/com/rj/service/impl/CustomerManagementStatisticsServiceImpl.java @@ -0,0 +1,182 @@ +package com.rj.service.impl; + +import com.rj.entity.CustomerManagementStatistics; +import com.rj.mapper.CustomerManagementStatisticsMapper; +import com.rj.service.ICustomerManagementStatisticsService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +/** + *

+ * 客户统计表 服务实现类 + *

+ * + * @author 李中华 ,spllzh + * @since 2025-08-07 + */ +@Service +public class CustomerManagementStatisticsServiceImpl extends ServiceImpl implements ICustomerManagementStatisticsService { + + @Override + @Transactional(rollbackFor = Exception.class) + public int generateStatisticsByDate(LocalDate date) { + // 先删除该日期的统计数据(如果存在) + baseMapper.deleteByStatisticsDate(date); + + // 查询该日期的经销商客户统计数据 + List> dealershipStatsList = baseMapper.getDealershipStatisticsByDate(date); + + // 查询该日期的销售客户统计数据 + List> salesStatsList = baseMapper.getSalesStatisticsByDate(date); + + // 查询该日期的项目客户统计数据 + List> projectStatsList = baseMapper.getProjectStatisticsByDate(date); + + int count = 0; + + // 处理经销商统计数据 + for (Map stat : dealershipStatsList) { + CustomerManagementStatistics statistics = new CustomerManagementStatistics(); + + // 设置经销商信息 + Object dealershipIdObj = stat.get("dealership_id"); + statistics.setDealershipId(dealershipIdObj != null ? dealershipIdObj.toString() : ""); + + Object dealershipNameObj = stat.get("dealership_name"); + statistics.setDealershipName(dealershipNameObj != null ? dealershipNameObj.toString() : "未知经销商"); + + // 设置经销商统计数量 + Object countByDealershipObj = stat.get("count_by_dealership"); + if (countByDealershipObj != null) { + statistics.setCountByDealership(Integer.valueOf(countByDealershipObj.toString())); + } else { + statistics.setCountByDealership(0); + } + + // 查找该经销商对应的销售统计数据 + String dealershipId = dealershipIdObj != null ? dealershipIdObj.toString() : ""; + Map salesStat = findSalesStatByDealership(salesStatsList, dealershipId); + + if (salesStat != null) { + // 设置销售信息 + Object salesIdObj = salesStat.get("sales_id"); + statistics.setSalesId(salesIdObj != null ? salesIdObj.toString() : ""); + + // 设置销售统计数量 + Object countBySalesObj = salesStat.get("count_by_sales"); + if (countBySalesObj != null) { + statistics.setCountBySales(Integer.valueOf(countBySalesObj.toString())); + } else { + statistics.setCountBySales(0); + } + } else { + // 如果没有找到对应的销售数据,设置为空 + statistics.setSalesId(""); + statistics.setCountBySales(0); + } + + // 查找该经销商和销售对应的项目统计数据 + Map projectStat = findProjectStat(projectStatsList, dealershipId, statistics.getSalesId()); + + if (projectStat != null) { + // 设置项目统计数量 + Object countByProjectObj = projectStat.get("count_by_project"); + if (countByProjectObj != null) { + statistics.setCountByProject(Integer.valueOf(countByProjectObj.toString())); + } else { + statistics.setCountByProject(0); + } + } else { + statistics.setCountByProject(0); + } + + // 设置统计日期和时间 + statistics.setStatisticsDate(date); + statistics.setCreatedAt(LocalDateTime.now()); + statistics.setUpdatedAt(LocalDateTime.now()); + + // 保存统计记录 + save(statistics); + count++; + } + + return count; + } + + /** + * 根据经销商ID查找对应的销售统计数据 + * @param salesStatsList 销售统计列表 + * @param dealershipId 经销商ID + * @return 销售统计数据 + */ + private Map findSalesStatByDealership(List> salesStatsList, String dealershipId) { + // 这里需要根据业务逻辑来确定经销商和销售的对应关系 + // 由于原始数据中可能没有直接的关联关系,这里返回第一个销售数据作为示例 + // 实际使用时需要根据具体的业务逻辑来调整 + if (!salesStatsList.isEmpty()) { + return salesStatsList.get(0); + } + return null; + } + + /** + * 根据经销商ID和销售ID查找对应的项目统计数据 + * @param projectStatsList 项目统计列表 + * @param dealershipId 经销商ID + * @param salesId 销售ID + * @return 项目统计数据 + */ + private Map findProjectStat(List> projectStatsList, String dealershipId, String salesId) { + for (Map projectStat : projectStatsList) { + Object projectDealershipId = projectStat.get("dealership_id"); + Object projectSalesId = projectStat.get("sales_id"); + + if (dealershipId != null && dealershipId.equals(projectDealershipId != null ? projectDealershipId.toString() : "") && + salesId != null && salesId.equals(projectSalesId != null ? projectSalesId.toString() : "")) { + return projectStat; + } + } + return null; + } + + @Override + public int generateYesterdayStatistics() { + LocalDate yesterday = LocalDate.now().minusDays(1); + return generateStatisticsByDate(yesterday); + } + + @Override + public List getStatisticsByDateRange(LocalDate startDate, LocalDate endDate) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.between(CustomerManagementStatistics::getStatisticsDate, startDate, endDate) + .orderByAsc(CustomerManagementStatistics::getStatisticsDate) + .orderByAsc(CustomerManagementStatistics::getDealershipId); + return list(queryWrapper); + } + + @Override + public List getStatisticsByDealership(String dealershipId, LocalDate startDate, LocalDate endDate) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CustomerManagementStatistics::getDealershipId, dealershipId) + .between(CustomerManagementStatistics::getStatisticsDate, startDate, endDate) + .orderByAsc(CustomerManagementStatistics::getStatisticsDate); + return list(queryWrapper); + } + + @Override + public List getStatisticsBySales(String salesId, LocalDate startDate, LocalDate endDate) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CustomerManagementStatistics::getSalesId, salesId) + .between(CustomerManagementStatistics::getStatisticsDate, startDate, endDate) + .orderByAsc(CustomerManagementStatistics::getStatisticsDate); + return list(queryWrapper); + } +} + diff --git a/src/main/resources/mapper/CustomerManagementStatisticsMapper.xml b/src/main/resources/mapper/CustomerManagementStatisticsMapper.xml new file mode 100644 index 0000000..2c1bd2d --- /dev/null +++ b/src/main/resources/mapper/CustomerManagementStatisticsMapper.xml @@ -0,0 +1,12 @@ + + + + + + + DELETE FROM customer_management_statistics + WHERE statistics_date = #{date} + + + +