using DOAN.Model.MES.product; using DOAN.Model.MES.product.Dto; using DOAN.Repository; using DOAN.Service.MES.product.IService; using Infrastructure.Attribute; using Infrastructure.Converter; using Infrastructure.Extensions; namespace DOAN.Service.MES.product { /// /// 工单查询服务 /// [AppService( ServiceType = typeof(IProWorkorderQueryService), ServiceLifetime = LifeTime.Transient )] public class ProWorkorderQueryService : BaseService, IProWorkorderQueryService { /// /// 查询生产工单列表 /// /// /// public PagedInfo GetList(ProWorkorderQueryDto parm) { if (parm.WorkorderDate != null && parm.WorkorderDate.Length > 0) { parm.WorkorderDate[0] = DOANConvertDate.ConvertLocalDate(parm.WorkorderDate[0]); parm.WorkorderDate[1] = DOANConvertDate.ConvertLocalDate(parm.WorkorderDate[1]); parm.WorkorderDate[0] = parm.WorkorderDate[0].Date; parm.WorkorderDate[1] = parm.WorkorderDate[1].Date; } var predicate = Expressionable .Create() .And(it => it.PlanNum > 0) .AndIF( !string.IsNullOrEmpty(parm.productionName), it => it.productionName.Contains(parm.productionName) ) .AndIF( !string.IsNullOrEmpty(parm.productionCode), it => it.productionCode.Contains(parm.productionCode) ) .AndIF( !string.IsNullOrEmpty(parm.MaterialCode), it => it.productionCode.Contains(parm.MaterialCode) || it.MaterialCode.Contains(parm.MaterialCode) ) .AndIF( !string.IsNullOrEmpty(parm.FeedOrder), it => it.FeedOrder.Contains(parm.FeedOrder) ) .AndIF( !string.IsNullOrEmpty(parm.CustomerOrder), it => it.CustomerOrder.Contains(parm.CustomerOrder) ) .AndIF(!string.IsNullOrEmpty(parm.RouteCode), it => it.RouteCode == parm.RouteCode) .AndIF(!string.IsNullOrEmpty(parm.GroupCode), it => it.GroupCode == parm.GroupCode) .AndIF( parm.WorkorderDate != null && parm.WorkorderDate.Length > 0, it => it.WorkorderDate >= parm.WorkorderDate[0] && it.WorkorderDate <= parm.WorkorderDate[1] ) .And(it => it.PlanNum > 0) .ToExpression(); var response = Context .Queryable() .Where(predicate) .OrderBy(it => it.Sort) .ToPage(parm); return response; } /// /// 获取工单无校验 /// /// /// public PagedInfo GetList_NOCheck(ProWorkorderQueryDto parm) { if (parm.WorkorderDate != null && parm.WorkorderDate.Length > 0) { parm.WorkorderDate[0] = DOANConvertDate.ConvertLocalDate(parm.WorkorderDate[0]); parm.WorkorderDate[1] = DOANConvertDate.ConvertLocalDate(parm.WorkorderDate[1]); parm.WorkorderDate[0] = parm.WorkorderDate[0].Date; parm.WorkorderDate[1] = parm.WorkorderDate[1].Date; } var predicate = Expressionable .Create() .AndIF( !string.IsNullOrEmpty(parm.productionName), it => it.productionName.Contains(parm.productionName) ) .AndIF( !string.IsNullOrEmpty(parm.productionCode), it => it.productionCode.Contains(parm.productionCode) ) .AndIF( !string.IsNullOrEmpty(parm.MaterialCode), it => it.productionCode.Contains(parm.MaterialCode) || it.MaterialCode.Contains(parm.MaterialCode) ) .AndIF( !string.IsNullOrEmpty(parm.FeedOrder), it => it.FeedOrder.Contains(parm.FeedOrder) ) .AndIF( !string.IsNullOrEmpty(parm.CustomerOrder), it => it.CustomerOrder.Contains(parm.CustomerOrder) ) .AndIF(!string.IsNullOrEmpty(parm.RouteCode), it => it.RouteCode == parm.RouteCode) .AndIF(!string.IsNullOrEmpty(parm.GroupCode), it => it.GroupCode == parm.GroupCode) .AndIF( parm.WorkorderDate != null && parm.WorkorderDate.Length > 0, it => it.WorkorderDate >= parm.WorkorderDate[0] && it.WorkorderDate <= parm.WorkorderDate[1] ) .And(it => it.PlanNum > 0) .ToExpression(); var response = Context .Queryable() .Where(predicate) .OrderBy(it => it.Sort) .ToPage(parm); return response; } /// /// 获取详情 /// /// /// public ProWorkorder GetInfo(string Id) { var response = Queryable().Where(x => x.Id == Id).First(); return response; } /// /// 获取工单进度跟踪列表 /// /// /// public PagedInfo GetWorkorderTraceProgressList( ProWorkorderQueryDto query ) { // 这里需要实现工单进度跟踪列表的查询逻辑 // 暂时返回空列表 return new PagedInfo(); } /// /// 查询BOM 及其所需数量 /// /// /// public List SearchBOMNum(string workorder_num) { // 这里需要实现BOM查询逻辑 // 暂时返回空列表 return new List(); } /// /// 获取工单生产进度 /// /// 工单号 /// public int GetWorkorderWithProgress(string workorder) { var workorderInfo = Context .Queryable() .Where(it => it.Workorder == workorder) .First(); if (workorderInfo == null) { throw new Exception("工单不存在"); } var reportInfo = Context .Queryable() .Where(it => it.Workorder == workorder) .OrderByDescending(it => it.ProcessId) .First(); if (reportInfo == null) { return 1; } return reportInfo.ProcessId; } } }