1.去掉编译条件

2.重写业务导入功能
This commit is contained in:
FanLian
2023-08-09 17:49:27 +08:00
parent 7913642d3d
commit 1bbb30f135
7 changed files with 127 additions and 89 deletions

View File

@@ -21,7 +21,7 @@ namespace Tnb.WarehouseMgr
protected Task<List<Dictionary<string, object>>> ImportExcelToMemory(IFormFile file) protected Task<List<Dictionary<string, object>>> ImportExcelToMemory(IFormFile file)
{ {
int rowIndex = 1; int rowIndex = 1;
List<Dictionary<string, object>> dics = new(); List<Dictionary<string, object>>? dics = new();
IWorkbook? workbook = null; IWorkbook? workbook = null;
try try
{ {
@@ -71,12 +71,14 @@ namespace Tnb.WarehouseMgr
dics.Add(dic); dics.Add(dic);
} }
} }
if (dics == null) throw new AppFriendlyException("输入的数据为空", 500);
} }
} }
} }
} }
catch (Exception) catch (Exception)
{ {
//return Task.FromResult(dics);
throw; throw;
} }
return Task.FromResult(dics); return Task.FromResult(dics);

View File

@@ -1,32 +0,0 @@
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JNPF.VisualDev;
using Microsoft.AspNetCore.Http;
using SqlSugar;
using Tnb.WarehouseMgr.Entities;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// 路段管理服务类
/// </summary>
[OverideVisualDev(ModuleConsts.MODULE_WMSROAD_ID)]
public class WmRoadService : ExcelDataImportManager
{
private readonly ISqlSugarClient _db;
public WmRoadService(ISqlSugarRepository<WmsRoad> repository)
{
_db =repository.AsSugarClient();
OverideFuncs.ImportAsync = DataImport;
}
private async Task<dynamic> DataImport(IFormFile file)
{
return Task.FromResult<dynamic>(null);
}
}
}

View File

@@ -58,42 +58,36 @@ namespace Tnb.WarehouseMgr
int row = 0; int row = 0;
try try
{ {
//例1 获取所有表
List<Dictionary<string, object>> dics = await ImportExcelToMemory(file); List<Dictionary<string, object>> dics = await ImportExcelToMemory(file);
List<WmsCarryH> carrys = new List<WmsCarryH>(); List<WmsCarryH> carrys = new List<WmsCarryH>();
var carryStdDic = await _db.Queryable<WmsCarrystd>().ToDictionaryAsync(x => x.carrystd_code, x => x.id);
List<string> locCodes = new(); List<string> locCodes = new();
List<string> cCodes = new();
WmsCarryH carryH = new WmsCarryH(); WmsCarryH carryH = new WmsCarryH();
if (carryStdDic?.Count > 0)
{
string carryStdId = string.Empty; string carryStdId = string.Empty;
foreach (var d in dics) foreach (var d in dics)
{ {
var stdCodeKey = d["carrystd_id"].ToString(); var cCode = d["carrystd_id"].ToString() ?? string.Empty;
carryStdId = carryStdDic.ContainsKey(stdCodeKey) ? carryStdDic[stdCodeKey]?.ToString() ?? "" : ""; if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行数据有误", 500);
d["carrystd_id"] = carryStdId;
locCodes.Add(d["location_code"]?.ToString() ?? string.Empty); locCodes.Add(d["location_code"]?.ToString() ?? string.Empty);
cCodes.Add(cCode);
carryH = d.Adapt<WmsCarryH>(); carryH = d.Adapt<WmsCarryH>();
carrys.Add(carryH); carrys.Add(carryH);
} }
if (!locCodes.IsNullOrEmpty()) if (!locCodes.IsNullOrEmpty())
{ {
var carryStdDic = await _db.Queryable<WmsCarrystd>().Where(it=>cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id);
var locs = await _db.Queryable<BasLocation>().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); var locs = await _db.Queryable<BasLocation>().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id);
foreach (var loc in locCodes)
{
var c = carrys.Find(x => x.location_code == loc);
if (c != null)
c.location_id = locs[loc].ToString();
}
}
carrys.ForEach(x => carrys.ForEach(x =>
{ {
x.id = SnowflakeIdHelper.NextId(); x.id = SnowflakeIdHelper.NextId();
x.org_id = _userManager.User.OrganizeId; x.org_id = _userManager.User.OrganizeId;
x.status = 1; x.status = 1;
x.is_lock = 0; x.is_lock = 0;
x.carrystd_id = carryStdDic[x.carrystd_id].ToString()!;
x.carry_status = ((int)EnumCarryStatus.).ToString(); x.carry_status = ((int)EnumCarryStatus.).ToString();
x.location_id = locs[x.location_code].ToString();
x.out_status = ((int)EnumOutStatus.).ToString(); x.out_status = ((int)EnumOutStatus.).ToString();
x.is_check = 1; x.is_check = 1;
x.create_id = _userManager.UserId; x.create_id = _userManager.UserId;

View File

@@ -5,14 +5,20 @@ using System.Reflection;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Aspose.Cells.Drawing; using Aspose.Cells.Drawing;
using JNPF.Common.Core.Manager;
using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Enums; using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.Common.Security;
using JNPF.DependencyInjection; using JNPF.DependencyInjection;
using JNPF.DynamicApiController; using JNPF.DynamicApiController;
using JNPF.FriendlyException; using JNPF.FriendlyException;
using JNPF.VisualDev; using JNPF.VisualDev;
using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Entitys.Dto.VisualDev;
using JNPF.VisualDev.Interfaces; using JNPF.VisualDev.Interfaces;
using Mapster;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using SqlSugar; using SqlSugar;
using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities;
@@ -25,19 +31,22 @@ namespace Tnb.WarehouseMgr
/// </summary> /// </summary>
[OverideVisualDev(ModuleId)] [OverideVisualDev(ModuleId)]
public class WmsRouteMgrService : BaseWareHouseService, IWmsRouteMgrService public class WmsRouteMgrService : ExcelDataImportManager, IWmsRouteMgrService
{ {
private const string ModuleId = "26100621140773";//26100621140773 private const string ModuleId = "26100621140773";//26100621140773
private readonly ISqlSugarClient _db; private readonly ISqlSugarClient _db;
private readonly IRunService _runService; private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService; private readonly IVisualDevService _visualDevService;
private readonly IUserManager _userManager;
public WmsRouteMgrService(ISqlSugarRepository<WmsRoad> repository, IRunService runService, IVisualDevService visualDevService) public WmsRouteMgrService(ISqlSugarRepository<WmsRoad> repository, IRunService runService, IVisualDevService visualDevService, IUserManager userManager)
{ {
_db = repository.AsSugarClient(); _db = repository.AsSugarClient();
_runService = runService; _runService = runService;
_visualDevService = visualDevService; _visualDevService = visualDevService;
_userManager = userManager;
OverideFuncs.CreateAsync = Create; OverideFuncs.CreateAsync = Create;
OverideFuncs.ImportDataAsync = DataImport;
} }
private async Task<dynamic> Create(VisualDevModelDataCrInput input) private async Task<dynamic> Create(VisualDevModelDataCrInput input)
@@ -55,5 +64,59 @@ namespace Tnb.WarehouseMgr
await _runService.Create(templateEntity, input); await _runService.Create(templateEntity, input);
return await Task.FromResult(true); return await Task.FromResult(true);
} }
private async Task<dynamic> DataImport(VisualDevImportDataInput input)
{
int row = 0;
try
{
List<Dictionary<string, object>> dics = input.list;
List<WmsRoad> roads = new List<WmsRoad>();
List<string> pointCodes = new List<string>();
List<string> 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<WmsRoad>();
roads.Add(road);
}
var points = await _db.Queryable<WmsPointH>().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;
}
} }
} }

View File

@@ -62,10 +62,10 @@ public class Startup : AppStartup
.AddSenparcWeixinServices(App.Configuration); // Senparc.Weixin 注册如果使用Senparc.Weixin SDK则添加 .AddSenparcWeixinServices(App.Configuration); // Senparc.Weixin 注册如果使用Senparc.Weixin SDK则添加
services.AddOverideVisualDev(); services.AddOverideVisualDev();
#if !DEBUG
//定时任务 //定时任务
services.AddHostedService<TimedTaskBackgroundService>(); services.AddHostedService<TimedTaskBackgroundService>();
#endif
} }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting) public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)

