取消逻辑调整 原材料看板调整

This commit is contained in:
2024-07-31 14:24:44 +08:00
parent 9221113607
commit b9ae51f015
8 changed files with 641 additions and 132 deletions

View File

@@ -2259,7 +2259,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼灭菌仓到成品库");
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行四楼灭菌仓到成品库");
var time = db_Floor4DMC2CPK.Queryable<BasFactoryConfig>().Where(p => p.key == "mjcstewingtime").FirstAsync().Result.value;
var time = await db_Floor4DMC2CPK.Queryable<BasFactoryConfig>().Where(p => p.key == "mjcstewingtime").FirstAsync();
if (time == null)
{
@@ -2268,7 +2268,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
int hours = 168;
if (!int.TryParse(time, out hours))
if (!int.TryParse(time.value, out hours))
{
LoggerFloor4DMC2CPK.LogWarning($"【四楼灭菌仓到成品库】 静置时间(小时) 配置有误,错误值为 {time}");
return;

View File

@@ -72,6 +72,10 @@
/// 采购存储区
/// </summary>
public const string REGION_Purchase_ID = "26125793924133";
/// <summary>
/// 外协存储区
/// </summary>
public const string REGION_YCLWX_ID = "26125771318821";
/// <summary>
/// 长管出库

View File

@@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
{
public class RawMatTransferInstockInput
{
/// <summary>
/// 单号
/// </summary>
public string? outsource_order { get; set; }
/// <summary>
/// 联系人
/// </summary>
public string? contact_person { get; set; }
/// <summary>
/// 电话
/// </summary>
public string? tel { get; set; }
/// <summary>
/// 出库组织编号
/// </summary>
public string? outstockorg_code { get; set; }
/// <summary>
/// 凭证日期
/// </summary>
public DateTime? certificate_date { get; set; }
/// <summary>
/// 供货日期
/// </summary>
public DateTime? ship_date { get; set; }
/// <summary>
/// 主表pk
/// </summary>
public string? erp_pk { get; set; }
public List<RawMatTransferInstockDetail> details { get; set; }
}
public class RawMatTransferInstockDetail
{
/// <summary>
/// 行号
/// </summary>
public string? lineno { get; set; }
/// <summary>
/// 物品代码
/// </summary>
public string? material_code { get; set; }
/// <summary>
/// 单位代码
/// </summary>
public string? unit_code { get; set; }
/// <summary>
/// 委外数量
/// </summary>
public decimal? qty { get; set; }
/// <summary>
/// 库存地点编号
/// </summary>
public string? stock_location { get; set; }
/// <summary>
/// 批次
/// </summary>
public string? code_batch { get; set; }
/// <summary>
/// 交货日期
/// </summary>
public DateTime? delivery_date { get; set; }
/// <summary>
/// 子表主键
/// </summary>
public string erp_line_pk { get; set; }
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace Tnb.WarehouseMgr.Entities.Dto
{

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace Tnb.WarehouseMgr.Entities.Dto
{
public class YCLBoardOutput
{
public JObject summary { get; set; }
public List<List<LocationOutput>> locationOutputs { get; set; }
}
}

View File

@@ -129,7 +129,7 @@ namespace Tnb.WarehouseMgr
throw;
}
/*var whereExp = Expressionable.Create<WmsElevatorH, WmsElevatorD, WmsDistaskH>()
.And((a, b, c) => c.bill_code == input.taskCode)
.And((a, b, c) => a.enabled == 1)
@@ -317,7 +317,7 @@ namespace Tnb.WarehouseMgr
}
try
{
@@ -455,163 +455,198 @@ namespace Tnb.WarehouseMgr
case "CANCELLED":
{
Logger.Information("开始处理WCS上传的取消任务");
int row = await _db.Updateable<WmsDistaskH>().SetColumns(r => new WmsDistaskH
try
{
agreement = "WCS上传取消(CANCELLED)信号",
status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID
}).Where(P => P.bill_code.Contains(input.taskChainCode)).ExecuteCommandAsync();
if (row > 0)
{
List<WmsDistaskH> wmsDistaskHs = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code.Contains(input.taskChainCode)).ToList();
List<string> wmsDistaskHCodes = wmsDistaskHs.Select(r => r.pretask_code).ToList();
await _db.Ado.BeginTranAsync();
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
int row = await _db.Updateable<WmsDistaskH>().SetColumns(r => new WmsDistaskH
{
if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT"))
{
//WmsElevatorUnlockInput wmsElevatorUnlockInput = new ();
//wmsElevatorUnlockInput.elevator_id = wmsDistaskH.device_id;
//await WmsElevatorUnlock(wmsElevatorUnlockInput);
//Logger.Information($"WCS取消任务{wmsDistaskH.bill_code},自动解占用电梯{wmsDistaskH.device_id}");
}
else
{
// 排除电梯任务 其他任务取消时自动解锁起点和终点库位
agreement = "WCS上传取消(CANCELLED)信号",
status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID
}).Where(P => P.bill_code.Contains(input.taskChainCode)).ExecuteCommandAsync();
if (row > 0)
{
List<WmsDistaskH> wmsDistaskHs = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code.Contains(input.taskChainCode)).ToList();
List<string> wmsDistaskHCodes = wmsDistaskHs.Select(r => r.pretask_code).ToList();
if (wmsDistaskH.act_start_date == null)
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
{
if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT"))
{
int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
if (unlockStartRow > 0)
//WmsElevatorUnlockInput wmsElevatorUnlockInput = new ();
//wmsElevatorUnlockInput.elevator_id = wmsDistaskH.device_id;
//await WmsElevatorUnlock(wmsElevatorUnlockInput);
//Logger.Information($"WCS取消任务{wmsDistaskH.bill_code},自动解占用电梯{wmsDistaskH.device_id}");
}
else
{
// 排除电梯任务 其他任务取消时自动解锁起点和终点库位
if (wmsDistaskH.act_start_date == null)
{
Logger.Information($"成功解锁起点库位{wmsDistaskH.startlocation_code}");
int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
if (unlockStartRow > 0)
{
Logger.Information($"成功解锁起点库位{wmsDistaskH.startlocation_code}");
}
else
{
Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
}
}
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0)
{
Logger.Information($"成功解锁终点库位{wmsDistaskH.endlocation_code}");
}
else
{
Logger.Information($"未成功解锁点库位{wmsDistaskH.startlocation_code}");
Logger.Information($"未成功解锁点库位{wmsDistaskH.endlocation_code}");
}
}
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0)
{
Logger.Information($"成功解锁终点库位{wmsDistaskH.endlocation_code}");
}
else
{
Logger.Information($"未成功解锁终点库位{wmsDistaskH.endlocation_code}");
}
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.carry_code == wmsDistaskH.carry_code).FirstAsync();
wmsCarryH.is_lock = 0;
if (wmsDistaskH.startlocation_code.Contains("BGWRKYCL0"))
{
wmsCarryH.location_id = WmsWareHouseConst.LOCATION_YCLBGWDRK;
wmsCarryH.location_code = "YCLBGWDRK";
}
int unlockCarryRow = await _db.Updateable<WmsCarryH>().SetColumns(r => new WmsCarryH
{
is_lock = 0,
location_id = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? WmsWareHouseConst.LOCATION_YCLBGWDRK : r.location_id,
location_code = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? "YCLBGWDRK" : r.location_code
}).Where(r => r.carry_code == wmsDistaskH.carry_code).ExecuteCommandAsync();
if (unlockCarryRow > 0)
{
Logger.Information($"成功解锁载具{wmsDistaskH.carry_code}");
}
else
{
Logger.Information($"未成功解锁载具{wmsDistaskH.carry_code}");
}
int unlockCarryRow = await _db.Updateable(wmsCarryH).ExecuteCommandAsync();
if (unlockCarryRow > 0)
{
Logger.Information($"成功解锁载具{wmsDistaskH.carry_code}");
}
else
{
Logger.Information($"未成功解锁载具{wmsDistaskH.carry_code}");
}
}
}
await _db.Updateable<WmsPretaskH>().SetColumns(r => new WmsPretaskH
{
note = "WCS上传取消(CANCELLED)信号",
status = WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
}).Where(P => wmsDistaskHCodes.Contains(P.bill_code)).ExecuteCommandAsync();
Logger.Information("成功处理WCS上传的取消任务");
}
else
{
Logger.Information("未处理WCS上传的取消任务");
}
await _db.Updateable<WmsPretaskH>().SetColumns(r => new WmsPretaskH
{
note = "WCS上传取消(CANCELLED)信号",
status = WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
}).Where(P => wmsDistaskHCodes.Contains(P.bill_code)).ExecuteCommandAsync();
Logger.Information("成功处理WCS上传的取消任务");
await _db.Ado.CommitTranAsync();
}
else
catch (Exception ex)
{
Logger.Information("未处理WCS上传的取消任务");
Logger.Error("任务取消后处理发生异常", ex);
await _db.Ado.RollbackTranAsync();
throw;
}
break;
}
case "SUCCEED": break;
case "FAILURE":
{
Logger.Information("开始处理WCS上传的失败任务");
int row = await _db.Updateable<WmsDistaskH>().SetColumns(r => new WmsDistaskH
{
agreement = "WCS上传失败(FAILURE)信号",
status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID
}).Where(P => P.bill_code.Contains(input.taskChainCode)).ExecuteCommandAsync();
if (row > 0)
{
List<string> wmsDistaskHCodes = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code.Contains(input.taskChainCode)).Select(r => r.pretask_code).ToList();
List<WmsDistaskH> wmsDistaskHs = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code.Contains(input.taskChainCode)).ToList();
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
{
if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT"))
{
//WmsElevatorUnlockInput wmsElevatorUnlockInput = new ();
//wmsElevatorUnlockInput.elevator_id = wmsDistaskH.device_id;
//await WmsElevatorUnlock(wmsElevatorUnlockInput);
//Logger.Information($"WCS取消任务{wmsDistaskH.bill_code},自动解占用电梯{wmsDistaskH.device_id}");
}
else
{
// 排除电梯任务 其他任务取消时自动解锁起点和终点库位
if (wmsDistaskH.act_start_date == null)
try
{
await _db.Ado.BeginTranAsync();
int row = await _db.Updateable<WmsDistaskH>().SetColumns(r => new WmsDistaskH
{
agreement = "WCS上传失败(FAILURE)信号",
status = WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID
}).Where(P => P.bill_code.Contains(input.taskChainCode)).ExecuteCommandAsync();
if (row > 0)
{
List<string> wmsDistaskHCodes = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code.Contains(input.taskChainCode)).Select(r => r.pretask_code).ToList();
List<WmsDistaskH> wmsDistaskHs = _db.Queryable<WmsDistaskH>().Where(P => P.bill_code.Contains(input.taskChainCode)).ToList();
foreach (WmsDistaskH wmsDistaskH in wmsDistaskHs)
{
if (wmsDistaskH.startlocation_code.Contains("DT") || wmsDistaskH.endlocation_code.Contains("DT"))
{
int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
if (unlockStartRow > 0)
//WmsElevatorUnlockInput wmsElevatorUnlockInput = new ();
//wmsElevatorUnlockInput.elevator_id = wmsDistaskH.device_id;
//await WmsElevatorUnlock(wmsElevatorUnlockInput);
//Logger.Information($"WCS取消任务{wmsDistaskH.bill_code},自动解占用电梯{wmsDistaskH.device_id}");
}
else
{
// 排除电梯任务 其他任务取消时自动解锁起点和终点库位
if (wmsDistaskH.act_start_date == null)
{
Logger.Information($"成功起点解锁库位{wmsDistaskH.startlocation_code}");
int unlockStartRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.startlocation_code).ExecuteCommandAsync();
if (unlockStartRow > 0)
{
Logger.Information($"成功解锁起点库位{wmsDistaskH.startlocation_code}");
}
else
{
Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
}
}
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0)
{
Logger.Information($"成功解锁终点库位{wmsDistaskH.endlocation_code}");
}
else
{
Logger.Information($"未成功解锁点库位{wmsDistaskH.startlocation_code}");
Logger.Information($"未成功解锁点库位{wmsDistaskH.endlocation_code}");
}
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.carry_code == wmsDistaskH.carry_code).FirstAsync();
wmsCarryH.is_lock = 0;
if (wmsDistaskH.startlocation_code.Contains("BGWRKYCL0"))
{
wmsCarryH.location_id = WmsWareHouseConst.LOCATION_YCLBGWDRK;
wmsCarryH.location_code = "YCLBGWDRK";
}
int unlockCarryRow = await _db.Updateable(wmsCarryH).ExecuteCommandAsync();
if (unlockCarryRow > 0)
{
Logger.Information($"成功解锁载具{wmsDistaskH.carry_code}");
}
else
{
Logger.Information($"未成功解锁载具{wmsDistaskH.carry_code}");
}
}
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0)
{
Logger.Information($"成功终点解锁库位{wmsDistaskH.endlocation_code}");
}
else
{
Logger.Information($"未成功解锁终点库位{wmsDistaskH.endlocation_code}");
}
int unlockCarryRow = await _db.Updateable<WmsCarryH>().SetColumns(r => new WmsCarryH
{
is_lock = 0,
location_id = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? WmsWareHouseConst.LOCATION_YCLBGWDRK : r.location_id,
location_code = wmsDistaskH.startlocation_code.Contains("BGWRKYCL0") ? "YCLBGWDRK" : r.location_code
}).Where(r => r.carry_code == wmsDistaskH.carry_code).ExecuteCommandAsync();
if (unlockCarryRow > 0)
{
Logger.Information($"成功解锁载具{wmsDistaskH.carry_code}");
}
else
{
Logger.Information($"未成功解锁载具{wmsDistaskH.carry_code}");
}
}
await _db.Updateable<WmsPretaskH>().SetColumns(r => new WmsPretaskH
{
note = "WCS上传失败(FAILURE)信号",
status = WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
}).Where(P => wmsDistaskHCodes.Contains(P.bill_code)).ExecuteCommandAsync();
Logger.Information("成功处理WCS上传的失败任务");
}
else
{
Logger.Information("未处理WCS上传的失败任务");
}
await _db.Updateable<WmsPretaskH>().SetColumns(r => new WmsPretaskH
{
note = "WCS上传失败(FAILURE)信号",
status = WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
}).Where(P => wmsDistaskHCodes.Contains(P.bill_code)).ExecuteCommandAsync();
Logger.Information("成功处理WCS上传的失败任务");
await _db.Ado.CommitTranAsync();
}
else
catch (Exception ex)
{
Logger.Information("未处理WCS上传的失败任务");
Logger.Error("任务失败后处理发生异常", ex);
await _db.Ado.RollbackTranAsync();
throw;
}
break;
}
case "FINISHED":
@@ -702,7 +737,7 @@ namespace Tnb.WarehouseMgr
{
await _db.Updateable<WmsElevatorH>().SetColumns(r => r.is_use == (int)EnumElevatorUseStatus.).Where(r => r.elevator_id == elevator.device_id).ExecuteCommandAsync();
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.;
// 根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
// 根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
var devName = s_elevatorMap[elevator.device_id]?.ToString();
Logger.Information($"【TaskCallback】 {devName.Match(@"\d+")}#梯,设备名称:{devName},开始进入关门流程 {devName} 变更为空闲 {s_eleUseStatusDic.GetHashCode()} {s_eleUseStatusDic[elevator.device_id]}");
int doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
@@ -722,7 +757,7 @@ namespace Tnb.WarehouseMgr
{
//Logger.Information($"【TaskCallback】电梯sourceName不符合条件 {input.sourceName}");
}
WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中");
if (elevatorQueueItem != null)

View File

@@ -796,6 +796,105 @@ namespace Tnb.WarehouseMgr
}
}
/// <summary>
/// 原材料调拨入库单
/// </summary>
[HttpPost, NonUnify, AllowAnonymous]
public async Task<Entities.Dto.Outputs.Result> RawmatTransferInstock(RawMatTransferInstockInput input)
{
LoggerErp2Mes.LogInformation($"【RawMatTransferInstock】ERP传入数据:{JsonConvert.SerializeObject(input)}");
var db = _repository.AsSugarClient();
if (string.IsNullOrEmpty(input.erp_pk))
{
_LoggerErp2Mes.LogWarning($"【RawMatTransferInstock】主表主键不能为空");
return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!");
}
int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count();
if (count_erp_line_pk > 0)
{
_LoggerErp2Mes.LogWarning($@"【RawMatTransferInstock】子表主键不能为空");
throw new AppFriendlyException($@"子表主键不能为空!", 500);
}
var wmsPurchaseOrdersDistinct = input.details.Select(r => new
{
material_id = r.material_code,
code_batch = r.code_batch,
}).Distinct();
if (wmsPurchaseOrdersDistinct.Count() < input.details.Count)
{
_LoggerErp2Mes.LogWarning($@"【RawMatTransferInstock】表体存在物料和批号重复的明细");
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
}
try
{
await db.Ado.BeginTranAsync();
WmsRawmatTransferinstockH wmsRawmatTransferinstockH = new WmsRawmatTransferinstockH();
string Code = await _billRuleService.GetBillNumber("RawMatTransferInstock");
wmsRawmatTransferinstockH.bill_code = Code;
wmsRawmatTransferinstockH.erp_bill_code = input.outsource_order;
wmsRawmatTransferinstockH.contact_person = input.contact_person;
wmsRawmatTransferinstockH.tel = input.tel;
wmsRawmatTransferinstockH.outstockorg_code = input.outstockorg_code;
wmsRawmatTransferinstockH.erp_pk = input.erp_pk;
wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId;
wmsRawmatTransferinstockH.create_time = DateTime.Now;
await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync();
List<WmsRawmatTransferinstockD> wmsRawmatTransferinstockDs = new List<WmsRawmatTransferinstockD>();
foreach (var detail in input.details)
{
WmsRawmatTransferinstockD msRawmatTransferinstockD = new WmsRawmatTransferinstockD();
msRawmatTransferinstockD.bill_id = wmsRawmatTransferinstockH.id;
msRawmatTransferinstockD.matcode = detail.material_code;
msRawmatTransferinstockD.unit = detail.unit_code;
msRawmatTransferinstockD.qty = detail.qty;
msRawmatTransferinstockD.stock_location = detail.stock_location;
msRawmatTransferinstockD.code_batch = detail.code_batch;
msRawmatTransferinstockD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss");
msRawmatTransferinstockD.erp_line_pk = detail.erp_line_pk;
msRawmatTransferinstockD.create_id = WmsWareHouseConst.ErpUserId;
msRawmatTransferinstockD.create_time = DateTime.Now;
msRawmatTransferinstockD.actual_qty = 0;
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
if (material != null)
{
msRawmatTransferinstockD.matcode_id = material.id;
msRawmatTransferinstockD.matspecification = material.material_specification;
}
wmsRawmatTransferinstockDs.Add(msRawmatTransferinstockD);
}
await db.Insertable(wmsRawmatTransferinstockDs).ExecuteCommandAsync();
await db.Ado.CommitTranAsync();
LoggerErp2Mes.LogInformation($"【RawMatTransferInstock】成功生成单据:{Code}");
return await ToApiResult(HttpStatusCode.OK, "成功");
}
catch (Exception ex)
{
LoggerErp2Mes.LogError($"【RawMatTransferInstock】{ex.Message}");
LoggerErp2Mes.LogError($"【RawMatTransferInstock】{ex.StackTrace}");
await db.Ado.RollbackTranAsync();
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
}
finally
{
}
}
protected Task<Entities.Dto.Outputs.Result> ToApiResult(HttpStatusCode statusCode, string msg)
{
Entities.Dto.Outputs.Result result = new()

View File

@@ -13,6 +13,7 @@ using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.Common.Redis;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
namespace Tnb.WarehouseMgr
@@ -261,16 +262,16 @@ namespace Tnb.WarehouseMgr
status = 3;
}
}
}
else
{
if (data.is_use == "1")
{
status = 1;
}
else
{
if (data.is_use == "1")
{
status = 1;
}
else
{
status = 0;
}
status = 0;
}
}
lastdata = data.location_code;
@@ -284,6 +285,269 @@ namespace Tnb.WarehouseMgr
return LocationOutputss;
}
[HttpPost]
[AllowAnonymous]
public async Task<dynamic> GetYCLlocation2()
{
List<List<LocationOutput>> LocationOutputss = new List<List<LocationOutput>>();
var list = await _db.Queryable<BasLocation>().Where(p => p.wh_id == "1" && p.is_type == "0" && p.region_id != WmsWareHouseConst.REGION_YCLWX_ID)
.OrderBy(p => p.location_code).ToListAsync();
var carrys = await _db.Queryable<WmsCarryH>().ToListAsync();
var carrycodes = await _db.Queryable<WmsCarryCode>().ToListAsync();
var mats = await _db.Queryable<BasMaterial>().ToListAsync();
var qcresults = await _db.Queryable<WmsCarryCode>()
.InnerJoin<WmsTempCode>((a, b) => a.barcode == b.barcode)
.InnerJoin<WmsPurchaseD>((a, b, c) => c.id == b.require_id)
.Where((a, b, c) => !string.IsNullOrEmpty(c.qc_res)).Select((a, b, c) => new
{
barcode = a.barcode,
qc_res = c.qc_res
}).ToListAsync();
var lastdata = string.Empty;
List<LocationOutput> LocationOutputs = new List<LocationOutput>();
List<LocationOutput> LocationOutputsSum = new List<LocationOutput>();
foreach (var data in list)
{
if (!string.IsNullOrEmpty(lastdata) && data.location_code.Substring(4, 1) != lastdata.Substring(4, 1))
{
LocationOutputss.Add(LocationOutputs);
LocationOutputs = new List<LocationOutput>();
}
LocationOutput locationOutput = new LocationOutput();
locationOutput.location_code = data.location_code.Replace("YCL-", "");
locationOutput.layers = data.layers;
locationOutput.type = 0;
int status = 0;
if (carrys.Where(p => p.location_id == data.id).Any())
{
var carry = carrys.Where(p => p.location_id == data.id).First();
locationOutput.carry_code = carry.carry_code;
locationOutput.type = 1;
if (carrycodes.Where(p => p.carry_id == carry.id).Any())
{
var carrycode = carrycodes.Where(p => p.carry_id == carry.id).First();
locationOutput.type = 2;
locationOutput.material_code = carrycode.material_code;
locationOutput.barcode = carrycode.barcode;
if (mats.Where(p => p.id == carrycode.material_id).Any())
{
var mat = mats.Where(p => p.id == carrycode.material_id).First();
locationOutput.material_name = mat.name;
}
locationOutput.code_batch = carrycode.code_batch;
locationOutput.num = carrycode.codeqty;
if (qcresults.Where(p => p.barcode == carrycode.barcode).Any())
{
var qcresult = qcresults.Where(p => p.barcode == carrycode.barcode).First();
string qc_result = qcresult.qc_res;
switch (qc_result)
{
case "await":
{
status = 3;
break;
}
case "vergeOk":
{
status = 4;
break;
}
case "no":
{
status = 5;
break;
}
case "ok":
{
status = 2;
break;
}
default:
{
status = 3;
break;
}
}
}
else
{
status = 3;
}
}
}
else
{
if (data.is_use == "1")
{
status = 1;
}
else
{
status = 0;
}
}
lastdata = data.location_code;
locationOutput.status = status;
LocationOutputs.Add(locationOutput);
LocationOutputsSum.Add(locationOutput);
// 。。。。。。
if (data.location_code == list[list.Count - 1].location_code)
LocationOutputss.Add(LocationOutputs);
}
YCLBoardOutput YCLBoardOutput = new YCLBoardOutput();
YCLBoardOutput.summary = new JObject {
{ "0", LocationOutputsSum.Where(r => r.status == 0).Count() },
{ "1", LocationOutputsSum.Where(r => r.status == 1).Count() },
{ "2", LocationOutputsSum.Where(r => r.status == 2).Count() },
{ "3", LocationOutputsSum.Where(r => r.status == 3).Count() },
{ "4", LocationOutputsSum.Where(r => r.status == 4).Count() },
{ "5", LocationOutputsSum.Where(r => r.status == 5).Count() }
};
YCLBoardOutput.locationOutputs = LocationOutputss;
return YCLBoardOutput;
}
[HttpPost]
[AllowAnonymous]
public async Task<dynamic> GetYCLlocationWX()
{
List<List<LocationOutput>> LocationOutputss = new List<List<LocationOutput>>();
var list = await _db.Queryable<BasLocation>().Where(p => p.wh_id == "1" && p.is_type == "0" && p.region_id == WmsWareHouseConst.REGION_YCLWX_ID)
.OrderBy(p => p.location_code).ToListAsync();
var carrys = await _db.Queryable<WmsCarryH>().ToListAsync();
var carrycodes = await _db.Queryable<WmsCarryCode>().ToListAsync();
var mats = await _db.Queryable<BasMaterial>().ToListAsync();
var qcresults = await _db.Queryable<WmsCarryCode>()
.InnerJoin<WmsTempCode>((a, b) => a.barcode == b.barcode)
.InnerJoin<WmsPurchaseD>((a, b, c) => c.id == b.require_id)
.Where((a, b, c) => !string.IsNullOrEmpty(c.qc_res)).Select((a, b, c) => new
{
barcode = a.barcode,
qc_res = c.qc_res
}).ToListAsync();
var lastdata = string.Empty;
List<LocationOutput> LocationOutputs = new List<LocationOutput>();
List<LocationOutput> LocationOutputsSum = new List<LocationOutput>();
foreach (var data in list)
{
if (!string.IsNullOrEmpty(lastdata) && data.location_code.Substring(4, 1) != lastdata.Substring(4, 1))
{
LocationOutputss.Add(LocationOutputs);
LocationOutputs = new List<LocationOutput>();
}
LocationOutput locationOutput = new LocationOutput();
locationOutput.location_code = data.location_code.Replace("YCL-", "");
locationOutput.layers = data.layers;
locationOutput.type = 0;
int status = 0;
if (carrys.Where(p => p.location_id == data.id).Any())
{
var carry = carrys.Where(p => p.location_id == data.id).First();
locationOutput.carry_code = carry.carry_code;
locationOutput.type = 1;
if (carrycodes.Where(p => p.carry_id == carry.id).Any())
{
var carrycode = carrycodes.Where(p => p.carry_id == carry.id).First();
locationOutput.type = 2;
locationOutput.material_code = carrycode.material_code;
locationOutput.barcode = carrycode.barcode;
if (mats.Where(p => p.id == carrycode.material_id).Any())
{
var mat = mats.Where(p => p.id == carrycode.material_id).First();
locationOutput.material_name = mat.name;
}
locationOutput.code_batch = carrycode.code_batch;
locationOutput.num = carrycode.codeqty;
if (qcresults.Where(p => p.barcode == carrycode.barcode).Any())
{
var qcresult = qcresults.Where(p => p.barcode == carrycode.barcode).First();
string qc_result = qcresult.qc_res;
switch (qc_result)
{
case "await":
{
status = 3;
break;
}
case "vergeOk":
{
status = 4;
break;
}
case "no":
{
status = 5;
break;
}
case "ok":
{
status = 2;
break;
}
default:
{
status = 3;
break;
}
}
}
else
{
status = 3;
}
}
}
else
{
if (data.is_use == "1")
{
status = 1;
}
else
{
status = 0;
}
}
lastdata = data.location_code;
locationOutput.status = status;
LocationOutputs.Add(locationOutput);
LocationOutputsSum.Add(locationOutput);
// 。。。。。。
if (data.location_code == list[list.Count - 1].location_code)
LocationOutputss.Add(LocationOutputs);
}
YCLBoardOutput YCLBoardOutput = new YCLBoardOutput();
YCLBoardOutput.summary = new JObject {
{ "0", LocationOutputsSum.Where(r => r.status == 0).Count() },
{ "1", LocationOutputsSum.Where(r => r.status == 1).Count() },
{ "2", LocationOutputsSum.Where(r => r.status == 2).Count() },
{ "3", LocationOutputsSum.Where(r => r.status == 3).Count() },
{ "4", LocationOutputsSum.Where(r => r.status == 4).Count() },
{ "5", LocationOutputsSum.Where(r => r.status == 5).Count() }
};
YCLBoardOutput.locationOutputs = LocationOutputss;
return YCLBoardOutput;
}
[HttpPost]
[AllowAnonymous]
public async Task<dynamic> GetCTUlocation()