diff --git a/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs b/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs
index cc87359..e144fce 100644
--- a/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs
+++ b/UFIDA.U8.Framework.Api.ControlObject/AP/UFAPBO.cs
@@ -3,7 +3,9 @@ using System;
using System.Collections.Generic;
using ADODB;
using MSXML2;
+using NoteManageAR;
using UFIDA.U8.Framework.Api.ControlObject.Common;
+using UFIDA.U8.Framework.Api.ControlObject.Json;
using UFIDA.U8.Framework.Api.ControlObject.Models;
using UFIDA.U8.Framework.Api.ControlObject.U8M;
@@ -17,6 +19,16 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP
{
protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
+ ///
+ /// 收付款单保存
+ ///
+ /// 登录对象
+ /// 单据数据
+ /// 子系统Id
+ /// 是否新增
+ /// 是否期初
+ /// 表体数据字段
+ ///
public BaseResult CloseBillSave(BaseLogin baseLogin,Dictionary dictionary,string cSubId,bool isAdd=true, bool bFirst=false,string bodyKey="body")
{
try
@@ -65,5 +77,212 @@ namespace UFIDA.U8.Framework.Api.ControlObject.AP
return new BaseResult { bSuccess = false, message = "保存失败", result = ex.Message };
}
}
+
+ ///
+ /// 收付款单审核
+ ///
+ /// 登录对象
+ /// 单号
+ /// 单据类型
+ /// 单据Id
+ /// 子系统Id
+ /// 是否期初
+ ///
+ public BaseResult CloseBillSign(BaseLogin baseLogin,string cLink,string cVouchType,string cVouchID, string cSubId, bool bFirst = false)
+ {
+ try
+ {
+ IXMLDOMDocument2 oDom = new DOMDocument();
+
+ oDom.loadXML("");
+
+ var oElm = oDom.documentElement;
+
+ oElm.setAttribute("type", 0);
+ oElm.setAttribute("cLink", cLink);
+ oElm.setAttribute("cVouchType", cVouchType);
+ oElm.setAttribute("cVouchID", cVouchID);
+ oElm.setAttribute("bFirst", bFirst);
+
+ var bo = "UFAPBO.clsCloseBill".GetComObject();
+
+ var m_Login = baseLogin._vbLogin;
+
+ var m_conn = new Connection();
+
+ m_conn.Open(m_Login.UfDbName);
+
+ bo.Init(m_Login, m_conn, null, cSubId);
+
+ var errorMessage = "";
+
+ var signFlag = bo.Sign(oElm.xml, ref errorMessage);
+
+ if (!signFlag)
+ 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 ApNoteSave(BaseLogin baseLogin, Dictionary dictionary, string cSubId, bool isAdd = true, bool bFirst = false)
+ {
+ try
+ {
+ var m_Login = baseLogin._vbLogin;
+
+ var domHead = dictionary.ToDocument2();
+
+
+ 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 = "保存成功" };
+ }
+
+
+
+
+ //var ap= "UFAPBO.clsAccount_AP".GetComObject();
+
+ //var bo = "UFAPBO.clsApNote".GetComObject();
+
+ //var a=ap.Init(m_Login, cSubId);
+ //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 m_conn = new Connection();
+
+ //m_conn.Open(m_Login.UfDbName);
+
+ //var d=bo.Init(m_Login);
+
+ //logInfo.Debug($"bo.Init:{d}");
+
+ //var errorMessage = "";
+
+ //var saveFlag = bo.SaveVouch(domHead, ref errorMessage);
+
+ //logInfo.Debug($"bo.SaveVouch:{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 };
+ }
+ }
+
}
}
diff --git a/UFIDA.U8.Framework.Api.ControlObject/Common/APARHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Common/APARHelper.cs
new file mode 100644
index 0000000..15447d5
--- /dev/null
+++ b/UFIDA.U8.Framework.Api.ControlObject/Common/APARHelper.cs
@@ -0,0 +1,41 @@
+using log4net;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using NoteManageAR;
+
+namespace UFIDA.U8.Framework.Api.ControlObject.Common
+{
+ public class APARHelper
+ {
+ protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
+ private readonly VoucherData _vd;
+ private readonly PropertyInfo[] _props;
+
+ public APARHelper(VoucherDataClass vd)
+ {
+ _vd = vd;
+ var tp = vd.GetType();
+ _props = tp.GetProperties();
+ }
+
+ public void SetValue(Dictionary dictionary)
+ {
+ foreach (var key in dictionary.Keys)
+ {
+ if (key != "body")
+ logInfo.Debug($"正在设置字段:{key}--{dictionary[key]}");
+
+ if (!string.IsNullOrWhiteSpace($"{dictionary[key]}") && _props.Any(a => string.Equals(a.Name, key, StringComparison.OrdinalIgnoreCase)))
+ {
+ var prop = _props.First(a => string.Equals(a.Name, key, StringComparison.OrdinalIgnoreCase));
+
+ prop.SetPropValue(_vd, dictionary[key]);
+ }
+ }
+ }
+ }
+}
diff --git a/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs
index 6d3ab77..a1aa044 100644
--- a/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs
+++ b/UFIDA.U8.Framework.Api.ControlObject/Common/BEHelper.cs
@@ -131,7 +131,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common
}
}
-
+
public void SetPartId()
{
_be.SetPartId(_invCode, new[] { _free1, _free2, _free3, _free4, _free5, _free6, _free7, _free8, _free9, _free10 });
diff --git a/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs b/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs
index 0880192..cf5a9c4 100644
--- a/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs
+++ b/UFIDA.U8.Framework.Api.ControlObject/Common/CommonHelper.cs
@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Reflection;
using GetComObj;
using MSXML2;
+using Newtonsoft.Json.Linq;
+using NoteManageAR;
using UFIDA.U8.Framework.Api.ControlObject.Json;
namespace UFIDA.U8.Framework.Api.ControlObject.Common
@@ -15,32 +17,172 @@ namespace UFIDA.U8.Framework.Api.ControlObject.Common
if (prop.PropertyType == typeof(string))
{
prop.SetValue(obj, value);
+ return;
}
if (prop.PropertyType == typeof(DateTime))
{
prop.SetValue(obj, DateTime.Parse($"{value}"));
+ return;
}
if (prop.PropertyType == typeof(byte))
{
prop.SetValue(obj, byte.Parse($"{value}"));
+ return;
}
if (prop.PropertyType == typeof(int))
{
prop.SetValue(obj, int.Parse($"{value}"));
+ return;
}
if (prop.PropertyType == typeof(long))
{
prop.SetValue(obj, long.Parse($"{value}"));
+ return;
}
if (prop.PropertyType == typeof(decimal))
{
prop.SetValue(obj, decimal.Parse($"{value}"));
+ return;
}
+
+ if (prop.PropertyType == typeof(double))
+ {
+ prop.SetValue(obj, double.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(float))
+ {
+ prop.SetValue(obj, float.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(short))
+ {
+ prop.SetValue(obj, short.Parse($"{value}"));
+ return;
+ }
+ }
+
+ public static void SetPropValue(this PropertyInfo prop, VoucherData obj, object value)
+ {
+ if (prop.PropertyType == typeof(string))
+ {
+ prop.SetValue(obj, value);
+ return;
+ }
+
+ if (prop.PropertyType == typeof(DateTime))
+ {
+ prop.SetValue(obj, DateTime.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(byte))
+ {
+ prop.SetValue(obj, byte.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(int))
+ {
+ prop.SetValue(obj, int.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(long))
+ {
+ prop.SetValue(obj, long.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(decimal))
+ {
+ prop.SetValue(obj, decimal.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(double))
+ {
+ prop.SetValue(obj, double.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(float))
+ {
+ prop.SetValue(obj, float.Parse($"{value}"));
+ return;
+ }
+
+ if (prop.PropertyType == typeof(short))
+ {
+ prop.SetValue(obj, short.Parse($"{value}"));
+ return;
+ }
+
+ //if (prop.PropertyType == typeof(object))
+ //{
+ // switch (prop.Name)
+ // {
+ // case "cDefine1":
+ // obj.set_cDefine1($"{value}");
+ // break;
+ // case "cDefine2":
+ // obj.set_cDefine2($"{value}");
+ // break;
+ // case "cDefine3":
+ // obj.set_cDefine3($"{value}");
+ // break;
+ // case "cDefine4":
+ // obj.set_cDefine4(DateTime.Parse($"{value}"));
+ // break;
+ // case "cDefine5":
+ // obj.set_cDefine5(int.Parse($"{value}"));
+ // break;
+ // case "cDefine6":
+ // obj.set_cDefine6(DateTime.Parse($"{value}"));
+ // break;
+ // case "cDefine7":
+ // obj.set_cDefine7(float.Parse($"{value}"));
+ // break;
+ // case "cDefine8":
+ // obj.set_cDefine8($"{value}");
+ // break;
+ // case "cDefine9":
+ // obj.set_cDefine9($"{value}");
+ // break;
+ // case "cDefine10":
+ // obj.set_cDefine10($"{value}");
+ // break;
+ // case "cDefine11":
+ // obj.set_cDefine11($"{value}");
+ // break;
+ // case "cDefine12":
+ // obj.set_cDefine12($"{value}");
+ // break;
+ // case "cDefine13":
+ // obj.set_cDefine13($"{value}");
+ // break;
+ // case "cDefine14":
+ // obj.set_cDefine14($"{value}");
+ // break;
+ // case "cDefine15":
+ // obj.set_cDefine15(int.Parse($"{value}"));
+ // break;
+ // case "cDefine16":
+ // obj.set_cDefine16(float.Parse($"{value}"));
+ // break;
+ // default:
+ // prop.SetValue(obj, $"{value}");
+ // break;
+
+ // }
+ //}
}
public static IXMLDOMDocument2 ToDocument2(this Dictionary dictionary,IXMLDOMDocument2 domDocument2=null)
diff --git a/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs b/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs
new file mode 100644
index 0000000..0b5b68e
--- /dev/null
+++ b/UFIDA.U8.Framework.Api.ControlObject/ST/USERPCO.cs
@@ -0,0 +1,188 @@
+using log4net;
+using MSXML2;
+using NoteManageAR;
+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.Json;
+using UFIDA.U8.Framework.Api.ControlObject.Models;
+using UFIDA.U8.Framework.Api.ControlObject.U8M;
+using UFSoft.U8.SF.BE;
+
+namespace UFIDA.U8.Framework.Api.ControlObject.ST
+{
+ ///
+ /// 库存管理
+ ///
+ public class USERPCO
+ {
+ protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
+
+
+ public async Task> Insert(BaseLogin baseLogin, Dictionary dictionary,string sVouchType,bool bCheck=true,bool bBeforCheckStock=true,bool bIsRedVouch=false,string sAddedState="", bool bReMote=false)
+ {
+ try
+ {
+ var co = "USERPCO.USERPCO".GetComObject();
+
+ var errorMsg = "";
+
+ if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg))
+ {
+ await Task.Delay(1);
+ throw new Exception(errorMsg);
+ }
+
+ var domHead = dictionary.ToDocument2();
+
+ 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("无法获取表体数据");
+ }
+
+
+ var domBody = dictionarys.ToDocument2();
+ IXMLDOMDocument2 domPosition = new DOMDocument();
+ IXMLDOMDocument2 domMsg = new DOMDocument();
+ errorMsg = "";
+ baseLogin.Connection.BeginTrans();
+ var vouchId = "";
+
+ var res = new BaseResult();
+ try
+ {
+ res.bSuccess = co.Update(sVouchType, domHead, domBody, domPosition, ref errorMsg, baseLogin.Connection, ref vouchId, ref domMsg, bCheck, bBeforCheckStock, bIsRedVouch, sAddedState, bReMote);
+ }
+ catch (Exception ex)
+ {
+ await Task.Delay(1);
+ baseLogin.Connection.RollbackTrans();
+ throw ex;
+ }
+
+ if (!res.bSuccess)
+ {
+ res.message = "新增失败";
+ res.result = errorMsg;
+ }
+ else
+ {
+ res.message = "新增成功";
+ res.result = vouchId;
+ }
+
+ return res;
+
+ //var bodys = dictionary.TryGetValue() dictionary["body"];
+
+
+ }
+ catch (Exception ex)
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message };
+ }
+
+ }
+
+ 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)
+ {
+ try
+ {
+ var co = "USERPCO.VoucherCO".GetComObject();
+
+ var errorMsg = "";
+
+ if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg))
+ {
+ await Task.Delay(1);
+ throw new Exception(errorMsg);
+ }
+
+ IXMLDOMDocument2 domHead = new DOMDocument();
+ IXMLDOMDocument2 domBody = new DOMDocument();
+ IXMLDOMDocument2 domPosition = new DOMDocument();
+ errorMsg = "";
+ if (!co.GetDefaultVoucherDom(sVouchType, sCardNum, ref domHead, ref domBody, ref domPosition, ref errorMsg))
+ {
+ throw new Exception(errorMsg);
+ }
+
+ domHead = dictionary.ToDocument2(domHead);
+
+ var bodys = dictionary["body"] as List> ?? $"{dictionary["body"]}".ToObject>>();
+
+ if (bodys==null || bodys.Count<=0)
+ {
+ await Task.Delay(1);
+ throw new Exception("无法获取表体数据");
+ }
+
+ //if (!(bodys is List> dictionarys) || dictionarys.Count <= 0)
+ //{
+
+ // await Task.Delay(1);
+ // throw new Exception("无法获取表体数据");
+ //}
+
+
+ domBody = bodys.ToDocument2(domBody);
+
+ IXMLDOMDocument2 domMsg = new DOMDocument();
+
+ errorMsg = "";
+ baseLogin.Connection.BeginTrans();
+ var vouchId = "";
+
+ var res = new BaseResult();
+ try
+ {
+ res.bSuccess = co.Update(sVouchType, domHead, domBody, domPosition);
+ }
+ catch (Exception ex)
+ {
+ baseLogin.Connection.RollbackTrans();
+ throw ex;
+ }
+
+ if (!res.bSuccess)
+ {
+ baseLogin.Connection.RollbackTrans();
+ res.message = "新增失败";
+ res.result = errorMsg;
+ }
+ else
+ {
+ baseLogin.Connection.CommitTrans();
+ res.message = "新增成功";
+ res.result = vouchId;
+ }
+
+ return res;
+
+ //var bodys = dictionary.TryGetValue() dictionary["body"];
+
+
+ }
+ catch (Exception ex)
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message };
+ }
+ }
+ }
+}
diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs
index 9dc9ea6..0ef72ec 100644
--- a/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs
+++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/BaseLogin.cs
@@ -10,26 +10,32 @@ using ThreadContext = UFSoft.U8.Framework.ContextSrv.ThreadContext;
using VBLogin = U8Login.clsLogin;
// ReSharper disable IdentifierTypo
// ReSharper disable InconsistentNaming
+// ReSharper disable CommentTypo
+// ReSharper disable FieldCanBeMadeReadOnly.Local
namespace UFIDA.U8.Framework.Api.ControlObject.U8M
{
+
public class BaseLogin
{
- protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
-
- private NetLogin _netLogin { get; set; }
- public VBLogin _vbLogin { get; set; }
+ static ILog logInfo = LogManager.GetLogger("logInfo");
- public ProductContext _productContext { get; set; }
- public Connection Connection { get; set; }
+ public NetLogin _netLogin;
+
+ public VBLogin _vbLogin;
+
+ public ProductContext _productContext;
+
+ public Connection Connection;
///
/// 初始化生产制造上下文
///
/// 登录参数
///
+ ///
///
///
public void Init(LoginParamter paramter,bool bMon=true, int traceTimes=0)
diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/IBaseBF.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/IBaseBF.cs
new file mode 100644
index 0000000..29acd5a
--- /dev/null
+++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/IBaseBF.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.Models;
+
+namespace UFIDA.U8.Framework.Api.ControlObject.U8M
+{
+ public interface IBaseBF
+ {
+ BaseResult Save(string cCardNum, Dictionary input);
+
+ BaseResult Save(string cCardNum, List> inputs);
+ }
+}
diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/MOrder.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/MOrder.cs
index 5a8ede9..7a4e098 100644
--- a/UFIDA.U8.Framework.Api.ControlObject/U8M/MOrder.cs
+++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/MOrder.cs
@@ -16,6 +16,9 @@ using UFSoft.U8.U8M.DOSchema.MO;
namespace UFIDA.U8.Framework.Api.ControlObject.U8M
{
+ ///
+ /// 生产订单
+ ///
public class MOrder
{
protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs
index 27221b4..cda97e0 100644
--- a/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs
+++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/MoRoutingBill.cs
@@ -9,6 +9,7 @@ using System.Reflection;
using UFIDA.U8.Framework.Api.ControlObject.Common;
using UFIDA.U8.Framework.Api.ControlObject.Json;
using UFIDA.U8.Framework.Api.ControlObject.Models;
+using UFSoft.U8.Framework.BizBase;
using UFSoft.U8.Framework.ContextSrv;
using UFSoft.U8.U8M.BFDispatcher;
using UFSoft.U8.U8M.Common;
@@ -22,15 +23,19 @@ using UFSoft.U8.U8M.Exceptions;
namespace UFIDA.U8.Framework.Api.ControlObject.U8M
{
-
- public class MoRoutingBill
+ ///
+ /// 报工单
+ ///
+ public class MoRoutingBill: IBaseBF
{
protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
+ private IContextContainer callar { get; set; }
+
private MoRoutingBillDs GetEmptyDs(string cCardNum)
{
- var ds = SFExecutor.BFMoRoutingBill_LoadData("LoadFirst", 0, "", cCardNum, new DefaultContextContainer());
+ var ds = SFExecutor.BFMoRoutingBill_LoadData("LoadFirst", 0, "", cCardNum, callar);
#region 清除数据集里的数据
@@ -63,7 +68,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M
ds.MoRoutingBill.AddMoRoutingBillRow(head);
- var docNo = U8MCommonExecutor.BFVoucher_GetVoucherID(cCardNum, docNoParam.Paramaters, false, new DefaultContextContainer());
+ var docNo = U8MCommonExecutor.BFVoucher_GetVoucherID(cCardNum, docNoParam.Paramaters, false, callar);
var be = new UFSoft.U8.SF.BE.MoRoutingBill(ds);
@@ -98,14 +103,17 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M
}
+
public BaseResult Save(string cCardNum, Dictionary input)
{
try
{
+ callar = new DefaultContextContainer();
+
var docNoParam = new AutoDocNoGenerateParam(EnumAutoDocNoType.HandAuto, cCardNum)
- {
- IsCurrentDocNoByHand = false
- };
+ {
+ IsCurrentDocNoByHand = false
+ };
var ds = GetVoucherDs(cCardNum, docNoParam, input);
@@ -119,7 +127,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M
logInfo.Debug($"单据编码:{cCardNum},开始保存");
- var id = SFExecutor.BFMoRoutingBill_MoRoutingBillSave(ds, docNoParam, new DefaultContextContainer());
+ var id = SFExecutor.BFMoRoutingBill_MoRoutingBillSave(ds, docNoParam, callar);
logInfo.Debug($"单据编码:{cCardNum},保存完成,id:{id}");
@@ -139,8 +147,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.U8M
{
logInfo.Error(ex.InnerException.Message, ex.InnerException);
- return new BaseResult
- { bSuccess = false, message = "新增失败", result = ex.InnerException.Message };
+ return new BaseResult { bSuccess = false, message = "新增失败", result = ex.InnerException.Message };
}
else
{
diff --git a/UFIDA.U8.Framework.Api.ControlObject/U8M/StandardBom.cs b/UFIDA.U8.Framework.Api.ControlObject/U8M/StandardBom.cs
new file mode 100644
index 0000000..22f4ae4
--- /dev/null
+++ b/UFIDA.U8.Framework.Api.ControlObject/U8M/StandardBom.cs
@@ -0,0 +1,141 @@
+using log4net;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using UFIDA.U8.Framework.Api.ControlObject.Common;
+using UFIDA.U8.Framework.Api.ControlObject.Json;
+using UFIDA.U8.Framework.Api.ControlObject.Models;
+using UFSoft.U8.Framework.BizBase;
+using UFSoft.U8.Framework.ContextSrv;
+using UFSoft.U8.U8M.BFDispatcher;
+using UFSoft.U8.U8M.Common;
+using UFSoft.U8.U8M.DOSchema.BO;
+using UFSoft.U8.U8M.DOSchema.SF;
+using UFSoft.U8.U8M.Exceptions;
+using UFSoft.U8.U8MCommon.GSetup;
+
+namespace UFIDA.U8.Framework.Api.ControlObject.U8M
+{
+ ///
+ /// 标准BOM
+ ///
+ public class StandardBom
+ {
+ protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
+
+ private IContextContainer callar { get; set; }
+
+ public StandardBom()
+ {
+
+ }
+
+ private StandardBomDs GetEmptyDs()
+ {
+ var standardBomDs = new StandardBomDs();
+ var standardBomRow = standardBomDs.StandardBom.NewStandardBomRow();
+ standardBomRow.BomType = 1;
+ standardBomRow.VersionEffDate = MParameters.Instance.DefaultVersionDate;
+ standardBomRow.Status = (byte)MParameters.Instance.Options.BomDefaultStatus;
+ standardBomDs.StandardBom.AddStandardBomRow(standardBomRow);
+ var bomParentRow = standardBomDs.BomParent.NewBomParentRow();
+ bomParentRow.BomId = standardBomRow.BomId;
+ bomParentRow.AutoId = $"{Guid.NewGuid()}";
+ standardBomDs.BomParent.AddBomParentRow(bomParentRow);
+ return standardBomDs;
+ }
+
+ private StandardBomDs GetVoucherDs(Dictionary input)
+ {
+ var ds = GetEmptyDs();
+
+ var be = new UFSoft.U8.BO.BE.BomEntity(ds);
+
+ be.BomType = EnumBOMCatalogType.StandardBom;
+
+ var beHead = new BEHelper(be.Bom);
+
+ beHead.SetValue(input);
+
+ beHead.SetPartId();
+
+ var bodys = input["body"] as List> ?? $"{input["body"]}".ToObject>>();
+
+ for (var i = 0; i < bodys.Count; i++)
+ {
+ var body = bodys[i];
+ var detail = be.Bom.Components[i];
+
+ var beBody = new BEHelper(detail);
+
+ beBody.SetValue(body);
+
+ beBody.SetPartId();
+ }
+
+ return (StandardBomDs)be.InstanceBom.DataObject;
+ }
+
+ public BaseResult Save(Dictionary input)
+ {
+ try
+ {
+ callar = new DefaultContextContainer();
+
+ var ds = GetVoucherDs(input);
+
+ if (ds == null)
+ {
+ throw new Exception("未能构建数据集");
+ }
+
+ //var context = new DefaultContextContainer();
+ //context.context["taskid"] = taskId;
+
+ logInfo.Debug("单据编码:BO11,开始保存");
+
+ var id = BOMExecutor.BFStandardBom_Save(ds, callar);
+
+
+ logInfo.Debug($"单据编码:BO11,保存完成,id:{id}");
+
+ return new BaseResult { bSuccess = true, message = "新增成功", result = $"{id}" };
+
+ }
+ catch (U8MReferenceBENotExistException ex)
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message };
+ }
+ catch (TargetInvocationException ex)
+ {
+ if (ex.InnerException is U8MReferenceBENotExistException)
+ {
+ logInfo.Error(ex.InnerException.Message, ex.InnerException);
+
+ return new BaseResult { bSuccess = false, message = "新增失败", result = ex.InnerException.Message };
+ }
+ else
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message };
+ }
+
+ }
+ catch (Exception ex)
+ {
+
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = "新增失败", result = ex.Message };
+ }
+ }
+
+
+ }
+}
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 accc235..4ddbc71 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
@@ -37,6 +37,14 @@
True
D:\U8SOFT\Interop\ADODB.dll
+
+ D:\U8SOFT\COBat\Interop.ADOX.dll
+ True
+
+
+ D:\U8SOFT\COBat\Interop.DAO.dll
+ True
+
D:\U8SOFT\Interop\Interop.GetComObj.dll
True
@@ -45,11 +53,43 @@
D:\U8SOFT\Interop\Interop.MSXML2.dll
True
+
+ D:\U8SOFT\COBat\Interop.NoteManageAR.dll
+ False
+
+
+ D:\U8SOFT\Interop\Interop.U8ColumnSet.dll
+ True
+
False
True
D:\U8SOFT\Interop\Interop.U8Login.dll
+
+ D:\U8SOFT\Interop\Interop.UFGeneralFilter.dll
+ True
+
+
+ D:\U8SOFT\Interop\Interop.UFGeneralFilterOCX.dll
+ True
+
+
+ D:\U8SOFT\Interop\Interop.UFGeneralFilterPub.dll
+ True
+
+
+ D:\U8SOFT\COBat\Interop.UfHeronReport.dll
+ True
+
+
+ D:\U8SOFT\COBat\Interop.UFRPPub.dll
+ True
+
+
+ D:\U8SOFT\COBat\Interop.USDbKit.dll
+ True
+
..\packages\log4net.2.0.17\lib\net45\log4net.dll
@@ -78,6 +118,9 @@
+
+ D:\U8SOFT\U8M\UFSoft.U8.BO.BE.dll
+
D:\U8SOFT\U8M\UFSoft.U8.Framework.BE.dll
False
@@ -152,9 +195,14 @@
D:\U8SOFT\U8M\UFSoft.U8.U8M.Exceptions.dll
False
+
+ D:\U8SOFT\U8M\UFSoft.U8.U8MCommon.GSetup.dll
+ False
+
+
@@ -163,17 +211,30 @@
+
+
+
-
+
+
+ {00020430-0000-0000-C000-000000000046}
+ 2
+ 0
+ 0
+ primary
+ False
+ True
+
+
\ No newline at end of file
diff --git a/UFIDA.U8.Framework.Api.sln b/UFIDA.U8.Framework.Api.sln
index a93775d..479739c 100644
--- a/UFIDA.U8.Framework.Api.sln
+++ b/UFIDA.U8.Framework.Api.sln
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UFIDA.U8.Framework.Api.Comm
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UFIDA.U8.Framework.Api.ControlObject", "UFIDA.U8.Framework.Api.ControlObject\UFIDA.U8.Framework.Api.ControlObject.csproj", "{22C84BE9-1613-4E32-9E98-237E96FD3540}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VoucherPlugTest", "VoucherPlugTest\VoucherPlugTest.csproj", "{20CD37D3-70D0-410B-8765-02E10766EBB2}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -33,6 +35,10 @@ Global
{22C84BE9-1613-4E32-9E98-237E96FD3540}.Debug|Any CPU.Build.0 = Debug|Any CPU
{22C84BE9-1613-4E32-9E98-237E96FD3540}.Release|Any CPU.ActiveCfg = Release|Any CPU
{22C84BE9-1613-4E32-9E98-237E96FD3540}.Release|Any CPU.Build.0 = Release|Any CPU
+ {20CD37D3-70D0-410B-8765-02E10766EBB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {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
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 68ae251..d5c0e21 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 c187e52..bdca6a5 100644
--- a/UFIDA.U8.Framework.Api/App_Data/U8API.xml
+++ b/UFIDA.U8.Framework.Api/App_Data/U8API.xml
@@ -568,11 +568,25 @@
+
+
+ 应收应付
+
+
日志组件
+
+
+ 应收应付单据保存接口
+
+
+
+
+
+
收付款单保存
@@ -598,6 +612,31 @@
+
+
+ 票据保存
+
+ 系统号
+ 单据类型编码
+ 报文数据
+
+
+
+
+ 票据保存
+
+
+
+
+
+
+
+ 票据保存
+
+
+
+
+
生产订单
@@ -745,6 +784,39 @@
报文数据
+
+
+ 日志组件
+
+
+
+
+ 新增单据
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 更新单据
+
+
+
+
+
+
+
+
+
+
+
缺少程序集全局处理事件
@@ -772,6 +844,11 @@
+
+
+ 卸载应用程序域
+
+
公共帮助类
@@ -820,5 +897,34 @@
+
+
+ 跨域加载
+
+
+
+
+ 构造函数
+
+ 登录参数
+
+
+
+ 保存
+
+ 单据类型编码
+ 数据包
+
+
+
+
+
+ 批量保存
+
+ 单据类型编码
+ 数据包
+
+
+
diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs
index 589ffe5..4fb4d7d 100644
--- a/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs
+++ b/UFIDA.U8.Framework.Api/Controllers/U8/APController.cs
@@ -12,7 +12,9 @@ using UFIDA.U8.Framework.Api.Unit;
namespace UFIDA.U8.Framework.Api.Controllers.U8
{
-
+ ///
+ /// 应收应付
+ ///
public class APController : ApiController
{
///
@@ -22,6 +24,44 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
private static readonly MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(10) });
+ ///
+ /// 应收应付单据保存接口
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("api/U8/AP/{cCardNum}/Save")]
+ [Route("api/U8/AR/{cCardNum}/Save")]
+ public async Task> Save(string cAccId, string cCardNum, [FromBody] Dictionary input)
+ {
+ try
+ {
+ switch (cCardNum)
+ {
+ case "AP03":
+ case "AR03":
+ return await ApNoteSave(cAccId, cCardNum, input);
+ case "AP48":
+ case "AP49":
+ case "AR48":
+ case "AR49":
+ return await CloseBillSave(cAccId, cCardNum, input);
+ default:
+ throw new Exception("单据标识不正确");
+
+ }
+ }
+ catch (Exception ex)
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace };
+ }
+
+ }
+
///
/// 收付款单保存
///
@@ -36,7 +76,19 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
{
try
{
- if (!_cache.TryGetValue($"U8AP_{cAccId}", out BaseLogin baseLogin))
+ var subId = "";
+
+ if (cCardNum == "AR48" || cCardNum == "AR49")
+ {
+ subId = "AR";
+ }
+
+ if (cCardNum == "AP48" || cCardNum == "AP49")
+ {
+ subId = "AP";
+ }
+
+ if (!_cache.TryGetValue($"U8AP_{cAccId}_{subId}", out BaseLogin baseLogin))
{
baseLogin = new BaseLogin();
@@ -49,19 +101,9 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
baseLogin.Init(param, false);
- _cache.Set($"U8AP_{cAccId}", baseLogin);
- }
+ _cache.Clear();
- var subId = "";
-
- if (cCardNum == "AP48")
- {
- subId = "AR";
- }
-
- if (cCardNum == "AP49")
- {
- subId = "AP";
+ _cache.Set($"U8AP_{cAccId}_{subId}", baseLogin);
}
@@ -91,7 +133,8 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
///
///
[HttpPost]
- [Route("api/U8/AR/AP48/CloseBillSave")]
+ [Route("api/U8/AR/AP48/Save")]
+ [Route("api/U8/AR/AP49/Save")]
public async Task> AP48Save(string cAccId, [FromBody] Dictionary input)
{
return await CloseBillSave(cAccId, "AP48", input);
@@ -104,11 +147,105 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
///
///
[HttpPost]
- [Route("api/U8/AP/AP49/CloseBillSave")]
+ [Route("api/U8/AP/AP49/Save")]
+ [Route("api/U8/AP/AP49/Save")]
public async Task> AP49Save(string cAccId, [FromBody] Dictionary input)
{
return await CloseBillSave(cAccId, "AP49", input);
}
+ ///
+ /// 票据保存
+ ///
+ /// 系统号
+ /// 单据类型编码
+ /// 报文数据
+ ///
+ [HttpPost]
+ [Route("api/U8/AP/{cCardNum}/ApNoteSave")]
+ [Route("api/U8/AR/{cCardNum}/ApNoteSave")]
+ public async Task> ApNoteSave(string cAccId, string cCardNum, [FromBody] Dictionary input)
+ {
+ try
+ {
+ var subId = "";
+
+ if (cCardNum == "AR03")
+ {
+ subId = "AR";
+ }
+
+ if (cCardNum == "AP03")
+ {
+ subId = "AP";
+ }
+
+
+ if (!_cache.TryGetValue($"U8AP_{cAccId}_{subId}", out BaseLogin baseLogin))
+ {
+ baseLogin = new BaseLogin();
+
+ var param = await CommUnit.GetLoginParamter(cAccId);
+
+ if (param == null)
+ {
+ throw new Exception("未能加载指定系统号的登录信息");
+ }
+
+ param.pSubId = subId;
+
+ baseLogin.Init(param, false);
+
+ _cache.Set($"U8AP_{cAccId}_{subId}", baseLogin);
+ }
+
+
+ if (string.IsNullOrWhiteSpace(subId))
+ throw new Exception("单据标识不正确");
+
+ var bo = new UFAPBO();
+
+ var res = bo.ApNoteSave(baseLogin, input, subId);
+
+ return res;
+
+ }
+ catch (Exception ex)
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace };
+ }
+
+ }
+
+ ///
+ /// 票据保存
+ ///
+ ///
+ ///
+ ///
+ [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/SFCController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/SFCController.cs
index cf7f760..8aed017 100644
--- a/UFIDA.U8.Framework.Api/Controllers/U8/SFCController.cs
+++ b/UFIDA.U8.Framework.Api/Controllers/U8/SFCController.cs
@@ -45,7 +45,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
[Route("api/U8/SFC/MoRoutingBillSave")]
public async Task> MoRoutingBillSave(string cAccId,string cCardNum, [FromBody] Dictionary input)
{
- var taskId = 0L;
+ //var taskId = 0L;
var db = CommUnit.GetDbClient();
@@ -58,48 +58,50 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
if (cCardNum != "FC90" && cCardNum != "FC91" && cCardNum != "FC92")
throw new Exception("当前接口不支持此类型的单据");
- var runtimes = 0;
+ //var runtimes = 0;
- var u8mTask = new SysU8MTask()
- {
- U8MPool = $"U8M_{cAccId}"
- };
+ //var u8mTask = new SysU8MTask()
+ //{
+ // U8MPool = $"U8M_{cAccId}"
+ //};
-#if !DEBUG
- while (await db.Queryable().AnyAsync())
- {
- if (runtimes > 20)
- {
- throw new Exception("当前任务队列过长");
- }
+//#if !DEBUG
+// while (await db.Queryable().AnyAsync())
+// {
+// if (runtimes > 20)
+// {
+// throw new Exception("当前任务队列过长");
+// }
- runtimes++;
+// runtimes++;
- await Task.Delay(100 * runtimes);
+// await Task.Delay(100 * runtimes);
- //u8mTask.Id = DateTime.Now.Ticks;
+// //u8mTask.Id = DateTime.Now.Ticks;
- if (await db.Queryable()
- .AnyAsync(a => SqlFunc.DateDiff(DateType.Minute, a.dDate, DateTime.Now) > 1))
- {
- await db.Deleteable()
- .Where(a => SqlFunc.DateDiff(DateType.Minute, a.dDate, DateTime.Now) > 1)
- .ExecuteCommandAsync();
- }
+// if (await db.Queryable()
+// .AnyAsync(a => SqlFunc.DateDiff(DateType.Minute, a.dDate, DateTime.Now) > 1))
+// {
+// await db.Deleteable()
+// .Where(a => SqlFunc.DateDiff(DateType.Minute, a.dDate, DateTime.Now) > 1)
+// .ExecuteCommandAsync();
+// }
- }
-#endif
+// }
+//#endif
- u8mTask.dDate = DateTime.Now;
+ //u8mTask.dDate = DateTime.Now;
//if (u8mTask.Id == null)
//{
// u8mTask.Id = DateTime.Now.Ticks;
//}
- taskId = await db.Insertable(u8mTask).ExecuteReturnSnowflakeIdAsync();
+ //taskId = await db.Insertable(u8mTask).ExecuteReturnSnowflakeIdAsync();
- logInfo.Debug($"开始操作,当前任务ID:{taskId}");
+ //var taskid = SnowFlakeSingle.Instance.NextId();
+
+ //logInfo.Debug($"开始操作,当前任务ID:{taskId}");
//if (!_cache.TryGetValue($"U8M_{cAccId}", out BaseLogin baseLogin))
//{
// _cache.Clear();
@@ -113,37 +115,57 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
throw new Exception("未能加载指定系统号的登录信息");
}
- logInfo.Debug($"开始登录,当前任务ID:{taskId}");
+ logInfo.Debug("开始登录");
baseLogin.Init(param,true);
- //_cache.Set($"U8M_{cAccId}", baseLogin);
- //}
-
-
- var bf = new MoRoutingBill();
-
- logInfo.Debug($"开始保存,当前任务ID:{taskId}");
-
+ var bo = new MoRoutingBill();
BaseResult res;
if (input.ContainsKey("bBatch") && Convert.ToBoolean(input["bBatch"]))
{
var inputs = input["inputs"] as List> ?? $"{input["inputs"]}".ToObject>>();
- res = bf.Save(cCardNum, inputs);
+ res = bo.Save(cCardNum, inputs);
}
else
{
- res = bf.Save(cCardNum, input);
+ res = bo.Save(cCardNum, input);
}
- logInfo.Debug($"退出登录,当前任务ID:{taskId}");
- baseLogin.ShutDown();
+ //loader.Unload();
- if (taskId != 0)
- {
- await db.Deleteable(taskId).ExecuteCommandAsync();
- }
+ //var res= loader.Save(param, cCardNum, input);
+
+
+
+
+ //_cache.Set($"U8M_{cAccId}", baseLogin);
+ //}
+
+
+ //var bf = new MoRoutingBill();
+
+ logInfo.Debug($"开始保存");
+
+ //BaseResult res;
+ //if (input.ContainsKey("bBatch") && Convert.ToBoolean(input["bBatch"]))
+ //{
+ // var inputs = input["inputs"] as List> ?? $"{input["inputs"]}".ToObject>>();
+
+ // res = bf.Save(cCardNum, inputs);
+ //}
+ //else
+ //{
+ // res = bf.Save(cCardNum, input);
+ //}
+
+ logInfo.Debug($"退出登录");
+ //baseLogin.ShutDown();
+
+ //if (taskId != 0)
+ //{
+ // await db.Deleteable(taskId).ExecuteCommandAsync();
+ //}
return res;
@@ -152,21 +174,21 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
{
logInfo.Error(ex.Message, ex);
- if (taskId != 0)
- {
- await db.Deleteable(taskId).ExecuteCommandAsync();
- }
+ //if (taskId != 0)
+ //{
+ // await db.Deleteable(taskId).ExecuteCommandAsync();
+ //}
return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace };
}
finally
{
- if (taskId != 0)
- {
- await db.Deleteable(taskId).ExecuteCommandAsync();
- }
+ //if (taskId != 0)
+ //{
+ // await db.Deleteable(taskId).ExecuteCommandAsync();
+ //}
- baseLogin?.ShutDown();
+ //baseLogin?.ShutDown();
}
diff --git a/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs b/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs
new file mode 100644
index 0000000..cb17adc
--- /dev/null
+++ b/UFIDA.U8.Framework.Api/Controllers/U8/STController.cs
@@ -0,0 +1,129 @@
+using log4net;
+using Microsoft.Extensions.Caching.Memory;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Web;
+using System.Web.Http;
+using UFIDA.U8.Framework.Api.ControlObject.AP;
+using UFIDA.U8.Framework.Api.ControlObject.Models;
+using UFIDA.U8.Framework.Api.ControlObject.ST;
+using UFIDA.U8.Framework.Api.ControlObject.U8M;
+using UFIDA.U8.Framework.Api.Unit;
+
+namespace UFIDA.U8.Framework.Api.Controllers.U8
+{
+ public class STController : ApiController
+ {
+ ///
+ /// 日志组件
+ ///
+ protected readonly ILog logInfo = LogManager.GetLogger("logInfo");
+
+ private static readonly MemoryCache _cache = new MemoryCache(new MemoryCacheOptions { ExpirationScanFrequency = TimeSpan.FromMinutes(10) });
+
+ ///
+ /// 新增单据
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("api/U8/ST/0411/Insert")]
+ public async Task> Insert(string cAccId, string cCardNum,[FromBody] Dictionary input, bool bCheck = true,bool bBeforCheckStock=true,bool bIsRedVouch=false,string sAddedState="",bool bReMote=false)
+ {
+ try
+ {
+ if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin))
+ {
+ baseLogin = new BaseLogin();
+
+ var param = await CommUnit.GetLoginParamter(cAccId);
+
+ if (param == null)
+ {
+ throw new Exception("未能加载指定系统号的登录信息");
+ }
+
+ baseLogin.Init(param, false);
+
+ _cache.Clear();
+
+ _cache.Set($"U8_{cAccId}", baseLogin);
+ }
+
+ var bo = new USERPCO();
+
+ var res =await bo.Insert(baseLogin, input, "11", bCheck, bBeforCheckStock, bIsRedVouch, sAddedState,
+ bReMote);
+
+ return res;
+ }
+ catch (Exception ex)
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace };
+ }
+ }
+
+ ///
+ /// 更新单据
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("api/U8/ST/0411/Update")]
+ public async Task> Update(string cAccId, string cCardNum, [FromBody] Dictionary input, bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bUpdateNeedEas = true)
+ {
+ try
+ {
+ if (!_cache.TryGetValue($"U8_{cAccId}", out BaseLogin baseLogin))
+ {
+ baseLogin = new BaseLogin();
+
+ var param = await CommUnit.GetLoginParamter(cAccId);
+
+ if (param == null)
+ {
+ throw new Exception("未能加载指定系统号的登录信息");
+ }
+
+
+ baseLogin.Init(param, false);
+
+ _cache.Clear();
+
+ _cache.Set($"U8_{cAccId}", baseLogin);
+ }
+
+ var bo = new USERPCO();
+
+ var res = await bo.Update(baseLogin, input, "0412", "11", bCheck, bBeforCheckStock, bIsRedVouch, sAddedState,
+ bUpdateNeedEas);
+
+ return res;
+ }
+ catch (Exception ex)
+ {
+ logInfo.Error(ex.Message, ex);
+
+ return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace };
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj
index 57f0d34..f00c923 100644
--- a/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj
+++ b/UFIDA.U8.Framework.Api/UFIDA.U8.Framework.Api.csproj
@@ -62,8 +62,8 @@
..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll
-
- ..\packages\log4net.2.0.17\lib\net45\log4net.dll
+
+ ..\packages\log4net.3.0.2\lib\net462\log4net.dll
..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll
@@ -78,8 +78,8 @@
..\packages\Microsoft.Extensions.Caching.Abstractions.8.0.0\lib\net462\Microsoft.Extensions.Caching.Abstractions.dll
-
- ..\packages\Microsoft.Extensions.Caching.Memory.8.0.0\lib\net462\Microsoft.Extensions.Caching.Memory.dll
+
+ ..\packages\Microsoft.Extensions.Caching.Memory.8.0.1\lib\net462\Microsoft.Extensions.Caching.Memory.dll
..\packages\Microsoft.Extensions.Configuration.8.0.0\lib\net462\Microsoft.Extensions.Configuration.dll
@@ -105,11 +105,11 @@
..\packages\Microsoft.Extensions.Configuration.UserSecrets.8.0.0\lib\net462\Microsoft.Extensions.Configuration.UserSecrets.dll
-
- ..\packages\Microsoft.Extensions.DependencyInjection.8.0.0\lib\net462\Microsoft.Extensions.DependencyInjection.dll
+
+ ..\packages\Microsoft.Extensions.DependencyInjection.8.0.1\lib\net462\Microsoft.Extensions.DependencyInjection.dll
-
- ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.1\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll
+
+ ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll
..\packages\Microsoft.Extensions.Diagnostics.8.0.0\lib\net462\Microsoft.Extensions.Diagnostics.dll
@@ -132,11 +132,11 @@
..\packages\Microsoft.Extensions.Hosting.Abstractions.8.0.0\lib\net462\Microsoft.Extensions.Hosting.Abstractions.dll
-
- ..\packages\Microsoft.Extensions.Logging.8.0.0\lib\net462\Microsoft.Extensions.Logging.dll
+
+ ..\packages\Microsoft.Extensions.Logging.8.0.1\lib\net462\Microsoft.Extensions.Logging.dll
-
- ..\packages\Microsoft.Extensions.Logging.Abstractions.8.0.1\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll
+
+ ..\packages\Microsoft.Extensions.Logging.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll
..\packages\Microsoft.Extensions.Logging.Configuration.8.0.0\lib\net462\Microsoft.Extensions.Logging.Configuration.dll
@@ -286,8 +286,8 @@
..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll
-
- ..\packages\System.Text.Json.8.0.4\lib\net462\System.Text.Json.dll
+
+ ..\packages\System.Text.Json.8.0.5\lib\net462\System.Text.Json.dll
..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll
@@ -401,13 +401,16 @@
+
Global.asax
+
+
@@ -507,7 +510,9 @@
-
+
+
+
diff --git a/UFIDA.U8.Framework.Api/Unit/AssemblyDynamicLoader.cs b/UFIDA.U8.Framework.Api/Unit/AssemblyDynamicLoader.cs
new file mode 100644
index 0000000..d5127f8
--- /dev/null
+++ b/UFIDA.U8.Framework.Api/Unit/AssemblyDynamicLoader.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Web;
+using System.Web.UI.WebControls;
+using UFIDA.U8.Framework.Api.ControlObject.Models;
+
+namespace UFIDA.U8.Framework.Api.Unit
+{
+ internal class AssemblyDynamicLoader
+ {
+ private long taskId;
+ private AppDomain appDomain;
+ private RemoteLoader remoteLoader;
+
+ internal AssemblyDynamicLoader(long taskId)
+ {
+ var basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Bin");
+ var binPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"U8M{taskId}");
+
+ Directory.CreateDirectory(binPath);
+
+ var setup = new AppDomainSetup
+ {
+ ApplicationName = $"U8M_{taskId}",
+ ApplicationBase = basePath,
+ PrivateBinPath = binPath,
+ ShadowCopyFiles = "true"
+ };
+ setup.CachePath = setup.ApplicationBase;
+ setup.ShadowCopyDirectories = setup.ApplicationBase;
+
+ appDomain = AppDomain.CreateDomain($"U8M_{taskId}", null, setup);
+
+ var name = Assembly.GetExecutingAssembly().GetName().FullName;
+ remoteLoader = (RemoteLoader)appDomain.CreateInstanceAndUnwrap(name, typeof(RemoteLoader).FullName ?? throw new InvalidOperationException());
+ }
+
+ internal BaseResult Save(LoginParamter paramter, string cCardNum, Dictionary input)
+ {
+ remoteLoader._paramter = paramter;
+
+ return remoteLoader.Save(cCardNum, input);
+ }
+
+ internal BaseResult Save(LoginParamter paramter, string cCardNum, List> inputs)
+ {
+ remoteLoader._paramter = paramter;
+
+ return remoteLoader.Save(cCardNum, inputs);
+ }
+
+ ///
+ /// 卸载应用程序域
+ ///
+ internal void Unload()
+ {
+ try
+ {
+ if (appDomain == null) return;
+ AppDomain.Unload(appDomain);
+ appDomain = null;
+ remoteLoader = null;
+ }
+ catch (CannotUnloadAppDomainException ex)
+ {
+ throw ex;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/UFIDA.U8.Framework.Api/Unit/RemoteLoader.cs b/UFIDA.U8.Framework.Api/Unit/RemoteLoader.cs
new file mode 100644
index 0000000..8ce4fb7
--- /dev/null
+++ b/UFIDA.U8.Framework.Api/Unit/RemoteLoader.cs
@@ -0,0 +1,116 @@
+using log4net;
+using System;
+using System.Collections.Generic;
+using UFIDA.U8.Framework.Api.ControlObject.Models;
+using UFIDA.U8.Framework.Api.ControlObject.U8M;
+
+namespace UFIDA.U8.Framework.Api.Unit
+{
+ ///
+ /// 跨域加载
+ ///
+ internal class RemoteLoader : MarshalByRefObject
+ {
+ public LoginParamter _paramter;
+ private readonly ILog _logInfo = LogManager.GetLogger("logInfo");
+
+ ///
+ /// 构造函数
+ ///
+ /// 登录参数
+ internal RemoteLoader(LoginParamter paramter)
+ {
+ _paramter = paramter;
+ }
+
+ ///
+ /// 保存
+ ///
+ /// 单据类型编码
+ /// 数据包
+ ///
+ ///
+ internal BaseResult Save(string cCardNum, Dictionary input)
+ {
+ try
+ {
+ IBaseBF bf;
+
+ switch (cCardNum)
+ {
+ case "FC90":
+ case "FC91":
+ case "FC92":
+ bf = new MoRoutingBill();
+ break;
+ default:
+ bf = null;
+ break;
+ }
+
+ if (bf == null)
+ {
+ throw new Exception("不支持的单据");
+ }
+
+ var baseLogin = new BaseLogin();
+
+ baseLogin.Init(_paramter);
+
+ return bf.Save(cCardNum, input);
+
+ }
+ catch (Exception ex)
+ {
+ _logInfo.Error(ex.Message, ex);
+ return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace };
+ }
+
+ }
+
+ ///
+ /// 批量保存
+ ///
+ /// 单据类型编码
+ /// 数据包
+ ///
+ ///
+ internal BaseResult Save(string cCardNum, List> inputs)
+ {
+ try
+ {
+ IBaseBF bf;
+
+ switch (cCardNum)
+ {
+ case "FC90":
+ case "FC91":
+ case "FC92":
+ bf = new MoRoutingBill();
+ break;
+ default:
+ bf = null;
+ break;
+ }
+
+ if (bf == null)
+ {
+ throw new Exception("不支持的单据");
+ }
+
+ var baseLogin = new BaseLogin();
+
+ baseLogin.Init(_paramter);
+
+ return bf.Save(cCardNum, inputs);
+
+ }
+ catch (Exception ex)
+ {
+ _logInfo.Error(ex.Message, ex);
+ return new BaseResult { bSuccess = false, message = ex.Message, result = ex.StackTrace };
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/UFIDA.U8.Framework.Api/Web.config b/UFIDA.U8.Framework.Api/Web.config
index f8270ad..48439d5 100644
--- a/UFIDA.U8.Framework.Api/Web.config
+++ b/UFIDA.U8.Framework.Api/Web.config
@@ -93,7 +93,7 @@
-
+
@@ -105,7 +105,7 @@
-
+
@@ -113,7 +113,7 @@
-
+
@@ -151,6 +151,14 @@
+
+
+
+
+
+
+
+
diff --git a/UFIDA.U8.Framework.Api/packages.config b/UFIDA.U8.Framework.Api/packages.config
index 160c3e1..d527408 100644
--- a/UFIDA.U8.Framework.Api/packages.config
+++ b/UFIDA.U8.Framework.Api/packages.config
@@ -9,7 +9,7 @@
-
+
@@ -32,7 +32,7 @@
-
+
@@ -41,8 +41,8 @@
-
-
+
+
@@ -50,8 +50,8 @@
-
-
+
+
@@ -99,7 +99,7 @@
-
+
diff --git a/VoucherPlugTest/Properties/AssemblyInfo.cs b/VoucherPlugTest/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..5b8552f
--- /dev/null
+++ b/VoucherPlugTest/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("VoucherPlugTest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("VoucherPlugTest")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(true)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("20cd37d3-70d0-410b-8765-02e10766ebb2")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/VoucherPlugTest/TestClass.cs b/VoucherPlugTest/TestClass.cs
new file mode 100644
index 0000000..9d5f003
--- /dev/null
+++ b/VoucherPlugTest/TestClass.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using Interop.UAPvouchercontrol130;
+using Microsoft.VisualBasic;
+
+namespace VoucherPlugTest
+{
+ [Guid("D6C73518-AA4C-49B8-8568-31ACBCD62732")]
+ [ClassInterface(ClassInterfaceType.None)]
+ public class TestClass
+ {
+ [DispId(5)]
+ public void AfterRunSysCommand(object objLogin, object objForm, object objVoucher, string sKey, object VarentValue, ref bool Cancel, string other)
+ {
+ var oVoucher = objVoucher as ctlVoucher;
+
+ var dom = oVoucher?.GetHeadDom();
+
+ var aa = Information.TypeName(objForm);
+
+
+ dom?.save(@"D:\AP_Note.xml");
+ }
+ }
+}
diff --git a/VoucherPlugTest/VoucherPlugTest.csproj b/VoucherPlugTest/VoucherPlugTest.csproj
new file mode 100644
index 0000000..de7c2eb
--- /dev/null
+++ b/VoucherPlugTest/VoucherPlugTest.csproj
@@ -0,0 +1,57 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {20CD37D3-70D0-410B-8765-02E10766EBB2}
+ Library
+ Properties
+ VoucherPlugTest
+ VoucherPlugTest
+ v3.5
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ x86
+ true
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ D:\U8SOFT\Interop\Interop.MSXML2.dll
+ True
+
+
+ D:\U8SOFT\Interop\Interop.UAPvouchercontrol130.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file