齐套出库
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);
|
||||
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>()}");
|
||||
_elevatorAgvCtlStatusMap[disTask.id] = eleStatusMulti.agvStatus;
|
||||
}
|
||||
@@ -1554,9 +1554,9 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
||||
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.停梯)
|
||||
{
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
// 二楼物料呼叫任务结束后清空工位信息
|
||||
else if (dt.biz_type == "FloorCallMaterial")
|
||||
{
|
||||
await _db.Updateable<WmsCarryH>().SetColumns(r => r.work_station == "").Where(r => r.id == dt.carry_id).ExecuteCommandAsync();
|
||||
}
|
||||
#endregion
|
||||
|
||||
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.Permission;
|
||||
using Aop.Api.Domain;
|
||||
using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
@@ -497,42 +498,42 @@ namespace Tnb.WarehouseMgr
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
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
|
||||
{
|
||||
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.startlocation_id = wmsCarryH.location_id;
|
||||
commonCreatePretaskInput.endlocation_id = endlocation.id;
|
||||
commonCreatePretaskInput.carry_id = wmsCarryH.id;
|
||||
commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
|
||||
commonCreatePretaskInput.task_type = "";
|
||||
commonCreatePretaskInput.biz_type = "";
|
||||
commonCreatePretaskInput.biz_type = "FloorCallMaterial";
|
||||
|
||||
var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
|
||||
if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
|
||||
@@ -550,5 +551,75 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
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_code = endLocations[0].location_code;
|
||||
bindCarryCodeInput.code_batch = wmsTransferInstockD.pi_code;
|
||||
bindCarryCodeInput.unit_id = basMaterial.unit_id;
|
||||
|
||||
await _wmsCarryService.BindCarryMaterial(bindCarryCodeInput);
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ namespace Tnb.WarehouseMgr
|
||||
commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID;
|
||||
commonCreatePretaskInput2.require_id = wmsPrdInstockD.id;
|
||||
commonCreatePretaskInput2.isExcuteMission = false;
|
||||
commonCreatePretaskInput1.isChangeCarryLoc2StartLoc = false;
|
||||
commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false;
|
||||
|
||||
Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2);
|
||||
}
|
||||
|
||||
@@ -2,23 +2,37 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Channels;
|
||||
using System.Threading.Tasks;
|
||||
using Aspose.Cells.Drawing;
|
||||
using CSRedis;
|
||||
using JNPF;
|
||||
using JNPF.Common.Cache;
|
||||
using JNPF.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Newtonsoft.Json;
|
||||
using static CSRedis.CSRedisClient;
|
||||
|
||||
namespace Tnb.Common.Redis
|
||||
{
|
||||
public class RedisData : ISingleton
|
||||
{
|
||||
private static CSRedisClient _instance;
|
||||
public delegate void rcvMsgHandler(string Channel, string Body);
|
||||
public event rcvMsgHandler rcvMsg;
|
||||
public RedisData()
|
||||
{
|
||||
RedisOptions _RedisOptions = App.GetConfig<RedisOptions>("Redis", true);
|
||||
_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>
|
||||
@@ -264,5 +278,7 @@ namespace Tnb.Common.Redis
|
||||
}
|
||||
return default(T);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user