using DapperORMCore.Context.DataContext; using DapperORMCore.Dapper.BaseModel; using DapperORMCore.Model.CoreModel; using DapperORMCore.Repository.IRepositorys; using Microsoft.Extensions.Configuration; using NXWMS.DataAccess.Entity; using NXWMS.IService.NXPDA.InStock; using NXWMS.IService.NXPDA.OutStock; using NXWMS.IService.NXWMS.OutStock; using NXWMS.Model.AppModels.Condition.Balance; using NXWMS.Model.AppModels.Condition.Base; using NXWMS.Model.AppModels.Condition.NXPDA.InStock; using NXWMS.Model.AppModels.Condition.NXPDA.OutStock; using NXWMS.Model.AppModels.Result.Balance; using NXWMS.Model.AppModels.Result.Base; using NXWMS.Model.Common; using NXWMS.Service; using NXWMS.String.Enums; 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.OutStock { /// /// 出库操作接口 /// [AutoInject(typeof(IOutStockOperateService), InjectType.Scope)] public class OutStockOperateService : ServiceBase, IOutStockOperateService { /// /// 系统操作仓储中转 /// private IDataRepositoryContext _dataContext; /// /// SQL节点仓储 /// private ISQLNodeRepository _iSQLNodeRepository; /// /// 配置 /// private IConfiguration _configuration; private IWmsOutPutDownService _wmsOutPutDownService; public OutStockOperateService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, IWmsOutPutDownService wmsOutPutDownService, ISQLNodeRepository iSQLNodeRepository) { this._dataContext = dataRepositoryContext; this._configuration = configuration; this._iSQLNodeRepository = iSQLNodeRepository; this._wmsOutPutDownService = wmsOutPutDownService; } public OperateResultInfo CommitArrivalNoticeDetail(CommitArrivalNoticeDetailCondition info) { if (string.IsNullOrWhiteSpace(info.MaterielBarCode)) { return FailStatus("参数错误!"); } try { _dataContext.BeginTran(); var result = new DataRepository(_dataContext).Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault(); if (result == null) { throw new Exception("物品条码不存在,请检查!"); } var binResult = new DataRepository(_dataContext).Query("BIN_CODE", info.BinCode.ToString()).FirstOrDefault(); if (binResult == null) { throw new Exception("库位编码不存在,请检查!"); } var userResult = new DataRepository(_dataContext).Query("USER_ID", info.OperationUserId.ToString()).FirstOrDefault(); if (userResult == null) { throw new Exception("用户编码不存在,请检查!"); } var materielResult = new DataRepository(_dataContext).Query("MATERIEL_CODE", result.MATERIEL_CODE.ToString()).FirstOrDefault(); if (materielResult == null) { throw new Exception("物料编码不存在,请检查!"); } var now = DateTime.Now; result.INVOICE_DTL_STATUS = 55; result.UPDATE_TIME = now; result.UPDATE_BY = info.OperationUserId; new DataRepository(_dataContext).Update(result, "RECEIPT_DTL_ID", "NEWID"); //确认托盘号 var receiptResult = new DataRepository(_dataContext). Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault(); var invoiceResult = new DataRepository(_dataContext).Query("INVOICE_ID", receiptResult.INVOICE_ID.ToString()).FirstOrDefault(); if (invoiceResult == null) { throw new Exception("收货单号不存在,请检查!"); } invoiceResult.INVOICE_STATUS = 55; invoiceResult.UPDATE_BY = info.OperationUserId; invoiceResult.UPDATE_TIME = now; new DataRepository(_dataContext).Update(result, "PUTAWAY_ID", "NEWID"); _dataContext.Commit(); return SuccessStatus(); } catch (Exception ex) { _dataContext.Rollback(); return FailStatus("提交失败!" + ex.Message); } } public OperateResultInfo SaveArrivalNotice(SaveArrivalNoticeDetailCondition info) { if (string.IsNullOrWhiteSpace(info.PalletCode)) { return FailStatus("参数错误!"); } //确认托盘号 var receiptResult = new DataRepository(_dataContext). Query("PALLET_CODE", info.PalletCode.ToString()). Where(s => s.INVOICE_RECORD_STATUS == 0). FirstOrDefault(); var invoiceResult = new DataRepository(_dataContext).Query("INVOICE_ID", receiptResult.INVOICE_ID.ToString()).FirstOrDefault(); if (invoiceResult.INVOICE_STATUS >= 99) { return FailStatus("单据状态已经变更,当前所有操作失效!"); } try { _dataContext.BeginTran(); var now = DateTime.Now; var ids = info.MaterielBarCodes.Split(','); var affterCount = 0; foreach (var item in ids) { var resultTemp = new DataRepository(_dataContext).Query("MATERIEL_BARCODE", item.ToString()).FirstOrDefault(); if (resultTemp == null) { throw new Exception("收货明细单状态出现变更,当前操作失效 " + item.ToString()); } resultTemp.INVOICE_DTL_STATUS = 99; resultTemp.UPDATE_BY = info.OperationUserId; resultTemp.UPDATE_TIME = now; affterCount = affterCount + new DataRepository(_dataContext).Update(resultTemp, "INVOICE_DTL_ID", "NEWID"); } if (affterCount != ids.Length) { _dataContext.Rollback(); return FailStatus("数据操作失败!"); } _dataContext.Commit(); if (!new DataRepository(_dataContext).Query("INVOICE_ID", invoiceResult.INVOICE_ID.ToString()). Where(s => s.INVOICE_DTL_STATUS != 99).Any()) { invoiceResult.INVOICE_STATUS = 99; invoiceResult.UPDATE_BY = info.OperationUserId; invoiceResult.UPDATE_TIME = now; new DataRepository(_dataContext).Update(invoiceResult, "INVOICE_ID", "NEWID"); } return SuccessStatus(); } catch (Exception ex) { _dataContext.Rollback(); return FailStatus("提交失败!" + ex.Message); } } public OperateResultInfo CommitPutDownDetail(CommitPutDownDetailCondition info) { if (string.IsNullOrWhiteSpace(info.MaterielBarCode)) { return FailStatus("参数错误!"); } try { _dataContext.BeginTran(); var result = new DataRepository(_dataContext).Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault(); if (result == null) { throw new Exception("物品条码不存在,请检查!"); } var binResult = new DataRepository(_dataContext).Query("BIN_CODE", info.BinCode.ToString()).FirstOrDefault(); if (binResult == null) { throw new Exception("库位编码不存在,请检查!"); } var userResult = new DataRepository(_dataContext).Query("USER_ID", info.OperationUserId.ToString()).FirstOrDefault(); if (userResult == null) { throw new Exception("用户编码不存在,请检查!"); } var materielResult = new DataRepository(_dataContext).Query("MATERIEL_CODE", result.MATERIEL_CODE.ToString()).FirstOrDefault(); if (materielResult == null) { throw new Exception("物料编码不存在,请检查!"); } var now = DateTime.Now; result.PUTDOWN_DTL_STATUS = 55; result.UPDATE_TIME = now; result.UPDATE_BY = info.OperationUserId; new DataRepository(_dataContext).Update(result, "PUTDOWN_DTL_ID", "NEWID"); //确认托盘号 var receiptResult = new DataRepository(_dataContext). Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault(); var invoiceResult = new DataRepository(_dataContext).Query("PUTDOWN_ID", receiptResult.PUTDOWN_ID.ToString()).FirstOrDefault(); if (invoiceResult == null) { throw new Exception("单号不存在,请检查!"); } invoiceResult.PUTDOWN_STATUS = 55; invoiceResult.UPDATE_BY = info.OperationUserId; invoiceResult.UPDATE_TIME = now; new DataRepository(_dataContext).Update(result, "PUTDOWN_ID", "NEWID"); _dataContext.Commit(); return SuccessStatus(); } catch (Exception ex) { _dataContext.Rollback(); return FailStatus("提交失败!" + ex.Message); } } public OperateResultInfo SavePutDown(SavePutDownDetailCondition info) { //确认托盘号 var receiptResult = new DataRepository(_dataContext). Query("PALLET_CODE", info.PalletCode.ToString()). Where(s => s.PUTDOWN_DTL_STATUS == 0). FirstOrDefault(); var invoiceResult = new DataRepository(_dataContext).Query("INVOICE_ID", receiptResult.PUTDOWN_ID.ToString()).FirstOrDefault(); if (invoiceResult.PUTDOWN_STATUS >= 99) { return FailStatus("单据状态已经变更,当前所有操作失效!"); } //TODO这里需要加上库存变更,没有加上! try { _dataContext.BeginTran(); var now = DateTime.Now; var ids = info.MaterielBarCodes.Split(','); var affterCount = 0; foreach (var item in ids) { var resultTemp = new DataRepository(_dataContext).Query("MATERIEL_BARCODE", item.ToString()).FirstOrDefault(); if (resultTemp == null) { throw new Exception("明细单状态出现变更,当前操作失效 " + item.ToString()); } resultTemp.PUTDOWN_DTL_STATUS = 99; resultTemp.UPDATE_BY = info.OperationUserId; resultTemp.UPDATE_TIME = now; affterCount = affterCount + new DataRepository(_dataContext).Update(resultTemp, "PUTDOWN_DTL_ID", "NEWID"); } if (affterCount != ids.Length) { _dataContext.Rollback(); return FailStatus("数据操作失败!"); } _dataContext.Commit(); if (!new DataRepository(_dataContext).Query("PUTDOWN_ID", invoiceResult.PUTDOWN_ID.ToString()). Where(s => s.PUTDOWN_DTL_STATUS != 99).Any()) { invoiceResult.PUTDOWN_STATUS = 99; invoiceResult.UPDATE_BY = info.OperationUserId; invoiceResult.UPDATE_TIME = now; new DataRepository(_dataContext).Update(invoiceResult, "PUTDOWN_ID", "NEWID"); } return SuccessStatus(); } catch (Exception ex) { _dataContext.Rollback(); return FailStatus("提交失败!" + ex.Message); } } public OperateResultInfo ManualPutDownPallet(string PutDownCode, string BinCode) { var putDow = _wmsOutPutDownService.GetWmsOutPutDownDtlListForNo(PutDownCode).Data; putDow.SBIN_CODE = BinCode; return _wmsOutPutDownService.ManualPutDownPallet(putDow, PutDownMethodsEnum.PDA手动下架); } } }