View File

@@ -9,6 +9,7 @@ using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Extension; using JNPF.Common.Extension;
using JNPF.DependencyInjection; using JNPF.DependencyInjection;
using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Entitys.Dto.VisualDev;
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
using JNPF.VisualDev.Interfaces; using JNPF.VisualDev.Interfaces;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
@@ -28,5 +29,6 @@ namespace JNPF.VisualDev
public Func<VisualDevModelDataBatchDelInput, Task>? DeleteRangeAsync { get; set; } = null; public Func<VisualDevModelDataBatchDelInput, Task>? DeleteRangeAsync { get; set; } = null;
public Func<VisualDevModelListQueryInput, Task<dynamic>>? ExportAsync { get; set; } = null; public Func<VisualDevModelListQueryInput, Task<dynamic>>? ExportAsync { get; set; } = null;
public Func<IFormFile, Task<dynamic>>? ImportAsync { get; set; } = null; public Func<IFormFile, Task<dynamic>>? ImportAsync { get; set; } = null;
public Func<VisualDevImportDataInput, Task<dynamic>>? ImportDataAsync { get; set; } = null;
} }
} }

View File

@@ -795,12 +795,20 @@ namespace JNPF.VisualDev
[HttpPost("{modelId}/ImportData")] [HttpPost("{modelId}/ImportData")]
[UnitOfWork] [UnitOfWork]
public async Task<dynamic> ImportData(string modelId, [FromBody] VisualDevImportDataInput list) public async Task<dynamic> ImportData(string modelId, [FromBody] VisualDevImportDataInput list)
{
VisualDevImportDataOutput result = new VisualDevImportDataOutput();
var overideSvc = OverideVisualDevManager.GetOrDefault(modelId);
if (overideSvc != null && overideSvc.OverideFuncs.CreateAsync != null)
{
await overideSvc.OverideFuncs.ImportDataAsync(list);
}
else
{ {
var tInfo = await GetUploaderTemplateInfoAsync(modelId); var tInfo = await GetUploaderTemplateInfoAsync(modelId);
object[]? res = await ImportMenuData(tInfo, list.list, tInfo.visualDevEntity); object[]? res = await ImportMenuData(tInfo, list.list, tInfo.visualDevEntity);
var addlist = res.First() as List<Dictionary<string, object>>; var addlist = res.First() as List<Dictionary<string, object>>;
var errorlist = res.Last() as List<Dictionary<string, object>>; var errorlist = res.Last() as List<Dictionary<string, object>>;
var result = new VisualDevImportDataOutput() result = new VisualDevImportDataOutput()
{ {
snum = addlist.Count, snum = addlist.Count,
fnum = errorlist.Count, fnum = errorlist.Count,
@@ -808,6 +816,7 @@ namespace JNPF.VisualDev
resultType = errorlist.Count < 1 ? 0 : 1 resultType = errorlist.Count < 1 ? 0 : 1
}; };
}
return result; return result;
} }