diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
index 083ace0d..851b5e10 100644
--- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
+++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs
@@ -69,7 +69,7 @@ namespace Tnb.ProductionMgr
private Timer? Floor2timer移走下升降区未生成预任务且空托的料架;
// 7号线补充空料箱
- private Timer? SSX7Supplementtimer;
+ //private Timer? SSX7Supplementtimer;
public static SemaphoreSlim s_taskExecuteFloor2UpMachinecodetimer = new(1);
public static SemaphoreSlim s_task送空托到上升降区 = new(1);
@@ -431,7 +431,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
})).CreateLogger(this.GetType());
- protected ILogger LoggerYCLGLDPJInstock => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customBGWCarrySupplement{DateTime.Now:yyyyMMdd}.log", cfgOpts =>
+ protected ILogger LoggerYCLGLDPJInstock => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customYCLGLDPJInstock{DateTime.Now:yyyyMMdd}.log", cfgOpts =>
{
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
@@ -609,84 +609,84 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
}
- ///
- /// 7号输送线空料箱补充
- ///
- private async void SSX7Supplement(object? state)
- {
- Dictionary getdic = new Dictionary();
- getdic.Add("SSX-021-007", new string[] { "东面提升机输送线", "出库输送线7呼叫CTU" });
+ /////
+ ///// 7号输送线空料箱补充 (弃用)
+ /////
+ //private async void SSX7Supplement(object? state)
+ //{
+ // Dictionary getdic = new Dictionary();
+ // getdic.Add("SSX-021-007", new string[] { "东面提升机输送线", "出库输送线7呼叫CTU" });
- foreach (var key in getdic.Keys)
- {
- try
- {
- var strs = getdic.Where(p => p.Key == key).First().Value;
- string data = await _redisData.GetHash(strs[0], strs[1]);
- if (data == null)
- {
- continue;
- }
- JObject? res = JsonConvert.DeserializeObject(data);
+ // foreach (var key in getdic.Keys)
+ // {
+ // try
+ // {
+ // var strs = getdic.Where(p => p.Key == key).First().Value;
+ // string data = await _redisData.GetHash(strs[0], strs[1]);
+ // if (data == null)
+ // {
+ // continue;
+ // }
+ // JObject? res = JsonConvert.DeserializeObject(data);
- bool result = res != null && res["Value"] != null ? res.Value("Value") : false;
- if (result)
- {
- LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线 {key} {strs[1]}采集到 {res["Value"]}");
+ // bool result = res != null && res["Value"] != null ? res.Value("Value") : false;
+ // if (result)
+ // {
+ // LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线 {key} {strs[1]}采集到 {res["Value"]}");
- BasLocation endLocation = _repository.AsSugarClient().Queryable().Where(r => r.location_code == key).First();
- if (endLocation == null)
- {
- LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 {key}未维护库位信息");
- continue;
- }
- if (endLocation.is_lock == 1)
- {
- LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线 {key} 已锁定");
- continue;
- }
+ // BasLocation endLocation = _repository.AsSugarClient().Queryable().Where(r => r.location_code == key).First();
+ // if (endLocation == null)
+ // {
+ // LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 {key}未维护库位信息");
+ // continue;
+ // }
+ // if (endLocation.is_lock == 1)
+ // {
+ // LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线 {key} 已锁定");
+ // continue;
+ // }
- BasLocation location = await _repository.AsSugarClient().Queryable().SingleAsync(it => it.location_code == key && it.is_type != EnumLocationType.存储库位.ToString()) ?? throw new AppFriendlyException("无此库位或为存储库位", 500);
- //锁定起点库位
- await _repository.AsSugarClient().Updateable().SetColumns(r => r.is_lock == 1).Where(r => r.id == location.id).ExecuteCommandAsync();
+ // BasLocation location = await _repository.AsSugarClient().Queryable().SingleAsync(it => it.location_code == key && it.is_type != EnumLocationType.存储库位.ToString()) ?? throw new AppFriendlyException("无此库位或为存储库位", 500);
+ // //锁定起点库位
+ // await _repository.AsSugarClient().Updateable().SetColumns(r => r.is_lock == 1).Where(r => r.id == location.id).ExecuteCommandAsync();
- Dictionary dic = new()
- {
- [nameof(WmsEmptyOutstockH.id)] = SnowflakeIdHelper.NextId(),
- [nameof(WmsEmptyOutstockH.org_id)] = WmsWareHouseConst.AdministratorOrgId,
- [nameof(WmsEmptyOutstockH.location_id)] = location.id,
- [nameof(WmsEmptyOutstockH.carrystd_id)] = WmsWareHouseConst.LIAOXIANGID,
- [nameof(WmsEmptyOutstockH.bill_code)] = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_EMPTYOUTSTK_ENCODE).GetAwaiter().GetResult(),
- [nameof(WmsEmptyOutstockH.status)] = WmsWareHouseConst.BILLSTATUS_ADD_ID,
- [nameof(WmsEmptyOutstockH.qty)] = 1,
- [nameof(WmsEmptyOutstockH.biz_type)] = WmsWareHouseConst.BIZTYPE_WMSEPTYOUTSTK_ID,
- ["warehouse_id"] = WmsWareHouseConst.WAREHOUSE_ZC_ID,
- [nameof(WmsEmptyOutstockH.create_id)] = WmsWareHouseConst.AdministratorUserId,
- [nameof(WmsEmptyOutstockH.create_time)] = DateTime.Now
- };
+ // Dictionary dic = new()
+ // {
+ // [nameof(WmsEmptyOutstockH.id)] = SnowflakeIdHelper.NextId(),
+ // [nameof(WmsEmptyOutstockH.org_id)] = WmsWareHouseConst.AdministratorOrgId,
+ // [nameof(WmsEmptyOutstockH.location_id)] = location.id,
+ // [nameof(WmsEmptyOutstockH.carrystd_id)] = WmsWareHouseConst.LIAOXIANGID,
+ // [nameof(WmsEmptyOutstockH.bill_code)] = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_EMPTYOUTSTK_ENCODE).GetAwaiter().GetResult(),
+ // [nameof(WmsEmptyOutstockH.status)] = WmsWareHouseConst.BILLSTATUS_ADD_ID,
+ // [nameof(WmsEmptyOutstockH.qty)] = 1,
+ // [nameof(WmsEmptyOutstockH.biz_type)] = WmsWareHouseConst.BIZTYPE_WMSEPTYOUTSTK_ID,
+ // ["warehouse_id"] = WmsWareHouseConst.WAREHOUSE_ZC_ID,
+ // [nameof(WmsEmptyOutstockH.create_id)] = WmsWareHouseConst.AdministratorUserId,
+ // [nameof(WmsEmptyOutstockH.create_time)] = DateTime.Now
+ // };
- VisualDevModelDataCrInput visualDevModelDataCrInput = new()
- {
- data = dic,
- };
- var result_WmsEmptyOut = await _wmsEmptyOutstockService.WmsEmptyOut(visualDevModelDataCrInput);
+ // VisualDevModelDataCrInput visualDevModelDataCrInput = new()
+ // {
+ // data = dic,
+ // };
+ // var result_WmsEmptyOut = await _wmsEmptyOutstockService.WmsEmptyOut(visualDevModelDataCrInput);
- if (result_WmsEmptyOut.code2 != "200")
- {
- LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 预任务生成失败 {result_WmsEmptyOut.msg}");
- continue;
- }
- LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 预任务生成成功");
+ // if (result_WmsEmptyOut.code2 != "200")
+ // {
+ // LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 预任务生成失败 {result_WmsEmptyOut.msg}");
+ // continue;
+ // }
+ // LoggerBGWCarrySupplement.LogWarning($"【SSX7Supplement】 预任务生成成功");
- _ = _wareHouseService.GenTaskExecute();
- }
- }
- catch (Exception ex)
- {
- LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线空料箱补充发生异常:{ex}");
- }
- }
- }
+ // _ = _wareHouseService.GenTaskExecute();
+ // }
+ // }
+ // catch (Exception ex)
+ // {
+ // LoggerBGWCarrySupplement.LogInformation($"【SSX7Supplement】 7号输送线空料箱补充发生异常:{ex}");
+ // }
+ // }
+ //}
///
/// 供料叠盘机空托盘自动入库
@@ -694,7 +694,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
private async void YCLGLDPJInstock(object? state)
{
Dictionary getdic = new Dictionary();
- getdic.Add("SGW-YCL", new string[] { "CP3-3", "AllowGetFullBox" });
+ getdic.Add("SGW-YCL", new string[] { "CP3-5", "AllowGetFullBox" });
foreach (var key in getdic.Keys)
{
@@ -713,45 +713,48 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
{
LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} {strs[1]}采集到 {res["Value"]}");
- BasLocation startLocation = _repository.AsSugarClient().Queryable().Where(r => r.location_code == key).First();
- if (startLocation == null)
+ using (var db = _repository.AsSugarClient().CopyNew())
{
- LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {key}未维护库位信息");
- continue;
+ BasLocation startLocation = db.Queryable().Where(r => r.location_code == key).First();
+ if (startLocation == null)
+ {
+ LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {key}未维护库位信息");
+ continue;
+ }
+ if (startLocation.is_lock == 1)
+ {
+ LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} 已锁定");
+ continue;
+ }
+
+ // 找到未锁定且未占用的库位
+ var endLocations = db.Queryable()
+ .Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-") && a.is_type == "0");
+
+ LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 sql {endLocations.ToSqlString()}");
+
+ if (endLocations.Count() == 0)
+ {
+ LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 当前没有空库位可以入库");
+ continue;
+ }
+
+ BasLocation endLocation = endLocations.First();
+
+ //锁定起点库位 更新为空闲
+ await db.Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
+ //锁定终点库位
+ await db.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
+
+ bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock);
+ if (!result_createPretask)
+ {
+ LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
+ continue;
+ }
+ LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成成功");
+
}
- if (startLocation.is_lock == 1)
- {
- LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} 已锁定");
- continue;
- }
-
- // 找到未锁定且未占用的库位
- var endLocations = _repository.AsSugarClient().Queryable()
- .Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-"));
-
- LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 sql {endLocations.ToSqlString()}");
-
- if (endLocations.Count() == 0)
- {
- LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 当前没有空库位可以入库");
- continue;
- }
-
- BasLocation endLocation = endLocations.First();
-
- //锁定起点库位 更新为空闲
- await _repository.AsSugarClient().Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
- //锁定终点库位
- await _repository.AsSugarClient().Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
-
- bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock);
- if (!result_createPretask)
- {
- LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败");
- continue;
- }
- LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成成功");
-
_ = _wareHouseService.GenTaskExecute();
}
@@ -802,8 +805,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
// 找到未锁定且未占用的库位
var endLocations = _repository.AsSugarClient().Queryable()
- .Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-"));
-
+ .Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-") && a.is_type == "0");
+
LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 sql {endLocations.ToSqlString()}");
if (endLocations.Count() == 0)
@@ -951,7 +954,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
YCLGLDPJInstocktimer?.Dispose();
YCLWXDPJInstocktimer?.Dispose();
- SSX7Supplementtimer?.Dispose();
+ //SSX7Supplementtimer?.Dispose();
}
#region 二楼上升降机机械臂
@@ -992,30 +995,25 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】扫描到有效条码 {barcode}");
- // 获取下到输送线9和10的未完成的出库单
- List WmsEmptyOutstockHs = db.Queryable()
- .InnerJoin((a, b) => a.id == b.bill_id)
- .Where((a, b) => (a.location_id == "32609238573589" || a.location_id == "32609229889045") && (string.IsNullOrEmpty(a.bindrackcomplete) || a.bindrackcomplete != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
+ // 获取下到输送线9和10的未完成的转库单
+ List WmsMaterialTransfers = db.Queryable()
+ .InnerJoin((a, b) => a.id == b.bill_id)
+ .Where((a, b) => a.warehouse_instock == "33780009364245" && a.warehouse_outstock == "2" && a.remainbindracknum > 0
&& b.carry_code == barcode).ToList();
- string ss = db.Queryable()
- .InnerJoin((a, b) => a.id == b.bill_id)
- .Where((a, b) => (a.location_id == "32609238573589" || a.location_id == "32609229889045") && (string.IsNullOrEmpty(a.bindrackcomplete) || a.bindrackcomplete != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
- && b.carry_code == barcode).ToSqlString();
-
- if (WmsEmptyOutstockHs.Count() == 0)
+ if (WmsMaterialTransfers.Count() == 0)
{
- LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】未找到条码{barcode}的输送线为9、10的出库单");
+ LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】未找到条码{barcode}的输送线为9、10的转库单");
return;
}
- // 出库单
- WmsEmptyOutstockH WmsEmptyOutstockH = WmsEmptyOutstockHs.OrderByDescending(r => r.create_time).First();
+ // 转库单
+ WmsMaterialTransfer WmsMaterialTransfer = WmsMaterialTransfers.OrderByDescending(r => r.create_time).First();
- // 找到条码在的出库单
- string ckdCode = WmsEmptyOutstockH.bill_code;
- int ckdRemainBindRackNum = (int)(WmsEmptyOutstockH.remainbindracknum != null ? WmsEmptyOutstockH.remainbindracknum : 0);
+ // 找到条码在的转库单
+ string ckdCode = WmsMaterialTransfer.bill_code;
+ int ckdRemainBindRackNum = (int)(WmsMaterialTransfer.remainbindracknum != null ? WmsMaterialTransfer.remainbindracknum : 0);
- //扫描到的料箱 a.对应出库单的b.码垛计数未达到满托数量的料架区
+ //扫描到的料箱 a.对应转库单的b.码垛计数未达到满托数量的料架区
IEnumerable targetConfigs = WmsMechanicalArmHs.Where(r => r.outbill == ckdCode && r.stackingcount < r.maxnum);
WmsMechanicalArmH target;
@@ -1032,8 +1030,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
// 计算当前料架区的满托数量
int? maxnum = ckdRemainBindRackNum > target.maxracknum ? ckdRemainBindRackNum % target.maxracknum : ckdRemainBindRackNum;
- // 更新 出库单、满托数量
- LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】为条码 {barcode} 所在的出库单 {ckdCode} 占用了一个空闲料架");
+ // 更新 转库单、满托数量
+ LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】为条码 {barcode} 所在的转库单 {ckdCode} 占用了一个空闲料架");
await db.Updateable().SetColumns(r => new WmsMechanicalArmH
{
outbill = ckdCode,
@@ -1056,13 +1054,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}
else
{
- LoggerFloor2UpDownMachine.LogError($@"【上升降机】条码{barcode}找不到绑定出库单{ckdCode}的料架区,且没有空闲的料架区可以用于绑定此出库单!");
+ LoggerFloor2UpDownMachine.LogError($@"【上升降机】条码{barcode}找不到绑定转库单{ckdCode}的料架区,且没有空闲的料架区可以用于绑定此转库单!");
await db.Ado.RollbackTranAsync();
return;
}
}
- //如有多个料架绑定同个出库单则取第一个未满托的料架
+ //如有多个料架绑定同个转库单则取第一个未满托的料架
target = targetConfigs.First();
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】当前条码目标料架区为 {JsonConvert.SerializeObject(target)}");
@@ -1088,12 +1086,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
}).Where(r => r.id == target.id).ExecuteCommandAsync();
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写料箱条码、码垛计数");
- // 回写出库单的剩余可绑定料架数量
- await db.Updateable().SetColumns(r => new WmsEmptyOutstockH
+ // 回写转库单的剩余可绑定料架数量
+ await db.Updateable().SetColumns(r => new WmsMaterialTransfer
{
remainbindracknum = r.remainbindracknum - 1
- }).Where(r => r.id == WmsEmptyOutstockH.id).ExecuteCommandAsync();
- LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写出库单的剩余可绑定料架数量");
+ }).Where(r => r.id == WmsMaterialTransfer.id).ExecuteCommandAsync();
+ LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写转库单的剩余可绑定料架数量");
// 绑定料箱到料架
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
@@ -1602,26 +1600,26 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
private async Task Floor2UpDownMachinecode_SetTag(string tag, string value)
{
- //string DevName = "东面提升机输送线";
- //Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase)
- //{
- // ["DevName"] = DevName,
- // ["token"] = _eleCtlCfg.token,
- // ["TagName"] = tag,
- // ["Value"] = value,
- //};
- //string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
+ string DevName = "东面提升机输送线";
+ Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase)
+ {
+ ["DevName"] = DevName,
+ ["token"] = _eleCtlCfg.token,
+ ["TagName"] = tag,
+ ["Value"] = value,
+ };
+ string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
- //return result.Contains("Ok");
+ return result.Contains("Ok");
// 测试
- string DevName = "东面提升机输送线";
+ //string DevName = "东面提升机输送线";
- JObject valueJson = new JObject();
- valueJson["Value"] = value;
+ //JObject valueJson = new JObject();
+ //valueJson["Value"] = value;
- bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
- return true;
+ //bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
+ //return true;
}
#endregion
@@ -1642,17 +1640,17 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
//YCLWXDPJInstocktimer = new Timer(YCLWXDPJInstock, null, TimeSpan.Zero, TimeSpan.FromSeconds(100000));
// 二楼上升降机
- Floor2UpMachinecodetimer = new Timer(Floor2UpMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
+ Floor2UpMachinecodetimer = new Timer(Floor2UpMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(20));
// 二楼料架配送
- Floor2timer送空托到上升降区 = new Timer(送空托到上升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
- Floor2timer送满托到下升降区 = new Timer(送满托到下升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
- Floor2timer移走上升降区未生成预任务且满托的料架 = new Timer(移走上升降区未生成预任务且满托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
- Floor2timer移走下升降区未生成预任务且空托的料架 = new Timer(移走下升降区未生成预任务且空托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
+ Floor2timer送空托到上升降区 = new Timer(送空托到上升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
+ Floor2timer送满托到下升降区 = new Timer(送满托到下升降区, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
+ Floor2timer移走上升降区未生成预任务且满托的料架 = new Timer(移走上升降区未生成预任务且满托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
+ Floor2timer移走下升降区未生成预任务且空托的料架 = new Timer(移走下升降区未生成预任务且空托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
BGWCarrySupplementtimer = new Timer(BGWCarrySupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
- // 7号线补充空料箱
- SSX7Supplementtimer = new Timer(SSX7Supplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
+ // 7号线补充空料箱 (弃用)
+ //SSX7Supplementtimer = new Timer(SSX7Supplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
return Task.CompletedTask;
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
index b50b3848..2bd672f1 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs
@@ -226,8 +226,8 @@ public class ModuleConsts
///
public const string MODULE_WMSMATERIALTRANSFER_ID = "34354738929685";
///
- /// 模块标识-生产入库单 todo
+ /// 模块标识-生产入库单
///
- public const string MODULE_WMSPRDINSTOCK_ID = "MODULE_WMSPRDINSTOCK_ID";
+ public const string MODULE_WMSPRDINSTOCK_ID = "34467501190677";
}
\ No newline at end of file
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
index 2504ced4..ba770235 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs
@@ -218,7 +218,7 @@
///
/// 预任务生成业务类型-原材料转库单下发 todo
///
- public const string BIZTYPE_WMSMATERIALTRANSFER_ID = "BIZTYPE_WMSMATERIALTRANSFER_ID";
+ public const string BIZTYPE_WMSMATERIALTRANSFER_ID = "34354738929685";
///
/// 预任务生成业务类型-载具绑定
///
@@ -234,9 +234,9 @@
public const string BIZTYPE_WMSTRANSFERINSTOCK_ID = "34154749548053";
///
- /// 生产入库 todo
+ /// 生产入库
///
- public const string BIZTYPE_WMSPRDINSTOCK_ID = "BIZTYPE_WMSPRDINSTOCK_ID";
+ public const string BIZTYPE_WMSPRDINSTOCK_ID = "34467501190677";
///
/// 条码打印状态-已完成
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/BindCarryCodeInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/BindCarryCodeInput.cs
index 6eecfef3..468d9bfa 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/BindCarryCodeInput.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/BindCarryCodeInput.cs
@@ -18,8 +18,8 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs
public string location_id { get; set; } = "";
public string location_code { get; set; } = "";
public string code_batch { get; set; }
- public string unit_id { get; set; }
- public string unit_code { get; set; }
+ public string unit_id { get; set; } = "";
+ public string unit_code { get; set; } = "";
public string create_id { get; set; } = WmsWareHouseConst.AdministratorUserId;
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferCallRackToProductionLineInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferCallRackToProductionLineInput.cs
new file mode 100644
index 00000000..91dac301
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferCallRackToProductionLineInput.cs
@@ -0,0 +1,22 @@
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ ///
+ /// 库房业务更新输入参数
+ ///
+ public class MaterialTransferCallRackToProductionLineInput
+ {
+ ///
+ /// 组织ID
+ ///
+ public string org_id { get; set; }
+ ///
+ /// 创建用户
+ ///
+ public string create_id { get; set; }
+
+ ///
+ /// 料架号
+ ///
+ public string? carry_code { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferDistributeToZCCInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferDistributeToZCCInput.cs
new file mode 100644
index 00000000..2a9f56ea
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferDistributeToZCCInput.cs
@@ -0,0 +1,22 @@
+namespace Tnb.WarehouseMgr.Entities.Dto
+{
+ ///
+ /// 库房业务更新输入参数
+ ///
+ public class MaterialTransferDistributeToZCCInput
+ {
+ ///
+ /// 组织ID
+ ///
+ public string org_id { get; set; }
+ ///
+ /// 创建用户
+ ///
+ public string create_id { get; set; }
+
+ ///
+ /// 来源单据id(转库单主表)
+ ///
+ public string? source_id { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
index e2bbf362..c83331eb 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryH.cs
@@ -135,4 +135,9 @@ public partial class WmsCarryH : BaseEntity
///
public int check_conclusion { get; set; } = 1;
+ ///
+ /// 配送工位
+ ///
+ public string? work_station { get; set; }
+
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsEmptyOutstockH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsEmptyOutstockH.cs
index d144b722..667dc27c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsEmptyOutstockH.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsEmptyOutstockH.cs
@@ -84,15 +84,15 @@ public partial class WmsEmptyOutstockH : BaseEntity
///
public DateTime? timestamp { get; set; }
- ///
- /// 二楼机械臂剩余绑定料架数量
- ///
- public int? remainbindracknum { get; set; }
+ /////
+ ///// 二楼机械臂剩余绑定料架数量
+ /////
+ //public int? remainbindracknum { get; set; }
- ///
- /// 二楼机械臂料箱绑定完成
- ///
- public string? bindrackcomplete { get; set; }
+ /////
+ ///// 二楼机械臂料箱绑定完成
+ /////
+ //public string? bindrackcomplete { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs
index 549e3cc5..a02aa0f3 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransfer.cs
@@ -114,4 +114,14 @@ public partial class WmsMaterialTransfer : BaseEntity
///
public string? order_code { get; set; }
+ ///
+ /// 载具数量
+ ///
+ public int? carry_count { get; set; }
+
+ ///
+ /// 可绑定料架的载具数量
+ ///
+ public int? remainbindracknum { get; set; }
+
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs
index 024b8f9a..2a51b331 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsMaterialTransferD.cs
@@ -92,4 +92,5 @@ public partial class WmsMaterialTransferD : BaseEntity
///
public string? material_ex { get; set; }
+
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/wms_material_transfer_carry.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/wms_material_transfer_carry.cs
new file mode 100644
index 00000000..6c37120c
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/wms_material_transfer_carry.cs
@@ -0,0 +1,71 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities.Entity;
+
+///
+/// 转库单载具表
+///
+[SugarTable("wms_material_transfer_carry")]
+public partial class WmsMaterialTransferCarry : BaseEntity
+{
+ public WmsMaterialTransferCarry()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 转库单id
+ ///
+ public string? bill_id { get; set; }
+
+ ///
+ /// 载具ID
+ ///
+ public string? carry_id { get; set; }
+
+ ///
+ /// 载具编号
+ ///
+ public string? carry_code { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 起点库位id
+ ///
+ public string? startlocation_id { get; set; }
+
+ ///
+ /// 起点库位编码
+ ///
+ public string? startlocation_code { get; set; }
+
+ ///
+ /// 终点库位id
+ ///
+ public string? endlocation_id { get; set; }
+
+ ///
+ /// 终点库位编码
+ ///
+ public string? endlocation_code { get; set; }
+
+ ///
+ /// 转库单物料明细id
+ ///
+ public string? mat_bill_id { get; set; }
+
+ ///
+ /// 料箱数量
+ ///
+ public decimal? qty { get; set; }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 476591f3..e45fc167 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -302,6 +302,13 @@ namespace Tnb.WarehouseMgr
codeqty = b.codeqty
}).ToList().Select(r =>
{
+ // 如果可出库数量已经扣减完
+ if (input.qty <= 0)
+ {
+ return new Tuple("", r.WmsCarryH, r.WmsCarryCode, r.BasLocation);
+ }
+
+ // 扣减可出库数量
input.qty = input.qty - r.codeqty;
// 出库数量与托盘上的数量不一致需要进行分拣
@@ -315,7 +322,7 @@ namespace Tnb.WarehouseMgr
// 正常预任务出库
return new Tuple("预任务", r.WmsCarryH, r.WmsCarryCode, r.BasLocation);
}
- }).ToList();
+ }).Where(r => r.Item1 != "").ToList();
return items;
}
@@ -547,7 +554,7 @@ namespace Tnb.WarehouseMgr
}
///
- /// // 二楼机械臂
+ /// 二楼机械臂
///
///
public async Task Floor2MechanicalComplete(WmsDistaskH disTask, string action)
@@ -673,6 +680,15 @@ namespace Tnb.WarehouseMgr
{
throw new Exception($@"【上升降机】设定升上升降机满托{target.stackingposition}移走 结果为 {result}");
}
+
+ // 更新料架在二楼配送的目标工位
+ // todo erp工位字段取数位置未确定
+ string targetWorkstation = "003-01-01-01";
+ Logger.LogInformation($@"【上升降机】更新料架 {target.rackcode} 在二楼配送的目标工位 {targetWorkstation}");
+ await db.Updateable().SetColumns(r => new WmsCarryH
+ {
+ work_station = targetWorkstation
+ }).Where(r => r.id == target.rackid).ExecuteCommandAsync();
}
else if (target.note == "下升降机")
{
@@ -684,12 +700,6 @@ namespace Tnb.WarehouseMgr
}
}
- //回写出库单状态
- await db.Updateable().SetColumns(r => new WmsEmptyOutstockH
- {
- bindrackcomplete = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID
- }).Where(r => r.bill_code == target.outbill).ExecuteCommandAsync();
-
// 重置料架区
await db.Updateable().SetColumns(r => new WmsMechanicalArmH
{
@@ -721,26 +731,26 @@ namespace Tnb.WarehouseMgr
private async Task Floor2UpDownMachinecode_SetTag(string tag, string value)
{
- //string DevName = "东面提升机输送线";
- //Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase)
- //{
- // ["DevName"] = DevName,
- // ["token"] = _eleCtlCfg.token,
- // ["TagName"] = tag,
- // ["Value"] = value,
- //};
- //string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
+ string DevName = "东面提升机输送线";
+ Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase)
+ {
+ ["DevName"] = DevName,
+ ["token"] = _eleCtlCfg.token,
+ ["TagName"] = tag,
+ ["Value"] = value,
+ };
+ string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
- //return result.Contains("Ok");
+ return result.Contains("Ok");
// 测试
- string DevName = "东面提升机输送线";
+ //string DevName = "东面提升机输送线";
- JObject valueJson = new JObject();
- valueJson["Value"] = value;
+ //JObject valueJson = new JObject();
+ //valueJson["Value"] = value;
- bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
- return true;
+ //bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
+ //return true;
}
///
@@ -1100,7 +1110,7 @@ namespace Tnb.WarehouseMgr
Logger.Information($@"【CTUTaskExecute】 获取任务TaskCodes: {JsonConvert.SerializeObject(TaskCodes)}");
var InTasks = CTUTasks.Where(a => a.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID).ToList();
- var OutTasks = CTUTasks.Where(a => a.task_type == WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID).ToList();
+ var OutTasks = CTUTasks.Where(a => a.task_type == WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID || a.task_type == WmsWareHouseConst.BIZTYPE_WMSTRANSFER_ID).ToList();
//Logger.Information($@"【CTUTaskExecute】 获取任务InTasks: {JsonConvert.SerializeObject(InTasks)}");
//Logger.Information($@"【CTUTaskExecute】 获取任务OutTasks: {JsonConvert.SerializeObject(OutTasks)}");
@@ -1297,7 +1307,7 @@ namespace Tnb.WarehouseMgr
BillCode = $"{groups}-" + (orgdistaskHs.Count + newdistaskHs.Count + 1);
}
}
- else if (distaskH.task_type == WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID)
+ else if (distaskH.task_type == WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID || distaskH.task_type == WmsWareHouseConst.BIZTYPE_WMSTRANSFER_ID)
{
var orgdistaskHs = OriginDistaskH.Where(p => p.status == WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID && p.task_type == WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID && p.endpoint_id == distaskH.endpoint_id).ToList();
var newdistaskHs = NewdistaskHs = OriginDistaskH.Where(p => p.status == WmsWareHouseConst.TASK_BILL_STATUS_DZX_ID && p.task_type == WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID && p.endpoint_id == distaskH.endpoint_id).ToList();
@@ -1775,7 +1785,7 @@ namespace Tnb.WarehouseMgr
is_lock = 0,
is_use = multiList[i].carry_status
};
- if (multiList[i].carry_status.ToEnum() == EnumCarryStatus.空闲)
+ if (!string.IsNullOrEmpty(multiList[i].carry_status) && multiList[i].carry_status.ToEnum() == EnumCarryStatus.空闲)
{
loc.is_use = ((int)EnumCarryStatus.占用).ToString();
}
@@ -1824,12 +1834,6 @@ namespace Tnb.WarehouseMgr
await _db.Updateable().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
}
}
- // 原材料转库单
- else if (dt.biz_type == WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID)
- {
- WmsCarryCode wmsCarryCode = await _db.Queryable().Where(r => r.carry_id == dt.carry_id).FirstAsync();
- await _db.Updateable().SetColumns(r => r.yzqty == r.yzqty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync();
- }
#endregion
List disTaskCodes = await _db.Queryable().Where(it => it.bill_id == dt.id).ToListAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
index 61147bac..1d08c58d 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs
@@ -33,6 +33,7 @@ using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Microsoft.Extensions.Logging;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Entitys.Permission;
+using Aop.Api.Domain;
namespace Tnb.WarehouseMgr
{
@@ -43,7 +44,7 @@ namespace Tnb.WarehouseMgr
[ServiceModule(BizTypeId)]
public class WmsMaterialTransferService : BaseWareHouseService
{
- private const string BizTypeId = "";
+ private const string BizTypeId = "34354738929685";
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
@@ -51,6 +52,8 @@ namespace Tnb.WarehouseMgr
private readonly IBillRullService _billRullService;
private readonly IUserManager _userManager;
+ public static SemaphoreSlim s_taskDistributeToZCC = new(1);
+
public WmsMaterialTransferService(
ISqlSugarRepository repository,
IRunService runService,
@@ -80,6 +83,8 @@ namespace Tnb.WarehouseMgr
.InnerJoin((a, b, c) => c.Id == a.create_id)
.InnerJoin((a, b, c, d) => d.id == a.warehouse_outstock)
.InnerJoin((a, b, c, d, e) => e.id == a.warehouse_instock)
+ // 只显示未完成的单据
+ .Where( a => a.status != "25065149810453")
.Select((a, b, c, d, e) => new WmsMaterialTransfer
{
id = a.id,
@@ -94,7 +99,7 @@ namespace Tnb.WarehouseMgr
status = b.FullName,
bill_date = a.bill_date,
warehouse_outstock = d.whname,
- warehouse_instock = d.whname,
+ warehouse_instock = e.whname,
type = a.type,
biller_out = a.biller_out,
depart_out = a.depart_out,
@@ -113,9 +118,9 @@ namespace Tnb.WarehouseMgr
foreach (dynamic row in mainTable)
{
- row.deliver_date = row.deliver_date.Value.ToString("yyyy-MM-dd");
- row.arrival_date = row.arrival_date.Value.ToString("yyyy-MM-dd");
- row.create_time = row.create_time.Value.ToString("yyyy-MM-dd");
+ row.deliver_date = row.deliver_date.Value?.ToString("yyyy-MM-dd");
+ row.arrival_date = row.arrival_date.Value?.ToString("yyyy-MM-dd");
+ row.create_time = row.create_time.Value?.ToString("yyyy-MM-dd");
}
List wmsTransferInstockDs = _db.Queryable((a, b) =>
@@ -235,6 +240,12 @@ namespace Tnb.WarehouseMgr
WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable().FirstAsync(it => it.id == input.source_id);
WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable().FirstAsync(it => it.id == wmsMaterialTransferD.bill_id);
+
+ if (wmsMaterialTransferD.yxfqty == wmsMaterialTransferD.qty)
+ {
+ throw new AppFriendlyException("已下发数量已达到转库数量", 500);
+ }
+
await s_taskExecuteSemaphore.WaitAsync();
await _db.Ado.BeginTranAsync();
@@ -280,6 +291,8 @@ namespace Tnb.WarehouseMgr
commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID;
commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
commonCreatePretaskInput.require_id = input.source_id;
+ commonCreatePretaskInput.carry_id = wmsCarryH.id;
+ commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
@@ -303,7 +316,7 @@ namespace Tnb.WarehouseMgr
finally
{
_ = s_taskExecuteSemaphore.Release();
- await InvokeGenPretaskExcute();
+ InvokeGenPretaskExcute();
}
return await ToApiResult(HttpStatusCode.OK, "成功");
@@ -321,12 +334,221 @@ namespace Tnb.WarehouseMgr
Logger.LogWarning($"【ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码");
return;
}
+ // 更新已转数量
bool isOk = await _db.Updateable().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCode.codeqty })
.Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
- if (!isOk)
+
+ // 如果所有明细已完成 更新主表状态为完成
+ WmsMaterialTransferD wmsMaterialTransferd = await _db.Queryable().Where(r => r.id == input.requireId).SingleAsync();
+ List wmsMaterialTransferDs = _db.Queryable()
+ .Where(a => a.bill_id == wmsMaterialTransferd.bill_id && a.yzqty < a.qty).ToList();
+ bool isOk2 = true;
+ if (wmsMaterialTransferDs.Count == 0)
+ {
+ isOk2 = await _db.Updateable().SetColumns(it => new WmsMaterialTransfer { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
+ .Where(it => it.id == wmsMaterialTransferd.bill_id).ExecuteCommandHasChangeAsync();
+ }
+
+
+ if (!isOk || !isOk2)
{
throw Oops.Oh(ErrorCode.COM1001);
}
}
+
+ ///
+ /// 中储仓下发到二楼暂存仓
+ ///
+ ///
+ ///
+ ///
+ [HttpPost, NonUnify, AllowAnonymous]
+ public async Task DistributeToZCC(MaterialTransferDistributeToZCCInput input)
+ {
+ s_taskDistributeToZCC.Wait();
+
+ try
+ {
+ WmsMaterialTransfer wmsMaterialTransfer = _db.Queryable().Where(r => r.id == input.source_id).First();
+ if (wmsMaterialTransfer == null)
+ {
+ Logger.LogWarning($"不存在id为{input.source_id}的转库单!");
+ throw new AppFriendlyException($"不存在id为{input.source_id}的转库单!", 500);
+ }
+ if (wmsMaterialTransfer.status != WmsWareHouseConst.BILLSTATUS_ADD_ID)
+ {
+ Logger.LogWarning($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓下发到二楼暂存仓任务!");
+ throw new AppFriendlyException($@"当前转库单状态为{wmsMaterialTransfer.status},不能下发中储仓下发到二楼暂存仓任务!", 500);
+ }
+
+ List wmsMaterialTransferds = _db.Queryable().Where(r => r.bill_id == input.source_id).ToList();
+
+ // 转库单载具子表
+ List wmsMaterialTransferCarrys = new List();
+
+ foreach (WmsMaterialTransferD wmsMaterialTransferD in wmsMaterialTransferds)
+ {
+ //出库取起点,获取所有符合输入的载具规格的载具
+ OutStockStrategyQuery OutStockStrategyInput = new()
+ {
+ warehouse_id = "2",
+ material_id = wmsMaterialTransferD.material_id,
+ code_batch = wmsMaterialTransferD.code_batch
+ };
+ List? carrys = await _wareHouseService.OutStockStrategy(OutStockStrategyInput);
+
+ // 需要转库数量
+ decimal? needOut = wmsMaterialTransferD.qty;
+
+ foreach (WmsCarryH wmsCarryH in carrys)
+ {
+ if (needOut <= 0)
+ {
+ break;
+ }
+ WmsCarryCode wmsCarryCode = _db.Queryable().Where(r => r.carry_id == wmsCarryH.id).First();
+ needOut -= wmsCarryCode.codeqty;
+
+ BasLocation endlocation_ssx = await _db.Queryable().Where(r => new string[2] { "32609229889045", "32609238573589" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync();
+ await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync();
+
+ // 转库单载具子表
+ WmsMaterialTransferCarry wmsMaterialTransferCarry = new WmsMaterialTransferCarry();
+ wmsMaterialTransferCarry.bill_id = input.source_id;
+ wmsMaterialTransferCarry.carry_id = wmsCarryH.id;
+ wmsMaterialTransferCarry.carry_code = wmsCarryH.carry_code;
+ wmsMaterialTransferCarry.create_id = input.create_id;
+ wmsMaterialTransferCarry.create_time = DateTime.Now;
+ wmsMaterialTransferCarry.endlocation_id = endlocation_ssx.id;
+ wmsMaterialTransferCarry.endlocation_code = endlocation_ssx.location_code;
+ wmsMaterialTransferCarry.startlocation_id = wmsCarryH.location_id;
+ wmsMaterialTransferCarry.startlocation_code = wmsCarryH.location_code;
+ wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
+ wmsMaterialTransferCarry.qty = wmsCarryCode.codeqty;
+ wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
+ }
+
+ if (needOut > 0)
+ {
+ throw new AppFriendlyException($"物料{wmsMaterialTransferD.material_code}没有足够的库存!,缺失数量为{needOut}", 500);
+ }
+ }
+
+ await _db.Ado.BeginTranAsync();
+
+ await _db.Updateable().SetColumns(r => new WmsMaterialTransfer
+ {
+ status = WmsWareHouseConst.BILLSTATUS_ON_ID,
+ carry_count = wmsMaterialTransferCarrys.Count,
+ remainbindracknum = wmsMaterialTransferCarrys.Count
+ }).Where(r => r.id == input.source_id).ExecuteCommandAsync();
+ Logger.LogInformation($"【DistributeToZCC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
+
+ await _db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
+ Logger.LogInformation($"【DistributeToZCC插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
+
+ foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys)
+ {
+ CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
+ commonCreatePretaskInput.startlocation_id = wmsMaterialTransferCarry.startlocation_id;
+ commonCreatePretaskInput.endlocation_id = wmsMaterialTransferCarry.endlocation_id;
+ commonCreatePretaskInput.carry_id = wmsMaterialTransferCarry.carry_id;
+ commonCreatePretaskInput.carry_code = wmsMaterialTransferCarry.carry_code;
+ commonCreatePretaskInput.task_type = WmsWareHouseConst.BIZTYPE_WMSTRANSFER_ID;
+ commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID;
+ commonCreatePretaskInput.require_id = wmsMaterialTransferCarry.mat_bill_id;
+ commonCreatePretaskInput.isExcuteMission = false;
+
+ var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
+ if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
+ {
+ Logger.LogInformation($"【DistributeToZCC生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
+ throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
+ }
+
+ await _db.Updateable().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
+ }
+ Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
+
+
+ await _db.Ado.CommitTranAsync();
+ }
+ catch(Exception ex)
+ {
+ await _db.Ado.RollbackTranAsync();
+ Logger.LogError("【DistributeToZCC】" + ex.Message);
+ Logger.LogError("【DistributeToZCC】" + ex.StackTrace);
+ return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
+ }
+ finally
+ {
+ s_taskDistributeToZCC.Release();
+ InvokeGenPretaskExcute();
+ }
+ return await ToApiResult(HttpStatusCode.OK, "成功");
+ }
+
+ ///
+ /// 从暂存仓呼叫料架到产线
+ ///
+ ///
+ ///
+ ///
+ [HttpPost, NonUnify, AllowAnonymous]
+ public async Task CallRackToProductionLine(MaterialTransferCallRackToProductionLineInput input)
+ {
+ WmsCarryH wmsCarryH = _db.Queryable().Where(r => r.carry_code == input.carry_code).First();
+ if (wmsCarryH == null)
+ {
+ Logger.LogWarning($"不存在编码为{input.carry_code}的料架号!");
+ throw new AppFriendlyException($"不存在编码为{input.carry_code}的料架号!", 500);
+ }
+ if (string.IsNullOrEmpty(wmsCarryH.work_station))
+ {
+ Logger.LogWarning($"此料架目标工位为空!{input.carry_code}");
+ throw new AppFriendlyException($"此料架目标工位为空!{input.carry_code}!", 500);
+ }
+
+ if (string.IsNullOrEmpty(wmsCarryH.location_id))
+ {
+ Logger.LogWarning($"此料架的库位为空!{input.carry_code}");
+ throw new AppFriendlyException($"此料架的库位为空!{input.carry_code}", 500);
+ }
+
+ BasLocation endlocation = _db.Queryable().Where(r => r.location_code == wmsCarryH.work_station).First();
+
+ WmsDistaskH wmsDistaskH = _db.Queryable().Where(r => r.carry_code == wmsCarryH.carry_code && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).First();
+ if (wmsDistaskH != null)
+ {
+ Logger.LogWarning($"此料架{input.carry_code}存在未完成的任务{wmsDistaskH.bill_code}!");
+ throw new AppFriendlyException($"此料架{input.carry_code}存在未完成的任务{wmsDistaskH.bill_code}!", 500);
+ }
+
+ try
+ {
+ CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
+ commonCreatePretaskInput.startlocation_id = wmsCarryH.location_id;
+ commonCreatePretaskInput.endlocation_id = endlocation.id;
+ commonCreatePretaskInput.carry_id = wmsCarryH.id;
+ commonCreatePretaskInput.carry_code = wmsCarryH.carry_code;
+ commonCreatePretaskInput.task_type = "";
+ commonCreatePretaskInput.biz_type = "";
+
+ var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput);
+ if (res.code != JNPF.Common.Enums.HttpStatusCode.OK)
+ {
+ Logger.LogInformation($"【CallRackToProductionLine】生成预任务失败 载具 {wmsCarryH.carry_code}");
+ throw new AppFriendlyException($"生成预任务失败 载具 {wmsCarryH.carry_code}", 500);
+ }
+ }
+ catch (Exception ex)
+ {
+ Logger.LogError("【CallRackToProductionLine】" + ex.Message);
+ Logger.LogError("【CallRackToProductionLine】" + ex.StackTrace);
+ return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message);
+ }
+
+ return await ToApiResult(HttpStatusCode.OK, "成功");
+ }
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs
index 16e5928d..c6cbe2b3 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs
@@ -18,6 +18,7 @@ using Tnb.BasicData;
using Tnb.BasicData.Entities;
using Tnb.ProductionMgr.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;
@@ -27,8 +28,10 @@ using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
[OverideVisualDev(ModuleConsts.MODULE_WMSPRDINSTOCK_ID)]
+ [ServiceModule(BizTypeId)]
public class WmsPrdInstockHService : BaseWareHouseService
{
+ private const string BizTypeId = "34467501190677";
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
index 24ff3d29..98b02f4e 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs
@@ -154,7 +154,7 @@ namespace Tnb.WarehouseMgr
decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal();
if (canOutstockQty < input.qty)
{
- throw new AppFriendlyException($@"当前可出库数量只有 {canOutstockQty}", 500);
+ throw new AppFriendlyException($@"当前可出库数量只有 {canOutstockQty.ToString("G")}", 500);
}
List> items_sorttask = items.Where(r => r.Item1 == "分拣任务").ToList();