using DapperORMCore.Context.DataContext;
using DapperORMCore.Model.CoreModel;
using DapperORMCore.Repository.IRepositorys;
using Microsoft.Extensions.Configuration;
using NXWMS.DataAccess.Entity;
using NXWMS.IService.NXWMS;
using NXWMS.IService.NXWMS.Instock;
using NXWMS.Model.AppModels.Condition.Instock;
using NXWMS.Model.AppModels.Result.Balance;
using NXWMS.Model.AppModels.Result.Base;
using NXWMS.Model.AppModels.Result.Instock;
using NXWMS.Model.AppModels.Result.OutStock;
using NXWMS.Model.AppModels.Result.WmsTask;
using NXWMS.Model.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WestDistance.DapperORM.Repository.Repositorys;
namespace NXWMS.Service.NXWMS.Instock
{
///
/// 收货单服务
///
[AutoInject(typeof(IWmsInReceiptService), InjectType.Scope)]
public class WmsInReceiptService : ServiceBase, IWmsInReceiptService
{
#region 全局变量、构造注入
///
/// 系统操作仓储中转
///
private IDataRepositoryContext _dataContext;
///
/// SQL节点仓储
///
private ISQLNodeRepository _iSQLNodeRepository;
///
/// 配置
///
private IConfiguration _configuration;
private IERPServer _eRPServer;
///
/// 构造注入
///
///
///
///
public WmsInReceiptService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository, IERPServer eRPServer)
{
this._dataContext = dataRepositoryContext;
this._configuration = configuration;
this._iSQLNodeRepository = iSQLNodeRepository;
this._eRPServer = eRPServer;
}
#endregion
///
/// 分页查询收货单主表数据
///
/// 收货单查询条件实体类对象
///
public OperateResultInfo> GetWmsInReceiptListForPage(WmsInReceiptSearchMd receiptSearchMd)
{
try
{
#region SQL语句生成
StringBuilder sqlCondition = new StringBuilder();
if (!string.IsNullOrEmpty(receiptSearchMd.ReceiptNoMsg))
{
sqlCondition.Append($" AND RECEIPT_NO = '{receiptSearchMd.ReceiptNoMsg}'");
}
if (!string.IsNullOrEmpty(receiptSearchMd.ArrivalNoMsg))
{
sqlCondition.Append($" AND ARRIVAL_NO = '{receiptSearchMd.ArrivalNoMsg}'");
}
if (!string.IsNullOrEmpty(receiptSearchMd.ReceipterMsg))
{
sqlCondition.Append($" AND RECEIPTER = '{receiptSearchMd.ReceipterMsg}'");
}
if (!string.IsNullOrEmpty(receiptSearchMd.ReceiptType))
{
sqlCondition.Append($" AND RECEIPT_TYPE = '{receiptSearchMd.ReceiptType}'");
}
if (!string.IsNullOrEmpty(receiptSearchMd.ReceiptStatus))
{
sqlCondition.Append($" AND RECEIPT_STATUS = '{receiptSearchMd.ReceiptStatus}'");
}
if (!string.IsNullOrEmpty(receiptSearchMd.BatchNoMsg))
{
sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE BATCH_NO = '{receiptSearchMd.BatchNoMsg}')");
}
if (!string.IsNullOrEmpty(receiptSearchMd.MaterielMsg))
{
sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE MATERIEL_CODE LIKE '%{receiptSearchMd.MaterielMsg}%' OR MATERIEL_NAME LIKE '%{receiptSearchMd.MaterielMsg}%' OR MATERIEL_BARCODE LIKE '%{receiptSearchMd.MaterielMsg}%')");
}
if (!string.IsNullOrEmpty(receiptSearchMd.SupplierMsg))
{
sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE SUPPLIER_CODE LIKE '%{receiptSearchMd.SupplierMsg}%' OR SUPPLIER_NAME LIKE '%{receiptSearchMd.SupplierMsg}%')");
}
if (!string.IsNullOrEmpty(receiptSearchMd.StartCreateTime))
{
sqlCondition.Append($" AND CREATE_TIME >= '{receiptSearchMd.StartCreateTime}'");
}
if (!string.IsNullOrEmpty(receiptSearchMd.EndCreateTime))
{
sqlCondition.Append($" AND CREATE_TIME <= '{receiptSearchMd.EndCreateTime}'");
}
if (!string.IsNullOrEmpty(receiptSearchMd.StartProductTime))
{
sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE PRODUCT_DATE >= '{receiptSearchMd.StartProductTime}')");
}
if (!string.IsNullOrEmpty(receiptSearchMd.EndProductTime))
{
sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE PRODUCT_DATE <= '{receiptSearchMd.EndProductTime}')");
}
if (!string.IsNullOrEmpty(receiptSearchMd.StartExpTime))
{
sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE EXP_DATE >= '{receiptSearchMd.StartExpTime}')");
}
if (!string.IsNullOrEmpty(receiptSearchMd.EndExpTime))
{
sqlCondition.Append($" AND RECEIPT_ID IN (SELECT RECEIPT_ID FROM VW_WMS_IN_RECEIPT_DTL WHERE EXP_DATE <= '{receiptSearchMd.EndExpTime}')");
}
StringBuilder sqlCountReceiptData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_IN_RECEIPT WHERE 1=1");
sqlCountReceiptData.Append(sqlCondition.ToString());
int pageStartIndex = (receiptSearchMd.PageNum - 1) * receiptSearchMd.EveryPageQty;
int pageEndIndex = receiptSearchMd.PageNum * receiptSearchMd.EveryPageQty;
StringBuilder sqlQueryReceiptData = new StringBuilder($@"
SELECT
RECEIPT_ID,
RECEIPT_NO,
ARRIVAL_NO,
RECEIPT_TYPE,
RECEIPT_TYPE_NAME,
RECEIPT_TIME,
RECEIPTER,
RECEIPT_STATUS,
RECEIPT_STATUS_NAME,
[DESCRIBE],
CREATE_BY,
CREATE_NAME,
CREATE_TIME,
UPDATE_BY,
UPDATE_NAME,
UPDATE_TIME
FROM
VW_WMS_IN_RECEIPT
WHERE
1=1
{sqlCondition}
ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC
OFFSET {pageStartIndex} ROWS
FETCH NEXT {receiptSearchMd.EveryPageQty} ROWS ONLY
");
#endregion
int dataCount = Convert.ToInt32(new DataRepository(_dataContext).ExecuteScalar(sqlCountReceiptData.ToString()));
List resultList = new DataRepository(_dataContext).Query(sqlQueryReceiptData.ToString()).ToList();
OperateResultInfo> retDataMsg = SuccessStatus(resultList);
retDataMsg.DataCount = dataCount;
return retDataMsg;
}
catch (Exception ex)
{
return FailMessageStatus>($"查询收货单数据发生异常,【{ex.Message}】", null);
}
}
///
/// 根据收货单主键Id查询收货单明细数据
///
/// 收货单对象
///
public OperateResultInfo GetWmsInReceiptDtlListForID(WmsInReceiptResult wmsInReceipt)
{
try
{
#region SQL语句生成
string sqlQueryWmsInReceipt = $@"
SELECT
RECEIPT_ID,
RECEIPT_NO,
ARRIVAL_NO,
RECEIPT_TYPE,
RECEIPT_TYPE_NAME,
RECEIPT_TIME,
RECEIPTER,
RECEIPT_STATUS,
RECEIPT_STATUS_NAME,
[DESCRIBE],
CREATE_BY,
CREATE_NAME,
CREATE_TIME,
UPDATE_BY,
UPDATE_NAME,
UPDATE_TIME
FROM
VW_WMS_IN_RECEIPT
WHERE
RECEIPT_ID = '{wmsInReceipt.ReceiptId}'
";
string strWhere = string.Empty;
if (wmsInReceipt.Remarks1 == "查询已删除明细数据")
{
strWhere = "1=1";
}
else if (wmsInReceipt.Remarks1 == "查询未组盘完成的收货单明细")
{
strWhere = "RECEIPT_DTL_STATUS < 99 AND RECEIPT_TRAY_QTY < RECEIPT_DTL_QTY";
//2021 0223 孙亚龙 修改质检流程
// AND INSPECTION_RESULT = 'OK'
}
else
{
strWhere = "RECEIPT_DTL_STATUS < 111";
}
string sqlQueryWmsReceiptDtl = $@"
SELECT
*
FROM
VW_WMS_IN_RECEIPT_DTL
WHERE
RECEIPT_ID = '{wmsInReceipt.ReceiptId}'
AND {strWhere}
ORDER BY RECEIPT_DTL_STATUS,RECEIPT_DTL_ID
";
#endregion
List resultList = new DataRepository(_dataContext).Query(sqlQueryWmsInReceipt).ToList();
List resultDtlList = new DataRepository(_dataContext).Query(sqlQueryWmsReceiptDtl).ToList();
wmsInReceipt = resultList[0];
wmsInReceipt.WmsInReceiptDtlList = resultDtlList;
OperateResultInfo retDataMsg = SuccessStatus(wmsInReceipt);
return retDataMsg;
}
catch (Exception ex)
{
return FailMessageStatus($"查询收货单明细数据发生异常,【{ex.Message}】", null);
}
}
///
/// 查询组盘未完成的收货单明细数据
///
///
public OperateResultInfo> GetWmsInReceiptDtl_UnFinishedTray()
{
try
{
string sqlQueryWmsInReceipt = $@"
SELECT
RECEIPT_ID,
RECEIPT_NO,
ARRIVAL_NO,
RECEIPT_TYPE,
RECEIPT_TYPE_NAME,
RECEIPT_TIME,
RECEIPTER,
RECEIPT_STATUS,
RECEIPT_STATUS_NAME,
[DESCRIBE],
CREATE_BY,
CREATE_NAME,
CREATE_TIME,
UPDATE_BY,
UPDATE_NAME,
UPDATE_TIME
FROM
VW_WMS_IN_RECEIPT
WHERE
RECEIPT_ID IN (
SELECT
RECEIPT_ID
FROM
VW_WMS_IN_RECEIPT_DTL
WHERE
RECEIPT_DTL_STATUS < 99
AND RECEIPT_TRAY_QTY < RECEIPT_DTL_QTY)
ORDER BY RECEIPT_ID
";
string sqlQueryWmsReceiptDtlUnFinishedTray = $@"
SELECT
*
FROM
VW_WMS_IN_RECEIPT_DTL
WHERE
RECEIPT_DTL_STATUS < 99
AND RECEIPT_TRAY_QTY < RECEIPT_DTL_QTY
ORDER BY
RECEIPT_ID,
RECEIPT_DTL_ID
";
List resultList = new DataRepository(_dataContext).Query(sqlQueryWmsInReceipt).ToList();
List resultDtlList = new DataRepository(_dataContext).Query(sqlQueryWmsReceiptDtlUnFinishedTray).ToList();
foreach (WmsInReceiptResult item in resultList)
{
List tmpLst = resultDtlList.FindAll(x=>x.ReceiptId == item.ReceiptId);
if (tmpLst != null && tmpLst.Count > 0)
{
item.WmsInReceiptDtlList = tmpLst;
}
}
return SuccessStatus(resultList);
}
catch (Exception ex)
{
return FailMessageStatus>($"查询未组盘完成的收货单明细数据发生异常,【{ex.Message}】", null);
}
}
///
/// 新增收货单数据
///
/// 收货单主表对象
///
public OperateResultInfo AddWmsInReceiptData(WmsInReceiptResult wmsInReceipt)
{
try
{
#region SQL语句生成
List sqlList = new List();
wmsInReceipt.ReceiptId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Receipt_Id"));
wmsInReceipt.ReceiptNo = new DataRepository(_dataContext).GetSequenceMsg("Receipt_No");
wmsInReceipt.ReceiptStatus = 0;
StringBuilder sqlAddWmsReceipt = new StringBuilder();
string receiptTime = DateTime.Compare(wmsInReceipt.ReceiptTime, new DateTime()) == 0 ? "NULL" : $"'{wmsInReceipt.ReceiptTime}'";
sqlAddWmsReceipt.Append($@"
INSERT INTO [WMS_IN_RECEIPT] (
[RECEIPT_ID],
[RECEIPT_NO],
[RECEIPTER],
[RECEIPT_TYPE],
[RECEIPT_TIME],
[ARRIVAL_NO],
[RECEIPT_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{wmsInReceipt.ReceiptId}',
'{wmsInReceipt.ReceiptNo}',
'{wmsInReceipt.Receipter}',
'{wmsInReceipt.ReceiptType}',
{receiptTime},
'{wmsInReceipt.ArrivalNo}',
'{wmsInReceipt.ReceiptStatus}',
'{wmsInReceipt.Describe}',
'{wmsInReceipt.CreateBy}',
getdate(),
'{wmsInReceipt.UpdateBy}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
");
sqlList.Add(sqlAddWmsReceipt.ToString());
List arrivalDtlList = new List();
if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
{
string sqlQueryWmsInArivalDtl = $@"
SELECT
*
FROM
VW_WMS_IN_ARRIVAL_DTL
WHERE
ARRIVAL_NO = '{wmsInReceipt.ArrivalNo}'
AND RECEIPT_QTY < ARRIVAL_QTY
AND ARRIVAL_DTL_STATUS < 99
";
arrivalDtlList = new DataRepository(_dataContext).Query(sqlQueryWmsInArivalDtl).ToList();
if (arrivalDtlList.Count == 0)
{
return FailMessageStatus("到货通知单明细已经全部生成收货单,本次新增收货单操作失败!", 0);
}
}
foreach (WmsInReceiptDtlResult item in wmsInReceipt.WmsInReceiptDtlList)
{
StringBuilder sqlAddWmsInReceiptDtl = new StringBuilder();
item.ReceiptDtlId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Receipt_Dtl_Id"));
item.ReceiptId = wmsInReceipt.ReceiptId;
item.ReceiptDtlStatus = 0;
// item.MaterielBarcode = new DataRepository(_dataContext).GetSequenceMsg("Materiel_Barcode");
sqlAddWmsInReceiptDtl.Append($@"
INSERT INTO [WMS_IN_RECEIPT_DTL] (
[RECEIPT_DTL_ID],
[RECEIPT_ID],
[MATERIEL_CODE],
[MATERIEL_NAME],
[MATERIEL_BARCODE],
[MATERIEL_SPEC],
[BATCH_NO],
[PACKAGE_CODE],
[UNIT_CODE],
[ARRIVAL_QTY],
[RECEIPT_DTL_QTY],
[RECEIPT_TRAY_QTY],
[PUTAWAY_QTY],
[REJECT_QTY],
[REJECT_REASON],
[SUPPLIER_CODE],
[SUPPLIER_NAME],
[PRODUCT_DATE],
[EXP_DATE],
[RECEIPT_DTL_STATUS],
[INSPECTION_RESULT],
[ITEM_STATUS],
[ARRIVAL_DTL_ID],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{item.ReceiptDtlId}',
'{item.ReceiptId}',
'{item.MaterielCode}',
'{item.MaterielName}',
'{item.MaterielBarcode}',
'{item.MaterielSpec}',
'{item.BatchNo}',
'{item.PackageCode}',
'{item.UnitCode}',
'{item.ArrivalQty}',
'{item.ReceiptDtlQty}',
'{0}',
'{0}',
'{item.RejectQty}',
'{item.RejectReason}',
'{item.SupplierCode}',
'{item.SupplierName}',
'{item.ProductDate}',
'{item.ExpDate}',
'0',
'Wait',
'1',
'{item.ArrivalDtlId}',
'{item.Describe}',
'{item.CreateBy}',
getdate(),
'{item.UpdateBy}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
");
sqlList.Add(sqlAddWmsInReceiptDtl.ToString());
if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo) && item.ArrivalDtlId != 0)
{
WmsInArrivalDtlResult temArrDtlMd = arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId);
if (temArrDtlMd == null)
{
return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)信息发生变动,本次新增收货单操作失败!", 0);
}
else
{
if ((item.ReceiptDtlQty + temArrDtlMd.ReceiptQty) > temArrDtlMd.ArrivalQty)
{
return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)已收货数量不能大于到货数量,本次新增收货单操作失败!", 0);
}
else
{
string sqlUpdateArrivalDtlStatus = $@"
UPDATE WMS_IN_ARRIVAL_DTL
SET RECEIPT_QTY = '{item.ReceiptDtlQty + temArrDtlMd.ReceiptQty}',
UPDATE_BY = '{item.UpdateBy}',
UPDATE_TIME = GETDATE(),
ARRIVAL_DTL_STATUS = 11,
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_DTL_ID = '{item.ArrivalDtlId}';
";
sqlList.Add(sqlUpdateArrivalDtlStatus);
}
}
}
}
if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
{
string sqlUpdateArrivalStatus = $@"
IF NOT EXISTS (
SELECT
1
FROM
WMS_IN_ARRIVAL
WHERE
ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}'
AND ARRIVAL_STATUS > 0
AND ARRIVAL_STATUS < 99
) UPDATE WMS_IN_ARRIVAL
SET ARRIVAL_STATUS = 11,
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}' ;
";
sqlList.Add(sqlUpdateArrivalStatus);
}
#endregion
int row = new DataRepository(_dataContext).ExecSqlListTran(sqlList);
if (row > 0)
{
return SuccessMessageStatus("新增收货单数据成功!", row);
}
else
{
return FailMessageStatus("新增收货单数据失败!", row);
}
}
catch (Exception ex)
{
return FailMessageStatus($"新增收货单数据发生异常,【{ex.Message}】");
}
}
///
/// 修改收货单数据
///
/// 收货单主表对象
///
public OperateResultInfo EditWmsInReceiptData(WmsInReceiptResult wmsInReceipt)
{
try
{
#region SQL语句生成
List sqlList = new List();
string receiptTime = DateTime.Compare(wmsInReceipt.ReceiptTime, new DateTime()) == 0 ? "NULL" : $"'{wmsInReceipt.ReceiptTime}'";
string sqlUpdateWmsInReceipt = $@"
UPDATE [WMS_IN_RECEIPT]
SET
[RECEIPT_NO] = '{wmsInReceipt.ReceiptNo}',
[RECEIPTER] = '{wmsInReceipt.Receipter}',
[RECEIPT_TYPE] = '{wmsInReceipt.ReceiptType}',
[RECEIPT_TIME] = {receiptTime},
[ARRIVAL_NO] = '{wmsInReceipt.ArrivalNo}',
[RECEIPT_STATUS] = '{wmsInReceipt.ReceiptStatus}',
[DESCRIBE] = '{wmsInReceipt.Describe}',
[UPDATE_BY] = '{wmsInReceipt.UpdateBy}',
[UPDATE_TIME] = GETDATE(),
[DATA_VERSION] = [DATA_VERSION] + 1
WHERE
[RECEIPT_ID] = '{wmsInReceipt.ReceiptId}';
";
sqlList.Add(sqlUpdateWmsInReceipt);
List arrivalDtlList = new List();
if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
{
string sqlQueryWmsInArivalDtl = $@"
SELECT
*
FROM
VW_WMS_IN_ARRIVAL_DTL
WHERE
ARRIVAL_NO = '{wmsInReceipt.ArrivalNo}'
AND RECEIPT_QTY < ARRIVAL_QTY
AND ARRIVAL_DTL_STATUS < 99
";
arrivalDtlList = new DataRepository(_dataContext).Query(sqlQueryWmsInArivalDtl).ToList();
if (arrivalDtlList.Count == 0)
{
return FailMessageStatus("到货通知单明细已经全部生成收货单,本次新增收货单操作失败!", 0);
}
}
foreach (WmsInReceiptDtlResult item in wmsInReceipt.WmsInReceiptDtlList)
{
if (item.Remarks1 == "更新" || item.Remarks1 == "删除")
{
string sqlUpdateWmsInReceiptDtl = $@"
UPDATE [WMS_IN_RECEIPT_DTL]
SET
[MATERIEL_CODE] = '{item.MaterielCode}',
[MATERIEL_NAME] = '{item.MaterielName}',
[MATERIEL_BARCODE] = '{item.MaterielBarcode}',
[MATERIEL_SPEC] = '{item.MaterielSpec}',
[BATCH_NO] = '{item.BatchNo}',
[PACKAGE_CODE] = '{item.PackageCode}',
[UNIT_CODE] = '{item.UnitCode}',
[ARRIVAL_QTY] = '{item.ArrivalQty}',
[RECEIPT_DTL_QTY] = '{item.ReceiptDtlQty}',
[RECEIPT_TRAY_QTY] = '{item.ReceiptTrayQty}',
[PUTAWAY_QTY] = '{item.PutawayQty}',
[REJECT_QTY] = '{item.RejectQty}',
[REJECT_REASON] = '{item.RejectReason}',
[SUPPLIER_CODE] = '{item.SupplierCode}',
[SUPPLIER_NAME] = '{item.SupplierCode}',
[PRODUCT_DATE] = '{item.ProductDate}',
[EXP_DATE] = '{item.ExpDate}',
[RECEIPT_DTL_STATUS] = '{item.ReceiptDtlStatus}',
[INSPECTION_RESULT] = '{item.InspectionResult}',
[ITEM_STATUS] = '{item.ItemStatus}',
[ARRIVAL_DTL_ID] = '{item.ArrivalDtlId}',
[DESCRIBE] = '{item.Describe}',
[UPDATE_BY] = '{item.UpdateBy}',
[UPDATE_TIME] = getdate(),
[DATA_VERSION] = [DATA_VERSION] + 1
WHERE
[RECEIPT_DTL_ID] = '{item.ReceiptDtlId}'
AND [RECEIPT_ID] = '{wmsInReceipt.ReceiptId}';
";
sqlList.Add(sqlUpdateWmsInReceiptDtl);
}
if (item.Remarks1 == "添加")
{
StringBuilder sqlAddWmsInReceiptDtl = new StringBuilder();
item.ReceiptDtlId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Receipt_Dtl_Id"));
item.ReceiptId = wmsInReceipt.ReceiptId;
item.ReceiptDtlStatus = 0;
item.MaterielBarcode = new DataRepository(_dataContext).GetSequenceMsg("Materiel_Barcode");
sqlAddWmsInReceiptDtl.Append($@"
INSERT INTO [WMS_IN_RECEIPT_DTL] (
[RECEIPT_DTL_ID],
[RECEIPT_ID],
[MATERIEL_CODE],
[MATERIEL_NAME],
[MATERIEL_BARCODE],
[MATERIEL_SPEC],
[BATCH_NO],
[PACKAGE_CODE],
[UNIT_CODE],
[ARRIVAL_QTY],
[RECEIPT_DTL_QTY],
[RECEIPT_TRAY_QTY],
[PUTAWAY_QTY],
[REJECT_QTY],
[REJECT_REASON],
[SUPPLIER_CODE],
[SUPPLIER_NAME],
[PRODUCT_DATE],
[EXP_DATE],
[RECEIPT_DTL_STATUS],
[INSPECTION_RESULT],
[ITEM_STATUS],
[ARRIVAL_DTL_ID],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{item.ReceiptDtlId}',
'{item.ReceiptId}',
'{item.MaterielCode}',
'{item.MaterielName}',
'{item.MaterielBarcode}',
'{item.MaterielSpec}',
'{item.BatchNo}',
'{item.PackageCode}',
'{item.UnitCode}',
'{item.ArrivalQty}',
'{item.ReceiptDtlQty}',
'{0}',
'{0}',
'{item.RejectQty}',
'{item.RejectReason}',
'{item.SupplierCode}',
'{item.SupplierName}',
'{item.ProductDate}',
'{item.ExpDate}',
'0',
'Wait',
'1',
'{item.ArrivalDtlId}',
'{item.Describe}',
'{item.CreateBy}',
getdate(),
'{item.UpdateBy}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
");
sqlList.Add(sqlAddWmsInReceiptDtl.ToString());
}
if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo) && item.ArrivalDtlId != 0)
{
if (item.Remarks1 != "删除")
{
WmsInArrivalDtlResult temArrDtlMd = arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId);
if (temArrDtlMd == null)
{
return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)信息发生变动,本次新增收货单操作失败!", 0);
}
else
{
if ((item.ReceiptDtlQty + temArrDtlMd.ReceiptQty) > temArrDtlMd.ArrivalQty)
{
return FailMessageStatus($"到货通知单明细行(物料编码:【{item.MaterielCode}】物料名称:【{item.MaterielName}】批次号:【{item.BatchNo}】到货明细ID:【{item.ArrivalDtlId}】)已收货数量不能大于到货数量,本次新增收货单操作失败!", 0);
}
else
{
string sqlUpdateArrivalDtlStatus = $@"
UPDATE WMS_IN_ARRIVAL_DTL
SET RECEIPT_QTY = '{item.ReceiptDtlQty + temArrDtlMd.ReceiptQty}',
UPDATE_BY = '{item.UpdateBy}',
UPDATE_TIME = GETDATE(),
ARRIVAL_DTL_STATUS = 11,
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_DTL_ID = '{item.ArrivalDtlId}'
";
sqlList.Add(sqlUpdateArrivalDtlStatus);
}
}
}
else
{
string sqlRollBackArrivalData = $@"
IF NOT EXISTS (
SELECT
1
FROM
WMS_IN_ARRIVAL_DTL
WHERE
RECEIPT_QTY - '{item.ReceiptDtlQty}' = 0
) UPDATE WMS_IN_ARRIVAL_DTL
SET RECEIPT_QTY = RECEIPT_QTY - '{item.ReceiptDtlQty}',
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_DTL_ID = '{item.ArrivalDtlId}'
ELSE
UPDATE WMS_IN_ARRIVAL_DTL
SET RECEIPT_QTY = RECEIPT_QTY - '{item.ReceiptDtlQty}',
ARRIVAL_DTL_STATUS = '0',
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_DTL_ID = '{item.ArrivalDtlId}';
";
sqlList.Add(sqlRollBackArrivalData);
decimal oldArrReceiptQty = arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId).ReceiptQty;
arrivalDtlList.Find(x => x.ArrivalDtlId == item.ArrivalDtlId).ReceiptQty = oldArrReceiptQty - item.ReceiptDtlQty;
}
}
}
if (!string.IsNullOrEmpty(wmsInReceipt.ArrivalNo))
{
string sqlUpdateArrivalStatus = $@"
IF NOT EXISTS (
SELECT
1
FROM
WMS_IN_ARRIVAL
WHERE
ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}'
AND ARRIVAL_STATUS > 0
AND ARRIVAL_STATUS < 99
) UPDATE WMS_IN_ARRIVAL
SET ARRIVAL_STATUS = 11,
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_ID = '{arrivalDtlList[0].ArrivalId}' ;
";
sqlList.Add(sqlUpdateArrivalStatus);
}
#endregion
int row = new DataRepository(_dataContext).ExecSqlListTran(sqlList);
if (row > 0)
{
return SuccessMessageStatus("修改收货单数据成功!", row);
}
else
{
return FailMessageStatus("修改收货单数据失败!", row);
}
}
catch (Exception ex)
{
return FailMessageStatus($"修改收货单数据发生异常,【{ex.Message}】");
}
}
///
/// 删除收货单数据
///
/// 收货单主表对象
///
public OperateResultInfo DeleteWmsInReceiptData(WmsInReceiptResult wmsInReceipt)
{
try
{
#region SQL语句生成
string[] receiptIdList = wmsInReceipt.ReceiptNo.Split(',');
List sqlList = new List();
foreach (string item in receiptIdList)
{
string sqlDeleteWmsReceipt = $@"
UPDATE WMS_IN_RECEIPT
SET RECEIPT_STATUS = '111',
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
RECEIPT_ID = '{item}';
";
string sqlDeleteWmsInReceiptDtl = $@"
UPDATE WMS_IN_RECEIPT_DTL
SET RECEIPT_DTL_STATUS = '111',
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
RECEIPT_ID = '{item}';
";
sqlList.Add(sqlDeleteWmsReceipt);
sqlList.Add(sqlDeleteWmsInReceiptDtl);
/*
ToDo: 后续增加删除移至历史表中。
*/
string sqlQueryWmsReceiptDtlData = $@"
SELECT
*
FROM
VW_WMS_IN_RECEIPT_DTL
WHERE
RECEIPT_ID = '{item}'
AND RECEIPT_DTL_STATUS = 0
ORDER BY RECEIPT_DTL_STATUS,RECEIPT_DTL_ID
";
List resultDtlList = new DataRepository(_dataContext).Query(sqlQueryWmsReceiptDtlData).ToList();
if (resultDtlList.Count > 0)
{
foreach (WmsInReceiptDtlResult mdDtl in resultDtlList)
{
if (mdDtl.ArrivalDtlId != 0)
{
string sqlRollBackArrivaldDtlData = $@"
IF NOT EXISTS (
SELECT
1
FROM
WMS_IN_ARRIVAL_DTL
WHERE
RECEIPT_QTY - '{mdDtl.ReceiptDtlQty}' = 0
) UPDATE WMS_IN_ARRIVAL_DTL
SET RECEIPT_QTY = RECEIPT_QTY - '{mdDtl.ReceiptDtlQty}',
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}'
ELSE
UPDATE WMS_IN_ARRIVAL_DTL
SET RECEIPT_QTY = RECEIPT_QTY - '{mdDtl.ReceiptDtlQty}',
ARRIVAL_DTL_STATUS = '0',
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}';
";
sqlList.Add(sqlRollBackArrivaldDtlData);
string sqlRollBackArrivalData = $@"
IF NOT EXISTS (
SELECT
1
FROM
WMS_IN_ARRIVAL_DTL
WHERE
ARRIVAL_ID IN (
SELECT
ARRIVAL_ID
FROM
WMS_IN_ARRIVAL_DTL
WHERE
ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}'
)
AND ARRIVAL_DTL_STATUS > 0
AND ARRIVAL_DTL_STATUS < 99
) UPDATE WMS_IN_ARRIVAL
SET ARRIVAL_STATUS = '0',
UPDATE_BY = '{wmsInReceipt.UpdateBy}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
ARRIVAL_ID = (
SELECT
ARRIVAL_ID
FROM
WMS_IN_ARRIVAL_DTL
WHERE
ARRIVAL_DTL_ID = '{mdDtl.ArrivalDtlId}'
);
";
sqlList.Add(sqlRollBackArrivalData);
}
}
}
}
#endregion
int row = new DataRepository(_dataContext).ExecSqlListTran(sqlList);
if (row > 0)
{
return SuccessMessageStatus("删除收货单数据成功!", row);
}
else
{
return FailMessageStatus("删除收货单数据失败!", row);
}
}
catch (Exception ex)
{
return FailMessageStatus($"删除收货单数据发生异常,【{ex.Message}】");
}
}
///
/// 分页查询收货记录数据
///
/// 收货记录查询条件实体类对象
///
public OperateResultInfo> GetWmsInReceiptRecordListForPage(WmsInReceiptRecordSearchMd receiptRecordSearchMd)
{
try
{
#region SQL语句生成
StringBuilder sqlCondition = new StringBuilder();
if (!string.IsNullOrEmpty(receiptRecordSearchMd.ReceiptNoMsg))
{
sqlCondition.Append($" AND RECEIPT_NO = '{receiptRecordSearchMd.ReceiptNoMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.ArrivalNoMsg))
{
sqlCondition.Append($" AND ARRIVAL_NO = '{receiptRecordSearchMd.ArrivalNoMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.RegionNoMsg))
{
sqlCondition.Append($" AND REGION_CODE = '{receiptRecordSearchMd.RegionNoMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.BinNoMsg))
{
sqlCondition.Append($" AND (BIN_CODE like '%{receiptRecordSearchMd.BinNoMsg}%' OR BIN_NAME like '%{receiptRecordSearchMd.BinNoMsg}%')");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.PalletNoMsg))
{
sqlCondition.Append($" AND PALLET_CODE = '{receiptRecordSearchMd.PalletNoMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.ReceipterMsg))
{
sqlCondition.Append($" AND RECEIPTER = '{receiptRecordSearchMd.ReceipterMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.MaterielMsg))
{
sqlCondition.Append($" AND (MATERIEL_CODE like '%{receiptRecordSearchMd.MaterielMsg}%' OR MATERIEL_NAME = '%{receiptRecordSearchMd.MaterielMsg}%')");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.MaterielTypeMsg))
{
sqlCondition.Append($" AND (MATERIEL_TYPE_CODE = '%{receiptRecordSearchMd.MaterielTypeMsg}%' OR MATERIEL_TYPE_NAME = '%{receiptRecordSearchMd.MaterielTypeMsg}%')");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.SupplierMsg))
{
sqlCondition.Append($" AND SUPPLIER_CODE = '{receiptRecordSearchMd.SupplierMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.BatchNoMsg))
{
sqlCondition.Append($" AND BATCH_NO = '{receiptRecordSearchMd.SupplierMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.ItemStatusMsg))
{
sqlCondition.Append($" AND ITEM_STATUS = '{receiptRecordSearchMd.ItemStatusMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.InspectionResultMsg))
{
sqlCondition.Append($" AND INSPECTION_RESULT = '{receiptRecordSearchMd.InspectionResultMsg}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.ReceiptRecordStatus))
{
sqlCondition.Append($" AND RECEIPT_RECORD_STATUS = '{receiptRecordSearchMd.ReceiptRecordStatus}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartReceiptTime))
{
sqlCondition.Append($" AND RECEIPT_TIME >= '{receiptRecordSearchMd.StartReceiptTime}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndReceiptTime))
{
sqlCondition.Append($" AND RECEIPT_TIME <= '{receiptRecordSearchMd.EndReceiptTime}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartProductTime))
{
sqlCondition.Append($" AND PRODUCT_DATE >= '{receiptRecordSearchMd.StartProductTime}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndProductTime))
{
sqlCondition.Append($" AND PRODUCT_DATE <= '{receiptRecordSearchMd.EndProductTime}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartExpTime))
{
sqlCondition.Append($" AND EXP_DATE >= '{receiptRecordSearchMd.StartExpTime}'");
}
if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndExpTime))
{
sqlCondition.Append($" AND EXP_DATE <= '{receiptRecordSearchMd.EndExpTime}'");
}
StringBuilder sqlCountReceiptData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_IN_RECEIPT_RECORD WHERE 1=1");
sqlCountReceiptData.Append(sqlCondition.ToString());
int pageStartIndex = (receiptRecordSearchMd.PageNum - 1) * receiptRecordSearchMd.EveryPageQty;
int pageEndIndex = receiptRecordSearchMd.PageNum * receiptRecordSearchMd.EveryPageQty;
StringBuilder sqlQueryReceiptData = new StringBuilder($@"
SELECT
RECEIPT_RECORD_ID,
NEWID,
RECEIPT_ID,
RECEIPT_NO,
RECEIPT_DTL_ID,
ARRIVAL_NO,
REGION_CODE,
REGION_NAME,
BIN_CODE,
BIN_NAME,
TRAY_CODE,
PALLET_CODE,
RECEIPT_TIME,
RECEIPTER,
MATERIEL_TYPE_CODE,
MATERIEL_TYPE_NAME,
MATERIEL_CODE,
MATERIEL_NAME,
MATERIEL_BARCODE,
MATERIEL_SPEC,
SUPPLIER_CODE,
SUPPLIER_NAME,
BATCH_NO,
PACKAGE_CODE,
UNIT_CODE,
RECEIPT_QTY,
REJECTION_QTY,
REJECTION_REASON,
PRODUCT_DATE,
EXP_DATE,
RECEIPT_RECORD_STATUS,
RECEIPT_RECORD_STATUS_NAME,
INSPECTION_RESULT,
INSPECTION_RESULT_NAME,
ITEM_STATUS,
ITEM_STATUS_NAME,
[DESCRIBE],
CREATE_BY,
CREATE_NAME,
CREATE_TIME,
UPDATE_BY,
UPDATE_NAME,
UPDATE_TIME,
DATA_VERSION,
REMARKS1,
REMARKS2,
REMARKS3,
REMARKS4,
REMARKS5
FROM
VW_WMS_IN_RECEIPT_RECORD
WHERE
1=1
{sqlCondition}
ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC
OFFSET {pageStartIndex} ROWS
FETCH NEXT {receiptRecordSearchMd.EveryPageQty} ROWS ONLY
");
#endregion
int dataCount = Convert.ToInt32(new DataRepository(_dataContext).ExecuteScalar(sqlCountReceiptData.ToString()));
List resultList = new DataRepository(_dataContext).Query(sqlQueryReceiptData.ToString()).ToList();
OperateResultInfo> retDataMsg = SuccessStatus(resultList);
retDataMsg.DataCount = dataCount;
return retDataMsg;
}
catch (Exception ex)
{
return FailMessageStatus>($"查询收货记录数据发生异常,【{ex.Message}】", null);
}
}
///
/// 添加收货组盘数据
///
/// 组盘信息实体类对象
///
public OperateResultInfo AddWmsInReceiptTrayData(WmsStkTrayResult wmsStkTrayResult)
{
try
{
OperateResultInfo checkRetMsg = CheckPalletValidity(wmsStkTrayResult.PALLET_CODE);
if (checkRetMsg.Status != OperateStatus.Success)
{
return checkRetMsg;
}
if (wmsStkTrayResult.WmsStkTrayDtlList.Count > 0)
{
#region SQL语句生成
//分配货位暂时这么写
List sqlList = new List();
string sqlQueryReceiptRegionBinMsg = $@"
SELECT
A.*, B.USER_NAME Create_Name,
C.USER_NAME Update_Name
FROM
BAS_BIN A
LEFT JOIN SYS_USER B ON A.CREATE_BY = B.USER_ID
LEFT JOIN SYS_USER C ON A.UPDATE_BY = C.USER_ID
WHERE
A.REGION_CODE = 'SHDJ_Region'
";
List resultList = new DataRepository(_dataContext).Query(sqlQueryReceiptRegionBinMsg).ToList();
BinResult binMd = resultList[0];
wmsStkTrayResult.TRAY_ID = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Tray_Id"));
wmsStkTrayResult.TRAY_CODE = new DataRepository(_dataContext).GetSequenceMsg("Tray_Code");
string sqlAddWmsStkTray = $@"
INSERT INTO [WMS_STK_TRAY] (
[TRAY_ID],
[TRAY_CODE],
[PALLET_CODE],
[WEIGHT],
[HEIGHT],
[TRAYS_TYPE],
[TRAY_LOADED_TYPE],
[TRAY_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{wmsStkTrayResult.TRAY_ID}',
'{wmsStkTrayResult.TRAY_CODE}',
'{wmsStkTrayResult.PALLET_CODE}',
'{wmsStkTrayResult.WEIGHT}',
'{wmsStkTrayResult.HEIGHT}',
'{wmsStkTrayResult.TRAYS_TYPE}',
'{wmsStkTrayResult.TRAY_LOADED_TYPE}',
'{wmsStkTrayResult.TRAY_STATUS}',
'{wmsStkTrayResult.DESCRIBE}',
'{wmsStkTrayResult.CREATE_BY}',
getdate(),
'{wmsStkTrayResult.UPDATE_BY}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
";
sqlList.Add(sqlAddWmsStkTray);
int putawayId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("InPutaway_Id"));
string puawayNo = new DataRepository(_dataContext).GetSequenceMsg("InPutaway_No");
string sqlAddWmsInPutAway = $@"
INSERT INTO [WMS_IN_PUTAWAY] (
[PUTAWAY_ID],
[PUTAWAY_NO],
[SOURCE_NO],
[PUTAWAY_TYPE],
[TRAY_CODE],
[PALLET_CODE],
[SBIN_CODE],
[PUTAWAY_PRIORITY],
[PUTAWAY_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{putawayId}',
'{puawayNo}',
'{wmsStkTrayResult.WmsStkTrayDtlList[0].WmsInReceiptRecord.RECEIPT_NO}',
'{1}',
'{wmsStkTrayResult.TRAY_CODE}',
'{wmsStkTrayResult.PALLET_CODE}',
'{binMd.BIN_CODE}',
'{100}',
'{0}',
'{wmsStkTrayResult.DESCRIBE}',
'{wmsStkTrayResult.CREATE_BY}',
getdate(),
'{wmsStkTrayResult.UPDATE_BY}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
";
sqlList.Add(sqlAddWmsInPutAway);
string sqlAddWmsStkBalance = $@"
INSERT INTO [WMS_STK_BALANCE] (
[BALANCE_ID],
[AREA_CODE],
[AREA_NAME],
[WAREHOUSE_CODE],
[WAREHOUSE_NAME],
[REGION_CODE],
[REGION_NAME],
[BIN_CODE],
[BIN_NAME],
[TRAY_ID],
[TRAY_CODE],
[PALLET_CODE],
[INWH_TIME],
[BALANCE_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Balance_Id"))}',
'AreaTest1',
'区域测试1',
'WarehouseTest1',
'仓库测试1',
'{binMd.REGION_CODE}',
'{binMd.REGION_NAME}',
'{binMd.BIN_CODE}',
'{binMd.BIN_NAME}',
'{wmsStkTrayResult.TRAY_ID}',
'{wmsStkTrayResult.TRAY_CODE}',
'{wmsStkTrayResult.PALLET_CODE}',
getdate(),
'55',
'{wmsStkTrayResult.DESCRIBE}',
'{wmsStkTrayResult.CREATE_BY}',
getdate(),
'{wmsStkTrayResult.CREATE_BY}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
";
sqlList.Add(sqlAddWmsStkBalance);
List tmpTrayDtlMergeLst= new List();
List tmpReceiptIdLst = new List();
List sqlList_ReceiprRecordAndPutAway = new List();
foreach (WmsStkTrayDtlResult item in wmsStkTrayResult.WmsStkTrayDtlList)
{
item.TRAY_ID = wmsStkTrayResult.TRAY_ID;
WmsStkTrayDtlExtResult trayDtlExtMd = item.WmsStkTrayDtlExtMd;
WmsInReceiptRecordResult receiptRecordMd = item.WmsInReceiptRecord;
var tmpResult = tmpTrayDtlMergeLst.FirstOrDefault(x => x.MATERIEL_CODE == item.MATERIEL_CODE && x.WmsStkTrayDtlExtMd.BATCH_NO == trayDtlExtMd.BATCH_NO);
if (tmpResult != null)
{
tmpResult.QTY += item.QTY;
}
else
{
tmpTrayDtlMergeLst.Add(item);
}
int receiptId = tmpReceiptIdLst.FirstOrDefault(x => x == receiptRecordMd.RECEIPT_ID);
if (receiptId <= 0)
{
tmpReceiptIdLst.Add(receiptRecordMd.RECEIPT_ID);
}
receiptRecordMd.RECEIPT_RECORD_ID = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Receipt_Record_Id"));
int putawayDtlId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("InPutaway_Dtl_Id"));
receiptRecordMd.TRAY_CODE = wmsStkTrayResult.TRAY_CODE;
receiptRecordMd.REGION_CODE = binMd.REGION_CODE;
receiptRecordMd.REGION_NAME = binMd.REGION_NAME;
receiptRecordMd.BIN_CODE = binMd.BIN_CODE;
receiptRecordMd.BIN_NAME = binMd.BIN_NAME;
string receiptTime = string.Empty;
if (receiptRecordMd.RECEIPT_TIME == new DateTime())
{
receiptTime = "NULL";
}
else
{
receiptTime = $"'{receiptRecordMd.RECEIPT_TIME}'";
}
string sqlAddWmsInReceiptRecord = $@"
INSERT INTO [WMS_IN_RECEIPT_RECORD] (
[RECEIPT_RECORD_ID],
[RECEIPT_ID],
[RECEIPT_NO],
[RECEIPT_DTL_ID],
[ARRIVAL_NO],
[REGION_CODE],
[REGION_NAME],
[BIN_CODE],
[BIN_NAME],
[TRAY_CODE],
[PALLET_CODE],
[RECEIPT_TIME],
[RECEIPTER],
[MATERIEL_CODE],
[MATERIEL_NAME],
[MATERIEL_BARCODE],
[MATERIEL_SPEC],
[SUPPLIER_CODE],
[SUPPLIER_NAME],
[BATCH_NO],
[PACKAGE_CODE],
[UNIT_CODE],
[RECEIPT_QTY],
[REJECTION_QTY],
[REJECTION_REASON],
[PRODUCT_DATE],
[EXP_DATE],
[RECEIPT_RECORD_STATUS],
[INSPECTION_RESULT],
[ITEM_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{receiptRecordMd.RECEIPT_RECORD_ID}',
'{receiptRecordMd.RECEIPT_ID}',
'{receiptRecordMd.RECEIPT_NO}',
'{receiptRecordMd.RECEIPT_DTL_ID}',
'{receiptRecordMd.ARRIVAL_NO}',
'{receiptRecordMd.REGION_CODE}',
'{receiptRecordMd.REGION_NAME}',
'{receiptRecordMd.BIN_CODE}',
'{receiptRecordMd.BIN_NAME}',
'{receiptRecordMd.TRAY_CODE}',
'{receiptRecordMd.PALLET_CODE}',
{receiptTime},
'{receiptRecordMd.RECEIPTER}',
'{receiptRecordMd.MATERIEL_CODE}',
'{receiptRecordMd.MATERIEL_NAME}',
'{receiptRecordMd.MATERIEL_BARCODE}',
'{receiptRecordMd.MATERIEL_SPEC}',
'{receiptRecordMd.SUPPLIER_CODE}',
'{receiptRecordMd.SUPPLIER_NAME}',
'{receiptRecordMd.BATCH_NO}',
'{receiptRecordMd.PACKAGE_CODE}',
'{receiptRecordMd.UNIT_CODE}',
'{receiptRecordMd.RECEIPT_QTY}',
'{receiptRecordMd.REJECTION_QTY}',
'{receiptRecordMd.REJECTION_REASON}',
'{receiptRecordMd.PRODUCT_DATE}',
'{receiptRecordMd.EXP_DATE}',
'{receiptRecordMd.RECEIPT_RECORD_STATUS}',
'{receiptRecordMd.INSPECTION_RESULT}',
'{receiptRecordMd.ITEM_STATUS}',
'{receiptRecordMd.DESCRIBE}',
'{receiptRecordMd.CREATE_BY}',
getdate(),
'{receiptRecordMd.UPDATE_BY}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
";
string sqlAddWmsInPutAwayDtl = $@"
INSERT INTO [WMS_IN_PUTAWAY_DTL] (
[PUTAWAY_DTL_ID],
[PUTAWAY_ID],
[MATERIEL_CODE],
[MATERIEL_NAME],
[MATERIEL_BARCODE],
[MATERIEL_SPEC],
[BATCH_NO],
[PACKAGE_CODE],
[UNIT_CODE],
[PUTAWAY_QTY],
[SUPPLIER_CODE],
[SUPPLIER_NAME],
[PRODUCT_DATE],
[EXP_DATE],
[INSPECTION_RESULT],
[PUTAWAY_DTL_STATUS],
[ITEM_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{putawayDtlId}',
'{putawayId}',
'{item.MATERIEL_CODE}',
'{item.MATERIEL_NAME}',
'{item.MATERIEL_BARCODE}',
'{trayDtlExtMd.MATERIEL_SPEC}',
'{trayDtlExtMd.BATCH_NO}',
'{trayDtlExtMd.PACKAGE_CODE}',
'{trayDtlExtMd.UNIT_CODE}',
'{item.QTY}',
'{trayDtlExtMd.SUPPLIER_CODE}',
'{trayDtlExtMd.SUPPLIER_NAME}',
'{trayDtlExtMd.PRODUCT_DATE.ToString("yyyy-MM-dd hh:mm:ss")}',
'{trayDtlExtMd.EXP_DATE.ToString("yyyy-MM-dd hh:mm:ss")}',
'{trayDtlExtMd.INSPECTION_RESULT}',
'{0}',
'{trayDtlExtMd.ITEM_STATUS}',
'{item.DESCRIBE}',
'{trayDtlExtMd.CREATE_BY}',
getdate(),
'{trayDtlExtMd.UPDATE_BY}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
";
sqlList_ReceiprRecordAndPutAway.Add(sqlAddWmsInReceiptRecord);
sqlList_ReceiprRecordAndPutAway.Add(sqlAddWmsInPutAwayDtl);
string sqlUpdateWmsInReceiptDtl = $@"
UPDATE WMS_IN_RECEIPT_DTL
SET
RECEIPT_TRAY_QTY = RECEIPT_TRAY_QTY + '{item.QTY}',
RECEIPT_DTL_STATUS = '{55}',
UPDATE_BY = '{wmsStkTrayResult.UPDATE_BY}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
RECEIPT_DTL_ID = '{receiptRecordMd.RECEIPT_DTL_ID}'
AND RECEIPT_ID = '{receiptRecordMd.RECEIPT_ID}'
";
sqlList_ReceiprRecordAndPutAway.Add(sqlUpdateWmsInReceiptDtl);
}
List sqlList_TrayDtlAndExt = new List();
foreach (WmsStkTrayDtlResult item in tmpTrayDtlMergeLst)
{
item.TRAY_ID = wmsStkTrayResult.TRAY_ID;
WmsStkTrayDtlExtResult trayDtlExtMd = item.WmsStkTrayDtlExtMd;
item.TRAY_DTL_ID = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Tray_Dtl_Id"));
trayDtlExtMd.TRAY_DTL_EXT_ID = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Tray_Dtl_Ext_Id"));
trayDtlExtMd.TRAY_DTL_ID = item.TRAY_DTL_ID;
trayDtlExtMd.TRAY_ID = wmsStkTrayResult.TRAY_ID;
string sqlAddWmsStkTrayDtl = $@"
INSERT INTO [WMS_STK_TRAY_DTL] (
[TRAY_DTL_ID],
[TRAY_ID],
[MATERIEL_ID],
[MATERIEL_CODE],
[MATERIEL_NAME],
[MATERIEL_BARCODE],
[QTY],
[TRAY_DTL_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{item.TRAY_DTL_ID}',
'{item.TRAY_ID}',
'{item.MATERIEL_ID}',
'{item.MATERIEL_CODE}',
'{item.MATERIEL_NAME}',
'{item.MATERIEL_BARCODE}',
'{item.QTY}',
'{55}',
'{item.DESCRIBE}',
'{item.CREATE_BY}',
getdate(),
'{item.UPDATE_BY}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
";
string sqlAddWmsStkTrayDtlExt = $@"
INSERT INTO [WMS_STK_TRAY_DTL_EXT] (
[TRAY_DTL_EXT_ID],
[TRAY_DTL_ID],
[MATERIEL_SPEC],
[PACKAGE_CODE],
[UNIT_CODE],
[BATCH_NO],
[SUPPLIER_CODE],
[SUPPLIER_NAME],
[PRODUCT_DATE],
[EXP_DATE],
[INSPECTION_RESULT],
[LOCK_FLAG],
[MIN_PKG_QTY],
[ECTEND_TIME_LEN],
[SUPPLIER_BATCH],
[ITEM_STATUS],
[DESCRIBE],
[CREATE_BY],
[CREATE_TIME],
[UPDATE_BY],
[UPDATE_TIME],
[DATA_VERSION],
[REMARKS1],
[REMARKS2],
[REMARKS3],
[REMARKS4],
[REMARKS5]
)
VALUES
(
'{trayDtlExtMd.TRAY_DTL_EXT_ID}',
'{trayDtlExtMd.TRAY_DTL_ID}',
'{trayDtlExtMd.MATERIEL_SPEC}',
'{trayDtlExtMd.PACKAGE_CODE}',
'{trayDtlExtMd.UNIT_CODE}',
'{trayDtlExtMd.BATCH_NO}',
'{trayDtlExtMd.SUPPLIER_CODE}',
'{trayDtlExtMd.SUPPLIER_NAME}',
'{trayDtlExtMd.PRODUCT_DATE}',
'{trayDtlExtMd.EXP_DATE}',
'{trayDtlExtMd.INSPECTION_RESULT}',
'{0}',
'{trayDtlExtMd.MIN_PKG_QTY}',
'{trayDtlExtMd.ECTEND_TIME_LEN}',
'{trayDtlExtMd.SUPPLIER_BATCH}',
'{trayDtlExtMd.ITEM_STATUS}',
'{trayDtlExtMd.DESCRIBE}',
'{trayDtlExtMd.CREATE_BY}',
getdate(),
'{trayDtlExtMd.UPDATE_BY}',
getdate(),
0,
NULL,
NULL,
NULL,
NULL,
NULL
);
";
sqlList_TrayDtlAndExt.Add(sqlAddWmsStkTrayDtl);
sqlList_TrayDtlAndExt.Add(sqlAddWmsStkTrayDtlExt);
}
sqlList.AddRange(sqlList_TrayDtlAndExt);
sqlList.AddRange(sqlList_ReceiprRecordAndPutAway);
foreach (int item in tmpReceiptIdLst)
{
string sqlUpdateWmsInReceipt = $@"
IF EXISTS (
SELECT
1
FROM
WMS_IN_RECEIPT_DTL
WHERE
RECEIPT_DTL_STATUS = 55
AND RECEIPT_ID = '{item}'
) UPDATE WMS_IN_RECEIPT
SET RECEIPT_STATUS = 55,
UPDATE_BY = '{wmsStkTrayResult.UPDATE_BY}',
UPDATE_TIME = GETDATE(),
DATA_VERSION = DATA_VERSION + 1
WHERE
RECEIPT_ID = '{item}' ;
";
sqlList.Add(sqlUpdateWmsInReceipt);
}
#endregion
int row = new DataRepository(_dataContext).ExecSqlListTran(sqlList);
if (row > 0)
{
return SuccessMessageStatus("新增收货组盘数据成功!", row);
}
else
{
return FailMessageStatus("新增收货组盘数据失败!", row);
}
}
else
{
return FailMessageStatus($"传入数据不存在组盘明细数据!");
}
}
catch (Exception ex)
{
return FailMessageStatus($"添加收货组盘数据发生异常,【{ex.Message}】");
}
}
public OperateResultInfo CheckPalletValidity(string palletCode)
{
try
{
string sqlQueryBasPallet = $@"
SELECT
*
FROM
BAS_PALLET
WHERE
PALLET_CODE = '{palletCode}'
";
List palletList = new DataRepository(_dataContext).Query(sqlQueryBasPallet).ToList();
if (palletList == null && palletList.Count <= 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】没有在基础托盘表维护数据,请先在维护托盘基础数据!");
}
string sqlQueryPutAway = $@"
SELECT
PUTAWAY_ID,
PUTAWAY_NO,
SOURCE_NO,
PUTAWAY_TYPE,
PUTAWAY_TYPE_NAME,
TRAY_CODE,
PALLET_CODE,
SBIN_CODE,
EBIN_CODE,
PUTAWAY_PRIORITY,
PUTAWAY_STATUS,
PUTAWAY_STATUS_NAME,
[DESCRIBE],
CREATE_BY,
CREATE_NAME,
CREATE_TIME,
UPDATE_BY,
UPDATE_NAME,
UPDATE_TIME
FROM
VW_WMS_IN_PUTAWAY
WHERE
PALLET_CODE = '{palletCode}' AND PUTAWAY_STATUS < 99
";
List putawayList = new DataRepository(_dataContext).Query(sqlQueryPutAway).ToList();
if (putawayList != null && putawayList.Count > 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的上架单数据,无法再次进行组盘!");
}
string sqlQueryPutDown = $@"
SELECT
PUTDOWN_ID,
PUTDOWN_NO,
SOURCE_NO,
PUTDOWN_TYPE,
PUTDOWN_TYPE_NAME,
TRAY_CODE,
PALLET_CODE,
SBIN_CODE,
EBIN_CODE,
PUTDOWN_PRIORITY,
PUTDOWN_STATUS,
PUTDOWN_STATUS_NAME,
[DESCRIBE],
CREATE_BY,
CREATE_NAME,
CREATE_TIME,
UPDATE_BY,
UPDATE_NAME,
UPDATE_TIME
FROM
VW_WMS_OUT_PUTDOWN
WHERE
PALLET_CODE = '{palletCode}' AND PUTDOWN_STATUS < 99
";
List putdownList = new DataRepository(_dataContext).Query(sqlQueryPutDown).ToList();
if (putdownList != null && putdownList.Count > 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的下架单数据,无法再次进行组盘!");
}
string sqlQueryWmsTask = $@"
SELECT
*
FROM
VW_WMS_TSK_TASK
WHERE
PALLET_CODE = '{palletCode}' AND TASK_STATUS < 99
";
List wmstaskList = new DataRepository(_dataContext).Query(sqlQueryWmsTask).ToList();
if (wmstaskList != null && wmstaskList.Count > 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的WMS大任务数据,无法再次进行组盘!");
}
string sqlQueryCrnCmd = $@"
SELECT
*
FROM
VW_WCS_CRN_CMD
WHERE
PALLET_CODE = '{palletCode}' AND CMD_STATUS < 99
";
List crncmdList = new DataRepository(_dataContext).Query(sqlQueryCrnCmd).ToList();
if (crncmdList != null && crncmdList.Count > 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的堆垛机指令数据,无法再次进行组盘!");
}
string sqlQueryTranCmd = $@"
SELECT
*
FROM
VW_WCS_TRAN_CMD
WHERE
PALLET_CODE = '{palletCode}' AND CMD_STATUS < 99
";
List trancmdList = new DataRepository(_dataContext).Query(sqlQueryTranCmd).ToList();
if (trancmdList != null && trancmdList.Count > 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】正在已存在未完成的输送线指令数据,无法再次进行组盘!");
}
string sqlQueryBalance = $@"
SELECT
*
FROM
VW_WMS_STK_BALANCE
WHERE
PALLET_CODE = '{palletCode}' AND BALANCE_STATUS < 99
";
List balanceList = new DataRepository(_dataContext).Query(sqlQueryBalance).ToList();
if (balanceList != null && balanceList.Count > 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】正在已存在库存数据,无法再次进行组盘!");
}
string sqlQueryWmsStkTray = $@"SELECT * FROM VW_WMS_STK_TRAY WHERE PALLET_CODE = '{palletCode}' AND TRAY_STATUS < 99";
List resultWmsStkTrayList = new DataRepository(_dataContext).Query(sqlQueryWmsStkTray).ToList();
if (balanceList != null && balanceList.Count > 0)
{
return FailMessageStatus($"托盘号:【{palletCode}】正在已存在组盘数据,无法再次进行组盘!");
}
return SuccessStatus();
}
catch (Exception ex)
{
return FailMessageStatus($"托盘号:【{palletCode}】合法性校验发生异常:{ex.Message}");
}
}
///
/// 查询待检验的收货单数据
///
///
public OperateResultInfo> GetAllWaitForQaReceiptDtlData()
{
try
{
string sqlQueryWaitQaReceiptDtl = "SELECT * FROM VW_WMS_IN_RECEIPT_DTL WHERE RECEIPT_DTL_STATUS = 0 AND INSPECTION_RESULT = 'Wait'";
List resultList = new DataRepository(_dataContext).Query(sqlQueryWaitQaReceiptDtl).ToList();
OperateResultInfo> retDataMsg = SuccessStatus(resultList);
return retDataMsg;
}
catch (Exception ex)
{
return FailMessageStatus>($"查询待检验的收货单数据发生异常,【{ex.Message}】", null);
}
}
///
/// 同步ERP
///
///
/// Erp生成的入库单号
public int AsyncErp(string ReceiptNo)
{
//获取入库单
var Receipt = new DataRepository(this._dataContext).QueryFirst(" RECEIPT_NO=@ReceiptNo", new { ReceiptNo });
var RecepipRecord = new DataRepository(this._dataContext).Query(" RECEIPT_NO=@ReceiptNo", new { ReceiptNo });
var RecepipDetails = new DataRepository(this._dataContext).Query("RECEIPT_ID=@ReceiptId", new { ReceiptId = Receipt.RECEIPT_ID });
//查询对应到货单信息
var Arrival = new DataRepository(this._dataContext).QueryFirst("ARRIVAL_NO=@ArrivalNo", new { ArrivalNo = Receipt.ARRIVAL_NO });
var ArrivalDetails = new DataRepository(this._dataContext).Query("ARRIVAL_ID=@ArrivalId", new { ArrivalId = Arrival.ARRIVAL_ID });
//构造查询对象
var lookupRecepipDetails = RecepipDetails.ToDictionary(m => m.RECEIPT_DTL_ID);
var lookupArrivalDetail = ArrivalDetails.ToDictionary(m => m.ARRIVAL_DTL_ID);
var inBound = new Model.AppModels.Result.ERP.Inbound()
{
InboundDate = DateTime.Now,
InboundNo = Receipt.ARRIVAL_NO,
InboundType = Model.AppModels.Result.ERP.InboundType.PurchaseIn,
SourceName = "采购到货单",
SourceNo = Arrival.ERP_ID,
WarehouseCode = "2"
};
foreach (var item in RecepipRecord)
{
int ERPDetailId = -1;
if (lookupRecepipDetails.TryGetValue(item.RECEIPT_DTL_ID, out var RecepipDetail))
{
if (lookupArrivalDetail.TryGetValue(RecepipDetail.ARRIVAL_DTL_ID.Value, out var ArrivalDetail))
{
ERPDetailId = ArrivalDetail.ERP_DTL_ID;
}
}
if (ERPDetailId != -1)
{
inBound.InboundDetail.Add(new Model.AppModels.Result.ERP.InboundDetail()
{
BinCode = item.BIN_CODE,
Qty = item.RECEIPT_QTY,
MaterialCode = item.MATERIEL_CODE,
SourceDtlId = ERPDetailId
});
}
}
return this._eRPServer.PuStockIn(inBound).Result;
}
}
}