本章内容
- 阶梯公式:费用公式与保底公式 财务域
- 实时销售模块服务化(Redis 缓存) 基础架构
- 门店直配订单配送在途计算修改 采购域
- 数据库数据表索引及占用空间优化 基础架构
- 库存属性支持批次勾对功能 营运域
- 多维度店群改造(便利店业态) 营运域
- 便利店 POS 促销提醒功能 营销域
- 24 小时营业交款与日结改造 营运域
- 清单式补货(便利店业态) 采购域
- 验收单费用分摊 财务域
1 阶梯公式:费用公式与保底公式
业务背景:很多客户的费用和保底采用阶梯式或计算公式方式。但原系统中费用和保底公式的设置对没有技术能力的财务/信息人员来说操作难度大、不直观、难理解。本次改造提供 UI 固定模板,让用户通过点选/输入方式即可完成配置。
改造内容:
- 合同审批单的费用和保底表格增加"公式类型"下拉框,可选值:空、进阶公式、计算公式
- 历史数据处理:公式不为空的统一更新为"计算公式"
- 选择"进阶公式"时弹出全新配置界面(以保底为例,费用与之相似)
进阶公式配置步骤:
- 基准函数定义 —— 定义一个已写好的函数(含参数)
- 基准公式设置 —— 给函数配置传入参数,最终生成"使用形式"
- 函数类型:录入或选择函数定义 → 自动带出参数列表 → 生成默认使用形式 → 配置参数值 → 保存
- 基数类型:直接配置基数
- 合同审批单内配置保底公式 —— 选择基准公式,系统自动生成合同保底计算公式
2 实时销售模块服务化(Redis 缓存)
业务背景:实时销售相关模块大量使用数据库存储过程(如定时任务调用 up_cursale_write 刷新 tb_cursale 表),模块查询服务也由存储过程实现,造成数据库服务器压力过大。
优化方案:
- 定时任务移至系统服务端实现
- 当日销售数据写入 Redis 缓存,模块查询当日数据从 Redis 提取
- 历史数据仍存储在
tb_cursale表,日结时调用原up_cursale_write过程写入
相关模块:实时销售监测、历史时段销售监测、收银员销售实时监测、收银台销售实时监测
缓存数据结构优化:
针对门店多、销售数据量大的项目,当系统并发量高时,当日销售流水汇总数据一次全部取出会占用大量内存,造成内存溢出。优化方案:对 Redis 缓存数据按维度分类存储。
| 分类维度 | 说明 |
|---|---|
| 机构 | 按门店分别存储 |
| 部门 | 按部门汇总 |
| 品类 | 按品类表树形层级结构单独存储 |
| 收银员 | 按收银员汇总 |
| 收银台 | 按收银台汇总 |
| 品牌厅 / 品牌 | 按品牌维度汇总 |
| 时段 | 时段数据额外增加时段维度 |
3 门店直配订单配送在途计算修改
原逻辑问题:门店直配订单配送在途根据订单取消日期释放。订单取消日期到期后,门店在途全部释放 —— 无论该订单是否已做过验收,到期后都会自动作废。
实际业务矛盾:配送中心给门店送货有周期(每周两配或三配),存在以下情况:
- 直配订单配送前已到配送中心,但配送中心尚未给门店配送
- 直配订单做一次收货,理论上存在多次配送(但概率很低)
- 按配送数量减在途,短配部分要等订单失效才释放 —— 影响加盟商资金周转
修改内容:
- 新增参数:直配订单验收未配送时门店在途取消天数(默认 0)
- 参数 = 0:按原逻辑处理不变
- 参数 = 1:直配订单配送中验收后,将在途释放日期调整为订货日的第二天,以此类推
- 壹步/贰步越库:验收单审核时,未收货数量自动还原在途
壹步越库案例:
验收单审核后(配送单尚未审核时):在途截止日期变为 2020.07.25(即订货日期 + 参数值 1)
完全收货:在途归零
不完全收货:已收货部分在途归零,未收货部分等配送单审核后释放
部分收货:按实际收货量减少在途,剩余等配送单到店
配送单审核后:在途取消,转为记录配送单到货数量信息
贰步越库案例:
分店订单进入配送池:在途数量和日期不变
配送池生成订单尚未审核:在途数量和日期不变
验收单审核后(配送单尚未审核):在途日期变为 2020.08.06(订货日期 + 参数值 1)
配送单审核后:在途归零
4 数据库数据表索引及占用空间优化
问题背景:集中式数据库架构下数据库增长极快。日结表中存在大量宽表、汉字和长字符类型字段,部分大表索引建立不合理,导致索引空间占用比数据空间还大,严重消耗存储资源。
优化方案:
- 去掉部分表的 GUID,或将 GUID 改为空
- 如果 GUID 涉及索引、主键,则新加一个数值字段代替它
- 如果不涉及索引,直接设置为可为空,去掉默认值
预计效果:可节省几十甚至上百 GB 空间,程序调整在可接受范围内。
- 索引调整脚本单独放入修改记录,不在通用升级脚本中,按需单独更新
- 表数据量大时,调整索引可能需要很长时间 —— 不要在系统使用或日结时执行
- 建议先在测试库执行,分析效果后再对生产库升级
- 注意脚本修改日期与当前版本跨度,年份跨度不宜过大
5 库存属性支持批次勾对功能
业务背景:家电、数码、黄金等有单件管理需求,每件商品都有唯一条码或 SN 码,客户希望能批次跟踪到每件商品的进销存。同时希望库存属性管理支持按尺码、色码等进行批次勾对。
SN 管理的两种方式:
| 方式 | 适用品类 | 管理方式 | 数据存储 |
|---|---|---|---|
| 属性方式 | 数码、家电类 | 通过库存属性弹框录入 SN | 库存属性表 tb_gds_stock_size |
| 条码方式 | 黄金类商品 | 单据支持多条码,每条码一行 | 条码表 |
管理方式细化(2021.08 后调整):
| 管理方式 | 说明 | 适用场景 |
|---|---|---|
| 大家电 SN | 需走送货及退换货流程,销售时不输 SN,提货时才处理 | 冰箱、洗衣机等大件 |
| 黄金或小家电 SN | 销售时即录入 SN | 黄金珠宝、小家电 |
| 服装类 | 按尺码/色码管理 | 服装鞋帽 |
| 糖果类 | 按属性管理 | 散称糖果 |
关键参数:
改造涉及模块:
- 库存属性定义:增加管理方式、管理批次、操作方式字段
- 验收单:支持按库存属性增加批次、勾对批次(仅管理批次且管库存的才按属性增加批次)
- 盘点单:条码转库存属性的商品只能按条码盘点,不能按编码盘点
- 商品建档申请单:支持库存属性组(从品类级改为商品级)
- 报损单 / 退货单:按库存属性表勾对批次
SN 码仓库流转规则:非"本部"的调入/调出,必须先从当前仓库调入/调出到"本部",再进行机构间流转。此过程通过"仓库调拨单"自动处理。
属性方式 → 前后台都通过库存属性弹框录入
条码方式 → 后台通过条码生成库存属性数据(主要用于《黄金珠宝验收单》)
注意:管理方式为"订货"时,管理批次只能为"否";属性组下设置多个属性时不允许开启 SN 码管理。
6 多维度店群改造(便利店业态)
业务背景:便利店特点是门店多且标准化高,通常按片区督导管理。原 RMIS 店群只支持单维度,一个店不能属于多个店群 —— 无法同时按商品配置、采购信息、分区调价促销分别管理。
改造内容:店群支持多维度,分为两类:
| 店群类型 | 用途 | 特点 |
|---|---|---|
| SKU 群组 | 商品配置管理,新开店时快速复制商品资料 | 支持按品类 + U 级维护,机构可重复 |
| 采购群组 | 采购管理、调价、促销 | 机构不能重复 |
改造涉及模块:
- 店群变更单:增加店群类型字段(SKU 群组 / 采购群组)
- 店群信息查询:增加店群类型查询条件和快速查询
- 开店申请单:新开店时选择属于哪个 SKU 店群和采购店群,系统自动生成新店资料(分店信息、商品分店信息、商品采购信息等),并加入对应店群
- 多机构选择弹框:机构弹框店群 tab 页增加店群类型默认查询条件
7 便利店 POS 促销提醒功能
业务背景:便利店客流不大,面积小不适合挂很多 POP 广告。通过 POS 端给收银员提前显示促销通知,顾客买单扫描商品时给出关联商品促销提醒,提高客单价和来客数。
功能说明:
- 满减促销支持设置"前台是否提醒"
- 满减模板可设置"是否自动更新促销描述" —— 勾选后保存单据时系统自动根据促销信息生成描述语句(< 200 字)
- 自动生成描述不包含特殊满减模板:买当花促销单、捆绑促销单、换倍活动促销单等
- 如需调整自动生成的语句,取消勾选后手动编辑
8 24 小时营业交款与日结改造
业务背景:24 小时营业便利店存在跨天交款问题。原 RMIS 收银员交款单针对超市业态设计,未考虑跨天交款。日结期间如果继续营业,库存变动会导致进销存异常,日结中审核单据容易死锁。
一、交款改造:
- POS 交款通过消息队列传到后台,自动生成/刷新后台交款单
- 通过 POS 登录时选择的班次判断流水是否跨天
- 晚班收银员 POS 交款后,系统自动生成昨日第二张交款单 + 今日交款单
- 审核交款单时生成收银凭证数据,第二张审核时在原基础上更新
二、日结改造:
- 流水记账时间:参数"每天几点之前的销售算到前一天"默认值改为 0(原为 2),范围限制 0-5
- 日结增加时间判断控制:如参数为 2,0 点启动日结后,流水勾对等待到 2 点后才执行
- 业务单据预审核:日结期间的单据改为"预审核"状态,日结完成后按时间顺序批量审核
预审核机制详解:
| 维度 | 处理方式 |
|---|---|
| 单据状态 | 预审核状态,界面控制与已审核一致 |
| 数量价格 | 预审核时锁定,不可修改 |
| 可用库存 | 强制冻结批次库存,减少可用批次库存 |
| 单据打印 | 验收单/退货单/批发单等对外单据,预审核状态打印为"已审核" |
| 业务联动 | 验收单预审核时需生成配送单(保证后续退货/折让有批次可选) |
| 接口处理 | 预审核单据不可重复审核、不可作废/删除 |
| 数据安全 | 触发器按已审核方式控制,确保不被修改 |
支持预审核的单据类型:验收单、退货单、折让单、配送单、退配单、店间调拨单、配送折让单、仓库调拨单、报损单、领用单、生鲜加工单、生鲜加工领用单、成本价提前计提单、批发单、批发退货单。
9 清单式补货(便利店业态)
业务背景:便利店品项少,超市常规的录入商品式补货不适用。通过制作补货清单模板,按清单填空式补货,大幅提高门店补货效率。部分商品需一日多配,支持多波次补货和配送。
实现方式:
- 补货清单定义:定义补货清单,包含模板基本信息、商品范围、适用范围
- 补货组定义:根据订货期、到货期设置门店分组,包含组基本信息和机构范围
- 店务通:按清单式进行补货
- 配送池:支持按配送日期和波次生成配送单
多波次配送流程:
10 验收单费用分摊
业务背景:生鲜便利店存在大量自采业务,需要将运费、人工费分摊到商品中,但要求能分开统计每种费用占比,同时不影响与供应商结算。
两种实现方式:
| 方式 | 处理逻辑 | 对结算的影响 |
|---|---|---|
| 方式一:改验收进价结算价 | 分摊费用后修改验收单进价、结算价,同时生成费用单 | 直接影响供应商结算金额 |
| 方式二:不改进价、生成折让单 | 分摊费用后生成折让单,不进入结算 | 不影响供应商结算 |
关键参数:
验收单审核时的处理流程:
- 调用费用分摊过程
up_bill_pur_went_dutch_i,按参数"分摊方式"计算 - 若处理方式 = "修改验收单进价" → 分摊后更新验收单进价、结算价
- 若处理方式 = "生成折让单" → 分摊后数据写入临时表
- 若采购费用不为 0 且供应商在"需生成费用单的供应商"参数中 → 调用
up_create_fee_bill_from_gds_rec生成负费用单 - 若处理方式 = "生成折让单" → 调用
up_create_f_bill_from_rec生成折让单并自动审核(不进入结算)