EasyMES/WaterCloud.Service/ProcessManage/WorkOrderRunService.cs
2022-10-20 17:12:54 +08:00

563 lines
29 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 创 建:超级管理员
/// 日 期2020-12-07 12:14
/// 描 述:工单作业服务类
/// </summary>
public class WorkOrderRunService : DataFilterService<WorkOrderDetailEntity>, 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<List<WorkOrderDetailExtend>> GetLookList(SoulPage<WorkOrderDetailExtend> pagination, string keyword = "", string id = "")
{
//反格式化显示只能用"等于",其他不支持
Dictionary<string, Dictionary<string, string>> dic = new Dictionary<string, Dictionary<string, string>>();
var setList = await itemsApp.GetItemList("Mes_WorkOrderState");
Dictionary<string, string> stateTemp = new Dictionary<string, string>();
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<List<UserEntity>> GetWorkUser(string eqpId,string ids)
{
var query = uniwork.IQueryable<ControlJobUserBandingEntity>(a => (a.F_EqpId == eqpId || a.F_EqpId == null || a.F_EqpId == "") && a.F_JobType == 5)
.InnerJoin<UserEntity>((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<List<EqpMaterialUseEntity>> GetUseTransferList(string eqpName)
{
var data = uniwork.IQueryable<EqpMaterialUseEntity>(a => a.F_EqpName==eqpName&&a.F_DoneNum!=a.F_Num).OrderBy(a => a.F_TransferBoxCode).ToList();
return data;
}
public async Task<List<EquipmentEntity>> GetHaveUseEqpList(string keyword)
{
var eqps = uniwork.IQueryable<EqpMaterialUseEntity>(a => a.F_DoneNum != a.F_Num).GroupBy(a => a.F_EqpId).Select(a => a.F_EqpId)
.Distinct().ToList();
var data= uniwork.IQueryable<EquipmentEntity>(a => eqps.Contains(a.F_Id)).OrderBy(a => a.F_EqpName).ToList();
return data;
}
public async Task<List<EquipmentEntity>> GetHaveOutEqpList(string keyword)
{
var eqps = uniwork.IQueryable<OutPutInfoEntity>(a => a.F_IsTemp == true).GroupBy(a => a.F_EqpId).Select(a => a.F_EqpId)
.Distinct().ToList();
var data = uniwork.IQueryable<EquipmentEntity>(a => eqps.Contains(a.F_Id)).OrderBy(a => a.F_EqpName).ToList();
return data;
}
public async Task<List<OutPutInfoEntity>> GetOutTransferList(string eqpName)
{
var checkids = uniwork.IQueryable<NeedCheckEntity>(a => a.F_IsCheck == false && a.F_CheckType == 2).Select(a => a.F_SourceId).ToList();
var data = uniwork.IQueryable<OutPutInfoEntity>(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<OutPutInfoEntity>();
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<List<EquipmentEntity>> GetUsingEqpList(string keyword)
{
var query = uniwork.IQueryable<WorkOrderDetailEntity>(a=>a.F_WorkOrderState == 1)
.InnerJoin<WorkOrderDetailEqpBandingEntity>((a, b) => a.F_Id == b.F_WorkOrderDetailId && b.F_IsMaster == true)
.InnerJoin<EquipmentEntity>((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<List<WorkOrderDetailExtend>> GetListByOrder(string keyValue)
{
var query = GetQuery().Where(a => a.F_WorkOrderId == keyValue);
return query.OrderBy(a=>a.F_RunSort).ToList();
}
public async Task<List<EquipmentEntity>> GetAddList(string keyValue, string materialId, string ids)
{
if (!string.IsNullOrEmpty(materialId))
{
var query = uniwork.IQueryable<MaterialEqpBandingEntity>(a => a.F_MaterialId == materialId).InnerJoin<EquipmentEntity>((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<ProcessEqpBandingEntity>(a => a.F_ProcessId == keyValue).InnerJoin<EquipmentEntity>((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<WorkOrderDetailExtend> 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<WorkOrderDetailEqpBandingEntity>((a, b) => a.F_Id == b.F_WorkOrderDetailId)
.InnerJoin<EquipmentEntity>((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<OutPutInfoEntity>(a => a.F_WorkOrderDetailId == keyValue.ToString()).ToList();
data.list = data.list.OrderBy(a => a.F_LocationCode).ToList();
var bands = uniwork.IQueryable<WorkDetailTimeBandingEntity>(a => a.F_WorkOrderDetailId == data.F_Id).Select(a => a.F_EqpWorkTimeId).ToList();
if (bands!=null&& bands.Count>0)
{
data.userTimeList = uniwork.IQueryable<EqpWorkTimeEntity>(a =>bands.Contains(a.F_Id)).ToList();
}
return data;
}
private IQuery<WorkOrderDetailExtend> GetQuery()
{
//获取数据权限
var query = repository.IQueryable(a => a.F_DeleteMark == false).LeftJoin<MaterialEntity>((a, b) => a.F_MaterialId == b.F_Id)
.LeftJoin<UserEntity>((a,b,c)=>a.F_CreatorUserId==c.F_Id)
.LeftJoin<WorkOrderEntity>((a,b,c,d)=>a.F_WorkOrderId==d.F_Id)
.LeftJoin<WorkOrderDetailEqpBandingEntity>((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<BomFormEntity>().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<WorkOrderDetailProcessBandingEntity>();
//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<ProcessFlowEntity>((a, b, c) => b.F_ProcessId == c.F_Id)
.LeftJoin<EquipmentEntity>((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<List<WorkOrderDetailExtend>> 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<EquipmentEntity>();
var ids = eqpList.Select(a => a.F_Id).ToList();
var useList = userTimeList.ToList<EqpWorkTimeEntity>();
var temps = eqpList.Select(a => a.F_Id).ToList();
var mould = eqpList.Where(a => a.F_EqpUse == 7).FirstOrDefault();
var master = eqpList.Where(a => a.F_IsMaster == true).FirstOrDefault();
int mouldCount = 0;
if (master.F_EqpUse == 9 && eqpList.Where(a => a.F_EqpUse == 7).Count() == 0)
{
throw new Exception("热压设备必须带模具");
}
//检测设备有没有问题
if (eqpList.Count() != uniwork.IQueryable<EquipmentEntity>(a => ids.Contains(a.F_Id) && a.F_EqpState < 2).Count())
{
throw new Exception("设备状态不正常,无法创建工单");
}
if (mould != null)
{
var mouldEqp = await uniwork.FindEntity<EquipmentEntity>(mould.F_Id);
mouldCount = uniwork.IQueryable<WorkOrderDetailEqpBandingEntity>(a => mould.F_Id == a.F_EqpId)
.InnerJoin<WorkOrderDetailEntity>((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;
}
}
var fixture = eqpList.Where(a => a.F_EqpUse == 18).FirstOrDefault();
int count = uniwork.IQueryable<WorkOrderDetailEqpBandingEntity>(a => temps.Contains(a.F_EqpId))
.InnerJoin<WorkOrderDetailEntity>((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<WorkOrderDetailEntity>(a => a.F_Id == keyValue)
.InnerJoin<BomFormEntity>((a, b) => b.F_MaterialId == a.F_MaterialId && b.F_BomType == 1)
.InnerJoin<ProcessFlowEntity>((a, b, c) => b.F_ProcessId == c.F_Id)
.InnerJoin<WorkOrderEntity>((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<WorkOrderDetailProcessBandingEntity>((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<WorkOrderDetailEqpBandingEntity> list = new List<WorkOrderDetailEqpBandingEntity>();
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 (item.F_EqpUse == 7)
{
var cout = uniwork.IQueryable<WorkOrderDetailEntity>(a => a.F_WorkOrderState == 1 && a.F_Id != keyValue).InnerJoin<WorkOrderDetailEqpBandingEntity>((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<EqpMaterialUseEntity>(a => a.F_EqpId == masterEqp.F_Id && a.F_Num != a.F_DoneNum).ToList();
var sonMaterial = uniwork.IQueryable<BomFormEntity>(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<EqpMaterialUseEntity> tempList = new List<EqpMaterialUseEntity>();
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<EquipmentEntity>(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<EqpMaterialUseEntity>(a => a.F_EqpId == masterEqp.F_Id && a.F_Num != a.F_DoneNum, a => new EqpMaterialUseEntity
{
F_Num = a.F_DoneNum,
});
await uniwork.Delete<EqpMaterialUseEntity>(a => a.F_Num == a.F_DoneNum && a.F_Num == 0);
await uniwork.Insert(tempList);
}
else
{
List<EqpMaterialUseEntity> tempList = new List<EqpMaterialUseEntity>();
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<EquipmentEntity>(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<EqpMaterialUseEntity>(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<EqpMaterialUseEntity>(a => a.F_Num == a.F_DoneNum && a.F_Num == 0);
await uniwork.Insert(tempList);
}
await uniwork.Delete<WorkOrderDetailEqpBandingEntity>(a => a.F_WorkOrderDetailId == keyValue);
await uniwork.Insert(list);
//新增值班时间
foreach (var item in useList)
{
var timeEntity = uniwork.IQueryable<EqpWorkTimeEntity>().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<WorkOrderDetailEntity>(a => a.F_Id == keyValue, a => new WorkOrderDetailEntity
{
F_RealStartTime = now,
F_WorkOrderState = 1
});
await uniwork.Update<WorkOrderEntity>(a => a.F_Id == detail.F_WorkOrderId && a.F_RealStartTime == null, a => new WorkOrderEntity
{
F_WorkOrderState = 1,
F_RealStartTime = now
});
//更新设备状态
await uniwork.Update<EquipmentEntity>(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<WorkOrderDetailEntity>(a => a.F_WorkOrderId == detail.F_WorkOrderId&&a.F_EnabledMark==true&&a.F_DeleteMark==false);
var eqp = uniwork.IQueryable<WorkOrderDetailEqpBandingEntity>(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<WorkOrderEntity>(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<WorkOrderDetailEqpBandingEntity>(a => a.F_WorkOrderDetailId == keyValue).Select(a => a.F_EqpId).ToList();
var eqps = uniwork.IQueryable<WorkOrderDetailEntity>(a => a.F_WorkOrderState == 1).InnerJoin<WorkOrderDetailEqpBandingEntity>((a, b) => a.F_Id == b.F_WorkOrderDetailId).Select((a, b) => b.F_EqpId).ToList();
await uniwork.Update<EquipmentEntity>(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<ControlJobEntity>(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<ControlJobEntity>(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<ControlJobEntity>(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
}
}