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手动下架);
}
}
}