using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using WaterCloud.Code;
using Chloe;
using WaterCloud.Domain.ClassTask;
using WaterCloud.Domain.EquipmentManage;
using WaterCloud.Domain.InfoManage;
using WaterCloud.Domain.SystemManage;
using WaterCloud.Domain.SystemOrganize;
using WaterCloud.Service.InfoManage;
using WaterCloud.Domain.MaterialManage;
using WaterCloud.Domain.ProcessManage;
using WaterCloud.Service.SystemManage;
using WaterCloud.Service.MaterialManage;
using System.Net.Http;
using WaterCloud.Domain.QualityManage;
using WaterCloud.Service.QualityManage;
using WaterCloud.Domain.DingTalkManage;
namespace WaterCloud.Service.ClassTask
{
///
/// 创 建:超级管理员
/// 日 期:2021-01-15 14:18
/// 描 述:待执行任务服务类
///
public class ControlJobService : DataFilterService, IDenpendency
{
private MessageService messageApp;
private ItemsDataService itemsApp;
private LocationService locationApp;
public NeedCheckService _checkoutService { get; set; }
public ControlJobService(IDbContext context, IHttpClientFactory httpClientFactory) : base(context)
{
messageApp = new MessageService(context, httpClientFactory);
itemsApp = new ItemsDataService(context);
locationApp = new LocationService(context);
}
#region 获取数据
public async Task> GetList(string keyword = "")
{
var data = IQueryable();
if (currentuser == null || string.IsNullOrEmpty(currentuser.UserId))
{
return null;
}
var user = await uniwork.FindEntity(currentuser.UserId);
if (user.F_IsPlanMan != true && !currentuser.IsSystem)
{
data = uniwork.IQueryable(a => a.F_UserId == currentuser.UserId)
.InnerJoin((a, b) => a.F_JobType == b.F_JobType && ((a.F_EqpId == b.F_NeedEqpId && a.F_EqpId != null) || a.F_EqpId == null)).Select((a, b) => b).Distinct();
}
if (!string.IsNullOrEmpty(keyword))
{
//此处需修改
data = data.Where(t => t.F_JobCode.Contains(keyword) || t.F_JobInfo.Contains(keyword));
}
return data.Where(t => t.F_DeleteMark == false).OrderByDesc(t => t.F_CreatorTime).ToList();
}
public async Task> GetListByUserId(string keyValue)
{
var userJobQuery = IQueryable();
int?[] jobtypes = new int?[] { 0, 3, 4, 7, 10, 11 };
//获取任务前3条,按需求排序
var user = await uniwork.FindEntity(keyValue);
if (user != null && user.F_IsAdmin != true && user.F_IsPlanMan != true)
{
userJobQuery = uniwork.IQueryable(a => a.F_UserId == keyValue)
.InnerJoin((a, b) => a.F_JobType == b.F_JobType && ((a.F_EqpId == b.F_NeedEqpId && a.F_EqpId != null) || a.F_EqpId == null)).Select((a, b) => b).Distinct();
}
var userJob = userJobQuery.Where(a => a.F_JobState < 2 && jobtypes.Contains(a.F_JobType)).OrderBy(a => a.F_NeedTime).Take(6).ToList();
List list = new List();
//var userJob = uniwork.IQueryable(t => t.F_Id == "08d956dc-3daa-4cf6-8446-a2fdcb6f7518" || t.F_Id == "08d956dd-2535-4b6d-80b4-c8329e5100f3" || t.F_Id == "08d95588-f605-40aa-8870-98d93f41c584" || t.F_Id == "08d95683-efec-4912-8392-3017687c5c8f").ToList();
foreach (var item in userJob)
{
list.Add(await GetLookForm(item.F_Id));
}
return list;
}
public async Task> GetOverTimeJob(string F_EqpId, int? F_JobType)
{
int hour = DateTime.Now.Hour;
DateTime startTime = DateTime.Now;
DateTime prestartTime = DateTime.Now;
//string prestartTimeStr = string.Empty;
DateTime newstarttime = DateTime.Now.AddHours(-24);
if (hour >= 8 && hour < 20)
{
startTime = DateTime.Now.Date.AddHours(8);
prestartTime = DateTime.Now.AddDays(-1).Date.AddHours(20);
}
else
{
if (hour >= 20)
{
startTime = DateTime.Now.Date.AddHours(20);
prestartTime = DateTime.Now.Date.AddHours(8);
}
else
{
startTime = DateTime.Now.AddDays(-1).AddHours(20);
prestartTime = DateTime.Now.AddDays(-1).AddHours(8);
}
}
//所有任务
List list = new List();
int?[] jobtypes = new int?[] { 0, 1, 3, 4, 7, 10, 11 };
var alljobs = repository.IQueryable().Where(a => (a.F_CreatorTime >= newstarttime && a.F_JobState < 2) && a.F_EnabledMark == true && a.F_DeleteMark == false).Where(t => jobtypes.Contains(t.F_JobType));
//var leftjobDivOvertime = new List();
if (string.IsNullOrEmpty(F_EqpId) && F_JobType != null)
{
alljobs = alljobs.Where(t => t.F_JobType == F_JobType).Where(a => a.F_JobState < 2 && Sql.DiffSeconds(a.F_NeedTime, DateTime.Now) > 0);
}
else
{
alljobs = alljobs.Where(t => t.F_NeedEqpId == F_EqpId && (t.F_JobType == 0 || t.F_JobType == 3)).Where(a => a.F_JobState < 2 && Sql.DiffSeconds(a.F_NeedTime, DateTime.Now) > 0);
}
var leftjobDivOvertime = alljobs.Select(t => new overtimejobEntity
{
F_JobCode = t.F_JobCode,
F_CreatorTime = t.F_CreatorTime,
F_NeedTime = t.F_NeedTime,
F_JobInfo = t.F_JobInfo,
F_JobState = t.F_JobState,
F_JobType = t.F_JobType,
overTime = Sql.DiffMinutes(t.F_NeedTime, DateTime.Now)
}).OrderByDesc(t => t.overTime).ToList();
return leftjobDivOvertime;
}
public async Task GetTaskJobForm(string jobCode)
{
var job = IQueryable().Where(a => a.F_JobCode == jobCode).First();
return await GetLookForm(job.F_Id);
}
public async Task> GetLookList(string keyword = "")
{
var query = IQueryable().Where(t => t.F_DeleteMark == false);
if (!string.IsNullOrEmpty(keyword))
{
//此处需修改
query = query.Where(t => t.F_JobCode.Contains(keyword) || t.F_JobInfo.Contains(keyword));
}
//权限过滤
query = GetDataPrivilege("u", "", query);
return query.OrderByDesc(t => t.F_CreatorTime).ToList();
}
public async Task> GetLookList(SoulPage pagination, string keyword = "", int type = 0)
{
//反格式化显示只能用"等于",其他不支持
Dictionary> dic = new Dictionary>();
var typeList = await itemsApp.GetItemList("Mes_ControlJobType");
Dictionary typeTemp = new Dictionary();
foreach (var item in typeList)
{
typeTemp.Add(item.F_ItemName, item.F_ItemCode);
}
dic.Add("F_JobType", typeTemp);
var setList = await itemsApp.GetItemList("Mes_WorkOrderState");
Dictionary stateTemp = new Dictionary();
foreach (var item in setList)
{
stateTemp.Add(item.F_ItemName, item.F_ItemCode);
}
dic.Add("F_JobState", stateTemp);
Dictionary enabledTemp = new Dictionary();
enabledTemp.Add("是", "1");
enabledTemp.Add("否", "0");
dic.Add("F_IsOutTime", enabledTemp);
pagination = ChangeSoulData(dic, pagination);
var query = IQueryable().Where(u => u.F_DeleteMark == false);
var user = await uniwork.FindEntity(currentuser.UserId);
if (user.F_IsPlanMan != true && !currentuser.IsSystem)
{
query = uniwork.IQueryable(a => a.F_UserId == currentuser.UserId)
.InnerJoin((a, b) => a.F_JobType == b.F_JobType && ((a.F_EqpId == b.F_NeedEqpId && a.F_EqpId != null) || a.F_EqpId == null)).Select((a, b) => b).Distinct();
}
if (!string.IsNullOrEmpty(keyword))
{
//此处需修改
query = query.Where(t => t.F_JobCode.Contains(keyword) || t.F_JobInfo.Contains(keyword));
}
switch (type)
{
case 0:
query = query.Where(a => a.F_JobState <= 1);
break;
case 1:
query = query.Where(a => a.F_JobState == 1);
break;
case 2:
query = query.Where(a => a.F_JobState > 1);
break;
}
//权限过滤
query = GetDataPrivilege("u", "", query);
return await repository.OrderList(query, pagination);
}
private IQuery IQueryable()
{
var now = DateTime.Now;
var query = repository.IQueryable().Select(a => new ControlJobEntity
{
F_CreatorTime = a.F_CreatorTime,
F_CreatorUserId = a.F_CreatorUserId,
F_DeleteMark = a.F_DeleteMark,
F_DeleteTime = a.F_DeleteTime,
F_DeleteUserId = a.F_DeleteUserId,
F_Description = a.F_Description,
F_DoneTime = a.F_DoneTime,
F_EnabledMark = a.F_EnabledMark,
F_FinishTime = a.F_FinishTime,
F_Id = a.F_Id,
F_IsNotice = a.F_IsNotice,
F_IsOutTime = a.F_FinishTime == null ? now > a.F_NeedTime : a.F_FinishTime > a.F_NeedTime,
F_IsToPlanMan = a.F_IsToPlanMan,
F_JobCode = a.F_JobCode,
F_JobInfo = a.F_JobInfo,
F_JobState = a.F_JobState,
F_JobType = a.F_JobType,
F_LastModifyTime = a.F_LastModifyTime,
F_LastModifyUserId = a.F_LastModifyUserId,
F_NeedEqpId = a.F_NeedEqpId,
F_NeedId = a.F_NeedId,
F_NeedNum = a.F_NeedNum,
F_NeedTime = a.F_NeedTime,
F_Priority = a.F_Priority
});
return query;
}
public async Task