|
@@ -396,14 +396,14 @@ namespace Business.ResourceExamineManagement
|
|
|
long bangid = snow.NextId();
|
|
long bangid = snow.NextId();
|
|
|
|
|
|
|
|
//获取订单数据
|
|
//获取订单数据
|
|
|
- crm_seorder sorder = _mysql_crm_seorder.GetAsync(p=>p.Id == input.sorderId && p.IsDeleted ==false).Result;
|
|
|
|
|
|
|
+ crm_seorder sorder = _mysql_crm_seorder.GetAsync(p => p.Id == input.sorderId && p.IsDeleted == false).Result;
|
|
|
if (sorder == null)
|
|
if (sorder == null)
|
|
|
{
|
|
{
|
|
|
throw new NotImplementedException("订单数据不存在!");
|
|
throw new NotImplementedException("订单数据不存在!");
|
|
|
}
|
|
}
|
|
|
//获取订单行数据
|
|
//获取订单行数据
|
|
|
List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.seorder_id == input.sorderId && p.IsDeleted == false).Result;
|
|
List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.seorder_id == input.sorderId && p.IsDeleted == false).Result;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
string bom_number = "BOM00042070";
|
|
string bom_number = "BOM00042070";
|
|
|
int packages = 1000;
|
|
int packages = 1000;
|
|
|
|
|
|
|
@@ -715,13 +715,13 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
|
/// <param name="seorderentry_id">销售订单子表ID</param>
|
|
/// <param name="seorderentry_id">销售订单子表ID</param>
|
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
|
- public async Task GenerateMorder(long seorderentry_id)
|
|
|
|
|
|
|
+ public async Task GenerateMorder(crm_seorderentry seorderentry)
|
|
|
{
|
|
{
|
|
|
//1.库存、在制工单检查完成后 当前BOM需要自制时 产生工单。
|
|
//1.库存、在制工单检查完成后 当前BOM需要自制时 产生工单。
|
|
|
|
|
|
|
|
//2.每一个销售订单行对应一个工单。
|
|
//2.每一个销售订单行对应一个工单。
|
|
|
//查询销售订单子表数据
|
|
//查询销售订单子表数据
|
|
|
- var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
|
|
|
|
|
|
|
+ //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
|
|
|
//获取销售订单信息
|
|
//获取销售订单信息
|
|
|
var seorder = await _mysql_crm_seorder.FindAsync(x => x.Id == seorderentry.seorder_id);
|
|
var seorder = await _mysql_crm_seorder.FindAsync(x => x.Id == seorderentry.seorder_id);
|
|
|
//物料BOM
|
|
//物料BOM
|
|
@@ -824,7 +824,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
|
/// <param name="seorderentry_id">销售订单子表ID</param>
|
|
/// <param name="seorderentry_id">销售订单子表ID</param>
|
|
|
/// <returns></returns>
|
|
/// <returns></returns>
|
|
|
- public async Task<bool> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, long seorderentry_id)
|
|
|
|
|
|
|
+ public async Task<bool> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, crm_seorderentry seorderentry)
|
|
|
{
|
|
{
|
|
|
if (string.IsNullOrEmpty(bomNumber) || Quantity == null)
|
|
if (string.IsNullOrEmpty(bomNumber) || Quantity == null)
|
|
|
{
|
|
{
|
|
@@ -833,14 +833,14 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
//获取销售订单信息
|
|
//获取销售订单信息
|
|
|
//var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
|
|
//var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
|
|
|
- var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
|
|
|
|
|
|
|
+ //var seorderentry = await _mysql_crm_seorderentry.FindAsync(x => x.Id == seorderentry_id);
|
|
|
//根据Bom编码查询出对应工单并且状态不为完成、关闭,非委外工单。
|
|
//根据Bom编码查询出对应工单并且状态不为完成、关闭,非委外工单。
|
|
|
//TODO:工单类型;
|
|
//TODO:工单类型;
|
|
|
var morderList = await _mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != "完成" || x.morder_state != "关闭"
|
|
var morderList = await _mes_morder.GetManyByCondition(x => x.bom_number == bomNumber && (x.morder_state != "完成" || x.morder_state != "关闭"
|
|
|
&& x.morder_icitem_type != "相关委外工单") && x.IsDeleted == false && x.tenant_id == seorderentry.tenant_id);
|
|
&& x.morder_icitem_type != "相关委外工单") && x.IsDeleted == false && x.tenant_id == seorderentry.tenant_id);
|
|
|
|
|
|
|
|
//获取物料详情
|
|
//获取物料详情
|
|
|
- var ic_item = _ic_item.GetManyByCondition(x => x.number == bomNumber && x.tenant_id == seorderentry.tenant_id).Result.FirstOrDefault();
|
|
|
|
|
|
|
+ var ic_item = _ic_item.GetManyByCondition(x => x.number == seorderentry.item_number && x.tenant_id == seorderentry.tenant_id).Result.FirstOrDefault();
|
|
|
|
|
|
|
|
//工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
|
|
//工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
|
|
|
var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && x.IsDeleted == false && x.tenant_id == seorderentry.tenant_id);
|
|
var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && x.IsDeleted == false && x.tenant_id == seorderentry.tenant_id);
|
|
@@ -1215,8 +1215,8 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- public void calcTest(List<BomChildExamineDto> returnlist, long bangid, long orderid,decimal count)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public void calcTest(List<BomChildExamineDto> returnlist, long bangid, long orderid, decimal count)
|
|
|
{
|
|
{
|
|
|
//占用情况
|
|
//占用情况
|
|
|
List<ic_item_stockoccupy> sklist = new List<ic_item_stockoccupy>();
|
|
List<ic_item_stockoccupy> sklist = new List<ic_item_stockoccupy>();
|
|
@@ -1258,7 +1258,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//returnlist[0].kz = childList.Min(s => s.kz);//得到最小可制数量。
|
|
//returnlist[0].kz = childList.Min(s => s.kz);//得到最小可制数量。
|
|
|
//再加个循环,来根据替代关系里的检查结果,根据规则明确使用和生成占用关系。
|
|
//再加个循环,来根据替代关系里的检查结果,根据规则明确使用和生成占用关系。
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
foreach (var item in childList)
|
|
foreach (var item in childList)
|
|
|
{
|
|
{
|
|
|
if (item.haveicsubs == 1)
|
|
if (item.haveicsubs == 1)
|
|
@@ -1267,7 +1267,8 @@ namespace Business.ResourceExamineManagement
|
|
|
// 如果有群组替代,就移除掉被检查过的记录 item.icitem_ids
|
|
// 如果有群组替代,就移除掉被检查过的记录 item.icitem_ids
|
|
|
CalcStrategy(item, returnlist, bangid, sklist);
|
|
CalcStrategy(item, returnlist, bangid, sklist);
|
|
|
}
|
|
}
|
|
|
- else {
|
|
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
//直接占用库存,缺料就生成采购
|
|
//直接占用库存,缺料就生成采购
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1297,7 +1298,8 @@ namespace Business.ResourceExamineManagement
|
|
|
}*/
|
|
}*/
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void RecalculationStock(BomChildExamineDto item, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist) {
|
|
|
|
|
|
|
+ public void RecalculationStock(BomChildExamineDto item, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist)
|
|
|
|
|
+ {
|
|
|
//再计算一边占用情况,这里根据父级产品额缺料量*当前子料的使用数量-子料库存量。得出当前子物料的缺料数量
|
|
//再计算一边占用情况,这里根据父级产品额缺料量*当前子料的使用数量-子料库存量。得出当前子物料的缺料数量
|
|
|
var parent = returnlist.Find(s => s.id == item.parent_id);
|
|
var parent = returnlist.Find(s => s.id == item.parent_id);
|
|
|
decimal stockQty = sklist.Where(s => s.icitem_id == item.item_id).Sum(p => p.quantity);
|
|
decimal stockQty = sklist.Where(s => s.icitem_id == item.item_id).Sum(p => p.quantity);
|
|
@@ -1307,7 +1309,7 @@ namespace Business.ResourceExamineManagement
|
|
|
item.stock_state = item.lack_qty > 0 ? 0 : 1;
|
|
item.stock_state = item.lack_qty > 0 ? 0 : 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void CalcStrategy(BomChildExamineDto item, List<BomChildExamineDto> returnlist,long bangid, List<ic_item_stockoccupy> sklist)
|
|
|
|
|
|
|
+ public void CalcStrategy(BomChildExamineDto item, List<BomChildExamineDto> returnlist, long bangid, List<ic_item_stockoccupy> sklist)
|
|
|
{
|
|
{
|
|
|
//提取群组关系
|
|
//提取群组关系
|
|
|
var sublist = returnlist.Where(s => s.parent_id == item.parent_id && s.num == item.num && s.level == item.level).OrderBy(c => c.substitute_all_num).ToList();
|
|
var sublist = returnlist.Where(s => s.parent_id == item.parent_id && s.num == item.num && s.level == item.level).OrderBy(c => c.substitute_all_num).ToList();
|
|
@@ -1330,7 +1332,8 @@ namespace Business.ResourceExamineManagement
|
|
|
//走混用
|
|
//走混用
|
|
|
MixedUse(sublist, returnlist, sklist, bangid, parent);
|
|
MixedUse(sublist, returnlist, sklist, bangid, parent);
|
|
|
}
|
|
}
|
|
|
- else {
|
|
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
//走整批
|
|
//走整批
|
|
|
WholeBatch(sublist, returnlist, sklist, select, bangid, parent);
|
|
WholeBatch(sublist, returnlist, sklist, select, bangid, parent);
|
|
|
}
|
|
}
|
|
@@ -1364,10 +1367,11 @@ namespace Business.ResourceExamineManagement
|
|
|
idx = 99;
|
|
idx = 99;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
//整批占用
|
|
//整批占用
|
|
|
- public void WholeBatch(List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid, BomChildExamineDto parent) {
|
|
|
|
|
|
|
+ public void WholeBatch(List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid, BomChildExamineDto parent)
|
|
|
|
|
+ {
|
|
|
if (select.Count() == 0)
|
|
if (select.Count() == 0)
|
|
|
{
|
|
{
|
|
|
//如果为空,则默认使用优先级为0的集合作为替代关系
|
|
//如果为空,则默认使用优先级为0的集合作为替代关系
|
|
@@ -1419,7 +1423,8 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//混用占用数据
|
|
//混用占用数据
|
|
|
- public void MixedUse(List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, long bangid, BomChildExamineDto parent) {
|
|
|
|
|
|
|
+ public void MixedUse(List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<ic_item_stockoccupy> sklist, long bangid, BomChildExamineDto parent)
|
|
|
|
|
+ {
|
|
|
|
|
|
|
|
decimal parent_lack = 0;
|
|
decimal parent_lack = 0;
|
|
|
if (parent != null)
|
|
if (parent != null)
|
|
@@ -1527,7 +1532,8 @@ namespace Business.ResourceExamineManagement
|
|
|
//计算此次群组是否有符合
|
|
//计算此次群组是否有符合
|
|
|
MaterialCalc(sublist, returnlist, sockoccupyList);
|
|
MaterialCalc(sublist, returnlist, sockoccupyList);
|
|
|
}
|
|
}
|
|
|
- else {
|
|
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
//根据占用情况计算库存
|
|
//根据占用情况计算库存
|
|
|
Calczykc(item, sockoccupyList);
|
|
Calczykc(item, sockoccupyList);
|
|
|
//如果有子集,则丢入循环,判断下库存可制等信息。
|
|
//如果有子集,则丢入循环,判断下库存可制等信息。
|
|
@@ -1555,7 +1561,7 @@ namespace Business.ResourceExamineManagement
|
|
|
for (int i = 0; i <= maxIdx; i++)
|
|
for (int i = 0; i <= maxIdx; i++)
|
|
|
{
|
|
{
|
|
|
var group = sublist.Where(s => s.substitute_all_num == i).ToList();
|
|
var group = sublist.Where(s => s.substitute_all_num == i).ToList();
|
|
|
- // int boolCount = 0;//代表某一颗物料无需采购,可以自制,则集合+1。
|
|
|
|
|
|
|
+ // int boolCount = 0;//代表某一颗物料无需采购,可以自制,则集合+1。
|
|
|
|
|
|
|
|
//如果替代料库存不够,但是可制够,则也考虑使用优先级最高
|
|
//如果替代料库存不够,但是可制够,则也考虑使用优先级最高
|
|
|
foreach (var g in group)
|
|
foreach (var g in group)
|