1、新增出入库策略函数

2、调整更新空载具函数,删除多余参数
This commit is contained in:
alex
2023-07-31 14:44:21 +08:00
15 changed files with 215 additions and 99 deletions

View File

@@ -577,46 +577,54 @@ namespace Tnb.WarehouseMgr
{
var roads = await _db.Queryable<WmsRoad>().ToListAsync();
var points = await LocPathCalcAlgorithms(pStartId, pEndId, roads);
if (points.FindAll(x => x.location_code != null && x.location_code.Contains("ELE"))?.Count > 0)
try
{
//查询当前电梯点
var curEleDs = await _db.Queryable<WmsElevatorD>().Where(it => points.Select(x => x.id).Contains(it.point_id)).ToListAsync();
//如果有电梯点,则会进行电梯的均匀分配
if (curEleDs?.Count > 0)
if (points.FindAll(x => x.location_code != null && x.location_code.Contains("ELE"))?.Count > 0)
{
//当前电梯
var curEle = await _db.Queryable<WmsElevatorH>().SingleAsync(it => it.id == curEleDs.First().bill_id && it.status == 1) ?? throw new AppFriendlyException("电梯被禁用", 500);
//同电梯组电梯
var sGpEle = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == curEle.elevator_group && it.id != curEle.id && it.status == 1).ToListAsync();
//判断电梯组中各电梯任务数
if (sGpEle.FindAll(x => Math.Abs(x.task_nums - curEle.task_nums) % 2 == 1)?.Count > 0)
//查询当前电梯
var curEleDs = await _db.Queryable<WmsElevatorD>().Where(it => points.Select(x => x.id).Contains(it.point_id)).ToListAsync();
//如果有电梯点,则会进行电梯的均匀分配
if (curEleDs?.Count > 0)
{
var sGpDs = await _db.Queryable<WmsElevatorD>().Where(it => it.bill_id == sGpEle.First().id).ToListAsync();
if (sGpDs?.Count > 0)
//当前电梯
var curEle = await _db.Queryable<WmsElevatorH>().SingleAsync(it => it.id == curEleDs.First().bill_id && it.status == 1);
if (curEle == null) throw new AppFriendlyException("电梯被禁用或未配置", 500);
//同电梯组电梯
var sGpEle = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == curEle.elevator_group && it.id != curEle.id && it.status == 1).ToListAsync();
//判断电梯组中各电梯任务数
if (sGpEle.FindAll(x => Math.Abs(x.task_nums - curEle.task_nums) % 2 == 1)?.Count > 0)
{
var sGpPoints = await _db.Queryable<WmsPointH>().Where(it => sGpDs.Select(x => x.point_id).Contains(it.id)).ToListAsync();
var sFEndId = sGpDs.Single(x => x.floor == curEleDs.First().floor).point_id;
var eFStartId = sGpDs.Single(x => x.floor == curEleDs.Last().floor).point_id;
var sFPoints = await LocPathCalcAlgorithms(pStartId, sFEndId, roads);
List<WmsPointH> elePoints = new();
foreach (var pt in curEleDs)
var sGpDs = await _db.Queryable<WmsElevatorD>().Where(it => it.bill_id == sGpEle.First().id).ToListAsync();
if (sGpDs?.Count > 0)
{
var elePoint = sGpPoints.Find(x => x.floor == pt.floor);
if (elePoint != null)
elePoints.Add(elePoint);
var sGpPoints = await _db.Queryable<WmsPointH>().Where(it => sGpDs.Select(x => x.point_id).Contains(it.id)).ToListAsync();
var sFEndId = sGpDs.Single(x => x.floor == curEleDs.First().floor).point_id;
var eFStartId = sGpDs.Single(x => x.floor == curEleDs.Last().floor).point_id;
var sFPoints = await LocPathCalcAlgorithms(pStartId, sFEndId, roads);
List<WmsPointH> elePoints = new();
foreach (var pt in curEleDs)
{
var elePoint = sGpPoints.Find(x => x.floor == pt.floor);
if (elePoint != null)
elePoints.Add(elePoint);
}
var eFPoints = await LocPathCalcAlgorithms(eFStartId, pEndId, roads);
elePoints.Remove(elePoints.First());
elePoints.Remove(elePoints.Last());
points.Clear();
points.AddRange(sFPoints);
points.AddRange(elePoints);
points.AddRange(eFPoints);
}
var eFPoints = await LocPathCalcAlgorithms(eFStartId, pEndId, roads);
elePoints.Remove(elePoints.First());
elePoints.Remove(elePoints.Last());
points.Clear();
points.AddRange(sFPoints);
points.AddRange(elePoints);
points.AddRange(eFPoints);
}
}
}
}
catch (Exception)
{
throw;
}
return points;
}

