Files
WMS-Api/src/WMS.Web.Domain/Entitys/Box.cs
2024-03-18 09:35:08 +08:00

196 lines
6.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using WMS.Web.Core;
using WMS.Web.Core.Help;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.Entitys
{
/// <summary>
/// 老ops箱信息头
/// </summary>
[Serializable]
[Table("t_ops_box")]
public class Box : EntityBase
{
/// <summary>
/// ID
/// </summary>
public override int Id { get; set; }
/// <summary>
/// 对应老OPS的箱ID
/// </summary>
public int OpsBoxId { get; set; }
/// <summary>
/// 箱编号老OPS生成的箱号
/// </summary>
public string BoxBillNo { get; set; }
/// <summary>
/// 供应商Id
/// </summary>
public int SupplierId { get; set; } = 0;
/// <summary>
/// 组织Id
/// </summary>
public int OrgId { get; set; } = 0;
/// <summary>
/// 完成装箱时间
/// </summary>
public DateTime CompleteCartonTime { get; set; } = DateTime.Now;
/// <summary>
/// 完成装箱用户
/// </summary>
public string CompleteCartonUser { get; set; }
/// <summary>
/// 箱子创建用户
/// </summary>
public string CreateUser { get; set; }
/// <summary>
/// 创建时间对应老OPS的创建时间
/// </summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 明细
/// </summary>
public List<BoxDetails> Details { get; set; } = new List<BoxDetails>();
//移出
public Result Out(List<(string MaterialNumber, decimal Qty, List<string> SerialNumbers)> list)
{
foreach (var l in list)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == l.MaterialNumber);
if (d == null) return Result.ReFailure(ResultCodes.BoxMateriaNoData);
d.Qty = d.Qty - l.Qty;
if (d.Qty <= 0) this.Details.Remove(d);
//foreach (var s in l.SerialNumbers) d.SerialNumbers.Remove(s);
}
return Result.ReSuccess();
}
//移入
public Result In(List<(string MaterialNumber, decimal Qty, List<string> SerialNumbers)> list)
{
foreach (var l in list)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == l.MaterialNumber);
if (d == null)
{
this.Details.Add(new BoxDetails()
{
MaterialNumber = l.MaterialNumber,
Qty = l.Qty,
//SerialNumbers=l.SerialNumbers
});
continue;
}
d.Qty = d.Qty + l.Qty;
//d.SerialNumbers.AddRange(l.SerialNumbers);
}
return Result.ReSuccess();
}
//移入
public Result TakeStock(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d == null)
{
this.Details.Add(new BoxDetails()
{
MaterialNumber = materialNumber,
Qty = qty
});
}
return Result.ReSuccess();
}
/// <summary>
/// 出入库回退上架
/// </summary>
/// <param name="materialNumber"></param>
/// <param name="qty"></param>
/// <returns></returns>
public Result BackRecordUp(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d == null)
{
this.Details.Add(new BoxDetails()
{
MaterialNumber = materialNumber,
Qty = qty
});
}
else
d.Qty = d.Qty + qty;
return Result.ReSuccess();
}
/// <summary>
/// 出入库回退下架
/// </summary>
/// <param name="materialNumber"></param>
/// <param name="qty"></param>
/// <returns></returns>
public Result BackRecordDown(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d != null)
d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0;
return Result.ReSuccess();
}
/// <summary>
/// 出库
/// </summary>
/// <param name="materialNumber"></param>
/// <param name="qty"></param>
/// <returns></returns>
public Result OutStock(string materialNumber, decimal qty)
{
var d = this.Details.FirstOrDefault(f => f.MaterialNumber == materialNumber);
if (d != null)
d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0;
return Result.ReSuccess();
}
/// <summary>
/// 箱库存同步箱信息
/// </summary>
/// <param name="inventory"></param>
/// <returns></returns>
public Result BoxInventory(BoxInventory inventory)
{
var detailClone = this.Details.Clone();
foreach (var d in detailClone)
{
//如果箱信息存在 箱库存不存在 删除箱信息数据
var inventoryDetail = inventory.Details.FirstOrDefault(f => f.MaterialNumber == d.MaterialNumber);
if (inventoryDetail == null)
{
var boxDetail = this.Details.FirstOrDefault(f => f.Id == d.Id);
this.Details.Remove(boxDetail);
}
}
//箱库存存在 箱信息不存在 添加
foreach (var d in inventory.Details)
{
var md = this.Details.FirstOrDefault(w => w.MaterialNumber == d.MaterialNumber);
if (md == null)
this.Details.Add(new BoxDetails() { MaterialNumber = d.MaterialNumber, Qty = d.Qty });
else
md.Qty = d.Qty;
}
return Result.ReSuccess();
}
}
}