diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index 83daa894..53b76564 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -23,6 +23,10 @@ namespace Tnb.WarehouseMgr.Entities.Consts
///
public const string WMS_PRETASK_H_ENCODE = "PreTaskGen";
///
+ /// 载具移入生成Encode
+ ///
+ public const string WMS_CARRYMOINSTK_ENCODE = "CarryMoInStk";
+ ///
/// 任务执行ENCODE
///
public const string WMS_TASK_EXECUTE_ENCODE = "WmsTaskRequest";
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index ffae366f..812656cc 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -270,7 +270,7 @@ namespace Tnb.WarehouseMgr
}
//获取所有未下发的预任务申请
- var preTasks = await _db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id)
+ var preTasks = await _db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id)
.InnerJoin((a, b, c) => a.area_id == c.id)
.Where(a => a.status == WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID)
.OrderBy(a => new { priority = SqlFunc.Desc(a.priority), a.bill_code })
@@ -279,15 +279,20 @@ namespace Tnb.WarehouseMgr
move_num = c.move_num
}, true)
.ToListAsync();
+ var ids = preTasks.Select(x => x.id).Distinct().ToList();
+ var preTaskCodes = await _db.Queryable().Where(it => ids.Contains(it.bill_id)).ToListAsync();
if (preTasks.Count > 0)
{
//根据预任务管理区分组,获取到所有分组后的预任务,遍历每个预任务 是否为任务链,通过管理区ID
var preTaskGroups = preTasks.GroupBy(g => g.area_code).ToList();
List disTasks = new();
+ List distaskCodes = new();
foreach (var itGroup in preTaskGroups)
{
var moveNum = itGroup.First().move_num;
var items = itGroup.Adapt>();
+
+ items.ForEach(x => SnowflakeIdHelper.NextId());
items.ForEach(x =>
{
x.status = WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID;
@@ -325,14 +330,34 @@ namespace Tnb.WarehouseMgr
await _taskChainAttrHandle(items, areaPreTasks, moveNum);
}
}
+ if (preTaskCodes?.Count > 0)
+ {
+ foreach (var disTask in items)
+ {
+ var curPreTaskCodes = preTaskCodes.FindAll(x => x.bill_id == disTask.pretask_id);
+ var curDisTaskCodes = curPreTaskCodes.Adapt>();
+ curPreTaskCodes.ForEach(x =>
+ {
+ x.id = SnowflakeIdHelper.NextId();
+ x.bill_id = disTask.id;
+ x.create_time = DateTime.Now;
+ });
+ distaskCodes.AddRange(curDisTaskCodes);
+ }
+ }
+
disTasks.AddRange(items);
}
try
{
await _db.Ado.BeginTranAsync();
- disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId());
+ //disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId());
var row = await _db.Insertable(disTasks).ExecuteCommandAsync();
+ if (preTaskCodes?.Count > 0)
+ {
+ row = await _db.Insertable(distaskCodes).ExecuteCommandAsync();
+ }
if (row > 0)
{
var preTaskIds = preTasks.Select(x => x.id).ToList();
@@ -462,7 +487,7 @@ namespace Tnb.WarehouseMgr
{
carryStatus = ((int)EnumCarryStatus.空闲).ToString();
}
- var cStatus =carryStatus.ParseToInt();
+ var cStatus = carryStatus.ParseToInt();
await _db.Updateable().SetColumns(it => new BasLocation { is_use = cStatus, is_lock = 0 }).Where(it => it.id == multis[i].endlocation_id).ExecuteCommandAsync();
}
//更新业务主表的单据状态
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs
index d26a486a..ff57cc39 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs
@@ -12,7 +12,9 @@ using NPOI.SS.Formula.Functions;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
+using Tnb.WarehouseMgr.Entities.Attributes;
using Tnb.WarehouseMgr.Entities.Consts;
+using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Interfaces;
@@ -21,8 +23,10 @@ namespace Tnb.WarehouseMgr
///
/// 入库申请服务
///
+ [ServiceModule(BizTypeId)]
public class WmsInStockService : BaseWareHouseService, IWmsInStockService
{
+ private const string BizTypeId = "26191496816421";
private readonly ISqlSugarClient _db;
private readonly IDictionaryDataService _dictionaryDataService;
private readonly IUserManager _userManager;
@@ -155,5 +159,56 @@ namespace Tnb.WarehouseMgr
return barCode;
}
+
+ public override async Task ModifyAsync(WareHouseUpInput input)
+ {
+ if (input == null) throw new ArgumentNullException("input");
+ //更具distaskCode的barcode 更新 instockcode 的 is_end 为 1
+ try
+ {
+ await _db.Ado.BeginTranAsync();
+
+ if (input.distaskCodes?.Count > 0)
+ {
+ var barCodes = input.distaskCodes.Select(x => x.barcode);
+ await _db.Updateable().SetColumns(it => new WmsInstockCode { is_end = 1 }).Where(it => barCodes.Contains(it.barcode)).ExecuteCommandAsync();
+ var instockCodes = await _db.Queryable().Where(it => barCodes.Contains(it.barcode)).Select(it => new
+ {
+ id = it.bill_d_id,
+ barcode_qty = it.codeqty,
+ }).ToListAsync();
+ var dic = instockCodes.GroupBy(g => g.id).ToDictionary(x => x.Key, x => x.Select(d => d.barcode_qty).ToList());
+ var ids = instockCodes.Select(it => it.id).ToList();
+ var instockDetails = await _db.Queryable().Where(it => ids.Contains(it.id)).ToListAsync();
+
+ foreach (var item in instockDetails)
+ {
+ if (dic.ContainsKey(item.id))
+ {
+ item.qty += dic[item.id].Sum(x => x);
+ if (item.qty >= item.pr_qty)
+ {
+ item.line_status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID;
+ }
+ }
+ }
+ await _db.Updateable(instockDetails).ExecuteCommandAsync();
+ var allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync();
+ if (allInstockDetails.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID))
+ {
+ await _db.Updateable().SetColumns(it => new WmsInstockH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }).Where(it => it.id == input.requireId).ExecuteCommandAsync();
+ //如果是自动单据,需要回更上层系统
+ }
+ }
+
+ await _db.Ado.CommitTranAsync();
+ }
+ catch (Exception)
+ {
+ await _db.Ado.RollbackTranAsync();
+ throw;
+ }
+ }
+
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
index d7ddf2b2..1641dc39 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
@@ -286,17 +286,21 @@ namespace Tnb.WarehouseMgr
try
{
+
+ await _db.Ado.BeginTranAsync();
+
var carryId = input.carryIds[^input.carryIds.Count];
var carry = await _db.Queryable().SingleAsync(it => it.id == carryId);
if (carry != null)
{
+ var otds = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync();
var outStatus = carry.out_status.ToEnum();
if (outStatus == EnumOutStatus.全部出)
{
//当前载具对应的所有条码插入
var carryCodes = await _db.Queryable().Where(it => it.carry_id == carryId).ToListAsync();
var outStockCodes = carryCodes.Adapt>();
- var otds = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync();
+
outStockCodes.ForEach(x =>
{
var billDId = otds?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id;
@@ -340,7 +344,20 @@ namespace Tnb.WarehouseMgr
if (input.distaskCodes?.Count > 0)
{
var osCodes = input.distaskCodes.Adapt>();
- osCodes.ForEach(x => x.id = SnowflakeIdHelper.NextId());
+ osCodes.ForEach(x =>
+ {
+ var billDId = otds?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id;
+ if (billDId.IsNullOrEmpty())
+ {
+ billDId = otds?.Find(xx => xx.material_id == x.material_id)?.id;
+ }
+ x.id = SnowflakeIdHelper.NextId();
+ x.bill_id = input.requireId;
+ x.bill_d_id = billDId;
+ x.org_id = _userManager.User.OrganizeId;
+ x.create_id = _userManager.UserId;
+ x.create_time = DateTime.Now;
+ });
await _db.Insertable(osCodes).ExecuteCommandAsync();
var carryCodes = await _db.Queryable().Where(it => input.carryIds.Contains(it.carry_id)).ToListAsync();
@@ -386,17 +403,19 @@ namespace Tnb.WarehouseMgr
[nameof(WmsPointH.location_id)] = outStockH.location_id,
[nameof(WmsCarryD.carry_id)] = input.carryIds.First(),
[nameof(WmsHandleH.biz_type)] = input.bizTypeId,
- [nameof(WmsHandleH.bill_code)] = outStockH.bill_code,
+ [nameof(WmsHandleH.bill_code)] = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_CARRYMOINSTK_ENCODE).GetAwaiter().GetResult(),
};
await _wmsCarryMoveInStockService.CarryMoveIn(visulDevInput);
}
}
+
+ await _db.Ado.CommitTranAsync();
}
}
catch (Exception ex)
{
-
+ await _db.Ado.RollbackTranAsync();
throw;
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs
index 8a5b86ab..59d85c04 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs
@@ -150,6 +150,7 @@ namespace Tnb.WarehouseMgr
}
}
}
+
//生成预任务,同时如果包含条码信息同时插入条码记录
var isOk = await _wareHouseService.GenPreTask(preTasks, pretaskCodes);
if (isOk)