From 23302eec1c9f2a8e1d8b41f7001950e046208cd6 Mon Sep 17 00:00:00 2001
From: zjh <2207896513@qq.com>
Date: 星期四, 21 八月 2025 21:56:22 +0800
Subject: [PATCH] 即时库存获取代码提交
---
StandardPda/MESApplication/appsettings.json | 12 +
StandardPda/MES.Service/Dto/service/WhqohDto.cs | 9 +
StandardPda/MES.Service/Dto/service/WhqohList.cs | 32 ++++++
StandardPda/MESApplication/Controllers/Warehouse/WhqohController.cs | 71 ++++++++++++++
StandardPda/MES.Service/service/Warehouse/whqohDtoManager.cs | 168 +++++++++++++++++++++++++++++++++
5 files changed, 288 insertions(+), 4 deletions(-)
diff --git a/StandardPda/MES.Service/Dto/service/WhqohDto.cs b/StandardPda/MES.Service/Dto/service/WhqohDto.cs
new file mode 100644
index 0000000..f9cee95
--- /dev/null
+++ b/StandardPda/MES.Service/Dto/service/WhqohDto.cs
@@ -0,0 +1,9 @@
+锘縩amespace MES.Service.Dto.service
+{
+ public class WhqohDto
+ {
+
+ //public List<WhqohList> items { get; set; }
+ public string itemId { get; set; }
+ }
+}
diff --git a/StandardPda/MES.Service/Dto/service/WhqohList.cs b/StandardPda/MES.Service/Dto/service/WhqohList.cs
new file mode 100644
index 0000000..5d74807
--- /dev/null
+++ b/StandardPda/MES.Service/Dto/service/WhqohList.cs
@@ -0,0 +1,32 @@
+锘縰sing System.Text.Json.Serialization;
+
+namespace MES.Service.Dto.service
+{
+ public class WhqohList
+ {
+ /// <summary>
+ /// 鐗╂枡ID
+ /// </summary>
+ [JsonPropertyName("ItemId")]
+ public string ItemId { get; set; }
+
+ ///// <summary>
+ ///// 浠撳簱ID
+ ///// </summary>
+ //[JsonPropertyName("WhId")]
+ //public string WhId { get; set; }
+
+ ///// <summary>
+ ///// 椤圭洰
+ ///// </summary>
+ //[JsonPropertyName("Project")]
+ //public string Project { get; set; }
+
+ ///// <summary>
+ ///// 鎵瑰彿
+ ///// </summary>
+ //[JsonPropertyName("LotCode")]
+ //public string LotCode { get; set; }
+
+ }
+}
diff --git a/StandardPda/MES.Service/service/Warehouse/whqohDtoManager.cs b/StandardPda/MES.Service/service/Warehouse/whqohDtoManager.cs
new file mode 100644
index 0000000..980a4c7
--- /dev/null
+++ b/StandardPda/MES.Service/service/Warehouse/whqohDtoManager.cs
@@ -0,0 +1,168 @@
+锘縰sing Masuit.Tools;
+using MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using Newtonsoft.Json;
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Configuration;
+using System.Net.Http;
+using System.Globalization;
+using System.IO;
+
+namespace MES.Service.service.Warehouse
+{
+ #region 鎺ュ彛杩斿洖鏁版嵁缁撴瀯瀹氫箟
+ public class WhqohResponse
+ {
+ public Header Header { get; set; }
+ public List<BodyItem> Body { get; set; }
+ }
+
+ public class Header
+ {
+ public int Code { get; set; }
+ public bool Success { get; set; }
+ public string Message { get; set; }
+ }
+
+ public class BodyItem
+ {
+ public string ItemId { get; set; }
+ public List<Detail> Detail { get; set; }
+ }
+
+ public class Detail
+ {
+ public string WhId { get; set; }
+ public string UomId { get; set; }
+ public string CurrentQuantity { get; set; }
+ public string AvailableQuantity { get; set; }
+ public string Project { get; set; }
+ public string LotCode { get; set; }
+ }
+ #endregion
+
+ public class whqohDtoManager
+ {
+ private static IConfiguration configuration = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
+ .Build();
+
+ // Oracle 鏁版嵁搴撹繛鎺ュ瓧绗︿覆
+ private static readonly string connectionString = configuration["AppSettings:DataBaseConn"];
+ // 鎺ュ彛鍦板潃
+ private static readonly string apiUrl = "http://" + configuration["AppSettings:U9IP"] + "/api/getWhqoh";
+
+ public static async Task<bool> GetWhqoh(WhqohDto mesItemQtRKDto)
+ {
+ // 1. 璇锋眰鎺ュ彛
+ var requestBody = new[]
+ {
+ new { ItemId = mesItemQtRKDto.itemId, WhId = "", Project = "", LotCode = "" }
+ };
+
+ string jsonRequest = JsonConvert.SerializeObject(requestBody);
+
+ using var http = new HttpClient();
+ var response = await http.PostAsync(apiUrl,
+ new StringContent(jsonRequest, Encoding.UTF8, "application/json"));
+
+ string responseStr = await response.Content.ReadAsStringAsync();
+
+ // 2. 鍙嶅簭鍒楀寲鎺ュ彛杩斿洖 JSON
+ var result = JsonConvert.DeserializeObject<WhqohResponse>(responseStr);
+
+ if (result?.Header.Success != true || result.Body == null)
+ {
+ Console.WriteLine("鎺ュ彛杩斿洖澶辫触: " + result?.Header?.Message);
+ return false;
+ }
+
+ // 3. 鎵佸钩鍖栧苟鍘婚噸
+ var records = new HashSet<(string ItemId, string WhId, string UomId, string Project, string LotCode)>();
+ var distinctList = new List<(string ItemId, string WhId, string UomId, decimal CurrentQty, decimal AvailableQty, string Project, string LotCode)>();
+
+ foreach (var body in result.Body)
+ {
+ foreach (var detail in body.Detail)
+ {
+ var key = (body.ItemId, detail.WhId, detail.UomId, detail.Project ?? "", detail.LotCode ?? "");
+ if (records.Add(key)) // 鍘婚噸
+ {
+ distinctList.Add((
+ body.ItemId,
+ detail.WhId,
+ detail.UomId,
+ decimal.Parse(detail.CurrentQuantity, CultureInfo.InvariantCulture),
+ decimal.Parse(detail.AvailableQuantity, CultureInfo.InvariantCulture),
+ detail.Project ?? "",
+ detail.LotCode ?? ""
+ ));
+ }
+ }
+ }
+
+ // 4. 鍏堝垹鍚庢彃
+ using var conn = new OracleConnection(connectionString);
+ await conn.OpenAsync();
+ using var tran = conn.BeginTransaction();
+
+ try
+ {
+ string deleteSql = "";
+ // 鍒犻櫎鎵�鏈夋棫鏁版嵁锛堟寜闇�姹傝皟鏁磋寖鍥达紝鍙互鍔� WHERE锛�
+ if (mesItemQtRKDto.itemId=="" || mesItemQtRKDto.itemId==null)
+ {
+ deleteSql = "DELETE FROM WHQOH_DETAIL";
+ }
+ else
+ {
+ deleteSql = "DELETE FROM WHQOH_DETAIL where ITEM_ID='"+ mesItemQtRKDto.itemId + "'";
+ }
+
+ using (var delCmd = new OracleCommand(deleteSql, conn))
+ {
+ delCmd.Transaction = tran;
+ await delCmd.ExecuteNonQueryAsync();
+ }
+
+ // 鎻掑叆鏂版暟鎹�
+ string insertSql = @"
+INSERT INTO WHQOH_DETAIL
+(ID, ITEM_ID, WH_ID, UOM_ID, CURRENT_QUANTITY, AVAILABLE_QUANTITY, PROJECT_CODE, LOT_CODE)
+VALUES
+(SEQ_WHQOH_DETAIL.NEXTVAL, :ItemId, :WhId, :UomId, :CurrentQty, :AvailableQty, :Project, :LotCode)";
+
+ using var cmd = new OracleCommand(insertSql, conn);
+ cmd.Transaction = tran;
+ cmd.ArrayBindCount = distinctList.Count;
+
+ cmd.Parameters.Add(":ItemId", OracleDbType.Varchar2, distinctList.Select(x => x.ItemId).ToArray(), System.Data.ParameterDirection.Input);
+ cmd.Parameters.Add(":WhId", OracleDbType.Varchar2, distinctList.Select(x => x.WhId).ToArray(), System.Data.ParameterDirection.Input);
+ cmd.Parameters.Add(":UomId", OracleDbType.Varchar2, distinctList.Select(x => x.UomId).ToArray(), System.Data.ParameterDirection.Input);
+ cmd.Parameters.Add(":CurrentQty", OracleDbType.Decimal, distinctList.Select(x => x.CurrentQty).ToArray(), System.Data.ParameterDirection.Input);
+ cmd.Parameters.Add(":AvailableQty", OracleDbType.Decimal, distinctList.Select(x => x.AvailableQty).ToArray(), System.Data.ParameterDirection.Input);
+ cmd.Parameters.Add(":Project", OracleDbType.Varchar2, distinctList.Select(x => x.Project).ToArray(), System.Data.ParameterDirection.Input);
+ cmd.Parameters.Add(":LotCode", OracleDbType.Varchar2, distinctList.Select(x => x.LotCode).ToArray(), System.Data.ParameterDirection.Input);
+
+ int affected = await cmd.ExecuteNonQueryAsync();
+ tran.Commit();
+
+ Console.WriteLine($"鎵归噺澶勭悊鎴愬姛锛屽叡 {affected} 鏉℃暟鎹鎻掑叆銆�");
+ return true;
+ }
+ catch (Exception ex)
+ {
+ tran.Rollback();
+ Console.WriteLine("鎵归噺澶勭悊澶辫触: " + ex.Message);
+ return false;
+ }
+ }
+ }
+}
diff --git a/StandardPda/MESApplication/Controllers/Warehouse/WhqohController.cs b/StandardPda/MESApplication/Controllers/Warehouse/WhqohController.cs
new file mode 100644
index 0000000..0247c64
--- /dev/null
+++ b/StandardPda/MESApplication/Controllers/Warehouse/WhqohController.cs
@@ -0,0 +1,71 @@
+锘縰sing MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System.Dynamic;
+
+namespace MESApplication.Controllers.Warehouse
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WhqohController : ControllerBase
+ {
+ private readonly whqohDtoManager m = new();
+
+ private readonly MessageCenterManager _manager = new();
+
+ private readonly string METHOD = "POST";
+
+ private readonly string TableName = "Whqoh";
+
+ private readonly string URL = "http://localhost:10054/api/Whqoh/";
+
+ /// <summary>
+ /// 鍒锋柊搴撳瓨
+ /// </summary>
+ /// <returns></returns>
+ [HttpPost("getWhqoh")]
+ public async Task<ResponseResult> getWhqoh(WhqohDto whqohDto)
+ {
+ var entity = new MessageCenter();
+ entity.TableName = TableName;
+ entity.Url = URL + "getWhqoh";
+ entity.Method = METHOD;
+ entity.Data = Newtonsoft.Json.JsonConvert.SerializeObject(whqohDto);
+ entity.Status = 1;
+ entity.CreateBy = "PL017";
+ try
+ {
+ dynamic resultInfos = new ExpandoObject();
+ bool result = await whqohDtoManager.GetWhqoh(whqohDto);
+ resultInfos.tbBillList = result;
+
+ entity.Result = 0;
+ //if (result) entity.Result = 1;
+ //entity.DealWith = 1;
+ _manager.save(entity);
+
+ return new ResponseResult
+ {
+ status = 0,
+ message = "OK",
+ data = resultInfos
+ };
+ }
+ catch (Exception ex)
+ {
+ entity.Result = 0;
+ entity.DealWith = 0;
+ entity.ResultData = ex.Message;
+ _manager.save(entity);
+
+ return ResponseResult.ResponseError(ex);
+ }
+ }
+
+
+ }
+}
diff --git a/StandardPda/MESApplication/appsettings.json b/StandardPda/MESApplication/appsettings.json
index 7af20e8..235b707 100644
--- a/StandardPda/MESApplication/appsettings.json
+++ b/StandardPda/MESApplication/appsettings.json
@@ -11,11 +11,15 @@
"TestErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfo",
"ProductionErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfoFormal",
//姝e紡搴�
- //"DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.104 )(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = zmz_test; Password=zmztest"
+ "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.104 )(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = zmz_prd; Password=zmzprd",
//娴嬭瘯搴擄紙鍙戝竷鏃惰鍒囨崲姝e紡搴擄紝鎻愪氦浠g爜鍕挎彁浜ゆ鏂囦欢锛�
- "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.104 )(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = zmz_test; Password=zmztest",
- //鎼哄浜戠幆澧冨垏鎹細0娴嬭瘯锛�1姝e紡
- "XKYamgylchedd": "0"
+ //"DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.104 )(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = zmz_test; Password=zmztest",
+ ////鎼哄浜戠幆澧冨垏鎹細0娴嬭瘯锛�1姝e紡
+ "XKYamgylchedd": "0",
+ "U9IP": "192.168.1.66:45795" //U9鏈嶅姟鍣↖P鍦板潃,绉戞妧姝e紡
+ //"U9IP": "192.168.1.66:45796" //U9鏈嶅姟鍣↖P鍦板潃,绉戞妧娴嬭瘯
+ //"U9IP": "192.168.1.66:45798" //U9鏈嶅姟鍣↖P鍦板潃,灏忔姝e紡
+ //"U9IP": "192.168.1.66:45797" //U9鏈嶅姟鍣↖P鍦板潃,灏忔娴嬭瘯
}
}
--
Gitblit v1.9.3