using RIZO.Model.MES.recipe; using RIZO.Model.MES.recipe.Dto; using Infrastructure.Attribute; using MathNet.Numerics; using MDM.Model; using MDM.Model.Plant; using MDM.Model.Process; using MDM.Model.Process.Dto; using MDM.Models.Process; using MDM.Repository; using MDM.Service; using MDM.Services.IProcessService; namespace MDM.Services.Process { /// /// Service业务层处理 /// [AppService(ServiceType = typeof(IProcessOperationWorkstationMappingService), ServiceLifetime = LifeTime.Transient)] public class ProcessOperationWorkstationMappingService : BaseService, IProcessOperationWorkstationMappingService { /// /// 查询列表 /// /// /// public PagedInfo GetList(ProcessOperationWorkstationMappingQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.FkRoutingCode), m => m.FkRoutingCode.Contains(parm.FkRoutingCode)) .AndIF(!string.IsNullOrEmpty(parm.FkOperationCode), m => m.FkOperationCode.Contains(parm.FkOperationCode)) .AndIF(!string.IsNullOrEmpty(parm.FkWorkstationCode), m => m.FkWorkstationCode.Contains(parm.FkWorkstationCode)) .AndIF(!string.IsNullOrEmpty(parm.FkProductlinebodyCode), m => m.FkProductlinebodyCode.Contains(parm.FkProductlinebodyCode)) ; var response = Queryable() .Where(predicate.ToExpression()) .ToPage(parm); return response; } /// /// 获取详情 /// /// /// public ProcessOperationWorkstationMappingInfoDto GetInfo(int Id) { var response = Queryable() .Where(x => x.Id == Id) .Select(it => new ProcessOperationWorkstationMappingInfoDto() { Id = it.Id, FkRoutingCode = it.FkRoutingCode, FkFactoryCode=it.FkFactoryCode, FkWorkshopcode=it.FkWorkshopcode, FkProductlinebodyCode = it.FkProductlinebodyCode, FkOperationCode = it.FkOperationCode, FkWorkstationCode = it.FkWorkstationCode, IsActive = it.IsActive, Priority = it.Priority, StandardTime = it.StandardTime, SetupTime = it.SetupTime, Remark = it.Remark, //绑定的工位PLC地址 PlcAddress = SqlFunc.Subqueryable().Where(s => s.FkProductlinebody == it.FkProductlinebodyCode && s.WorkstationCode == it.FkWorkstationCode).Select(s=>s.PlcIP), //绑定的流程信息 OperationFlows = SqlFunc.Subqueryable().Where(s => s.FkRoutingCode == it.FkRoutingCode && s.FkOperationCode == it.FkOperationCode).ToList(), ////绑定的配方参数信息 //OperationRecipeParameters = SqlFunc.Subqueryable() //.LeftJoin((refpr, ver) => refpr.RecipeCode == ver.RecipeCode) //.LeftJoin((refpr, ver, param) => ver.RecipeCode == param.RecipeCode && ver.Version == param.Version) //.Where((refpr, ver, param) => refpr.FkRoutingCode == it.FkRoutingCode && refpr.FkOperationCode == it.FkOperationCode) //.ToList((refpr, ver, param) => new PfRecipeParametersDto //{ // Id = param.Id, // RecipeCode = param.RecipeCode, // Version = param.Version, // ParamName = param.ParamName, // Unit = param.Unit, // UpperLimit = param.UpperLimit, // LowerLimit = param.LowerLimit, // StandardValue = param.StandardValue, // Remark = param.Remark //}), ////绑定的工序工位采集参数 ProcessOperationWorkstationCollectParameters = SqlFunc.Subqueryable().Where(s => s.FkRoutingCode == it.FkRoutingCode && s.FkOperationCode == it.FkOperationCode && s.FkProductlinebodyCode == it.FkProductlinebodyCode && s.FkWorkstationCode == it.FkWorkstationCode).ToList(), // 绑定的物料参数 ProcessOperationFlowMaterialParamters = SqlFunc.Subqueryable().Where(s => s.FkRoutingCode == it.FkRoutingCode && s.FkOperationCode == it.FkOperationCode).ToList(), }) .First(); return response; } /// /// 添加 /// /// /// public ProcessOperationWorkstationMapping AddProcessOperationWorkstationMapping(ProcessOperationWorkstationMapping model) { return Context.Insertable(model).ExecuteReturnEntity(); } public List SelectRouting(string routing) { var response = Context.Queryable().WhereIF(!string.IsNullOrEmpty(routing), it => it.RoutingCode.Contains(routing)).ToList(); return response; } public List SelectOperation(string routingcode) { var response = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(routingcode), it => it.FkRoutingCode.Contains(routingcode)) .ToList(); return response; } public List GetFactorySite(string site_code) { return Context.Queryable().WhereIF(!string.IsNullOrEmpty(site_code), it => it.SiteCode.Contains(site_code)).ToList(); } public List GetWorkShop(string site_code, string workshop_code) { return Context.Queryable() .WhereIF(!string.IsNullOrEmpty(site_code), it => it.FkSiteCode.Contains(site_code)) .WhereIF(!string.IsNullOrEmpty(workshop_code), it => it.WorkshopCode.Contains(workshop_code)) .ToList(); } public List GetPlantProductlinebodies(string site_code, string workshop_code, string linecode) { return Context.Queryable() .WhereIF(!string.IsNullOrEmpty(site_code), it => it.FkFactorySiteCode.Contains(site_code)) .WhereIF(!string.IsNullOrEmpty(workshop_code), it => it.FkWorkshopCode.Contains(workshop_code)) .WhereIF(!string.IsNullOrEmpty(linecode), it => it.LineCode.Contains(linecode)) .ToList(); } public List GetWorkstationList(string site_code, string workshop_code, string linecode) { return Context.Queryable() .WhereIF(!string.IsNullOrEmpty(site_code), it => it.FkFactorySiteCode.Contains(site_code)) .WhereIF(!string.IsNullOrEmpty(workshop_code), it => it.FkWorkshopCode.Contains(workshop_code)) .WhereIF(!string.IsNullOrEmpty(linecode), it => it.FkProductlinebody.Contains(linecode)) .ToList(); } /// /// 修改 /// /// /// public int UpdateProcessOperationWorkstationMapping(ProcessOperationWorkstationMapping model) { //var response = Update(w => w.Id == model.Id, it => new ProcessOperationWorkstationMapping() //{ // FkOperationCode = model.FkOperationCode, // FkWorkstationCode = model.FkWorkstationCode, // IsActive = model.IsActive, // Priority = model.Priority, // StandardTime = model.StandardTime, // SetupTime = model.SetupTime, // CreatedTime = model.CreatedTime, // CreatedBy = model.CreatedBy, // Remark = model.Remark, // UpdatedTime = model.UpdatedTime, // UpdatedBy = model.UpdatedBy, //}); //return response; return Update(model, true); } /// /// 采集参数 实体化 (同步) /// /// /// public int SyncCollectParameter(int OperationWorkstationMappingId) { int result = 0; //获取工序工位映射信息 ProcessOperationWorkstationMapping selectMapping = Context.Queryable().Where(it => it.Id == OperationWorkstationMappingId).First(); if(selectMapping!=null&&!string.IsNullOrEmpty(selectMapping.FkRoutingCode) && !string.IsNullOrEmpty(selectMapping.FkOperationCode)) { // 获取工序的采集参数 List ProcessOperationCollectParameterList = Context.Queryable() .Where(it => it.FkRoutingCode == selectMapping.FkRoutingCode && it.FkOperationCode == selectMapping.FkOperationCode).ToList(); //同步 if (ProcessOperationCollectParameterList != null && ProcessOperationCollectParameterList.Count > 0) { List insertData = new List(); foreach (var parameter in ProcessOperationCollectParameterList) { //判断是否存在 int count = Context.Queryable() .Where(it => it.FkRoutingCode == parameter.FkRoutingCode && it.FkOperationCode == parameter.FkOperationCode && it.ParameterCode == parameter.ParameterCode) .Count(); if (count == 0) { //不存在则添加 ProcessOperationWorkstationFlowCollectParameter newEntity = new ProcessOperationWorkstationFlowCollectParameter() { FkRoutingCode = parameter.FkRoutingCode, FkOperationCode = parameter.FkOperationCode, FkProductlinebodyCode = selectMapping.FkProductlinebodyCode, FkWorkstationCode = selectMapping.FkWorkstationCode, ParameterCode = parameter.ParameterCode, ParameterName = parameter.ParameterName, FkFlowCode = parameter.FkFlowCode, Description = parameter.Description, DataType = parameter.DataType, Unit = parameter.Unit, StandardValue = parameter.StandardValue, MinValue = parameter.MinValue, MaxValue = parameter.MaxValue, IsControlled = parameter.IsControlled, IsMonitored = parameter.IsMonitored, ControlType = parameter.ControlType, DefaultValue = parameter.DefaultValue, IsRequired = parameter.IsRequired, Sequence = parameter.Sequence, CreatedTime = DateTime.Now, CreatedBy = "SystemSync" }; insertData.Add(newEntity); } } if (insertData.Count > 0) { result = Context.Insertable(insertData).ExecuteCommand(); } } } return result; } public int UpdatePlcPoint( int ProcessOperationWorkstationFlowCollectParameterId, string plc_point) { return Context.Updateable() .SetColumns(it => new ProcessOperationWorkstationFlowCollectParameter() { PlcPoint = plc_point }) .Where(it => it.Id == ProcessOperationWorkstationFlowCollectParameterId) .ExecuteCommand(); } public PagedInfo QueryProcessOperationRecipe(ProcessOperationQuery2Dto query) { return Context.Queryable() .LeftJoin((refpr, ver) => refpr.RecipeCode == ver.RecipeCode) .LeftJoin((refpr, ver, param) => ver.RecipeCode == param.RecipeCode && ver.Version == param.Version) .Where((refpr, ver, param) => refpr.FkRoutingCode == query.FkRoutingCode && refpr.FkOperationCode == query.OperationCode) .Select((refpr, ver, param) => new PfRecipeParametersDto { Id = param.Id, RecipeCode = param.RecipeCode, Version = param.Version, ParamName = param.ParamName, Unit = param.Unit, UpperLimit = param.UpperLimit, LowerLimit = param.LowerLimit, StandardValue = param.StandardValue, Remark = param.Remark }).ToPage(query); } } }