This commit is contained in:
2024-10-10 16:36:47 +08:00
parent 88d83e46d3
commit 8049743296
3 changed files with 255 additions and 211 deletions

View File

@@ -586,239 +586,251 @@ namespace Tnb.ProductionMgr
public override async Task ModifyAsync(WareHouseUpInput input)
{
Log.Information($"物料呼叫完成回更参数:{JsonConvert.SerializeObject(input)}");
if (input == null)
try
{
throw new ArgumentNullException(nameof(input));
}
if (string.IsNullOrEmpty(input.requireId))
{
throw Oops.Bah("来源id为空");
}
var db = _repository.AsSugarClient();
PrdMoTask moTask = await db.Queryable<PrdMoTask>().SingleAsync(x => x.id == input.requireId);
if (moTask == null)
{
throw Oops.Bah($"未找到来源id为{input.requireId}的生产任务单");
}
OrganizeEntity workshop = await _organizeService.GetAnyParentByWorkstationId(moTask.workstation_id, DictConst.RegionCategoryWorkshopCode);
List<PrdMaterialReceiptH> insertHList = new List<PrdMaterialReceiptH>();
List<PrdMaterialReceiptD> insertDList = new List<PrdMaterialReceiptD>();
List<PrdFeedingH> insertFHList = new List<PrdFeedingH>();
List<PrdFeedingD> insertFDList = new List<PrdFeedingD>();
List<string> clearCarryIds = new List<string>();
string orgId = WmsWareHouseConst.AdministratorOrgId;
// string userId = moTask.worker_id;
string userId = WmsWareHouseConst.AdministratorUserId;
if (_userManager != null && !string.IsNullOrEmpty(_userManager.UserId))
{
userId = _userManager.UserId;
}
foreach(string carryId in input.carryIds)
{
clearCarryIds.Add(carryId);
WmsCarryH carry = await db.Queryable<WmsCarryH>().SingleAsync(x => x.id == carryId);
string code = await _billRullService.GetBillNumber(Tnb.BasicData.CodeTemplateConst.MATERIAL_RECEIPT_CODE);
PrdMaterialReceiptH prdMaterialReceiptH = new PrdMaterialReceiptH()
if (input == null)
{
code = code,
station_id = moTask.workstation_id,
mo_task_id = moTask.id,
process_id = moTask.process_id,
equip_id = moTask.eqp_id,
workshop_id = workshop?.Id ?? "",
carry_id = carry.id,
workline_id = moTask.workline_id,
carry_code = carry.carry_code,
mbom_process_id = moTask.mbom_process_id,
create_id = userId,
create_time = DateTime.Now,
org_id = orgId
};
insertHList.Add(prdMaterialReceiptH);
throw new ArgumentNullException(nameof(input));
}
if (string.IsNullOrEmpty(input.requireId))
{
throw Oops.Bah("来源id为空");
}
var db = _repository.AsSugarClient();
PrdMoTask moTask = await db.Queryable<PrdMoTask>().SingleAsync(x => x.id == input.requireId);
if (moTask == null)
{
throw Oops.Bah($"未找到来源id为{input.requireId}的生产任务单");
}
OrganizeEntity workshop = await _organizeService.GetAnyParentByWorkstationId(moTask.workstation_id, DictConst.RegionCategoryWorkshopCode);
List<PrdMaterialReceiptH> insertHList = new List<PrdMaterialReceiptH>();
List<PrdMaterialReceiptD> insertDList = new List<PrdMaterialReceiptD>();
List<PrdFeedingH> insertFHList = new List<PrdFeedingH>();
List<PrdFeedingD> insertFDList = new List<PrdFeedingD>();
List<string> clearCarryIds = new List<string>();
string orgId = WmsWareHouseConst.AdministratorOrgId;
// string userId = moTask.worker_id;
string userId = WmsWareHouseConst.AdministratorUserId;
if (_userManager != null && !string.IsNullOrEmpty(_userManager.UserId))
{
userId = _userManager.UserId;
}
foreach(string carryId in input.carryIds)
{
clearCarryIds.Add(carryId);
WmsCarryH carry = await db.Queryable<WmsCarryH>().SingleAsync(x => x.id == carryId);
string code = await _billRullService.GetBillNumber(CodeTemplateConst.MATERIAL_RECEIPT_CODE);
PrdMaterialReceiptH prdMaterialReceiptH = new PrdMaterialReceiptH()
{
code = code,
station_id = moTask.workstation_id,
mo_task_id = moTask.id,
process_id = moTask.process_id,
equip_id = moTask.eqp_id,
workshop_id = workshop?.Id ?? "",
carry_id = carry.id,
workline_id = moTask.workline_id,
carry_code = carry.carry_code,
mbom_process_id = moTask.mbom_process_id,
create_id = userId,
create_time = DateTime.Now,
org_id = orgId
};
insertHList.Add(prdMaterialReceiptH);
string feedCode = await _billRullService.GetBillNumber(Tnb.BasicData.CodeTemplateConst.FEEDING_CODE);
PrdFeedingH prdFeedingH = new PrdFeedingH()
{
code = feedCode,
station_id = moTask.workstation_id,
mo_task_id = moTask.id,
process_id = moTask.process_id,
// equip_id = input.equip_id,
workshop_id = workshop?.Id,
carry_id = carry.id,
workline_id = moTask.workline_id,
carry_code = carry.carry_code,
// remark = input.remark,
mbom_process_id = moTask.mbom_process_id,
create_id = userId,
create_time = DateTime.Now,
org_id = orgId
};
insertFHList.Add(prdFeedingH);
string feedCode = await _billRullService.GetBillNumber(CodeTemplateConst.FEEDING_CODE);
PrdFeedingH prdFeedingH = new PrdFeedingH()
{
code = feedCode,
station_id = moTask.workstation_id,
mo_task_id = moTask.id,
process_id = moTask.process_id,
// equip_id = input.equip_id,
workshop_id = workshop?.Id,
carry_id = carry.id,
workline_id = moTask.workline_id,
carry_code = carry.carry_code,
// remark = input.remark,
mbom_process_id = moTask.mbom_process_id,
create_id = userId,
create_time = DateTime.Now,
org_id = orgId
};
insertFHList.Add(prdFeedingH);
List<WmsCarryCode> carryCodes = new List<WmsCarryCode>();
List<string> memberCarryIds = new List<string>();
List<WmsCarryH> memberCarrys = new List<WmsCarryH>();
if (carry.carrystd_id == WmsWareHouseConst.CARRY_ZYXCSTD_ID ||
carry.carrystd_id == WmsWareHouseConst.CARRY_ZYLJSTD_ID)
{
carryCodes = await db.Queryable<WmsCarryCode>().Where(x=>x.carry_id==carry.id).ToListAsync();
}
else
{
//CarryQueryOutput carryQueryOutput = await _wmsCarryQueryService.MESCarryQueryResult(new MESCarryQueryResultInput(){carry_code = carry.carry_code});
memberCarryIds = await db.Queryable<WmsCarryD>().Where(x=>x.carry_id==carry.id).Select(x=>x.membercarry_id).ToListAsync();
if (memberCarryIds == null || memberCarryIds.IsEmpty())
List<WmsCarryCode> carryCodes = new List<WmsCarryCode>();
List<string> memberCarryIds = new List<string>();
List<WmsCarryH> memberCarrys = new List<WmsCarryH>();
if (carry.carrystd_id == WmsWareHouseConst.CARRY_ZYXCSTD_ID ||
carry.carrystd_id == WmsWareHouseConst.CARRY_ZYLJSTD_ID)
{
throw Oops.Bah($"未找到载具编号{carry.carry_code}的子载具");
carryCodes = await db.Queryable<WmsCarryCode>().Where(x=>x.carry_id==carry.id).ToListAsync();
}
memberCarrys = await db.Queryable<WmsCarryH>().Where(x=>memberCarryIds.Contains(x.id)).ToListAsync();
carryCodes = await db.Queryable<WmsCarryCode>().Where(x=>memberCarryIds.Contains(x.carry_id)).ToListAsync();
clearCarryIds.AddRange(memberCarryIds);
}
if (carryCodes != null && carryCodes.Count > 0)
{
Log.Information($"签收载具信息{JsonConvert.SerializeObject(carryCodes)}");
foreach (var item in carryCodes)
else
{
// 自动签收不校验
// PrdMaterialReceiptD existD = await db.Queryable<PrdMaterialReceiptD>()
// .LeftJoin<PrdMaterialReceiptH>((x, y) => x.material_receipt_id == y.id)
// .Where((x, y) => x.carry_id == carry.id && y.mo_task_id == moTask.id && x.is_all_feeding == 0)
// .Select((x,y)=>x)
// .FirstAsync();
// if (existD != null)
// {
// throw new Exception($"{moTask.mo_task_code}任务单存在未投完的签收物料,物料签收子表id{existD.id}");
// }
PrdMaterialReceiptD detail = new PrdMaterialReceiptD
//CarryQueryOutput carryQueryOutput = await _wmsCarryQueryService.MESCarryQueryResult(new MESCarryQueryResultInput(){carry_code = carry.carry_code});
memberCarryIds = await db.Queryable<WmsCarryD>().Where(x=>x.carry_id==carry.id).Select(x=>x.membercarry_id).ToListAsync();
if (memberCarryIds == null || memberCarryIds.IsEmpty())
{
material_receipt_id = prdMaterialReceiptH.id,
material_id = item.material_id,
num = item.codeqty,
batch = item.code_batch,
unit_id = item.unit_id,
carry_id = carry.id,
barcode = item.barcode,
is_all_feeding = 1,
member_carry_id = item.carry_id,
member_carry_code = memberCarrys.Find(x => x.id == item.carry_id)?.carry_code ?? "",
feeding_num = item.codeqty,
supplier_id = item.supplier_id,
instock_time = item.instock_time,
check_conclusion = item.check_conclusion + "",
create_time = DateTime.Now,
};
insertDList.Add(detail);
decimal num = item.codeqty;
insertFDList.Add(new PrdFeedingD
throw Oops.Bah($"未找到载具编号{carry.carry_code}的子载具");
}
memberCarrys = await db.Queryable<WmsCarryH>().Where(x=>memberCarryIds.Contains(x.id)).ToListAsync();
carryCodes = await db.Queryable<WmsCarryCode>().Where(x=>memberCarryIds.Contains(x.carry_id)).ToListAsync();
clearCarryIds.AddRange(memberCarryIds);
}
if (carryCodes != null && carryCodes.Count > 0)
{
Log.Information($"签收载具信息{JsonConvert.SerializeObject(carryCodes)}");
foreach (var item in carryCodes)
{
feeding_id = prdFeedingH.id,
material_receipt_detail_id = detail?.id,
material_id = item.material_id,
num = num,
batch = item.code_batch,
unit_id = item.unit_id,
carry_id = carry.id,
status = "0",
use_num = 0,
});
// 自动签收不校验
// PrdMaterialReceiptD existD = await db.Queryable<PrdMaterialReceiptD>()
// .LeftJoin<PrdMaterialReceiptH>((x, y) => x.material_receipt_id == y.id)
// .Where((x, y) => x.carry_id == carry.id && y.mo_task_id == moTask.id && x.is_all_feeding == 0)
// .Select((x,y)=>x)
// .FirstAsync();
// if (existD != null)
// {
// throw new Exception($"{moTask.mo_task_code}任务单存在未投完的签收物料,物料签收子表id{existD.id}");
// }
PrdMaterialReceiptD detail = new PrdMaterialReceiptD
{
material_receipt_id = prdMaterialReceiptH.id,
material_id = item.material_id,
num = item.codeqty,
batch = item.code_batch,
unit_id = item.unit_id,
carry_id = carry.id,
barcode = item.barcode,
is_all_feeding = 1,
member_carry_id = item.carry_id,
member_carry_code = memberCarrys.Find(x => x.id == item.carry_id)?.carry_code ?? "",
feeding_num = item.codeqty,
supplier_id = item.supplier_id,
instock_time = item.instock_time,
check_conclusion = item.check_conclusion + "",
create_time = DateTime.Now,
};
insertDList.Add(detail);
decimal num = item.codeqty;
insertFDList.Add(new PrdFeedingD
{
feeding_id = prdFeedingH.id,
material_receipt_detail_id = detail?.id,
material_id = item.material_id,
num = num,
batch = item.code_batch,
unit_id = item.unit_id,
carry_id = carry.id,
status = "0",
use_num = 0,
});
if (carry.carrystd_id == WmsWareHouseConst.CARRY_ZYXCSTD_ID || carry.carrystd_id == WmsWareHouseConst.CARRY_ZYLJSTD_ID)
{
}
else
{
Result result = await _wmsCarryUnbindService.CarryCodeUnbindWithoutTran(new CarryCodeUnbindInput()
{
carry_id = detail.member_carry_id
},db);
if (result.code != HttpStatusCode.OK)
{
throw Oops.Bah(result.msg);
}
}
}
if (carry.carrystd_id == WmsWareHouseConst.CARRY_ZYXCSTD_ID || carry.carrystd_id == WmsWareHouseConst.CARRY_ZYLJSTD_ID)
{
}
else
{
Tnb.WarehouseMgr.Entities.Dto.Outputs.Result result = await _wmsCarryUnbindService.CarryCodeUnbindWithoutTran(new CarryCodeUnbindInput()
Result result = await _wmsCarryUnbindService.CarryCodeUnbindWithoutTran(new CarryCodeUnbindInput()
{
carry_id = detail.member_carry_id
carry_id = carry.id
},db);
if (result.code != JNPF.Common.Enums.HttpStatusCode.OK)
if (result.code != HttpStatusCode.OK)
{
throw Oops.Bah(result.msg);
}
}
}
if (carry.carrystd_id == WmsWareHouseConst.CARRY_ZYXCSTD_ID || carry.carrystd_id == WmsWareHouseConst.CARRY_ZYLJSTD_ID)
else
{
Tnb.WarehouseMgr.Entities.Dto.Outputs.Result result = await _wmsCarryUnbindService.CarryCodeUnbindWithoutTran(new CarryCodeUnbindInput()
throw Oops.Bah($"{carry.carry_code}未找到物料明细");
}
if (carry.carrystd_id==WmsWareHouseConst.CARRY_LXSTD_ID || carry.carrystd_id==WmsWareHouseConst.CARRY_LJSTD_ID)
{
Result result2 = await _wmsCarryUnbindService.CarryUnbindWithoutTran(new CarryBindInput()
{
carry_id = carry.id
org = prdFeedingH.org_id,
create_id = prdFeedingH.create_id,
carry_id = prdMaterialReceiptH.carry_id,
carry_code = prdMaterialReceiptH.carry_code,
carrystd_id = carry.carrystd_id,
membercarry_code = "",
membercarry_id = "",
},db);
if (result.code != JNPF.Common.Enums.HttpStatusCode.OK)
{
throw Oops.Bah(result.msg);
}
}
}
else
{
throw Oops.Bah($"{carry.carry_code}未找到物料明细");
}
if (carry.carrystd_id==WmsWareHouseConst.CARRY_LXSTD_ID || carry.carrystd_id==WmsWareHouseConst.CARRY_LJSTD_ID)
{
Tnb.WarehouseMgr.Entities.Dto.Outputs.Result result2 = await _wmsCarryUnbindService.CarryUnbindWithoutTran(new CarryBindInput()
{
org = prdFeedingH.org_id,
create_id = prdFeedingH.create_id,
carry_id = prdMaterialReceiptH.carry_id,
carry_code = prdMaterialReceiptH.carry_code,
carrystd_id = carry.carrystd_id,
membercarry_code = "",
membercarry_id = "",
},db);
if (result2.code != JNPF.Common.Enums.HttpStatusCode.OK)
{
throw Oops.Bah(result2.msg);
}
if (result2.code != HttpStatusCode.OK)
{
throw Oops.Bah(result2.msg);
}
}
}
}
}
Log.Information($"清空载具信息:{JsonConvert.SerializeObject(clearCarryIds)}");
string carryStatus = ((int)EnumCarryStatus.).ToString();
string isCheck = ((int)EnumCheckConclusion.).ToString();
foreach(string carryId in clearCarryIds)
{
await db.Updateable<WmsCarryH>()
.SetColumns(x => x.carry_status == carryStatus)
.SetColumns(x => x.is_check == isCheck)
.Where(x => x.id==carryId)
.ExecuteCommandAsync();
Log.Information($"更新载具{carryId}状态为空闲{carryStatus},检验为{isCheck}成功");
}
Log.Information($"清空载具信息:{JsonConvert.SerializeObject(clearCarryIds)}");
string carryStatus = ((int)EnumCarryStatus.).ToString();
string isCheck = ((int)EnumCheckConclusion.).ToString();
foreach(string carryId in clearCarryIds)
{
string sql = $"update wms_carry_h set carry_status='0',is_check='8' where id='{carryId}';";
Log.Information($"自动签收更新载具sql:{sql}");
await db.Ado.ExecuteCommandAsync(sql);
Log.Information($"用SQL更新载具{carryId}状态为空闲{carryStatus},检验为{isCheck}成功");
await db.Updateable<WmsCarryH>()
.SetColumns(x => x.carry_status == carryStatus)
.SetColumns(x => x.is_check == isCheck)
.Where(x => x.id==carryId)
.ExecuteCommandAsync();
Log.Information($"更新载具{carryId}状态为空闲{carryStatus},检验为{isCheck}成功");
}
if (insertHList.Count <= 0 || insertDList.Count <= 0)
{
throw Oops.Bah(ErrorCode.COM1000);
if (insertHList.Count <= 0 || insertDList.Count <= 0)
{
throw Oops.Bah(ErrorCode.COM1000);
}
int row1 = await db.Insertable(insertHList).ExecuteCommandAsync();
int row2 = await db.Insertable(insertDList).ExecuteCommandAsync();
int row3 = await db.Insertable(insertFHList).ExecuteCommandAsync();
int row4 = await db.Insertable(insertFDList).ExecuteCommandAsync();
if (row1 <= 0 || row2 <= 0 || row3<=0 || row4<=0)
{
throw Oops.Bah(ErrorCode.COM1000);
}
}
int row1 = await db.Insertable(insertHList).ExecuteCommandAsync();
int row2 = await db.Insertable(insertDList).ExecuteCommandAsync();
int row3 = await db.Insertable(insertFHList).ExecuteCommandAsync();
int row4 = await db.Insertable(insertFDList).ExecuteCommandAsync();
if (row1 <= 0 || row2 <= 0 || row3<=0 || row4<=0)
catch (Exception e)
{
throw Oops.Bah(ErrorCode.COM1000);
Logger.Error("自动签收投料失败:"+e.Message,e);
throw Oops.Bah(e.Message,e);
}
}
}