调整序列号

This commit is contained in:
18942506660
2023-11-11 15:53:26 +08:00
parent 3aa36adfec
commit b461c9c908
9 changed files with 251 additions and 30 deletions

View File

@@ -1,14 +1,119 @@
using System;
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.Login;
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;
using WMS.Web.Domain.Values.Single;
namespace WMS.Web.Domain.Services
{
/// <summary>
/// 序列号服务
/// </summary>
public class SerialNumberService: ISerialNumberService
public class SerialNumberService : ISerialNumberService
{
private readonly ISerialNumberOperateRepositories _serialNumberOperateRepositories;
private readonly ISerialNumbersRepositories _serialNumbersRepositories;
public readonly IBasicsRepositories _transactionRepositories;
public readonly IBoxRepositories _boxRepositories;
private readonly ISingleDataService _singleDataService;
public SerialNumberService(ISerialNumberOperateRepositories serialNumberOperateRepositories,
ISerialNumbersRepositories serialNumbersRepositories, IBasicsRepositories transactionRepositories,
IBoxRepositories boxRepositories, ISingleDataService singleDataService)
{
_serialNumberOperateRepositories = serialNumberOperateRepositories;
_serialNumbersRepositories = serialNumbersRepositories;
_transactionRepositories = transactionRepositories;
_boxRepositories = boxRepositories;
_singleDataService = singleDataService;
}
/// <summary>
/// 改箱
/// </summary>
/// <param name="changeBoxRecords"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> ChangeBox(List<ChangeBoxRecord> changeBoxRecords, LoginInDto loginInfo, bool isTransaction = true)
{
//获取序列号信息
var serialNumbers = changeBoxRecords.SelectMany(s => s.SerialNumbers).ToList();
var entityList = await _serialNumbersRepositories.GetEntityList(serialNumbers);
var boxIds = changeBoxRecords.Select(s => s.DestBoxId).ToList();
var boxList = await _boxRepositories.GetEntityList(boxIds);
var userName = _singleDataService.GetSingleData(SingleAction.Staffs, loginInfo.UserInfo.CompanyId, loginInfo.UserInfo.StaffId);
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _transactionRepositories.GetTransaction();
bool isRollback = false;
bool isSuccess = true;
List<SerialNumberOperate> sList = new List<SerialNumberOperate>();
foreach (var entity in entityList)
{
var destBoxId = changeBoxRecords.FirstOrDefault(f => f.SerialNumbers.Contains(entity.SerialNumber)).DestBoxId;
//修改序列号和箱绑定关系
entity.Operate(destBoxId);
var box = boxList.FirstOrDefault(f=>f.Id==destBoxId);
//记录序列号操作日志
SerialNumberOperate op = new SerialNumberOperate()
{
MaterialId = entity.MaterialId,
SerialNumber = entity.SerialNumber,
OrgId = box.OrgId,
SupplierId = box.SupplierId,
OperateTime = DateTime.Now,
OperateType = SerialNumberOperateType.ChangeBox,
OperateUser = userName,
Remark = "箱号:" + box.BoxBillNo
};
sList.Add(op);
}
isSuccess = await _serialNumbersRepositories.EditEntityList(entityList, false);
//序列号操作记录
var res = await this.SerialNumberOperate(sList, false);
//提交事务
if (isTransaction)
{
if (!isSuccess) isRollback = true;
if (!res.Success) isRollback = true;
isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
}
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
if (!res.Success) return Result.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess();
}
/// <summary>
/// 操作序列号(出库操作)
/// </summary>
/// <param name="serialNumbers"></param>
/// <returns></returns>
public Task<Result> OutStock(List<string> serialNumbers, bool isTransaction = true)
{
throw new NotImplementedException();
}
/// <summary>
/// 序列号操作记录日志
/// </summary>
/// <param name="list"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> SerialNumberOperate(List<SerialNumberOperate> list, bool isTransaction = true)
{
var isSuccess = await _serialNumberOperateRepositories.AddRange(list, isTransaction);
if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess();
}
}
}