销售出库与拣货接口以及部分问题修复
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Diagnostics;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Net;
|
||||
using System.Security.Policy;
|
||||
@@ -26,6 +27,7 @@ using NetTaste;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NPOI.OpenXmlFormats.Dml;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
@@ -57,6 +59,7 @@ namespace Tnb.WarehouseMgr
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly ICacheManager _cacheManager;
|
||||
private readonly IElevatorControlService _elevatorControlService;
|
||||
private readonly IWmsCarryBindService _wmsCarryBindService;
|
||||
private static readonly Dictionary<string, int> _elevatorAgvCtlStatusMap = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
||||
private static Dictionary<string, object> locMap = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
|
||||
@@ -67,7 +70,8 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
|
||||
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService, RedisData redisData,
|
||||
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService
|
||||
IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService,
|
||||
IWmsCarryBindService wmsCarryBindService
|
||||
//IConfiguration configuration
|
||||
) : base(repository.AsSugarClient())
|
||||
{
|
||||
@@ -78,6 +82,7 @@ namespace Tnb.WarehouseMgr
|
||||
_cacheManager = cacheManager;
|
||||
_elevatorControlService = elevatorControlService;
|
||||
_redisData = redisData;
|
||||
_wmsCarryBindService = wmsCarryBindService;
|
||||
//_configuration = configuration;
|
||||
|
||||
}
|
||||
@@ -205,11 +210,76 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
return items.Take(input.Size).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 出库策略
|
||||
/// 是否为一楼出库工位
|
||||
/// </summary>
|
||||
/// <param name="location_id"></param>
|
||||
/// <returns></returns>
|
||||
public string[] GetFloor1OutstockLocation()
|
||||
{
|
||||
return new string[3] { WmsWareHouseConst.FinishproductOutstockStation1 , WmsWareHouseConst.FinishproductOutstockStation2
|
||||
, WmsWareHouseConst.FinishproductOutstockStation3 };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 出库策略-销售出库下发
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>>> OutStockStrategy_saleRelease([FromQuery] OutStockStrategyQuery input)
|
||||
{
|
||||
Expressionable<WmsCarryH, WmsCarryCode, BasLocation> whereExprable = Expressionable.Create<WmsCarryH, WmsCarryCode, BasLocation>()
|
||||
.And((a, b, c) => a.is_lock == 0 && c.is_lock == 0)
|
||||
.And((a, b, c) => !string.IsNullOrEmpty(a.location_id))
|
||||
.And((a, b, c) => c.is_type == ((int)EnumLocationType.存储库位).ToString())
|
||||
.And((a, b, c) => a.out_status == "0")
|
||||
.And((a, b, c) => c.wh_id == input.warehouse_id)
|
||||
.AndIF(!string.IsNullOrEmpty(input.material_id), (a, b, c) => b.material_id == input.material_id)
|
||||
.AndIF(!string.IsNullOrEmpty(input.code_batch), (a, b, c) => b.code_batch == input.code_batch)
|
||||
.AndIF(!string.IsNullOrEmpty(input.material_specification), (a, b, c) => b.material_specification == input.material_specification)
|
||||
.AndIF(!string.IsNullOrEmpty(input.container_no), (a, b, c) => b.container_no == input.container_no)
|
||||
.AndIF(!string.IsNullOrEmpty(input.carrystd_id), (a, b, c) => a.carrystd_id == input.carrystd_id);
|
||||
Expression<Func<WmsCarryH, WmsCarryCode, BasLocation, bool>> carryStatusFilterExp = !input.material_id.IsNullOrWhiteSpace()
|
||||
? (a, b, c) => a.carry_status == ((int)EnumCarryStatus.占用).ToString()
|
||||
: (a, b, c) => a.carry_status == ((int)EnumCarryStatus.空闲).ToString();
|
||||
_ = whereExprable.And(carryStatusFilterExp);
|
||||
Expression<Func<WmsCarryH, WmsCarryCode, BasLocation, bool>> whereExpr = whereExprable.ToExpression();
|
||||
|
||||
SqlSugarClient cyDb = _db.CopyNew();
|
||||
|
||||
|
||||
|
||||
List<Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>> items = cyDb.Queryable<WmsCarryH>().LeftJoin<WmsCarryCode>((a, b) => a.id == b.carry_id)
|
||||
.LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id)
|
||||
.Where(whereExpr)
|
||||
//.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty())
|
||||
.OrderBy("a.location_code,layers,loc_line,loc_column")
|
||||
.Select((a, b, c) => new
|
||||
{
|
||||
WmsCarryH = a,
|
||||
WmsCarryCode = b,
|
||||
BasLocation = c,
|
||||
codeqty = b.codeqty
|
||||
}).ToList().Select(r =>
|
||||
{
|
||||
input.qty = input.qty - r.codeqty;
|
||||
|
||||
// 出库数量与托盘上的数量不一致需要进行分拣
|
||||
if (input.qty < 0)
|
||||
{
|
||||
r.WmsCarryCode.codeqty = input.qty + r.codeqty;
|
||||
return new Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>("分拣任务", r.WmsCarryH, r.WmsCarryCode, r.BasLocation);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 正常预任务出库
|
||||
return new Tuple<string, WmsCarryH, WmsCarryCode, BasLocation>("预任务", r.WmsCarryH, r.WmsCarryCode, r.BasLocation);
|
||||
}
|
||||
}).ToList();
|
||||
return items;
|
||||
}
|
||||
|
||||
public async Task<List<WmsCarryH>> OutStockStrategy([FromQuery] OutStockStrategyQuery input)
|
||||
{
|
||||
Expressionable<WmsCarryH, WmsCarryCode, BasLocation> whereExprable = Expressionable.Create<WmsCarryH, WmsCarryCode, BasLocation>()
|
||||
@@ -565,7 +635,7 @@ namespace Tnb.WarehouseMgr
|
||||
["Value"] = value,
|
||||
};
|
||||
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||
// TODO 测试
|
||||
// 测试
|
||||
|
||||
//JObject valueJson = new JObject();
|
||||
//valueJson["Value"] = value;
|
||||
@@ -1610,6 +1680,30 @@ namespace Tnb.WarehouseMgr
|
||||
*/ //更新业务主表的单据状态
|
||||
foreach (WmsDistaskH? dt in disTasks)
|
||||
{
|
||||
// 销售出库
|
||||
if (dt.biz_type == WmsWareHouseConst.BIZTYPE_WMSSALERELEASE_ID)
|
||||
{
|
||||
// TODO 一楼工位放货完成后更新出库明细的实际出库数量
|
||||
if (dt.start_floor == 1 && dt.end_floor == 1)
|
||||
{
|
||||
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == dt.carry_id).FirstAsync();
|
||||
await _db.Updateable<WmsSaleD>().SetColumns(r => r.purchase_prqty == r.purchase_prqty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
|
||||
|
||||
CarryCodeUnbindInput carryCodeUnbindInput = new CarryCodeUnbindInput();
|
||||
carryCodeUnbindInput.carry_id = dt.carry_id;
|
||||
await _wmsCarryBindService.CarryCodeUnbind(carryCodeUnbindInput);
|
||||
}
|
||||
}
|
||||
else if (dt.biz_type == WmsWareHouseConst.BIZTYPE_WMSTRANSFERINSTOCK_ID)
|
||||
{
|
||||
if (dt.start_floor == 3 && dt.end_floor == 3)
|
||||
{
|
||||
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == dt.carry_id).FirstAsync();
|
||||
await _db.Updateable<WmsTransferInstockD>().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<WmsDistaskCode> disTaskCodes = await _db.Queryable<WmsDistaskCode>().Where(it => it.bill_id == dt.id).ToListAsync();
|
||||
WareHouseUpInput upInput = new() { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() };
|
||||
|
||||
@@ -1712,6 +1806,10 @@ namespace Tnb.WarehouseMgr
|
||||
row = await _db.Updateable<WmsElevatorH>().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
// 累加终点库位任务数
|
||||
row = await _db.Updateable<BasLocation>().SetColumns(it => it.task_nums == it.task_nums + 1)
|
||||
.Where(it => preTasks.Select(r => r.endlocation_id).Contains(it.id)).ExecuteCommandAsync();
|
||||
|
||||
return row > 0;
|
||||
}
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user