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;
using NUglify.JavaScript.Syntax;
using System.Linq.Expressions;
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;
private IBasicRepository _mysql_ic_item;
///
/// 物料BOM
///
private readonly IMongoDB _ic_bom;
private IBasicRepository _mysql_ic_bom;
///
/// 物料BOM明细
///
private readonly IMongoDB _ic_bom_child;
private IBasicRepository _mysql_ic_bom_child;
///
/// 物料库存表
///
private readonly IMongoDB _ic_item_stock;
///
/// 生产工单主表
///
private readonly IMongoDB _mes_morder;
#endregion
///
/// 构造函数
///
///
///
public ResourceExamineAppService(
IMongoDB mes_technique,
IMongoDB ic_item,
IMongoDB ic_bom,
IMongoDB ic_bom_child,
IMongoDB ic_item_stock,
IMongoDB mes_morder,
IBasicRepository mysql_ic_item,
IBasicRepository mysql_ic_bom,
IBasicRepository mysql_ic_bom_child
)
{
_mes_technique = mes_technique;
_ic_item = ic_item;
_ic_bom = ic_bom;
_ic_bom_child = ic_bom_child;
_ic_item_stock = ic_item_stock;
_mes_morder = mes_morder;
_mysql_ic_item = mysql_ic_item;
_mysql_ic_bom = mysql_ic_bom;
_mysql_ic_bom_child = mysql_ic_bom_child;
}
///
/// mongoDB示例方法,后期删除
///
///
public async Task test()
{
//多条插入
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 info2 = _mes_technique.GetAll().Result;
var a = new PschedDto();
a.count = info2.Count;
//获取数据
var info1 = await _mes_technique.GetOneByID((long)1732029975067480064);
//更新数据
info1.tech_name = "更新***";
var rlt = await _mes_technique.UpdateOne(info1, info1.Id);
//根据条件查询数据
Expression> filter = x => x.Id == (long)1732376973889097728 && x.tech_name == "多条0";
var info3 = await _mes_technique.GetManyByCondition(filter);
}
///
/// 资源检查
///
///
///
///
public async Task ReceiveResult(SeorderentryDto input)
{
return null;
throw new NotImplementedException();
}
///
/// 产能计算
///
/// Bom主键
/// 需要数量
public async Task ProductiveExamine(long? BomId, int Quantity)
{
}
///
/// 检查在制工单
///
/// Bom编码
/// 需要数量
///
public async Task CheckMorder(string bomNumber, decimal? Quantity, DateTime EndDate)
{
if (string.IsNullOrEmpty(bomNumber) || Quantity < 0)
{
//TODO:入参异常;
//throw new NotImplementedException();
}
var morderList = _mes_morder.GetAll().Result;
var morderTypeList = morderList.Where(x => x.work_order_type == "备库工单" && x.morder_type == "计划工单" && x.bom_number == bomNumber && (x.morder_state == "初始" || x.morder_state == "下达")).ToList();
//查询生产工单类型为计划工单并且工单类型为备库工单 并且BOM编码一致数据
// 订单状态为 初始或下达工单
var SatisfyQuantityList = morderTypeList.Where(x => x.morder_production_number >= Quantity).
ToList().OrderBy(x => x.moentry_sys_etime).FirstOrDefault();
if (SatisfyQuantityList == null)
{
}
else
{
}
// 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;
dto.is_replace = 0;
dto.haveicsubs = 0;
dto.substitute_code = "";
dto.icitem_ids = "";
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;
cdto.is_replace = c.is_replace;
cdto.haveicsubs = c.haveicsubs;
cdto.substitute_code = c.substitute_code;
cdto.icitem_ids = c.icitem_ids;
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;
childDto.is_replace = c.is_replace;
childDto.haveicsubs = c.haveicsubs;
childDto.substitute_code = c.substitute_code;
childDto.icitem_ids = c.icitem_ids;
returnlist.Add(childDto);
}
}
idx++;
}
}
///
/// 计算库存量
///
///
public void BomStock(List returnlist)
{
returnlist = returnlist.OrderBy(s => s.num).ToList();
List idlist = new List();
foreach (var item in returnlist)
{
}
}
}
}