| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using Business.Core.Utilities;
- using Business.Domain;
- using Business.Dto;
- using Business.EntityFrameworkCore.SqlRepositories;
- using Business.ResourceExamineManagement;
- using Business.StructuredDB.MES;
- using Business.StructuredDB.SaleFcst;
- using Business.StructuredDB.WMS;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Volo.Abp.Application.Services;
- using Volo.Abp.DependencyInjection;
- using Volo.Abp.Domain.Repositories;
- using Volo.Abp.MultiTenancy;
- using Volo.Abp.Uow;
- using IUnitOfWorkManager = Volo.Abp.Uow.IUnitOfWorkManager;
- namespace Business.MES
- {
- //DOP
- public class SyncMESAppService : ApplicationService, ISyncMESAppService, ITransientDependency
- {
- #region 服务
- /// <summary>
- /// 生产日计划
- /// </summary>
- private readonly IRepository<mes_producedailyplan, long> _producedailyplan;
- /// <summary>
- /// 工单表
- /// </summary>
- private readonly IRepository<mes_morder, long> _morder;
- /// <summary>
- /// 工单
- /// </summary>
- private ISqlRepository<WorkOrdMaster> _workOrdMaster;
- /// <summary>
- /// 生产线明细表
- /// </summary>
- private ISqlRepository<ProdLineDetail> _prodLineDetail;
- /// <summary>
- /// 生产线数据
- /// </summary>
- private ISqlRepository<LineMaster> _lineMaster;
- /// <summary>
- /// 工作日历
- /// </summary>
- private ISqlRepository<ShopCalendarWorkCtr> _shopCalendarWorkCtr;
- /// <summary>
- /// 雪花算法
- /// </summary>
- SnowFlake snowFlake = new SnowFlake();
- /// <summary>
- /// 事务
- /// </summary>
- private readonly IUnitOfWorkManager _unitOfWorkManager;
- /// <summary>
- /// 生产排产
- /// </summary>
- private readonly ProductionScheduleAppService _productionScheduleAppService;
- /// <summary>
- /// 产线休息时间记录表
- /// </summary>
- private ISqlRepository<QualityLineWorkDetail> _qualityLineWorkDetail;
- #endregion
- #region 构造函数
- /// <summary>
- /// 构造函数
- /// </summary>
- public SyncMESAppService(
- IRepository<mes_producedailyplan, long> mes_producedailyplan,
- IRepository<mes_morder, long> mes_morder,
- ISqlRepository<WorkOrdMaster> workOrdMaster,
- ISqlRepository<ProdLineDetail> prodLineDetail,
- ISqlRepository<LineMaster> lineMaster,
- ISqlRepository<ShopCalendarWorkCtr> shopCalendarWorkCtr,
- ISqlRepository<QualityLineWorkDetail> qualityLineWorkDetail,
- IUnitOfWorkManager unitOfWorkManager,
- ProductionScheduleAppService productionScheduleAppService,
- ICurrentTenant currentTenant
- )
- {
- _producedailyplan = mes_producedailyplan;
- _morder = mes_morder;
- _workOrdMaster = workOrdMaster;
- _prodLineDetail = prodLineDetail;
- _lineMaster = lineMaster;
- _shopCalendarWorkCtr = shopCalendarWorkCtr;
- _unitOfWorkManager = unitOfWorkManager;
- _qualityLineWorkDetail = qualityLineWorkDetail;
- _productionScheduleAppService = productionScheduleAppService;
- }
- #endregion
- /// <summary>
- /// 生成日计划
- /// </summary>
- /// <param name="crm_Weekplans"></param>
- public void SavaProducedailyplanData(long factory_id)
- {
- //var workOrd = _workOrdMaster.Select(x => x.IsActive == true && x.Status == "初始" && x.Domain == factory_id.ToString()).OrderBy(x => x.OrdDate);
- //var morder = _morder.GetListAsync(x => x.IsDeleted == true && workOrd.Select(p => p.WorkOrd).Contains(x.morder_no));
- //var prodLine = _prodLineDetail.Select(x => workOrd.Select(p => p.ItemNum).Contains(x.Part) && x.IsActive == true && x.Domain == factory_id.ToString()).ToList().OrderBy(y=>y.Sequence);
- }
- #region 注释
- /// <summary>
- /// 计算工厂产能
- /// </summary>
- /// <param name="StartDataTime">开始时间</param>
- /// <param name="EndDataTime">结束时间</param>
- //public void FactoryCapacity(DateTime StartDataTime, DateTime EndDataTime, long factory_id)
- //{
- // var LineData = _lineMaster.Select(x => x.IsActive == true && x.Domain == factory_id.ToString()).ToList();
- // var shopCalendarWorkCtr = _shopCalendarWorkCtr.Select(x => (LineData.Select(p => p.Line).Contains(x.ProdLine) || x.ProdLine == "") && x.IsActive == true && x.Domain == factory_id.ToString()).ToList();
- // //获取产线休息记录数据
- // var qualityLines = _qualityLineWorkDetail.Select(p => p.Domain == factory_id.ToString() && p.IsActive);
- // foreach (var item in LineData)
- // {
- // //当前日期
- // DateTime actStart = StartDataTime;
- // var datatime = (EndDataTime - EndDataTime).Days;
- // //当前产线的每天休息时间记录
- // var mlqtyWorkDtls = qualityLines.Where(p => p.ProdLine == item.Line).OrderBy(p => p.Line).ToList();
- // for (int i = 0; i < datatime; i++)
- // {
- // //查询生产线是否配置工作日历
- // var data = shopCalendarWorkCtr.Where(x => x.ProdLine == item.Line).ToList();
- // if (data != null)
- // {
- // //有配置 根据配置时长计算
- // }
- // else
- // {
- // //无对应配置 查询出无产线配置日历计算
- // var line = shopCalendarWorkCtr.Where(x => x.ProdLine == "").ToList();
- // //开始时间是周几
- // int weekDay = (int)actStart.DayOfWeek;
- // //判断当天是否是工作日
- // bool isWorkDay = _productionScheduleAppService.CheckIsWorkDay(actStart);
- // if (!isWorkDay)//是工作日
- // {
- // //输出DTO 工作时长为0
- // }
- // else
- // {
- // //当天的工作日历
- // var shopCal = line.Where(p => p.WeekDay == weekDay).First();
- // //当前日期的工作时间段
- // List<LineWorkPointDto> workPoints = DealWorkDayToLevels(actStart, shopCal, mlqtyWorkDtls);
- // }
- // }
- // actStart.AddDays(i);
- // }
- // }
- //}
- /// <summary>
- /// 处理当前日期的工作时间段
- /// </summary>
- /// <param name="startTime"></param>
- /// <param name="shopCal">当前产线的工作日历-周几</param>
- /// <param name="curQtyDtls">每天休息记录</param>
- /// <returns></returns>
- //public List<LineRestDataTimeDto> DealWorkDayToLevels(DateTime startTime, ShopCalendarWorkCtr shopCal, List<QualityLineWorkDetail> curQtyDtls)
- //{
- // //年-月-日
- // string date = startTime.Date.ToString("yyyy-MM-dd");
- // //排产记录结束日期是周几
- // int weekDay = (int)startTime.DayOfWeek;
- // //计算当天的开工时间点,停工时间点
- // string strStart = shopCal.ShiftsStart1.ToString("0.00").Replace(".", ":");
- // DateTime dayStartPoint = Convert.ToDateTime(date + " " + strStart);
- // DateTime dayEndPoint = dayStartPoint.AddHours(Convert.ToDouble(shopCal.ShiftsHours1));
- // //工作时间段
- // List<LineRestDataTimeDto> workPoints = new List<LineRestDataTimeDto>();
- // LineRestDataTimeDto dto = new LineRestDataTimeDto();
- // TimeSpan span = TimeSpan.Zero;
- // foreach (var item in curQtyDtls)
- // {
- // dto.Line = shopCal.ProdLine;
- // dto.WeekDay = weekDay;
- // DateTime StarDatime = Convert.ToDateTime(date + " " + item.RestTimePoint);
- // dto.StartPoint = StarDatime;
- // dto.EndPoint = StarDatime.AddMinutes(item.RestTime); ;
- // }
- // //return workPoints.OrderBy(p => p.Level).ToList();
- //}
- #endregion
- }
- }
|