纽威
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.
 
 
 
 
 

764 lines
40 KiB

using ICSSoft.Common;
using ICSSoft.Entity;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace ICSSoft.DataProject
{
/// <summary>
/// 使用中
/// 生产模块
/// </summary>
public class ICSManufactureService
{
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#region 生产发料
/// <summary>
/// 生产发料
/// </summary>
/// <param name="TransCode"></param>
/// <param name="TransSequence"></param>
/// <param name="Quantity"></param>
/// <param name="WorkPoint"></param>
/// <param name="cmd"></param>
public static void MOIssueDoc(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
{
try
{
string sql = @"DECLARE @Status VARCHAR(10)
SELECT @Status=b.ERPStatus FROM ICSMOPick a
INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
WHERE b.MOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' AND a.WorkPoint='{1}'
IF (@Status IS NULL)
BEGIN
RAISERROR('生产订单:{0} 不存在!',16,1);
RETURN
END
ELSE IF (@Status!='2')
BEGIN
RAISERROR('生产订单:{0} 不是审核状态!',16,1);
RETURN
END
UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
FROM ICSMOPick a
INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
WHERE b.MOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' AND a.WorkPoint='{1}'
IF EXISTS(SELECT a.ID FROM ICSMOPick a
INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID AND a.WorkPoint=b.WorkPoint
WHERE b.MOCode='{0}' AND b.Sequence+'-'+a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
BEGIN
RAISERROR('单据号:{0},行号:{3} 对应的源头单据已发数量不能大于应发数量!',16,1);
RETURN
END";
sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
if (!DBHelper.ExecuteNonQuery(sql, cmd))
{
throw new Exception("生产领料单更新失败!");
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 生产发料接口
/// </summary>
/// <param name="TransType"></param>
/// <param name="Identification"></param>
/// <param name="cmd"></param>
public static void MOIssueDocERP(string TransType, string Identification, SqlCommand cmd)
{
try
{
#region ERP
string sql = @"SELECT y.DepCode+a.FromWarehouseCode+y.MOCode+a.MUSER AS Costre,y.DepCode,a.FromWarehouseCode AS WarehouseCode,y.MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.DepCode,a.FromWarehouseCode,y.MOCode,x.PickID,a.InvCode) AS Sequence,
a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,x.PickID,x.MODetailID,Enable AS UpdateTodoQuantity
INTO #TempERP
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'-'+x.Sequence AND x.WorkPoint=y.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY y.DepCode,a.FromWarehouseCode,y.MOCode,a.MUSER,a.InvCode,x.PickID,x.MODetailID,Enable
SELECT DISTINCT Costre,DepCode,MODetailID,WarehouseCode AS WHCode,'生产订单' AS SourceType,MOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
SELECT Costre,Sequence,InvCode,Quantity,Amount,PickID AS SourceDetailID FROM #TempERP
DROP TABLE #TempERP";
sql = string.Format(sql, Identification);
DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOIssueDocURL, Inputstr);
Result result = new Result();
result = JsonConvert.DeserializeObject<Result>(resultStr);
if (result.Success)
{
try
{
JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
foreach (var item in res)
{
JObject jo = (JObject)item;
JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
foreach (var detail in resdetail)
{
JObject det = (JObject)detail;
ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["IssueCode"].ToString(), det["Sequence"].ToString(), cmd);
}
}
}
catch (Exception ex)
{
log.Debug(ex.ToString());
log.Debug(resultStr);
}
}
else
{
throw new Exception("ERP接口调用失败:" + result.Message);
}
#endregion
}
catch (Exception)
{
throw;
}
}
#endregion
#region 领料申请单生产发料
/// <summary>
/// 领料申请单生产发料
/// </summary>
/// <param name="TransCode"></param>
/// <param name="TransSequence"></param>
/// <param name="Quantity"></param>
/// <param name="WorkPoint"></param>
/// <param name="cmd"></param>
public static void MOApply(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
{
try
{
string sql = @"DECLARE @Status VARCHAR(10)
SELECT @Status=a.Status FROM ICSMOApply a
WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
IF (@Status IS NULL)
BEGIN
RAISERROR('领料申请单:{0} 不存在!',16,1);
RETURN
END
ELSE IF (@Status!='2')
BEGIN
RAISERROR('领料申请单:{0} 不是审核状态!',16,1);
RETURN
END
UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
FROM ICSMOApply a
WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
IF EXISTS(SELECT a.ID FROM ICSMOApply a
WHERE a.ApplyCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
BEGIN
RAISERROR('单据号:{0},行号:{3} 对应的源头单据已发数量不能大于应发数量!',16,1);
RETURN
END";
sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
if (!DBHelper.ExecuteNonQuery(sql, cmd))
{
throw new Exception("领料申请单更新失败!");
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 领料申请单生产发料接口
/// </summary>
/// <param name="TransType"></param>
/// <param name="Identification"></param>
/// <param name="cmd"></param>
public static void MOApplyERP(string TransType, string Identification, SqlCommand cmd)
{
try
{
#region ERP
string sql = @"SELECT a.FromWarehouseCode+b.ApplyCode+a.MUSER AS Costre,a.FromWarehouseCode AS WarehouseCode,b.ApplyCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY a.FromWarehouseCode,b.ApplyCode,b.ApplyDetailID,a.InvCode) AS Sequence,
a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,b.ApplyDetailID,Enable AS UpdateTodoQuantity
INTO #TempERP
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSMOApply b ON a.TransCode=b.ApplyCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY a.FromWarehouseCode,b.ApplyCode,a.MUSER,a.InvCode,b.ApplyDetailID,Enable
SELECT DISTINCT Costre,'' AS DepCode,WarehouseCode AS WHCode,'领料申请单' AS SourceType,ApplyCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
SELECT Costre,Sequence,InvCode,Quantity,Amount,ApplyDetailID AS SourceDetailID FROM #TempERP
DROP TABLE #TempERP";
sql = string.Format(sql, Identification);
DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOApplyURL, Inputstr);
Result result = new Result();
result = JsonConvert.DeserializeObject<Result>(resultStr);
if (result.Success)
{
try
{
JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
foreach (var item in res)
{
JObject jo = (JObject)item;
JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
foreach (var detail in resdetail)
{
JObject det = (JObject)detail;
ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["IssueCode"].ToString(), det["Sequence"].ToString(), cmd);
}
}
}
catch (Exception ex)
{
log.Debug(ex.ToString());
log.Debug(resultStr);
}
}
else
{
throw new Exception("ERP接口调用失败:" + result.Message);
}
#endregion
}
catch (Exception)
{
throw;
}
}
#endregion
#region 材料出库单生产发料
/// <summary>
/// 材料出库单生产发料
/// </summary>
/// <param name="TransCode"></param>
/// <param name="TransSequence"></param>
/// <param name="Quantity"></param>
/// <param name="WorkPoint"></param>
/// <param name="cmd"></param>
public static void MOIssue(string TransCode, string TransSequence, string Quantity, string WorkPoint, SqlCommand cmd)
{
try
{
string sql = @"DECLARE @Status VARCHAR(10)
SELECT @Status=a.Status FROM ICSMOIssue a
WHERE a.IssueCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
IF (@Status IS NULL)
BEGIN
RAISERROR('材料出库单:{0} 不存在!',16,1);
RETURN
END
ELSE IF (@Status!='1')
BEGIN
RAISERROR('材料出库单:{0} 不是开立状态!',16,1);
RETURN
END
UPDATE a SET IssueQuantity=ISNULL(IssueQuantity,0)+'{2}'
FROM ICSMOIssue a
WHERE a.IssueCode='{0}' AND a.Sequence='{3}' AND a.WorkPoint='{1}'
IF EXISTS(SELECT a.ID FROM ICSMOIssue a
WHERE a.IssueCode='{0}' AND a.Sequence='{3}' and a.WorkPoint='{1}' AND a.Quantity<a.IssueQuantity)
BEGIN
RAISERROR('单据号:{0},行号:{3} 对应的源头单据已发数量不能大于应发数量!',16,1);
RETURN
END";
sql = string.Format(sql, TransCode, WorkPoint, Quantity, TransSequence);
if (!DBHelper.ExecuteNonQuery(sql, cmd))
{
throw new Exception("材料出库单更新失败!");
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 材料出库单生产发料接口
/// </summary>
/// <param name="TransType"></param>
/// <param name="Identification"></param>
/// <param name="cmd"></param>
public static void MOIssueERP(string TransType, string Identification, SqlCommand cmd)
{
try
{
#region ERP
string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSMOIssue b ON a.TransCode=b.IssueCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
WHERE a.Identification='{0}' AND b.Quantity!=b.IssueQuantity)
BEGIN
RAISERROR('材料出库单必须一次性扫描完成!',16,1);
RETURN
END
SELECT b.IssueID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSMOIssue b ON a.TransCode=b.IssueCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock002' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY b.IssueID,a.MUSER,Enable";
sql = string.Format(sql, Identification);
DataTable dt = DBHelper.SQlReturnData(sql, cmd);
string Inputstr = JsonConvert.SerializeObject(dt);
string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOIssueURL, Inputstr);
Result result = new Result();
result = JsonConvert.DeserializeObject<Result>(resultStr);
if (result.Success)
{
try
{
foreach (DataRow dr in dt.Rows)
{
ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
}
}
catch (Exception ex)
{
log.Debug(ex.ToString());
log.Debug(resultStr);
}
}
else
{
throw new Exception("ERP接口调用失败:" + result.Message);
}
#endregion
}
catch (Exception)
{
throw;
}
}
#endregion
#region 生产退料
/// <summary>
/// 生产退料
/// </summary>
/// <param name="TransCode"></param>
/// <param name="TransSequence"></param>
/// <param name="Quantity"></param>
/// <param name="WorkPoint"></param>
/// <param name="cmd"></param>
public static void MOIssueDocNegative(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
{
try
{
string sql = @"UPDATE c SET IssueNegQuantity=ISNULL(IssueNegQuantity,0)+'{2}'
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.IssueNegQuantity)
BEGIN
RAISERROR('条码:{0}对应的源头单据已退数量不能大于应退数量!',16,1);
END";
sql = string.Format(sql, LotNo, WorkPoint, Quantity);
if (!DBHelper.ExecuteNonQuery(sql, cmd))
{
throw new Exception("生产退料单更新失败!");
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 生产退料接口
/// </summary>
/// <param name="TransType"></param>
/// <param name="Identification"></param>
/// <param name="cmd"></param>
public static void MOIssueDocNegativeERP(string TransType, string Identification, SqlCommand cmd)
{
try
{
#region ERP
string sql = string.Empty;
if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription())
{
sql = @"SELECT y.DepCode+a.ToWarehouseCode+y.MOCode+a.MUSER AS Costre,y.DepCode,a.ToWarehouseCode AS WarehouseCode,y.MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY y.DepCode,a.ToWarehouseCode,y.MOCode,c.SourceDetailID,a.InvCode) AS Sequence,
a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,x.MODetailID,Enable AS UpdateTodoQuantity
INTO #TempERP
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
INNER JOIN ICSMOPick x ON c.SourceDetailID=x.PickID AND c.WorkPoint=x.WorkPoint
INNER JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY y.DepCode,a.ToWarehouseCode,y.MOCode,a.MUSER,a.InvCode,c.SourceDetailID,x.MODetailID,Enable
SELECT DISTINCT Costre,DepCode,MODetailID,WarehouseCode AS WHCode,'生产订单' AS SourceType,MOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID FROM #TempERP
DROP TABLE #TempERP";
}
else if (TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription())
{
sql = @"SELECT a.ToWarehouseCode+z.ApplyCode+a.MUSER AS Costre,'' AS DepCode,a.ToWarehouseCode AS WarehouseCode,z.ApplyCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY a.ToWarehouseCode,z.ApplyCode,c.SourceDetailID,a.InvCode) AS Sequence,
a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,z.ApplyDetailID,Enable AS UpdateTodoQuantity
INTO #TempERP
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
INNER JOIN ICSMOApply z ON c.SourceDetailID=z.ApplyDetailID AND c.WorkPoint=z.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY a.ToWarehouseCode,z.ApplyCode,a.MUSER,a.InvCode,c.SourceDetailID,z.ApplyDetailID,Enable
SELECT DISTINCT Costre,DepCode,ApplyDetailID,WarehouseCode AS WHCode,'领料申请单' AS SourceType,ApplyCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID FROM #TempERP
DROP TABLE #TempERP";
}
else if (TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
{
sql = @"SELECT ISNULL(y.DepCode, '')+a.ToWarehouseCode+ISNULL(y.MOCode, z.ApplyCode)+a.MUSER AS Costre,ISNULL(y.DepCode, '') AS DepCode,a.ToWarehouseCode AS WarehouseCode,CASE WHEN m.PickID IS NOT NULL THEN '生产订单' WHEN m.ApplyDetailID IS NOT NULL THEN '领料申请单' ELSE '' END AS SourceType,ISNULL(y.MOCode, z.ApplyCode) AS MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY ISNULL(y.DepCode, ''),a.ToWarehouseCode,ISNULL(y.MOCode, z.ApplyCode),c.SourceDetailID,a.InvCode) AS Sequence,
a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.SourceDetailID,ISNULL(x.PickID, z.ApplyDetailID) AS MODetailID,Enable AS UpdateTodoQuantity
INTO #TempERP
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
INNER JOIN ICSMOIssue m ON c.SourceDetailID=m.ApplyDetailID AND c.WorkPoint=m.WorkPoint
INNER JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
INNER JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
INNER JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY ISNULL(y.DepCode, ''),a.ToWarehouseCode,ISNULL(y.MOCode, z.ApplyCode),a.MUSER,a.InvCode,c.SourceDetailID,m.PickID,m.ApplyDetailID,ISNULL(x.PickID, z.ApplyDetailID),Enable
IF EXISTS(SELECT Costre FROM #TempERP WHERE SourceType='{0}')
BEGIN
RAISERROR('材料出库单必须关联备料表或领料申请单',16,1);
END
SELECT DISTINCT Costre,DepCode,MODetailID,WarehouseCode AS WHCode,SourceType,MOCode AS SourceCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
SELECT Costre,Sequence,InvCode,Quantity,Amount,SourceDetailID FROM #TempERP
DROP TABLE #TempERP";
}
else
{
throw new Exception("类型不符!");
}
sql = string.Format(sql, Identification);
DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.MOIssueDocNegativeURL, Inputstr);
Result result = new Result();
result = JsonConvert.DeserializeObject<Result>(resultStr);
if (result.Success)
{
try
{
JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
foreach (var item in res)
{
JObject jo = (JObject)item;
JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
foreach (var detail in resdetail)
{
JObject det = (JObject)detail;
ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["SourceDetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["IssueNEGCode"].ToString(), det["Sequence"].ToString(), cmd);
}
}
}
catch (Exception ex)
{
log.Debug(ex.ToString());
log.Debug(resultStr);
}
}
else
{
throw new Exception("ERP接口调用失败:" + result.Message);
}
#endregion
}
catch (Exception)
{
throw;
}
}
#endregion
#region 生产入库
/// <summary>
/// 生产入库
/// </summary>
/// <param name="TransCode"></param>
/// <param name="TransSequence"></param>
/// <param name="Quantity"></param>
/// <param name="WorkPoint"></param>
/// <param name="cmd"></param>
public static void ManufactureReceiveDoc(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
{
try
{
string sql = @"DECLARE @Status VARCHAR(10)
SELECT @Status=c.ERPStatus FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
IF (@Status IS NULL)
BEGIN
RAISERROR('条码:{0} 对应的源头单据不存在!',16,1);
RETURN
END
ELSE IF (@Status='3')
BEGIN
RAISERROR('条码:{0} 对应的源头单据已关闭!',16,1);
RETURN
END
UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Quantity<c.RCVQuantity)
BEGIN
RAISERROR('条码:{0} 对应的源头单据已入库数量不能大于订单数量!',16,1);
END";
sql = string.Format(sql, LotNo, WorkPoint, Quantity);
if (!DBHelper.ExecuteNonQuery(sql, cmd))
{
throw new Exception("生产退料单更新失败!");
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 生产入库接口
/// </summary>
/// <param name="TransType"></param>
/// <param name="Identification"></param>
/// <param name="cmd"></param>
public static void ManufactureReceiveDocERP(string TransType, string Identification, SqlCommand cmd)
{
try
{
#region ERP
string sql = @"SELECT c.DepCode+a.ToWarehouseCode+c.MOCode+a.MUSER AS Costre,c.DepCode,a.ToWarehouseCode AS WarehouseCode,c.MOCode,a.MUSER,ROW_NUMBER() OVER (ORDER BY c.DepCode,a.ToWarehouseCode,c.MOCode,c.MODetailID,a.InvCode) AS Sequence,
a.InvCode,SUM(a.Quantity) AS Quantity,0 AS Amount,c.MODetailID,Enable AS UpdateTodoQuantity
INTO #TempERP
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY c.DepCode,a.ToWarehouseCode,c.MOCode,a.MUSER,a.InvCode,c.MODetailID,Enable
SELECT DISTINCT Costre,DepCode,WarehouseCode AS WHCode,MOCode,MUSER AS [User],SYSDATETIME() AS MTime,UpdateTodoQuantity FROM #TempERP
SELECT Costre,Sequence,InvCode,Quantity,Amount,MODetailID
FROM #TempERP
DROP TABLE #TempERP";
sql = string.Format(sql, Identification);
DataSet ds = DBHelper.SQlReturnDataSet(sql, cmd);
string Inputstr = DataToJsonHelper.DataSetToJson(ds, "details", "Costre");
string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ManufactureReceiveDocURL, Inputstr);
Result result = new Result();
result = JsonConvert.DeserializeObject<Result>(resultStr);
if (result.Success)
{
try
{
JArray res = (JArray)JsonConvert.DeserializeObject(result.Data.ToString());
foreach (var item in res)
{
JObject jo = (JObject)item;
JArray resdetail = (JArray)JsonConvert.DeserializeObject(jo["details"].ToString());
foreach (var detail in resdetail)
{
JObject det = (JObject)detail;
ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, det["MODetailID"].ToString(), Identification, jo["ID"].ToString(), det["DetailID"].ToString(), jo["MRCVCode"].ToString(), det["Sequence"].ToString(), cmd);
}
}
}
catch (Exception ex)
{
log.Debug(ex.ToString());
log.Debug(resultStr);
}
}
else
{
throw new Exception("ERP接口调用失败:" + result.Message);
}
#endregion
}
catch (Exception)
{
throw;
}
}
#endregion
#region 开立的生产入库单
/// <summary>
/// 开立的生产入库单
/// </summary>
/// <param name="TransCode"></param>
/// <param name="TransSequence"></param>
/// <param name="Quantity"></param>
/// <param name="WorkPoint"></param>
/// <param name="cmd"></param>
public static void ManufactureReceive(string LotNo, string Quantity, string WorkPoint, SqlCommand cmd)
{
try
{
string sql = @"DECLARE @Status VARCHAR(10)
SELECT @Status=c.Status FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='1'
IF (@Status IS NULL)
BEGIN
RAISERROR('条码:{0} 对应的源头单据不存在!',16,1);
RETURN
END
ELSE IF (@Status!='1')
BEGIN
RAISERROR('条码:{0} 对应的源头单据不是开立状态!',16,1);
RETURN
END
UPDATE c SET RCVQuantity=ISNULL(RCVQuantity,0)+'{2}'
FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='1'
IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a
INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND c.Type='1' AND c.Quantity<c.RCVQuantity)
BEGIN
RAISERROR('条码:{0} 对应的源头单据已入库数量不能大于订单数量!',16,1);
END";
sql = string.Format(sql, LotNo, WorkPoint, Quantity);
if (!DBHelper.ExecuteNonQuery(sql, cmd))
{
throw new Exception("生产退料单更新失败!");
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 开立的生产入库单
/// </summary>
/// <param name="TransType"></param>
/// <param name="Identification"></param>
/// <param name="cmd"></param>
public static void ManufactureReceiveERP(string TransType, string Identification, SqlCommand cmd)
{
try
{
#region ERP
string sql = @"IF EXISTS(SELECT b.ID FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSManufactureReceive b ON a.TransCode=b.RCVCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
WHERE a.Identification='{0}' AND b.Quantity!=b.RCVQuantity)
BEGIN
RAISERROR('生产入库单必须一次性扫描完成!',16,1);
RETURN
END
SELECT b.RCVID AS ID,a.MUSER AS [User],SYSDATETIME() AS MTime,Enable AS UpdateTodoQuantity
FROM ICSWareHouseLotInfoLog a
INNER JOIN ICSManufactureReceive b ON a.TransCode=b.RCVCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
INNER JOIN ICSConfiguration con ON con.Code='Stock001' AND a.WorkPoint=con.WorkPoint
WHERE a.Identification='{0}' AND ERPUpload='0'
GROUP BY b.RCVID,a.MUSER,Enable";
sql = string.Format(sql, Identification);
DataTable dt = DBHelper.SQlReturnData(sql, cmd);
string Inputstr = JsonConvert.SerializeObject(dt);
string resultStr = HTTPHelper.HttpPost(TransType, ERPUrl.ICSManufactureReceiveURL, Inputstr);
Result result = new Result();
result = JsonConvert.DeserializeObject<Result>(resultStr);
if (result.Success)
{
try
{
foreach (DataRow dr in dt.Rows)
{
ICSWareHouseLotInfoService.WareHouseLotInfoLogUpdate(TransType, dr["ID"].ToString(), Identification, "", "", "", "", cmd);
}
}
catch (Exception ex)
{
log.Debug(ex.ToString());
log.Debug(resultStr);
}
}
else
{
throw new Exception("ERP接口调用失败:" + result.Message);
}
#endregion
}
catch (Exception)
{
throw;
}
}
#endregion
}
}