using Admin.NET.Core.Service;
|
using Admin.NET.Application.Entity;
|
using Microsoft.AspNetCore.Http;
|
using System.Data;
|
using System.Web;
|
using System.Text;
|
using DocumentFormat.OpenXml.Office.CustomUI;
|
using Microsoft.CodeAnalysis.Operations;
|
using Admin.NET.Application.Service.WmsTask.WmsRbLineTask.Dto;
|
using Furion.DatabaseAccessor;
|
using Admin.NET.Application.Service.WmsCommonnQuery.Dto;
|
using Admin.NET.Application.CommonHelper;
|
|
namespace Admin.NET.Application;
|
/// <summary>
|
/// 操作任务服务
|
/// </summary>
|
[ApiDescriptionSettings(ApplicationConst.WmsTaskGroupName, Order = 100)]
|
public class WmsOperationTaskService : IDynamicApiController, ITransient
|
{
|
private readonly SqlSugarRepository<WmsRbLineTask> _rep;
|
private readonly SqlSugarRepository<WmsStockQuan> _wmsStockQuanRep;
|
private readonly SqlSugarRepository<Mes_Package_Gather> _mesPackageGatherRep;
|
private readonly SqlSugarRepository<SysConfig> _sysConfigRep;
|
private readonly SqlSugarRepository<Mes_BatchOrderUPI_New> _mesBatchOrderUpiRep;
|
private readonly SqlSugarRepository<Mes_Order_Gather> _mesOrderGatherRep;
|
private readonly SqlSugarRepository<WmsRecordUpiProcess> _wmsRecordUpiProcessRep;
|
private readonly SqlSugarRepository<WmsRecordPackageProcess> _wmsRecordPackageProcessRep;
|
private readonly SqlSugarRepository<Mes_Upi_LineQueue> _mes_Upi_LineQueueRep;
|
private readonly SqlSugarRepository<Mes_Package_LineQueue> _mes_Package_LineQueueRep;
|
private readonly SqlSugarRepository<WmsRecordUpiNg> _wmsRecordUpiNgRep;
|
private readonly SqlSugarRepository<Mes_Package_UnLine_Record> _mes_Package_UnLine_RecordRep;
|
private readonly WmsCommonnQueryService _wmsCommonnQueryService;
|
|
public WmsOperationTaskService(
|
SqlSugarRepository<Mes_Upi_LineQueue> mes_Upi_LineQueueRep,
|
SqlSugarRepository<WmsRbLineTask> rep, SqlSugarRepository<WmsStockQuan> wmsStockQuanRep
|
, SqlSugarRepository<Mes_Package_Gather> mesPackageGatherRep
|
, SqlSugarRepository<SysConfig> sysConfigRep
|
, SqlSugarRepository<Mes_BatchOrderUPI_New> mesBatchOrderUpiRep
|
, SqlSugarRepository<Mes_Order_Gather> mesOrderGatherRep
|
, SqlSugarRepository<WmsRecordUpiProcess> wmsRecordUpiProcessRep
|
, SqlSugarRepository<WmsRecordPackageProcess> wmsRecordPackageProcessRep
|
, SqlSugarRepository<WmsRecordUpiNg> wmsRecordUpiNgRep
|
, WmsCommonnQueryService wmsCommonnQueryService
|
, SqlSugarRepository<Mes_Package_LineQueue> mes_Package_LineQueueRep
|
, SqlSugarRepository<Mes_Package_UnLine_Record> mes_Package_UnLine_RecordRep
|
)
|
{
|
_mes_Package_LineQueueRep = mes_Package_LineQueueRep;
|
_wmsCommonnQueryService = wmsCommonnQueryService;
|
_wmsRecordUpiNgRep = wmsRecordUpiNgRep;
|
_sysConfigRep = sysConfigRep;
|
_mesPackageGatherRep = mesPackageGatherRep;
|
_rep = rep;
|
_wmsStockQuanRep = wmsStockQuanRep;
|
_mesBatchOrderUpiRep = mesBatchOrderUpiRep;
|
_mesOrderGatherRep = mesOrderGatherRep;
|
_wmsRecordUpiProcessRep = wmsRecordUpiProcessRep;
|
_wmsRecordPackageProcessRep = wmsRecordPackageProcessRep;
|
_mes_Upi_LineQueueRep = mes_Upi_LineQueueRep;
|
_mes_Package_UnLine_RecordRep = mes_Package_UnLine_RecordRep;
|
}
|
|
|
|
/// <summary>
|
/// 强制出库
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "ForceOutbound")]
|
[Description("WmsOperationTask/ForceOutbound")]
|
[UnitOfWork]
|
public async Task ForceOutbound(ForceOutboundInput input)
|
{
|
if (input == null || input.PackageCodeList?.Count == 0)
|
{
|
throw Oops.Oh("参数不能为空");
|
}
|
//验证传递的包是否都在齐包之内。
|
List<WmsPackListOutput> packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = false });
|
|
List<WmsStockQuan> updateQuanList = new List<WmsStockQuan>();
|
foreach (var item in input.PackageCodeList)
|
{
|
var isExistCount = packList.Where(x => x.PackageCode == item).Count();
|
if (isExistCount == 0)
|
{
|
throw Oops.Oh($"包{item}不是缺包状态,请检查!");
|
}
|
|
var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync();
|
var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.齐包待出库 || x.StockStatus == StockStatusEnum.人工齐包出库任务已创建).Count();
|
if (isExist > 0)
|
{
|
throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.齐包待出库.ToString()}' 或'{StockStatusEnum.人工齐包出库任务已创建.ToString()}',不允许强制出库");
|
}
|
|
//更新状态
|
foreach (var quan in quanList)
|
{
|
if (quan.StockStatus != StockStatusEnum.在库 && quan.StockStatus != StockStatusEnum.已冻结)
|
{
|
throw Oops.Oh($"部件条码{quan.Upi}的库存状态不是'{StockStatusEnum.在库.ToString()}或{StockStatusEnum.已冻结.ToString()}'状态");
|
}
|
|
quan.StockStatus = StockStatusEnum.人工强制待出库;
|
quan.StockStatusName = StockStatusEnum.人工强制待出库.ToString();
|
quan.UpdateTime = DateTime.Now;
|
quan.OperReason = "人工强制待出库";
|
}
|
updateQuanList.AddRange(quanList);
|
|
var packageObj = await _mesPackageGatherRep.GetFirstAsync(x => x.PackageCode == item);
|
packageObj.UpiFlag = UpiFlagEnum.NG;
|
packageObj.UpiStatus = UpiStatusEnum.已下线;
|
await _mesPackageGatherRep.UpdateAsync(packageObj);
|
|
|
//下线更新 订单表数据 _mesOrderGatherRep
|
await UpdateOrderGather(packageObj, true);
|
|
foreach (var quan in quanList)
|
{
|
//清理 队列表
|
var removeUpiList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.Upi == quan.Upi).ToListAsync();
|
if (removeUpiList?.Count > 0)
|
{
|
await _mes_Upi_LineQueueRep.DeleteAsync(removeUpiList);
|
}
|
|
var removePackageList = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == quan.PackageCode).ToListAsync();
|
if (removePackageList?.Count > 0)
|
{
|
await _mes_Package_LineQueueRep.DeleteAsync(removePackageList);
|
}
|
}
|
}
|
|
//模式判断
|
var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
|
var res = await client.ValidateModeAsync(1);
|
if (res.result == false)
|
{
|
throw Oops.Oh(res.resMsg);
|
}
|
|
await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList);
|
|
}
|
|
|
/// <summary>
|
/// 人工齐包出库
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "PersonOutbound")]
|
[Description("WmsOperationTask/PersonOutbound")]
|
[UnitOfWork]
|
public async Task PersonOutbound(PersonOutboundInput input)
|
{
|
if (input == null || input.PackageCodeList?.Count == 0)
|
{
|
throw Oops.Oh("参数不能为空");
|
}
|
//验证传递的包是否都在齐包之内。
|
List<WmsPackListOutput> packList = await _wmsCommonnQueryService.PackList(new Service.WmsCommonnQuery.Dto.PackListInput() { IsPack = true });
|
|
List<WmsStockQuan> updateQuanList = new List<WmsStockQuan>();
|
foreach (var item in input.PackageCodeList)
|
{
|
var isExistCount = packList.Where(x => x.PackageCode == item).Count();
|
if (isExistCount == 0)
|
{
|
throw Oops.Oh($"包{item}不是齐包状态,请检查!");
|
}
|
|
var quanList = await _wmsStockQuanRep.AsQueryable().Where(x => x.PackageCode == item).ToListAsync();
|
var isExist = quanList.Where(x => x.StockStatus == StockStatusEnum.人工强制待出库 || x.StockStatus == StockStatusEnum.人工强制任务已创建).Count();
|
if (isExist > 0)
|
{
|
throw Oops.Oh($"包{item}中其中有板状态是'{StockStatusEnum.人工强制待出库.ToString()}'或'{StockStatusEnum.人工强制任务已创建.ToString()}',不允许人工齐包出库");
|
}
|
|
//更新状态
|
foreach (var quan in quanList)
|
{
|
if (quan.StockStatus != StockStatusEnum.在库 && quan.StockStatus != StockStatusEnum.已冻结)
|
{
|
throw Oops.Oh($"部件条码{quan.Upi}的库存状态不是'{StockStatusEnum.在库.ToString()}或{StockStatusEnum.已冻结.ToString()}'状态");
|
}
|
quan.StockStatus = StockStatusEnum.齐包待出库;
|
quan.StockStatusName = StockStatusEnum.齐包待出库.ToString();
|
quan.UpdateTime = DateTime.Now;
|
quan.OperReason = "人工齐包出库";
|
}
|
updateQuanList.AddRange(quanList);
|
|
var packageObj = await _mesPackageGatherRep.GetFirstAsync(x => x.PackageCode == item);
|
packageObj.UpiStatus = UpiStatusEnum.已齐包;
|
packageObj.IsQiBao = true;
|
await _mesPackageGatherRep.UpdateAsync(packageObj);
|
}
|
|
//模式判断
|
var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
|
var res = await client.ValidateModeAsync(2);
|
if (res.result == false)
|
{
|
throw Oops.Oh(res.resMsg);
|
}
|
|
await _wmsStockQuanRep.UpdateRangeAsync(updateQuanList);
|
|
}
|
|
/// <summary>
|
/// 下线放行
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "ValdateQiTao")]
|
[Description("WmsOperationTask/ValdateQiTao")]
|
[UnitOfWork]
|
public async Task<ValidateQiTaoOutput> ValdateQiTao(ValidateQiTaoInput input)
|
{
|
ValidateQiTaoOutput output = new ValidateQiTaoOutput();
|
if (input == null || input.PackageCode == null)
|
{
|
throw Oops.Oh("参数不能为空");
|
}
|
|
var package = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
|
if (package == null)
|
{
|
throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据");
|
}
|
|
if (package.UpiStatus == UpiStatusEnum.已下线)
|
{
|
throw Oops.Oh($"包{input.PackageCode}已下线");
|
}
|
|
var unlineObj = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
|
if (unlineObj != null)
|
{
|
throw Oops.Oh($"包号{input.PackageCode}已经下线");
|
}
|
|
//判断是否是新生产订单
|
var _QiTaoReuslt = "";
|
bool isNewOrder = false;
|
string _location = "BZ-33";
|
var lastPackageUnline = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.UpiFlag == UpiFlagEnum.正常).OrderByDescending(x => x.Id).FirstAsync();
|
if (lastPackageUnline == null)
|
{//认为是新生产订单
|
isNewOrder = true;
|
}
|
else
|
{
|
if (lastPackageUnline.Info5 != package.Info5)
|
{//认为是新生产订单
|
isNewOrder = true;
|
if (lastPackageUnline.Location == "BZ-33")
|
{
|
_location = "BZ-32";
|
}
|
else
|
{
|
_location = "BZ-33";
|
}
|
}
|
else
|
{
|
_location = lastPackageUnline.Location;
|
}
|
}
|
if (string.IsNullOrEmpty(_location))
|
{//默认
|
_location = "BZ-33";
|
}
|
|
_QiTaoReuslt = (bool)isNewOrder ? "新订单" : "当前订单";
|
|
|
//记录工作时间和工作人
|
var curUserName = App.User.FindFirst(ClaimConst.RealName)?.Value;
|
|
var sysConfig_wms_unline_oper = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_oper);
|
if (sysConfig_wms_unline_oper == null)
|
{
|
throw Oops.Oh($"没有配置 包装下线操作人 值");
|
}
|
if (sysConfig_wms_unline_oper.Value != curUserName)
|
{
|
sysConfig_wms_unline_oper.Value = curUserName;
|
await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_oper);
|
|
var sysConfig_wms_unline_time = await _sysConfigRep.GetFirstAsync(x => x.Code == CommonConst.wms_unline_time);
|
if (sysConfig_wms_unline_time == null)
|
{
|
throw Oops.Oh($"没有配置 包装下线登陆时间 值");
|
}
|
sysConfig_wms_unline_time.Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
await _sysConfigRep.UpdateAsync(sysConfig_wms_unline_time);
|
}
|
|
|
|
//请求PLC
|
//判断方向
|
bool myLocation = false;
|
if (_location == "BZ-33")
|
{
|
myLocation = false;
|
}
|
else
|
{
|
myLocation = true;
|
}
|
var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
|
var res = await client.WriteQiTaoInfoAsync(myLocation);
|
if (res.result == false)
|
{
|
throw Oops.Oh(res.resMsg);
|
}
|
|
|
//更新数据
|
package.UpiStatus = UpiStatusEnum.已下线;
|
package.AreaCode = AreaCodeEnum.下线区域;
|
await _mesPackageGatherRep.UpdateAsync(package);
|
|
var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
|
foreach (var item in upiList)
|
{
|
item.UpiStatus = UpiStatusEnum.已下线;
|
item.AreaCode = AreaCodeEnum.下线区域;
|
item.UpdateTime = DateTime.Now;
|
}
|
await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
|
//删除队列信息
|
var lineQueue = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
|
if (lineQueue != null)
|
{
|
await _mes_Package_LineQueueRep.DeleteAsync(lineQueue);
|
}
|
//处理表 mes_order_gather
|
await UpdateOrderGather(package, false);
|
|
var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
|
|
//新增下线记录表
|
var all_upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync();
|
var all_unlineList = await _mes_Package_UnLine_RecordRep.AsQueryable().Where(x => x.Info5 == package.Info5).ToListAsync();
|
Mes_Package_UnLine_Record record = new Mes_Package_UnLine_Record();
|
record = package.Adapt<Mes_Package_UnLine_Record>();
|
record.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
record.Location = _location;
|
record.AllPackageNum = all_upiList.GroupBy(x => x.PackageCode).Count();
|
record.CurUnlineIndexPackageNum = all_unlineList.GroupBy(x => x.PackageCode).Count() + 1;
|
record.CreateTime = DateTime.Now;
|
record.CreateUserName = _cretaorName;
|
await _mes_Package_UnLine_RecordRep.InsertAsync(record);
|
|
//记录包履历
|
WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
|
wmsRecordPackage = package.Adapt<WmsRecordPackageProcess>();
|
wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordPackage.Location = "";
|
wmsRecordPackage.OperRemark = "正常下线";
|
wmsRecordPackage.CreateTime = DateTime.Now;
|
wmsRecordPackage.CreateUserName = _cretaorName;
|
await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
|
|
|
output = package.Adapt<ValidateQiTaoOutput>();
|
output.QiTaoReuslt = _QiTaoReuslt + $",第{record.CurUnlineIndexPackageNum}包下线,共{record.AllPackageNum}包";
|
output.IsNewOrder = isNewOrder;
|
//output.IsNewOrder = false;
|
return output;
|
}
|
|
|
/// <summary>
|
/// 核对标签
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "ValdateLabel")]
|
[Description("WmsOperationTask/ValdateLabel")]
|
[UnitOfWork]
|
public async Task<Mes_Package_Gather> ValdateLabel(ValidateLabelInput input)
|
{
|
if (input == null || input.PackageCode == null || input.Upi == null)
|
{
|
throw Oops.Oh("参数不能为空");
|
}
|
|
var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync();
|
if (singleUpi == null)
|
{
|
throw Oops.Oh($"没有找到部件条码{input.Upi}的数据");
|
}
|
if (singleUpi.PackageCode != input.PackageCode)
|
{
|
throw Oops.Oh($"部件条码{input.Upi}所属包是{singleUpi.PackageCode},跟扫描的包号{input.PackageCode}不符");
|
}
|
|
var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
|
if (singlePackage == null)
|
{
|
throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据");
|
}
|
|
var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
|
|
WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
|
wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
|
wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordPackage.CreateTime = DateTime.Now;
|
wmsRecordPackage.CreateUserName = _cretaorName;
|
wmsRecordPackage.Location = "BZ29";
|
wmsRecordPackage.OperRemark = "核对标签";
|
await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
|
|
WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
|
wmsRecordUpi = singleUpi.Adapt<WmsRecordUpiProcess>();
|
wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordUpi.CreateTime = DateTime.Now;
|
wmsRecordUpi.CreateUserName = _cretaorName;
|
wmsRecordUpi.Location = "BZ29";
|
wmsRecordUpi.OperRemark = "核对标签";
|
await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
|
|
return singlePackage;
|
}
|
|
|
/// <summary>
|
/// NG包下线或 正常包 下线 -扫描包号
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "UnlineForNGPackage")]
|
[Description("WmsOperationTask/UnlineForNGPackage")]
|
[UnitOfWork]
|
public async Task UnlineForNGPackage(UnlineForNGPackageInput input)
|
{
|
if (input == null)
|
{
|
throw Oops.Oh("参数不能为空");
|
}
|
if (string.IsNullOrEmpty(input.PackageCode))
|
{
|
throw Oops.Oh("包号不能为空");
|
}
|
//if (string.IsNullOrEmpty(input.Reason))
|
//{
|
// throw Oops.Oh("原因不能为空");
|
//}
|
string _OperRemark = "正常人工下线";
|
UpiFlagEnum upiFlagEnum = UpiFlagEnum.正常;
|
if (input.IsNG)
|
{
|
upiFlagEnum = UpiFlagEnum.NG;
|
_OperRemark = "NG下线";
|
}
|
|
var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).FirstAsync();
|
if (singlePackage == null)
|
{
|
throw Oops.Oh($"没有找到包号{input.PackageCode}的汇总数据");
|
}
|
|
if (singlePackage.UpiStatus == UpiStatusEnum.已下线)
|
{
|
throw Oops.Oh($"包号{input.PackageCode}已经下线");
|
}
|
|
singlePackage.UpiFlag = upiFlagEnum;
|
singlePackage.UpdateTime = DateTime.Now;
|
singlePackage.UpiStatus = UpiStatusEnum.已下线;
|
singlePackage.AreaCode = AreaCodeEnum.下线区域;
|
|
var upiLineQueueList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
|
if (upiLineQueueList?.Count > 0)
|
{
|
await _mes_Upi_LineQueueRep.DeleteAsync(upiLineQueueList);
|
}
|
|
var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == input.PackageCode).ToListAsync();
|
if (upiList == null)
|
{
|
throw Oops.Oh($"没有找到包号{input.PackageCode}的板件数据");
|
}
|
var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
|
|
foreach (var item in upiList)
|
{
|
item.UpiFlag = UpiFlagEnum.NG;
|
item.UpdateTime = DateTime.Now;
|
item.UpiStatus = UpiStatusEnum.已下线;
|
item.AreaCode = AreaCodeEnum.下线区域;
|
|
WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
|
wmsRecordUpi = item.Adapt<WmsRecordUpiProcess>();
|
wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordUpi.CreateTime = DateTime.Now;
|
wmsRecordUpi.CreateUserName = _cretaorName;
|
wmsRecordUpi.Location = "";
|
wmsRecordUpi.OperRemark = _OperRemark;
|
await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
|
|
WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg();
|
wmsRecordUpiNg = item.Adapt<WmsRecordUpiNg>();
|
wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordUpiNg.CreateTime = DateTime.Now;
|
wmsRecordUpiNg.CreateUserName = _cretaorName;
|
wmsRecordUpiNg.OperRemark = _OperRemark;
|
await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg);
|
|
|
|
//清理 队列表
|
var removeUpiList = await _mes_Upi_LineQueueRep.AsQueryable().Where(x => x.Upi == item.UPI).ToListAsync();
|
if (removeUpiList?.Count > 0)
|
{
|
await _mes_Upi_LineQueueRep.DeleteAsync(removeUpiList);
|
}
|
|
var removePackageList = await _mes_Package_LineQueueRep.AsQueryable().Where(x => x.PackageCode == item.PackageCode).ToListAsync();
|
if (removePackageList?.Count > 0)
|
{
|
await _mes_Package_LineQueueRep.DeleteAsync(removePackageList);
|
}
|
|
|
}
|
|
//下线更新 订单表数据 _mesOrderGatherRep
|
await UpdateOrderGather(singlePackage, input.IsNG);
|
|
|
WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
|
wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
|
wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordPackage.Location = "";
|
wmsRecordPackage.OperRemark = _OperRemark;
|
wmsRecordPackage.CreateTime = DateTime.Now;
|
wmsRecordPackage.CreateUserName = _cretaorName;
|
await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
|
|
|
await _mesPackageGatherRep.UpdateAsync(singlePackage);
|
await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
|
|
}
|
|
/// <summary>
|
/// 公共-下线更新 订单表数据
|
/// </summary>
|
/// <param name="singlePackage"></param>
|
/// <returns></returns>
|
private async Task UpdateOrderGather(Mes_Package_Gather singlePackage, bool isNG)
|
{
|
//下线更新 订单表数据 _mesOrderGatherRep
|
bool isAdd = false;
|
var order = await _mesOrderGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).FirstAsync();
|
if (order == null)
|
{
|
isAdd = true;
|
order = new Mes_Order_Gather()
|
{
|
Info5 = singlePackage.Info5,
|
OrderId = singlePackage.OrderId,
|
PlanNo = singlePackage.PlanNo,
|
};
|
}
|
var packageList = await _mesPackageGatherRep.AsQueryable().Where(x => x.Info5 == singlePackage.Info5).ToListAsync();
|
order.PackageNum = packageList.Count();
|
order.UnLinePackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线).Count() + 1;
|
|
order.NgPackageNum = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线 && x.UpiFlag == UpiFlagEnum.NG).Count();
|
if (isNG)
|
{
|
order.NgPackageNum = order.NgPackageNum + 1;
|
}
|
|
order.NoUnLinePackageNum = order.PackageNum - order.UnLinePackageNum;
|
|
order.AllPackageArea = packageList.Sum(x => Convert.ToDecimal(x.Info13));
|
order.ScanPackageArea = packageList.Where(x => x.UpiStatus == UpiStatusEnum.已下线 && x.UpiFlag == (int)UpiFlagEnum.正常).Sum(x => Convert.ToDecimal(x.Info13));
|
if (isNG == false)
|
{
|
order.ScanPackageArea = order.ScanPackageArea + Convert.ToDecimal(singlePackage.Info13);
|
}
|
|
order.NoScanPackageArea = order.AllPackageArea - order.ScanPackageArea;
|
if (isAdd)
|
{
|
await _mesOrderGatherRep.InsertAsync(order);
|
}
|
else
|
{
|
await _mesOrderGatherRep.UpdateAsync(order);
|
}
|
}
|
|
/// <summary>
|
/// 标记NG-扫描件号
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "SetNG")]
|
[Description("WmsOperationTask/SetNG")]
|
[UnitOfWork]
|
public async Task SetNG(SetNGInput input)
|
{
|
if (input == null)
|
{
|
throw Oops.Oh("参数不能为空");
|
}
|
if (string.IsNullOrEmpty(input.Upi))
|
{
|
throw Oops.Oh("部件条码不能为空");
|
}
|
//if (string.IsNullOrEmpty(input.Reason))
|
//{
|
// throw Oops.Oh("原因不能为空");
|
//}
|
|
var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync();
|
if (singleUpi == null)
|
{
|
throw Oops.Oh($"没有找到部件条码{input.Upi}的数据");
|
}
|
var packageCode = singleUpi.PackageCode;
|
var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == packageCode).FirstAsync();
|
if (singlePackage == null)
|
{
|
throw Oops.Oh($"没有找到包号{packageCode}的汇总数据");
|
}
|
|
var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
|
|
singlePackage.UpiFlag = UpiFlagEnum.NG;
|
singlePackage.UpdateTime = DateTime.Now;
|
singlePackage.UpdateUserName = _cretaorName;
|
|
var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == packageCode).ToListAsync();
|
if (upiList == null)
|
{
|
throw Oops.Oh($"没有找到包号{packageCode}的板件数据");
|
}
|
foreach (var item in upiList)
|
{
|
item.UpiFlag = UpiFlagEnum.NG;
|
item.UpdateTime = DateTime.Now;
|
item.UpdateUserName = _cretaorName;
|
|
WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
|
wmsRecordUpi = item.Adapt<WmsRecordUpiProcess>();
|
wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordUpi.CreateTime = DateTime.Now;
|
wmsRecordUpi.CreateUserName = _cretaorName;
|
wmsRecordUpi.Location = "";
|
wmsRecordUpi.OperRemark = "标记NG";
|
await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
|
|
WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg();
|
wmsRecordUpiNg = item.Adapt<WmsRecordUpiNg>();
|
wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordUpiNg.CreateTime = DateTime.Now;
|
wmsRecordUpiNg.CreateUserName = _cretaorName;
|
wmsRecordUpiNg.OperRemark = "标记NG";
|
await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg);
|
}
|
|
|
WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
|
wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
|
wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordPackage.Location = "";
|
wmsRecordPackage.OperRemark = "标记NG";
|
wmsRecordPackage.CreateTime = DateTime.Now;
|
wmsRecordPackage.CreateUserName = _cretaorName;
|
await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
|
|
|
await _mesPackageGatherRep.UpdateAsync(singlePackage);
|
await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
|
|
}
|
|
|
/// <summary>
|
/// 取消NG-扫描件号
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "CancelNG")]
|
[Description("WmsOperationTask/CancelNG")]
|
[UnitOfWork]
|
public async Task CancelNG(CancelNGInput input)
|
{
|
if (input == null)
|
{
|
throw Oops.Oh("参数不能为空");
|
}
|
if (string.IsNullOrEmpty(input.Upi))
|
{
|
throw Oops.Oh("部件条码不能为空");
|
}
|
//if (string.IsNullOrEmpty(input.Reason))
|
//{
|
// throw Oops.Oh("原因不能为空");
|
//}
|
|
var singleUpi = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.UPI == input.Upi).FirstAsync();
|
if (singleUpi == null)
|
{
|
throw Oops.Oh($"没有找到部件条码{input.Upi}的数据");
|
}
|
var packageCode = singleUpi.PackageCode;
|
var singlePackage = await _mesPackageGatherRep.AsQueryable().Where(x => x.PackageCode == packageCode).FirstAsync();
|
if (singlePackage == null)
|
{
|
throw Oops.Oh($"没有找到包号{packageCode}的汇总数据");
|
}
|
|
var _cretaorName = App.User.FindFirst(ClaimConst.RealName)?.Value;
|
|
singlePackage.UpiFlag = UpiFlagEnum.正常;
|
singlePackage.UpdateTime = DateTime.Now;
|
singlePackage.UpdateUserName = _cretaorName;
|
|
var upiList = await _mesBatchOrderUpiRep.AsQueryable().Where(x => x.PackageCode == packageCode).ToListAsync();
|
if (upiList == null)
|
{
|
throw Oops.Oh($"没有找到包号{packageCode}的板件数据");
|
}
|
foreach (var item in upiList)
|
{
|
item.UpiFlag = UpiFlagEnum.正常;
|
item.UpdateTime = DateTime.Now;
|
item.UpdateUserName = _cretaorName;
|
|
WmsRecordUpiProcess wmsRecordUpi = new WmsRecordUpiProcess();
|
wmsRecordUpi = item.Adapt<WmsRecordUpiProcess>();
|
wmsRecordUpi.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordUpi.CreateTime = DateTime.Now;
|
wmsRecordUpi.CreateUserName = _cretaorName;
|
wmsRecordUpi.Location = "";
|
wmsRecordUpi.OperRemark = "取消NG";
|
await _wmsRecordUpiProcessRep.InsertAsync(wmsRecordUpi);
|
|
WmsRecordUpiNg wmsRecordUpiNg = new WmsRecordUpiNg();
|
wmsRecordUpiNg = item.Adapt<WmsRecordUpiNg>();
|
wmsRecordUpiNg.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordUpiNg.CreateTime = DateTime.Now;
|
wmsRecordUpiNg.CreateUserName = _cretaorName;
|
wmsRecordUpiNg.OperRemark = "取消NG";
|
await _wmsRecordUpiNgRep.InsertAsync(wmsRecordUpiNg);
|
}
|
|
|
WmsRecordPackageProcess wmsRecordPackage = new WmsRecordPackageProcess();
|
wmsRecordPackage = singlePackage.Adapt<WmsRecordPackageProcess>();
|
wmsRecordPackage.Id = Yitter.IdGenerator.YitIdHelper.NextId();
|
wmsRecordPackage.Location = "";
|
wmsRecordPackage.OperRemark = "取消NG";
|
wmsRecordPackage.CreateTime = DateTime.Now;
|
wmsRecordPackage.CreateUserName = _cretaorName;
|
await _wmsRecordPackageProcessRep.InsertAsync(wmsRecordPackage);
|
|
|
await _mesPackageGatherRep.UpdateAsync(singlePackage);
|
await _mesBatchOrderUpiRep.UpdateRangeAsync(upiList);
|
|
}
|
|
|
/// <summary>
|
/// 扫码记录清除
|
/// </summary>
|
/// <param name="input"></param>
|
/// <returns></returns>
|
[HttpPost]
|
[ApiDescriptionSettings(Name = "PartClear")]
|
[Description("WmsOperationTask/PartClear")]
|
public async Task PartClear()
|
{
|
//模式判断
|
var client = await WCFServiceHelper.GetWCFService_SAPCC_Client(_sysConfigRep);
|
var res = await client.WriteStation_PartClearAsync();
|
if (res.result == false)
|
{
|
throw Oops.Oh(res.resMsg);
|
}
|
}
|
|
}
|