using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
using Business.Models;
using Microsoft.AspNetCore.Authorization;
using Business.Permissions;
using XCZ;
using Business.ResourceExamineManagement.Dto;
using Bussiness.Model.MES.IC;
using AutoMapper.Internal.Mappers;
using Bussiness.Model.Tech;
using Bussiness.Model.Production;
using Business.Core.MongoDBHelper;
using Business.Core.Utilities;
using Hangfire.Storage.Monitoring;
using Business.BookManagement.Dto;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Application.Services;
using ZstdSharp.Unsafe;
namespace Business.ResourceExamineManagement
{
///
/// 资源检查
///
//[Authorize(BusinessPermissions.ResourceExamine.Default)]
public class ResourceExamineAppService : ApplicationService, IResourceExamineAppService
{
#region 服务
///
/// 工艺路径
///
private readonly IMongoDB _mes_technique;
///
/// 工艺关联工序
///
private readonly IMongoDB _mes_tech_process;
///
/// 工作日历
///
private readonly IMongoDB _mes_work_calendar;
///
/// 工作日历明细
///
private readonly IMongoDB _mes_work_calendar_list;
///
/// 工艺工序关联工位
///
private readonly IMongoDB _mes_tech_proc_workshop;
///
/// 排程占用记录
///
private readonly IMongoDB _mes_schedule_occupy;
///
/// 物料详情
///
private readonly IMongoDB _ic_item;
///
/// 物料BOM
///
private readonly IMongoDB _ic_bom;
///
/// 物料BOM明细
///
private readonly IMongoDB _ic_bom_child;
#endregion
///
/// 构造函数
///
///
///
public ResourceExamineAppService(
IMongoDB mes_technique,
IMongoDB ic_item,
IMongoDB ic_bom,
IMongoDB ic_bom_child
)
{
_mes_technique = mes_technique;
_ic_item = ic_item;
_ic_bom = ic_bom;
_ic_bom_child = ic_bom_child;
}
///
/// 资源检查
///
///
///
///
public async Task ReceiveResult(SeorderentryDto input)
{
////多条插入
//List infos = new List();
//mes_technique info;
//for (int i = 0; i < 3; i++)
//{
// info = new mes_technique();
// info.GenerateNewId();
// info.tech_name = "多条"+i;
// info.level = i;
// infos.Add(info);
//}
//await _mes_technique.InsertMany(infos);
////获取数据
//var info1 = await _mes_technique.GetOneByID((long)1732029975067480064);
////更新数据
//info1.tech_name = "更新777";
//await _mes_technique.UpdateOne(info1, info1.Id);
throw new NotImplementedException();
}
///
/// 产能计算
///
/// Bom主键
/// 需要数量
public async Task ProductiveExamine(long? BomId, int Quantity)
{
}
///
/// 检查在制工单
///
/// Bom编码
/// 需要数量
///
public async Task CheckMorder(string bomNumber, int Quantity)
{
if (string.IsNullOrEmpty(bomNumber) || Quantity < 0)
{
//TODO:入参异常;
//throw new NotImplementedException();
}
//查询生产工单类型为计划工单并且工单类型为备库工单 并且BOM编码一致数据
// 订单状态为 初始或下达工单
// List =>数量满足Quantity && 生成工单结束日期最早
}
public async Task BomPretreatmentAsync(long? orderid, long? BomId, int Quantity)
{
if (orderid == null)
{
//throw new bu
}
if (BomId == null)
{
//throw new bu
}
//var query = (await _ic_bom.GetQueryableAsync()).WhereIf(true, a => a.bom_id == BomId).ToList();
//var help = new SnowFlake();
//var id = help.NextId();
var level = 0;
var bomlist = _ic_bom.GetAll();
var bomchildlist = _ic_bom_child.GetAll();
var icitemlist = _ic_item.GetAll();
//GetBomListAsync();
}
public void GetBomList(List bomlist, List bomchildlist, List icitemlist, long bomId, List returnlist, long? parent_id, int le)
{
int level = le++;//初始化定义level层级
var help = new SnowFlake();
var bom = bomlist.WhereIf(true, s => s.bom_id == bomId).FirstOrDefault();
if (bom == null)
{
}
var dto = new BomChildExamineDto();
dto.level = level;
dto.bom_id = bomId;
dto.id = help.NextId();
dto.parent_id = parent_id;
dto.item_id = bom.icitem_id;
dto.item_name = bom.item_name;
dto.item_code = bom.item_number;
//var bdto = ObjectMapper.Map(bom);
returnlist.Add(dto);
var childlist = bomchildlist.WhereIf(true, a => a.bom_id == bom.bom_id).ToList();
foreach (var c in childlist)
{
var icitem = icitemlist.WhereIf(true, a => a.icitem_id == c.icitem_id).FirstOrDefault();
//如果此明细查的到BOM信息,则代表此child是一个子BOM。
if (c.is_bom == 1)
{
var childBom = bomlist.WhereIf(true, a => a.icitem_id == c.icitem_id).FirstOrDefault();
if (childBom != null)
{
GetBomList(bomlist, bomchildlist, icitemlist, childBom.bom_id, returnlist, dto.id, level);
}
}
else
{
if (icitem != null)
{
var childDto = new BomChildExamineDto();
childDto.level = level++;
childDto.bom_id = bomId;
childDto.id = help.NextId();
childDto.parent_id = parent_id;
childDto.item_id = icitem.icitem_id;
childDto.item_name = icitem.name;
childDto.item_code = icitem.number;
returnlist.Add(childDto);
}
}
}
}
}
}