11
啊鑫
2025-07-15 5dc3cc86f5835369cd830f2a83318b9a8d69cf69
MESApplication/Controllers/RealTimeInventory/RealTimeInventoryController.cs
@@ -1,26 +1,17 @@
using MES.Service.Dto.webApi.RealTimeInventory;
namespace MESApplication.Controllers.RealTimeInventory;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace MESApplication.Controllers.RealTimeInventory;
    [Route("api/[controller]")]
    [ApiController]
    public class RealTimeInventoryController : ControllerBase
    {
        private readonly string _connectionString;
        private readonly string _baseUrl = "http://122.227.249.70:5050/k3cloud";
    private readonly string _connectionString;
        public RealTimeInventoryController(IConfiguration configuration)
        {
@@ -30,8 +21,9 @@
        [HttpPost("syncInventory")]
        public async Task<IActionResult> SyncInventory()
        {
            HttpClientEx httpClient = new HttpClientEx();
            httpClient.Url = $"{_baseUrl}/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
        var httpClient = new HttpClientEx();
        httpClient.Url =
            $"{_baseUrl}/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
            var parameters = new List<object>
            {
@@ -42,24 +34,25 @@
            };
            httpClient.Content = JsonConvert.SerializeObject(parameters);
            var result = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"].Value<int>();
        var result = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"]
            .Value<int>();
            if (result != 1)
                return BadRequest("登录失败");
            List<string> depotCodes = FetchDepotCodes();
        var depotCodes = FetchDepotCodes();
            if (depotCodes.Count == 0)
                return NotFound("未找到有效的DEPOTS_CODE");
            DeleteInventoryData();
            string depotCodesStr = string.Join(",", depotCodes);
            bool hasMoreData = true;
            int pageIndex = 1;
        var depotCodesStr = string.Join(",", depotCodes);
        var hasMoreData = true;
        var pageIndex = 1;
            while (hasMoreData)
            {
                InventoryParamModel model = new InventoryParamModel
            var model = new InventoryParamModel
                {
                    fstocknumbers = depotCodesStr,
                    isshowauxprop = true,
@@ -68,13 +61,18 @@
                    pagerows = 10000
                };
                httpClient.Url = $"{_baseUrl}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc";
                httpClient.Content = JsonConvert.SerializeObject(new List<object> { model });
                string response = httpClient.AsyncRequest();
                var inventoryData = JsonConvert.DeserializeObject<InventoryResponse>(response);
            httpClient.Url =
                $"{_baseUrl}/Kingdee.K3.SCM.WebApi.ServicesStub.InventoryQueryService.GetInventoryData.common.kdsvc";
            httpClient.Content =
                JsonConvert.SerializeObject(new List<object> { model });
            var response = httpClient.AsyncRequest();
            var inventoryData =
                JsonConvert.DeserializeObject<InventoryResponse>(response);
                if (inventoryData?.Data == null || inventoryData.Data.Count == 0)
            {
                    hasMoreData = false;
            }
                else
                {
                    InsertInventoryData(inventoryData);
@@ -87,13 +85,14 @@
        private List<string> FetchDepotCodes()
        {
            List<string> depotCodes = new List<string>();
        var depotCodes = new List<string>();
            using (var connection = new OracleConnection(_connectionString))
            {
                try
                {
                    connection.Open();
                    string query = "SELECT DEPOTS_CODE FROM MES_INV_ITEM_STOCKS WHERE DEPOTS_CODE IS NOT NULL AND DEPOTS_CODE NOT IN ('MJ','CY-MJ') GROUP BY DEPOTS_CODE";
                var query =
                    "SELECT DEPOTS_CODE FROM MES_INV_ITEM_STOCKS WHERE DEPOTS_CODE IS NOT NULL AND DEPOTS_CODE NOT IN ('MJ','CY-MJ') GROUP BY DEPOTS_CODE";
                    using (var cmd = new OracleCommand(query, connection))
                    using (var reader = cmd.ExecuteReader())
                    {
@@ -106,6 +105,7 @@
                    Console.WriteLine("获取仓库代码时出错: " + ex.Message);
                }
            }
            return depotCodes;
        }
@@ -118,10 +118,12 @@
                    connection.Open();
                    using (var transaction = connection.BeginTransaction())
                    {
                        using (var deleteCmd = new OracleCommand("DELETE FROM ERPKCPC", connection))
                    using (var deleteCmd =
                           new OracleCommand("DELETE FROM ERPKCPC", connection))
                        {
                            deleteCmd.ExecuteNonQuery();
                        }
                        transaction.Commit();
                    }
                }
@@ -143,14 +145,22 @@
                    {
                        foreach (var item in inventoryData.Data)
                        {
                            string query = "INSERT INTO ERPKCPC (ITEM_ID, DEPOT_CODE, FQTY, ITEM_NO, ORGID) VALUES (:ITEM_ID, :DEPOT_CODE, :FQTY, :ITEM_NO, :ORGID)";
                        var query =
                            "INSERT INTO ERPKCPC (ITEM_ID, DEPOT_CODE, FQTY, ITEM_NO, ORGID) VALUES (:ITEM_ID, :DEPOT_CODE, :FQTY, :ITEM_NO, :ORGID)";
                            using (var cmd = new OracleCommand(query, connection))
                            {
                                cmd.Parameters.Add(new OracleParameter(":ITEM_ID", item.FmaterialId));
                                cmd.Parameters.Add(new OracleParameter(":DEPOT_CODE", item.FstockNumber));
                                cmd.Parameters.Add(new OracleParameter(":FQTY", item.Fqty));
                                cmd.Parameters.Add(new OracleParameter(":ITEM_NO", item.FmaterialNumber));
                                cmd.Parameters.Add(new OracleParameter(":ORGID", item.FstockorgId));
                            cmd.Parameters.Add(new OracleParameter(":ITEM_ID",
                                item.FmaterialId));
                            cmd.Parameters.Add(
                                new OracleParameter(":DEPOT_CODE",
                                    item.FstockNumber));
                            cmd.Parameters.Add(
                                new OracleParameter(":FQTY", item.Fqty));
                            cmd.Parameters.Add(new OracleParameter(":ITEM_NO",
                                item.FmaterialNumber));
                            cmd.Parameters.Add(
                                new OracleParameter(":ORGID",
                                    item.FstockorgId));
                                try
                                {
@@ -164,6 +174,7 @@
                                }
                            }
                        }
                        transaction.Commit();
                    }
                }
@@ -174,4 +185,3 @@
            }
        }
    }