152 lines
4.6 KiB
C#
152 lines
4.6 KiB
C#
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.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<(int MaterialId, decimal Qty, List<string> SerialNumbers)> list)
|
||
{
|
||
foreach (var l in list)
|
||
{
|
||
var d = this.Details.FirstOrDefault(f => f.MaterialId == l.MaterialId);
|
||
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<(int MaterialId, decimal Qty, List<string> SerialNumbers)> list)
|
||
{
|
||
foreach (var l in list)
|
||
{
|
||
var d = this.Details.FirstOrDefault(f => f.MaterialId == l.MaterialId);
|
||
if (d == null)
|
||
{
|
||
this.Details.Add(new BoxDetails()
|
||
{
|
||
MaterialId = l.MaterialId,
|
||
Qty = l.Qty,
|
||
//SerialNumbers=l.SerialNumbers
|
||
});
|
||
continue;
|
||
}
|
||
d.Qty = d.Qty + l.Qty;
|
||
//d.SerialNumbers.AddRange(l.SerialNumbers);
|
||
}
|
||
return Result.ReSuccess();
|
||
}
|
||
|
||
//移入
|
||
public Result TakeStock(int materialId, decimal qty)
|
||
{
|
||
var d = this.Details.FirstOrDefault(f => f.MaterialId == materialId);
|
||
if (d == null)
|
||
{
|
||
this.Details.Add(new BoxDetails()
|
||
{
|
||
MaterialId = materialId,
|
||
Qty = qty
|
||
});
|
||
}
|
||
return Result.ReSuccess();
|
||
}
|
||
/// <summary>
|
||
/// 出入库回退上架
|
||
/// </summary>
|
||
/// <param name="materialId"></param>
|
||
/// <param name="qty"></param>
|
||
/// <returns></returns>
|
||
public Result BackRecordUp(int materialId, decimal qty)
|
||
{
|
||
var d = this.Details.FirstOrDefault(f => f.MaterialId == materialId);
|
||
if (d == null)
|
||
{
|
||
this.Details.Add(new BoxDetails()
|
||
{
|
||
MaterialId = materialId,
|
||
Qty = qty
|
||
});
|
||
}
|
||
else
|
||
{
|
||
d.Qty = qty;
|
||
}
|
||
return Result.ReSuccess();
|
||
}
|
||
/// <summary>
|
||
/// 出入库回退下架
|
||
/// </summary>
|
||
/// <param name="materialId"></param>
|
||
/// <param name="qty"></param>
|
||
/// <returns></returns>
|
||
public Result BackRecordDown(int materialId, decimal qty)
|
||
{
|
||
var d = this.Details.FirstOrDefault(f => f.MaterialId == materialId);
|
||
if (d != null)
|
||
d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0;
|
||
|
||
return Result.ReSuccess();
|
||
}
|
||
}
|
||
}
|