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