1.新增销售模块自动审核功能

This commit is contained in:
qmj
2025-09-25 00:03:24 +08:00
parent 858538df17
commit 5def74f70a
11 changed files with 199 additions and 98 deletions
@@ -0,0 +1,25 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UFIDA.U8.Framework.Api.Common.Entity
{
/// <summary>
/// 系统U8账套对接参数配置表
/// </summary>
[SugarTable("SysU8AccountConfig", "系统U8账套对接参数配置表")]
public class SysSubSystem
{
[SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "主键", ColumnName = "Id", IsNullable = false)]
public virtual long Id { get; set; }
[SugarColumn(ColumnDescription = "应用秘钥",ColumnName = "AppSecrtet")]
public virtual string AppSecrtet { get; set; }
[SugarColumn(ColumnDescription = "应用key",ColumnName = "AppKey")]
public virtual string AppKey { get; set; }
}
}
@@ -12,7 +12,7 @@ namespace UFIDA.U8.Framework.Api.Common.Entity
{
[SugarColumn(IsIdentity = true, IsPrimaryKey = true, ColumnDescription = "主键", ColumnName = "Id", IsNullable = false)]
public int Id { get; set; }
public long Id { get; set; }
/// <summary>
/// 系统号
@@ -52,6 +52,7 @@
<Reference Include="System.Web" />
</ItemGroup>
<ItemGroup>
<Compile Include="Entity\SysSubSystem.cs" />
<Compile Include="Entity\SysU8AccountConfig.cs" />
<Compile Include="Entity\SysU8FieldDefine.cs" />
<Compile Include="Entity\SysU8MTask.cs" />
@@ -48,7 +48,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.SA
return co;
}
public async Task<BaseResult<string>> Save(BaseLogin baseLogin, Dictionary<string, object> dictionary, string cardNumber, VoucherTypeSA enmVoucherType, int VoucherState = 0, bool bGetCode = false, string codeKey = null, bool bAudit = false, bool iswfcontrolled = false, string cFlowFieldName = "IsWfControlled")
public async Task<BaseResult<string>> Save(BaseLogin baseLogin, Dictionary<string, object> dictionary, string cardNumber, VoucherTypeSA enmVoucherType, int VoucherState = 0, bool bGetCode = false, string codeKey = null, bool? bVerify = false, bool iswfcontrolled = false, string cFlowFieldName = "IsWfControlled")
{
try
{
@@ -122,7 +122,8 @@ namespace UFIDA.U8.Framework.Api.ControlObject.SA
_logInfo.Debug(errorMsg);
_logInfo.Debug($"{vouchId}");
res.bSuccess = string.IsNullOrWhiteSpace(errorMsg) && !string.IsNullOrWhiteSpace($"{vouchId}");
res.bSuccess = (string.IsNullOrWhiteSpace(errorMsg) && !string.IsNullOrWhiteSpace($"{vouchId}")) ||
(errorMsg == "True" && !string.IsNullOrWhiteSpace($"{vouchId}"));
if (!res.bSuccess)
{
@@ -145,59 +146,35 @@ namespace UFIDA.U8.Framework.Api.ControlObject.SA
}
if (iswfcontrolled == false && VoucherState == 2)
{
var strSql = $"UPDATE {vouchers.cBTTblName} SET {cFlowFieldName} = 0 WHERE {vouchers.voucherIdFieldName}={vouchId}";
//if (iswfcontrolled == false && VoucherState == 0)
//{
// var strSql = $"UPDATE {vouchers.cBTTblName} SET {cFlowFieldName} = 0 WHERE {vouchers.voucherIdFieldName}={vouchId}";
object rsts = new Recordset();
baseLogin.Connection.Execute(strSql, out rsts);
}
// object rsts = new Recordset();
// baseLogin.Connection.Execute(strSql, out rsts);
//}
res.voucherCode = CommonHelper.GetVoucherCode(baseLogin.Connection, vouchId, vouchers);
res.voucherId = $"{vouchId}";
res.result = errorMsg;
if (!res.bSuccess)
{
res.message = "保存失败";
return res;
}
res.message = "保存成功";
_logInfo.Debug($"{baseLogin.Connection.State},{baseLogin.Connection.ConnectionString}");
var strWhere = CommonHelper.GetVoucherWhereSqlById(vouchers, vouchId);
if (res.bSuccess && bAudit)
if (res.bSuccess && bVerify == true)
{
try
{
errorMsg = VerifyVouch(co, baseLogin.Connection, enmVoucherType, res.voucherCode, res.voucherId, strWhere, true);
var verifyRes =await VerifyVouch(co, baseLogin.Connection, enmVoucherType, res.voucherCode, res.voucherId, strWhere, true);
if (!string.IsNullOrWhiteSpace(errorMsg))
if (verifyRes.bSuccess == false)
{
throw new Exception(errorMsg);
return verifyRes;
}
}
catch (Exception)
{
res.bSuccess = false;
throw;
}
}
_logInfo.Debug("提交事务...");
return res;
}
catch (Exception ex)
{
@@ -209,14 +186,27 @@ namespace UFIDA.U8.Framework.Api.ControlObject.SA
}
}
public async Task<BaseResult<string>> VerifyVouch(dynamic voucherCO, Connection conn, VoucherTypeSA sVouchType, string cCode, object vouchId, string strWhere, bool bVerify)
/// <summary>
/// 审核单据
/// </summary>
/// <param name="voucherCo"></param>
/// <param name="conn"></param>
/// <param name="sVouchType"></param>
/// <param name="cCode"></param>
/// <param name="vouchId"></param>
/// <param name="strWhere"></param>
/// <param name="bVerify"></param>
/// <returns></returns>
public async Task<BaseResult<string>> VerifyVouch(dynamic voucherCo, Connection conn, VoucherTypeSA sVouchType, string cCode, object vouchId, string strWhere, bool bVerify)
{
try
{
IXMLDOMDocument2 domHead = new DOMDocument();
IXMLDOMDocument2 domBody = new DOMDocument();
IXMLDOMDocument2 domMsg = new DOMDocument();
_logInfo.Debug("开始获取单据数据...");
voucherCO.GetVoucherData(ref domHead, ref domBody, vouchId, true, strWhere);
voucherCo.GetVoucherData(ref domHead, ref domBody, vouchId, true, strWhere);
var res = new BaseResult<string>
{
@@ -224,7 +214,7 @@ namespace UFIDA.U8.Framework.Api.ControlObject.SA
voucherId = $"{vouchId}"
};
var errorMsg = voucherCO.VerifyVouch(ref domHead, bVerify);
var errorMsg = voucherCo.VerifyVouch(ref domHead, bVerify);
res.bSuccess = string.IsNullOrWhiteSpace(errorMsg);
@@ -242,5 +232,14 @@ namespace UFIDA.U8.Framework.Api.ControlObject.SA
return res;
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
await Task.Delay(1);
return new BaseResult<string> { bSuccess = false, message = "审核失败", result = ex.Message };
}
}
}
}
Binary file not shown.
+7 -1
View File
@@ -1002,12 +1002,17 @@
<returns></returns>
<exception cref="T:System.Exception"></exception>
</member>
<member name="T:UFIDA.U8.Framework.Api.Controllers.U8.SAController">
<summary>
销售管理
</summary>
</member>
<member name="F:UFIDA.U8.Framework.Api.Controllers.U8.SAController._logInfo">
<summary>
日志组件
</summary>
</member>
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.SAController.Save(System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.Object},System.Int32)">
<member name="M:UFIDA.U8.Framework.Api.Controllers.U8.SAController.Save(System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.Object},System.Int32,System.Nullable{System.Boolean})">
<summary>
保存单据
</summary>
@@ -1015,6 +1020,7 @@
<param name="cCardNum">单据类型编码</param>
<param name="input">报文</param>
<param name="VoucherState">单据状态:0新增,1修改</param>
<param name="bVerify">是否审核</param>
<returns></returns>
<exception cref="T:System.Exception"></exception>
</member>
@@ -6,9 +6,9 @@
"cexch_name": "人民币", //币种
"cmaker": "demo", //制单人
"breturnflag": 0, //退货标志
"cstcode": "", //销售类型编码
"cdepcode": "", //部门编码
"ccuscode": "", //客户编码
"cstcode": "01", //销售类型编码
"cdepcode": "0301", //部门编码
"ccuscode": "00000001", //客户编码
"dpredatebt": "2025-01-01", //预发货日期
"dpremodatebt": "2025-01-01", //预完工日期
"iexchrate": 1, //汇率
@@ -16,12 +16,15 @@
"cpersoncode": "", //业务员编码
"body": [
{
"cinvcode": "", //存货编码
"cinvcode": "W1000A002", //存货编码
"iquantity": 10, //数量
"dpredate": "2025-01-01", //预发货日期
"dpremodate": "2025-01-01", //预完工日期
"editprop": "A", //编辑属性
"irowno": 1, //行号
"cinvm_unit": "台",
"igrouptype": 0,
"cgroupcode": "01",
"itaxunitprice": 1, //含税单价
"iquotedprice": 1, //报价
"iunitprice": 1, //无税单价
@@ -205,7 +205,7 @@ namespace UFIDA.U8.Framework.Api
//
//c.InjectJavaScript(thisAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testScript1.js");
c.InjectJavaScript(Assembly.GetExecutingAssembly(), "UFIDA.U8.Framework.Api.Scripts.Swagger_zh-cn.js");
c.DisableValidator();
// The swagger-ui renders boolean data types as a dropdown. By default, it provides "true" and "false"
// strings as the possible choices. You can use this option to change these to something else,
// for example 0 and 1.
@@ -9,6 +9,8 @@ using System.Web.Http.Description;
using System.Web.UI.WebControls;
using log4net;
using Microsoft.Extensions.Hosting;
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;
@@ -16,6 +18,7 @@ using UFIDA.U8.Framework.Api.ControlObject.U8M;
using UFIDA.U8.Framework.Api.Entity;
using UFIDA.U8.Framework.Api.Models;
using UFIDA.U8.Framework.Api.Unit;
using SysU8AccountConfig = UFIDA.U8.Framework.Api.ControlObject.Entity.SysU8AccountConfig;
namespace UFIDA.U8.Framework.Api.Controllers.U8
{
@@ -454,5 +457,41 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
return ex.Message;
}
}
[HttpPost]
[Route("api/U8/DP/InitSubSystem")]
public async Task<BaseResult<long>> InitSubSystem(Dictionary<string,string> input)
{
try
{
if (!input.TryGetValue("cAppInfo", out var cValue) || string.IsNullOrWhiteSpace(cValue))
{
throw new Exception("参数错误");
}
var info = CommUnit.GetDecrypt(cValue).ToObject<SysSubSystem>();
var db = CommUnit.GetDbClient();
if (await db.Queryable<SysSubSystem>().AnyAsync(a => a.AppKey == info.AppKey))
{
throw new Exception("当前子系统已注册");
}
info.Id=SnowFlakeSingle.instance.NextId();
await db.Insertable(info).ExecuteCommandAsync();
return new BaseResult<long>() { bSuccess = true, message = "注册成功", result = info.Id };
}
catch (Exception ex)
{
_logInfo.Error(ex.Message, ex);
await Task.Delay(1);
return new BaseResult<long>() { bSuccess = false, message = "子系统初始化失败", result = 0 };
}
}
}
}
@@ -208,11 +208,21 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
});
}
if (colListBody.Any(a => string.Equals(a.Key, "RelsTime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "RelsTime", StringComparison.OrdinalIgnoreCase)))
{
var col = colListBody.First(a => string.Equals(a.Key, "RelsTime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "RelsTime", StringComparison.OrdinalIgnoreCase));
conModels.Add(new ConditionalModel
{
FieldName = $"{col.Value}",
ConditionalType = ConditionalType.GreaterThanOrEqual,
FieldValue = $"{o.Value}"
});
}
}
else if (o.Key == "dModifyDate__2")
{
if (colListHead.Any(a => string.Equals(a.Key, "dnveriRelsTimefytime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "RelsTime", StringComparison.OrdinalIgnoreCase)))
if (colListHead.Any(a => string.Equals(a.Key, "RelsTime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "RelsTime", StringComparison.OrdinalIgnoreCase)))
{
var col = colListHead.First(a => string.Equals(a.Key, "RelsTime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "RelsTime", StringComparison.OrdinalIgnoreCase));
@@ -223,6 +233,18 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
FieldValue = $"{o.Value}"
});
}
if (colListBody.Any(a => string.Equals(a.Key, "dnveriRelsTimefytime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "RelsTime", StringComparison.OrdinalIgnoreCase)))
{
var col = colListBody.First(a => string.Equals(a.Key, "RelsTime", StringComparison.OrdinalIgnoreCase) || string.Equals(a.Value, "RelsTime", StringComparison.OrdinalIgnoreCase));
conModels.Add(new ConditionalModel
{
FieldName = $"{col.Value}",
ConditionalType = ConditionalType.LessThanOrEqual,
FieldValue = $"{o.Value}"
});
}
}
else if ($"{o.Value}".EndsWith("%") || $"{o.Value}".StartsWith("%"))
{
@@ -20,6 +20,9 @@ using UFIDA.U8.Framework.Api.Unit;
namespace UFIDA.U8.Framework.Api.Controllers.U8
{
/// <summary>
/// 销售管理
/// </summary>
public class SAController : ApiController
{
@@ -37,11 +40,12 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
/// <param name="cCardNum">单据类型编码</param>
/// <param name="input">报文</param>
/// <param name="VoucherState">单据状态:0新增,1修改</param>
/// <param name="bVerify">是否审核</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
[HttpPost]
[Route("api/U8/SA/{cCardNum}/Save")]
public async Task<BaseResult<string>> Save(string cAccId, string cCardNum, [FromBody] Dictionary<string, object> input, int VoucherState = 0)
public async Task<BaseResult<string>> Save(string cAccId, string cCardNum, [FromBody] Dictionary<string, object> input, int VoucherState = 0, bool? bVerify = null)
{
try
{
@@ -135,7 +139,9 @@ namespace UFIDA.U8.Framework.Api.Controllers.U8
var co = new ClsVoucherCO_SA();
var res = await co.Save(baseLogin, input, cCardNum, (VoucherTypeSA)Convert.ToInt32(voucherInfo.VoucherType), VoucherState,bGetCode, codeKey, voucherInfo.bVerify, voucherInfo.iswfcontrolled, voucherInfo.cFlowFieldName);
var res = await co.Save(baseLogin, input, cCardNum,
(VoucherTypeSA)Convert.ToInt32(voucherInfo.VoucherType), VoucherState, bGetCode, codeKey,
bVerify ?? voucherInfo.bVerify, voucherInfo.iswfcontrolled, voucherInfo.cFlowFieldName);
return res;
}