| | |
| | | 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; |
| | | |
| | | [Route("api/[controller]")] |
| | | [ApiController] |
| | | |
| | | public class RealTimeInventoryController : ControllerBase |
| | | namespace MESApplication.Controllers.RealTimeInventory; |
| | | |
| | | [Route("api/[controller]")] |
| | | [ApiController] |
| | | public class RealTimeInventoryController : ControllerBase |
| | | { |
| | | private readonly string _baseUrl = "http://122.227.249.70:5050/k3cloud"; |
| | | private readonly string _connectionString; |
| | | |
| | | public RealTimeInventoryController(IConfiguration configuration) |
| | | { |
| | | private readonly string _connectionString; |
| | | private readonly string _baseUrl = "http://122.227.249.70:5050/k3cloud"; |
| | | _connectionString = configuration["AppSettings:DataBaseConn"]; |
| | | } |
| | | |
| | | public RealTimeInventoryController(IConfiguration configuration) |
| | | [HttpPost("syncInventory")] |
| | | public async Task<IActionResult> SyncInventory() |
| | | { |
| | | var httpClient = new HttpClientEx(); |
| | | httpClient.Url = |
| | | $"{_baseUrl}/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc"; |
| | | |
| | | var parameters = new List<object> |
| | | { |
| | | _connectionString = configuration["AppSettings:DataBaseConn"]; |
| | | } |
| | | "6654201b47f099", // 帐套Id |
| | | "Administrator", // 用户名 |
| | | "Lts88666*", // 密码 |
| | | 2052 // 语言(中文) |
| | | }; |
| | | |
| | | [HttpPost("syncInventory")] |
| | | public async Task<IActionResult> SyncInventory() |
| | | httpClient.Content = JsonConvert.SerializeObject(parameters); |
| | | var result = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"] |
| | | .Value<int>(); |
| | | |
| | | if (result != 1) |
| | | return BadRequest("登录失败"); |
| | | |
| | | var depotCodes = FetchDepotCodes(); |
| | | if (depotCodes.Count == 0) |
| | | return NotFound("未找到有效的DEPOTS_CODE"); |
| | | |
| | | DeleteInventoryData(); |
| | | |
| | | var depotCodesStr = string.Join(",", depotCodes); |
| | | var hasMoreData = true; |
| | | var pageIndex = 1; |
| | | |
| | | while (hasMoreData) |
| | | { |
| | | HttpClientEx httpClient = new HttpClientEx(); |
| | | httpClient.Url = $"{_baseUrl}/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc"; |
| | | |
| | | var parameters = new List<object> |
| | | var model = new InventoryParamModel |
| | | { |
| | | "6654201b47f099", // 帐套Id |
| | | "Administrator", // 用户名 |
| | | "Lts88666*", // 密码 |
| | | 2052 // 语言(中文) |
| | | fstocknumbers = depotCodesStr, |
| | | isshowauxprop = true, |
| | | isshowstockloc = true, |
| | | pageindex = pageIndex, |
| | | pagerows = 10000 |
| | | }; |
| | | |
| | | httpClient.Content = JsonConvert.SerializeObject(parameters); |
| | | var result = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"].Value<int>(); |
| | | 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 (result != 1) |
| | | return BadRequest("登录失败"); |
| | | |
| | | List<string> depotCodes = FetchDepotCodes(); |
| | | if (depotCodes.Count == 0) |
| | | return NotFound("未找到有效的DEPOTS_CODE"); |
| | | |
| | | DeleteInventoryData(); |
| | | |
| | | string depotCodesStr = string.Join(",", depotCodes); |
| | | bool hasMoreData = true; |
| | | int pageIndex = 1; |
| | | |
| | | while (hasMoreData) |
| | | if (inventoryData?.Data == null || inventoryData.Data.Count == 0) |
| | | { |
| | | InventoryParamModel model = new InventoryParamModel |
| | | { |
| | | fstocknumbers = depotCodesStr, |
| | | isshowauxprop = true, |
| | | isshowstockloc = true, |
| | | pageindex = pageIndex, |
| | | 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); |
| | | |
| | | if (inventoryData?.Data == null || inventoryData.Data.Count == 0) |
| | | hasMoreData = false; |
| | | else |
| | | { |
| | | InsertInventoryData(inventoryData); |
| | | pageIndex++; |
| | | } |
| | | hasMoreData = false; |
| | | } |
| | | |
| | | return Ok("库存数据导入完成"); |
| | | } |
| | | |
| | | private List<string> FetchDepotCodes() |
| | | { |
| | | List<string> depotCodes = new List<string>(); |
| | | using (var connection = new OracleConnection(_connectionString)) |
| | | else |
| | | { |
| | | 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"; |
| | | using (var cmd = new OracleCommand(query, connection)) |
| | | using (var reader = cmd.ExecuteReader()) |
| | | { |
| | | while (reader.Read()) |
| | | depotCodes.Add(reader.GetString(0)); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine("获取仓库代码时出错: " + ex.Message); |
| | | } |
| | | } |
| | | return depotCodes; |
| | | } |
| | | |
| | | private void DeleteInventoryData() |
| | | { |
| | | using (var connection = new OracleConnection(_connectionString)) |
| | | { |
| | | try |
| | | { |
| | | connection.Open(); |
| | | using (var transaction = connection.BeginTransaction()) |
| | | { |
| | | using (var deleteCmd = new OracleCommand("DELETE FROM ERPKCPC", connection)) |
| | | { |
| | | deleteCmd.ExecuteNonQuery(); |
| | | } |
| | | transaction.Commit(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine("删除库存数据时出错: " + ex.Message); |
| | | } |
| | | InsertInventoryData(inventoryData); |
| | | pageIndex++; |
| | | } |
| | | } |
| | | |
| | | private void InsertInventoryData(InventoryResponse inventoryData) |
| | | { |
| | | using (var connection = new OracleConnection(_connectionString)) |
| | | { |
| | | try |
| | | { |
| | | connection.Open(); |
| | | using (var transaction = connection.BeginTransaction()) |
| | | { |
| | | 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)"; |
| | | 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)); |
| | | return Ok("库存数据导入完成"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | cmd.ExecuteNonQuery(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | transaction.Rollback(); |
| | | Console.WriteLine("插入库存数据时出错: " + ex.Message); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | transaction.Commit(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | private List<string> FetchDepotCodes() |
| | | { |
| | | var depotCodes = new List<string>(); |
| | | using (var connection = new OracleConnection(_connectionString)) |
| | | { |
| | | try |
| | | { |
| | | connection.Open(); |
| | | 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()) |
| | | { |
| | | Console.WriteLine("数据库连接出错: " + ex.Message); |
| | | while (reader.Read()) |
| | | depotCodes.Add(reader.GetString(0)); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine("获取仓库代码时出错: " + ex.Message); |
| | | } |
| | | } |
| | | |
| | | return depotCodes; |
| | | } |
| | | |
| | | private void DeleteInventoryData() |
| | | { |
| | | using (var connection = new OracleConnection(_connectionString)) |
| | | { |
| | | try |
| | | { |
| | | connection.Open(); |
| | | using (var transaction = connection.BeginTransaction()) |
| | | { |
| | | using (var deleteCmd = |
| | | new OracleCommand("DELETE FROM ERPKCPC", connection)) |
| | | { |
| | | deleteCmd.ExecuteNonQuery(); |
| | | } |
| | | |
| | | transaction.Commit(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine("删除库存数据时出错: " + ex.Message); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void InsertInventoryData(InventoryResponse inventoryData) |
| | | { |
| | | using (var connection = new OracleConnection(_connectionString)) |
| | | { |
| | | try |
| | | { |
| | | connection.Open(); |
| | | using (var transaction = connection.BeginTransaction()) |
| | | { |
| | | foreach (var item in inventoryData.Data) |
| | | { |
| | | 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)); |
| | | |
| | | try |
| | | { |
| | | cmd.ExecuteNonQuery(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | transaction.Rollback(); |
| | | Console.WriteLine("插入库存数据时出错: " + ex.Message); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | | transaction.Commit(); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine("数据库连接出错: " + ex.Message); |
| | | } |
| | | } |
| | | } |
| | | } |