using System; using System.Linq; using System.Reflection; using DOAN.Model; using DOAN.Model.MES.base_; using DOAN.Model.MES.base_.Dto; using DOAN.Repository; using DOAN.Service.MES.base_.IService; using Infrastructure.Attribute; using Infrastructure.Extensions; using JinianNet.JNTemplate.Dynamic; using SqlSugar; namespace DOAN.Service.MES.base_ { /// /// 工艺路线Service业务层处理 /// [AppService(ServiceType = typeof(IBaseWorkRouteService), ServiceLifetime = LifeTime.Transient)] public class BaseWorkRouteService : BaseService, IBaseWorkRouteService { /// /// 查询工艺路线列表 /// /// /// public PagedInfo GetList(BaseWorkRouteQueryDto parm) { List baseWorks = Context.Queryable() .LeftJoin((r, p) => r.FkWorkProcesses == p.Id) .Where((r, p) => r.FkWorkRoute != null) .Select((r, p) => new BaseWorkProcessesDto3() { fk_id = r.FkWorkRoute }, true) .ToList(); var predicate = Expressionable .Create() .AndIF(!string.IsNullOrEmpty(parm.Name), it => it.Name.Contains(parm.Name)) .AndIF(!string.IsNullOrEmpty(parm.Code), it => it.Code.Contains(parm.Code)) .AndIF(!string.IsNullOrEmpty(parm.ProductionCode), it => it.Code.Contains(parm.ProductionCode)) .AndIF(parm.Status > -1, it => it.Status == parm.Status); var response = Queryable() .Where(predicate.ToExpression()) .ToPage(parm); if (response != null && response.Result.Count > 0) { foreach (var item in response.Result) { item.BaseWorkProcessesList = baseWorks.Where(it => it.fk_id == item.Id).ToList(); } } return response; } /// /// 获取详情 /// /// /// public BaseWorkRoute GetInfo(int Id) { var response = Queryable().Where(x => x.Id == Id).First(); return response; } /// /// 添加工艺路线 /// /// /// public BaseWorkRoute AddBaseWorkRoute(BaseWorkRoute model) { return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改工艺路线 /// /// /// public int UpdateBaseWorkRoute(BaseWorkRoute model) { //var response = Update(w => w.Id == model.Id, it => new BaseWorkRoute() //{ // Name = model.Name, // Status = model.Status, // Remark = model.Remark, // CreatedBy = model.CreatedBy, // CreatedTime = model.CreatedTime, // UpdatedBy = model.UpdatedBy, // UpdatedTime = model.UpdatedTime, // Code = model.Code, // LogicFlowData = model.LogicFlowData, //}); //return response; return Update(model, true); } /// /// 工艺路线解析后绑定工序 /// /// /// public int ParseRouteBindProccess(BaseParseNodeDto baseParseNodeDto) { int result = 0; //TODO 1 解析string->object BaseParseNode baseParse = JsonConvert.DeserializeObject(baseParseNodeDto.LogicFlowData); //TODO 2 获取绑定的节点 //int[] workProcess = null; //if (baseParse != null && (baseParse.nodes.Count() > 0)) //{ // // 绑定的工序id // workProcess = new int[baseParse.nodes.Count()]; // int index = 0; // foreach (var node in baseParse.nodes) // { // workProcess[index] = node.properties.processesId; // index++; // } //} //TODO 3 排序 // 找到首节点 首节点没有终点target List need_insert_node = new List(); string first_node_id = "";// 首节点id foreach (var node in baseParse.nodes) { int count = 0; foreach (var edge in baseParse.edges) { if (node.id == first_node_id) { count++; } } if (count == 0) { first_node_id = node.id; break; } } BaseRelWorkRouteProcesses firstnode = new BaseRelWorkRouteProcesses(); firstnode.FkWorkProcesses = baseParse.nodes.Where(it => it.id == first_node_id).Select(it => it.properties.processesId).FirstOrDefault(); firstnode.Sort = 0; firstnode.FkWorkRoute = baseParseNodeDto.FkRouteCode; firstnode.CreatedTime = DateTime.Now; need_insert_node.Add(firstnode); //---------------------------------------- string levels = first_node_id; int index3 = 0; while (true) { index3++; string next_id = baseParse.edges.Where(it => it.sourceNodeId == levels).Select(it => it.targetNodeId).FirstOrDefault(); if (!string.IsNullOrEmpty(next_id)) { levels = next_id; BaseRelWorkRouteProcesses nextnode = new BaseRelWorkRouteProcesses(); nextnode.FkWorkProcesses = baseParse.nodes.Where(it => it.id == levels).Select(it => it.properties.processesId).FirstOrDefault(); ; nextnode.Sort = index3; nextnode.FkWorkRoute = baseParseNodeDto.FkRouteCode; nextnode.CreatedTime = DateTime.Now; need_insert_node.Add(nextnode); } else { break; } } //TODO 4 解绑 然后更新 UseTran2(() => { Context.Deleteable() .Where(it => it.FkWorkRoute == baseParseNodeDto.FkRouteCode) .ExecuteCommand(); result = Context.Insertable(need_insert_node).ExecuteCommand(); }); return result; } } }