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;
using System.Transactions;
namespace Business.ResourceExamineManagement
{
///
/// 资源检查
///
//[Authorize(BusinessPermissions.ResourceExamine.Default)]
public class ResourceExamineAppService : ApplicationService, IResourceExamineAppService
{
#region 服务
///
/// 工艺路径
///
private readonly IMongoDB _mes_technique;
///
/// 物料详情
///
private readonly IMongoDB _ic_item;
private IRepository _mysql_ic_item;
///
/// 物料BOM
///
private readonly IMongoDB _ic_bom;
private IRepository _mysql_ic_bom;
///
/// 物料BOM明细
///
private readonly IMongoDB _ic_bom_child;
///
/// 生产工单主表
///
private readonly IMongoDB _mes_morder;
private IRepository _mysql_ic_bom_child;
#endregion
///
/// 构造函数
///
///
///
public ResourceExamineAppService(
IMongoDB mes_technique,
IMongoDB ic_item,
IRepository mysql_ic_item,
IRepository mysql_ic_bom,
IRepository mysql_ic_bom_child,
IMongoDB ic_bom,
IMongoDB ic_bom_child,
IMongoDB mes_morder
)
{
_mes_technique = mes_technique;
_ic_item = ic_item;
_mysql_ic_item = mysql_ic_item;
_ic_bom = ic_bom;
_mysql_ic_bom = mysql_ic_bom;
_ic_bom_child = ic_bom_child;
_mysql_ic_bom_child = mysql_ic_bom_child;
_mes_morder = mes_morder;
}
///
/// 资源检查
///
///
///
///
public async Task ReceiveResult(SeorderentryDto input)
{
mes_technique info = new mes_technique() { };
SnowFlake snow = new SnowFlake();
info.Id = snow.NextId();
info.tech_name = "ceshi4444";
info.level = 4;
await _mes_technique.InsertOne(info);
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();
}
//var morderList = _mes_morder.(a => a.Id == ObjectId.Parse(id)).ToList().FirstOrDefault();
//查询生产工单类型为计划工单并且工单类型为备库工单 并且BOM编码一致数据
// 订单状态为 初始或下达工单
// List =>数量满足Quantity && 生成工单结束日期最早
}
public void BomPretreatment(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 bomlist = _ic_bom.GetAll().Result;
var bomchildlist = _ic_bom_child.GetAll().Result;
var icitemlist = _ic_item.GetAll().Result;
List returnlist = new List();
var dto = new BomChildExamineDto();
dto.bom_id = BomId.Value;
dto.level = 1;
dto.id = help.NextId();
dto.parent_id = help.NextId();
dto.qty = 1;
dto.num = "1";
dto.isbom = 1;
GetBomList(bomlist, bomchildlist, icitemlist, dto, returnlist);
}
public void GetBomList(List bomlist, List bomchildlist, List icitemlist, BomChildExamineDto dto, List returnlist)
{
int level = dto.level++;//初始化定义level层级
var help = new SnowFlake();
var bom = bomlist.WhereIf(true, s => s.Id == dto.bom_id).FirstOrDefault();
var item = icitemlist.WhereIf(true, a => a.Id == bom.icitem_id).FirstOrDefault();
if (bom == null || item==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;
dto.model = item.model;
dto.unit = bom.unit;
dto.erp_cls = item.erp_cls;
dto.erp_cls_name = item.erp_cls_name;
//var bdto = ObjectMapper.Map(bom);
returnlist.Add(dto);
var childlist = bomchildlist.WhereIf(true, a => a.bom_id == bom.Id).ToList();
int idx = 1;
foreach (var c in childlist)
{
string childNum = dto.num + "." + idx.ToString();
var icitem = icitemlist.WhereIf(true, a => a.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)
{
var cdto = new BomChildExamineDto();
cdto.id = help.NextId();
cdto.level = level;
cdto.parent_id = dto.id;
cdto.qty = c.qty.Value;
cdto.backflush = c.backflush;
cdto.num = childNum;
cdto.isbom = 1;
GetBomList(bomlist, bomchildlist, icitemlist, cdto, returnlist);
}
}
else
{
if (icitem != null)
{
var childDto = new BomChildExamineDto();
childDto.level = level++;
childDto.bom_id = dto.bom_id;
childDto.id = help.NextId();
childDto.parent_id = dto.id;
childDto.item_id = icitem.Id;
childDto.item_name = icitem.name;
childDto.item_code = icitem.number;
childDto.num = childNum;
childDto.model = icitem.model;
childDto.unit = c.unit;
childDto.erp_cls = item.erp_cls;
childDto.erp_cls_name = item.erp_cls_name;
childDto.backflush = c.backflush;
childDto.qty = c.qty.Value;
childDto.isbom = 0;
returnlist.Add(childDto);
}
}
idx++;
}
}
}
}