using ADODB; using log4net; using MSXML2; using System; using System.Collections.Generic; using System.Reflection.Emit; using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Threading.Tasks; 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.U8M; // ReSharper disable StringLiteralTypo // ReSharper disable CommentTypo // ReSharper disable IdentifierTypo // ReSharper disable InconsistentNaming // ReSharper disable UnusedMember.Global namespace UFIDA.U8.Framework.Api.ControlObject.ST { /// /// 库存管理 /// public class USERPCO { private readonly ILog _logInfo = LogManager.GetLogger("logInfo"); /// /// 新增单据 /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// public async Task> Insert(BaseLogin baseLogin, Dictionary dictionary, string cCardNum, string sVouchType, bool bGetCode = false, string codeKey = "", bool bCheck = true, bool bBeforCheckStock = true, bool bIsRedVouch = false, string sAddedState = "", bool bReMote = false, bool bAudit = false, bool bPrintDom = false,bool bVerify=false) { try { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; _logInfo.Debug("开始输出登录信息"); _logInfo.Debug(baseLogin._vbLogin.userToken); 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 = ""; try { _logInfo.Debug("开始获取单据默认模板..."); if (!co.GetDefaultVoucherDom(sVouchType, cCardNum, ref domHead, ref domBody, ref domPosition, ref errorMsg) || !string.IsNullOrWhiteSpace(errorMsg)) { throw new Exception(errorMsg); } } catch (Exception ex) { _logInfo.Error($"获取单据默认模板失败,错误信息:{ex.Message}", ex); errorMsg = ""; _logInfo.Debug($"开始读取单据数据,当前单据编码:{cCardNum}"); if (!co.Load(sVouchType, "1=2", ref domHead, ref domBody, ref domPosition, ref errorMsg, true) || !string.IsNullOrWhiteSpace(errorMsg)) { throw new Exception(errorMsg); } } _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 && !string.IsNullOrWhiteSpace(codeKey)) { errorMsg = ""; var newCode = co.GetNewVouchCode(sVouchType, domHead, ref errorMsg); _logInfo.Debug($"获取新单号:{newCode}"); if (!string.IsNullOrWhiteSpace(newCode)) { CommonHelper.SetDomKeyValue(domHead, codeKey, newCode); } } _logInfo.Debug("填充表体DOM..."); domBody = dictionarys.ToDocument2(domBody); IXMLDOMDocument2 domMsg = new DOMDocument(); errorMsg = ""; var vouchers = CommonHelper.GetVouchers(baseLogin.Connection, cCardNum); baseLogin.Connection.BeginTrans(); object vouchId = ""; var res = new BaseResult(); try { if (bPrintDom) { _logInfo.Debug("开始输入DOM..."); _logInfo.Debug(domHead.xml); _logInfo.Debug(domBody.xml); _logInfo.Debug(domPosition.xml); } _logInfo.Debug("执行插入操作..."); res.bSuccess = co.Insert(sVouchType, domHead, domBody, null, ref errorMsg, baseLogin.Connection, ref vouchId, ref domMsg, bCheck, bBeforCheckStock, bIsRedVouch, sAddedState, bReMote); if (res.bSuccess) { res.voucherId = $"{vouchId}"; _logInfo.Debug($"操作完成,操作结果:成功!------[{vouchId}]------[{errorMsg}]------[{domMsg.xml}]"); res.voucherCode = CommonHelper.GetVoucherCode(baseLogin.Connection, vouchId, vouchers); if (bAudit) { _logInfo.Debug($"当前单据号:{res.voucherCode},开始审核操作"); var res2 = co.Verify(sVouchType, vouchId, ref errorMsg, baseLogin.Connection, null, ref domMsg); if (!res2) { if (!string.IsNullOrWhiteSpace(errorMsg)) throw new Exception(errorMsg); if (!string.IsNullOrWhiteSpace(domMsg.xml)) throw new Exception(domMsg.xml); throw new Exception("审核单据时发生异常,请检查数据"); } _logInfo.Debug($"当前单据号:{res.voucherCode},操作完成,操作结果:成功!------[{vouchId}]------[{errorMsg}]------[{bVerify}]------[{cCardNum}]------[{domMsg.xml}]"); if (bVerify && cCardNum=="0304") { _logInfo.Debug($"0304,当前单据号:{res.voucherCode},开始审核其他出入库单据"); var strSql = $"select ID,cCode,ufts from KCOtherOutH where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='调拨' and cBusCode='{res.voucherCode}'"; var rst = new Recordset(); rst.Open(strSql, baseLogin.Connection); if (!rst.BOF && !rst.EOF) { var outId = $"{rst.Fields["ID"].Value}"; var outCode = $"{rst.Fields["cCode"].Value}"; var ufts = $"{rst.Fields["ufts"].Value}"; rst.Close(); errorMsg = ""; domMsg = new DOMDocument(); _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他出库单:{outCode},开始审核其他出库单"); var resOut = co.Verify("09", outId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); if (!resOut) { if (!string.IsNullOrWhiteSpace(errorMsg)) throw new Exception($"审核其他出库单时发生异常,错误信息:{errorMsg}"); if (!string.IsNullOrWhiteSpace(domMsg.xml)) throw new Exception($"审核其他出库单时发生异常,零出库控制:{domMsg.xml}"); throw new Exception("审核其他出库单时发生异常,请检查数据"); } _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他出库单:{outCode},审核其他出库单完成,操作结果:成功!------[{outId}]------[{errorMsg}]------[{domMsg.xml}]"); } else { rst.Close(); } strSql = $"select ID,cCode,ufts from KCOtherInH where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='调拨' and cBusCode='{res.voucherCode}'"; var rst2 = new Recordset(); rst2.Open(strSql, baseLogin.Connection); if (!rst2.BOF && !rst2.EOF) { var inId = $"{rst2.Fields["ID"].Value}"; var inCode = $"{rst2.Fields["cCode"].Value}"; var ufts = $"{rst2.Fields["ufts"].Value}"; rst2.Close(); errorMsg = ""; domMsg = new DOMDocument(); _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他入库单:{inId},开始审核其他入库单"); var resIn = co.Verify("08", inId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); if (!resIn) { if (!string.IsNullOrWhiteSpace(errorMsg)) throw new Exception($"审核其他入库单时发生异常,错误信息:{errorMsg}"); if (!string.IsNullOrWhiteSpace(domMsg.xml)) throw new Exception($"审核其他入库单时发生异常,零出库控制:{domMsg.xml}"); throw new Exception("审核其他入库单时发生异常,请检查数据"); } _logInfo.Debug($"0304,当前单据号:{res.voucherCode},其他入库单:{inCode},审核其他入库单完成,操作结果:成功!------[{inId}]------[{errorMsg}]------[{domMsg.xml}]"); } else { rst2.Close(); } } if(bVerify && cCardNum == "0411") { _logInfo.Debug($"0411,当前单据号:{res.voucherCode},开始审核材料出库单"); var strSql = $"select ID,cCode,ufts from RecordOutQ where (isnull(iverifystate,0)=0 or dVeriDate is null) and cSource='产成品入库单' and cBusCode='{res.voucherCode}'"; var rst = new Recordset(); rst.Open(strSql, baseLogin.Connection); if (!rst.BOF && !rst.EOF) { var outId = $"{rst.Fields["ID"].Value}"; var outCode = $"{rst.Fields["cCode"].Value}"; var ufts = $"{rst.Fields["ufts"].Value}"; rst.Close(); errorMsg = ""; domMsg = new DOMDocument(); _logInfo.Debug($"0411,当前单据号:{res.voucherCode},材料出库单:{outCode},开始审核材料出库单"); var resOut = co.Verify("11", outId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); if (!resOut) { if (!string.IsNullOrWhiteSpace(errorMsg)) { _logInfo.Error($"第1次审核出错,错误信息:{errorMsg}"); resOut = co.Verify("11", outId, ref errorMsg, baseLogin.Connection, ufts, ref domMsg); if (!resOut) { if (!string.IsNullOrWhiteSpace(errorMsg)) { throw new Exception($"审核材料出库单时发生异常,错误信息:{errorMsg}"); } } } if (!string.IsNullOrWhiteSpace(domMsg.xml)) throw new Exception($"审核材料出库单时发生异常,零出库控制:{domMsg.xml}"); throw new Exception("审核材料出库单时发生异常,请检查数据"); } _logInfo.Debug($"0411,当前单据号:{res.voucherCode},材料出库单:{outCode},审核材料出库单完成,操作结果:成功!------[{outId}]------[{errorMsg}]------[{domMsg.xml}]"); } else { rst.Close(); } } //try //{ // var strSql = $"UPDATE {vouchers.cBTTblName} SET cHandler = '{dictionary["cmaker"]}' WHERE {vouchers.voucherIdFieldName}={vouchId}"; // object rsts = new Recordset(); // baseLogin.Connection.Execute(strSql, out rsts); //} //catch(Exception ex) //{ // _logInfo.Error($"更新审核人时发生异常,错误信息:{ex.Message}", ex); //} } baseLogin.Connection.CommitTrans(); res.message = "新增成功"; } else { _logInfo.Debug($"操作完成,操作结果:失败!------[{vouchId}]------[{errorMsg}]------[{domMsg.xml}]"); if (!string.IsNullOrWhiteSpace(errorMsg)) throw new Exception(errorMsg); if (!string.IsNullOrWhiteSpace(domMsg.xml)) throw new Exception(domMsg.xml); throw new Exception("新增单据时发生异常,请检查数据"); } } catch (Exception) { baseLogin.Connection.RollbackTrans(); throw; } 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> 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 { 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); if (bPrintDom) { _logInfo.Debug("开始输入DOM..."); _logInfo.Debug(domHead.xml); _logInfo.Debug(domBody.xml); _logInfo.Debug(domPosition.xml); } //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) { baseLogin.Connection.RollbackTrans(); throw; } 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 }; } } /// /// 批量审核单据(单号) /// /// /// /// /// /// /// /// /// /// public async Task>> Verify(BaseLogin baseLogin, string sCardNum, string sVouchType, List cCodes, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var resList = new List>(); foreach (var cCode in cCodes) { var strSql = $"SELECT {fieldName} AS ID FROM {tableName} WHERE {codeName}='{cCode}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "审核失败", result = $"没有查询到单号为{cCode}的单据!", voucherId = "", voucherCode = cCode }; resList.Add(res); continue; } rst.MoveFirst(); object curId = rst.Fields["ID"].Value; rst.Close(); var verifyResult = await Verify(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); } return resList; } /// /// 批量审核单据(ID) /// /// /// /// /// /// /// /// /// /// public async Task>> Verify(BaseLogin baseLogin, string sCardNum, string sVouchType, List vouchIds, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var resList = new List>(); foreach (var vouchId in vouchIds) { var strSql = $"SELECT {codeName} AS cCode FROM {tableName} WHERE {fieldName}='{vouchId}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "审核失败", result = $"没有查询到ID为{vouchId}的单据!", voucherId = $"{vouchId}", voucherCode = "" }; resList.Add(res); continue; } rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; rst.Close(); var verifyResult = await Verify(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); } return resList; } /// /// 审核单据(单号) /// /// /// /// /// /// /// /// /// /// public async Task> Verify(BaseLogin baseLogin, string sCardNum, string sVouchType, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var strSql = $"SELECT {fieldName} AS ID FROM {tableName} WHERE {codeName}='{cCode}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "审核失败", result = $"没有查询到单号为{cCode}的单据!", voucherId = "", voucherCode = cCode }; } rst.MoveFirst(); object curId = rst.Fields["ID"].Value; var verifyResult = await Verify(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); return verifyResult; } /// /// 审核单据(ID) /// /// /// /// /// /// /// /// /// /// public async Task> Verify(BaseLogin baseLogin, string sCardNum, string sVouchType, long vouchId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var strSql = $"SELECT {codeName} AS cCode FROM {tableName} WHERE {fieldName}='{vouchId}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "审核失败", result = $"没有查询到ID为{vouchId}的单据!", voucherId = $"{vouchId}", voucherCode = "" }; } rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; var verifyResult = await Verify(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); return verifyResult; } /// /// 审核单据 /// /// /// /// /// /// /// /// /// /// public async Task> Verify(dynamic voucherCO, Connection conn, string sVouchType, string cCode, object vouchId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var errMsg = ""; IXMLDOMDocument2 domMsg = new DOMDocument(); var res = new BaseResult { voucherCode = cCode, voucherId = $"{vouchId}" }; if (bList) { await Task.Delay(1); } conn.BeginTrans(); res.bSuccess = voucherCO.Verify(sVouchType, vouchId, ref errMsg, conn, null, ref domMsg, bCheck, bBeforCheckStock, bList); if (res.bSuccess) { conn.CommitTrans(); res.message = "审核成功"; res.result = res.voucherId; } else { conn.RollbackTrans(); res.message = "审核失败"; res.result = string.IsNullOrWhiteSpace(errMsg) ? domMsg.xml : errMsg; } return res; } /// /// 批量弃审单据(单号) /// /// /// /// /// /// /// /// /// /// public async Task>> UnVerify(BaseLogin baseLogin, string sCardNum, string sVouchType, List cCodes, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var resList = new List>(); foreach (var cCode in cCodes) { var strSql = $"SELECT {fieldName} AS ID FROM {tableName} WHERE {codeName}='{cCode}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "弃审失败", result = $"没有查询到单号为{cCode}的单据!", voucherId = "", voucherCode = cCode }; resList.Add(res); continue; } rst.MoveFirst(); object curId = rst.Fields["ID"].Value; var verifyResult = await UnVerify(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); } return resList; } /// /// 批量弃审单据(ID) /// /// /// /// /// /// /// /// /// /// public async Task>> UnVerify(BaseLogin baseLogin, string sCardNum, string sVouchType, List vouchIds, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var resList = new List>(); foreach (var vouchId in vouchIds) { var strSql = $"SELECT {codeName} AS cCode FROM {tableName} WHERE {fieldName}='{vouchId}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "弃审失败", result = $"没有查询到ID为{vouchId}的单据!", voucherId = $"{vouchId}", voucherCode = "" }; resList.Add(res); continue; } rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; var verifyResult = await UnVerify(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); } return resList; } /// /// 弃审单据(单号) /// /// /// /// /// /// /// /// /// /// public async Task> UnVerify(BaseLogin baseLogin, string sCardNum, string sVouchType, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var strSql = $"SELECT {fieldName} AS ID FROM {tableName} WHERE {codeName}='{cCode}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "弃审失败", result = $"没有查询到单号为{cCode}的单据!", voucherId = "", voucherCode = cCode }; } rst.MoveFirst(); object curId = rst.Fields["ID"].Value; rst.Close(); var verifyResult = await UnVerify(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); return verifyResult; } /// /// 弃审单据(ID) /// /// /// /// /// /// /// /// /// /// public async Task> UnVerify(BaseLogin baseLogin, string sCardNum, string sVouchType, long vouchId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var strSql = $"SELECT {codeName} AS cCode FROM {tableName} WHERE {fieldName}='{vouchId}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "弃审失败", result = $"没有查询到ID为{vouchId}的单据!", voucherId = $"{vouchId}", voucherCode = "" }; } rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; rst.Close(); var verifyResult = await UnVerify(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); return verifyResult; } /// /// 弃审单据 /// /// /// /// /// /// /// /// /// /// public async Task> UnVerify(dynamic voucherCO, Connection conn, string sVouchType, string cCode, object vouchId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var errMsg = ""; IXMLDOMDocument2 domMsg = new DOMDocument(); var res = new BaseResult { voucherCode = cCode, voucherId = $"{vouchId}" }; if (bList) { await Task.Delay(1); } conn.BeginTrans(); try { res.bSuccess = voucherCO.UnVerify(sVouchType, vouchId, ref errMsg, conn, null, ref domMsg, bCheck, bBeforCheckStock, bList); } catch { conn.RollbackTrans(); throw; } if (res.bSuccess) { conn.CommitTrans(); res.message = "审核成功"; res.result = res.voucherId; } else { conn.RollbackTrans(); res.message = "审核失败"; res.result = string.IsNullOrWhiteSpace(errMsg) ? domMsg.xml : errMsg; } return res; } /// /// 批量删除单据(单号) /// /// /// /// /// /// /// /// /// /// public async Task>> Delete(BaseLogin baseLogin, string sCardNum, string sVouchType, List cCodes, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var resList = new List>(); foreach (var cCode in cCodes) { var strSql = $"SELECT {fieldName} AS ID FROM {tableName} WHERE {codeName}='{cCode}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "删除失败", result = $"没有查询到单号为{cCode}的单据!", voucherId = "", voucherCode = cCode }; resList.Add(res); continue; } rst.MoveFirst(); object curId = rst.Fields["ID"].Value; rst.Close(); var verifyResult = await Delete(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); } return resList; } /// /// 批量删除单据(ID) /// /// /// /// /// /// /// /// /// /// public async Task>> Delete(BaseLogin baseLogin, string sCardNum, string sVouchType, List vouchIds, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var resList = new List>(); foreach (var vouchId in vouchIds) { var strSql = $"SELECT {codeName} AS cCode FROM {tableName} WHERE {fieldName}='{vouchId}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "删除失败", result = $"没有查询到ID为{vouchId}的单据!", voucherId = $"{vouchId}", voucherCode = "" }; resList.Add(res); continue; } rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; rst.Close(); var verifyResult = await Delete(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); resList.Add(verifyResult); } return resList; } /// /// 删除单据(单号) /// /// /// /// /// /// /// /// /// /// public async Task> Delete(BaseLogin baseLogin, string sCardNum, string sVouchType, string cCode, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var strSql = $"SELECT {fieldName} AS ID FROM {tableName} WHERE {codeName}='{cCode}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "删除失败", result = $"没有查询到单号为{cCode}的单据!", voucherId = "", voucherCode = cCode }; } rst.MoveFirst(); object curId = rst.Fields["ID"].Value; rst.Close(); var verifyResult = await Delete(co, conn, sVouchType, cCode, curId, bCheck, bBeforCheckStock, bList); return verifyResult; } /// /// 删除单据(ID) /// /// /// /// /// /// /// /// /// /// public async Task> Delete(BaseLogin baseLogin, string sCardNum, string sVouchType, long vouchId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var co = "USERPCO.VoucherCO".GetComObject(); var errorMsg = ""; if (!co.IniLogin(baseLogin._vbLogin, ref errorMsg)) { await Task.Delay(1); throw new Exception(errorMsg); } 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); if (rst.BOF || rst.EOF) throw new Exception("未能获取到单据的配置信息!"); rst.MoveFirst(); var tableName = $"{rst.Fields["BTTblName"].Value}"; var fieldName = $"{rst.Fields["VchTblPrimarykeyNames"].Value}"; var codeName = $"{rst.Fields["ReceiptNOFieldName"].Value}"; if (codeName.Contains("{##}")) { codeName = codeName.Split('{', '#', '#', '}')[0]; } rst.Close(); var strSql = $"SELECT {codeName} AS cCode FROM {tableName} WHERE {fieldName}='{vouchId}'"; rst.Open(strSql, conn); if (rst.BOF || rst.EOF) { var res = new BaseResult { bSuccess = false, message = "删除失败", result = $"没有查询到ID为{vouchId}的单据!", voucherId = $"{vouchId}", voucherCode = "" }; } rst.MoveFirst(); var cCode = $"{rst.Fields["cCode"].Value}"; var verifyResult = await Delete(co, conn, sVouchType, cCode, vouchId, bCheck, bBeforCheckStock, bList); return verifyResult; } /// /// 删除单据 /// /// /// /// /// /// /// /// /// /// public async Task> Delete(dynamic voucherCO, Connection conn, string sVouchType, string cCode, object vouchId, bool bCheck = true, bool bBeforCheckStock = true, bool bList = false) { var errMsg = ""; IXMLDOMDocument2 domMsg = new DOMDocument(); var res = new BaseResult { voucherCode = cCode, voucherId = $"{vouchId}" }; if (bList) { await Task.Delay(1); } conn.BeginTrans(); try { res.bSuccess = voucherCO.Delete(sVouchType, vouchId, ref errMsg, conn, null, ref domMsg, bCheck, bBeforCheckStock, bList); } catch { conn.RollbackTrans(); throw; } if (res.bSuccess) { conn.CommitTrans(); res.message = "删除成功"; res.result = res.voucherId; } else { conn.RollbackTrans(); res.message = "删除失败"; res.result = string.IsNullOrWhiteSpace(errMsg) ? domMsg.xml : errMsg; } return res; } } }