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 _logger; // 日志 //private readonly IRecordDb _recordDb; //private readonly IDefaultDb _database; // 默认数据库 private readonly HttpClient _client; private readonly IConfiguration _configuration; /// /// 依赖注入 /// public WmsAPIService(ILogger logger //IRecordDb recordDb //IDefaultDb database ) { _logger = logger; //_recordDb = recordDb; //_database = database; _client = new HttpClient(); _configuration = (IConfiguration)new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); } /// /// 入库过账 /// /// /// /// /// /// public async Task 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); 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().Add(interfaceRecord); //_recordDb.Save(); //var temp = await _database.From().Add(interfaceRecord); //_database.Save(); var driver = Infrastructure.Database.Configuration.Configure("Default"); using (var context = driver.CreateContext()) { //await context.From().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(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; } /// /// 出库过账 /// public async Task 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); 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().Add(interfaceRecord); //_recordDb.Save(); //var temp = await _database.From().Add(interfaceRecord); //_database.Save(); var driver = Infrastructure.Database.Configuration.Configure("Default"); using (var context = driver.CreateContext()) { //await context.From().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(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; } } }