diff --git a/UFIDA.U8.Framework.Api.ControlObject/AA/IClsCommon.cs b/UFIDA.U8.Framework.Api.ControlObject/AA/IClsCommon.cs new file mode 100644 index 0000000..567ac5b --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AA/IClsCommon.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UFIDA.U8.Framework.Api.ControlObject.Common; +using UFIDA.U8.Framework.Api.ControlObject.Entity; +using UFIDA.U8.Framework.Api.ControlObject.U8M; + +namespace UFIDA.U8.Framework.Api.ControlObject.AA +{ + /// + /// 基础资料 + /// + public class IClsCommon + { + public async Task> Add(BaseLogin baseLogin,string cCardNum,Dictionary input) + { + var com = "U8SrvTrans.IClsCommon".GetComObject(); + + com.InitNew(baseLogin._vbLogin); + + var xml = $@" + + + + + + + + +"; + + var res = new BaseResult(); + var smg = ""; + res.bSuccess = com.Add(xml, "fitem", ref smg); + + if (!res.bSuccess) + { + res.result = smg; + } + + return res; + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/AA/U8PzInsert/IFitem.cs b/UFIDA.U8.Framework.Api.ControlObject/AA/U8PzInsert/IFitem.cs new file mode 100644 index 0000000..7f5e919 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AA/U8PzInsert/IFitem.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UFIDA.U8.Framework.Api.ControlObject.Common; +using UFIDA.U8.Framework.Api.ControlObject.Entity; +using UFIDA.U8.Framework.Api.ControlObject.U8M; + +namespace UFIDA.U8.Framework.Api.ControlObject.AA.U8PzInsert +{ + public class IFitem + { + + public async Task> Transact(BaseLogin baseLogin, string cCardNum, Dictionary input) + { + var com = "U8PzInsert.IFitem".GetComObject(); + + //com.InitNew(baseLogin._vbLogin); + + var xml = $@" + + + + + + + + + + +"; + + var res = new BaseResult(); + var smg = ""; + smg = com.Transact(xml, baseLogin._vbLogin); + + if (!res.bSuccess) + { + res.result = smg; + } + + return res; + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAR.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAR.cs index b7ec53d..74ef0aa 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAR.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAR.cs @@ -160,7 +160,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP bodys.Add(body); - var res2=await clsVouchFacade.SaveVouch(login, newInput, "收款单", true, "cVouchID"); + var res2=await clsVouchFacade.SaveVouch(login, newInput, "收款单", true,false /*"cVouchID"*/); diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/clsApplyPayCO.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/clsApplyPayCO.cs new file mode 100644 index 0000000..21c97f4 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/clsApplyPayCO.cs @@ -0,0 +1,47 @@ +using log4net; +using MSXML2; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web.UI.WebControls; +using UFIDA.U8.Framework.Api.ControlObject.Common; +using UFIDA.U8.Framework.Api.ControlObject.Entity; +using UFIDA.U8.Framework.Api.ControlObject.U8M; + +namespace UFIDA.U8.Framework.Api.ControlObject.AP +{ + public class clsApplyPayCO + { + private readonly ILog _logInfo = LogManager.GetLogger("logInfo"); + + public async Task> SaveVoucher(BaseLogin baseLogin, Dictionary input, string SysId = null, bool IsAdd = true) + { + try + { + var co = "UFAPApplyPay.clsApplyPayCO".GetComObject(); + + var errorMsg = ""; + _logInfo.Debug("开始输出登录信息"); + _logInfo.Debug(baseLogin._vbLogin.userToken); + + co.DoInit(baseLogin._vbLogin, baseLogin.Connection, SysId); + + IXMLDOMDocument2 domHead = new DOMDocument(); + IXMLDOMDocument2 domBody = new DOMDocument(); + + return null; + + } + catch (Exception ex) + { + await Task.Delay(1); + + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; + } + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/clsVouchFacade.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/clsVouchFacade.cs index 500369f..ea28e9b 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/AP/clsVouchFacade.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/clsVouchFacade.cs @@ -17,7 +17,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP { public class clsVouchFacade { - protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + private readonly ILog _logInfo = LogManager.GetLogger("logInfo"); /// /// 保存单据 @@ -30,92 +30,50 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP /// /// /// - public async Task> SaveVouch(BaseLogin login, Dictionary input,string VouchClass,bool bGetCode=false,string codeKey="",bool bPrintDom=false) + public async Task> SaveVouch(BaseLogin baseLogin, Dictionary input,string VouchClass,bool IsAdd = true,bool bVerify=false) { try { - var clsVouchFacade = $"UFAPBO.clsVouchFacade".GetComObject(); + var clsVouchFacade = $"UFAPApplyPay.clsVouchFacade".GetComObject(); - clsVouchFacade.Init(VouchClass, login._vbLogin); + clsVouchFacade.init(VouchClass, baseLogin._vbLogin, baseLogin.Connection); IXMLDOMDocument2 domHead = new DOMDocument(); IXMLDOMDocument2 domBody = new DOMDocument(); var errMsg = ""; - //if (!clsVouchFacade.GetVouchData("0", ref domHead, ref domBody, ref errMsg)) - //{ - // throw new Exception(errMsg); - //} + _logInfo.Debug("填充表头DOM..."); domHead = input.ToDocument2(domHead); if (!input.TryGetValue("body", out var bodys)) { - await Task.Delay(1); throw new Exception("无法获取表体数据"); } if (!(bodys is List> dictionarys) || dictionarys.Count <= 0) { - throw new Exception("无法获取表体数据"); + throw new Exception("无法获取表体数据"); } - //if (bGetCode) - //{ - // var cardNum = ""; - - // switch (VouchClass) - // { - // case "收款单": - // cardNum = "AR48"; - // break; - // default: - // break; - // } - - // //var clsBillComponent = "UFBillComponent.clsBillComponent".GetComObject(); - - // //if (!clsBillComponent.InitBill(login._vbLogin.UfDbName, cardNum)) - // //{ - // // throw new Exception("初始化单据编号组件失败"); - // //} - - // //var newCode = clsBillComponent.GetNumber(clsBillComponent.GetBillFormat()); - - // var newCode = "0000000001"; - - // logInfo.Debug($"获取新单号:{newCode}"); - - // if (!string.IsNullOrWhiteSpace(newCode)) - // { - // CommonHelper.SetDomKeyValue(domHead, codeKey, newCode); - // } - - // input[codeKey] = newCode; - //} - - logInfo.Debug("填充表体DOM..."); + _logInfo.Debug("填充表体DOM..."); domBody = dictionarys.ToDocument2(domBody); - if (bPrintDom) - { - logInfo.Debug("开始输入DOM..."); - - logInfo.Debug(domHead.xml); - - logInfo.Debug(domBody.xml); - } - var res = new BaseResult(); - res.bSuccess = clsVouchFacade.SaveVouch(domHead, domBody, ref errMsg); + res.bSuccess = clsVouchFacade.SaveVouch(domHead, domBody, ref errMsg, IsAdd); if (!res.bSuccess) { throw new Exception(errMsg); } + if (bVerify) + { + clsVouchFacade.Verify(); + } + res.message = "保存成功"; res.voucherCode = ""; res.voucherId = ""; @@ -127,7 +85,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP { await Task.Delay(1); - logInfo.Error(ex.Message, ex); + _logInfo.Error(ex.Message, ex); return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; } diff --git a/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs index a1aa044..3312952 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs @@ -13,28 +13,31 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common { public class BEHelper { - protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + protected readonly ILog _logInfo = LogManager.GetLogger("logInfo"); private readonly dynamic _be; private readonly PropertyInfo[] _props; - private string _invCode; - private string _free1; - private string _free2; - private string _free3; - private string _free4; - private string _free5; - private string _free6; - private string _free7; - private string _free8; - private string _free9; - private string _free10; + private string _invCode=""; + private string _free1 = ""; + private string _free2 = ""; + private string _free3 = ""; + private string _free4 = ""; + private string _free5 = ""; + private string _free6 = ""; + private string _free7 = ""; + private string _free8 = ""; + private string _free9 = ""; + private string _free10 = ""; private int _bomVersion; + private readonly string _cCardNum; - public BEHelper(dynamic be) + public BEHelper(dynamic be, string cCardNum="") { _be = be; var tp = be.GetType(); _props = tp.GetProperties(); + + _cCardNum = cCardNum; } public void SetValue(Dictionary dictionary) @@ -42,7 +45,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common foreach (var key in dictionary.Keys) { if(key != "body") - logInfo.Debug($"正在设置字段:{key}--{dictionary[key]}"); + _logInfo.Debug($"正在设置字段:{key}--{dictionary[key]}"); if (key.Contains("define") && !key.Contains("chdefine") && !key.Contains("cbdefine")) { @@ -60,7 +63,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common { _be.ExtendUserDefineItem[defineCode] = dictionary[key]; } - } else if (key.Contains("cbdefine")) + } + else if (key.Contains("cbdefine")) { var defineCode = int.Parse(key.Replace("cbdefine", "")); @@ -68,7 +72,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common { _be.ExtendUserDefineItem[defineCode] = dictionary[key]; } - }else if (key.Contains("free")) + } + else if (key.Contains("free")) { var freeCode = int.Parse(key.Replace("free", "")); @@ -80,7 +85,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common if (string.Equals(key, "invCode", StringComparison.OrdinalIgnoreCase)) { _invCode = $"{dictionary[key]}"; - }else if (string.Equals(key, "bomversion", StringComparison.OrdinalIgnoreCase)) + } + else if (string.Equals(key, "bomversion", StringComparison.OrdinalIgnoreCase)) { _bomVersion = int.Parse($"{dictionary[key]}"); } @@ -141,5 +147,14 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common { _be.SetBomId(_be.PartId, _bomVersion); } + + public void SetMoAllocateId() + { + if (_cCardNum == "MO39") + { + _be.SetMoAllocateId(_be.PartId); + } + + } } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs index 469e9c9..aa8cb31 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs @@ -1,17 +1,15 @@ -using System; +using ADODB; +using GetComObj; +using log4net; +using Microsoft.VisualBasic.CompilerServices; +using MSXML2; +using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Security.Cryptography; using System.Text; -using System.Web.UI.WebControls; -using ADODB; -using GetComObj; -using log4net; -using Microsoft.VisualBasic.CompilerServices; -using MSXML2; -using Newtonsoft.Json.Linq; using UFIDA.U8.Framework.Api.Common.Entity; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; @@ -89,7 +87,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common return obj; } - public static dynamic ToVoucherData(this Dictionary dict,dynamic obj) + public static dynamic ToVoucherData(this Dictionary dict, dynamic obj) { foreach (var dictKey in dict.Keys) { @@ -215,7 +213,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common // //} //} - public static IXMLDOMDocument2 ToDocument2(this Dictionary dictionary,IXMLDOMDocument2 domDocument2=null) + public static IXMLDOMDocument2 ToDocument2(this Dictionary dictionary, IXMLDOMDocument2 domDocument2 = null) { if (domDocument2 == null) @@ -233,7 +231,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common } - public static IXMLDOMNode SetRowData(this Dictionary dictionary, IXMLDOMDocument2 domDocument2 = null,string bodyKey="body") + public static IXMLDOMNode SetRowData(this Dictionary dictionary, IXMLDOMDocument2 domDocument2 = null, string bodyKey = "body") { if (domDocument2 == null) { @@ -244,7 +242,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common foreach (var key in dictionary.Keys) { - if(key==bodyKey) + if (key == bodyKey) continue; var attr = domDocument2.createAttribute(key); @@ -304,16 +302,16 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common return root; } - public static object SetDomKeyValue(this IXMLDOMDocument2 domDocument2,string key,object value) + public static object SetDomKeyValue(this IXMLDOMDocument2 domDocument2, string key, object value) { - var node= domDocument2.selectSingleNode("//z:row"); + var node = domDocument2.selectSingleNode("//z:row"); if (node == null) return null; var attr = domDocument2.createAttribute(key); - attr.nodeValue=value; + attr.nodeValue = value; node.attributes.setNamedItem(attr); @@ -325,9 +323,9 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common { if (dictionary.ContainsKey(bodyKey)) { - var body= dictionary[bodyKey].ToJson().ToList>(); + var body = dictionary[bodyKey].ToJson().ToList>(); - dictionary[bodyKey] = body; + dictionary[bodyKey] = body; } } @@ -568,9 +566,11 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common var val = cPrecision == null ? dt.Compute(calcFormula, "") - : Math.Round(Convert.ToDecimal(dt.Compute(calcFormula, "")), cPrecision ?? 6); //计算公式结果 + : Math.Round(Convert.ToDecimal(dt.Compute(calcFormula, "")), cPrecision ?? 6, MidpointRounding.AwayFromZero); //计算公式结果 dict[def.FieldName] = val; + + _logInfo.Debug($"字段:{def.FieldName}公式:{calcFormula},公式结果:{val}"); } catch (Exception ex) { @@ -657,7 +657,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common /// 单据类型编码 /// /// - public static VouchersInfo GetVouchers(Connection conn,string cCardNum) + public static VouchersInfo GetVouchers(Connection conn, string cCardNum) { if (conn == null) throw new ArgumentNullException(nameof(conn)); if (cCardNum == null) throw new ArgumentNullException(nameof(cCardNum)); @@ -698,7 +698,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common } res.cCodeFieldName = codeName; - res.voucherIdFieldName= $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; + res.voucherIdFieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; rst.Close(); @@ -713,7 +713,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common /// 单据配置信息 /// /// - public static string GetVoucherCode(Connection conn,object voucherId, VouchersInfo vouchers) + public static string GetVoucherCode(Connection conn, object voucherId, VouchersInfo vouchers) { if (conn == null) throw new ArgumentNullException(nameof(conn)); if (voucherId == null) throw new ArgumentNullException(nameof(voucherId)); @@ -742,6 +742,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common var cCode = $"{rst.Fields["cCode"].Value}"; + rst.Close(); + return cCode; } @@ -785,6 +787,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common var voucherId = rst.Fields["ID"].Value; + rst.Close(); + return voucherId; } @@ -797,7 +801,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common /// 事件Id /// /// - public static string GetEventId(Connection conn, string cCardNum,string eventId,bool bUAP =false) + public static string GetEventId(Connection conn, string cCardNum, string eventId, bool bUAP = false) { if (conn == null) throw new ArgumentNullException(nameof(conn)); if (cCardNum == null) throw new ArgumentNullException(nameof(cCardNum)); @@ -824,11 +828,13 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common var voucherId = rst.Fields["cBizEventId"].Value; + rst.Close(); + return voucherId; } - public static string GetVoucherWhereSqlByCode(VouchersInfo vouchers,string cVoucherCode) + public static string GetVoucherWhereSqlByCode(VouchersInfo vouchers, string cVoucherCode) { var tableName = vouchers.cBTTblName; var fieldName = vouchers.voucherIdFieldName; @@ -865,11 +871,11 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common return $"{cDefWhere} AND {tableName}.{fieldName}='{voucherId}'"; } - public static string GetQuerySql(VouchersInfo vouchers, Dictionary input, string cCardPostion="H") + public static string GetQuerySql(VouchersInfo vouchers, Dictionary input, string cCardPostion = "H") { var cBTQName = vouchers.cBTQName; var cBWQName = vouchers.cBWQName; - + var voucherIdFieldName = vouchers.voucherIdFieldName; var tableName = cBTQName; diff --git a/UFIDA.U8.Framework.Api.ControlObject/Entity/BaseResult.cs b/UFIDA.U8.Framework.Api.ControlObject/Entity/BaseResult.cs index a1f7640..f027a14 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/Entity/BaseResult.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/Entity/BaseResult.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace UFIDA.U8.Framework.Api.ControlObject.Entity +namespace UFIDA.U8.Framework.Api.ControlObject.Entity { public class BaseResult { @@ -12,6 +6,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Entity public string message { get; set; } public string voucherCode { get; set; } public string voucherId { get; set; } + public string tradeid { get; set; } public T result { get; set; } } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/Entity/UserTokenInfo.cs b/UFIDA.U8.Framework.Api.ControlObject/Entity/UserTokenInfo.cs new file mode 100644 index 0000000..b3d7bc7 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/Entity/UserTokenInfo.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UFIDA.U8.Framework.Api.ControlObject.Entity +{ + /// + /// 令牌构造参数 + /// + public class UserTokenInfo + { + /// + /// 系统号 + /// + public string cAccId { get; set; } + + /// + /// 用户令牌 + /// + public string userToken { get; set; } + + /// + /// 登录参数 + /// + public LoginParamter loginParamter { get; set; } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/SA/VoucherTypeSA.cs b/UFIDA.U8.Framework.Api.ControlObject/SA/VoucherTypeSA.cs index 68ef045..fb84d82 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/SA/VoucherTypeSA.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/SA/VoucherTypeSA.cs @@ -1,27 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace UFIDA.U8.Framework.Api.ControlObject.SA +namespace UFIDA.U8.Framework.Api.ControlObject.SA { public enum VoucherTypeSA { - /// - /// 发货单蓝字 - /// - DispatchBlue=9, + SaleBillSpecBlue = 0, + SaleBillSpecRed = 1, SaleBillCommBlue = 2, SaleBillCommRed = 3, SaleBillDirect = 4, - SaleBillSpecBlue = 0, - SaleBillSpecRed = 1 - - - - - + SARetailBlue = 5, + SARetailRed = 6, + SAMoveBlue = 7, + SAMoveRed = 8, + /// + /// 发货单蓝字 + /// + DispatchBlue = 9, + DispatchRed = 10, + DispatchFIRST = 11, + SODetails = 12, + ExpenseVouch = 13, + SalePayVouch = 14, + WTDispatchBlue = 15, + WTDispatchRed = 16, + EntrustBlue = 17, + EntrustRed = 18, + WrapLease = 19, + WrapLeaseTH = 20, + SAQuo = 21, + WTTZ = 22, + WTDXQC = 23, + SaleOutVouch = 24, + PurZYBillVouch = 25, + PurPTBillVouch = 26, + PurYFBillVouch = 27, + PurOrderVouch = 28, + omOrderVouch = 29, + moOrderVouch = 30, + MeterOutVouch = 31, + FinGdInVouch = 32, + PurChInVouch = 33, + ReturnsApplyVouch = 34, } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs b/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs index d079187..e7c31ba 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs @@ -24,7 +24,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST /// public class USERPCO { - private readonly ILog _logInfo = LogManager.GetLogger("_logInfo"); + private readonly ILog _logInfo = LogManager.GetLogger("logInfo"); /// /// 新增单据 @@ -171,13 +171,14 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception("审核单据时发生异常,请检查数据"); } - _logInfo.Debug($"当前单据号:{res.voucherCode},操作完成,操作结果:成功!------[{vouchId}]------[{errorMsg}]------[{domMsg.xml}]"); + _logInfo.Debug($"当前单据号:{res.voucherCode},操作完成,操作结果:成功!------[{vouchId}]------[{errorMsg}]------[{bVerify}]------[{cCardNum}]------[{domMsg.xml}]"); + if (bVerify && cCardNum=="0304") { _logInfo.Debug($"0304,当前单据号:{res.voucherCode},开始审核其他出入库单据"); - var strSql = $"select ID,cCode from RdRecord09 where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='调拨' and cBusCode='{res.voucherCode}'"; + var strSql = $"select ID,cCode,ufts from KCOtherOutH where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='调拨' and cBusCode='{res.voucherCode}'"; var rst = new Recordset(); @@ -187,13 +188,16 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST { var outId = $"{rst.Fields["ID"].Value}"; var outCode = $"{rst.Fields["cCode"].Value}"; + var ufts = $"{rst.Fields["ufts"].Value}"; + + rst.Close(); errorMsg = ""; domMsg = new DOMDocument(); _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他出库单:{outCode},开始审核其他出库单"); - var resOut = co.Verify("09", outId, ref errorMsg, baseLogin.Connection, null, ref domMsg); + var resOut = co.Verify("09", outId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); if (!resOut) { @@ -208,10 +212,12 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他出库单:{outCode},审核其他出库单完成,操作结果:成功!------[{outId}]------[{errorMsg}]------[{domMsg.xml}]"); } + else + { + rst.Close(); + } - rst.Close(); - - strSql = $"select ID,cCode from RdRecord08 where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='调拨' and cBusCode='{res.voucherCode}'"; + strSql = $"select ID,cCode,ufts from KCOtherInH where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='调拨' and cBusCode='{res.voucherCode}'"; var rst2 = new Recordset(); @@ -221,13 +227,16 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST { var inId = $"{rst2.Fields["ID"].Value}"; var inCode = $"{rst2.Fields["cCode"].Value}"; + var ufts = $"{rst2.Fields["ufts"].Value}"; + + rst2.Close(); errorMsg = ""; domMsg = new DOMDocument(); _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他入库单:{inId},开始审核其他入库单"); - var resIn = co.Verify("08", inId, ref errorMsg, baseLogin.Connection, null, ref domMsg); + var resIn = co.Verify("08", inId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); if (!resIn) { @@ -242,10 +251,68 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他入库单:{inCode},审核其他入库单完成,操作结果:成功!------[{inId}]------[{errorMsg}]------[{domMsg.xml}]"); } - - rst2.Close(); + else + { + rst2.Close(); + } } + + if(bVerify && cCardNum == "0411") + { + _logInfo.Debug($"0411,当前单据号:{res.voucherCode},开始审核材料出库单"); + + var strSql = $"select ID,cCode,ufts from RecordOutQ where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='产成品入库单' and cBusCode='{res.voucherCode}'"; + + var rst = new Recordset(); + + rst.Open(strSql, baseLogin.Connection); + + if (!rst.BOF && !rst.EOF) + { + var outId = $"{rst.Fields["ID"].Value}"; + var outCode = $"{rst.Fields["cCode"].Value}"; + var ufts = $"{rst.Fields["ufts"].Value}"; + + rst.Close(); + + errorMsg = ""; + domMsg = new DOMDocument(); + + _logInfo.Debug($"0411,当前单据号:{res.voucherCode},材料出库单:{outCode},开始审核材料出库单"); + + var resOut = co.Verify("11", outId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); + + if (!resOut) + { + if (!string.IsNullOrWhiteSpace(errorMsg)) + { + _logInfo.Error($"第1次审核出错,错误信息:{errorMsg}"); + + resOut = co.Verify("11", outId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); + + if (!resOut) + { + if (!string.IsNullOrWhiteSpace(errorMsg)) + { + throw new Exception($"审核材料出库单时发生异常,错误信息:{errorMsg}"); + } + } + } + + if (!string.IsNullOrWhiteSpace(domMsg.xml)) + throw new Exception($"审核材料出库单时发生异常,零出库控制:{domMsg.xml}"); + + throw new Exception("审核材料出库单时发生异常,请检查数据"); + } + + _logInfo.Debug($"0411,当前单据号:{res.voucherCode},材料出库单:{outCode},审核材料出库单完成,操作结果:成功!------[{outId}]------[{errorMsg}]------[{domMsg.xml}]"); + } + else + { + rst.Close(); + } + } //try //{ // var strSql = $"UPDATE {vouchers.cBTTblName} SET cHandler = '{dictionary["cmaker"]}' WHERE {vouchers.voucherIdFieldName}={vouchId}"; @@ -480,6 +547,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST rst.MoveFirst(); object curId = rst.Fields["ID"].Value; + rst.Close(); + var verifyResult = await Verify(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); @@ -557,6 +626,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; + rst.Close(); + var verifyResult = await Verify(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); @@ -965,6 +1036,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST rst.MoveFirst(); object curId = rst.Fields["ID"].Value; + rst.Close(); + var verifyResult = await UnVerify(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); return verifyResult; @@ -1033,6 +1106,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; + rst.Close(); + var verifyResult = await UnVerify(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); return verifyResult; @@ -1165,6 +1240,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST rst.MoveFirst(); object curId = rst.Fields["ID"].Value; + rst.Close(); + var verifyResult = await Delete(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); @@ -1242,6 +1319,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; + rst.Close(); + var verifyResult = await Delete(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); @@ -1312,6 +1391,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST rst.MoveFirst(); object curId = rst.Fields["ID"].Value; + rst.Close(); + var verifyResult = await Delete(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); return verifyResult; diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs index adecb5b..1b6764f 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs @@ -1,6 +1,7 @@ -using System; -using ADODB; +using ADODB; using log4net; +using System; +using System.Web.UI.WebControls; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFSoft.U8.Framework.BizBase; using UFSoft.U8.Framework.ContextSrv; @@ -81,32 +82,20 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M /// public IContextContainer callar { get; set; } + /// + /// 登录参数 + /// + public LoginParamter paramters { get; set; } + /// /// 初始化生产制造上下文 /// /// 登录参数 /// - /// /// /// - public void Init(LoginParamter paramter, bool bMon = true, int traceTimes = 0) + public void Init(LoginParamter paramter, bool bMon = true) { - var lastError = ""; - - - if (traceTimes > 5) - { - if (string.IsNullOrWhiteSpace(lastError)) - { - throw new Exception("U8登录异常"); - } - else - { - throw new Exception(lastError); - } - } - - try { //if (!string.IsNullOrWhiteSpace(ThreadContext.ServerToken)) @@ -121,6 +110,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M if (paramter == null) throw new ArgumentNullException(nameof(paramter)); + paramters = paramter; + if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) { Cryptography.m_userToken = ""; @@ -391,14 +382,138 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M } catch (Exception ex) { - _logInfo.Error($"重试次数:{traceTimes},错误信息:{ex.Message}", ex); - - lastError = ex.Message; + _logInfo.Error($"U8登录失败,错误信息:{ex.Message}", ex); + throw; //Init(paramter, bMon, traceTimes + 1); } } + + /// + /// 初始化生产制造上下文 + /// + /// 令牌 + /// + /// + /// + public void Init(UserTokenInfo userToken, bool bMon = true) + { + try + { + if (userToken == null) throw new ArgumentNullException(nameof(userToken)); + + if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) + { + Cryptography.m_userToken = ""; + } + + userToken.loginParamter.pDate = $"{DateTime.Today:yyyy-MM-dd}"; + userToken.loginParamter.pYearId = $"{DateTime.Today.Year}"; + + paramters = userToken.loginParamter; + + _vbLogin = new VBLogin(); + _vbLogin.ClearError(); + + _logInfo.Debug($"VB--开始进行U8登录:{userToken.userToken}"); + + if (!_vbLogin.ConstructLogin(userToken.userToken)) + { + _logInfo.Debug($"VB--U8登录失败,错误信息:{_vbLogin.ShareString}"); + _logInfo.Debug($"VB--开始重新进行U8登录:{userToken.loginParamter.cSrv}--{userToken.loginParamter.pUserId}--{userToken.loginParamter.pAccId}"); + + _vbLogin=new VBLogin(); + _vbLogin.ClearError(); + + + if (!_vbLogin.Login(userToken.loginParamter.pSubId, userToken.loginParamter.pAccId, userToken.loginParamter.pYearId, userToken.loginParamter.pUserId, userToken.loginParamter.pPassword, userToken.loginParamter.pDate, userToken.loginParamter.cSrv, userToken.loginParamter.cSerial) && string.IsNullOrWhiteSpace(_vbLogin.userToken)) + { + throw new Exception($"U8登录失败---{_vbLogin.ShareString}"); + } + } + + _logInfo.Debug($"VB--开始创建连接对象:{_vbLogin.userToken}"); + + Connection = new Connection(); + Connection.Open(_vbLogin.UfDbName); + + _logInfo.Debug("VB--完成登录进程"); + + if (bMon) + { + + _logInfo.Debug($"NET--开始进行U8登录:{_vbLogin.userToken}"); + + _netLogin = new NetLogin(); + + _productContext = _netLogin.Login("DP", _vbLogin.userToken); + + if (_productContext == null) + { + _logInfo.Debug($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); + + if (!_netLogin.login(userToken.loginParamter.pSubId, userToken.loginParamter.pUserId, userToken.loginParamter.pPassword, userToken.loginParamter.cSrv, userToken.loginParamter.pDate, userToken.loginParamter.pAccId, userToken.loginParamter.cSerial) && string.IsNullOrWhiteSpace(_netLogin.userToken)) + { +#if DEBUG + _logInfo.Debug($"Net--使用用户登录--U8上下文构建失败---{_netLogin.ErrDescript}"); +#else + throw new Exception($"Net--U8登录失败---{_netLogin.ErrDescript}"); +#endif + } + + _logInfo.Debug($"Net--开始进行上下文构建:{_netLogin.userToken}"); + + _productContext = _netLogin.SubLogin("DP") ?? _netLogin.Login("DP", _vbLogin.userToken); + } + + if (_productContext == null) + { + _logInfo.Debug($"Net--构建上下文--U8上下文构建失败---{_netLogin.ErrDescript}"); + } + + #region U8 18.0时需要取消注释 + _logInfo.Debug($"U8M--正在创建应用池:{_netLogin.userToken}"); + + var info = U8LoginInfo.CreateInstance(_netLogin.userToken); + + U8LoginInfoPool.Add(_netLogin.userToken, info); + + _logInfo.Debug($"U8M--创建应用池:{info.U8LoginToken}"); + + _logInfo.Debug($"U8M--正在设置线程登录信息:{_netLogin.userToken}"); + ThreadContext.SetLoginInfo(_netLogin.userToken); + _logInfo.Debug($"U8M--设置线程登录信息:{_netLogin.userToken}"); + #endregion + + #region U8 18.0时需要注释 + + //_logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); + + //ClientUserContext.Instance.RefreshContext(); + + #endregion + + _logInfo.Debug("Net--完成生产制造登录进程"); + + _logInfo.Debug("Net--构建制造上下文"); + + callar = new DefaultContextContainer(); + + _logInfo.Debug("Net--构建制造上下文成功"); + + } + } + catch (Exception ex) + { + _logInfo.Error($"U8登录失败,错误信息:{ex.Message}", ex); + throw; + + //Init(paramter, bMon, traceTimes + 1); + } + } + + /// /// 初始化登录信息 /// @@ -757,9 +872,26 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M /// public void ShutDown() { - U8LoginInfoPool.Remove(_netLogin.userToken); + try + { + Connection.Close(); + + } + catch + { + } + Connection = null; + + try + { + U8LoginInfoPool.Remove(_netLogin.userToken); + } + catch + { + + } ThreadContext.ServerToken = null; _vbLogin?.ShutDown(); @@ -786,6 +918,27 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M return _vbLogin.get_cAcc_Id() == cAccId; } + public void ReSetConnection() + { + if (this.Connection != null) + { + try + { + Connection.Close(); + } + catch + { + + } + + Connection = null; + } + + Connection=new Connection(); + + Connection.Open(_vbLogin.UfDbName); + } + /// /// 清理登录上下文 /// @@ -798,5 +951,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M _netLogin?.ShutDown(); _netLogin = null; } + + } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/IBaseBF.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/IBaseBF.cs index bcd417b..c81ed1f 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/U8M/IBaseBF.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/IBaseBF.cs @@ -9,8 +9,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M { public interface IBaseBF { - BaseResult Save(BaseLogin baseLogin,string cCardNum, Dictionary input); + BaseResult Save(BaseLogin baseLogin,string cCardNum, Dictionary input, bool bVerify = false); - BaseResult Save(BaseLogin baseLogin, string cCardNum, List> inputs); + BaseResult Save(BaseLogin baseLogin, string cCardNum, List> inputs, bool bVerify = false); } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/MO/ReplenishApply.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/MO/ReplenishApply.cs new file mode 100644 index 0000000..788f4b0 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/MO/ReplenishApply.cs @@ -0,0 +1,436 @@ +using log4net; +using System; +using System.Collections.Generic; +using System.Reflection; +using UFIDA.U8.Framework.Api.ControlObject.Common; +using UFIDA.U8.Framework.Api.ControlObject.Entity; +using UFIDA.U8.Framework.Api.ControlObject.Json; +using UFSoft.U8.Framework.BizBase; +using UFSoft.U8.Framework.ContextSrv; +using UFSoft.U8.U8M.BFDispatcher; +using UFSoft.U8.U8M.Common; +using UFSoft.U8.U8M.DOSchema.MO; +using UFSoft.U8.U8M.Exceptions; + +namespace UFIDA.U8.Framework.Api.ControlObject.U8M.MO +{ + /// + /// 补料申请单(MO39) + /// + public class ReplenishApply + { + //日志组件 + private readonly ILog _logInfo = LogManager.GetLogger("logInfo"); + + /// + /// 获取空数据源 + /// + /// + /// + /// + private ReplenishApplyDs GetEmptyDs(IContextContainer callar, string cCardNum) + { + try + { + _logInfo.Debug($"获取空数据集-----{cCardNum}"); + + var ds = MOMExecutor.BFReplenishApply_LoadData("LoadFirst", 0, "", callar); + + if (ds == null) + return new ReplenishApplyDs(); + + #region 清除数据集里的数据 + + _logInfo.Debug("清空数据集-----mom_replenishapplydtl_ExtraDefine"); + if (ds.Tables.Contains("mom_replenishapplydtl_ExtraDefine")) + { + ds.Tables["mom_replenishapplydtl_ExtraDefine"].Clear(); + } + + _logInfo.Debug("清空数据集-----mom_replenishapply_ExtraDefine"); + + if (ds.Tables.Contains("mom_replenishapply_ExtraDefine")) + { + ds.Tables["mom_replenishapply_ExtraDefine"].Clear(); + } + + _logInfo.Debug("清空数据集-----ReplenishApplyDTL,ReplenishApply"); + ds.ReplenishApplyDTL.Clear(); + ds.ReplenishApply.Clear(); + + #endregion + + return ds; + } + catch + { + throw; + } + } + + /// + /// 填充DataSet数据 + /// + /// + /// + /// + /// + /// + private ReplenishApplyDs GetVoucherDs(IContextContainer callar, string cCardNum, AutoDocNoGenerateParam docNoParam, Dictionary input) + { + + _logInfo.Debug("获取空数据集"); + var ds = GetEmptyDs(callar, cCardNum); + + var head = ds.ReplenishApply.NewReplenishApplyRow(); + + ds.ReplenishApply.AddReplenishApplyRow(head); + + //_logInfo.Debug($"获取单号规则-----{cCardNum}-----{docNoParam.Paramaters.ToJson()}"); + //var hsTable = U8MCommonExecutor.BFVoucher_GetVoucherIDFormula(cCardNum, callar); + + //_logInfo.Debug($"获取单号-----{cCardNum}-----{hsTable.ToJson()}"); + //var docNo = U8MCommonExecutor.BFVoucher_GetVoucherID(cCardNum, hsTable, false, callar); + + var docNo = ""; + + _logInfo.Debug("BE处理中"); + var be = new UFSoft.U8.MO.BE.ReplenishApply(ds); + + be.DocCode = ""; + + _logInfo.Debug("填充表头参数"); + var beHead = new BEHelper(be); + + beHead.SetValue(input); + + if (string.IsNullOrWhiteSpace(be.DocCode)) + { + _logInfo.Debug($"设置单号:{docNo}"); + be.DocCode = docNo; + } + + var bodys = input["body"] as List> ?? $"{input["body"]}".ToObject>>(); + + _logInfo.Debug("填充表体参数"); + for (var i = 0; i < bodys.Count; i++) + { + var body = bodys[i]; + var detail = be.ReplenishApplyDTLs[i]; + + var beBody = new BEHelper(detail, "MO39"); + + beBody.SetValue(body); + + beBody.SetPartId(); + } + + _logInfo.Debug($"获取数据集:{be.DataObject.ToJson()}"); + ds = (ReplenishApplyDs)be.DataObject; + + return ds; + } + + public BaseResult Save(BaseLogin baseLogin, string cCardNum, Dictionary input, bool bVerify = false) + { + try + { + var callar = new DefaultContextContainer(); + + var docNoParam = new AutoDocNoGenerateParam(EnumAutoDocNoType.HandAuto, cCardNum, false) + { + IsCurrentDocNoByHand = false + }; + + var ds = GetVoucherDs(callar, cCardNum, docNoParam, input); + + if (ds == null) + { + throw new Exception("未能构建数据集"); + } + + _logInfo.Debug($"单据编码:{cCardNum},开始保存"); + + var id = MOMExecutor.BFReplenishApply_Save(ds, docNoParam, callar); + + if (id > 0) + { + var resDs = MOMExecutor.BFReplenishApply_LoadData("LoadById", id, "", callar); + + if (bVerify) + { + try + { + + MOMExecutor.BFReplenishApply_ChangeStatus(id, 1, resDs.ReplenishApply[0].Ufts, callar); + } + catch (Exception ex) + { + throw new Exception($"审核时发生异常:{ex.Message}"); + } + } + + _logInfo.Debug($"单据编码:{cCardNum},保存完成,id:{id},单号:{resDs.ReplenishApply[0].DocCode}"); + + return new BaseResult { bSuccess = true, message = "保存成功", result = $"{id}", voucherCode = resDs.ReplenishApply[0].DocCode, voucherId = $"{id}" }; + } + + throw new Exception("保存失败,U8未能返回制单结果"); + + } + catch (U8MReferenceBENotExistException ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; + } + catch (TargetInvocationException ex) + { + if (ex.InnerException is U8MReferenceBENotExistException) + { + _logInfo.Error(ex.InnerException.Message, ex.InnerException); + + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.InnerException.Message }; + } + else + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; + } + + } + catch (Exception ex) + { + + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; + } + } + + public BaseResult Verify(BaseLogin baseLogin, int voucherId) + { + try + { + if (voucherId <= 0) + throw new Exception("没有需要审核的数据"); + + var callar = new DefaultContextContainer(); + + var resDs = MOMExecutor.BFReplenishApply_LoadData("LoadById", voucherId, "", callar); + + MOMExecutor.BFReplenishApply_ChangeStatus(voucherId, 1, resDs.ReplenishApply[0].Ufts, callar); + + return new BaseResult { bSuccess = true, message = "审核成功", result = $"{voucherId}" }; + } + catch (U8MReferenceBENotExistException ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + + } + } + + public BaseResult Verify(BaseLogin baseLogin, string voucherCode) + { + try + { + if (string.IsNullOrWhiteSpace(voucherCode)) + throw new Exception("没有需要审核的数据"); + + var callar = new DefaultContextContainer(); + + var voucherId = MOMExecutor.BFReplenishApply_GetIdByCode(voucherCode, callar); + + var resDs = MOMExecutor.BFReplenishApply_LoadData("LoadById", voucherId, "", callar); + + MOMExecutor.BFReplenishApply_ChangeStatus(voucherId, 1, resDs.ReplenishApply[0].Ufts, callar); + + return new BaseResult { bSuccess = true, message = "审核成功", result = $"{voucherId}" }; + } + catch (U8MReferenceBENotExistException ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + + } + } + + public BaseResult UnVerify(BaseLogin baseLogin, int voucherId) + { + try + { + if (voucherId <= 0) + throw new Exception("没有需要弃审的数据"); + + var callar = new DefaultContextContainer(); + + var resDs = MOMExecutor.BFReplenishApply_LoadData("LoadById", voucherId, "", callar); + + MOMExecutor.BFReplenishApply_ChangeStatus(voucherId, 2, resDs.ReplenishApply[0].Ufts, callar); + + return new BaseResult { bSuccess = true, message = "弃审成功", result = $"{voucherId}" }; + } + catch (U8MReferenceBENotExistException ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + + } + } + + public BaseResult UnVerify(BaseLogin baseLogin, string voucherCode) + { + try + { + if (string.IsNullOrWhiteSpace(voucherCode)) + throw new Exception("没有需要审核的数据"); + + var callar = new DefaultContextContainer(); + + var voucherId = MOMExecutor.BFReplenishApply_GetIdByCode(voucherCode, callar); + + var resDs = MOMExecutor.BFReplenishApply_LoadData("LoadById", voucherId, "", callar); + + MOMExecutor.BFReplenishApply_ChangeStatus(voucherId, 2, resDs.ReplenishApply[0].Ufts, callar); + + return new BaseResult { bSuccess = true, message = "弃审成功", result = $"{voucherId}" }; + } + catch (U8MReferenceBENotExistException ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + + } + } + + public BaseResult Delete(BaseLogin baseLogin, string cCardNum, long voucherId) + { + try + { + if (voucherId <= 0) + throw new Exception("没有需要删除的数据"); + + var callar = new DefaultContextContainer(); + + var docNoParam = new AutoDocNoGenerateParam(EnumAutoDocNoType.HandAuto, cCardNum, false) + { + IsCurrentDocNoByHand = false + }; + + var resDs = MOMExecutor.BFReplenishApply_LoadData("LoadById",(int)voucherId, "", callar); + + if(resDs == null) + throw new Exception($"未查询到单据ID为{voucherId}的单据"); + + if(resDs.ReplenishApplyDTL!=null && resDs.ReplenishApplyDTL.Count > 0) + { + for(var i= resDs.ReplenishApplyDTL.Count - 1; i >= 0; i--) + { + resDs.ReplenishApplyDTL.Rows[i].Delete(); + } + + } + + resDs.ReplenishApply[0].Delete(); + + MOMExecutor.BFReplenishApply_Save(resDs, docNoParam, callar); + + return new BaseResult { bSuccess = true, message = "删除成功", result = $"{voucherId}" }; + } + catch (U8MReferenceBENotExistException ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + + } + } + + public BaseResult Delete(BaseLogin baseLogin, string cCardNum, string voucherCode) + { + try + { + if (string.IsNullOrWhiteSpace(voucherCode)) + throw new Exception("没有需要删除的数据"); + + var callar = new DefaultContextContainer(); + + var docNoParam = new AutoDocNoGenerateParam(EnumAutoDocNoType.HandAuto, cCardNum, false) + { + IsCurrentDocNoByHand = false + }; + + var voucherId= MOMExecutor.BFReplenishApply_GetIdByCode(voucherCode, callar); + + var resDs = MOMExecutor.BFReplenishApply_LoadData("LoadById", voucherId, "", callar); + + if (resDs == null) + throw new Exception($"未查询到单据ID为{voucherId}的单据"); + + if (resDs.ReplenishApplyDTL != null && resDs.ReplenishApplyDTL.Count > 0) + { + for (var i = resDs.ReplenishApplyDTL.Count - 1; i >= 0; i--) + { + resDs.ReplenishApplyDTL.Rows[i].Delete(); + } + + } + + resDs.ReplenishApply[0].Delete(); + + MOMExecutor.BFReplenishApply_Save(resDs, docNoParam, callar); + + return new BaseResult { bSuccess = true, message = "删除成功", result = $"{voucherId}" }; + } + catch (U8MReferenceBENotExistException ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + } + 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/U8M/MoRoutingBill.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs index 2c3ea56..9c9ef62 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs @@ -146,7 +146,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M /// /// /// - public BaseResult Save(BaseLogin baseLogin, string cCardNum, Dictionary input) + public BaseResult Save(BaseLogin baseLogin, string cCardNum, Dictionary input, bool bVerify = false) { try { @@ -213,7 +213,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M /// /// /// - public BaseResult Save(BaseLogin baseLogin, string cCardNum, List> inputs) + public BaseResult Save(BaseLogin baseLogin, string cCardNum, List> inputs, bool bVerify = false) { var idList = new List(); 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 1401dc2..69e2cbe 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 @@ -107,9 +107,11 @@ D:\U8SOFT\Portal\UFIDA.U8.Portal.MTC.Design.dll + False D:\U8SOFT\U8M\UFSoft.U8.BO.BE.dll + False D:\U8SOFT\U8M\UFSoft.U8.Framework.BE.dll @@ -161,6 +163,10 @@ D:\U8SOFT\U8M\UFSoft.U8.U8M.BE.dll False + + ..\..\..\U8SOFT\U8M\UFSoft.U8.U8M.BF.dll + False + D:\U8SOFT\U8M\UFSoft.U8.U8M.BFDispatcher.dll False @@ -191,6 +197,9 @@ + + + @@ -202,6 +211,7 @@ + @@ -219,12 +229,11 @@ + - - - + diff --git a/UFIDA.U8.Framework.Api/App_Data/API_Meta.db b/UFIDA.U8.Framework.Api/App_Data/API_Meta.db index bd22e4d..17b6c68 100644 Binary files a/UFIDA.U8.Framework.Api/App_Data/API_Meta.db and b/UFIDA.U8.Framework.Api/App_Data/API_Meta.db differ diff --git a/UFIDA.U8.Framework.Api/App_Data/MO/补料申请单模板.json b/UFIDA.U8.Framework.Api/App_Data/MO/补料申请单模板.json new file mode 100644 index 0000000..ca2d3e7 --- /dev/null +++ b/UFIDA.U8.Framework.Api/App_Data/MO/补料申请单模板.json @@ -0,0 +1,27 @@ +{ + "DocCode": "", //补料申请单号 + "DocDate": "2025-12-13", //单据日期 + "body": [ + { + "MoSortSeq": 20, //子件行号 + "MoDId": 1000000102, //生产订单明细Id + "OpSeq": "0000", //子件工序行号 + "InvCode": "01019002063", //存货编码 + "free1": "", //自由项1 + "free2": "", //自由项2 + "free3": "", //自由项3 + "free4": "", //自由项4 + "free5": "", //自由项5 + "free6": "", //自由项6 + "free7": "", //自由项7 + "free8": "", //自由项8 + "free9": "", //自由项9 + "free10": "", //自由项10 + "MoAllocateId": 1000001028, //生产订单子件用料表Id + "ScrapQty": 100, //报废数量 + "ApplyQty": 50, //申请数量,不能大于报废数量 + "DueDate": "2025-12-13", //预计补料日期 + "ScrapType": 0 //报废类型 1工废/2料废/0其他 + } + ] +} \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api/App_Data/U8API.xml b/UFIDA.U8.Framework.Api/App_Data/U8API.xml index c4eb208..2d9a647 100644 --- a/UFIDA.U8.Framework.Api/App_Data/U8API.xml +++ b/UFIDA.U8.Framework.Api/App_Data/U8API.xml @@ -680,6 +680,15 @@ + + + 新增项目大类 + + + + + + 应收应付管理 @@ -818,6 +827,20 @@ + + + 注册子系统 + + + + + + + 获取接口执行结果 + + + + 生产订单 @@ -839,6 +862,114 @@ + + + 保存补料申请单 + + + + + + + + + 保存补料申请单 + + + + + + + + + 审核补料申请单(ID) + + + + + + + + 审核补料申请单(ID) + + + + + + + 弃审补料申请单(ID) + + + + + + + + 弃审补料申请单(ID) + + + + + + + 删除补料申请单(ID) + + + + + + + + 删除补料申请单(ID) + + + + + + + 审核补料申请单(单号) + + + + + + + + 审核补料申请单(单号) + + + + + + + 弃审补料申请单(单号) + + + + + + + + 弃审补料申请单(单号) + + + + + + + 删除补料申请单(单号) + + + + + + + + 删除补料申请单(单号) + + + + 采购管理 @@ -849,7 +980,7 @@ 日志组件 - + 保存单据 @@ -865,7 +996,7 @@ - + 审核单据(单号) @@ -879,7 +1010,7 @@ 为空 - + 审核单据(ID) @@ -907,7 +1038,7 @@ 为空 - + 弃审单据(单号) @@ -921,7 +1052,7 @@ 为空 - + 弃审单据(ID) @@ -949,7 +1080,7 @@ 为空 - + 删除单据(单号) @@ -963,7 +1094,7 @@ 为空 - + 删除单据(ID) @@ -991,7 +1122,7 @@ 为空 - + 提交工作流(单号) @@ -1005,7 +1136,7 @@ 为空 - + 提交工作流(ID) @@ -1054,7 +1185,7 @@ 日志组件 - + 保存单据 @@ -1066,6 +1197,17 @@ + + + 保存单据 + + 单据类型编码 + 报文 + 单据状态:0新增,1修改 + 是否审核 + + + 查询特定单据部分 @@ -1350,7 +1492,7 @@ 日志组件 - + 新增单据 @@ -1363,9 +1505,11 @@ 传空字符串 是否远程 是否生成时审核 + + 请求ID - + 新增单据 @@ -1377,9 +1521,10 @@ 传空字符串 是否远程 是否生成时审核 + - + 审核单据(单号) @@ -1392,7 +1537,7 @@ - + 审核单据(ID) @@ -1417,7 +1562,7 @@ 是否列表 - + 弃审单据(单号) @@ -1430,7 +1575,7 @@ - + 弃审单据(ID) @@ -1455,7 +1600,7 @@ 是否列表 - + 删除单据(单号) @@ -1468,7 +1613,7 @@ - + 删除单据(ID) @@ -1630,19 +1775,9 @@ 登录输出参数 - + - 系统号 - - - - - 用户令牌 - - - - - 登录参数 + 接口结果表 @@ -1737,6 +1872,16 @@ 用户令牌 + + + 保存请求结果 + + + + + + + 跨域加载 diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/AAController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/AAController.cs index 106f99e..82fd6ea 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/AAController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/AAController.cs @@ -3,15 +3,14 @@ using Microsoft.Extensions.Caching.Memory; using SqlSugar; using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Threading.Tasks; using System.Web.Http; -using Antlr.Runtime; +using UFIDA.U8.Framework.Api.ControlObject.AA; +using UFIDA.U8.Framework.Api.ControlObject.AA.U8PzInsert; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; using UFIDA.U8.Framework.Api.ControlObject.U8M; -using UFIDA.U8.Framework.Api.Entity; using UFIDA.U8.Framework.Api.Unit; // ReSharper disable InconsistentNaming @@ -217,8 +216,8 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 }; return await BaseLoad(cAccId, "CustomerClass", dict, input); - } - + } + /// /// 查询人员档案 /// @@ -261,7 +260,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// /// [NonAction] - public async Task> BaseLoad(string cAccId, string tableName,Dictionary tables, [FromBody] Dictionary input=null) + public async Task> BaseLoad(string cAccId, string tableName, Dictionary tables, [FromBody] Dictionary input = null) { var workId = SnowFlakeSingle.Instance.NextId(); @@ -306,7 +305,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 } }); - var colList = new Dictionary(); + var colList = new Dictionary(); var query = db.Queryable(); var bFirst = true; @@ -320,7 +319,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var cols = db.DbMaintenance.GetColumnInfosByTableName(table.Key); - if(cols != null && cols.Count > 0) + if (cols != null && cols.Count > 0) { foreach (var col in cols.Where(col => !colList.Any(a => string.Equals(a.Key, col.DbColumnName, StringComparison.CurrentCultureIgnoreCase)))) { @@ -347,7 +346,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { if ($"{o.Value}".EndsWith("%") || $"{o.Value}".StartsWith("%")) { - if (colList.Any(a=>string.Equals(a.Key, o.Key,StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase))) + if (colList.Any(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase))) { var col = colList.First(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || @@ -432,5 +431,60 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 } } + /// + /// 新增项目大类 + /// + /// + /// + /// + /// + [HttpPost] + [Route("api/U8/AA/{cCardNum}/Add")] + public async Task> Fitem_Add(string cAccId, string cCardNum, [FromBody] Dictionary input) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{cAccId},数据:{input.ToJson()}"); + + //LoginParamter param; + + if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) + { + _logInfo.Debug($"作业Id:{workId}-----未获取到缓存的登录信息,正在重新构建"); + + baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param, false); + + _cache.Clear(); + + _cache.Set($"U8_{cAccId}", baseLogin); + } + + var co = new IFitem(); + + var res = await co.Transact(baseLogin, "", null); + + return res; + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + } } diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/DPController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/DPController.cs index 61e4fd8..fb0a276 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/DPController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/DPController.cs @@ -1,16 +1,11 @@ using log4net; -using Microsoft.Extensions.Hosting; using SqlSugar; using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.ServiceModel; using System.Threading.Tasks; -using System.Web; using System.Web.Http; using System.Web.Http.Description; -using System.Web.UI.WebControls; using UFIDA.U8.Framework.Api.Common.Entity; using UFIDA.U8.Framework.Api.ControlObject.Common; using UFIDA.U8.Framework.Api.ControlObject.Entity; @@ -45,7 +40,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { try { - + _logInfo.Debug($"当前接口:api/U8/DP/Login,参数:{input.ToJson()}"); var db = CommUnit.GetDbClient(); @@ -64,7 +59,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 pDate = string.IsNullOrWhiteSpace(input.pDate) ? $"{DateTime.Today:yyyy-MM-dd}" : input.pDate, pPassword = string.IsNullOrWhiteSpace(input.pPassword) ? "" : CommUnit.GetDecrypt(input.pPassword), pYearId = string.IsNullOrWhiteSpace(input.pDate) ? $"{DateTime.Today.Year}" : $"{DateTime.Parse(input.pDate).Year}", - pSubId = "DP", + pSubId = "DP", pUserId = input.pUserId }; @@ -366,7 +361,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpPost] [Route("api/U8/DP/UploadConfig")] - public async Task> UploadConfig(string cKey,[FromBody] List> inputs) + public async Task> UploadConfig(string cKey, [FromBody] List> inputs) { try { @@ -389,7 +384,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 return new BaseResult { bSuccess = false, message = "查询失败", result = ex.Message }; } - + } /// @@ -405,7 +400,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"App_Data/{cKey}.json"); - var txt=File.ReadAllText(fileName ); + var txt = File.ReadAllText(fileName); return new BaseResult() { @@ -458,9 +453,14 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 } } + /// + /// 注册子系统 + /// + /// + /// [HttpPost] [Route("api/U8/DP/InitSubSystem")] - public async Task> InitSubSystem(Dictionary input) + public async Task> InitSubSystem(Dictionary input) { try { @@ -476,7 +476,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 throw new Exception("当前子系统已注册"); } - info.Id=SnowFlakeSingle.instance.NextId(); + info.Id = SnowFlakeSingle.instance.NextId(); await db.Insertable(info).ExecuteCommandAsync(); @@ -491,6 +491,52 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 return new BaseResult() { bSuccess = false, message = "子系统初始化失败", result = 0 }; } - } + } + + /// + /// 获取接口执行结果 + /// + /// + /// + [HttpGet] + [Route("api/U8/AA/Result")] + [Route("api/U8/AP/Result")] + [Route("api/U8/DP/Result")] + [Route("api/U8/MO/Result")] + [Route("api/U8/PU/Result")] + [Route("api/U8/SA/Result")] + [Route("api/U8/SFC/Result")] + [Route("api/U8/SF/Result")] + [Route("api/U8/ST/Result")] + [Route("api/U8/Workflow/Result")] + public async Task> Result(string tradeid) + { + try + { + var db = CommUnit.GetDbClient(); + + var entity = await db.Queryable().Where(a=>a.cTradeId==tradeid).FirstAsync(); + + if (entity==null) + { + throw new Exception($"未能找到请求ID:{tradeid}的结果"); + } + + if (entity.bRun == true) + { + throw new Exception($"请求ID:{tradeid}正在执行"); + } + + return entity.cResult; + + } catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult() { bSuccess = false, message = ex.Message, result = ex.Message }; + } + + + } } } diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/MOController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/MOController.cs index b7d8826..0c468ca 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/MOController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/MOController.cs @@ -3,7 +3,6 @@ using Microsoft.Extensions.Caching.Memory; using SqlSugar; using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Threading.Tasks; using System.Web.Http; @@ -11,7 +10,7 @@ using UFIDA.U8.Framework.Api.ControlObject.Common; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; using UFIDA.U8.Framework.Api.ControlObject.U8M; -using UFIDA.U8.Framework.Api.Entity; +using UFIDA.U8.Framework.Api.ControlObject.U8M.MO; using UFIDA.U8.Framework.Api.Unit; namespace UFIDA.U8.Framework.Api.Controllers.U8 @@ -148,22 +147,6 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 } } - cols = db.DbMaintenance.GetColumnInfosByTableName(cExtQName); - - if (cols != null && cols.Count > 0) - { - foreach (var col in cols.Where(col => !colList.ContainsKey(col.DbColumnName.ToLower()))) - { - if (!colList.ContainsKey(col.DbColumnName.ToLower())) - { - if (cCardPostion == "B" || cCardPostion == "L") - colList.Add(col.DbColumnName.ToLower(), $"{cExtQName}.[{col.DbColumnName}]"); - - colListBody.Add(col.DbColumnName.ToLower(), $"{cExtQName}.[{col.DbColumnName}]"); - } - } - } - if (db.DbMaintenance.IsAnyTable(cBWTblExtName)) { bExtBody = true; @@ -174,16 +157,46 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { foreach (var col in extcols) { - if (colList.ContainsKey(col.DbColumnName.ToLower())) + if (colListBody.ContainsKey(col.DbColumnName.ToLower())) { vouchersIdFieldName = col.DbColumnName.ToLower(); } else { - if (cCardPostion == "B" || cCardPostion == "L") + if ((cCardPostion == "B" || cCardPostion == "L") && !colList.ContainsKey(col.DbColumnName.ToLower()) && !string.IsNullOrWhiteSpace(col.DbColumnName)) colList.Add(col.DbColumnName.ToLower(), $"{cBWTblExtName}.[{col.DbColumnName}]"); - colListBody.Add(col.DbColumnName.ToLower(), $"{cBWTblExtName}.[{col.DbColumnName}]"); + if (!colListBody.ContainsKey(col.DbColumnName.ToLower()) && !string.IsNullOrWhiteSpace(col.DbColumnName)) + { + colListBody.Add(col.DbColumnName.ToLower(), $"{cBWTblExtName}.[{col.DbColumnName}]"); + } + } + } + } + } + + if (cCardNum == "MO21") + { + cols = db.DbMaintenance.GetColumnInfosByTableName(cExtQName); + + if (cols != null && cols.Count > 0) + { + if (string.IsNullOrWhiteSpace(vouchersIdFieldName)) + { + vouchersIdFieldName = "modid"; + } + + foreach (var col in cols.Where(col => !colList.ContainsKey(col.DbColumnName.ToLower()))) + { + if (!colList.ContainsKey(col.DbColumnName.ToLower())) + { + if ((cCardPostion == "B" || cCardPostion == "L") && !string.IsNullOrWhiteSpace(col.DbColumnName)) + colList.Add(col.DbColumnName.ToLower(), $"{cExtQName}.[{col.DbColumnName}]"); + } + + if (!colListBody.ContainsKey(col.DbColumnName.ToLower()) && !string.IsNullOrWhiteSpace(col.DbColumnName)) + { + colListBody.Add(col.DbColumnName.ToLower(), $"{cExtQName}.[{col.DbColumnName}]"); } } } @@ -202,7 +215,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 if (cCardNum == "MO21") { - query.AddJoinInfo(cExtQName, cExtQName, $"{cBWQName}.[{vouchersIdFieldName}]={cExtQName}.[{vouchersIdFieldName}]"); + query.AddJoinInfo(cExtQName, cExtQName, $"[{cBWQName}].[{vouchersIdFieldName}]=[{cExtQName}].[{vouchersIdFieldName}]"); } if (bExtBody) @@ -391,5 +404,871 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; } } + + [HttpPost] + [Route("api/U8/MO/Save/{cCardNum}")] + public async Task> Save(string cAccId, string cCardNum, [FromBody] Dictionary input, bool bVerify = false) + { + var workId = SnowFlakeSingle.Instance.NextId(); + + try + { + if (cCardNum == "MO39") + { + return await MO39_Save(cAccId, input, bVerify); + } + + throw new Exception($"当前接口未实现"); + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + + } + + /// + /// 保存补料申请单 + /// + /// + /// + /// + /// + [HttpPost] + [Route("api/U8/MO/MO39/Save")] + public async Task> MO39_Save(string cAccId, [FromBody] Dictionary input, bool bVerify = false) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + try + { + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + if (!string.IsNullOrWhiteSpace(userToken)) + { + return await MO39_SaveToekn(input, bVerify); + } + } + catch (Exception ex) + { + _logInfo.Debug($"作业Id:{workId}-----userToken获取失败,错误信息:{ex.Message}"); + } + + _logInfo.Debug($"作业Id:{workId}-----当前接口:api/U8/MO/{cCardNum}/Save,单据类型编码:{cCardNum},报文数据:{input.ToJson()}"); + + if (cCardNum != "MO39") + throw new Exception("当前接口不支持此类型的单据"); + + var baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + var bo = new ReplenishApply(); + BaseResult res; + + if (input.ContainsKey("bBatch") && Convert.ToBoolean(input["bBatch"])) + { + var inputs = input["inputs"] as List> ?? $"{input["inputs"]}".ToObject>>(); + + _logInfo.Debug($"作业Id:{workId}-----开始保存(批量)"); + //res = bo.Save(baseLogin, cCardNum, inputs); + res = new BaseResult() { bSuccess = false, message = "当前接口未实现当前方法" }; + _logInfo.Debug($"作业Id:{workId}-----结束保存(批量)"); + } + else + { + _logInfo.Debug($"作业Id:{workId}-----开始保存"); + res = bo.Save(baseLogin, cCardNum, input, bVerify); + _logInfo.Debug($"作业Id:{workId}-----结束保存"); + } + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 保存补料申请单 + /// + /// + /// + /// + /// + [HttpPost] + [Route("api/U8/MO/MO39/Save/Token")] + public async Task> MO39_SaveToekn([FromBody] Dictionary input, bool bVerify = false) + { + var cCardNum = "MO39"; + + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/MO/{cCardNum}/Save/{userToken},参数:{input.ToJson()}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},数据:{input.ToJson()}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var bo = new ReplenishApply(); + BaseResult res; + + if (input.ContainsKey("bBatch") && Convert.ToBoolean(input["bBatch"])) + { + var inputs = input["inputs"] as List> ?? $"{input["inputs"]}".ToObject>>(); + + _logInfo.Debug($"作业Id:{workId}-----开始保存(批量)"); + //res = bo.Save(baseLogin, cCardNum, inputs); + res = new BaseResult() { bSuccess = false, message = "当前接口未实现当前方法" }; + _logInfo.Debug($"作业Id:{workId}-----结束保存(批量)"); + } + else + { + _logInfo.Debug($"作业Id:{workId}-----开始保存"); + res = bo.Save(baseLogin, cCardNum, input, bVerify); + _logInfo.Debug($"作业Id:{workId}-----结束保存"); + } + + baseLogin.ShutDown(); + + return res; + + + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 审核补料申请单(ID) + /// + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Verify/ID")] + public async Task> MO39_Verify(string cAccId, int voucherId) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + try + { + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + if (!string.IsNullOrWhiteSpace(userToken)) + { + return await MO39_VerifyToekn(voucherId); + } + } + catch (Exception ex) + { + _logInfo.Debug($"作业Id:{workId}-----userToken获取失败,错误信息:{ex.Message}"); + } + + _logInfo.Debug($"作业Id:{workId}-----当前接口:api/U8/MO/{cCardNum}/Verify/ID,单据类型编码:{cCardNum},单据ID:{voucherId}"); + + if (cCardNum != "MO39") + throw new Exception("当前接口不支持此类型的单据"); + + var baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始审核"); + var res = bo.Verify(baseLogin, voucherId); + _logInfo.Debug($"作业Id:{workId}-----结束审核"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 审核补料申请单(ID) + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Verify/ID/Token")] + public async Task> MO39_VerifyToekn(int voucherId) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/MO/{cCardNum}/Verify/ID/{userToken},单据ID:{voucherId}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + var db = CommUnit.GetDbClient(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据ID:{voucherId}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始审核"); + var res = bo.Verify(baseLogin, voucherId); + _logInfo.Debug($"作业Id:{workId}-----结束审核"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 弃审补料申请单(ID) + /// + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/UnVerify/ID")] + public async Task> MO39_UnVerify(string cAccId, int voucherId) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + try + { + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + if (!string.IsNullOrWhiteSpace(userToken)) + { + return await MO39_UnVerifyToekn(voucherId); + } + } + catch (Exception ex) + { + _logInfo.Debug($"作业Id:{workId}-----userToken获取失败,错误信息:{ex.Message}"); + } + + _logInfo.Debug($"作业Id:{workId}-----当前接口:api/U8/MO/{cCardNum}/UnVerify/ID,单据类型编码:{cCardNum},单据ID:{voucherId}"); + + if (cCardNum != "MO39") + throw new Exception("当前接口不支持此类型的单据"); + + var baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始弃审"); + var res = bo.UnVerify(baseLogin, voucherId); + _logInfo.Debug($"作业Id:{workId}-----结束弃审"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 弃审补料申请单(ID) + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/UnVerify/ID/Token")] + public async Task> MO39_UnVerifyToekn(int voucherId) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/MO/{cCardNum}/UnVerify/ID/{userToken},单据ID:{voucherId}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + var db = CommUnit.GetDbClient(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{output.cAccId},单据ID:{voucherId}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始弃审"); + var res = bo.UnVerify(baseLogin, voucherId); + _logInfo.Debug($"作业Id:{workId}-----结束弃审"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 删除补料申请单(ID) + /// + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Delete/ID")] + public async Task> MO39_Delete(string cAccId, long voucherId) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + try + { + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + if (!string.IsNullOrWhiteSpace(userToken)) + { + return await MO39_DeleteToekn(voucherId); + } + } + catch (Exception ex) + { + _logInfo.Debug($"作业Id:{workId}-----userToken获取失败,错误信息:{ex.Message}"); + } + + _logInfo.Debug($"作业Id:{workId}-----当前接口:api/U8/MO/{cCardNum}/Delete/ID,单据类型编码:{cCardNum},单据ID:{voucherId}"); + + if (cCardNum != "MO39") + throw new Exception("当前接口不支持此类型的单据"); + + var baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始删除"); + var res = bo.Delete(baseLogin, cCardNum, voucherId); + _logInfo.Debug($"作业Id:{workId}-----结束删除"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 删除补料申请单(ID) + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Delete/ID/Token")] + public async Task> MO39_DeleteToekn(long voucherId) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/MO/{cCardNum}/Delete/ID/{userToken},单据ID:{voucherId}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + var db = CommUnit.GetDbClient(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{output.cAccId},单据ID:{voucherId}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始弃审"); + var res = bo.Delete(baseLogin, cCardNum, voucherId); + _logInfo.Debug($"作业Id:{workId}-----结束弃审"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 审核补料申请单(单号) + /// + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Verify/Code")] + public async Task> MO39_Verify(string cAccId, string voucherCode) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + try + { + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + if (!string.IsNullOrWhiteSpace(userToken)) + { + return await MO39_VerifyToekn(voucherCode); + } + } + catch (Exception ex) + { + _logInfo.Debug($"作业Id:{workId}-----userToken获取失败,错误信息:{ex.Message}"); + } + + _logInfo.Debug($"作业Id:{workId}-----当前接口:api/U8/MO/{cCardNum}/Verify/Code,单据类型编码:{cCardNum},单据编号:{voucherCode}"); + + if (cCardNum != "MO39") + throw new Exception("当前接口不支持此类型的单据"); + + var baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始审核"); + var res = bo.Verify(baseLogin, voucherCode); + _logInfo.Debug($"作业Id:{workId}-----结束审核"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 审核补料申请单(单号) + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Verify/Code/Token")] + public async Task> MO39_VerifyToekn(string voucherCode) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/MO/{cCardNum}/Verify/Code/{userToken},单据编号:{voucherCode}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + var db = CommUnit.GetDbClient(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据编号:{voucherCode}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始审核"); + var res = bo.Verify(baseLogin, voucherCode); + _logInfo.Debug($"作业Id:{workId}-----结束审核"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 弃审补料申请单(单号) + /// + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/UnVerify/Code")] + public async Task> MO39_UnVerify(string cAccId, string voucherCode) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + try + { + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + if (!string.IsNullOrWhiteSpace(userToken)) + { + return await MO39_UnVerifyToekn(voucherCode); + } + } + catch (Exception ex) + { + _logInfo.Debug($"作业Id:{workId}-----userToken获取失败,错误信息:{ex.Message}"); + } + + _logInfo.Debug($"作业Id:{workId}-----当前接口:api/U8/MO/{cCardNum}/UnVerify/Code,单据类型编码:{cCardNum},单据编号:{voucherCode}"); + + if (cCardNum != "MO39") + throw new Exception("当前接口不支持此类型的单据"); + + var baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始弃审"); + var res = bo.UnVerify(baseLogin, voucherCode); + _logInfo.Debug($"作业Id:{workId}-----结束弃审"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 弃审补料申请单(单号) + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/UnVerify/Code/Token")] + public async Task> MO39_UnVerifyToekn(string voucherCode) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/MO/{cCardNum}/UnVerify/Code/{userToken},单据编号:{voucherCode}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + var db = CommUnit.GetDbClient(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{output.cAccId},单据编号:{voucherCode}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始弃审"); + var res = bo.UnVerify(baseLogin, voucherCode); + _logInfo.Debug($"作业Id:{workId}-----结束弃审"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 删除补料申请单(单号) + /// + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Delete/Code")] + public async Task> MO39_Delete(string cAccId, string voucherCode) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + try + { + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + if (!string.IsNullOrWhiteSpace(userToken)) + { + return await MO39_DeleteToekn(voucherCode); + } + } + catch (Exception ex) + { + _logInfo.Debug($"作业Id:{workId}-----userToken获取失败,错误信息:{ex.Message}"); + } + + _logInfo.Debug($"作业Id:{workId}-----当前接口:api/U8/MO/{cCardNum}/Delete/Code,单据类型编码:{cCardNum},单据编号:{voucherCode}"); + + if (cCardNum != "MO39") + throw new Exception("当前接口不支持此类型的单据"); + + var baseLogin = new BaseLogin(); + + var param = await CommUnit.GetLoginParamter(cAccId); + + if (param == null) + { + throw new Exception("未能加载指定系统号的登录信息"); + } + + baseLogin.Init(param); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始删除"); + var res = bo.Delete(baseLogin, cCardNum, voucherCode); + _logInfo.Debug($"作业Id:{workId}-----结束删除"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 删除补料申请单(单号) + /// + /// + /// + [HttpGet] + [Route("api/U8/MO/MO39/Delete/Code/Token")] + public async Task> MO39_DeleteToekn(string voucherCode) + { + var workId = SnowFlakeSingle.Instance.NextId(); + var cCardNum = "MO39"; + + try + { + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/MO/{cCardNum}/Delete/Code/{userToken},单据编号:{voucherCode}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + var db = CommUnit.GetDbClient(); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{output.cAccId},单据编号:{voucherCode}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var bo = new ReplenishApply(); + + _logInfo.Debug($"作业Id:{workId}-----开始弃审"); + var res = bo.Delete(baseLogin, cCardNum, voucherCode); + _logInfo.Debug($"作业Id:{workId}-----结束弃审"); + + + baseLogin.ShutDown(); + + return res; + + } + catch (Exception ex) + { + _logInfo.Error($"作业Id:{workId}-----错误信息:{ex.Message}", ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } } } diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/PUController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/PUController.cs index 779897b..fe8afb6 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/PUController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/PUController.cs @@ -1,23 +1,19 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Threading.Tasks; -using System.Web.Http; -using log4net; +using log4net; using Microsoft.Extensions.Caching.Memory; using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Web.Http; using UFIDA.U8.Framework.Api.Common.Entity; using UFIDA.U8.Framework.Api.ControlObject.Common; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; using UFIDA.U8.Framework.Api.ControlObject.PU; -using UFIDA.U8.Framework.Api.ControlObject.ST; using UFIDA.U8.Framework.Api.ControlObject.U8M; using UFIDA.U8.Framework.Api.Models; using UFIDA.U8.Framework.Api.Unit; -using static System.Runtime.CompilerServices.RuntimeHelpers; namespace UFIDA.U8.Framework.Api.Controllers.U8 { @@ -25,7 +21,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// 采购管理 /// public class PUController : ApiController - { + { /// /// 日志组件 /// @@ -49,7 +45,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpPost] [Route("api/U8/PU/{cCardNum}/VoucherSave")] - public async Task> VoucherSave(string cAccId, string cCardNum, [FromBody] Dictionary input, bool bPositive = true, string sBillType = null, string sBusType = "", int VoucherState = 2, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> VoucherSave(string cAccId, string cCardNum, [FromBody] Dictionary input, bool bPositive = true, string sBillType = null, string sBusType = "", int VoucherState = 2, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -57,6 +53,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{cAccId},数据:{input.ToJson()}"); //LoginParamter param; @@ -91,7 +94,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var defs = await db.Queryable().Where(s => s.CardNumber == cCardNum && s.cPosition == "H" && s.bEnable == true).ToListAsync(); //查询表头字段配置,供后续设置字段值 - + var newNumber = ""; var bGetCode = false; var codeKey = ""; @@ -149,7 +152,11 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - var res = await co.VoucherSave(baseLogin, input, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), bPositive, sBillType, sBusType, VoucherState, UserMode, sOverDetailsXml, bGetCode, codeKey, voucherInfo.bVerify, voucherInfo.bPrintDom,voucherInfo.iswfcontrolled,voucherInfo.cFlowFieldName); + var res = await co.VoucherSave(baseLogin, input, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), bPositive, sBillType, sBusType, VoucherState, UserMode, sOverDetailsXml, bGetCode, codeKey, voucherInfo.bVerify, voucherInfo.bPrintDom, voucherInfo.iswfcontrolled, voucherInfo.cFlowFieldName); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); return res; } @@ -157,7 +164,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + var res = new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -175,7 +188,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/Confirm/Code")] - public async Task> Confirm(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> Confirm(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -183,6 +196,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:审核,对接账套:{cAccId},单号:{cCode}"); //LoginParamter param; @@ -217,13 +237,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -241,7 +273,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/Confirm/ID")] - public async Task> Confirm(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> Confirm(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -249,6 +281,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:审核,对接账套:{cAccId},ID:{voucherId}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) @@ -277,13 +316,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -407,7 +458,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/CancelConfirm/Code")] - public async Task> CancelConfirm(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> CancelConfirm(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -415,6 +466,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{cAccId},单号:{cCode}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin) || baseLogin == null) @@ -443,13 +501,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -467,7 +537,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/CancelConfirm/ID")] - public async Task> CancelConfirm(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> CancelConfirm(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -475,6 +545,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{cAccId},ID:{voucherId}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) @@ -503,13 +580,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -633,7 +722,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/Delete/Code")] - public async Task> Delete(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> Delete(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -641,6 +730,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{cAccId},单号:{cCode}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin) || baseLogin == null) @@ -669,13 +765,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -693,7 +801,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/Delete/ID")] - public async Task> Delete(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> Delete(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -701,6 +809,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{cAccId},ID:{voucherId}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) @@ -729,13 +844,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -853,7 +980,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/SubmintWf/Code")] - public async Task> SubmintWf(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> SubmintWf(string cAccId, string cCardNum, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -861,6 +988,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:提交工作流,对接账套:{cAccId},单号:{cCode}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin) || baseLogin == null) @@ -889,13 +1023,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.SubmintWf(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.SubmintWf(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "提交工作流失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "提交工作流失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -913,7 +1059,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/PU/{cCardNum}/SubmintWf/ID")] - public async Task> SubmintWf(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + public async Task> SubmintWf(string cAccId, string cCardNum, long voucherId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, string tradeid = null) { try { @@ -921,6 +1067,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:提交工作流,对接账套:{cAccId},ID:{voucherId}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) @@ -949,13 +1102,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new clsVoucherCO_PU(); - return await co.SubmintWf(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + var res = await co.SubmintWf(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "提交工作流失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "提交工作流失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -1103,7 +1268,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 if (vouchers == null) { - throw new Exception("未能获取到单据配置信息"); + throw new Exception("未能获取到单据配置信息"); } var db = new SqlSugarClient(new ConnectionConfig() @@ -1122,7 +1287,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var cBWQName = vouchers.cBWQName; var cBTTblExtName = $"{vouchers.cBTTblName}_extradefine"; - var cBWTblExtName =$"{vouchers.cBWTblName}_extradefine" ; + var cBWTblExtName = $"{vouchers.cBWTblName}_extradefine"; var voucherIdFieldName = vouchers.voucherIdFieldName; var vouchersIdFieldName = ""; @@ -1136,14 +1301,14 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var cols = db.DbMaintenance.GetColumnInfosByTableName(cBTQName); - if(cols != null && cols.Count > 0) + if (cols != null && cols.Count > 0) { foreach (var col in cols.Where(col => !colList.ContainsKey(col.DbColumnName.ToLower()))) { if (cCardPostion == "H" || cCardPostion == "L") - colList.Add(col.DbColumnName.ToLower(),$"{cBTQName}.[{col.DbColumnName}]"); + colList.Add(col.DbColumnName.ToLower(), $"{cBTQName}.[{col.DbColumnName}]"); - colListHead.Add(col.DbColumnName.ToLower(),$"{cBTQName}.[{col.DbColumnName}]"); + colListHead.Add(col.DbColumnName.ToLower(), $"{cBTQName}.[{col.DbColumnName}]"); } } @@ -1192,7 +1357,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { vouchersIdFieldName = col.DbColumnName.ToLower(); } - else + else { if (cCardPostion == "B" || cCardPostion == "L") colList.Add(col.DbColumnName.ToLower(), $"{cBWTblExtName}.[{col.DbColumnName}]"); @@ -1218,14 +1383,14 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { query.AddJoinInfo(cBWTblExtName, cBWTblExtName, $"{cBWQName}.[{vouchersIdFieldName}]={cBWTblExtName}.[{vouchersIdFieldName}]"); } - + if (input != null) { var conModels = new List(); foreach (var o in input) { - if (o.Key == "dModifyDate") + if (o.Key == "dModifyDate" && !string.IsNullOrWhiteSpace($"{o.Value}")) { if (colListHead.Any(a => string.Equals(a.Key, "caudittime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "caudittime", StringComparison.OrdinalIgnoreCase))) { @@ -1235,13 +1400,12 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { FieldName = $"{col.Value}", ConditionalType = ConditionalType.GreaterThanOrEqual, - FieldValue = $"{o.Value}" + FieldValue = $"{o.Value}", }); - } - + } } - else if(o.Key == "dModifyDate__2") + else if (o.Key == "dModifyDate__2" && !string.IsNullOrWhiteSpace($"{o.Value}")) { if (colListHead.Any(a => string.Equals(a.Key, "caudittime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "caudittime", StringComparison.OrdinalIgnoreCase))) { @@ -1281,7 +1445,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 }); } } - else if (o.Key.EndsWith("__2")) + else if (o.Key.EndsWith("__2") && !string.IsNullOrWhiteSpace($"{o.Value}")) { if (colListHead.Any(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase))) { @@ -1307,7 +1471,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 }); } } - else if (input.ContainsKey($"{o.Key}__2")) + else if (input.ContainsKey($"{o.Key}__2") && !string.IsNullOrWhiteSpace($"{o.Value}")) { if (colListHead.Any(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase))) { @@ -1333,7 +1497,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 }); } } - else if (colListHead.Any(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase))) + else if (colListHead.Any(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase)) && !string.IsNullOrWhiteSpace($"{o.Value}")) { var col = colListHead.First(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase)); @@ -1343,7 +1507,8 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 ConditionalType = ConditionalType.Equal, FieldValue = $"{o.Value}" }); - }else if (colListBody.Any(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase))) + } + else if (colListBody.Any(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase)) && !string.IsNullOrWhiteSpace($"{o.Value}")) { var col = colListBody.First(a => string.Equals(a.Key, o.Key, StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, o.Key, StringComparison.OrdinalIgnoreCase)); @@ -1362,12 +1527,12 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 query.Where(cDefWhere); - var selector =colList.Select(col => new SelectModel { FieldName = $"{col.Value}", AsName = col.Key }).ToList(); + var selector = colList.Select(col => new SelectModel { FieldName = $"{col.Value}", AsName = col.Key }).ToList(); query.Select(selector).Distinct(); _logInfo.Debug(query.ToSqlString()); - + return new BaseResult() { bSuccess = true, message = "查询成功", result = await query.ToListAsync() }; } catch (Exception ex) diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/SAController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/SAController.cs index a292736..13168e5 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/SAController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/SAController.cs @@ -4,16 +4,12 @@ using SqlSugar; using System; using System.Collections.Generic; using System.Linq; -using System.Net; -using System.Net.Http; using System.Threading.Tasks; using System.Web.Http; -using System.Web.UI.WebControls; using UFIDA.U8.Framework.Api.Common.Entity; using UFIDA.U8.Framework.Api.ControlObject.Common; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; -using UFIDA.U8.Framework.Api.ControlObject.PU; using UFIDA.U8.Framework.Api.ControlObject.SA; using UFIDA.U8.Framework.Api.ControlObject.U8M; using UFIDA.U8.Framework.Api.Unit; @@ -45,14 +41,26 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpPost] [Route("api/U8/SA/{cCardNum}/Save")] - public async Task> Save(string cAccId, string cCardNum, [FromBody] Dictionary input, int VoucherState = 0, bool? bVerify = null) + public async Task> Save(string cAccId, string cCardNum, [FromBody] Dictionary input, int VoucherState = 0, bool? bVerify = null, string tradeid = null) { try { + if (Request.Headers.TryGetValues("userToken", out var values)) + { + return await SaveToken(cCardNum, input, VoucherState, bVerify); + } + var db = CommUnit.GetDbClient(); var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{cAccId},数据:{input.ToJson()}"); if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin)) @@ -143,16 +151,157 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 (VoucherTypeSA)Convert.ToInt32(voucherInfo.VoucherType), VoucherState, bGetCode, codeKey, bVerify ?? voucherInfo.bVerify, voucherInfo.iswfcontrolled, voucherInfo.cFlowFieldName); + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + var res = new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } + /// + /// 保存单据 + /// + /// 单据类型编码 + /// 报文 + /// 单据状态:0新增,1修改 + /// 是否审核 + /// + /// + [HttpPost] + [Route("api/U8/SA/{cCardNum}/Save/Token")] + public async Task> SaveToken(string cCardNum, [FromBody] Dictionary input, int VoucherState = 0, bool? bVerify = null, string tradeid = null) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + + var userToken = Request.Headers.GetValues("userToken").First(); + + _logInfo.Debug($"当前接口:api/U8/SA/{cCardNum}/Insert/{userToken},参数:{input.ToJson()}"); + + var output = CommUnit.GetDecrypt(userToken).ToObject(); + + var token = CommUnit.GetDecrypt(output.userToken); + + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},数据:{input.ToJson()}"); + + var baseLogin = new BaseLogin(); + + baseLogin.Init(output, false); + + _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var defs = await db.Queryable().Where(s => s.CardNumber == cCardNum && s.cPosition == "H" && s.bEnable == true).ToListAsync(); //查询表头字段配置,供后续设置字段值 + + + var newNumber = ""; + var bGetCode = false; + var codeKey = ""; + + if (defs.Any(a => a.bDefault == true && a.cPosition == "H" && a.DefaultValue == "单号" && a.bEnable == true)) + { + bGetCode = true; + codeKey = defs.Where(a => a.bDefault == true && a.cPosition == "H" && a.DefaultValue == "单号" && a.bEnable == true).Select(a => a.FieldName).First(); + + _logInfo.Debug($"作业Id:{workId}-----配置获取单号"); + } + else + { + _logInfo.Debug($"作业Id:{workId}-----没有单号需要自动指定"); + } + + #region 调整日期,去掉时间部分 + + if (input.ContainsKey("ddate")) + { + _logInfo.Debug($"作业Id:{workId}-----调整日期,去掉时间部分"); + input["ddate"] = $"{Convert.ToDateTime(input["ddate"]):yyyy-MM-dd}"; + } + + if (input.ContainsKey("dtvdate")) + { + _logInfo.Debug($"作业Id:{workId}-----调整日期,去掉时间部分"); + input["dtvdate"] = $"{Convert.ToDateTime(input["dtvdate"]):yyyy-MM-dd}"; + } + + #endregion + _logInfo.Debug($"作业Id:{workId}-----设置表头数据"); + input.SetDictionaryData(defs, baseLogin.Connection, newNumber); + + _logInfo.Debug($"作业Id:{workId}-----读取表体数据"); + var bodyData = input[voucherInfo.BodyName].ToJson().ToList>(); //读取表体的数据 + + if (bodyData == null || bodyData.Count <= 0) + throw new Exception("无表体数据!"); + + _logInfo.Debug($"作业Id:{workId}-----获取表体字段配置"); + var defsBody = await db.Queryable().Where(s => s.CardNumber == cCardNum && s.cPosition == "B" && s.bEnable == true).ToListAsync(); //获取表体的字段配置 + + var rowNo = 1; + + foreach (var body in bodyData) + { + _logInfo.Debug($"作业Id:{workId}-----设置第{rowNo}行单据数据"); + body.SetDictionaryData(defsBody, baseLogin.Connection, newNumber, rowNo); + + rowNo++; + } + + input[voucherInfo.BodyName] = bodyData; + + var co = new ClsVoucherCO_SA(); + + var res = await co.Save(baseLogin, input, cCardNum, + (VoucherTypeSA)Convert.ToInt32(voucherInfo.VoucherType), VoucherState, bGetCode, codeKey, + bVerify ?? voucherInfo.bVerify, voucherInfo.iswfcontrolled, voucherInfo.cFlowFieldName); + + baseLogin.ShutDown(); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; + } + catch (Exception ex) + { + _logInfo.Error(ex.Message, ex); + + var res = new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; + } + } + + /// /// 查询特定单据部分 /// diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs index 7ed9542..0ac944a 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs @@ -12,7 +12,6 @@ using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; using UFIDA.U8.Framework.Api.ControlObject.ST; using UFIDA.U8.Framework.Api.ControlObject.U8M; -using UFIDA.U8.Framework.Api.Entity; using UFIDA.U8.Framework.Api.Models; using UFIDA.U8.Framework.Api.Unit; // ReSharper disable StringLiteralTypo @@ -45,22 +44,31 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// 传空字符串 /// 是否远程 /// 是否生成时审核 + /// + /// 请求ID /// [HttpPost] [Route("api/U8/ST/{cCardNum}/Insert")] - public async Task> Insert(string cAccId, string cCardNum, [FromBody] Dictionary input, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bReMote = false, bool? bVerify = null, bool? bVerify2 = null) + public async Task> Insert(string cAccId, string cCardNum, [FromBody] Dictionary input, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bReMote = false, bool? bVerify = null, bool? bVerify2 = null, string tradeid = null) { try { if (Request.Headers.TryGetValues("userToken", out var values)) { - return await InsertToken(cCardNum, input, bCheck, bBeforCheckStock, bIsRedVouch, sAddedState, bReMote, bVerify); + return await InsertToken(cCardNum, input, bCheck, bBeforCheckStock, bIsRedVouch, sAddedState, bReMote, bVerify, bVerify2); } var db = CommUnit.GetDbClient(); var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{cAccId},数据:{input.ToJson()}"); //LoginParamter param; @@ -250,13 +258,23 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var res = await co.Insert(baseLogin, input, cCardNum, voucherInfo.VoucherType, bGetCode, codeKey, bCheck, bBeforCheckStock, bIsRedVouch, sAddedState, bReMote, bVerify ?? voucherInfo.bVerify, voucherInfo.bPrintDom, bVerify2 ?? false); + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + var res = new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -272,10 +290,11 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// 传空字符串 /// 是否远程 /// 是否生成时审核 + /// /// [HttpPost] [Route("api/U8/ST/{cCardNum}/Insert/Token")] - public async Task> InsertToken(string cCardNum, [FromBody] Dictionary input, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bReMote = false, bool? bVerify = null, bool? bVerify2 = null) + public async Task> InsertToken(string cCardNum, [FromBody] Dictionary input, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bReMote = false, bool? bVerify = null, bool? bVerify2 = null, string tradeid = null) { try { @@ -283,7 +302,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 _logInfo.Debug($"当前接口:api/U8/ST/{cCardNum}/Insert/{userToken},参数:{input.ToJson()}"); - var output = CommUnit.GetDecrypt(userToken).ToObject(); + var output = CommUnit.GetDecrypt(userToken).ToObject(); var token = CommUnit.GetDecrypt(output.userToken); @@ -291,28 +310,18 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},数据:{input.ToJson()}"); - //LoginParamter param; + var baseLogin = new BaseLogin(); - - - if (!_cache.TryGetValue($"U8_{userToken}_{output.cAccId}", out BaseLogin baseLogin)) - { - _logInfo.Debug($"作业Id:{workId}-----未获取到缓存的登录信息,正在重新构建"); - - baseLogin = new BaseLogin(); - - baseLogin.Init(token, false, 5); - - _cache.Clear(); - - _cache.Set($"U8_{userToken}_{output.cAccId}", baseLogin); - } - //else - //{ - // param = await CommUnit.GetLoginParamter(cAccId); - //} + baseLogin.Init(output, false); _logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); @@ -475,13 +484,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var res = await co.Insert(baseLogin, input, cCardNum, voucherInfo.VoucherType, bGetCode, codeKey, bCheck, bBeforCheckStock, bIsRedVouch, sAddedState, bReMote, bVerify ?? voucherInfo.bVerify, voucherInfo.bPrintDom, bVerify2 ?? false); + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + baseLogin.ShutDown(); + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + var res = new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -719,7 +740,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/ST/{cCardNum}/Verify/Code")] - public async Task> Verify(string cAccId, string cCardNum, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) + public async Task> Verify(string cAccId, string cCardNum, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false, string tradeid = null) { try { @@ -727,6 +748,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:审核,对接账套:{cAccId},单号:{cCode}"); //LoginParamter param; @@ -761,13 +789,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new USERPCO(); - return await co.Verify(baseLogin, cCardNum, voucherInfo.VoucherType, cCode, bCheck, bBeforCheckStock, bList); + var res = await co.Verify(baseLogin, cCardNum, voucherInfo.VoucherType, cCode, bCheck, bBeforCheckStock, bList); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -784,7 +824,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/ST/{cCardNum}/Verify/ID")] - public async Task> Verify(string cAccId, string cCardNum, long voucherId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) + public async Task> Verify(string cAccId, string cCardNum, long voucherId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false, string tradeid = null) { try { @@ -792,6 +832,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:审核,对接账套:{cAccId},ID:{voucherId}"); //LoginParamter param; @@ -826,13 +873,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new USERPCO(); - return await co.Verify(baseLogin, cCardNum, voucherInfo.VoucherType, voucherId, bCheck, bBeforCheckStock, bList); + var res = await co.Verify(baseLogin, cCardNum, voucherInfo.VoucherType, voucherId, bCheck, bBeforCheckStock, bList); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -953,7 +1012,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/ST/{cCardNum}/UnVerify/Code")] - public async Task> UnVerify(string cAccId, string cCardNum, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) + public async Task> UnVerify(string cAccId, string cCardNum, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false, string tradeid = null) { try { @@ -961,6 +1020,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{cAccId},单号:{cCode}"); //LoginParamter param; @@ -995,13 +1061,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new USERPCO(); - return await co.UnVerify(baseLogin, cCardNum, voucherInfo.VoucherType, cCode, bCheck, bBeforCheckStock, bList); + var res = await co.UnVerify(baseLogin, cCardNum, voucherInfo.VoucherType, cCode, bCheck, bBeforCheckStock, bList); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -1019,7 +1097,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/ST/{cCardNum}/UnVerify/ID")] - public async Task> UnVerify(string cAccId, string cCardNum, long voucherId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) + public async Task> UnVerify(string cAccId, string cCardNum, long voucherId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false, string tradeid = null) { try { @@ -1027,6 +1105,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{cAccId},ID:{voucherId}"); //LoginParamter param; @@ -1061,13 +1146,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new USERPCO(); - return await co.UnVerify(baseLogin, cCardNum, voucherInfo.VoucherType, voucherId, bCheck, bBeforCheckStock, bList); + var res = await co.UnVerify(baseLogin, cCardNum, voucherInfo.VoucherType, voucherId, bCheck, bBeforCheckStock, bList); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -1188,7 +1285,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/ST/{cCardNum}/Delete/Code")] - public async Task> Delete(string cAccId, string cCardNum, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) + public async Task> Delete(string cAccId, string cCardNum, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false, string tradeid = null) { try { @@ -1196,6 +1293,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{cAccId},单号:{cCode}"); //LoginParamter param; @@ -1230,13 +1334,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new USERPCO(); - return await co.Delete(baseLogin, cCardNum, voucherInfo.VoucherType, cCode, bCheck, bBeforCheckStock, bList); + var res = await co.Delete(baseLogin, cCardNum, voucherInfo.VoucherType, cCode, bCheck, bBeforCheckStock, bList); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } @@ -1254,7 +1370,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// [HttpGet] [Route("api/U8/ST/{cCardNum}/Delete/ID")] - public async Task> Delete(string cAccId, string cCardNum, long voucherId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) + public async Task> Delete(string cAccId, string cCardNum, long voucherId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false, string tradeid = null) { try { @@ -1262,6 +1378,13 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var workId = SnowFlakeSingle.Instance.NextId(); + if (string.IsNullOrWhiteSpace(tradeid)) + { + tradeid = $"{workId}"; + } + + await CommUnit.SaveResult(tradeid, true); + _logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{cAccId},ID:{voucherId}"); //LoginParamter param; @@ -1296,13 +1419,25 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 var co = new USERPCO(); - return await co.UnVerify(baseLogin, cCardNum, voucherInfo.VoucherType, voucherId, bCheck, bBeforCheckStock, bList); + var res = await co.UnVerify(baseLogin, cCardNum, voucherInfo.VoucherType, voucherId, bCheck, bBeforCheckStock, bList); + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } catch (Exception ex) { _logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + var res = new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + + res.tradeid = tradeid; + + await CommUnit.SaveResult(tradeid, false, res); + + return res; } } diff --git a/UFIDA.U8.Framework.Api/Entity/LoginInput.cs b/UFIDA.U8.Framework.Api/Entity/LoginInput.cs index 0cb4e8c..5395b8e 100644 --- a/UFIDA.U8.Framework.Api/Entity/LoginInput.cs +++ b/UFIDA.U8.Framework.Api/Entity/LoginInput.cs @@ -42,21 +42,8 @@ namespace UFIDA.U8.Framework.Api.Entity /// /// 登录输出参数 /// - public class LoginOutput + public class LoginOutput:UserTokenInfo { - /// - /// 系统号 - /// - public string cAccId { get; set; } - - /// - /// 用户令牌 - /// - public string userToken { get; set; } - - /// - /// 登录参数 - /// - public LoginParamter loginParamter { get; set; } + } } \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api/Entity/SysTradeResult.cs b/UFIDA.U8.Framework.Api/Entity/SysTradeResult.cs new file mode 100644 index 0000000..c5a4f3e --- /dev/null +++ b/UFIDA.U8.Framework.Api/Entity/SysTradeResult.cs @@ -0,0 +1,32 @@ +using SqlSugar; +using System; +using UFIDA.U8.Framework.Api.ControlObject.Entity; + +namespace UFIDA.U8.Framework.Api.Entity +{ + + /// + /// 接口结果表 + /// + [SugarTable("SysTradeResult", "接口结果表")] + public class SysTradeResult + { + [SugarColumn(IsPrimaryKey = true, ColumnDescription = "主键", ColumnName = "Id", IsNullable = false)] + public virtual long Id { get; set; } + + [SugarColumn(ColumnDescription = "交易唯一识别码", ColumnName = "cTradeId", Length = 100, IsNullable = false)] + public virtual string cTradeId { get; set; } + + [SugarColumn(ColumnDescription = "是否正在运行", ColumnName = "bRun", IsNullable = true)] + public virtual bool? bRun { get; set; } + + [SugarColumn(ColumnDescription = "结果", ColumnName = "cResult", IsJson = true, IsNullable = true)] + public virtual BaseResult cResult { get; set; } + + [SugarColumn(ColumnDescription = "开始时间", ColumnName = "dStartDate", IsNullable = true)] + public virtual DateTime? dStartDate { get; set; } + + [SugarColumn(ColumnDescription = "结束时间", ColumnName = "dEndDate", IsNullable = true)] + public virtual DateTime? dEndDate { get; set; } + } +} diff --git a/UFIDA.U8.Framework.Api/Global.asax.cs b/UFIDA.U8.Framework.Api/Global.asax.cs index 6344796..ff6d894 100644 --- a/UFIDA.U8.Framework.Api/Global.asax.cs +++ b/UFIDA.U8.Framework.Api/Global.asax.cs @@ -20,6 +20,7 @@ namespace UFIDA.U8.Framework.Api private readonly string s_u8FrameworkPath; private readonly string s_u8APIFramework; private readonly string s_u8workflow; + private readonly string s_u8BusinessNotify; public WebApiApplication() @@ -29,6 +30,7 @@ namespace UFIDA.U8.Framework.Api s_u8FrameworkPath = $@"{s_u8Root}Framework\"; s_u8APIFramework = $@"{s_u8Root}UFMOM\U8APIFramework\"; s_u8workflow = $@"{s_u8Root}Workflow\Lib\"; + s_u8BusinessNotify = $@"{s_u8Root}BusinessNotify\"; } @@ -94,6 +96,8 @@ namespace UFIDA.U8.Framework.Api return Assembly.LoadFrom(s_u8APIFramework + sAsmName); if (File.Exists(s_u8workflow + sAsmName)) return Assembly.LoadFrom(s_u8workflow + sAsmName); + if (File.Exists(s_u8BusinessNotify + sAsmName)) + return Assembly.LoadFrom(s_u8BusinessNotify + sAsmName); return null; } } diff --git a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj index daf2815..a441ee3 100644 --- a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj +++ b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj @@ -430,6 +430,7 @@ + Global.asax @@ -445,6 +446,7 @@ PreserveNewest + diff --git a/UFIDA.U8.Framework.Api/Unit/CommUnit.cs b/UFIDA.U8.Framework.Api/Unit/CommUnit.cs index 61cc084..b2e599f 100644 --- a/UFIDA.U8.Framework.Api/Unit/CommUnit.cs +++ b/UFIDA.U8.Framework.Api/Unit/CommUnit.cs @@ -1,18 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using System.Web; -using System.Web.UI.WebControls; -using Microsoft.Data.Sqlite; +using Microsoft.Data.Sqlite; using SqlSugar; +using System; +using System.Configuration; +using System.Threading.Tasks; using UFIDA.U8.Framework.Api.Common.Unit.GM; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.Json; using UFIDA.U8.Framework.Api.Entity; -using UFIDA.U8.Framework.Api.Models; namespace UFIDA.U8.Framework.Api.Unit { @@ -108,11 +102,11 @@ namespace UFIDA.U8.Framework.Api.Unit /// /// /// - public static async Task GetLoginParamter(string cAccId,bool bAP=false,string pDate="") + public static async Task GetLoginParamter(string cAccId, bool bAP = false, string pDate = "") { var db = new SqlSugarClient(GetConnectionConfig()); - var account=await db.Queryable().FirstAsync(a => a.Status == StatusEnum.Enable && a.cAccountNo == cAccId); + var account = await db.Queryable().FirstAsync(a => a.Status == StatusEnum.Enable && a.cAccountNo == cAccId); if (account != null) { @@ -145,6 +139,63 @@ namespace UFIDA.U8.Framework.Api.Unit var token = CommUnit.GetDecrypt(output.userToken); return token; - } + } + + /// + /// 保存请求结果 + /// + /// + /// + /// + /// + /// + public static async Task SaveResult(string tradeid, bool bRun, BaseResult result = null) + { + var db = GetDbClient(); + + if (!db.DbMaintenance.IsAnyTable("SysTradeResult")) + { + db.CodeFirst.InitTables(typeof(SysTradeResult)); + } + + if (bRun == true) + { + if (await db.Queryable().AnyAsync(a => a.cTradeId == tradeid)) + { + throw new Exception($"请求ID:{tradeid}重复"); + } + + var count = await db.Queryable().CountAsync(); + + if (count > 1000) + { + var idList = await db.Queryable().Select(a => a.Id).Take(count - 1000).ToListAsync(); + + await db.Deleteable().Where(a => idList.Contains(a.Id)).ExecuteCommandAsync(); + } + + var entity = new SysTradeResult + { + Id = SnowFlakeSingle.Instance.NextId(), + bRun = bRun, + cTradeId = tradeid, + cResult = result, + dStartDate = DateTime.Now, + }; + + await db.Insertable(entity).ExecuteCommandAsync(); + } + else + { + var entity = await db.Queryable().Where(a => a.cTradeId == tradeid).FirstAsync(); + + entity.cResult = result; + entity.bRun = false; + entity.dEndDate = DateTime.Now; + + await db.Updateable(entity).ExecuteCommandAsync(); + } + + } } } \ No newline at end of file