using Hh.Mes.Common.log; using Hh.Mes.Common.Request; using Hh.Mes.POJO.Entity; using Hh.Mes.POJO.Response; using Hh.Mes.POJO.WMSEntity; using Hh.Mes.Service.Repository; using SqlSugar; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Text; using System.Linq; namespace Hh.Mes.Service.WmsService { public class WmsSnPartService : RepositorySqlSugar<Sn> { public Response<List<SnPartDetailHistory>> GetSnPartDetailHistory(string snCode) { var result = new Response<List<SnPartDetailHistory>>(); try { result.Status = true; result.Result = DimsContextWms.Queryable<SnPartDetailHistory>().Where(x => x.snCode == snCode).OrderBy(x => x.created).ToList(); } catch (Exception ex) { result.Code = 500; result.Status = false; result.Message = ex.Message; } return result; } public dynamic GetTreeList() { return ExceptionsHelp.Instance.ExecuteT(() => { var stringBuilder = new StringBuilder(); var nodes = new List<dynamic>(); var rootNode = new { id = Guid.NewGuid(), name = "根节点", keys = "r-1", parentId = "0", isok = false, projectKeys = Guid.Empty, }; var codes = DimsContextWms.Queryable<Sn>().Where(LinqWhere(new Sn())).OrderBy(x => x.correlatedCode).Select(x => x.correlatedCode).Distinct().ToList(); var projectCodes = Context.Queryable<base_project>().Where(x => codes.Contains(x.projectCode)).Select(x => x.projectCode).Distinct().ToList(); var data = codes.Select(code => new { id = Guid.NewGuid().ToString("N"), name = $"{code}[{(projectCodes.Contains(code) ? "已使用" : "未使用")}]", keys = code, parentId = rootNode.keys, isok = true, //projectKeys = x.keys }).ToList(); nodes.Add(rootNode); nodes.AddRange(data); return nodes; }); } public dynamic Load(PageReq pageReq, Sn entity) { return ExceptionsHelp.Instance.ExecuteT(() => { var result = new Response(); var expression = LinqWhere(entity); //先组合查询表达式(多表查询查看IOT 设备列表案例) var query = DimsContextWms.Queryable<Sn>().Where(expression).Select(x => new { x.id, x.code, x.correlatedCode, progress = SqlFunc.Subqueryable<SnPartDetailHistory>().Where(s => s.snCode == x.code).DistinctCount(s => s.operation) * 100 / 7, x.created, x.createdBy, }); int total = 0; var data = query.ToOffsetPage(pageReq.page, pageReq.limit, ref total); var equipmentCodes = Context.Queryable<base_equipment>().Select(x => x.equipmentCode).Distinct().ToList(); result.Result = data.Select(x => new { x.id, x.code, x.correlatedCode, snStatus = equipmentCodes.Contains(x.code),//SN使用状态 x.progress, x.created, x.createdBy, userName = Context.Queryable<sys_user>().Where(s => s.account == x.createdBy).Select(s => s.name).First(), }).ToList(); result.Count = total; return result; }, catchRetrunValue: "list"); } public dynamic LoadDesc(PageReq pageReq, SnPartDetail entity) { return ExceptionsHelp.Instance.ExecuteT(() => { var result = new Response(); var expression = LinqWhereDetail(entity); //先组合查询表达式(多表查询查看IOT 设备列表案例) var query = DimsContextWms.Queryable<SnPartDetail>().Where(expression); int total = 0; result.Result = query.ToOffsetPage(pageReq.page, pageReq.limit, ref total); result.Count = total; return result; }, catchRetrunValue: "list"); } private Expression<Func<Sn, bool>> LinqWhere(Sn entity) { var exp = Expressionable.Create<Sn>(); exp.And(x => x.created >= new DateTime(2024, 11, 1)); exp.And(x => !string.IsNullOrEmpty(x.correlatedCode)); var filterCodes = new List<string> { "/", "测试", "test", "ceshi", }; //过滤掉以数字开头的数据 for (int i = 0; i < 10; i++) { filterCodes.Add($"{i}"); } foreach (var item in filterCodes) { exp.And(x => !x.correlatedCode.StartsWith(item)); } if (!string.IsNullOrWhiteSpace(entity.code)) { exp.And(x => x.code.Contains(entity.code)); } if (!string.IsNullOrWhiteSpace(entity.correlatedCode)) { exp.And(x => x.correlatedCode.Contains(entity.correlatedCode)); } if (entity.syncIot >= 0) { exp.And(x => x.syncIot == entity.syncIot); } return exp.ToExpression();//拼接表达式 } private Expression<Func<SnPartDetail, bool>> LinqWhereDetail(SnPartDetail entity) { var exp = Expressionable.Create<SnPartDetail>(); if (entity.snId != default) { exp.And(x => x.snId == entity.snId); } if (!string.IsNullOrWhiteSpace(entity.snCode)) { exp.And(x => x.snCode.Contains(entity.snCode)); } return exp.ToExpression();//拼接表达式 } } }