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 { /// /// 齐套出库 /// [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 _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 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 Create(VisualDevModelDataCrInput visualDevModelDataCrInput) // { // PrdKittingOutH prdKittingOutH = new PrdKittingOutH(); // try // { // var db = _repository.AsSugarClient(); // // List input = new List(); // 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(), // }); // // input[0].wmsKittingoutDs = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(visualDevModelDataCrInput.data["tableField115"])); // string domain = _userManager.Domain; // Dictionary header = new Dictionary() // { // ["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(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 prdKittingOutDs = new List(); // foreach (var item in (JArray)visualDevModelDataCrInput.data["tableField115"]) // { // prdKittingOutDs.Add(new PrdKittingOutD() // { // material_id = item.Value("material_id"), // material_code = item.Value("material_code"), // unit_id = item.Value("unit_id"), // unit_code = item.Value("unit_code"), // pr_qty = item.Value("pr_qty"), // code_batch = item.Value("code_batch"), // box = item.Value("box"), // kitting_out_id = prdKittingOutH.id, // }); // } // // // VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); // // await _runService.Create(templateEntity, visualDevModelDataCrInput); // // DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => // { // await _repository.InsertAsync(prdKittingOutH); // if (prdKittingOutDs.Count > 0) // { // await db.Insertable(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); // } // // } /// /// 齐套出库申请 /// /// /// /// [HttpPost] public async Task 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 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(), } }; input[0].wmsKittingoutDs = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(kittingOutInput.tableField115)); string domain = _userManager.Domain; Dictionary 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(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 prdKittingOutDs = new(); foreach (Dictionary 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 result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { _ = await _repository.InsertAsync(prdKittingOutH); if (prdKittingOutDs.Count > 0) { _ = await db.Insertable(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); } } /// /// 齐套出库申请 /// /// /// /// [HttpPost] public async Task 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().SingleAsync(x => x.id == kittingOutInput.mo_task_id); BasMaterial basMaterial = await db.Queryable().SingleAsync(x => x.id == prdMoTask.material_id); WmsCollocationSchemeH wmsCollocationSchemeH = await db.Queryable().SingleAsync(x => x.id == kittingOutInput.collocation_scheme_id); List wmsCollocationSchemeDs = await db.Queryable().Where(x => x.bill_id == kittingOutInput.collocation_scheme_id).ToListAsync(); List materialIds = wmsCollocationSchemeDs.Select(x => x.material_id).ToList(); List basMaterials = await db.Queryable().Where(x => materialIds.Contains(x.id)).ToListAsync(); Dictionary unitIdDic = await db.Queryable() .LeftJoin((a, b) => b.EnCode == DictConst.MeasurementUnit) .LeftJoin((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 unitCodeDic = basMaterials.ToDictionary(x => x.id, x => x.unit_id); OrganizeEntity workline = await _organizeService.GetAnyParentByWorkstationId(kittingOutInput.workstation_id, DictConst.RegionCategoryWorklineCode); List 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(), } }; 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 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(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 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 result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { _ = await _repository.InsertAsync(prdKittingOutH); if (prdKittingOutDs.Count > 0) { _ = await db.Insertable(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); } } /// /// 齐套出库 一般出库 物料出库 改状态 /// /// /// [HttpPost] public async Task ChangeStatusById(List 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().SetColumns(x => x.status == input.status) .Where(x => x.code == input.code).ExecuteCommandAsync(); }else if (input.type == "1" || input.type == "2") { await db.Updateable().SetColumns(x => x.status == input.status) .Where(x => x.bill_code == input.code).ExecuteCommandAsync(); } } return true; } } }