记录一个问题

问题描述

如果一个物料既在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方法用于查找可以递补进托盘库的物料。

在实际应用中,你可能需要根据实际情况调整数据结构、逻辑和错误处理。此外,如果物料和库存信息存储在数据库中,你需要编写数据库访问代码来获取和更新这些数据。

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

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

相关文章

13018.CUDA工程配置GDB调试

文章目录 1 工程CMakeLists.txt2 vscode配置launch.json,settings.json,tasks.json文件 1 工程CMakeLists.txt cmake_minimum_required(VERSION 3.8) # 根据你的CMake版本调整 # 设置项目名称 project(ez_compower_upward VERSION 0.1 LANGUAGES CXX CUDA)find_package(CUDA …

【机器学习】Whisper:开源语音转文本(speech-to-text)大模型实战

目录 一、引言 二、Whisper 模型原理 2.1 模型架构 2.2 语音处理 2.3 文本处理 三、Whisper 模型实战 3.1 环境安装 3.2 模型下载 3.3 模型推理 3.4 完整代码 3.5 模型部署 四、总结 一、引言 上一篇对​​​​​​​ChatTTS文本转语音模型原理和实战进行了讲解&a…

【语义分割系列】基于cityscape的DDRNet算法

基于cityscape的DDRNet算法 前言 DDRNet是专门为实时语义分割设计的高效主干。该模型由两个深度分支组成,在这两个分支之间执行多次双边融合,并且还设计了一个新的上下文信息抽取器,名为深度聚合金字塔池模块(DAPPM),用于扩大有效的接受域,并基于低分辨率特征映射融合…

计算机网络——数据链路层(数据链路层概述及基本问题)

链路、数据链路和帧的概念 数据链路层在物理层提供服务的基础上向网络层提供服务&#xff0c;其主要作用是加强物理层传输原始比特流的功能&#xff0c;将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路&#xff0c;使之对网络层表现为一条无差错的链路。 链路(…

Steam夏促史低游戏推荐 Steam夏促哪有游戏值得入手

steam夏季促销来袭&#xff0c;有这很多的游戏都进行打折出售&#xff0c;而且还有这很多的游戏都迎来了史低&#xff0c;简直是白送&#xff0c;很多玩家都想趁着这个时间入手自己喜欢的游戏&#xff0c;为了方便大家了解&#xff0c;下面我给大家带来steam夏季促销史低的游戏…

CO-DETR利用coco数据集训练和推理过程

CO-DETR利用coco数据集训练和推理过程&#xff0c;参考链接 Co-DETR训练自己的数据集 文章目录 前言训练过程推理过程总结 前言 环境&#xff1a;PyTorch 1.11.0 Python 3.8(ubuntu20.04) Cuda 11.3 先是在github上下载CO-DETR模型 !git clone https://github.com/Sense-X/Co…

[C++深入] --- vector容器浅析

vector是一个封装了动态大小数组的顺序容器,它能够存放各种类型的对象。 可以删除元素、可以插入元素、可以查找元素,做这些工作我们无需管理容器内存。容器内存管理,这种脏活累活全部交由vector管理。了解一下vector的内存管理策略,能够更加充分的利用内存。 1 vector内存…

陌陌笔试--并发打印文件内最有钱的老板的消费金额(算法)

题目&#xff1a; 算法中需要打印消费前十老板的消费金额&#xff0c;解决保留两位小数&#xff0c;并发是 JAVA 中的常考题&#xff0c; 我这里简单模拟下了数据&#xff0c;关键数据是用户id和消费金额。 解题思路&#xff1a; 1. 最简单的思路是单线程&#xff0c;偷懒…

【面试系列】Go 语言高频面试题

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

狂神说Java之 rabbitmq高级分布式事务

分布式事务的完整架构图 案例场景分析 案例一&#xff1a;用RestTemplate演示&#xff08;不可靠生产&#xff0c;会出现问题&#xff09; 创建一个订单模块 创建一个OrderDataBaseService服务 创建一个order的service服务&#xff0c;调用saveOrder()方法 创建一个运单模块…

2024.06.20校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 速腾聚创 RoboSense“天才罗伯特”计划面向全球招募 &#xff08;内推&#xff09; 校招 | 速腾聚创 RoboSense“天才罗伯特”计划面向全球招募 &#xff08;内推&#xff09; …

java.util.function实现原理和Java使用场景【Function、Predicate集合转换过滤,BiConsumer事件处理】

简介 java.util.function 是 Java 8 引入的一个功能包,它包含了多种函数式接口的定义,使得在 Java 中进行函数式编程变得更为方便。下面我将分别介绍 java.util.function 的作用、实现原理、常用 Java 使用场景以及代码示例。 作用 java.util.function 的主要作用是为 Jav…

Java导出Excel并邮件发送

一、导出Excel 添加maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10-FINAL</version></dependency><dependency><groupId>org.apache.poi</groupI…

软件设计流程和开发流程及规范(Word)

2 过程总体描述 2.1 过程概述 2.2 过程流程图 3 过程元素描述 3.1 产品方案 3.2 产品设计 3.3 产品实现 获取方式&#xff1a;本文末个人名片直接获取。 软件资料清单列表部分文档清单&#xff1a;工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#x…

找不到vcomp140.dll怎么办,总结多种解决方法

​在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcomp140.dll丢失”。那么&#xff0c;vcomp140.dll是什么&#xff1f;它为什么会丢失&#xff1f;丢失后对电脑有什么影响&#xff1f;又该如何解决呢&#xff1f;本文将详细介绍vc…

根据肥胖类型选择减调方向收获窈窕身材

我们生活中胖子很多&#xff0c;从胖到瘦的人也不少&#xff0c;但瘦了后对自己身材满意的人却是不多的&#xff0c;很多人瘦了也只是减掉了身上的赘肉而已&#xff0c;大体的身形却是没有变化的&#xff0c;因此&#xff0c;并不感到满意。因为他们本身的形体是固定的&#xf…

半正定矩阵

在矩阵分析和线性代数中&#xff0c;半正定矩阵&#xff08;Positive Semi-Definite Matrix&#xff0c;简称PSD矩阵&#xff09;是一类重要的矩阵。一个矩阵被称为半正定矩阵有以下几种等价的定义和性质&#xff1a; 定义 一个对称矩阵 M \mathbf{M} M被称为半正定矩阵&…

009、MongoDB的分片策略

目录 MongoDB的分片策略:范围分片vs哈希分片 1. 范围分片(Range Sharding) 1.1 工作原理 1.2 优点 1.3 缺点 1.4 研究支持 2. 哈希分片(Hash Sharding) 2.1 工作原理 2.2 优点 2.3 缺点 2.4 研究支持 3. 选择合适的分片策略 4. 实践案例 4.1 电子商务平台 4.2 社…

SpringBoot-SpringBoot整合Swagger使用教程(图文介绍,一篇就够了)

前言 日常开发中&#xff0c;接口都是和开发文档相结合的。不论是和前端对接还是三方对接亦或者是接口留档&#xff0c;当我们开发完接口后&#xff0c;都需要去创建对应的接口文档。而修改接口后也要修改相对应的接口文档&#xff0c;但是这个真的很容易疏漏。而且相对于繁重的…

WEB攻防【6】——Python考点/CTF与CMS/SSTI模板注入/PYC反编译

#知识点 1、PYC文件反编译 2、python-web-SSTI 3、SSTI模板注入利用分析 SSTI 就是服务器端模板注入 &#xff08;Server-Side Template Injection&#xff09; 当前使用的一些框架&#xff0c;比如python的flask&#xff0c;php的tp&#xff0c;java的spring等一般都采用成…