质检模块带代码

This commit is contained in:
2024-11-08 10:42:30 +08:00
parent 755fd97ef0
commit a0d2fc5b19
11 changed files with 1196 additions and 26 deletions

View File

@@ -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)
{