212 lines
6.3 KiB
C#
212 lines
6.3 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.Domain.Values;
|
||
|
||
namespace WMS.Web.Domain.Entitys
|
||
{
|
||
/// <summary>
|
||
/// wms入库单
|
||
/// </summary>
|
||
[Serializable]
|
||
[Table("t_wms_instock")]
|
||
public class InStock : EntityBase
|
||
{
|
||
public InStock() { }
|
||
/// <summary>
|
||
/// ID
|
||
/// </summary>
|
||
public override int Id { get; set; }
|
||
|
||
/// <summary>
|
||
/// 单据编号
|
||
/// </summary>
|
||
public string BillNo { get; set; }
|
||
/// <summary>
|
||
/// 入库类型
|
||
/// </summary>
|
||
public InstockType Type { get; set; }
|
||
/// <summary>
|
||
/// 出入库方式:1按箱,2按产品
|
||
/// </summary>
|
||
public InventoryInOutMethod Method { get; set; }
|
||
/// <summary>
|
||
/// 创建人
|
||
/// </summary>
|
||
public int CreatorId { get; set; }
|
||
/// <summary>
|
||
/// 创建时间(入库时间)
|
||
/// </summary>
|
||
public DateTime CreateTime { get; set; }
|
||
/// <summary>
|
||
/// 同步成功或者失败
|
||
/// </summary>
|
||
public SyncStatus SuccessSync { get; set; } = SyncStatus.SyncIng;
|
||
|
||
/// <summary>
|
||
/// 操作人
|
||
/// </summary>
|
||
public int OperateId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 同步时间
|
||
/// </summary>
|
||
public DateTime? SyncTime { get; set; }
|
||
|
||
/// <summary>
|
||
/// 备注
|
||
/// </summary>
|
||
public string Remark { get; set; }
|
||
/// <summary>
|
||
/// 组织ID
|
||
/// </summary>
|
||
public int OrgId { get; set; }
|
||
/// <summary>
|
||
/// 组织编码
|
||
/// </summary>
|
||
public string OrgCode { get; set; }
|
||
/// <summary>
|
||
/// 仓库编码
|
||
/// </summary>
|
||
public string StockCode { get; set; }
|
||
|
||
/// <summary>
|
||
/// 仓位编码
|
||
/// </summary>
|
||
public string SubStockCode { get; set; }
|
||
|
||
/// <summary>
|
||
/// ERP明细
|
||
/// </summary>
|
||
public List<InStockErpDetails> ErpDetails { get; set; } = new List<InStockErpDetails>();
|
||
|
||
/// <summary>
|
||
/// 明细
|
||
/// </summary>
|
||
public List<InStockDetails> Details { get; set; } = new List<InStockDetails>();
|
||
|
||
/// <summary>
|
||
/// 创建
|
||
/// </summary>
|
||
/// <param name="creatorId"></param>
|
||
public void Create(int creatorId)
|
||
{
|
||
this.CreatorId = creatorId;
|
||
this.CreateTime = DateTime.Now;
|
||
if (this.Type == InstockType.Purchase)
|
||
{
|
||
this.SuccessSync = SyncStatus.SyncIng;
|
||
this.ErpDetails.ForEach(f => f.SuccessSync = SyncStatus.SyncIng);
|
||
}
|
||
else//非采购订单,这里就没有记录erpdetails的数据了
|
||
this.SuccessSync = SyncStatus.Success;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 同步金蝶
|
||
/// </summary>
|
||
/// <param name="syncStatus"></param>
|
||
/// <param name="operateId"></param>
|
||
/// <param name="remark"></param>
|
||
public void Sync(SyncStatus syncStatus, int operateId, string remark)
|
||
{
|
||
this.SuccessSync = syncStatus;
|
||
this.Remark = remark;
|
||
this.OperateId = operateId;
|
||
this.SyncTime = DateTime.Now;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 生成单据号
|
||
/// </summary>
|
||
public void GenerateNo()
|
||
{
|
||
//用户手动输入了 就不自动生成了
|
||
if (!string.IsNullOrEmpty(this.BillNo)) return;
|
||
|
||
if (this.Id.ToString().Length >= 8)
|
||
{
|
||
this.BillNo = "RK" + this.Id.ToString();
|
||
return;
|
||
}
|
||
|
||
string idStr = this.Id.ToString();
|
||
while (true)
|
||
{
|
||
idStr = "0" + idStr;
|
||
if (idStr.Length >= 8) break;
|
||
}
|
||
this.BillNo = "RK" + idStr;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 同步金蝶(成功)
|
||
/// </summary>
|
||
/// <param name="erpDetailId"></param>
|
||
/// <param name="operateId"></param>
|
||
/// <param name="erpBillNo"></param>
|
||
public void SyncSuccess(int erpDetailId, int operateId, string erpBillNo)
|
||
{
|
||
var erpd = this.ErpDetails.Where(s=>s.ErpDetailId==erpDetailId).ToList();
|
||
erpd.ForEach(det =>
|
||
{
|
||
det.SuccessSync = SyncStatus.Success;
|
||
det.ErpSyncBillNo = erpBillNo;
|
||
});
|
||
|
||
//所有erp明细同步成功才是整个单据成功
|
||
if (this.ErpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count() == this.ErpDetails.Count())
|
||
{
|
||
this.SuccessSync = SyncStatus.Success;
|
||
this.Remark = "";
|
||
}
|
||
else
|
||
this.SuccessSync = SyncStatus.Fail;
|
||
this.OperateId = operateId;
|
||
this.SyncTime = DateTime.Now;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 同步金蝶(失败)
|
||
/// </summary>
|
||
/// <param name="remark"></param>
|
||
/// <param name="erpDetailId"></param>
|
||
/// <param name="operateId"></param>
|
||
/// <param name="syncStatus"></param>
|
||
public void SyncFail(string remark, int erpDetailId, int operateId, SyncStatus syncStatus)
|
||
{
|
||
var erpd = this.ErpDetails.Where(w => w.ErpDetailId == erpDetailId).ToList();
|
||
erpd.ForEach(det =>
|
||
{
|
||
det.SuccessSync = syncStatus;
|
||
});
|
||
this.SuccessSync = SyncStatus.Fail;
|
||
this.Remark = remark;
|
||
this.OperateId = operateId;
|
||
this.SyncTime = DateTime.Now;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重传
|
||
/// </summary>
|
||
public void RepeatSync()
|
||
{
|
||
//只有完全失败的情况下才能重传
|
||
if (this.SuccessSync != SyncStatus.Fail) return;
|
||
this.SuccessSync = SyncStatus.SyncIng;
|
||
var erpDetails = this.ErpDetails
|
||
.Where(w => w.SuccessSync == SyncStatus.Fail)
|
||
.ToList();
|
||
foreach (var e in erpDetails)
|
||
{
|
||
e.SuccessSync = SyncStatus.SyncIng;
|
||
}
|
||
this.Remark = "";
|
||
}
|
||
}
|
||
}
|