using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Admin.NET.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Microsoft.AspNetCore.Http;
using System.Text;
using System.Web;
using Furion.RemoteRequest.Extensions;
using Furion;
using Serilog;
using HttpMethod = System.Net.Http.HttpMethod;
namespace Admin.NET.Application
{
///
/// 退货单服务
///
[ApiDescriptionSettings("退货单", Name = "WmsGoodsReturnOrder", Order = 100)]
[Route("api/[Controller]")]
public class WmsGoodsReturnOrderService : IWmsGoodsReturnOrderService, IDynamicApiController, ITransient
{
private readonly IRepository _wmsGoodsReturnOrderRep;
private readonly IRepository _sysDictTypeRep;
private readonly IRepository _sysDictDataRep;
private readonly ISysExcelTemplateService _sysExcelTemplateService;
private readonly static object _lock = new();
private readonly IRepository _wmsGoodsReturnOrderDetailsRep;
private readonly IRepository _wmsOrderTypeRep;
public WmsGoodsReturnOrderService(
IRepository wmsGoodsReturnOrderRep
,IRepository sysDictTypeRep
,IRepository sysDictDataRep
,ISysExcelTemplateService sysExcelTemplateService
, IRepository wmsGoodsReturnOrderDetailsRep
, IRepository wmsOrderTypeRep
)
{
_wmsGoodsReturnOrderRep = wmsGoodsReturnOrderRep;
_sysDictTypeRep = sysDictTypeRep;
_sysDictDataRep = sysDictDataRep;
_sysExcelTemplateService = sysExcelTemplateService;
_wmsGoodsReturnOrderDetailsRep = wmsGoodsReturnOrderDetailsRep;
_wmsOrderTypeRep = wmsOrderTypeRep;
}
///
/// 分页查询退货单
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] WmsGoodsReturnOrderSearch input)
{
var wmsGoodsReturnOrders = await _wmsGoodsReturnOrderRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.NO), u => EF.Functions.Like(u.NO, $"%{input.NO.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.Vendorcode), u => EF.Functions.Like(u.Vendorcode, $"%{input.Vendorcode.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.Vendorname), u => EF.Functions.Like(u.Vendorname, $"%{input.Vendorname.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.Companyname), u => EF.Functions.Like(u.Companyname, $"%{input.Companyname.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.WarehouseKeepername), u => EF.Functions.Like(u.WarehouseKeepername, $"%{input.WarehouseKeepername.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.WarehouseCentername), u => EF.Functions.Like(u.WarehouseCentername, $"%{input.WarehouseCentername.Trim()}%"))
.Where(input.GoodsReturnStatus != null, u => u.GoodsReturnStatus == input.GoodsReturnStatus)
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return wmsGoodsReturnOrders;
}
///
/// 获取单据明细
///
///
///
[HttpGet("PageDetail")]
public async Task> PageDetail([FromQuery] GoodsReturnOrdePageDetailInput input)
{
var wmsOrders = await _wmsGoodsReturnOrderDetailsRep.DetachedEntities
.Where(input.Id != null, u => u.OrderId == input.Id)
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return wmsOrders;
}
///
/// 获取退货单(yigo系统)
///
///
///
[HttpPost("GetGoodsReturnOrder")]
public async Task GetGoodsReturnOrder()
{
//获取退库单
string url = App.Configuration["YiGoWebApi:QueryBackNotice"];
var Billdate_S = DateTime.Now.AddDays(-15).ToString("yyyy-MM-dd");
var Billdate_E = DateTime.Now.AddDays(15).ToString("yyyy-MM-dd");
//写日志文件
//Log.Error($"[TransferContainerCode][ContainerCode:{input.ContainerCode}][url:{url}]");
var response = await url.SetHttpMethod(System.Net.Http.HttpMethod.Post)
.SetBody(new Dictionary {
{ "Billdate_S", Billdate_S },
{ "Billdate_E", Billdate_E},
}, "application/json").PostAsStringAsync();
var Data = response.FromJson();
var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("退货出库"));
foreach (var item in Data.Data)
{
item.Id = Yitter.IdGenerator.YitIdHelper.NextId();
var wmsGoodsReturnOrder = item.Adapt();
var isExcit = await _wmsGoodsReturnOrderRep.AnyAsync(x => x.NO == item.NO);
if (!isExcit)
{
wmsGoodsReturnOrder.OrderLargeCategory = wmsOrderType != null ? wmsOrderType.Pid : 0;
wmsGoodsReturnOrder.OrderSubclass = wmsOrderType != null ? wmsOrderType.Id : 0;
await _wmsGoodsReturnOrderRep.InsertNowAsync(wmsGoodsReturnOrder);
foreach (var item1 in item.Dtls)
{
var WmsGoodsReturnOrderDetail = item1.Adapt();
WmsGoodsReturnOrderDetail.OrderId = item.Id;
await _wmsGoodsReturnOrderDetailsRep.InsertNowAsync(WmsGoodsReturnOrderDetail);
}
}
}
}
///
/// 退货下架接口(yigo系统)
///
///
///
[HttpPost("ReturnGoodsReturnOrder")]
[UnifyResult(typeof(object))]
[UnitOfWork]
public async Task