using DapperORMCore.Context.DataContext; using DapperORMCore.Model.CoreModel; using DapperORMCore.Repository.IRepositorys; using Microsoft.Extensions.Configuration; using NXWMS.DataAccess.Entity; using NXWMS.IService.NXPDA.Balance; using NXWMS.Model.AppModels.Condition.NXPDA.InStock; 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(IBalanceOperateService), InjectType.Scope)] public class BalanceOperateService : ServiceBase, IBalanceOperateService { /// /// 系统操作仓储中转 /// private IDataRepositoryContext _dataContext; /// /// SQL节点仓储 /// private ISQLNodeRepository _iSQLNodeRepository; /// /// 配置 /// private IConfiguration _configuration; public BalanceOperateService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository) { this._dataContext = dataRepositoryContext; this._configuration = configuration; this._iSQLNodeRepository = iSQLNodeRepository; } public OperateResultInfo CommitBalanceDetail(CommitBalanceDetailCondition info) { if (string.IsNullOrWhiteSpace(info.MaterielBarCode)) { return FailStatus("参数错误!"); } try { _dataContext.BeginTran(); var receiptDTLResult = new DataRepository(_dataContext). Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault(); if (receiptDTLResult == 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", receiptDTLResult.MATERIEL_CODE.ToString()).FirstOrDefault(); if (materielResult == null) { throw new Exception("物料编码不存在,请检查!"); } var now = DateTime.Now; receiptDTLResult.ACTUAL_INVENTORY_QTY = info.ActualQTY; receiptDTLResult.INVENTORY_DTL_STATUS = 55; receiptDTLResult.UPDATE_TIME = now; receiptDTLResult.UPDATE_BY = info.OperationUserId; new DataRepository(_dataContext).Update(receiptDTLResult, "INVENTORY_DTL_ID", "NEWID"); _dataContext.Commit(); return SuccessStatus(); } catch (Exception ex) { _dataContext.Rollback(); return FailStatus("提交失败!" + ex.Message); } } public OperateResultInfo SaveBalance(SaveBalanceDetailCondition info) { if (string.IsNullOrWhiteSpace(info.PalletCode)) { return FailMessageStatus("参数错误!"); } var result = new DataRepository(_dataContext).Query("PALLET_CODE", info.PalletCode.ToString()) .Where(s => s.INVENTORY_DTL_STATUS == 11).FirstOrDefault(); if (result == null) { return FailMessageStatus("单据状态已经变更,当前所有操作失效!"); } 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.INVENTORY_DTL_STATUS = 99; resultTemp.UPDATE_BY = info.OperationUserId; resultTemp.UPDATE_TIME = now; affterCount = affterCount + new DataRepository(_dataContext).Update(resultTemp, "INVENTORY_DTL_ID", "NEWID"); } if (affterCount != ids.Length) { _dataContext.Rollback(); return FailMessageStatus("数据操作失败!"); } _dataContext.Commit(); if (!new DataRepository(_dataContext). Query("INVENTORY_ID", result.INVENTORY_ID.ToString()). Where(s => s.INVENTORY_DTL_STATUS != 99).Any()) { var resultDTL = new DataRepository(_dataContext). Query("INVENTORY_ID", result.INVENTORY_ID.ToString()).FirstOrDefault(); resultDTL.INVENTORY_STATUS = 99; resultDTL.UPDATE_BY = info.OperationUserId; resultDTL.UPDATE_TIME = now; new DataRepository(_dataContext).Update(result, "INVENTORY_ID", "NEWID"); } return SuccessStatus(); } catch (Exception ex) { _dataContext.Rollback(); return FailMessageStatus("提交失败!" + ex.Message); } } public OperateResultInfo CommitDifferenceInventoryceDetail(CommitDifferenceInventoryDetailCondition info, int Stats) { if (info.Details == null || info.Details.Count() == 0) { return FailStatus("未提交任何数据"); } this._dataContext.BeginTran(); try { foreach (var item in info.Details) { // 查询主 var sql = "update WMS_STK_INVENTORY_DTL set INVENTORY_DTL_STATUS=@InventoryDtlStatus,ACTUAL_INVENTORY_QTY=@ActualQTY,UPDATE_BY=@UpdateBy,UPDATE_TIME=@UpdateTime where INVENTORY_DTL_ID=@InventoryDtlId"; new DataRepository(this._dataContext).Execute(sql, new { item.ActualQTY, UpdateBy = info.OperationUserId, UpdateTime = DateTime.Now, item.InventoryDtlId, InventoryDtlStatus = Stats }); sql = $@" if not exists ( select * from WMS_STK_INVENTORY_DTL where INVENTORY_DTL_STATUS<>@InventoryDtlStatus and INVENTORY_ID=@InventoryId) update WMS_STK_INVENTORY set INVENTORY_STATUS=@InventoryDtlStatus,UPDATE_BY=@UpdateBy,UPDATE_TIME=@UpdateTime where INVENTORY_ID=@InventoryId "; new DataRepository(this._dataContext).Execute(sql, new { InventoryDtlStatus = Stats, InventoryId = item.InventoryId, InventoryDtlId=item.InventoryDtlId, UpdateBy = info.OperationUserId, UpdateTime = DateTime.Now, }); } _dataContext.Commit(); return SuccessStatus(); } catch (Exception err) { this._dataContext.Rollback(); return FailStatus($"未提交任何数据 {err.Message}"); } //if (string.IsNullOrWhiteSpace(info.MaterielBarCode)) //{ // return FailStatus("参数错误!"); //} //try //{ // _dataContext.BeginTran(); // var receiptDTLResult = new DataRepository(_dataContext). // Query("MATERIEL_BARCODE", info.MaterielBarCode.ToString()).FirstOrDefault(); // if (receiptDTLResult == 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", receiptDTLResult.MATERIEL_CODE.ToString()).FirstOrDefault(); // if (materielResult == null) // { // throw new Exception("物料编码不存在,请检查!"); // } // var now = DateTime.Now; // receiptDTLResult.ACTUAL_INVENTORY_QTY = info.ActualQTY; // receiptDTLResult.INVENTORY_DTL_STATUS = 99; // receiptDTLResult.UPDATE_TIME = now; // receiptDTLResult.UPDATE_BY = info.OperationUserId; // new DataRepository(_dataContext).Update(receiptDTLResult, "INVENTORY_DTL_ID", "NEWID"); // _dataContext.Commit(); // return SuccessStatus(); //} //catch (Exception ex) //{ // _dataContext.Rollback(); // return FailStatus("提交失败!" + ex.Message); //} } public OperateResultInfo SaveDifferenceInventoryce(SaveDifferenceInventoryDetailCondition info) { if (string.IsNullOrWhiteSpace(info.PalletCode)) { return FailMessageStatus("参数错误!"); } var result = new DataRepository(_dataContext).Query("PALLET_CODE", info.PalletCode.ToString()) .Where(s => s.INVENTORY_DTL_STATUS == 88).FirstOrDefault(); if (result == null) { return FailMessageStatus("单据状态已经变更,当前所有操作失效!"); } 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.INVENTORY_DTL_STATUS = 99; resultTemp.UPDATE_BY = info.OperationUserId; resultTemp.UPDATE_TIME = now; affterCount = affterCount + new DataRepository(_dataContext).Update(resultTemp, "INVENTORY_DTL_ID", "NEWID"); } if (affterCount != ids.Length) { _dataContext.Rollback(); return FailMessageStatus("数据操作失败!"); } _dataContext.Commit(); if (!new DataRepository(_dataContext). Query("INVENTORY_ID", result.INVENTORY_ID.ToString()). Where(s => s.INVENTORY_DTL_STATUS != 99).Any()) { var resultDTL = new DataRepository(_dataContext). Query("INVENTORY_ID", result.INVENTORY_ID.ToString()).FirstOrDefault(); resultDTL.INVENTORY_STATUS = 99; resultDTL.UPDATE_BY = info.OperationUserId; resultDTL.UPDATE_TIME = now; new DataRepository(_dataContext).Update(result, "INVENTORY_ID", "NEWID"); } return SuccessStatus(); } catch (Exception ex) { _dataContext.Rollback(); return FailMessageStatus("提交失败!" + ex.Message); } } } }