执行代码清理,修复warning
This commit is contained in:
@@ -68,48 +68,48 @@ namespace Tnb.WarehouseMgr
|
||||
//{
|
||||
// ct?.ThrowIfCancellationRequested();
|
||||
//}
|
||||
var curDb = _db.CopyNew();
|
||||
SqlSugarClient curDb = _db.CopyNew();
|
||||
try
|
||||
{
|
||||
await curDb.Ado.BeginTranAsync();
|
||||
|
||||
var kittingOuts = await curDb.Queryable<WmsKittingoutH>()
|
||||
List<WmsKittingoutH> kittingOuts = await curDb.Queryable<WmsKittingoutH>()
|
||||
.Where(a => a.status == WmsWareHouseConst.BILLSTATUS_ADD_ID)
|
||||
.OrderBy(a => a.seq)
|
||||
.ToListAsync();
|
||||
// 是否有已呼叫的齐套出库任务
|
||||
// var set = true ; 如果有 把set修改为false
|
||||
var items = await curDb.Queryable<WmsKittingoutH>().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_CALLED_ID).ToListAsync();
|
||||
var isCalled = items?.Count > 0;
|
||||
List<WmsKittingoutH> items = await curDb.Queryable<WmsKittingoutH>().Where(it => it.status == WmsWareHouseConst.BILLSTATUS_CALLED_ID).ToListAsync();
|
||||
bool isCalled = items?.Count > 0;
|
||||
|
||||
if (kittingOuts?.Count > 0)
|
||||
{
|
||||
foreach (var ko in kittingOuts)
|
||||
foreach (WmsKittingoutH ko in kittingOuts)
|
||||
{
|
||||
//a.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID
|
||||
|
||||
Expression<Func<WmsCarryH, bool>> whereExp = (ko.carry_id != null) ? a => a.id == ko.carry_id : a => a.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID;
|
||||
|
||||
var carrys = await curDb.Queryable<WmsCarryH>()
|
||||
List<WmsCarryH> carrys = await curDb.Queryable<WmsCarryH>()
|
||||
.InnerJoin<WmsCollocationSchemeH>((a, b) => a.collocation_scheme_id == b.id)
|
||||
.Where(whereExp.And(a => a.collocation_scheme_id == ko.collocation_scheme_id && a.is_lock == 0))
|
||||
.OrderBy((a, b) => b.seq)
|
||||
.ToListAsync();
|
||||
if (carrys?.Count > 0)
|
||||
{
|
||||
var firstCarry = carrys.FirstOrDefault();
|
||||
WmsCarryH? firstCarry = carrys.FirstOrDefault();
|
||||
GenPreTaskUpInput genPreTaskInput = new() { CarryId = firstCarry?.id };
|
||||
await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1, out_status = EnumOutStatus.全部出.ToString() }, null!);
|
||||
ko.status = WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID;
|
||||
ko.carry_id = firstCarry?.id;
|
||||
ko.carry_code = firstCarry?.carry_code;
|
||||
await _db.Updateable(ko).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync();
|
||||
_ = await _db.Updateable(ko).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync();
|
||||
_ = KittingOutByIsToBeShipped();
|
||||
if (firstCarry != null)
|
||||
{
|
||||
firstCarry.source_id = ko.source_id;
|
||||
firstCarry.source_code = ko.source_code;
|
||||
await _db.Updateable(firstCarry).UpdateColumns(it => new { it.source_id, it.source_code }).ExecuteCommandAsync();
|
||||
_ = await _db.Updateable(firstCarry).UpdateColumns(it => new { it.source_id, it.source_code }).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -117,7 +117,7 @@ namespace Tnb.WarehouseMgr
|
||||
//if(false) 跳出 插入完一次齐套分拣 set 改为false
|
||||
if (!isCalled)
|
||||
{
|
||||
var setSortingH = ko.Adapt<WmsSetsortingH>();
|
||||
WmsSetsortingH setSortingH = ko.Adapt<WmsSetsortingH>();
|
||||
setSortingH.warehouse_id = WmsWareHouseConst.WAREHOUSE_ZC_ID;
|
||||
setSortingH.id = SnowflakeIdHelper.NextId();
|
||||
setSortingH.kittingout_id = ko.id;
|
||||
@@ -125,10 +125,10 @@ namespace Tnb.WarehouseMgr
|
||||
setSortingH.org_id = _userManager.User.OrganizeId;
|
||||
setSortingH.create_id = _userManager.UserId;
|
||||
setSortingH.create_time = DateTime.Now;
|
||||
await curDb.Insertable(setSortingH).ExecuteCommandAsync();
|
||||
_ = await curDb.Insertable(setSortingH).ExecuteCommandAsync();
|
||||
|
||||
var kittingOutDetails = await curDb.Queryable<WmsKittingoutD>().Where(it => it.bill_id == ko.id).ToListAsync();
|
||||
var setSortDetails = kittingOutDetails.Adapt<List<WmsSetsortingD>>();
|
||||
List<WmsKittingoutD> kittingOutDetails = await curDb.Queryable<WmsKittingoutD>().Where(it => it.bill_id == ko.id).ToListAsync();
|
||||
List<WmsSetsortingD> setSortDetails = kittingOutDetails.Adapt<List<WmsSetsortingD>>();
|
||||
setSortDetails.ForEach(x =>
|
||||
{
|
||||
x.id = SnowflakeIdHelper.NextId();
|
||||
@@ -138,9 +138,9 @@ namespace Tnb.WarehouseMgr
|
||||
x.create_id = _userManager.UserId;
|
||||
x.create_time = DateTime.Now;
|
||||
});
|
||||
await curDb.Insertable(setSortDetails).ExecuteCommandAsync();
|
||||
_ = await curDb.Insertable(setSortDetails).ExecuteCommandAsync();
|
||||
ko.status = WmsWareHouseConst.BILLSTATUS_CALLED_ID;
|
||||
await curDb.Updateable(ko).UpdateColumns(it => it.status).ExecuteCommandAsync();
|
||||
_ = await curDb.Updateable(ko).UpdateColumns(it => it.status).ExecuteCommandAsync();
|
||||
isCalled = true;
|
||||
//await Publish(nameof(IWmsSetSortingService.PackSortingByAdd));
|
||||
}
|
||||
@@ -161,7 +161,7 @@ namespace Tnb.WarehouseMgr
|
||||
RequestMethod = App.HttpContext?.Request?.Method,
|
||||
userIdentity = await GetUserIdentity(_userManager.ToKen),
|
||||
};
|
||||
var timedTaskEx = ex.ToTimedTaskException(ei);
|
||||
TimedTaskException timedTaskEx = ex.ToTimedTaskException(ei);
|
||||
//cts?.Cancel();
|
||||
throw timedTaskEx;
|
||||
}
|
||||
@@ -176,24 +176,24 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
//if (UserManager.AsscessToken.IsNullOrWhiteSpace()) return;
|
||||
//var curUser = await GetUserIdentity();
|
||||
var curDb = _db.CopyNew();
|
||||
SqlSugarClient curDb = _db.CopyNew();
|
||||
try
|
||||
{
|
||||
var kittingOuts = await curDb.Queryable<WmsKittingoutH>()
|
||||
List<WmsKittingoutH> kittingOuts = await curDb.Queryable<WmsKittingoutH>()
|
||||
.Where(a => a.status == WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID)
|
||||
.OrderBy(a => a.seq)
|
||||
.ToListAsync();
|
||||
if (kittingOuts?.Count > 0)
|
||||
{
|
||||
var grpList = kittingOuts.GroupBy(g => g.location_id).ToList();
|
||||
foreach (var koGrp in grpList)
|
||||
List<IGrouping<string?, WmsKittingoutH>> grpList = kittingOuts.GroupBy(g => g.location_id).ToList();
|
||||
foreach (IGrouping<string?, WmsKittingoutH>? koGrp in grpList)
|
||||
{
|
||||
var locs = await curDb.Queryable<BasLocation>().Where(it => it.id == koGrp.Key && it.is_use == ((int)EnumCarryStatus.空闲).ToString() && it.is_lock == 0).ToListAsync();
|
||||
List<BasLocation> locs = await curDb.Queryable<BasLocation>().Where(it => it.id == koGrp.Key && it.is_use == ((int)EnumCarryStatus.空闲).ToString() && it.is_lock == 0).ToListAsync();
|
||||
if (locs?.Count > 0)
|
||||
{
|
||||
var arr = koGrp.ToArray();
|
||||
var ko = arr[^arr.Length];
|
||||
var carry = await curDb.Queryable<WmsCarryH>().SingleAsync(it => it.id == ko.carry_id);
|
||||
WmsKittingoutH[] arr = koGrp.ToArray();
|
||||
WmsKittingoutH ko = arr[^arr.Length];
|
||||
WmsCarryH carry = await curDb.Queryable<WmsCarryH>().SingleAsync(it => it.id == ko.carry_id);
|
||||
if (carry != null)
|
||||
{
|
||||
|
||||
@@ -202,15 +202,19 @@ namespace Tnb.WarehouseMgr
|
||||
if (sPoint != null && ePoint != null)
|
||||
{
|
||||
//判断目标库位是否自动签收
|
||||
var loc = await curDb.Queryable<BasLocation>().SingleAsync(it => it.id == ePoint.location_id);
|
||||
var points = await _warehouseService.PathAlgorithms(sPoint.id, ePoint.id);
|
||||
if (points.Count <= 2) throw new AppFriendlyException("该路径不存在", 500);
|
||||
BasLocation loc = await curDb.Queryable<BasLocation>().SingleAsync(it => it.id == ePoint.location_id);
|
||||
List<WmsPointH> points = await _warehouseService.PathAlgorithms(sPoint.id, ePoint.id);
|
||||
if (points.Count <= 2)
|
||||
{
|
||||
throw new AppFriendlyException("该路径不存在", 500);
|
||||
}
|
||||
|
||||
if (points?.Count > 0)
|
||||
{
|
||||
var preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
|
||||
List<WmsPretaskH> preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
|
||||
{
|
||||
var sPoint = it.FirstOrDefault();
|
||||
var ePoint = it.LastOrDefault();
|
||||
WmsPointH? sPoint = it.FirstOrDefault();
|
||||
WmsPointH? ePoint = it.LastOrDefault();
|
||||
|
||||
WmsPretaskH preTask = new()
|
||||
{
|
||||
@@ -246,12 +250,12 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
preTasks[^1].is_sign = 0; // 修改最后一个元素的是否签收值
|
||||
}
|
||||
await _warehouseService.GenPreTask(preTasks, null!);
|
||||
var subCarrys = await curDb.Queryable<WmsCarryD>().Where(it => it.carry_id == ko.carry_id).ToListAsync();
|
||||
var carryIds = subCarrys.Select(x => x.carry_id).Concat(new[] { ko.carry_id }).Distinct().ToList();
|
||||
_ = await _warehouseService.GenPreTask(preTasks, null!);
|
||||
List<WmsCarryD> subCarrys = await curDb.Queryable<WmsCarryD>().Where(it => it.carry_id == ko.carry_id).ToListAsync();
|
||||
List<string?> carryIds = subCarrys.Select(x => x.carry_id).Concat(new[] { ko.carry_id }).Distinct().ToList();
|
||||
GenPreTaskUpInput genPreTaskInput = new() { CarryIds = carryIds!, LocationIds = new List<string> { carry.location_id!, ko.location_id! } };
|
||||
await _warehouseService.GenInStockTaskHandleAfter(genPreTaskInput, it => new WmsCarryH { is_lock = 1, carry_status = ((int)EnumCarryStatus.齐套).ToString() }, it => new BasLocation { is_lock = 1 });
|
||||
await curDb.Updateable<WmsKittingoutH>().SetColumns(it => it.status == WmsWareHouseConst.BILLSTATUS_ON_ID).Where(it => it.id == ko.id).ExecuteCommandAsync();
|
||||
_ = await curDb.Updateable<WmsKittingoutH>().SetColumns(it => it.status == WmsWareHouseConst.BILLSTATUS_ON_ID).Where(it => it.id == ko.id).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -271,7 +275,7 @@ namespace Tnb.WarehouseMgr
|
||||
RequestMethod = App.HttpContext?.Request?.Method,
|
||||
userIdentity = await GetUserIdentity(_userManager.ToKen),
|
||||
};
|
||||
var timedTaskEx = ex.ToTimedTaskException(ei);
|
||||
TimedTaskException timedTaskEx = ex.ToTimedTaskException(ei);
|
||||
//cts?.Cancel();
|
||||
throw timedTaskEx;
|
||||
|
||||
@@ -285,29 +289,33 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
public override async Task ModifyAsync(WareHouseUpInput input)
|
||||
{
|
||||
if (input == null) throw new ArgumentNullException(nameof(input));
|
||||
if (input == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(input));
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
|
||||
var carryId = input.carryIds[^input.carryIds.Count];
|
||||
var carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == carryId);
|
||||
var kods = await _db.Queryable<WmsKittingoutD>().Where(it => it.bill_id == input.requireId).ToListAsync();
|
||||
string carryId = input.carryIds[^input.carryIds.Count];
|
||||
WmsCarryH carry = await _db.Queryable<WmsCarryH>().SingleAsync(it => it.id == carryId);
|
||||
List<WmsKittingoutD>? kods = await _db.Queryable<WmsKittingoutD>().Where(it => it.bill_id == input.requireId).ToListAsync();
|
||||
//载具为料架时,取所有料箱的条码
|
||||
List<string> mCarryIds = new();
|
||||
if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID)
|
||||
{
|
||||
var carryDs = await _db.Queryable<WmsCarryD>().Where(it => it.carry_id == carryId).ToListAsync();
|
||||
List<WmsCarryD> carryDs = await _db.Queryable<WmsCarryD>().Where(it => it.carry_id == carryId).ToListAsync();
|
||||
mCarryIds = carryDs.Select(x => x.membercarry_id).ToList();
|
||||
}
|
||||
//当前载具对应的所有条码插入
|
||||
Expression<Func<WmsCarryCode, bool>> whereExp = mCarryIds?.Count > 0 ? a => mCarryIds.Contains(a.carry_id) : a => a.carry_id == carryId;
|
||||
|
||||
var carryCodes = await _db.Queryable<WmsCarryCode>().Where(whereExp).ToListAsync();
|
||||
var kittingoutCodes = carryCodes.Adapt<List<WmsKittingoutCode>>();
|
||||
List<WmsCarryCode> carryCodes = await _db.Queryable<WmsCarryCode>().Where(whereExp).ToListAsync();
|
||||
List<WmsKittingoutCode> kittingoutCodes = carryCodes.Adapt<List<WmsKittingoutCode>>();
|
||||
kittingoutCodes.ForEach(x =>
|
||||
{
|
||||
var billDId = kods?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id;
|
||||
string? billDId = kods?.Find(xx => xx.material_id == x.material_id && xx.code_batch == x.code_batch)?.id;
|
||||
if (billDId.IsNullOrEmpty())
|
||||
{
|
||||
billDId = kods?.Find(xx => xx.material_id == x.material_id)?.id;
|
||||
@@ -319,27 +327,20 @@ namespace Tnb.WarehouseMgr
|
||||
x.create_id = _userManager.UserId;
|
||||
x.create_time = DateTime.Now;
|
||||
});
|
||||
var row = await _db.Insertable(kittingoutCodes).ExecuteCommandAsync();
|
||||
var detailIds = kittingoutCodes.Select(x => x.bill_d_id).ToList();
|
||||
var curKittingoutDetails = kods.FindAll(x => detailIds.Contains(x.id));
|
||||
var dic = kittingoutCodes.GroupBy(g => g.bill_d_id).ToDictionary(x => x.Key, x => x.Select(x => x.codeqty).ToList());
|
||||
foreach (var kod in curKittingoutDetails)
|
||||
int row = await _db.Insertable(kittingoutCodes).ExecuteCommandAsync();
|
||||
List<string> detailIds = kittingoutCodes.Select(x => x.bill_d_id).ToList();
|
||||
List<WmsKittingoutD> curKittingoutDetails = kods.FindAll(x => detailIds.Contains(x.id));
|
||||
Dictionary<string, List<decimal>> dic = kittingoutCodes.GroupBy(g => g.bill_d_id).ToDictionary(x => x.Key, x => x.Select(x => x.codeqty).ToList());
|
||||
foreach (WmsKittingoutD kod in curKittingoutDetails)
|
||||
{
|
||||
if (dic.ContainsKey(kod.id))
|
||||
{
|
||||
kod.qty += dic[kod.id].Sum(d => d);
|
||||
if (kod.qty >= kod.pr_qty)
|
||||
{
|
||||
kod.line_status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID;
|
||||
}
|
||||
else
|
||||
{
|
||||
kod.line_status = WmsWareHouseConst.BILLSTATUS_ON_ID;
|
||||
}
|
||||
kod.line_status = kod.qty >= kod.pr_qty ? WmsWareHouseConst.BILLSTATUS_COMPLETE_ID : WmsWareHouseConst.BILLSTATUS_ON_ID;
|
||||
}
|
||||
}
|
||||
await _db.Updateable(curKittingoutDetails).ExecuteCommandAsync();
|
||||
var isOk = await _db.Updateable<WmsKittingoutH>().SetColumns(it => new WmsKittingoutH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
||||
_ = await _db.Updateable(curKittingoutDetails).ExecuteCommandAsync();
|
||||
bool isOk = await _db.Updateable<WmsKittingoutH>().SetColumns(it => new WmsKittingoutH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
||||
//if (carry != null)
|
||||
//{
|
||||
// row = await _carryService.UpdateNullCarry(carry);
|
||||
@@ -348,18 +349,22 @@ namespace Tnb.WarehouseMgr
|
||||
//判断当前载具是否为料架,如果是料架 清空所有料架/料箱数据,
|
||||
if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID && mCarryIds?.Count > 0)
|
||||
{
|
||||
var carrys = await _db.Queryable<WmsCarryH>().Where(it => mCarryIds.Contains(it.id)).ToListAsync();
|
||||
List<WmsCarryH> carrys = await _db.Queryable<WmsCarryH>().Where(it => mCarryIds.Contains(it.id)).ToListAsync();
|
||||
carrys.Add(carry);
|
||||
if (carrys?.Count > 0)
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
var tasks = new List<Task<Task<int>>>();
|
||||
Func<WmsCarryH, Task<int>>? upateNullCarryFunc = carryIt => Task.Run(() => _db.CopyNew().Updateable(carryIt).ExecuteCommandAsync());
|
||||
foreach (var carryIt in carrys)
|
||||
List<Task<Task<int>>> tasks = new();
|
||||
Task<int> upateNullCarryFunc(WmsCarryH carryIt)
|
||||
{
|
||||
return Task.Run(() => _db.CopyNew().Updateable(carryIt).ExecuteCommandAsync());
|
||||
}
|
||||
|
||||
foreach (WmsCarryH carryIt in carrys)
|
||||
{
|
||||
tasks.Add(_carryService.UpdateNullCarry(carryIt, upateNullCarryFunc));
|
||||
}
|
||||
var all = await Task.WhenAll(tasks.Select(t => t.Unwrap()));
|
||||
int[] all = await Task.WhenAll(tasks.Select(t => t.Unwrap()));
|
||||
if (all.All(x => x > 0))
|
||||
{
|
||||
isOk = all?.Length > 0;
|
||||
@@ -367,7 +372,10 @@ namespace Tnb.WarehouseMgr
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
}
|
||||
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
|
||||
if (!isOk)
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.COM1001);
|
||||
}
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
@@ -385,18 +393,22 @@ namespace Tnb.WarehouseMgr
|
||||
[HttpPost]
|
||||
public async Task<dynamic> MESKittingOutStk(List<MESKittingOutStkInput> input)
|
||||
{
|
||||
var isSuccessFul = false;
|
||||
if (input.IsNull()) throw new ArgumentNullException(nameof(input));
|
||||
bool isSuccessFul = false;
|
||||
if (input.IsNull())
|
||||
{
|
||||
throw new ArgumentNullException(nameof(input));
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
List<WmsKittingoutD> kittingOutDs = new();
|
||||
var kittingOuts = input.Adapt<List<WmsKittingoutH>>();
|
||||
var ids = input.Select(x => x.location_code).ToArray();
|
||||
List<WmsKittingoutH> kittingOuts = input.Adapt<List<WmsKittingoutH>>();
|
||||
string[] ids = input.Select(x => x.location_code).ToArray();
|
||||
|
||||
for (int i = 0; i < kittingOuts.Count; i++)
|
||||
{
|
||||
var x = kittingOuts[i];
|
||||
WmsKittingoutH x = kittingOuts[i];
|
||||
x.id = SnowflakeIdHelper.NextId();
|
||||
x.bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_KITTINGOUTSTK_ENCODE).GetAwaiter().GetResult();
|
||||
x.bill_date = DateTime.Now;
|
||||
@@ -404,7 +416,7 @@ namespace Tnb.WarehouseMgr
|
||||
x.status = WmsWareHouseConst.BILLSTATUS_ADD_ID;
|
||||
x.biz_type = WmsWareHouseConst.BIZTYPE_WMSKITTINGOUTSTK_ID;
|
||||
x.location_id = ids[i];
|
||||
var d = input[i]?.wmsKittingoutDs?.Adapt<List<WmsKittingoutD>>();
|
||||
List<WmsKittingoutD>? d = input[i]?.wmsKittingoutDs?.Adapt<List<WmsKittingoutD>>();
|
||||
d?.ForEach(it =>
|
||||
{
|
||||
it.id = SnowflakeIdHelper.NextId();
|
||||
@@ -419,8 +431,8 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
|
||||
await _db.Insertable(kittingOuts).ExecuteCommandAsync();
|
||||
await _db.Insertable(kittingOutDs).ExecuteCommandAsync();
|
||||
_ = await _db.Insertable(kittingOuts).ExecuteCommandAsync();
|
||||
_ = await _db.Insertable(kittingOutDs).ExecuteCommandAsync();
|
||||
|
||||
await _db.Ado.CommitTranAsync();
|
||||
await KittingOutByAdd();
|
||||
|
||||
Reference in New Issue
Block a user