Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -213,7 +213,7 @@ namespace Tnb.ProductionMgr
|
|||||||
{
|
{
|
||||||
LoggerSSX.LogInformation($@"【定时任务CheckGet】 {key}->{strs[0]} {strs[2]}
|
LoggerSSX.LogInformation($@"【定时任务CheckGet】 {key}->{strs[0]} {strs[2]}
|
||||||
采集结果:{$@"任务执行(wms_distask_h)中找不到匹配的记录 任务执行需要存在载具编号(carry_code)为{coderesult}
|
采集结果:{$@"任务执行(wms_distask_h)中找不到匹配的记录 任务执行需要存在载具编号(carry_code)为{coderesult}
|
||||||
且单据状态(status)为已下达(26126853976101) 且扩展字段(extras)为空的记录
|
且单据状态(status)为已下达(26126853976101) 且扩展字段(extras)为空的记录 (可能是WCS系统中存在载具{coderesult}的历史任务未清空)
|
||||||
select extras,* from wms_distask_h
|
select extras,* from wms_distask_h
|
||||||
where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID}' "}");
|
where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID}' "}");
|
||||||
|
|
||||||
@@ -510,7 +510,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
|
|
||||||
LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】锁定起点库位 开始生成 {startLocation.location_code} 到 {endLocation.location_code} 预任务 ");
|
LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】锁定起点库位 开始生成 {startLocation.location_code} 到 {endLocation.location_code} 预任务 ");
|
||||||
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerBGWCarrySupplement);
|
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerBGWCarrySupplement, db_BGWCarrySupplementtimer);
|
||||||
if (!result_createPretask)
|
if (!result_createPretask)
|
||||||
{
|
{
|
||||||
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败 ");
|
LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败 ");
|
||||||
@@ -599,7 +599,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
//锁定终点库位
|
//锁定终点库位
|
||||||
await db_YCLGLDPJInstocktimer.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
await db_YCLGLDPJInstocktimer.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock);
|
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock, db_YCLGLDPJInstocktimer);
|
||||||
if (!result_createPretask)
|
if (!result_createPretask)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
|
||||||
@@ -684,7 +684,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
//锁定终点库位
|
//锁定终点库位
|
||||||
await db_YCLWXDPJInstocktimer.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
await db_YCLWXDPJInstocktimer.Updateable<BasLocation>().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock);
|
bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock, db_YCLWXDPJInstocktimer);
|
||||||
if (!result_createPretask)
|
if (!result_createPretask)
|
||||||
{
|
{
|
||||||
LoggerYCLGLDPJInstock.LogWarning($"【YCLWXDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
|
LoggerYCLGLDPJInstock.LogWarning($"【YCLWXDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
|
||||||
@@ -1089,7 +1089,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 开始生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 开始生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
|
|
||||||
bool result = await createPretask(startLocation.id, wmsMechanicalArmH.location_id, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
bool result = await createPretask(startLocation.id, wmsMechanicalArmH.location_id, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery, db_Floor2timer送空托到上升降区);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 未成功生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 未成功生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
@@ -1244,7 +1244,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 开始生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 开始生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
|
|
||||||
bool result = await createPretask(startLocation.id, wmsMechanicalArmH.location_id, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
bool result = await createPretask(startLocation.id, wmsMechanicalArmH.location_id, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery, db_Floor2timer送满托到下升降区);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 未成功生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 未成功生成预任务 起点{startLocation.location_code} 终点{wmsMechanicalArmH.location_code} 料架 {targetCarry.carry_code}");
|
||||||
@@ -1337,15 +1337,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
BasLocation endLocation = rackEndLocations.First();
|
BasLocation endLocation = rackEndLocations.First();
|
||||||
|
|
||||||
// 锁住终点库位
|
// 锁住终点库位
|
||||||
//await db.Updateable<BasLocation>(r => new BasLocation
|
await db_Floor2timer移走上升降区未生成预任务且满托的料架.Updateable<BasLocation>(r => new BasLocation
|
||||||
//{
|
{
|
||||||
// is_lock = 1
|
is_lock = 1
|
||||||
//}).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
}).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
||||||
|
|
||||||
|
|
||||||
bool result = await createPretask(wmsMechanicalArmH.location_id, endLocation.id, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
bool result = await createPretask(wmsMechanicalArmH.location_id, endLocation.id, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery, db_Floor2timer移走上升降区未生成预任务且满托的料架);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
@@ -1454,7 +1454,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
||||||
|
|
||||||
bool result = await createPretask(wmsMechanicalArmH.location_id, endLocation.id, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
bool result = await createPretask(wmsMechanicalArmH.location_id, endLocation.id, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery, db_Floor2timer移走下升降区未生成预任务且空托的料架);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 未成功生成预任务 起点{wmsMechanicalArmH.location_code} 终点{endLocation.location_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
@@ -1481,7 +1481,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 上下升降机生成预任务(补充料架、上升降机取货到料架、上升降机满托运走,下升降机拿货到输送线、下升降机空托运走)
|
// 上下升降机生成预任务(补充料架、上升降机取货到料架、上升降机满托运走,下升降机拿货到输送线、下升降机空托运走)
|
||||||
private async Task<bool> createPretask(string startlocation_id, string endlocation_id, string carry_id, string carry_code, ILogger logger)
|
private async Task<bool> createPretask(string startlocation_id, string endlocation_id, string carry_id, string carry_code, ILogger logger, ISqlSugarClient dbConn)
|
||||||
{
|
{
|
||||||
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||||
commonCreatePretaskInput.startlocation_id = startlocation_id;
|
commonCreatePretaskInput.startlocation_id = startlocation_id;
|
||||||
@@ -1494,7 +1494,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
commonCreatePretaskInput.isExcuteMission = false;
|
commonCreatePretaskInput.isExcuteMission = false;
|
||||||
|
|
||||||
logger.LogInformation($"开始执行 GenPreTask {JsonConvert.SerializeObject(commonCreatePretaskInput)}");
|
logger.LogInformation($"开始执行 GenPreTask {JsonConvert.SerializeObject(commonCreatePretaskInput)}");
|
||||||
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, dbConn);
|
||||||
if (res.code == JNPF.Common.Enums.HttpStatusCode.OK)
|
if (res.code == JNPF.Common.Enums.HttpStatusCode.OK)
|
||||||
{
|
{
|
||||||
logger.LogInformation($"GenPreTask 结果 {JsonConvert.SerializeObject(res)}");
|
logger.LogInformation($"GenPreTask 结果 {JsonConvert.SerializeObject(res)}");
|
||||||
|
|||||||
@@ -22,7 +22,15 @@
|
|||||||
/// 四楼解析库
|
/// 四楼解析库
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string WAREHOUSE_JXK_ID = "26103367464997";
|
public const string WAREHOUSE_JXK_ID = "26103367464997";
|
||||||
|
/// <summary>
|
||||||
|
/// 缓存仓ID
|
||||||
|
/// </summary>
|
||||||
|
public const string WAREHOUSE_HCC_ID = "26103348825381";
|
||||||
|
/// <summary>
|
||||||
|
/// 组装线边库
|
||||||
|
/// </summary>
|
||||||
|
public const string WAREHOUSE_ZZXBK_ID = "26257716248101";
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 出入库单据状态TypeID
|
/// 出入库单据状态TypeID
|
||||||
|
|||||||
@@ -25,10 +25,18 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 来源业务单据id
|
/// 来源业务单据id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string require_id { get; set; }
|
public string source_id { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 来源业务单据code
|
/// 来源业务单据code
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
public string source_code { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 需求单据id
|
||||||
|
/// </summary>
|
||||||
|
public string require_id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 需求单据code
|
||||||
|
/// </summary>
|
||||||
public string require_code { get; set; }
|
public string require_code { get; set; }
|
||||||
|
|
||||||
public string moduleConsts { get; set; }
|
public string moduleConsts { get; set; }
|
||||||
|
|||||||
@@ -33,5 +33,12 @@
|
|||||||
/// 批次
|
/// 批次
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? code_batch { get; set; }
|
public string? code_batch { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 终点库位(缓存仓)
|
||||||
|
/// </summary>
|
||||||
|
public string? endlocation_id { get; set; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,18 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string requireId { get; set; }
|
public string requireId { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 需求单据code
|
||||||
|
/// </summary>
|
||||||
|
public string require_code { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 来源单据id
|
||||||
|
/// </summary>
|
||||||
|
public string source_id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 来源单据code
|
||||||
|
/// </summary>
|
||||||
|
public string source_code { get; set; }
|
||||||
|
/// <summary>
|
||||||
/// 单据业务类型Id
|
/// 单据业务类型Id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string bizTypeId { get; set; }
|
public string bizTypeId { get; set; }
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ namespace Tnb.WarehouseMgr.Interfaces
|
|||||||
/// <exception cref="AppFriendlyException"></exception>
|
/// <exception cref="AppFriendlyException"></exception>
|
||||||
Task<List<WmsCarryH>> OutStockStrategyYCL([FromQuery] OutStockStrategyQuery input);
|
Task<List<WmsCarryH>> OutStockStrategyYCL([FromQuery] OutStockStrategyQuery input);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 缓存仓出库策略
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="AppFriendlyException"></exception>
|
||||||
|
Task<List<WmsCarryH>> OutStockStrategyHCC([FromQuery] OutStockStrategyQuery input);
|
||||||
|
/// <summary>
|
||||||
/// 中储仓到二楼出库策略
|
/// 中储仓到二楼出库策略
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
public async Task Do(WareHouseUpInput input)
|
public async Task Do(WareHouseUpInput input)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrEmpty(input.bizTypeId))
|
||||||
|
return;
|
||||||
if (_serviceMap.ContainsKey(input.bizTypeId))
|
if (_serviceMap.ContainsKey(input.bizTypeId))
|
||||||
{
|
{
|
||||||
await _serviceMap[input.bizTypeId].ModifyAsync(input);
|
await _serviceMap[input.bizTypeId].ModifyAsync(input);
|
||||||
|
|||||||
@@ -411,6 +411,52 @@ namespace Tnb.WarehouseMgr
|
|||||||
return input.Size > 0 ? items.Take(input.Size).ToList() : items;
|
return input.Size > 0 ? items.Take(input.Size).ToList() : items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 缓存仓出库策略
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="AppFriendlyException"></exception>
|
||||||
|
public async Task<List<WmsCarryH>> OutStockStrategyHCC([FromQuery] OutStockStrategyQuery input)
|
||||||
|
{
|
||||||
|
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))
|
||||||
|
.And((a, b, c) => c.is_type == ((int)EnumLocationType.存储库位).ToString())
|
||||||
|
.And((a, b, c) => a.out_status == "0")
|
||||||
|
.And((a, b, c) => c.wh_id == input.warehouse_id)
|
||||||
|
.AndIF(!string.IsNullOrEmpty(input.material_id), (a, b, c) => b.material_id == input.material_id)
|
||||||
|
.AndIF(!string.IsNullOrEmpty(input.code_batch), (a, b, c) => b.code_batch == input.code_batch)
|
||||||
|
.AndIF(!string.IsNullOrEmpty(input.material_specification), (a, b, c) => b.material_specification == input.material_specification)
|
||||||
|
.AndIF(!string.IsNullOrEmpty(input.container_no), (a, b, c) => b.container_no == input.container_no)
|
||||||
|
.AndIF(!string.IsNullOrEmpty(input.carrystd_id), (a, b, c) => a.carrystd_id == input.carrystd_id);
|
||||||
|
Expression<Func<WmsCarryH, WmsCarryCode, BasLocation, bool>> carryStatusFilterExp = !input.material_id.IsNullOrWhiteSpace()
|
||||||
|
? (a, b, c) => a.carry_status == ((int)EnumCarryStatus.占用).ToString()
|
||||||
|
: (a, b, c) => a.carry_status == ((int)EnumCarryStatus.空闲).ToString();
|
||||||
|
_ = 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)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("没有可用策略", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WmsCarryH> items = await cyDb.Queryable<WmsCarryH>().LeftJoin<WmsCarryCode>((a, b) => a.id == b.carry_id)
|
||||||
|
.LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id)
|
||||||
|
.Where(whereExpr)
|
||||||
|
//.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty())
|
||||||
|
.OrderBy(policy.policy)
|
||||||
|
|
||||||
|
.Select<WmsCarryH>()
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
items = items.Distinct().ToList();
|
||||||
|
return input.Size > 0 ? items.Take(input.Size).ToList() : items;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1->2出库策略
|
/// 1->2出库策略
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -2022,6 +2068,20 @@ namespace Tnb.WarehouseMgr
|
|||||||
location_code = multiList[i].endlocation_code
|
location_code = multiList[i].endlocation_code
|
||||||
};
|
};
|
||||||
string endLocId = multiList[i].endlocation_id;
|
string endLocId = multiList[i].endlocation_id;
|
||||||
|
|
||||||
|
// 同步料架下的载具位置
|
||||||
|
if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID)
|
||||||
|
{
|
||||||
|
List<WmsCarryH> carrys = _db.Queryable<WmsCarryD>().Where(r => r.carry_id == carry.id)
|
||||||
|
.InnerJoin<WmsCarryH>((a, b) => a.membercarry_id == b.id).Select((a, b) => b).ToList();
|
||||||
|
carrys.ForEach(r =>
|
||||||
|
{
|
||||||
|
r.location_id = carry.location_id;
|
||||||
|
r.location_code = carry.location_code;
|
||||||
|
carryIts.Add(r);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
WmsCarryCode carryCode = new()
|
WmsCarryCode carryCode = new()
|
||||||
{
|
{
|
||||||
warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : "",
|
warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : "",
|
||||||
@@ -2089,11 +2149,16 @@ namespace Tnb.WarehouseMgr
|
|||||||
else if (dt.biz_type == "FloorCallMaterial")
|
else if (dt.biz_type == "FloorCallMaterial")
|
||||||
{
|
{
|
||||||
await _db.Updateable<WmsCarryH>().SetColumns(r => r.work_station == "").Where(r => r.id == dt.carry_id).ExecuteCommandAsync();
|
await _db.Updateable<WmsCarryH>().SetColumns(r => r.work_station == "").Where(r => r.id == dt.carry_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
// require_code是任务单
|
||||||
|
//string mo_task_code = dt.require_code;
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
List<WmsDistaskCode> disTaskCodes = await _db.Queryable<WmsDistaskCode>().Where(it => it.bill_id == dt.id).ToListAsync();
|
List<WmsDistaskCode> disTaskCodes = await _db.Queryable<WmsDistaskCode>().Where(it => it.bill_id == dt.id).ToListAsync();
|
||||||
WareHouseUpInput upInput = new() { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() };
|
WareHouseUpInput upInput = new() { bizTypeId = dt.biz_type, requireId = dt.require_id!, require_code = dt.require_code!, source_id = dt.source_id!
|
||||||
|
, source_code = dt.source_code!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() };
|
||||||
|
|
||||||
/*if (!_userManager?.LoginType.IsNullOrEmpty() ?? false)
|
/*if (!_userManager?.LoginType.IsNullOrEmpty() ?? false)
|
||||||
{
|
{
|
||||||
@@ -2745,7 +2810,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
var db = _db;
|
var db = _db;
|
||||||
if (dbConn != null)
|
if (dbConn != null)
|
||||||
db = dbConn;
|
db = dbConn;
|
||||||
|
else
|
||||||
|
db = _db.CopyNew();
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
await s_taskCommonCreatePretask.WaitAsync();
|
await s_taskCommonCreatePretask.WaitAsync();
|
||||||
Logger.LogInformation($"【createPretask】 接收到请求 参数:{JsonConvert.SerializeObject(input)}");
|
Logger.LogInformation($"【createPretask】 接收到请求 参数:{JsonConvert.SerializeObject(input)}");
|
||||||
@@ -2834,7 +2902,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
WmsPointH? sPoint = it.FirstOrDefault();
|
WmsPointH? sPoint = it.FirstOrDefault();
|
||||||
WmsPointH? ePoint = it.LastOrDefault();
|
WmsPointH? ePoint = it.LastOrDefault();
|
||||||
|
|
||||||
|
|
||||||
preTask = new()
|
preTask = new()
|
||||||
{
|
{
|
||||||
org_id = _userManager.User?.OrganizeId,
|
org_id = _userManager.User?.OrganizeId,
|
||||||
@@ -2856,6 +2923,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
carry_code = carry_code,
|
carry_code = carry_code,
|
||||||
area_id = sPoint?.area_id!,
|
area_id = sPoint?.area_id!,
|
||||||
area_code = it.Key,
|
area_code = it.Key,
|
||||||
|
source_id = input.source_id,
|
||||||
|
source_code = input.source_code,
|
||||||
require_id = input.require_id,
|
require_id = input.require_id,
|
||||||
require_code = input.require_code,
|
require_code = input.require_code,
|
||||||
create_id = _userManager.UserId,
|
create_id = _userManager.UserId,
|
||||||
|
|||||||
@@ -245,6 +245,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
await _runService.Create(templateEntity, visualDevModelCrInput);
|
await _runService.Create(templateEntity, visualDevModelCrInput);
|
||||||
|
|
||||||
await _db.Ado.CommitTranAsync();
|
await _db.Ado.CommitTranAsync();
|
||||||
|
Logger.LogError($"【CarryBind】 {input.membercarry_code}成功绑定到{input.carry_code}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -256,6 +257,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Logger.LogError($"【CarryBind】 {ex.Message}");
|
||||||
|
Logger.LogError($"【CarryBind】 {ex.StackTrace}");
|
||||||
await _db.Ado.RollbackTranAsync();
|
await _db.Ado.RollbackTranAsync();
|
||||||
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
|
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
|
||||||
}
|
}
|
||||||
@@ -321,6 +324,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Logger.LogError($"【CarryUnbind】 {ex.Message}");
|
||||||
|
Logger.LogError($"【CarryUnbind】 {ex.StackTrace}");
|
||||||
await _db.Ado.RollbackTranAsync();
|
await _db.Ado.RollbackTranAsync();
|
||||||
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
|
return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
|
|||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
using Org.BouncyCastle.Asn1.X509;
|
using Org.BouncyCastle.Asn1.X509;
|
||||||
using Tnb.ProductionMgr.Entities;
|
using Tnb.ProductionMgr.Entities;
|
||||||
|
using Tnb.BasicData;
|
||||||
|
|
||||||
namespace Tnb.WarehouseMgr
|
namespace Tnb.WarehouseMgr
|
||||||
{
|
{
|
||||||
@@ -201,7 +202,56 @@ namespace Tnb.WarehouseMgr
|
|||||||
};
|
};
|
||||||
List<WmsCarryH> items = await _wareHouseService.OutStockStrategyYCL(inStockStrategyInput);
|
List<WmsCarryH> items = await _wareHouseService.OutStockStrategyYCL(inStockStrategyInput);
|
||||||
|
|
||||||
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == input.material_id).Sum(r => r.codeqty);
|
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == input.material_id && r.code_batch == input.code_batch).Sum(r => r.codeqty);
|
||||||
|
|
||||||
|
JObject keyValuePairs = new JObject();
|
||||||
|
keyValuePairs["realPalletCount"] = items.Count;
|
||||||
|
keyValuePairs["realInvQty"] = qty;
|
||||||
|
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功", keyValuePairs);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取物料库存(缓存仓)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="AppFriendlyException"></exception>
|
||||||
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> MaterialInventoryHCC(MaterialTransferGetMaterialInventoryInput input)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (input.palletCount <= 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("料架数必须大于0", 500);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(input.material_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("物料id不可为空", 500);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(input.code_batch))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("批号不可为空", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
//入库取终点 //出库起点
|
||||||
|
OutStockStrategyQuery inStockStrategyInput = new()
|
||||||
|
{
|
||||||
|
warehouse_id = WmsWareHouseConst.WAREHOUSE_HCC_ID,
|
||||||
|
material_id = input.material_id,
|
||||||
|
code_batch = input.code_batch,
|
||||||
|
Size = input.palletCount
|
||||||
|
};
|
||||||
|
List<WmsCarryH> items = await _wareHouseService.OutStockStrategyHCC(inStockStrategyInput);
|
||||||
|
|
||||||
|
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == input.material_id && r.code_batch == input.code_batch).Sum(r => r.codeqty);
|
||||||
|
|
||||||
JObject keyValuePairs = new JObject();
|
JObject keyValuePairs = new JObject();
|
||||||
keyValuePairs["realPalletCount"] = items.Count;
|
keyValuePairs["realPalletCount"] = items.Count;
|
||||||
@@ -257,7 +307,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
await _db.Ado.BeginTranAsync();
|
await _db.Ado.BeginTranAsync();
|
||||||
|
|
||||||
//入库取终点 //出库起点
|
//入库取终点 //出库起点
|
||||||
OutStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_YCL_ID, material_id = wmsMaterialTransferD.material_id, code_batch = wmsMaterialTransferD.code_batch, Size = input.palletCount };
|
OutStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_YCL_ID, material_id = wmsMaterialTransferD.material_id, code_batch = input.code_batch, Size = input.palletCount };
|
||||||
List<WmsCarryH> items = await _wareHouseService.OutStockStrategyYCL(inStockStrategyInput);
|
List<WmsCarryH> items = await _wareHouseService.OutStockStrategyYCL(inStockStrategyInput);
|
||||||
|
|
||||||
if (items.Count == 0)
|
if (items.Count == 0)
|
||||||
@@ -265,7 +315,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
throw new AppFriendlyException($@"没有可以出库的载具", 500);
|
throw new AppFriendlyException($@"没有可以出库的载具", 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == wmsMaterialTransferD.material_id).Sum(r => r.codeqty);
|
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == wmsMaterialTransferD.material_id && r.code_batch == input.code_batch).Sum(r => r.codeqty);
|
||||||
|
|
||||||
// 暂定PDA上查询到的物料批次和库存数量与提交时获取的不一致时,需要前台重新获取库存接口
|
// 暂定PDA上查询到的物料批次和库存数量与提交时获取的不一致时,需要前台重新获取库存接口
|
||||||
if (input.palletCount != items.Count || input.qty != qty)
|
if (input.palletCount != items.Count || input.qty != qty)
|
||||||
@@ -297,7 +347,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
foreach (var wmsCarryH in items)
|
foreach (var wmsCarryH in items)
|
||||||
{
|
{
|
||||||
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == wmsCarryH.id).FirstAsync();
|
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == wmsCarryH.id).FirstAsync();
|
||||||
BasLocation startLocation = await _db.Queryable<BasLocation>().Where(r => r.location_code == wmsCarryH.location_code).FirstAsync();
|
BasLocation startLocation = await _db.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
|
||||||
|
|
||||||
BasLocation endLocation = null;
|
BasLocation endLocation = null;
|
||||||
// 集中供料区三工位
|
// 集中供料区三工位
|
||||||
@@ -323,7 +373,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
commonCreatePretaskInput.endlocation_id = endLocation.id;
|
commonCreatePretaskInput.endlocation_id = endLocation.id;
|
||||||
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
|
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
|
||||||
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
||||||
commonCreatePretaskInput.require_id = input.source_id;
|
commonCreatePretaskInput.source_id = input.source_id;
|
||||||
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
||||||
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
||||||
commonCreatePretaskInput.isExcuteMission = false;
|
commonCreatePretaskInput.isExcuteMission = false;
|
||||||
@@ -358,6 +408,157 @@ namespace Tnb.WarehouseMgr
|
|||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 按料架下发(缓存仓)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="AppFriendlyException"></exception>
|
||||||
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> DistributeHCC(MaterialTransferDistributeInput input)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(input.source_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("来源单据id不可为空", 500);
|
||||||
|
}
|
||||||
|
if (input.palletCount <= 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("料架数必须大于0", 500);
|
||||||
|
}
|
||||||
|
if (input.qty <= 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("数量必须大于0", 500);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(input.code_batch))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("批号不可为空", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
OrganizeEntity organizeEntity = _db.Queryable<OrganizeEntity>().Where(r => r.EnCode == wmsMaterialTransferD.station_code).First();
|
||||||
|
if (organizeEntity == null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【DistributeHCC】不存在工位code为{wmsMaterialTransferD.station_code}的工位!");
|
||||||
|
throw new AppFriendlyException($"不存在工位code为{wmsMaterialTransferD.station_code}的工位!", 500);
|
||||||
|
}
|
||||||
|
// 获取产线
|
||||||
|
OrganizeEntity organizeEntityCX = _db.Queryable<OrganizeEntity>().Where(r => r.Id == organizeEntity.ParentId).First();
|
||||||
|
if (organizeEntityCX == null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【DistributeHCC】基础资料错误!工位{organizeEntity.EnCode}的上级产线不存在,请检查!");
|
||||||
|
throw new AppFriendlyException($"【DistributeHCC】基础资料错误!工位{organizeEntity.EnCode}的上级产线不存在,请检查!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (organizeEntityCX.Category != "workline")
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【DistributeHCC】基础资料错误!工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}不属于产线类型,请检查!");
|
||||||
|
throw new AppFriendlyException($"【DistributeHCC】基础资料错误!工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}不属于产线类型,请检查!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取任务单
|
||||||
|
|
||||||
|
List<PrdMoTask> organizeEntityCXs = _db.Queryable<PrdMoTask>().Where(r => r.workline_id == organizeEntityCX.Id && r.mo_task_status == DictConst.InProgressEnCode).ToList();
|
||||||
|
if (organizeEntityCXs.Count > 1)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【DistributeHCC】工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单不唯一,请检查!");
|
||||||
|
throw new AppFriendlyException($"【DistributeHCC】工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单不唯一,请检查!", 500);
|
||||||
|
}
|
||||||
|
if (organizeEntityCXs.Count == 0)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【DistributeHCC】未找到工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单,请检查!");
|
||||||
|
throw new AppFriendlyException($"【DistributeHCC】未找到工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单,请检查!", 500);
|
||||||
|
}
|
||||||
|
PrdMoTask prdMoTask = organizeEntityCXs.First();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
await s_taskExecuteSemaphore.WaitAsync();
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
|
||||||
|
//入库取终点 //出库起点
|
||||||
|
OutStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_HCC_ID, material_id = wmsMaterialTransferD.material_id, code_batch = input.code_batch, Size = input.palletCount };
|
||||||
|
List<WmsCarryH> items = await _wareHouseService.OutStockStrategyHCC(inStockStrategyInput);
|
||||||
|
|
||||||
|
if (items.Count == 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException($@"没有可以出库的载具", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
decimal qty = _db.Queryable<WmsCarryCode>().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == wmsMaterialTransferD.material_id && r.code_batch == input.code_batch).Sum(r => r.codeqty);
|
||||||
|
|
||||||
|
// 暂定PDA上查询到的物料批次和库存数量与提交时获取的不一致时,需要前台重新获取库存接口
|
||||||
|
if (input.palletCount != items.Count || input.qty != qty)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException($@"当前实际料架数量为{input.palletCount} 实际库存数量为{qty},与前台数据不一致,请重新获取库存", HttpStatusCode.InternalServerError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (wmsMaterialTransfer.warehouse_instock != WmsWareHouseConst.WAREHOUSE_ZZXBK_ID)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException($@"转库单{wmsMaterialTransfer.bill_code}入库仓库不是线边库,请检查!", HttpStatusCode.InternalServerError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var wmsCarryH in items)
|
||||||
|
{
|
||||||
|
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == wmsCarryH.id).FirstAsync();
|
||||||
|
BasLocation startLocation = await _db.Queryable<BasLocation>().Where(r => r.id == wmsCarryH.location_id).FirstAsync();
|
||||||
|
|
||||||
|
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||||
|
commonCreatePretaskInput.startlocation_id = startLocation.id;
|
||||||
|
commonCreatePretaskInput.endlocation_id = input.endlocation_id;
|
||||||
|
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
|
||||||
|
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
||||||
|
// 转库单id
|
||||||
|
commonCreatePretaskInput.source_id = input.source_id;
|
||||||
|
// 任务单code
|
||||||
|
commonCreatePretaskInput.require_id = prdMoTask.id;
|
||||||
|
commonCreatePretaskInput.require_code = prdMoTask.mo_task_code;
|
||||||
|
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
||||||
|
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
||||||
|
commonCreatePretaskInput.isExcuteMission = false;
|
||||||
|
|
||||||
|
Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
||||||
|
|
||||||
|
if (res.code != HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
Logger.LogInformation($@"生成预任务失败");
|
||||||
|
throw new AppFriendlyException($@"生成预任务失败", 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新子表已下发数量
|
||||||
|
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + input.qty).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
Logger.LogError("【Distribute】" + ex.Message);
|
||||||
|
Logger.LogError("【Distribute】" + ex.StackTrace);
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_ = s_taskExecuteSemaphore.Release();
|
||||||
|
InvokeGenPretaskExcute();
|
||||||
|
}
|
||||||
|
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public override async Task ModifyAsync(WareHouseUpInput input)
|
public override async Task ModifyAsync(WareHouseUpInput input)
|
||||||
{
|
{
|
||||||
if (input == null)
|
if (input == null)
|
||||||
@@ -372,10 +573,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
// 更新已转数量
|
// 更新已转数量
|
||||||
bool isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty)})
|
bool isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty)})
|
||||||
.Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
.Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
|
||||||
|
|
||||||
// 如果所有明细已完成 更新主表状态为完成
|
// 如果所有明细已完成 更新主表状态为完成
|
||||||
WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable<WmsMaterialTransferD>().Where(r => r.id == input.requireId).SingleAsync();
|
WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable<WmsMaterialTransferD>().Where(r => r.id == input.source_id).SingleAsync();
|
||||||
List<WmsMaterialTransferD> wmsMaterialTransferDs = _db.Queryable<WmsMaterialTransferD>()
|
List<WmsMaterialTransferD> wmsMaterialTransferDs = _db.Queryable<WmsMaterialTransferD>()
|
||||||
.Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yzqty < a.qty).ToList();
|
.Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yzqty < a.qty).ToList();
|
||||||
bool isOk2 = true;
|
bool isOk2 = true;
|
||||||
@@ -384,7 +585,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
isOk2 = await _db.Updateable<WmsMaterialTransfer>().SetColumns(it => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
|
isOk2 = await _db.Updateable<WmsMaterialTransfer>().SetColumns(it => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
|
||||||
.Where(it => it.id == wmsMaterialTransferd.bill_id).ExecuteCommandHasChangeAsync();
|
.Where(it => it.id == wmsMaterialTransferd.bill_id).ExecuteCommandHasChangeAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// require_code是任务单
|
||||||
|
//string mo_task_code = input.require_code;
|
||||||
|
|
||||||
if (!isOk || !isOk2)
|
if (!isOk || !isOk2)
|
||||||
{
|
{
|
||||||
@@ -500,7 +703,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
commonCreatePretaskInput.carry_code = wmsMaterialTransferCarry.carry_code;
|
commonCreatePretaskInput.carry_code = wmsMaterialTransferCarry.carry_code;
|
||||||
commonCreatePretaskInput.task_type = WmsWareHouseConst.BIZTYPE_WMSTRANSFER_ID;
|
commonCreatePretaskInput.task_type = WmsWareHouseConst.BIZTYPE_WMSTRANSFER_ID;
|
||||||
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
||||||
commonCreatePretaskInput.require_id = wmsMaterialTransferCarry.mat_bill_id;
|
commonCreatePretaskInput.source_id = wmsMaterialTransferCarry.mat_bill_id;
|
||||||
commonCreatePretaskInput.isExcuteMission = false;
|
commonCreatePretaskInput.isExcuteMission = false;
|
||||||
|
|
||||||
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
||||||
@@ -579,7 +782,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
// 获取任务单
|
// 获取任务单
|
||||||
|
|
||||||
List<PrdMoTask> organizeEntityCXs = _db.Queryable<PrdMoTask>().Where(r => r.workline_code == organizeEntityCX.EnCode).ToList();
|
List<PrdMoTask> organizeEntityCXs = _db.Queryable<PrdMoTask>().Where(r => r.workline_id == organizeEntityCX.Id && r.mo_task_status == DictConst.InProgressEnCode).ToList();
|
||||||
if (organizeEntityCXs.Count > 1)
|
if (organizeEntityCXs.Count > 1)
|
||||||
{
|
{
|
||||||
Logger.LogWarning($"【CallRackToProductionLine】工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单不唯一,请检查!");
|
Logger.LogWarning($"【CallRackToProductionLine】工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单不唯一,请检查!");
|
||||||
@@ -625,6 +828,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
||||||
commonCreatePretaskInput.task_type = "";
|
commonCreatePretaskInput.task_type = "";
|
||||||
commonCreatePretaskInput.biz_type = "FloorCallMaterial";
|
commonCreatePretaskInput.biz_type = "FloorCallMaterial";
|
||||||
|
commonCreatePretaskInput.source_id = "";
|
||||||
|
commonCreatePretaskInput.require_code = "";
|
||||||
commonCreatePretaskInput.require_id = prdMoTask.id;
|
commonCreatePretaskInput.require_id = prdMoTask.id;
|
||||||
commonCreatePretaskInput.require_code = prdMoTask.mo_task_code;
|
commonCreatePretaskInput.require_code = prdMoTask.mo_task_code;
|
||||||
|
|
||||||
@@ -716,25 +921,47 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 从产线呼叫装料架到暂存仓
|
/// 从产线呼叫装料架到暂存仓/缓存仓
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost, NonUnify, AllowAnonymous]
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackInstock(MaterialTransferRackInstockInput input)
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackInstock(MaterialTransferRackInstockInput input)
|
||||||
|
{
|
||||||
|
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).FirstAsync();
|
||||||
|
|
||||||
|
// 料架到暂存仓
|
||||||
|
if (wmsCarryH.carrystd_id == "26037267399717")
|
||||||
|
{
|
||||||
|
return await RackInstock_到暂存仓(input, wmsCarryH);
|
||||||
|
}
|
||||||
|
// 载运小车和载运料架到缓存仓
|
||||||
|
else if (wmsCarryH.carrystd_id == "26103233723941" || wmsCarryH.carrystd_id == "34995839046677")
|
||||||
|
{
|
||||||
|
return await RackInstock_到缓存仓(input, wmsCarryH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.LogError($"【RackInstock】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, $"【RackInstock】当前载具的规格id是{wmsCarryH.carrystd_id} 无法处理此类型的载具!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackInstock_到暂存仓(MaterialTransferRackInstockInput input, WmsCarryH wmsCarryH)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BasLocation startlocation = _db.Queryable<BasLocation>().Where(r => r.id == input.startlocation_id).First();
|
BasLocation startlocation = _db.Queryable<BasLocation>().Where(r => r.id == input.startlocation_id).First();
|
||||||
if (startlocation == null)
|
if (startlocation == null)
|
||||||
{
|
{
|
||||||
Logger.LogWarning($"【RackEmptyInstock】不存在id为{input.startlocation_id}的库位!");
|
Logger.LogWarning($"【RackInstock】不存在id为{input.startlocation_id}的库位!");
|
||||||
throw new AppFriendlyException($"【RackEmptyInstock】不存在id为{input.startlocation_id}的库位!", 500);
|
throw new AppFriendlyException($"【RackInstock】不存在id为{input.startlocation_id}的库位!", 500);
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(input.carry_code))
|
if (string.IsNullOrEmpty(input.carry_code))
|
||||||
{
|
{
|
||||||
Logger.LogWarning($"【RackEmptyInstock】料架不能为空!{input.carry_code}");
|
Logger.LogWarning($"【RackInstock】料架不能为空!{input.carry_code}");
|
||||||
throw new AppFriendlyException($"【RackEmptyInstock】料架不能为空!{input.carry_code}!", 500);
|
throw new AppFriendlyException($"【RackInstock】料架不能为空!{input.carry_code}!", 500);
|
||||||
}
|
}
|
||||||
if (input.judgeEmptyCarry)
|
if (input.judgeEmptyCarry)
|
||||||
{
|
{
|
||||||
@@ -743,28 +970,27 @@ namespace Tnb.WarehouseMgr
|
|||||||
.Where((a, b) => input.details.Select(r => r.carry_code).Contains(a.carry_code)).Select((a, b) => b).ToList();
|
.Where((a, b) => input.details.Select(r => r.carry_code).Contains(a.carry_code)).Select((a, b) => b).ToList();
|
||||||
if (wmsCarryCodes.Count > 0)
|
if (wmsCarryCodes.Count > 0)
|
||||||
{
|
{
|
||||||
Logger.LogWarning($"【RackEmptyInstock】存在非空料箱,不能入库!{input.carry_code}");
|
Logger.LogWarning($"【RackInstock】存在非空料箱,不能入库!{input.carry_code}");
|
||||||
throw new AppFriendlyException($"【RackEmptyInstock】存在非空料箱,不能入库!{input.carry_code}!", 500);
|
throw new AppFriendlyException($"【RackInstock】存在非空料箱,不能入库!{input.carry_code}!", 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 找到未占用且未锁定的库位
|
// 找到未占用且未锁定的库位
|
||||||
ISugarQueryable<BasLocation> rackEndLocations =
|
ISugarQueryable<BasLocation> rackEndLocations =
|
||||||
_db.Queryable<BasLocation>()
|
_db.Queryable<BasLocation>()
|
||||||
.Where(r => r.wh_id == "33780009364245" && r.is_use == "0" && r.is_lock == 0).OrderBy(a => a.id).Take(1);
|
.Where(r => r.wh_id == "33780009364245" && r.is_use == "0" && r.is_lock == 0 && r.is_type == "0").OrderBy(a => a.id).Take(1);
|
||||||
|
|
||||||
if (rackEndLocations.Count() == 0)
|
if (rackEndLocations.Count() == 0)
|
||||||
{
|
{
|
||||||
Logger.LogWarning($"【RackEmptyInstock】没有可用的终点库位");
|
Logger.LogWarning($"【RackInstock】没有可用的终点库位");
|
||||||
throw new AppFriendlyException($"【RackEmptyInstock】没有可用的终点库位!", 500);
|
throw new AppFriendlyException($"【RackInstock】没有可用的终点库位!", 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
BasLocation endlocation = rackEndLocations.First();
|
BasLocation endlocation = rackEndLocations.First();
|
||||||
|
|
||||||
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).FirstAsync();
|
|
||||||
// 重新绑定料箱到料架
|
// 重新绑定料箱到料架
|
||||||
// 清空料架
|
// 清空料架
|
||||||
Logger.LogWarning($"【RackEmptyInstock】清空料架");
|
Logger.LogWarning($"【RackInstock】清空料架");
|
||||||
|
|
||||||
List<WmsCarryH> membercarrys = _db.Queryable<WmsCarryH>().Where(r => input.details.Select(r => r.carry_code).Contains(r.carry_code)).ToList();
|
List<WmsCarryH> membercarrys = _db.Queryable<WmsCarryH>().Where(r => input.details.Select(r => r.carry_code).Contains(r.carry_code)).ToList();
|
||||||
|
|
||||||
@@ -796,7 +1022,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
Logger.LogWarning($"【RackEmptyInstock】开始生成预任务");
|
Logger.LogWarning($"【RackEmptyInstock】开始生成预任务");
|
||||||
CommonCreatePretaskInput commonCreatePretaskInput = new ();
|
CommonCreatePretaskInput commonCreatePretaskInput = new();
|
||||||
commonCreatePretaskInput.startlocation_id = startlocation.id;
|
commonCreatePretaskInput.startlocation_id = startlocation.id;
|
||||||
commonCreatePretaskInput.endlocation_id = endlocation.id;
|
commonCreatePretaskInput.endlocation_id = endlocation.id;
|
||||||
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
||||||
@@ -807,7 +1033,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
||||||
if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
|
if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
|
||||||
{
|
{
|
||||||
Logger.LogInformation($"【RackEmptyInstock】生成预任务失败 载具 {input.carry_code}");
|
Logger.LogInformation($"【RackInstock】生成预任务失败 载具 {input.carry_code}");
|
||||||
throw new AppFriendlyException($"生成预任务失败 载具 {input.carry_code}", 500);
|
throw new AppFriendlyException($"生成预任务失败 载具 {input.carry_code}", 500);
|
||||||
}
|
}
|
||||||
Logger.LogWarning($"【RackEmptyInstock】生成预任务成功");
|
Logger.LogWarning($"【RackEmptyInstock】生成预任务成功");
|
||||||
@@ -815,14 +1041,72 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger.LogError("【RackEmptyInstock】" + ex.Message);
|
Logger.LogError("【RackInstock】" + ex.Message);
|
||||||
Logger.LogError("【RackEmptyInstock】" + ex.StackTrace);
|
Logger.LogError("【RackInstock】" + ex.StackTrace);
|
||||||
await _db.Ado.RollbackTranAsync();
|
await _db.Ado.RollbackTranAsync();
|
||||||
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> RackInstock_到缓存仓(MaterialTransferRackInstockInput input, WmsCarryH wmsCarryH)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BasLocation startlocation = _db.Queryable<BasLocation>().Where(r => r.id == input.startlocation_id).First();
|
||||||
|
if (startlocation == null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【RackInstock】不存在id为{input.startlocation_id}的库位!");
|
||||||
|
throw new AppFriendlyException($"【RackInstock】不存在id为{input.startlocation_id}的库位!", 500);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(input.carry_code))
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【RackInstock】料架不能为空!{input.carry_code}");
|
||||||
|
throw new AppFriendlyException($"【RackInstock】料架不能为空!{input.carry_code}!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 找到未占用且未锁定的库位
|
||||||
|
ISugarQueryable<BasLocation> rackEndLocations =
|
||||||
|
_db.Queryable<BasLocation>()
|
||||||
|
.Where(r => r.wh_id == "26103348825381" && r.is_use == "0" && r.is_lock == 0 && r.is_type == "0").OrderBy(a => a.id).Take(1);
|
||||||
|
|
||||||
|
if (rackEndLocations.Count() == 0)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【RackInstock】没有可用的终点库位");
|
||||||
|
throw new AppFriendlyException($"【RackInstock】没有可用的终点库位!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
BasLocation endlocation = rackEndLocations.First();
|
||||||
|
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
|
||||||
|
Logger.LogWarning($"【RackEmptyInstock】开始生成预任务");
|
||||||
|
CommonCreatePretaskInput commonCreatePretaskInput = new();
|
||||||
|
commonCreatePretaskInput.startlocation_id = startlocation.id;
|
||||||
|
commonCreatePretaskInput.endlocation_id = endlocation.id;
|
||||||
|
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
||||||
|
commonCreatePretaskInput.carry_code = input.carry_code;
|
||||||
|
commonCreatePretaskInput.task_type = "";
|
||||||
|
commonCreatePretaskInput.biz_type = "FloorCallMaterial";
|
||||||
|
|
||||||
|
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
||||||
|
if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
Logger.LogInformation($"【RackInstock】生成预任务失败 载具 {input.carry_code}");
|
||||||
|
throw new AppFriendlyException($"生成预任务失败 载具 {input.carry_code}", 500);
|
||||||
|
}
|
||||||
|
Logger.LogWarning($"【RackEmptyInstock】生成预任务成功");
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError("【RackInstock】" + ex.Message);
|
||||||
|
Logger.LogError("【RackInstock】" + ex.StackTrace);
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||||
|
}
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,9 +182,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
int index = j + 1;
|
int index = j + 1;
|
||||||
//string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}-{index.ToString().PadLeft(4, '0')}";
|
//string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}-{index.ToString().PadLeft(4, '0')}";
|
||||||
// 变更加流水号
|
// 变更加流水号
|
||||||
string watercode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PURCHASE_MAT_ENCODE); ;
|
string watercode = await _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PURCHASE_MAT_ENCODE);
|
||||||
|
|
||||||
string code = $"{WmsPurchaseD.material_code}-{WmsPurchaseD.code_batch}{watercode}";
|
string code = $"CGSH{watercode}";
|
||||||
WmsTempCode barCode = new()
|
WmsTempCode barCode = new()
|
||||||
{
|
{
|
||||||
material_id = WmsPurchaseD.material_id,
|
material_id = WmsPurchaseD.material_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user