Files
WMS-Api/src/WMS.Web.Domain/Entitys/OutStockTask.cs
2023-11-01 09:19:41 +08:00

125 lines
4.1 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>
/// erp出库任务单
/// </summary>
[Serializable]
[Table("t_erp_outstock_task")]
public class OutStockTask : EntityBase
{
public OutStockTask() { }
/// <summary>
/// 主键 订单编号
/// </summary>
[Column("Id")]
public override int Id { get; set; }
/// <summary>
/// 单据编号
/// </summary>
[Column("BillNo")]
public string BillNo { get; set; }
/// <summary>
/// 来源单号
///</summary>
[Column("SourceBillNo")]
public string SourceBillNo { get; set; }
/// <summary>
/// 单据状态
/// </summary>
[Column("Status")]
public OutStockStatus Status { get; set; } = OutStockStatus.Wait;
/// <summary>
/// 单据类型
/// </summary>
[Column("Type")]
public OrderType Type { get; set; } = OrderType.Sal_Out;
/// <summary>
/// 操作人(出库人)
/// </summary>
[Column("OperatorId")]
public int? OperatorId { get; set; }
/// <summary>
/// 操作时间(出库时间)
/// </summary>
[Column("OperateTime")]
public DateTime? OperateTime { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<OutStockTaskDetails> Details = new List<OutStockTaskDetails>();
/// <summary>
/// 生成单据号
/// </summary>
public void GenerateNo()
{
//用户手动输入了 就不自动生成了
if (!string.IsNullOrEmpty(this.BillNo)) return;
if (this.Id.ToString().Length >= 8)
{
this.BillNo = "CKZL" + this.Id.ToString();
return;
}
string idStr = this.Id.ToString();
while (true)
{
idStr = "0" + idStr;
if (idStr.Length >= 8) break;
}
//this.Number = CNSpellTranslator.GetFirstSpell(this.Name) + idStr;
this.BillNo = "CKZL" + idStr;
}
/// <summary>
/// 作废
/// </summary>
public void Repeal(int creatorId)
{
this.OperatorId = creatorId;
this.OperateTime = DateTime.Now;
this.Status = OutStockStatus.Repeal;
}
/// <summary>
/// 合并
/// </summary>
/// <param name="list"></param>
/// <param name="creatorId"></param>
/// <returns></returns>
public Result Merge(List<OutStockTask> list, int creatorId)
{
// 符合合并数据逻辑:出库状态为”待拣货”+出库类型为:销售出库+发货组织一致+收货客户一致+发货仓库一致
if (list.Where(w => w.Status != OutStockStatus.Wait).Any()) return Result.ReFailure(ResultCodes.MergeStatusError);
if (list.Where(w => w.Type != OrderType.Sal_Out).Any()) return Result.ReFailure(ResultCodes.MergeStatusError);
var details = list.SelectMany(s => s.Details).ToList();
if (details.GroupBy(g => g.DeliveryOrgId).Count() > 1) return Result.ReFailure(ResultCodes.MergeStatusError);
if (details.GroupBy(g => g.ReceiptCustomerId).Count() > 1) return Result.ReFailure(ResultCodes.MergeStatusError);
if (details.GroupBy(g => g.StockId).Count() > 1) return Result.ReFailure(ResultCodes.MergeStatusError);
//清空数据绑定
foreach (var d in details)
{
d.Id = 0;
d.Fid = 0;
}
this.OperatorId = creatorId;
this.OperateTime = DateTime.Now;
this.Status = OutStockStatus.Wait;
this.Type = OrderType.Sal_Out;
this.Details = details;
return Result.ReSuccess();
}
}
}