SyncMESAppService.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using Business.Core.Utilities;
  2. using Business.Domain;
  3. using Business.Dto;
  4. using Business.EntityFrameworkCore.SqlRepositories;
  5. using Business.ResourceExamineManagement;
  6. using Business.StructuredDB.MES;
  7. using Business.StructuredDB.SaleFcst;
  8. using Business.StructuredDB.WMS;
  9. using Newtonsoft.Json;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Threading.Tasks;
  14. using Volo.Abp.Application.Services;
  15. using Volo.Abp.DependencyInjection;
  16. using Volo.Abp.Domain.Repositories;
  17. using Volo.Abp.MultiTenancy;
  18. using Volo.Abp.Uow;
  19. using IUnitOfWorkManager = Volo.Abp.Uow.IUnitOfWorkManager;
  20. namespace Business.MES
  21. {
  22. //DOP
  23. public class SyncMESAppService : ApplicationService, ISyncMESAppService, ITransientDependency
  24. {
  25. #region 服务
  26. /// <summary>
  27. /// 生产日计划
  28. /// </summary>
  29. private readonly IRepository<mes_producedailyplan, long> _producedailyplan;
  30. /// <summary>
  31. /// 工单表
  32. /// </summary>
  33. private readonly IRepository<mes_morder, long> _morder;
  34. /// <summary>
  35. /// 工单
  36. /// </summary>
  37. private ISqlRepository<WorkOrdMaster> _workOrdMaster;
  38. /// <summary>
  39. /// 生产线明细表
  40. /// </summary>
  41. private ISqlRepository<ProdLineDetail> _prodLineDetail;
  42. /// <summary>
  43. /// 生产线数据
  44. /// </summary>
  45. private ISqlRepository<LineMaster> _lineMaster;
  46. /// <summary>
  47. /// 工作日历
  48. /// </summary>
  49. private ISqlRepository<ShopCalendarWorkCtr> _shopCalendarWorkCtr;
  50. /// <summary>
  51. /// 雪花算法
  52. /// </summary>
  53. SnowFlake snowFlake = new SnowFlake();
  54. /// <summary>
  55. /// 事务
  56. /// </summary>
  57. private readonly IUnitOfWorkManager _unitOfWorkManager;
  58. /// <summary>
  59. /// 生产排产
  60. /// </summary>
  61. private readonly ProductionScheduleAppService _productionScheduleAppService;
  62. /// <summary>
  63. /// 产线休息时间记录表
  64. /// </summary>
  65. private ISqlRepository<QualityLineWorkDetail> _qualityLineWorkDetail;
  66. #endregion
  67. #region 构造函数
  68. /// <summary>
  69. /// 构造函数
  70. /// </summary>
  71. public SyncMESAppService(
  72. IRepository<mes_producedailyplan, long> mes_producedailyplan,
  73. IRepository<mes_morder, long> mes_morder,
  74. ISqlRepository<WorkOrdMaster> workOrdMaster,
  75. ISqlRepository<ProdLineDetail> prodLineDetail,
  76. ISqlRepository<LineMaster> lineMaster,
  77. ISqlRepository<ShopCalendarWorkCtr> shopCalendarWorkCtr,
  78. ISqlRepository<QualityLineWorkDetail> qualityLineWorkDetail,
  79. IUnitOfWorkManager unitOfWorkManager,
  80. ProductionScheduleAppService productionScheduleAppService,
  81. ICurrentTenant currentTenant
  82. )
  83. {
  84. _producedailyplan = mes_producedailyplan;
  85. _morder = mes_morder;
  86. _workOrdMaster = workOrdMaster;
  87. _prodLineDetail = prodLineDetail;
  88. _lineMaster = lineMaster;
  89. _shopCalendarWorkCtr = shopCalendarWorkCtr;
  90. _unitOfWorkManager = unitOfWorkManager;
  91. _qualityLineWorkDetail = qualityLineWorkDetail;
  92. _productionScheduleAppService = productionScheduleAppService;
  93. }
  94. #endregion
  95. /// <summary>
  96. /// 生成日计划
  97. /// </summary>
  98. /// <param name="crm_Weekplans"></param>
  99. public void SavaProducedailyplanData(long factory_id)
  100. {
  101. //var workOrd = _workOrdMaster.Select(x => x.IsActive == true && x.Status == "初始" && x.Domain == factory_id.ToString()).OrderBy(x => x.OrdDate);
  102. //var morder = _morder.GetListAsync(x => x.IsDeleted == true && workOrd.Select(p => p.WorkOrd).Contains(x.morder_no));
  103. //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);
  104. }
  105. #region 注释
  106. /// <summary>
  107. /// 计算工厂产能
  108. /// </summary>
  109. /// <param name="StartDataTime">开始时间</param>
  110. /// <param name="EndDataTime">结束时间</param>
  111. //public void FactoryCapacity(DateTime StartDataTime, DateTime EndDataTime, long factory_id)
  112. //{
  113. // var LineData = _lineMaster.Select(x => x.IsActive == true && x.Domain == factory_id.ToString()).ToList();
  114. // var shopCalendarWorkCtr = _shopCalendarWorkCtr.Select(x => (LineData.Select(p => p.Line).Contains(x.ProdLine) || x.ProdLine == "") && x.IsActive == true && x.Domain == factory_id.ToString()).ToList();
  115. // //获取产线休息记录数据
  116. // var qualityLines = _qualityLineWorkDetail.Select(p => p.Domain == factory_id.ToString() && p.IsActive);
  117. // foreach (var item in LineData)
  118. // {
  119. // //当前日期
  120. // DateTime actStart = StartDataTime;
  121. // var datatime = (EndDataTime - EndDataTime).Days;
  122. // //当前产线的每天休息时间记录
  123. // var mlqtyWorkDtls = qualityLines.Where(p => p.ProdLine == item.Line).OrderBy(p => p.Line).ToList();
  124. // for (int i = 0; i < datatime; i++)
  125. // {
  126. // //查询生产线是否配置工作日历
  127. // var data = shopCalendarWorkCtr.Where(x => x.ProdLine == item.Line).ToList();
  128. // if (data != null)
  129. // {
  130. // //有配置 根据配置时长计算
  131. // }
  132. // else
  133. // {
  134. // //无对应配置 查询出无产线配置日历计算
  135. // var line = shopCalendarWorkCtr.Where(x => x.ProdLine == "").ToList();
  136. // //开始时间是周几
  137. // int weekDay = (int)actStart.DayOfWeek;
  138. // //判断当天是否是工作日
  139. // bool isWorkDay = _productionScheduleAppService.CheckIsWorkDay(actStart);
  140. // if (!isWorkDay)//是工作日
  141. // {
  142. // //输出DTO 工作时长为0
  143. // }
  144. // else
  145. // {
  146. // //当天的工作日历
  147. // var shopCal = line.Where(p => p.WeekDay == weekDay).First();
  148. // //当前日期的工作时间段
  149. // List<LineWorkPointDto> workPoints = DealWorkDayToLevels(actStart, shopCal, mlqtyWorkDtls);
  150. // }
  151. // }
  152. // actStart.AddDays(i);
  153. // }
  154. // }
  155. //}
  156. /// <summary>
  157. /// 处理当前日期的工作时间段
  158. /// </summary>
  159. /// <param name="startTime"></param>
  160. /// <param name="shopCal">当前产线的工作日历-周几</param>
  161. /// <param name="curQtyDtls">每天休息记录</param>
  162. /// <returns></returns>
  163. //public List<LineRestDataTimeDto> DealWorkDayToLevels(DateTime startTime, ShopCalendarWorkCtr shopCal, List<QualityLineWorkDetail> curQtyDtls)
  164. //{
  165. // //年-月-日
  166. // string date = startTime.Date.ToString("yyyy-MM-dd");
  167. // //排产记录结束日期是周几
  168. // int weekDay = (int)startTime.DayOfWeek;
  169. // //计算当天的开工时间点,停工时间点
  170. // string strStart = shopCal.ShiftsStart1.ToString("0.00").Replace(".", ":");
  171. // DateTime dayStartPoint = Convert.ToDateTime(date + " " + strStart);
  172. // DateTime dayEndPoint = dayStartPoint.AddHours(Convert.ToDouble(shopCal.ShiftsHours1));
  173. // //工作时间段
  174. // List<LineRestDataTimeDto> workPoints = new List<LineRestDataTimeDto>();
  175. // LineRestDataTimeDto dto = new LineRestDataTimeDto();
  176. // TimeSpan span = TimeSpan.Zero;
  177. // foreach (var item in curQtyDtls)
  178. // {
  179. // dto.Line = shopCal.ProdLine;
  180. // dto.WeekDay = weekDay;
  181. // DateTime StarDatime = Convert.ToDateTime(date + " " + item.RestTimePoint);
  182. // dto.StartPoint = StarDatime;
  183. // dto.EndPoint = StarDatime.AddMinutes(item.RestTime); ;
  184. // }
  185. // //return workPoints.OrderBy(p => p.Level).ToList();
  186. //}
  187. #endregion
  188. }
  189. }