|
|
@@ -356,43 +356,46 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="BomNumber">Bom编码</param>
|
|
|
/// <param name="Quantity">需要数量</param>
|
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
|
- /// <param name="OrderId">销售订单ID</param>
|
|
|
+ /// <param name="seorderentry_id">销售订单ID</param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task GenerateMorder(string BomNumber, decimal? Quantity, DateTime DeliverDate, long OrderId)
|
|
|
+ public async Task GenerateMorder(long seorderentry_id)
|
|
|
{
|
|
|
//需要生成的物料,需要生产的数量,对应销售订单。
|
|
|
|
|
|
//1.库存、在制工单检查完成后 当前BOM需要自制时 产生工单。
|
|
|
|
|
|
//2.每一个销售订单行对应一个工单。
|
|
|
-
|
|
|
- if (string.IsNullOrEmpty(BomNumber) || Quantity == null)
|
|
|
- {
|
|
|
- //TODO: 参数异常 直接返回
|
|
|
- }
|
|
|
//获取销售订单信息
|
|
|
//var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
|
|
|
- var seorderentry = await _crm_seorderentry.FindAsync(x => x.seorder_id == OrderId);
|
|
|
+ //查询销售订单子表数据
|
|
|
+ var seorderentry = await _crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
|
|
|
+
|
|
|
+ mes_morder mes_Morder = new mes_morder();
|
|
|
+ mes_Morder.GenerateNewId();
|
|
|
+ mes_Morder.morder_type = "销售工单";
|
|
|
+ //mes_Morder.morder_icitem_type
|
|
|
+ mes_Morder.work_order_type = "常规工单";
|
|
|
+ mes_Morder.morder_state = "初始";
|
|
|
+
|
|
|
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 检查成品库存
|
|
|
/// </summary>
|
|
|
- /// <param name="OrderId">销售订单ID</param>
|
|
|
+ /// <param name="seorderentry_id">销售订单子表ID</param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<bool> CheckFinishedProductInventory(long OrderId)
|
|
|
+ public async Task<bool> CheckFinishedProductInventory(long seorderentry_id)
|
|
|
{
|
|
|
- //获取销售订单信息
|
|
|
- var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
|
|
|
//获取销售订单子表
|
|
|
- var seorderentry = await _crm_seorderentry.FindAsync(x => x.seorder_id == OrderId);
|
|
|
+ var seorderentry = await _crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
|
|
|
if (string.IsNullOrEmpty(seorderentry.bom_number))
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
- Expression<Func<ic_item_stock, bool>> filter = x => x.icitem_id == long.Parse(seorderentry.bom_number);
|
|
|
- var ic_Item_Stocks = await _ic_item_stock.GetManyByCondition(filter);
|
|
|
-
|
|
|
+ //物料BOM
|
|
|
+ var ic_bom = _ic_bom.GetManyByCondition(x => x.bom_number == seorderentry.bom_number).Result.FirstOrDefault();
|
|
|
+ //物料库存表
|
|
|
+ var ic_Item_Stocks = await _ic_item_stock.GetManyByCondition(x => x.icitem_id == ic_bom.icitem_id);
|
|
|
if (seorderentry.qty <= ic_Item_Stocks.Sum(x => x.sqty))
|
|
|
{
|
|
|
return true;
|
|
|
@@ -409,9 +412,9 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="bomNumber">Bom编码</param>
|
|
|
/// <param name="Quantity">需要数量</param>
|
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
|
- /// <param name="OrderId">销售订单ID</param>
|
|
|
+ /// <param name="seorderentry_id">销售订单子表ID</param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<List<mes_morder>> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, long OrderId)
|
|
|
+ public async Task<List<mes_morder>> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, long seorderentry_id)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(bomNumber) || Quantity != null)
|
|
|
{
|
|
|
@@ -420,19 +423,17 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
//根据Bom编码查询出对应工单并且状态不为完成、关闭,非委外工单。
|
|
|
//TODO:工单类型;
|
|
|
- Expression<Func<mes_morder, bool>> filter = x => x.bom_number == bomNumber && (x.morder_state != "完成" || x.morder_state != "关闭"
|
|
|
- && x.morder_icitem_type != "相关委外工单") && x.IsDeleted == false;
|
|
|
- var morderList = await _mes_morder.GetManyByCondition(filter);
|
|
|
+ var morderList = await _mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != "完成" || x.morder_state != "关闭"
|
|
|
+ && x.morder_icitem_type != "相关委外工单") && x.IsDeleted == false);
|
|
|
|
|
|
//获取销售订单信息
|
|
|
//var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
|
|
|
- var seorderentry = await _crm_seorderentry.FindAsync(x => x.seorder_id == OrderId);
|
|
|
+ var seorderentry = await _crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
|
|
|
//获取物料详情
|
|
|
var mysql_ic_item = await _mysql_ic_item.FindAsync(x => x.number == bomNumber);
|
|
|
|
|
|
//工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
|
|
|
- Expression<Func<mes_mooccupy, bool>> mooccupyfilter = x => x.moo_state == 1 && x.IsDeleted == false;
|
|
|
- var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(mooccupyfilter);
|
|
|
+ var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && x.IsDeleted == false);
|
|
|
|
|
|
//首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
|
|
|
//当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
|