质检模块带代码
This commit is contained in:
@@ -29,6 +29,11 @@ using Tnb.WarehouseMgr.Entities.Enums;
|
||||
using Tnb.ProductionMgr.Entities.Dto.PrdManage;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using JNPF.Common.Extension;
|
||||
using Tnb.QcMgr.Entities.Entity;
|
||||
using Tnb.BasicData;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using Tnb.QcMgr.Entities.Enums;
|
||||
|
||||
namespace Tnb.QcMgr
|
||||
{
|
||||
@@ -46,13 +51,15 @@ namespace Tnb.QcMgr
|
||||
private readonly IWmsSaleService _wmsSaleService;
|
||||
private readonly IWmsPurchaseService _wmsPurchaseService;
|
||||
private readonly IPrdMoTaskService _prdMoTaskService;
|
||||
private readonly IBillRullService _billRullService;
|
||||
private static SemaphoreSlim prdreportSemaphore = new(1);
|
||||
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
||||
public QcCheckTaskService(ISqlSugarRepository<QcCheckExecH> repository,
|
||||
IUserManager userManager,
|
||||
IWmsSaleService wmsSaleService,
|
||||
IPrdMoTaskService prdMoTaskService,
|
||||
IWmsPurchaseService wmsPurchaseService)
|
||||
IWmsPurchaseService wmsPurchaseService,
|
||||
IBillRullService billRullService)
|
||||
{
|
||||
_repository = repository;
|
||||
_userManager = userManager;
|
||||
@@ -60,6 +67,7 @@ namespace Tnb.QcMgr
|
||||
_wmsSaleService= wmsSaleService;
|
||||
_prdMoTaskService = prdMoTaskService;
|
||||
_wmsPurchaseService= wmsPurchaseService;
|
||||
_billRullService = billRullService;
|
||||
}
|
||||
|
||||
private async Task<dynamic> GetListAsync(VisualDevModelListQueryInput input)
|
||||
@@ -259,6 +267,7 @@ namespace Tnb.QcMgr
|
||||
[HttpPost]
|
||||
public async Task SaveData(CheckTaskInput CheckTaskInput)
|
||||
{
|
||||
//CheckTaskInput.startEndTime = new long[] { 1730084456000, 1730170856000 };
|
||||
await prdreportSemaphore.WaitAsync();
|
||||
ISqlSugarClient db = _repository.AsSugarClient();
|
||||
try
|
||||
@@ -315,10 +324,10 @@ namespace Tnb.QcMgr
|
||||
{
|
||||
foreach (ExecItemInput item in exextype.items)
|
||||
{
|
||||
if (item.postItemForm == null)
|
||||
{
|
||||
throw Oops.Oh("执行失败");
|
||||
}
|
||||
//if (item.postItemForm == null)
|
||||
//{
|
||||
// throw Oops.Oh("执行失败");
|
||||
//}
|
||||
|
||||
QcCheckExecD? QcCheckExecD = QcCheckExecDs.Where(p => p.id == item.itemdid).FirstOrDefault();
|
||||
if (QcCheckExecD == null)
|
||||
@@ -376,6 +385,8 @@ namespace Tnb.QcMgr
|
||||
.SetColumns(x => x.attachment == QcCheckExecH.attachment)
|
||||
.SetColumns(x => x.qty == QcCheckExecH.qty)
|
||||
.SetColumns(x => x.rqty == QcCheckExecH.rqty)
|
||||
.SetColumns(x => x.control_start_time == QcCheckExecH.control_start_time)
|
||||
.SetColumns(x => x.control_end_time == QcCheckExecH.control_end_time)
|
||||
.Where(x => x.id == CheckTaskInput.mainid)
|
||||
.ExecuteCommandAsync();
|
||||
_ = await db.Deleteable(QcCheckExecDdel).ExecuteCommandAsync();
|
||||
@@ -452,12 +463,129 @@ namespace Tnb.QcMgr
|
||||
}
|
||||
}
|
||||
}
|
||||
},db);
|
||||
List<string> carryCodes = await db.Queryable<PrdReport>().Where(x=>x.mo_task_id==prdMoTask.id).Select(x=>x.material_box_code).Distinct().ToListAsync();
|
||||
await db.Updateable<WmsCarryH>()
|
||||
}, db);
|
||||
|
||||
List<PrdReport> prdReports= await db.Queryable<PrdReport>().Where(x => x.mo_task_id == prdMoTask.id && x.create_time >= CheckTaskInput.startEndTime[0].TimeStampToDateTime() && x.create_time <= CheckTaskInput.startEndTime[1].TimeStampToDateTime()).ToListAsync();
|
||||
//List<string> carryCodes = await db.Queryable<PrdReport>().Where(x => x.mo_task_id == prdMoTask.id && x.create_time >= CheckTaskInput.startEndTime[0].TimeStampToDateTime() && x.create_time <= CheckTaskInput.startEndTime[1].TimeStampToDateTime()).Select(x => x.material_box_code).Distinct().ToListAsync();
|
||||
var carryCodes= prdReports.Select(r=>r.material_box_code).Distinct().ToList();
|
||||
if (carryCodes != null && carryCodes.Count > 0)
|
||||
{
|
||||
await db.Updateable<WmsCarryH>()
|
||||
.SetColumns(x => x.is_check == ((int)EnumCheckConclusion.暂控).ToString())
|
||||
.SetColumns(x => x.carry_status == "6")//把料架状态改为退料状态,会自动触发把料架上的子载具从二楼暂存仓退回一楼中储仓任务
|
||||
.Where(x => carryCodes.Contains(x.carry_code))
|
||||
.ExecuteCommandAsync();
|
||||
|
||||
#region 记录被暂控的载具信息
|
||||
//var qcCheckExecCarrys = new List<QcCheckExecCarry>();
|
||||
//foreach(var carryCode in carryCodes)
|
||||
//{
|
||||
// var wmsCarryH = await db.Queryable<WmsCarryH>().Where(r => r.carry_code == carryCode).FirstAsync();
|
||||
// if (wmsCarryH == null)
|
||||
// continue;
|
||||
|
||||
// WmsCarryCode wmsCarryCode = await db.Queryable<WmsCarryCode>().FirstAsync(x => x.carry_id == wmsCarryH.id);
|
||||
// BasLocation basLocation = await db.Queryable<BasLocation>().Where(r => r.location_code == wmsCarryH.location_code).FirstAsync();
|
||||
// WmsCarryMat wmsCarryMat = await db.Queryable<WmsCarryMat>().Where(r => r.carry_id == wmsCarryH.id).FirstAsync();
|
||||
|
||||
// var qcCheckExecCarry = new QcCheckExecCarry()
|
||||
// {
|
||||
// qc_check_exec_id = QcCheckExecH.id,
|
||||
// carry_id = wmsCarryH.id,
|
||||
// carry_code = wmsCarryH.carry_code,
|
||||
// warehouse_id = basLocation != null ? basLocation.wh_id : "",
|
||||
// qty = wmsCarryCode != null ? wmsCarryCode.codeqty.ToString() : "",
|
||||
// status = wmsCarryH.is_check,
|
||||
// location_id = basLocation != null ? basLocation.id : "",
|
||||
// location_code = basLocation != null ? basLocation.location_code : "",
|
||||
// material_id= wmsCarryMat?.material_id,
|
||||
// create_id = _userManager.UserId,
|
||||
// create_time = DateTime.Now
|
||||
// };
|
||||
// qcCheckExecCarrys.Add(qcCheckExecCarry);
|
||||
//}
|
||||
//_ = await db.Insertable(qcCheckExecCarrys).ExecuteCommandAsync();
|
||||
#endregion
|
||||
|
||||
#region 记录暂控处理单主/子表信息
|
||||
|
||||
if(carryCodes!=null && carryCodes.Count > 0)
|
||||
{
|
||||
|
||||
var basMaterial = await db.Queryable<BasMaterial>().Where(r => r.id == prdMoTask.material_id).FirstAsync();
|
||||
string outWHid = ""; string inWHid = "";
|
||||
if (basMaterial.category_id.Contains("DGJCJ") || basMaterial.category_id.Contains("ZSJ"))
|
||||
{
|
||||
outWHid = WmsWareHouseConst.WAREHOUSE_ZC_ID;
|
||||
inWHid = "中储不合格品仓id";
|
||||
}
|
||||
else if (basMaterial.category_id.Contains("CGJCJ"))
|
||||
{
|
||||
outWHid = WmsWareHouseConst.WAREHOUSE_HCC_ID;
|
||||
inWHid = "长管不合格品仓id";
|
||||
}
|
||||
var codeQty = await db.Queryable<WmsCarryCode>().Where(r => carryCodes.Contains(r.carry_code) && r.material_id == QcCheckExecH.materialid).SumAsync(r => r.codeqty);
|
||||
var qcTempControlH = new QcTempControlH()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId(),
|
||||
bill_code = await _billRullService.GetBillNumber(CodeTemplateConst.QCCONTROLTEMP_CODE),
|
||||
source_code = QcCheckExecH.bill_code,
|
||||
pro_task_code = QcCheckExecH.mo_task_code,
|
||||
out_warehouse_id = outWHid,
|
||||
in_warehouse_id = inWHid,
|
||||
material_id = QcCheckExecH.materialid,
|
||||
material_code = basMaterial.code,
|
||||
control_lx_qty = carryCodes.Count.ToString(),
|
||||
control_qty = codeQty.ToString(),
|
||||
result = "暂控",
|
||||
loger_id = _userManager.UserId,
|
||||
confirmer_id = "",
|
||||
status = ((int)EnumTempControlStatus.待确认).ToString(),
|
||||
called_box_qty = "0",
|
||||
called_qty = "0",
|
||||
leave_call_box_qty = carryCodes.Count.ToString(),
|
||||
leave_call_qty = codeQty.ToString(),
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now,
|
||||
};
|
||||
|
||||
await db.Insertable(qcTempControlH).ExecuteCommandAsync();
|
||||
|
||||
var qcTempControlDs = new List<QcTempControlD>();
|
||||
foreach (var carryCode in carryCodes)
|
||||
{
|
||||
var wmsCarryH = await db.Queryable<WmsCarryH>().Where(r => r.carry_code == carryCode).FirstAsync();
|
||||
if (wmsCarryH == null)
|
||||
continue;
|
||||
|
||||
WmsCarryCode wmsCarryCode = await db.Queryable<WmsCarryCode>().FirstAsync(x => x.carry_id == wmsCarryH.id);
|
||||
BasLocation basLocation = await db.Queryable<BasLocation>().Where(r => r.location_code == wmsCarryH.location_code).FirstAsync();
|
||||
WmsCarryMat wmsCarryMat = await db.Queryable<WmsCarryMat>().Where(r => r.carry_id == wmsCarryH.id).FirstAsync();
|
||||
BasWarehouse basWarehouse = await db.Queryable<BasWarehouse>().Where(r => r.id == basLocation.wh_id).FirstAsync();
|
||||
var qcTempConD = new QcTempControlD()
|
||||
{
|
||||
bill_id = qcTempControlH.id,
|
||||
carry_id = wmsCarryH.id,
|
||||
carry_code = carryCode,
|
||||
warehouse_id = basLocation?.wh_id,
|
||||
warehouse_code = basWarehouse.whcode,
|
||||
location_code = basLocation?.location_code,
|
||||
location_id = basLocation?.id,
|
||||
qty = wmsCarryCode?.codeqty.ToString(),
|
||||
submiter = prdReports.Where(r=>r.material_box_code==carryCode).FirstOrDefault()?.create_id,
|
||||
maker_id = "",
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now,
|
||||
check_status="暂控",
|
||||
call_status="未呼叫"
|
||||
};
|
||||
qcTempControlDs.Add(qcTempConD);
|
||||
}
|
||||
await db.Insertable(qcTempControlDs).ExecuteCommandAsync();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -478,7 +606,7 @@ namespace Tnb.QcMgr
|
||||
catch (Exception e)
|
||||
{
|
||||
await db.Ado.RollbackTranAsync();
|
||||
Log.Error(e.Message,e);
|
||||
JNPF.Logging.Log.Error(e.Message,e);
|
||||
throw Oops.Oh("执行失败:"+e.Message);
|
||||
}
|
||||
finally{
|
||||
@@ -531,21 +659,43 @@ namespace Tnb.QcMgr
|
||||
attachment = a.attachment,
|
||||
}).FirstAsync();
|
||||
Result.checktypes = new List<List<Checktype>>();
|
||||
if (!string.IsNullOrEmpty(QcCheckExecH.carry_code))
|
||||
{
|
||||
WmsCarryH carryH = await db.Queryable<WmsCarryH>().FirstAsync(x => x.carry_code == QcCheckExecH.carry_code);
|
||||
WmsCarryCode carryCode = await db.Queryable<WmsCarryCode>().FirstAsync(x => x.carry_id == carryH.id);
|
||||
string materialId = carryCode?.id ?? "";
|
||||
BasMaterial basMaterial = await db.Queryable<BasMaterial>().SingleAsync(x=>x.id==materialId);
|
||||
Result.carryInfo = new CheckCarry()
|
||||
{
|
||||
carry_name = carryH.carry_name,
|
||||
location_id = carryH.location_id,
|
||||
location_code = carryH.location_code,
|
||||
material_name = basMaterial?.name,
|
||||
qty = carryCode?.codeqty ?? 0,
|
||||
};
|
||||
}
|
||||
|
||||
//var qcCheckExecCarrys = await db.Queryable<QcCheckExecCarry>().Where(r => r.qc_check_exec_id == QcCheckExecH.id).ToListAsync();
|
||||
//if(qcCheckExecCarrys!=null && qcCheckExecCarrys.Count > 0)
|
||||
//{
|
||||
// var checkCarrys = new List<CheckCarry>();
|
||||
// foreach(var acec in qcCheckExecCarrys)
|
||||
// {
|
||||
// WmsCarryH carryH = await db.Queryable<WmsCarryH>().FirstAsync(x => x.id == acec.carry_id);
|
||||
// BasMaterial basMaterial = await db.Queryable<BasMaterial>().SingleAsync(x => x.id == acec.material_id);
|
||||
// var carry = new CheckCarry()
|
||||
// {
|
||||
// carry_name = carryH.carry_name,
|
||||
// location_id = acec.location_id,
|
||||
// location_code = acec.location_code,
|
||||
// material_name = basMaterial?.name,
|
||||
// qty = string.IsNullOrEmpty(acec.qty) ? 0 : Convert.ToDecimal(acec.qty),
|
||||
// is_check=acec.status
|
||||
// };
|
||||
// checkCarrys.Add(carry);
|
||||
// }
|
||||
// Result.carryInfo= checkCarrys;
|
||||
//}
|
||||
//if (!string.IsNullOrEmpty(QcCheckExecH.carry_code))
|
||||
//{
|
||||
// WmsCarryH carryH = await db.Queryable<WmsCarryH>().FirstAsync(x => x.carry_code == QcCheckExecH.carry_code);
|
||||
// WmsCarryCode carryCode = await db.Queryable<WmsCarryCode>().FirstAsync(x => x.carry_id == carryH.id);
|
||||
// string materialId = carryCode?.id ?? "";
|
||||
// BasMaterial basMaterial = await db.Queryable<BasMaterial>().SingleAsync(x=>x.id==materialId);
|
||||
// Result.carryInfo = new CheckCarry()
|
||||
// {
|
||||
// carry_name = carryH.carry_name,
|
||||
// location_id = carryH.location_id,
|
||||
// location_code = carryH.location_code,
|
||||
// material_name = basMaterial?.name,
|
||||
// qty = carryCode?.codeqty ?? 0,
|
||||
// };
|
||||
//}
|
||||
List<string?> groupkeys = QcCheckExecDs.Select(p => p.checkindex).Distinct().ToList();
|
||||
foreach (string? key in groupkeys)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user