using Admin.NET.Core.Service;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
using Flurl.Util;
using SqlSugar;
using NetTaste;
using System.DirectoryServices.ActiveDirectory;
using System.Reflection;
using System.Linq;
namespace Admin.NET.Application;
///
/// ASN明细表服务
///
[ApiDescriptionSettings(ApplicationConst.WmsOrderGroupName, Order = 100)]
public class WmsOrderAsnDetailsService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
private readonly SqlSugarRepository _WmsSncodeCreateRuleRep;
public WmsOrderAsnDetailsService(SqlSugarRepository rep, SqlSugarRepository wmsSncodeCreateRuleRep)
{
_rep = rep;
_WmsSncodeCreateRuleRep = wmsSncodeCreateRuleRep;
}
///
/// 分页查询ASN明细表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
[Description("WmsOrderAsnDetails/Page")]
public async Task> Page(WmsOrderAsnDetailsInput input)
{
var query = CommonPageFilter(input);
return await query
.OrderBy(x => x.AsnLineNumber)
//.OrderBuilder(input)
.ToPagedListAsync(input.Page, input.PageSize);
}
///
/// 不分页查询ASN明细表
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
[Description("WmsOrderAsnDetails/List")]
public async Task> List([FromQuery] WmsOrderAsnDetailsInput input)
{
var query = CommonPageFilter(input);
return await query.OrderBuilder(input).Select().ToListAsync();
}
///
/// 增加ASN明细表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Add")]
[Description("WmsOrderAsnDetails/Add")]
public async Task Add(AddWmsOrderAsnDetailsInput input)
{
var entity = input.Adapt();
//重复性验证
await CheckExist(entity);
await _rep.InsertAsync(entity);
return entity.Id;
}
///
/// 删除ASN明细表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
[Description("WmsOrderAsnDetails/Delete")]
public async Task Delete(DeleteWmsOrderAsnDetailsInput input)
{
var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
//await _rep.FakeDeleteAsync(entity); //假删除
await _rep.DeleteAsync(entity); //真删除
}
///
/// 更新ASN明细表
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Update")]
[Description("WmsOrderAsnDetails/Update")]
public async Task Update(UpdateWmsOrderAsnDetailsInput input)
{
var entity = input.Adapt();
//重复性验证
await CheckExist(entity,true);
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
///
/// 更新ASN明细表 - 生成条码 -ly
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "UpdateBarCode")]
[Description("WmsOrderAsnDetails/UpdateBarCode")]
public async Task UpdateBarCode(UpdateWmsOrderAsnIdsInput input)
{
//var entity = input.Adapt();
////await CheckExist(entity, true);//重复性验证
//await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
if (input is null || input.Id.Count == 0)
{
throw Oops.Oh("输入参不能为空");
}
var WmsSncodeCreateRuleItem = await _WmsSncodeCreateRuleRep
.GetFirstAsync(w => (w.CreateCodeType == CreateCodeTypeEnum.ASN单一维码 ||
w.CreateCodeType == CreateCodeTypeEnum.ASN单二维码) && w.IsDisabled == false);
if (WmsSncodeCreateRuleItem == null)
{
throw Oops.Oh($"条码生成规则-规则编号ASN不存在");
}
var ruleArr = WmsSncodeCreateRuleItem.SNCodeRule.Replace(',', ',').Split(',').ToList();
//if (!ruleArr.Any(s => s.IndexOf("Id", StringComparison.OrdinalIgnoreCase) >= 0))
//{
// throw Oops.Oh("该条码生成规则不包含必须的字段“Id”!");
//}
var Details = new List();
foreach(var item in input.Id)
{
var getSnCodeModel = await _rep.AsQueryable().FirstAsync(p => p.Id == item);
if(getSnCodeModel != null)
{
Details.Add(getSnCodeModel);
}
}
var flag = 0;
foreach( var item in Details)
{
if (item.AsnStatus != OrderStatusEnum.新建) { throw Oops.Oh("状态不是新建"); }
var sn_2dStr = "";
foreach (var mark in ruleArr)
{
Type type = item.GetType();
List PropertyList = type.GetProperties().ToList();
var propertyItem = PropertyList.Find(p => p.Name.ToUpper() == mark.ToUpper());
string itemModelName = Convert.ToString(propertyItem.GetValue(item, null));
if (WmsSncodeCreateRuleItem.CreateCodeType == CreateCodeTypeEnum.ASN单一维码)//ly-一维码组成:单号和行号 不用分隔符分割
{
sn_2dStr = mark == ruleArr[ruleArr.Count - 1] ? sn_2dStr += itemModelName : sn_2dStr += itemModelName;
item.SN_1d = sn_2dStr;
item.SN_2d = "";
}
else
{
sn_2dStr = mark == ruleArr[ruleArr.Count - 1] ? sn_2dStr += itemModelName : sn_2dStr += itemModelName + WmsSncodeCreateRuleItem.Delimiter;
item.SN_2d = sn_2dStr;
item.SN_1d = "";
}
}
}
await _rep.UpdateRangeAsync(Details);//更新
}
///
/// 获取ASN明细表
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "Detail")]
[Description("WmsOrderAsnDetails/Detail")]
public async Task Detail([FromQuery] QueryByIdWmsOrderAsnDetailsInput input)
{
return await _rep.GetFirstAsync(u => u.Id == input.Id);
}
#region 私有方法
///
/// 公共查询ASN明细表条件
///
///
///
private ISugarQueryable CommonPageFilter(WmsOrderAsnDetailsInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.PoNo.Contains(input.SearchKey.Trim())
|| u.MaterialCode.Contains(input.SearchKey.Trim())
|| u.MaterialName.Contains(input.SearchKey.Trim())
|| u.SupplierCode.Contains(input.SearchKey.Trim())
|| u.SupplierName.Contains(input.SearchKey.Trim())
|| u.SN_1d.Contains(input.SearchKey.Trim())
|| u.SN_2d.Contains(input.SearchKey.Trim())
|| u.ProjectNo.Contains(input.SearchKey.Trim())
|| u.AsnNo.Contains(input.SearchKey.Trim())
|| u.SupplierBatch.Contains(input.SearchKey.Trim())
|| u.ErpCode.Contains(input.SearchKey.Trim())
|| u.ErpOrderNo.Contains(input.SearchKey.Trim())
)
.WhereIF(input.PoId>0, u => u.PoId == input.PoId)
.WhereIF(!string.IsNullOrWhiteSpace(input.PoNo), u => u.PoNo.Contains(input.PoNo.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.PoLineNumber), u => u.PoLineNumber.Contains(input.PoLineNumber.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.MaterialCode), u => u.MaterialCode.Contains(input.MaterialCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.MaterialName), u => u.MaterialName.Contains(input.MaterialName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SupplierCode), u => u.SupplierCode.Contains(input.SupplierCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SupplierName), u => u.SupplierName.Contains(input.SupplierName.Trim()))
// .WhereIF(!string.IsNullOrWhiteSpace(input.POUnit), u => u.POUnit.Contains(input.Unit.Trim()))
.WhereIF(input.AsnStatus.HasValue, u => u.AsnStatus == input.AsnStatus)
.WhereIF(!string.IsNullOrWhiteSpace(input.AsnStatusName), u => u.AsnStatusName.Contains(input.AsnStatusName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SN_1d), u => u.SN_1d.Contains(input.SN_1d.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SN_2d), u => u.SN_2d.Contains(input.SN_2d.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Package), u => u.Package.Contains(input.Package.Trim()))
.WhereIF(input.IsFreeze.HasValue, u => u.IsFreeze == input.IsFreeze)
.WhereIF(!string.IsNullOrWhiteSpace(input.FreezeReason), u => u.FreezeReason.Contains(input.FreezeReason.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ProjectNo), u => u.ProjectNo.Contains(input.ProjectNo.Trim()))
.WhereIF(input.FactoryId>0, u => u.FactoryId == input.FactoryId)
.WhereIF(!string.IsNullOrWhiteSpace(input.FactoryName), u => u.FactoryName.Contains(input.FactoryName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.FactoryCode), u => u.FactoryCode.Contains(input.FactoryCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Dock), u => u.Dock.Contains(input.Dock.Trim()))
.WhereIF(input.AsnId>0, u => u.AsnId == input.AsnId)
.WhereIF(!string.IsNullOrWhiteSpace(input.AsnNo), u => u.AsnNo.Contains(input.AsnNo.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SupplierBatch), u => u.SupplierBatch.Contains(input.SupplierBatch.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Batch), u => u.Batch.Contains(input.Batch.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ErpCode), u => u.ErpCode.Contains(input.ErpCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ErpOrderNo), u => u.ErpOrderNo.Contains(input.ErpOrderNo.Trim()))
.Select();
if(input.PlannedStartTimeRange != null && input.PlannedStartTimeRange.Count >0)
{
DateTime? start= input.PlannedStartTimeRange[0].Value.AddDays(-1);
query = query.WhereIF(start.HasValue, u => u.PlannedStartTime > start);
if (input.PlannedStartTimeRange.Count >1 && input.PlannedStartTimeRange[1].HasValue)
{
var end = input.PlannedStartTimeRange[1].Value.AddDays(1);
query = query.Where(u => u.PlannedStartTime < end);
}
}
if(input.PlannedEndTimeRange != null && input.PlannedEndTimeRange.Count >0)
{
DateTime? start= input.PlannedEndTimeRange[0].Value.AddDays(-1);
query = query.WhereIF(start.HasValue, u => u.PlannedEndTime > start);
if (input.PlannedEndTimeRange.Count >1 && input.PlannedEndTimeRange[1].HasValue)
{
var end = input.PlannedEndTimeRange[1].Value.AddDays(1);
query = query.Where(u => u.PlannedEndTime < end);
}
}
return query;
}
///
/// 重复性验证
///
/// 验证对象
/// 是否是编辑
///
private async Task CheckExist( WmsOrderAsnDetails input,bool isEdit=false)
{
//没有配置组合校验,不需要验重
//没有配置单独校验,不需要验重
}
#endregion
}