|
|
using ICSSoft.Common; using ICSSoft.Entity; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ICSSoft.DataProject { public class DisassemblyDoc {
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static string connString = System.Configuration.ConfigurationManager.AppSettings["ERPConnStr"]; private static string ERPDB = System.Configuration.ConfigurationManager.AppSettings["ERPDB"]; private static string Type = System.Configuration.ConfigurationManager.AppSettings["Type"];
/// <summary>
/// 审核拆卸单
/// </summary>
/// <param name="Bills"></param>
/// <returns></returns>
public bool Dismrecord01(List<ICSDisassemblyDoc> Bills) { bool ResultFlag = false; DataTable dtNew = null; string connS = ""; SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); if (Bills.Count <= 0) { throw new Exception("传送数据为空!"); } LogInfo(Bills); foreach (ICSDisassemblyDoc head in Bills) { try { connS = string.Format(connString, head.WorkPoint); conn = new System.Data.SqlClient.SqlConnection(connS); conn.Open(); SqlTransaction sqlTran = conn.BeginTransaction(); cmd = new SqlCommand(); cmd.Transaction = sqlTran; cmd.Connection = conn;
string[] ss = head.WorkPoint.Split('_'); ERPDB = ss[1];
string sql = ""; ICSUserInfo userInfo = new ICSUserInfo(); userInfo = DBHelper.GetPersonInfo(head.User, cmd); string cHandler = string.Empty; string cIWhCode = string.Empty;
#region 检验单号是否存在
sql = "select * from AssemVouch where ID='" + head.ID + "'"; DataTable dt = DBHelper.SQlReturnData(sql, cmd); if (dt != null && dt.Rows.Count > 0) { cHandler = dt.Rows[0]["cVerifyPerson"].ToString(); //cIWhCode = head.cWhCode;
if (!string.IsNullOrEmpty(cHandler)) { throw new Exception("单据ID:" + head.ID + "不是开立状态!"); } } else { throw new Exception("单据ID:" + head.ID + "在U8中不存在!"); } #endregion
#region 审核拆卸单
sql = @"UPDATE dbo.AssemVouch SET cVerifyPerson='" + userInfo.UserName + @"' ,
dVerifyDate=CONVERT(VARCHAR(50),GETDATE(),112),dnverifytime=GETDATE() WHERE ID='" + head.ID + "'";
DBHelper.CmdExecuteNonQuery(sql, cmd, "审核拆卸单失败!"); #endregion
#region 其他出库单表头
//取得out库单的默认显示模版
string DEF_ID09 = DBHelper.GetDefaultTemplate("0301", cmd); //取得采购入库单单据 表头ID,表体DID
VouchKey key09 = new VouchKey(); var nums = Bills.Count; Dictionary<string, int> dics = DBHelper.GetAllCode("" + ERPDB + "", "rd", "" + nums + ""); int iFatherIds = Convert.ToInt32(dics["iFatherId"].ToString()); int iChildIds = Convert.ToInt32(dics["iChildId"].ToString()); DateTime dates = DateTime.Now; string iBaseCodeLens = DBHelper.GetAllRDCode("0301", "" + dates + "", "admin"); sql = @"INSERT INTO dbo.RdRecord09
(ID,bRdFlag,cVouchType,cBusType,cSource,cBusCode,cWhCode,dDate,cCode,cRdCode, cHandler,cMemo,bTransFlag,cMaker,dVeriDate,bpufirst,biafirst,VT_ID,bIsSTQc,bOMFirst, bFromPreYear,bIsComplement,iDiscountTaxType,ireturncount, iverifystate,iswfcontrolled,dnmaketime,dnverifytime,bredvouch,cSourceLs,cDepCode)
SELECT @ID,'0','09','拆卸出库','拆卸',a.cAVCode,b.cWhCode,CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,null, @cHandler,@cMemo,'0',@cMaker,CONVERT(NVARCHAR(15),GETDATE(),23),'0','0', '85','0','0','0','0','0','0','0','0',GETDATE(),GETDATE(),'0',null,cDepCode from dbo.AssemVouch a inner join AssemVouchs b on a.id=b.id WHERE a.ID='" + head.ID + "' and bAVType='套件' ";
cmd.Parameters.Clear(); cmd.Parameters.Add(new SqlParameter("@ID", iFatherIds)); cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLens)); cmd.Parameters.Add(new SqlParameter("@cHandler", userInfo.UserName)); cmd.Parameters.Add(new SqlParameter("@cMemo", "")); cmd.Parameters.Add(new SqlParameter("@cMaker", userInfo.UserName)); cmd.Parameters.Add(new SqlParameter("@VT_ID", DEF_ID09)); cmd.CommandText = sql; try { cmd.ExecuteNonQuery(); } catch (Exception ex) { log.Error("生成其他出库单失败!拆卸单ID:" + head.ID + ";异常:" + ex.Message + ";SQL:\r\n" + sql); throw new Exception("程序异常,请联系开发人员!"); } #endregion
#region 3.5 其他出库单表体
#region 检验单号是否存在
sql = "select iAVQuantity,* from AssemVouchs where ID='" + head.ID + "' and bAVType='套件'"; DataTable dsh = DBHelper.SQlReturnData(sql, cmd); if (dsh != null && dsh.Rows.Count > 0) { cIWhCode = dsh.Rows[0]["cWhCode"].ToString(); } else { throw new Exception("单据ID:" + head.ID + "在U8中不存在!"); } //判断物料批号与现存量表批号是否一致、数量不能超过现存量物料数量
sql = @"SELECT cBatch,iQuantity from CurrentStock WHERE cInvCode='"+dsh.Rows[0]["cInvCode"].ToString() + "'AND cBatch=''and cWhCode='" + dsh.Rows[0]["cWhCode"].ToString()+ "'"; DataTable dtItem = DBHelper.SQlReturnData(sql, cmd); if (dtItem != null && dtItem.Rows.Count > 0) {
if (Convert.ToDecimal(dtItem.Rows[0]["iQuantity"].ToString()) < Convert.ToInt32(dsh.Rows[0]["iAVQuantity"].ToString())) { throw new Exception("物料条码的数量大于U8现存量物料数量,物料:" + dsh.Rows[0]["cInvCode"].ToString()); }
} else { throw new Exception("物料:" + dsh.Rows[0]["cInvCode"].ToString() + "在现存量表中不存在!"); } #endregion
#region 3.5.1 表体
sql = @"INSERT INTO dbo.rdrecords09
(AutoID,ID,cInvCode,iQuantity,iSOutQuantity,iSOutNum,iFlag,iTrIds,iNQuantity, cMassUnit,bLPUseFree,iRSRowNO,iOriTrackID,bCosting,bVMIUsed,iExpiratDateCalcu,iordertype,irowno,cbaccounter,cBatch,iPUnitCost,iPPrice) SELECT @AutoID,@ID,@iItemcode,@iQuantity,'0','0','0',a.autoID,iAVQuantity, '0','0','0','0','1','0','0','0',a.irowno,null,cAVBatch,iAVPCost,iAVPPrice from AssemVouchs a where ID=" + head.ID + @" and bAVType='套件' ;";
cmd.Parameters.Clear(); cmd.Parameters.Add(new SqlParameter("@AutoID", iChildIds)); cmd.Parameters.Add(new SqlParameter("@ID", iFatherIds)); cmd.Parameters.Add(new SqlParameter("@iItemcode", dsh.Rows[0]["cInvCode"].ToString())); cmd.Parameters.Add(new SqlParameter("@iQuantity", dsh.Rows[0]["iAVQuantity"].ToString())); //cmd.Parameters.Add(new SqlParameter("@iTrIds", head.AutoID));
//cmd.Parameters.Add(new SqlParameter("@irowno", Rd09irowno));
cmd.CommandText = sql; try { cmd.ExecuteNonQuery(); } catch (Exception ex) { log.Error("生成其他出库单表体失败!拆卸单ID:" + head.ID + ";异常:" + ex.Message + ";SQL:\r\n" + sql); throw new Exception("程序异常,请联系开发人员!"); }
sql = @"INSERT INTO dbo.rdrecords09sub
( AutoID , ID ,iBG_Ctrl , iBGSTSum ) values('" + iChildIds + "','" + iFatherIds + "',0,0)";
cmd.CommandText = sql; cmd.ExecuteNonQuery(); #endregion
//更新现存量
key09.cBustypeUN = "拆卸出库"; key09.cVouchTypeUN = "09"; key09.TableName = "IA_ST_UnAccountVouch09";
DBHelper.UpdateCurrentStock(cmd, dsh.Rows[0]["cInvCode"].ToString(), cIWhCode, "", -Convert.ToDecimal(dsh.Rows[0]["iAVQuantity"].ToString()), key09);
//DBHelper.UpdateIDandDID("rd", ErpName, head.list.Count(), cmd);
#endregion
sql = "select cWhCode from dbo.AssemVouchs where ID='" + head.ID + "' and bAVType='散件' group by cWhCode;"; DataTable dtChecks = DBHelper.SQlReturnData(sql, cmd); int iChildId = 0; int iFatherId = 0; VouchKey key08 = new VouchKey(); for (int i = 0; i < dtChecks.Rows.Count; i++) { #region 其他入库单表头
//取得out库单的默认显示模版
string DEF_ID08 = DBHelper.GetDefaultTemplate("0301", cmd); //取得采购入库单单据 表头ID,表体DID
var num = Bills.Count; Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "rd", "" + num + ""); iFatherId = Convert.ToInt32(dic["iFatherId"].ToString()); iChildId = Convert.ToInt32(dic["iChildId"].ToString()); DateTime date = DateTime.Now; string iBaseCodeLen = DBHelper.GetAllRDCode("0301", "" + date + "", "admin");
sql = @"INSERT INTO dbo.RdRecord08
(ID,bRdFlag,cVouchType,cBusType,cSource,cBusCode,cWhCode,dDate,cCode,cRdCode, cHandler,cMemo,bTransFlag,cMaker,dVeriDate,bpufirst,biafirst,VT_ID,bIsSTQc,bOMFirst, bFromPreYear,bIsComplement,iDiscountTaxType,ireturncount, iverifystate,iswfcontrolled,dnmaketime,dnverifytime,bredvouch,cSourceLs,cDepCode)
SELECT @ID,'1','08','拆卸入库','拆卸',a.cAVCode,@cWhCode,CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,null, @cHandler,@cMemo,'0',@cMaker,CONVERT(NVARCHAR(15),GETDATE(),23),'0','0', @VT_ID,'0','0','0','0','0','0','0','0',GETDATE(),GETDATE(),'0',null,cDepCode from dbo.AssemVouch a WHERE id='" + head.ID + "' ";
cmd.Parameters.Clear(); cmd.Parameters.Add(new SqlParameter("@ID", iFatherId)); //cmd.Parameters.Add(new SqlParameter("@cBusCode", head.cCode));
cmd.Parameters.Add(new SqlParameter("@cWhCode", dtChecks.Rows[0]["cWhCode"].ToString())); cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen)); cmd.Parameters.Add(new SqlParameter("@cHandler", userInfo.UserName)); cmd.Parameters.Add(new SqlParameter("@cMemo", "")); cmd.Parameters.Add(new SqlParameter("@cMaker", userInfo.UserName)); cmd.Parameters.Add(new SqlParameter("@VT_ID", DEF_ID08)); cmd.CommandText = sql; try { cmd.ExecuteNonQuery(); } catch (Exception ex) { log.Error("生成其他入库单表头失败!拆卸ID:" + head.ID + ";异常:" + ex.Message + ";SQL:\r\n" + sql); throw new Exception("程序异常,请联系开发人员!"); }
#endregion
sql = "select * from AssemVouchs where ID='" + head.ID + "' and bAVType='散件' and cWhCode='" + dtChecks.Rows[i]["cWhCode"].ToString() + "' "; DataTable ds = DBHelper.SQlReturnData(sql, cmd); for (int j = 0; j < ds.Rows.Count; j++) { #region 其他入库单表体
if (ds != null && ds.Rows.Count > 0) { cIWhCode = ds.Rows[j]["cWhCode"].ToString(); } else { throw new Exception("单据号:" + head.ID + "在U8中不存在!"); } sql = @"INSERT INTO dbo.rdrecords08
(AutoID,ID,cInvCode,iQuantity,iSOutQuantity,iSOutNum,iFlag,iTrIds,iNQuantity, cMassUnit,bLPUseFree,iRSRowNO,iOriTrackID,bCosting,bVMIUsed,iExpiratDateCalcu,iordertype,irowno,cbaccounter,cBatch,iPUnitCost,iPPrice) SELECT @AutoID,@ID,cInvCode,a.iAVQuantity,'0','0','0',a.AutoID,iAVQuantity, '0','0','0','0','1','0','0','0',a.irowno,null,cAVBatch,iAVPCost,iAVPPrice from AssemVouchs a where a.autoID=" + ds.Rows[j]["autoID"].ToString() + @" ;";
cmd.Parameters.Clear(); cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId)); cmd.Parameters.Add(new SqlParameter("@ID", iFatherId)); //cmd.Parameters.Add(new SqlParameter("@iQuantity", body.iQuantity));
//cmd.Parameters.Add(new SqlParameter("@iTrIds", body.AutoID));
//cmd.Parameters.Add(new SqlParameter("@irowno", Rd08irowno));
cmd.CommandText = sql; try { cmd.ExecuteNonQuery(); } catch (Exception ex) { log.Error("生成其他出库单表体失败!拆卸单单号:" + head.ID + ";异常:" + ex.Message + ";SQL:\r\n" + sql); throw new Exception("程序异常,请联系开发人员!"); }
//更新现存量
key08.cBustypeUN = "拆卸入库"; key08.cVouchTypeUN = "08"; key08.TableName = "IA_ST_UnAccountVouch08";
DBHelper.UpdateCurrentStock(cmd, ds.Rows[j]["cInvCode"].ToString(), cIWhCode, "", Convert.ToDecimal(ds.Rows[j]["iAVQuantity"].ToString()), key08); #endregion
iChildId--; } } cmd.Transaction.Commit(); } catch (Exception ex) { cmd.Transaction.Rollback(); log.Error(ex.Message); throw new Exception(ex.Message); } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } conn.Dispose(); } } ResultFlag = true; return ResultFlag; } /// <summary>
/// 记录日志
/// </summary>
/// <param name="Bills"></param>
private void LogInfo(List<ICSDisassemblyDoc> Bills) { string HeadList = string.Empty; string BodyList = string.Empty; foreach (ICSDisassemblyDoc head in Bills) { HeadList += "\r\n 表头主键ID:" + head.ID + ",用户:" + head.User + ",站点:" + head.WorkPoint +""; } log.Info(HeadList); log.Info(BodyList); } } }
|