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
|
{
|
private readonly string _connectionString;
|
private readonly string _baseUrl = "http://122.227.249.70:5050/k3cloud";
|
|
public RealTimeInventoryController(IConfiguration configuration)
|
{
|
_connectionString = configuration["AppSettings:DataBaseConn"];
|
}
|
|
[HttpPost("syncInventory")]
|
public async Task<IActionResult> SyncInventory()
|
{
|
HttpClientEx httpClient = new HttpClientEx();
|
httpClient.Url = $"{_baseUrl}/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
|
|
var parameters = new List<object>
|
{
|
"6654201b47f099", // 帐套Id
|
"Administrator", // 用户名
|
"Lts88666*", // 密码
|
2052 // 语言(中文)
|
};
|
|
httpClient.Content = JsonConvert.SerializeObject(parameters);
|
var result = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"].Value<int>();
|
|
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)
|
{
|
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++;
|
}
|
}
|
|
return Ok("库存数据导入完成");
|
}
|
|
private List<string> FetchDepotCodes()
|
{
|
List<string> 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";
|
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);
|
}
|
}
|
}
|
|
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));
|
|
try
|
{
|
cmd.ExecuteNonQuery();
|
}
|
catch (Exception ex)
|
{
|
transaction.Rollback();
|
Console.WriteLine("插入库存数据时出错: " + ex.Message);
|
return;
|
}
|
}
|
}
|
transaction.Commit();
|
}
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine("数据库连接出错: " + ex.Message);
|
}
|
}
|
}
|
}
|