133 lines
5.6 KiB
C#
133 lines
5.6 KiB
C#
using JNPF.Common.Core.Manager;
|
|
using JNPF.Common.Extension;
|
|
using JNPF.Common.Security;
|
|
using JNPF.FriendlyException;
|
|
using JNPF.VisualDev;
|
|
using JNPF.VisualDev.Entitys.Dto.VisualDev;
|
|
using Mapster;
|
|
using SqlSugar;
|
|
using Tnb.BasicData.Entities;
|
|
using Tnb.WarehouseMgr.Entities;
|
|
|
|
namespace Tnb.WarehouseMgr
|
|
{
|
|
/// <summary>
|
|
/// 点位管理业务类
|
|
/// </summary>
|
|
[OverideVisualDev(ModuleConsts.MODULE_WMSPOINT_ID)]
|
|
public class WmsPointService : BaseWareHouseService
|
|
{
|
|
private readonly ISqlSugarClient _db;
|
|
private readonly IUserManager _userManager;
|
|
public WmsPointService(ISqlSugarRepository<WmsPointH> repository, IUserManager userManager)
|
|
{
|
|
_db = repository.AsSugarClient();
|
|
_userManager = userManager;
|
|
OverideFuncs.ImportDataAsync = DataImport;
|
|
}
|
|
|
|
private async Task<dynamic> DataImport(VisualDevImportDataInput input)
|
|
{
|
|
int row = 0;
|
|
List<Dictionary<string, object>> errorlist = new();
|
|
VisualDevImportDataOutput result = new();
|
|
try
|
|
{
|
|
|
|
List<Dictionary<string, object>> dics = input.list;
|
|
List<WmsPointH> points = new();
|
|
WmsPointH pt = new();
|
|
List<string> aCodes = new();
|
|
List<string> lCodes = new();
|
|
//遍历字典,找出需要查询数据库拿的相关字段
|
|
foreach (Dictionary<string, object> d in dics)
|
|
{
|
|
if (d.Select(x => x.Value.ToString()).ToList().Find(v => v != "" && v != string.Empty && v != null) == null)
|
|
{
|
|
continue;
|
|
}
|
|
_ = d.ContainsKey("location_code");
|
|
string pCode = d["point_code"]?.ToString() ?? string.Empty;
|
|
string pName = d["point_name"]?.ToString() ?? string.Empty;
|
|
string aCode = d["area_code"]?.ToString() ?? string.Empty;
|
|
string lCode = d["location_code"]?.ToString() ?? string.Empty;
|
|
string floor = d["floor"]?.ToString() ?? string.Empty;
|
|
if (pCode == string.Empty)
|
|
{
|
|
throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据点位编号不可为空", 500);
|
|
}
|
|
|
|
if (pName == string.Empty)
|
|
{
|
|
throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据点位名称不可为空", 500);
|
|
}
|
|
|
|
if (floor == string.Empty)
|
|
{
|
|
throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据楼层不可为空", 500);
|
|
}
|
|
|
|
aCodes.Add(aCode);
|
|
lCodes.Add(lCode);
|
|
d["create_time"] = DateTime.Now;
|
|
_ = d.Remove("modify_time");
|
|
pt = d.Adapt<WmsPointH>();
|
|
points.Add(pt);
|
|
}
|
|
Dictionary<string, object> aDic = await _db.Queryable<WmsAreaH>().Where(it => aCodes.FindAll(x => x.ToString().IsNotEmptyOrNull() && x.ToString() != "").Contains(it.code)).ToDictionaryAsync(x => x.code, x => x.id);
|
|
Dictionary<string, object> lDic = await _db.Queryable<BasLocation>().Where(it => lCodes.FindAll(x => x.ToString().IsNotEmptyOrNull() && x.ToString() != "").Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id);
|
|
string orgId = _userManager.User.OrganizeId;
|
|
string userId = _userManager.UserId;
|
|
foreach (WmsPointH p in points)
|
|
{
|
|
if (!aDic.ContainsKey(p.area_code))
|
|
{
|
|
throw new AppFriendlyException($"第{points.IndexOf(p) + 1}个数据的管理区编号有误", 500);
|
|
}
|
|
|
|
p.id = SnowflakeIdHelper.NextId();
|
|
p.org_id = orgId;
|
|
p.is_lock = 0;
|
|
p.status = 1;
|
|
p.point_x = 0;
|
|
p.point_y = 0;
|
|
p.point_z = 0;
|
|
p.location_id = p.location_code != null && p.location_code != string.Empty ? lDic[p.location_code]?.ToString() : null;
|
|
p.area_id = aDic[p.area_code]?.ToString() ?? throw new AppFriendlyException($"第{points.IndexOf(p) + 1}个数据的管理区编号编号有误", 500);
|
|
p.create_id = userId;
|
|
p.modify_id = null;
|
|
p.modify_time = null;
|
|
}
|
|
if (points.Count > 1000)
|
|
{
|
|
row = await _db.Fastest<WmsPointH>().BulkCopyAsync(points);
|
|
}
|
|
else if (points.Count > 400)
|
|
{
|
|
_db.Utilities.PageEach(points, 100, async pageList =>
|
|
{
|
|
row = await _db.Insertable(pageList).ExecuteCommandAsync();
|
|
});
|
|
}
|
|
else
|
|
{
|
|
row = await _db.Insertable(points).ExecuteCommandAsync();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw Oops.Bah(ex.Message);
|
|
}
|
|
result = new VisualDevImportDataOutput()
|
|
{
|
|
snum = row,
|
|
fnum = 0,
|
|
failResult = errorlist,
|
|
resultType = errorlist.Count < 1 ? 0 : 1
|
|
};
|
|
return result;
|
|
}
|
|
|
|
}
|
|
}
|