Merge branch 'dev' of https://git.tuotong-tech.com/tnb/tnb.server into dev
This commit is contained in:
@@ -18,4 +18,34 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage
|
||||
|
||||
public string? barcode { get; set; }
|
||||
}
|
||||
|
||||
public class PrdMoFromTwoQueryInput
|
||||
{
|
||||
public string mo_id { get; set; }
|
||||
public string mo_task_code { get; set; }
|
||||
public string barcode { get; set; }
|
||||
}
|
||||
|
||||
public class PrdMoFromThreeQueryInput
|
||||
{
|
||||
public string mo_task_id { get; set; }
|
||||
public string mo_task_code { get; set; }
|
||||
public string barcode { get; set; }
|
||||
}
|
||||
|
||||
public class PrdMoFromTabQueryInput
|
||||
{
|
||||
public string mo_task_id { get; set; }
|
||||
public string barcode { get; set; }
|
||||
}
|
||||
|
||||
public class PrdMoReverseFromQueryInput
|
||||
{
|
||||
public string barcode { get; set; }
|
||||
}
|
||||
|
||||
public class PrdMoReverseFromOutInfoQueryInput
|
||||
{
|
||||
public string feeding_detail_id { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -423,11 +423,11 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoFromTwoList(Dictionary<string,string> dic)
|
||||
public async Task<dynamic> PrdMoFromTwoList(PrdMoFromTwoQueryInput prdMoFromTwoQueryInput)
|
||||
{
|
||||
string mo_id = dic.ContainsKey("mo_id") ? dic["mo_id"] : "";
|
||||
string mo_task_code = dic.ContainsKey("mo_task_code") ? dic["mo_task_code"] : "";
|
||||
string barcode = dic.ContainsKey("barcode") ? dic["barcode"] : "";
|
||||
string mo_id = prdMoFromTwoQueryInput.mo_id ?? "";
|
||||
string mo_task_code = prdMoFromTwoQueryInput.mo_task_code ?? "";
|
||||
string barcode = prdMoFromTwoQueryInput.barcode ?? "";
|
||||
List<string> ids = new List<string>();
|
||||
if (!string.IsNullOrEmpty(barcode))
|
||||
{
|
||||
@@ -495,11 +495,11 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoFromThreeList(Dictionary<string,string> dic)
|
||||
public async Task<dynamic> PrdMoFromThreeList(PrdMoFromThreeQueryInput prdMoFromThreeQueryInput)
|
||||
{
|
||||
string mo_task_id = dic.ContainsKey("mo_task_id") ? dic["mo_task_id"] : "";
|
||||
string mo_task_code = dic.ContainsKey("mo_task_code") ? dic["mo_task_code"] : "";
|
||||
string barcode = dic.ContainsKey("barcode") ? dic["barcode"] : "";
|
||||
string mo_task_id = prdMoFromThreeQueryInput.mo_task_id ?? "";
|
||||
string mo_task_code = prdMoFromThreeQueryInput.mo_task_code ?? "";
|
||||
string barcode = prdMoFromThreeQueryInput.barcode ?? "";
|
||||
List<string> ids = new List<string>();
|
||||
if (!string.IsNullOrEmpty(barcode))
|
||||
{
|
||||
@@ -545,10 +545,10 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoFromManList(Dictionary<string,string> dic)
|
||||
public async Task<dynamic> PrdMoFromManList(PrdMoFromTabQueryInput prdMoFromTabQueryInput)
|
||||
{
|
||||
string mo_task_id = dic.ContainsKey("mo_task_id") ? dic["mo_task_id"] : "";
|
||||
string barcode = dic.ContainsKey("barcode") ? dic["barcode"] : "";
|
||||
string mo_task_id = prdMoFromTabQueryInput.mo_task_id ?? "";
|
||||
string barcode = prdMoFromTabQueryInput.barcode ?? "";
|
||||
List<string> ids = new List<string>();
|
||||
if (!string.IsNullOrEmpty(barcode))
|
||||
{
|
||||
@@ -580,10 +580,10 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoFromEquipList(Dictionary<string,string> dic)
|
||||
public async Task<dynamic> PrdMoFromEquipList(PrdMoFromTabQueryInput prdMoFromTabQueryInput)
|
||||
{
|
||||
string mo_task_id = dic.ContainsKey("mo_task_id") ? dic["mo_task_id"] : "";
|
||||
string barcode = dic.ContainsKey("barcode") ? dic["barcode"] : "";
|
||||
string mo_task_id = prdMoFromTabQueryInput.mo_task_id ?? "";
|
||||
string barcode = prdMoFromTabQueryInput.barcode ?? "";
|
||||
List<string> ids = new List<string>();
|
||||
if (!string.IsNullOrEmpty(barcode))
|
||||
{
|
||||
@@ -608,10 +608,10 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoFromMaterialList(Dictionary<string,string> dic)
|
||||
public async Task<dynamic> PrdMoFromMaterialList(PrdMoFromTabQueryInput prdMoFromTabQueryInput)
|
||||
{
|
||||
string mo_task_id = dic.ContainsKey("mo_task_id") ? dic["mo_task_id"] : "";
|
||||
string barcode = dic.ContainsKey("barcode") ? dic["barcode"] : "";
|
||||
string mo_task_id = prdMoFromTabQueryInput.mo_task_id ?? "";
|
||||
string barcode = prdMoFromTabQueryInput.barcode ?? "";
|
||||
List<string> ids = new List<string>();
|
||||
if (!string.IsNullOrEmpty(barcode))
|
||||
{
|
||||
@@ -719,7 +719,9 @@ namespace Tnb.ProductionMgr
|
||||
List<string> lastPrdReportIds = new List<string>();
|
||||
foreach (var item in basMbomInputs)
|
||||
{
|
||||
decimal? num1 = beforeReportNum / basMbom.num * item.num;
|
||||
BasMbomOutput basMbomOutput = await _db.Queryable<BasMbomOutput>().Where(x=>x.mbom_process_id==basMbomProcess.id && x.material_id==prdMoTask.material_id).FirstAsync();
|
||||
if (basMbomOutput == null) break;
|
||||
decimal? num1 = beforeReportNum / Convert.ToDecimal(basMbomOutput.num) * item.num;
|
||||
List<PrdFeedingD> prdFeedingDs = await _db.Queryable<PrdFeedingD>()
|
||||
.LeftJoin<PrdFeedingH>((a, b) => a.feeding_id == b.id)
|
||||
.Where((a, b) => a.material_id == item.material_id && b.mo_task_id == mo_task_id)
|
||||
@@ -751,7 +753,7 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
decimal? num2 = lastPrdReport.reported_qty / basMbom.num * item.num;
|
||||
decimal? num2 = lastPrdReport.reported_qty / Convert.ToDecimal(basMbomOutput.num) * item.num;
|
||||
if (sum2 <= num2)
|
||||
{
|
||||
lastPrdReportIds.Add(lastPrdReport.id);
|
||||
@@ -779,7 +781,7 @@ namespace Tnb.ProductionMgr
|
||||
}
|
||||
else
|
||||
{
|
||||
decimal? num2 = prdReport.reported_qty / basMbom.num * item.num;
|
||||
decimal? num2 = prdReport.reported_qty / Convert.ToDecimal(basMbomOutput.num) * item.num;
|
||||
if (sum2 <= num2)
|
||||
{
|
||||
prdFeedingIds.Add(item.id);
|
||||
@@ -846,9 +848,9 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="dic"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoReverseFromMaterialInfo(Dictionary<string, string> dic)
|
||||
public async Task<dynamic> PrdMoReverseFromMaterialInfo(PrdMoReverseFromQueryInput prdMoReverseFromQueryInput)
|
||||
{
|
||||
string barcode = dic.ContainsKey("barcode") ? dic["barcode"] : "";
|
||||
string barcode = prdMoReverseFromQueryInput.barcode ?? "";
|
||||
string domain = (App.HttpContext.Request.IsHttps ? "https://" : "http://") + App.HttpContext.Request.Host;
|
||||
Dictionary<string, object> header = new Dictionary<string, object>()
|
||||
{
|
||||
@@ -891,9 +893,9 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="dic"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoReverseFromFeedingInfo(Dictionary<string, string> dic)
|
||||
public async Task<dynamic> PrdMoReverseFromFeedingInfo(PrdMoReverseFromQueryInput prdMoReverseFromQueryInput)
|
||||
{
|
||||
string barcode = dic.ContainsKey("barcode") ? dic["barcode"] : "";
|
||||
string barcode = prdMoReverseFromQueryInput.barcode ?? "";
|
||||
List<string> ids = await _db.Queryable<PrdMaterialReceiptD>()
|
||||
.LeftJoin<PrdFeedingD>((a, b) => a.id == b.material_receipt_detail_id)
|
||||
.LeftJoin<PrdFeedingH>((a, b, c) => b.feeding_id == c.id)
|
||||
@@ -937,9 +939,9 @@ namespace Tnb.ProductionMgr
|
||||
/// <param name="dic"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<dynamic> PrdMoReverseFromOutInfo(Dictionary<string, string> dic)
|
||||
public async Task<dynamic> PrdMoReverseFromOutInfo(PrdMoReverseFromOutInfoQueryInput prdMoReverseFromOutInfoQueryInput)
|
||||
{
|
||||
string feeding_detail_id = dic.ContainsKey("feeding_detail_id") ? dic["feeding_detail_id"] : "";
|
||||
string feeding_detail_id = prdMoReverseFromOutInfoQueryInput.feeding_detail_id ?? "";
|
||||
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);
|
||||
@@ -1011,51 +1013,163 @@ namespace Tnb.ProductionMgr
|
||||
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;
|
||||
List<PrdReport> prdReports = await _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.mo_id == prdMoTask.mo_id && b.next_process_no == null)
|
||||
.OrderBy((a,b,c)=>c.create_time)
|
||||
.Select((a, b, c) => c).ToListAsync();
|
||||
|
||||
if (prdReports != null && prdReports.Count > 0)
|
||||
{
|
||||
List<string> mbomProcesssIds = new List<string>(){prdMoTask.mbom_process_id};
|
||||
BasMbomProcess startMbomProcess = await _db.Queryable<BasMbomProcess>().Where(x=>x.id==prdMoTask.mbom_process_id).FirstAsync();
|
||||
List<BasMbomProcess> allMbomProcesses = await _db.Queryable<BasMbomProcess>().Where(x=>x.mbom_id==prdMoTask.bom_id).ToListAsync();
|
||||
string startNo = startMbomProcess.next_process_no;
|
||||
if (!string.IsNullOrEmpty(startNo))
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
BasMbomProcess nextMbomProcess = allMbomProcesses.FirstOrDefault(x=>x.no==startNo);
|
||||
|
||||
if (nextMbomProcess==null || nextMbomProcess.no==null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
startNo = nextMbomProcess.next_process_no;
|
||||
mbomProcesssIds.Add(nextMbomProcess.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!prdMoTask.mbom_process_id.Contains(prdMoTask.mbom_process_id))
|
||||
{
|
||||
mbomProcesssIds.Add(startMbomProcess.id);
|
||||
}
|
||||
}
|
||||
|
||||
List<BasMbomOutput> outputList = await _db.Queryable<BasMbomProcess>()
|
||||
.LeftJoin<BasMbomOutput>((a, b) => a.id == b.mbom_process_id)
|
||||
.Where((a, b) => mbomProcesssIds.Contains(a.id))
|
||||
.Select((a,b)=>b).ToListAsync();
|
||||
|
||||
List<BasMbomInput> inputList = await _db.Queryable<BasMbomProcess>()
|
||||
.LeftJoin<BasMbomInput>((a, b) => a.id == b.mbom_process_id)
|
||||
.Where((a, b) => mbomProcesssIds.Contains(a.id))
|
||||
.Select((a,b)=>b).ToListAsync();
|
||||
|
||||
decimal? needNum = 1;//一个最终物料需要本任务单投入物料的数量
|
||||
string tempMaterialId = outputList.FirstOrDefault(x=>x.mbom_process_id==mbomProcesssIds[mbomProcesssIds.Count-1])?.material_id;
|
||||
for (int i = mbomProcesssIds.Count - 1; i > 0;i--)
|
||||
{
|
||||
|
||||
List<BasMbomInput> inputs = inputList.Where(x => x.mbom_process_id == mbomProcesssIds[i]).ToList();
|
||||
BasMbomOutput output = outputList.FirstOrDefault(x => x.mbom_process_id == mbomProcesssIds[i] && x.material_id==tempMaterialId);
|
||||
List<string> inputMaterialIds = inputs.Select(x => x.material_id).ToList();
|
||||
List<BasMbomOutput> lastOutputs = outputList.Where(x=>x.mbom_process_id==mbomProcesssIds[i-1]).ToList();
|
||||
decimal? inputNum = inputs.FirstOrDefault(x => inputMaterialIds.Contains(x.material_id))?.num;
|
||||
if (inputNum == null)
|
||||
{
|
||||
throw new Exception("生产bom投入产出物料配置错误");
|
||||
}
|
||||
else
|
||||
{
|
||||
tempMaterialId = inputs.FirstOrDefault(x => inputMaterialIds.Contains(x.material_id))?.material_id;
|
||||
needNum = needNum / Convert.ToDecimal(output.num) * inputNum;
|
||||
}
|
||||
}
|
||||
|
||||
bool flag = true;
|
||||
decimal residueNeed = 0;
|
||||
foreach (var prdReport in prdReports)
|
||||
{
|
||||
decimal needNumTotal = prdReport.reported_qty * needNum ?? 0;
|
||||
if (beforeIn - needNumTotal >= 0)
|
||||
{
|
||||
beforeIn -= needNumTotal;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (flag)
|
||||
{
|
||||
if (prdFeedingD.num > needNumTotal - beforeIn)
|
||||
{
|
||||
residueNeed = prdFeedingD.num - (needNumTotal - beforeIn);
|
||||
reportIds.Add(prdReport.id);
|
||||
}
|
||||
else
|
||||
{
|
||||
reportIds.Add(prdReport.id);
|
||||
break;
|
||||
}
|
||||
|
||||
flag = false;
|
||||
continue;
|
||||
|
||||
}
|
||||
|
||||
if (residueNeed - needNumTotal > 0)
|
||||
{
|
||||
residueNeed -= needNumTotal;
|
||||
reportIds.Add(prdReport.id);
|
||||
}else
|
||||
{
|
||||
reportIds.Add(prdReport.id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user