修复销售订单查询报错的问题

This commit is contained in:
qmj
2025-10-09 02:08:11 +08:00
parent 5def74f70a
commit 4d48bbf980
7 changed files with 848 additions and 19 deletions
Binary file not shown.
+80 -1
View File
@@ -991,6 +991,48 @@
<param name="sOverDetailsXml">为空</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.PUController.SubmintWf(System.String,System.String,System.String,System.Boolean,System.String,System.String,UFIDA.U8.Framework.Api.ControlObject.PU.UseMode,System.String)">
<summary>
提交工作流(单号)
</summary>
<param name="cAccId">系统号</param>
<param name="cCardNum">单据类型编码</param>
<param name="cCode">单号</param>
<param name="bPositive">红蓝标识:True,蓝字</param>
<param name="sBillType">发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2)</param>
<param name="sBusType">业务类型:普通采购,直运采购,受托代销</param>
<param name="UserMode">CS 0,BS 1;一般CS</param>
<param name="sOverDetailsXml">为空</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.PUController.SubmintWf(System.String,System.String,System.Int64,System.Boolean,System.String,System.String,UFIDA.U8.Framework.Api.ControlObject.PU.UseMode,System.String)">
<summary>
提交工作流(ID)
</summary>
<param name="cAccId">系统号</param>
<param name="cCardNum">单据类型编码</param>
<param name="voucherId">单据ID</param>
<param name="bPositive">红蓝标识:True,蓝字</param>
<param name="sBillType">发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2)</param>
<param name="sBusType">业务类型:普通采购,直运采购,受托代销</param>
<param name="UserMode">CS 0,BS 1;一般CS</param>
<param name="sOverDetailsXml">为空</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.PUController.SubmintWf(System.String,System.String,UFIDA.U8.Framework.Api.Models.STInput,System.Boolean,System.String,System.String,UFIDA.U8.Framework.Api.ControlObject.PU.UseMode,System.String)">
<summary>
提交工作流(批量)
</summary>
<param name="cAccId">系统号</param>
<param name="cCardNum">单据类型编码</param>
<param name="input">报文</param>
<param name="bPositive">红蓝标识:True,蓝字</param>
<param name="sBillType">发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2)</param>
<param name="sBusType">业务类型:普通采购,直运采购,受托代销</param>
<param name="UserMode">CS 0,BS 1;一般CS</param>
<param name="sOverDetailsXml">为空</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.PUController.Load(System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.Object},System.String)">
<summary>
查询特定单据部分
@@ -1487,7 +1529,6 @@
<summary>
提交审批流(单号)
</summary>
<param name="cAccId">系统注册号</param>
<param name="cCardNum">单据类型编码</param>
<param name="cCode">单据编号</param>
<param name="eventId">审批事件</param>
@@ -1516,6 +1557,44 @@
<param name="bUap">是否UAP单据</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.WorkflowController.SubmitResubmitMessage(System.String,System.String,System.String,System.Boolean)">
<summary>
退回提交人后重新提交(单号)
</summary>
<param name="cCardNum">单据类型编码</param>
<param name="cCode">单据ID</param>
<param name="cAccId">系统注册号</param>
<param name="bUap">是否UAP单据</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.WorkflowController.SubmitResubmitMessageToken(System.String,System.String,System.Boolean)">
<summary>
退回提交人后重新提交(单号)
</summary>
<param name="cCardNum">单据类型编码</param>
<param name="cCode">单据编号</param>
<param name="bUap">是否UAP单据</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.WorkflowController.SubmitResubmitMessage(System.String,System.String,System.Int64,System.Boolean)">
<summary>
提交审批流(ID)
</summary>
<param name="cCardNum">单据类型编码</param>
<param name="voucherId">单据ID</param>
<param name="cAccId">系统注册号</param>
<param name="bUap">是否UAP单据</param>
<returns></returns>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.WorkflowController.SubmitResubmitMessageToken(System.String,System.Int64,System.Boolean)">
<summary>
提交审批流(ID)
</summary>
<param name="cCardNum">单据类型编码</param>
<param name="voucherId">单据ID</param>
<param name="bUap">是否UAP单据</param>
<returns></returns>
</member>
<member name="T:UFIDA.U8.Framework.Api.Entity.LoginInput">
<summary>
登录参数
@@ -772,7 +772,7 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
if ((cCodes == null || cCodes.Count <= 0) && (voucherIds == null || voucherIds.Count <= 0))
{
throw new Exception("没有数据需要弃审");
throw new Exception("没有数据需要删除");
}
var strCode = "";
@@ -839,6 +839,226 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
}
}
/// <summary>
/// 提交工作流(单号)
/// </summary>
/// <param name="cAccId">系统号</param>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="cCode">单号</param>
/// <param name="bPositive">红蓝标识:True,蓝字</param>
/// <param name="sBillType">发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2)</param>
/// <param name="sBusType">业务类型:普通采购,直运采购,受托代销</param>
/// <param name="UserMode">CS 0,BS 1;一般CS</param>
/// <param name="sOverDetailsXml">为空</param>
/// <returns></returns>
[HttpGet]
[Route("api/U8/PU/{cCardNum}/SubmintWf/Code")]
public async Task<BaseResult<string>> SubmintWf(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<SysU8VoucherDefine>().FirstAsync(s => s.CardNumber == cCardNum);
var co = new clsVoucherCO_PU();
return await co.SubmintWf(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), cCode, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml);
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
return new BaseResult<string> { bSuccess = false, message = "提交工作流失败", result = ex.Message };
}
}
/// <summary>
/// 提交工作流(ID)
/// </summary>
/// <param name="cAccId">系统号</param>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="voucherId">单据ID</param>
/// <param name="bPositive">红蓝标识:True,蓝字</param>
/// <param name="sBillType">发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2)</param>
/// <param name="sBusType">业务类型:普通采购,直运采购,受托代销</param>
/// <param name="UserMode">CS 0,BS 1;一般CS</param>
/// <param name="sOverDetailsXml">为空</param>
/// <returns></returns>
[HttpGet]
[Route("api/U8/PU/{cCardNum}/SubmintWf/ID")]
public async Task<BaseResult<string>> SubmintWf(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<SysU8VoucherDefine>().FirstAsync(s => s.CardNumber == cCardNum);
var co = new clsVoucherCO_PU();
return await co.SubmintWf(baseLogin, cCardNum, (vouchertype)Convert.ToInt32(voucherInfo.VoucherType), voucherId, bPositive, sBillType, sBusType, UserMode, sOverDetailsXml);
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
return new BaseResult<string> { bSuccess = false, message = "提交工作流失败", result = ex.Message };
}
}
/// <summary>
/// 提交工作流(批量)
/// </summary>
/// <param name="cAccId">系统号</param>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="input">报文</param>
/// <param name="bPositive">红蓝标识:True,蓝字</param>
/// <param name="sBillType">发票类型(普通发票 ppurbill,专用发票 purbill,运费发票 ypurbill);到货单类型(到货单 0,退货单 1,拒收单 2)</param>
/// <param name="sBusType">业务类型:普通采购,直运采购,受托代销</param>
/// <param name="UserMode">CS 0,BS 1;一般CS</param>
/// <param name="sOverDetailsXml">为空</param>
/// <returns></returns>
[HttpPost]
[Route("api/U8/PU/{cCardNum}/SubmintWf")]
public async Task<BaseResult<List<BaseResult<string>>>> SubmintWf(string cAccId, string cCardNum, [FromBody] STInput input, bool bPositive = true, string sBillType = null, string sBusType = null, UseMode UserMode = UseMode.CS, string sOverDetailsXml = null)
{
var workId = SnowFlakeSingle.Instance.NextId();
try
{
var db = CommUnit.GetDbClient();
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<SysU8VoucherDefine>().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<List<BaseResult<string>>>()
{
bSuccess = true,
message = "提交工作流完成",
result = result
};
return res;
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
return new BaseResult<List<BaseResult<string>>> { bSuccess = false, message = ex.Message, result = null };
}
}
/// <summary>
/// 查询特定单据部分
/// </summary>
@@ -53,8 +53,6 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
_logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/Code,对接账套:{cAccId},单据:{cCardNum},事件:{eventId},单据编号:{cCode}");
var db = CommUnit.GetDbClient();
var workId = SnowFlakeSingle.Instance.NextId();
_logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:提交审批流,对接账套:{cAccId},单据编号:{cCode}");
@@ -95,7 +93,6 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
/// <summary>
/// 提交审批流(单号)
/// </summary>
/// <param name="cAccId">系统注册号</param>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="cCode">单据编号</param>
/// <param name="eventId">审批事件</param>
@@ -177,8 +174,6 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
return await SubmitApplicationMessageToken(cCardNum, voucherId, eventId, bUap);
}
var db = CommUnit.GetDbClient();
var workId = SnowFlakeSingle.Instance.NextId();
_logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/Code,作业Id:{workId},对接账套:{cAccId},单据:{cCardNum},事件:{eventId},单据ID:{voucherId}");
@@ -281,5 +276,246 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
}
}
/// <summary>
/// 退回提交人后重新提交(单号)
/// </summary>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="cCode">单据ID</param>
/// <param name="cAccId">系统注册号</param>
/// <param name="bUap">是否UAP单据</param>
/// <returns></returns>
[HttpGet]
[Route("api/U8/Workflow/SubmitResubmitMessage/Code")]
public async Task<BaseResult<string>> SubmitResubmitMessage(string cAccId, string cCardNum, string cCode, bool bUap = false)
{
try
{
if (Request.Headers.TryGetValues("userToken", out var userToken))
{
return await SubmitResubmitMessageToken(cCardNum, cCode, bUap);
}
_logInfo.Debug($"当前接口:api/U8/Workflow/SubmitResubmitMessage/Code,对接账套:{cAccId},单据:{cCardNum},单据编号:{cCode}");
var workId = SnowFlakeSingle.Instance.NextId();
_logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:提交审批流,对接账套:{cAccId},单据编号:{cCode}");
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, true);
_cache.Clear();
_cache.Set($"U8_{cAccId}", baseLogin);
}
var services = new ServiceProxy();
return await services.SubmitResubmitMessage(baseLogin, cCardNum, cCode, bUap);
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
return new BaseResult<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
}
}
/// <summary>
/// 退回提交人后重新提交(单号)
/// </summary>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="cCode">单据编号</param>
/// <param name="bUap">是否UAP单据</param>
/// <returns></returns>
[HttpGet]
[Route("api/U8/Workflow/SubmitResubmitMessage/Code/Token")]
public async Task<BaseResult<string>> SubmitResubmitMessageToken(string cCardNum, string cCode, bool bUap = false)
{
try
{
var userToken = Request.Headers.GetValues("userToken").First();
if (string.IsNullOrWhiteSpace(userToken))
{
throw new Exception("校验userToken失败");
}
_logInfo.Debug($"当前接口:api/U8/Workflow/SubmitResubmitMessage/Code/{userToken},单据:{cCardNum},单据编号:{cCode}");
var output = CommUnit.GetDecrypt(userToken).ToObject<LoginOutput>();
var token = CommUnit.GetDecrypt(output.userToken);
var workId = SnowFlakeSingle.Instance.NextId();
_logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据编号:{cCode}");
if (!_cache.TryGetValue($"U8_{userToken}_{output.cAccId}", out BaseLogin baseLogin))
{
_logInfo.Debug($"作业Id:{workId}-----未获取到缓存的登录信息,正在重新构建");
baseLogin = new BaseLogin();
baseLogin.Init(token, true, 5);
try
{
_cache.Remove($"U8_{userToken}_{output.cAccId}");
}
catch
{
_logInfo.Debug($"不存在[U8_{userToken}_{output.cAccId}]的缓存");
}
_cache.Set($"U8_{userToken}_{output.cAccId}", baseLogin);
}
var services = new ServiceProxy();
return await services.SubmitResubmitMessage(baseLogin, cCardNum, cCode, bUap);
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
return new BaseResult<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
}
}
/// <summary>
/// 提交审批流(ID)
/// </summary>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="voucherId">单据ID</param>
/// <param name="cAccId">系统注册号</param>
/// <param name="bUap">是否UAP单据</param>
/// <returns></returns>
[HttpGet]
[Route("api/U8/Workflow/SubmitResubmitMessage/ID")]
public async Task<BaseResult<string>> SubmitResubmitMessage(string cAccId, string cCardNum, long voucherId, bool bUap = false)
{
try
{
if (Request.Headers.TryGetValues("userToken", out var userToken))
{
return await SubmitResubmitMessageToken(cCardNum, voucherId, bUap);
}
var workId = SnowFlakeSingle.Instance.NextId();
_logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/Code,作业Id:{workId},对接账套:{cAccId},单据:{cCardNum},单据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);
}
var services = new ServiceProxy();
return await services.SubmitResubmitMessage(baseLogin, cCardNum, voucherId, bUap);
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
return new BaseResult<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
}
}
/// <summary>
/// 提交审批流(ID)
/// </summary>
/// <param name="cCardNum">单据类型编码</param>
/// <param name="voucherId">单据ID</param>
/// <param name="bUap">是否UAP单据</param>
/// <returns></returns>
[HttpGet]
[Route("api/U8/Workflow/SubmitResubmitMessage/ID/Token")]
public async Task<BaseResult<string>> SubmitResubmitMessageToken(string cCardNum, long voucherId, bool bUap = false)
{
try
{
var userToken = Request.Headers.GetValues("userToken").First();
if (string.IsNullOrWhiteSpace(userToken))
{
throw new Exception("校验userToken失败");
}
_logInfo.Debug($"当前接口:api/U8/Workflow/SubmitApplicationMessage/ID/{userToken},单据:{cCardNum},单据ID:{voucherId}");
var output = CommUnit.GetDecrypt(userToken).ToObject<LoginOutput>();
var token = CommUnit.GetDecrypt(output.userToken);
var workId = SnowFlakeSingle.Instance.NextId();
_logInfo.Debug($"作业Id:{workId}-----单据:{cCardNum},操作:新增,对接账套:{output.cAccId},单据ID:{voucherId}");
if (!_cache.TryGetValue($"U8_{userToken}_{output.cAccId}", out BaseLogin baseLogin))
{
_logInfo.Debug($"作业Id:{workId}-----未获取到缓存的登录信息,正在重新构建");
baseLogin = new BaseLogin();
baseLogin.Init(token, true, 5);
try
{
_cache.Remove($"U8_{userToken}_{output.cAccId}");
}
catch
{
_logInfo.Debug($"不存在[U8_{userToken}_{output.cAccId}]的缓存");
}
_cache.Set($"U8_{userToken}_{output.cAccId}", baseLogin);
}
var services = new ServiceProxy();
return await services.SubmitResubmitMessage(baseLogin, cCardNum, voucherId, bUap);
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
return new BaseResult<string> { bSuccess = false, message = ex.Message, result = ex.StackTrace };
}
}
}
}