using System; using System.Collections.Generic; using System.Linq; using System.Text; using QMAPP.FJC.TRACING.DAInterface; namespace QMAPP.FJC.TRACING.DataValidators { /// /// 生产计划验证 /// public class PlanValidator : IDataValidator { public ValidateResult Validate(DAObject data, Entity.QT.DAIValidation validOption) { //如果采集点不包含物料信息则不进行验证 if (string.IsNullOrWhiteSpace(data.MaterialCode)) { return new ValidateResult(true, ""); } DAL.ProductionPlan.WorkOrderDAL workorderdal = new DAL.ProductionPlan.WorkOrderDAL(); var workorderlist = new List(); //获取当前工位正在执行的派工单 var workorder= workorderdal.GetWorkingOrderInLoc(data.WorkLocState.WORKLOC_CODE,data.MouldCode); //----------------------------------------------------------------------------------------------- if (data.WorkLocState.WORKCELL_CODE == "ASSEMBLE_BC316") { //20210120 DQzhang 获取当前工位第一条派工单 workorder = workorderdal.GetFirstOrderInLoc(data.WorkLocState.WORKCELL_CODE, data.MouldCode); } //----------------------------------------------------------------------------------------------- if (workorder == null) //不存在正在执行的派工单 { //获取当前工序优先级最高的工单 workorderlist = workorderdal.GetMatchOrders(data.WorkLocState.WORKCELL_CODE);// data.WorkLocState.CurrentState.ORDERPLAN_PID); } else { workorderlist.Add(workorder); } if (workorderlist.Count == 0) { return new ValidateResult(false, "当前没有可执行的生产计划,请先下达生产计划!"); } QMAPP.MD.DAL.PbomDAL bomdal = new QMAPP.MD.DAL.PbomDAL(); if (string.Equals(workorderlist[0].ORDER_TYPE, "aa0") || string.Equals(workorderlist[0].ORDER_TYPE, "aa2")) //如果为FIS工单 { if (data.OrderPlan != null) //如果条码绑定了生产计划 { if (data.OrderPlan.ORDER_TYPE == "1") { return new ValidateResult(false, string.Format("请优先完成FIS工单!", workorderlist[0].SEQ)); } var inputSEQ = 0; var correctSEQ = 0; inputSEQ = int.Parse(data.OrderPlan.SEQ.Split('-', '_')[0]); correctSEQ = int.Parse(workorderlist[0].SEQ.Split('-', '_')[0]); if (inputSEQ > correctSEQ) { return new ValidateResult(false, string.Format("请按照FIS顺序生产!顺序号为“{0}”的工单尚未完成生产。", workorderlist[0].SEQ)); } workorderlist = workorderlist.Where(p => p.ORDERPLANID == data.OrderPlan.PID).ToList(); } var bomlist = bomdal.GetPbomByMaterialCode(data.MaterialCode);//或取与此当前输入物料相关的BOM if (!bomlist.Exists(p => workorderlist.Exists(o => p.PBOM_CODE == o.PBOM_CODE))) //当前使用的物料与工单BOM不匹配 { return new ValidateResult(false, "使用的物料不符合当前下达的生产计划要求!"); } } else //如果为建储工单 { if (workorder == null) { //使用物料号和工序编码过滤工单 var order = workorderdal.GetFirstMatchOrder(data.WorkLocState.WORKCELL_CODE, data.MaterialCode, ""); if (order == null)//不存在则标示当前使用的物料不符合工单要求 { return new ValidateResult(false, "使用的物料不符合当前下达的生产计划要求!"); } } else { if (data.OrderPlan != null) //如果条码绑定了生产计划 { workorderlist = workorderlist.Where(p => p.PID == data.OrderPlan.PID).ToList(); } var bomlist = bomdal.GetPbomByMaterialCode(data.MaterialCode);//或取与此当前输入物料相关的BOM if (!bomlist.Exists(p => workorderlist.Exists(o => p.PBOM_CODE == o.PBOM_CODE))) //当前使用的物料与工单BOM不匹配 { return new ValidateResult(false, "使用的物料不符合当前下达的生产计划要求!"); } } } return new ValidateResult(true, ""); } } }