齐套出库
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,18 @@
|
|||||||
|
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class MaterialTransferGetRackAndMatByWorkStationInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 组织ID
|
||||||
|
/// </summary>
|
||||||
|
public string org_id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 工位号
|
||||||
|
/// </summary>
|
||||||
|
public string? work_station{ get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1526,7 +1526,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
} while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态);
|
} while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态 );
|
||||||
Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum<EnumAgvStatus>()}");
|
Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum<EnumAgvStatus>()}");
|
||||||
_elevatorAgvCtlStatusMap[disTask.id] = eleStatusMulti.agvStatus;
|
_elevatorAgvCtlStatusMap[disTask.id] = eleStatusMulti.agvStatus;
|
||||||
}
|
}
|
||||||
@@ -1554,9 +1554,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
} while (tuple.sysStatus != 3 || tuple.runStatus != 0);
|
} while (tuple.sysStatus != 3 || tuple.runStatus != 0 || floor != tuple.floorNo);
|
||||||
|
|
||||||
Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}");
|
Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}");
|
||||||
|
|
||||||
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯)
|
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯)
|
||||||
{
|
{
|
||||||
@@ -1834,6 +1834,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
await _db.Updateable<WmsTransferInstockD>().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
|
await _db.Updateable<WmsTransferInstockD>().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 二楼物料呼叫任务结束后清空工位信息
|
||||||
|
else if (dt.biz_type == "FloorCallMaterial")
|
||||||
|
{
|
||||||
|
await _db.Updateable<WmsCarryH>().SetColumns(r => r.work_station == "").Where(r => r.id == dt.carry_id).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
#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();
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ using Microsoft.Extensions.Logging;
|
|||||||
using JNPF.Systems.Entitys.System;
|
using JNPF.Systems.Entitys.System;
|
||||||
using JNPF.Systems.Entitys.Permission;
|
using JNPF.Systems.Entitys.Permission;
|
||||||
using Aop.Api.Domain;
|
using Aop.Api.Domain;
|
||||||
|
using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
|
||||||
|
|
||||||
namespace Tnb.WarehouseMgr
|
namespace Tnb.WarehouseMgr
|
||||||
{
|
{
|
||||||
@@ -497,42 +498,42 @@ namespace Tnb.WarehouseMgr
|
|||||||
[HttpPost, NonUnify, AllowAnonymous]
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> CallRackToProductionLine(MaterialTransferCallRackToProductionLineInput input)
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> CallRackToProductionLine(MaterialTransferCallRackToProductionLineInput input)
|
||||||
{
|
{
|
||||||
WmsCarryH wmsCarryH = _db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).First();
|
|
||||||
if (wmsCarryH == null)
|
|
||||||
{
|
|
||||||
Logger.LogWarning($"不存在编码为{input.carry_code}的料架号!");
|
|
||||||
throw new AppFriendlyException($"不存在编码为{input.carry_code}的料架号!", 500);
|
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(wmsCarryH.work_station))
|
|
||||||
{
|
|
||||||
Logger.LogWarning($"此料架目标工位为空!{input.carry_code}");
|
|
||||||
throw new AppFriendlyException($"此料架目标工位为空!{input.carry_code}!", 500);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(wmsCarryH.location_id))
|
|
||||||
{
|
|
||||||
Logger.LogWarning($"此料架的库位为空!{input.carry_code}");
|
|
||||||
throw new AppFriendlyException($"此料架的库位为空!{input.carry_code}", 500);
|
|
||||||
}
|
|
||||||
|
|
||||||
BasLocation endlocation = _db.Queryable<BasLocation>().Where(r => r.location_code == wmsCarryH.work_station).First();
|
|
||||||
|
|
||||||
WmsDistaskH wmsDistaskH = _db.Queryable<WmsDistaskH>().Where(r => r.carry_code == wmsCarryH.carry_code && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).First();
|
|
||||||
if (wmsDistaskH != null)
|
|
||||||
{
|
|
||||||
Logger.LogWarning($"此料架{input.carry_code}存在未完成的任务{wmsDistaskH.bill_code}!");
|
|
||||||
throw new AppFriendlyException($"此料架{input.carry_code}存在未完成的任务{wmsDistaskH.bill_code}!", 500);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
WmsCarryH wmsCarryH = _db.Queryable<WmsCarryH>().Where(r => r.carry_code == input.carry_code).First();
|
||||||
|
if (wmsCarryH == null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【CallRackToProductionLine】不存在编码为{input.carry_code}的料架号!");
|
||||||
|
throw new AppFriendlyException($"不存在编码为{input.carry_code}的料架号!", 500);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(wmsCarryH.work_station))
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【CallRackToProductionLine】此料架目标工位为空!{input.carry_code}");
|
||||||
|
throw new AppFriendlyException($"此料架目标工位为空!{input.carry_code}!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(wmsCarryH.location_id))
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【CallRackToProductionLine】此料架的库位为空!{input.carry_code}");
|
||||||
|
throw new AppFriendlyException($"此料架的库位为空!{input.carry_code}", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
BasLocation endlocation = _db.Queryable<BasLocation>().Where(r => r.location_code == wmsCarryH.work_station).First();
|
||||||
|
|
||||||
|
WmsPretaskH wmsPretaskH = _db.Queryable<WmsPretaskH>().Where(r => r.carry_code == wmsCarryH.carry_code && r.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID).First();
|
||||||
|
if (wmsPretaskH != null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【CallRackToProductionLine】此料架{input.carry_code}存在未完成的预任务{wmsPretaskH.bill_code}!");
|
||||||
|
throw new AppFriendlyException($"此料架{input.carry_code}存在未完成的预任务{wmsPretaskH.bill_code}!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||||
commonCreatePretaskInput.startlocation_id = wmsCarryH.location_id;
|
commonCreatePretaskInput.startlocation_id = wmsCarryH.location_id;
|
||||||
commonCreatePretaskInput.endlocation_id = endlocation.id;
|
commonCreatePretaskInput.endlocation_id = endlocation.id;
|
||||||
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
||||||
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
||||||
commonCreatePretaskInput.task_type = "";
|
commonCreatePretaskInput.task_type = "";
|
||||||
commonCreatePretaskInput.biz_type = "";
|
commonCreatePretaskInput.biz_type = "FloorCallMaterial";
|
||||||
|
|
||||||
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)
|
||||||
@@ -550,5 +551,75 @@ 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> RackAndMatByWorkstation(MaterialTransferGetRackAndMatByWorkStationInput input)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<WmsCarryH> wmsCarryHs = _db.Queryable<WmsCarryH>().Where(r => r.work_station == input.work_station).ToList();
|
||||||
|
if (string.IsNullOrEmpty(input.work_station))
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【RackAndMatByWorkstation】工位不能为空!");
|
||||||
|
throw new AppFriendlyException($"工位不能为空!", 500);
|
||||||
|
}
|
||||||
|
if (wmsCarryHs.Count == 0)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【RackAndMatByWorkstation】工位{input.work_station}未绑定料架!");
|
||||||
|
throw new AppFriendlyException($"工位{input.work_station}未绑定料架!", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
JObject keyValuePairs = new JObject();
|
||||||
|
JArray jArray = new JArray();
|
||||||
|
foreach (WmsCarryH wmsCarryH in wmsCarryHs)
|
||||||
|
{
|
||||||
|
if (wmsCarryH.carrystd_id != "26037267399717")
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【RackAndMatByWorkstation】工位{input.work_station}绑定的{wmsCarryH.carry_code}载具不是料架类型!请检查");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var matCodes = _db.Queryable<WmsCarryD>()
|
||||||
|
.InnerJoin<WmsCarryCode>((a, b) => a.membercarry_id == b.carry_id)
|
||||||
|
.InnerJoin<BasMaterial>((a, b, c) => b.material_id == c.id)
|
||||||
|
.Where((a, b, c) => a.carry_id == wmsCarryH.id)
|
||||||
|
.Select((a, b, c) => new
|
||||||
|
{
|
||||||
|
b.org_id,
|
||||||
|
a.membercarry_id,
|
||||||
|
a.membercarry_code,
|
||||||
|
b.material_id,
|
||||||
|
b.material_code,
|
||||||
|
material_name = c.name,
|
||||||
|
c.material_specification,
|
||||||
|
b.unit_id,
|
||||||
|
b.barcode,
|
||||||
|
b.code_batch,
|
||||||
|
b.codeqty,
|
||||||
|
b.create_id,
|
||||||
|
b.create_time
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
JObject pairs = new JObject();
|
||||||
|
pairs["carry_id"] = wmsCarryH.id;
|
||||||
|
pairs["carry_code"] = wmsCarryH.carry_code;
|
||||||
|
pairs["details"] = JArray.Parse(JsonConvert.SerializeObject(matCodes));
|
||||||
|
jArray.Add(pairs);
|
||||||
|
}
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功", jArray);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError("【RackAndMatByWorkstation】" + ex.Message);
|
||||||
|
Logger.LogError("【RackAndMatByWorkstation】" + ex.StackTrace);
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,6 +324,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
bindCarryCodeInput.location_id = endLocations[0].id;
|
bindCarryCodeInput.location_id = endLocations[0].id;
|
||||||
bindCarryCodeInput.location_code = endLocations[0].location_code;
|
bindCarryCodeInput.location_code = endLocations[0].location_code;
|
||||||
bindCarryCodeInput.code_batch = wmsTransferInstockD.pi_code;
|
bindCarryCodeInput.code_batch = wmsTransferInstockD.pi_code;
|
||||||
|
bindCarryCodeInput.unit_id = basMaterial.unit_id;
|
||||||
|
|
||||||
await _wmsCarryService.BindCarryMaterial(bindCarryCodeInput);
|
await _wmsCarryService.BindCarryMaterial(bindCarryCodeInput);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
||||||
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
||||||
commonCreatePretaskInput2.isExcuteMission = false;
|
commonCreatePretaskInput2.isExcuteMission = false;
|
||||||
commonCreatePretaskInput1.isChangeCarryLoc2StartLoc = false;
|
commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false;
|
||||||
|
|
||||||
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2);
|
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,23 +2,37 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading.Channels;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Aspose.Cells.Drawing;
|
||||||
using CSRedis;
|
using CSRedis;
|
||||||
using JNPF;
|
using JNPF;
|
||||||
using JNPF.Common.Cache;
|
using JNPF.Common.Cache;
|
||||||
using JNPF.DependencyInjection;
|
using JNPF.DependencyInjection;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using static CSRedis.CSRedisClient;
|
||||||
|
|
||||||
namespace Tnb.Common.Redis
|
namespace Tnb.Common.Redis
|
||||||
{
|
{
|
||||||
public class RedisData : ISingleton
|
public class RedisData : ISingleton
|
||||||
{
|
{
|
||||||
private static CSRedisClient _instance;
|
private static CSRedisClient _instance;
|
||||||
|
public delegate void rcvMsgHandler(string Channel, string Body);
|
||||||
|
public event rcvMsgHandler rcvMsg;
|
||||||
public RedisData()
|
public RedisData()
|
||||||
{
|
{
|
||||||
RedisOptions _RedisOptions = App.GetConfig<RedisOptions>("Redis", true);
|
RedisOptions _RedisOptions = App.GetConfig<RedisOptions>("Redis", true);
|
||||||
_instance = new CSRedis.CSRedisClient(string.Format(_RedisOptions.RedisConnectionString, _RedisOptions.ip, _RedisOptions.port, _RedisOptions.password));
|
_instance = new CSRedis.CSRedisClient(string.Format(_RedisOptions.RedisConnectionString, _RedisOptions.ip, _RedisOptions.port, _RedisOptions.password));
|
||||||
|
|
||||||
|
_instance.Subscribe(("devdata_change", msg =>
|
||||||
|
{
|
||||||
|
if (rcvMsg != null)
|
||||||
|
{
|
||||||
|
rcvMsg(msg.Channel, msg.Body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -264,5 +278,7 @@ namespace Tnb.Common.Redis
|
|||||||
}
|
}
|
||||||
return default(T);
|
return default(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user