using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Aspose.Cells.Drawing; using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Entitys.Dto.VisualDev; using JNPF.VisualDev.Interfaces; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Interfaces; namespace Tnb.WarehouseMgr { /// /// 路径管理业务类 /// [OverideVisualDev(ModuleId)] public class WmsRouteMgrService : ExcelDataImportManager, IWmsRouteMgrService { private const string ModuleId = "26100621140773";//26100621140773 private readonly ISqlSugarClient _db; private readonly IRunService _runService; private readonly IVisualDevService _visualDevService; private readonly IUserManager _userManager; public WmsRouteMgrService(ISqlSugarRepository repository, IRunService runService, IVisualDevService visualDevService, IUserManager userManager) { _db = repository.AsSugarClient(); _runService = runService; _visualDevService = visualDevService; _userManager = userManager; OverideFuncs.CreateAsync = Create; OverideFuncs.ImportDataAsync = DataImport; } private async Task Create(VisualDevModelDataCrInput input) { if (input.data.ContainsKey(nameof(WmsRoad.startpoint_id)) && input.data.ContainsKey(nameof(WmsRoad.endpoint_id))) { var startPointId = input.data[nameof(WmsRoad.startpoint_id)].ToString(); var endPointId = input.data[nameof(WmsRoad.endpoint_id)].ToString(); if (string.Equals(startPointId, endPointId, StringComparison.OrdinalIgnoreCase)) { throw new AppFriendlyException("起始点位不能等于终止点位", 500); } } VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); await _runService.Create(templateEntity, input); return await Task.FromResult(true); } private async Task DataImport(VisualDevImportDataInput input) { int row = 0; try { List> dics = input.list; List roads = new List(); List pointCodes = new List(); List locCodes = new(); WmsRoad road = new WmsRoad(); string carryStdId = string.Empty; foreach (var d in dics) { var sCode = d["startpoint_code"]?.ToString() ?? string.Empty; var eCode = d["endpoint_code"].ToString() ?? string.Empty; if (sCode.IsEmpty() || eCode.IsEmpty()) throw new AppFriendlyException($"第{dics.IndexOf(d) + 2}行数据有误", 500); pointCodes.Add(sCode); pointCodes.Add(eCode); road = d.Adapt(); roads.Add(road); } var points = await _db.Queryable().Where(it => pointCodes.Contains(it.point_code)).ToDictionaryAsync(x => x.point_code, x => x.id); if (!points.IsNullOrEmpty()) { roads.ForEach(x => { x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; x.startpoint_id = points[x.startpoint_code].ToString()!; x.endpoint_id = points[x.endpoint_code].ToString()!; x.road_code = $"{x.startpoint_code}-{x.endpoint_code}"; x.status = 1; x.create_id = _userManager.UserId; x.create_time = DateTime.Now; x.modify_id = null; x.modify_time = null; }); } await _db.Ado.BeginTranAsync(); row = await _db.Insertable(roads).ExecuteCommandAsync(); await _db.Ado.CommitTranAsync(); } catch (Exception ex) { await _db.Ado.RollbackTranAsync(); //Log.Error("导入失败", ex); throw Oops.Bah("导入失败"); } return row > 0; } } }