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.Material; 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(), // 绑定的物料参数 ProcessOperationFlowMaterialParamters= 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_type_code) { var response = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(flow_type_code), m => m.FlowTypeCode.Contains(flow_type_code)) .ToList(); return response; } public int BindFlow(ProcessOperationBindFlowDto parm) { return 0; } public int OperationAddFlow(ProcessOperationFlowDto parm) { var model = parm.Adapt(); model.CreatedTime = DateTime.Now; var response = Context.Insertable(model).ExecuteCommand(); return response; } public int OperationDeleteFlow(int operation_flow_id) { var response = Context.Deleteable(m => m.id == operation_flow_id).ExecuteCommand(); return response; } public List GetOperationFlowList(string routing_code, string operation_code) { return Context.Queryable().Where(it => it.FkRoutingCode == routing_code && it.FkOperationCode == operation_code).ToList(); } public int OperationAddDatacollection(ProcessOperationCollectParameterDto parm) { var model = parm.Adapt(); model.CreatedTime = DateTime.Now; var response = Context.Insertable(model).ExecuteCommand(); return response; } public int OperationDeleteDatacollection(int operation_datacollection_id) { var response = Context.Deleteable(m => m.Id == operation_datacollection_id).ExecuteCommand(); return response; } public List SearchMaterialInfo(string material_info) { var response = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(material_info), m => m.Name.Contains(material_info) || m.Code.Contains(material_info)) .ToList(); return response; } public List SearchMaterialErrorproofDict(string error_proof_rule_code) { var response = Context.Queryable() .WhereIF(!string.IsNullOrEmpty(error_proof_rule_code), m => m.ErrorProofRuleCode.Contains(error_proof_rule_code)) .ToList(); return response; } public int OperationAddMaterialParamter(ProcessOperationFlowMaterialParamterDto parm) { var model = parm.Adapt(); model.CreatedTime = DateTime.Now; var response = Context.Insertable(model).ExecuteCommand(); return response; } public int OperationDeleteMaterialParamter(int operation_material_paramter_id) { var response = Context.Deleteable(m => m.id == operation_material_paramter_id).ExecuteCommand(); return response; } } }