库存管理与策略模式

news2024/11/26 9:58:08

库存管理是个难题,涉及到采购、销售、仓储、门店、网站订单各个环节,实物库存和系统库存很难保证完全一致,记得系统刚上线第一天,因为实物库存与导入系统的库存有差异,系统又做了限制系统库存必须大于0才允许销售普通订单,当时头都大了,和业务方商量后,立即决定如果库存不够无法销售就让收银员全部走预售单的流程,先保证系统能正常销售,然后后期盘点库存再做预售单的提货操作,然后第二天直接把库存限制放开,允许门店0库存销售,因为对门店来讲肯定都是客户拿到货了才到收银台结账,不存在没有实物库存的情况,但对库存管理还是要尽可能精准,这涉及到采购成本、财务、商品管控等一系列问题。

一、库存管理业务逻辑

系统中涉及到库存变更的操作主要有如下几种:

  • 增加:门店采购商品入库

  • 扣减:门店销售扣减出库

  • 占用:预售单下单后需要预留库存

  • 返还:退货/换货之后返回库存,相当于增加库存

  • 调拨:门店之间调出调入库存变化

  • 破损:破损审核后库存扣减

  • 盘点:盘盈盘亏库存变动

系统中与库存值有关的概念主要有如下几种:

  • 门店仓库实际库存

  • 门店占用(预留)库存:虚拟库存,预售单占用库存

  • 有效库存(门店可销售库存)

  • 在途库存:国内打托后发往国外门店未收货及调拨中途的货货。

系统只要保证等式【有效库存 = 实际库存  - 占用库存】一直成立就不会有太大差错。

上面各业务模块都涉及到库存的变更,抽像出来主要有两种类型的库存变更,一种是实际库存和有效库存的变化,另外一种是预售单会额外涉及到预留库存的变化,这个如果写判断逻辑去处理,代码就会比较混乱,所以我们采用策略模式来解决这个问题。

PS:今天看了一篇文章讲到库存管理要分层:分成 销售层、调度层、仓库层,好复杂,我们这样垂直行业应该不需要做得这么复杂。

二、策略模式

策略模式:策略模式是针对一组算法(行为),将每一组算法(行为)封装到具有共同接口的独立的类中,降低代码耦合度。

策略模式的结构:

  • 环境角色(Context):用来操作策略的上下文环境。

  • 抽像策略角色(Strategy):抽像类给出具体策略所需的接口。

  • 具体策略角色(ConcreteStrategy):每一种行为具体的实现。

系统库存策略类图如下:

各业务模块(现在有10来个业务模块入口)统一调用Content类操作库存的变更。如果业务变更或库存模型(比如要引入安全库存什么的)直接调整具体的实现类即可不会相互影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

战略咨询只是一个热门词汇?NO!它可能是您企业成功的关键因素

战略咨询只是一个热门词汇?NO!它可能是您企业成功的关键因素。每个企业都有可能遇到困境,战略咨询可以帮助企业找到突破之道。当企业面对挑战时,战略咨询不仅能帮您打开新的视角,还能为您的企业带来创新和成长。 战略咨询是什么意思&#x…

matlab高斯消元法求解线性方程组

高斯消元法的基本原理是通过一系列行变换将线性方程组的增广矩阵转化为简化行阶梯形式,从而得到方程组的解。其核心思想是利用矩阵的行变换操作,逐步消除未知数的系数,使得方程组的求解变得更加简单。 首先,给定系数矩阵A和常数向…

插头 DP

垃圾插头DP,照着打都调了我一下午,淦!!! 学这个玩意纯粹是因为模拟赛考了一道,要不然碰都不会碰…… 我觉得插头DP的主要难度在于实现,而不是理解算法原理…… 不说废话了,进入正…

2023腾讯云服务器优惠代金券领取、查询及使用说明

腾讯云代金券领取渠道有哪些?腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券,大家也可以在腾讯云百科蹲守代金券,因为腾讯云代金券领取渠道比较分散,腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

Javascript 笔记:object

一部分object可以见:JavaScript 笔记 初识JavaScript(变量)_UQI-LIUWJ的博客-CSDN博客 1 in操作符 2 hasOwnProperty 3 获取一个object所拥有的所有property 不去原型链上找 4 定义data property

ARM day5

三盏灯流水 .text .global _start _start: 1.LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0X1<<4)STR R1,[R0] 1.LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0X1<<5)STR R1,[R0] 2.LDR R0,0X50006000LDR R1,[R0]BIC R1,R1,#(0X3<<20)ORR R1,R1,#(0X1<<…

