You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
425 lines
22 KiB
425 lines
22 KiB
using ICSSoft.Common;
|
|
using ICSSoft.Entity;
|
|
using Newtonsoft.Json;
|
|
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
|
|
{
|
|
/// <summary>
|
|
/// 销售发货
|
|
/// </summary>
|
|
public class SalesDeliveryNotice
|
|
{
|
|
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"] ;
|
|
string bustype = string.Empty;
|
|
/// <summary>
|
|
/// 获取销售发货
|
|
/// </summary>
|
|
/// <param name="infos"></param>
|
|
/// <returns></returns>
|
|
public string Get(List<ICSSalesDeliveryNotice> infos)
|
|
{
|
|
|
|
List<ICSSalesDeliveryNotice> szJson = new List<ICSSalesDeliveryNotice>();
|
|
DataTable dt = null;
|
|
string json = "";
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
try
|
|
{
|
|
string sql = string.Empty;
|
|
foreach (ICSSalesDeliveryNotice info in infos)
|
|
{
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @" select a.DLID ,a.cDLCode ,a.cCusCode,c.cCusName,a.cDepCode ,
|
|
d.cDepName,b.cordercode ,a.cMaker ,a.dcreatesystime ,
|
|
b.AutoID ,b.irowno,b.cInvCode ,b.iQuantity ,b.iNum ,b.iSOsID
|
|
FROM dbo.DispatchList a
|
|
INNER JOIN dbo.DispatchLists b ON a.DLID = b.DLID
|
|
LEFT JOIN dbo.Customer c ON a.cCusCode = c.cCusCode
|
|
left join Department d on a.cDepCode=d.cDepCode ";
|
|
if (!string.IsNullOrWhiteSpace(info.SDNCode))
|
|
{
|
|
sql += " and a.cDLCode='{0}'";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(info.MTime.ToString()))
|
|
{
|
|
sql += " and ISNULL(a.dnmodifytime ,ISNULL(a.dverifydate , ISNULL(a.dnmodifytime , a.dcreatesystime )))>='{1}'";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(info.User))
|
|
{
|
|
sql += "and a.CMAKER='{2}'";
|
|
}
|
|
sql = string.Format(sql, info.SOCode, info.MTime, info.User);
|
|
dt = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dt.Rows.Count <= 0 || dt == null)
|
|
throw new Exception("销售发货单号:" + info.SOCode + ",无信息!");
|
|
json = JsonConvert.SerializeObject(dt);
|
|
}
|
|
cmd.Transaction.Commit();
|
|
return json;
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 创建销售发货
|
|
/// </summary>
|
|
/// <param name="Bills"></param>
|
|
/// <returns></returns>
|
|
public string CerateSalesDeliveryNotice(List<ICSSalesDeliveryNotice> Bills)
|
|
{
|
|
string msg = "";
|
|
DataTable dt = null;
|
|
//bool ResultFlag = false;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
VouchKey key = new VouchKey();
|
|
try
|
|
{
|
|
if (Bills.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
LogInfo(Bills);
|
|
foreach (ICSSalesDeliveryNotice head in Bills)
|
|
{
|
|
string sql = "";
|
|
|
|
#region 销售发货单表头
|
|
int num = 0;
|
|
foreach (ICSSalesDeliveryNotice heads in Bills)
|
|
{
|
|
num = heads.details.Count();
|
|
}
|
|
string SO_SOMain_VT_ID = DBHelper.GetDefaultTemplate("05", cmd);//目标账套销售订单VT_ID模板
|
|
DateTime time = DateTime.Now;
|
|
Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", "DelNote", "" + num + "");
|
|
int iFatherId = Convert.ToInt32(dic ["iFatherId"].ToString());
|
|
int iChildId = Convert.ToInt32(dic ["iChildId"] .ToString());
|
|
DateTime date = DateTime.Now;
|
|
string iBaseCodeLen = DBHelper.GetAllRDCode("05", "" + time + "", "admin");
|
|
sql = string.Format(@"INSERT INTO dbo.DispatchList
|
|
(@DLID , @cDLCode , @cVouchType , cSTCode ,CONVERT(NVARCHAR(50),GETDATE(),23)
|
|
, @cDepCode ,SBVID , @cSOCode , @cCusCode , cPayCode
|
|
, cSCCode, cCusOAddress , cexch_name , iExchRate , iTaxRate , 0 , bReturnFlag
|
|
, bFirst , cMemo , cVerifier , cMaker , iSale, (select cCusName from {0}.dbo.Customer where cCusCode='@cCusCode')
|
|
, iVTid , ufts , cBusType , cCloser , cAccounter , cCreChpName
|
|
, bIAFirst , ioutgolden , cgatheringplan , dCreditStart , dGatheringDate , icreditdays , bCredit
|
|
, caddcode , iverifystate , ireturncount , iswfcontrolled , icreditstate , bARFirst
|
|
, cmodifier , dmoddate , dverifydate , ccusperson , dcreatesystime , dverifysystime , dmodifysystime
|
|
, csvouchtype , iflowid , bsigncreate , bcashsale , cgathingcode , cChanger , cChangeMemo
|
|
, outid , bmustbook , cBookDepcode , cBookType , bSaUsed , bneedbill , baccswitchflag
|
|
, iPrintCount , ccuspersoncode , cSourceCode , bsaleoutcreatebill , cSysBarCode , cCurrentAuditor
|
|
, csscode , cinvoicecompany , fEBweight , cEBweightUnit , cEBExpressCode , iEBExpressCoID
|
|
, SeparateID , bNotToGoldTax , cEBTrnumber , cEBBuyer , cEBBuyerNote , ccontactname , cEBprovince
|
|
, cEBcity , cEBdistrict , cmobilephone , cInvoiceCusName , cweighter , dweighttime , cPickVouchCode
|
|
, cGCRouteCode)
|
|
SELECT
|
|
@DLID , @cDLCode , @cVouchType , cSTCode ,CONVERT(NVARCHAR(50),GETDATE(),23)
|
|
, @cDepCode , 0 , @cSOCode , @cCusCode , cPayCode
|
|
, cSCCode, cCusOAddress , cexch_name , iExchRate , iTaxRate , 0 , bReturnFlag
|
|
, 0 , cMemo , cVerifier , cMaker , 0 , (select cCusName from dbo.Customer where cCusCode='@cCusCode')
|
|
, @iVTid , ufts , cBusType , cCloser , NULL , NULL
|
|
, 0 , null , cgatheringplan , CONVERT(NVARCHAR(50),GETDATE(),23) ,NULL , NULL , 0
|
|
, caddcode , iverifystate , ireturncount , iswfcontrolled , icreditstate , 0
|
|
, NULL , NULL , NULL , ccusperson , CONVERT(NVARCHAR(50),GETDATE(),23) , dverifysystime , dmodifysystime
|
|
, csvouchtype , iflowid , 0 , 0 , cgathingcode , NULL , NULL
|
|
, outid , bmustbook , NULL , NULL , NULL , 0 , 0
|
|
, 0 , ccuspersoncode , NULL , 0 , cSysBarCode , cCurrentAuditor
|
|
, csscode , cinvoicecompany , NULL , NULL , NULL , NULL
|
|
, NULL , 0 , NULL , NULL , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , NULL , NULL , NULL , NULL
|
|
, NULL FROM SO_SOMain a
|
|
where a.cSOCode ='" + head.SOCode + "'");
|
|
cmd.Parameters.Clear();
|
|
cmd.Parameters.Add(new SqlParameter("@DLID", iFatherId));
|
|
cmd.Parameters.Add(new SqlParameter("@cDLCode", iBaseCodeLen));
|
|
cmd.Parameters.Add(new SqlParameter("@cVouchType","05"));
|
|
cmd.Parameters.Add(new SqlParameter("@cDepCode", head.DepCode));
|
|
cmd.Parameters.Add(new SqlParameter("@cSOCode", head.SOCode));
|
|
cmd.Parameters.Add(new SqlParameter("@cCusCode", head.CusCode));
|
|
cmd.Parameters.Add(new SqlParameter("@iVTid", SO_SOMain_VT_ID));
|
|
//cmd.Parameters.Add(new SqlParameter("@dDate", data.dMate));
|
|
cmd.CommandText = sql;
|
|
try
|
|
{
|
|
int count = cmd.ExecuteNonQuery();
|
|
if (count <= 0)
|
|
{
|
|
log.Error("生成销售出库单表头失败,受影响行数<=0;");
|
|
throw new Exception("生成销售出库单表头失败,受影响行数<=0;");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("生成销售出库单表头失败!销售订单号:" + head.SDNCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
throw new Exception("生成销售出库单表头失败!销售订单号:" + head.SDNCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
}
|
|
#endregion
|
|
|
|
#region 销售出库单表体
|
|
foreach (ICSSalesDeliveryNotices body in head.details)
|
|
{
|
|
#region 销售顶订单表体
|
|
sql = string.Format(@"INSERT INTO dbo.DispatchLists
|
|
(AutoID , DLID , iCorID , cWhCode , cInvCode , iQuantity , iNum
|
|
, iQuotedPrice , iUnitPrice , iTaxUnitPrice , iMoney , iTax , iSum , iDisCount , iNatUnitPrice
|
|
, iNatMoney , iNatTax , iNatSum , iNatDisCount , iSettleNum , iSettleQuantity , iBatch , cBatch
|
|
, bSettleAll , cMemo , iTB , dvDate , TBQuantity , TBNum , iSOsID , iDLsID
|
|
, KL , KL2 , cInvName , iTaxRate
|
|
, fOutQuantity , fOutNum , cItemCode , cItem_class , fSaleCost , fSalePrice , cVenAbbName
|
|
, cItemName , cItem_CName
|
|
, bIsSTQc , iInvExchRate , cUnitID , cCode , iRetQuantity , fEnSettleQuan , fEnSettleSum , iSettlePrice , dMDate , bGsp
|
|
, cGspState , cSoCode , cCorCode , iPPartSeqID , iPPartID , iPPartQty , cContractID , cContractTagCode , cContractRowGuid
|
|
, iMassDate , cMassUnit , bQANeedCheck , bQAUrgency , bQAChecking , bQAChecked , iQAQuantity , iQANum
|
|
, cCusInvCode , cCusInvName , fsumsignquantity , fsumsignnum , cbaccounter , bcosting , cordercode
|
|
, iorderrowno , fcusminprice , icostquantity , icostsum , ispecialtype , cvmivencode , iexchsum
|
|
, imoneysum , irowno , frettbquantity , fretsum , iExpiratDateCalcu , dblPreExchMomey , dblPreMomey , idemandtype
|
|
, cdemandcode , cdemandmemo , cdemandid , idemandseq , cvencode , cReasonCode , cInvSN , iInvSNCount , bneedsign
|
|
, bsignover , bneedloss , flossrate , frlossqty , fulossqty , isettletype , crelacuscode , cLossMaker
|
|
, dLossDate , dLossTime , icoridlsid , fretoutqty , body_outid , fVeriBillQty
|
|
, fVeriBillSum , fVeriRetQty , fVeriRetSum , fLastSettleQty
|
|
, fLastSettleSum , cBookWhcode , cInVouchType , cPosition , fretqtywkp , fretqtyykp , frettbqtyykp
|
|
, fretsumykp , dkeepdate , cSCloser , isaleoutid , bsaleprice , bgift , bmpforderclosed
|
|
, cbSysBarCode , fxjquantity , fxjnum
|
|
, bIAcreatebill , cParentCode , cChildCode , fchildqty , fchildrate , iCalcType , fappretwkpqty , fappretwkpsum
|
|
, fappretykpqty , fappretykpsum , fappretwkptbqty , fappretykptbqty , irtnappid , crtnappcode , fretailrealamount
|
|
, fretailsettleamount , cFactoryCode , GCSourceId , GCSourceIds , cConfirmer , dConfirmDate )
|
|
SELECT
|
|
@AutoID , @DLID , @cWhCode , @cInvCode , @iQuantity , @iNum
|
|
, iQuotedPrice , iUnitPrice , iTaxUnitPrice , iMoney , iTax , iSum , iDisCount , iNatUnitPrice
|
|
, iNatMoney , iNatTax , iNatSum , iNatDisCount , NULL , NULL
|
|
, 0 , cMemo , 0 , NULL , 0 , NULL , iSOsID , NULL
|
|
, KL , KL2 , cInvName , iTaxRate
|
|
, fOutQuantity , fOutNum , cItemCode , cItem_class , fSaleCost , fSalePrice ,NUll
|
|
, cItemName , cItem_CName
|
|
, 0 , iInvExchRate , cUnitID , NULL , 0 , 0 , 0 , 0 , NULL , 0
|
|
, NULL , @cSoCode , NULL , iPPartSeqID , iPPartID , iPPartQty , cContractID , cContractTagCode , cContractRowGuid
|
|
, NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0
|
|
, cCusInvCode , cCusInvName , 0 , 0 , NULL , 0 , @cordercode
|
|
, NULL , fcusminprice , icostquantity , icostsum , NULL , NULL , iexchsum
|
|
, imoneysum , @irowno , 0 , 0 , NULL , 0 , 0 , NULL
|
|
, NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , 0 , 0 , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , NULL , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , isaleoutid , 1 , 0 , 0
|
|
, cbSysBarCode , NULL , NULL
|
|
, 1 , NULL , NULL , NULL , NULL , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , NULL , NULL , NULL , NULL
|
|
, NULL , NULL , NULL , NULL , NULL , NULL FROM SO_SODetails a
|
|
where a.AutoID ='" + body.SODetailID + "'");
|
|
cmd.Parameters.Clear();
|
|
cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
|
|
cmd.Parameters.Add(new SqlParameter("@DLID", iFatherId));
|
|
cmd.Parameters.Add(new SqlParameter("@cInvCode", body.InvCode));
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@iQuantity", body.Quantity));
|
|
cmd.Parameters.Add(new SqlParameter("@iNum",body.Amount));
|
|
cmd.Parameters.Add(new SqlParameter("@cSoCode", head.SOCode));
|
|
cmd.Parameters.Add(new SqlParameter("@cordercode", head.SOCode));
|
|
cmd.Parameters.Add(new SqlParameter("@irowno", body.Sequence));
|
|
//cmd.Parameters.Add(new SqlParameter("@dDate", data.dMate));
|
|
cmd.CommandText = sql;
|
|
try
|
|
{
|
|
int count = cmd.ExecuteNonQuery();
|
|
if (count <= 0)
|
|
{
|
|
log.Error("生成销售出库单表体失败,受影响行数<=0;");
|
|
throw new Exception("生成销售出库单表体失败,受影响行数<=0;");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("生成销售出库单表体失败!销售订单号:" + head.SOCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
throw new Exception("生成销售出库单表体失败!销售订单号:" + head.SOCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
}
|
|
#endregion
|
|
iChildId--;
|
|
}
|
|
#endregion
|
|
sql = @"
|
|
select a.DLID ,a.cDLCode ,a.cCusCode,c.cCusName,a.cDepCode ,
|
|
d.cDepName,b.cordercode ,a.cMaker ,a.dcreatesystime ,
|
|
b.AutoID ,b.irowno,b.cInvCode ,b.iQuantity ,b.iNum ,b.iSOsID
|
|
FROM dbo.DispatchList a
|
|
INNER JOIN dbo.DispatchLists b ON a.DLID = b.DLID
|
|
LEFT JOIN dbo.Customer c ON a.cCusCode = c.cCusCode
|
|
left join Department d on a.cDepCode=d.cDepCode WHERE a.DLID = '{0}' ";
|
|
sql = string.Format(sql, iFatherId);
|
|
dt = DBHelper.SQlReturnData(sql, cmd);
|
|
|
|
}
|
|
msg = JsonConvert.SerializeObject(dt);
|
|
cmd.Transaction.Commit();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
cmd.Transaction.Rollback();
|
|
log.Error(ex.Message);
|
|
throw new Exception(ex.Message);
|
|
}
|
|
return msg;
|
|
}
|
|
/// <summary>
|
|
/// 审核销售发货
|
|
/// </summary>
|
|
/// <param name="infos"></param>
|
|
/// <returns></returns>
|
|
public string Approve(List<ICSSalesDeliveryNotice> infos)
|
|
{
|
|
List<ICSSalesDeliveryNotice> szJson = new List<ICSSalesDeliveryNotice>();
|
|
DataTable dt = null;
|
|
string json = "";
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
try
|
|
{
|
|
string sql = string.Empty;
|
|
foreach (ICSSalesDeliveryNotice info in infos)
|
|
{
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @"UPDATE DispatchList SET cMaker ='" + info.User + @"' ,
|
|
dverifysystime =CONVERT(VARCHAR(50),GETDATE(),112),dverifydate =GETDATE() WHERE DLID='{0}'";
|
|
sql = string.Format(sql, info.ID);
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
|
|
}
|
|
cmd.Transaction.Commit();
|
|
return json;
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 删除销售发货
|
|
/// </summary>
|
|
/// <param name="infos"></param>
|
|
/// <returns></returns>
|
|
public string Delete(List<ICSSalesDeliveryNotice> infos)
|
|
{
|
|
List<ICSSalesDeliveryNotice> szJson = new List<ICSSalesDeliveryNotice>();
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
try
|
|
{
|
|
string sql = string.Empty;
|
|
foreach (ICSSalesDeliveryNotice info in infos)
|
|
{
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @" DELETE DispatchList WHERE DLID={0}";
|
|
sql = string.Format(sql, info.ID);
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "未查询到对应数据!");
|
|
}
|
|
cmd.Transaction.Commit();
|
|
return res;
|
|
;
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// 记录日志
|
|
/// </summary>
|
|
/// <param name="Bills"></param>
|
|
private void LogInfo(List<ICSSalesDeliveryNotice> Bills)
|
|
{
|
|
string HeadList = string.Empty;
|
|
string BodyList = string.Empty;
|
|
foreach (ICSSalesDeliveryNotice head in Bills)
|
|
{
|
|
HeadList += "\r\n 表头主键ID:" + head.ID + ",用户:" + head.User;
|
|
foreach (ICSSalesDeliveryNotices body in head.details)
|
|
{
|
|
BodyList += "\r\n 表体主键ID:数量:" + body.Quantity;
|
|
}
|
|
}
|
|
log.Info(HeadList);
|
|
log.Info(BodyList);
|
|
}
|
|
|
|
}
|
|
}
|