146 lines
6.1 KiB
C#
146 lines
6.1 KiB
C#
using AutoMapper;
|
|
using Microsoft.EntityFrameworkCore.Storage;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using WMS.Web.Core.Dto.ChangeBoxRecord;
|
|
using WMS.Web.Core.Dto.Login;
|
|
using WMS.Web.Core.Dto.MoveBoxRecord;
|
|
using WMS.Web.Core.Internal.Results;
|
|
using WMS.Web.Domain.Entitys;
|
|
using WMS.Web.Domain.Infrastructure;
|
|
using WMS.Web.Domain.IService;
|
|
using WMS.Web.Domain.IService.Public;
|
|
using WMS.Web.Domain.Values;
|
|
|
|
namespace WMS.Web.Domain.Services
|
|
{
|
|
///改箱 移箱服务
|
|
public class ChangeMoveBoxService : IChangeMoveBoxService
|
|
{
|
|
private readonly IMapper _mapper;
|
|
private readonly ILoginService _loginService;
|
|
private readonly IChangeBoxRecordRepositories _changeBoxRecordRepositories;
|
|
public readonly IBasicsRepositories _transactionRepositories;
|
|
private readonly IMoveBoxRecordRepositories _moveBoxRecordRepositories;
|
|
private readonly IBoxRepositories _boxRepositories;
|
|
private readonly ISerialNumberService _serialNumberService;
|
|
public ChangeMoveBoxService(IMapper mapper, ILoginService loginService,
|
|
IChangeBoxRecordRepositories changeBoxRecordRepositories, IBasicsRepositories transactionRepositories,
|
|
IMoveBoxRecordRepositories moveBoxRecordRepositories, IBoxRepositories boxRepositories,
|
|
ISerialNumberService serialNumberService)
|
|
{
|
|
_mapper = mapper;
|
|
_loginService = loginService;
|
|
_changeBoxRecordRepositories = changeBoxRecordRepositories;
|
|
_transactionRepositories = transactionRepositories;
|
|
_moveBoxRecordRepositories = moveBoxRecordRepositories;
|
|
_boxRepositories = boxRepositories;
|
|
_serialNumberService = serialNumberService;
|
|
}
|
|
/// <summary>
|
|
/// 改箱保存
|
|
/// </summary>
|
|
/// <param name="dto"></param>
|
|
/// <param name="loginInfo"></param>
|
|
/// <returns></returns>
|
|
public async Task<Result> ChangeBoxSave(SaveChangeBoxRecordRequest dto, LoginInDto loginInfo, bool isTransaction = false)
|
|
{
|
|
//1.有原箱时 需要判断 物料对应的序列号是否存在
|
|
|
|
List<Box> boxList = new List<Box>();
|
|
//原箱有可能没有
|
|
var srcBox = await _boxRepositories.Get(dto.SrcBoxId);
|
|
var destBox = await _boxRepositories.Get(dto.DestBoxId);
|
|
//if (srcBox == null) return Result.ReFailure(ResultCodes.BoxNoData);
|
|
if (destBox == null) return Result.ReFailure(ResultCodes.BoxNoData);
|
|
var l = dto.Details.Select(s => (s.MaterialId, s.Qty, s.SerialNumbers)).ToList();
|
|
//原箱移出
|
|
Result res;
|
|
if (srcBox != null)
|
|
{
|
|
res = srcBox.Out(l);
|
|
if (!res.IsSuccess) return res;
|
|
}
|
|
//目标箱移入
|
|
res = destBox.In(l);
|
|
if (!res.IsSuccess) return res;
|
|
if (srcBox != null)
|
|
boxList.Add(srcBox);
|
|
if (destBox != null)
|
|
boxList.Add(destBox);
|
|
|
|
//2.修改库存时需要区别 有原箱和没有原箱的情况
|
|
|
|
//var entity = _mapper.Map<ChangeBoxRecord>(dto);\
|
|
List<ChangeBoxRecord> list = new List<ChangeBoxRecord>();
|
|
foreach (var d in dto.Details)
|
|
{
|
|
ChangeBoxRecord entity = new ChangeBoxRecord();
|
|
entity.Create(loginInfo.UserInfo.StaffId, d.Qty, d.MaterialId, d.SerialNumbers, dto.SrcBoxId, dto.DestBoxId);
|
|
list.Add(entity);
|
|
}
|
|
|
|
//需要填写序列号
|
|
//需要修改库存
|
|
IDbContextTransaction _transaction = null;
|
|
if (isTransaction)
|
|
_transaction = _transactionRepositories.GetTransaction();
|
|
bool isRollback = false;
|
|
bool isSuccess = true;
|
|
isSuccess = await _changeBoxRecordRepositories.AddRange(list, false);
|
|
if (!isSuccess) isRollback = true;
|
|
var res_change = await _serialNumberService.ChangeBox(list, loginInfo, false);
|
|
if (!res_change.IsSuccess) isRollback = true;
|
|
isSuccess = await _boxRepositories.EditEntityList(boxList, false);
|
|
if (!isSuccess) isRollback = true;
|
|
|
|
//提交事务
|
|
if (isTransaction)
|
|
{
|
|
isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
|
|
if (!isSuccess)
|
|
return Result.ReFailure(ResultCodes.DateWriteError);
|
|
}
|
|
|
|
return Result.ReSuccess();
|
|
}
|
|
/// <summary>
|
|
/// 移箱保存
|
|
/// </summary>
|
|
/// <param name="dto"></param>
|
|
/// <param name="loginInfo"></param>
|
|
/// <returns></returns>
|
|
public async Task<Result> MoveBoxSave(List<SaveMoveBoxRecordRequest> dto, bool IsUp, LoginInDto loginInfo)
|
|
{
|
|
//1.下架时 需要验证箱是否在库存里
|
|
|
|
List<MoveBoxRecord> entityList = new List<MoveBoxRecord>();
|
|
foreach (var d in dto)
|
|
{
|
|
var entity = new MoveBoxRecord();
|
|
entity.Create(IsUp == true ? MoveBoxType.Up : MoveBoxType.Down, d.BoxId, d.SubStockId, loginInfo.UserInfo.StaffId);
|
|
entityList.Add(entity);
|
|
}
|
|
|
|
//2.需要修改库存
|
|
|
|
IDbContextTransaction _transaction = _transactionRepositories.GetTransaction();
|
|
bool isRollback = false;
|
|
bool isSuccess = true;
|
|
isSuccess = await _moveBoxRecordRepositories.AddRange(entityList, true);
|
|
if (!isSuccess) isRollback = true;
|
|
var res_change = await _serialNumberService.MoveBox(entityList, loginInfo, false);
|
|
if (!res_change.IsSuccess) isRollback = true;
|
|
//提交事务
|
|
isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
|
|
if (!isSuccess)
|
|
return Result.ReFailure(ResultCodes.DateWriteError);
|
|
|
|
return Result.ReSuccess();
|
|
}
|
|
}
|
|
}
|