using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using WaterCloud.Code;
using Chloe;
using WaterCloud.Domain.ProcessManage;
using WaterCloud.Domain.MaterialManage;
using WaterCloud.Domain.SystemOrganize;
using WaterCloud.Domain.EquipmentManage;
using WaterCloud.Service.SystemManage;
using WaterCloud.Domain.ClassTask;
using WaterCloud.Service.ClassTask;
using System.Net.Http;
using WaterCloud.Domain.QualityManage;
namespace WaterCloud.Service.ProcessManage
{
///
/// 创 建:超级管理员
/// 日 期:2020-12-07 12:14
/// 描 述:工单作业服务类
///
public class WorkOrderRunService : DataFilterService, IDenpendency
{
private ItemsDataService itemsApp;
private ControlJobService jobApp;
public WorkOrderRunService(IDbContext context, IHttpClientFactory httpClientFactory) : base(context)
{
itemsApp = new ItemsDataService(context);
jobApp = new ControlJobService(context, httpClientFactory);
}
#region 获取数据
public async Task> GetLookList(SoulPage pagination, string keyword = "", string id = "")
{
//反格式化显示只能用"等于",其他不支持
Dictionary> dic = new Dictionary>();
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_WorkOrderState", stateTemp);
pagination = ChangeSoulData(dic, pagination);
var query = GetQuery();
if (!string.IsNullOrEmpty(keyword))
{
//此处需修改
query = query.Where(u => u.F_WorkOrderCode.Contains(keyword)
|| u.F_MaterialCode.Contains(keyword) || u.F_MaterialName.Contains(keyword) || u.F_WorkOrderCode.Contains(keyword));
}
if(!string.IsNullOrEmpty(id))
{
query= query.Where(u=>u.F_Id==id);
}
query = GetDataPrivilege("u", "", query);
return await repository.OrderList(query, pagination);
}
public async Task> GetWorkUser(string eqpId,string ids)
{
var query = uniwork.IQueryable(a => (a.F_EqpId == eqpId || a.F_EqpId == null || a.F_EqpId == "") && a.F_JobType == 5)
.InnerJoin((a, b) => a.F_UserId == b.F_Id && b.F_DeleteMark == false && b.F_EnabledMark == true)
.Select((a, b) => b);
if (!string.IsNullOrEmpty(ids))
{
var temps = ids.Split(',');
query = query.Where(a => !temps.Contains(a.F_Id));
}
return query.OrderBy(a => a.F_CreatorTime).ToList();
}
public async Task> GetUseTransferList(string eqpName)
{
var data = uniwork.IQueryable(a => a.F_EqpName==eqpName&&a.F_DoneNum!=a.F_Num).OrderBy(a => a.F_TransferBoxCode).ToList();
return data;
}
public async Task> GetHaveUseEqpList(string keyword)
{
var eqps = uniwork.IQueryable(a => a.F_DoneNum != a.F_Num).GroupBy(a => a.F_EqpId).Select(a => a.F_EqpId)
.Distinct().ToList();
var data= uniwork.IQueryable(a => eqps.Contains(a.F_Id)).OrderBy(a => a.F_EqpName).ToList();
return data;
}
public async Task> GetHaveOutEqpList(string keyword)
{
var eqps = uniwork.IQueryable(a => a.F_IsTemp == true).GroupBy(a => a.F_EqpId).Select(a => a.F_EqpId)
.Distinct().ToList();
var data = uniwork.IQueryable(a => eqps.Contains(a.F_Id)).OrderBy(a => a.F_EqpName).ToList();
return data;
}
public async Task> GetOutTransferList(string eqpName)
{
var checkids = uniwork.IQueryable(a => a.F_IsCheck == false && a.F_CheckType == 2).Select(a => a.F_SourceId).ToList();
var data = uniwork.IQueryable(a => a.F_EqpName == eqpName && a.F_IsTemp == true).Where(a=>!checkids.Contains(a.F_Id.ToString())).OrderBy(a => a.F_BandingTime).ToList();
var list = new List();
foreach (var item in data)
{
var temp = list.Where(a => a.F_TransferBoxCode == item.F_TransferBoxCode).FirstOrDefault();
if (temp == null)
{
list.Add(item);
}
else
{
temp.F_Num += item.F_Num;
}
}
return list;
}
public async Task> GetUsingEqpList(string keyword)
{
var query = uniwork.IQueryable(a=>a.F_WorkOrderState == 1)
.InnerJoin((a, b) => a.F_Id == b.F_WorkOrderDetailId && b.F_IsMaster == true)
.InnerJoin((a,b,c)=>b.F_EqpId == c.F_Id).Select((a,b,c)=>c);
return query.Distinct().OrderBy(a => a.F_EqpName).ToList();
}
public async Task> GetListByOrder(string keyValue)
{
var query = GetQuery().Where(a => a.F_WorkOrderId == keyValue);
return query.OrderBy(a=>a.F_RunSort).ToList();
}
public async Task> GetAddList(string keyValue, string materialId, string ids)
{
if (!string.IsNullOrEmpty(materialId))
{
var query = uniwork.IQueryable(a => a.F_MaterialId == materialId).InnerJoin((a, b) => a.F_EqpId == b.F_Id && b.F_EqpState < 2).Select((a, b) => b);
if (!string.IsNullOrEmpty(ids))
{
var temps = ids.Split(',');
query = query.Where(a => temps.Contains(a.F_Id));
}
return query.OrderBy(a=>a.F_EqpName).ToList();
}
else
{
var query = uniwork.IQueryable(a => a.F_ProcessId == keyValue).InnerJoin((a, b) => a.F_EqpId == b.F_Id && b.F_EqpState < 2).Select((a, b) => b);
return query.OrderBy(a => a.F_EqpName).ToList();
}
}
public async Task GetLookForm(object keyValue)
{
var query = GetQuery().Where(a => a.F_Id == keyValue.ToString());
var data = GetFieldsFilterData(query.FirstOrDefault());
data.listData = repository.IQueryable(a => a.F_Id == data.F_Id).InnerJoin((a, b) => a.F_Id == b.F_WorkOrderDetailId)
.InnerJoin((a, b, c) => b.F_EqpId == c.F_Id).Select((a, b, c) => new EquipmentEntity {
F_Id=c.F_Id,
F_EqpName=c.F_EqpName,
F_EqpState=c.F_EqpState,
F_EqpType=c.F_EqpType,
F_EqpUse=c.F_EqpUse,
F_MoldingNum=c.F_MoldingNum,
F_IsMaster=b.F_IsMaster,
F_MouldType=c.F_MouldType,
F_MouldNum=b.F_MouldNum,
F_IsOtherEqp=c.F_IsOtherEqp,
F_Description=c.F_Description
}).OrderByDesc(a=>a.F_IsMaster).ToList().ToJson();
data.list = uniwork.IQueryable(a => a.F_WorkOrderDetailId == keyValue.ToString()).ToList();
data.list = data.list.OrderBy(a => a.F_LocationCode).ToList();
var bands = uniwork.IQueryable(a => a.F_WorkOrderDetailId == data.F_Id).Select(a => a.F_EqpWorkTimeId).ToList();
if (bands!=null&& bands.Count>0)
{
data.userTimeList = uniwork.IQueryable(a =>bands.Contains(a.F_Id)).ToList();
}
return data;
}
private IQuery GetQuery()
{
//获取数据权限
var query = repository.IQueryable(a => a.F_DeleteMark == false).LeftJoin((a, b) => a.F_MaterialId == b.F_Id)
.LeftJoin((a,b,c)=>a.F_CreatorUserId==c.F_Id)
.LeftJoin((a,b,c,d)=>a.F_WorkOrderId==d.F_Id)
.LeftJoin((a,b,c,d,e)=>a.F_Id==e.F_WorkOrderDetailId&&e.F_IsMaster==true)
.Select((a, b,c,d,e) => new WorkOrderDetailExtend
{
F_BadNum = a.F_BadNum,
F_CreatorTime = a.F_CreatorTime,
F_CreatorUserId = a.F_CreatorUserId,
F_DeleteMark = a.F_DeleteMark,
F_Description = a.F_Description,
F_DoneNum = a.F_DoneNum,
F_EnabledMark = a.F_EnabledMark,
F_MaterialId = a.F_MaterialId,
F_PlanEndTime = a.F_PlanEndTime,
F_PlanStartTime = a.F_PlanStartTime,
F_PlanNum = a.F_PlanNum,
F_RealEndTime = a.F_RealEndTime,
F_RealStartTime = a.F_RealStartTime,
F_WorkOrderCode = d.F_WorkOrderCode,
F_WorkOrderState = a.F_WorkOrderState,
F_Id = a.F_Id,
F_CreatorUserName = c.F_RealName,
F_MaterialCode = b.F_MaterialCode,
F_MaterialName = b.F_MaterialName,
F_MaterialType = b.F_MaterialType,
F_MaterialUnit = b.F_MaterialUnit,
F_EqpId=e.F_EqpId,
F_RunSort = a.F_RunSort,
F_WorkOrderId=a.F_WorkOrderId,
});
//var bomQuery = uniwork.IQueryable().Where(a=> a.F_BomType == 1).GroupBy(a => a.F_MaterialId).AndBy(a => a.F_ProcessId).Select(a => new { a.F_MaterialId, a.F_ProcessId });
var bomQuery = uniwork.IQueryable();
//query=query.LeftJoin(bomQuery,(a, b) => a.F_MaterialId == b.F_MaterialId)
query = query.LeftJoin(bomQuery, (a, b) => a.F_Id == b.F_WorkOrderDetailId)
.LeftJoin((a, b, c) => b.F_ProcessId == c.F_Id)
.LeftJoin((a, b, c, d) => a.F_EqpId == d.F_Id && d.F_EqpType == 0)
.Select((a, b, c, d) => new WorkOrderDetailExtend {
F_BadNum = a.F_BadNum,
F_CreatorTime = a.F_CreatorTime,
F_CreatorUserId = a.F_CreatorUserId,
F_DeleteMark = a.F_DeleteMark,
F_Description = a.F_Description,
F_DoneNum = a.F_DoneNum,
F_EnabledMark = a.F_EnabledMark,
F_MaterialId = a.F_MaterialId,
F_PlanEndTime = a.F_PlanEndTime,
F_PlanStartTime = a.F_PlanStartTime,
F_PlanNum = a.F_PlanNum,
F_RealEndTime = a.F_RealEndTime,
F_RealStartTime = a.F_RealStartTime,
F_WorkOrderCode = a.F_WorkOrderCode,
F_WorkOrderState = a.F_WorkOrderState,
F_Id = a.F_Id,
F_CreatorUserName = a.F_CreatorUserName,
F_MaterialCode = a.F_MaterialCode,
F_MaterialName = a.F_MaterialName,
F_MaterialType = a.F_MaterialType,
F_MaterialUnit = a.F_MaterialUnit,
F_RunSort=a.F_RunSort,
F_EqpId = a.F_EqpId,
F_EqpName=d.F_EqpName,
F_ProcessId=b.F_ProcessId,
F_ProcessName=c.F_ProcessFlowName,
F_WorkOrderId=a.F_WorkOrderId,
});
return query;
}
public async Task> GetWorkOrder(string eqpName, string keyword)
{
var query = GetQuery().Where(a => a.F_EqpName == eqpName && a.F_WorkOrderState == 1 && a.F_EnabledMark == true && a.F_DeleteMark == false);
if (!string.IsNullOrEmpty(keyword))
{
query = query.Where(a => a.F_EqpName.Contains(keyword) || a.F_MaterialCode.Contains(keyword) || a.F_MaterialName.Contains(keyword));
}
return query.OrderBy(a => a.F_CreatorTime).ToList();
}
#endregion
#region 提交数据
public async Task SubmitForm(string keyValue, string listData, string userTimeList, int F_MouldNum = 0)
{
var workdetail = await repository.FindEntity(keyValue);
var eqpList = listData.ToList();
var ids = eqpList.Select(a => a.F_Id).ToList();
var useList = userTimeList.ToList();
var temps = eqpList.Select(a => a.F_Id).ToList();
var items = await itemsApp.GetItemList("Mes_MoveEqpSetting");
var moulditems = items.FirstOrDefault(a => a.F_ItemCode == "2").F_Description.Split(",");
var fixtureitems = items.FirstOrDefault(a => a.F_ItemCode == "1").F_Description.Split(",");
var mould = eqpList.Where(a => moulditems.Contains(a.F_EqpUse.ToString())).FirstOrDefault();
var fixture = eqpList.Where(a => fixtureitems.Contains(a.F_EqpUse.ToString())).FirstOrDefault();
var master = eqpList.Where(a => a.F_IsMaster == true).FirstOrDefault();
int mouldCount = 0;
//检测设备有没有问题
if (eqpList.Count() != uniwork.IQueryable(a => ids.Contains(a.F_Id) && a.F_EqpState < 2).Count())
{
throw new Exception("设备状态不正常,无法创建工单");
}
if (mould != null)
{
var mouldEqp = await uniwork.FindEntity(mould.F_Id);
mouldCount = uniwork.IQueryable(a => mould.F_Id == a.F_EqpId)
.InnerJoin((a, b) => a.F_WorkOrderDetailId == b.F_Id && b.F_WorkOrderState == 1)
.Select((a, b) => a.F_MouldNum).ToList().Sum()??0;
if (mouldEqp.F_MoldingNum < mouldCount + F_MouldNum)
{
throw new Exception("设备正在作业中,无法创建工单");
}
if (mouldEqp.F_MoldingNum == 1)
{
mould = null;
}
}
int count = uniwork.IQueryable(a => temps.Contains(a.F_EqpId))
.InnerJoin((a, b) => a.F_WorkOrderDetailId == b.F_Id && b.F_WorkOrderState == 1)
.Select((a, b) => b).Count();
if (mould == null && fixture==null && count>0)
{
throw new Exception("设备正在作业中,无法创建工单");
}
//根据设备获取工单,需要的物料
var detail = uniwork.IQueryable(a => a.F_Id == keyValue)
.InnerJoin((a, b) => b.F_MaterialId == a.F_MaterialId && b.F_BomType == 1)
.InnerJoin((a, b, c) => b.F_ProcessId == c.F_Id)
.InnerJoin((a, b, c, d) => a.F_WorkOrderId == d.F_Id)
.Select((a, b, c, d) => new WorkOrderDetailEntity
{
F_BadNum = a.F_BadNum,
F_CreatorTime = a.F_CreatorTime,
F_CreatorUserId = a.F_CreatorUserId,
F_DeleteMark = a.F_DeleteMark,
F_Description = a.F_Description,
F_DoneNum = a.F_DoneNum,
F_EnabledMark = a.F_EnabledMark,
F_Id = a.F_Id,
F_MaterialId = a.F_MaterialId,
F_PlanEndTime = a.F_PlanEndTime,
F_PlanNum =a.F_PlanNum,
F_PlanStartTime = a.F_PlanStartTime,
F_RunSort = a.F_RunSort,
F_WorkOrderId = a.F_WorkOrderId,
F_WorkOrderState = a.F_WorkOrderState,
F_ProcessId = b.F_ProcessId,
F_ProcessName = c.F_ProcessFlowName,
F_WorkOrderCode = d.F_WorkOrderCode
})
.InnerJoin((a, b) => a.F_Id == b.F_WorkOrderDetailId && b.F_ProcessId == a.F_ProcessId)
.Select((a, b) => a)
.FirstOrDefault();
if (detail.F_DoneNum > 0 && workdetail.F_WorkOrderState != 2)
{
throw new Exception("工单已经开始执行,无法更改");
}
var temptime = ((DateTime)detail.F_PlanStartTime).AddHours(-1);
var now = DateTime.Now;
if (!(now>=temptime && now <=detail.F_PlanEndTime))
{
throw new Exception("工单请按照计划时间作业,请检查");
}
now = workdetail.F_RealStartTime != null? (DateTime)workdetail.F_RealStartTime : DateTime.Now;
List list = new List();
foreach (var item in eqpList)
{
var entity = new WorkOrderDetailEqpBandingEntity();
entity.F_Id = Utils.GuId();
entity.F_WorkOrderDetailId = keyValue;
entity.F_EqpType = item.F_EqpType;
entity.F_EqpId = item.F_Id;
entity.F_EqpUse = item.F_EqpUse;
entity.F_MouldNum = 0;
entity.F_IsMaster = item.F_IsMaster;
if (moulditems.Contains(item.F_EqpUse.ToString()))
{
var cout = uniwork.IQueryable(a => a.F_WorkOrderState == 1 && a.F_Id != keyValue).InnerJoin((a, b) => a.F_Id == b.F_WorkOrderDetailId && b.F_EqpUse == 7 && b.F_EqpId == item.F_Id)
.Select((a, b) => b.F_MouldNum).ToList().Sum() ?? 0;
if (F_MouldNum + cout > item.F_MoldingNum)
{
throw new Exception("使用数大于模块数,无法作业");
}
entity.F_MouldNum = F_MouldNum;
}
list.Add(entity);
}
var masterEqp = eqpList.Where(a => a.F_IsMaster == true).FirstOrDefault();
var useMaterial = uniwork.IQueryable(a => a.F_EqpId == masterEqp.F_Id && a.F_Num != a.F_DoneNum).ToList();
var sonMaterial = uniwork.IQueryable(a => a.F_MaterialId == detail.F_MaterialId && a.F_BomType == 1&&a.F_ProcessId==detail.F_ProcessId)
.Select(a => a.F_SonMaterialId).Distinct().ToList();
//判断有没有不相关的物料退回 模块使用中就无需转换物料
if (fixture == null && mould == null && useMaterial.Count != useMaterial.Where(a => sonMaterial.Contains(a.F_MaterialId)).Count())
{
throw new Exception("设备上有其他物料没有退回");
}
uniwork.BeginTrans();
if (mould == null && fixture == null)
{
List tempList = new List();
foreach (var material in useMaterial)
{
EqpMaterialUseEntity temp = new EqpMaterialUseEntity();
temp.F_Id = 0;
temp.F_CreatorTime = material.F_CreatorTime;
temp.F_CreatorUserId = material.F_CreatorUserId;
temp.F_CreatorUserName = material.F_CreatorUserName;
temp.F_Description = material.F_Description;
temp.F_Num = material.F_Num - material.F_DoneNum;
temp.F_DoneNum = 0;
temp.F_EnabledMark = true;
temp.F_EqpId = material.F_EqpId;
var eqp = await uniwork.FindEntity(temp.F_EqpId);
if (eqp != null)
{
temp.F_EqpName = eqp.F_EqpName;
}
temp.F_TransferBoxCode = material.F_TransferBoxCode;
temp.F_MaterialId = material.F_MaterialId;
temp.F_MaterialBatch = material.F_MaterialBatch;
temp.F_MaterialCode = material.F_MaterialCode;
temp.F_MaterialName = material.F_MaterialName;
temp.F_MaterialUnit = material.F_MaterialUnit;
temp.F_MaterialType = material.F_MaterialType;
temp.F_WorkOrderId = detail.F_WorkOrderId;
temp.F_WorkOrderCode = detail.F_WorkOrderCode;
temp.F_WorkOrderRunSort = detail.F_RunSort;
temp.F_ProcessId = detail.F_ProcessId;
temp.F_ProcessName = detail.F_ProcessName;
temp.F_LocationCode = material.F_LocationCode;
tempList.Add(temp);
}
//批量更新使用记录
await uniwork.Update(a => a.F_EqpId == masterEqp.F_Id && a.F_Num != a.F_DoneNum, a => new EqpMaterialUseEntity
{
F_Num = a.F_DoneNum,
});
await uniwork.Delete(a => a.F_Num == a.F_DoneNum && a.F_Num == 0);
await uniwork.Insert(tempList);
}
else
{
List tempList = new List();
foreach (var material in useMaterial.Where(a => sonMaterial.Contains(a.F_MaterialId)))
{
EqpMaterialUseEntity temp = new EqpMaterialUseEntity();
temp.F_Id = 0;
temp.F_CreatorTime = material.F_CreatorTime;
temp.F_CreatorUserId = material.F_CreatorUserId;
temp.F_CreatorUserName = material.F_CreatorUserName;
temp.F_Description = material.F_Description;
temp.F_Num = material.F_Num - material.F_DoneNum;
temp.F_DoneNum = 0;
temp.F_EnabledMark = true;
temp.F_EqpId = material.F_EqpId;
var eqp = await uniwork.FindEntity(temp.F_EqpId);
if (eqp != null)
{
temp.F_EqpName = eqp.F_EqpName;
}
temp.F_TransferBoxCode = material.F_TransferBoxCode;
temp.F_MaterialId = material.F_MaterialId;
temp.F_MaterialBatch = material.F_MaterialBatch;
temp.F_MaterialCode = material.F_MaterialCode;
temp.F_MaterialName = material.F_MaterialName;
temp.F_MaterialUnit = material.F_MaterialUnit;
temp.F_MaterialType = material.F_MaterialType;
temp.F_WorkOrderId = detail.F_WorkOrderId;
temp.F_WorkOrderCode = detail.F_WorkOrderCode;
temp.F_WorkOrderRunSort = detail.F_RunSort;
temp.F_ProcessId = detail.F_ProcessId;
temp.F_ProcessName = detail.F_ProcessName;
temp.F_LocationCode = material.F_LocationCode;
tempList.Add(temp);
}
//批量更新使用记录
await uniwork.Update(a => a.F_EqpId == masterEqp.F_Id && a.F_Num != a.F_DoneNum && sonMaterial.Contains(a.F_MaterialId), a => new EqpMaterialUseEntity
{
F_Num = a.F_DoneNum,
});
await uniwork.Delete(a => a.F_Num == a.F_DoneNum && a.F_Num == 0);
await uniwork.Insert(tempList);
}
await uniwork.Delete(a => a.F_WorkOrderDetailId == keyValue);
await uniwork.Insert(list);
//新增值班时间
foreach (var item in useList)
{
var timeEntity = uniwork.IQueryable().Where(a => a.F_StartTime >= item.F_StartTime && item.F_StartTime <= item.F_EndTime && a.F_UserId == item.F_UserId).FirstOrDefault();
if (timeEntity == null)
{
item.F_Id = 0;
timeEntity = await uniwork.Insert(item);
}
var band = new WorkDetailTimeBandingEntity();
band.F_Id = 0;
band.F_WorkOrderDetailId = keyValue;
band.F_EqpWorkTimeId = timeEntity.F_Id;
await uniwork.Insert(band);
}
if (workdetail.F_WorkOrderState != 2)
{
//创建任务
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 5;
jobEntity.F_NeedId = keyValue;
jobEntity.F_Priority = 1;
jobEntity.F_NeedEqpId = masterEqp.F_Id;
jobEntity.F_NeedNum = detail.F_PlanNum;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + 0;
jobEntity.F_JobInfo = "工单作业,工单号为" + detail.F_WorkOrderCode + ",第" + detail.F_RunSort + "工序为" + detail.F_ProcessName + "的工单开始作业。";
await jobApp.SubmitForm(jobEntity);
}
await uniwork.Update(a => a.F_Id == keyValue, a => new WorkOrderDetailEntity
{
F_RealStartTime = now,
F_WorkOrderState = 1
});
await uniwork.Update(a => a.F_Id == detail.F_WorkOrderId && a.F_RealStartTime == null, a => new WorkOrderEntity
{
F_WorkOrderState = 1,
F_RealStartTime = now
});
//更新设备状态
await uniwork.Update(a => ids.Contains(a.F_Id) &&a.F_EqpState == 0, a => new EquipmentEntity
{
F_EqpState=1
});
uniwork.Commit();
}
public async Task OverForm(string keyValue)
{
var detail = await repository.FindEntity(keyValue);
uniwork.BeginTrans();
await repository.Update(a => a.F_Id == keyValue&&a.F_WorkOrderState<=1, a => new WorkOrderDetailEntity
{
F_WorkOrderState = 2,
F_LastModifyUserId =currentuser.UserId,
F_LastModifyTime =DateTime.Now,
F_RealEndTime=DateTime.Now
});
var query= uniwork.IQueryable(a => a.F_WorkOrderId == detail.F_WorkOrderId&&a.F_EnabledMark==true&&a.F_DeleteMark==false);
var eqp = uniwork.IQueryable(a=> a.F_WorkOrderDetailId == keyValue && a.F_IsMaster == true).Select(a => a.F_EqpId).FirstOrDefault();
if (query.Count() == query.Where(a=>a.F_WorkOrderState==2).Count())
{
await uniwork.Update(a => a.F_Id == detail.F_WorkOrderId && a.F_WorkOrderState <= 1, a => new WorkOrderEntity
{
F_WorkOrderState = 2,
F_LastModifyUserId = currentuser.UserId,
F_LastModifyTime = DateTime.Now,
F_RealEndTime = DateTime.Now,
});
}
//更新设备状态 排除在用设备
var ids = uniwork.IQueryable(a => a.F_WorkOrderDetailId == keyValue).Select(a => a.F_EqpId).ToList();
var eqps = uniwork.IQueryable(a => a.F_WorkOrderState == 1).InnerJoin((a, b) => a.F_Id == b.F_WorkOrderDetailId).Select((a, b) => b.F_EqpId).ToList();
await uniwork.Update(a => ids.Contains(a.F_Id) && !eqps.Contains(a.F_Id) && a.F_EqpState == 1, a => new EquipmentEntity
{
F_EqpState = 0
});
var jobstart= await uniwork.FindEntity(a => a.F_NeedId == detail.F_Id && a.F_JobType == 5 && a.F_JobState < 2);
if (jobstart != null)
{
await jobApp.FinishJob(jobstart.F_Id);
}
var job = await uniwork.FindEntity(a => a.F_NeedId == detail.F_Id && a.F_JobType == 6 && a.F_JobState < 2);
if (job != null)
{
await jobApp.FinishJob(job.F_Id);
}
var jobs = uniwork.IQueryable(a => a.F_NeedEqpId == eqp && (a.F_JobType == 0 || a.F_JobType == 7) && a.F_JobState < 2).Select(a => a.F_Id).ToList();
foreach (var item in jobs)
{
await jobApp.FinishJob(item);
}
uniwork.Commit();
}
#endregion
}
}