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);
}
}
}
}