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.
768 lines
42 KiB
768 lines
42 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 SalesShipmentDoc
|
|
{
|
|
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"];
|
|
private static string CRNALL = System.Configuration.ConfigurationManager.AppSettings["SaleSCRDNAME"];
|
|
string bustype = string.Empty;
|
|
/// <summary>
|
|
/// 获取销售出库单
|
|
/// </summary>
|
|
/// <param name="infos"></param>
|
|
/// <returns></returns>
|
|
public string Get(List<ICSSalesShipmentDoc> infos)
|
|
{
|
|
|
|
List<ICSSalesShipmentDoc> szJson = new List<ICSSalesShipmentDoc>();
|
|
DataTable dt = null;
|
|
DataTable dtNew = null;
|
|
string connS = "";
|
|
string json = "";
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new SqlConnection();
|
|
SqlCommand cmd = new SqlCommand();
|
|
string sql = string.Empty;
|
|
|
|
|
|
List<string> result = infos.Select(t => t.WorkPoint).Distinct().ToList();
|
|
|
|
|
|
foreach (string WorkPoint in result)
|
|
{
|
|
try
|
|
{
|
|
connS = string.Format(connString, WorkPoint);
|
|
conn = new System.Data.SqlClient.SqlConnection(connS);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
foreach (ICSSalesShipmentDoc info in infos)
|
|
{
|
|
if (WorkPoint != info.WorkPoint)
|
|
continue;
|
|
|
|
ICSUserInfo userInfo = new ICSUserInfo();
|
|
userInfo = DBHelper.GetPersonInfo(info.User, cmd);
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @" select a.ID,a.cCode,a.cCusCode,c.cCusName,a.cWhCode,d.cWhName,e.cordercode ,a.cMaker ,a.dnmaketime ,a.cHandler ,a.dnverifytime ,
|
|
b.AutoID,b.iRSRowNO ,b.cInvCode ,b.iQuantity ,b.iNum,e.AutoID
|
|
from rdrecord32 a
|
|
inner join rdrecords32 b on a.ID=b.ID
|
|
left join DispatchLists e on a.cDLCode=e.DLID
|
|
left join Customer c on a.cCusCode=c.cCusCode
|
|
left join Warehouse d on a.cWhCode=d.cWhCode WHERE 1=1 ";
|
|
if (!string.IsNullOrWhiteSpace(info.SSDCode))
|
|
{
|
|
sql += " and a.cCode='{0}'";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(info.MTime.ToString()))
|
|
{
|
|
sql += " and ISNULL(a.dnmodifytime ,ISNULL(a.dnverifytime , ISNULL(a.dnmodifytime , a.dnmaketime )))>='{1}'";
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(info.User))
|
|
{
|
|
sql += "and a.CMAKER='{2}'";
|
|
}
|
|
sql = string.Format(sql, info.SSDCode, info.MTime, userInfo.UserName);
|
|
dt = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dt.Rows.Count <= 0 || dt == null)
|
|
throw new Exception("销售出库单号:" + info.SSDCode + ",无信息!");
|
|
if (dtNew == null)
|
|
dtNew = dt;
|
|
else
|
|
dtNew.Merge(dt);
|
|
|
|
}
|
|
cmd.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (cmd.Transaction != null)
|
|
cmd.Transaction.Rollback();
|
|
log.Error(ex.Message);
|
|
throw new Exception(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
if (conn.State == ConnectionState.Open)
|
|
{
|
|
conn.Close();
|
|
}
|
|
conn.Dispose();
|
|
}
|
|
}
|
|
json = JsonConvert.SerializeObject(dtNew);
|
|
return json;
|
|
|
|
}
|
|
/// <summary>
|
|
/// 创建销售出库单
|
|
/// </summary>
|
|
/// <param name="Bills"></param>
|
|
/// <returns></returns>
|
|
public string CreateSalesShipmentDoc(List<ICSSalesShipmentDoc> Bills)
|
|
{
|
|
string sql = "";
|
|
string msg = "";
|
|
|
|
|
|
DataSet ds = null;
|
|
string connS = "";
|
|
int iFatherId = 0;
|
|
string status = "";
|
|
int iChildId = 0;
|
|
string iFatherIdTwo = "";
|
|
//bool ResultFlag = false;
|
|
SqlConnection conn = new SqlConnection();
|
|
SqlCommand cmd = new SqlCommand();
|
|
VouchKey key = new VouchKey();
|
|
if (Bills.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
LogInfo(Bills);
|
|
|
|
List<string> result = Bills.Select(t => t.WorkPoint).Distinct().ToList();
|
|
|
|
|
|
foreach (string WorkPoint in result)
|
|
{
|
|
iFatherIdTwo = "";
|
|
try
|
|
{
|
|
connS = string.Format(connString, WorkPoint);
|
|
conn = new System.Data.SqlClient.SqlConnection(connS);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
foreach (ICSSalesShipmentDoc head in Bills)
|
|
{
|
|
if (WorkPoint != head.WorkPoint)
|
|
continue;
|
|
|
|
if (!DBHelper.IsInventoryConsolidation(cmd, head.WorkPoint))
|
|
throw new Exception("U8正在整理现存量,请稍后再试");
|
|
|
|
ICSUserInfo userInfo = new ICSUserInfo();
|
|
userInfo = DBHelper.GetPersonInfo(head.User, cmd);
|
|
|
|
string[] ss = head.WorkPoint.Split('_');
|
|
ERPDB = ss[1];
|
|
#region 检查 发货单状态
|
|
sql = @"SELECT a.DLID,a.cBusType,c.cRdCode,a.cSTCode,b.AutoID,b.irowno,a.cPersonCode,a.cCusCode,b.iDLsID,
|
|
a.cMemo,a.cShipAddress,a.cDepCode,cCusInvName,b.cBatch,a.caddcode,a.cCloser,a.cVerifier FROM dbo.DispatchList a INNER JOIN
|
|
dbo.DispatchLists b ON a.DLID=b.DLID
|
|
LEFT JOIN dbo.SaleType c ON c.cSTCode=a.cSTCode
|
|
WHERE a.cDLCode ='" + head.SDNCode + "'";
|
|
cmd.CommandText = sql;
|
|
DataTable dtDisCheck = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dtDisCheck != null && dtDisCheck.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in dtDisCheck.Rows)
|
|
{
|
|
if (!string.IsNullOrEmpty(item["cCloser"].ToString()))
|
|
{
|
|
log.Info("DLID:" + head.ID);
|
|
throw new Exception("ERP发货单已关闭,无法发货!发货单号:" + head.details);
|
|
}
|
|
}
|
|
bustype = dtDisCheck.Rows[0]["cBusType"].ToString();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("销售发货单单号:" + head.ID + "在ERP内不存在!");
|
|
}
|
|
#endregion
|
|
|
|
#region 回写发货单字段
|
|
sql = @"select (case when cvalue='TRUE' THEN 'SA' ELSE 'ST' END) status FROM AccInformation WHERE cSysID='ST' AND cName='BSAcreat'";
|
|
cmd.CommandText = sql;
|
|
dtDisCheck = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dtDisCheck != null && dtDisCheck.Rows.Count > 0)
|
|
{
|
|
|
|
status = dtDisCheck.Rows[0]["status"].ToString();
|
|
}
|
|
else
|
|
{
|
|
status = "";
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 检验发货单数量
|
|
|
|
foreach (ICSSalesShipmentDocs body in head.details)
|
|
{
|
|
sql = "SELECT isnull(fOutQuantity,0) as fOutQuantity,ABS(iQuantity) as iQuantity FROM dbo.DispatchLists WHERE AutoID='" + body.SDNDetailID + "'";
|
|
DataTable dtfOutQty = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dtfOutQty != null && dtfOutQty.Rows.Count > 0)
|
|
{
|
|
decimal fOutQty = Convert.ToDecimal(dtfOutQty.Rows[0]["fOutQuantity"]);
|
|
decimal iQuantity = Convert.ToDecimal(dtfOutQty.Rows[0]["iQuantity"]);
|
|
if (fOutQty + body.Quantity > iQuantity)
|
|
{
|
|
throw new Exception("出库数量超过发货单表体可出库数量!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("发货单表体不存在!");
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 销售出库单表头
|
|
int num = 0;
|
|
|
|
num = head.details.Count();
|
|
|
|
DateTime time = DateTime.Now;
|
|
|
|
|
|
string[] dd = CRNALL.Split('~');
|
|
string crdname = dd[0];
|
|
string carname = dd[1];
|
|
string surface = dd[2];
|
|
string cardnewcode = DBHelper.GetCardNumber(carname, cmd);
|
|
Dictionary<string, int> dic = DBHelper.GetAllCode("" + ERPDB + "", surface, "" + num + "", head.WorkPoint, cmd);
|
|
iFatherId = Convert.ToInt32(dic["iFatherId"].ToString());
|
|
iChildId = Convert.ToInt32(dic["iChildId"].ToString());
|
|
DateTime date = DateTime.Now;
|
|
string DEF_ID = DBHelper.GetDefaultTemplate(cardnewcode, cmd);
|
|
string cRDcode = DBHelper.GetRDCode(crdname, cmd);
|
|
string iBaseCodeLen = DBHelper.GetAllRDCode(cardnewcode, "" + time + "", "admin", cRDcode, head.WorkPoint, cmd);
|
|
|
|
sql = @"INSERT INTO dbo.rdrecord32
|
|
( ID ,bRdFlag ,cVouchType ,cBusType ,cSource ,cBusCode ,cWhCode ,
|
|
dDate ,cCode ,cRdCode ,cDepCode ,cPersonCode ,cSTCode ,cCusCode ,
|
|
cDLCode ,cHandler ,cMemo ,bTransFlag ,cMaker ,cDefine1 ,cDefine2 ,
|
|
cDefine3 ,cDefine4 ,cDefine5 ,cDefine6 ,cDefine7 ,cDefine8 ,cDefine9 ,
|
|
cDefine10 ,dVeriDate ,bpufirst ,biafirst ,VT_ID ,bIsSTQc ,cDefine11 ,
|
|
cDefine12 ,cDefine13 ,cDefine14 ,cDefine15 ,cDefine16 ,cShipAddress ,
|
|
caddcode ,bOMFirst ,bFromPreYear ,bIsComplement ,iDiscountTaxType ,
|
|
ireturncount ,iverifystate ,iswfcontrolled ,dnmaketime ,dnverifytime ,
|
|
iPrintCount ,cinvoicecompany)
|
|
SELECT @ID,0,32,a.cBusType,'发货单',a.cDLCode,@cWhCode,
|
|
CONVERT(NVARCHAR(15),GETDATE(),23),@cCode,@cRdCode,a.cDepCode,a.cPersonCode,a.cSTCode,a.cCusCode,
|
|
a.DLID,@cHandler,a.cMemo,0,@cMaker,a.cDefine1,a.cDefine2,
|
|
a.cDefine3,a.cDefine4,a.cDefine5,a.cDefine6,a.cDefine7,a.cDefine8,a.cDefine9,
|
|
a.cDefine10,CONVERT(NVARCHAR(15),GETDATE(),23),0,0,@VT_ID,0,a.cDefine11,
|
|
a.cDefine12,a.cDefine13,a.cDefine14,a.cDefine15,a.cDefine16,a.cShipAddress,
|
|
a.caddcode,null,0,0,0,
|
|
0,0,0,GETDATE(),GETDATE(),
|
|
0,a.cinvoicecompany
|
|
FROM dbo.DispatchList a WHERE a.cDLCode ='" + head.SDNCode + "'";
|
|
cmd.Parameters.Clear();
|
|
cmd.Parameters.Add(new SqlParameter("@ID", iFatherId));
|
|
cmd.Parameters.Add(new SqlParameter("@cWhCode", head.WHCode));
|
|
cmd.Parameters.Add(new SqlParameter("@cCode", iBaseCodeLen));
|
|
cmd.Parameters.Add(new SqlParameter("@cDepCode", ""));
|
|
cmd.Parameters.Add(new SqlParameter("@cHandler", userInfo.UserName));
|
|
cmd.Parameters.Add(new SqlParameter("@cMaker", userInfo.UserName));
|
|
cmd.Parameters.Add(new SqlParameter("@VT_ID", DEF_ID));
|
|
cmd.Parameters.Add(new SqlParameter("@cRdCode", cRDcode));
|
|
//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.SSDCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
throw new Exception("生成销售出库单表头失败!销售出库单号:" + head.SSDCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
}
|
|
#endregion
|
|
|
|
#region 销售出库单表体
|
|
foreach (ICSSalesShipmentDocs body in head.details)
|
|
{
|
|
|
|
int fotnum = 0;
|
|
if (head.IsFot == true)
|
|
{
|
|
sql = @"SELECT bService from Inventory WHERE cInvCode='" + body.InvCode + "'";
|
|
|
|
DataTable dtItem = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dtItem != null && dtItem.Rows.Count > 0)
|
|
{
|
|
|
|
if (dtItem.Rows[0]["bService"].ToString() == "True")
|
|
{
|
|
fotnum++;
|
|
#region 回写销售订单累计发货数量,回写销售发货单累计出库数量
|
|
sql = @"UPDATE a SET a.foutquantity=ISNULL(a.foutquantity,0)+" + body.Quantity + @"
|
|
FROM dbo.SO_SODetails a LEFT JOIN dbo.DispatchLists b ON a.iSOsID=b.iSOsID
|
|
WHERE b.AutoID='" + body.SDNDetailID + "'";
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售订单累计发货数量失败!");
|
|
|
|
sql = @"Update DispatchList set cSaleOut='" + status + "' where DLID=(select DLID from DispatchLists where AutoID='" + body.SDNDetailID + @"')
|
|
Update DispatchLists set fOutQuantity=isnull(fOutQuantity,0)+" + body.Quantity + " where AutoID='" + body.SDNDetailID + "' ";
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售发货单累计出库数量失败!");
|
|
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
#region 回写销售订单累计发货数量,回写销售发货单累计出库数量
|
|
sql = @"UPDATE a SET a.foutquantity=ISNULL(a.foutquantity,0)+" + body.Quantity + @"
|
|
FROM dbo.SO_SODetails a LEFT JOIN dbo.DispatchLists b ON a.iSOsID=b.iSOsID
|
|
WHERE b.AutoID='" + body.SDNDetailID + "'";
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售订单累计发货数量失败!");
|
|
|
|
sql = @"Update DispatchList set cSaleOut='" + status + "' where DLID=(select DLID from DispatchLists where AutoID='" + body.SDNDetailID + @"')
|
|
Update DispatchLists set fOutQuantity=isnull(fOutQuantity,0)+" + body.Quantity + " where AutoID='" + body.SDNDetailID + "' ";
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售发货单累计出库数量失败!");
|
|
|
|
#endregion
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
#region 回写销售订单累计发货数量,回写销售发货单累计出库数量
|
|
sql = @"UPDATE a SET a.foutquantity=ISNULL(a.foutquantity,0)+" + body.Quantity + @"
|
|
FROM dbo.SO_SODetails a LEFT JOIN dbo.DispatchLists b ON a.iSOsID=b.iSOsID
|
|
WHERE b.AutoID='" + body.SDNDetailID + "'";
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售订单累计发货数量失败!");
|
|
|
|
sql = @"Update DispatchList set cSaleOut='" + status + "' where DLID=(select DLID from DispatchLists where AutoID='" + body.SDNDetailID + @"')
|
|
Update DispatchLists set fOutQuantity=isnull(fOutQuantity,0)+" + body.Quantity + " where AutoID='" + body.SDNDetailID + "' ";
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售发货单累计出库数量失败!");
|
|
|
|
#endregion
|
|
}
|
|
if (fotnum != 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
string Batch = "";
|
|
string socode = "";
|
|
sql = @" SELECT d.cSOCode,a.cBatch
|
|
FROM dbo.DispatchLists a
|
|
INNER JOIN dbo.DispatchList b ON a.DLID=b.DLID
|
|
LEFT JOIN dbo.SO_SODetails c ON a.iSOsID=c.iSOsID
|
|
LEFT JOIN dbo.SO_SOMain d ON c.ID=d.ID WHERE a.AutoID='" + body.SDNDetailID + "'";
|
|
DataTable dtfOutQty = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dtfOutQty != null && dtfOutQty.Rows.Count > 0)
|
|
{
|
|
socode = dtfOutQty.Rows[0]["cSOCode"].ToString();
|
|
Batch = dtfOutQty.Rows[0]["cBatch"].ToString();
|
|
}
|
|
else
|
|
socode = "";
|
|
|
|
//if (head.IsReturn == "1")
|
|
//{
|
|
// body.iQuantity = -body.iQuantity;
|
|
//}
|
|
//else
|
|
//{
|
|
//判断物料批号与现存量表批号是否一致、数量不能超过现存量物料数量
|
|
//sql = @"SELECT cBatch,iQuantity from CurrentStock WHERE cInvCode='" + body.InvCode + "'AND cBatch='" + "" + "'and cWhCode='" + head.WHCode + "'";
|
|
sql = @"SELECT cBatch,iQuantity from CurrentStock WHERE cInvCode='" + body.InvCode + "'AND cBatch='" + body.BatchCode + @"'AND cFree1='" + body.cFree1 + @"' AND cFree2='" + body.cFree2 + @"' AND cFree3='" + body.cFree3 + @"' AND cFree4='" + body.cFree4 + @"' AND cFree5='" + body.cFree5 + @"' AND cFree6='" + body.cFree6 + @"' AND cFree7='" + body.cFree7 + @"' AND cFree8='" + body.cFree8 + @"' AND cFree9='" + body.cFree9 + @"' AND cFree10='" + body.cFree10 + @"' and cWhCode='" + head.WHCode + "'";
|
|
|
|
DataTable dtItem1 = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dtItem1 != null && dtItem1.Rows.Count > 0)
|
|
{
|
|
//if (!dtItem.Rows[0]["cBatch"].ToString().Equals(body.cBatch))
|
|
//{
|
|
// throw new Exception("物料条码的批号与U8现存量物料批号不一致,物料:" + body.cInvCode);
|
|
//}
|
|
if (Convert.ToDecimal(dtItem1.Rows[0]["iQuantity"].ToString()) < body.Quantity)
|
|
{
|
|
throw new Exception("物料条码的数量大于U8现存量物料数量,物料:" + body.InvCode);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("物料:" + body.InvCode + "在现存量表中不存在!");
|
|
}
|
|
//}
|
|
sql = @"INSERT INTO dbo.rdrecords32
|
|
( AutoID ,ID ,cInvCode ,iQuantity ,cBatch ,iFlag ,iNum,
|
|
cDefine22 ,cDefine23 ,cDefine24 ,cDefine25 ,cDefine26 ,
|
|
cDefine27 ,cItem_class ,cItemCode ,iDLsID ,iNQuantity ,
|
|
cDefine28 ,cDefine29 ,cDefine30 ,cDefine31 ,cDefine32 ,
|
|
cDefine33 ,cDefine34 ,cDefine35 ,cDefine36 ,cDefine37 ,
|
|
bLPUseFree ,iRSRowNO ,iOriTrackID ,ccusinvcode,ccusinvname,bCosting ,bVMIUsed ,
|
|
cbdlcode ,iExpiratDateCalcu ,iorderdid ,iordertype ,
|
|
iordercode ,iorderseq ,ipesodid ,ipesotype ,cpesocode ,
|
|
ipesoseq ,isodid ,isotype ,csocode ,isoseq ,irowno ,
|
|
bIAcreatebill ,bsaleoutcreatebill ,isaleoutid ,bneedbill,iposflag,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10 )
|
|
SELECT @AutoID,@ID,@cInvCode,@iQuantity,@cBatch,0,@iNum,
|
|
a.cDefine22,a.cDefine23,a.cDefine24,a.cDefine25,a.cDefine26,
|
|
a.cDefine27,a.cItem_class,@cItemCode,a.iDLsID,a.iQuantity,
|
|
a.cDefine28,a.cDefine29,a.cDefine30,a.cDefine31,a.cDefine32,
|
|
a.cDefine33,a.cDefine34,a.cDefine35,a.cDefine36,a.cDefine37,
|
|
0,0,0,a.cCusInvCode,a.cCusInvName,1,0,
|
|
b.cDLCode,0,a.iSOsID,1,
|
|
d.cSOCode,c.iRowNo,a.iSOsID,1,d.cSOCode,
|
|
1,a.iSOsID,1,d.cSOCode,c.iRowNo,@irowno,
|
|
1,1,@AutoID,1,null,@cFree1,@cFree2,@cFree3,@cFree4,@cFree5,@cFree6,@cFree7,@cFree8,@cFree9,@cFree10
|
|
FROM dbo.DispatchLists a
|
|
INNER JOIN dbo.DispatchList b ON a.DLID=b.DLID
|
|
LEFT JOIN dbo.SO_SODetails c ON a.iSOsID=c.iSOsID
|
|
LEFT JOIN dbo.SO_SOMain d ON c.ID=d.ID WHERE a.AutoID='" + body.SDNDetailID + "'";
|
|
cmd.Parameters.Clear();
|
|
cmd.Parameters.Add(new SqlParameter("@AutoID", iChildId));
|
|
cmd.Parameters.Add(new SqlParameter("@ID", 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.ToString("0.00")));
|
|
cmd.Parameters.Add(new SqlParameter("@cBatch", body.BatchCode));
|
|
cmd.Parameters.Add(new SqlParameter("@cItemCode", body.ProjectCode));
|
|
cmd.Parameters.Add(new SqlParameter("@irowno", body.Sequence));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree1", body.cFree1));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree2", body.cFree2));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree3", body.cFree3));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree4", body.cFree4));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree5", body.cFree5));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree6", body.cFree6));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree7", body.cFree7));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree8", body.cFree8));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree9", body.cFree9));
|
|
cmd.Parameters.Add(new SqlParameter("@cFree10", body.cFree10));
|
|
cmd.CommandText = sql;
|
|
try
|
|
{
|
|
int count = cmd.ExecuteNonQuery();
|
|
if (count <= 0)
|
|
{
|
|
log.Error("生成销售出库单表体失败,受影响行数<=0;");
|
|
throw new Exception("生成销售出库单表体失败,受影响行数<=0;");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("生成销售出库单表体失败!销售出库单号:" + head.SSDCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
throw new Exception("生成销售出库单表体失败!销售出库单号:" + head.SSDCode + ";异常:" + ex.Message + ";SQL:\r\n" + sql, ex);
|
|
}
|
|
#region 回写销售订单累计发货数量,回写销售发货单累计出库数量
|
|
// sql = @"UPDATE a SET a.foutquantity=ISNULL(a.foutquantity,0)+" + body.Quantity + @"
|
|
// FROM dbo.SO_SODetails a LEFT JOIN dbo.DispatchLists b ON a.iSOsID=b.iSOsID
|
|
// WHERE b.AutoID='" + body.SDNDetailID + "'";
|
|
// DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售订单累计发货数量失败!");
|
|
|
|
// sql = @"Update DispatchList set cSaleOut='" + status + "' where DLID=(select DLID from DispatchLists where AutoID='" + body.SDNDetailID + @"')
|
|
// Update DispatchLists set fOutQuantity=isnull(fOutQuantity,0)+" + body.Quantity + " where AutoID='" + body.SDNDetailID + "' ";
|
|
// DBHelper.CmdExecuteNonQuery(sql, cmd, "回写销售发货单累计出库数量失败!");
|
|
|
|
sql = @"select isnull(fOutQuantity,0)fOutQuantity,isnull(iQuantity,0)iQuantity,ISNULL(iNum, 0)iNum,ISNULL(NiNum, 0)NiNum,ISNULL(iNum, 0)-ISNULL(NiNum, 0) SiNum from DispatchLists a
|
|
LEFT JOIN (select sum(iNum) NiNum,iDLsID from rdrecords32 GROUP BY iDLsID) b on a.iDLsID=b.iDLsID
|
|
where a.AutoID='" + body.SDNDetailID + "'";
|
|
dtDisCheck = DBHelper.SQlReturnData(sql, cmd);
|
|
if (dtDisCheck != null && dtDisCheck.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in dtDisCheck.Rows)
|
|
{
|
|
if (Convert.ToDecimal(item["fOutQuantity"].ToString()) == Convert.ToDecimal(item["iQuantity"].ToString()))
|
|
{
|
|
if (Convert.ToDecimal(item["iNum"].ToString()) != 0)
|
|
{
|
|
if (Convert.ToDecimal(item["SiNum"].ToString()) != 0)
|
|
{
|
|
sql = @"Update rdrecords32 set iNum=isnull(iNum,0)+(" + item["SiNum"].ToString() + ") where autoid='" + iChildId + "' ";
|
|
body.Amount = (Convert.ToDecimal(body.Amount.ToString("0.00"))) + (Convert.ToDecimal(item["SiNum"].ToString()));
|
|
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "辅计量余数处理失败!");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#region 更新现存量 现存量表待出库数量扣减
|
|
key.cBustypeUN = bustype;
|
|
key.cVouchTypeUN = "32";
|
|
key.TableName = "IA_ST_UnAccountVouch32";
|
|
//DBHelper.UpdateCurrentStockNEW(cmd, body.InvCode, head.WHCode, body.BatchCode, -body.Quantity, body.cFree1, body.cFree2, body.cFree3, body.cFree4, body.cFree5, body.cFree6, body.cFree7, body.cFree8, body.cFree9, body.cFree10, key);
|
|
//DBHelper.UpdateCurrentStock(cmd, body.InvCode, head.WHCode, "", -body.Quantity, key);
|
|
if (Batch != "")
|
|
{
|
|
DBHelper.UpdateCurrentStockCCGC(cmd, body.InvCode, head.WHCode, body.BatchCode, -body.Quantity, -body.Amount, body.cFree1,
|
|
body.cFree2, body.cFree3, body.cFree4, body.cFree5, body.cFree6, body.cFree7, body.cFree8, body.cFree9, body.cFree10,
|
|
"", key, "", "", "", "", -body.Quantity, -body.Amount, 0, 0, 0, 0, 0, 0, iFatherId, iChildId);
|
|
}
|
|
else
|
|
{
|
|
DBHelper.UpdateCurrentStockCCGC(cmd, body.InvCode, head.WHCode, "", 0, 0, body.cFree1,
|
|
body.cFree2, body.cFree3, body.cFree4, body.cFree5, body.cFree6, body.cFree7, body.cFree8, body.cFree9, body.cFree10,
|
|
"", key, "", "", "", "", -body.Quantity, -body.Amount, 0, 0, 0, 0, 0, 0, iFatherId, iChildId);
|
|
DBHelper.UpdateCurrentStockCCGC(cmd, body.InvCode, head.WHCode, body.BatchCode, -body.Quantity, -body.Amount, body.cFree1,
|
|
body.cFree2, body.cFree3, body.cFree4, body.cFree5, body.cFree6, body.cFree7, body.cFree8, body.cFree9, body.cFree10,
|
|
"", key, "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, iFatherId, iChildId);
|
|
}
|
|
|
|
#endregion
|
|
iFatherIdTwo = "'" + iFatherId + "',";
|
|
iChildId--;
|
|
#endregion
|
|
|
|
|
|
log.Debug(sql);
|
|
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region 查询
|
|
|
|
|
|
sql = @"
|
|
select top 1 a.ID as ID, a.ID as IDs,a.cCode as SSDCode,a.cCusCode as CusCode,
|
|
c.cCusName as CusName,a.cWhCode as WHCode,d.cWhName as WHName,e.cordercode ,
|
|
a.cMaker as CreateUser ,a.dnmaketime as CreateDateTime ,a.cHandler as Checker ,
|
|
a.dnverifytime as CheckDateTime
|
|
from rdrecord32 a
|
|
left join DispatchLists e on a.cDLCode=e.DLID
|
|
left join Customer c on a.cCusCode=c.cCusCode
|
|
left join Warehouse d on a.cWhCode=d.cWhCode WHERE 1=1 and a.ID in({0})
|
|
|
|
select distinct a.ID as IDs,b.AutoID as DetailID,b.irowno as Sequence,b.cInvCode as InvCode ,b.iQuantity as Quantity ,
|
|
b.iNum as Amount,e.autoid as SDNDetailID
|
|
,isnull(b.cItemCode,'') ProjectCode,isnull(b.cbatch,'') cBatch,'' version ,'' brand,
|
|
isnull(b.cFree1,'') as cFree1,
|
|
isnull(b.cFree2,'') as cFree2,
|
|
isnull(b.cFree3,'') as cFree3,
|
|
isnull(b.cFree4,'') as cFree4,
|
|
isnull(b.cFree5,'') as cFree5,
|
|
isnull(b.cFree6,'') as cFree6,
|
|
isnull(b.cFree7,'') as cFree7,
|
|
isnull(b.cFree8,'') as cFree8,
|
|
isnull(b.cFree9,'') as cFree9,
|
|
isnull(b.cFree10,'') as cFree10
|
|
from rdrecord32 a
|
|
inner join rdrecords32 b on a.ID=b.ID
|
|
left join DispatchLists e on b.iDLsID=e.iDLsID
|
|
left join Customer c on a.cCusCode=c.cCusCode
|
|
left join Warehouse d on a.cWhCode=d.cWhCode WHERE 1=1 and a.ID in({0})";
|
|
sql = string.Format(sql, iFatherIdTwo.TrimEnd(','));
|
|
if (ds != null)
|
|
ds.Merge(DBHelper.SQlReturnDataSet(sql, cmd));
|
|
else
|
|
ds = DBHelper.SQlReturnDataSet(sql, cmd);
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
cmd.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (cmd.Transaction != null)
|
|
cmd.Transaction.Rollback();
|
|
log.Error(ex.Message);
|
|
throw new Exception(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
if (conn.State == ConnectionState.Open)
|
|
{
|
|
conn.Close();
|
|
}
|
|
conn.Dispose();
|
|
}
|
|
}
|
|
msg = JSON.DataSetToJson(ds, "details", "IDs");
|
|
return msg;
|
|
}
|
|
/// <summary>
|
|
/// 审核销售出库单
|
|
/// </summary>
|
|
/// <param name="infos"></param>
|
|
/// <returns></returns>
|
|
public string Approve(List<ICSSalesShipmentDoc> infos)
|
|
{
|
|
List<ICSSalesShipmentDoc> szJson = new List<ICSSalesShipmentDoc>();
|
|
string connS = "";
|
|
string json = "";
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
SqlConnection conn = new SqlConnection();
|
|
SqlCommand cmd = new SqlCommand();
|
|
string sql = string.Empty;
|
|
List<string> result = infos.Select(t => t.WorkPoint).Distinct().ToList();
|
|
|
|
|
|
foreach (string WorkPoint in result)
|
|
{
|
|
try
|
|
{
|
|
connS = string.Format(connString, WorkPoint);
|
|
conn = new System.Data.SqlClient.SqlConnection(connS);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
|
|
foreach (ICSSalesShipmentDoc info in infos)
|
|
{
|
|
if (WorkPoint != info.WorkPoint)
|
|
continue;
|
|
|
|
ICSUserInfo userInfo = new ICSUserInfo();
|
|
userInfo = DBHelper.GetPersonInfo(info.User, cmd);
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @"UPDATE rdrecord32 SET cHandler ='" + userInfo.UserName + @"' ,
|
|
dnverifytime=CONVERT(VARCHAR(50),GETDATE(),112),dVeriDate=GETDATE() WHERE ID='{0}'";
|
|
sql = string.Format(sql, info.ID);
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "审核销售出单失败!");
|
|
|
|
}
|
|
cmd.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (cmd.Transaction != null)
|
|
cmd.Transaction.Rollback();
|
|
log.Error(ex.Message);
|
|
throw new Exception(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
if (conn.State == ConnectionState.Open)
|
|
{
|
|
conn.Close();
|
|
}
|
|
conn.Dispose();
|
|
}
|
|
}
|
|
return json;
|
|
|
|
}
|
|
/// <summary>
|
|
/// 删除销售出库单
|
|
/// </summary>
|
|
/// <param name="infos"></param>
|
|
/// <returns></returns>
|
|
public string Delete(List<ICSSalesShipmentDoc> infos)
|
|
{
|
|
List<ICSSalesShipmentDoc> szJson = new List<ICSSalesShipmentDoc>();
|
|
if (infos.Count <= 0)
|
|
{
|
|
throw new Exception("传送数据为空!");
|
|
}
|
|
string res = string.Empty;
|
|
string connS = "";
|
|
SqlConnection conn = new SqlConnection();
|
|
SqlCommand cmd = new SqlCommand();
|
|
string sql = string.Empty;
|
|
|
|
List<string> result = infos.Select(t => t.WorkPoint).Distinct().ToList();
|
|
|
|
|
|
foreach (string WorkPoint in result)
|
|
{
|
|
try
|
|
{
|
|
connS = string.Format(connString, WorkPoint);
|
|
conn = new System.Data.SqlClient.SqlConnection(connS);
|
|
conn.Open();
|
|
SqlTransaction sqlTran = conn.BeginTransaction();
|
|
cmd = new SqlCommand();
|
|
cmd.Transaction = sqlTran;
|
|
cmd.Connection = conn;
|
|
foreach (ICSSalesShipmentDoc info in infos)
|
|
{
|
|
if (WorkPoint != info.WorkPoint)
|
|
continue;
|
|
if (info.MTime < new DateTime(2000, 01, 01))
|
|
throw new Exception("请输入正确的操作时间:" + info.MTime);
|
|
sql = @"delete rdrecord11 where rdrecord32.ID='" + info.ID + "'";
|
|
sql += @"delete rdrecords11 where rdrecords32.ID='" + info.ID + "'";
|
|
//UPDATE dbo.rdrecord11 a SET cHandler='" + info.User + @"' ,
|
|
// dVeriDate=CONVERT(VARCHAR(50),GETDATE(),112),dnverifytime=GETDATE()
|
|
// WHERE a.ID='" + info.ID + "'";
|
|
DBHelper.CmdExecuteNonQuery(sql, cmd, "删除销售出单失败!");
|
|
|
|
}
|
|
cmd.Transaction.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (cmd.Transaction != null)
|
|
cmd.Transaction.Rollback();
|
|
log.Error(ex.Message);
|
|
throw new Exception(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
if (conn.State == ConnectionState.Open)
|
|
{
|
|
conn.Close();
|
|
}
|
|
conn.Dispose();
|
|
}
|
|
}
|
|
return res;
|
|
|
|
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// 记录日志
|
|
/// </summary>
|
|
/// <param name="Bills"></param>
|
|
private void LogInfo(List<ICSSalesShipmentDoc> Bills)
|
|
{
|
|
string HeadList = string.Empty;
|
|
string BodyList = string.Empty;
|
|
foreach (ICSSalesShipmentDoc head in Bills)
|
|
{
|
|
HeadList += "\r\n 表头主键ID:" + head.ID + ",仓库:" + head.WHCode + ",用户:" + head.User + ",站点:" + head.WorkPoint;
|
|
foreach (ICSSalesShipmentDocs body in head.details)
|
|
{
|
|
BodyList += "\r\n 表体主键ID: " + body.SDNDetailID + ",数量:" + body.Quantity;
|
|
}
|
|
}
|
|
log.Info(HeadList);
|
|
log.Info(BodyList);
|
|
}
|
|
}
|
|
}
|