using System; using System.Collections.Generic; using System.Linq; using System.Text; using QMAPP.FJC.TRACING.DAInterface; using QMAPP.FJC.Entity.QT; using QMAPP.MD.DAL; namespace QMAPP.FJC.TRACING.DataValidators { /// /// 采集点输入顺序校验 /// public class DASequenceValidator:IDataValidator { public ValidateResult Validate1(DAObject data, DAIValidation validOption) { if (data.DAI.DA_SEQ <= 1) //第一个采集点无需验证 { return new ValidateResult(true, ""); } else { //查询前置采集点采集值为空的项 var preDa = (from dai in data.WorkLocState.DataCache where dai.DA_SEQ < data.DAI.DA_SEQ //采集顺序小于当前采集点 && string.IsNullOrWhiteSpace(dai.DA_VALUE) //采集值为空 && !string.Equals(dai.DA_MODE,"2") //采集模式不是可忽略的 orderby dai.DA_SEQ descending select dai).FirstOrDefault(); if (preDa == null) { return new ValidateResult(true, ""); } else { return new ValidateResult( false, string.Format("在输入“{0}”前应先输入“{1}”!",data.DAI.DA_NAME,preDa.DA_NAME)); } } } public ValidateResult Validate(DAObject data, DAIValidation validOption) { if (data.DAI.DA_SEQ <= 1) //第一个采集点无需验证 { return new ValidateResult(true, ""); } else { //查询前置采集点采集值为空的项 var preDa = (from dai in data.WorkLocState.DataCache where dai.DA_SEQ < data.DAI.DA_SEQ //采集顺序小于当前采集点 && string.IsNullOrWhiteSpace(dai.DA_VALUE) //采集值为空 //&& !string.Equals(dai.DA_MODE, "2") //采集模式不是可忽略的 //&& !string.Equals(dai.DA_MODE, "5") //采集模式不是可忽略的 orderby dai.DA_SEQ descending select dai).ToList(); if (preDa.Count < 1) { return new ValidateResult(true, ""); } else { if (preDa.Exists(p => p.DA_MODE != "5"&&p.DA_MODE != "2")) { var req_da = preDa.FirstOrDefault(p => p.DA_MODE != "5" && p.DA_MODE != "2"); return new ValidateResult( false, string.Format("在输入“{0}”前应先输入“{1}”!", data.DAI.DA_NAME, req_da.DA_NAME)); } //提取采集数据中的物料号信息 var materials = (from da in data.WorkLocState.DataCache where !string.IsNullOrWhiteSpace(da.MATERIAL_CODE) && !string.Equals(da.DA_MODE, "2") //过滤掉可省略的采集点 //&& !string.Equals(da.DA_MODE, "3") //过滤掉自适应采集点 && !string.Equals(da.DA_MODE, "5") //过滤掉自适应采集点 && !string.Equals(da.DA_CODE, data.DAI.DA_CODE) //过滤掉当前输入的采集点 select da.MATERIAL_CODE).ToList(); PbomDAL dal = new PbomDAL(); materials.Add(data.MaterialCode + ""); MD.Entity.View.BomLocation bomloc = null; if (string.IsNullOrWhiteSpace(data.WorkLocState.CurrentState.MATERIAL_CODE)) { var bomlocates = dal.LocateBom(materials.Distinct().ToArray()); //匹配物料BOM if (bomlocates.Count > 0) { if (data.OrderPlan != null) { bomloc = bomlocates.FirstOrDefault(p => p.BOMCode == data.OrderPlan.PBOM_CODE); } else if (bomlocates.GroupBy(p => p.UP_MATERIAL_CODE).ToList().Count == 1) { bomloc = bomlocates[0]; } } } else { var bomlocates = dal.LocateBomByUpMaterial(data.WorkLocState.CurrentState.MATERIAL_CODE); if (bomlocates.Count > 0) { bomloc = bomlocates[0]; } } if (bomloc != null) { var bomitems = dal.GetBomItemsByLocateWithType(bomloc); //查找组成物料列表 foreach (var da in preDa.Where(p => p.DA_MODE == "5" || p.DA_MODE == "2")) { if (bomitems.Exists(p => p.MATERIAL_TYPE_CODE == da.MATERIAL_TYPE || p.UP_MATERIAL_TYPE_CODE == da.MATERIAL_TYPE)) { return new ValidateResult( false, string.Format("请先输入“{1}”,当前生产产品“{1}”为必须项!", data.DAI.DA_NAME, da.DA_NAME)); } } } return new ValidateResult(true, ""); } } } } }