using DapperORMCore.Context.DataContext; using DapperORMCore.Model.CoreModel; using DapperORMCore.Repository.IRepositorys; using Microsoft.Extensions.Configuration; using NXWMS.IService.NXPDA.Balance; using NXWMS.Model.AppModels.Condition.NXPDA.Balance; using NXWMS.Model.AppModels.Result.NXPDA.Balance; 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.NXPDA.Balance { /// /// 库存查询接口 /// [AutoInject(typeof(IBalanceSearchService), InjectType.Scope)] public class BalanceSearchService : ServiceBase, IBalanceSearchService { /// /// 系统操作仓储中转 /// private IDataRepositoryContext _dataContext; /// /// SQL节点仓储 /// private ISQLNodeRepository _iSQLNodeRepository; /// /// 配置 /// private IConfiguration _configuration; public BalanceSearchService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository) { this._dataContext = dataRepositoryContext; this._configuration = configuration; this._iSQLNodeRepository = iSQLNodeRepository; } public OperateResultInfo GetBalanceList(BalanceCondition info) { var sql = @"SELECT MaterielCode=MATERIEL_CODE,MaterielName=MATERIEL_NAME, QTY,UnitCode=UNIT_CODE,BatchNo=BATCH_NO,BinCode=BIN_CODE FROM VW_WMS_STK_BALANCE_DTL where MATERIEL_CODE=@MaterielCode and BALANCE_STATUS=55 "; var results = new DataRepository(_dataContext).Query(sql,new { MaterielCode=info.MaterielCode }); return SuccessStatus(new BalanceResult { Details = results, QTY = results.Sum(s => s.QTY), TypeQTY = results.Select(s => s.TypeCode).Distinct().Count(), }); } public OperateResultInfo GetInventoryPalletList(InventoryPalletCondition info) { var sql = $@"SELECT WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID, VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE,WMS_STK_INVENTORY.INVENTORY_ID,MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE,MaterielName=WMS_STK_INVENTORY_DTL.MATERIEL_NAME, StockQTY = WMS_STK_INVENTORY_DTL.QTY,ActualQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY, TwoVessel = BAS_PACKAGE.PACKAGE_NAME FROM dbo.WMS_STK_INVENTORY LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE LEFT JOIN VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE = WMS_STK_INVENTORY_DTL.TRAY_CODE WHERE WMS_STK_INVENTORY.INVENTORY_STATUS in (11,88) AND WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS in (11,88) AND WMS_STK_INVENTORY_DTL.PALLET_CODE = '{info.PalletCode}' AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=11 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID)"; var results = new DataRepository(_dataContext).Query(sql); return SuccessStatus(new InventoryPalletResult { Details = results.ToList(), IsEffective = results.Any(), }); } public OperateResultInfo GetInventoryBarCodeInfo(InventoryBarCodeCondition info) { var sql = $@"SELECT MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE, MaterielName = WMS_STK_INVENTORY_DTL.MATERIEL_NAME,SpecsModel = BAS_MATERIEL.SPECS_MODEL, BatchNo = WMS_STK_INVENTORY_DTL.BATCH_NO,ArrivalQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY, ReceiptQTY = WMS_STK_INVENTORY_DTL.QTY,TwoVessel = BAS_PACKAGE.PACKAGE_NAME, BinCode = WMS_STK_INVENTORY_DTL.BIN_CODE,BinName = WMS_STK_INVENTORY_DTL.BIN_NAME, UnitCode = WMS_STK_INVENTORY_DTL.UNIT_CODE,UnitName = BAS_UNIT.UNIT_NAME,Remark = WMS_STK_INVENTORY_DTL.DESCRIBE, InventoryDtlId = WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID FROM dbo.WMS_STK_INVENTORY LEFT JOIN SYS_USER ON WMS_STK_INVENTORY.CREATE_BY = SYS_USER.USER_ID LEFT JOIN SYS_USER USER1 ON WMS_STK_INVENTORY.UPDATE_BY = SYS_USER.USER_ID LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE LEFT JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=WMS_STK_INVENTORY_DTL.UNIT_CODE LEFT JOIN VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE=WMS_STK_INVENTORY_DTL.TRAY_CODE AND VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE=WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE WHERE WMS_STK_INVENTORY.INVENTORY_STATUS=55 AND WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS=55 AND WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE = '{info.MaterielBarCode}' AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=88 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID AND A.ACTUAL_INVENTORY_QTY!=A.QTY) "; var results = new DataRepository(_dataContext).Query(sql).FirstOrDefault(); return SuccessStatus(results); } public OperateResultInfo GetDifferenceInventoryPalletList(DifferenceInventoryPalletCondition info) { var sql = $@"SELECT MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE,MaterielName=WMS_STK_INVENTORY_DTL.MATERIEL_NAME, StockQTY = WMS_STK_INVENTORY_DTL.QTY,ActualQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY, TwoVessel = BAS_PACKAGE.PACKAGE_NAME FROM dbo.WMS_STK_INVENTORY LEFT JOIN SYS_USER ON WMS_STK_INVENTORY.CREATE_BY = SYS_USER.USER_ID LEFT JOIN SYS_USER USER1 ON WMS_STK_INVENTORY.UPDATE_BY = SYS_USER.USER_ID LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE LEFT JOIN VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE = WMS_STK_INVENTORY_DTL.TRAY_CODE AND VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE = WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE WHERE WMS_STK_INVENTORY.INVENTORY_STATUS=88 AND WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS=88 AND WMS_STK_INVENTORY_DTL.PALLET_CODE = '{info.PallectCode}' AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=88 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID)"; //明细存在第一次盘点完成状态,再次盘点就是差异盘点 var results = new DataRepository(_dataContext).Query(sql); return SuccessStatus(new DifferenceInventoryPalletResult { Details = results.ToList(), IsEffective = results.Any(), }); } public OperateResultInfo GetDifferenceInventoryBarCodeInfo(DifferenceInventoryBarCodeCondition info) { var sql = $@"SELECT MaterielCode=WMS_STK_INVENTORY_DTL.MATERIEL_CODE, MaterielName = WMS_STK_INVENTORY_DTL.MATERIEL_NAME,SpecsModel = BAS_MATERIEL.SPECS_MODEL, BatchNo = WMS_STK_INVENTORY_DTL.BATCH_NO,ArrivalQTY = WMS_STK_INVENTORY_DTL.ACTUAL_INVENTORY_QTY, ReceiptQTY = WMS_STK_INVENTORY_DTL.QTY,TwoVessel = BAS_PACKAGE.PACKAGE_NAME, BinCode = WMS_STK_INVENTORY_DTL.BIN_CODE,BinName = WMS_STK_INVENTORY_DTL.BIN_NAME, UnitCode = WMS_STK_INVENTORY_DTL.UNIT_CODE,UnitName = BAS_UNIT.UNIT_NAME,Remark = WMS_STK_INVENTORY_DTL.DESCRIBE, InventoryDtlId = WMS_STK_INVENTORY_DTL.INVENTORY_DTL_ID FROM dbo.WMS_STK_INVENTORY LEFT JOIN SYS_USER ON WMS_STK_INVENTORY.CREATE_BY = SYS_USER.USER_ID LEFT JOIN SYS_USER USER1 ON WMS_STK_INVENTORY.UPDATE_BY = SYS_USER.USER_ID LEFT JOIN WMS_STK_INVENTORY_DTL ON WMS_STK_INVENTORY.INVENTORY_ID = WMS_STK_INVENTORY_DTL.INVENTORY_ID LEFT JOIN BAS_PACKAGE ON BAS_PACKAGE.PACKAGE_CODE = WMS_STK_INVENTORY_DTL.PACKAGE_CODE LEFT JOIN BAS_MATERIEL ON WMS_STK_INVENTORY_DTL.MATERIEL_CODE = BAS_MATERIEL.MATERIEL_CODE LEFT JOIN BAS_MATERIEL_TYPE ON BAS_MATERIEL.MATERIEL_TYPE = BAS_MATERIEL_TYPE.MATERIEL_TYPE_CODE LEFT JOIN BAS_UNIT ON BAS_UNIT.UNIT_CODE=WMS_STK_INVENTORY_DTL.UNIT_CODE LEFT JOIN VW_WMS_STK_TRAY_DTL ON VW_WMS_STK_TRAY_DTL.TRAY_CODE=WMS_STK_INVENTORY_DTL.TRAY_CODE AND VW_WMS_STK_TRAY_DTL.MATERIEL_BARCODE=WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE WHERE WMS_STK_INVENTORY.INVENTORY_STATUS=88 AND WMS_STK_INVENTORY_DTL.INVENTORY_DTL_STATUS=88 AND WMS_STK_INVENTORY_DTL.MATERIEL_BARCODE = '{info.MaterielBarCode}' AND EXISTS(SELECT * FROM WMS_STK_INVENTORY_DTL A WHERE A.INVENTORY_DTL_STATUS=88 AND A.INVENTORY_ID=WMS_STK_INVENTORY.INVENTORY_ID AND A.ACTUAL_INVENTORY_QTY!=A.QTY) "; //明细存在第一次盘点完成状态,并且实际盘点数量不等于库存数量的. 88状态 在第一次盘点完成状态下进行差异盘点。 var results = new DataRepository(_dataContext).Query(sql).FirstOrDefault(); return SuccessStatus(results); } } }