8线入中储仓接口
This commit is contained in:
@@ -470,6 +470,10 @@
|
||||
/// </summary>
|
||||
public const string ZZCSSX111012 = "32609251845653";
|
||||
/// <summary>
|
||||
/// 一楼中储仓入库工位
|
||||
/// </summary>
|
||||
public const string ZZCSSX011008 = "32609223625237";
|
||||
/// <summary>
|
||||
/// 料箱id
|
||||
/// </summary>
|
||||
public const string LIAOXIANGID = "26037262680357";
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 库房业务更新输入参数
|
||||
/// </summary>
|
||||
public class MaterialTransferDistributeYCL2ZCCInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 组织ID
|
||||
/// </summary>
|
||||
public string org_id { get; set; }
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据id
|
||||
/// </summary>
|
||||
public string? source_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 载具
|
||||
/// </summary>
|
||||
public List<MaterialTransferDistributeYCL2ZCCDetailInput>? details { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class MaterialTransferDistributeYCL2ZCCDetailInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 载具编码
|
||||
/// </summary>
|
||||
public string? carry_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料数量
|
||||
/// </summary>
|
||||
public decimal qty { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -80,6 +80,15 @@ public partial class WmsMaterialTransferD : BaseEntity<string>
|
||||
/// </summary>
|
||||
public decimal? yzqty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已下发数量(入库)
|
||||
/// </summary>
|
||||
public decimal? yxfqty_rk { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 已转数量(入库)
|
||||
/// </summary>
|
||||
public decimal? yzqty_rk { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 主表ID
|
||||
|
||||
@@ -2296,7 +2296,7 @@ namespace Tnb.WarehouseMgr
|
||||
};
|
||||
string endLocId = multiList[i].endlocation_id;
|
||||
|
||||
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == carry.id).FirstAsync();
|
||||
WmsCarryH wmsCarryH = await _db.Queryable<WmsCarryH>().Where(r => r.id == carry.id).FirstAsync();
|
||||
// 同步料架下的载具位置
|
||||
if (wmsCarryH != null && wmsCarryH.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID)
|
||||
{
|
||||
@@ -3119,7 +3119,7 @@ namespace Tnb.WarehouseMgr
|
||||
try
|
||||
{
|
||||
List<WmsCarryD> wmsCarryCodes = _db.Queryable<WmsCarryD>().Where(r => r.carry_id == rackid).ToList();
|
||||
|
||||
|
||||
int move_num = 6;
|
||||
string[] startlocations = new string[2] { WmsWareHouseConst.ZZCSSX111011, WmsWareHouseConst.ZZCSSX111012 };
|
||||
BasLocation startLocation = null;
|
||||
@@ -3139,7 +3139,7 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
|
||||
// 每6个重新获取一次起点
|
||||
if (index % move_num == 0)
|
||||
if (index % move_num == 0)
|
||||
{
|
||||
startLocation = await _db.Queryable<BasLocation>().Where(r => startlocations.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ namespace Tnb.WarehouseMgr
|
||||
private readonly IWmsCarryQueryService _wmsCarryQueryService;
|
||||
|
||||
public static SemaphoreSlim s_taskDistributeToZCC = new(1);
|
||||
public static SemaphoreSlim s_taskDistributeYCL2ZCC = new(1);
|
||||
|
||||
public WmsMaterialTransferService(
|
||||
ISqlSugarRepository<WmsCarryH> repository,
|
||||
@@ -292,7 +293,7 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 按托下发
|
||||
/// 按托下发(到集中供料或外协)
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
@@ -322,12 +323,12 @@ namespace Tnb.WarehouseMgr
|
||||
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
||||
|
||||
if (wmsMaterialTransferD.yxfqty == wmsMaterialTransferD.qty)
|
||||
await s_taskExecuteSemaphore.WaitAsync();
|
||||
if (wmsMaterialTransferD.yxfqty >= wmsMaterialTransferD.qty)
|
||||
{
|
||||
throw new AppFriendlyException("已下发数量已达到转库数量", 500);
|
||||
}
|
||||
|
||||
await s_taskExecuteSemaphore.WaitAsync();
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
//入库取终点 //出库起点
|
||||
@@ -432,6 +433,120 @@ namespace Tnb.WarehouseMgr
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PDA操作(8线到中储仓)
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost, NonUnify, AllowAnonymous]
|
||||
public async Task<Entities.Dto.Outputs.Result> DistributeYCL2ZCC(MaterialTransferDistributeYCL2ZCCInput input)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(input.source_id))
|
||||
{
|
||||
throw new AppFriendlyException("来源单据id不可为空", 500);
|
||||
}
|
||||
if (input.details.Count == 0)
|
||||
{
|
||||
throw new AppFriendlyException("请先扫描料箱", 500);
|
||||
}
|
||||
|
||||
input.details.ForEach(r =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(r.carry_code))
|
||||
{
|
||||
throw new AppFriendlyException($"料箱编码不能为空", 500);
|
||||
}
|
||||
if (r.qty <= 0)
|
||||
{
|
||||
throw new AppFriendlyException($"料箱{r.carry_code}的数量必须大于0", 500);
|
||||
}
|
||||
});
|
||||
|
||||
await s_taskDistributeYCL2ZCC.WaitAsync();
|
||||
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable<WmsMaterialTransferD>().FirstAsync(it => it.id == input.source_id);
|
||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
|
||||
|
||||
if (wmsMaterialTransferD.yxfqty_rk >= wmsMaterialTransferD.qty)
|
||||
{
|
||||
throw new AppFriendlyException("已下发数量已达到转库数量", 500);
|
||||
}
|
||||
|
||||
decimal qty = input.details.Sum(r => r.qty);
|
||||
if (qty > wmsMaterialTransferD.qty - wmsMaterialTransferD.yxfqty_rk)
|
||||
{
|
||||
throw new AppFriendlyException($"下发数量{qty}已超过可下发数量{wmsMaterialTransferD.qty - wmsMaterialTransferD.yxfqty_rk}", 500);
|
||||
}
|
||||
|
||||
await _db.Ado.BeginTranAsync();
|
||||
//入库取终点 //出库起点
|
||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID, Size = input.details.Count };
|
||||
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
||||
if (endLocations.Count == 0)
|
||||
{
|
||||
Logger.LogWarning("没有可用的入库库位");
|
||||
throw new AppFriendlyException("没有可用的入库库位", 500);
|
||||
}
|
||||
|
||||
if (input.details.Count > endLocations.Count)
|
||||
{
|
||||
throw new AppFriendlyException("可用的入库库位数量少于扫描的料箱数量", 500);
|
||||
}
|
||||
|
||||
int index = 0;
|
||||
|
||||
List<WmsCarryH> wmsCarryHs = await _db.Queryable<WmsCarryH>().Where(r => input.details.Select(x => x.carry_code).Contains(r.carry_code)).ToListAsync();
|
||||
|
||||
foreach (var wmsCarryH in input.details)
|
||||
{
|
||||
BasLocation startLocation = await _db.Queryable<BasLocation>().Where(r => r.id == WmsWareHouseConst.ZZCSSX011008).FirstAsync();
|
||||
|
||||
BasLocation endLocation = endLocations[index];
|
||||
|
||||
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
|
||||
commonCreatePretaskInput.startlocation_id = startLocation.id;
|
||||
commonCreatePretaskInput.endlocation_id = endLocation.id;
|
||||
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID;
|
||||
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
|
||||
commonCreatePretaskInput.source_id = input.source_id;
|
||||
commonCreatePretaskInput.carry_id = wmsCarryHs[index].id;
|
||||
commonCreatePretaskInput.carry_code = wmsCarryHs[index].carry_code;
|
||||
commonCreatePretaskInput.isExcuteMission = false;
|
||||
|
||||
Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db);
|
||||
|
||||
if (res.code != HttpStatusCode.OK)
|
||||
{
|
||||
Logger.LogInformation($@"生成预任务失败");
|
||||
throw new AppFriendlyException($@"生成预任务失败", 500);
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
// 更新子表已下发数量
|
||||
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty_rk == r.yxfqty_rk + qty).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
Logger.LogError("【Distribute】" + ex.Message);
|
||||
Logger.LogError("【Distribute】" + ex.StackTrace);
|
||||
return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_ = s_taskDistributeYCL2ZCC.Release();
|
||||
InvokeGenPretaskExcute();
|
||||
}
|
||||
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 按料架下发(缓存仓)
|
||||
/// </summary>
|
||||
@@ -770,7 +885,6 @@ namespace Tnb.WarehouseMgr
|
||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||
}
|
||||
|
||||
|
||||
public override async Task ModifyAsync(WareHouseUpInput input)
|
||||
{
|
||||
if (input == null)
|
||||
@@ -788,9 +902,20 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
// 更新已转数量
|
||||
bool isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty) })
|
||||
bool isOk = false;
|
||||
// 入库回写入库数量字段
|
||||
if (input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID)
|
||||
{
|
||||
// 更新已转数量(入库)
|
||||
isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty_rk = it.yzqty_rk + wmsCarryCodes.Sum(r => r.codeqty) })
|
||||
.Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 更新已转数量
|
||||
isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCodes.Sum(r => r.codeqty) })
|
||||
.Where(it => it.id == input.source_id).ExecuteCommandHasChangeAsync();
|
||||
}
|
||||
|
||||
// 如果所有明细已完成 更新主表状态为完成
|
||||
WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable<WmsMaterialTransferD>().Where(r => r.id == input.source_id).SingleAsync();
|
||||
@@ -814,7 +939,13 @@ namespace Tnb.WarehouseMgr
|
||||
if (input.area_code == "E")
|
||||
await sign(input);
|
||||
|
||||
// 其它入库
|
||||
if (input.wmsDistaskH.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID)
|
||||
{
|
||||
|
||||
}
|
||||
// 其它出库
|
||||
{
|
||||
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable<WmsMaterialTransfer>().SingleAsync(x => x.id == wmsMaterialTransferd.bill_id);
|
||||
List<WmsMaterialTransferD> dList = await _db.Queryable<WmsMaterialTransferD>().Where(x => x.bill_id == wmsMaterialTransferd.bill_id).OrderBy(x => x.id).ToListAsync();
|
||||
DictionaryDataEntity unitData = await _db.Queryable<DictionaryTypeEntity>()
|
||||
@@ -895,6 +1026,9 @@ namespace Tnb.WarehouseMgr
|
||||
thirdWebapiRecord.create_time = DateTime.Now;
|
||||
|
||||
await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user