diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/Entity/VoucherData.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/Entity/VoucherData.cs new file mode 100644 index 0000000..f002deb --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/Entity/VoucherData.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UFIDA.U8.Framework.Api.ControlObject.AP.Entity +{ + public class VoucherData + { + public long Auto_ID { get; set; } + public bool bMidifyMainItem { get; set; } + public bool bSecurityDeposit { get; set; } + public string CBill { get; set; } + public string cCancelNo { get; set; } + public string cCancelNo_R { get; set; } + public string cChanger { get; set; } + public string cChangerName { get; set; } + public object cDefine1 { get; set; } + public object cDefine2 { get; set; } + public object cDefine3 { get; set; } + public object cDefine4 { get; set; } + public object cDefine5 { get; set; } + public object cDefine6 { get; set; } + public object cDefine7 { get; set; } + public object cDefine8 { get; set; } + public object cDefine9 { get; set; } + public object cDefine10 { get; set; } + public object cDefine11 { get; set; } + public object cDefine12 { get; set; } + public object cDefine13 { get; set; } + public object cDefine14 { get; set; } + public object cDefine15 { get; set; } + public object cDefine16 { get; set; } + public string cDeptCode { get; set; } + public string cDigest { get; set; } + public string cDwCode { get; set; } + public string cDwName { get; set; } + public string cEndorser { get; set; } + public string cEndorserName { get; set; } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAP.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAP.cs new file mode 100644 index 0000000..c3b9c30 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAP.cs @@ -0,0 +1,68 @@ +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.AP +{ + public class NoteManageAP + { + /// + /// 保存票据 + /// + /// + /// + /// + /// + public async Task> NoteSave(BaseLogin login,Dictionary input,bool bNeedBillClosed) + { + try + { + var clsSysInterface = $"UfHeronReport.clsSysInterface".GetComObject(); + var clsReportManager = $"UfHeronReport.clsReportManager".GetComObject(); + var voucherData = $"NoteManageAR.VoucherData".GetComObject(); + var voucher = $"NoteManageAR.Voucher".GetComObject(); + + clsSysInterface.InitInterFace("AP", objLogin: login._vbLogin); + + voucherData = CommonHelper.ToVoucherData(input,voucherData); + + voucher.Init(login._vbLogin, clsReportManager, clsSysInterface); + + var res = new BaseResult(); + var errMsg = ""; + + res.bSuccess = voucher.NoteSave(voucherData, ref errMsg); + + if (!res.bSuccess) + { + res.message = "保存失败"; + res.result = errMsg; + + return res; + } + + res.message = "保存成功"; + res.voucherCode = $"{voucherData.CVouchId}"; + res.voucherId = $"{voucherData.CVouchId}"; + + return res; + } + catch (Exception ex) + { + await Task.Delay(1); + + return new BaseResult() { bSuccess = false, message = "保存失败", result = ex.Message }; + } + + + + + } + + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAR.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAR.cs new file mode 100644 index 0000000..11eb58a --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/NoteManageAR.cs @@ -0,0 +1,193 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ADODB; +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 NoteManageAR + { + /// + /// 保存票据 + /// + /// + /// + /// + /// + public async Task> NoteSave(BaseLogin login, Dictionary input,bool bNeedBillClosed) + { + try + { + //var clsSysInterface = $"UfHeronReport.clsSysInterface".GetComObject(); + //var clsReportManager = $"UfHeronReport.clsReportManager".GetComObject(); + + //var clsCloseBil = $"UFAPBO.clsCloseBil".GetComObject(); + var clsApNote = $"UFAPBO.clsApNote".GetComObject(); + var voucherData = $"NoteManageAR.VoucherData".GetComObject(); + var voucher = $"NoteManageAR.Voucher".GetComObject(); + var clsPub = $"NoteManageAR.clsPub".GetComObject(); + //var rpPub = $"UFRPPub.clsPub".GetComObject(); + + //clsSysInterface.InitInterFace("AP", adoConn:login.Connection, objLogin: login._vbLogin); + + //var clsReportManager = clsSysInterface.GetReportEngine(); + + clsPub.main(login._vbLogin); + + clsPub.bNeedZD = true; + + voucherData = CommonHelper.ToVoucherData(input, voucherData); + + voucherData.FillData(ref voucherData, ref clsPub, true); + + //rpPub.oLogin = login._vbLogin; + //rpPub.DBConn = login.Connection; + + //rpPub.InitPubs(login._vbLogin.DataSource, login._vbLogin.get_cAcc_Id(), login._vbLogin.cIYear, $"{login._vbLogin.CurDate:yyyy-MM-dd}"); + + + + voucher.Init(login._vbLogin,clsPub.RepManager,clsPub.RepSys); + + string pSubId = "AR"; + object ssDate =$"{login._vbLogin.CurDate:yyyy-MM-dd}" ; + + login._vbLogin.LoginEx(pSubId, ssDate); + + clsApNote.Init(login._vbLogin, clsPub.Conn); + + var res = new BaseResult(); + var errMsg = ""; + + voucher.bNeedBillClosed = bNeedBillClosed; + + Trace.WriteLine($"{clsPub.bNeedZD}"); + Trace.WriteLine($"{clsPub.cNoteCancelNo}"); + Trace.WriteLine($"{Microsoft.VisualBasic.Information.TypeName(clsPub.objARAPProxy)}"); + //voucher.m_bStartFlag = false; + //voucher.OneVoucherData = voucherData; + //voucher.objPub = clsPub; + + clsPub.Conn.BeginTrans(); + + res.bSuccess = voucher.NoteCheck(voucherData, ref errMsg); + //res.bSuccess = voucher.VoucherHeadCheck(voucherData,true, ref errMsg); + + if (!res.bSuccess) + { + clsPub.Conn.RollbackTrans(); + //login.Connection.RollbackTrans(); + res.message = "保存失败"; + res.result = errMsg; + + return res; + } + + res.bSuccess = voucher.NoteSave(ref voucherData, ref errMsg); + + if (!res.bSuccess) + { + clsPub.Conn.RollbackTrans(); + //login.Connection.RollbackTrans(); + res.message = "保存失败"; + res.result = errMsg; + + return res; + } + + var clsVouchFacade = new clsVouchFacade(); + + var newInput = new Dictionary() + { + { "dVouchDate", $"{login._vbLogin.CurDate:yyyy-MM-dd}" }, + { "cSSName", voucherData.cVouchTypeName }, + { "cexch_name", voucherData.cExch_Name }, + { "iAmount_f", voucherData.iAmount }, + { "iAmount", voucherData.iAmount_Local }, + { "cBank", voucherData.cPayBillBank }, + { "cBankAccount", voucherData.cPayBillAccount }, + { "cNoteNo", voucherData.CVouchId }, + { "cDepCode", voucherData.cDeptCode }, + { "cDwCode", voucherData.cDwCode }, + { "cOperator", voucherData.CBill }, + { "cDigest", voucherData.cDigest }, + { "bStartFlag", voucher.m_bStartFlag }, + { "cVouchType", "48" }, + { "cCoVouchType", voucherData.cVouchType }, + { "cCoVouchID", voucherData.CVouchId }, + { "cFlag", voucherData.cFlag }, + { "cSSCode", voucherData.cSettleCode }, + { "cPerson", voucherData.cPerson }, + { "cNatBank", voucherData.cReceiveBank }, + { "cNatBankAccount", voucherData.cReceiveAccount }, + { "cCode", voucher.getNoteKm(voucherData.cVouchType) } + }; + + var bodys = new List>(); + + var body = new Dictionary() + { + {"editprop","A"}, + {"cMemo",voucherData.cDigest}, + {"cCusVen",voucherData.cDwCode}, + {"iAmt_f",voucherData.iAmount}, + {"iAmt",voucherData.iAmount_Local}, + {"cKm",voucher.getNoteKm(voucherData.cVouchType)}, + {"iRAmt_f",voucherData.iAmount}, + {"iRAmt",voucherData.iAmount_Local}, + {"cDepCode",voucherData.cDeptCode}, + {"cPersonCode",voucherData.cPerson}, + }; + + newInput["body"] = bodys; + + bodys.Add(body); + + var res2=await clsVouchFacade.SaveVouch(login, newInput, "收款单", true, "cVouchID"); + + + + //var condition = $""; + + //res.bSuccess = clsApNote.Sign(condition, ref errMsg); + ////res.bSuccess = pz_Proc.AP_ZD_One("48", "", $"{voucherData.CVouchId}"); + ////login.Connection.BeginTrans(); + + ////res.bSuccess = voucher.VoucherHeadSave(voucherData, true, ref errMsg); + //Trace.WriteLine($"{voucher.m_strVoucherDirect}"); + //Trace.WriteLine($"{voucherData.cProcStyle}"); + + if (!res2.bSuccess) + { + clsPub.Conn.RollbackTrans(); + //login.Connection.RollbackTrans(); + res.message = "保存失败"; + res.result = res2.message; + + return res; + } + + + clsPub.Conn.CommitTrans(); + //login.Connection.CommitTrans(); + res.message = "保存成功"; + res.voucherCode = $"{voucherData.CVouchId}"; + res.voucherId = $"{voucherData.CVouchId}"; + + return res; + } + catch (Exception ex) + { + await Task.Delay(1); + + return new BaseResult() { bSuccess = false, message = "保存失败", result = ex.Message }; + } + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs index 4075ec1..7039c6d 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs @@ -6,6 +6,7 @@ using MSXML2; using UFIDA.U8.Framework.Api.ControlObject.Common; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.U8M; +using System.Collections; // ReSharper disable IdentifierTypo // ReSharper disable InconsistentNaming @@ -27,7 +28,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP /// 是否期初 /// 表体数据字段 /// - public BaseResult CloseBillSave(BaseLogin baseLogin,Dictionary dictionary,string cSubId,bool isAdd=true, bool bFirst=false,string bodyKey="body") + public BaseResult CloseBillSave(BaseLogin baseLogin,Dictionary dictionary,string cSubId,bool isAdd=true, bool bFirst=false,string bodyKey="body") { try { @@ -66,13 +67,13 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP if (!saveFlag) throw new Exception(errorMessage); - return new BaseResult { bSuccess = true, message = "保存成功", result = "保存成功" }; + return new BaseResult { bSuccess = true, message = "保存成功", result = "保存成功" }; } catch (Exception ex) { logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; } } @@ -140,7 +141,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP /// 是否新增 /// /// - public BaseResult ApNoteSave(BaseLogin baseLogin, Dictionary dictionary, string cSubId, bool isAdd = true, bool bFirst = false) + public BaseResult ApNote_SaveVouch(BaseLogin baseLogin, Dictionary dictionary, string cSubId, bool isAdd = true, bool bFirst = false) { try { @@ -148,103 +149,6 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP var domHead = dictionary.ToDocument2(); - #region 弃用 - - - - - //if (cSubId == "AR") - //{ - // //var pub = "NoteManageAR.clsPub".GetComObject(); - - // //pub.main(m_Login); - - // //var ar = "NoteManageAR.Voucher".GetComObject(); - - // //ar.Init(m_Login, pub.RepSys, pub.RepManager); - - // //var da = new VoucherDataClass(); - - // //var apar = new APARHelper(da); - - - - // //ar.m_bStartFlag = false; - // //ar.bLastYearBill = false; - // //ar.m_strCardNum = "RP02"; - // //ar.m_strVoucherType = "50"; - // //ar.m_strVoucherDirect = pub.strNoteDirect; - - - // ////ar.bUpdateiAmount = true; - // ////ar.NotExec = true; - // ////ar.NotExec = true; - // //ar.objPub = pub; - - - - // //apar.SetValue(dictionary); - - // //ar.m_strVoucherID = da.CVouchId; - // //ar.m_VoucherHead = domHead; - // //ar.OneVoucherData = da; - - // //ar.bNeedBillClosed = true; - - // //da.cVouchTypeName = "银行承兑汇票"; - // //da.cPayBillBank = "华夏银行股份有限公司深圳分行营业部"; - - // var msg = ""; - - // //logInfo.Debug($"da:{da.ToJson()}"); - - // //if (!ar.VoucherHeadCheck(da, true, ref msg)) - // //{ - // // throw new Exception(msg); - // //} - - // //msg = ""; - - // //if (!ar.NoteCheck(da, ref msg)) - // //{ - // // throw new Exception(msg); - // //} - // //msg = ""; - - // //if (!ar.NoteSave(da, ref msg)) - // //{ - // // throw new Exception(msg); - // //} - - // ////ar.re - - - // ////var bo = "UFAPBO.clsApNote".GetComObject(); - // //var apPub = "NoteManageAR.PZ_Proc".GetComObject(); - - // //apPub.objPub = pub; - - // //var aa=apPub.ProcSign("9A"); - - // //var bb = pub.cNoteCancelNo; - - // //var m_conn = new Connection(); - - // //m_conn.Open(m_Login.UfDbName); - - // //bo.Init(m_Login, m_conn); - - // //var errorMessage = ""; - - // //var saveFlag = bo.Sign($"", ref errorMessage); - - // //if (!saveFlag) - // // throw new Exception(errorMessage); - - // return new BaseResult { bSuccess = true, message = "保存成功", result = "保存成功" }; - //} - #endregion - var ap = "UFAPBO.clsAccount_AP".GetComObject(); var bo = "UFAPBO.clsApNote".GetComObject(); @@ -289,24 +193,93 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP boResult = bo.Init(m_Login, m_conn); } - - - //logInfo.Debug($"ap.Init:{a}"); - - //var b=ap.InitSubOption2(cSubId); - //logInfo.Debug($"ap.InitSubOption2:{b}"); - //var c=ap.ARAPStart(cSubId); - //logInfo.Debug($"ap.ARAPStart:{c}"); - - - - //var d=bo.Init(m_Login); - - //logInfo.Debug($"bo.Init:{d}"); - var errorMessage = ""; - var saveFlag = bo.SaveVouch(domHead, ref errorMessage); + bool saveFlag = bo.SaveVouch(domHead, ref errorMessage); + + if (!saveFlag) + { + throw new Exception(errorMessage); + } + + return new BaseResult { bSuccess = true, message = "保存成功", result = "保存成功" }; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; + } + } + + public BaseResult ApNote_Sign(BaseLogin baseLogin, string cLink, string cSubId, bool isAdd = true, bool bFirst = false) + { + try + { + var m_Login = baseLogin._vbLogin; + + var ap = "UFAPBO.clsAccount_AP".GetComObject(); + + var bo = "UFAPBO.clsApNote".GetComObject(); + + bool initResult = ap.Init(m_Login, cSubId); + + if (!initResult) + { + logInfo.Debug($"1-----初始化参数失败,正在重新初始化"); + + initResult = ap.Init(m_Login); + + if (!initResult) + { + logInfo.Debug($"2-----初始化参数失败"); + } + } + + var m_conn = new Connection(); + + m_conn.Open(m_Login.UfDbName); + + + if (initResult) + { + bool b = ap.InitSubOption2(cSubId); + + if (!b) + { + logInfo.Debug($"初始化参数2失败"); + } + + logInfo.Debug($"调用初始化方法1"); + + bo.Init(m_Login, m_conn, ap); + } + else + { + logInfo.Debug($"调用初始化方法2"); + + bo.Init(m_Login, m_conn); + } + + + var xmlCondition = $""; + var errorMessage = ""; + + bool saveFlag = bo.Sign(xmlCondition, ref errorMessage); + + + if (!saveFlag) + { + throw new Exception(errorMessage); + } + + //if (saveFlag) + //{ + // saveFlag = bo.Sign($"", ref errorMessage); + //} + + + //logInfo.Debug($"bo.SaveVouch:{errorMessage}"); diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/clsCloseBil.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/clsCloseBil.cs new file mode 100644 index 0000000..2a17bc2 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/clsCloseBil.cs @@ -0,0 +1,16 @@ +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.AP +{ + public class clsCloseBil + { + + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/clsVouchFacade.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/clsVouchFacade.cs new file mode 100644 index 0000000..e56b2ae --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/AP/clsVouchFacade.cs @@ -0,0 +1,125 @@ +using ADODB; +using log4net; +using MSXML2; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +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 clsVouchFacade + { + protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + + public async Task> SaveVouch(BaseLogin login, Dictionary input,string VouchClass,bool bGetCode=false,string codeKey="",bool bPrintDom=false) + { + try + { + var clsVouchFacade = $"UFAPBO.clsVouchFacade".GetComObject(); + + clsVouchFacade.Init(VouchClass, login._vbLogin, login.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); + //} + + 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("无法获取表体数据"); + } + + 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()); + + logInfo.Debug($"获取新单号:{newCode}"); + + if (!string.IsNullOrWhiteSpace(newCode)) + { + CommonHelper.SetDomKeyValue(domHead, codeKey, newCode); + } + + input[codeKey] = newCode; + } + + logInfo.Debug("填充表体DOM..."); + domBody = dictionarys.ToDocument2(domBody); + + if (bPrintDom) + { + logInfo.Debug("开始输入DOM..."); + + logInfo.Debug(domHead.xml); + + logInfo.Debug(domBody.xml); + } + + var res = new BaseResult(); + + clsVouchFacade.bOutTrans = true; + + res.bSuccess = clsVouchFacade.SaveVouch(domHead, domBody, ref errMsg); + + if (!res.bSuccess) + { + throw new Exception(errMsg); + } + + res.message = "保存成功"; + res.voucherCode = ""; + res.voucherId = ""; + + return res; + + } + 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/Common/CommonHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs index f43d21d..f25ddaa 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs @@ -9,6 +9,7 @@ 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; @@ -81,6 +82,23 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common } } + public static dynamic SetVBPropValue(dynamic obj, string propName, object value) + { + NewLateBinding.LateSet(obj, null, propName, new[] { value }, null, null); + + return obj; + } + + public static dynamic ToVoucherData(this Dictionary dict,dynamic obj) + { + foreach (var dictKey in dict.Keys) + { + SetVBPropValue(obj, dictKey, dict[dictKey]); + } + + return obj; + } + //public static void SetPropValue(this PropertyInfo prop, VoucherData obj, object value) //{ // if (prop.PropertyType == typeof(string)) @@ -631,5 +649,181 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common return s; } + + /// + /// 获取单据配置信息 + /// + /// 连接对象 + /// 单据类型编码 + /// + /// + public static VouchersInfo GetVouchers(Connection conn,string cCardNum) + { + if (conn == null) throw new ArgumentNullException(nameof(conn)); + if (cCardNum == null) throw new ArgumentNullException(nameof(cCardNum)); + + var rst = new Recordset(); + + var strSql = + $"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName,cDefWhere,cHeadBusObjectId FROM dbo.vouchers WHERE CardNumber='{cCardNum}'"; + + rst.Open(strSql, conn); + + if (rst.EOF || rst.BOF) + { + throw new Exception($"未查询到单据类型编码{cCardNum}的配置信息"); + } + + rst.MoveFirst(); + + var res = new VouchersInfo + { + cDefWhere = string.IsNullOrWhiteSpace($"{rst.Fields["cDefWhere"].Value}") ? "1=1" : $"{rst.Fields["cDefWhere"].Value}", + cBTQName = $"{rst.Fields["BTQName"].Value}", + cBTTblName = $"{rst.Fields["BTTblName"].Value}", + cBWQName = $"{rst.Fields["BWQName"].Value}", + cBWTblName = $"{rst.Fields["BWTblName"].Value}", + cVchTblPrimarykeyNames = $"{rst.Fields["VchTblPrimarykeyNames"].Value}", + cVchListQName = $"{rst.Fields["VchListQName"].Value}", + cCardNumber = $"{rst.Fields["CardNumber"].Value}", + cHeadBusObjectId = $"{rst.Fields["cHeadBusObjectId"].Value}", + cReceiptNOFieldName = $"{rst.Fields["ReceiptNOFieldName"].Value}" + }; + + var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; + + if (codeName.Contains("{##}")) + { + codeName = codeName.Split('{', '#', '#', '}')[0]; + } + + res.cCodeFieldName = codeName; + res.voucherIdFieldName= $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; + + rst.Close(); + + return res; + } + + /// + /// 获取单据编号 + /// + /// 连接对象 + /// 单据Id + /// 单据配置信息 + /// + /// + 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)); + if (vouchers == null) throw new ArgumentNullException(nameof(vouchers)); + + var tableName = vouchers.cBTTblName; + var fieldName = vouchers.voucherIdFieldName; + var codeName = vouchers.cCodeFieldName; + var cDefWhere = vouchers.cDefWhere; + + if (string.IsNullOrWhiteSpace(cDefWhere)) + { + cDefWhere = "1=1"; + } + + var strSql = $"SELECT {codeName} AS cCode FROM {tableName} WHERE {cDefWhere} AND {fieldName}='{voucherId}'"; + + var rst = new Recordset(); + + rst.Open(strSql, conn); + + if (rst.BOF || rst.EOF) + { + throw new Exception($"没有查询到ID为{voucherId}的单据"); + } + + var cCode = $"{rst.Fields["cCode"].Value}"; + + return cCode; + + } + + /// + /// 获取单据编号 + /// + /// 连接对象 + /// 单据编号 + /// 单据配置信息 + /// + /// + public static object GetVoucherId(Connection conn, string cVoucherCode, VouchersInfo vouchers) + { + if (conn == null) throw new ArgumentNullException(nameof(conn)); + if (cVoucherCode == null) throw new ArgumentNullException(nameof(cVoucherCode)); + if (vouchers == null) throw new ArgumentNullException(nameof(vouchers)); + + var tableName = vouchers.cBTTblName; + var fieldName = vouchers.voucherIdFieldName; + var codeName = vouchers.cCodeFieldName; + var cDefWhere = vouchers.cDefWhere; + + if (string.IsNullOrWhiteSpace(cDefWhere)) + { + cDefWhere = "1=1"; + } + + var strSql = $"SELECT {fieldName} AS ID FROM {tableName} WHERE {cDefWhere} AND {codeName}='{cVoucherCode}'"; + + logInfo.Debug($"查询ID:{strSql}"); + + var rst = new Recordset(); + + rst.Open(strSql, conn); + + if (rst.BOF || rst.EOF) + { + throw new Exception($"没有查询到单据编号为{cVoucherCode}的单据"); + } + + var voucherId = rst.Fields["ID"].Value; + + return voucherId; + + } + + public static string GetVoucherWhereSqlByCode(VouchersInfo vouchers,string cVoucherCode) + { + var tableName = vouchers.cBTTblName; + var fieldName = vouchers.voucherIdFieldName; + var codeName = vouchers.cCodeFieldName; + var cDefWhere = vouchers.cDefWhere; + return $"{cDefWhere} AND {codeName}='{cVoucherCode}'"; + } + + public static string GetVoucherWhereSqlById(VouchersInfo vouchers, object voucherId) + { + var tableName = vouchers.cBTTblName; + var fieldName = vouchers.voucherIdFieldName; + var codeName = vouchers.cCodeFieldName; + var cDefWhere = vouchers.cDefWhere; + return $"{cDefWhere} AND {fieldName}='{voucherId}'"; + } + + + public static string GetPUVoucherWhereSqlByCode(VouchersInfo vouchers, string cVoucherCode) + { + var tableName = vouchers.cBTQName; + var fieldName = vouchers.voucherIdFieldName; + var codeName = vouchers.cCodeFieldName; + var cDefWhere = vouchers.cDefWhere; + return $"{cDefWhere} AND {tableName}.{codeName}='{cVoucherCode}'"; + } + + public static string GetPUVoucherWhereSqlById(VouchersInfo vouchers, object voucherId) + { + var tableName = vouchers.cBTQName; + var fieldName = vouchers.voucherIdFieldName; + var codeName = vouchers.cCodeFieldName; + var cDefWhere = vouchers.cDefWhere; + return $"{cDefWhere} AND {tableName}.{fieldName}='{voucherId}'"; + } } } diff --git a/UFIDA.U8.Framework.Api.ControlObject/Entity/VouchersInfo.cs b/UFIDA.U8.Framework.Api.ControlObject/Entity/VouchersInfo.cs new file mode 100644 index 0000000..3c87151 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/Entity/VouchersInfo.cs @@ -0,0 +1,73 @@ +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 VouchersInfo + { + /// + /// 单号字段 + /// + public string cCodeFieldName { get; set; } + + /// + /// Id字段 + /// + public string voucherIdFieldName { get; set; } + + /// + /// 业务对象ID + /// + public string cHeadBusObjectId { get; set; } + + /// + /// 单据类型编码 + /// + public string cCardNumber { get; set; } + + /// + /// 表头表名 + /// + public string cBTTblName { get; set; } + + /// + /// 表体表名 + /// + public string cBWTblName { get; set; } + + /// + /// 表头视图名称 + /// + public string cBTQName { get; set; } + + /// + /// 表体视图名称 + /// + public string cBWQName { get; set; } + + /// + /// 列表视图名称 + /// + public string cVchListQName { get; set; } + + /// + /// 单据主键字段名 + /// + public string cVchTblPrimarykeyNames { get; set; } + + /// + /// 单号字段名 + /// + public string cReceiptNOFieldName { get; set; } + + /// + /// 默认查询条件 + /// + public string cDefWhere { get; set; } + + + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/PU/UseMode.cs b/UFIDA.U8.Framework.Api.ControlObject/PU/UseMode.cs new file mode 100644 index 0000000..bd26616 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/PU/UseMode.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UFIDA.U8.Framework.Api.ControlObject.PU +{ + public enum UseMode + { + BS = 1, + CS=0 + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/PU/clsVoucherCO_PU.cs b/UFIDA.U8.Framework.Api.ControlObject/PU/clsVoucherCO_PU.cs new file mode 100644 index 0000000..f401b8f --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/PU/clsVoucherCO_PU.cs @@ -0,0 +1,894 @@ +using ADODB; +using log4net; +using MSXML2; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; +using UFGeneralFilterOCX; +using UFIDA.U8.Framework.Api.ControlObject.Common; +using UFIDA.U8.Framework.Api.ControlObject.Entity; +using UFIDA.U8.Framework.Api.ControlObject.ST; +using UFIDA.U8.Framework.Api.ControlObject.U8M; +// ReSharper disable InconsistentNaming + +namespace UFIDA.U8.Framework.Api.ControlObject.PU +{ + /// + /// 采购管理 + /// + public class clsVoucherCO_PU + { + protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + + private dynamic InitCo(BaseLogin login, vouchertype enmVoucherType, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var errorMsg = ""; + + var infor = "Info_PU.ClsS_Infor".GetComObject(); + + errorMsg = infor.Init(login._vbLogin, sBusType); + + if (!string.IsNullOrWhiteSpace(errorMsg)) + { + throw new Exception(errorMsg); + } + + var co = "VoucherCO_PU.clsVoucherCO_PU".GetComObject(); + + co.Init(enmVoucherType, login._vbLogin, login.Connection, infor, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + return co; + } + + /// + /// 保存单据 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> VoucherSave(BaseLogin baseLogin, Dictionary dictionary, string cardNumber, vouchertype enmVoucherType, bool bPositive = true, string sBillType = null, string sBusType = null, int VoucherState = 2, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null, bool bGetCode = false, string codeKey = null, bool bAudit = false, bool bPrintDom = false) + { + try + { + var errorMsg = ""; + logInfo.Debug("开始输出登录信息"); + logInfo.Debug(baseLogin._vbLogin.userToken); + + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + IXMLDOMDocument2 domHead = new DOMDocument(); + IXMLDOMDocument2 domBody = new DOMDocument(); + IXMLDOMDocument2 domCur = new DOMDocument(); + + logInfo.Debug("开始获取单据默认模板..."); + co.GetVoucherData(ref domHead, ref domBody, "1=2"); + + logInfo.Debug("填充表头DOM..."); + + domHead = dictionary.ToDocument2(domHead); + + if (!dictionary.TryGetValue("body", out var bodys)) + { + await Task.Delay(1); + throw new Exception("无法获取表体数据"); + } + + if (!(bodys is List> dictionarys) || dictionarys.Count <= 0) + { + await Task.Delay(1); + throw new Exception("无法获取表体数据"); + } + + if (bGetCode) + { + errorMsg = ""; + var newCode = ""; + + if (!co.GetVoucherNO(ref domHead, $"{enmVoucherType}", ref errorMsg, ref newCode)) + { + throw new Exception(errorMsg); + } + + logInfo.Debug($"获取新单号:{newCode}"); + + if (!string.IsNullOrWhiteSpace(newCode)) + { + domHead.SetDomKeyValue(codeKey, newCode); + } + } + + logInfo.Debug("填充表体DOM..."); + domBody = dictionarys.ToDocument2(domBody); + + if (bPrintDom) + { + logInfo.Debug("开始输入DOM..."); + + logInfo.Debug(domHead.xml); + + logInfo.Debug(domBody.xml); + } + + object vouchId = ""; + IXMLDOMDocument2 domMsg = new DOMDocument(); + IXMLDOMDocument2 curDom = new DOMDocument(); + + co.bOutTrans = true; + + baseLogin.Connection.BeginTrans(); + + logInfo.Debug($"{baseLogin.Connection.State},{baseLogin.Connection.ConnectionString}"); + + logInfo.Debug("开始查询单据配置..."); + var vouchers = CommonHelper.GetVouchers(baseLogin.Connection, cardNumber); + + var res = new BaseResult(); + + try + { + + logInfo.Debug("开始保存..."); + errorMsg = co.VoucherSave(ref domHead, ref domBody, VoucherState, ref vouchId, ref curDom, UserMode, sOverDetailsXml, ref domMsg); + logInfo.Debug("保存结束..."); + logInfo.Debug(errorMsg); + logInfo.Debug($"{vouchId}"); + + res.bSuccess = string.IsNullOrWhiteSpace(errorMsg) && !string.IsNullOrWhiteSpace($"{vouchId}"); + + if (!res.bSuccess) + { + try + { + baseLogin.Connection.RollbackTrans(); + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + } + + if (!string.IsNullOrWhiteSpace(errorMsg)) + { + throw new Exception(errorMsg); + } + + if (!string.IsNullOrWhiteSpace(domMsg.xml)) + { + throw new Exception(domMsg.xml); + } + + if (!string.IsNullOrWhiteSpace(curDom.xml)) + { + throw new Exception(curDom.xml); + } + + } + + res.voucherCode = CommonHelper.GetVoucherCode(baseLogin.Connection, vouchId, vouchers); + res.voucherId = $"{vouchId}"; + res.result = errorMsg; + + } + catch (Exception) + { + baseLogin.Connection.RollbackTrans(); + throw; + } + + + if (!res.bSuccess) + { + res.message = "保存失败"; + baseLogin.Connection.RollbackTrans(); + return res; + } + + res.message = "保存成功"; + + logInfo.Debug($"{baseLogin.Connection.State},{baseLogin.Connection.ConnectionString}"); + + var strWhere = CommonHelper.GetVoucherWhereSqlById(vouchers, vouchId); + + if (res.bSuccess && bAudit) + { + try + { + errorMsg = Confirm(co, baseLogin.Connection, enmVoucherType, res.voucherCode, res.voucherId, strWhere); + + if (!string.IsNullOrWhiteSpace(errorMsg)) + { + baseLogin.Connection.RollbackTrans(); + + throw new Exception(errorMsg); + } + } + catch (Exception) + { + baseLogin.Connection.RollbackTrans(); + res.bSuccess = false; + throw; + } + } + + logInfo.Debug("提交事务..."); + + baseLogin.Connection.CommitTrans(); + + return res; + + + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + await Task.Delay(1); + + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; + } + } + + /// + /// 批量审核单据(单号) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task>> Confirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, List cCodes, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + logInfo.Debug("开始输出登录信息"); + logInfo.Debug(baseLogin._vbLogin.userToken); + + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var resList = new List>(); + + foreach (var cCode in cCodes) + { + try + { + var strWhere = CommonHelper.GetPUVoucherWhereSqlByCode(vouchers, cCode); + + var curId = CommonHelper.GetVoucherId(conn, cCode, vouchers); + + var verifyResult = await Confirm(co, conn, enmVoucherType, cCode, curId, strWhere); + + resList.Add(verifyResult); + } + catch (Exception ex) + { + await Task.Delay(1); + logInfo.Error(ex.Message, ex); + } + } + + return resList; + + } + + /// + /// 批量审核单据(ID) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task>> Confirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, List vouchIds, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var resList = new List>(); + + foreach (var vouchId in vouchIds) + { + var strWhere = CommonHelper.GetPUVoucherWhereSqlById(vouchers, vouchId); + + var cCode = CommonHelper.GetVoucherCode(conn, vouchId, vouchers); + + var verifyResult = await Confirm(co, conn, enmVoucherType, cCode, vouchId, strWhere); + + resList.Add(verifyResult); + } + + return resList; + } + + /// + /// 审核单据(单号) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> Confirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var curId = CommonHelper.GetVoucherId(conn, cCode, vouchers); + + var strWhere = CommonHelper.GetPUVoucherWhereSqlByCode(vouchers, cCode); + + var verifyResult = await Confirm(co, conn, enmVoucherType, cCode, curId, strWhere); + + return verifyResult; + } + + /// + /// 审核单据(ID) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> Confirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, long vouchId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var strWhere = CommonHelper.GetPUVoucherWhereSqlById(vouchers, vouchId); + + var cCode = CommonHelper.GetVoucherCode(conn, vouchId, vouchers); + + var verifyResult = await Confirm(co, conn, enmVoucherType, cCode, vouchId, strWhere); + + return verifyResult; + + } + + /// + /// 审核单据 + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> Confirm(dynamic voucherCO, Connection conn, vouchertype sVouchType, string cCode, object vouchId, string strWhere) + { + IXMLDOMDocument2 domHead = new DOMDocument(); + IXMLDOMDocument2 domBody = new DOMDocument(); + IXMLDOMDocument2 domMsg = new DOMDocument(); + + logInfo.Debug("开始获取单据数据..."); + voucherCO.GetVoucherData(ref domHead, ref domBody, strWhere); + + var res = new BaseResult + { + voucherCode = cCode, + voucherId = $"{vouchId}" + }; + + var errorMsg = ""; + + switch (sVouchType) + { + case vouchertype.采购请购单: + { +#if DEBUG + errorMsg = voucherCO.ConfirmApp(ref domHead); +#else + errorMsg = voucherCO.ConfirmApp(ref domHead, ref domMsg); +#endif + break; + } + case vouchertype.采购订单: + { +#if DEBUG + errorMsg = voucherCO.ConfirmPO(ref domHead, ref domMsg); +#else + errorMsg = voucherCO.ConfirmPO(ref domHead, ref domMsg,ref domBody); +#endif + break; + } + case vouchertype.采购到货单: + { + errorMsg = voucherCO.ConfirmArr(ref domHead); + break; + } + case vouchertype.采购发票: + { + errorMsg = voucherCO.ConfirmBill(ref domHead); + break; + } + default: + await Task.Delay(1); + errorMsg = "未知业务"; + break; + } + + res.bSuccess = string.IsNullOrWhiteSpace(errorMsg); + + if (res.bSuccess) + { + res.message = "审核成功"; + res.result = res.voucherId; + + } + else + { + res.message = "审核失败"; + res.result = string.IsNullOrWhiteSpace(errorMsg) ? domMsg.xml : errorMsg; + } + + return res; + } + + /// + /// 批量弃审单据(单号) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task>> CancelConfirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, List cCodes, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + logInfo.Debug("开始输出登录信息"); + logInfo.Debug(baseLogin._vbLogin.userToken); + + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var resList = new List>(); + + foreach (var cCode in cCodes) + { + try + { + var strWhere = CommonHelper.GetPUVoucherWhereSqlByCode(vouchers, cCode); + + var curId = CommonHelper.GetVoucherId(conn, cCode, vouchers); + + var verifyResult = await CancelConfirm(co, conn, enmVoucherType, cCode, curId, strWhere); + + resList.Add(verifyResult); + } + catch (Exception ex) + { + await Task.Delay(1); + logInfo.Error(ex.Message, ex); + } + } + + return resList; + } + + /// + /// 批量弃审单据(ID) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task>> CancelConfirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, List vouchIds, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var resList = new List>(); + + foreach (var vouchId in vouchIds) + { + var strWhere = CommonHelper.GetPUVoucherWhereSqlById(vouchers, vouchId); + + var cCode = CommonHelper.GetVoucherCode(conn, vouchId, vouchers); + + var verifyResult = await CancelConfirm(co, conn, enmVoucherType, cCode, vouchId, strWhere); + + resList.Add(verifyResult); + } + + return resList; + } + + /// + /// 弃审单据(单号) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> CancelConfirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var curId = CommonHelper.GetVoucherId(conn, cCode, vouchers); + + var strWhere = CommonHelper.GetPUVoucherWhereSqlByCode(vouchers, cCode); + + var verifyResult = await CancelConfirm(co, conn, enmVoucherType, cCode, curId, strWhere); + + return verifyResult; + } + + /// + /// 弃审单据(ID) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> CancelConfirm(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, long vouchId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var strWhere = CommonHelper.GetPUVoucherWhereSqlById(vouchers, vouchId); + + var cCode = CommonHelper.GetVoucherCode(conn, vouchId, vouchers); + + var verifyResult = await CancelConfirm(co, conn, enmVoucherType, cCode, vouchId, strWhere); + + return verifyResult; + } + + /// + /// 弃审单据 + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> CancelConfirm(dynamic voucherCO, Connection conn, vouchertype sVouchType, string cCode, object vouchId, string strWhere) + { + IXMLDOMDocument2 domHead = new DOMDocument(); + IXMLDOMDocument2 domBody = new DOMDocument(); + IXMLDOMDocument2 domMsg = new DOMDocument(); + + logInfo.Debug("开始获取单据数据..."); + voucherCO.GetVoucherData(ref domHead, ref domBody, strWhere); + + var res = new BaseResult + { + voucherCode = cCode, + voucherId = $"{vouchId}" + }; + + var errorMsg = ""; + + switch (sVouchType) + { + case vouchertype.采购请购单: + { + errorMsg = voucherCO.CancelconfirmApp(ref domHead); + break; + } + case vouchertype.采购订单: + { +#if DEBUG + errorMsg = voucherCO.CancelconfirmPO(ref domHead); +#else + errorMsg = voucherCO.CancelconfirmPO(ref domHead,ref domBody); +#endif + break; + } + case vouchertype.采购到货单: + { + errorMsg = voucherCO.CancelconfirmArr(ref domHead); + break; + } + case vouchertype.采购发票: + { + errorMsg = voucherCO.CancelconfirmBill(ref domHead); + break; + } + default: + await Task.Delay(1); + errorMsg = "未知业务"; + break; + } + + res.bSuccess = string.IsNullOrWhiteSpace(errorMsg); + + if (res.bSuccess) + { + res.message = "弃审成功"; + res.result = res.voucherId; + + } + else + { + res.message = "弃审失败"; + res.result = string.IsNullOrWhiteSpace(errorMsg) ? domMsg.xml : errorMsg; + } + + return res; + } + + /// + /// 批量删除单据(单号) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task>> Delete(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, List cCodes, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + logInfo.Debug("开始输出登录信息"); + logInfo.Debug(baseLogin._vbLogin.userToken); + + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var resList = new List>(); + + foreach (var cCode in cCodes) + { + try + { + var strWhere = CommonHelper.GetPUVoucherWhereSqlByCode(vouchers, cCode); + + var curId = CommonHelper.GetVoucherId(conn, cCode, vouchers); + + var verifyResult = await Delete(co, conn, enmVoucherType, cCode, curId, strWhere); + + resList.Add(verifyResult); + } + catch (Exception ex) + { + await Task.Delay(1); + logInfo.Error(ex.Message, ex); + } + } + + return resList; + } + + /// + /// 批量删除单据(ID) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task>> Delete(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, List vouchIds, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var resList = new List>(); + + foreach (var vouchId in vouchIds) + { + var strWhere = CommonHelper.GetPUVoucherWhereSqlById(vouchers, vouchId); + + var cCode = CommonHelper.GetVoucherCode(conn, vouchId, vouchers); + + var verifyResult = await Delete(co, conn, enmVoucherType, cCode, vouchId, strWhere); + + resList.Add(verifyResult); + } + + return resList; + } + + /// + /// 删除单据(单号) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> Delete(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, string cCode, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var curId = CommonHelper.GetVoucherId(conn, cCode, vouchers); + + var strWhere = CommonHelper.GetPUVoucherWhereSqlByCode(vouchers, cCode); + + var verifyResult = await Delete(co, conn, enmVoucherType, cCode, curId, strWhere); + + return verifyResult; + } + + /// + /// 删除单据(ID) + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> Delete(BaseLogin baseLogin, string sCardNum, vouchertype enmVoucherType, long vouchId, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + var co = InitCo(baseLogin, enmVoucherType, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var conn = baseLogin.Connection; + + var vouchers = CommonHelper.GetVouchers(conn, sCardNum); + + var strWhere = CommonHelper.GetPUVoucherWhereSqlById(vouchers, vouchId); + + var cCode = CommonHelper.GetVoucherCode(conn, vouchId, vouchers); + + var verifyResult = await Delete(co, conn, enmVoucherType, cCode, vouchId, strWhere); + + return verifyResult; + } + + /// + /// 删除单据 + /// + /// + /// + /// + /// + /// + /// + /// + public async Task> Delete(dynamic voucherCO, Connection conn, vouchertype sVouchType, string cCode, object vouchId, string strWhere) + { + IXMLDOMDocument2 domHead = new DOMDocument(); + IXMLDOMDocument2 domBody = new DOMDocument(); + IXMLDOMDocument2 domMsg = new DOMDocument(); + + logInfo.Debug("开始获取单据数据..."); + voucherCO.GetVoucherData(ref domHead, ref domBody, strWhere); + + var res = new BaseResult + { + voucherCode = cCode, + voucherId = $"{vouchId}" + }; + + var errorMsg = voucherCO.Delete(domHead, domBody); + + res.bSuccess = string.IsNullOrWhiteSpace(errorMsg); + + if (res.bSuccess) + { + res.message = "删除成功"; + res.result = res.voucherId; + + } + else + { + res.message = "删除失败"; + res.result = string.IsNullOrWhiteSpace(errorMsg) ? "未知错误" : errorMsg; + await Task.Delay(1); + } + + return res; + } + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/PU/vouchertype.cs b/UFIDA.U8.Framework.Api.ControlObject/PU/vouchertype.cs new file mode 100644 index 0000000..03a4348 --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/PU/vouchertype.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UFIDA.U8.Framework.Api.ControlObject.PU +{ + public enum vouchertype + { + /// + /// 0 采购请购单 + /// + 采购请购单 = 0, + /// + /// 1 采购订单 + /// + 采购订单 = 1, + /// + /// 2 采购到货单 + /// + 采购到货单 = 2, + /// + /// 3 采购入库单 + /// + 采购入库单 = 3, + /// + /// 4 采购发票 + /// + 采购发票 = 4, + /// + /// 5 采购结算单 + /// + 采购结算单 = 5, + /// + /// 6 PU_STSettle + /// + PU_STSettle = 6, + /// + /// 7 PU_ManSettle + /// + PU_ManSettle = 7, + /// + /// 8 VMIUsedVouch + /// + VMIUsedVouch = 8, + /// + /// 9 供应商资格审批 + /// + 供应商资格审批 = 9, + /// + /// 10 供应商供货审批 + /// + 供应商供货审批 = 10, + /// + /// 11 PU_FYSettle + /// + PU_FYSettle = 11, + /// + /// 12 PU_AutoSettle + /// + PU_AutoSettle = 12, + /// + /// 13 OM_ManSettle + /// + OM_ManSettle = 13, + /// + /// 14 OM_FYSettle + /// + OM_FYSettle = 14, + /// + /// 15 供应商存货调价单 + /// + 供应商存货调价单 = 15 + } +} diff --git a/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs b/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs index d8c236d..91787c2 100644 --- a/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs +++ b/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs @@ -66,6 +66,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST try { logInfo.Debug("开始获取单据默认模板..."); + if (!co.GetDefaultVoucherDom(sVouchType, cCardNum, ref domHead, ref domBody, ref domPosition, ref errorMsg) || !string.IsNullOrWhiteSpace(errorMsg)) { @@ -161,8 +162,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST } catch (Exception) { - await Task.Delay(1); baseLogin.Connection.RollbackTrans(); + await Task.Delay(1); throw; } @@ -171,15 +172,23 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST if (res.bSuccess && bAudit) { errorMsg = ""; + try + { + if (!co.Verify(sVouchType, vouchId, ref errorMsg, baseLogin.Connection, null, ref domMsg)) + { + baseLogin.Connection.RollbackTrans(); - if (!co.Verify(sVouchType, vouchId, ref errorMsg, baseLogin.Connection, null, ref domMsg)) + if (!string.IsNullOrWhiteSpace(errorMsg)) + throw new Exception(errorMsg); + + throw new Exception("审核单据时发生异常,请检查数据"); + } + } + catch (Exception) { baseLogin.Connection.RollbackTrans(); - - if (!string.IsNullOrWhiteSpace(errorMsg)) - throw new Exception(errorMsg); - - throw new Exception("审核单据时发生异常,请检查数据"); + res.bSuccess = false; + throw; } } @@ -206,7 +215,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST else { rst.MoveFirst(); - var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; + var fieldName = $"{rst.Fields["c"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (string.IsNullOrWhiteSpace(fieldName) || string.IsNullOrWhiteSpace(codeName)) { @@ -269,7 +278,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST /// /// /// - public async Task> Update(BaseLogin baseLogin, Dictionary dictionary, string sCardNum, string sVouchType, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bUpdateNeedEas = true) + public async Task> Update(BaseLogin baseLogin, Dictionary dictionary, string sCardNum, string sVouchType, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool ccc = true, bool bPrintDom = false) { try { @@ -312,6 +321,17 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST domBody = bodys.ToDocument2(domBody); + if (bPrintDom) + { + logInfo.Debug("开始输入DOM..."); + + logInfo.Debug(domHead.xml); + + logInfo.Debug(domBody.xml); + + logInfo.Debug(domPosition.xml); + } + //IXMLDOMDocument2 domMsg = new DOMDocument(); errorMsg = ""; @@ -380,9 +400,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -459,9 +477,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -538,9 +554,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -607,9 +621,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -726,9 +738,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -805,9 +815,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -884,9 +892,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -953,9 +959,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -1081,9 +1085,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -1160,9 +1162,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -1239,9 +1239,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); @@ -1308,9 +1306,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.ST throw new Exception(errorMsg); } - var conn = new Connection(); - - conn.Open(baseLogin.UfDbName); + var conn = baseLogin.Connection; var rst = new Recordset(); rst.Open($"SELECT CardNumber,BTTblName,BTQName,BWTblName,BWQName,VchListQName,VchTblPrimarykeyNames,ReceiptNOFieldName FROM dbo.vouchers WHERE CardNumber='{sCardNum}'", conn); 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 962b9b4..0121aee 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 @@ -72,6 +72,9 @@ ..\packages\Microsoft.Bcl.AsyncInterfaces.9.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll @@ -94,6 +97,10 @@ + + D:\U8SOFT\Workflow\Lib\UFIDA.U8.Audit.ServiceProxy.dll + False + D:\U8SOFT\U8M\UFSoft.U8.BO.BE.dll @@ -177,23 +184,33 @@ + + + + + + + + + + diff --git a/UFIDA.U8.Framework.Api.ControlObject/Workflow/ServiceProxy.cs b/UFIDA.U8.Framework.Api.ControlObject/Workflow/ServiceProxy.cs new file mode 100644 index 0000000..495c62d --- /dev/null +++ b/UFIDA.U8.Framework.Api.ControlObject/Workflow/ServiceProxy.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ADODB; +using log4net; +using UFIDA.U8.Audit.ServiceProxy; +using UFIDA.U8.Framework.Api.ControlObject.Entity; +using UFIDA.U8.Framework.Api.ControlObject.U8M; +using UFSoft.U8.Framework.ContextSrv; +using UFSoft.U8.Framework.LoginContext; + +namespace UFIDA.U8.Framework.Api.ControlObject.Workflow +{ + public class ServiceProxy + { + protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + + public bool IsFlowEnabled(BaseLogin login, string bizObjectId, string eventId) + { + var auditServiceProxy = new AuditServiceProxy(); + var errMsg = ""; + var res = auditServiceProxy.IsFlowEnabled(bizObjectId, eventId, login._productContext.calledContext, ref errMsg); + + if (!res && !string.IsNullOrWhiteSpace(errMsg)) + { + throw new Exception(errMsg); + } + + return res; + } + + public BaseResult SubmitApplicationMessage(BaseLogin login, string bizObjectId, string eventId, string voucherId,string voucherCode) + { + try + { + var auditServiceProxy = new AuditServiceProxy(); + var isWFControled = false; + var errMsg = ""; + var res = auditServiceProxy.SubmitApplicationMessage(bizObjectId, eventId, voucherId, login._productContext.calledContext, ref isWFControled, ref errMsg); + + if (!res && !string.IsNullOrWhiteSpace(errMsg)) + { + throw new Exception(errMsg); + } + + if (!isWFControled && !string.IsNullOrWhiteSpace(errMsg)) + { + throw new Exception(errMsg); + } + + if (!isWFControled) + { + throw new Exception("当前单据无法进入工作流"); + } + + return new BaseResult() + { + bSuccess = res, + message = "提交成功", + result = "提交成功", + voucherId = voucherId, + voucherCode = voucherCode + }; + + } + catch (Exception ex) + { + logInfo.Error($"审批流异常:{ex.Message}", ex); + return new BaseResult() + { + bSuccess = false, message = "提交失败", voucherCode = voucherCode, voucherId = voucherId, + result = ex.Message + }; + } + } + + + public string GetBizObjectId(Connection conn,string cCardNum) + { + var rst = new Recordset(); + + + var strSql = $"SELECT cHeadBusObjectId FROM dbo.vouchers WHERE CardNumber='{cCardNum}'"; + + rst.Open(strSql,conn); + + if (rst.EOF || rst.BOF) + { + throw new Exception($"未查询到单据类型编码{cCardNum}的配置信息"); + } + + rst.MoveFirst(); + + var res = $"{rst.Fields["cHeadBusObjectId"].Value}"; + + rst.Close(); + + return res; + } + } +} diff --git a/UFIDA.U8.Framework.Api.Tests/Controllers/UnitTest1.cs b/UFIDA.U8.Framework.Api.Tests/Controllers/UnitTest1.cs index d268e81..13258a7 100644 --- a/UFIDA.U8.Framework.Api.Tests/Controllers/UnitTest1.cs +++ b/UFIDA.U8.Framework.Api.Tests/Controllers/UnitTest1.cs @@ -4,7 +4,8 @@ using System.Collections.Generic; using System.Diagnostics; using System.Web.UI.WebControls; using UFIDA.U8.Framework.Api.ControlObject.AP; -using UFIDA.U8.Framework.Api.ControlObject.Models; +using UFIDA.U8.Framework.Api.ControlObject.Entity; +using UFIDA.U8.Framework.Api.ControlObject.Json; using UFIDA.U8.Framework.Api.ControlObject.U8M; namespace UFIDA.U8.Framework.Api.Tests.Controllers @@ -20,14 +21,12 @@ namespace UFIDA.U8.Framework.Api.Tests.Controllers baseLogin.Init( new LoginParamter() { - cSerial = "", cSrv = "192.168.50.31", pAccId = "(default)@801", pDate = "2015-07-01", - pPassword = "", pSubId = "DP", pUserId = "demo", pYearId = "2015" + cSerial = "", cSrv = "192.168.50.5", pAccId = "(default)@801", pDate = "2014-12-31", + pPassword = "", pSubId = "DP", pUserId = "demo", pYearId = "2014" }, false); - var bo = new UFAPBO(); + var bo = new NoteManageAR(); - var dd = new List>(); - var da = new Dictionary(){ { "bPrePay", 0 }, { "iType", 0 }, @@ -46,40 +45,10 @@ namespace UFIDA.U8.Framework.Api.Tests.Controllers { "cPersonCode", "00043" } }; ; - dd.Add(da); + + //var res= bo.NoteSave(baseLogin, da ); - var dict = new Dictionary() - { - { "cVouchType", "49" }, - { "cVouchID", "0000000030" }, - { "dVouchDate", "2015-07-22" }, - { "cDwCode", "01004" }, - { "cSSCode", "1" }, - {"cDeptCode", "0401"}, - {"cSSName", "现金"}, - {"iPeriod", 7}, - {"cPerson", "00043"}, - {"cPersonName", "顾潇"}, - {"cexch_name", "人民币"}, - {"iExchRate", 1}, - {"iAmount_f", 100.00}, - {"iAmount", 100.00}, - {"iRAmount_f", 100.00}, - {"iRAmount", 100.00}, - {"cTypeName", "付款单"}, - {"cFlag", "AP"}, - {"iPayForOther", 0}, - {"bFromBank", 0}, - {"bToBank", 0}, - {"bSure", 0}, - {"cCode", "1001"}, - { "bStartFlag", 0}, - {"body",dd} - }; - - var res= bo.CloseBillSave(baseLogin, dict, "AP"); - - Trace.WriteLine("aaaaa"); + //Trace.WriteLine(res.ToJson()); } } diff --git a/UFIDA.U8.Framework.Api.sln b/UFIDA.U8.Framework.Api.sln index 479739c..bbf26f4 100644 --- a/UFIDA.U8.Framework.Api.sln +++ b/UFIDA.U8.Framework.Api.sln @@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UFIDA.U8.Framework.Api.Cont EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VoucherPlugTest", "VoucherPlugTest\VoucherPlugTest.csproj", "{20CD37D3-70D0-410B-8765-02E10766EBB2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebUpdate", "WebUpdate\WebUpdate.csproj", "{7861F8D1-F5A9-4AE5-9E60-1772D2B4A074}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,10 @@ Global {20CD37D3-70D0-410B-8765-02E10766EBB2}.Debug|Any CPU.Build.0 = Debug|Any CPU {20CD37D3-70D0-410B-8765-02E10766EBB2}.Release|Any CPU.ActiveCfg = Release|Any CPU {20CD37D3-70D0-410B-8765-02E10766EBB2}.Release|Any CPU.Build.0 = Release|Any CPU + {7861F8D1-F5A9-4AE5-9E60-1772D2B4A074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7861F8D1-F5A9-4AE5-9E60-1772D2B4A074}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7861F8D1-F5A9-4AE5-9E60-1772D2B4A074}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7861F8D1-F5A9-4AE5-9E60-1772D2B4A074}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/UFIDA.U8.Framework.Api/App_Data/API_Meta.db b/UFIDA.U8.Framework.Api/App_Data/API_Meta.db index d557413..7b2add4 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/U8API.xml b/UFIDA.U8.Framework.Api/App_Data/U8API.xml index f68664c..1554f62 100644 --- a/UFIDA.U8.Framework.Api/App_Data/U8API.xml +++ b/UFIDA.U8.Framework.Api/App_Data/U8API.xml @@ -570,7 +570,7 @@ - 应收应付 + 应收应付管理 @@ -578,13 +578,16 @@ 日志组件 - + 应收应付单据保存接口 - - - + 系统号 + 单据类型编码 + 模块号 + 报文 + 业务日期 + @@ -612,29 +615,15 @@ - + 票据保存 系统号 - 单据类型编码 + 模块号 + 业务日期 报文数据 - - - - - 票据保存 - - - - - - - - 票据保存 - - - + @@ -708,6 +697,74 @@ 生产订单 + + + 采购管理 + + + + + 日志组件 + + + + + 保存单据 + + 系统号 + 单据类型编码 + 报文 + 红蓝标识:True,蓝字 + 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + 业务类型:普通采购,直运采购,受托代销 + 单据状态:2新增,1修改,0非编辑 + CS 0,BS 1;一般CS + 为空 + + + + + + 审核单据(单号) + + 系统号 + 单据类型编码 + 单号 + 红蓝标识:True,蓝字 + 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + 业务类型:普通采购,直运采购,受托代销 + CS 0,BS 1;一般CS + 为空 + + + + + 审核单据(ID) + + 系统号 + 单据类型编码 + 单据ID + 红蓝标识:True,蓝字 + 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + 业务类型:普通采购,直运采购,受托代销 + CS 0,BS 1;一般CS + 为空 + + + + + 审核单据(批量) + + 系统号 + 单据类型编码 + 报文 + 红蓝标识:True,蓝字 + 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + 业务类型:普通采购,直运采购,受托代销 + CS 0,BS 1;一般CS + 为空 + + 车间管理 @@ -874,6 +931,130 @@ 是否远程 + + + 审核单据(单号) + + 系统号 + 单据类型编码 + 单据编号 + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + + 审核单据(ID) + + 系统号 + 单据类型编码 + 单据ID + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + + 审核单据(批量) + + 系统号 + 单据类型编码 + 报文 + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + 弃审单据(单号) + + 系统号 + 单据类型编码 + 单据编号 + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + + 弃审单据(ID) + + 系统号 + 单据类型编码 + 单据ID + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + + 弃审单据(批量) + + 系统号 + 单据类型编码 + 报文 + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + 删除单据(单号) + + 系统号 + 单据类型编码 + 单据编号 + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + + 删除单据(ID) + + 系统号 + 单据类型编码 + 单据ID + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + + 删除单据(批量) + + 系统号 + 单据类型编码 + 报文 + 是否控制可用量 + 是否检查可用量 + 是否列表 + + + + + 审批流 + + + + + 日志组件 + + 缺少程序集全局处理事件 @@ -887,6 +1068,11 @@ 报工单删除参数 + + + 批量审核弃审参数 + + 查询参数 diff --git a/UFIDA.U8.Framework.Api/App_Data/票据录入模板.json b/UFIDA.U8.Framework.Api/App_Data/票据录入模板.json new file mode 100644 index 0000000..7685990 --- /dev/null +++ b/UFIDA.U8.Framework.Api/App_Data/票据录入模板.json @@ -0,0 +1,36 @@ +{ + "cVouchType": "50", + "cPayBillBank": "招商银行双榆树支行", + "cVouchTypeName": "银行承兑汇票", + "CVouchId": "12312345", + "cDwCode": "00000001", + "cDeptCode": "0301", + "cPerson": "00024", + "cDigest": "", + "iAmount": 340000.00, + "iRate": 0.00, + "iRAmount": 340000.00, + "dSignDate": "2014-10-21", + "dExpireDate": "2015-04-21", + "dReceiptDate": "2015-01-31", + "cFlag": "AR", + "cReceiver": "星空电子公司", + "cReceiveBank": "", + "cReceiveAccount": "", + "iAmount_Local": 340000.00, + "iRAmount_Local": 340000.00, + "cSettleCode": "401", + "cBill": "demo", + "cSuperBank": "", + "cexch_name": "人民币", + "cDWName": "世纪天华集团公司", + "cPayBillAccount": "6225000099998888", + "cPayBillBankID": "", + "cPayBillBankAdress": "", + "cReceiverCode": "", + "cReceiveBankID": "", + "cRemark": "", + "nfrat": 1, + "iReceiveAmount": 340000.00, + "iReceiveAmount_Local": 340000.00 +} \ No newline at end of file diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs index 1772edc..67d41b1 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs @@ -2,18 +2,20 @@ using Microsoft.Extensions.Caching.Memory; using System; using System.Collections.Generic; +using System.Diagnostics.SymbolStore; using System.Threading.Tasks; using System.Web.Http; using UFIDA.U8.Framework.Api.ControlObject.AP; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFIDA.U8.Framework.Api.ControlObject.U8M; +using UFIDA.U8.Framework.Api.Models; using UFIDA.U8.Framework.Api.Unit; // ReSharper disable InconsistentNaming namespace UFIDA.U8.Framework.Api.Controllers.U8 { /// - /// 应收应付 + /// 应收应付管理 /// public class APController : ApiController { @@ -27,14 +29,16 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// /// 应收应付单据保存接口 /// - /// - /// - /// + /// 系统号 + /// 单据类型编码 + /// 模块号 + /// 报文 + /// 业务日期 + /// /// [HttpPost] - [Route("api/U8/AP/{cCardNum}/Save")] - [Route("api/U8/AR/{cCardNum}/Save")] - public async Task> Save(string cAccId, string cCardNum, [FromBody] Dictionary input) + [Route("api/U8/{cSubId}/{cCardNum}/Save")] + public async Task> Save(string cAccId, string cCardNum, string cSubId, [FromBody] Dictionary input, string busDate="", bool bNeedBillClosed = false) { try { @@ -42,7 +46,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { case "AP03": case "AR03": - return await ApNoteSave(cAccId, cCardNum, input); + return await ApNote_Save(cAccId, cSubId, input,busDate, bNeedBillClosed); case "AP48": case "AP49": case "AR48": @@ -57,7 +61,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; } } @@ -72,7 +76,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 [HttpPost] [Route("api/U8/AP/{cCardNum}/CloseBillSave")] [Route("api/U8/AR/{cCardNum}/CloseBillSave")] - public async Task> CloseBillSave(string cAccId, string cCardNum, [FromBody] Dictionary input) + public async Task> CloseBillSave(string cAccId, string cCardNum, [FromBody] Dictionary input) { try { @@ -121,7 +125,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 { logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message }; } } @@ -135,7 +139,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 [HttpPost] [Route("api/U8/AR/AP48/Save")] [Route("api/U8/AR/AP49/Save")] - public async Task> AP48Save(string cAccId, [FromBody] Dictionary input) + public async Task> AP48Save(string cAccId, [FromBody] Dictionary input) { return await CloseBillSave(cAccId, "AP48", input); } @@ -149,7 +153,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 [HttpPost] [Route("api/U8/AP/AP49/Save")] [Route("api/U8/AP/AP49/Save")] - public async Task> AP49Save(string cAccId, [FromBody] Dictionary input) + public async Task> AP49Save(string cAccId, [FromBody] Dictionary input) { return await CloseBillSave(cAccId, "AP49", input); } @@ -158,30 +162,19 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 /// 票据保存 /// /// 系统号 - /// 单据类型编码 + /// 模块号 + /// 业务日期 /// 报文数据 + /// /// [HttpPost] - [Route("api/U8/AP/{cCardNum}/ApNoteSave")] - [Route("api/U8/AR/{cCardNum}/ApNoteSave")] - public async Task> ApNoteSave(string cAccId, string cCardNum, [FromBody] Dictionary input) + [Route("api/U8/{cSubId}/RP03/NoteSave")] + public async Task> ApNote_Save(string cAccId, string cSubId, [FromBody] Dictionary input, string busDate="",bool bNeedBillClosed=false) { try { - var subId = ""; - if (cCardNum == "AR03") - { - subId = "AR"; - } - - if (cCardNum == "AP03") - { - subId = "AP"; - } - - - if (!_cache.TryGetValue($"U8AP_{cAccId}_{subId}", out BaseLogin baseLogin)) + if (!_cache.TryGetValue($"U8AP_{cAccId}", out BaseLogin baseLogin)) { baseLogin = new BaseLogin(); @@ -192,60 +185,44 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 throw new Exception("未能加载指定系统号的登录信息"); } - param.pSubId = subId; + var curDate = Convert.ToDateTime(string.IsNullOrWhiteSpace(busDate) ? $"{DateTime.Today:yyyy-MM-dd}" : busDate); + + param.pDate = $"{curDate:yyyy-MM-dd}"; + param.pYearId = $"{curDate.Year}"; baseLogin.Init(param, false); - _cache.Set($"U8AP_{cAccId}_{subId}", baseLogin); + _cache.Set($"U8AP_{cAccId}", baseLogin); } - if (string.IsNullOrWhiteSpace(subId)) - throw new Exception("单据标识不正确"); + //if (string.IsNullOrWhiteSpace(cSubId)) + // throw new Exception("单据标识不正确"); - var bo = new UFAPBO(); + if (cSubId == "AP") + { + var bo = new NoteManageAP(); - var res = bo.ApNoteSave(baseLogin, input, subId); + var res =await bo.NoteSave(baseLogin, input, bNeedBillClosed); - return res; + return res; + } + else + { + var bo = new NoteManageAR(); + var res = await bo.NoteSave(baseLogin, input, bNeedBillClosed); + + return res; + } } catch (Exception ex) { logInfo.Error(ex.Message, ex); - return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + return new BaseResult { bSuccess = false, message ="保存失败", result = ex.Message }; } } - - /// - /// 票据保存 - /// - /// - /// - /// - [HttpPost] - [Route("api/U8/AP/AP03/Save")] - public async Task> AP03Save(string cAccId, [FromBody] Dictionary input) - { - return await ApNoteSave(cAccId, "AP03", input); - } - - /// - /// 票据保存 - /// - /// - /// - /// - [HttpPost] - [Route("api/U8/AR/AR03/Save")] - public async Task> AR03Save(string cAccId, [FromBody] Dictionary input) - { - return await ApNoteSave(cAccId, "AR03", input); - } - - - } } diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/PUController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/PUController.cs new file mode 100644 index 0000000..c7fbbb6 --- /dev/null +++ b/UFIDA.U8.Framework.Api/Controllers/U8/PUController.cs @@ -0,0 +1,842 @@ +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 Microsoft.Extensions.Caching.Memory; +using SqlSugar; +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; + +namespace UFIDA.U8.Framework.Api.Controllers.U8 +{ + /// + /// 采购管理 + /// + public class PUController : ApiController + { + /// + /// 日志组件 + /// + protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + + private static readonly MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(10) }); + + /// + /// 保存单据 + /// + /// 系统号 + /// 单据类型编码 + /// 报文 + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// 单据状态:2新增,1修改,0非编辑 + /// CS 0,BS 1;一般CS + /// 为空 + /// + /// + [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) + { + 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); + } + //else + //{ + // param = await CommUnit.GetLoginParamter(cAccId); + //} + + 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_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); + + return res; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace }; + } + } + + /// + /// 审核单据(单号) + /// + /// 系统号 + /// 单据类型编码 + /// 单号 + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [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) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:审核,对接账套:{cAccId},单号:{cCode}"); + + //LoginParamter param; + + if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin) || baseLogin == null) + { + 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); + } + //else + //{ + // param = await CommUnit.GetLoginParamter(cAccId); + //} + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + return await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + } + } + + /// + /// 审核单据(ID) + /// + /// 系统号 + /// 单据类型编码 + /// 单据ID + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [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) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:审核,对接账套:{cAccId},ID:{voucherId}"); + + 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); + } + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + return await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "审核失败", result = ex.Message }; + } + } + + /// + /// 审核单据(批量) + /// + /// 系统号 + /// 单据类型编码 + /// 报文 + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [HttpPost] + [Route("api/U8/PU/{cCardNum}/Confirm")] + public async Task>>> Confirm(string cAccId, string cCardNum, [FromBody] STInput input, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + if (input == null) + { + throw new Exception("参数不能为空"); + } + + var cCodes = input.cCode; + + var voucherIds = input.voucherId; + + if ((cCodes == null || cCodes.Count <= 0) && (voucherIds == null || voucherIds.Count <= 0)) + { + throw new Exception("没有数据需要审核"); + } + + var strCode = ""; + var strId = ""; + + var apiType = cCodes == null || cCodes.Count <= 0 ? 1 : 0; + + if (cCodes != null && cCodes.Count > 0) + { + strCode = string.Join(",", cCodes); + } + + if (voucherIds != null && voucherIds.Count > 0) + { + strId = string.Join(",", voucherIds); + } + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:审核,对接账套:{cAccId},单号:{strCode},ID:{strId}"); + + //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); + } + //else + //{ + // param = await CommUnit.GetLoginParamter(cAccId); + //} + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + var result = apiType == 0 + ? await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCodes, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml) + : await co.Confirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherIds, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var res = new BaseResult>>() + { + bSuccess = true, + message = "审核完成", + result = result + }; + + return res; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult>> { bSuccess = false, message = ex.Message, result = null }; + } + } + + /// + /// 弃审单据(单号) + /// + /// 系统号 + /// 单据类型编码 + /// 单号 + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [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) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{cAccId},单号:{cCode}"); + + if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin) || baseLogin == null) + { + 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); + } + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + return await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + } + } + + /// + /// 弃审单据(ID) + /// + /// 系统号 + /// 单据类型编码 + /// 单据ID + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [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) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{cAccId},ID:{voucherId}"); + + 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); + } + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + return await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "弃审失败", result = ex.Message }; + } + } + + /// + /// 弃审单据(批量) + /// + /// 系统号 + /// 单据类型编码 + /// 报文 + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [HttpPost] + [Route("api/U8/PU/{cCardNum}/CancelConfirm")] + public async Task>>> CancelConfirm(string cAccId, string cCardNum, [FromBody] STInput input, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + if (input == null) + { + throw new Exception("参数不能为空"); + } + + var cCodes = input.cCode; + + var voucherIds = input.voucherId; + + if ((cCodes == null || cCodes.Count <= 0) && (voucherIds == null || voucherIds.Count <= 0)) + { + throw new Exception("没有数据需要弃审"); + } + + var strCode = ""; + var strId = ""; + + var apiType = cCodes == null || cCodes.Count <= 0 ? 1 : 0; + + if (cCodes != null && cCodes.Count > 0) + { + strCode = string.Join(",", cCodes); + } + + if (voucherIds != null && voucherIds.Count > 0) + { + strId = string.Join(",", voucherIds); + } + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:弃审,对接账套:{cAccId},单号:{strCode},ID:{strId}"); + + //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); + } + //else + //{ + // param = await CommUnit.GetLoginParamter(cAccId); + //} + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + var result = apiType == 0 + ? await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCodes, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml) + : await co.CancelConfirm(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherIds, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var res = new BaseResult>>() + { + bSuccess = true, + message = "弃审完成", + result = result + }; + + return res; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult>> { bSuccess = false, message = ex.Message, result = null }; + } + } + + /// + /// 删除单据(单号) + /// + /// 系统号 + /// 单据类型编码 + /// 单号 + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [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) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{cAccId},单号:{cCode}"); + + if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin) || baseLogin == null) + { + 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); + } + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + return await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + } + } + + /// + /// 删除单据(ID) + /// + /// 系统号 + /// 单据类型编码 + /// 单据ID + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [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) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{cAccId},ID:{voucherId}"); + + 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); + } + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + return await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult { bSuccess = false, message = "删除失败", result = ex.Message }; + } + } + + /// + /// 删除单据(批量) + /// + /// 系统号 + /// 单据类型编码 + /// 报文 + /// 红蓝标识:True,蓝字 + /// 发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2) + /// 业务类型:普通采购,直运采购,受托代销 + /// CS 0,BS 1;一般CS + /// 为空 + /// + [HttpPost] + [Route("api/U8/PU/{cCardNum}/Delete")] + public async Task>>> Delete(string cAccId, string cCardNum, [FromBody] STInput input, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null) + { + try + { + var db = CommUnit.GetDbClient(); + + var workId = SnowFlakeSingle.Instance.NextId(); + + if (input == null) + { + throw new Exception("参数不能为空"); + } + + var cCodes = input.cCode; + + var voucherIds = input.voucherId; + + if ((cCodes == null || cCodes.Count <= 0) && (voucherIds == null || voucherIds.Count <= 0)) + { + throw new Exception("没有数据需要弃审"); + } + + var strCode = ""; + var strId = ""; + + var apiType = cCodes == null || cCodes.Count <= 0 ? 1 : 0; + + if (cCodes != null && cCodes.Count > 0) + { + strCode = string.Join(",", cCodes); + } + + if (voucherIds != null && voucherIds.Count > 0) + { + strId = string.Join(",", voucherIds); + } + + logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:删除,对接账套:{cAccId},单号:{strCode},ID:{strId}"); + + 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); + } + + logInfo.Debug($"作业Id:{workId}-----登录信息获取完成,缓存设置完成,开始加载单据配置信息"); + + var voucherInfo = await db.Queryable().FirstAsync(s => s.CardNumber == cCardNum); + + var co = new clsVoucherCO_PU(); + + var result = apiType == 0 + ? await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCodes, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml) + : await co.Delete(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherIds, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml); + + var res = new BaseResult>>() + { + bSuccess = true, + message = "删除完成", + result = result + }; + + return res; + } + catch (Exception ex) + { + logInfo.Error(ex.Message, ex); + + return new BaseResult>> { bSuccess = false, message = ex.Message, result = null }; + } + } + + } +} diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs index 3f7e265..915ac65 100644 --- a/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs +++ b/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs @@ -253,6 +253,228 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8 } } + + ///// + ///// 修改单据 + ///// + ///// 系统号 + ///// 单据类型编码 + ///// 报文 + ///// 是否控制可用量 + ///// 是否检查可用量 + ///// 是否红字单据 + ///// 传空字符串 + ///// 是否远程 + ///// + //[HttpPost] + //[Route("api/U8/ST/{cCardNum}/Update")] + //public async Task> Update(string cAccId, string cCardNum, [FromBody] Dictionary input, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bReMote = false) + //{ + // 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); + // } + // //else + // //{ + // // param = await CommUnit.GetLoginParamter(cAccId); + // //} + + // 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 dateKey = ""; + // var exchKey = ""; + // if (defs.Any(a => a.bDate == true && a.cPosition == "H")) + // dateKey = defs.Where(a => a.bDate == true && a.cPosition == "H").Select(a => a.FieldName).First(); + + // if (defs.Any(a => a.bPrice == true && a.cPosition == "H")) + // exchKey = defs.Where(a => a.bPrice == true && a.cPosition == "H").Select(a => a.FieldName).First(); + + // var dDate = DateTime.Today; + // if (!string.IsNullOrWhiteSpace(dateKey)) + // { + // if (!DateTime.TryParse($"{input[dateKey]}", out dDate)) + // { + // dDate = DateTime.Today; + // } + // } + + // Exch exch; + + // if (!string.IsNullOrWhiteSpace(exchKey) && input.TryGetValue(exchKey, out var value)) + // { + // exch = CommonHelper.GetExch(dDate, cAccId, $"{value}", baseLogin.Connection); + // } + // else + // { + // exch = null; + // } + + + // 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, 1, exch); + + // 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, exch); + + // rowNo++; + + // // 根据存货档案是否批次管理调整批次号 + // if (body.ContainsKey("binvbatch") && body.ContainsKey("cbatch")) + // { + // logInfo.Debug($"作业Id:{workId}-----第{rowNo}行根据存货档案是否批次管理调整批次号"); + // if (body["binvbatch"] == null || body["binvbatch"] == DBNull.Value || !body["binvbatch"].ToBoolean()) + // { + // body["cbatch"] = ""; + // } + // } + + // // 根据存货档案是否批次管理调整批次号(调拨单) + // if (body.ContainsKey("binvbatch") && body.ContainsKey("ctvbatch")) + // { + // logInfo.Debug($"作业Id:{workId}-----第{rowNo}行根据存货档案是否批次管理调整批次号(调拨单)"); + // if (body["binvbatch"] == null || body["binvbatch"] == DBNull.Value || !body["binvbatch"].ToBoolean()) + // { + // body["ctvbatch"] = ""; + // } + // } + + // // 根据存货档案是否保质期管理调整生产日期和失效日期 + // if (body.ContainsKey("binvquality") && body.ContainsKey("dmadedate")) + // { + // logInfo.Debug($"作业Id:{workId}-----第{rowNo}行根据存货档案是否保质期管理调整生产日期和失效日期"); + + // if (body["binvquality"] == null || body["binvquality"] == DBNull.Value || !body["binvquality"].ToBoolean()) + // { + // if (cCardNum == "0304") + // { + // body["dmadedate"] = ""; + // } + // else + // { + // body["dmadedate"] = ""; + // } + // } + // else + // { + // if (body.ContainsKey("cmassunit") && body.ContainsKey("imassdate")) + // { + // switch ($"{body["cmassunit"]}") + // { + // case "1" when cCardNum != "0304": + // body["dvdate"] = $"{Convert.ToDateTime(body["dmadedate"]).AddYears(Convert.ToInt32(body["imassdate"])):yyyy-MM-dd HH:MM:ss}"; + // break; + // case "1" when cCardNum == "0304": + // body["ddisdate"] = $"{Convert.ToDateTime(body["dmadedate"]).AddYears(Convert.ToInt32(body["imassdate"])):yyyy-MM-dd HH:MM:ss}"; + // break; + // case "2" when cCardNum != "0304": + // body["dvdate"] = $"{Convert.ToDateTime(body["dmadedate"]).AddMonths(Convert.ToInt32(body["imassdate"])):yyyy-MM-dd HH:MM:ss}"; + // break; + // case "2" when cCardNum == "0304": + // body["ddisdate"] = $"{Convert.ToDateTime(body["dmadedate"]).AddMonths(Convert.ToInt32(body["imassdate"])):yyyy-MM-dd HH:MM:ss}"; + // break; + // case "3" when cCardNum != "0304": + // body["dvdate"] = $"{Convert.ToDateTime(body["dmadedate"]).AddDays(Convert.ToInt32(body["imassdate"])):yyyy-MM-dd HH:MM:ss}"; + // break; + // case "3" when cCardNum == "0304": + // body["ddisdate"] = $"{Convert.ToDateTime(body["dmadedate"]).AddDays(Convert.ToInt32(body["imassdate"])):yyyy-MM-dd HH:MM:ss}"; + // break; + // } + // } + // } + // } + // } + + // input[voucherInfo.BodyName] = bodyData; + + // var co = new USERPCO(); + + // var res = await co.Update(baseLogin, input, cCardNum, voucherInfo.VoucherType, bCheck, bBeforCheckStock, bIsRedVouch, sAddedState, bReMote, voucherInfo.bVerify, voucherInfo.bPrintDom); + + // 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/WorkflowController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/WorkflowController.cs new file mode 100644 index 0000000..d944c4b --- /dev/null +++ b/UFIDA.U8.Framework.Api/Controllers/U8/WorkflowController.cs @@ -0,0 +1,26 @@ +using log4net; +using Microsoft.Extensions.Caching.Memory; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Http; + +namespace UFIDA.U8.Framework.Api.Controllers.U8 +{ + /// + /// 审批流 + /// + public class WorkflowController : ApiController + { + /// + /// 日志组件 + /// + protected readonly ILog logInfo = LogManager.GetLogger("logInfo"); + + private static readonly MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(10) }); + + + } +} diff --git a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj index a6543fa..be862b1 100644 --- a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj +++ b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj @@ -415,8 +415,10 @@ + + Global.asax @@ -482,6 +484,7 @@ PreserveNewest + Designer diff --git a/UFIDA.U8.Framework.Api/Web.config b/UFIDA.U8.Framework.Api/Web.config index 5f40e0b..cdce6e7 100644 --- a/UFIDA.U8.Framework.Api/Web.config +++ b/UFIDA.U8.Framework.Api/Web.config @@ -28,6 +28,7 @@ + diff --git a/WebUpdate/App.config b/WebUpdate/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/WebUpdate/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/WebUpdate/Entity/UpdateInfo.cs b/WebUpdate/Entity/UpdateInfo.cs new file mode 100644 index 0000000..c2c5f5e --- /dev/null +++ b/WebUpdate/Entity/UpdateInfo.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WebUpdate.Entity +{ + public class UpdateInfo + { + public DateTime LastUpdateTime { get; set; } + public List Files { get; set; } + } + + public class FilesInfo + { + public string FileName { get; set; } + + public string Version { get; set; } + } +} diff --git a/WebUpdate/JsonHelper.cs b/WebUpdate/JsonHelper.cs new file mode 100644 index 0000000..9e7b7e5 --- /dev/null +++ b/WebUpdate/JsonHelper.cs @@ -0,0 +1,43 @@ +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using System.Collections.Generic; +using System.Data; + +namespace WebUpdate +{ + public static class JsonHelper + { + public static object ToJson(this string Json) + { + return Json == null ? null : JsonConvert.DeserializeObject(Json); + } + public static string ToJson(this object obj) + { + var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; + return JsonConvert.SerializeObject(obj, timeConverter); + } + + public static string ToJson(this object obj, string datetimeformats) + { + var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats }; + return JsonConvert.SerializeObject(obj, timeConverter); + } + public static T ToObject(this string Json) + { + return Json == null ? default : JsonConvert.DeserializeObject(Json); + } + public static List ToList(this string Json) + { + return Json == null ? null : JsonConvert.DeserializeObject>(Json); + } + public static DataTable ToTable(this string Json) + { + return Json == null ? null : JsonConvert.DeserializeObject(Json); + } + public static JObject ToJObject(this string Json) + { + return JObject.Parse(Json.Replace(" ", "")); + } + } +} diff --git a/WebUpdate/Program.cs b/WebUpdate/Program.cs new file mode 100644 index 0000000..3ae96df --- /dev/null +++ b/WebUpdate/Program.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WebUpdate.Entity; + +namespace WebUpdate +{ + internal class Program + { + static void Main(string[] args) + { + var fielInfoPath= Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "update.json"); + var updateInfo = new UpdateInfo(); + + + if (File.Exists(fielInfoPath)) + { + var files= File.ReadAllText(fielInfoPath); + updateInfo = files.ToObject(); + } + + + } + } +} diff --git a/WebUpdate/Properties/AssemblyInfo.cs b/WebUpdate/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d787b7a --- /dev/null +++ b/WebUpdate/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("WebUpdate")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WebUpdate")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("7861f8d1-f5a9-4ae5-9e60-1772d2b4a074")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WebUpdate/WebUpdate.csproj b/WebUpdate/WebUpdate.csproj new file mode 100644 index 0000000..a030216 --- /dev/null +++ b/WebUpdate/WebUpdate.csproj @@ -0,0 +1,60 @@ + + + + + Debug + AnyCPU + {7861F8D1-F5A9-4AE5-9E60-1772D2B4A074} + Exe + WebUpdate + WebUpdate + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebUpdate/packages.config b/WebUpdate/packages.config new file mode 100644 index 0000000..0b14af3 --- /dev/null +++ b/WebUpdate/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file