山东雷驰
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

348 lines
17 KiB

using Dapper;
using Kean.Infrastructure.Database.Repository.Default;
using Kean.Infrastructure.Database.Repository.Default.Entities;
//using Kean.Infrastructure.Database.Repository.Record.Entities;
using Kean.Infrastructure.Soap.Hithium.Models;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace Kean.Infrastructure.Soap.Hithium
{
public sealed class WmsAPIService
{
private readonly ILogger<WmsAPIService> _logger; // 日志
//private readonly IRecordDb _recordDb;
//private readonly IDefaultDb _database; // 默认数据库
private readonly HttpClient _client;
private readonly IConfiguration _configuration;
/// <summary>
/// 依赖注入
/// </summary>
public WmsAPIService(ILogger<WmsAPIService> logger
//IRecordDb recordDb
//IDefaultDb database
)
{
_logger = logger;
//_recordDb = recordDb;
//_database = database;
_client = new HttpClient();
_configuration = (IConfiguration)new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
}
/// <summary>
/// 入库过账
/// </summary>
/// <param name="function"></param>
/// <param name="paramIn"></param>
/// <param name="barcode"></param>
/// <param name="requestNo"></param>
/// <returns></returns>
public async Task<string> FeedbackIn(string function, string paramIn, string barcode, string requestNo, string feedbackStatus)
{
_logger.LogInformation($"调用海辰WMS接口[{function}]开始:参数 requestNo-{requestNo} barcode-{barcode} paramIn-{paramIn} feedbackStatus-{feedbackStatus}");
Database.Repository.Default.Entities.T_INTERFACE_RECORD interfaceRecord = new Database.Repository.Default.Entities.T_INTERFACE_RECORD();
interfaceRecord.DIRECTION = "ASRS->海辰WMS";
interfaceRecord.METHOD = function;
interfaceRecord.BARCODE = barcode;
interfaceRecord.REQUEST_NO = requestNo;
interfaceRecord.START_TIME = DateTime.Now;
string result = string.Empty;
bool bResult = true;
try
{
var url = _configuration["InterfaceUrl:HithiumWmsWebApi"];
var content = new StringContent(paramIn, Encoding.UTF8, "application/json");
//////实际用户
////byte[] bytes = Encoding.UTF8.GetBytes("siasun:siasun");
////_client.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(bytes));
var response = await _client.PostAsync(string.Format(url, function), content);
if (response.StatusCode == HttpStatusCode.OK)
{
result = await response.Content.ReadAsStringAsync();
Result ouRresult = JsonConvert.DeserializeObject<Result>(result);
if (ouRresult.code != "0")
{
bResult = false;
ouRresult.message = $"调用海辰WMS接口({function})返回失败,返回信息:({ouRresult.message})";
}
result = JsonConvert.SerializeObject(ouRresult, Formatting.Indented);
}
else
{
bResult = false;
_logger.LogWarning($"调用海辰WMS接口[{function}]异常:参数 requestNo-{requestNo} barcode-{barcode} 原因-StatusCode:{response.StatusCode} ReasonPhrase:{response.ReasonPhrase}");
result = JsonConvert.SerializeObject(new
{
Success = false,
ReturnMsg = $"调用海辰WMS接口({function})错误,原因-StatusCode:{response.StatusCode} ReasonPhrase:{response.ReasonPhrase}"
}, Formatting.Indented);
}
}
catch (Exception e)
{
bResult = false;
_logger.LogWarning($"调用海辰WMS接口[{function}]异常:参数 requestNo-{requestNo} barcode-{barcode} 原因-{e.Message}");
result = JsonConvert.SerializeObject(new
{
Success = false,
ReturnMsg = $"调用海辰WMS接口({function})错误,原因:{e.Message}"
},Formatting.Indented);
}
try
{
interfaceRecord.END_TIME = DateTime.Now;
interfaceRecord.CREATE_TIME = DateTime.Now;
interfaceRecord.PARAM_IN = paramIn;
interfaceRecord.PARAM_OUT = result;
interfaceRecord.RESULT = bResult?"0":"1";
//var temp = await _recordDb.From<T_INTERFACE_RECORD>().Add(interfaceRecord);
//_recordDb.Save();
//var temp = await _database.From<T_INTERFACE_RECORD>().Add(interfaceRecord);
//_database.Save();
var driver = Infrastructure.Database.Configuration.Configure("Default");
using (var context = driver.CreateContext())
{
//await context.From<Database.Repository.Default.Entities.T_INTERFACE_RECORD>().Add(interfaceRecord);
string sql = $" insert into T_INTERFACE_RECORD (DIRECTION, METHOD, BARCODE, REQUEST_NO, START_TIME, END_TIME, CREATE_TIME, PARAM_IN, PARAM_OUT, RESULT) " +
$"VALUES ('{interfaceRecord.DIRECTION}','{interfaceRecord.METHOD}','{interfaceRecord.BARCODE}','{interfaceRecord.REQUEST_NO}'," +
$"'{interfaceRecord.START_TIME}','{interfaceRecord.END_TIME}','{interfaceRecord.CREATE_TIME}','{interfaceRecord.PARAM_IN}','{interfaceRecord.PARAM_OUT}','{interfaceRecord.RESULT}')";
context.Execute(sql);
}
}
catch(Exception ex)
{
_logger.LogWarning($"创建调用海辰WMS接口[{function}]记录异常。参数 requestNo-{requestNo} barcode-{barcode} 原因-{ex.Message}");
}
try
{
var driver = Infrastructure.Database.Configuration.Configure("Default");
using (var context = driver.CreateContext())
{
string requestNoType = $"{requestNo}-{feedbackStatus}";
string sql = $" select [ID],[METHOD],[REQUEST_NO_TYPE],[REQUEST_NO],[BARCODE],[FEEDBACK_STATUS],[RESULT],[START_TIME],[LAST_END_TIME],[PARAM_IN],[LAST_PARAM_OUT],[CREATE_TIME] from T_ERROR_FEEDBACK where REQUEST_NO_TYPE = '{requestNoType}'";
var errFeedTemp = context.Query<T_ERROR_FEEDBACK>(sql);
if (errFeedTemp.Count() == 0)
{
T_ERROR_FEEDBACK errFeed = new T_ERROR_FEEDBACK();
errFeed.METHOD = function;
errFeed.REQUEST_NO_TYPE = requestNoType;
errFeed.REQUEST_NO = requestNo;
errFeed.BARCODE = barcode;
errFeed.FEEDBACK_STATUS = feedbackStatus;
errFeed.RESULT = bResult ? "0" : "1";
errFeed.START_TIME = interfaceRecord.START_TIME;
errFeed.LAST_END_TIME = interfaceRecord.END_TIME;
errFeed.PARAM_IN = paramIn;
errFeed.LAST_PARAM_OUT = result;
errFeed.CREATE_TIME = DateTime.Now;
sql = $" insert into T_ERROR_FEEDBACK (METHOD, REQUEST_NO_TYPE, REQUEST_NO, BARCODE, RESULT, START_TIME, LAST_END_TIME, PARAM_IN, LAST_PARAM_OUT, CREATE_TIME, FEEDBACK_STATUS) " +
$"VALUES ('{errFeed.METHOD}','{errFeed.REQUEST_NO_TYPE}','{errFeed.REQUEST_NO}','{errFeed.BARCODE}'," +
$"'{errFeed.RESULT}','{errFeed.START_TIME}','{errFeed.LAST_END_TIME}','{errFeed.PARAM_IN}','{errFeed.LAST_PARAM_OUT}','{errFeed.CREATE_TIME}','{errFeed.FEEDBACK_STATUS}')";
context.Execute(sql);
}
else
{
T_ERROR_FEEDBACK errFeed = errFeedTemp.First();
if (errFeed.RESULT != "0")
{
errFeed.RESULT = bResult ? "0" : "1";
errFeed.LAST_END_TIME = interfaceRecord.END_TIME;
errFeed.PARAM_IN = paramIn;
errFeed.LAST_PARAM_OUT = result;
sql = $" update T_ERROR_FEEDBACK set RESULT = '{errFeed.RESULT}',LAST_END_TIME = '{errFeed.LAST_END_TIME}',PARAM_IN = '{errFeed.PARAM_IN}',LAST_PARAM_OUT = '{errFeed.LAST_PARAM_OUT}' where ID = {errFeed.ID} ";
context.Execute(sql);
}
}
}
}
catch (Exception ex)
{
_logger.LogWarning($"创建接口ERR[{function}]记录异常。参数 requestNo-{requestNo} barcode-{barcode} feedbackStatus-{feedbackStatus} 原因-{ex.Message}");
}
_logger.LogInformation($"调用海辰WMS接口[{function}]结束:参数 requestNo-{requestNo} barcode-{barcode} result-{result}");
return result;
}
/// <summary>
/// 出库过账
/// </summary>
public async Task<string> FeedbackOut(string function, string paramIn, string barcode, string requestNo, string feedbackStatus)
{
_logger.LogInformation($"调用海辰WMS接口[{function}]开始:参数 requestNo-{requestNo} barcode-{barcode} paramIn-{paramIn} feedbackStatus-{feedbackStatus}");
T_INTERFACE_RECORD interfaceRecord = new T_INTERFACE_RECORD();
interfaceRecord.DIRECTION = "ASRS->海辰WMS";
interfaceRecord.METHOD = function;
interfaceRecord.BARCODE = barcode;
interfaceRecord.REQUEST_NO = requestNo;
interfaceRecord.START_TIME = DateTime.Now;
string result = string.Empty;
bool bResult = true;
try
{
var url = _configuration["InterfaceUrl:HithiumWmsWebApi"];
var content = new StringContent(paramIn, Encoding.UTF8, "application/json");
//////实际用户
////byte[] bytes = Encoding.UTF8.GetBytes("siasun:siasun");
////_client.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(bytes));
var response = await _client.PostAsync(string.Format(url, function), content);
if (response.StatusCode == HttpStatusCode.OK)
{
result = await response.Content.ReadAsStringAsync();
Result ouRresult = JsonConvert.DeserializeObject<Result>(result);
if (ouRresult.code != "0")
{
bResult = false;
ouRresult.message = $"调用海辰WMS接口({function})返回失败,返回信息:({ouRresult.message})";
}
result = JsonConvert.SerializeObject(ouRresult, Formatting.Indented);
;
}
else
{
bResult = false;
_logger.LogWarning($"调用海辰WMS接口[{function}]异常:参数 requestNo-{requestNo} barcode-{barcode} 原因-StatusCode:{response.StatusCode} ReasonPhrase:{response.ReasonPhrase}");
result = JsonConvert.SerializeObject(new
{
Success = false,
ReturnMsg = $"调用海辰WMS接口({function})错误,原因-StatusCode:{response.StatusCode} ReasonPhrase:{response.ReasonPhrase}"
}, Formatting.Indented);
}
}
catch (Exception e)
{
bResult = false;
_logger.LogWarning($"调用海辰WMS接口[{function}]异常:参数 requestNo-{requestNo} barcode-{barcode} 原因-{e.Message}");
result = JsonConvert.SerializeObject(new
{
Success = false,
ReturnMsg = $"调用海辰WMS接口({function})错误,原因:{e.Message}"
}, Formatting.Indented);
}
try
{
interfaceRecord.END_TIME = DateTime.Now;
interfaceRecord.CREATE_TIME = DateTime.Now;
interfaceRecord.PARAM_IN = paramIn;
interfaceRecord.PARAM_OUT = result;
interfaceRecord.RESULT = bResult ? "0" : "1";
//var temp = await _recordDb.From<T_INTERFACE_RECORD>().Add(interfaceRecord);
//_recordDb.Save();
//var temp = await _database.From<T_INTERFACE_RECORD>().Add(interfaceRecord);
//_database.Save();
var driver = Infrastructure.Database.Configuration.Configure("Default");
using (var context = driver.CreateContext())
{
//await context.From<T_INTERFACE_RECORD>().Add(interfaceRecord);
string sql = $" insert into T_INTERFACE_RECORD (DIRECTION, METHOD, BARCODE, REQUEST_NO, START_TIME, END_TIME, CREATE_TIME, PARAM_IN, PARAM_OUT, RESULT) " +
$"VALUES ('{interfaceRecord.DIRECTION}','{interfaceRecord.METHOD}','{interfaceRecord.BARCODE}','{interfaceRecord.REQUEST_NO}'," +
$"'{interfaceRecord.START_TIME}','{interfaceRecord.END_TIME}','{interfaceRecord.CREATE_TIME}','{interfaceRecord.PARAM_IN}','{interfaceRecord.PARAM_OUT}','{interfaceRecord.RESULT}')";
context.Execute(sql);
}
}
catch (Exception ex)
{
_logger.LogWarning($"创建调用海辰WMS接口[{function}]记录异常。参数 requestNo-{requestNo} barcode-{barcode} 原因-{ex.Message}");
}
try
{
var driver = Infrastructure.Database.Configuration.Configure("Default");
using (var context = driver.CreateContext())
{
string requestNoType = $"{requestNo}-{feedbackStatus}";
string sql = $" select [ID],[METHOD],[REQUEST_NO_TYPE],[REQUEST_NO],[BARCODE],[RESULT],[START_TIME],[LAST_END_TIME],[PARAM_IN],[LAST_PARAM_OUT],[CREATE_TIME] from T_ERROR_FEEDBACK where REQUEST_NO_TYPE = '{requestNoType}'";
var errFeedTemp = context.Query<T_ERROR_FEEDBACK>(sql);
if (errFeedTemp.Count() == 0)
{
T_ERROR_FEEDBACK errFeed = new T_ERROR_FEEDBACK();
errFeed.METHOD = function;
errFeed.REQUEST_NO_TYPE = requestNoType;
errFeed.REQUEST_NO = requestNo;
errFeed.BARCODE = barcode;
errFeed.FEEDBACK_STATUS = feedbackStatus;
errFeed.RESULT = bResult ? "0" : "1";
errFeed.START_TIME = interfaceRecord.START_TIME;
errFeed.LAST_END_TIME = interfaceRecord.END_TIME;
errFeed.PARAM_IN = paramIn;
errFeed.LAST_PARAM_OUT = result;
errFeed.CREATE_TIME = DateTime.Now;
sql = $" insert into T_ERROR_FEEDBACK (METHOD, REQUEST_NO_TYPE, REQUEST_NO, BARCODE, RESULT, START_TIME, LAST_END_TIME, PARAM_IN, LAST_PARAM_OUT, CREATE_TIME,FEEDBACK_STATUS) " +
$"VALUES ('{errFeed.METHOD}','{errFeed.REQUEST_NO_TYPE}','{errFeed.REQUEST_NO}','{errFeed.BARCODE}'," +
$"'{errFeed.RESULT}','{errFeed.START_TIME}','{errFeed.LAST_END_TIME}','{errFeed.PARAM_IN}','{errFeed.LAST_PARAM_OUT}','{errFeed.CREATE_TIME}','{errFeed.FEEDBACK_STATUS}')";
context.Execute(sql);
}
else
{
T_ERROR_FEEDBACK errFeed = errFeedTemp.First();
if (errFeed.RESULT != "0")
{
errFeed.RESULT = bResult ? "0" : "1";
errFeed.LAST_END_TIME = interfaceRecord.END_TIME;
errFeed.PARAM_IN = paramIn;
errFeed.LAST_PARAM_OUT = result;
sql = $" update T_ERROR_FEEDBACK set RESULT = '{errFeed.RESULT}',LAST_END_TIME = '{errFeed.LAST_END_TIME}',PARAM_IN = '{errFeed.PARAM_IN}',LAST_PARAM_OUT = '{errFeed.LAST_PARAM_OUT}' where ID = {errFeed.ID} ";
context.Execute(sql);
}
}
}
}
catch (Exception ex)
{
_logger.LogWarning($"创建接口ERR[{function}]记录异常。参数 requestNo-{requestNo} barcode-{barcode} feedbackStatus-{feedbackStatus} 原因-{ex.Message}");
}
_logger.LogInformation($"调用海辰WMS接口[{function}]结束:参数 requestNo-{requestNo} barcode-{barcode} result-{result}");
return result;
}
}
}