wms库房业务代码提交

This commit is contained in:
DEVICE8\12494
2023-06-06 08:33:07 +08:00
parent 14cbca311d
commit e81ea21af6
9 changed files with 412 additions and 2 deletions

View File

@@ -57,7 +57,7 @@ public partial class BasLocation : BaseEntity<string>
/// <summary>
/// 位置序号
/// </summary>
public int seq { get; set; }
public int loc_line { get; set; }
/// <summary>
/// 创建用户
@@ -113,5 +113,8 @@ public partial class BasLocation : BaseEntity<string>
/// 库位名称
/// </summary>
public string? location_name { get; set; }
/// <summary>
/// 列
/// </summary>
public int loc_column { get; set; }
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.BasicData.Entities.Enums
{
/// <summary>
/// 库位类型
/// </summary>
public enum EnumLocationType
{
= 0,
,
,
,
,
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tnb.BasicData.Entities;
namespace Tnb.BasicData.Interfaces
{
/// <summary>
/// 库位服务接口
/// </summary>
public interface IBasLocationService
{
/// <summary>
/// 根据库位id获取库位信息
/// </summary>
/// <param name="locIds">库位Ids</param>
/// <returns></returns>
Task<List<BasLocation>> GetLocationInfobyIds(IEnumerable<string> locIds);
}
}

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells.Drawing;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.BasicData.Entities.Enums;
using Tnb.BasicData.Interfaces;
namespace Tnb.BasicData
{
/// <summary>
/// 库位资料服务
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)]
[Route("api/[area]/[controller]/[action]")]
public class BasLocationService : IBasLocationService, IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
public BasLocationService(ISqlSugarRepository<BasLocation> repository)
{
_db = repository.AsSugarClient();
}
/// <summary>
/// 获取非存储库位载具列表
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetUnStoreLocationListByCarryId([FromRoute]string carryId)
{
var items = await _db.Queryable<BasLocation>().Where(it => !string.IsNullOrEmpty(it.is_type) && Convert.ToInt32(it.is_type) != (int)EnumLocationType.).ToListAsync();
return items;
}
public async Task<List<BasLocation>> GetLocationInfobyIds(IEnumerable<string> locIds)
{
if (locIds == null) throw new ArgumentNullException(nameof(locIds));
if (!locIds.Any()) throw new ArithmeticException($"parameter locIds.Count is not be empty");
var items = await _db.Queryable<BasLocation>().Where(it => locIds.Contains(it.id)).ToListAsync();
return items;
}
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Entities.Enums
{
/// <summary>
/// 库位类型
/// </summary>
public enum EnumLocationType
{
= 0,
,
,
,
,
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Interfaces
{
/// <summary>
/// 库房业务(出入库)接口
/// </summary>
public interface IWareHouseService
{
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tnb.WarehouseMgr.Interfaces
{
/// <summary>
/// Wms配送申请服务接口
/// </summary>
public interface IWmsDeliveryService
{
}
}

View File

@@ -0,0 +1,163 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells.Drawing;
using JNPF.Common.Extension;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.BasicData.Entities.Enums;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// 库房业务类(出入库)
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class WareHouseService : IWareHouseService, IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository)
{
_db = repository.AsSugarClient();
}
/// <summary>
/// 根据载具Id带出库位、仓库信息
/// </summary>
/// <param name="carryId">载具id</param>
/// <remarks>
/// returns:
/// <br/>{
/// <br/> carry_id:载具Id
/// <br/> carry_name:载具名称
/// <br/> location_id:库位Id
/// <br/> location_name:库位名称
/// <br/> warehouse_id:库房Id
/// <br/> warehouse_name库房名称
/// <br/>}
/// </remarks>
[HttpGet]
public async Task<dynamic> GetLocationAndWorkHouseByCarryId([FromRoute] string carryId)
{
var items = await _db.Queryable<WmsCarryH>().LeftJoin<BasLocation>((a, b) => a.location_id == b.id)
.LeftJoin<BasWarehouse>((a, b, c) => b.wh_id == c.id)
.Where(a => a.id == carryId)
.Select((a, b, c) => new
{
carry_id = a.id,
carry_name = a.carry_name,
location_id = b.id,
location_name = b.location_name,
warehouse_id = c.id,
warehouse_name = c.whname,
})
.ToListAsync();
return items;
}
/// <summary>
/// 获取载具信息(入库业务) 当前载具启用;未锁定;如果有库位信息,库位不能为存储库位,出库库位,分拣库位;
/// </summary>
/// <remarks>
/// returns:
/// <br/>{
/// <br/> carry_id:载具Id
/// <br/> carry_code:载具编号
/// <br/> carry_name:载具名称
/// <br/> location_id:库位id
/// <br/> location_code:库位编码
/// <br/> location_name:库位名称
/// <br/>}
/// </remarks>
[HttpGet]
public async Task<dynamic> GetCarryInfo()
{
var locationTypes = new[] { (int)EnumLocationType., (int)EnumLocationType., (int)EnumLocationType. };
var items = await _db.Queryable<WmsCarryH>().LeftJoin<BasLocation>((a, b) => a.location_id == b.id)
.Where((a, b) => a.status == 0 && a.is_lock == 0 && !locationTypes.Contains(Convert.ToInt32(b.is_type)))
.Select((a, b) => new
{
carry_id = a.id,
carry_code = a.carry_code,
carry_name = a.carry_name,
location_id = b.id,
location_code = b.location_code,
location_name = b.location_name,
})
.ToListAsync();
return items;
}
/// <summary>
/// 获取库位信息(入库业务) 库位不能为存储库位,出库库位,分拣库位;未锁定
/// </summary>
/// <remarks>
/// returns
/// <br/>{
/// <br/> location_id:库位Id
/// <br/> location_code库位编号
/// <br/> location_name:库位名称
/// <br/> layers:楼层
/// <br/>}
/// </remarks>
[HttpGet]
public async Task<dynamic> GetLocationInfo()
{
var locationTypes = new[] { (int)EnumLocationType., (int)EnumLocationType., (int)EnumLocationType. };
var items = await _db.Queryable<BasLocation>().Where(it => it.is_lock == 0 && !locationTypes.Contains(Convert.ToInt32(it.is_type)))
.Select(it => new
{
location_id = it.id,
location_code = it.location_code,
location_name = it.location_name,
layers = it.layers,
})
.ToListAsync();
return items;
}
/// <summary>
/// 出库查询目标库位信息,覆盖过滤条件
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetOutStoreDestLocation()
{
var locationTypes = new[] { (int)EnumLocationType., (int)EnumLocationType. };
var items = await _db.Queryable<BasLocation>().Where(it => it.is_lock == 0 && !locationTypes.Contains(Convert.ToInt32(it.is_type)))
.Select(it => new
{
location_id = it.id,
location_code = it.location_code,
})
.ToListAsync();
return items;
}
/// <summary>
/// 出库申请-查询载具信息
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetOutStoreLocation()
{
var items = await _db.Queryable<WmsCarryH>().LeftJoin<BasLocation>((a, b) => a.location_id == b.id)
.Where((a, b) => a.status == 0 && a.is_lock == 0 && Convert.ToInt32(b.is_type) == (int)EnumLocationType.)
.Select((a, b) => new
{
carry_id = a.id,
carry_code = a.carry_code,
carry_name = a.carry_name,
location_id = b.id,
location_code = b.location_code,
location_name = b.location_name,
})
.ToListAsync();
return items;
}
}
}

View File

@@ -0,0 +1,102 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells.Drawing;
using JNPF.Common.Dtos.VisualDev;
using JNPF.Common.Extension;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.VisualDev;
using JNPF.VisualDev.Entitys;
using JNPF.VisualDev.Interfaces;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.BasicData.Interfaces;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
/// <summary>
/// 配送申请服务
/// </summary>
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
public class WmsDeliveryService : IOverideVisualDevService, IWmsDeliveryService, IDynamicApiController, ITransient
{
private const string ModuleId = "26126388337189";
private readonly ISqlSugarClient _db;
private readonly IRunService _runService;
private readonly IVisualDevService _visualDevService;
private readonly IBasLocationService _basLocationService;
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
public WmsDeliveryService(
ISqlSugarRepository<WmsDelivery> repository,
IRunService runService,
IVisualDevService visualDevService,
IBasLocationService basLocationService
)
{
_db = repository.AsSugarClient();
_runService = runService;
_visualDevService = visualDevService;
_basLocationService = basLocationService;
//OverideFuncs.CreateAsync = Create;
}
/// <summary>
/// 根据载具编号获取起始库位点
/// </summary>
/// <param name="carryId"></param>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> GetUnStoreLocationListByCarryId([FromRoute] string carryId)
{
var items = await _db.Queryable<WmsCarryH>().LeftJoin<BasLocation>((a, b) => a.location_id == b.id)
.Where(a => a.id == carryId)
.Select((a, b) => new
{
carry_code = a.carry_code,
location_code = b.location_code,
})
.ToListAsync();
return items;
}
private async Task<dynamic> Create(VisualDevModelDataCrInput input)
{
try
{
//startlocation_id
//endlocation_id
string startLocationId = "", endLocationId = "";
if (input.data.ContainsKey(nameof(WmsDelivery.startlocation_id)))
{
startLocationId = input.data[nameof(WmsDelivery.startlocation_id)]?.ToString()!;
}
if (input.data.ContainsKey(nameof(WmsDelivery.endlocation_id)))
{
endLocationId = input.data[nameof(WmsDelivery.endlocation_id)]?.ToString()!;
}
var locIds = new[] { startLocationId, endLocationId };
var locs = await _basLocationService.GetLocationInfobyIds(locIds);
if (locs?.Count > 0)
{
var isStoreLoc = locs.Where(x => !x.IsNullOrEmpty()).Select(x => x.is_type.ParseToInt()).Any(x => x == (int)EnumLocationType.);
if (isStoreLoc) throw new AppFriendlyException("起始库位不能为存储库位", 500);
}
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
await _runService.Create(templateEntity, input);
}
catch (Exception)
{
return await Task.FromResult(false);
}
return await Task.FromResult(true);
}
}
}