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 { /// /// 老ops箱信息头 /// [Serializable] [Table("t_ops_box")] public class Box : EntityBase { /// /// ID /// public override int Id { get; set; } /// /// 对应老OPS的箱ID /// public int OpsBoxId { get; set; } /// /// 箱编号(老OPS生成的箱号) /// public string BoxBillNo { get; set; } /// /// 供应商Id /// public int SupplierId { get; set; } = 0; /// /// 组织Id /// public int OrgId { get; set; } = 0; /// /// 完成装箱时间 /// public DateTime CompleteCartonTime { get; set; } = DateTime.Now; /// /// 完成装箱用户 /// public string CompleteCartonUser { get; set; } /// /// 箱子创建用户 /// public string CreateUser { get; set; } /// /// 创建时间(对应老OPS的创建时间) /// public DateTime CreateTime { get; set; } = DateTime.Now; /// /// 明细 /// public List Details { get; set; } = new List(); //移出 public Result Out(List<(string MaterialNumber, decimal Qty, List 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 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(); } /// /// 出入库回退上架 /// /// /// /// 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(); } /// /// 出入库回退下架 /// /// /// /// 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(); } /// /// 出库 /// /// /// /// 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(); } /// /// 箱库存同步箱信息 /// /// /// 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(); } } }