From ad475d4ffea8ed27f8fef53d768111bd2656a0db Mon Sep 17 00:00:00 2001 From: minjQiu Date: Sun, 14 Jul 2024 18:01:02 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E5=A4=9A=E8=B4=A6=E5=A5=97?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=97=B6=E6=8A=A5=E5=B7=A5=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E8=B4=A6=E5=A5=97=E4=B8=8D=E7=94=9F=E6=95=88(=E4=B8=A5?= =?UTF-8?q?=E9=87=8Dbug)=202.=E5=88=87=E6=8D=A2=E5=BA=95=E5=B1=82=E9=80=BB?= =?UTF-8?q?=E8=BE=91,=E5=A2=9E=E5=8A=A0=E5=A4=96=E9=83=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=95=B0=E6=8D=AE=E6=BA=90=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=203.=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98,=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E9=A2=91=E7=B9=81=E7=99=BB=E5=BD=95=E5=AF=BC=E8=87=B4=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=AD=98=E5=9C=A8=E7=9A=84=E7=AA=81=E5=8F=91=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entity/SysU8AccountConfig.cs | 78 ++++++++ .../UFIDA.U8.Framework.Api.Common.csproj | 17 +- UFIDA.U8.Framework.Api.Common/packages.config | 2 + .../Common/BEHelper.cs | 86 ++++++++ .../Json/JsonHelper.cs | 47 +++++ .../Models/LoginParamter.cs | 7 +- .../Models/StatusEnum.cs | 28 +++ .../Models/SysU8AccountConfig.cs | 61 ++++++ .../U8M/BaseLogin.cs | 61 ++---- .../U8M/MoRoutingBill.cs | 127 ++++++++++++ ...FIDA.U8.Framework.Api.ControlObject.csproj | 41 ++++ .../packages.config | 1 + UFIDA.U8.Framework.Api/App_Data/API_Meta.db | Bin 0 -> 36864 bytes UFIDA.U8.Framework.Api/App_Data/FC90.json | 21 ++ UFIDA.U8.Framework.Api/App_Data/U8API.xml | 114 +++++++++++ .../Controllers/CommonController.cs | 186 ++++++++++++++++++ .../Controllers/U8/SFCController.cs | 52 ++++- .../Controllers/ValuesController.cs | 39 ---- .../Models/U8AccountConfigInput.cs | 38 ++++ .../UFIDA.U8.Framework.Api.csproj | 43 +++- UFIDA.U8.Framework.Api/Unit/CommUnit.cs | 133 +++++++++++++ .../Views/System/Index.cshtml | 56 ++++++ UFIDA.U8.Framework.Api/Web.config | 18 ++ UFIDA.U8.Framework.Api/packages.config | 10 +- 24 files changed, 1161 insertions(+), 105 deletions(-) create mode 100644 UFIDA.U8.Framework.Api.Common/Entity/SysU8AccountConfig.cs create mode 100644 UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs create mode 100644 UFIDA.U8.Framework.Api.ControlObject/Json/JsonHelper.cs create mode 100644 UFIDA.U8.Framework.Api.ControlObject/Models/StatusEnum.cs create mode 100644 UFIDA.U8.Framework.Api.ControlObject/Models/SysU8AccountConfig.cs create mode 100644 UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs create mode 100644 UFIDA.U8.Framework.Api/App_Data/API_Meta.db create mode 100644 UFIDA.U8.Framework.Api/App_Data/FC90.json create mode 100644 UFIDA.U8.Framework.Api/Controllers/CommonController.cs delete mode 100644 UFIDA.U8.Framework.Api/Controllers/ValuesController.cs create mode 100644 UFIDA.U8.Framework.Api/Models/U8AccountConfigInput.cs create mode 100644 UFIDA.U8.Framework.Api/Unit/CommUnit.cs create mode 100644 UFIDA.U8.Framework.Api/Views/System/Index.cshtml diff --git a/UFIDA.U8.Framework.Api.Common/Entity/SysU8AccountConfig.cs b/UFIDA.U8.Framework.Api.Common/Entity/SysU8AccountConfig.cs new file mode 100644 index 0000000..91546c5 --- /dev/null +++ b/UFIDA.U8.Framework.Api.Common/Entity/SysU8AccountConfig.cs @@ -0,0 +1,78 @@ +using SqlSugar; +using UFIDA.U8.Framework.Api.ControlObject.Models; + +namespace UFIDA.U8.Framework.Api.Common.Entity +{ + /// + /// 系统U8账套对接参数配置表 + /// + [SugarTable("SysU8AccountConfig", "系统U8账套对接参数配置表")] + [SugarIndex("index_{table}_I", nameof(Id), OrderByType.Asc)] + public class SysU8AccountConfig :ControlObject.Models.SysU8AccountConfig + { + + [SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "主键", ColumnName = "Id", IsNullable = false)] + public int Id { get; set; } + + /// + /// 系统号 + /// + [SugarColumn(ColumnDescription = "系统号", Length = 100)] + public override string cAccountNo { get; set; } + + /// + /// 账套号 + /// + [SugarColumn(ColumnDescription = "账套号", Length = 100)] + public override string cAcc_Id { get; set; } + + /// + /// 账套名称 + /// + [SugarColumn(ColumnDescription = "账套名称", Length = 255)] + public override string cAcc_Name { get; set; } + + /// + /// 账套数据源 + /// + [SugarColumn(ColumnDescription = "账套数据源", Length = 255)] + public override string cAcc_DataSource { get; set; } + + /// + /// 用户ID + /// + [SugarColumn(ColumnDescription = "用户ID", Length = 100)] + public override string cUser_Id { get; set; } + + /// + /// 用户名 + /// + [SugarColumn(ColumnDescription = "用户名", Length = 255)] + public override string cUser_Name { get; set; } + + /// + /// 密码 + /// + [SugarColumn(ColumnDescription = "密码", Length = 255)] + public override string cPassword { get; set; } + + /// + /// 服务器地址 + /// + [SugarColumn(ColumnDescription = "服务器地址", Length = 255)] + public override string cSrv { get; set; } + + /// + /// 状态 + /// + [SugarColumn(ColumnDescription = "状态")] + public override StatusEnum Status { get; set; } = StatusEnum.Enable; + + /// + /// 备注 + /// + [SugarColumn(ColumnDescription = "备注", Length = 255)] + public override string Remark { get; set; } + + } +} diff --git a/UFIDA.U8.Framework.Api.Common/UFIDA.U8.Framework.Api.Common.csproj b/UFIDA.U8.Framework.Api.Common/UFIDA.U8.Framework.Api.Common.csproj index 57cf3a9..215fc5d 100644 --- a/UFIDA.U8.Framework.Api.Common/UFIDA.U8.Framework.Api.Common.csproj +++ b/UFIDA.U8.Framework.Api.Common/UFIDA.U8.Framework.Api.Common.csproj @@ -38,6 +38,12 @@ ..\packages\log4net.2.0.17\lib\net45\log4net.dll + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\SqlSugar.5.1.4.162\lib\SqlSugar.dll + @@ -50,6 +56,7 @@ + @@ -57,6 +64,14 @@ - + + + {22c84be9-1613-4e32-9e98-237e96fd3540} + UFIDA.U8.Framework.Api.ControlObject + + + + + \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api.Common/packages.config b/UFIDA.U8.Framework.Api.Common/packages.config index d667060..146c4ee 100644 --- a/UFIDA.U8.Framework.Api.Common/packages.config +++ b/UFIDA.U8.Framework.Api.Common/packages.config @@ -2,4 +2,6 @@ + + \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs new file mode 100644 index 0000000..1878c24 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +// ReSharper disable InconsistentNaming +// ReSharper disable IdentifierTypo +// ReSharper disable StringLiteralTypo + +namespace UFIDA.U8.Framework.Api.ControlObject.Common +{ + public class BEHelper + { + private readonly dynamic _be; + private readonly PropertyInfo[] _props; + + public BEHelper(dynamic be) + { + _be = be; + var tp = be.GetType(); + _props = tp.GetProperties(); + } + + public void SetValue(Dictionary dictionary) + { + foreach (var key in dictionary.Keys) + { + if (key.Contains("define") && !key.Contains("chdefine")) + { + var defineCode = int.Parse(key.Replace("define", "")); + if (dictionary.TryGetValue(key, out var bValue) && !string.IsNullOrWhiteSpace($"{bValue}")) + { + _be.UserDefinedItem[defineCode] = dictionary[key]; + } + } + else if (key.Contains("chdefine")) + { + var defineCode = int.Parse(key.Replace("chdefine", "")); + + if (dictionary.TryGetValue(key, out var bValue) && !string.IsNullOrWhiteSpace($"{bValue}")) + { + _be.ExtendUserDefineItem[defineCode] = dictionary[key]; + } + } + else if (key != "body") + { + if (!string.IsNullOrWhiteSpace($"{dictionary[key]}") && _props.Any(a => string.Equals(a.Name, key, StringComparison.OrdinalIgnoreCase))) + { + var prop = _props.First(a => string.Equals(a.Name, key, StringComparison.OrdinalIgnoreCase)); + + if (prop.PropertyType == typeof(string)) + { + prop.SetValue(_be, dictionary[key]); + } + + if (prop.PropertyType == typeof(DateTime)) + { + prop.SetValue(_be, DateTime.Parse($"{dictionary[key]}")); + } + + if (prop.PropertyType == typeof(byte)) + { + prop.SetValue(_be, byte.Parse($"{dictionary[key]}")); + } + + if (prop.PropertyType == typeof(int)) + { + prop.SetValue(_be, int.Parse($"{dictionary[key]}")); + } + + if (prop.PropertyType == typeof(long)) + { + prop.SetValue(_be, long.Parse($"{dictionary[key]}")); + } + + if (prop.PropertyType == typeof(decimal)) + { + prop.SetValue(_be, decimal.Parse($"{dictionary[key]}")); + } + + } + } + } + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/Json/JsonHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Json/JsonHelper.cs new file mode 100644 index 0000000..dcc7841 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/Json/JsonHelper.cs @@ -0,0 +1,47 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; + +namespace UFIDA.U8.Framework.Api.ControlObject.Json +{ + public static class JsonHelper + { + public static object ToJson(this string Json) + { + return Json == null ? null : JsonConvert.DeserializeObject(Json); + } + public static string ToJson(this object obj) + { + var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; + return JsonConvert.SerializeObject(obj, timeConverter); + } + + public static string ToJson(this object obj, string datetimeformats) + { + var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats }; + return JsonConvert.SerializeObject(obj, timeConverter); + } + public static T ToObject(this string Json) + { + return Json == null ? default : JsonConvert.DeserializeObject(Json); + } + public static List ToList(this string Json) + { + return Json == null ? null : JsonConvert.DeserializeObject>(Json); + } + public static DataTable ToTable(this string Json) + { + return Json == null ? null : JsonConvert.DeserializeObject(Json); + } + public static JObject ToJObject(this string Json) + { + return JObject.Parse(Json.Replace(" ", "")); + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/Models/LoginParamter.cs b/UFIDA.U8.Framework.Api.ControlObject/Models/LoginParamter.cs index dcdf692..daeeaf3 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/Models/LoginParamter.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/Models/LoginParamter.cs @@ -14,7 +14,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Models /// /// 登录子系统ID,具体可以查看系统启用 /// - public string pSubId { get; set; } = "AS"; + public string pSubId { get; set; } = "DP"; /// /// 账套ID,一般为数据源@账套号 @@ -50,10 +50,5 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Models /// 序列号,一般不填 /// public string cSerial { get; set; } = ""; - - /// - /// 账套信息标识 - /// - public string cToken { get; set; } = ""; } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/Models/StatusEnum.cs b/UFIDA.U8.Framework.Api.ControlObject/Models/StatusEnum.cs new file mode 100644 index 0000000..8b019db --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/Models/StatusEnum.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UFIDA.U8.Framework.Api.ControlObject.Models +{ + /// + /// 通用状态枚举 + /// + [Description("通用状态枚举")] + public enum StatusEnum + { + /// + /// 启用 + /// + [Description("启用")] + Enable = 1, + + /// + /// 停用 + /// + [Description("停用")] + Disable = 2, + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/Models/SysU8AccountConfig.cs b/UFIDA.U8.Framework.Api.ControlObject/Models/SysU8AccountConfig.cs new file mode 100644 index 0000000..126646b --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/Models/SysU8AccountConfig.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UFIDA.U8.Framework.Api.ControlObject.Models +{ + public class SysU8AccountConfig + { + /// + /// 系统号 + /// + public virtual string cAccountNo { get; set; } + + /// + /// 账套号 + /// + public virtual string cAcc_Id { get; set; } + + /// + /// 账套名称 + /// + public virtual string cAcc_Name { get; set; } + + /// + /// 账套数据源 + /// + public virtual string cAcc_DataSource { get; set; } + + /// + /// 用户ID + /// + public virtual string cUser_Id { get; set; } + + /// + /// 用户名 + /// + public virtual string cUser_Name { get; set; } + + /// + /// 密码 + /// + public virtual string cPassword { get; set; } + + /// + /// 服务器地址 + /// + public virtual string cSrv { get; set; } + + /// + /// 状态 + /// + public virtual StatusEnum Status { get; set; } = StatusEnum.Enable; + + /// + /// 备注 + /// + public virtual string Remark { get; set; } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs index 0e2709c..d588062 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs @@ -19,7 +19,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M private NetLogin _netLogin { get; set; } private VBLogin _vbLogin { get; set; } - private ProductContext _productContext { get; set; } + public ProductContext _productContext { get; set; } public Connection Connection { get; set; } @@ -83,49 +83,12 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M Trace.WriteLine($"3--登录令牌:{_vbLogin.userToken}"); - - - //Trace.WriteLine($"4--正在创建应用池:{_netLogin.userToken}"); - - //var info = U8LoginInfo.CreateInstance(_netLogin.userToken); - - //U8LoginInfoPool.Add(_netLogin.userToken, info); - - //Trace.WriteLine($"4--创建应用池:{info.U8LoginToken}"); - - //Trace.WriteLine($"4--正在设置线程登录信息:{_netLogin.userToken}"); - //ThreadContext.SetLoginInfo(_netLogin.userToken); - //Trace.WriteLine($"4--设置线程登录信息:{_netLogin.userToken}"); + Trace.WriteLine($"4--正在创建应用池:{_netLogin.userToken}"); return; } - //if (_vbLogin ==null) - //{ - // _vbLogin = new VBLogin(); - - // _vbLogin.ClearError(); - - // if (!_vbLogin.Login(paramter.pSubId, paramter.pAccId, paramter.pYearId, paramter.pUserId, paramter.pPassword, paramter.pDate, paramter.cSrv, paramter.cSerial) && string.IsNullOrWhiteSpace(_vbLogin.userToken)) - // { - // //_vbLogin.ShutDown(); - // throw new Exception(_vbLogin.ShareString); - // } - // Trace.WriteLine($"U8版本:{_vbLogin.GetVersionInfo()}"); - // Trace.WriteLine($"1--登录令牌:{_netLogin.userToken}"); - - // if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) - // { - // Cryptography.m_userToken = ""; - // } - //} - - //if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) - //{ - // Cryptography.m_userToken = ""; - //} - _productContext = _netLogin.Login("AS", _vbLogin.userToken); Trace.WriteLine($"3--上下文令牌:{_productContext.calledContext.token}"); @@ -133,25 +96,33 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M if (_productContext == null) throw new Exception($"2--初始化U8登录上下文失败------{_netLogin.ErrDescript}"); + ClientUserContext.Instance.RefreshContext(); Connection = new Connection(); Connection.Open(_vbLogin.UfDbName); } public void ShutDown() { + U8LoginInfoPool.Clear(); - U8LoginInfoPool.Remove(_netLogin.userToken); - - _vbLogin.ShutDown(); - - _netLogin.ShutDown(); - _netLogin.Dispose(); + ThreadContext.ServerToken = null; + + _vbLogin?.ShutDown(); + _productContext=null; + _netLogin?.ShutDown(); + _netLogin?.Dispose(); _vbLogin = null; + _netLogin = null; if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) { Cryptography.m_userToken = ""; } } + + public bool CheckAccId(string cAccId) + { + return _vbLogin.get_cAcc_Id() == cAccId; + } } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs new file mode 100644 index 0000000..0641e45 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs @@ -0,0 +1,127 @@ +using log4net; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using UFIDA.U8.Framework.Api.ControlObject.Common; +using UFIDA.U8.Framework.Api.ControlObject.Json; +using UFIDA.U8.Framework.Api.ControlObject.Models; +using UFSoft.U8.Framework.BizBase; +using UFSoft.U8.Framework.ContextSrv; +using UFSoft.U8.Framework.DBConnection; +using UFSoft.U8.Framework.LoginContext; +using UFSoft.U8.U8M.BFDispatcher; +using UFSoft.U8.U8M.Common; +using UFSoft.U8.U8M.DOSchema.SF; +using ThreadContext = UFSoft.U8.Framework.ContextSrv.ThreadContext; +// ReSharper disable IdentifierTypo +// ReSharper disable InconsistentNaming +// ReSharper disable StringLiteralTypo + +namespace UFIDA.U8.Framework.Api.ControlObject.U8M +{ + public class MoRoutingBill + { + protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + + private MoRoutingBillDs GetEmptyDs(string cCardNum) + { + var ds = SFExecutor.BFMoRoutingBill_LoadData("LoadFirst", 0, "", cCardNum, new DefaultContextContainer()); + + #region 清除数据集里的数据 + + if (ds.Tables.Contains("fc_MoRoutingBilldetail_ExtraDefine")) + { + ds.Tables["fc_MoRoutingBilldetail_ExtraDefine"].Clear(); + } + if (ds.Tables.Contains("fc_MoRoutingBill_ExtraDefine")) + { + ds.Tables["fc_MoRoutingBill_ExtraDefine"].Clear(); + } + + ds.MoRoutingBillRes.Clear(); + ds.MoRoutingBillDetail.Clear(); + ds.MoRoutingBill.Clear(); + + #endregion + + return ds; + } + + + private MoRoutingBillDs GetVoucherDs(string cCardNum, AutoDocNoGenerateParam docNoParam, Dictionary input) + { + + var ds = GetEmptyDs(cCardNum); + + var head = ds.MoRoutingBill.NewMoRoutingBillRow(); + + ds.MoRoutingBill.AddMoRoutingBillRow(head); + + var docNo = U8MCommonExecutor.BFVoucher_GetVoucherID(cCardNum, docNoParam.Paramaters, false, new DefaultContextContainer()); + + var be = new UFSoft.U8.SF.BE.MoRoutingBill(ds); + + be.cVouchType = cCardNum; + be.cVouchCode = ""; + + var beHead = new BEHelper(be); + + beHead.SetValue(input); + + if (string.IsNullOrWhiteSpace(be.cVouchCode)) + { + be.cVouchCode = docNo; + } + + var bodys = input["body"] as List> ?? $"{input["body"]}".ToObject>>(); + + for (var i = 0; i < bodys.Count; i++) + { + var body = bodys[i]; + var detail = be.MoRoutingBillDetails[i]; + + var beBody = new BEHelper(detail); + + beBody.SetValue(body); + } + + + return (MoRoutingBillDs)be.DataObject; + } + + + public BaseResult Save(string cCardNum, Dictionary input) + { + try + { + var docNoParam = new AutoDocNoGenerateParam(EnumAutoDocNoType.HandAuto, cCardNum) + { + IsCurrentDocNoByHand = false + }; + + var ds = GetVoucherDs(cCardNum, docNoParam, input); + + if (ds == null) + { + throw new Exception("未能构建数据集"); + } + + //var context = new DefaultContextContainer(); + //context.context["taskid"] = taskId; + + var id = SFExecutor.BFMoRoutingBill_MoRoutingBillSave(ds, docNoParam, new DefaultContextContainer()); + + return new BaseResult() { bSuccess = true, message = "新增成功", result = id }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult() { bSuccess = false, message = "新增失败", result = ex.Message }; + + } + + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/UFIDA.U8.Framework.Api.ControlObject.csproj b/UFIDA.U8.Framework.Api.ControlObject/UFIDA.U8.Framework.Api.ControlObject.csproj index ca0a555..56b19fd 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/UFIDA.U8.Framework.Api.ControlObject.csproj +++ b/UFIDA.U8.Framework.Api.ControlObject/UFIDA.U8.Framework.Api.ControlObject.csproj @@ -57,6 +57,9 @@ ..\packages\log4net.2.0.17\lib\net45\log4net.dll + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + @@ -67,10 +70,15 @@ + + D:\U8SOFT\U8M\UFSoft.U8.Framework.BE.dll + False + D:\U8SOFT\U8M\UFSoft.U8.Framework.BF.Dispatcher.dll False + D:\U8SOFT\U8M\UFSoft.U8.Framework.Common.dll False @@ -79,6 +87,10 @@ D:\U8SOFT\U8M\UFSoft.U8.Framework.ContextSrv.dll False + + D:\U8SOFT\U8M\UFSoft.U8.Framework.DBConnection.dll + False + D:\U8SOFT\Framework\UFSoft.U8.Framework.Login.BO.dll False @@ -92,12 +104,41 @@ D:\U8SOFT\Framework\UFSoft.U8.Framework.LoginContext.dll False + + D:\U8SOFT\U8M\UFSoft.U8.SF.BE.dll + False + + + D:\U8SOFT\U8M\UFSoft.U8.U8M.BE.dll + False + + + D:\U8SOFT\U8M\UFSoft.U8.U8M.BFDispatcher.dll + False + + + D:\U8SOFT\U8M\UFSoft.U8.U8M.Common.dll + False + + + D:\U8SOFT\U8M\UFSoft.U8.U8M.DOConvert.dll + False + + + D:\U8SOFT\U8M\UFSoft.U8.U8M.DOSchema.dll + False + + + + + + diff --git a/UFIDA.U8.Framework.Api.ControlObject/packages.config b/UFIDA.U8.Framework.Api.ControlObject/packages.config index cb38b9e..98c0e1a 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/packages.config +++ b/UFIDA.U8.Framework.Api.ControlObject/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api/App_Data/API_Meta.db b/UFIDA.U8.Framework.Api/App_Data/API_Meta.db new file mode 100644 index 0000000000000000000000000000000000000000..df2fdc2b4fb6bc13a4a26102c4b6344349faaa06 GIT binary patch literal 36864 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 The physical path to XML document. + + + 公共服务 + + + + + 日志对象 + + + + + 获取加密字符串 + + + + + + + 获取解密字符串 + + + + + + + 获取对接账套设置 + + + + + + + 新增对接账套设置 + + + + + + + 更新对接账套设置 + + + + + + + 获取对接账套设置列表 + + + + 车间管理 @@ -538,5 +590,67 @@ + + + 查询参数 + + + + + + + + + + + + + + 公共帮助类 + + + + + 读取对应配置 + + + + + + + 解密 + + + + + + + 加密 + + + + + + + 获取数据库配置信息 + + + + + + + 获取连接对象 + + + + + + 获取登录参数 + + + + + + diff --git a/UFIDA.U8.Framework.Api/Controllers/CommonController.cs b/UFIDA.U8.Framework.Api/Controllers/CommonController.cs new file mode 100644 index 0000000..f40053b --- /dev/null +++ b/UFIDA.U8.Framework.Api/Controllers/CommonController.cs @@ -0,0 +1,186 @@ +using log4net; +using System; +using System.Threading.Tasks; +using System.Web.Http; +using UFIDA.U8.Framework.Api.ControlObject.Models; +using UFIDA.U8.Framework.Api.Models; +using UFIDA.U8.Framework.Api.Unit; +// ReSharper disable InconsistentNaming +// ReSharper disable IdentifierTypo + +namespace UFIDA.U8.Framework.Api.Controllers +{ + + /// + /// 公共服务 + /// + public class CommonController : ApiController + { + /// + /// 日志对象 + /// + protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + + /// + /// 获取加密字符串 + /// + /// + /// + [HttpGet] + [Route("api/Common/GetEncryptString")] + public BaseResult GetEncryptString(string input) + { + try + { + return new BaseResult { bSuccess = true, message = "加密成功", result = CommUnit.GetEncrypt(input) }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = true, message = "加密失败", result = ex.Message }; + } + } + + /// + /// 获取解密字符串 + /// + /// + /// + [HttpGet] + [Route("api/Common/GetDecryptString")] + public BaseResult GetDecryptString(string input) + { + try + { + return new BaseResult { bSuccess = true, message = "解密成功", result = CommUnit.GetDecrypt(input) }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = true, message = "解密失败", result =ex.Message }; + } + } + + /// + /// 获取对接账套设置 + /// + /// + /// + [HttpPost] + [Route("api/Common/GetAccountConfig")] + public async Task> GetAccountConfig([FromBody]U8AccountConfigInput input) + { + try + { + var db = CommUnit.GetDbClient(); + + var res=await db.Queryable() + .Where(a => a.cAccountNo == input.cAccId) + .FirstAsync(); + + return new BaseResult { bSuccess = false, message = "查询成功", result = res }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "查询失败", result = ex.Message }; + } + + } + + /// + /// 新增对接账套设置 + /// + /// + /// + [HttpPost] + [Route("api/Common/AddAccountConfig")] + public async Task> AddAccountConfig([FromBody] AddU8AccountConfigInput input) + { + try + { + var db = CommUnit.GetDbClient(); + + var isExists = await db.Queryable().AnyAsync(a => a.cAccountNo == input.cAccountNo); + + if (isExists) + { + throw new Exception($"已存在系统号为{input.cAccountNo}的数据"); + } + + var id = await db.Insertable(input).ExecuteReturnIdentityAsync(); + + return new BaseResult { bSuccess = true, message = "新增成功", result = id }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message }; + } + + } + + /// + /// 更新对接账套设置 + /// + /// + /// + [HttpPost] + [Route("api/Common/UpdateAccountConfig")] + public async Task> UpdateAccountConfig([FromBody]AddU8AccountConfigInput input) + { + try + { + var db = CommUnit.GetDbClient(); + + var isExists = await db.Queryable().AnyAsync(a => a.Id==input.Id); + + if (!isExists) + { + throw new Exception($"不存在系统号为{input.cAccountNo}的数据"); + } + + var id = await db.Updateable(input).ExecuteCommandAsync(); + + return new BaseResult { bSuccess = true, message = "更新成功", result = id }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "更新失败", result = ex.Message }; + } + } + + /// + /// 获取对接账套设置列表 + /// + /// + /// + [HttpPost] + [Route("api/Common/ListAccountConfig")] + public async Task> ListAccountConfig([FromBody] ListU8AccountConfigInput input) + { + try + { + var db = CommUnit.GetDbClient(); + + var res =await db.Queryable() + .WhereIF(!string.IsNullOrWhiteSpace(input.cAccId), a => a.cAccountNo == input.cAccId) + .ToListAsync(); + + return new BaseResult { bSuccess = true, message = "查询成功", result = res }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "查询失败", result = ex.Message }; + } + } + } +} diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/SFCController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/SFCController.cs index 39589ee..111ebbc 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/SFCController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/SFCController.cs @@ -1,11 +1,18 @@ using log4net; using System; using System.Collections.Generic; +using System.Configuration; using System.Linq; using System.Net; using System.Net.Http; +using System.Threading.Tasks; using System.Web.Http; +using Microsoft.Extensions.Caching.Memory; +using SqlSugar; +using UFIDA.U8.Framework.Api.Common.Unit.GM; using UFIDA.U8.Framework.Api.ControlObject.Models; +using UFIDA.U8.Framework.Api.ControlObject.U8M; +using UFIDA.U8.Framework.Api.Unit; namespace UFIDA.U8.Framework.Api.Controllers.U8 { @@ -16,6 +23,8 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + private static MemoryCache _cache = new MemoryCache(new MemoryCacheOptions() { ExpirationScanFrequency = TimeSpan.FromMinutes(10) }); + /// /// 新增单据 /// @@ -25,19 +34,56 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpPost] [Route("api/U8/SFC/Save")] - public BaseResult Save(string cAccId,string cCardNum, [FromBody] Dictionary voucherData) + public async Task> Save(string cAccId,string cCardNum, [FromBody] Dictionary input) { try { - var db= + if (!_cache.TryGetValue($"U8M_Single", out BaseLogin baseLogin)) + { + baseLogin = new BaseLogin(); + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + _cache.Set("U8M_Single", baseLogin); + } + else + { + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + if (!baseLogin.CheckAccId(param.pAccId)) + { + baseLogin.ShutDown(); + baseLogin.Init(param); + } + _cache.Remove("U8M_Single"); + _cache.Set("U8M_Single", baseLogin); + } + + var bf = new MoRoutingBill(); + + var res=bf.Save( cCardNum, input); + + + return res; } catch (Exception ex) { logInfo.Error(ex.Message, ex); - return new BaseResult(){bSuccess = false,message = ex.Message,result = ex.StackTrace}; + return new BaseResult {bSuccess = false,message = ex.Message,result = ex.StackTrace}; } diff --git a/UFIDA.U8.Framework.Api/Controllers/ValuesController.cs b/UFIDA.U8.Framework.Api/Controllers/ValuesController.cs deleted file mode 100644 index f4430f4..0000000 --- a/UFIDA.U8.Framework.Api/Controllers/ValuesController.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Web.Http; - -namespace UFIDA.U8.Framework.Api.Controllers -{ - public class ValuesController : ApiController - { - // GET api/values - public IEnumerable Get() - { - return new string[] { "value1", "value2" }; - } - - // GET api/values/5 - public string Get(int id) - { - return "value"; - } - - // POST api/values - public void Post([FromBody] string value) - { - } - - // PUT api/values/5 - public void Put(int id, [FromBody] string value) - { - } - - // DELETE api/values/5 - public void Delete(int id) - { - } - } -} diff --git a/UFIDA.U8.Framework.Api/Models/U8AccountConfigInput.cs b/UFIDA.U8.Framework.Api/Models/U8AccountConfigInput.cs new file mode 100644 index 0000000..6812f06 --- /dev/null +++ b/UFIDA.U8.Framework.Api/Models/U8AccountConfigInput.cs @@ -0,0 +1,38 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using UFIDA.U8.Framework.Api.ControlObject.Models; + +namespace UFIDA.U8.Framework.Api.Models +{ + /// + /// 查询参数 + /// + public class U8AccountConfigInput + { + public string cAccId { get; set; } + } + + /// + [SugarTable("SysU8AccountConfig", "系统U8账套对接参数配置表")] + public class AddU8AccountConfigInput : Common.Entity.SysU8AccountConfig + { + + } + + /// + [SugarTable("SysU8AccountConfig", "系统U8账套对接参数配置表")] + public class UpdateU8AccountConfigInput : Common.Entity.SysU8AccountConfig + { + + } + + /// + public class ListU8AccountConfigInput : U8AccountConfigInput + { + + } + +} \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj index e334ee1..406cf35 100644 --- a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj +++ b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj @@ -1,5 +1,6 @@  + Debug @@ -61,6 +62,12 @@ ..\packages\DapperExtensions.1.7.0\lib\net461\DapperExtensions.dll + + ..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.dll + + + ..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll + ..\packages\log4net.2.0.17\lib\net45\log4net.dll @@ -181,7 +188,7 @@ ..\packages\Newtonsoft.Json.Bson.1.0.2\lib\net45\Newtonsoft.Json.Bson.dll - ..\packages\Oracle.ManagedDataAccess.23.4.0\lib\net472\Oracle.ManagedDataAccess.dll + ..\packages\Oracle.ManagedDataAccess.23.5.0\lib\net472\Oracle.ManagedDataAccess.dll ..\packages\Slapper.AutoMapper.2.0.5\lib\net47\Slapper.dll @@ -195,9 +202,6 @@ ..\packages\SQLitePCLRaw.provider.dynamic_cdecl.2.1.8\lib\netstandard2.0\SQLitePCLRaw.provider.dynamic_cdecl.dll - - ..\packages\SQLitePCLRaw.provider.e_sqlite3.2.1.8\lib\netstandard2.0\SQLitePCLRaw.provider.e_sqlite3.dll - ..\packages\SqlSugar.5.1.4.162\lib\SqlSugar.dll @@ -209,12 +213,24 @@ ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + ..\packages\System.Configuration.ConfigurationManager.8.0.0\lib\net462\System.Configuration.ConfigurationManager.dll + ..\packages\System.Data.Common.4.3.0\lib\net451\System.Data.Common.dll True True + + ..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.118.0\lib\net46\System.Data.SQLite.dll + + + ..\packages\System.Data.SQLite.EF6.1.0.118.0\lib\net46\System.Data.SQLite.EF6.dll + + + ..\packages\System.Data.SQLite.Linq.1.0.118.0\lib\net46\System.Data.SQLite.Linq.dll + ..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll @@ -383,15 +399,18 @@ + - Global.asax + + + @@ -437,6 +456,9 @@ + + PreserveNewest + Designer @@ -479,11 +501,9 @@ + - - - - + @@ -555,7 +575,12 @@ 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + + + + + + +
+ + + + + + + + + 登 录 + + +
+ + + diff --git a/UFIDA.U8.Framework.Api/Web.config b/UFIDA.U8.Framework.Api/Web.config index e09db51..36c97e0 100644 --- a/UFIDA.U8.Framework.Api/Web.config +++ b/UFIDA.U8.Framework.Api/Web.config @@ -5,6 +5,8 @@ --> + +
@@ -24,6 +26,8 @@ + + @@ -139,6 +143,10 @@ + + + + @@ -157,8 +165,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api/packages.config b/UFIDA.U8.Framework.Api/packages.config index 0ef4b4f..4aa50f5 100644 --- a/UFIDA.U8.Framework.Api/packages.config +++ b/UFIDA.U8.Framework.Api/packages.config @@ -7,6 +7,7 @@ + @@ -67,18 +68,23 @@ - + - + + + + + +