This commit is contained in:
2023-08-24 15:11:20 +08:00
parent c90498a588
commit a0feb6152a
3 changed files with 203 additions and 6 deletions

View File

@@ -407,6 +407,7 @@ namespace Tnb.ProductionMgr
id = a.id,
mo_code = a.mo_code,
material_id = a.material_id,
type = (a.mo_type==DictConst.PrdMoTypeZS || a.mo_type==DictConst.PrdMoTypeJC ) ? 1 : 2,
material_code = b.code,
material_name = b.name,
material_standard = b.material_standard,
@@ -870,7 +871,7 @@ namespace Tnb.ProductionMgr
}
else
{
PageResult<PrdMoReverseFromMaterialOutput> output = JsonConvert.DeserializeObject<PageResult<PrdMoReverseFromMaterialOutput>>(authResponse.data.ToString(),new Tnb.Common.Utils.DateTimeJsonConverter());
PageResult<PrdMoReverseFromMaterialput> output = JsonConvert.DeserializeObject<PageResult<PrdMoReverseFromMaterialput>>(authResponse.data.ToString(),new Tnb.Common.Utils.DateTimeJsonConverter());
if (output.list != null && output.list.Count > 0)
{
output.list[0].feeding_num = await _db.Queryable<PrdMaterialReceiptD>()
@@ -931,7 +932,7 @@ namespace Tnb.ProductionMgr
}
/// <summary>
/// 物料反向追溯出信息
/// 物料反向追溯出信息
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
@@ -939,8 +940,123 @@ namespace Tnb.ProductionMgr
public async Task<dynamic> PrdMoReverseFromOutInfo(Dictionary<string, string> dic)
{
string feeding_detail_id = dic.ContainsKey("feeding_detail_id") ? dic["feeding_detail_id"] : "";
return null;
PrdFeedingD prdFeedingD = await _db.Queryable<PrdFeedingD>().FirstAsync(x => x.id == feeding_detail_id);
if(prdFeedingD.use_num<=0) return Array.Empty<string>();
PrdFeedingH prdFeedingH = await _db.Queryable<PrdFeedingH>().FirstAsync(x => x.id == prdFeedingD.feeding_id);
PrdMoTask prdMoTask = await _db.Queryable<PrdMoTask>().FirstAsync(x => x.id == prdFeedingH.mo_task_id);
List<PrdFeedingD> prdFeedingDs = await _db.Queryable<PrdFeedingD>()
.LeftJoin<PrdFeedingH>((a, b) => a.feeding_id == b.id)
.Where((a, b) => a.material_id == prdFeedingD.material_id && b.mo_task_id == prdFeedingH.mo_task_id && b.create_time<=prdFeedingH.create_time && a.id!=prdFeedingD.id)
.Select((a, b) => a).ToListAsync();
decimal beforeIn = prdFeedingDs.Sum(x => x.num);
List<string> reportIds = new List<string>();
if (prdMoTask.schedule_type == 1)
{
BasEbomH basEbomH = await _db.Queryable<BasEbomH>().SingleAsync(x => x.id == prdMoTask.ebom_id);
List<BasEbomD> basEbomDs = await _db.Queryable<BasEbomD>().Where(x => x.ebom_id == prdMoTask.ebom_id).ToListAsync();
BasEbomD basEbomD = basEbomDs.Where(x => x.material_id == prdFeedingD.material_id).FirstOrDefault();
if (basEbomD != null)
{
List<PrdReport> prdReports = await _db.Queryable<PrdReport>().Where(x => x.mo_task_id == prdMoTask.id).OrderBy(x=>x.create_time).ToListAsync();
if (prdReports != null && prdReports.Count > 0)
{
bool flag = true;
decimal residueNeed = 0;
foreach (var prdReport in prdReports)
{
var needNum = (prdReport.reported_qty ?? 0) / basEbomH.quantity * basEbomD.quantity;
if (beforeIn - needNum >= 0)
{
beforeIn -= needNum;
}
else
{
if (flag)
{
if (prdFeedingD.num > needNum - beforeIn)
{
residueNeed = prdFeedingD.num - (needNum - beforeIn);
reportIds.Add(prdReport.id);
}
else
{
reportIds.Add(prdReport.id);
break;
}
flag = false;
continue;
}
if (residueNeed - needNum > 0)
{
residueNeed -= needNum;
reportIds.Add(prdReport.id);
}else
{
reportIds.Add(prdReport.id);
break;
}
}
}
}
else
{
return Array.Empty<string>();
}
}
else
{
return Array.Empty<string>();
}
List<string> barCodes = await _db.Queryable<PrdReport>().Where(x=>reportIds.Contains(x.id)).Select(x=>x.barcode).ToListAsync();
string domain = (App.HttpContext.Request.IsHttps ? "https://" : "http://") + App.HttpContext.Request.Host;
Dictionary<string, object> header = new Dictionary<string, object>()
{
["Authorization"] = App.HttpContext.Request.Headers["Authorization"]
};
Dictionary<string, object> postData = new Dictionary<string, object>()
{
["org_id"] = _userManager.GetUserInfo().Result.organizeId,
["barcode"] = barCodes,
["currentPage"] = 1,
["pageSize"] = int.MaxValue,
};
var sendResult = HttpUtils.RequestPost(domain + WebApiConst.MES_FETCH_IN_OUT_STOCK_INFO_BY_BAR_CODE,JsonConvert.SerializeObject(postData),header);
Log.Information(sendResult);
AuthResponse authResponse = JsonConvert.DeserializeObject<AuthResponse>(sendResult);
if (authResponse.code != 200)
{
throw Oops.Bah(authResponse.msg);
}
else
{
BasMaterial basMaterial = await _db.Queryable<BasMaterial>().FirstAsync(x => x.id == prdMoTask.material_id);
PageResult<PrdMoReverseFromOutput> output = JsonConvert.DeserializeObject<PageResult<PrdMoReverseFromOutput>>(authResponse.data.ToString(),new Tnb.Common.Utils.DateTimeJsonConverter());
if (output.list != null && output.list.Count > 0)
{
foreach (var item in output.list)
{
item.material_name = basMaterial.name;
}
}
return output.list;
}
}
else
{
// var queryable = _db.Queryable<PrdMoTask>()
// .LeftJoin<BasMbomProcess>((a,b)=>a.mbom_process_id==b.id)
// .LeftJoin<PrdReport>((a,b,c)=>a.id==c.mo_task_id)
// .Where((a,b,c)=>a.)
return null;
}
}
#endregion