2022-10-20 17:12:54 +08:00

1060 lines
56 KiB
C#
Raw Permalink 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.QualityManage;
using WaterCloud.Service.SystemManage;
using WaterCloud.Domain.MaterialManage;
using WaterCloud.Domain.ClassTask;
using WaterCloud.Service.ClassTask;
using System.Net.Http;
using WaterCloud.Domain.ProcessManage;
namespace WaterCloud.Service.QualityManage
{
/// <summary>
/// 创 建:超级管理员
/// 日 期2021-05-21 13:50
/// 描 述:质检单管理服务类
/// </summary>
public class NeedCheckService : DataFilterService<NeedCheckEntity>, IDenpendency
{
private ItemsDataService itemsApp;
private ControlJobService jobApp;
public NeedCheckService(IDbContext context, IHttpClientFactory httpClientFactory) : base(context)
{
itemsApp = new ItemsDataService(context);
jobApp = new ControlJobService(context, httpClientFactory);
}
#region
public async Task<List<NeedCheckEntity>> GetList(string keyword = "")
{
var data = repository.IQueryable();
if (!string.IsNullOrEmpty(keyword))
{
data = data.Where(t => t.F_TransferBoxCode.Contains(keyword)
|| t.F_MaterialCode.Contains(keyword)
|| t.F_MaterialName.Contains(keyword));
}
return data.OrderByDesc(t => t.F_CreatorTime).ToList();
}
public async Task<List<NeedCheckEntity>> GetLookList(string keyword = "")
{
var query = repository.IQueryable();
if (!string.IsNullOrEmpty(keyword))
{
//此处需修改
query = query.Where(t => t.F_TransferBoxCode.Contains(keyword)
|| t.F_MaterialCode.Contains(keyword)
|| t.F_MaterialName.Contains(keyword));
}
//权限过滤
query = GetDataPrivilege("u", "", query);
return query.OrderByDesc(t => t.F_CreatorTime).ToList();
}
public async Task<List<NeedCheckEntity>> GetLookList(SoulPage<NeedCheckEntity> pagination, int timetype, string keyword = "", long id = 0)
{
//反格式化显示只能用"等于",其他不支持
Dictionary<string, Dictionary<string, string>> dic = new Dictionary<string, Dictionary<string, string>>();
var setList = await itemsApp.GetItemList("Mes_MaterialType");
Dictionary<string, string> stateTemp = new Dictionary<string, string>();
foreach (var item in setList)
{
stateTemp.Add(item.F_ItemName, item.F_ItemCode);
}
dic.Add("F_MaterialType", stateTemp);
Dictionary<string, string> typeTemp = new Dictionary<string, string>();
var typeList = await itemsApp.GetItemList("Mes_CheckType");
foreach (var item in typeList)
{
typeTemp.Add(item.F_ItemName, item.F_ItemCode);
}
dic.Add("F_CheckType", typeTemp);
pagination = ChangeSoulData(dic, pagination);
DateTime startTime = DateTime.Now.ToString("yyyy-MM-dd").ToDate();
DateTime endTime = DateTime.Now.ToString("yyyy-MM-dd").ToDate().AddDays(1);
switch (timetype)
{
case 1:
break;
case 2:
startTime = startTime.AddDays(-7);
break;
case 3:
startTime = startTime.AddMonths(-1);
break;
case 4:
startTime = startTime.AddMonths(-2);
break;
default:
break;
}
var query = IQueryable().Where(t => t.F_CreatorTime >= startTime && t.F_CreatorTime <= endTime);
if (!string.IsNullOrEmpty(keyword))
{
query = query.Where(t => t.F_TransferBoxCode.Contains(keyword)
|| t.F_MaterialCode.Contains(keyword)
|| t.F_MaterialName.Contains(keyword));
}
if (id != 0)
{
query = query.Where(u => u.F_Id == id);
}
//权限过滤
query = GetDataPrivilege("u", "", query);
return await repository.OrderList(query, pagination);
}
private IQuery<NeedCheckEntity> IQueryable()
{
var storage = uniwork.IQueryable<ScapMaterialEntity>().GroupBy(a => a.F_CheckId).Select(a => new { a.F_CheckId, F_ScapNum = Sql.Sum(a.F_ScapNum), F_ReturnNum = Sql.Sum(a.F_ReturnNum), F_OtherNum = Sql.Sum(a.F_Num - a.F_ScapNum - a.F_ReturnNum), F_Num = Sql.Sum(a.F_Num) });
var query = repository.IQueryable().LeftJoin(storage, (a, b) => a.F_Id == b.F_CheckId)
.Select((a, b) => new NeedCheckEntity
{
F_CheckType = a.F_CheckType,
F_CreatorTime = a.F_CreatorTime,
F_Description = a.F_Description,
F_EqpId = a.F_EqpId,
F_EqpName = a.F_EqpName,
F_FinishTime = a.F_FinishTime,
F_Id = a.F_Id,
F_IsCheck = a.F_IsCheck,
F_IsNeedTwoCheck = a.F_IsNeedTwoCheck,
F_IsTwoCheck = a.F_IsTwoCheck,
F_LocationCode = a.F_LocationCode,
F_MaterialBatch = a.F_MaterialBatch,
F_MaterialCode = a.F_MaterialCode,
F_MaterialId = a.F_MaterialId,
F_MaterialName = a.F_MaterialName,
F_MaterialType = a.F_MaterialType,
F_MaterialUnit = a.F_MaterialUnit,
F_Num = a.F_Num,
F_OtherNum = b.F_CheckId == null ? 0 : b.F_OtherNum,
F_ReturnNum = b.F_CheckId == null ? 0 : b.F_ReturnNum,
F_ScapNum = b.F_CheckId == null ? 0 : b.F_ScapNum,
F_SourceId = a.F_SourceId,
F_TransferBoxCode = a.F_TransferBoxCode,
F_TwoFinishTime = a.F_TwoFinishTime
});
return query;
}
public async Task<List<NeedCheckEntity>> GetUnCheckList()
{
var data = repository.IQueryable(a => a.F_IsCheck == false);
return data.OrderBy(t => t.F_Id).ToList();
}
public async Task<NeedCheckEntity> GetForm(long keyValue)
{
var data = await repository.FindEntity(keyValue);
return data;
}
public async Task<NeedCheckEntity> GetUnDoneForm(string code)
{
var data = await repository.FindEntity(a => a.F_TransferBoxCode == code && a.F_IsCheck == false);
if (data != null)
{
data.F_ScapNum = uniwork.IQueryable<ScapMaterialEntity>(a => a.F_CheckId == data.F_Id).Sum(a => a.F_Num) ?? 0;
}
return data;
}
public async Task<NeedCheckEntity> GetInfoByCode(string code)
{
//判断物料是否设备需要
var storage = uniwork.IQueryable<StorageEntity>(a => a.F_TransferBoxCode == code).FirstOrDefault();
NeedCheckEntity entity = new NeedCheckEntity();
//区分库存检验和入库绑定检验和产出绑定检验、物料领用检验
if (storage != null)
{
entity.F_MaterialBatch = storage.F_MaterialBatch;
entity.F_MaterialCode = storage.F_MaterialCode;
entity.F_MaterialName = storage.F_MaterialName;
entity.F_CheckType = 3;
entity.F_Num = storage.F_Num;
return entity;
}
var inbanding = uniwork.IQueryable<InStorageInfoEntity>(a => a.F_TransferBoxCode == code && a.F_IsTemp == true).ToList();
if (inbanding != null && inbanding.Count() > 0)
{
entity = inbanding[0].MapTo<NeedCheckEntity>();
entity.F_CheckType = 0;
entity.F_Num = inbanding.Sum(a => a.F_Num);
foreach (var item in inbanding)
{
entity.F_Num -= uniwork.IQueryable<NeedCheckEntity>(a => a.F_TransferBoxCode == item.F_TransferBoxCode && a.F_CheckType == 0 && a.F_SourceId == item.F_Id.ToString()).InnerJoin<ScapMaterialEntity>((a, b) => a.F_Id == b.F_CheckId).Select((a, b) => b).Sum(a => a.F_Num) ?? 0;
}
return entity;
}
var outbanding = uniwork.IQueryable<OutPutInfoEntity>(a => a.F_TransferBoxCode == code && a.F_IsTemp == true).ToList();
if (outbanding != null && outbanding.Count() > 0)
{
entity = outbanding[0].MapTo<NeedCheckEntity>();
entity.F_CheckType = 2;
entity.F_Num = outbanding.Sum(a => a.F_Num);
foreach (var item in outbanding)
{
entity.F_Num -= uniwork.IQueryable<NeedCheckEntity>(a => a.F_TransferBoxCode == item.F_TransferBoxCode && a.F_CheckType == 2 && a.F_SourceId == item.F_Id.ToString()).InnerJoin<ScapMaterialEntity>((a, b) => a.F_Id == b.F_CheckId).Select((a, b) => b).Sum(a => a.F_Num) ?? 0;
}
var otherdata = uniwork.IQueryable<ScapMaterialReturnEntity>(a => a.F_IsProduce == true && a.F_MaterialId == entity.F_MaterialId && a.F_TransferBoxCode == code).ToList();
if (otherdata.Count > 0)
{
entity.F_Num += otherdata.Sum(a => a.F_Num) ?? 0;
}
return entity;
}
var eqpUse = uniwork.IQueryable<EqpMaterialUseEntity>(a => a.F_TransferBoxCode == code && a.F_Num != a.F_DoneNum).FirstOrDefault();
if (eqpUse != null)
{
entity = eqpUse.MapTo<NeedCheckEntity>();
entity.F_CheckType = 1;
entity.F_Num = eqpUse.F_Num - eqpUse.F_DoneNum;
return entity;
}
throw new Exception($"流转箱{code}不存在物料,请检查");
}
#endregion
public async Task<NeedCheckEntity> GetLookForm(long keyValue)
{
var data = await repository.FindEntity(keyValue);
if (data != null)
{
data.list = uniwork.IQueryable<ScapMaterialEntity>(a => a.F_CheckId == data.F_Id).ToList();
data.F_ScapNum = data.list.Sum(a => a.F_Num);
}
return GetFieldsFilterData(data);
}
public async Task<NeedCheckEntity> GetCheckEntity(string code, string sourceId, int? type = null)
{
var data = repository.IQueryable(a => a.F_TransferBoxCode == code && a.F_SourceId == sourceId).ToList();
if (type != null)
{
data = repository.IQueryable(a => a.F_TransferBoxCode == code && a.F_SourceId == sourceId && a.F_CheckType == type).ToList();
}
var entity = data.FirstOrDefault();
if (data != null && data.Count() > 0)
{
var ids = data.Select(a => a.F_Id).ToList();
entity.list = uniwork.IQueryable<ScapMaterialEntity>(a => ids.Contains(a.F_CheckId ?? 0)).ToList();
entity.F_ScapNum = entity.list.Sum(a => a.F_Num);
}
return entity;
}
public async Task<List<MaterialEntity>> GetBadMaterialList(string keyword)
{
var storage = uniwork.IQueryable<ScapMaterialEntity>().GroupBy(a => a.F_MaterialId).Select(a => new { a.F_MaterialId, F_ScapNum = Sql.Sum(a.F_ScapNum), F_ReturnNum = Sql.Sum(a.F_ReturnNum), F_OtherNum = Sql.Sum(a.F_Num - a.F_ScapNum - a.F_ReturnNum), F_Num = Sql.Sum(a.F_Num) });
var list = uniwork.IQueryable<MaterialEntity>(a => a.F_DeleteMark == false && a.F_EnabledMark == true).LeftJoin(storage, (a, b) => b.F_MaterialId == a.F_Id)
.Select((a, b) => new MaterialEntity
{
F_Id = a.F_Id,
F_Customer = a.F_Customer,
F_CreatorTime = a.F_CreatorTime,
F_MaterialBy = a.F_MaterialBy,
F_MaterialCode = a.F_MaterialCode,
F_MaterialDescription = a.F_MaterialDescription,
F_MaterialName = a.F_MaterialName,
F_MaterialPic = a.F_MaterialPic,
F_MaterialSize = a.F_MaterialSize,
F_MaterialType = a.F_MaterialType,
F_MaterialUnit = a.F_MaterialUnit,
F_ModelRefer = a.F_ModelRefer,
F_WarmNum = a.F_WarmNum,
F_Num = b.F_MaterialId == null ? 0 : b.F_Num,
F_StorageNum = b.F_MaterialId == null ? 0 : b.F_OtherNum,
F_DoneNum = b.F_MaterialId == null ? 0 : b.F_ScapNum,
F_ReturnNum = b.F_MaterialId == null ? 0 : b.F_ReturnNum
});
if (!string.IsNullOrEmpty(keyword))
{
list = list.Where(u => u.F_MaterialCode.Contains(keyword) || u.F_MaterialName.Contains(keyword));
}
return list.OrderBy("F_MaterialType desc,F_MaterialCode asc").ToList();
}
#region
public async Task SubmitForm(NeedCheckEntity entity, long keyValue)
{
if (keyValue == 0)
{
//初始值添加
entity.F_Id = 0;
entity.F_CreatorTime = DateTime.Now;
await repository.Insert(entity);
}
else
{
//此处需修改
entity.F_Id = keyValue;
await repository.Update(entity);
}
}
public async Task DeleteForm(string keyValue)
{
var ids = keyValue.Split(',');
await repository.Delete(t => ids.Contains(t.F_Id.ToString()));
}
//检验申请
public async Task NeedCheckJob(string transferBoxCode)
{
//区分入库检验、领用检验、产出检验、库存检验和出库检验
NeedCheckEntity check = uniwork.IQueryable<NeedCheckEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_IsCheck == false).FirstOrDefault();
if (check != null)
{
throw new Exception($"流转箱编号{transferBoxCode},已有检验任务");
}
uniwork.BeginTrans();
var inbanding = uniwork.IQueryable<InStorageInfoEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_IsTemp == true).ToList();
if (inbanding != null && inbanding.Count() > 0)
{
//创建入库检验单,创建调度任务
check = new NeedCheckEntity();
check.F_Id = 0;
check.F_SourceId = inbanding[0].F_Id.ToString();
check.F_CreatorTime = DateTime.Now;
check.F_CheckType = 0;
check.F_IsCheck = false;
check.F_IsNeedTwoCheck = false;
check.F_IsTwoCheck = false;
check.F_MaterialBatch = inbanding[0].F_MaterialBatch;
check.F_MaterialCode = inbanding[0].F_MaterialCode;
check.F_MaterialId = inbanding[0].F_MaterialId;
check.F_MaterialName = inbanding[0].F_MaterialName;
check.F_MaterialType = inbanding[0].F_MaterialType;
check.F_MaterialUnit = inbanding[0].F_MaterialUnit;
check.F_TransferBoxCode = transferBoxCode;
var scapenum = uniwork.IQueryable<NeedCheckEntity>(a => a.F_SourceId == check.F_SourceId && a.F_CheckType == 0 && a.F_TransferBoxCode == check.F_TransferBoxCode)
.InnerJoin<ScapMaterialEntity>((a, b) => a.F_Id == b.F_CheckId).Select((a, b) => b).Sum(a => a.F_Num) ?? 0;
if (scapenum == inbanding.Sum(a => a.F_Num))
{
throw new Exception($"流转箱编号{transferBoxCode}已没有料可以质检");
}
check.F_Num = (inbanding.Sum(a => a.F_Num) ?? 0) - scapenum;
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 8;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + 0;
jobEntity.F_JobInfo = "常规检验-入库检验," + "流转箱编号为" + check.F_TransferBoxCode + ",物料编号为" + check.F_MaterialCode + ",名称为" + check.F_MaterialName + "的物料进行检验。";
jobEntity.F_JobInfo += "数量为" + check.F_Num;
await jobApp.SubmitForm(jobEntity);
await uniwork.Insert(check);
uniwork.Commit();
return;
}
var eqpUse = uniwork.IQueryable<EqpMaterialUseEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_Num != a.F_DoneNum).FirstOrDefault();
if (eqpUse != null)
{
//创建领用检验单,创建调度任务
check = new NeedCheckEntity();
check.F_Id = 0;
check.F_SourceId = eqpUse.F_Id.ToString();
check.F_CreatorTime = DateTime.Now;
check.F_CheckType = 1;
check.F_IsCheck = false;
check.F_IsNeedTwoCheck = false;
check.F_IsTwoCheck = false;
check.F_EqpId = eqpUse.F_EqpId;
check.F_EqpName = eqpUse.F_EqpName;
check.F_MaterialBatch = eqpUse.F_MaterialBatch;
check.F_MaterialCode = eqpUse.F_MaterialCode;
check.F_MaterialId = eqpUse.F_MaterialId;
check.F_MaterialName = eqpUse.F_MaterialName;
check.F_MaterialType = eqpUse.F_MaterialType;
check.F_MaterialUnit = eqpUse.F_MaterialUnit;
check.F_Num = eqpUse.F_Num - eqpUse.F_DoneNum;
check.F_TransferBoxCode = transferBoxCode;
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 8;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_NeedEqpId = check.F_EqpId;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + 0;
jobEntity.F_JobInfo = "常规检验-领用检验," + "设备名称为" + check.F_EqpName + ",流转箱编号为" + check.F_TransferBoxCode + ",物料编号为" + check.F_MaterialCode + ",名称为" + check.F_MaterialName + "的物料进行检验。";
jobEntity.F_JobInfo += "数量为" + check.F_Num;
await jobApp.SubmitForm(jobEntity);
await uniwork.Insert(check);
uniwork.Commit();
return;
}
var outbanding = uniwork.IQueryable<OutPutInfoEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_IsTemp == true).ToList();
if (outbanding != null && outbanding.Count() > 0)
{
//关闭上架任务
var job = uniwork.IQueryable<ControlJobEntity>(a => a.F_NeedId == transferBoxCode && a.F_NeedEqpId == outbanding[0].F_EqpId && a.F_JobType == 3 && a.F_JobState < 2).FirstOrDefault();
if (job != null)
{
await jobApp.CloseJob(job.F_Id);
}
//创建产出检验单,创建调度任务
check = new NeedCheckEntity();
check.F_Id = 0;
check.F_SourceId = outbanding[0].F_Id.ToString();
check.F_CreatorTime = DateTime.Now;
check.F_CheckType = 2;
check.F_IsCheck = false;
check.F_IsNeedTwoCheck = false;
check.F_IsTwoCheck = false;
check.F_EqpId = outbanding[0].F_EqpId;
check.F_EqpName = outbanding[0].F_EqpName;
check.F_MaterialBatch = outbanding[0].F_MaterialBatch;
check.F_MaterialCode = outbanding[0].F_MaterialCode;
check.F_MaterialId = outbanding[0].F_MaterialId;
check.F_MaterialName = outbanding[0].F_MaterialName;
check.F_MaterialType = outbanding[0].F_MaterialType;
check.F_MaterialUnit = outbanding[0].F_MaterialUnit;
check.F_TransferBoxCode = transferBoxCode;
var scapenum = uniwork.IQueryable<NeedCheckEntity>(a => a.F_SourceId == check.F_SourceId && a.F_CheckType == 2 && a.F_TransferBoxCode == check.F_TransferBoxCode)
.InnerJoin<ScapMaterialEntity>((a, b) => a.F_Id == b.F_CheckId).Select((a, b) => b).Sum(a => a.F_Num) ?? 0;
if (scapenum == outbanding.Sum(a => a.F_Num))
{
throw new Exception($"流转箱编号{transferBoxCode}已没有料可以质检");
}
check.F_Num = outbanding.Sum(a => a.F_Num) ?? 0;
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 8;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_NeedEqpId = check.F_EqpId;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + 0;
jobEntity.F_JobInfo = "常规检验-产出检验," + "设备名称为" + check.F_EqpName + ",流转箱编号为" + check.F_TransferBoxCode + ",物料编号为" + check.F_MaterialCode + ",名称为" + check.F_MaterialName + "的物料进行检验。";
jobEntity.F_JobInfo += "数量为" + check.F_Num;
await jobApp.SubmitForm(jobEntity);
await uniwork.Insert(check);
uniwork.Commit();
return;
}
var outstorage = uniwork.IQueryable<OutStorageInfoEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_IsTemp == true).ToList();
if (outstorage != null && outstorage.Count() > 0)
{
//关闭装箱任务
var job = await uniwork.FindEntity<ControlJobEntity>(a => a.F_NeedId == transferBoxCode && a.F_JobType == 11 && a.F_JobState < 2);
if (job != null)
{
await jobApp.CloseJob(job.F_Id);
}
//创建产出检验单,创建调度任务
check = new NeedCheckEntity();
check.F_Id = 0;
check.F_SourceId = outbanding[0].F_Id.ToString();
check.F_CreatorTime = DateTime.Now;
check.F_CheckType = 4;
check.F_IsCheck = false;
check.F_IsNeedTwoCheck = false;
check.F_IsTwoCheck = false;
check.F_MaterialBatch = outstorage[0].F_MaterialBatch;
check.F_MaterialCode = outstorage[0].F_MaterialCode;
check.F_MaterialId = outstorage[0].F_MaterialId;
check.F_MaterialName = outstorage[0].F_MaterialName;
check.F_MaterialType = outstorage[0].F_MaterialType;
check.F_MaterialUnit = outstorage[0].F_MaterialUnit;
check.F_Num = outstorage.Sum(a => a.F_Num) ?? 0;
check.F_TransferBoxCode = transferBoxCode;
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 8;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_NeedEqpId = check.F_EqpId;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + 0;
jobEntity.F_JobInfo = "常规检验-出库检验," + "设备名称为" + check.F_EqpName + ",流转箱编号为" + check.F_TransferBoxCode + ",物料编号为" + check.F_MaterialCode + ",名称为" + check.F_MaterialName + "的物料进行检验。";
jobEntity.F_JobInfo += "数量为" + check.F_Num;
await jobApp.SubmitForm(jobEntity);
await uniwork.Insert(check);
uniwork.Commit();
return;
}
var storage = uniwork.IQueryable<StorageEntity>(a => a.F_TransferBoxCode == transferBoxCode).FirstOrDefault();
if (storage != null)
{
//创建库存检验单,创建调度任务
check = new NeedCheckEntity();
check.F_Id = 0;
check.F_SourceId = storage.F_Id.ToString();
check.F_CreatorTime = DateTime.Now;
check.F_CheckType = 3;
check.F_IsCheck = false;
check.F_IsNeedTwoCheck = false;
check.F_IsTwoCheck = false;
check.F_MaterialBatch = storage.F_MaterialBatch;
check.F_MaterialCode = storage.F_MaterialCode;
check.F_MaterialId = storage.F_MaterialId;
check.F_MaterialName = storage.F_MaterialName;
check.F_MaterialType = storage.F_MaterialType;
check.F_MaterialUnit = storage.F_MaterialUnit;
check.F_Num = storage.F_Num;
check.F_TransferBoxCode = transferBoxCode;
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 8;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + 0;
jobEntity.F_JobInfo = "常规检验-库存检验," + "流转箱编号为" + check.F_TransferBoxCode + ",物料编号为" + check.F_MaterialCode + ",名称为" + check.F_MaterialName + "的物料进行检验。";
jobEntity.F_JobInfo += "数量为" + check.F_Num;
await jobApp.SubmitForm(jobEntity);
await uniwork.Insert(check);
await uniwork.Update<StorageEntity>(a => a.F_Id == storage.F_Id, a => new StorageEntity
{
F_IsCheckout = false
});
uniwork.Commit();
return;
}
uniwork.Rollback();
throw new Exception($"流转箱{transferBoxCode}不存在物料,请检查");
}
//检验提交
public async Task CheckoutForm(string transferBoxCode, bool isCommit = true)
{
var check = await repository.FindEntity(a => a.F_TransferBoxCode == transferBoxCode && a.F_IsCheck == false);
check.F_IsCheck = true;
check.F_FinishTime = DateTime.Now;
var scaps = uniwork.IQueryable<ScapMaterialEntity>(a => a.F_CheckId == check.F_Id).ToList();
uniwork.BeginTrans();
int numcount = 0;
var count = scaps.Sum(a => a.F_Num);
check.F_IsNeedTwoCheck = true;
if (count > check.F_Num)
{
throw new Exception($"可疑数量不准确,请检查");
}
switch (check.F_CheckType)
{
case 0:
if (count != check.F_Num)
{
var job0 = uniwork.IQueryable<ControlJobEntity>(a => a.F_NeedId == check.F_TransferBoxCode && a.F_JobType == 10 && a.F_JobState < 2).FirstOrDefault();
if (job0 != null)
{
await uniwork.Update<ControlJobEntity>(a => a.F_NeedId == check.F_TransferBoxCode && a.F_JobType == 10 && a.F_JobState < 2, a => new ControlJobEntity
{
F_NeedNum = check.F_Num - count,
});
}
else
{
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 10;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num - count;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + numcount;
jobEntity.F_JobInfo = "入库上架," + "流转箱编号为" + check.F_TransferBoxCode + ",物料编号为" + check.F_MaterialCode + ",名称为" + check.F_MaterialName + "的物料进行上架。";
jobEntity.F_JobInfo += "数量为" + jobEntity.F_NeedNum;
await jobApp.SubmitForm(jobEntity);
numcount++;
}
}
else
{
await uniwork.Update<InStorageInfoEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode && a.F_IsTemp == true, a => new InStorageInfoEntity
{
F_IsTemp = false,
F_LocationCode = null,
F_CreatorTime = DateTime.Now,
F_CreatorUserId = currentuser.UserId,
F_CreatorUserName = currentuser.UserName
});
//更新容器
await uniwork.Update<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 1, a => new TransferBoxEntity
{
F_TransferState = 0
});
//删除临时容器
await uniwork.Delete<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 0 && a.F_IsTemp == true);
}
break;
case 1:
await uniwork.Update<EqpMaterialUseEntity>(a => a.F_Id.ToString() == check.F_SourceId && a.F_Num >= a.F_DoneNum + count, a => new EqpMaterialUseEntity
{
F_DoneNum = a.F_DoneNum + count
});
if (count == check.F_Num)
{
//更新容器
await uniwork.Update<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 3, a => new TransferBoxEntity
{
F_TransferState = 0
});
//删除临时容器
await uniwork.Delete<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 0 && a.F_IsTemp == true);
}
break;
case 2:
if (count != check.F_Num)
{
var job0 = uniwork.IQueryable<ControlJobEntity>(a => a.F_NeedId == check.F_TransferBoxCode && a.F_JobType == 3 && a.F_JobState < 2).FirstOrDefault();
if (job0 != null)
{
await uniwork.Update<ControlJobEntity>(a => a.F_NeedId == check.F_TransferBoxCode && a.F_JobType == 3 && a.F_JobState < 2, a => new ControlJobEntity
{
F_NeedNum = check.F_Num - count,
});
}
else
{
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 3;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_NeedEqpId = check.F_EqpId;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num - count;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + numcount;
jobEntity.F_JobInfo = "产出上架,设备为" + check.F_EqpName + ",流转箱为" + check.F_TransferBoxCode + "的产出物料进行上架。";
jobEntity.F_JobInfo += "数量为" + jobEntity.F_NeedNum;
await jobApp.SubmitForm(jobEntity);
numcount++;
//更新绑定时间,防止被自动退回
await uniwork.Update<OutPutInfoEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode && a.F_IsTemp == true, a => new OutPutInfoEntity
{
F_CreatorTime = DateTime.Now
});
}
}
else
{
await uniwork.Update<OutPutInfoEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode && a.F_IsTemp == true, a => new OutPutInfoEntity
{
F_IsTemp = false,
F_LocationCode = null,
F_CreatorTime = DateTime.Now,
F_CreatorUserId = currentuser.UserId,
F_CreatorUserName = currentuser.UserName
});
//更新容器
await uniwork.Update<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 1, a => new TransferBoxEntity
{
F_TransferState = 0
});
//删除临时容器
await uniwork.Delete<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 0 && a.F_IsTemp == true);
}
break;
case 3:
//减少库存
await uniwork.Update<StorageEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode && a.F_Num >= count, a => new StorageEntity
{
F_Num = a.F_Num - count,
F_IsCheckout = true
});
if (uniwork.IQueryable<StorageEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode && a.F_Num == 0).Count() > 0)
{
await uniwork.Delete<StorageEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode);
var transfer = await uniwork.FindEntity<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode);
//更新容器
await uniwork.Update<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 1, a => new TransferBoxEntity
{
F_TransferState = 0,
F_LocationCode = null
});
await uniwork.Update<LocationEntity>(a => a.F_LocationCode == transfer.F_LocationCode, a => new LocationEntity
{
F_LocationState = false
});
//删除临时容器
await uniwork.Delete<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 0 && a.F_IsTemp == true);
}
break;
case 4:
//减少库存
await uniwork.Update<StorageEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode && a.F_Num >= count, a => new StorageEntity
{
F_Num = a.F_Num - count,
F_IsCheckout = true
});
//扣减下架数量
var outlog = await uniwork.FindEntity<OutStorageInfoEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode && a.F_IsTemp == true);
await uniwork.Update<OutStorageInfoEntity>(a => a.F_Id == outlog.F_Id && a.F_IsTemp == true && a.F_Num >= count, a => new OutStorageInfoEntity
{
F_Num = a.F_Num - count,
});
await uniwork.Update<OutStorageEntity>(a => a.F_Id == outlog.F_OutStorageId && a.F_DoneNum >= count, a => new OutStorageEntity
{
F_OutStorageState = 1,
F_DoneNum = a.F_DoneNum - count,
});
//创建装箱任务
if (count != check.F_Num)
{
var job0 = uniwork.IQueryable<ControlJobEntity>(a => a.F_NeedId == check.F_TransferBoxCode && a.F_JobType == 11 && a.F_JobState < 2).FirstOrDefault();
if (job0 != null)
{
await uniwork.Update<ControlJobEntity>(a => a.F_NeedId == check.F_TransferBoxCode && a.F_JobType == 11 && a.F_JobState < 2, a => new ControlJobEntity
{
F_NeedNum = check.F_Num - count,
});
}
else
{
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 11;
jobEntity.F_NeedId = check.F_TransferBoxCode;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = check.F_Num - count;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + numcount;
jobEntity.F_JobInfo = "出库装箱," + "流转箱编号为" + check.F_TransferBoxCode + ",物料编号为" + check.F_MaterialCode + ",名称为" + check.F_MaterialName + "的物料进行出库。";
jobEntity.F_JobInfo += "数量为" + jobEntity.F_NeedNum;
await jobApp.SubmitForm(jobEntity);
numcount++;
}
}
else
{
await uniwork.Delete<OutStorageInfoEntity>(a => a.F_Id == outlog.F_Id && a.F_IsTemp == true && a.F_Num == 0);
await uniwork.Delete<StorageEntity>(a => a.F_TransferBoxCode == check.F_TransferBoxCode);
var transfer = await uniwork.FindEntity<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode);
//更新容器
await uniwork.Update<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 1, a => new TransferBoxEntity
{
F_TransferState = 0,
F_LocationCode = null
});
await uniwork.Update<LocationEntity>(a => a.F_LocationCode == transfer.F_LocationCode, a => new LocationEntity
{
F_LocationState = false
});
//删除临时容器
await uniwork.Delete<TransferBoxEntity>(a => a.F_TransferCode == check.F_TransferBoxCode && a.F_TransferState == 0 && a.F_IsTemp == true);
}
break;
}
await repository.Update(check);
await uniwork.Update<ScapMaterialEntity>(a => a.F_CheckId == check.F_Id, a => new ScapMaterialEntity
{
F_IsTemp = false
});
foreach (var item in scaps)
{
//创建调度任务
ControlJobEntity jobEntity = new ControlJobEntity();
jobEntity.F_JobType = 9;
jobEntity.F_NeedId = item.F_BatchCode;
jobEntity.F_Priority = 1;
jobEntity.F_NeedNum = 1;
jobEntity.F_JobCode = "CJ_" + DateTime.Now.ToString("yyyyMMddHHmmss") + numcount;
jobEntity.F_JobInfo = "二次检验," + "条码编号为" + item.F_BatchCode + ",物料编号为" + item.F_MaterialCode + ",名称为" + item.F_MaterialName + "的可疑物料进行检验。";
await jobApp.SubmitForm(jobEntity);
numcount++;
}
//关闭调度任务
var job = await uniwork.FindEntity<ControlJobEntity>(a => a.F_NeedId == check.F_TransferBoxCode && a.F_JobType == 8 && a.F_JobState < 2);
if (job != null)
{
await jobApp.FinishJob(job.F_Id);
}
if (isCommit)
{
uniwork.Commit();
}
}
//二次质检提交
public async Task TwoCheckoutForm(string batchCode, float? num = 0, int isBack = 0)
{
var scap = await uniwork.FindEntity<ScapMaterialEntity>(a => a.F_BatchCode == batchCode);
if (scap.F_IsCheck == true)
{
throw new Exception("可疑物料已经质检完成");
}
if (num <= 0)
{
throw new Exception("数量不能小于0,请检查");
}
if (scap.F_Num < scap.F_ReturnNum + scap.F_ScapNum + num)
{
throw new Exception("没有足够数量,请检查");
}
var check = await repository.FindEntity(scap.F_CheckId);
uniwork.BeginTrans();
if (isBack == 1)
{
await uniwork.Update<ScapMaterialEntity>(a => a.F_Id == scap.F_Id && a.F_Num >= a.F_ReturnNum + a.F_ScapNum + num, a => new ScapMaterialEntity
{
F_ScapNum = a.F_ScapNum + num,
});
}
else if (isBack == 2)
{
await uniwork.Update<ScapMaterialEntity>(a => a.F_Id == scap.F_Id && a.F_Num >= a.F_ReturnNum + a.F_ScapNum + num, a => new ScapMaterialEntity
{
F_ReturnNum = a.F_ReturnNum + num,
});
}
if (scap.F_Num == scap.F_ReturnNum + scap.F_ScapNum + num)
{
await uniwork.Update<ScapMaterialEntity>(a => a.F_Id == scap.F_Id && a.F_Num == a.F_ReturnNum + a.F_ScapNum, a => new ScapMaterialEntity
{
F_IsCheck = true,
});
//关闭调度任务
var job = await uniwork.FindEntity<ControlJobEntity>(a => a.F_NeedId == batchCode && a.F_JobType == 9 && a.F_JobState < 2);
if (job != null)
{
await jobApp.FinishJob(job.F_Id);
}
}
var list = uniwork.IQueryable<ScapMaterialEntity>(a => a.F_CheckId == check.F_Id).ToList();
if (list.Count() == list.Where(a => a.F_IsCheck == true).Count())
{
check.F_IsTwoCheck = true;
check.F_TwoFinishTime = DateTime.Now;
}
//报废增加不良数量
if (isBack == 1)
{
if (check.F_CheckType == 0)
{
var inid = uniwork.IQueryable<InStorageInfoEntity>(a => a.F_Id.ToString() == check.F_SourceId).Select(a => a.F_InStorageId).FirstOrDefault();
await uniwork.Update<InStorageEntity>(a => a.F_Id == inid && a.F_Num > a.F_BadNum + num, a => new InStorageEntity
{
F_BadNum = a.F_BadNum + num
});
}
if (check.F_CheckType == 2)
{
var output = uniwork.IQueryable<OutPutInfoEntity>(a => a.F_Id.ToString() == check.F_SourceId).FirstOrDefault();
await uniwork.Update<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderDetailEntity
{
F_BadNum = a.F_BadNum + num
});
var detail = await uniwork.FindEntity<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId);
var note = await uniwork.FindEntity<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId);
if (detail.F_MaterialId == note.F_MaterialId)
{
await uniwork.Update<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderEntity
{
F_BadNum = a.F_BadNum + num
});
}
}
else
{
var output = GetOuputByStorage(check.F_TransferBoxCode, check.F_MaterialId, check.F_MaterialBatch);
if (output != null)
{
await uniwork.Update<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderDetailEntity
{
F_BadNum = a.F_BadNum + num
});
var detail = await uniwork.FindEntity<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId);
var note = await uniwork.FindEntity<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId);
if (detail.F_MaterialId == note.F_MaterialId)
{
await uniwork.Update<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderEntity
{
F_BadNum = a.F_BadNum + num
});
}
}
else
{
var inid = GetInStorageByStorage(check.F_TransferBoxCode, check.F_MaterialId, check.F_MaterialBatch);
if (inid != null)
{
await uniwork.Update<InStorageEntity>(a => a.F_Id == inid.F_InStorageId && a.F_DoneNum >= a.F_BadNum + num, a => new InStorageEntity
{
F_BadNum = a.F_BadNum + num
});
}
}
}
}
await uniwork.Update(check);
uniwork.Commit();
}
//可疑变动状态
public async Task ChangeScapState(string batchCode, float? num = 0, int isBack = 0)
{
var scap = await uniwork.FindEntity<ScapMaterialEntity>(a => a.F_BatchCode == batchCode);
if (scap.F_IsCheck == false)
{
throw new Exception("可疑物料未质检,无法操作");
}
if (scap.F_Num < scap.F_ReturnNum + scap.F_ScapNum + num)
{
throw new Exception("没有足够数量,请检查");
}
var check = await repository.FindEntity(scap.F_CheckId);
uniwork.BeginTrans();
if (isBack == 1)
{
await uniwork.Update<ScapMaterialEntity>(a => a.F_Id == scap.F_Id && a.F_Num >= a.F_ReturnNum + a.F_ScapNum + num, a => new ScapMaterialEntity
{
F_ScapNum = a.F_ScapNum + num,
});
}
else if (isBack == 2)
{
await uniwork.Update<ScapMaterialEntity>(a => a.F_Id == scap.F_Id && a.F_Num >= a.F_ReturnNum + a.F_ScapNum + num, a => new ScapMaterialEntity
{
F_ReturnNum = a.F_ScapNum + num,
});
}
//报废增加不良数量
if (isBack == 1)
{
if (check.F_CheckType == 0)
{
var inid = uniwork.IQueryable<InStorageInfoEntity>(a => a.F_Id.ToString() == check.F_SourceId).Select(a => a.F_InStorageId).FirstOrDefault();
await uniwork.Update<InStorageEntity>(a => a.F_Id == inid && a.F_Num > a.F_BadNum + num, a => new InStorageEntity
{
F_BadNum = a.F_BadNum + num
});
}
if (check.F_CheckType == 2)
{
var output = uniwork.IQueryable<OutPutInfoEntity>(a => a.F_Id.ToString() == check.F_SourceId).FirstOrDefault();
await uniwork.Update<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderDetailEntity
{
F_BadNum = a.F_BadNum + num
});
var detail = await uniwork.FindEntity<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId);
var note = await uniwork.FindEntity<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId);
if (detail.F_MaterialId == note.F_MaterialId)
{
await uniwork.Update<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderEntity
{
F_BadNum = a.F_BadNum + num
});
}
}
else
{
var output = GetOuputByStorage(check.F_TransferBoxCode, check.F_MaterialId, check.F_MaterialBatch);
if (output != null)
{
await uniwork.Update<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderDetailEntity
{
F_BadNum = a.F_BadNum + num
});
var detail = await uniwork.FindEntity<WorkOrderDetailEntity>(a => a.F_Id == output.F_WorkOrderDetailId);
var note = await uniwork.FindEntity<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId);
if (detail.F_MaterialId == note.F_MaterialId)
{
await uniwork.Update<WorkOrderEntity>(a => a.F_Id == output.F_WorkOrderId && a.F_DoneNum >= a.F_BadNum + num, a => new WorkOrderEntity
{
F_BadNum = a.F_BadNum + num
});
}
}
else
{
var inid = GetInStorageByStorage(check.F_TransferBoxCode, check.F_MaterialId, check.F_MaterialBatch);
if (inid != null)
{
await uniwork.Update<InStorageEntity>(a => a.F_Id == inid.F_InStorageId && a.F_DoneNum >= a.F_BadNum + num, a => new InStorageEntity
{
F_BadNum = a.F_BadNum + num
});
}
}
}
}
uniwork.Commit();
}
private OutPutInfoEntity GetOuputByStorage(string transferBoxCode, string materialId, string materialBatch, string F_WorkOrderDetailId = "")
{
var output = uniwork.IQueryable<OutPutInfoEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_MaterialId == materialId && a.F_MaterialBatch == materialBatch && a.F_IsTemp != true).FirstOrDefault();
if (!string.IsNullOrEmpty(F_WorkOrderDetailId))
{
output = uniwork.IQueryable<OutPutInfoEntity>(a => a.F_MaterialId == materialId && a.F_MaterialBatch == materialBatch && a.F_IsTemp != true).FirstOrDefault();
}
if (output == null)
{
var temps = uniwork.IQueryable<StorageChangeInfoEntity>(a => a.F_NewTransferBoxCode == transferBoxCode).ToList();
foreach (var item in temps)
{
output = GetOuputByStorage(item.F_TransferBoxCode, item.F_MaterialId, item.F_MaterialBatch);
if (output != null)
{
return output;
}
}
if (output == null)
{
var returnscaps = uniwork.IQueryable<ScapMaterialReturnEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_BackMaterialBatch == materialBatch).Select(a => a.F_ScapMaterialId).Distinct().ToList();
var checks = uniwork.IQueryable<ScapMaterialEntity>(a => returnscaps.Contains(a.F_Id)).ToList();
foreach (var item in checks)
{
var check = uniwork.IQueryable<NeedCheckEntity>(a => a.F_Id == item.F_CheckId).FirstOrDefault();
output = GetOuputByStorage(check.F_TransferBoxCode, item.F_MaterialId, item.F_MaterialBatch);
if (output != null)
{
return output;
}
}
}
}
return output;
}
private InStorageInfoEntity GetInStorageByStorage(string transferBoxCode, string materialId, string materialBatch)
{
var output = uniwork.IQueryable<InStorageInfoEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_MaterialId == materialId && a.F_MaterialBatch == materialBatch && a.F_IsTemp != true).FirstOrDefault();
if (output == null)
{
var temps = uniwork.IQueryable<StorageChangeInfoEntity>(a => a.F_NewTransferBoxCode == transferBoxCode).ToList();
foreach (var item in temps)
{
output = GetInStorageByStorage(item.F_TransferBoxCode, item.F_MaterialId, item.F_MaterialBatch);
if (output != null)
{
return output;
}
}
if (output == null)
{
var returnscaps = uniwork.IQueryable<ScapMaterialReturnEntity>(a => a.F_TransferBoxCode == transferBoxCode && a.F_BackMaterialBatch == materialBatch).Select(a => a.F_ScapMaterialId).Distinct().ToList();
var checks = uniwork.IQueryable<ScapMaterialEntity>(a => returnscaps.Contains(a.F_Id)).ToList();
foreach (var item in checks)
{
var check = uniwork.IQueryable<NeedCheckEntity>(a => a.F_Id == item.F_CheckId).FirstOrDefault();
output = GetInStorageByStorage(check.F_TransferBoxCode, item.F_MaterialId, item.F_MaterialBatch);
if (output != null)
{
return output;
}
}
}
}
return output;
}
public async Task EnabledForm(string keyValue)
{
var ids = keyValue.Split(',');
if (repository.IQueryable(a => ids.Contains(a.F_Id.ToString()) && a.F_IsCheck == true).Count() > 0)
{
throw new Exception("已经质检完成,请不用重复操作");
}
if (uniwork.IQueryable<ScapMaterialEntity>(a => ids.Contains(a.F_CheckId.ToString())).Count() > 0)
{
throw new Exception("存在可疑物料,无法直接完成");
}
uniwork.BeginTrans();
//逐个完成检验
foreach (var item in ids)
{
var temp = await repository.FindEntity(long.Parse(item));
await CheckoutForm(temp.F_TransferBoxCode, false);
}
uniwork.Commit();
}
#endregion
}
}