当前位置: 首页 > news >正文

记录一个问题

问题描述

如果一个物料既在A总成零件号下计算为托盘库,在B总成零件号下计算为箱库,则放于箱库。
A中选择排名第21的递补进托盘库。(也需要判断递补的是否在其他总成零件中为箱库,是的话继续递补+判断)

解决思路

为了处理这个问题,我们需要设计一个逻辑流程来确保物料在总成零件号之间的库存计算是正确的。以下是一个可能的逻辑流程来解决这个问题:

  1. 数据准备:
  • 准备一个包含物料、总成零件号、库存类型和库存排名的数据库或数据表。
  • 确保每个物料在不同总成零件号下的库存类型和排名都有记录。
  1. 逻辑判断:
  • 对于每个物料,首先检查其在A总成零件号下的库存类型。
  • 如果物料在A总成零件号下是托盘库,并且没有在B总成零件号下作为箱库存在,则将其放入托盘库。
  • 如果物料在A总成零件号下不是托盘库,或者在B总成零件号下是箱库,则进入递补流程。
  1. 递补流程:
  • 在A总成零件号下,找到排名比当前物料高的所有物料。
  • 检查这些物料的库存类型,确保它们当前在托盘库中。
  • 如果某个物料的库存类型不是托盘库(可能是箱库或其他),则跳过该物料,继续检查下一个。
  • 如果找到了一个符合条件的物料(即在托盘库中,且排名比当前物料高),则将该物料移出托盘库,并将当前物料递补进托盘库。
  • 如果遍历完所有排名更高的物料都没有找到合适的递补物料,则继续向下查找,直到找到排名第21的物料(或其他指定排名的物料)。
  • 对排名第21的物料进行同样的检查:如果它在其他总成零件号下是箱库,则继续向下递补,直到找到一个合适的物料。
  1. 执行操作:
  • 根据逻辑判断的结果,更新数据库或数据表中物料的库存类型和位置。
  1. 错误处理和异常检查:
  • 在整个流程中,添加适当的错误处理和异常检查机制,以确保数据的完整性和准确性。
    例如,检查是否存在重复物料、缺失数据或逻辑错误等。
  1. 性能优化:
  • 如果数据量很大,考虑使用索引来加速查询过程。
  • 优化数据库查询语句,减少不必要的计算和数据传输。
  1. 测试和验证:
  • 在实际部署之前,对逻辑流程进行充分的测试和验证,确保它能够正确处理各种情况并产生准确的结果。
    请注意,以上流程是一个高级概述,具体的实现细节可能会因数据库结构、编程语言和业务需求而有所不同。在实际应用中,你可能需要根据具体情况进行调整和优化。

实现

在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总成零件号下计算为托盘库&#xff0c;在B总成零件号下计算为箱库&#xff0c;则放于箱库。 A中选择排名第21的递补进托盘库。&#xff08;也需要判断递补的是否在其他总成零件中为箱库&#xff0c;是的话继续递补判断&#xff09; 解决思路 为了…...

ONLYOFFICE 8.1版本桌面编辑器测评:重塑办公效率的巅峰之作

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

【shell脚本速成】python安装脚本

文章目录 案例需求应用场景解决问题脚本思路案例代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xff0c;都沐…...

Redis报错:MISCONF Redis is configured to save RDB snapshots

错误提示内容&#xff1a; 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网卡提速的解决问题

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

Qt: QPushButton 按钮实现 上图标下文字

效果如下&#xff1a; 实现有如下几种方式&#xff1a; 1. 使用 QPushButton 设置 setStyleSheet 例&#xff1a; ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…...

使用阿里云效API操作流水线

使用阿里云效&#xff08;Alibaba Cloud DevOps&#xff09;API操作流水线时&#xff0c;需要注意以下几个方面&#xff1a; 认证与授权 确保你已经获取了正确的访问凭证&#xff08;AccessKey ID 和 AccessKey Secret&#xff09;&#xff0c;并且这些凭证具有足够的权限来执行…...

使用命令行创建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

分析&#xff1a; 找出其中一行或列或任意对角线被全部标记&#xff0c;即可输出回合数&#xff0c;否则输出-1 如果x%n0&#xff0c;行是x/n&#xff0c;列是n 如果x%n&#xff01;0&#xff0c;行是x/n1&#xff0c;列是x%n 如果行列或行列n1即为对角线。 标记行列对角线…...

Spring+Vue项目部署

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

【uml期末复习】统一建模语言大纲

前言&#xff1a; 关于uml的期末复习的常考知识点&#xff0c;可能对你们有帮助&#x1f609; 目录 第一部分 概念与基础 第一章 面向对象技术 第二章 统一软件过程 第三章 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指向网站文件夹 修…...

点云入门知识

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

HTML静态网页成品作业(HTML+CSS+JS)——家乡莆田介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播&#xff0c;共有5个页面。 二、作品…...

#### grpc比http性能高的原因 ####

grpc比http性能高的原因 二进制消息格式&#xff1a;gRPC使用Protobuf&#xff08;一种有效的二进制消息格式&#xff09;进行序列化&#xff0c;这种格式在服务器和客户端上的序列化速度非常快&#xff0c;且序列化后的消息体积小&#xff0c;适合带宽有限的场景。 HTTP/2协…...

微软Edge浏览器搜索引擎切换全攻略

微软Edge浏览器作为Windows 10的默认浏览器&#xff0c;提供了丰富的功能和良好的用户体验。其中&#xff0c;搜索引擎的切换功能允许用户根据个人喜好和需求&#xff0c;快速更换搜索引擎&#xff0c;从而获得更加个性化的搜索服务。本文将详细介绍如何在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(大整数&#xff09;常用构造方法常用方法 BigDecimal(大浮点数&#xff09;常用构造方法常用方法 DecimalFormat(数字格式化) BigInteger(大整数&#xff09; java.math.BigInteger。 父类&#xff1a;Number 常用构造方法 构造方法&#xff1a;BigIntege…...

Linux 进程间通讯

Linux IPC 方式 在Linux系统中&#xff0c;进程间通信&#xff08;IPC&#xff09;是多个运行中的程序或进程之间交换数据和信息的关键机制。Linux提供了多种IPC机制&#xff0c;每种机制都有其特定的用途和优势。以下是Linux上主要的IPC通信方式&#xff1a; 管道&#xff08…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...