using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using WMS.Web.Core; using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Entitys { /// /// wms出库单 /// [Serializable] [Table("t_wms_outstock")] public class OutStock : EntityBase { public OutStock() { } /// /// 主键 订单编号 /// [Column("Id")] public override int Id { get; set; } /// /// 任务单ID /// [Column("TaskId")] public int TaskId { get; set; } /// /// 单据编号 /// [Column("BillNo")] public string BillNo { get; set; } /// /// 出库方式 1 按箱 2 按产品 /// [Column("Method")] public InventoryInOutMethod Method { get; set; } = InventoryInOutMethod.Box; /// /// 单据类型 /// [Column("Type")] public OutStockType Type { get; set; } = OutStockType.Sal; /// /// 发货组织 /// [Column("DeliveryOrgId")] public int DeliveryOrgId { get; set; } /// /// 组织编码 /// [Column("OrgCode")] public string OrgCode { get; set; } /// /// 收货客户 /// [Column("ReceiptCustomerId")] public int ReceiptCustomerId { get; set; } /// /// 仓库 /// [Column("StockCode")] public string StockCode { get; set; } /// /// 创建人 /// [Column("CreatorId")] public int CreatorId { get; set; } /// /// 操作人 /// [Column("OperateId")] public int OperateId { get; set; } /// /// 创建时间(出库时间) /// [Column("CreateTime")] public DateTime CreateTime { get; set; } = DateTime.Now; /// /// 同步成功或者失败 默认是失败状态 /// [Column("SuccessSync")] public SyncStatus SuccessSync { get; set; } = SyncStatus.Fail; ///// ///// 同步失败的源订单号(默认就包含所有来源单号) ///// //[Column("SuccessSyncFail")] //public List SuccessSyncFail { get; set; } = new List(); /// /// 同步时间 /// [Column("SyncTime")] public DateTime? SyncTime { get; set; } /// /// 备注 /// [Column("Remark")] public string Remark { get; set; } /// /// 明细 /// public List Details { get; set; } = new List(); /// /// 创建(需要在明细都生成后最后调用) /// /// public void Create(int creatorId, OutStockTask task, int method) { this.TaskId = task.Id; this.Type = task.Type; this.Method = (InventoryInOutMethod)method; this.DeliveryOrgId = task.DeliveryOrgId; this.ReceiptCustomerId = task.ReceiptCustomerId; this.OrgCode = task.OrgCode; this.StockCode = task.StockCode; this.CreatorId = creatorId; this.CreateTime = DateTime.Now; if (task.Type == OutStockType.Sal) { //只有销售出库才需要同步金蝶 this.SuccessSync = SyncStatus.Fail; var erpd = this.Details.SelectMany(s => s.ErpDetails).ToList(); erpd.ForEach(f => f.SuccessSync = SyncStatus.Fail); } else { this.SuccessSync = SyncStatus.Success; var erpd = this.Details.SelectMany(s => s.ErpDetails).ToList(); erpd.ForEach(f => f.SuccessSync = SyncStatus.Success); } } /// /// 同步金蝶(成功) /// /// public void SyncSuccess(string sourcBillNo, int operateId,string erpBillNo) { //foreach (var e in erpDetailIds) // this.SuccessSyncFail.Remove(e); var erpd = this.Details.SelectMany(s => s.ErpDetails).Where(w => w.SourceBillNo.Equals(sourcBillNo)).ToList(); foreach (var e in erpd) { e.SuccessSync = SyncStatus.Success; e.ErpSyncBillNo = erpBillNo; } //所有erp明细同步成功才是整个单据成功 var erpDetails = this.Details.SelectMany(s => s.ErpDetails); if (erpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count()== erpDetails.Count()) { this.SuccessSync = SyncStatus.Success; this.Remark = ""; } this.OperateId = operateId; this.SyncTime = DateTime.Now; } /// /// 同步金蝶(失败) /// /// public void SyncFail(string remark, int operateId, SyncStatus syncStatus) { this.SuccessSync = syncStatus; this.Remark = remark; this.OperateId = operateId; this.SyncTime = DateTime.Now; } /// /// 生成单据号 /// public void GenerateNo() { //用户手动输入了 就不自动生成了 if (!string.IsNullOrEmpty(this.BillNo)) return; if (this.Id.ToString().Length >= 8) { this.BillNo = "CK" + this.Id.ToString(); return; } string idStr = this.Id.ToString(); while (true) { idStr = "0" + idStr; if (idStr.Length >= 8) break; } this.BillNo = "CK" + idStr; } } }