using Hotline.Caching.Interfaces; using Hotline.File; using Hotline.FlowEngine.Notifications; using Hotline.FlowEngine.Workflows; using Hotline.Orders; using Hotline.Share.Attributes; using Hotline.Share.Dtos; using Hotline.Share.Dtos.File; using Hotline.Share.Dtos.FlowEngine; using Hotline.Share.Dtos.Order; using Hotline.Share.Dtos.Snapshot; using Hotline.Share.Enums.FlowEngine; using Hotline.Share.Enums.Order; using Hotline.Share.Enums.Snapshot; using Hotline.Share.Tools; using Hotline.Snapshot; using Hotline.Snapshot.Interfaces; using Hotline.Tools; using Mapster; using Novacode.NETCorePort; using NPOI.POIFS.Properties; using SqlSugar; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Hotline.Share.Dtos.FlowEngine.Workflow; using XF.Domain.Authentications; using XF.Domain.Dependency; using XF.Domain.Exceptions; using XF.Utility.EnumExtensions; namespace Hotline.Application.Snapshot; public class SnapshotOrderApplication : IOrderSnapshotApplication, IScopeDependency { private readonly IOrderSnapshotRepository _orderSnapshotRepository; private readonly IOrderRepository _orderRepository; private readonly ISnapshotOrderPublishRepository _snapshotOrderPublishRepository; private readonly ISessionContext _sessionContext; private readonly ISystemSettingCacheManager _systemSettingCacheManager; private readonly IIndustryCaseRepository _industryCaseRepository; private readonly ISystemDicDataCacheManager _systemDicDataCacheManager; private readonly IIndustryRepository _industryRepository; private readonly IFileRepository _fileRepository; private readonly ISnapshotLabelLogRepository _snapshotLabelLogRepository; private readonly IRedPackAuditRepository _redPackAuditRepository; public SnapshotOrderApplication(IOrderSnapshotRepository orderSnapshotRepository, IOrderRepository orderRepository, ISnapshotOrderPublishRepository snapshotOrderPublishRepository, ISessionContext sessionContext, ISystemSettingCacheManager systemSettingCacheManager, IIndustryCaseRepository industryCaseRepository, ISystemDicDataCacheManager systemDicDataCacheManager, IIndustryRepository industryRepository, IFileRepository fileRepository, ISnapshotLabelLogRepository snapshotLabelLogRepository, IRedPackAuditRepository redPackAuditRepository) { _orderSnapshotRepository = orderSnapshotRepository; _orderRepository = orderRepository; _snapshotOrderPublishRepository = snapshotOrderPublishRepository; _sessionContext = sessionContext; _systemSettingCacheManager = systemSettingCacheManager; _industryCaseRepository = industryCaseRepository; _systemDicDataCacheManager = systemDicDataCacheManager; _industryRepository = industryRepository; _fileRepository = fileRepository; _snapshotLabelLogRepository = snapshotLabelLogRepository; _redPackAuditRepository = redPackAuditRepository; } /// /// 添加公开工单 /// /// /// /// public async Task AddOrderPublishAsync(AddSnapshotOrderPublishInDto dto, CancellationToken cancellation) { dto.ValidateObject(); var snapshotOrder = await _orderSnapshotRepository.GetAsync(dto.OrderId) ?? throw UserFriendlyException.SameMessage("工单不存在"); var order = await _orderRepository.Queryable() .Where(m => m.Id == dto.OrderId) .Select(m => new { m.Id, m.No }) .FirstAsync(cancellation) ?? throw UserFriendlyException.SameMessage("工单不存在"); var entity = dto.Adapt(); entity.Id = order.Id; entity.IndustryId = snapshotOrder.IndustryId; entity.IndustryName = snapshotOrder.IndustryName; entity.No = order.No; entity.Status = EOrderSnapshotPublishStatus.Pending; return await _snapshotOrderPublishRepository.AddAsync(entity, cancellation); } /// /// 获取网格员回复集合 /// /// /// public ISugarQueryable GetGuiderReplyItems(GuiderReplyItemsInDto dto) { var query = _orderSnapshotRepository.Queryable() .LeftJoin((snapshot, order) => snapshot.Id == order.Id) .Where((snapshot, order) => snapshot.ReplyResultType != null) .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No)) .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title)) .WhereIF(dto.GuiderName.NotNullOrEmpty(), (snapshot, order) => snapshot.MemberName.Contains(dto.GuiderName)) .WhereIF(dto.GuiderPhoneNumber.NotNullOrEmpty(), (snapshot, order) => snapshot.MemberMobile.Contains(dto.GuiderPhoneNumber)) .WhereIF(dto.NewtorkENumber.NotNullOrEmpty(), (snapshot, order) => snapshot.NetworkENumber.Contains(dto.NewtorkENumber)) .WhereIF(dto.Satus.HasValue, (snapshot, order) => snapshot.ReplyResultType == dto.Satus) .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime) .Select((snapshot, order) => new GuiderReplyItemsOutDto { No = order.No, Title = order.Title }, true); return query; } /// /// 随手拍公开审批集合 /// /// public ISugarQueryable GetOrderSnapshotPublishAuditItems(GetOrderSnapshotPublishAuditItemsInDto dto) { var query = _snapshotOrderPublishRepository.Queryable() .LeftJoin((publish, order) => publish.OrderId == order.Id) .WhereIF(dto.Status == 0, publish => publish.Status == EOrderSnapshotPublishStatus.Pending) .WhereIF(dto.Status == 1, publish => publish.Status == EOrderSnapshotPublishStatus.Agree) .WhereIF(dto.Status == 2, publish => publish.Status == EOrderSnapshotPublishStatus.Refuse) .OrderByDescending((publish, order) => new { publish.Status, publish.CreationTime }) .Select((publish, order) => new GetOrderSnapshotPublishAuditItemsOutDto { Id = publish.Id, No = order.No, Title = order.Title }, true); return query; } /// /// 随手拍公开审批详情 /// /// /// public async Task GetOrderSnapshotPublishAuditDetailAsync(string id) { var publish = await _snapshotOrderPublishRepository.GetAsync(id); var order = await _orderRepository.Queryable() .Where(m => m.Id == publish.OrderId) .Select() .FirstAsync(); publish.Adapt(order); order.Id = publish.Id; return order; } /// /// 随手拍公开详情 /// /// 工单Id /// public async Task GetOrderSnapshotPublishDetailAsync(string id) { return await _orderRepository.Queryable() .Where(m => m.Id == id) .Select() .FirstAsync(); } /// /// 随手拍公开集合 /// /// /// [ExportExcel("随手拍公开")] public ISugarQueryable GetOrderSnapshotPublishItems(GetOrderSnapshotPublishItemsInDto dto) { var query = _orderSnapshotRepository.Queryable(includeDeleted: true) .LeftJoin((snapshot, order) => snapshot.Id == order.Id) .LeftJoin((snapshot, order, publish) => order.Id == publish.OrderId) .WhereIF(dto.IndustryId.NotNullOrEmpty(), snapshot => snapshot.IndustryId == dto.IndustryId) .WhereIF(dto.AreaCode.NotNullOrEmpty(), (snapshot, order) => order.AreaCode == dto.AreaCode) .WhereIF(dto.AcceptTypeCode.NotNullOrEmpty(), (snapshot, order) => order.AcceptTypeCode == dto.AcceptTypeCode) .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime) .WhereIF(dto.Contact.NotNullOrEmpty(), (snapshot, order) => order.Contact.Contains(dto.Contact)) .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone.Contains(dto.FromPhone)) .WhereIF(dto.IsPublished.HasValue, (snapshot, order, publish) => publish.Status == EOrderSnapshotPublishStatus.Agree) .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No)) .WhereIF(dto.OrderStatus.HasValue, (snapshot, order) => order.Status == dto.OrderStatus) .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title)) //.Where((snapshot, order, publish) => order.Status == EOrderStatus.Filed) .OrderByDescending((snapshot, order, publish) => new { publish.Status, snapshot.CreationTime }) .Select((snapshot, order, publish) => new GetOrderSnapshotPublishItemsOutDto { PublishStatus = publish.Status }, true); return query; } /// /// 获取工单标记集合 /// /// /// [ExportExcel("工单标注")] public ISugarQueryable GetSignOrderSnapshotItems(SignOrderSnapshotItemsInDto dto) { var query = _orderSnapshotRepository.Queryable() .LeftJoin((snapshot, order) => snapshot.Id == order.Id) .LeftJoin((snapshot, order, step) => step.ExternalId == order.Id) .WhereIF(dto.Status == 0, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark) // 全部 .WhereIF(dto.Status == 1, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark && step.Status != EWorkflowStepStatus.Handled && step.HandlerId == _sessionContext.UserId) // 待标记 .WhereIF(dto.Status == 2, (snapshot, order, step) => step.Tag == TagDefaults.OrderMark && step.Status == EWorkflowStepStatus.Handled) // 已标记 .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order, step) => order.No.Contains(dto.No)) .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order, step) => order.Title.Contains(dto.Title)) .OrderByDescending((snapshot, order, step) => snapshot.CreationTime) .Select((snapshot, order) => new SignOrderSnapshotItemsOutDto { OrderId = snapshot.Id, No = order.No, Title = order.Title, Content = order.Content, FullAddress = order.FullAddress, CreationTime = order.CreationTime, County = order.County, IsSafetyDepartment = snapshot.IsSafetyDepartment, NetworkENumber = snapshot.NetworkENumber, NetworkRemark = snapshot.NetworkRemark, ReplyDate = snapshot.ReplyDate, LabelTime = snapshot.SignTime, LabelUserName = snapshot.SignUserName }); return query; } /// /// 批量设置随手拍公开申请不通过 /// /// public async Task UpdateOrderSnapshotPublishsStatusRefuseAsync(IList ids) { await _snapshotOrderPublishRepository.Updateable() .SetColumns(m => m.Status, EOrderSnapshotPublishStatus.Refuse) .SetColumns(m => m.RefuseRemark, _sessionContext.UserName + "批量设置不公开") .SetColumns(m => m.RefuseAuditTime, DateTime.Now) .Where(m => ids.Contains(m.Id)) .ExecuteCommandAsync(); } /// /// 审核随手拍公开申请通过/不通过 /// /// public async Task UpdateOrderSnapshotPublishStatusAsync(UpdateOrderSnapshotPublishStatusInDto dto) { var audit = await _snapshotOrderPublishRepository.GetAsync(dto.Id) ?? throw UserFriendlyException.SameMessage("审核记录不存在"); audit.Status = dto.Status; audit.AuditTime = DateTime.Now; await _snapshotOrderPublishRepository.UpdateAsync(audit); } /// /// 随手拍工单标记 /// /// /// /// public async Task UpdateLabelAsync(string id, IList? labels) { if (_systemSettingCacheManager.Snapshot == false) return; var snapshot = await _orderSnapshotRepository.GetAsync(m => m.Id == id); if (snapshot == null) return; if (snapshot != null && labels.IsNullOrEmpty()) { throw UserFriendlyException.SameMessage("随手拍工单标记不能为空"); } snapshot!.Labels = labels; snapshot.LabelName = string.Join('|', labels!.Select(m => m.Value)); //if (labels.Any(m => m.Key == "yzg")) // snapshot.IsRectifyDepartment = true; //if (labels.Any(m => m.Key == "wzg")) // snapshot.IsRectifyDepartment = false; if (labels!.Any(m => m.Key == "ss")) snapshot.IsTruthDepartment = true; if (labels!.Any(m => m.Key == "bss")) snapshot.IsTruthDepartment = false; snapshot.LabelTime = DateTime.Now; snapshot.LabelUserName = _sessionContext.UserName; snapshot.LabelUserId = _sessionContext.UserId; await _orderSnapshotRepository.UpdateAsync(snapshot); var entity = new SnapshotLabelLog { OrderId = snapshot.Id, LabelName = snapshot.LabelName, Labels = labels }; await _snapshotLabelLogRepository.AddAsync(entity); } public async Task SaveOrderWorkflowInfo(NextWorkflowDto dto) { var snapshot = await _orderSnapshotRepository.GetAsync(dto.Data.OrderId); if (snapshot is null) return; // 标记节点标记随手拍安全生产 if (TagDefaults.OrderMark.ToLower() == dto.Workflow.CurrentTag?.ToLower()) { snapshot.IsSafetyDepartment = dto.Data.IsSafetyDepartment; snapshot.SignUserId = _sessionContext.UserId; snapshot.SignUserName = _sessionContext.UserName; snapshot.SignTime = DateTime.Now; snapshot.SignRemark = dto.Workflow.Remark; await _orderSnapshotRepository.UpdateAsync(snapshot); return; } // 归档节点保存随手拍数据 if (dto.Data.IsDangerDepartment.HasValue && dto.Data.IsRectifyDepartment.HasValue) { snapshot.IsDangerDepartment = dto.Data.IsDangerDepartment.Value; snapshot.IsRectifyDepartment = dto.Data.IsRectifyDepartment.Value; snapshot.IndustryCase = dto.Data.IndustryCase; snapshot.IsAward = dto.Data.IsAward; snapshot.AwardOpenBank = dto.Data.AwardOpenBank; snapshot.AwardName = dto.Data.AwardName; snapshot.AwardBankCardNo = dto.Data.AwardBankCardNo; snapshot.ReplenishTypeId = dto.Data.ReplenishTypeId; if (snapshot.ReplenishTypeId.NotNullOrEmpty()) { snapshot.ReplenishTypeName = _systemDicDataCacheManager .SnapshotReplenishType .First(m => m.DicDataValue == snapshot.ReplenishTypeId).DicDataName; } snapshot.AwardAmount = dto.Data.AwardAmount; await _orderSnapshotRepository.UpdateAsync(snapshot); return; } // 电气焊工单办理 if (dto.Data.VerifyType.NotNullOrEmpty() || dto.Data.IsCheckList.HasValue || dto.Data.CompliantType.HasValue) { snapshot.VerifyType = dto.Data.VerifyType; snapshot.IsCheckList = dto.Data.IsCheckList; snapshot.CompliantType = dto.Data.CompliantType; await _orderSnapshotRepository.UpdateAsync(snapshot); return; } } /// /// 获取工单标注日志集合 /// /// /// [ExportExcel("工单标注日志")] public ISugarQueryable GetLabelOrderSnapshotLogItems(LabelOrderSnapshotLogItemsInDto dto) { var query = _snapshotLabelLogRepository.Queryable() .LeftJoin((log, order) => log.OrderId == order.Id) .LeftJoin((log, order, snapshot) => log.OrderId == snapshot.Id) .WhereIF(dto.No.NotNullOrEmpty(), (log, order) => order.No.Contains(dto.No)) .WhereIF(dto.Title.NotNullOrEmpty(), (log, order) => order.Title.Contains(dto.Title)) .WhereIF(dto.Contact.NotNullOrEmpty(), (log, order) => order.Contact.Contains(dto.Contact)) .WhereIF(dto.FromName.NotNullOrEmpty(), (log, order) => order.FromName.Contains(dto.FromName)) .WhereIF(dto.Label.NotNullOrEmpty(), (log, order) => log.LabelName.Contains(dto.Label)) .WhereIF(dto.LabelUserName.NotNullOrEmpty(), (log, order) => log.CreatorName.Contains(dto.LabelUserName)) .WhereIF(dto.BeginSignTime.HasValue && dto.EndSignTime.HasValue, (log, order) => log.CreationTime >= dto.BeginSignTime && log.CreationTime <= dto.EndSignTime) .OrderByDescending((log, order, snapshot) => log.CreationTime) .Select((log, order, snapshot) => new LabelOrderSnapshotLogItemsOutDto { OrderId = order.Id, LabelUserName = log.CreatorName, LabelTime = log.CreationTime, IndustryName = snapshot.IndustryName }, true); return query; } /// /// 返回办理页面基础数据 /// /// /// /// public async Task GetNextStepsDatabaseAsync(NextStepsWithOpinionDto rsp, string orderId) { if (_systemSettingCacheManager.Snapshot == false) return; await _orderSnapshotRepository.Queryable() .Where(m => m.Id == orderId) .Select(m => new { m.Id, m.IndustryId, m.IsSafetyDepartment }) .FirstAsync() .Then(async snapshot => { if (snapshot.IsSafetyDepartment.HasValue && snapshot.IsSafetyDepartment == true) { rsp.IsSafetyDepartment = true; } await _industryRepository.Queryable() .Where(m => m.Id == snapshot.IndustryId) .Select(m => new { m.Id, m.IndustryType }) .FirstAsync() .Then(async industry => { await _fileRepository.Queryable() .Where(m => m.Classify == EIndustryType.Declare.ToString()) .Select(m => new FileJson { Id = m.Id, FileName = m.Name, Path = m.Path, FileType = m.Type }) .ToListAsync() .Then(async file => { rsp.DocumentFiles = file; }); }); } ); rsp.IndustryCase = await _industryCaseRepository.Queryable() .Where(m => m.IsEnable == true) .Select(m => new Kv { Key = m.Id, Value = m.Name }) .ToListAsync(); rsp.SnapshotReplenishType = _systemDicDataCacheManager.SnapshotReplenishType; rsp.CompliantType = EnumExts.GetDescriptions(); } [ExportExcel("随手拍工单")] public ISugarQueryable GetOrderSnapshotItems(OrderSnapshotItemsInDto dto) { var query = _orderSnapshotRepository.Queryable() .LeftJoin((snapshot, order) => snapshot.Id == order.Id) .LeftJoin((snapshot, order, industry) => snapshot.IndustryId == industry.Id) .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No)) .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title)) .WhereIF(dto.ActualHandleOrgName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) .WhereIF(dto.AcceptType.NotNullOrEmpty(), (snapshot, order) => order.AcceptType == dto.AcceptType) .WhereIF(dto.AcceptorName.NotNullOrEmpty(), (snapshot, order) => order.AcceptorName == dto.AcceptorName) .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone == dto.FromPhone) .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName == dto.FromName) .WhereIF(dto.BeginExpiredTime.HasValue && dto.EndExpiredTime.HasValue, (snapshot, order) => order.ExpiredTime >= dto.BeginExpiredTime && order.ExpiredTime <= dto.EndExpiredTime) .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime) .WhereIF(dto.Status.HasValue, (snapshot, order) => order.Status == dto.Status) .WhereIF(dto.County.NotNullOrEmpty(), (snapshot, order) => order.County == dto.County) .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == true, (snapshot, order) => order.OrderScreens.Count() > 0) .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == false, (snapshot, order) => order.OrderScreens.Count() == 0) .WhereIF(dto.CurrentStepName.NotNullOrEmpty(), (snapshot, order) => order.CurrentStepName == dto.CurrentStepName) .WhereIF(dto.BeginFiledTime.HasValue && dto.EndFiledTime.HasValue, (snapshot, order) => order.FiledTime >= dto.BeginFiledTime && order.FiledTime <= dto.EndFiledTime) .WhereIF(dto.HotspotName.NotNullOrEmpty(), (snapshot, order) => order.HotspotName.Contains(dto.HotspotName)) .WhereIF(dto.OrderTagCode.NotNullOrEmpty(), (snapshot, order) => order.OrderTagCode.Contains(dto.OrderTagCode)) .WhereIF(dto.IsUrgent.HasValue, (snapshot, order) => order.IsUrgent == dto.IsUrgent) .WhereIF(dto.TransferPhone.NotNullOrEmpty(), (snapshot, order) => order.TransferPhone.Contains(dto.TransferPhone)) .WhereIF(dto.OrgLevelOneCode.NotNullOrEmpty(), (snapshot, order) => order.OrgLevelOneCode == dto.OrgLevelOneCode) //.WhereIF(dto.DiscontentTurnTo.HasValue, (snapshot, order) => order == dto.OrgLevelOneCode) .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order) => snapshot.IndustryId == dto.IndustryId) .Select((snapshot, order, industry) => new OrderSnapshotItemsOutDto { CreationTime = order.CreationTime } , true); return query; } [ExportExcel("电气焊作业申报工单")] public ISugarQueryable GetOrderSnapshotElectrogasItems(OrderSnapshotItemsInDto dto) { var query = _orderSnapshotRepository.Queryable() .LeftJoin((snapshot, order) => snapshot.Id == order.Id) .LeftJoin((snapshot, order, industry) => snapshot.IndustryId == industry.Id) .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No)) .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title)) .WhereIF(dto.ActualHandleOrgName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) .WhereIF(dto.AcceptType.NotNullOrEmpty(), (snapshot, order) => order.AcceptType == dto.AcceptType) .WhereIF(dto.AcceptorName.NotNullOrEmpty(), (snapshot, order) => order.AcceptorName == dto.AcceptorName) .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone == dto.FromPhone) .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName == dto.FromName) .WhereIF(dto.BeginExpiredTime.HasValue && dto.EndExpiredTime.HasValue, (snapshot, order) => order.ExpiredTime >= dto.BeginExpiredTime && order.ExpiredTime <= dto.EndExpiredTime) .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime) .WhereIF(dto.Status.HasValue, (snapshot, order) => order.Status == dto.Status) .WhereIF(dto.County.NotNullOrEmpty(), (snapshot, order) => order.County == dto.County) .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == true, (snapshot, order) => order.OrderScreens.Count() > 0) .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == false, (snapshot, order) => order.OrderScreens.Count() == 0) .WhereIF(dto.CurrentStepName.NotNullOrEmpty(), (snapshot, order) => order.CurrentStepName == dto.CurrentStepName) .WhereIF(dto.BeginFiledTime.HasValue && dto.EndFiledTime.HasValue, (snapshot, order) => order.FiledTime >= dto.BeginFiledTime && order.FiledTime <= dto.EndFiledTime) .WhereIF(dto.HotspotName.NotNullOrEmpty(), (snapshot, order) => order.HotspotName.Contains(dto.HotspotName)) .WhereIF(dto.OrderTagCode.NotNullOrEmpty(), (snapshot, order) => order.OrderTagCode.Contains(dto.OrderTagCode)) .WhereIF(dto.IsUrgent.HasValue, (snapshot, order) => order.IsUrgent == dto.IsUrgent) .WhereIF(dto.TransferPhone.NotNullOrEmpty(), (snapshot, order) => order.TransferPhone.Contains(dto.TransferPhone)) .WhereIF(dto.OrgLevelOneCode.NotNullOrEmpty(), (snapshot, order) => order.OrgLevelOneCode == dto.OrgLevelOneCode) //.WhereIF(dto.DiscontentTurnTo.HasValue, (snapshot, order) => order == dto.OrgLevelOneCode) .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order) => snapshot.IndustryId == dto.IndustryId) .Where((snapshot, order, industry) => industry.IndustryType == EIndustryType.Declare) .Select((snapshot, order, industry) => new OrderSnapshotElectrogasItemsOutDto { CreationTime = order.CreationTime } , true); return query; } /// /// 获取工单已经标记集合 /// /// /// [ExportExcel("工单标注")] public ISugarQueryable GetLabeledOrderSnapshotItems(LabeledOrderSnapshotItemsInDto dto) { var query = _orderSnapshotRepository.Queryable() .LeftJoin((snapshot, order) => order.Id == snapshot.Id) .Where((snapshot, order) => order.Status >= EOrderStatus.Published) .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No)) .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title)) .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName.Contains(dto.FromName)) .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone.Contains(dto.FromPhone)) .WhereIF(dto.Label.NotNullOrEmpty(), (snapshot, order) => snapshot.LabelName.Contains(dto.Label)) .WhereIF(dto.BeginSignTime.HasValue && dto.EndSignTime.HasValue, (snapshot, order) => snapshot.SignTime >= dto.BeginSignTime && snapshot.SignTime <= dto.EndSignTime) .OrderByDescending((snapshot, order) => snapshot.CreationTime) .Select((snapshot, order) => new LabeledOrderSnapshotItemsOutDto { LabelName = snapshot.LabelName, OrderId = order.Id, LabelTime = snapshot.LabelTime, LabelUserName = snapshot.LabelUserName, SourceChannel = order.SourceChannel, }, true); return query; } public async Task UpdateSafetyAsync(string orderId, bool isSafetyDepartment, string remark) { // 红包已经审核通过的工单不允许修改 if (await _redPackAuditRepository.Queryable().AnyAsync(m => m.OrderId == orderId && m.Status == ERedPackAuditStatus.Agree)) { return await _orderSnapshotRepository.GetAsync(orderId); } return await _orderSnapshotRepository.UpdateSafetyAsync(orderId, isSafetyDepartment, remark); } public ISugarQueryable GetCitizenRewardItems(CitizenRewardInDto dto) { var query = _orderSnapshotRepository.Queryable() .LeftJoin((snapshot, order) => snapshot.Id == order.Id) .WhereIF(dto.No.NotNullOrEmpty(), (snapshot, order) => order.No.Contains(dto.No)) .WhereIF(dto.Title.NotNullOrEmpty(), (snapshot, order) => order.Title.Contains(dto.Title)) .WhereIF(dto.ActualHandleOrgName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) .WhereIF(dto.AcceptType.NotNullOrEmpty(), (snapshot, order) => order.AcceptType == dto.AcceptType) .WhereIF(dto.AcceptorName.NotNullOrEmpty(), (snapshot, order) => order.AcceptorName == dto.AcceptorName) .WhereIF(dto.ActualHandlerName.NotNullOrEmpty(), (snapshot, order) => order.ActualHandlerName == dto.ActualHandlerName) .WhereIF(dto.FromPhone.NotNullOrEmpty(), (snapshot, order) => order.FromPhone == dto.FromPhone) .WhereIF(dto.FromName.NotNullOrEmpty(), (snapshot, order) => order.FromName == dto.FromName) .WhereIF(dto.BeginExpiredTime.HasValue && dto.EndExpiredTime.HasValue, (snapshot, order) => order.ExpiredTime >= dto.BeginExpiredTime && order.ExpiredTime <= dto.EndExpiredTime) .WhereIF(dto.BeginCreationTime.HasValue && dto.EndCreationTime.HasValue, (snapshot, order) => order.CreationTime >= dto.BeginCreationTime && order.CreationTime <= dto.EndCreationTime) .WhereIF(dto.Status.HasValue, (snapshot, order) => order.Status == dto.Status) .WhereIF(dto.County.NotNullOrEmpty(), (snapshot, order) => order.County == dto.County) .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == true, (snapshot, order) => order.OrderScreens.Count() > 0) .WhereIF(dto.IsScreen.HasValue && dto.IsScreen == false, (snapshot, order) => order.OrderScreens.Count() == 0) .WhereIF(dto.CurrentStepName.NotNullOrEmpty(), (snapshot, order) => order.CurrentStepName == dto.CurrentStepName) .WhereIF(dto.BeginFiledTime.HasValue && dto.EndFiledTime.HasValue, (snapshot, order) => order.FiledTime >= dto.BeginFiledTime && order.FiledTime <= dto.EndFiledTime) .WhereIF(dto.HotspotName.NotNullOrEmpty(), (snapshot, order) => order.HotspotName.Contains(dto.HotspotName)) .WhereIF(dto.OrderTagCode.NotNullOrEmpty(), (snapshot, order) => order.OrderTagCode.Contains(dto.OrderTagCode)) .WhereIF(dto.IsUrgent.HasValue, (snapshot, order) => order.IsUrgent == dto.IsUrgent) .WhereIF(dto.TransferPhone.NotNullOrEmpty(), (snapshot, order) => order.TransferPhone.Contains(dto.TransferPhone)) .WhereIF(dto.OrgLevelOneCode.NotNullOrEmpty(), (snapshot, order) => order.OrgLevelOneCode == dto.OrgLevelOneCode) .WhereIF(dto.IndustryId.NotNullOrEmpty(), (snapshot, order) => snapshot.IndustryId == dto.IndustryId) .Where((snapshot, order) => snapshot.IsAward == true) .Select((snapshot, order) => new CitizenRewardOutDto { CreationTime = order.CreationTime } , true); return query; } public async Task UpdateSpecialReasonAsync(string orderId, string errorId, string errorName) { await _orderSnapshotRepository.Updateable() .SetColumns(m => m.SpecialReasonId, errorId) .SetColumns(m => m.SpecialReasonName, errorName) .Where(m => m.Id == orderId) .ExecuteCommandAsync(); } public async Task UpdateIsEmphasisAsync(UpdateIsEmphasisInDto dto) { await _orderSnapshotRepository.Updateable() .SetColumns(m => m.IsEmphasis == true) .Where(m => dto.Ids.Contains(m.Id)) .ExecuteCommandAsync(); } }