using Aucma.Scada.Model.domain; using HighWayIot.Config; using HighWayIot.Log4net; using HighWayIot.Repository.service; using System; using System.Collections.Generic; using System.Linq; namespace Aucma.Scada.Business { /// /// 组装计划业务逻辑 /// public sealed class AssemblyPlanBusiness { #region 单例实现 private static readonly Lazy lazy = new Lazy(() => new AssemblyPlanBusiness()); public static AssemblyPlanBusiness Instance { get { return lazy.Value; } } #endregion #region 对象引用 private LogHelper logHelper = LogHelper.Instance; private AppConfig appConfig = AppConfig.Instance; private RegisterServices registerServices = RegisterServices.Instance; #endregion #region 接口引用 /// /// 生产计划 /// private IProductPlanInfoService _productPlanInfoService; /// /// 执行计划 /// private IExecutePlanInfoService _executePlanInfoService; #endregion #region 委托事件 /// /// 刷新执行计划 /// /// public delegate void RefreshExecutePlanInfo(List executePlanInfos); public event RefreshExecutePlanInfo RefreshExecutePlanInfoEvent; /// /// 下传执行计划 /// /// public delegate void NextPassExecutePlanInfo(ExecutePlanInfo planInfo); public event NextPassExecutePlanInfo NextPassExecutePlanInfoEvent; #endregion private AssemblyPlanBusiness() { _productPlanInfoService = registerServices.GetService(); _executePlanInfoService = registerServices.GetService(); } /// /// 根据产线工位编号获取生产计划 /// /// /// public List GetProductPlanInfosByProductLineCode() { List productPlanInfos = null; try { productPlanInfos = _productPlanInfoService.GetProductPlanInfosByProductLineCode(appConfig.stationCode); } catch (Exception ex) { logHelper.Error("根据产线工位编号获取生产计划异常", ex); } return productPlanInfos; } /// /// 根据产线工位编号获取执行计划 /// /// public List GetEexecutePlanInfosByProductLineCode() { List planInfos = null; try { planInfos = _executePlanInfoService.GetExecutePlanInfosByProductLineCode(appConfig.stationCode).OrderBy(x => x.executeOrder).ToList(); if (planInfos != null) { //for(int i = 0; i < planInfos.Count; i++) //{ // planInfos[i].executeOrder = i + 1; //} //_executePlanInfoService.UpdateRangeExecutePlanInfo(planInfos); RefreshExecutePlanInfoEvent?.Invoke(planInfos); } } catch (Exception ex) { logHelper.Error("根据产线工位编号获取执行计划异常", ex); } return planInfos; } /// /// 根据生产计划下达执行计划 /// /// /// public bool PlanTransmitByProductPlan(string productPlanCode, int transmitAmount) { bool result = false; try { var productPlanInfo = _productPlanInfoService.GetProductPlanByPlanCode(productPlanCode); if (productPlanInfo != null) { ExecutePlanInfo executePlanInfo = new ExecutePlanInfo(); executePlanInfo.executePlanCode = System.Guid.NewGuid().ToString("N"); executePlanInfo.productPlanCode = productPlanInfo.planCode; executePlanInfo.productLineCode = productPlanInfo.productLineCode; executePlanInfo.orderCode = productPlanInfo.orderCode; executePlanInfo.materialCode = productPlanInfo.materialCode; executePlanInfo.materialName = productPlanInfo.materialName; executePlanInfo.executeOrder = _executePlanInfoService.GetExecuteOrderByProductLineCode(appConfig.stationCode); executePlanInfo.executeStatus = 1; executePlanInfo.planAmount = transmitAmount; executePlanInfo.createdTime = DateTime.Now; result = _executePlanInfoService.InsertExecutePlanInfo(executePlanInfo); if (result) { GetEexecutePlanInfosByProductLineCode(); } } } catch (Exception ex) { logHelper.Error("根据生产计划下达执行计划异常", ex); } return result; } /// /// 执行计划上移 /// /// public void ExecutePlanInfo_MoveUp(List executePlanInfos, string executePlanCode) { List executePlans = new List(); if (executePlanInfos != null) { ExecutePlanInfo planInfo = executePlanInfos.Where(x => x.executePlanCode == executePlanCode).First(); int executeOrder = planInfo.executeOrder; int planIndex = executePlanInfos.IndexOf(planInfo); if (planIndex != -1 && planIndex != 0) { var lastPlanInfo = executePlanInfos[planIndex - 1]; planInfo.executeOrder = lastPlanInfo.executeOrder; lastPlanInfo.executeOrder = executeOrder; executePlans.Add(planInfo); executePlans.Add(lastPlanInfo); var result = _executePlanInfoService.UpdateRangeExecutePlanInfo(executePlans); if (result) { GetEexecutePlanInfosByProductLineCode(); } } } } /// /// 执行计划下移 /// /// public void ExecutePlanInfo_MoveDown(List executePlanInfos, string executePlanCode) { List executePlans = new List(); if (executePlanInfos != null) { ExecutePlanInfo planInfo = executePlanInfos.Where(x => x.executePlanCode == executePlanCode).First(); int executeOrder = planInfo.executeOrder; int planIndex = executePlanInfos.IndexOf(planInfo); if (planIndex != executePlanInfos.Count - 1) { var lastPlanInfo = executePlanInfos[planIndex + 1]; planInfo.executeOrder = lastPlanInfo.executeOrder; lastPlanInfo.executeOrder = executeOrder; executePlans.Add(planInfo); executePlans.Add(lastPlanInfo); var result = _executePlanInfoService.UpdateRangeExecutePlanInfo(executePlans); if (result) { GetEexecutePlanInfosByProductLineCode(); } } } } /// /// 根据执行计划编号删除执行计划 /// /// /// public bool ExecutePlanInfo_Delete(string planCode) { bool result = _executePlanInfoService.DeleteExecutePlanInfoByPlanCode(planCode); if (result) { GetEexecutePlanInfosByProductLineCode(); } return result; } /// /// 下传计划 /// /// public ExecutePlanInfo ExecutePlanInfo_NextPass(string planCode, string nowPlanCode) { ExecutePlanInfo planInfo = null; try { List planInfos = new List(); if (!string.IsNullOrEmpty(nowPlanCode)) { ExecutePlanInfo nowPlanInfo = _executePlanInfoService.GetExecutePlanInfoByPlanCode(nowPlanCode); if (nowPlanInfo != null) { nowPlanInfo.executeStatus = 1; planInfos.Add(nowPlanInfo); } } //获取执行计划 planInfo = _executePlanInfoService.GetExecutePlanInfoByPlanCode(planCode); if (planInfo != null) { //传给出库 NextPassExecutePlanInfoEvent?.Invoke(planInfo); planInfo.executeStatus = 2; planInfo.beginTime = DateTime.Now; planInfos.Add(planInfo); } else { logHelper.Info($"执行计划下传失败,执行计划编号:{planCode}未获取到执行计划"); return planInfo; } if (planInfos.Count > 0) { var result = _executePlanInfoService.UpdateRangeExecutePlanInfo(planInfos); if (result) { GetEexecutePlanInfosByProductLineCode(); } } } catch (Exception ex) { logHelper.Error("计划下传异常", ex); } return planInfo; } } }