feat(跑店填报): 新增跑店填报表与接口

自主填报拆分为「驻店填报 / 跑店填报」两种类型,跑店填报的填报内容是
「巡店列表(多门店,每条含门店/定位/打卡照片)+ 活动小结」,与
yxe_self_report 的单门店结构不兼容:yxe_self_report 既没有多门店字段,
也没有区分驻店/跑店类型的字段。为不污染既有 928 条历史数据与既有
审核/导出逻辑,本次新建独立表 yxe_visit_report。

- entity/param/mapper(+xml)/service(+impl)/controller 全套
- 接口:page、audit/page、GET、userList、GET /{id}、POST、PUT、
  PUT /resubmit、DELETE /{id}、DELETE /batch、PUT /batch、POST /export
- 审核通过复用自主填报逻辑:scene=6 写余额,备注「跑店填报审核通过获得收入」
- 提交人须 auth_status=2;resubmit 仅本人 + 仅已驳回记录
- store_count 由 store_list JSON 长度重算,不信任前端传值
- 列表接口(page / audit/page)裁剪 store_list 与 image:
  一次巡店最多 9 图 × N 店,整列 JSON 可达数百 KB,列表只用 store_count,
  明细展开时再按 id 拉详情;userList(填报记录页要渲染门店列表)与导出不裁剪
- 导出表头含门店清单/连锁清单等从 store_list 展开的列

配套:
- yxe_visit_report.sql(建表,幂等,含执行前后核对 SELECT)
- yxe-mp  packageUser/self-report/select、visit
- yxe-admin yxeVisitReport API 与跑店详情
This commit is contained in:
2026-10-11 22:50:04 +08:00
parent 4914fb0088
commit eff7ba2340
8 changed files with 877 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
-- 用途:新增 yxe_visit_report 表(跑店填报)
-- 日期:2026-10-11
-- 背景:甲方要求把「自主填报」拆成「驻店填报 / 跑店填报」两种类型:
-- 1) 原自主填报页改为「驻店填报」,数据仍存 yxe_self_report,不动;
-- 2) 新增「跑店填报」,填报内容为「巡店列表(多门店,每条含门店/定位/打卡照片)+ 活动小结」。
-- 巡店列表是「一次填报多家门店」的数组结构,yxe_self_report 既没有多门店字段,
-- 也没有区分驻店/跑店类型的字段;本次选择新建独立表,避免污染既有 928 条历史数据
-- 与既有审核/导出逻辑。
-- 影响:新建空表,0 行业务数据;不改动 yxe_self_report 任何结构。
-- 性质:幂等,可重复执行(CREATE TABLE IF NOT EXISTS)。
-- 配套代码:
-- yxe-java YxeVisitReport.java / YxeVisitReportParam.java / YxeVisitReportMapper.java
-- / YxeVisitReportMapper.xml / YxeVisitReportService(+Impl)
-- / YxeVisitReportController.java
-- yxe-mp packageUser/self-report/select.vue(选择填报类型)
-- packageUser/self-report/visit.vue(跑店填报)
-- packageUser/self-report/records.vue(填报记录加类型切换)
-- pages/audit/index.vue(药审核加跑店填报类型)
-- yxe-admin src/api/yxe/yxeVisitReport/*、src/views/yxe/yxeSelfReport/*(类型筛选与跑店详情)
-- 执行前核对(应为 0,即表不存在)
SELECT COUNT(*) AS table_exists
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'yxe_visit_report';
-- 变更:建表(已存在则跳过)
CREATE TABLE IF NOT EXISTS `yxe_visit_report` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` int DEFAULT NULL COMMENT '提交人ID',
`store_count` int DEFAULT 0 COMMENT '巡店门店数',
`store_list` longtext COMMENT '巡店列表JSON(门店/定位/打卡照片)',
`image` longtext COMMENT '全部图片集合',
`summary` longtext COMMENT '活动小结',
`reward` decimal(10,2) DEFAULT NULL COMMENT '奖金金额(审核时填写)',
`lat` varchar(64) DEFAULT NULL COMMENT '纬度(整单,取首条门店)',
`lng` varchar(64) DEFAULT NULL COMMENT '经度(整单,取首条门店)',
`location` varchar(500) DEFAULT NULL COMMENT '定位地址(整单,取首条门店)',
`sort_number` int DEFAULT 0 COMMENT '排序',
`comments` varchar(500) DEFAULT NULL COMMENT '备注',
`status` tinyint DEFAULT 0 COMMENT '状态:0待审核,1通过,2拒绝',
`reject_reason` varchar(500) DEFAULT NULL COMMENT '驳回原因',
`deleted` tinyint DEFAULT 0 COMMENT '逻辑删除',
`tenant_id` int DEFAULT 10325 COMMENT '租户ID',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_yxe_visit_report_user_id` (`user_id`),
KEY `idx_yxe_visit_report_status` (`status`),
KEY `idx_yxe_visit_report_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='跑店填报';
-- 执行后核对(应返回 1 行,且列/注释符合预期)
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_COMMENT, ORDINAL_POSITION
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'yxe_visit_report'
ORDER BY ORDINAL_POSITION;
-- 执行后核对(应为 0,跑店填报为新建功能,无历史数据)
SELECT COUNT(*) AS row_count FROM `yxe_visit_report`;