diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index 53b76564..2528b66c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -10,6 +10,8 @@ namespace Tnb.WarehouseMgr.Entities.Consts
{
public class WmsWareHouseConst
{
+ public const string WAREHOUSE_ZC_ID = "2";
+
///
/// 出入库单据状态TypeID
///
@@ -93,7 +95,7 @@ namespace Tnb.WarehouseMgr.Entities.Consts
///
/// 单据状态-已呼叫
///
- public const string BILLSTATUS_CALLED_ID = "25065138925589";
+ public const string BILLSTATUS_CALLED_ID = "26169430480933";
///
/// 单据状态-待配送
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs
index e88b2244..bc66a4e0 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsKittingoutD.cs
@@ -24,10 +24,6 @@ public partial class WmsKittingoutD : BaseEntity
///
public string bill_id { get; set; } = string.Empty;
- ///
- /// 行号
- ///
- public int bill_line { get; set; }
///
/// 物品ID
@@ -67,7 +63,7 @@ public partial class WmsKittingoutD : BaseEntity
///
/// 实际数量(件数)
///
- public decimal real_qty { get; set; }
+ public decimal qty { get; set; }
///
/// 实际箱数
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs
index 03a02914..dc728335 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsSetsortingD.cs
@@ -24,11 +24,6 @@ public partial class WmsSetsortingD : BaseEntity
///
public string bill_id { get; set; } = string.Empty;
- ///
- /// 行号
- ///
- public int bill_line { get; set; }
-
///
/// 物品ID
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs
index 3a9df542..eecf8edf 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs
@@ -55,96 +55,124 @@ namespace Tnb.WarehouseMgr
.ToListAsync();
var items = await _db.Queryable().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_ON_ID).ToListAsync();
var onFlag = items?.Count > 0;
- if (setSortings?.Count > 0 && !onFlag)
+ try
{
- var singleSorting = setSortings[^setSortings.Count];
- var setSortingDList = await _db.Queryable().Where(it => it.bill_id == singleSorting.id).ToListAsync();
- if (setSortingDList?.Count > 0)
+ await _db.Ado.BeginTranAsync();
+
+ if (setSortings?.Count > 0 && !onFlag)
{
- List carryMats = new();
- List carryCodes = new();
- List carryIds = new();
- foreach (var os in setSortingDList)
+ var singleSorting = setSortings[^setSortings.Count];
+ var setSortingDList = await _db.Queryable().Where(it => it.bill_id == singleSorting.id).ToListAsync();
+ if (setSortingDList?.Count > 0)
{
- var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id)
- .Where((a, b) => b.material_id == os.material_id && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用)
- .WhereIF(!string.IsNullOrEmpty(os.code_batch), (a, b) => b.code_batch == os.code_batch)
- .Select()
- .ToListAsync();
- if (carryCodesPart?.Count > 0)
+ List carryMats = new();
+ List carryCodes = new();
+ List carryIds = new();
+ foreach (var os in setSortingDList)
{
- carryCodes.AddRange(carryCodesPart);
- var codeQty = carryCodes.Sum(x => x.codeqty);
- if (codeQty < os.pr_qty)
+ var carryCodesPart = await _db.Queryable().InnerJoin((a, b) => a.id == b.carry_id).InnerJoin((a, b, c) => a.location_id == c.id)
+ .Where((a, b, c) => b.material_id == os.material_id && a.is_lock == 0 && !string.IsNullOrEmpty(a.location_id) && a.status == (int)EnumCarryStatus.占用 && c.wh_id == os.warehouse_id)
+ .WhereIF(!string.IsNullOrEmpty(os.code_batch), (a, b) => b.code_batch == os.code_batch)
+ .Select()
+ .ToListAsync();
+ if (carryCodesPart?.Count > 0)
{
- throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500);
+ carryCodes.AddRange(carryCodesPart);
+ var codeQty = carryCodes.Sum(x => x.codeqty);
+ if (codeQty < os.pr_qty)
+ {
+ throw new AppFriendlyException($"需要出库[{os.pr_qty}],实际库存{codeQty},数量不足", 500);
+ }
+ List curCarryCodes = new();
+ for (int i = 0; i < carryCodesPart.Count; i++)
+ {
+ if (os.pr_qty > carryCodesPart[i].codeqty)
+ {
+ os.pr_qty -= carryCodesPart[i].codeqty;
+ curCarryCodes.Add(carryCodesPart[i]);
+ }
+ else if (os.pr_qty <= carryCodesPart[i].codeqty)
+ {
+ carryCodesPart[i].codeqty = os.pr_qty;
+ curCarryCodes.Add(carryCodesPart[i]);
+ break;
+ }
+ }
+ var partCarryMats = curCarryCodes.Adapt>();
+ for (int i = 0; i < partCarryMats.Count; i++)
+ {
+ partCarryMats[i].need_qty = carryCodesPart[i].codeqty;
+ }
+
+ carryMats.AddRange(partCarryMats);
}
- var partCarryMats = carryCodesPart.Adapt>();
- for (int i = 0; i < partCarryMats.Count; i++)
+ }
+ if (carryMats.Count > 0)
+ {
+ carryMats.ForEach(x => x.id = SnowflakeIdHelper.NextId());
+ carryMats = carryMats.OrderBy(o => o.create_time).GroupBy(g => new { g.carry_id, g.material_id, g.code_batch })
+ .Select(x =>
+ {
+ WmsCarryMat? carryMat = x.FirstOrDefault()!;
+ carryMat.need_qty = x.Sum(d => d.need_qty);
+ return carryMat;
+ })
+ .ToList();
+ await _db.Insertable(carryMats).ExecuteCommandAsync();
+ var dic = carryMats.DistinctBy(x => x.carry_id).ToDictionary(x => x.carry_id, x => x.need_qty);
+
+ carryIds = carryMats.Select(x => x.carry_id).Distinct().ToList();
+ await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.全部出).ToString(), collocation_scheme_id = singleSorting.collocation_scheme_id, collocation_scheme_code = singleSorting.collocation_scheme_code }).Where(it => carryIds.Contains(it.id)).ExecuteCommandAsync();
+ //天益项目不需要
+ //await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.分拣出).ToString() }).Where(it => sortingOutIds.Contains(it.id)).ExecuteCommandAsync();
+ }
+ var carrys = await _db.Queryable().Where(it => carryIds.Contains(it.id)).ToArrayAsync();
+ if (carrys?.Length > 0)
+ {
+ List preTasks = new();
+ List locIds = new();
+ string firstLocationId = "27010980724501", secondLocationId = "27010987857941";
+ if (carrys.Length > 6)
{
- partCarryMats[i].need_qty = carryCodesPart[i].codeqty;
+ var leftCarrys = carrys[..6];
+ var rightCarrys = carrys[6..];
+ await _genPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
+ await _genPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
}
-
- carryMats.AddRange(partCarryMats);
- }
- }
- if (carryMats.Count > 0)
- {
- carryMats.ForEach(x => x.id = SnowflakeIdHelper.NextId());
- carryMats = carryMats.OrderBy(o => o.create_time).GroupBy(g => new { g.carry_id, g.material_id, g.code_batch })
- .Select(x =>
- {
- WmsCarryMat? carryMat = x.FirstOrDefault()!;
- carryMat.need_qty = x.Sum(d => d.need_qty);
- return carryMat;
- })
- .ToList();
- await _db.Insertable(carryMats).ExecuteCommandAsync();
- var dic = carryMats.DistinctBy(x => x.carry_id).ToDictionary(x => x.carry_id, x => x.need_qty);
-
- carryIds = carryMats.Select(x => x.carry_id).Distinct().ToList();
- await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.全部出).ToString() }).Where(it => carryIds.Contains(it.id)).ExecuteCommandAsync();
- //天益项目不需要
- //await _db.Updateable().SetColumns(it => new WmsCarryH { out_status = ((int)EnumOutStatus.分拣出).ToString() }).Where(it => sortingOutIds.Contains(it.id)).ExecuteCommandAsync();
- }
- var carrys = await _db.Queryable().Where(it => carryIds.Contains(it.id)).ToArrayAsync();
- if (carrys?.Length > 0)
- {
- List preTasks = new();
- List locIds = new();
- string firstLocationId = "27010980724501", secondLocationId = "27010987857941";
- if (carrys.Length > 6)
- {
- var leftCarrys = carrys[..6];
- var rightCarrys = carrys[6..];
- await _genPreTask(leftCarrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
- await _genPreTask(rightCarrys, locIds, secondLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
- }
- else
- {
- await _genPreTask(carrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
- }
- List pretaskCodes = new();
- foreach (var pt in preTasks)
- {
- var partCodes = carryCodes.FindAll(x => x.carry_id == pt.carry_id).Distinct().ToList();
- var curPreTaskCodes = partCodes.Adapt>();
- curPreTaskCodes.ForEach(x =>
+ else
{
- x.id = SnowflakeIdHelper.NextId();
- x.bill_id = pt.id;
- x.create_time = DateTime.Now;
- });
- pretaskCodes.AddRange(curPreTaskCodes);
+ await _genPreTask(carrys, locIds, firstLocationId, singleSorting.id, singleSorting.bill_code, preTasks);
+ }
+ List pretaskCodes = new();
+ foreach (var pt in preTasks)
+ {
+ var partCodes = carryCodes.FindAll(x => x.carry_id == pt.carry_id).Distinct().ToList();
+ var curPreTaskCodes = partCodes.Adapt>();
+ curPreTaskCodes.ForEach(x =>
+ {
+ x.id = SnowflakeIdHelper.NextId();
+ x.bill_id = pt.id;
+ x.create_time = DateTime.Now;
+ });
+ pretaskCodes.AddRange(curPreTaskCodes);
+ }
+ await _wareHouseService.GenPreTask(preTasks, pretaskCodes);
+ await _db.Updateable().SetColumns(it => new WmsSetsortingH { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).ExecuteCommandAsync();
+ GenPreTaskUpInput genPreTaskAfterUpInput = new();
+ genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList();
+ genPreTaskAfterUpInput.LocationIds = new HashSet(locIds).ToList();
+ await _wareHouseService.GenInStockTaskHandleAfter(genPreTaskAfterUpInput, it => new WmsCarryH { is_lock = 1, carry_status = ((int)EnumCarryStatus.齐套分拣).ToString() }, it => new BasLocation { is_use = (int)EnumCarryStatus.齐套分拣, is_lock = 1 });
}
- var isOk = await _wareHouseService.GenPreTask(preTasks, pretaskCodes);
- GenPreTaskUpInput genPreTaskAfterUpInput = new();
- genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList();
- genPreTaskAfterUpInput.LocationIds = new HashSet(locIds).ToList();
- await _wareHouseService.GenInStockTaskHandleAfter(genPreTaskAfterUpInput, it => new WmsCarryH { is_lock = 1, carry_status = ((int)EnumCarryStatus.齐套分拣).ToString() }, it => new BasLocation { is_use = (int)EnumCarryStatus.齐套分拣 });
- }
+ }
}
+
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception ex)
+ {
+ await _db.Ado.RollbackTranAsync();
+ throw;
}
}
@@ -179,7 +207,7 @@ namespace Tnb.WarehouseMgr
preTask.end_floor = ePoint?.floor.ToString();
preTask.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult();
preTask.status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID;
- preTask.biz_type = WmsWareHouseConst.BIZTYPE_WMSOUTSTOCK_ID;
+ preTask.biz_type = WmsWareHouseConst.BIZTYPE_WMSSETSORTING_ID;
preTask.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
preTask.carry_id = carry.id;
preTask.carry_code = carry.carry_code;
@@ -211,8 +239,21 @@ namespace Tnb.WarehouseMgr
{
await _db.Ado.BeginTranAsync();
- await _db.Updateable().SetColumns(it => new WmsCarryH { carry_status = ((int)EnumCarryStatus.齐套).ToString(), location_id = null, location_code = null }).ExecuteCommandAsync();
- await _db.Updateable().SetColumns(it => new BasLocation { is_use = (int)EnumCarryStatus.空闲 }).ExecuteCommandAsync();
+ var carryId = input.carryIds[^input.carryIds.Count];
+ var carry = await _db.Queryable().SingleAsync(it => it.id == carryId);
+ if (carry != null)
+ {
+ if (carry.location_id.IsNotEmptyOrNull())
+ {
+ await _db.Updateable().SetColumns(it => new BasLocation { is_use = (int)EnumCarryStatus.空闲 }).Where(it => it.id == carry.location_id).ExecuteCommandAsync();
+ }
+ carry.out_status = ((int)EnumOutStatus.正常).ToString();
+ carry.carry_status = ((int)EnumCarryStatus.齐套).ToString();
+ carry.location_id = null;
+ carry.location_code = null;
+ await _db.Updateable(carry).UpdateColumns(it => new { it.out_status,it.carry_status, it.location_id, it.location_code }).ExecuteCommandAsync();
+ await _db.Deleteable().Where(it => it.carry_id == carryId).ExecuteCommandAsync();
+ }
await _db.Ado.CommitTranAsync();
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs
index fb6afb1e..2cadd38c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs
@@ -83,6 +83,7 @@ namespace Tnb.WarehouseMgr
if (!isCalled)
{
var setSortingH = ko.Adapt();
+ setSortingH.warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID;
setSortingH.id = SnowflakeIdHelper.NextId();
setSortingH.kittingout_id = ko.id;
setSortingH.seq = ko.seq;
@@ -91,11 +92,13 @@ namespace Tnb.WarehouseMgr
setSortingH.create_time = DateTime.Now;
await _db.Insertable(setSortingH).ExecuteCommandAsync();
- var kittingOutDetails = await _db.Queryable().Where(it => it.bill_id == setSortingH.id).ToListAsync();
+ var kittingOutDetails = await _db.Queryable().Where(it => it.bill_id == ko.id).ToListAsync();
var setSortDetails = kittingOutDetails.Adapt>();
setSortDetails.ForEach(x =>
{
x.id = SnowflakeIdHelper.NextId();
+ x.bill_id = setSortingH.id;
+ x.warehouse_id = setSortingH.warehouse_id;
x.org_id = _userManager.User.OrganizeId;
x.create_id = _userManager.UserId;
x.create_time = DateTime.Now;