Files
tnb.server/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs
2023-11-24 11:43:29 +08:00

441 lines
24 KiB
C#

using JNPF;
using JNPF.Common.Core.Manager;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.Extras.CollectiveOAuth.Models;
using JNPF.Extras.CollectiveOAuth.Utils;
using JNPF.FriendlyException;
using JNPF.Logging;
using JNPF.Systems.Entitys.Permission;
using JNPF.Systems.Entitys.System;
using JNPF.Systems.Interfaces.Permission;
using JNPF.Systems.Interfaces.System;
using JNPF.VisualDev;
using JNPF.VisualDev.Interfaces;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
using Tnb.BasicData;
using Tnb.BasicData.Entities;
using Tnb.ProductionMgr.Entities;
using Tnb.ProductionMgr.Entities.Dto;
using Tnb.ProductionMgr.Interfaces;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
namespace Tnb.ProductionMgr
{
/// <summary>
/// 齐套出库
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
[OverideVisualDev(ModuleId)]
public class PrdKittingOutService : IOverideVisualDevService, IPrdKittingOutService, IDynamicApiController, ITransient
{
private const string ModuleId = "27565198830357";
private readonly ISqlSugarRepository<PrdKittingOutH> _repository;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
private readonly IUserManager _userManager;
private readonly IOrganizeService _organizeService;
private readonly IBillRullService _billRullService;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
public PrdKittingOutService(ISqlSugarRepository<PrdKittingOutH> repository, IRunService runService,
IBillRullService billRullService,
IUserManager userManager,
IOrganizeService organizeService,
IVisualDevService visualDevService)
{
_runService = runService;
_visualDevService = visualDevService;
_repository = repository;
_userManager = userManager;
_organizeService = organizeService;
_billRullService = billRullService;
// OverideFuncs.CreateAsync = Create;
}
// private async Task<dynamic> Create(VisualDevModelDataCrInput visualDevModelDataCrInput)
// {
// PrdKittingOutH prdKittingOutH = new PrdKittingOutH();
// try
// {
// var db = _repository.AsSugarClient();
//
// List<MESKittingOutStkInput> input = new List<MESKittingOutStkInput>();
// input.Add(new MESKittingOutStkInput()
// {
// org_id = _userManager.GetUserInfo().Result.organizeId,
// bill_date = DateTime.Now,
// warehouse_id = visualDevModelDataCrInput.data.ContainsKey("warehouse_id") ? visualDevModelDataCrInput.data["warehouse_id"].ToString() : "",
// location_code = visualDevModelDataCrInput.data.ContainsKey("location_code") ? visualDevModelDataCrInput.data["location_code"].ToString() : "",
// material_id = visualDevModelDataCrInput.data.ContainsKey("material_id") ? visualDevModelDataCrInput.data["material_id"].ToString() : "",
// material_code = visualDevModelDataCrInput.data.ContainsKey("material_code") ? visualDevModelDataCrInput.data["material_code"].ToString() : "",
// collocation_scheme_id = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_id") ? visualDevModelDataCrInput.data["collocation_scheme_id"].ToString() : "",
// collocation_scheme_code = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_code") ? visualDevModelDataCrInput.data["collocation_scheme_code"].ToString() : "",
// source_id = prdKittingOutH.id,
// seq = visualDevModelDataCrInput.data.ContainsKey("seq") ? (int)visualDevModelDataCrInput.data["seq"] : 0,
// create_id = _userManager.UserId,
// wmsKittingoutDs = new List<MESKittingOutStkDInput>(),
// });
//
// input[0].wmsKittingoutDs = JsonConvert.DeserializeObject<List<MESKittingOutStkDInput>>(JsonConvert.SerializeObject(visualDevModelDataCrInput.data["tableField115"]));
// string domain = _userManager.Domain;
// Dictionary<string, object> header = new Dictionary<string, object>()
// {
// ["Authorization"] = App.HttpContext!=null ? App.HttpContext.Request.Headers["Authorization"] : ""
// };
// var sendResult = HttpUtils.RequestPost(domain + WebApiConst.MES_KITTING_OUT_STK,JsonConvert.SerializeObject(input),header);
// Log.Information(sendResult);
//
// AuthResponse authResponse = JsonConvert.DeserializeObject<AuthResponse>(sendResult);
// if (authResponse.code != 200)
// {
// throw Oops.Bah(authResponse.msg);
// }
// else
// {
// prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE);
// prdKittingOutH.warehouse_id = visualDevModelDataCrInput.data.ContainsKey("warehouse_id") ? visualDevModelDataCrInput.data["warehouse_id"].ToString() : "";
// prdKittingOutH.location_code = visualDevModelDataCrInput.data.ContainsKey("location_code") ? visualDevModelDataCrInput.data["location_code"].ToString() : "";
// prdKittingOutH.material_id = visualDevModelDataCrInput.data.ContainsKey("material_id") ? visualDevModelDataCrInput.data["material_id"].ToString() : "";
// prdKittingOutH.material_code = visualDevModelDataCrInput.data.ContainsKey("material_code") ? visualDevModelDataCrInput.data["material_code"].ToString() : "";
// prdKittingOutH.collocation_scheme_id = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_id") ? visualDevModelDataCrInput.data["collocation_scheme_id"].ToString() : "";
// prdKittingOutH.collocation_scheme_code = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_code") ? visualDevModelDataCrInput.data["collocation_scheme_code"].ToString() : "";
// prdKittingOutH.workline_id = visualDevModelDataCrInput.data.ContainsKey("worklinei_d") ? visualDevModelDataCrInput.data["worklinei_d"].ToString() : "";
// prdKittingOutH.workstation_id = visualDevModelDataCrInput.data.ContainsKey("workstation_id") ? visualDevModelDataCrInput.data["workstation_id"].ToString() : "";
// prdKittingOutH.mo_task_id = visualDevModelDataCrInput.data.ContainsKey("mo_task_id") ? visualDevModelDataCrInput.data["mo_task_id"].ToString() : "";
// prdKittingOutH.seq = visualDevModelDataCrInput.data.ContainsKey("seq") ? visualDevModelDataCrInput.data["seq"]?.ToString() : "0";
// prdKittingOutH.create_id = _userManager.UserId;
// prdKittingOutH.create_time = DateTime.Now;
// prdKittingOutH.org_id = _userManager.GetUserInfo().Result.organizeId;
// List<PrdKittingOutD> prdKittingOutDs = new List<PrdKittingOutD>();
// foreach (var item in (JArray)visualDevModelDataCrInput.data["tableField115"])
// {
// prdKittingOutDs.Add(new PrdKittingOutD()
// {
// material_id = item.Value<string>("material_id"),
// material_code = item.Value<string>("material_code"),
// unit_id = item.Value<string>("unit_id"),
// unit_code = item.Value<string>("unit_code"),
// pr_qty = item.Value<decimal>("pr_qty"),
// code_batch = item.Value<string>("code_batch"),
// box = item.Value<int>("box"),
// kitting_out_id = prdKittingOutH.id,
// });
// }
//
// // VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
// // await _runService.Create(templateEntity, visualDevModelDataCrInput);
//
// DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
// {
// await _repository.InsertAsync(prdKittingOutH);
// if (prdKittingOutDs.Count > 0)
// {
// await db.Insertable<PrdKittingOutD>(prdKittingOutDs).ExecuteCommandAsync();
// }
// });
//
// if (!result.IsSuccess)
// {
// throw Oops.Bah(result.ErrorMessage);
// }
// }
// return await Task.FromResult(true);
// }
// catch (Exception e)
// {
// Console.WriteLine(e);
// Log.Error(e.Message);
// throw Oops.Bah(e.Message);
// }
//
// }
/// <summary>
/// 齐套出库申请
/// </summary>
/// <param name="kittingOutInput"></param>
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost]
public async Task<dynamic> KittingOut(KittingOutInput kittingOutInput)
{
PrdKittingOutH prdKittingOutH = new();
prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE);
try
{
ISqlSugarClient db = _repository.AsSugarClient();
OrganizeEntity workline = await _organizeService.GetAnyParentByWorkstationId(kittingOutInput.workstation_id, DictConst.RegionCategoryWorklineCode);
kittingOutInput.workline_id = workline?.Id ?? "";
List<MESKittingOutStkInput> input = new()
{
new MESKittingOutStkInput()
{
org_id = _userManager.GetUserInfo().Result.organizeId,
bill_date = DateTime.Now,
warehouse_id = kittingOutInput.warehouse_id,
location_code = kittingOutInput.location_code,
material_id = kittingOutInput.material_id,
material_code = kittingOutInput.material_code,
collocation_scheme_id = kittingOutInput.collocation_scheme_id,
collocation_scheme_code = kittingOutInput.collocation_scheme_code,
source_id = prdKittingOutH.id,
source_code = prdKittingOutH.code,
create_id = _userManager.UserId,
wmsKittingoutDs = new List<MESKittingOutStkDInput>(),
}
};
input[0].wmsKittingoutDs = JsonConvert.DeserializeObject<List<MESKittingOutStkDInput>>(JsonConvert.SerializeObject(kittingOutInput.tableField115));
string domain = _userManager.Domain;
Dictionary<string, object> header = new()
{
["Authorization"] = App.HttpContext!=null ? App.HttpContext.Request.Headers["Authorization"] : ""
};
string sendResult = HttpUtils.RequestPost(domain + WebApiConst.MES_KITTING_OUT_STK, JsonConvert.SerializeObject(input), header);
Log.Information(sendResult);
AuthResponse authResponse = JsonConvert.DeserializeObject<AuthResponse>(sendResult);
if (authResponse.code != 200)
{
throw Oops.Bah(authResponse.msg);
}
else
{
prdKittingOutH.warehouse_id = kittingOutInput.warehouse_id;
prdKittingOutH.location_code = kittingOutInput.location_code;
prdKittingOutH.material_id = kittingOutInput.material_id;
prdKittingOutH.material_code = kittingOutInput.material_code;
prdKittingOutH.collocation_scheme_id = kittingOutInput.collocation_scheme_id;
prdKittingOutH.collocation_scheme_code = kittingOutInput.collocation_scheme_code;
prdKittingOutH.workline_id = kittingOutInput.workline_id;
prdKittingOutH.workstation_id = kittingOutInput.workstation_id;
prdKittingOutH.mo_task_id = kittingOutInput.mo_task_id;
prdKittingOutH.seq = kittingOutInput.seq;
prdKittingOutH.create_id = _userManager.UserId;
prdKittingOutH.create_time = DateTime.Now;
prdKittingOutH.org_id = _userManager.GetUserInfo().Result.organizeId;
List<PrdKittingOutD> prdKittingOutDs = new();
foreach (Dictionary<string, object> item in kittingOutInput.tableField115)
{
prdKittingOutDs.Add(new PrdKittingOutD()
{
material_id = item.ContainsKey("material_id") ? item["material_id"].ToString() : "",
material_code = item.ContainsKey("material_code") ? item["material_code"].ToString() : "",
unit_id = item.ContainsKey("unit_id") ? item["unit_id"].ToString() : "",
unit_code = item.ContainsKey("unit_code") ? item["unit_code"].ToString() : "",
pr_qty = item.ContainsKey("pr_qty") ? Convert.ToDecimal(item["pr_qty"]) : 0,
code_batch = item.ContainsKey("code_batch") ? item["code_batch"].ToString() : "",
box = item.ContainsKey("box") ? Convert.ToInt32(item["box"]) : 0,
kitting_out_id = prdKittingOutH.id,
});
}
// VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
// await _runService.Create(templateEntity, visualDevModelDataCrInput);
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
_ = await _repository.InsertAsync(prdKittingOutH);
if (prdKittingOutDs.Count > 0)
{
_ = await db.Insertable<PrdKittingOutD>(prdKittingOutDs).ExecuteCommandAsync();
}
});
if (!result.IsSuccess)
{
throw Oops.Bah(result.ErrorMessage);
}
}
return await Task.FromResult(true);
}
catch (Exception e)
{
Console.WriteLine(e);
Log.Error(e.Message);
throw Oops.Bah(e.Message);
}
}
/// <summary>
/// 齐套出库申请
/// </summary>
/// <param name="kittingOutInput"></param>
/// <returns></returns>
/// <exception cref="AppFriendlyException"></exception>
[HttpPost]
public async Task<dynamic> KittingOutNew(KittingOutNewInput kittingOutInput)
{
PrdKittingOutH prdKittingOutH = new();
prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE);
string warehouse_id = "26103348825381";//二楼缓存仓
try
{
ISqlSugarClient db = _repository.AsSugarClient();
PrdMoTask prdMoTask = await db.Queryable<PrdMoTask>().SingleAsync(x => x.id == kittingOutInput.mo_task_id);
BasMaterial basMaterial = await db.Queryable<BasMaterial>().SingleAsync(x => x.id == prdMoTask.material_id);
WmsCollocationSchemeH wmsCollocationSchemeH = await db.Queryable<WmsCollocationSchemeH>().SingleAsync(x => x.id == kittingOutInput.collocation_scheme_id);
List<WmsCollocationSchemeD> wmsCollocationSchemeDs = await db.Queryable<WmsCollocationSchemeD>().Where(x => x.bill_id == kittingOutInput.collocation_scheme_id).ToListAsync();
List<string> materialIds = wmsCollocationSchemeDs.Select(x => x.material_id).ToList();
List<BasMaterial> basMaterials = await db.Queryable<BasMaterial>().Where(x => materialIds.Contains(x.id)).ToListAsync();
Dictionary<string, object> unitIdDic = await db.Queryable<BasMaterial>()
.LeftJoin<DictionaryTypeEntity>((a, b) => b.EnCode == DictConst.MeasurementUnit)
.LeftJoin<DictionaryDataEntity>((a, b, c) => b.Id == c.DictionaryTypeId && a.unit_id == c.EnCode)
.Where((a, b, c) => materialIds.Contains(a.id))
.Select((a, b, c) => new
{
key = a.id,
value = c.Id
})
.ToDictionaryAsync(x => x.key, x => x.value);
Dictionary<string, string> unitCodeDic = basMaterials.ToDictionary(x => x.id, x => x.unit_id);
OrganizeEntity workline = await _organizeService.GetAnyParentByWorkstationId(kittingOutInput.workstation_id, DictConst.RegionCategoryWorklineCode);
List<MESKittingOutStkInput> input = new()
{
new MESKittingOutStkInput()
{
org_id = _userManager.GetUserInfo().Result.organizeId,
bill_date = DateTime.Now,
warehouse_id = warehouse_id,
location_code = kittingOutInput.location_code,
material_id = prdMoTask.material_id,
material_code = basMaterial.code,
collocation_scheme_id = kittingOutInput.collocation_scheme_id,
collocation_scheme_code = wmsCollocationSchemeH.bill_code,
source_id = prdKittingOutH.id,
source_code = prdKittingOutH.code,
create_id = _userManager.UserId,
wmsKittingoutDs = new List<MESKittingOutStkDInput>(),
}
};
foreach (WmsCollocationSchemeD item in wmsCollocationSchemeDs)
{
input[0].wmsKittingoutDs.Add(new MESKittingOutStkDInput()
{
material_id = item.material_id,
material_code = item.material_code,
unit_id = unitIdDic.ContainsKey(item.material_id) ? unitIdDic[item.material_id].ToString() : "",
unit_code = unitCodeDic.ContainsKey(item.material_id) ? unitCodeDic[item.material_id].ToString() : "",
pr_qty = item.qty,
code_batch = "",
box = item.box,
});
}
string domain = _userManager.Domain;
Dictionary<string, object> header = new()
{
["Authorization"] = App.HttpContext!=null ? App.HttpContext.Request.Headers["Authorization"] : ""
};
string sendResult = HttpUtils.RequestPost(domain + WebApiConst.MES_KITTING_OUT_STK, JsonConvert.SerializeObject(input), header);
Log.Information(sendResult);
AuthResponse authResponse = JsonConvert.DeserializeObject<AuthResponse>(sendResult);
if (authResponse.code != 200)
{
throw Oops.Bah(authResponse.msg);
}
else
{
prdKittingOutH.warehouse_id = warehouse_id;
prdKittingOutH.location_code = kittingOutInput.location_code;
prdKittingOutH.material_id = basMaterial.id;
prdKittingOutH.material_code = basMaterial.code;
prdKittingOutH.collocation_scheme_id = kittingOutInput.collocation_scheme_id;
prdKittingOutH.collocation_scheme_code = wmsCollocationSchemeH.bill_code;
prdKittingOutH.workline_id = workline?.Id ?? "";
prdKittingOutH.workstation_id = kittingOutInput.workstation_id;
prdKittingOutH.mo_task_id = kittingOutInput.mo_task_id;
prdKittingOutH.seq = "0";
prdKittingOutH.create_id = _userManager.UserId;
prdKittingOutH.create_time = DateTime.Now;
prdKittingOutH.org_id = _userManager.GetUserInfo().Result.organizeId;
prdKittingOutH.status = DictConst.OUTSTOCKSTATUSADD;
List<PrdKittingOutD> prdKittingOutDs = new();
foreach (WmsCollocationSchemeD item in wmsCollocationSchemeDs)
{
prdKittingOutDs.Add(new PrdKittingOutD()
{
material_id = item.material_id,
material_code = item.material_code,
unit_id = unitIdDic.ContainsKey(item.material_id) ? unitIdDic[item.material_id].ToString() : "",
unit_code = unitCodeDic.ContainsKey(item.material_id) ? unitCodeDic[item.material_id].ToString() : "",
pr_qty = item.qty,
code_batch = "",
box = item.box,
kitting_out_id = prdKittingOutH.id,
});
}
// VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
// await _runService.Create(templateEntity, visualDevModelDataCrInput);
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
_ = await _repository.InsertAsync(prdKittingOutH);
if (prdKittingOutDs.Count > 0)
{
_ = await db.Insertable<PrdKittingOutD>(prdKittingOutDs).ExecuteCommandAsync();
}
});
if (!result.IsSuccess)
{
throw Oops.Bah(result.ErrorMessage);
}
}
return await Task.FromResult(true);
}
catch (Exception e)
{
Console.WriteLine(e);
Log.Error(e.Message);
throw Oops.Bah(e.Message);
}
}
/// <summary>
/// 齐套出库 一般出库 物料出库 改状态
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> ChangeStatusById(List<PrdKittingOutChangeStatusInput> inputs)
{
// if(string.IsNullOrEmpty(input.code) || string.IsNullOrEmpty(input.type) || string.IsNullOrEmpty(input.status))
// throw Oops.Bah("参数错误");
if (inputs == null || inputs.Count <= 0)
{
throw Oops.Bah("参数错误");
}
ISqlSugarClient db = _repository.AsSugarClient();
foreach (var input in inputs)
{
if (input.type == "0")
{
await db.Updateable<PrdKittingOutH>().SetColumns(x => x.status == input.status)
.Where(x => x.code == input.code).ExecuteCommandAsync();
}else if (input.type == "1" || input.type == "2")
{
await db.Updateable<PrdOutstockH>().SetColumns(x => x.status == input.status)
.Where(x => x.bill_code == input.code).ExecuteCommandAsync();
}
}
return true;
}
}
}