using Aliyun.OSS; using DOAN.Model.MES.recipe; using DOAN.Model.MES.recipe.Dto; using Infrastructure.Attribute; using Mapster; using MDM.Controllers.Process; using MDM.Model; using MDM.Model.Process; using MDM.Model.Process.Dto; using MDM.Models.Process; using MDM.Models.Process.Dto; using MDM.Repository; using MDM.Service; using MDM.Services.IProcessService; namespace MDM.Services.Process { /// /// 工序Service业务层处理 /// [AppService(ServiceType = typeof(IProcessOperationService), ServiceLifetime = LifeTime.Transient)] public class ProcessOperationService : BaseService, IProcessOperationService { /// /// 查询工序列表 /// /// /// public PagedInfo GetList(ProcessOperationQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.FkRoutingCode), m => m.FkRoutingCode.Contains(parm.FkRoutingCode)) .AndIF(!string.IsNullOrEmpty(parm.OperationCode), m => m.OperationCode.Contains(parm.OperationCode)) .AndIF(!string.IsNullOrEmpty(parm.OperationName), m => m.OperationName.Contains(parm.OperationName)) .AndIF(!string.IsNullOrEmpty(parm.ParallelGroupCode), m => m.ParallelGroupCode.Contains(parm.ParallelGroupCode)) ; var response = Queryable() .Select(it => new ProcessOperation() { OperationId = it.OperationId, FkRoutingCode = it.FkRoutingCode, OperationCode = it.OperationCode, OperationName = it.OperationName, OperationSeq = it.OperationSeq, OperationType = it.OperationType, Description = it.Description, StandardTime = it.StandardTime, ControlStrategy = SqlFunc.Subqueryable().Where(s => s.StrategyCode == it.ControlStrategy).Select(s => s.StrategyName), IsSkippable = it.IsSkippable, IsReworkable = it.IsReworkable, IsParallel = it.IsParallel, ParallelGroupCode = it.ParallelGroupCode, DefaultNextOperationCode = it.DefaultNextOperationCode, Status = it.Status, CreatedBy = it.CreatedBy, CreatedTime = it.CreatedTime, UpdatedBy = it.UpdatedBy, UpdatedTime = it.UpdatedTime }, true) .Where(predicate.ToExpression()) .ToPage(parm); return response; } /// /// 获取详情,同时显示工序绑定的流程信息,配方信息 /// /// /// public ProcessOperationInfoDto GetInfo(int OperationId) { var response = Queryable() .Where(x => x.OperationId == OperationId) .Select(it => new ProcessOperationInfoDto() { OperationId = it.OperationId, FkRoutingCode = it.FkRoutingCode, OperationCode = it.OperationCode, OperationName = it.OperationName, OperationSeq = it.OperationSeq, OperationType = it.OperationType, Description = it.Description, StandardTime = it.StandardTime, ControlStrategy = it.ControlStrategy, IsSkippable = it.IsSkippable, IsReworkable = it.IsReworkable, IsParallel = it.IsParallel, ParallelGroupCode = it.ParallelGroupCode, DefaultNextOperationCode = it.DefaultNextOperationCode, Status = it.Status, CreatedBy = it.CreatedBy, CreatedTime = it.CreatedTime, UpdatedBy = it.UpdatedBy, UpdatedTime = it.UpdatedTime, //绑定的流程信息 OperationFlows = SqlFunc.Subqueryable().Where(s => s.FkRoutingCode == it.FkRoutingCode && s.FkOperationCode == it.OperationCode).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.OperationCode) .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 }), //绑定的采集参数 ProcessOperationCollectParameters= SqlFunc.Subqueryable().Where(s => s.FkRoutingCode == it.FkRoutingCode && s.FkOperationCode == it.OperationCode).ToList(), }) .First(); return response; } /// /// 添加工序 /// /// /// public ProcessOperation AddProcessOperation(ProcessOperation model) { return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改工序 /// /// /// public int UpdateProcessOperation(ProcessOperation model) { //var response = Update(w => w.OperationId == model.OperationId, it => new ProcessOperation() //{ // FkRoutingCode = model.FkRoutingCode, // OperationName = model.OperationName, // OperationSeq = model.OperationSeq, // OperationType = model.OperationType, // Description = model.Description, // StandardTime = model.StandardTime, // ControlStrategy = model.ControlStrategy, // IsSkippable = model.IsSkippable, // IsReworkable = model.IsReworkable, // IsParallel = model.IsParallel, // ParallelGroupCode = model.ParallelGroupCode, // DefaultNextOperationCode = model.DefaultNextOperationCode, // Status = model.Status, // CreatedBy = model.CreatedBy, // CreatedTime = model.CreatedTime, // UpdatedBy = model.UpdatedBy, // UpdatedTime = model.UpdatedTime, //}); //return response; return Update(model, true); } public List SearchControlstrategyDict(ProcessControlStrategyDictQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.StrategyName), m => m.StrategyName.Contains(parm.StrategyName)) .AndIF(!string.IsNullOrEmpty(parm.StrategyCode), m => m.StrategyCode.Contains(parm.StrategyCode)) ; var response = Context.Queryable() .Where(predicate.ToExpression()) .ToList() .Adapt, List>(); return response; } public List QueryProcessOprerationTransitionDict(ProcessOprerationTransitionDictQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.TranstionName), m => m.TranstionName.Contains(parm.TranstionName)) .AndIF(!string.IsNullOrEmpty(parm.TransitionCode), m => m.TransitionCode.Contains(parm.TransitionCode)) ; var response = Context.Queryable() .Where(predicate.ToExpression()) .ToList(); return response; } public List GetFlow(string flow_code) { var response = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(flow_code), m => m.FlowCode.Contains(flow_code)) .ToList(); return response; } public int BindFlow(ProcessOperationBindFlowDto parm) { int result = 0; //先删除已有的绑定关系,然后再新增 if (parm != null && parm.FlowCodeArray.Length > 0) { List models = new List(); List ProcessFlowList = Context.Queryable().Where(it => parm.FlowCodeArray.Any(s => it.FlowCode.Contains(s))).ToList(); foreach (var flow_code in parm.FlowCodeArray) { ProcessOperationFlow model = new ProcessOperationFlow() { FkRoutingCode = parm.FkRoutingCode, FkOperationCode = parm.FkOperationCode, FlowCode = flow_code, FlowName = ProcessFlowList.Where(it => it.FlowCode == flow_code).Select(it => it.FlowName).FirstOrDefault(), CreatedTime = DateTime.Now }; models.Add(model); } UseTran2(() => { Context.Insertable(models).ExecuteCommand(); result = Context.Deleteable(m => m.FkRoutingCode == parm.FkRoutingCode && m.FkOperationCode == parm.FkOperationCode).ExecuteCommand(); }); } return result; } } }