using ICSSoft.ERPWMS.Entity; using Microsoft.Data.SqlClient; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ICSSoft.ERPWMS.SQL { public class UpdateVendorInfo { public static Result Update(List list) { Result res = new Result(); try { string jsonstr = JsonConvert.SerializeObject(list); Log.WriteLogFile(jsonstr, "更新供应商日志"); StringBuilder sb = new StringBuilder();//接口返回Message foreach (UpdateVendorEntity entity in list) { SqlConnection conn = new SqlConnection(ICSHelper.ReadConfig(ICSHelper.FileNameCompanyCon)["ERP"].ToString()); conn.Open(); SqlTransaction sqlTran = conn.BeginTransaction(); SqlCommand cmd = new SqlCommand(); cmd.Transaction = sqlTran; cmd.Connection = conn; try { if (string.IsNullOrWhiteSpace(entity.cVenCode)) { throw new Exception("存在表头供应商编码为空!!!"); } else { if (string.IsNullOrWhiteSpace(entity.WorkPoint)) { throw new Exception("站点参数为空!!!"); } string WorkPoint = ICSHelper.GetConnectStringTest(entity.WorkPoint); if (WorkPoint == "NotExit") { throw new Exception("站点编码不存在!"); } #region 验证供应商编码是否存在 string sqlCheck = "Select cVenCode from {0}.dbo.Vendor where cVenCode ='{1}'"; sqlCheck = string.Format(sqlCheck, WorkPoint, entity.cVenCode); DataTable dtCheck = ICSHelper.SQlReturnData(sqlCheck, cmd); if (dtCheck.Rows.Count < 1) { throw new Exception("供应商编码不存在!!!"); } #endregion #region 表头数据 string sql = @"Update {0}.dbo.Vendor Set "; sql = string.Format(sql, WorkPoint); if (!string.IsNullOrWhiteSpace(entity.cVenName)) { sql += " cVenName='{0}',"; sql = string.Format(sql, entity.cVenName); } if (!string.IsNullOrWhiteSpace(entity.cVenAbbName)) { sql += " cVenAbbName='{0}',"; sql = string.Format(sql, entity.cVenAbbName); } if (!string.IsNullOrWhiteSpace(entity.cVCCode)) { sql += " cVCCode='{0}',"; sql = string.Format(sql, entity.cVCCode); } if (!string.IsNullOrWhiteSpace(entity.cVenHeadCode)) { sql += " cVenHeadCode='{0}',"; sql = string.Format(sql, entity.cVenHeadCode); } if (!string.IsNullOrWhiteSpace(entity.cVenExch_name)) { sql += " cVenExch_name='{0}',"; sql = string.Format(sql, entity.cVenExch_name); } if (entity.dVenDevDate!=null) { sql += " dVenDevDate='{0}',"; sql = string.Format(sql, entity.dVenDevDate); } if (entity.dStopDate!=null) { sql += " dEndDate='{0}',"; sql = string.Format(sql, entity.dStopDate); } if (entity.bVenTax != null) { sql += " bVenTax='{0}',"; sql = string.Format(sql, entity.bVenTax); } if (entity.iVenTaxRate != null) { sql += " iVenTaxRate='{0}',"; sql = string.Format(sql, entity.iVenTaxRate); } if (!string.IsNullOrWhiteSpace(entity.cVenPUOMProtocol)) { sql += " cVenPUOMProtocol='{0}',"; sql = string.Format(sql, entity.cVenPUOMProtocol); } if (!string.IsNullOrWhiteSpace(entity.cVenIType)) { sql += " cVenIType='{0}',"; sql = string.Format(sql, entity.cVenIType); } if (!string.IsNullOrWhiteSpace(entity.cDCCode)) { sql += " cDCCode='{0}',"; sql = string.Format(sql, entity.cDCCode); } if (!string.IsNullOrWhiteSpace(entity.cModifyPerson)) { sql += " cModifyPerson='{0}',"; sql = string.Format(sql, entity.cModifyPerson); } if (entity.dModifyDate != null) { sql += " dModifyDate='{0}',"; sql = string.Format(sql, entity.dModifyDate); } sql = sql.TrimEnd(','); sql += " Where cVenCode ='{0}'"; sql = string.Format(sql, entity.cVenCode); Log.WriteLogFile(sql, "更新供应商SQL日志"); if (!ICSHelper.ExecuteNonQuery(sql, cmd)) { throw new Exception("更新供应商表头失败!"); } #endregion #region 表体数据 if (entity.list.Count > 0) { //验证是否有银行信息 string VenCheck = "Select * from {0}.dbo.VendorBank Where cVenCode ='{1}'"; VenCheck = string.Format(VenCheck, WorkPoint, entity.cVenCode); DataTable dtVenCheck = ICSHelper.SQlReturnData(VenCheck, cmd); if (dtVenCheck!=null&&dtVenCheck.Rows.Count>0) { string sqlDelete = "Delete {0}.dbo.VendorBank Where cVenCode ='{1}'"; sqlDelete = string.Format(sqlDelete, WorkPoint, entity.cVenCode); Log.WriteLogFile(sqlDelete, "更新供应商SQL日志"); if (!ICSHelper.ExecuteNonQuery(sqlDelete, cmd)) { throw new Exception("删除供应商表体失败!"); } } //验证表体中是否存在默认银行设置 List listBool = entity.list.Where(x => x.bDefault == true).ToList(); if (listBool.Count == 0) { throw new Exception("默认银行未设置!"); } //验证表体中默认银行设置是否大于1个 if (listBool.Count > 1) { throw new Exception("默认银行设置数大于1!"); } string sqlBankUpt = "Update {0}.dbo.Vendor Set cVenAccount='{1}',cVenBank ='{3}' Where cVenCode ='{2}'"; sqlBankUpt = string.Format(sqlBankUpt, WorkPoint, listBool[0].cAccountNum, entity.cVenCode, listBool[0].cBranch); Log.WriteLogFile(sqlBankUpt, "更新供应商SQL日志"); if (!ICSHelper.ExecuteNonQuery(sqlBankUpt, cmd)) { throw new Exception("更新供应商表头银行信息失败!"); } string sqlDetail = ""; bool InserFlag = true; foreach (UpdateVendorDetailEntity detail in entity.list) { if (string.IsNullOrWhiteSpace(detail.cVenCode)) { InserFlag = false; sb.Append("存在表体供应商编码为空!!!"); break; } if (detail.cVenCode != entity.cVenCode) { InserFlag = false; sb.Append("表体供应商编码与表头不一致,表头供应商编码为:" + entity.cVenCode + ",表体供应商编码为:" + detail.cVenCode + "!!!"); break; } if (string.IsNullOrWhiteSpace(detail.cAccountNum)) { InserFlag = false; sb.Append("银行账号为空,供应商编码为:" + detail.cVenCode + "!!!"); break; } //验证所属银行 string sqlBank = "Select cbankcode from {0}.dbo.AA_Bank Where cbankname ='{1}'"; sqlBank = string.Format(sqlBank, WorkPoint, detail.cBank); DataTable dtBank = ICSHelper.SQlReturnData(sqlBank, cmd); if (dtBank != null && dtBank.Rows.Count > 0) { detail.cBank = dtBank.Rows[0]["cbankcode"].ToString(); } else { InserFlag = false; sb.Append("所属银行不存在,供应商编码为:" + detail.cVenCode + "!!!"); break; } sqlDetail += " Insert into {0}.dbo.VendorBank(cVenCode,cBranch,cBank,cAccountNum,cAccountName,bDefault) Values ('{1}','{2}','{3}','{4}','{5}','{6}');"; sqlDetail = string.Format(sqlDetail, WorkPoint, detail.cVenCode, detail.cBranch, detail.cBank, detail.cAccountNum, detail.cAccountName, detail.bDefault); //Sort++; } if (InserFlag) { Log.WriteLogFile(sqlDetail, "更新供应商SQL日志"); if (!ICSHelper.ExecuteNonQuery(sqlDetail, cmd)) { throw new Exception("新增供应商表体失败!"); } cmd.Transaction.Commit(); } else { cmd.Transaction.Rollback(); } } #endregion else { cmd.Transaction.Commit(); } } } catch (Exception ex) { cmd.Transaction.Rollback(); sb.Append("执行报错,供应商编码为:" + entity.cVenCode + ",报错信息:" + ex.Message + "!!!"); continue; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } conn.Dispose(); } } if (sb.Length > 0) { res.IsSuccess = false; res.Message = sb.ToString(); } else { res.IsSuccess = true; res.Message = "执行成功!"; } return res; } catch (Exception ex) { res.IsSuccess = false; res.Message = ex.Message; return res; } } } }