zjh
5 天以前 23302eec1c9f2a8e1d8b41f7001950e046208cd6
即时库存获取代码提交
已修改1个文件
已添加4个文件
292 ■■■■■ 文件已修改
StandardPda/MES.Service/Dto/service/WhqohDto.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/Dto/service/WhqohList.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/service/Warehouse/whqohDtoManager.cs 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MESApplication/Controllers/Warehouse/WhqohController.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MESApplication/appsettings.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
StandardPda/MES.Service/Dto/service/WhqohDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
namespace MES.Service.Dto.service
{
    public class WhqohDto
    {
        //public List<WhqohList> items { get; set; }
        public string itemId { get; set; }
    }
}
StandardPda/MES.Service/Dto/service/WhqohList.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
using 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; }
    }
}
StandardPda/MES.Service/service/Warehouse/whqohDtoManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
using 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;
            }
        }
    }
}
StandardPda/MESApplication/Controllers/Warehouse/WhqohController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
using 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);
            }
        }
    }
}
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",
    //正式库
    //"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",
    //测试库(发布时请切换正式库,提交代码勿提交此文件)
    "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正式
    "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正式
    "XKYamgylchedd": "0",
    "U9IP": "192.168.1.66:45795" //U9服务器IP地址,科技正式
    //"U9IP": "192.168.1.66:45796" //U9服务器IP地址,科技测试
    //"U9IP": "192.168.1.66:45798" //U9服务器IP地址,小步正式
    //"U9IP": "192.168.1.66:45797" //U9服务器IP地址,小步测试
  }
}