using DapperORMCore.Context.DataContext; using DapperORMCore.Model.CoreModel; using DapperORMCore.Repository.IRepositorys; using Microsoft.Extensions.Configuration; using NXWMS.IService.NXWMS.OutStock; using NXWMS.Model.AppModels.Condition.Balance; using NXWMS.Model.AppModels.Condition.OutStock; using NXWMS.Model.AppModels.Result.Balance; using NXWMS.Model.AppModels.Result.Base; using NXWMS.Model.AppModels.Result.OutStock; 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.OutStock { /// /// 发货单服务 /// [AutoInject(typeof(IWmsOutInvoiceService), InjectType.Scope)] public class WmsOutInvoiceService : ServiceBase, IWmsOutInvoiceService { #region 全局变量、构造注入 /// /// 系统操作仓储中转 /// private IDataRepositoryContext _dataContext; /// /// SQL节点仓储 /// private ISQLNodeRepository _iSQLNodeRepository; /// /// 配置 /// private IConfiguration _configuration; /// /// 构造注入 /// /// /// /// public WmsOutInvoiceService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository) { this._dataContext = dataRepositoryContext; this._configuration = configuration; this._iSQLNodeRepository = iSQLNodeRepository; } #endregion /// /// 分页查询发货单主表数据 /// /// 发货单查询条件实体类对象 /// public OperateResultInfo> GetWmsOutInvoiceListForPage(WmsOutInvoiceSearchMd invoiceSearchMd) { try { #region SQL语句生成 StringBuilder sqlCondition = new StringBuilder(); if (!string.IsNullOrEmpty(invoiceSearchMd.InvoiceNoMsg)) { sqlCondition.Append($" AND INVOICE_NO = '{invoiceSearchMd.InvoiceNoMsg}'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.SourceNoMsg)) { sqlCondition.Append($" AND SOURCE_BILL_NO = '{invoiceSearchMd.SourceNoMsg}'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.MaterielMsg)) { sqlCondition.Append($" AND INVOICE_ID IN (SELECT INVOICE_ID FROM VW_WMS_OUT_INVOICE_DTL WHERE MATERIEL_CODE LIKE '%{invoiceSearchMd.MaterielMsg}%' OR MATERIEL_NAME LIKE '%{invoiceSearchMd.MaterielMsg}%' OR MATERIEL_BARCODE LIKE '%{invoiceSearchMd.MaterielMsg}%'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.InvoiceType)) { sqlCondition.Append($" AND INVOICE_TYPE = '{invoiceSearchMd.InvoiceType}'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.InvoiceStatus)) { sqlCondition.Append($" AND INVOICE_STATUS = '{invoiceSearchMd.InvoiceStatus}'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.SupplierMsg)) { sqlCondition.Append($" AND INVOICE_ID IN (SELECT INVOICE_ID FROM VW_WMS_OUT_INVOICE_DTL WHERE SUPPLIER_CODE LIKE '%{invoiceSearchMd.SupplierMsg}%' OR SUPPLIER_NAME LIKE '%{invoiceSearchMd.SupplierMsg}%')"); } if (!string.IsNullOrEmpty(invoiceSearchMd.StartCreateTime)) { sqlCondition.Append($" AND CREATE_TIME >= '{invoiceSearchMd.StartCreateTime}'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.EndCreateTime)) { sqlCondition.Append($" AND CREATE_TIME <= '{invoiceSearchMd.EndCreateTime}'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.StartInvoiceEndTime)) { sqlCondition.Append($" AND INVOICE_END_TIME >= '{invoiceSearchMd.StartInvoiceEndTime}'"); } if (!string.IsNullOrEmpty(invoiceSearchMd.EndInvoiceEndTime)) { sqlCondition.Append($" AND INVOICE_END_TIME <= '{invoiceSearchMd.EndInvoiceEndTime}'"); } StringBuilder sqlCountInspectionData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_OUT_INVOICE WHERE 1=1"); sqlCountInspectionData.Append(sqlCondition.ToString()); int pageStartIndex = (invoiceSearchMd.PageNum - 1) * invoiceSearchMd.EveryPageQty; int pageEndIndex = invoiceSearchMd.PageNum * invoiceSearchMd.EveryPageQty; StringBuilder sqlQueryInspectionData = new StringBuilder($@" SELECT INVOICE_ID, INVOICE_NO, INVOICE_TYPE, INVOICE_TYPE_NAME, BATCH_NO, SOURCE_BILL_NO, INVOICE_PRIORITY, INVOICE_END_TIME, INVOICE_STATUS, INVOICE_STATUS_NAME, DESCRIBE, CREATE_BY, CREATE_NAME, CREATE_TIME, UPDATE_BY, UPDATE_NAME, UPDATE_TIME FROM VW_WMS_OUT_INVOICE WHERE 1=1 {sqlCondition} ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC OFFSET {pageStartIndex} ROWS FETCH NEXT {invoiceSearchMd.EveryPageQty} ROWS ONLY "); #endregion int dataCount = Convert.ToInt32(new DataRepository(_dataContext).ExecuteScalar(sqlCountInspectionData.ToString())); List resultList = new DataRepository(_dataContext).Query(sqlQueryInspectionData.ToString()).ToList(); OperateResultInfo> retDataMsg = SuccessStatus(resultList); retDataMsg.DataCount = dataCount; return retDataMsg; } catch (Exception ex) { return FailMessageStatus>($"查询发货单数据发生异常,【{ex.Message}】", null); } } /// /// 根据发货单主键Id查询发货单明细数据 /// /// 发货单实体类对象 /// public OperateResultInfo GetWmsOutInvoiceDtlListForID(WmsOutInvoiceResult wmsOutInvoice) { try { #region SQL语句生成 string sqlQueryWmsOutInvoice = $@" SELECT INVOICE_ID, INVOICE_NO, INVOICE_TYPE, INVOICE_TYPE_NAME, BATCH_NO, SOURCE_BILL_NO, INVOICE_PRIORITY, INVOICE_END_TIME, INVOICE_STATUS, INVOICE_STATUS_NAME, DESCRIBE, CREATE_BY, CREATE_NAME, CREATE_TIME, UPDATE_BY, UPDATE_NAME, UPDATE_TIME FROM VW_WMS_OUT_INVOICE WHERE INVOICE_ID = '{wmsOutInvoice.INVOICE_ID}' "; string strWhere = string.Empty; if (wmsOutInvoice.REMARKS1 == "查询已删除明细数据") { strWhere = "1=1"; } else { strWhere = "INVOICE_DTL_STATUS < 99"; } string sqlQueryWmsInArivalDtl = $@" SELECT * FROM VW_WMS_OUT_INVOICE_DTL WHERE INVOICE_ID = '{wmsOutInvoice.INVOICE_ID}' AND {strWhere} ORDER BY INVOICE_DTL_STATUS,INVOICE_DTL_ID "; #endregion List resultList = new DataRepository(_dataContext).Query(sqlQueryWmsOutInvoice).ToList(); List resultDtlList = new DataRepository(_dataContext).Query(sqlQueryWmsInArivalDtl).ToList(); wmsOutInvoice = resultList[0]; wmsOutInvoice.WmsOutInvoiceDtlList = resultDtlList; OperateResultInfo retDataMsg = SuccessStatus(wmsOutInvoice); return retDataMsg; } catch (Exception ex) { return FailMessageStatus($"查询发货单明细数据发生异常,【{ex.Message}】", null); } } /// /// 新增发货单数据 /// /// 发货单主表对象 /// public OperateResultInfo AddWmsOutInvoiceData(WmsOutInvoiceResult wmsOutInvoice) { try { #region SQL语句生成 List sqlList = new List(); wmsOutInvoice.INVOICE_ID = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Invoice_Id")); wmsOutInvoice.INVOICE_NO = new DataRepository(_dataContext).GetSequenceMsg("Invoice_No"); wmsOutInvoice.INVOICE_STATUS = 0; StringBuilder sqlAddWmsOutInvoice = new StringBuilder(); string invoiceEndTime = DateTime.Compare(wmsOutInvoice.INVOICE_END_TIME, new DateTime()) == 0 ? "NULL" : $"'{wmsOutInvoice.INVOICE_END_TIME}'"; sqlAddWmsOutInvoice.Append($@" INSERT INTO [WMS_OUT_INVOICE] ( [INVOICE_ID], [INVOICE_NO], [INVOICE_TYPE], [INVOICE_END_TIME], [BATCH_NO], [SOURCE_BILL_NO], [INVOICE_PRIORITY], [INVOICE_STATUS], [DESCRIBE], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( '{wmsOutInvoice.INVOICE_ID}', '{wmsOutInvoice.INVOICE_NO}', '{wmsOutInvoice.INVOICE_TYPE}', {invoiceEndTime}, '{wmsOutInvoice.BATCH_NO}', '{wmsOutInvoice.SOURCE_BILL_NO}', '{wmsOutInvoice.INVOICE_PRIORITY}', '{wmsOutInvoice.INVOICE_STATUS}', '{wmsOutInvoice.DESCRIBE}', '{wmsOutInvoice.CREATE_BY}', getdate(), '{wmsOutInvoice.UPDATE_BY}', getdate(), '{0}', NULL, NULL, NULL, NULL, NULL ); "); sqlList.Add(sqlAddWmsOutInvoice.ToString()); foreach (WmsOutInvoiceDtlResult item in wmsOutInvoice.WmsOutInvoiceDtlList) { StringBuilder sqlAddWmsOutInvoiceDtl = new StringBuilder(); item.INVOICE_DTL_ID = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Invoice_Dtl_Id")); item.INVOICE_ID = wmsOutInvoice.INVOICE_ID; item.INVOICE_DTL_STATUS = 0; string productTime = DateTime.Compare(item.PRODUCT_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'"; string expTime = DateTime.Compare(item.EXP_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'"; sqlAddWmsOutInvoiceDtl.Append($@" INSERT INTO [WMS_OUT_INVOICE_DTL] ( [INVOICE_DTL_ID], [INVOICE_ID], [MATERIEL_CODE], [MATERIEL_NAME], [MATERIEL_BARCODE], [MATERIEL_SPEC], [PACKAGE_CODE], [UNIT_CODE], [BATCH_NO], [SUPPLIER_CODE], [SUPPLIER_NAME], [INVOICE_DEMAND_QTY], [INVOICE_CONFIRM_QTY], [PUTDOWN_QTY], [PRODUCT_DATE], [EXP_DATE], [INVOICE_DTL_STATUS], [INSPECTION_RESULT], [ITEM_STATUS], [SOURCE_BILL_DTL_IDX], [DESCRIBE], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( '{item.INVOICE_DTL_ID}', '{item.INVOICE_ID}', '{item.MATERIEL_CODE}', '{item.MATERIEL_NAME}', '{item.MATERIEL_BARCODE}', '{item.MATERIEL_SPEC}', '{item.PACKAGE_CODE}', '{item.UNIT_CODE}', '{item.BATCH_NO}', '{item.SUPPLIER_CODE}', '{item.SUPPLIER_NAME}', '{item.INVOICE_DEMAND_QTY}', '{item.INVOICE_CONFIRM_QTY}', '{item.PUTDOWN_QTY}', {productTime}, {expTime}, '{item.INVOICE_DTL_STATUS}', '{item.INSPECTION_RESULT}', '{item.ITEM_STATUS}', '{item.SOURCE_BILL_DTL_IDX}', '{item.DESCRIBE}', '{item.CREATE_BY}', getdate(), '{item.UPDATE_BY}', getdate(), '{0}', NULL, NULL, NULL, NULL, NULL ); "); sqlList.Add(sqlAddWmsOutInvoiceDtl.ToString()); } #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 EditWmsOutInvoiceData(WmsOutInvoiceResult wmsOutInvoice) { try { #region SQL语句生成 List sqlList = new List(); string invoiceEndTime = DateTime.Compare(wmsOutInvoice.INVOICE_END_TIME, new DateTime()) == 0 ? "NULL" : $"'{wmsOutInvoice.INVOICE_END_TIME}'"; string sqlUpdateWmsOutInvoice = $@" UPDATE [WMS_OUT_INVOICE] SET [INVOICE_NO] = '{wmsOutInvoice.INVOICE_NO}', [INVOICE_TYPE] = '{wmsOutInvoice.INVOICE_TYPE}', [INVOICE_END_TIME] = {invoiceEndTime}, [BATCH_NO] = '{wmsOutInvoice.BATCH_NO}', [SOURCE_BILL_NO] = '{wmsOutInvoice.SOURCE_BILL_NO}', [INVOICE_PRIORITY] = '{wmsOutInvoice.INVOICE_PRIORITY}', [INVOICE_STATUS] = '{wmsOutInvoice.INVOICE_STATUS}', [DESCRIBE] = '{wmsOutInvoice.DESCRIBE}', [UPDATE_BY] = '{wmsOutInvoice.UPDATE_BY}', [UPDATE_TIME] = getdate(), [DATA_VERSION] = [DATA_VERSION] + 1 WHERE ([INVOICE_ID] = '{wmsOutInvoice.INVOICE_ID}'); "; sqlList.Add(sqlUpdateWmsOutInvoice); foreach (WmsOutInvoiceDtlResult item in wmsOutInvoice.WmsOutInvoiceDtlList) { if (item.REMARKS1 == "更新" || item.REMARKS1 == "删除") { string productTime = DateTime.Compare(item.PRODUCT_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'"; string expTime = DateTime.Compare(item.EXP_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'"; string sqlUpdateWmsOutInvoiceDtl = $@" UPDATE [WMS_OUT_INVOICE_DTL] SET [MATERIEL_CODE] = '{item.MATERIEL_CODE}', [MATERIEL_NAME] = '{item.MATERIEL_NAME}', [MATERIEL_BARCODE] = '{item.MATERIEL_BARCODE}', [MATERIEL_SPEC] = '{item.MATERIEL_SPEC}', [PACKAGE_CODE] = '{item.PACKAGE_CODE}', [UNIT_CODE] = '{item.UNIT_CODE}', [BATCH_NO] = '{item.BATCH_NO}', [SUPPLIER_CODE] = '{item.SUPPLIER_CODE}', [SUPPLIER_NAME] = '{item.SUPPLIER_NAME}', [INVOICE_DEMAND_QTY] = '{item.INVOICE_DEMAND_QTY}', [INVOICE_CONFIRM_QTY] = '{item.INVOICE_CONFIRM_QTY}', [PUTDOWN_QTY] = '{item.PUTDOWN_QTY}', [PRODUCT_DATE] = {productTime}, [EXP_DATE] = {expTime}, [INVOICE_DTL_STATUS] = '{item.INVOICE_DTL_STATUS}', [INSPECTION_RESULT] = '{item.INSPECTION_RESULT}', [ITEM_STATUS] = '{item.ITEM_STATUS}', [SOURCE_BILL_DTL_IDX] = '{item.SOURCE_BILL_DTL_IDX}', [DESCRIBE] = '{item.DESCRIBE}', [UPDATE_BY] = '{item.UPDATE_BY}', [UPDATE_TIME] = GETDATE(), [DATA_VERSION] = [DATA_VERSION] + 1 WHERE ([INVOICE_DTL_ID] = '{item.INVOICE_DTL_ID}'); "; sqlList.Add(sqlUpdateWmsOutInvoiceDtl); } if (item.REMARKS1 == "添加") { StringBuilder sqlAddWmsOutInvoiceDtl = new StringBuilder(); item.INVOICE_DTL_ID = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Invoice_Dtl_Id")); item.INVOICE_ID = wmsOutInvoice.INVOICE_ID; item.INVOICE_DTL_STATUS = 0; string productTime = DateTime.Compare(item.PRODUCT_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'"; string expTime = DateTime.Compare(item.EXP_DATE, new DateTime()) == 0 ? "NULL" : $"'{item.PRODUCT_DATE}'"; sqlAddWmsOutInvoiceDtl.Append($@" INSERT INTO [WMS_OUT_INVOICE_DTL] ( [INVOICE_DTL_ID], [INVOICE_ID], [MATERIEL_CODE], [MATERIEL_NAME], [MATERIEL_BARCODE], [MATERIEL_SPEC], [PACKAGE_CODE], [UNIT_CODE], [BATCH_NO], [SUPPLIER_CODE], [SUPPLIER_NAME], [INVOICE_DEMAND_QTY], [INVOICE_CONFIRM_QTY], [PUTDOWN_QTY], [PRODUCT_DATE], [EXP_DATE], [INVOICE_DTL_STATUS], [INSPECTION_RESULT], [ITEM_STATUS], [SOURCE_BILL_DTL_IDX], [DESCRIBE], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( '{item.INVOICE_DTL_ID}', '{item.INVOICE_ID}', '{item.MATERIEL_CODE}', '{item.MATERIEL_NAME}', '{item.MATERIEL_BARCODE}', '{item.MATERIEL_SPEC}', '{item.PACKAGE_CODE}', '{item.UNIT_CODE}', '{item.BATCH_NO}', '{item.SUPPLIER_CODE}', '{item.SUPPLIER_NAME}', '{item.INVOICE_DEMAND_QTY}', '{item.INVOICE_CONFIRM_QTY}', '{item.PUTDOWN_QTY}', {productTime}, {expTime}, '{item.INVOICE_DTL_STATUS}', '{item.INSPECTION_RESULT}', '{item.ITEM_STATUS}', '{item.SOURCE_BILL_DTL_IDX}', '{item.DESCRIBE}', '{item.CREATE_BY}', getdate(), '{item.UPDATE_BY}', getdate(), '{0}', NULL, NULL, NULL, NULL, NULL ); "); sqlList.Add(sqlAddWmsOutInvoiceDtl.ToString()); } } #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 DeleteWmsOutInvoiceData(WmsOutInvoiceResult wmsOutInvoice) { try { #region SQL语句生成 string[] invoiceIdList = wmsOutInvoice.INVOICE_NO.Split(','); List sqlList = new List(); foreach (string item in invoiceIdList) { string sqlDeleteWmsOutInvoice = $@" UPDATE WMS_OUT_INVOICE SET INVOICE_STATUS = '111', UPDATE_BY = '{wmsOutInvoice.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE INVOICE_ID = '{item}'; "; string sqlDeleteWmsOutInvoiceDtl = $@" UPDATE WMS_OUT_INVOICE_DTL SET INVOICE_DTL_STATUS = '111', UPDATE_BY = '{wmsOutInvoice.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE INVOICE_ID = '{item}'; "; sqlList.Add(sqlDeleteWmsOutInvoice); sqlList.Add(sqlDeleteWmsOutInvoiceDtl); /* ToDo: 后续增加删除移至历史表中。 */ } #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> GetWmsOutInvoiceRecordListForPage(WmsOutInvoiceRecordSearchMd receiptRecordSearchMd) { try { #region SQL语句生成 StringBuilder sqlCondition = new StringBuilder(); if (!string.IsNullOrEmpty(receiptRecordSearchMd.InvoiceNoMsg)) { sqlCondition.Append($" AND INVOICE_NO = '{receiptRecordSearchMd.InvoiceNoMsg}'"); } if (!string.IsNullOrEmpty(receiptRecordSearchMd.SourceNoMsg)) { sqlCondition.Append($" AND SOURCE_BILL_NO = '{receiptRecordSearchMd.SourceNoMsg}'"); } 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.PriorityMsg)) { sqlCondition.Append($" AND INVOICE_PRIORITY = '{receiptRecordSearchMd.PriorityMsg}'"); } 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.InvoiceRecordStatus)) { sqlCondition.Append($" AND INVOICE_RECORD_STATUS = '{receiptRecordSearchMd.InvoiceRecordStatus}'"); } if (!string.IsNullOrEmpty(receiptRecordSearchMd.StartInvoiceEndTime)) { sqlCondition.Append($" AND INVOICE_END_TIME >= '{receiptRecordSearchMd.StartInvoiceEndTime}'"); } if (!string.IsNullOrEmpty(receiptRecordSearchMd.EndInvoiceEndTime)) { sqlCondition.Append($" AND INVOICE_END_TIME <= '{receiptRecordSearchMd.EndInvoiceEndTime}'"); } 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 sqlCountInvoiceData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WMS_OUT_INVOICE_RECORD WHERE 1=1"); sqlCountInvoiceData.Append(sqlCondition.ToString()); int pageStartIndex = (receiptRecordSearchMd.PageNum - 1) * receiptRecordSearchMd.EveryPageQty; int pageEndIndex = receiptRecordSearchMd.PageNum * receiptRecordSearchMd.EveryPageQty; StringBuilder sqlQueryInvoiceData = new StringBuilder($@" SELECT INVOICE_RECORD_ID, NEWID, INVOICE_ID, INVOICE_NO, SOURCE_BILL_NO, INVOICE_PRIORITY, INVOICE_DTL_ID, REGION_CODE, REGION_NAME, BIN_CODE, BIN_NAME, TRAY_CODE, PALLET_CODE, INVOICE_END_TIME, MATERIEL_TYPE_CODE, MATERIEL_TYPE_NAME, MATERIEL_CODE, MATERIEL_NAME, MATERIEL_BARCODE, MATERIEL_SPEC, SUPPLIER_CODE, SUPPLIER_NAME, BATCH_NO, PACKAGE_CODE, UNIT_CODE, INVOICE_QTY, PRODUCT_DATE, EXP_DATE, INVOICE_RECORD_STATUS, INVOICE_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_OUT_INVOICE_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(sqlCountInvoiceData.ToString())); List resultList = new DataRepository(_dataContext).Query(sqlQueryInvoiceData.ToString()).ToList(); OperateResultInfo> retDataMsg = SuccessStatus(resultList); retDataMsg.DataCount = dataCount; return retDataMsg; } catch (Exception ex) { return FailMessageStatus>($"查询发货记录数据发生异常,【{ex.Message}】", null); } } /// /// 获取可以发货的库存数据 /// /// 库存查询实体类对象 /// public OperateResultInfo> GetBalanceForInvoice(WmsStkBalanceDtlSearchMd SearchMd) { try { #region SQL语句生成 string sqlQueryBalanceForInvoice = $@" SELECT MATERIEL_CODE, MATERIEL_NAME, MATERIEL_BARCODE, MATERIEL_SPEC, UNIT_CODE, PACKAGE_CODE, BATCH_NO, SUM(QTY) QTY FROM VW_WMS_STK_BALANCE_DTL WHERE TRAY_STATUS = 55 AND BALANCE_STATUS = 55 AND TRAY_DTL_STATUS = 55 AND BATCH_NO LIKE '%{SearchMd.BatchNoMsg}%' AND ( MATERIEL_CODE LIKE '%{SearchMd.MaterielMsg}%' OR MATERIEL_NAME LIKE '%{SearchMd.MaterielMsg}%' OR MATERIEL_BARCODE LIKE '%{SearchMd.MaterielMsg}%' ) GROUP BY MATERIEL_CODE, MATERIEL_NAME, MATERIEL_BARCODE, MATERIEL_SPEC, UNIT_CODE, PACKAGE_CODE, BATCH_NO "; #endregion List resultList = new DataRepository(_dataContext).Query(sqlQueryBalanceForInvoice).ToList(); OperateResultInfo> retDataMsg = SuccessStatus(resultList); return retDataMsg; } catch (Exception ex) { return FailMessageStatus>($"查询库存数据发生异常,【{ex.Message}】", null); } } /// /// 发货单审核 -- 自动分配 /// 查询满足发货单需求的所有库存数据 /// /// 发货单实体类对象 /// public OperateResultInfo InvoiceAllocationBalance(WmsOutInvoiceResult wmsOutInvoice) { try { string sqlQueryTrayDtlRowsCount = $@" SELECT * FROM VW_TRAY_DTL_ROWS_COUNT ORDER BY DtlRows desc "; List trayDtlRows = new DataRepository(_dataContext).Query(sqlQueryTrayDtlRowsCount).ToList(); if (trayDtlRows.Count > 0) { string sqlQueryBalanceDtl = $@" SELECT * FROM VW_WMS_STK_BALANCE_DTL WHERE TRAY_STATUS = 55 AND TRAY_DTL_STATUS = 55 AND BALANCE_STATUS = 55 "; List balanceDtlData = new DataRepository(_dataContext).Query(sqlQueryBalanceDtl).ToList(); List trayAllocateMsg = new List(); int TrayTaskIdx = 0; if (balanceDtlData.Count > 0) { #region 统计托盘明细命中订单明细的行数 foreach (WmsStkTrayDtlRowsCountResult item in trayDtlRows) { //托盘库存明细 List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); //命中订单物料明细行数 int containNum = 0; foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp) { WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO); if (invoiceDtlMd != null) { containNum++; } } item.IncludedInInvoiceNum = containNum; } #endregion //已分配的托盘库存明细 List AllocateBalanceDtlLst = new List(); //寻找托盘明细可以全部命中订单明细行数的托盘 List trayDtlRows_1 = trayDtlRows.Where(x => x.IncludedInInvoiceNum == wmsOutInvoice.WmsOutInvoiceDtlList.Count).ToList();//x.DtlRows >= wmsOutInvoice.WmsOutInvoiceDtlList.Count && if (trayDtlRows_1.Count > 0) { WmsTrayDtlMatchedRateMd trayDtlMatchedRateMd = GetInvoiceOptimalAllocatePallet(trayDtlRows_1, balanceDtlData, wmsOutInvoice.WmsOutInvoiceDtlList); if (trayDtlMatchedRateMd.CompletelyMatchedBalanceDtl.Count > 0) { trayDtlMatchedRateMd.CompletelyMatchedBalanceDtl.OrderBy(x => x.DtlRows).OrderBy(x => x.WeightedValue); WmsStkTrayDtlRowsCountResultExt item = trayDtlMatchedRateMd.CompletelyMatchedBalanceDtl[0]; List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp) { WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO); if (invoiceDtlMd != null) { decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY; decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty; if (allocateQty < demandQty)//发货单已分配数量 { wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY; } } } AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); TrayTaskIdx++; trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1 { BALANCE_ID = item.BALANCE_ID, TRAY_ID = item.TRAY_ID, DtlRows = item.DtlRows, IncludedInInvoiceNum = item.IncludedInInvoiceNum, WeightedValue = item.WeightedValue, PalletTaskPriorityIdx = TrayTaskIdx, }); return SuccessStatus(new WmsBalanceAllocateStatus { BalanceDtlResultLst = AllocateBalanceDtlLst, PalletTaskResultTask = trayAllocateMsg, }); } if (trayDtlMatchedRateMd.SomeMatchedBalanceDtl.Count > 0) { trayDtlMatchedRateMd.SomeMatchedBalanceDtl.OrderByDescending(x => x.IncludedInInvoiceNum).OrderBy(x => x.WeightedValue); foreach (WmsStkTrayDtlRowsCountResultExt item in trayDtlMatchedRateMd.SomeMatchedBalanceDtl) { List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); int thisTrayMatchedNum = 0; foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp) { WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO); decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY; decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty; if (allocateQty < demandQty)//发货单已分配数量 { wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY; thisTrayMatchedNum++; } } var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY); if (isAllocateFinish == null) { //if (thisTrayMatchedNum > 0) //{ AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); //} TrayTaskIdx++; trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1 { BALANCE_ID = item.BALANCE_ID, TRAY_ID = item.TRAY_ID, DtlRows = item.DtlRows, IncludedInInvoiceNum = item.IncludedInInvoiceNum, WeightedValue = item.WeightedValue, PalletTaskPriorityIdx = TrayTaskIdx, }); return SuccessStatus(new WmsBalanceAllocateStatus { BalanceDtlResultLst = AllocateBalanceDtlLst, PalletTaskResultTask = trayAllocateMsg, }); } else { if (thisTrayMatchedNum > 0) { AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); TrayTaskIdx++; trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1 { BALANCE_ID = item.BALANCE_ID, TRAY_ID = item.TRAY_ID, DtlRows = item.DtlRows, IncludedInInvoiceNum = item.IncludedInInvoiceNum, WeightedValue = item.WeightedValue, PalletTaskPriorityIdx = TrayTaskIdx, }); } } } } #region 20210305孙亚龙注释 //foreach (WmsStkTrayDtlRowsCountResult item in trayDtlRows_1) //{ // List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); // foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp) // { // WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO); // decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY; // decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty; // if (allocateQty < demandQty)//发货单已分配数量 // { // wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY; // } // } // var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY); // if (isAllocateFinish == null) // { // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); // return SuccessStatus(AllocateBalanceDtlLst); // } // else // { // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); // } //} #endregion } else { //trayDtlRows.OrderByDescending(x => x.IncludedInInvoiceNum); //foreach (WmsStkTrayDtlRowsCountResult item in trayDtlRows) //{ // List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); // foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp) // { // WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO); // if (invoiceDtlMd != null) // { // decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY; // decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty; // if (allocateQty < demandQty) // { // wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY; // } // } // } // var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY); // if (isAllocateFinish == null) // { // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); // return SuccessStatus(AllocateBalanceDtlLst); // } // else // { // AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); // } //} //return FailMessageStatus>($"库存不足。", AllocateBalanceDtlLst); } List trayDtlRows_2 = trayDtlRows.Where(x => x.IncludedInInvoiceNum < wmsOutInvoice.WmsOutInvoiceDtlList.Count && x.IncludedInInvoiceNum > 0).ToList(); if (trayDtlRows_2.Count > 0) { trayDtlRows_2.OrderByDescending(x => x.IncludedInInvoiceNum); List stkTrayDtlRowsCountResultExtLst_2 = GetInvoiceOptimalAllocatePallet_WeightedValue(trayDtlRows_1, balanceDtlData, wmsOutInvoice.WmsOutInvoiceDtlList); stkTrayDtlRowsCountResultExtLst_2.OrderBy(x => x.WeightedValue).OrderByDescending(x => x.IncludedInInvoiceNum); foreach (WmsStkTrayDtlRowsCountResultExt item in stkTrayDtlRowsCountResultExtLst_2) { List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); int thisTrayMatchedNum = 0; foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp) { WmsOutInvoiceDtlResult invoiceDtlMd = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO); if (invoiceDtlMd != null) { decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY; decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty; if (allocateQty < demandQty) { wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO).AllocatedBalanceQty = allocateQty + mdTmp.QTY; thisTrayMatchedNum++; } } } var isAllocateFinish = wmsOutInvoice.WmsOutInvoiceDtlList.Find(x => x.AllocatedBalanceQty < x.INVOICE_DEMAND_QTY); if (isAllocateFinish == null) { AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); TrayTaskIdx++; trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1 { BALANCE_ID = item.BALANCE_ID, TRAY_ID = item.TRAY_ID, DtlRows = item.DtlRows, IncludedInInvoiceNum = item.IncludedInInvoiceNum, WeightedValue = item.WeightedValue, PalletTaskPriorityIdx = TrayTaskIdx, }); return SuccessStatus(new WmsBalanceAllocateStatus { BalanceDtlResultLst = AllocateBalanceDtlLst, PalletTaskResultTask = trayAllocateMsg, }); } else { if (thisTrayMatchedNum > 0) { AllocateBalanceDtlLst.AddRange(trayDtlBalanceTmp); TrayTaskIdx++; trayAllocateMsg.Add(new WmsStkTrayDtlRowsCountResultExt1 { BALANCE_ID = item.BALANCE_ID, TRAY_ID = item.TRAY_ID, DtlRows = item.DtlRows, IncludedInInvoiceNum = item.IncludedInInvoiceNum, WeightedValue = item.WeightedValue, PalletTaskPriorityIdx = TrayTaskIdx, }); } } } return FailMessageStatus($"库存不足。", new WmsBalanceAllocateStatus { BalanceDtlResultLst = AllocateBalanceDtlLst, PalletTaskResultTask = trayAllocateMsg, }); } else { return FailMessageStatus($"库存不足。", new WmsBalanceAllocateStatus { BalanceDtlResultLst = AllocateBalanceDtlLst, PalletTaskResultTask = trayAllocateMsg, }); } } else { return FailMessageStatus($"未找库存数据。",null); } } else { return FailMessageStatus($"未找库存数据。", null); } } catch (Exception ex) { return FailMessageStatus($"发货单库存分配发生异常,【{ex.Message}】", null); } } #region 20210305 孙亚龙新增发货单筛选出库托盘最优解的算法 private WmsTrayDtlMatchedRateMd GetInvoiceOptimalAllocatePallet(List tmpWmsStkTrayDtlRows, List balanceDtlData, List WmsOutInvoiceDtlList) { try { WmsTrayDtlMatchedRateMd retMd = new WmsTrayDtlMatchedRateMd(); foreach (WmsStkTrayDtlRowsCountResult item in tmpWmsStkTrayDtlRows) { int matchedNum = 0; decimal thisTrayWeightedValue = 0; List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); foreach (WmsOutInvoiceDtlResult invoiceItemMd in WmsOutInvoiceDtlList) { WmsStkBalanceDtlResult mdTmp = trayDtlBalanceTmp.Find(x => x.MATERIEL_CODE == invoiceItemMd.MATERIEL_CODE && x.BATCH_NO == invoiceItemMd.BATCH_NO); decimal demandQty = invoiceItemMd.INVOICE_DEMAND_QTY; decimal allocateQty = mdTmp.QTY; if (allocateQty >= demandQty) { matchedNum++; } thisTrayWeightedValue += Math.Abs(allocateQty - demandQty);// 设定匹配度权值 } WmsStkTrayDtlRowsCountResultExt tmpMd = new WmsStkTrayDtlRowsCountResultExt { BALANCE_ID = item.BALANCE_ID, TRAY_ID = item.TRAY_ID, DtlRows = item.DtlRows, IncludedInInvoiceNum = item.IncludedInInvoiceNum, WeightedValue = thisTrayWeightedValue }; if (matchedNum == WmsOutInvoiceDtlList.Count) { retMd.CompletelyMatchedBalanceDtl.Add(tmpMd); } else { retMd.SomeMatchedBalanceDtl.Add(tmpMd); } } return retMd; } catch { return new WmsTrayDtlMatchedRateMd(); } } private List GetInvoiceOptimalAllocatePallet_WeightedValue(List tmpWmsStkTrayDtlRows, List balanceDtlData, List WmsOutInvoiceDtlList) { try { List retList = new List(); foreach (WmsStkTrayDtlRowsCountResult item in tmpWmsStkTrayDtlRows) { //int matchedNum = 0; decimal thisTrayWeightedValue = 0; List trayDtlBalanceTmp = balanceDtlData.FindAll(x => x.TRAY_ID == item.TRAY_ID); foreach (WmsStkBalanceDtlResult mdTmp in trayDtlBalanceTmp) { WmsOutInvoiceDtlResult invoiceItemMd = WmsOutInvoiceDtlList.FirstOrDefault(x => x.MATERIEL_CODE == mdTmp.MATERIEL_CODE && x.BATCH_NO == mdTmp.BATCH_NO); if (invoiceItemMd != null) { decimal demandQty = invoiceItemMd.INVOICE_DEMAND_QTY; decimal allocateQty = mdTmp.QTY; thisTrayWeightedValue += Math.Abs(allocateQty - demandQty);// 设定匹配度权值 } } WmsStkTrayDtlRowsCountResultExt tmpMd = new WmsStkTrayDtlRowsCountResultExt { BALANCE_ID = item.BALANCE_ID, TRAY_ID = item.TRAY_ID, DtlRows = item.DtlRows, IncludedInInvoiceNum = item.IncludedInInvoiceNum, WeightedValue = thisTrayWeightedValue }; retList.Add(tmpMd); } return retList; } catch { return new List(); } } #endregion /// /// 发货单审核 -- 手动分配 /// 查询满足发货单需求的所有库存数据 /// /// 库存明细查询实体类对象 /// public OperateResultInfo> InvoiceAllovationBalance(WmsStkBalanceDtlSearchMd SearchMd) { try { StringBuilder sqlCondition = new StringBuilder(); if (!string.IsNullOrEmpty(SearchMd.MaterielMsg)) { sqlCondition.Append($" AND (MATERIEL_CODE like '%{SearchMd.MaterielMsg}%' OR MATERIEL_NAME like '%{SearchMd.MaterielMsg}%' OR MATERIEL_BARCODE like '%{SearchMd.MaterielMsg}%')"); } if (!string.IsNullOrEmpty(SearchMd.BatchNoMsg)) { sqlCondition.Append($" AND BATCH_NO = '{SearchMd.BatchNoMsg}'"); } if (!string.IsNullOrEmpty(SearchMd.RegionMsg)) { sqlCondition.Append($" AND REGION_CODE = '{SearchMd.RegionMsg}'"); } if (!string.IsNullOrEmpty(SearchMd.BinMsg)) { sqlCondition.Append($" AND (BIN_CODE LIKE '%{SearchMd.BinMsg}%' OR BIN_NAME LIKE '%{SearchMd.BinMsg}%')"); } if (!string.IsNullOrEmpty(SearchMd.PalletMsg)) { sqlCondition.Append($" AND PALLET_CODE = '{SearchMd.PalletMsg}'"); } string materielCodeList = ""; string batchNoList = ""; foreach (WmsOutInvoiceDtlResult item in SearchMd.InvoiceMd.WmsOutInvoiceDtlList) { materielCodeList += "'" + item.MATERIEL_CODE + "',"; batchNoList += "'" + item.BATCH_NO + "',"; } sqlCondition.Append($" AND MATERIEL_CODE IN ({materielCodeList.Substring(0, materielCodeList.Length - 1)})"); sqlCondition.Append($" AND BATCH_NO IN ({batchNoList.Substring(0, batchNoList.Length - 1)})"); string sqlQueryBalanceDtl = $@" SELECT * FROM VW_WMS_STK_BALANCE_DTL WHERE TRAY_STATUS = 55 AND TRAY_DTL_STATUS = 55 AND BALANCE_STATUS = 55 {sqlCondition} "; List balanceDtlData = new DataRepository(_dataContext).Query(sqlQueryBalanceDtl).ToList(); return SuccessStatus(balanceDtlData); } catch (Exception ex) { return FailMessageStatus>($"发货单手动分配,库存查询发生异常,【{ex.Message}】", null); } } /// /// 发货审核数据提交 /// /// 发货审核实体类对象 /// public OperateResultInfo SubmitInvoiceCheckResult(WmsOutInvoiceCheckResult checkResult) { try { WmsOutInvoiceResult invoiceMdResult = checkResult.InvoiceMdResult; #region SQL语句生成 List TrayIdLst = checkResult.TrayIdLst; if (checkResult.IsAutoAllocateBalance) { //自动分配库存时,按照自动找库存的逻辑顺序生成托盘出库任务。 TrayIdLst.OrderBy(x => x.PalletTaskPriorityIdx); } else { //手动分配库存时,需要进行一次托盘库存分配权值计算,再按照托盘下架的权值,进行排序,最后生成出库任务 foreach (WmsStkTrayDtlRowsCountResultExt1 item in TrayIdLst) { string sqlQueryBalanceDtl = $@" SELECT * FROM VW_WMS_STK_BALANCE_DTL WHERE TRAY_STATUS = 55 AND TRAY_DTL_STATUS = 55 AND BALANCE_STATUS = 55 AND TRAY_ID = '{item.TRAY_ID}' "; List balanceDtlData = new DataRepository(_dataContext).Query(sqlQueryBalanceDtl).ToList(); if (balanceDtlData.Count > 0) { decimal thisTrayWeightedValue = 0; int matchedNum = 0; foreach (WmsStkBalanceDtlResult balDtlMd in balanceDtlData) { WmsOutInvoiceDtlResult invoiceItemMd = invoiceMdResult.WmsOutInvoiceDtlList.FirstOrDefault(x => x.MATERIEL_CODE == balDtlMd.MATERIEL_CODE && x.BATCH_NO == balDtlMd.BATCH_NO); if (invoiceItemMd != null) { decimal demandQty = invoiceItemMd.INVOICE_DEMAND_QTY; decimal allocateQty = balDtlMd.QTY; thisTrayWeightedValue += Math.Abs(allocateQty - demandQty);// 设定匹配度权值 matchedNum++; } } item.BALANCE_ID = balanceDtlData[0].BALANCE_ID; item.DtlRows = balanceDtlData.Count;//托盘明细行数 item.IncludedInInvoiceNum = matchedNum;//匹配行数 item.WeightedValue = thisTrayWeightedValue;//匹配权值 } } //手动分配库存时按照托盘匹配行数倒序、和权值正序进行排序 TrayIdLst.OrderByDescending(x => x.IncludedInInvoiceNum).OrderBy(x=>x.WeightedValue); } List sqlList = new List(); string sqlUpdateInvoice = $@" UPDATE WMS_OUT_INVOICE SET INVOICE_STATUS = 22, UPDATE_BY = '{invoiceMdResult.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE INVOICE_ID = '{invoiceMdResult.INVOICE_ID}' "; sqlList.Add(sqlUpdateInvoice); foreach (WmsStkTrayDtlRowsCountResultExt1 item in TrayIdLst) { string sqlQueryBalanceDtl = $@" SELECT * FROM VW_WMS_STK_BALANCE_DTL WHERE TRAY_STATUS = 55 AND TRAY_DTL_STATUS = 55 AND BALANCE_STATUS = 55 AND TRAY_ID = '{item.TRAY_ID}' "; List balanceDtlData = new DataRepository(_dataContext).Query(sqlQueryBalanceDtl).ToList(); if (balanceDtlData.Count > 0) { int putdownId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("OutPutdown_Id")); string putdownNo = new DataRepository(_dataContext).GetSequenceMsg("OutPutdown_No"); string sqlAddPutDown = $@" INSERT INTO [WMS_OUT_PUTDOWN] ( [PUTDOWN_ID], [PUTDOWN_NO], [PUTDOWN_TYPE], [TRAY_CODE], [PALLET_CODE], [SBIN_CODE], [EBIN_CODE], [PUTDOWN_PRIORITY], [PUTDOWN_STATUS], [DESCRIBE], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5], [SOURCE_NO] ) VALUES ( '{putdownId}', '{putdownNo}', '{1}', '{balanceDtlData[0].TRAY_CODE}', '{balanceDtlData[0].PALLET_CODE}', '{balanceDtlData[0].BIN_CODE}', NULL, '{100}', '{0}', NULL, '{invoiceMdResult.UPDATE_BY}', getdate(), '{invoiceMdResult.UPDATE_BY}', getdate(), 0, NULL, NULL, NULL, NULL, NULL, '{invoiceMdResult.INVOICE_NO}' ); "; sqlList.Add(sqlAddPutDown); string sqlUpdateBalance = $@" UPDATE WMS_STK_BALANCE SET BALANCE_STATUS = 66, UPDATE_BY = '{invoiceMdResult.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE BALANCE_ID = '{balanceDtlData[0].BALANCE_ID}' "; sqlList.Add(sqlUpdateBalance); string sqlUpdateTray = $@" UPDATE WMS_STK_TRAY SET TRAY_STATUS = 66, UPDATE_BY = '{invoiceMdResult.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_ID = '{balanceDtlData[0].TRAY_ID}' "; sqlList.Add(sqlUpdateTray); int thisTrayMatchedNum = 0; foreach (WmsStkBalanceDtlResult balDtlMd in balanceDtlData) { WmsOutInvoiceDtlResult invoiceDtlMd = invoiceMdResult.WmsOutInvoiceDtlList.Find(x => x.MATERIEL_CODE == balDtlMd.MATERIEL_CODE && x.BATCH_NO == balDtlMd.BATCH_NO); #region MyRegion if (invoiceDtlMd != null) { decimal demandQty = invoiceDtlMd.INVOICE_DEMAND_QTY; invoiceDtlMd.AllocatedBalanceQty = invoiceDtlMd.AllocatedBalanceQty + balDtlMd.QTY; decimal allocateQty = invoiceDtlMd.AllocatedBalanceQty; if (allocateQty <= demandQty) { thisTrayMatchedNum++; } } #endregion int invoiceRecordId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("Invoice_Record_Id")); int putdownDtlId = Convert.ToInt32(new DataRepository(_dataContext).GetSequenceMsg("OutPutdown_Dtl_Id")); string sqlAddInvoiceRecord = $@" INSERT INTO [WMS_OUT_INVOICE_RECORD] ( [INVOICE_RECORD_ID], [INVOICE_ID], [INVOICE_NO], [SOURCE_BILL_NO], [INVOICE_DTL_ID], [REGION_CODE], [REGION_NAME], [BIN_CODE], [BIN_NAME], [TRAY_CODE], [PALLET_CODE], [INVOICE_EXAMINE_USER], [INVOICE_END_TIME], [MATERIEL_CODE], [MATERIEL_NAME], [MATERIEL_BARCODE], [MATERIEL_SPEC], [PACKAGE_CODE], [UNIT_CODE], [BATCH_NO], [SUPPLIER_CODE], [SUPPLIER_NAME], [INVOICE_QTY], [PRODUCT_DATE], [EXP_DATE], [INSPECTION_RESULT], [INVOICE_RECORD_STATUS], [ITEM_STATUS], [DESCRIBE], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( '{invoiceRecordId}', '{invoiceMdResult.INVOICE_ID}', '{invoiceMdResult.INVOICE_NO}', '{invoiceMdResult.SOURCE_BILL_NO}', '{(invoiceDtlMd == null ? 0 : invoiceDtlMd.INVOICE_DTL_ID)}', '{balDtlMd.REGION_CODE}', '{balDtlMd.REGION_NAME}', '{balDtlMd.BIN_CODE}', '{balDtlMd.BIN_NAME}', '{balDtlMd.TRAY_CODE}', '{balDtlMd.PALLET_CODE}', '{invoiceMdResult.UPDATE_NAME}', '{invoiceMdResult.INVOICE_END_TIME}', '{balDtlMd.MATERIEL_CODE}', '{balDtlMd.MATERIEL_NAME}', '{balDtlMd.MATERIEL_BARCODE}', '{balDtlMd.MATERIEL_SPEC}', '{balDtlMd.PACKAGE_CODE}', '{balDtlMd.UNIT_CODE}', '{balDtlMd.BATCH_NO}', '{balDtlMd.SUPPLIER_CODE}', '{balDtlMd.SUPPLIER_NAME}', '{balDtlMd.QTY}', '{balDtlMd.PRODUCT_DATE}', '{balDtlMd.EXP_DATE}', '{balDtlMd.INSPECTION_RESULT}', 0, '{balDtlMd.ITEM_STATUS}', '{invoiceMdResult.DESCRIBE}', '{invoiceMdResult.UPDATE_BY}', getdate(), '{invoiceMdResult.UPDATE_BY}', getdate(), 0, NULL, NULL, NULL, NULL, NULL ); "; sqlList.Add(sqlAddInvoiceRecord); string sqlAddPutDownDtl = $@" INSERT INTO [WMS_OUT_PUTDOWN_DTL] ( [PUTDOWN_DTL_ID], [PUTDOWN_ID], [MATERIEL_CODE], [MATERIEL_NAME], [MATERIEL_BARCODE], [MATERIEL_SPEC], [PACKAGE_CODE], [UNIT_CODE], [BATCH_NO], [SUPPLIER_CODE], [SUPPLIER_NAME], [PUTDOWN_QTY], [PRODUCT_DATE], [EXP_DATE], [PUTDOWN_DTL_STATUS], [INSPECTION_RESULT], [ITEM_STATUS], [DESCRIBE], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( '{putdownDtlId}', '{putdownId}', '{balDtlMd.MATERIEL_CODE}', '{balDtlMd.MATERIEL_NAME}', '{balDtlMd.MATERIEL_BARCODE}', '{balDtlMd.MATERIEL_SPEC}', '{balDtlMd.PACKAGE_CODE}', '{balDtlMd.UNIT_CODE}', '{balDtlMd.BATCH_NO}', '{balDtlMd.SUPPLIER_CODE}', '{balDtlMd.SUPPLIER_NAME}', '{balDtlMd.QTY}', '{balDtlMd.PRODUCT_DATE}', '{balDtlMd.EXP_DATE}', '{0}', '{balDtlMd.INSPECTION_RESULT}', '{balDtlMd.ITEM_STATUS}', NULL, '{invoiceMdResult.UPDATE_BY}', getdate(), '{invoiceMdResult.UPDATE_BY}', getdate(), 0, NULL, NULL, NULL, NULL, NULL ); "; sqlList.Add(sqlAddPutDownDtl); string sqlUpdateTrayDtl = $@" UPDATE WMS_STK_TRAY_DTL SET TRAY_DTL_STATUS = 66, UPDATE_BY = '{invoiceMdResult.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_DTL_ID = '{balDtlMd.TRAY_DTL_ID}' "; sqlList.Add(sqlUpdateTrayDtl); } string sqlQueryRetreatRegionBinMsg = $@"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.BIN_TYPE = '2' AND A.REGION_CODE = '{balanceDtlData[0].REGION_CODE}'"; List resultBinList = new DataRepository(_dataContext).Query(sqlQueryRetreatRegionBinMsg).ToList(); string eLocNo = string.Empty; if (thisTrayMatchedNum == balanceDtlData.Count) { eLocNo = "1008"; } else { eLocNo = "1001"; } #region ToDo : 添加WMS大任务 string taskNo = new DataRepository(_dataContext).GetSequenceMsg("Task_No"); string sqlInsertWmsTask = $@" INSERT INTO [dbo].[WMS_TSK_TASK] ( [WAREHOUSE_CODE], [WAREHOUSE_NAME], [TASK_NO], [TRAY_CODE], [PALLET_CODE], [TRAY_LOADED_TYPE], [SLOC_CODE], [ELOC_CODE], [CLOC_CODE], [TASK_TYPE], [TASK_MSG], [ERR_FLAG], [TASK_PRIORITY], [TASK_STATUS], [SBIN_CODE], [EBIN_CODE], [CMD_NO], [ROUTE_CODE], [CREATE_BY], [CREATE_TIME], [UPDATE_BY], [UPDATE_TIME], [DATA_VERSION], [REMARKS1], [REMARKS2], [REMARKS3], [REMARKS4], [REMARKS5] ) VALUES ( 'WarehouseTest1', '仓库测试1', '{taskNo}', '{balanceDtlData[0].TRAY_CODE}', '{balanceDtlData[0].PALLET_CODE}', '{1}', '{1012}', '{eLocNo}', '{1012}', '{6}', NULL, '{0}', '{100}', '{0}', '{balanceDtlData[0].BIN_CODE}', '{resultBinList[0].BIN_CODE}', NULL, '', '{invoiceMdResult.UPDATE_BY}', getdate(), '{invoiceMdResult.UPDATE_BY}', getdate(), 0, NULL, NULL, NULL, NULL, NULL ); "; sqlList.Add(sqlInsertWmsTask); #endregion } else { return FailMessageStatus($"预分配的托盘信息【组盘ID为:{item.TRAY_ID}】发生变动,无法进行发货审核,请重新选择分配的托盘!"); } } string sqlUpdateInvoiceDtl = $@" UPDATE WMS_OUT_INVOICE_DTL SET INVOICE_DTL_STATUS = 22, UPDATE_BY = '{invoiceMdResult.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE INVOICE_ID = '{invoiceMdResult.INVOICE_ID}' "; sqlList.Add(sqlUpdateInvoiceDtl); #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}】"); } } #region 到货确认 /// /// 获取托盘到货确认数据 /// /// 下架单实体类对象 /// public OperateResultInfo> QueryInvoiceSortData(WmsOutPutDownResult putDownResult) { try { #region SQL语句生成 List sqlList = new List(); string sqlQueryPutDownForPallet = $@" SELECT * FROM VW_WMS_OUT_PUTDOWN WHERE PALLET_CODE = '{putDownResult.PALLET_CODE}' AND PUTDOWN_STATUS = 55 "; List resultList = new DataRepository(_dataContext).Query(sqlQueryPutDownForPallet).ToList(); if (resultList.Count > 0) { putDownResult = resultList[0]; string sqlQueryWmsPutDownDtl = $@" SELECT * FROM VW_WMS_OUT_PUTDOWN_DTL WHERE PUTDOWN_ID = '{putDownResult.PUTDOWN_ID}' ORDER BY PUTDOWN_DTL_STATUS,PUTDOWN_DTL_ID "; List PutDownDtlListResult = new DataRepository(_dataContext).Query(sqlQueryWmsPutDownDtl).ToList(); string sqlQueryWmsInvoiceRecordExt = $@" SELECT A.*, B.INVOICE_DEMAND_QTY, B.INVOICE_CONFIRM_QTY, B.PUTDOWN_QTY INVOICE_PUTDOWN_QTY FROM VW_WMS_OUT_INVOICE_RECORD A LEFT JOIN VW_WMS_OUT_INVOICE_DTL B ON A.INVOICE_DTL_ID = B.INVOICE_DTL_ID WHERE A.TRAY_CODE = '{putDownResult.TRAY_CODE}' "; List InvoiceRecordExtListResult = new DataRepository(_dataContext).Query(sqlQueryWmsInvoiceRecordExt).ToList(); string sqlQueryWmsBalanceDtl = $@" SELECT * FROM VW_WMS_STK_BALANCE_DTL WHERE TRAY_CODE = '{putDownResult.TRAY_CODE}' AND BALANCE_STATUS = 66 "; List BalanceDtlListResult = new DataRepository(_dataContext).Query(sqlQueryWmsBalanceDtl).ToList(); foreach (WmsOutInvoiceRecordExtResult item in InvoiceRecordExtListResult) { WmsOutPutDownDtlResult putdownDtlMd = PutDownDtlListResult.Find(x => x.MATERIEL_CODE == item.MATERIEL_CODE && x.BATCH_NO == item.BATCH_NO); WmsStkBalanceDtlResult balanceDtlMd = BalanceDtlListResult.Find(x => x.MATERIEL_CODE == item.MATERIEL_CODE && x.BATCH_NO == item.BATCH_NO); item.TRAY_QTY = balanceDtlMd.QTY; if ((item.INVOICE_DEMAND_QTY - item.INVOICE_CONFIRM_QTY) > putdownDtlMd.PUTDOWN_QTY) { item.INVOICE_SORT_QTY = putdownDtlMd.PUTDOWN_QTY; } else { item.INVOICE_SORT_QTY = (item.INVOICE_DEMAND_QTY - item.INVOICE_CONFIRM_QTY); } } return SuccessStatus(InvoiceRecordExtListResult); } else { return FailMessageStatus>($"未查询到托盘号:【{putDownResult.PALLET_CODE}】的下架单信息!", null); } #endregion } catch (Exception ex) { return FailMessageStatus>($"查询托盘出库分拣数据处理发生异常,【{ex.Message}】",null); } } /// /// 提交到货确认数据 /// /// 发货记录拓展数据列表 /// public OperateResultInfo SubmitInvoiceSortData(List wmsOutInvoiceRecordExts) { try { #region SQL语句生成 List sqlList = new List(); string sqlUpdatePutDown = $@" UPDATE WMS_OUT_PUTDOWN SET PUTDOWN_STATUS = 99, UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}'; "; sqlList.Add(sqlUpdatePutDown); string sqlUpdatePutDownDtl = $@" UPDATE WMS_OUT_PUTDOWN_DTL SET PUTDOWN_DTL_STATUS = 99, UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE PUTDOWN_ID IN (SELECT PUTDOWN_ID FROM WMS_OUT_PUTDOWN WHERE TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}'); "; sqlList.Add(sqlUpdatePutDownDtl); foreach (WmsOutInvoiceRecordExtResult item in wmsOutInvoiceRecordExts) { string sqlUpdateInvoiceDtl = $@" UPDATE WMS_OUT_INVOICE_DTL SET INVOICE_CONFIRM_QTY = INVOICE_CONFIRM_QTY + '{item.INVOICE_QTY}', INVOICE_DTL_STATUS = 99, UPDATE_BY = '{item.UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE INVOICE_DTL_ID = '{item.INVOICE_DTL_ID}' ; "; sqlList.Add(sqlUpdateInvoiceDtl); } string sqlUpdateInvoice = $@" IF NOT EXISTS ( SELECT 1 FROM VW_WMS_OUT_INVOICE_DTL WHERE INVOICE_ID = '{wmsOutInvoiceRecordExts[0].INVOICE_ID}' AND INVOICE_DTL_STATUS < 99 ) UPDATE WMS_OUT_INVOICE SET INVOICE_STATUS = 99, UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE INVOICE_ID = '{wmsOutInvoiceRecordExts[0].INVOICE_ID}' "; sqlList.Add(sqlUpdateInvoice); string sqlUpdateInvoiceRecord = $@" UPDATE WMS_OUT_INVOICE_RECORD SET INVOICE_RECORD_STATUS = 2, UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}' AND PALLET_CODE = '{wmsOutInvoiceRecordExts[0].PALLET_CODE}' AND INVOICE_RECORD_STATUS = 1; "; sqlList.Add(sqlUpdateInvoiceRecord); string sqlUpdateWmsStkTray = $@" UPDATE WMS_STK_TRAY SET TRAY_STATUS = 99, UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}'; "; string sqlUpdateWmsStkTrayDtl = $@" UPDATE WMS_STK_TRAY_DTL SET TRAY_DTL_STATUS = 99, UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_ID IN ( SELECT TRAY_ID FROM WMS_STK_TRAY WHERE TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}' ); "; string sqlUpdateWmsStkBalance = $@" UPDATE WMS_STK_BALANCE SET BALANCE_STATUS = 99, UPDATE_BY = '{wmsOutInvoiceRecordExts[0].UPDATE_BY}', UPDATE_TIME = GETDATE(), DATA_VERSION = DATA_VERSION + 1 WHERE TRAY_CODE = '{wmsOutInvoiceRecordExts[0].TRAY_CODE}'; "; sqlList.Add(sqlUpdateWmsStkTray); sqlList.Add(sqlUpdateWmsStkTrayDtl); sqlList.Add(sqlUpdateWmsStkBalance); #region ToDo : 更新WMS大任务 //string sqlUpdateWmsTask = $@" // "; //sqlList.Add(sqlUpdateWmsTask); #endregion #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}】"); } } #endregion } }