二楼暂存仓逻辑完善,新增外协入库与盘点接收接口
This commit is contained in:
@@ -20,6 +20,7 @@ using Newtonsoft.Json;
|
|||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using NPOI.OpenXmlFormats;
|
using NPOI.OpenXmlFormats;
|
||||||
using NPOI.SS.Formula.Eval;
|
using NPOI.SS.Formula.Eval;
|
||||||
|
using NPOI.SS.Formula.Functions;
|
||||||
using Org.BouncyCastle.Asn1.X509;
|
using Org.BouncyCastle.Asn1.X509;
|
||||||
using Org.BouncyCastle.Asn1.X509.Qualified;
|
using Org.BouncyCastle.Asn1.X509.Qualified;
|
||||||
using Qiniu.Util;
|
using Qiniu.Util;
|
||||||
@@ -548,12 +549,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
string[] configs = new string[2] { "二楼上升降机机械臂左", "二楼上升降机机械臂右" };
|
string[] configs = new string[2] { "二楼上升降机机械臂左", "二楼上升降机机械臂右" };
|
||||||
// 左右料架区配置
|
// 左右料架区配置
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>()
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>()
|
||||||
.Where(r => configs.Contains(r.name) && r.mechanicalconfirm == 1).ToList();
|
.Where(r => configs.Contains(r.name) && r.agvconfirm == 1).ToList();
|
||||||
|
|
||||||
// 是否可以放货
|
// 是否可以放货
|
||||||
if (WmsMechanicalArmHs.Count == 0)
|
if (WmsMechanicalArmHs.Count == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】目前没有可以放货的料架区");
|
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】目前没有可以放货的料架区(机械臂空托送到信号为false)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -568,7 +569,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
// 获取下到输送线9和10的未完成的出库单
|
// 获取下到输送线9和10的未完成的出库单
|
||||||
List<WmsEmptyOutstockH> WmsEmptyOutstockHs = db.Queryable<WmsEmptyOutstockH>()
|
List<WmsEmptyOutstockH> WmsEmptyOutstockHs = db.Queryable<WmsEmptyOutstockH>()
|
||||||
.InnerJoin<WmsEmptyOutstockD>((a, b) => a.id == b.bill_id)
|
.InnerJoin<WmsEmptyOutstockD>((a, b) => a.id == b.bill_id)
|
||||||
.Where((a, b) => (a.location_id == "32609238573589" || a.location_id == "32609229889045") && a.bindrackcomplete != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID
|
.Where((a, b) => (a.location_id == "32609238573589" || a.location_id == "32609229889045") && (string.IsNullOrEmpty(a.bindrackcomplete) || a.bindrackcomplete != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
|
||||||
&& b.carry_code == barcode).ToList();
|
&& b.carry_code == barcode).ToList();
|
||||||
|
|
||||||
if (WmsEmptyOutstockHs.Count() == 0)
|
if (WmsEmptyOutstockHs.Count() == 0)
|
||||||
@@ -612,6 +613,17 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
bool result = await Floor2UpDownMachinecode_SetTag($"上升降机满托{target.stackingposition}数量", maxnum.ToString());
|
bool result = await Floor2UpDownMachinecode_SetTag($"上升降机满托{target.stackingposition}数量", maxnum.ToString());
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】设定升降机满托{target.stackingposition}满托数量为 {maxnum} 结果为 {result}");
|
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】设定升降机满托{target.stackingposition}满托数量为 {maxnum} 结果为 {result}");
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
throw new Exception($@"【上升降机】设定升降机满托{target.stackingposition}满托数量为 {maxnum} 结果为 {result}");
|
||||||
|
}
|
||||||
|
// 尝试写入空托送到信号
|
||||||
|
bool result上升降机空托送到 = await Floor2UpDownMachinecode_SetTag($"上升降机空托{target.stackingposition}送到", "true");
|
||||||
|
LoggerFloor2UpDownMachine.LogInformation($@"【送空托到上升降区】回写 上升降机空托{target.stackingposition}送到 结果为{result上升降机空托送到}");
|
||||||
|
if (!result上升降机空托送到)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -631,47 +643,39 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
// 料箱信息
|
// 料箱信息
|
||||||
WmsCarryH LX = db.Queryable<WmsCarryH>().Where(r => r.carry_code == barcode).ToList()[0];
|
WmsCarryH LX = db.Queryable<WmsCarryH>().Where(r => r.carry_code == barcode).ToList()[0];
|
||||||
|
|
||||||
|
// 开始码垛
|
||||||
// 判断《上升降机空托1/2送到》是否为true
|
bool result_开始码垛 = await Floor2UpDownMachinecode_SetTag(MechanicalArmConsts.上升降机当前码垛位, target.stackingposition.ToString());
|
||||||
string tag_上升降机空托送到 = $@"上升降机空托{target.stackingposition}送到";
|
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】码垛结果 {result_开始码垛}");
|
||||||
|
if (!result_开始码垛)
|
||||||
bool 上升降机空托送到 = (bool)Floor2UpDownMachinecode_GetTag<bool>(tag_上升降机空托送到);
|
|
||||||
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】取值 {tag_上升降机空托送到} 结果为 {上升降机空托送到}");
|
|
||||||
if (上升降机空托送到)
|
|
||||||
{
|
{
|
||||||
// 开始码垛
|
throw new Exception($@"【上升降机】码垛结果 {result_开始码垛}");
|
||||||
bool result = await Floor2UpDownMachinecode_SetTag(MechanicalArmConsts.上升降机当前码垛位, target.stackingposition.ToString());
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】码垛结果 {result}");
|
|
||||||
// 回写料箱条码、码垛计数
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
|
||||||
{
|
|
||||||
barcodes = $"{target.barcodes},{barcode}".Trim(','),
|
|
||||||
stackingcount = r.stackingcount + 1
|
|
||||||
}).Where(r => r.id == target.id).ExecuteCommandAsync();
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写料箱条码、码垛计数");
|
|
||||||
|
|
||||||
// 回写出库单的剩余可绑定料架数量
|
|
||||||
await db.Updateable<WmsEmptyOutstockH>().SetColumns(r => new WmsEmptyOutstockH
|
|
||||||
{
|
|
||||||
remainbindracknum = r.remainbindracknum - 1
|
|
||||||
}).Where(r => r.id == WmsEmptyOutstockH.id).ExecuteCommandAsync();
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写出库单的剩余可绑定料架数量");
|
|
||||||
|
|
||||||
// 绑定料箱到料架
|
|
||||||
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
|
||||||
carryBindFloor2UpDownMachineInput.carry_id = target.rackid;
|
|
||||||
carryBindFloor2UpDownMachineInput.carry_code= target.rackcode;
|
|
||||||
carryBindFloor2UpDownMachineInput.membercarry_id = LX.id;
|
|
||||||
carryBindFloor2UpDownMachineInput.membercarry_code = LX.carry_code;
|
|
||||||
carryBindFloor2UpDownMachineInput.carrystd_id = rack.carrystd_id;
|
|
||||||
|
|
||||||
await _wmsCarryBindService.CarryBindFloor2UpDownMachine(carryBindFloor2UpDownMachineInput);
|
|
||||||
}
|
}
|
||||||
else
|
// 回写料箱条码、码垛计数
|
||||||
|
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
{
|
{
|
||||||
LoggerFloor2UpDownMachine.LogError($@"【上升降机】料架未送到 料架区{target.stackingposition}");
|
barcodes = $"{target.barcodes},{barcode}".Trim(','),
|
||||||
}
|
stackingcount = r.stackingcount + 1,
|
||||||
|
mechanicalconfirm = 1
|
||||||
|
}).Where(r => r.id == target.id).ExecuteCommandAsync();
|
||||||
|
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写料箱条码、码垛计数");
|
||||||
|
|
||||||
|
// 回写出库单的剩余可绑定料架数量
|
||||||
|
await db.Updateable<WmsEmptyOutstockH>().SetColumns(r => new WmsEmptyOutstockH
|
||||||
|
{
|
||||||
|
remainbindracknum = r.remainbindracknum - 1
|
||||||
|
}).Where(r => r.id == WmsEmptyOutstockH.id).ExecuteCommandAsync();
|
||||||
|
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写出库单的剩余可绑定料架数量");
|
||||||
|
|
||||||
|
// 绑定料箱到料架
|
||||||
|
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
||||||
|
carryBindFloor2UpDownMachineInput.carry_id = target.rackid;
|
||||||
|
carryBindFloor2UpDownMachineInput.carry_code= target.rackcode;
|
||||||
|
carryBindFloor2UpDownMachineInput.membercarry_id = LX.id;
|
||||||
|
carryBindFloor2UpDownMachineInput.membercarry_code = LX.carry_code;
|
||||||
|
carryBindFloor2UpDownMachineInput.carrystd_id = rack.carrystd_id;
|
||||||
|
|
||||||
|
await _wmsCarryBindService.CarryBindFloor2UpDownMachine(carryBindFloor2UpDownMachineInput);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await db.Ado.CommitTranAsync();
|
await db.Ado.CommitTranAsync();
|
||||||
@@ -688,143 +692,126 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
private async void Floor2DownMachinecode(object args)
|
//private async void Floor2DownMachinecode(object args)
|
||||||
{
|
//{
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
// using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
// {
|
||||||
|
|
||||||
// 读取上升降机的左右料架区配置
|
// // 读取上升降机的左右料架区配置
|
||||||
string[] configs = new string[2] { "二楼下升降机机械臂左", "二楼下升降机机械臂右" };
|
// string[] configs = new string[2] { "二楼下升降机机械臂左", "二楼下升降机机械臂右" };
|
||||||
|
|
||||||
// 左右料架区配置
|
// // 左右料架区配置
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>()
|
// List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>()
|
||||||
.Where(r => configs.Contains(r.name) && r.mechanicalconfirm == 1 && r.stackingcount < r.maxnum).ToList();
|
// .Where(r => configs.Contains(r.name) && r.mechanicalconfirm == 1 && r.stackingcount < r.maxnum).ToList();
|
||||||
|
|
||||||
// 是否可以放货
|
// // 是否可以放货
|
||||||
if (WmsMechanicalArmHs.Count == 0)
|
// if (WmsMechanicalArmHs.Count == 0)
|
||||||
{
|
// {
|
||||||
LoggerFloor2UpDownMachine.LogWarning($@"【下升降机】目前没有可以取货的料架区");
|
// //LoggerFloor2UpDownMachine.LogWarning($@"【下升降机】目前没有可以取货的料架区");
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
WmsMechanicalArmH target;
|
// WmsMechanicalArmH target;
|
||||||
target = WmsMechanicalArmHs.First();
|
// target = WmsMechanicalArmHs.First();
|
||||||
|
|
||||||
|
|
||||||
// 待拆垛列表
|
// // 待拆垛列表
|
||||||
List<WmsCarrybindH> WmsCarrybindHs = db.Queryable<WmsMechanicalArmH>()
|
// List<WmsCarryD> WmsCarryCodes = db.Queryable<WmsMechanicalArmH>()
|
||||||
.InnerJoin<WmsCarrybindH>((a, b) => a.rackid == b.carry_id)
|
// .InnerJoin<WmsCarryD>((a, b) => a.rackid == b.carry_id)
|
||||||
.Where(a => configs.Contains(a.name) && a.mechanicalconfirm == 1 && a.id == target.id).Select((a, b) => b).OrderBy(a => a.id).ToList();
|
// .Where(a => configs.Contains(a.name) && a.mechanicalconfirm == 1 && a.id == target.id).Select((a, b) => b).OrderBy(a => a.id).ToList();
|
||||||
|
|
||||||
// 料架拆垛完成
|
// // 料架拆垛完成
|
||||||
if (WmsCarrybindHs.Count() == 0)
|
// if (WmsCarryCodes.Count() == 0)
|
||||||
{
|
// {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
string barcode = WmsCarrybindHs[0].membercarry_code;
|
// string barcode = WmsCarryCodes[0].membercarry_code;
|
||||||
|
|
||||||
// 如果条码已被绑定
|
// // 如果条码已被绑定
|
||||||
if (WmsMechanicalArmHs.Where(r => !string.IsNullOrEmpty(r.barcodes) && r.barcodes.Contains(barcode)).Count() > 0)
|
// if (WmsMechanicalArmHs.Where(r => !string.IsNullOrEmpty(r.barcodes) && r.barcodes.Contains(barcode)).Count() > 0)
|
||||||
{
|
// {
|
||||||
LoggerFloor2UpDownMachine.LogWarning($@"【下升降机】条码{barcode}已被绑定");
|
// LoggerFloor2UpDownMachine.LogWarning($@"【下升降机】条码{barcode}已被绑定");
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【下升降机】扫描到有效条码 {barcode}");
|
// LoggerFloor2UpDownMachine.LogInformation($@"【下升降机】扫描到有效条码 {barcode}");
|
||||||
|
|
||||||
await db.Ado.BeginTranAsync();
|
// await db.Ado.BeginTranAsync();
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【下升降机】当前条码目标料架区为 {JsonConvert.SerializeObject(target)}");
|
// LoggerFloor2UpDownMachine.LogInformation($@"【下升降机】当前条码目标料架区为 {JsonConvert.SerializeObject(target)}");
|
||||||
|
|
||||||
// 料架信息
|
// // 料架信息
|
||||||
WmsCarryH rack = db.Queryable<WmsCarryH>().Where(r => r.id == target.rackid).ToList()[0];
|
// WmsCarryH rack = db.Queryable<WmsCarryH>().Where(r => r.id == target.rackid).ToList()[0];
|
||||||
|
|
||||||
// 料箱信息
|
// // 料箱信息
|
||||||
WmsCarryH LX = db.Queryable<WmsCarryH>().Where(r => r.carry_code == barcode).ToList()[0];
|
// WmsCarryH LX = db.Queryable<WmsCarryH>().Where(r => r.carry_code == barcode).ToList()[0];
|
||||||
|
|
||||||
|
|
||||||
// 判断《下升降机满托1/2送到》是否为true
|
// await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
string tag_下升降机满托送到 = $@"下升降机满托{target.stackingposition}送到";
|
// {
|
||||||
|
// barcodes = $"{target.barcodes},{barcode}".Trim(','),
|
||||||
|
// stackingcount = r.stackingcount + 1
|
||||||
|
// }).Where(r => r.id == target.id).ExecuteCommandAsync();
|
||||||
|
// LoggerFloor2UpDownMachine.LogInformation($@"【下升降机】回写料箱条码、拆垛计数");
|
||||||
|
|
||||||
bool 下升降机满托送到 = (bool)Floor2UpDownMachinecode_GetTag<bool>(tag_下升降机满托送到);
|
// // 解除绑定料箱到料架
|
||||||
|
// CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
||||||
|
// carryBindFloor2UpDownMachineInput.carry_id = target.rackid;
|
||||||
|
// carryBindFloor2UpDownMachineInput.carry_code = target.rackcode;
|
||||||
|
// carryBindFloor2UpDownMachineInput.membercarry_id = LX.id;
|
||||||
|
// carryBindFloor2UpDownMachineInput.membercarry_code = LX.carry_code;
|
||||||
|
// carryBindFloor2UpDownMachineInput.carrystd_id = rack.carrystd_id;
|
||||||
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【下降机】取值 {tag_下升降机满托送到} 结果为 {下升降机满托送到}");
|
// await _wmsCarryBindService.CarryUnbindFloor2UpDownMachine(carryBindFloor2UpDownMachineInput);
|
||||||
if (下升降机满托送到)
|
|
||||||
{
|
|
||||||
// 开始拆垛
|
|
||||||
bool result = await Floor2UpDownMachinecode_SetTag(MechanicalArmConsts.下升降机当前码垛位, target.stackingposition.ToString());
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【下升降机】拆垛结果 {result}");
|
|
||||||
// 回写料箱条码、码垛计数
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
|
||||||
{
|
|
||||||
barcodes = $"{target.barcodes},{barcode}".Trim(','),
|
|
||||||
stackingcount = r.stackingcount + 1
|
|
||||||
}).Where(r => r.id == target.id).ExecuteCommandAsync();
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【下升降机】回写料箱条码、拆垛计数");
|
|
||||||
|
|
||||||
// 解除绑定料箱到料架
|
|
||||||
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
|
||||||
carryBindFloor2UpDownMachineInput.carry_id = target.rackid;
|
|
||||||
carryBindFloor2UpDownMachineInput.carry_code = target.rackcode;
|
|
||||||
carryBindFloor2UpDownMachineInput.membercarry_id = LX.id;
|
|
||||||
carryBindFloor2UpDownMachineInput.membercarry_code = LX.carry_code;
|
|
||||||
carryBindFloor2UpDownMachineInput.carrystd_id = rack.carrystd_id;
|
|
||||||
|
|
||||||
await _wmsCarryBindService.CarryUnbindFloor2UpDownMachine(carryBindFloor2UpDownMachineInput);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoggerFloor2UpDownMachine.LogError($@"【下升降机】料架未送到 料架区{target.stackingposition}");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
await db.Ado.CommitTranAsync();
|
|
||||||
|
|
||||||
}
|
// await db.Ado.CommitTranAsync();
|
||||||
catch (Exception ex)
|
|
||||||
{
|
// }
|
||||||
LoggerFloor2UpDownMachine.LogError(ex.ToString());
|
// catch (Exception ex)
|
||||||
LoggerFloor2UpDownMachine.LogError(ex.StackTrace);
|
// {
|
||||||
await db.Ado.RollbackTranAsync();
|
// LoggerFloor2UpDownMachine.LogError(ex.ToString());
|
||||||
}
|
// LoggerFloor2UpDownMachine.LogError(ex.StackTrace);
|
||||||
}
|
// await db.Ado.RollbackTranAsync();
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 检查机械臂料架区信号(上升降机空托1送到)
|
/// 检查机械臂料架区信号(上升降机空托1送到)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<bool> 检查机械臂料架区信号_上升降机空托1送到()
|
//public async Task<bool> 检查机械臂料架区信号_上升降机空托1送到()
|
||||||
{
|
//{
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
// using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
// {
|
||||||
string[] configs_upMachine = new string[2] { "二楼上升降机机械臂左", "二楼上升降机机械臂右" };
|
// string[] configs_upMachine = new string[2] { "二楼上升降机机械臂左", "二楼上升降机机械臂右" };
|
||||||
|
|
||||||
// 找到AGV已到货,没有机械臂确认的数据
|
// // 找到AGV已到货的数据 发送机械臂送到指令
|
||||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>()
|
// ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>()
|
||||||
.Where(r => r.agvconfirm == 1 && r.mechanicalconfirm == 0 && configs_upMachine.Contains(r.name));
|
// .Where(r => r.agvconfirm == 1 && r.mechanicalconfirm == 0 && configs_upMachine.Contains(r.name));
|
||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHsuagar.ToList())
|
// foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHsuagar.ToList())
|
||||||
{
|
// {
|
||||||
bool 上升降机请求送空托 = (bool)Floor2UpDownMachinecode_GetTag<bool>($"上升降机请求送空托{wmsMechanicalArmH.stackingposition}");
|
// // 尝试写入空托送到信号
|
||||||
|
// bool result上升降机空托送到 = await Floor2UpDownMachinecode_SetTag($"上升降机空托{wmsMechanicalArmH.stackingposition}送到", "true");
|
||||||
|
// LoggerFloor2UpDownMachine.LogInformation($@"【送空托到上升降区】回写 上升降机空托{wmsMechanicalArmH.stackingposition}送到 结果为{result上升降机空托送到}");
|
||||||
|
// if (!result上升降机空托送到)
|
||||||
|
// {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
string data = _redisData.GetHash("东面提升机输送线", $"上升降机空托{wmsMechanicalArmH.stackingposition}送到").Result;
|
// // 绑定料架
|
||||||
JObject? res = JsonConvert.DeserializeObject<JObject>(data);
|
// await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
|
// {
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 上升降机空托{wmsMechanicalArmH.stackingposition}送到 结果为{result}");
|
// mechanicalconfirm = 1
|
||||||
if (result)
|
// }).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
||||||
{
|
// }
|
||||||
// 绑定料架
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
|
||||||
{
|
|
||||||
mechanicalconfirm = 1
|
|
||||||
}).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 检查机械臂料架区信号(上升降机满托1送到)
|
/// 检查机械臂料架区信号(上升降机满托1送到)
|
||||||
@@ -842,23 +829,29 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHsuagar.ToList())
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHsuagar.ToList())
|
||||||
{
|
{
|
||||||
bool 上升降机请求送空托 = (bool)Floor2UpDownMachinecode_GetTag<bool>($"下升降机请求送满托{wmsMechanicalArmH.stackingposition}");
|
// 尝试写入满托送到信号
|
||||||
|
bool result上升降机空托送到 = await Floor2UpDownMachinecode_SetTag($"下升降机满托{wmsMechanicalArmH.stackingposition}送到", "true");
|
||||||
string data = _redisData.GetHash("东面提升机输送线", $"下升降机满托{wmsMechanicalArmH.stackingposition}送到").Result;
|
LoggerFloor2UpDownMachine.LogInformation($@"【送满托到上升降区】回写 下升降机满托{wmsMechanicalArmH.stackingposition}送到 结果为{result上升降机空托送到}");
|
||||||
JObject? res = JsonConvert.DeserializeObject<JObject>(data);
|
if (!result上升降机空托送到)
|
||||||
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到上升降区】 下升降机满托{wmsMechanicalArmH.stackingposition}送到 结果为{result}");
|
|
||||||
if (result)
|
|
||||||
{
|
{
|
||||||
int LXCount = db.Queryable<WmsCarrybindH>().Where(r => r.carry_id == wmsMechanicalArmH.rackid).Count();
|
return false;
|
||||||
|
|
||||||
// 绑定料架
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
|
||||||
{
|
|
||||||
mechanicalconfirm = 1,
|
|
||||||
maxnum = LXCount
|
|
||||||
}).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LXCount = db.Queryable<WmsCarryD>() .Where(a => a.carry_id == wmsMechanicalArmH.rackid).Count();
|
||||||
|
|
||||||
|
bool result = await Floor2UpDownMachinecode_SetTag($"下升降机满托{wmsMechanicalArmH.stackingposition}数量", LXCount.ToString());
|
||||||
|
LoggerFloor2UpDownMachine.LogInformation($@"【送满托到上升降区】设定下升降机满托{wmsMechanicalArmH.stackingposition}满托数量为 {LXCount} 结果为 {result}");
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
throw new Exception($@"【送满托到上升降区】设定升降机满托{wmsMechanicalArmH.stackingposition}满托数量为 {LXCount} 结果为 {result}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绑定料架
|
||||||
|
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
|
{
|
||||||
|
mechanicalconfirm = 1,
|
||||||
|
maxnum = LXCount
|
||||||
|
}).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -892,13 +885,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool 上升降机请求送空托 = (bool)Floor2UpDownMachinecode_GetTag<bool>($"上升降机请求送空托{wmsMechanicalArmH.stackingposition}");
|
|
||||||
if (!上升降机请求送空托)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【送空托到上升降区】 料架区 {wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 上升降机请求送空托{wmsMechanicalArmH.stackingposition}信号不为true");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
||||||
|
|
||||||
|
|
||||||
@@ -906,14 +892,14 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
ISugarQueryable<BasLocation> rackStartLocations =
|
ISugarQueryable<BasLocation> rackStartLocations =
|
||||||
_repository.AsSugarClient().Queryable<BasLocation>()
|
_repository.AsSugarClient().Queryable<BasLocation>()
|
||||||
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
||||||
.LeftJoin<WmsCarrybindH>((a, b, c) => b.id == c.carry_id)
|
.LeftJoin<WmsCarryD>((a, b, c) => b.id == c.carry_id)
|
||||||
.Where((a, b, c) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && string.IsNullOrEmpty(c.id)
|
.Where((a, b, c) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && string.IsNullOrEmpty(c.id)
|
||||||
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy(a => a.id).Take(1);
|
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy(a => a.id).Take(1);
|
||||||
|
|
||||||
if (rackStartLocations.Count() == 0)
|
if (rackStartLocations.Count() == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【送空托到上升降区】 暂存仓中没有可用的空料架 {rackStartLocations.ToSqlString()}");
|
LoggerFloor2RackDelivery.LogWarning($"【送空托到上升降区】 暂存仓中没有可用的空料架 {rackStartLocations.ToSqlString()}");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BasLocation startLocation = rackStartLocations.First();
|
BasLocation startLocation = rackStartLocations.First();
|
||||||
@@ -923,7 +909,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
if (startPoints.Count == 0)
|
if (startPoints.Count == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<WmsPointH> endPoints = _repository.AsSugarClient().Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
List<WmsPointH> endPoints = _repository.AsSugarClient().Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
||||||
@@ -931,20 +917,20 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
if (endPoints.Count == 0)
|
if (endPoints.Count == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<WmsCarryH> wmsCarryHs = _repository.AsSugarClient().Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
List<WmsCarryH> wmsCarryHs = _repository.AsSugarClient().Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
||||||
if (wmsCarryHs.Count == 0)
|
if (wmsCarryHs.Count == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架");
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wmsCarryHs.Count > 1)
|
if (wmsCarryHs.Count > 1)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上存在多个料架");
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上存在多个料架");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 空料架
|
// 空料架
|
||||||
@@ -971,7 +957,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
Tuple<bool, WmsPretaskH> result = await Floor2UpDownMachinecode_createPretask(points, targetCarry.id, targetCarry.carry_code);
|
Tuple<bool, WmsPretaskH> result = await Floor2UpDownMachinecode_createPretask(points, targetCarry.id, targetCarry.carry_code);
|
||||||
if (!result.Item1)
|
if (!result.Item1)
|
||||||
{
|
{
|
||||||
throw new Exception("【送空托到上升降区】 未成功生成预任务");
|
continue;
|
||||||
|
//throw new Exception("【送空托到上升降区】 未成功生成预任务");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -997,7 +984,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
if (WmsMechanicalArmHs.Count() == 0)
|
if (WmsMechanicalArmHs.Count() == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 无需补充料架区 {WmsMechanicalArmHsuagar.ToSqlString()}");
|
//LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 无需补充料架区 {WmsMechanicalArmHsuagar.ToSqlString()}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1012,22 +999,43 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
|
||||||
|
|
||||||
|
// 找到占用且未锁定的库位上的满料架且料架中的料箱是空的
|
||||||
// 找到占用且未锁定的库位上的满料架
|
List<BasLocation> rackStartLocations =
|
||||||
ISugarQueryable<BasLocation> rackStartLocations =
|
|
||||||
_repository.AsSugarClient().Queryable<BasLocation>()
|
_repository.AsSugarClient().Queryable<BasLocation>()
|
||||||
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
||||||
.LeftJoin<WmsCarrybindH>((a, b, c) => b.id == c.carry_id)
|
.LeftJoin<WmsCarryD>((a, b, c) => b.id == c.carry_id) // 有料箱
|
||||||
.Where((a, b, c) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && !string.IsNullOrEmpty(c.id)
|
.LeftJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
|
||||||
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy(a => a.id).Take(1);
|
.Where((a, b, c, d) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && !string.IsNullOrEmpty(c.id)
|
||||||
|
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy((a, b, c, d) => d.id).Select((a, b, c, d) => new // 关联载具物料明细表
|
||||||
|
{
|
||||||
|
basLocation = a,
|
||||||
|
WmsCarryCode_id = d.id
|
||||||
|
}).ToList().GroupBy(r => r.basLocation.location_code).Select(r =>
|
||||||
|
{
|
||||||
|
var item = r.FirstOrDefault();
|
||||||
|
// 前面通过OrderBy(d => d.id)对WmsCarryCode_id进行了排序 那么如果第一行有数据则说明存在非空料箱
|
||||||
|
if (!string.IsNullOrEmpty(item.WmsCarryCode_id))
|
||||||
|
{
|
||||||
|
return new BasLocation();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 进这里说明库位下的料箱都为空
|
||||||
|
return item.basLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
// 筛选非空库位数据
|
||||||
|
.Where(r => !string.IsNullOrEmpty(r.location_code)).ToList();
|
||||||
|
|
||||||
|
|
||||||
if (rackStartLocations.Count() == 0)
|
if (rackStartLocations.Count() == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 暂存仓中没有可用的满料架 {rackStartLocations.ToSqlString()}");
|
//LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 暂存仓中没有可用的满料架 {rackStartLocations.ToSqlString()}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
||||||
|
|
||||||
BasLocation startLocation = rackStartLocations.First();
|
BasLocation startLocation = rackStartLocations.First();
|
||||||
|
|
||||||
@@ -1063,6 +1071,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
// 满料架
|
// 满料架
|
||||||
WmsCarryH targetCarry = wmsCarryHs[0];
|
WmsCarryH targetCarry = wmsCarryHs[0];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
WmsPointH startPoint = startPoints.First();
|
||||||
WmsPointH endPoint = endPoints.First();
|
WmsPointH endPoint = endPoints.First();
|
||||||
|
|
||||||
@@ -1107,6 +1117,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
|
await s_taskExecuteRackDelivery.WaitAsync();
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1114,7 +1125,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
bool 上升降机请求取满托 = (bool)Floor2UpDownMachinecode_GetTag<bool>($"上升降机请求取满托{wmsMechanicalArmH.stackingposition}");
|
bool 上升降机请求取满托 = (bool)Floor2UpDownMachinecode_GetTag<bool>($"上升降机请求取满托{wmsMechanicalArmH.stackingposition}");
|
||||||
if (!上升降机请求取满托)
|
if (!上升降机请求取满托)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】上升降机请求取满托{wmsMechanicalArmH.stackingposition}");
|
LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】上升降机请求取满托{wmsMechanicalArmH.stackingposition} {上升降机请求取满托}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1177,6 +1188,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
{
|
{
|
||||||
throw new Exception("未成功生成预任务");
|
throw new Exception("未成功生成预任务");
|
||||||
}
|
}
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 成功生成预任务 {result.Item2}");
|
||||||
|
|
||||||
|
s_taskExecuteRackDelivery.Release();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -1200,11 +1214,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
string[] configs_upMachine = new string[2] { "二楼下升降机机械臂左", "二楼下升降机机械臂右" };
|
string[] configs_upMachine = new string[2] { "二楼下升降机机械臂左", "二楼下升降机机械臂右" };
|
||||||
// 读取下升降机的左右料架区配置
|
// 读取下升降机的左右料架区配置
|
||||||
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = _repository.AsSugarClient().Queryable<WmsMechanicalArmH>().Where(r => r.stackingcount == r.maxnum && r.maxnum != 0 && !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList();
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = _repository.AsSugarClient().Queryable<WmsMechanicalArmH>().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList();
|
||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 判断是否 上升降机请求取满托
|
// 判断是否 上升降机请求取满托
|
||||||
@@ -1214,6 +1227,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托{wmsMechanicalArmH.stackingposition}");
|
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托{wmsMechanicalArmH.stackingposition}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
||||||
|
|
||||||
|
|
||||||
await _repository.AsSugarClient().Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
await _repository.AsSugarClient().Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
{
|
{
|
||||||
@@ -1257,6 +1272,14 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
WmsPointH endPoint = endPoints.First();
|
WmsPointH endPoint = endPoints.First();
|
||||||
points.Add(endPoint);
|
points.Add(endPoint);
|
||||||
|
|
||||||
|
|
||||||
|
// 解除绑定料箱到料架
|
||||||
|
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
||||||
|
carryBindFloor2UpDownMachineInput.carry_id = wmsMechanicalArmH.rackid;
|
||||||
|
carryBindFloor2UpDownMachineInput.carry_code = wmsMechanicalArmH.rackcode;
|
||||||
|
|
||||||
|
await _wmsCarryBindService.CarryUnbindFloor2UpDownMachine(carryBindFloor2UpDownMachineInput);
|
||||||
|
|
||||||
// 锁住终点库位
|
// 锁住终点库位
|
||||||
await db.Updateable<BasLocation>(r => new BasLocation
|
await db.Updateable<BasLocation>(r => new BasLocation
|
||||||
{
|
{
|
||||||
@@ -1290,11 +1313,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
private async void Floor2RackDelivery(object args)
|
private async void Floor2RackDelivery(object args)
|
||||||
{
|
{
|
||||||
var db = _repository.AsSugarClient().CopyNew();
|
var db = _repository.AsSugarClient().CopyNew();
|
||||||
await s_taskExecuteRackDelivery.WaitAsync();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 检查机械臂料架区信号(上升降机空托1送到)
|
// 检查机械臂料架区信号(上升降机空托1送到)
|
||||||
await 检查机械臂料架区信号_上升降机空托1送到();
|
//await 检查机械臂料架区信号_上升降机空托1送到();
|
||||||
|
|
||||||
// 检查机械臂料架区信号(下升降机满托1送到)
|
// 检查机械臂料架区信号(下升降机满托1送到)
|
||||||
await 检查机械臂料架区信号_下升降机满托1送到();
|
await 检查机械臂料架区信号_下升降机满托1送到();
|
||||||
@@ -1320,7 +1342,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
s_taskExecuteRackDelivery.Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1367,7 +1388,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
//更新页面
|
//更新页面
|
||||||
//赋值签收状态
|
//赋值签收状态
|
||||||
|
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"开始执行 GenPreTask {JsonConvert.SerializeObject(preTasks)}");
|
||||||
bool result = await _wareHouseService.GenPreTask(preTasks, null!);
|
bool result = await _wareHouseService.GenPreTask(preTasks, null!);
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"GenPreTask 结果 {result}");
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"成功生成预任务:{preTasks.First().bill_code}");
|
LoggerFloor2RackDelivery.LogInformation($"成功生成预任务:{preTasks.First().bill_code}");
|
||||||
@@ -1414,61 +1437,16 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
};
|
};
|
||||||
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
// TODO 测试
|
// TODO 测试
|
||||||
//string result = "Ok";
|
|
||||||
|
//JObject valueJson = new JObject();
|
||||||
|
//valueJson["Value"] = value;
|
||||||
|
|
||||||
|
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
||||||
|
//return true;
|
||||||
|
|
||||||
return result.Contains("Ok");
|
return result.Contains("Ok");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Agv调度
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disTasks"></param>
|
|
||||||
/// <param name="token"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private async Task Floor2UpDownMachinecode_AgvDispatch(List<WmsDistaskH> disTasks, CancellationToken token)
|
|
||||||
{
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation("【AgvDispatch】 Agv任务执行....");
|
|
||||||
//调用AGV创建任务链接口
|
|
||||||
try
|
|
||||||
{
|
|
||||||
AgvRequestConfig requestCfg = App.Configuration.Build<AgvRequestConfig>();
|
|
||||||
string url = requestCfg.AgvRequestUrls.CreateTaskChainUrl;
|
|
||||||
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($"【AgvDispatch】 Agv任务执行的disTasks:{JsonConvert.SerializeObject(disTasks)}");
|
|
||||||
|
|
||||||
var taskChainCodeDic = disTasks.Where(t => !t.groups.IsNullOrWhiteSpace()).GroupBy(g => g.groups!)
|
|
||||||
.ToDictionary(x => x.Key, x => x.Select(it => new
|
|
||||||
{
|
|
||||||
taskCode = it.bill_code,
|
|
||||||
sourceName = it.startpoint_code,
|
|
||||||
targetName = it.endpoint_code,
|
|
||||||
containerCode = it.carry_code,
|
|
||||||
}));
|
|
||||||
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($"【AgvDispatch】 Agv任务执行的taskChainCodeDic:{JsonConvert.SerializeObject(taskChainCodeDic)}");
|
|
||||||
|
|
||||||
foreach ((string k, object v) in taskChainCodeDic)
|
|
||||||
{
|
|
||||||
var dis = disTasks.Where(p => p.groups == k).First();
|
|
||||||
dynamic reqBody = new ExpandoObject();
|
|
||||||
reqBody.taskChainCode = k;
|
|
||||||
reqBody.type = (int)EnumTaskChainType.AGV;
|
|
||||||
reqBody.sequential = false;
|
|
||||||
reqBody.taskChainPriority = 0;
|
|
||||||
reqBody.taskList = v;
|
|
||||||
reqBody.floor = dis.end_floor;
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($"【AgvDispatch】 Agv任务执行 开始请求联核/task-chain/create接口 请求地址:{url} 请求参数:{JsonConvert.SerializeObject(reqBody)} ");
|
|
||||||
dynamic respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token);
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($"【AgvDispatch】 Agv任务执行 接收到联核/task-chain/create接口信息:{respBody}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($"【AgvDispatch】 agv任务执行 请求联核/task-chain/create接口失败 异常信息:{ex}");
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public Task StartAsync(CancellationToken cancellationToken)
|
public Task StartAsync(CancellationToken cancellationToken)
|
||||||
@@ -1478,12 +1456,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
//Scantimer = new Timer(ScanInStock, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
//Scantimer = new Timer(ScanInStock, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
||||||
//SSXcodetimer = new Timer(SSXcode, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
//SSXcodetimer = new Timer(SSXcode, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
|
|
||||||
// 二楼上升降机
|
//// 二楼上升降机
|
||||||
Floor2UpMachinecodetimer = new Timer(Floor2UpMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
//Floor2UpMachinecodetimer = new Timer(Floor2UpMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
// 二楼下升降机
|
//// 二楼下升降机
|
||||||
Floor2DownMachinecodetimer = new Timer(Floor2DownMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
////Floor2DownMachinecodetimer = new Timer(Floor2DownMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||||
// 二楼料架配送
|
//// 二楼料架配送
|
||||||
Floor2RackDeliverytimer = new Timer(Floor2RackDelivery, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
//Floor2RackDeliverytimer = new Timer(Floor2RackDelivery, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,5 +289,18 @@
|
|||||||
/// 盘点状态-盘点结账
|
/// 盘点状态-盘点结账
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string CHECKSTATUS_PDJZ_ID = "27584597303317";
|
public const string CHECKSTATUS_PDJZ_ID = "27584597303317";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 一楼成品出库工位
|
||||||
|
/// </summary>
|
||||||
|
public const string FinishproductOutstockStation1 = "30018211902485";
|
||||||
|
/// <summary>
|
||||||
|
/// 一楼成品出库工位
|
||||||
|
/// </summary>
|
||||||
|
public const string FinishproductOutstockStation2 = "30018225923349";
|
||||||
|
/// <summary>
|
||||||
|
/// 一楼成品出库工位
|
||||||
|
/// </summary>
|
||||||
|
public const string FinishproductOutstockStation3 = "30018217822229";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 库房业务更新输入参数
|
||||||
|
/// </summary>
|
||||||
|
public class FinishproductOutstockSortInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 载具id
|
||||||
|
/// </summary>
|
||||||
|
public string? carry_id { get; set; }
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// 物料id
|
||||||
|
///// </summary>
|
||||||
|
//public string? material_id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 数量
|
||||||
|
/// </summary>
|
||||||
|
public decimal qty { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 库房业务更新输入参数
|
||||||
|
/// </summary>
|
||||||
|
public class FinishproductOutstockSignInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 起点
|
||||||
|
/// </summary>
|
||||||
|
public string? location_id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 库房业务更新输入参数
|
||||||
|
/// </summary>
|
||||||
|
public class OutsourcedPartsInstockInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 载具ID
|
||||||
|
/// </summary>
|
||||||
|
public string? carry_id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 物料ID
|
||||||
|
/// </summary>
|
||||||
|
public string? material_id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 物料数量
|
||||||
|
/// </summary>
|
||||||
|
public decimal qty { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 起点
|
||||||
|
/// </summary>
|
||||||
|
public string? startlocation_id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -84,4 +84,9 @@ public partial class WmsMechanicalArmH : BaseEntity<string>
|
|||||||
/// 取放货确认
|
/// 取放货确认
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int? mechanicalconfirm { get; set; }
|
public int? mechanicalconfirm { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 备注
|
||||||
|
/// </summary>
|
||||||
|
public string? note { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -538,6 +538,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 申请进出电梯
|
/// 申请进出电梯
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using System.Net;
|
||||||
using System.Security.Policy;
|
using System.Security.Policy;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Aop.Api.Domain;
|
using Aop.Api.Domain;
|
||||||
|
using Aspose.Cells;
|
||||||
using JNPF;
|
using JNPF;
|
||||||
using JNPF.Common.Contracts;
|
using JNPF.Common.Contracts;
|
||||||
using JNPF.Common.Core.Manager;
|
using JNPF.Common.Core.Manager;
|
||||||
@@ -36,6 +38,7 @@ using Tnb.WarehouseMgr.Entities.Configs;
|
|||||||
using Tnb.WarehouseMgr.Entities.Consts;
|
using Tnb.WarehouseMgr.Entities.Consts;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto;
|
using Tnb.WarehouseMgr.Entities.Dto;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||||
|
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
|
||||||
using Tnb.WarehouseMgr.Entities.Dto.Queries;
|
using Tnb.WarehouseMgr.Entities.Dto.Queries;
|
||||||
using Tnb.WarehouseMgr.Entities.Entity;
|
using Tnb.WarehouseMgr.Entities.Entity;
|
||||||
using Tnb.WarehouseMgr.Entities.Enums;
|
using Tnb.WarehouseMgr.Entities.Enums;
|
||||||
@@ -476,16 +479,16 @@ namespace Tnb.WarehouseMgr
|
|||||||
else // 去暂存仓放货
|
else // 去暂存仓放货
|
||||||
{
|
{
|
||||||
// 回写料架料箱绑定表的库位
|
// 回写料架料箱绑定表的库位
|
||||||
ISugarQueryable<WmsCarrybindH> wmsCarryHs = db.Queryable<WmsCarrybindH>().Where(r => r.carry_code == disTask.carry_code);
|
ISugarQueryable<WmsCarryCode> WmsCarryCodes = db.Queryable<WmsCarryCode>()
|
||||||
var wmsCarryHList = wmsCarryHs.ToList();
|
.InnerJoin<WmsCarryD>((a, b) => b.membercarry_id == a.carry_id)
|
||||||
wmsCarryHList.ForEach(r =>
|
.Where((a, b) => b.carry_id == disTask.carry_id);
|
||||||
|
var WmsCarryCodeList = WmsCarryCodes.ToList();
|
||||||
|
WmsCarryCodeList.ForEach(r =>
|
||||||
{
|
{
|
||||||
r.location_id = disTask.endlocation_id;
|
r.location_id = disTask.endlocation_id;
|
||||||
r.location_code = disTask.endlocation_code;
|
r.location_code = disTask.endlocation_code;
|
||||||
r.source_id = disTask.id;
|
|
||||||
r.source_code = disTask.bill_code;
|
|
||||||
});
|
});
|
||||||
await db.Updateable(wmsCarryHList).ExecuteCommandAsync();
|
await db.Updateable(WmsCarryCodeList).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -506,6 +509,25 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
|
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
|
||||||
|
|
||||||
|
if (target.note == "上升降机")
|
||||||
|
{
|
||||||
|
bool result = await Floor2UpDownMachinecode_SetTag($"上升降机满托{target.stackingposition}移走", "true");
|
||||||
|
Logger.LogInformation($@"【上升降机】设定升上升降机满托{target.stackingposition}移走 结果为 {result}");
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
throw new Exception($@"【上升降机】设定升上升降机满托{target.stackingposition}移走 结果为 {result}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (target.note == "下升降机")
|
||||||
|
{
|
||||||
|
bool result = await Floor2UpDownMachinecode_SetTag($"下升降机空托{target.stackingposition}移走", "true");
|
||||||
|
Logger.LogInformation($@"【上升降机】设定升下升降机空托{target.stackingposition}移走 结果为 {result}");
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
throw new Exception($@"【上升降机】设定升下升降机空托{target.stackingposition}移走 结果为 {result}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//回写出库单状态
|
//回写出库单状态
|
||||||
await db.Updateable<WmsEmptyOutstockH>().SetColumns(r => new WmsEmptyOutstockH
|
await db.Updateable<WmsEmptyOutstockH>().SetColumns(r => new WmsEmptyOutstockH
|
||||||
{
|
{
|
||||||
@@ -532,6 +554,28 @@ namespace Tnb.WarehouseMgr
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<bool> Floor2UpDownMachinecode_SetTag(string tag, string value)
|
||||||
|
{
|
||||||
|
string DevName = "东面提升机输送线";
|
||||||
|
Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
|
||||||
|
{
|
||||||
|
["DevName"] = DevName,
|
||||||
|
["token"] = _eleCtlCfg.token,
|
||||||
|
["TagName"] = tag,
|
||||||
|
["Value"] = value,
|
||||||
|
};
|
||||||
|
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
|
// TODO 测试
|
||||||
|
|
||||||
|
//JObject valueJson = new JObject();
|
||||||
|
//valueJson["Value"] = value;
|
||||||
|
|
||||||
|
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
||||||
|
//return true;
|
||||||
|
|
||||||
|
return result.Contains("Ok");
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 生成任务执行
|
/// 生成任务执行
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1363,6 +1407,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
// 一楼中储仓
|
// 一楼中储仓
|
||||||
kiva.Add("ZSSSXCTU02");
|
kiva.Add("ZSSSXCTU02");
|
||||||
kiva.Add("ZSSSXCTU01");
|
kiva.Add("ZSSSXCTU01");
|
||||||
|
List<string> floor2 = new List<string>();
|
||||||
|
// 二楼暂存仓
|
||||||
|
floor2.Add("AS01");
|
||||||
|
floor2.Add("AS02");
|
||||||
|
floor2.Add("AX01");
|
||||||
|
floor2.Add("AX02");
|
||||||
//调用AGV创建任务链接口
|
//调用AGV创建任务链接口
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1378,6 +1428,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
sourceName = it.startpoint_code,
|
sourceName = it.startpoint_code,
|
||||||
targetName = it.endpoint_code,
|
targetName = it.endpoint_code,
|
||||||
containerCode = it.carry_code,
|
containerCode = it.carry_code,
|
||||||
|
shelfNumber = floor2.Contains(it.startlocation_code) || floor2.Contains(it.endlocation_code) ? it.carry_code : "" // 二楼暂存仓传料架
|
||||||
}));
|
}));
|
||||||
|
|
||||||
Logger.Information($"【AgvDispatch】 Agv任务执行的taskChainCodeDic:{JsonConvert.SerializeObject(taskChainCodeDic)}");
|
Logger.Information($"【AgvDispatch】 Agv任务执行的taskChainCodeDic:{JsonConvert.SerializeObject(taskChainCodeDic)}");
|
||||||
@@ -1386,7 +1437,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
var typeflag = false;
|
var typeflag = false;
|
||||||
var dis = disTasks.Where(p => p.groups == k).First();
|
var dis = disTasks.Where(p => p.groups == k).First();
|
||||||
if (kiva.Contains(dis.startlocation_code) || kiva.Contains(dis.endlocation_code))
|
if (kiva.Contains(dis.startlocation_code) || kiva.Contains(dis.endlocation_code) || floor2.Contains(dis.startlocation_code) || floor2.Contains(dis.endlocation_code))
|
||||||
{
|
{
|
||||||
typeflag = true;
|
typeflag = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -193,17 +193,15 @@ namespace Tnb.WarehouseMgr
|
|||||||
WmsCarryH? subCarry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.membercarry_id);
|
WmsCarryH? subCarry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.membercarry_id);
|
||||||
if (carry != null && subCarry != null)
|
if (carry != null && subCarry != null)
|
||||||
{
|
{
|
||||||
WmsCarrybindH wmsCarrybindH = new()
|
WmsCarryD wmsCarryD = new()
|
||||||
{
|
{
|
||||||
carry_id = input.carry_id,
|
carry_id = input.carry_id,
|
||||||
carry_code = input.carry_code,
|
|
||||||
membercarry_id = input.membercarry_id,
|
membercarry_id = input.membercarry_id,
|
||||||
membercarry_code = input.membercarry_code,
|
membercarry_code = input.membercarry_code,
|
||||||
loc = 1,
|
loc = 1,
|
||||||
type = 0,
|
|
||||||
create_time = DateTime.Now
|
create_time = DateTime.Now
|
||||||
};
|
};
|
||||||
int row = await _db.Insertable(wmsCarrybindH).ExecuteCommandAsync();
|
int row = await _db.Insertable(wmsCarryD).ExecuteCommandAsync();
|
||||||
isOk = row > 0;
|
isOk = row > 0;
|
||||||
if (!isOk)
|
if (!isOk)
|
||||||
{
|
{
|
||||||
@@ -243,10 +241,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
WmsCarryH? carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
|
WmsCarryH? carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
|
||||||
WmsCarryH? subCarry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.membercarry_id);
|
if (carry != null)
|
||||||
if (carry != null && subCarry != null)
|
|
||||||
{
|
{
|
||||||
int row = await _db.Deleteable<WmsCarrybindH>().Where(r => r.carry_id == input.carry_id && r.membercarry_id == input.membercarry_id).ExecuteCommandAsync();
|
int row = await _db.Deleteable<WmsCarryD>().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
|
||||||
isOk = row > 0;
|
isOk = row > 0;
|
||||||
|
|
||||||
if (!isOk)
|
if (!isOk)
|
||||||
@@ -256,7 +253,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (carry == null || subCarry == null)
|
if (carry == null)
|
||||||
{
|
{
|
||||||
throw new AppFriendlyException("没有可用的主载具", 500);
|
throw new AppFriendlyException("没有可用的主载具", 500);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,9 +8,15 @@ using JNPF.Systems.Interfaces.System;
|
|||||||
using JNPF.VisualDev;
|
using JNPF.VisualDev;
|
||||||
using JNPF.VisualDev.Entitys;
|
using JNPF.VisualDev.Entitys;
|
||||||
using JNPF.VisualDev.Interfaces;
|
using JNPF.VisualDev.Interfaces;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
|
using Tnb.BasicData.Entities;
|
||||||
using Tnb.WarehouseMgr.Entities;
|
using Tnb.WarehouseMgr.Entities;
|
||||||
|
using Tnb.WarehouseMgr.Entities.Consts;
|
||||||
|
using Tnb.WarehouseMgr.Entities.Dto;
|
||||||
using Tnb.WarehouseMgr.Entities.Enums;
|
using Tnb.WarehouseMgr.Entities.Enums;
|
||||||
|
using Tnb.WarehouseMgr.Interfaces;
|
||||||
|
|
||||||
namespace Tnb.WarehouseMgr
|
namespace Tnb.WarehouseMgr
|
||||||
{
|
{
|
||||||
@@ -25,11 +31,13 @@ namespace Tnb.WarehouseMgr
|
|||||||
private readonly IVisualDevService _visualDevService;
|
private readonly IVisualDevService _visualDevService;
|
||||||
private readonly IUserManager _userManager;
|
private readonly IUserManager _userManager;
|
||||||
private readonly IBillRullService _billRullService;
|
private readonly IBillRullService _billRullService;
|
||||||
|
private readonly IWareHouseService _wareHouseService;
|
||||||
public WmsPDACarryBindService(
|
public WmsPDACarryBindService(
|
||||||
ISqlSugarRepository<WmsCarryH> repository,
|
ISqlSugarRepository<WmsCarryH> repository,
|
||||||
IRunService runService,
|
IRunService runService,
|
||||||
IVisualDevService visualDevService,
|
IVisualDevService visualDevService,
|
||||||
IUserManager userManager,
|
IUserManager userManager,
|
||||||
|
IWareHouseService wareHouseService,
|
||||||
IBillRullService billRullService)
|
IBillRullService billRullService)
|
||||||
{
|
{
|
||||||
_db = repository.AsSugarClient();
|
_db = repository.AsSugarClient();
|
||||||
@@ -37,6 +45,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
_visualDevService = visualDevService;
|
_visualDevService = visualDevService;
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
_billRullService = billRullService;
|
_billRullService = billRullService;
|
||||||
|
_wareHouseService = wareHouseService;
|
||||||
OverideFuncs.CreateAsync = PDACarryBind;
|
OverideFuncs.CreateAsync = PDACarryBind;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,5 +139,257 @@ namespace Tnb.WarehouseMgr
|
|||||||
var isOk = await _db.Updateable<WmsCarryReplaceH>().SetColumns(it => new WmsCarryReplaceH { status = input.bizTypeId }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
var isOk = await _db.Updateable<WmsCarryReplaceH>().SetColumns(it => new WmsCarryReplaceH { status = input.bizTypeId }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
||||||
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
|
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 1楼到3楼 外协入库
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="AppFriendlyException"></exception>
|
||||||
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> OutsourcedPartsInstock(OutsourcedPartsInstockInput input)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(input.carry_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("载具id不可为空", 500);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(input.material_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("物料不可为空", 500);
|
||||||
|
}
|
||||||
|
if (input.qty <= 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("数量必须大于0", 500);
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(input.startlocation_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("起点不可为空", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
await s_taskExecuteSemaphore.WaitAsync();
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
//入库取终点 //出库起点
|
||||||
|
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = 1 };
|
||||||
|
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
||||||
|
WmsPointH sPoint = null!;
|
||||||
|
WmsPointH ePoint = null!;
|
||||||
|
|
||||||
|
sPoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == input.startlocation_id);
|
||||||
|
if (endLocations?.Count > 0)
|
||||||
|
{
|
||||||
|
WmsCarryH carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == input.carry_id);
|
||||||
|
BasLocation loc = await _db.Queryable<BasLocation>().SingleAsync(it => it.id == endLocations[0].id);
|
||||||
|
bool isMatch = await IsCarryAndLocationMatchByCarryStd(carry, loc);
|
||||||
|
if (!isMatch)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("库位与载具规格不匹配", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
ePoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == endLocations[0].id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException($"库位{endLocations[0].location_code}未在点位表中维护对应点位", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string endLocationId = endLocations[0].id;
|
||||||
|
|
||||||
|
// 在线开发
|
||||||
|
//VisualDevEntity? templateEntity = await _visualDevService?.GetInfoById(ModuleConsts.MODULE_WMSDELIVERYPDA_ID, true)!;
|
||||||
|
//await _runService.Create(templateEntity, input);
|
||||||
|
|
||||||
|
// 计算路径,插入预任务申请
|
||||||
|
|
||||||
|
if (sPoint != null && ePoint != null)
|
||||||
|
{
|
||||||
|
List<WmsPointH> points = new List<WmsPointH>();
|
||||||
|
if (sPoint.area_code != ePoint.area_code)
|
||||||
|
{
|
||||||
|
points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id);
|
||||||
|
if (points.Count <= 2)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("该路径不存在", 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
points.Add(sPoint);
|
||||||
|
points.Add(ePoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().FirstAsync(it => it.id == input.carry_id);
|
||||||
|
//根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
|
||||||
|
if (points?.Count > 0)
|
||||||
|
{
|
||||||
|
List<WmsPretaskH> preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
|
||||||
|
{
|
||||||
|
WmsPointH? sPoint = it.FirstOrDefault();
|
||||||
|
WmsPointH? ePoint = it.LastOrDefault();
|
||||||
|
|
||||||
|
WmsPretaskH preTask = new()
|
||||||
|
{
|
||||||
|
org_id = _userManager!.User.OrganizeId,
|
||||||
|
startlocation_id = sPoint?.location_id!,
|
||||||
|
startlocation_code = sPoint?.location_code!,
|
||||||
|
endlocation_id = ePoint?.location_id!,
|
||||||
|
endlocation_code = ePoint?.location_code!,
|
||||||
|
start_floor = sPoint?.floor.ToString(),
|
||||||
|
end_floor = ePoint?.floor.ToString(),
|
||||||
|
startpoint_id = sPoint?.id!,
|
||||||
|
startpoint_code = sPoint?.point_code!,
|
||||||
|
endpoint_id = ePoint?.id!,
|
||||||
|
endpoint_code = ePoint?.point_code!,
|
||||||
|
bill_code = _billRullService!.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(),
|
||||||
|
status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID,
|
||||||
|
biz_type = WmsWareHouseConst.BIZTYPE_WMSDELIVERY_ID,
|
||||||
|
task_type = WmsWareHouseConst.WMS_PRETASK_TRANSFER_TYPE_ID
|
||||||
|
};
|
||||||
|
preTask.carry_id = input.carry_id;
|
||||||
|
preTask.carry_code = wmsCarryH.carry_code;
|
||||||
|
preTask.area_id = sPoint?.area_id!;
|
||||||
|
preTask.area_code = it.Key;
|
||||||
|
preTask.require_id = "";
|
||||||
|
preTask.require_code = "";
|
||||||
|
preTask.create_id = _userManager.UserId;
|
||||||
|
preTask.create_time = DateTime.Now;
|
||||||
|
return preTask;
|
||||||
|
}).ToList();
|
||||||
|
bool isOk = await _wareHouseService.GenPreTask(preTasks, null!);
|
||||||
|
if (isOk)
|
||||||
|
{
|
||||||
|
if (endLocationId != null)
|
||||||
|
{
|
||||||
|
//查询库位表
|
||||||
|
BasLocation location = await _db.Queryable<BasLocation>().SingleAsync(it => it.id == input.startlocation_id);
|
||||||
|
{
|
||||||
|
//载具加锁,增加库位信息
|
||||||
|
_ = await _db.Updateable<WmsCarryH>().SetColumns(it => new WmsCarryH
|
||||||
|
{
|
||||||
|
carry_status = ((int)EnumCarryStatus.占用).ToString(),
|
||||||
|
is_lock = 1,
|
||||||
|
location_id = input.startlocation_id,
|
||||||
|
location_code = location.location_code
|
||||||
|
}).Where(it => it.id == input.carry_id).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
//所有库位加锁
|
||||||
|
string?[] ids = new[] { input.startlocation_id, endLocationId };
|
||||||
|
_ = await _db.Updateable<BasLocation>().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
BasMaterial basMaterial = await _db.Queryable<BasMaterial>().FirstAsync(it => it.id == input.material_id);
|
||||||
|
WmsCarryCode wmsCarryCode = new WmsCarryCode();
|
||||||
|
wmsCarryCode.carry_id = input.carry_id;
|
||||||
|
wmsCarryCode.barcode = wmsCarryH.carry_code;
|
||||||
|
wmsCarryCode.codeqty = input.qty;
|
||||||
|
wmsCarryCode.material_id = input.material_id;
|
||||||
|
wmsCarryCode.material_code = basMaterial.code;
|
||||||
|
wmsCarryCode.material_name = basMaterial.name;
|
||||||
|
wmsCarryCode.location_id = endLocations[0].id;
|
||||||
|
wmsCarryCode.location_code = endLocations[0].location_code;
|
||||||
|
_ = await _db.Insertable<WmsCarryCode>(wmsCarryCode).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_ = s_taskExecuteSemaphore.Release();
|
||||||
|
await InvokeGenPretaskExcute();
|
||||||
|
}
|
||||||
|
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 3楼到1楼出库 盘点签收 解锁一楼库位
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> FinishproductOutstockSign(FinishproductOutstockSignInput input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(input.location_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("起点id不可为空", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input.location_id != WmsWareHouseConst.FinishproductOutstockStation1 && input.location_id != WmsWareHouseConst.FinishproductOutstockStation2
|
||||||
|
&& input.location_id != WmsWareHouseConst.FinishproductOutstockStation3)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("非一楼出库库位不允许通过此功能解锁", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
|
{
|
||||||
|
is_lock = 0,
|
||||||
|
is_use = "0"
|
||||||
|
}).Where(r => r.id == input.location_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
await _db.Updateable<WmsPointH>().SetColumns(r => new WmsPointH
|
||||||
|
{
|
||||||
|
is_lock = 0
|
||||||
|
}).Where(r => r.location_id == input.location_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 3楼到1楼出库 盘点签收 解锁一楼库位
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost, NonUnify, AllowAnonymous]
|
||||||
|
public async Task<Tnb.WarehouseMgr.Entities.Dto.Outputs.Result> FinishproductOutstockSort(FinishproductOutstockSortInput input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(input.carry_id))
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("载具id不可为空", 500);
|
||||||
|
}
|
||||||
|
if (input.qty <= 0)
|
||||||
|
{
|
||||||
|
throw new AppFriendlyException("数量必须大于0", 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
await _db.Ado.BeginTranAsync();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _db.Updateable<WmsCarryCode>().SetColumns(r => new WmsCarryCode
|
||||||
|
{
|
||||||
|
codeqty = input.qty,
|
||||||
|
}).Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
await _db.Ado.CommitTranAsync();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await _db.Ado.RollbackTranAsync();
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user