如何快速制作令人惊叹的长图海报

在当今的数字时代&#xff0c;制作一张吸引人的长图海报已成为许多人的需求。无论是为了宣传活动&#xff0c;还是展示产品&#xff0c;一张设计精美的长图海报都能引起人们的注意。下面&#xff0c;我们将介绍一种简单的方法&#xff0c;使用在线海报制作工具来创建长图海报。…

IO 之 操作properties属性文件

propreties文件&#xff1a; properties文件是一种用于存储配置信息的文本文件&#xff0c;通常以“.properties”为文件扩展名。它是一种简单的键值对格式&#xff0c;用于保存应用程序的配置参数。 在properties文件中&#xff0c;每一行都包含一个键值对&#xff0c;键和值…

Legion Y9000X IRH8 2023款(82Y3)原装出厂OEM预装Windows11系统

lenovo联想电脑笔记本拯救者原厂win11系统镜像 下载链接&#xff1a;https://pan.baidu.com/s/15G01j7ROVqOFOETccQSKHg?pwdt1ju 系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;32G或以上的U盘 文件格式&#xff1a;ISO…

【AI视野·今日CV 计算机视觉论文速览 第261期】Thu, 5 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Thu, 5 Oct 2023 Totally 75 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Consistent-1-to-3: Consistent Image to 3D View Synthesis via Geometry-aware Diffusion Models Authors Jianglong Ye, …

Matlab参数估计与假设检验(举例解释)

参数估计分为点估计和区间估计&#xff0c;在matlab中可以调用namefit()函数来计算参数的极大似然估计值和置信区间。而数据分析中用得最多的是正态分布参数估计。 例1 从某厂生产的滚珠中抽取10个&#xff0c;测得滚珠的直径&#xff08;单位&#xff1a;mm&#xff09;为x[…

用好CompletableFuture类,性能起飞

目录 CompletableFuture引言 CompletableFuture本质 CompletableFuture与Future的关系 CompletableFuture创建 同步方法 异步方法 CompletableFuture执行结果 一元依赖 二元依赖 多元依赖 CompletableFuture异常处理 CompletableFuture实现原理 Java 8中引入了Comp…

【力扣-每日一题】2034. 股票价格波动

class StockPrice { private:unordered_map<int,int> mp; //存储日期及其对应的价格multiset<int> st; //存储所有价格int last_day; //最新一天 public:StockPrice() {this->last_day0;}void update(int timestamp, int price) {if(mp.find(timestamp)!mp…

Java——String与StringBuffer的区别

Java——String类与StringBuffer类的区别 1. ●String类表示的字符串是常量&#xff0c;一旦创建后其内容和长度是无法改变的。 ●StringBuffer表示字符容器&#xff0c;其内容和长度是可以修改的。 在操作字符串时&#xff0c;如果该字符串仅用于表示数据类型&#xff0c;则使…

[鹏城杯 2022]简单的php - 无数字字母RCE+取反【*】

[鹏城杯 2022]简单的php 一、解题流程二、思考总结 题目代码&#xff1a; <?php show_source(__FILE__);$code $_GET[code];if(strlen($code) > 80 or preg_match(/[A-Za-z0-9]|\|"||\ |,|\.|-|\||\/|\\|<|>|\$|\?|\^|&|\|/is,$code)){die( Hello);}e…

【juc】future并行执行并获取返回值

目录 一、截图示例二、代码示例2.1 接口示例2.2 调用示例 一、截图示例 二、代码示例 2.1 接口示例 package com.learning.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.…

基于Springboot实现社区维修平台管理系统演示【项目源码+论文说明】分享

基于Springboot的社区维修平台管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&am…

Transformer预测 | Python实现基于Transformer的股票价格预测(tensorflow)

文章目录 效果一览文章概述程序设计参考资料效果一览 文章概述 Transformer预测 | Python实现基于Transformer的股票价格预测(tensorflow) 程序设计 import numpy as np import matplotlib.pyplot

C语言 - 数组

目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 数组作为函数参数 4.1…

C++11 Thread线程库的使用

C11 Thread线程库的使用 传统的C&#xff08;C11标准之前&#xff09;中并没有引入线程这个概念&#xff0c;在C11出来之前&#xff0c;如果我们想要在C中实现多线程&#xff0c;需要借助操作系统平台提供的API&#xff0c;比如Linux的&#xff0c;或者windows下的 。 本文详细…