优化wms项目目录结构
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Consts
|
||||
{
|
||||
public class WmsWareHouseConst
|
||||
{
|
||||
/// <summary>
|
||||
/// 出入库单据状态TypeID
|
||||
/// </summary>
|
||||
public const string WMS_INSTOCK_D_BILL_STATUS_TYPEID = "25065133038101";
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
{
|
||||
// bill_line,location_id,delivery_date,carry_id,carry_code
|
||||
/// <summary>
|
||||
/// 出入库明细Id
|
||||
/// </summary>
|
||||
public string id { get; set; }
|
||||
/// <summary>
|
||||
/// 出入库申请类型 1、入库 2、出库
|
||||
/// </summary>
|
||||
public EnumInOutStockType inoutStockType { get; set; }
|
||||
@@ -14,6 +14,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
/// <summary>
|
||||
/// 入库单明细Id
|
||||
/// </summary>
|
||||
public string id { get; set; }
|
||||
/// <summary>
|
||||
/// 入库单Id
|
||||
/// </summary>
|
||||
public string bill_id { get; set; }
|
||||
/// <summary>
|
||||
/// 单位id
|
||||
@@ -52,6 +56,14 @@ namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
/// </summary>
|
||||
public decimal? tax_price { get; set; }
|
||||
/// <summary>
|
||||
/// 不含税金额
|
||||
/// </summary>
|
||||
public decimal? amount { get; set; }
|
||||
/// <summary>
|
||||
/// 含税金额
|
||||
/// </summary>
|
||||
public decimal? all_amount { get; set; }
|
||||
/// <summary>
|
||||
/// 已打印数量
|
||||
/// </summary>
|
||||
public int print_qty { get; set; }
|
||||
@@ -60,6 +72,10 @@ namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
/// </summary>
|
||||
public int scan_qty { get; set; }
|
||||
/// <summary>
|
||||
/// 物品代码
|
||||
/// </summary>
|
||||
public string material_code { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 条码明细
|
||||
/// </summary>
|
||||
public List<WmsInstockCode> CodeDetails { get; set; }
|
||||
@@ -0,0 +1,155 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 出库库单据物料明细信息
|
||||
/// </summary>
|
||||
public class OutStockDetailOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 出库单明细Id
|
||||
/// </summary>
|
||||
public string id { get; set; }
|
||||
/// <summary>
|
||||
/// 出库单ID
|
||||
/// </summary>
|
||||
public string bill_id { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 明细状态
|
||||
/// </summary>
|
||||
public string line_status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 库位ID
|
||||
/// </summary>
|
||||
public string? location_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物品ID
|
||||
/// </summary>
|
||||
public string? material_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物品代码
|
||||
/// </summary>
|
||||
public string material_code { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单位ID
|
||||
/// </summary>
|
||||
public string unit_id { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单位代码
|
||||
/// </summary>
|
||||
public string? unit_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出库需求数量
|
||||
/// </summary>
|
||||
public decimal pr_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 实际出库数量
|
||||
/// </summary>
|
||||
public decimal qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 要求出库日期(销售出库为交期)
|
||||
/// </summary>
|
||||
public DateTime? delivery_date { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 发料仓库
|
||||
/// </summary>
|
||||
public string? warehouse_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 不含税单价
|
||||
/// </summary>
|
||||
public decimal? price { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 含税单价
|
||||
/// </summary>
|
||||
public decimal? tax_price { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 不含税金额
|
||||
/// </summary>
|
||||
public decimal? amount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 含税金额
|
||||
/// </summary>
|
||||
public decimal? all_amount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据ID
|
||||
/// </summary>
|
||||
public string? source_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单单据类型
|
||||
/// </summary>
|
||||
public int? source_type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据行号
|
||||
/// </summary>
|
||||
public int? source_line { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源单据明细ID
|
||||
/// </summary>
|
||||
public string? source_detail_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产工单号
|
||||
/// </summary>
|
||||
public string? mo_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产工单BOM明细Id
|
||||
/// </summary>
|
||||
public string? mo_bom_detail_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生产工单行号
|
||||
/// </summary>
|
||||
public int? mo_line { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 打印数量
|
||||
/// </summary>
|
||||
public decimal? print_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 扫描数量
|
||||
/// </summary>
|
||||
public decimal? scan_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string? remark { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 批次
|
||||
/// </summary>
|
||||
public string? code_batch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 条码明细
|
||||
/// </summary>
|
||||
public List<WmsOutstockCode> CodeDetails { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 入库策略输入参数
|
||||
/// </summary>
|
||||
public class InStockStrategyQuery
|
||||
{
|
||||
/// <summary>
|
||||
/// 仓库Id
|
||||
/// </summary>
|
||||
public string warehouse_id { get; set; }
|
||||
/// <summary>
|
||||
/// 物料Id
|
||||
/// </summary>
|
||||
public string material_id { get; set; }
|
||||
/// <summary>
|
||||
/// 批次
|
||||
/// </summary>
|
||||
public string code_batch { get; set; }
|
||||
/// <summary>
|
||||
/// 业务类型s
|
||||
/// </summary>
|
||||
public int BllType { get; set; }
|
||||
|
||||
public int Size { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Dto
|
||||
{
|
||||
internal class OutStockStrategyQuery
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,7 @@ public partial class WmsInstockD : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 执行状态
|
||||
/// </summary>
|
||||
public string line_status { get; set; } = string.Empty;
|
||||
public string line_status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物品ID
|
||||
|
||||
@@ -17,32 +17,27 @@ public partial class WmsOutstockD : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 所属组织ID
|
||||
/// </summary>
|
||||
public string org_id { get; set; } = string.Empty;
|
||||
public string? org_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出库单ID
|
||||
/// </summary>
|
||||
public string bill_id { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 行号
|
||||
/// </summary>
|
||||
public int bill_line { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 明细状态
|
||||
/// </summary>
|
||||
public int line_status { get; set; }
|
||||
public string line_status { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 库位ID
|
||||
/// </summary>
|
||||
public string location_id { get; set; } = string.Empty;
|
||||
public string? location_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物品ID
|
||||
/// </summary>
|
||||
public string material_id { get; set; } = string.Empty;
|
||||
public string? material_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物品代码
|
||||
@@ -57,7 +52,7 @@ public partial class WmsOutstockD : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 单位代码
|
||||
/// </summary>
|
||||
public string unit_code { get; set; } = string.Empty;
|
||||
public string? unit_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出库需求数量
|
||||
@@ -72,12 +67,12 @@ public partial class WmsOutstockD : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 要求出库日期(销售出库为交期)
|
||||
/// </summary>
|
||||
public DateTime delivery_date { get; set; } = DateTime.Now;
|
||||
public DateTime? delivery_date { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 发料仓库
|
||||
/// </summary>
|
||||
public string warehouse_id { get; set; } = string.Empty;
|
||||
public string? warehouse_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 不含税单价
|
||||
@@ -137,12 +132,12 @@ public partial class WmsOutstockD : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 打印数量
|
||||
/// </summary>
|
||||
public decimal print_qty { get; set; }
|
||||
public decimal? print_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 扫描数量
|
||||
/// </summary>
|
||||
public decimal scan_qty { get; set; }
|
||||
public decimal? scan_qty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 备注
|
||||
@@ -162,12 +157,12 @@ public partial class WmsOutstockD : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string create_id { get; set; } = string.Empty;
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime create_time { get; set; } = DateTime.Now;
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
|
||||
@@ -108,5 +108,8 @@ public partial class WmsPointH : BaseEntity<string>
|
||||
/// 时间戳(用于并发控制)
|
||||
/// </summary>
|
||||
public DateTime? timestamp { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 楼层
|
||||
/// </summary>
|
||||
public int floor { get; set; }
|
||||
}
|
||||
|
||||
18
WarehouseMgr/Tnb.WarehouseMgr.Entities/Mapper/Mapper.cs
Normal file
18
WarehouseMgr/Tnb.WarehouseMgr.Entities/Mapper/Mapper.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using Mapster;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Entities.Mapper
|
||||
{
|
||||
public class Mapper : IRegister
|
||||
{
|
||||
public void Register(TypeAdapterConfig config)
|
||||
{
|
||||
//config.ForType<InOutStockApplyforUpInput, WmsInstockD>()
|
||||
// .Map(dest => dest.id, src => src.bill_id);
|
||||
//config.ForType<InOutStockApplyforUpInput, WmsOutstockD>()
|
||||
// .Map(dest => dest.id, src => src.bill_id);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,10 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
|
||||
namespace Tnb.WarehouseMgr.Interfaces
|
||||
{
|
||||
@@ -11,5 +15,24 @@ namespace Tnb.WarehouseMgr.Interfaces
|
||||
/// </summary>
|
||||
public interface IWareHouseService
|
||||
{
|
||||
/// <summary>
|
||||
/// 入库策略
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<BasLocation>> InStockStrategy([FromQuery] InStockStrategyQuery input);
|
||||
/// <summary>
|
||||
/// 路径算法
|
||||
/// </summary>
|
||||
/// <param name="pStartId"></param>
|
||||
/// <param name="pEndId"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<WmsPointH>> PathAlgorithms(string pStartId, string pEndId);
|
||||
/// <summary>
|
||||
/// 生成预任务
|
||||
/// </summary>
|
||||
/// <param name="preTasks"></param>
|
||||
/// <returns></returns>
|
||||
Task<bool> GenPreTask(List<WmsPretaskH> preTasks);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 IWmsOutStockService
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BasicData\Tnb.BasicData.Entities\Tnb.BasicData.Entities.csproj" />
|
||||
<ProjectReference Include="..\Tnb.WarehouseMgr.Entities\Tnb.WarehouseMgr.Entities.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
|
||||
[Route("api/[area]/[controller]/[action]")]
|
||||
public class BaseService : IOverideVisualDevService, IDynamicApiController, ITransient
|
||||
public class BaseWareHouseService : IOverideVisualDevService, IDynamicApiController, ITransient
|
||||
{
|
||||
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
||||
}
|
||||
@@ -2,9 +2,11 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Aspose.Cells.Drawing;
|
||||
using Dm;
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.Common.Extension;
|
||||
@@ -13,6 +15,7 @@ using JNPF.DependencyInjection;
|
||||
using JNPF.DynamicApiController;
|
||||
using JNPF.Extras.CollectiveOAuth.Config;
|
||||
using JNPF.FriendlyException;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@@ -25,7 +28,9 @@ using Tnb.BasicData.Entities;
|
||||
using Tnb.BasicData.Entities.Enums;
|
||||
using Tnb.Common.Utils;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Entities.Enums;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
@@ -34,14 +39,14 @@ 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
|
||||
public class WareHouseService : BaseWareHouseService, IWareHouseService
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository)
|
||||
private readonly IDictionaryDataService _dictionaryDataService;
|
||||
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService)
|
||||
{
|
||||
_db = repository.AsSugarClient();
|
||||
_dictionaryDataService = dictionaryDataService;
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据载具Id带出库位、仓库信息
|
||||
@@ -93,26 +98,34 @@ namespace Tnb.WarehouseMgr
|
||||
case EnumInOutStockType.In:
|
||||
var wmsInstockD = input.Adapt<WmsInstockD>();
|
||||
var wmsInstockCodes = input.InstockCodes.Adapt<List<WmsInstockCode>>();
|
||||
wmsInstockCodes.ForEach(x =>
|
||||
if (wmsInstockCodes?.Count > 0)
|
||||
{
|
||||
if (x.id.IsNullOrWhiteSpace())
|
||||
wmsInstockCodes.ForEach(x =>
|
||||
{
|
||||
x.id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
});
|
||||
isOk = await _update<WmsInstockD, WmsInstockCode>(wmsInstockD, wmsInstockCodes);
|
||||
if (x.id.IsNullOrWhiteSpace())
|
||||
{
|
||||
x.id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
x.bill_d_id = wmsInstockD.id;
|
||||
});
|
||||
}
|
||||
isOk = await _update(wmsInstockD, wmsInstockCodes);
|
||||
break;
|
||||
case EnumInOutStockType.Out:
|
||||
var wmsOutstockD = input.Adapt<WmsOutstockD>();
|
||||
var wmsOutstockCodes = input.InstockCodes.Adapt<List<WmsOutstockCode>>();
|
||||
wmsOutstockCodes.ForEach(x =>
|
||||
if (wmsOutstockCodes?.Count > 0)
|
||||
{
|
||||
if (x.id.IsNullOrWhiteSpace())
|
||||
wmsOutstockCodes.ForEach(x =>
|
||||
{
|
||||
x.id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
});
|
||||
isOk = await _update<WmsOutstockD, WmsOutstockCode>(wmsOutstockD, wmsOutstockCodes);
|
||||
if (x.id.IsNullOrWhiteSpace())
|
||||
{
|
||||
x.id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
x.bill_d_id = wmsOutstockD.id;
|
||||
});
|
||||
}
|
||||
isOk = await _update(wmsOutstockD, wmsOutstockCodes);
|
||||
break;
|
||||
}
|
||||
if (!isOk) throw Oops.Oh(ErrorCode.COM1001);
|
||||
@@ -126,6 +139,7 @@ namespace Tnb.WarehouseMgr
|
||||
public async Task<dynamic> GetInOutStockCodesById([FromQuery] InOutStockDetailQuery input)
|
||||
{
|
||||
dynamic result = null;
|
||||
var dic = await _dictionaryDataService.GetDictionaryByTypeId(WmsWareHouseConst.WMS_INSTOCK_D_BILL_STATUS_TYPEID);
|
||||
switch (input.inoutStockType)
|
||||
{
|
||||
case EnumInOutStockType.In:
|
||||
@@ -133,7 +147,8 @@ namespace Tnb.WarehouseMgr
|
||||
.Where(a => a.id == input.bill_d_id)
|
||||
.Select(a => new InStockDetailOutput
|
||||
{
|
||||
bill_id = a.id,
|
||||
id = a.id,
|
||||
bill_id = a.bill_id,
|
||||
unit_id = a.unit_id,
|
||||
code_batch = a.code_batch,
|
||||
warehouse_id = a.warehouse_id,
|
||||
@@ -145,32 +160,69 @@ namespace Tnb.WarehouseMgr
|
||||
tax_price = a.tax_price,
|
||||
print_qty = a.print_qty,
|
||||
scan_qty = a.scan_qty,
|
||||
material_code = a.material_code,
|
||||
amount = a.amount,
|
||||
all_amount = a.all_amount,
|
||||
CodeDetails = SqlFunc.Subqueryable<WmsInstockCode>().Where(it => it.bill_d_id == a.id).ToList(),
|
||||
}).ToListAsync();
|
||||
})
|
||||
.Mapper(it => it.line_status = dic.ContainsKey(it.line_status) ? dic[it.line_status]?.ToString()! : "")
|
||||
.ToListAsync();
|
||||
|
||||
break;
|
||||
case EnumInOutStockType.Out:
|
||||
result = await _db.Queryable<WmsOutstockCode>().Where(it => it.bill_d_id == input.bill_d_id).ToListAsync();
|
||||
result = await _db.Queryable<WmsOutstockD>()
|
||||
.Where(a => a.id == input.bill_d_id)
|
||||
.Select(a => new OutStockDetailOutput
|
||||
{
|
||||
id = a.id,
|
||||
bill_id = a.bill_id,
|
||||
unit_id = a.unit_id,
|
||||
code_batch = a.code_batch,
|
||||
warehouse_id = a.warehouse_id,
|
||||
line_status = a.line_status,
|
||||
price = a.price,
|
||||
tax_price = a.tax_price,
|
||||
material_code = a.material_code,
|
||||
amount = a.amount,
|
||||
all_amount = a.all_amount,
|
||||
CodeDetails = SqlFunc.Subqueryable<WmsOutstockCode>().Where(it => it.bill_d_id == a.id).ToList(),
|
||||
})
|
||||
.Mapper(it => it.line_status = dic.ContainsKey(it.line_status) ? dic[it.line_status]?.ToString()! : "")
|
||||
.ToListAsync();
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task<bool> _update<T1, T2>(T1 entity, List<T2> entities) where T1 : BaseEntity<string>, new() where T2 : BaseEntity<string>, new()
|
||||
/// <summary>
|
||||
/// 入库策略
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<List<BasLocation>> InStockStrategy([FromQuery] InStockStrategyQuery input)
|
||||
{
|
||||
var isOk = false;
|
||||
try
|
||||
{
|
||||
await _db.Ado.BeginTranAsync();
|
||||
isOk = await _db.Updateable(entity).ExecuteCommandHasChangeAsync();
|
||||
isOk = await _db.Updateable(entities).ExecuteCommandHasChangeAsync();
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
}
|
||||
return isOk;
|
||||
var items = await _db.Queryable<BasLocation>().Where(it => it.wh_id == input.warehouse_id && it.is_lock == 0 && it.is_use == "0" && it.is_type == "0").OrderBy(it => new { it.layers, it.loc_line, it.loc_column }, OrderByType.Asc).ToListAsync();
|
||||
return items.Take(input.Size).ToList();
|
||||
}
|
||||
/// <summary>
|
||||
/// 出库策略
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<dynamic> OutStockStrategy()
|
||||
{
|
||||
return Task.FromResult<dynamic>(true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成预任务
|
||||
/// </summary>
|
||||
/// <param name="preTasks"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
public async Task<bool> GenPreTask(List<WmsPretaskH> preTasks)
|
||||
{
|
||||
var row = await _db.Insertable(preTasks).ExecuteCommandAsync();
|
||||
return row > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -179,13 +231,16 @@ namespace Tnb.WarehouseMgr
|
||||
/// <param name="pStartId"></param>
|
||||
/// <param name="pEndId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task PathAlgorithms(string pStartId, string pEndId)
|
||||
|
||||
public async Task<List<WmsPointH>> PathAlgorithms(string pStartId, string pEndId)
|
||||
{
|
||||
var roads = await _db.Queryable<WmsRoad>().ToListAsync();
|
||||
await LocPathCalcAlgorithms(pStartId, pEndId, roads);
|
||||
var points = await LocPathCalcAlgorithms(pStartId, pEndId, roads);
|
||||
return points;
|
||||
}
|
||||
private async Task LocPathCalcAlgorithms(string pStartId, string pEndId, List<WmsRoad> roads)
|
||||
|
||||
#region PrivateMethods
|
||||
private async Task<List<WmsPointH>> LocPathCalcAlgorithms(string pStartId, string pEndId, List<WmsRoad> roads)
|
||||
{
|
||||
var points = await _db.Queryable<WmsPointH>().ToListAsync();
|
||||
var startObj = points.Find(x => x.id == pStartId);
|
||||
@@ -216,7 +271,7 @@ namespace Tnb.WarehouseMgr
|
||||
isVisited[pStartId] = true;
|
||||
MatchPoint(results, roads, shortestPathPoints, isVisited, pStartId, pEndId);
|
||||
results.Add(endObj);
|
||||
string str = null;
|
||||
return results;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取匹配的最短路径节点
|
||||
@@ -258,5 +313,29 @@ namespace Tnb.WarehouseMgr
|
||||
index = prev[index];
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> _update<T1, T2>(T1 entity, List<T2> entities) where T1 : BaseEntity<string>, new() where T2 : BaseEntity<string>, new()
|
||||
{
|
||||
var isOk = false;
|
||||
try
|
||||
{
|
||||
//await _db.Ado.BeginTranAsync();
|
||||
isOk = await _db.Updateable(entity).ExecuteCommandHasChangeAsync();
|
||||
if (entities?.Count > 0)
|
||||
{
|
||||
var row = await _db.Storageable(entities).ExecuteCommandAsync();
|
||||
isOk = row > 0;
|
||||
}
|
||||
//await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//await _db.Ado.RollbackTranAsync();
|
||||
}
|
||||
return isOk;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
72
WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs
Normal file
72
WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Dtos.VisualDev;
|
||||
using JNPF.VisualDev;
|
||||
using JNPF.VisualDev.Entitys;
|
||||
using JNPF.VisualDev.Interfaces;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
/// <summary>
|
||||
/// 载具移入
|
||||
/// </summary>
|
||||
[OverideVisualDev(ModuleId)]
|
||||
public class WmsCarryMoveInStockService : BaseWareHouseService
|
||||
{
|
||||
private const string ModuleId = "26122102481957";
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IRunService _runService;
|
||||
private readonly IVisualDevService _visualDevService;
|
||||
private readonly IWareHouseService _wareHouseService;
|
||||
public WmsCarryMoveInStockService(
|
||||
ISqlSugarRepository<WmsCarryH> repository,
|
||||
IRunService runService,
|
||||
IVisualDevService visualDevService,
|
||||
IWareHouseService wareHouseService)
|
||||
{
|
||||
_db = repository.AsSugarClient();
|
||||
_runService = runService;
|
||||
_visualDevService = visualDevService;
|
||||
_wareHouseService = wareHouseService;
|
||||
OverideFuncs.CreateAsync = CarryMoveIn;
|
||||
}
|
||||
|
||||
private async Task<dynamic> CarryMoveIn(VisualDevModelDataCrInput input)
|
||||
{
|
||||
VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true);
|
||||
await _runService.Create(templateEntity, input);
|
||||
//入库取终点
|
||||
var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString(), Size = 1 };
|
||||
var endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
||||
WmsPointH sPoint = null;
|
||||
WmsPointH ePoint = null;
|
||||
if (input.data.ContainsKey(nameof(WmsPointH.location_id)))
|
||||
{
|
||||
sPoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == input.data[nameof(WmsPointH.location_id)].ToString());
|
||||
}
|
||||
if (endLocations?.Count > 0)
|
||||
{
|
||||
ePoint = await _db.Queryable<WmsPointH>().FirstAsync(it => it.location_id == endLocations[0].id);
|
||||
}
|
||||
if (sPoint != null && ePoint != null)
|
||||
{
|
||||
var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id);
|
||||
//根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
|
||||
//根据载具移入Id,回更单据状态
|
||||
//根据生成的预任务,插入预任务操作记录
|
||||
//根据载具ID,更新是否锁定和赋值起始库位
|
||||
//根据所有库位更新库位的锁定状态为“锁定”
|
||||
}
|
||||
return Task.FromResult(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ using SqlSugar;
|
||||
using Tnb.Common.Utils;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Entities.Dto;
|
||||
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
|
||||
using Tnb.WarehouseMgr.Entities.Enums;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
@@ -24,10 +24,8 @@ namespace Tnb.WarehouseMgr
|
||||
/// <summary>
|
||||
/// 载具服务
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
|
||||
[Route("api/[area]/[controller]/[action]")]
|
||||
[OverideVisualDev(ModuleId)]
|
||||
public class WmsCarryService : IOverideVisualDevService, IWmsCarryService, IDynamicApiController, ITransient
|
||||
public class WmsCarryService : BaseWareHouseService, IWmsCarryService
|
||||
{
|
||||
private const string ModuleId = "26188532491557";
|
||||
private readonly ISqlSugarClient _db;
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace Tnb.WarehouseMgr
|
||||
/// 齐套配套方案服务
|
||||
/// </summary>
|
||||
[OverideVisualDev(ModuleId)]
|
||||
public class WmsCollocationSchemeSevice : BaseService, IWmsCollocationSchemeSevice
|
||||
public class WmsCollocationSchemeSevice : BaseWareHouseService, IWmsCollocationSchemeSevice
|
||||
{
|
||||
private const string ModuleId = "26167204892965";
|
||||
private readonly ISqlSugarClient _db;
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Tnb.WarehouseMgr
|
||||
/// <summary>
|
||||
/// 投料记录
|
||||
/// </summary>
|
||||
public class WmsFeedingService : BaseService, IWmsFeedingService
|
||||
public class WmsFeedingService : BaseWareHouseService, IWmsFeedingService
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private static Dictionary<string, object> dicMaterial = new Dictionary<string, object>();
|
||||
|
||||
@@ -3,9 +3,11 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
@@ -13,13 +15,14 @@ namespace Tnb.WarehouseMgr
|
||||
/// <summary>
|
||||
/// 入库申请服务
|
||||
/// </summary>
|
||||
public class WmsInStockService : BaseService, IWmsInStockService
|
||||
public class WmsInStockService : BaseWareHouseService, IWmsInStockService
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
|
||||
public WmsInStockService(ISqlSugarRepository<WmsInstockH> repository)
|
||||
private readonly IDictionaryDataService _dictionaryDataService;
|
||||
public WmsInStockService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService)
|
||||
{
|
||||
_db = repository.AsSugarClient();
|
||||
_dictionaryDataService = dictionaryDataService;
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据入库申请单ID获取申请单明细信息
|
||||
@@ -29,7 +32,10 @@ namespace Tnb.WarehouseMgr
|
||||
[HttpGet]
|
||||
public async Task<dynamic> GetInStockDetailsListById([FromRoute] string billId)
|
||||
{
|
||||
var dic = await _dictionaryDataService.GetDictionaryByTypeId(WmsWareHouseConst.WMS_INSTOCK_D_BILL_STATUS_TYPEID);
|
||||
var items = await _db.Queryable<WmsInstockD>().Where(it => it.bill_id == billId).ToListAsync();
|
||||
_db.ThenMapper(items,
|
||||
it => it.line_status = dic.ContainsKey(it.line_status) ? dic[it.line_status]?.ToString()! : "");
|
||||
return items;
|
||||
}
|
||||
}
|
||||
|
||||
43
WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
Normal file
43
WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Systems.Interfaces.System;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Tnb.WarehouseMgr.Entities;
|
||||
using Tnb.WarehouseMgr.Entities.Consts;
|
||||
using Tnb.WarehouseMgr.Interfaces;
|
||||
|
||||
namespace Tnb.WarehouseMgr
|
||||
{
|
||||
/// <summary>
|
||||
/// 出库申请业务类
|
||||
/// </summary>
|
||||
public class WmsOutStockService : BaseWareHouseService, IWmsOutStockService
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IDictionaryDataService _dictionaryDataService;
|
||||
public WmsOutStockService(ISqlSugarRepository<WmsOutstockD> repository, IDictionaryDataService dictionaryDataService)
|
||||
{
|
||||
_db = repository.AsSugarClient();
|
||||
_dictionaryDataService = dictionaryDataService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据出库申请单ID获取申请单明细信息
|
||||
/// </summary>
|
||||
/// <param name="billId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<dynamic> GetInStockDetailsListById([FromRoute] string billId)
|
||||
{
|
||||
var dic = await _dictionaryDataService.GetDictionaryByTypeId(WmsWareHouseConst.WMS_INSTOCK_D_BILL_STATUS_TYPEID);
|
||||
var items = await _db.Queryable<WmsOutstockD>().Where(it => it.bill_id == billId).ToListAsync();
|
||||
_db.ThenMapper(items,
|
||||
it => it.line_status = dic.ContainsKey(it.line_status) ? dic[it.line_status]?.ToString()! : "");
|
||||
return items;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,4 +38,10 @@ public interface IDictionaryDataService
|
||||
/// <param name="typeId"></param>
|
||||
/// <returns></returns>
|
||||
Task<Dictionary<string, object>> GetDicByTypeId(string typeId);
|
||||
/// <summary>
|
||||
/// 根据typeId获取字典
|
||||
/// </summary>
|
||||
/// <param name="typeId"></param>
|
||||
/// <returns>{{id,fullName}}</returns>
|
||||
Task<Dictionary<string, object>> GetDictionaryByTypeId(string typeId);
|
||||
}
|
||||
@@ -345,7 +345,8 @@ public class DictionaryDataService : IDictionaryDataService, IDynamicApiControll
|
||||
public async Task<Dictionary<string, object>> GetDicByTypeId(string typeId) =>
|
||||
await _repository.AsQueryable().Where(x => x.DictionaryTypeId == typeId && x.DeleteMark == null).ToDictionaryAsync(x => x.EnCode, x => x.FullName);
|
||||
|
||||
|
||||
public async Task<Dictionary<string, object>> GetDictionaryByTypeId(string typeId) =>
|
||||
await _repository.AsQueryable().Where(x => x.DictionaryTypeId == typeId && x.DeleteMark == null).ToDictionaryAsync(x => x.Id, x => x.FullName);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user