View File

@@ -69,8 +69,8 @@ namespace Tnb.WarehouseMgr
var data = new CarryQueryOutput();
try
{
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.carry_code == input.carry_code);
if (carry.IsNull()) throw new AppFriendlyException($"编号{input.carry_code},对应载具不存在", 500);
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.carry_code == input.carry_code && it.status == 1);
if (carry.IsNull()) throw new AppFriendlyException($"编号{input.carry_code},对应载具不存在或被禁用", 500);
List<WmsCarryCode> carryCodes = new();
var carryDsLst = await _db.Queryable<WmsCarryD>().Where(it => it.carry_id == carry.id).ToListAsync();
if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID && carryDsLst?.Count > 0)

View File

@@ -110,8 +110,8 @@ namespace Tnb.WarehouseMgr
if (carryCodesPart?.Count > 0)
{
carryCodes.AddRange(carryCodesPart);
var codeQty = carryCodes.Sum(x => x.codeqty);
var codeQty = carryCodesPart.Sum(x => x.codeqty);
if (codeQty < os.pr_qty)
{
throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500);
@@ -132,6 +132,7 @@ namespace Tnb.WarehouseMgr
break;
}
}
carryCodes.AddRange(curCarryCodes);
var partCarryMats = curCarryCodes.Adapt<List<WmsCarryMat>>();
for (int i = 0; i < partCarryMats.Count; i++)
{
@@ -655,6 +656,7 @@ namespace Tnb.WarehouseMgr
osd.qty += dic[osd.id].Sum(d => d);
if (osd.qty >= osd.pr_qty)
{
osd.qty = osd.pr_qty;
osd.line_status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID;
}
else
@@ -704,9 +706,8 @@ namespace Tnb.WarehouseMgr
await _db.Updateable(carryCode).UpdateColumns(it => it.codeqty).ExecuteCommandAsync();
}
}
await _db.Updateable<WmsCarryH>().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.).ToString() }).Where(it => input.carryIds.Contains(it.id)).ExecuteCommandAsync();
var row = await _db.Updateable<WmsCarryH>().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.).ToString() }).Where(it => input.carryIds.Contains(it.id)).ExecuteCommandAsync();
await _db.Deleteable<WmsCarryMat>().Where(it => input.carryIds.Contains(it.carry_id)).ExecuteCommandAsync();
}
if (delBarcodes.Count > 0)
{

View File

@@ -104,7 +104,7 @@ namespace Tnb.WarehouseMgr
loginType = "web",
bizTypeId = disTask.biz_type,
requireId = disTask!.require_id!,
carryIds = new List<string> { input.carryId },
carryIds = new List<string> { carry!.id },
distaskCodes = input.distaskCodes
};
await DoUpdate(upInput); //回更业务
@@ -132,6 +132,7 @@ namespace Tnb.WarehouseMgr
var isSuccessFul = false;
if (input.IsNull()) throw new ArgumentNullException("input");
var signInput = input.Adapt<SignForDeliveryInput>();
if (signInput.carryId.IsNotEmptyOrNull()) signInput.carryId = "";
try
{
await SignForDelivery(signInput);

View File

@@ -20,6 +20,7 @@ using JNPF.Systems.Interfaces.System;
using Mapster;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
@@ -341,8 +342,6 @@ namespace Tnb.WarehouseMgr
if (input.IsNull()) throw new ArgumentNullException(nameof(input));
try
{
await _db.Ado.BeginTranAsync();
List<WmsKittingoutD> kittingOutDs = new();
var kittingOuts = input.Adapt<List<WmsKittingoutH>>();
@@ -372,6 +371,7 @@ namespace Tnb.WarehouseMgr
kittingOutDs.AddRange(d);
}
}
await _db.Insertable(kittingOuts).ExecuteCommandAsync();
await _db.Insertable(kittingOutDs).ExecuteCommandAsync();