记录一个问题
问题描述
如果一个物料既在A总成零件号下计算为托盘库,在B总成零件号下计算为箱库,则放于箱库。
A中选择排名第21的递补进托盘库。(也需要判断递补的是否在其他总成零件中为箱库,是的话继续递补+判断)
解决思路
为了处理这个问题,我们需要设计一个逻辑流程来确保物料在总成零件号之间的库存计算是正确的。以下是一个可能的逻辑流程来解决这个问题:
- 数据准备:
- 准备一个包含物料、总成零件号、库存类型和库存排名的数据库或数据表。
- 确保每个物料在不同总成零件号下的库存类型和排名都有记录。
- 逻辑判断:
- 对于每个物料,首先检查其在A总成零件号下的库存类型。
- 如果物料在A总成零件号下是托盘库,并且没有在B总成零件号下作为箱库存在,则将其放入托盘库。
- 如果物料在A总成零件号下不是托盘库,或者在B总成零件号下是箱库,则进入递补流程。
- 递补流程:
- 在A总成零件号下,找到排名比当前物料高的所有物料。
- 检查这些物料的库存类型,确保它们当前在托盘库中。
- 如果某个物料的库存类型不是托盘库(可能是箱库或其他),则跳过该物料,继续检查下一个。
- 如果找到了一个符合条件的物料(即在托盘库中,且排名比当前物料高),则将该物料移出托盘库,并将当前物料递补进托盘库。
- 如果遍历完所有排名更高的物料都没有找到合适的递补物料,则继续向下查找,直到找到排名第21的物料(或其他指定排名的物料)。
- 对排名第21的物料进行同样的检查:如果它在其他总成零件号下是箱库,则继续向下递补,直到找到一个合适的物料。
- 执行操作:
- 根据逻辑判断的结果,更新数据库或数据表中物料的库存类型和位置。
- 错误处理和异常检查:
- 在整个流程中,添加适当的错误处理和异常检查机制,以确保数据的完整性和准确性。
例如,检查是否存在重复物料、缺失数据或逻辑错误等。
- 性能优化:
- 如果数据量很大,考虑使用索引来加速查询过程。
- 优化数据库查询语句,减少不必要的计算和数据传输。
- 测试和验证:
- 在实际部署之前,对逻辑流程进行充分的测试和验证,确保它能够正确处理各种情况并产生准确的结果。
请注意,以上流程是一个高级概述,具体的实现细节可能会因数据库结构、编程语言和业务需求而有所不同。在实际应用中,你可能需要根据具体情况进行调整和优化。
实现
在C#中实现上述逻辑,你需要定义一些数据结构来存储物料、总成零件号、库存类型、排名等信息,然后编写相应的逻辑来处理这些数据。以下是一个简化的示例代码,展示了如何实现这一逻辑:
首先,定义一些类来表示物料、总成零件和库存信息:
public class Material
{ public string Id { get; set; } public Dictionary<string, InventoryInfo> Inventories { get; set; } public Material() { Inventories = new Dictionary<string, InventoryInfo>(); }
} public class InventoryInfo
{ public string AssemblyPartNumber { get; set; } public InventoryType InventoryType { get; set; } public int Rank { get; set; }
} public enum InventoryType
{ Pallet, Box, // 可以添加其他库存类型
} public class InventoryManager
{ private List<Material> materials; public InventoryManager() { materials = new List<Material>(); // 初始化物料数据,这里仅作为示例 var material = new Material { Id = "Material1", Inventories = new Dictionary<string, InventoryInfo> { { "A", new InventoryInfo { AssemblyPartNumber = "A", InventoryType = InventoryType.Pallet, Rank = 20 } }, { "B", new InventoryInfo { AssemblyPartNumber = "B", InventoryType = InventoryType.Box, Rank = 10 } }, // ... 其他总成零件号的库存信息 } }; materials.Add(material); // 可以添加更多物料 } public void ProcessMaterials() { foreach (var material in materials) { // 检查A总成零件号下的库存类型 if (material.Inventories.TryGetValue("A", out var inventoryA) && inventoryA.InventoryType == InventoryType.Pallet) { // 检查B总成零件号下的库存类型 if (!material.Inventories.TryGetValue("B", out var inventoryB) || inventoryB.InventoryType != InventoryType.Box) { // 物料可以放入托盘库(这里只是打印信息,实际中可以执行放入操作) Console.WriteLine($"Material {material.Id} can be placed in pallet."); } else { // 需要递补进托盘库 var alternateMaterial = FindAlternateMaterialForPallet(material.Id, "A"); if (alternateMaterial != null) { // 执行递补逻辑(这里只是打印信息) Console.WriteLine($"Material {alternateMaterial.Id} is promoted to pallet for {material.Id}."); } } } } } private Material FindAlternateMaterialForPallet(string originalMaterialId, string assemblyPartNumber) { // 这里简化逻辑,只查找排名第21的物料(假设排名是唯一的) foreach (var material in materials) { if (material.Inventories.TryGetValue(assemblyPartNumber, out var inventory) && inventory.Rank == 21) { // 检查该物料是否在其他总成零件中为箱库 if (!material.Inventories.Values.Any(i => i.InventoryType == InventoryType.Box && i.AssemblyPartNumber != assemblyPartNumber)) { return material; } } } return null; // 没有找到合适的递补物料 }
}
请注意,上述代码是一个简化的示例,它假设你已经有了物料的库存信息,并且这些信息存储在一个Material类的实例列表中。ProcessMaterials方法遍历所有物料,并根据提供的逻辑进行处理。FindAlternateMaterialForPallet方法用于查找可以递补进托盘库的物料。
在实际应用中,你可能需要根据实际情况调整数据结构、逻辑和错误处理。此外,如果物料和库存信息存储在数据库中,你需要编写数据库访问代码来获取和更新这些数据。
相关文章:
记录一个问题
问题描述 如果一个物料既在A总成零件号下计算为托盘库,在B总成零件号下计算为箱库,则放于箱库。 A中选择排名第21的递补进托盘库。(也需要判断递补的是否在其他总成零件中为箱库,是的话继续递补判断) 解决思路 为了…...

ONLYOFFICE 8.1版本桌面编辑器测评:重塑办公效率的巅峰之作
在数字化办公日益普及的今天,一款高效、便捷且功能强大的桌面编辑器成为了职场人士不可或缺的工具。ONLYOFFICE 8.1版本桌面编辑器凭借其卓越的性能和丰富的功能,成功吸引了众多用户的目光。今天,我们将对ONLYOFFICE 8.1版本桌面编辑器进行全…...

【shell脚本速成】python安装脚本
文章目录 案例需求应用场景解决问题脚本思路案例代码 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的每一刻,都沐…...

Redis报错:MISCONF Redis is configured to save RDB snapshots
错误提示内容: 2024-06-25 16:30:49 : Connection: Redis_Server > [runCommand] PING 2024-06-25 16:30:49 : Connection: Redis_Server > Response received : -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pers…...

关于使用绿联 USB-A转RJ45 2.5G网卡提速的解决问题
问题 网络下载速率低 网线是七类网线,外接的USB网卡驱动 我的自带网卡是 I219v 在嵌入了2.5G网络后一直无法到达1.5G以上。 平均测速300~500M 解决方案 更新了USB的网卡驱动 禁用了 I219-V的驱动。测速即可 USB驱动下载地址 https://download.csdn.net/downlo…...

Qt: QPushButton 按钮实现 上图标下文字
效果如下: 实现有如下几种方式: 1. 使用 QPushButton 设置 setStyleSheet 例: ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…...
使用阿里云效API操作流水线
使用阿里云效(Alibaba Cloud DevOps)API操作流水线时,需要注意以下几个方面: 认证与授权 确保你已经获取了正确的访问凭证(AccessKey ID 和 AccessKey Secret),并且这些凭证具有足够的权限来执行…...

使用命令行创建uniapp+TS项目,使用vscode编辑器
一:如果没有pnpm,先安装pnpm 二:使用npx工具和degit工具从 GitHub 上的 dcloudio/uni-preset-vue 仓库克隆一个名为 vite-ts 的分支,到项目中. 执行完上面命令后,去manifest.json添加appid(自己微信小程序的Id),也可不执行直接下一步,执行pnpm install ,再执行pnpm:dev:mp-weix…...
ABC355 Bingo2
分析: 找出其中一行或列或任意对角线被全部标记,即可输出回合数,否则输出-1 如果x%n0,行是x/n,列是n 如果x%n!0,行是x/n1,列是x%n 如果行列或行列n1即为对角线。 标记行列对角线…...

Spring+Vue项目部署
目录 一、需要的资源 二、步骤 1.首先要拥有一个服务器 2.项目准备 vue: 打包: 3.服务器装环境 文件上传 设置application.yml覆盖 添加启动和停止脚本 编辑 安装jdk1.8 安装nginx 安装mysql 报错:「ERR」1273-Unknown collation: utf8m…...

【uml期末复习】统一建模语言大纲
前言: 关于uml的期末复习的常考知识点,可能对你们有帮助😉 目录 第一部分 概念与基础 第一章 面向对象技术 第二章 统一软件过程 第三章 UML概述 第四章 用例图 第五章 类图 第六章 对象图 第七章 顺序图 第八章 协作图 第九章 状态…...

Linux高级IO
高级IO 1.五种IO模型1.1 阻塞IO1.2 非阻塞IO1.3 信号驱动IO1.4 多路复用/多路转接IO1.5 异步IO1.6 小结 2.高级IO重要概念3.非阻塞IO3.1 实现函数NoBlock3.2 轮询方式读取标准输入 4.I/O多路转接之select4.1 理解select执行过程4.2 select的特点4.3 select缺点4.4 实现 5.I/O多…...

go-admin-ui开源后台管理系统华为云部署
1.华为云开通8000与9527端口 2.编译 编译成功 3.发布到远程服务器 4.登陆华为云终端 5.安装Nginx 6.查看服务启动状态 7.添加网站 添加与修改配置www-data 改为 www 自定义日志输出格式 添加网站配置文件go_admin_ui.conf 添加如下内容: location 下的root指向网站文件夹 修…...

点云入门知识
点云的处理任务 场景语义分割 物体的三维表达方法(3D representations): 点云:是由物体表面上许多点数据来表征这个物体。最接近原始传感器数据,且具有丰富的几何信息。 Mesh:用三角形面片和正方形面片拼…...

HTML静态网页成品作业(HTML+CSS+JS)——家乡莆田介绍网页(5个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码实现图片轮播,共有5个页面。 二、作品…...
#### grpc比http性能高的原因 ####
grpc比http性能高的原因 二进制消息格式:gRPC使用Protobuf(一种有效的二进制消息格式)进行序列化,这种格式在服务器和客户端上的序列化速度非常快,且序列化后的消息体积小,适合带宽有限的场景。 HTTP/2协…...
微软Edge浏览器搜索引擎切换全攻略
微软Edge浏览器作为Windows 10的默认浏览器,提供了丰富的功能和良好的用户体验。其中,搜索引擎的切换功能允许用户根据个人喜好和需求,快速更换搜索引擎,从而获得更加个性化的搜索服务。本文将详细介绍如何在Edge浏览器中进行搜索…...
<Linux> 实现命名管道多进程任务派发
实现命名管道多进程任务派发 common文件 #ifndef _COMMON_H_ #define _COMMON_H_#pragma once #include <iostream> #include <unistd.h> #include <string> #include <sys/types.h> #include <sys/stat.h> #include <wait.h> #include &…...

BigInteger 和 BigDecimal(java)
文章目录 BigInteger(大整数)常用构造方法常用方法 BigDecimal(大浮点数)常用构造方法常用方法 DecimalFormat(数字格式化) BigInteger(大整数) java.math.BigInteger。 父类:Number 常用构造方法 构造方法:BigIntege…...
Linux 进程间通讯
Linux IPC 方式 在Linux系统中,进程间通信(IPC)是多个运行中的程序或进程之间交换数据和信息的关键机制。Linux提供了多种IPC机制,每种机制都有其特定的用途和优势。以下是Linux上主要的IPC通信方式: 管道(…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...