分拣、工位bom、现场问题处理
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
using JNPF.Common.Filter;
|
||||
|
||||
namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
|
||||
{
|
||||
public class WmsSortingtaskListOutput : PageInputBase
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1167,7 +1167,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
target = targetConfigs.First();
|
||||
|
||||
// 计算当前料架区的满托数量
|
||||
int? maxnum = ckdRemainBindRackNum > target.maxracknum ? ckdRemainBindRackNum % target.maxracknum : ckdRemainBindRackNum;
|
||||
int? maxnum = ckdRemainBindRackNum > target.maxracknum ? target.maxracknum : ckdRemainBindRackNum;
|
||||
|
||||
// 更新 转库单、满托数量
|
||||
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】为条码 {barcode} 所在的转库单 {ckdCode} 占用了一个空闲料架");
|
||||
@@ -2724,6 +2724,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
stopwatch.Start();
|
||||
try
|
||||
{
|
||||
var WmsMaterialkit = await db_WmsMaterialkit.Queryable<BasFactoryConfig>().Where(p => p.key == "WmsMaterialkit").FirstAsync();
|
||||
// 0则不进行移转
|
||||
if (WmsMaterialkit != null && WmsMaterialkit.value == "0")
|
||||
{
|
||||
return;
|
||||
}
|
||||
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录");
|
||||
LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行生成物料齐套配送记录");
|
||||
|
||||
@@ -2743,7 +2749,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
}
|
||||
await db_WmsMaterialkit.Ado.BeginTranAsync();
|
||||
|
||||
WmsMaterialkitRecordH wmsMaterialkitRecordH = await db_WmsMaterialkit.Queryable<WmsMaterialkitRecordH>().Where(r => (r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID || r.status == WmsWareHouseConst.BILLSTATUS_ON_ID)
|
||||
WmsMaterialkitRecordH wmsMaterialkitRecordH = await db_WmsMaterialkit.Queryable<WmsMaterialkitRecordH>().Where(r => (r.status == WmsWareHouseConst.BILLSTATUS_ADD_ID || r.status == WmsWareHouseConst.BILLSTATUS_ON_ID || r.status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
|
||||
&& r.workstation_id == prdMoTask.workstation_id).FirstAsync();
|
||||
LoggerWmsMaterialkit.LogInformation($"查找任务单{prdMoTask.mo_task_code}的物料配送记录:{JsonConvert.SerializeObject(wmsMaterialkitRecordH)}");
|
||||
|
||||
@@ -2779,23 +2785,24 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
wmsMaterialkitRecordH.times = 0;
|
||||
wmsMaterialkitRecordH.total_time = 0;
|
||||
|
||||
BasMbom basMbom = await db_WmsMaterialkit.Queryable<BasMbom>().Where(r => r.id == prdMoTask.bom_id).FirstAsync();
|
||||
if (basMbom == null)
|
||||
WmsStationBom wmsStationBom = await db_WmsMaterialkit.Queryable<WmsStationBom>().Where(r => r.product_id == prdMoTask.material_id
|
||||
&& r.station_id == prdMoTask.workstation_id).FirstAsync();
|
||||
if (wmsStationBom == null)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}找不到对应的生产Bom资料");
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的工位{workstaiondic[prdMoTask.workstation_id]}以及物料id{prdMoTask.material_id}找不到对应的工位Bom资料");
|
||||
continue;
|
||||
}
|
||||
|
||||
List<BasMbomInput> basMbomInputs = await db_WmsMaterialkit.Queryable<BasMbomInput>().Where(r => r.mbom_id == basMbom.id).ToListAsync();
|
||||
List<BasMaterial> materials = await db_WmsMaterialkit.Queryable<BasMaterial>().Where(r => basMbomInputs.Select(x => x.material_id).Contains(r.id)).ToListAsync();
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom{prdMoTask.bom_id}找到对应的生产Bom清单{string.Join(',', basMbomInputs.Select(r => r.material_id))}");
|
||||
List<WmsStationBomD> wmsStationBomD = await db_WmsMaterialkit.Queryable<WmsStationBomD>().Where(r => r.p_id == wmsStationBom.id).ToListAsync();
|
||||
List<BasMaterial> materials = await db_WmsMaterialkit.Queryable<BasMaterial>().Where(r => wmsStationBomD.Select(x => x.material_id).Contains(r.id)).ToListAsync();
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的工位{workstaiondic[prdMoTask.workstation_id]}找到对应的工位Bom清单{string.Join(',', wmsStationBomD.Select(r => r.material_id))}");
|
||||
List<WmsMaterialkitRecordD> wmsMaterialkitRecordDs = new List<WmsMaterialkitRecordD>();
|
||||
foreach (BasMbomInput input in basMbomInputs)
|
||||
foreach (WmsStationBomD input in wmsStationBomD)
|
||||
{
|
||||
BasMaterial material = materials.Where(r => r.id == input.material_id).First();
|
||||
if (material == null)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的生产Bom id{prdMoTask.bom_id}下的物料id{input.material_id}在物料档案中不存在");
|
||||
LoggerWmsMaterialkit.LogWarning($"任务单{prdMoTask.mo_task_code}绑定的工位Bom 产品{wmsStationBom.product_code} 工位 {wmsStationBom.station_code} 下的明细物料id{input.material_id}在物料档案中不存在");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -2874,7 +2881,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
return newinventory;
|
||||
});
|
||||
|
||||
|
||||
// 查询已有库存 (多工单情况下要考虑库存是否被其它工单预留 暂定)
|
||||
decimal? exists_qty = inventory.Sum(r => r.codeqty);
|
||||
|
||||
@@ -2925,6 +2931,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
.Where(r => wmsMaterialTransfers.Select(x => x.id).Contains(r.bill_id) && r.station_code == workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()).OrderBy(r => r.id).ToListAsync();
|
||||
List<WmsMaterialkitRecordD> wmsMaterialkitRecordDs = await db_WmsMaterialkit.Queryable<WmsMaterialkitRecordD>()
|
||||
.Where(r => r.bill_id == wmsMaterialkitRecord.id && r.status != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID && r.status != WmsWareHouseConst.BILLSTATUS_CANCEL_ID).ToListAsync();
|
||||
|
||||
List<WmsMaterialkitRecordT> wmsMaterialkitRecordTs = new List<WmsMaterialkitRecordT>();
|
||||
foreach (WmsMaterialkitRecordD wmsMaterialkitRecordD in wmsMaterialkitRecordDs)
|
||||
{
|
||||
Stopwatch stopwatch2 = new Stopwatch();
|
||||
@@ -2936,10 +2944,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
List<WmsMaterialTransferD> _wmsMaterialTransferDs = wmsMaterialTransferDs.Where(r => r.material_id == wmsMaterialkitRecordD.material_id).ToList();
|
||||
await db_WmsMaterialkit.Ado.BeginTranAsync();
|
||||
decimal? xf_qty = 0;
|
||||
LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecord.bill_code} 绑定工位{workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()}的料箱物料{wmsMaterialkitRecordD.material_code} 可使用转库单明细为{string.Join(',', _wmsMaterialTransferDs.Select(r => r.id))}");
|
||||
foreach (WmsMaterialTransferD _wmsMaterialTransferD in _wmsMaterialTransferDs)
|
||||
{
|
||||
if (need_qty <= 0)
|
||||
break;
|
||||
DateTime startTime = DateTime.Now;
|
||||
// 转库单可以下发的数量
|
||||
decimal? zkcan_qty = _wmsMaterialTransferD.qty - _wmsMaterialTransferD.yxfqty;
|
||||
// 可以下发的数量
|
||||
@@ -2948,21 +2958,37 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
can_qty = zkcan_qty < need_qty ? zkcan_qty : need_qty;
|
||||
// 查询库存是否有可以下发数量的库存(同批次)
|
||||
// 中储仓库存
|
||||
OutStockStrategyQuery outStockStrategyInput = new()
|
||||
OutStockStrategyZCC2Floor2Query OutStockStrategyInput = new()
|
||||
{
|
||||
warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID,
|
||||
material_id = _wmsMaterialTransferD.material_id,
|
||||
code_batch = _wmsMaterialTransferD.code_batch
|
||||
code_batch = _wmsMaterialTransferD.code_batch,
|
||||
needOut = can_qty,
|
||||
material_code = _wmsMaterialTransferD.material_code,
|
||||
endlocations = new string[2] { WmsWareHouseConst.ZZCSSX121009, WmsWareHouseConst.ZZCSSX121010 }
|
||||
};
|
||||
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(outStockStrategyInput);
|
||||
|
||||
List<Tuple<WmsCarryH, decimal, BasLocation>>? carrys = null;
|
||||
try
|
||||
{
|
||||
carrys = await _wareHouseService.OutStockStrategyZCC2Floor2(OutStockStrategyInput);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecord.bill_code} 绑定工位{workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()}的料箱{ex.Message}");
|
||||
continue;
|
||||
}
|
||||
List<WmsCarryH> items = carrys.Select(r => r.Item1).ToList();
|
||||
List<WmsCarryCode> wmsCarryCodes = await db_WmsMaterialkit.Queryable<WmsCarryCode>()
|
||||
.Where(r => r.material_id == _wmsMaterialTransferD.material_id && r.code_batch == _wmsMaterialTransferD.code_batch
|
||||
&& items.Select(x => x.id).Contains(r.carry_id)).ToListAsync();
|
||||
decimal? inv_qty = wmsCarryCodes.Sum(r => r.codeqty);
|
||||
decimal? inv_qty = carrys.Sum(r => r.Item2);
|
||||
can_qty = inv_qty > can_qty ? can_qty : inv_qty;
|
||||
LoggerWmsMaterialkit.LogWarning($"转库单id{_wmsMaterialTransferD.bill_id} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时可出数量为{can_qty}");
|
||||
WmsMaterialTransfer wmsMaterialTransfer = await db_WmsMaterialkit.Queryable<WmsMaterialTransfer>().Where(r => r.id == _wmsMaterialTransferD.bill_id).FirstAsync();
|
||||
LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时出库的物料数量为{carrys.Sum(r => r.Item2)}其中需要的数量为{inv_qty}");
|
||||
if (can_qty <= 0)
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecord.bill_code} 绑定工位{workstaiondic[wmsMaterialkitRecord.workstation_id].ToString()}的料箱物料{_wmsMaterialTransferD.material_code} 可下发数量为0");
|
||||
continue;
|
||||
}
|
||||
MaterialTransferDDistributeToZCCInput input = new MaterialTransferDDistributeToZCCInput();
|
||||
@@ -2972,13 +2998,43 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
WarehouseMgr.Entities.Dto.Outputs.Result result = await _wmsMaterialTransferService.DistributeDetailToZCC(input);
|
||||
if (result.code.ToString() != "OK")
|
||||
{
|
||||
LoggerWmsMaterialkit.LogWarning($"转库单id{_wmsMaterialTransferD.bill_id} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时数量不匹配!");
|
||||
LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时数量不匹配!");
|
||||
continue;
|
||||
}
|
||||
LoggerWmsMaterialkit.LogWarning($"转库单{wmsMaterialTransfer.bill_code} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库料箱为{string.Join(',', items.Select(x => x.carry_code))}");
|
||||
|
||||
|
||||
DateTime endTime = DateTime.Now;
|
||||
WmsMaterialkitRecordT wmsMaterialkitRecordT = new WmsMaterialkitRecordT();
|
||||
wmsMaterialkitRecordT.create_id = WmsWareHouseConst.AdministratorUserId;
|
||||
wmsMaterialkitRecordT.create_time = DateTime.Now;
|
||||
wmsMaterialkitRecordT.bill_id = wmsMaterialkitRecord.id;
|
||||
wmsMaterialkitRecordT.bill_d_id = _wmsMaterialTransferD.id;
|
||||
wmsMaterialkitRecordT.materialtransfer_id = wmsMaterialTransfer.id;
|
||||
wmsMaterialkitRecordT.materialtransfer_billcode = wmsMaterialTransfer.bill_code;
|
||||
wmsMaterialkitRecordT.materialtransfer_d_id = _wmsMaterialTransferD.id;
|
||||
wmsMaterialkitRecordT.oldqty = wmsMaterialkitRecordD.yxf_qty;
|
||||
wmsMaterialkitRecordT.newqty = wmsMaterialkitRecordD.yxf_qty + can_qty;
|
||||
wmsMaterialkitRecordT.material_id = _wmsMaterialTransferD.material_id;
|
||||
wmsMaterialkitRecordT.material_code = _wmsMaterialTransferD.material_code;
|
||||
wmsMaterialkitRecordT.material_name = _wmsMaterialTransferD.material_ex;
|
||||
wmsMaterialkitRecordT.material_specification = _wmsMaterialTransferD.material_specification;
|
||||
wmsMaterialkitRecordT.code_batch = _wmsMaterialTransferD.code_batch;
|
||||
wmsMaterialkitRecordT.unit_code = _wmsMaterialTransferD.unit_code;
|
||||
wmsMaterialkitRecordT.xf_qty = can_qty;
|
||||
wmsMaterialkitRecordT.start_time = startTime;
|
||||
wmsMaterialkitRecordT.end_time = endTime;
|
||||
wmsMaterialkitRecordT.total_time = (int)(endTime - startTime).TotalMilliseconds;
|
||||
|
||||
wmsMaterialkitRecordTs.Add(wmsMaterialkitRecordT);
|
||||
|
||||
xf_qty += can_qty;
|
||||
need_qty = need_qty - can_qty;
|
||||
|
||||
}
|
||||
|
||||
await db_WmsMaterialkit.Insertable(wmsMaterialkitRecordTs).ExecuteCommandAsync();
|
||||
|
||||
stopwatch2.Stop();
|
||||
|
||||
await db_WmsMaterialkit.Updateable<WmsMaterialkitRecordD>().SetColumns(r => new WmsMaterialkitRecordD
|
||||
@@ -3077,7 +3133,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
||||
agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
||||
|
||||
//WmsMaterialkittimer = new Timer(WmsMaterialkit, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20));
|
||||
WmsMaterialkittimer = new Timer(WmsMaterialkit, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(300));
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
@@ -58,6 +58,10 @@
|
||||
/// 四楼灭菌仓
|
||||
/// </summary>
|
||||
public const string WAREHOUSE_MJC_ID = "35412482304021";
|
||||
/// <summary>
|
||||
/// 外包装缓存仓
|
||||
/// </summary>
|
||||
public const string WAREHOUSE_WBZHHC_ID = "27209786980373";
|
||||
|
||||
/// <summary>
|
||||
/// 二楼包材区
|
||||
|
||||
@@ -86,5 +86,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
||||
/// 子表主键
|
||||
/// </summary>
|
||||
public string erp_line_pk { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商(辅助属性)
|
||||
/// </summary>
|
||||
public string? auxprop_gys { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,5 +95,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs
|
||||
/// 供应商(辅助属性)
|
||||
/// </summary>
|
||||
public string auxprop_gys { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产单位(厂商)
|
||||
/// </summary>
|
||||
public string? production_unit { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
// 策略编号
|
||||
public string PolicyCode { get; set; }
|
||||
|
||||
// 策略编号
|
||||
public ISqlSugarClient dbConn { get; set; } = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
{
|
||||
public class OutStockStrategyZCC2Floor2Query
|
||||
{
|
||||
@@ -54,5 +56,6 @@
|
||||
/// </summary>
|
||||
public string[] endlocations { get; set; }
|
||||
|
||||
public ISqlSugarClient dbConn { get; set; } = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,4 +119,14 @@ public partial class WmsOutsourceD : BaseEntity<string>
|
||||
/// </summary>
|
||||
public decimal? bind_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 辅助属性(小批号)
|
||||
/// </summary>
|
||||
public string? auxprop_xph { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商(辅助属性)
|
||||
/// </summary>
|
||||
public string? auxprop_gys { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -128,4 +128,9 @@ public partial class WmsOutsourceOrderD : BaseEntity<string>
|
||||
/// 行号
|
||||
/// </summary>
|
||||
public string? lineno { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 供应商(辅助属性)
|
||||
/// </summary>
|
||||
public string? auxprop_gys { get; set; }
|
||||
}
|
||||
|
||||
@@ -155,5 +155,9 @@ public partial class WmsPurchaseD : BaseEntity<string>
|
||||
/// </summary>
|
||||
public string? auxprop_gys { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产单位(厂商)
|
||||
/// </summary>
|
||||
public string? production_unit { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -139,4 +139,9 @@ public partial class WmsPurchaseOrderD : BaseEntity<string>
|
||||
/// </summary>
|
||||
public string? auxprop_gys { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产单位(厂商)
|
||||
/// </summary>
|
||||
public string? production_unit { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -74,4 +74,21 @@ public partial class WmsSortingtask : BaseEntity<string>
|
||||
/// </summary>
|
||||
public string source_id { get; set; } = string.Empty;
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string material_id { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string material_code { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string material_name { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string material_specification { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string code_batch { get; set; }
|
||||
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public string erp_bill_code { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 工位BOM
|
||||
/// </summary>
|
||||
[SugarTable("wms_station_bom")]
|
||||
public partial class WmsStationBom : BaseEntity<string>
|
||||
{
|
||||
public WmsStationBom()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 组织管理里面的工位ID
|
||||
/// </summary>
|
||||
public string? station_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 工位编号
|
||||
/// </summary>
|
||||
public string? station_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 产品id
|
||||
/// </summary>
|
||||
public string? product_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 产品编号
|
||||
/// </summary>
|
||||
public string? product_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 产品名称
|
||||
/// </summary>
|
||||
public string? product_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public long? ordinal { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string? remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程任务Id
|
||||
/// </summary>
|
||||
public string? f_flowtaskid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程引擎Id
|
||||
/// </summary>
|
||||
public string? f_flowid { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Entity;
|
||||
|
||||
/// <summary>
|
||||
/// 工位BOM字表
|
||||
/// </summary>
|
||||
[SugarTable("wms_station_bom_d")]
|
||||
public partial class WmsStationBomD : BaseEntity<string>
|
||||
{
|
||||
public WmsStationBomD()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 工位BOM表ID
|
||||
/// </summary>
|
||||
public string? p_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料ID
|
||||
/// </summary>
|
||||
public string? material_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料编号
|
||||
/// </summary>
|
||||
public string? material_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料名称
|
||||
/// </summary>
|
||||
public string? material_name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位
|
||||
/// </summary>
|
||||
public string? unit { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 投入数量
|
||||
/// </summary>
|
||||
public decimal? molecule { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 产出数量
|
||||
/// </summary>
|
||||
public decimal? denominator { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位编码
|
||||
/// </summary>
|
||||
public string? unit_code { get; set; }
|
||||
|
||||
}
|
||||
@@ -431,6 +431,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsPurchaseOrderD.actual_quantity = 0;
|
||||
wmsPurchaseOrderD.lineno = detail.lineno;
|
||||
wmsPurchaseOrderD.gift = detail.gift;
|
||||
wmsPurchaseOrderD.production_unit = detail.production_unit;
|
||||
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
@@ -647,6 +648,7 @@ namespace Tnb.WarehouseMgr
|
||||
wmsOutsourceOrderD.matcode_id = material.id;
|
||||
wmsOutsourceOrderD.matspecification = material.material_specification;
|
||||
}
|
||||
wmsOutsourceOrderD.auxprop_gys = detail.auxprop_gys;
|
||||
|
||||
wmsOutsourceOrderDs.Add(wmsOutsourceOrderD);
|
||||
}
|
||||
@@ -991,44 +993,38 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
|
||||
string transfer_type = "";
|
||||
// 中储仓到暂存仓
|
||||
#region 转库类型
|
||||
// 齐套出入库
|
||||
if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID
|
||||
&& (warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZCC_ID || warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID))
|
||||
{
|
||||
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
|
||||
if (count > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细!");
|
||||
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
|
||||
}
|
||||
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_CP_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBRK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_JZGL_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_JZGLRK_CODE;
|
||||
}
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
|
||||
{
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CROSSLAYER_CODE;
|
||||
}
|
||||
|
||||
// 暂时其他情况都算齐套出入库类型(未定)
|
||||
else
|
||||
{
|
||||
int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
|
||||
if (count > 0)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细!");
|
||||
throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
|
||||
}
|
||||
|
||||
//int count = input.details.Where(r => string.IsNullOrEmpty(r.station_code)).Count();
|
||||
//if (count > 0)
|
||||
//{
|
||||
// _LoggerErp2Mes.LogWarning($@"【MaterialTransfer】表体存在未填写工位的明细!");
|
||||
// throw new AppFriendlyException($@"表体存在未填写工位的明细!", 500);
|
||||
//}
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_QTCRK_CODE;
|
||||
}
|
||||
// 外协调拨入库
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBRK_CODE;
|
||||
// 集中供料入库
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_JZGL_ID)
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_JZGLRK_CODE;
|
||||
// 跨层外协件出入库
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CROSSLAYER_CODE;
|
||||
// 包材出库
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_BCK_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_F2BCQ_ID)
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_PACKING_CODE;
|
||||
// 长管出库
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_HCC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_CGCK_CODE;
|
||||
// 外协调拨出库
|
||||
else if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_ZC_ID && warehouse_instock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID)
|
||||
transfer_type = WmsWareHouseConst.MATERIALTRANSFER_WXDBOUTWAREHOUSE_CODE;
|
||||
#endregion
|
||||
|
||||
|
||||
//var wmsMaterialTransferdsDistinct = input.details.Select(r => new
|
||||
@@ -1774,6 +1770,78 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
//break;
|
||||
}
|
||||
case WmsWareHouseConst.WAREHOUSE_BCK_ID:
|
||||
{
|
||||
|
||||
WmsPackInstockH wmsPackInstockH = new WmsPackInstockH();
|
||||
Code = await _billRuleService.GetBillNumber("WMSPACKINSTOCK");
|
||||
|
||||
wmsPackInstockH.bill_code = Code;
|
||||
wmsPackInstockH.erp_bill_code = input.transfer_order;
|
||||
var org_erpExtendField = await db.Queryable<ErpExtendField>().Where(a => a.pk_org == input.outstockorg_id).FirstAsync();
|
||||
if (org_erpExtendField != null)
|
||||
{
|
||||
wmsPackInstockH.outstockorg_id = org_erpExtendField.pk_org_v;
|
||||
wmsPackInstockH.outstockorg_code = org_erpExtendField.pk_org;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_id}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_id}在wms系统中未找到!", 500);
|
||||
}
|
||||
wmsPackInstockH.incoming_ware = warehouse_instock.id;
|
||||
wmsPackInstockH.org_id = WmsWareHouseConst.AdministratorOrgId;
|
||||
wmsPackInstockH.erp_pk = input.erp_pk;
|
||||
wmsPackInstockH.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPackInstockH.bill_date = DateTime.Now;
|
||||
wmsPackInstockH.create_time = DateTime.Now;
|
||||
wmsPackInstockH.erp_wh_type = input.warehouse_instock;
|
||||
await db.Insertable(wmsPackInstockH).ExecuteCommandAsync();
|
||||
|
||||
List<WmsPackInstockD> wmsPackInstockDs = new List<WmsPackInstockD>();
|
||||
foreach (var detail in input.details)
|
||||
{
|
||||
WmsPackInstockD wmsPackInstockD = new WmsPackInstockD();
|
||||
|
||||
wmsPackInstockD.bill_id = wmsPackInstockH.id;
|
||||
wmsPackInstockD.material_code = detail.material_code;
|
||||
|
||||
var erpExtendField = await db.Queryable<ErpExtendField>().InnerJoin<DictionaryDataEntity>((a, b) => a.table_id == b.Id).Where((a, b) => b.EnCode == detail.unit_code).Select((a, b) => b).FirstAsync();
|
||||
if (erpExtendField != null)
|
||||
{
|
||||
wmsPackInstockD.unit_id = erpExtendField.Id;
|
||||
wmsPackInstockD.unit_code = erpExtendField.EnCode;
|
||||
}
|
||||
else
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体明细中单位{detail.unit_code}在wms系统中未找到!");
|
||||
throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500);
|
||||
}
|
||||
wmsPackInstockD.pr_qty = detail.qty;
|
||||
wmsPackInstockD.pi_code = detail.code_batch;
|
||||
wmsPackInstockD.erp_line_pk = detail.erp_line_pk;
|
||||
wmsPackInstockD.create_id = WmsWareHouseConst.ErpUserId;
|
||||
wmsPackInstockD.create_time = DateTime.Now;
|
||||
wmsPackInstockD.xf_qty = 0;
|
||||
wmsPackInstockD.qty = 0;
|
||||
wmsPackInstockD.lineno = detail.lineno;
|
||||
var material = await db.Queryable<BasMaterial>().Where(p => p.code == detail.material_code).FirstAsync();
|
||||
if (material != null)
|
||||
{
|
||||
wmsPackInstockD.material_id = material.id;
|
||||
wmsPackInstockD.material_code = material.code;
|
||||
wmsPackInstockD.material_desc = material.material_specification;
|
||||
}
|
||||
wmsPackInstockD.auxprop_gys = detail.auxprop_gys;
|
||||
wmsPackInstockD.auxprop_xph = detail.auxprop_xph;
|
||||
|
||||
wmsPackInstockDs.Add(wmsPackInstockD);
|
||||
}
|
||||
|
||||
await db.Insertable(wmsPackInstockDs).ExecuteCommandAsync();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
await db.Ado.CommitTranAsync();
|
||||
@@ -2420,16 +2488,16 @@ namespace Tnb.WarehouseMgr
|
||||
throw new AppFriendlyException($@"子表主键不能为空!", 500);
|
||||
}
|
||||
|
||||
var wmsInventorychecksDistinct = input.details.Select(r => new
|
||||
{
|
||||
material_id = r.material_code,
|
||||
code_batch = r.code_batch,
|
||||
}).Distinct();
|
||||
if (wmsInventorychecksDistinct.Count() < input.details.Count)
|
||||
{
|
||||
_LoggerErp2Mes.LogWarning($@"【Inventorycheck】表体存在物料和批号重复的明细!");
|
||||
throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
|
||||
}
|
||||
//var wmsInventorychecksDistinct = input.details.Select(r => new
|
||||
//{
|
||||
// material_id = r.material_code,
|
||||
// code_batch = r.code_batch,
|
||||
//}).Distinct();
|
||||
//if (wmsInventorychecksDistinct.Count() < input.details.Count)
|
||||
//{
|
||||
// _LoggerErp2Mes.LogWarning($@"【Inventorycheck】表体存在物料和批号重复的明细!");
|
||||
// throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500);
|
||||
//}
|
||||
|
||||
WmsErpWarehouserelaH wmsErpWarehouserelaH = await db.Queryable<WmsErpWarehouserelaH>().Where(r => r.erp_warehousecode == input.warehouse_code).FirstAsync();
|
||||
if (wmsErpWarehouserelaH == null)
|
||||
|
||||
@@ -504,7 +504,7 @@ namespace Tnb.WarehouseMgr
|
||||
.LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id)
|
||||
.Where(whereExpr)
|
||||
//.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty())
|
||||
.OrderBy("a.location_code,layers,loc_line,loc_column")
|
||||
.OrderBy("b.codeqty desc")
|
||||
.Select((a, b, c) => new
|
||||
{
|
||||
WmsCarryH = a,
|
||||
@@ -656,6 +656,11 @@ namespace Tnb.WarehouseMgr
|
||||
/// <exception cref="AppFriendlyException"></exception>
|
||||
public async Task<List<Tuple<WmsCarryH, decimal, BasLocation>>> OutStockStrategyZCC2Floor2([FromQuery] OutStockStrategyZCC2Floor2Query input)
|
||||
{
|
||||
var cyDb = input.dbConn;
|
||||
if (input.dbConn == null)
|
||||
{
|
||||
cyDb = _db.CopyNew();
|
||||
}
|
||||
Expressionable<WmsCarryH, WmsCarryCode, BasLocation> whereExprable = Expressionable.Create<WmsCarryH, WmsCarryCode, BasLocation>()
|
||||
.And((a, b, c) => a.is_lock == 0 && c.is_lock == 0)
|
||||
.And((a, b, c) => !string.IsNullOrEmpty(a.location_id))
|
||||
@@ -673,7 +678,6 @@ namespace Tnb.WarehouseMgr
|
||||
_ = whereExprable.And(carryStatusFilterExp);
|
||||
Expression<Func<WmsCarryH, WmsCarryCode, BasLocation, bool>> whereExpr = whereExprable.ToExpression();
|
||||
|
||||
SqlSugarClient cyDb = _db.CopyNew();
|
||||
WmsInstockPolicies policy = await cyDb.Queryable<WmsInstockPolicies>().Where(it => it.status == 1).FirstAsync();
|
||||
if (policy == null)
|
||||
{
|
||||
@@ -730,7 +734,7 @@ namespace Tnb.WarehouseMgr
|
||||
// 每6个重新获取一次终点
|
||||
if (i % move_num == 0)
|
||||
{
|
||||
endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
endlocation_ssx = await cyDb.Queryable<BasLocation>().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
}
|
||||
|
||||
// 查找是否有一个料箱可以正好满足剩余需求数量(目前只做这个额外判断,其它情形不考虑)
|
||||
@@ -743,7 +747,7 @@ namespace Tnb.WarehouseMgr
|
||||
needOut -= _wmsCarryCode.codeqty;
|
||||
WmsCarryH _wmsCarryH = itemsDESC[j].wmsCarryH;
|
||||
|
||||
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
await cyDb.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
|
||||
carrysDESC.Add(new Tuple<WmsCarryH, decimal, BasLocation>(_wmsCarryH, _wmsCarryCode.codeqty, endlocation_ssx));
|
||||
|
||||
@@ -758,7 +762,7 @@ namespace Tnb.WarehouseMgr
|
||||
// 目前只支持一个料箱只有一个物料
|
||||
needOut -= wmsCarryCode.codeqty;
|
||||
|
||||
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
await cyDb.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
|
||||
carrysDESC.Add(new Tuple<WmsCarryH, decimal, BasLocation>(wmsCarryH, wmsCarryCode.codeqty, endlocation_ssx));
|
||||
}
|
||||
@@ -787,7 +791,7 @@ namespace Tnb.WarehouseMgr
|
||||
// 每6个重新获取一次终点
|
||||
if (i % move_num == 0)
|
||||
{
|
||||
endlocation_ssx = await _db.Queryable<BasLocation>().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
endlocation_ssx = await cyDb.Queryable<BasLocation>().Where(r => input.endlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
}
|
||||
|
||||
// 查找是否有一个料箱可以正好满足剩余需求数量(目前只做这个额外判断,其它情形不考虑)
|
||||
@@ -800,7 +804,7 @@ namespace Tnb.WarehouseMgr
|
||||
needOut -= _wmsCarryCode.codeqty;
|
||||
WmsCarryH _wmsCarryH = itemsASC[j].wmsCarryH;
|
||||
|
||||
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
await cyDb.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
|
||||
carrysASC.Add(new Tuple<WmsCarryH, decimal, BasLocation>(_wmsCarryH, _wmsCarryCode.codeqty, endlocation_ssx));
|
||||
|
||||
@@ -815,7 +819,7 @@ namespace Tnb.WarehouseMgr
|
||||
// 目前只支持一个料箱只有一个物料
|
||||
needOut -= wmsCarryCode.codeqty;
|
||||
|
||||
await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
await cyDb.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
|
||||
|
||||
carrysASC.Add(new Tuple<WmsCarryH, decimal, BasLocation>(wmsCarryH, wmsCarryCode.codeqty, endlocation_ssx));
|
||||
}
|
||||
@@ -957,11 +961,11 @@ namespace Tnb.WarehouseMgr
|
||||
//putdic.Add("ZS-A06-1", new string[] { "hxjA", "A8允许入空箱", });
|
||||
//getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8允许取满箱" });
|
||||
|
||||
//putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9允许入空箱", });
|
||||
//getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9允许取满箱" });
|
||||
putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9允许入空箱", });
|
||||
getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9允许取满箱" });
|
||||
|
||||
//putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10允许入空箱", });
|
||||
//getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10允许取满箱" });
|
||||
putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10允许入空箱", });
|
||||
getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10允许取满箱" });
|
||||
|
||||
putdic.Add("ZS-D01-1", new string[] { "hxjA", "A1允许入空箱", });
|
||||
getdic.Add("ZS-D01-2", new string[] { "hxjA", "A1允许取满箱" });
|
||||
@@ -1090,8 +1094,8 @@ namespace Tnb.WarehouseMgr
|
||||
//getdic.Add("ZS-D06-2", new string[] { "hxjA", "A6AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13AGV允许入满箱", "true" });
|
||||
@@ -1234,8 +1238,8 @@ namespace Tnb.WarehouseMgr
|
||||
//getdic.Add("ZS-D06-2", new string[] { "hxjA", "A6AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" });
|
||||
//getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12AGV允许入满箱", "true" });
|
||||
getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13AGV允许入满箱", "true" });
|
||||
@@ -1282,8 +1286,8 @@ namespace Tnb.WarehouseMgr
|
||||
//putdic.Add("ZS-D06-1", new string[] { "hxjA", "A6AGV允许出空箱", "false" });
|
||||
//putdic.Add("ZS-A05-1", new string[] { "hxjA", "A7AGV允许出空箱", "true" });
|
||||
//putdic.Add("ZS-A06-1", new string[] { "hxjA", "A8AGV允许出空箱", "true" });
|
||||
//putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9AGV允许出空箱", "true" });
|
||||
//putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10AGV允许出空箱", "true" });
|
||||
putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9AGV允许出空箱", "true" });
|
||||
putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10AGV允许出空箱", "true" });
|
||||
putdic.Add("ZS-A09-1", new string[] { "hxjA", "A11AGV允许出空箱", "true" });
|
||||
putdic.Add("ZS-A10-1", new string[] { "hxjA", "A12AGV允许出空箱", "true" });
|
||||
putdic.Add("ZS-A11-1", new string[] { "hxjA", "A13AGV允许出空箱", "false" });
|
||||
@@ -2639,8 +2643,8 @@ namespace Tnb.WarehouseMgr
|
||||
#region 电梯第三次改动
|
||||
|
||||
var _floor3FirstSelectElevator = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3FirstSelectElevator").FirstAsync();
|
||||
// 一托下且当前电梯还没有后续任务且首选电梯为当前电梯的情况下,切换首选电梯为另一部
|
||||
int task_nums = db.Queryable<WmsElevatorH>().Where(r => r.elevator_code == devName).Sum(r => r.task_nums);
|
||||
// 一托下且当前电梯组还没有后续任务且首选电梯为当前电梯的情况下,切换首选电梯为另一部
|
||||
int task_nums = db.Queryable<WmsElevatorH>().Where(r => r.elevator_group == "2").Sum(r => r.task_nums);
|
||||
if (disTaskIds.Count == 1 && task_nums == 1 && devName == _floor3FirstSelectElevator.value)
|
||||
{
|
||||
await ChangeSelectedElevator(db);
|
||||
|
||||
@@ -205,7 +205,7 @@ namespace Tnb.WarehouseMgr
|
||||
throw new Exception($"条码{string.Join(',', input.details.Select(r => r.barcode))}来源采购收货明细不存在!");
|
||||
}
|
||||
// 收货质检之后不能绑定
|
||||
if (!string.IsNullOrEmpty(wmsPurchaseD.qc_res))
|
||||
if (!string.IsNullOrEmpty(wmsPurchaseD.qc_res) && wmsPurchaseD.qc_res != "await")
|
||||
{
|
||||
WmsPurchaseH wmsPurchaseH = await _db.Queryable<WmsPurchaseH>().Where(r => r.id == wmsPurchaseD.bill_id).FirstAsync();
|
||||
throw new Exception($"采购收货单{wmsPurchaseH.bill_code}中物料为 {wmsPurchaseD.material_code} 批次为{wmsPurchaseD.code_batch}的明细已进行过收货质检,此明细不能再绑定物料!");
|
||||
@@ -312,7 +312,7 @@ namespace Tnb.WarehouseMgr
|
||||
}).Where(r => r.id == carry.id).ExecuteCommandAsync();
|
||||
if (rows == 0)
|
||||
{
|
||||
throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个!");
|
||||
throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 成功绑定的条码数量为0个!");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -386,7 +386,7 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
if (rows == 0)
|
||||
{
|
||||
throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个!");
|
||||
throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 成功绑定的条码数量为0个!");
|
||||
}
|
||||
}
|
||||
catch (PostgresException ex)
|
||||
|
||||
@@ -335,7 +335,7 @@ namespace Tnb.WarehouseMgr
|
||||
int rows = await _db.Insertable<WmsCarryCode>(wmsCarryCode).ExecuteCommandAsync();
|
||||
if (rows == 0)
|
||||
{
|
||||
throw new Exception($"接收到1个条码 但是成功绑定的条码数量为0个!");
|
||||
throw new Exception($"接收到1个条码 成功绑定的条码数量为0个!");
|
||||
}
|
||||
await _db.Updateable<WmsCarryH>().SetColumns(r => r.carry_status == ((int)EnumCarryStatus.占用).ToString()).Where(r => r.id == input.carry_id).ExecuteCommandAsync();
|
||||
|
||||
|
||||
@@ -303,13 +303,15 @@ namespace Tnb.WarehouseMgr
|
||||
if (instock.bill_type == WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID)
|
||||
{
|
||||
WmsPurchaseD wmsPurchaseD = await _db.Queryable<WmsPurchaseD>().SingleAsync(x => x.id == input.wmsDistaskH.source_id);
|
||||
|
||||
await _db.Updateable<WmsCarryCode>().SetColumns(r => new WmsCarryCode
|
||||
string purchaseHId = wmsPurchaseD?.bill_id ?? "";
|
||||
WmsPurchaseH wmsPurchaseH = await _db.Queryable<WmsPurchaseH>().SingleAsync(x => x.id == purchaseHId);
|
||||
int row =await _db.Updateable<WmsCarryCode>().SetColumns(r => new WmsCarryCode
|
||||
{
|
||||
auxprop_gys = wmsPurchaseD.auxprop_gys,
|
||||
auxprop_xph = wmsPurchaseD.auxprop_xph
|
||||
}).Where(r => r.carry_id == input.wmsDistaskH.carry_id).ExecuteCommandAsync();
|
||||
|
||||
if (wmsPurchaseH.make_method == "自制")
|
||||
{
|
||||
if (instock.sync_status != WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC)
|
||||
{
|
||||
//如果是自动单据,需要回更上层系统
|
||||
@@ -340,12 +342,10 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
string purchaseDId = wmsTempCode?.require_id ?? "";
|
||||
//WmsPurchaseD wmsPurchaseD = await _db.Queryable<WmsPurchaseD>().SingleAsync(x => x.id == purchaseDId);
|
||||
string purchaseHId = wmsPurchaseD?.bill_id ?? "";
|
||||
WmsPurchaseH wmsPurchaseH = await _db.Queryable<WmsPurchaseH>().SingleAsync(x => x.id == purchaseHId);
|
||||
string wmsPurchaseOrderHId = wmsPurchaseH?.erp_bill_code ?? "";
|
||||
WmsPurchaseOrderH wmsPurchaseOrderH = await _db.Queryable<WmsPurchaseOrderH>().SingleAsync(x => x.id == wmsPurchaseOrderHId);
|
||||
WmsPurchaseOrderD wmsPurchaseOrderDs = await _db.Queryable<WmsPurchaseOrderD>().FirstAsync(x => x.fk_wms_purchase_order_id == wmsPurchaseOrderHId);
|
||||
BasWarehouse basWarehouse = await _db.Queryable<BasWarehouse>().SingleAsync(x=>x.id==instock.warehouse_id);
|
||||
BasWarehouse basWarehouse = await _db.Queryable<BasWarehouse>().SingleAsync(x => x.id == instock.warehouse_id);
|
||||
|
||||
List<String> materialIds = allInstockDetails.Select(x => x.material_id).Distinct().ToList();
|
||||
List<String> unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList();
|
||||
@@ -354,9 +354,9 @@ namespace Tnb.WarehouseMgr
|
||||
.Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode))
|
||||
.Select((x, y) => y)
|
||||
.ToListAsync();
|
||||
List<WmsErpWarehouserelaH> erpWarehouserelaHs = await _db.Queryable<WmsErpWarehouserelaH>().Where(x=>x.id!=null).ToListAsync();
|
||||
List<WmsErpWarehouserelaH> erpWarehouserelaHs = await _db.Queryable<WmsErpWarehouserelaH>().Where(x => x.id != null).ToListAsync();
|
||||
|
||||
DictionaryDataEntity tranType = await _db.Queryable<DictionaryDataEntity>().Where(x=>x.DictionaryTypeId=="25043925951909" && x.EnCode==wmsPurchaseH.transaction_type).FirstAsync();
|
||||
DictionaryDataEntity tranType = await _db.Queryable<DictionaryDataEntity>().Where(x => x.DictionaryTypeId == "25043925951909" && x.EnCode == wmsPurchaseH.transaction_type).FirstAsync();
|
||||
string tranTypeId = tranType?.Id ?? "";
|
||||
string supplierId = wmsPurchaseOrderH?.supplier_id ?? "";
|
||||
List<string> tableIds = new List<string>();
|
||||
@@ -440,7 +440,7 @@ namespace Tnb.WarehouseMgr
|
||||
["vsourcebillcode"] = wmsPurchaseH?.bill_code ?? "",
|
||||
["lineno"] = wmsPurchaseOrderDs?.lineno ?? "",
|
||||
["vfree1"] = erpExtendFields.Find(x => x.table_id == supplierId)?.supplier_id ?? "",
|
||||
["bpresent"] = wmsPurchaseD.gift==1,
|
||||
["bpresent"] = wmsPurchaseD.gift == 1,
|
||||
["ntaxprice"] = wmsPurchaseD.price,
|
||||
|
||||
});
|
||||
@@ -458,16 +458,26 @@ namespace Tnb.WarehouseMgr
|
||||
thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/purchaseIn/save";
|
||||
thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData);
|
||||
thirdWebapiRecord.create_time = DateTime.Now;
|
||||
thirdWebapiRecord.remark = "采购收货单号:" + (wmsPurchaseH?.bill_code ?? "") + ",erp采购订单号:"+(wmsPurchaseOrderH?.erp_bill_code ?? "");
|
||||
thirdWebapiRecord.remark = "采购收货单号:" + (wmsPurchaseH?.bill_code ?? "") + ",erp采购订单号:" + (wmsPurchaseOrderH?.erp_bill_code ?? "");
|
||||
await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
|
||||
BasFactoryConfig callErp = await _db.Queryable<BasFactoryConfig>().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.CALLERP);
|
||||
if(callErp.value=="1"){
|
||||
if (callErp.value == "1")
|
||||
{
|
||||
await _thirdApiRecordService.Send(new List<ThirdWebapiRecord> { thirdWebapiRecord }, "自动", _db);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 委外入库
|
||||
else if (instock.bill_type == WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID)
|
||||
{
|
||||
WmsOutsourceD wmsOutsourceD = await _db.Queryable<WmsOutsourceD>().SingleAsync(x => x.id == input.wmsDistaskH.source_id);
|
||||
//string wmsOutsourceDId = wmsOutsourceD?.fk_wms_outsource_order_id ?? "";
|
||||
//WmsOutsourceH wWmsOutsourceH = await _db.Queryable<WmsOutsourceH>().SingleAsync(x => x.id == wmsOutsourceDId);
|
||||
int row = await _db.Updateable<WmsCarryCode>().SetColumns(r => new WmsCarryCode
|
||||
{
|
||||
auxprop_gys = wmsOutsourceD.auxprop_gys,
|
||||
auxprop_xph = wmsOutsourceD.auxprop_xph
|
||||
}).Where(r => r.carry_id == input.wmsDistaskH.carry_id).ExecuteCommandAsync();
|
||||
|
||||
}
|
||||
// 调拨入库
|
||||
|
||||
@@ -331,10 +331,10 @@ namespace Tnb.WarehouseMgr
|
||||
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
||||
|
||||
//if (wmsMaterialTransferD.yxfqty >= wmsMaterialTransferD.qty)
|
||||
//{
|
||||
// throw new AppFriendlyException("已下发数量已达到转库数量", 500);
|
||||
//}
|
||||
if (wmsMaterialTransferD.yxfqty >= wmsMaterialTransferD.qty)
|
||||
{
|
||||
throw new AppFriendlyException("已下发数量已达到转库数量", 500);
|
||||
}
|
||||
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
@@ -363,7 +363,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
List<BasLocation> endLocations = new List<BasLocation>();
|
||||
// 集中供料区三工位
|
||||
if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID)
|
||||
if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID|| wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_WBZHHC_ID)
|
||||
{
|
||||
// 根据三工位任务数平均分配任务 暂定
|
||||
endLocations = _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1GLSGWOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0")
|
||||
@@ -376,6 +376,11 @@ namespace Tnb.WarehouseMgr
|
||||
endLocations = _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1WXSGWOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0")
|
||||
.OrderBy("is_lock, task_nums, location_code").ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
BasWarehouse basWarehouse = await _db.Queryable<BasWarehouse>().Where(r => r.id == wmsMaterialTransfer.warehouse_instock).FirstAsync();
|
||||
throw new AppFriendlyException($@"当前不允许到转库单{wmsMaterialTransfer.bill_code}入库仓库{basWarehouse.whname}的转库操作", 500);
|
||||
}
|
||||
|
||||
if (endLocations.Count() < input.palletCount)
|
||||
{
|
||||
@@ -388,7 +393,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
BasLocation endLocation = null;
|
||||
// 集中供料区三工位
|
||||
if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID)
|
||||
if (wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_JZGL_ID || wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_WBZHHC_ID)
|
||||
{
|
||||
// 根据三工位任务数平均分配任务 暂定
|
||||
endLocation = await _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1GLSGWOutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
@@ -530,6 +535,11 @@ namespace Tnb.WarehouseMgr
|
||||
throw new AppFriendlyException($"下发数量{qty}已超过可下发数量{wmsMaterialTransferD.qty - wmsMaterialTransferD.yxfqty_rk}", 500);
|
||||
}
|
||||
|
||||
if (qty > otherOutstockD_first.qty - otherOutstockD_first.rk_qty)
|
||||
{
|
||||
throw new AppFriendlyException($"下发数量{qty}已超过其它出库单{otherOutstockH.bill_code}中物料{otherOutstockD_first.material_code}的可下发数量{otherOutstockD_first.qty - otherOutstockD_first.rk_qty}", 500);
|
||||
}
|
||||
|
||||
await _db.Ado.BeginTranAsync();
|
||||
//入库取终点 //出库起点
|
||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID, Size = input.details.Count };
|
||||
@@ -545,6 +555,8 @@ namespace Tnb.WarehouseMgr
|
||||
throw new AppFriendlyException("可用的入库库位数量少于扫描的料箱数量", 500);
|
||||
}
|
||||
|
||||
await _db.Updateable<OtherOutstockD>().SetColumns(r => r.rk_qty == otherOutstockD_first.rk_qty + qty).Where(r => r.id == otherOutstockD_first.id).ExecuteCommandAsync();
|
||||
|
||||
int index = 0;
|
||||
|
||||
List<WmsCarryH> wmsCarryHs = await _db.Queryable<WmsCarryH>().Where(r => input.details.Select(x => x.carry_code).Contains(r.carry_code)).ToListAsync();
|
||||
@@ -988,9 +1000,9 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
#region 更新已转数量
|
||||
// 8线到中储仓入库或三工位退回原材料操作时回写数量
|
||||
if ((wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_YCL_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||
if (((wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_YCL_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_ZC_ID)
|
||||
|| (wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_ZC_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_YCL_ID)
|
||||
&& input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID)
|
||||
)&& input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID)
|
||||
{
|
||||
// 更新已转数量(入库)
|
||||
isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty_rk = it.yzqty_rk + wmsCarryCodes.Sum(r => r.codeqty) })
|
||||
@@ -998,7 +1010,7 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
// 中储仓到8线后自动解绑物料
|
||||
// 中储仓到7线后自动解绑物料
|
||||
if ((wmsMaterialTransfer.warehouse_outstock == WmsWareHouseConst.WAREHOUSE_ZC_ID && wmsMaterialTransfer.warehouse_instock == WmsWareHouseConst.WAREHOUSE_YCL_ID)
|
||||
&& input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_TRANSFER_TYPE_ID)
|
||||
{
|
||||
@@ -1326,16 +1338,16 @@ namespace Tnb.WarehouseMgr
|
||||
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在未填写工位的明细!", 500);
|
||||
}
|
||||
|
||||
var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new
|
||||
{
|
||||
material_id = r.material_id,
|
||||
code_batch = r.code_batch,
|
||||
}).Distinct();
|
||||
if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count)
|
||||
{
|
||||
Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!");
|
||||
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500);
|
||||
}
|
||||
//var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new
|
||||
//{
|
||||
// material_id = r.material_id,
|
||||
// code_batch = r.code_batch,
|
||||
//}).Distinct();
|
||||
//if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count)
|
||||
//{
|
||||
// Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!");
|
||||
// throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500);
|
||||
//}
|
||||
|
||||
// 转库单载具子表
|
||||
List<WmsMaterialTransferCarry> wmsMaterialTransferCarrys = new List<WmsMaterialTransferCarry>();
|
||||
@@ -1480,7 +1492,7 @@ namespace Tnb.WarehouseMgr
|
||||
//出库取起点,获取所有符合输入的载具规格的载具
|
||||
OutStockStrategyZCC2Floor2Query OutStockStrategyInput = new()
|
||||
{
|
||||
warehouse_id = "2",
|
||||
warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID,
|
||||
material_id = wmsMaterialTransferD.material_id,
|
||||
code_batch = wmsMaterialTransferD.code_batch,
|
||||
needOut = needOut,
|
||||
@@ -1598,16 +1610,16 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
List<WmsMaterialTransferD> wmsMaterialTransferds = _db.Queryable<WmsMaterialTransferD>().Where(r => r.bill_id == input.source_id).ToList();
|
||||
|
||||
var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new
|
||||
{
|
||||
material_id = r.material_id,
|
||||
code_batch = r.code_batch,
|
||||
}).Distinct();
|
||||
if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count)
|
||||
{
|
||||
Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!");
|
||||
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500);
|
||||
}
|
||||
//var wmsMaterialTransferdsDistinct = wmsMaterialTransferds.Select(r => new
|
||||
//{
|
||||
// material_id = r.material_id,
|
||||
// code_batch = r.code_batch,
|
||||
//}).Distinct();
|
||||
//if (wmsMaterialTransferdsDistinct.Count() < wmsMaterialTransferds.Count)
|
||||
//{
|
||||
// Logger.LogWarning($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!");
|
||||
// throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}表体存在物料和批号重复的明细!", 500);
|
||||
//}
|
||||
|
||||
// 转库单载具子表
|
||||
List<WmsMaterialTransferCarry> wmsMaterialTransferCarrys = new List<WmsMaterialTransferCarry>();
|
||||
@@ -1787,9 +1799,14 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
throw new AppFriendlyException($"本次下发数量{input.qty}已超过可下发数量{wmsMaterialTransferD.yzqty - wmsMaterialTransferD.yxfqty_rk}", 500);
|
||||
}
|
||||
if (input.qty > otherOutstockD_first.qty - otherOutstockD_first.rk_qty)
|
||||
{
|
||||
throw new AppFriendlyException($"下发数量{input.qty}已超过其它出库单{otherOutstockH.bill_code}中物料{otherOutstockD_first.material_code}的可下发数量{otherOutstockD_first.qty - otherOutstockD_first.rk_qty}", 500);
|
||||
}
|
||||
|
||||
await _s_taskExecuteSemaphore_YCLInstock.WaitAsync();
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
await _db.Updateable<OtherOutstockD>().SetColumns(r => r.rk_qty == otherOutstockD_first.rk_qty + input.qty).Where(r => r.id == otherOutstockD_first.id).ExecuteCommandAsync();
|
||||
|
||||
InStockStrategyQuery inStockStrategyInput = new()
|
||||
{
|
||||
@@ -2001,6 +2018,7 @@ namespace Tnb.WarehouseMgr
|
||||
try
|
||||
{
|
||||
List<WmsCarryH> wmsCarryHs = _db.Queryable<WmsCarryH>().Where(r => r.work_station == input.work_station && r.is_lock == 0
|
||||
&& (r.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID || r.carrystd_id == WmsWareHouseConst.CARRY_ZYLJSTD_ID|| r.carrystd_id == WmsWareHouseConst.CARRY_ZYXCSTD_ID)
|
||||
&& (r.carry_status == ((int)(EnumCarryStatus.占用)).ToString() || r.carry_status == ((int)(EnumCarryStatus.齐套)).ToString())).ToList();
|
||||
if (string.IsNullOrEmpty(input.work_station))
|
||||
{
|
||||
@@ -2481,10 +2499,15 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
throw new AppFriendlyException($"本次下发数量{input.qty}已超过可下发数量{wmsMaterialTransferD.yzqty - wmsMaterialTransferD.yxfqty_rk}", 500);
|
||||
}
|
||||
if (input.qty > otherOutstockD_first.qty - otherOutstockD_first.rk_qty)
|
||||
{
|
||||
throw new AppFriendlyException($"下发数量{input.qty}已超过其它出库单{otherOutstockH.bill_code}中物料{otherOutstockD_first.material_code}的可下发数量{otherOutstockD_first.qty - otherOutstockD_first.rk_qty}", 500);
|
||||
}
|
||||
|
||||
await _s_taskExecuteSemaphore_YCLInstock.WaitAsync();
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
await _db.Updateable<OtherOutstockD>().SetColumns(r => r.rk_qty == otherOutstockD_first.rk_qty + input.qty).Where(r => r.id == otherOutstockD_first.id).ExecuteCommandAsync();
|
||||
|
||||
InStockStrategyQuery inStockStrategyInput = new()
|
||||
{
|
||||
|
||||
@@ -79,14 +79,27 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == input.wmsDistaskH.carry_id).FirstAsync();
|
||||
await _db.Updateable<WmsPackInstockD>().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == input.wmsDistaskH.require_id).ExecuteCommandAsync();
|
||||
WmsPackInstockD wmsPackInstockD = await _db.Queryable<WmsPackInstockD>().Where(r => r.id == input.wmsDistaskH.require_id).FirstAsync();
|
||||
if (wmsPackInstockD != null)
|
||||
{
|
||||
int row = await _db.Updateable<WmsCarryCode>().SetColumns(r => new WmsCarryCode
|
||||
{
|
||||
auxprop_gys = wmsPackInstockD.auxprop_gys,
|
||||
auxprop_xph = wmsPackInstockD.auxprop_xph
|
||||
}).Where(r => r.carry_id == input.wmsDistaskH.carry_id).ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception($"【WmsPackInstockService ModifyAsync】id为{input.wmsDistaskH.require_id}的包材入库明细在系统中不存在");
|
||||
}
|
||||
}
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError("【WmsPackInstockService ModifyAsync】" + ex.Message);
|
||||
Logger.LogError("【WmsPackInstockService ModifyAsync】" + ex.StackTrace);
|
||||
Logger.LogWarning("【WmsPackInstockService ModifyAsync】" + ex.Message);
|
||||
Logger.LogWarning("【WmsPackInstockService ModifyAsync】" + ex.StackTrace);
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,10 +363,6 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "1", Size = 1, AvoidBusyPassage = true, Region_id = WmsWareHouseConst.REGION_YCLCache_ID };
|
||||
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
||||
if (endLocations.Count == 0)
|
||||
{
|
||||
throw new AppFriendlyException("没有可以回库的库位", 500);
|
||||
}
|
||||
|
||||
if (endLocations.Count() == 0)
|
||||
{
|
||||
|
||||
@@ -71,10 +71,7 @@ namespace Tnb.WarehouseMgr
|
||||
WmsPurchaseD wmsPurchaseD = await _db.Queryable<WmsPurchaseD>().SingleAsync(x => x.id == id);
|
||||
string purchaseHId = wmsPurchaseD?.bill_id ?? "";
|
||||
WmsPurchaseH wmsPurchaseH = await _db.Queryable<WmsPurchaseH>().SingleAsync(x => x.id == purchaseHId);
|
||||
if (wmsPurchaseH.make_method == "自制")
|
||||
{
|
||||
throw Oops.Bah("自制采购收货单不需要操作此按钮");
|
||||
}
|
||||
|
||||
#region 插入质检记录
|
||||
|
||||
string? create_id = _userManager.User.Id;
|
||||
|
||||
@@ -94,6 +94,8 @@ namespace Tnb.WarehouseMgr
|
||||
await _db.Updateable<WmsPurchaseH>().SetColumns(r => r.make_method == "同步").Where(r => r.id == id).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
await _db.Updateable<WmsPurchaseD>().SetColumns(r => r.qc_res == "await").Where(r => r.bill_id == id).ExecuteCommandAsync();
|
||||
|
||||
return "保存成功";
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.Common.Extension;
|
||||
using JNPF.Common.Filter;
|
||||
using JNPF.Common.Security;
|
||||
using JNPF.EventBus;
|
||||
using JNPF.FriendlyException;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
@@ -13,6 +15,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.BasicData.Interfaces;
|
||||
using Tnb.ProductionMgr.Entities.Dto.PrdManage;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Attributes;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
@@ -89,5 +92,42 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> WmsSourtingtaskList(WmsSortingtaskListOutput input)
|
||||
{
|
||||
Dictionary<string, object> queryJson = string.IsNullOrEmpty(input.queryJson) ? new Dictionary<string, object>() : input.queryJson.ToObject<Dictionary<string, object>>();
|
||||
string? status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : "";
|
||||
if (string.IsNullOrEmpty(input.sidx))
|
||||
{
|
||||
input.sidx = "a.id";
|
||||
}
|
||||
else
|
||||
{
|
||||
input.sidx = input.sidx.Replace("create_time", "a.create_time").Replace("erp_bill_code", "e.erp_bill_code");
|
||||
|
||||
}
|
||||
SqlSugarPagedList<WmsSortingtask> result = await _db.Queryable<WmsSortingtask>()
|
||||
.InnerJoin<WmsCarryCode>((a, b) => a.carry_id == b.carry_id)
|
||||
.InnerJoin<BasMaterial>((a, b, c) => b.material_id == c.id)
|
||||
.InnerJoin<WmsSaleD>((a, b, c, d) => a.source_id == d.id)
|
||||
.InnerJoin<WmsSaleH>((a, b, c, d, e) => e.id == d.bill_id)
|
||||
.WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e) => a.status == status)
|
||||
.Select((a, b, c, d, e) => new WmsSortingtask
|
||||
{
|
||||
create_time = DateTime.Parse(a.create_time.ToString("yyyy-MM-dd HH:mm:ss")),
|
||||
material_id = c.id,
|
||||
material_code =c.code ,
|
||||
material_name = c.name,
|
||||
material_specification =c.material_specification,
|
||||
code_batch = b.code_batch,
|
||||
erp_bill_code = e.erp_bill_code
|
||||
}, true)
|
||||
.OrderBy($"{input.sidx} {input.sort}")
|
||||
.ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
|
||||
return PageResult<WmsSortingtask>.SqlSugarPageResult(result);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"AppSettings": {
|
||||
"InjectMiniProfiler": true,
|
||||
"InjectMiniProfiler": false,
|
||||
"SupportPackageNamePrefixs": [ "Tnb" ]
|
||||
},
|
||||
"Kestrel": {
|
||||
|
||||
Reference in New Issue
Block a user