记录一个问题
问题描述
如果一个物料既在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通信方式: 管道(…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...