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;
using Furion.RemoteRequest.Extensions;
using Serilog;
using HttpMethod = System.Net.Http.HttpMethod;
namespace Admin.NET.Application
{
///
/// 退库单服务
///
[ApiDescriptionSettings("自己的业务", Name = "WmsStockReturnOrder", Order = 100)]
[Route("api/[Controller]")]
public class WmsStockReturnOrderService : IWmsStockReturnOrderService, IDynamicApiController, ITransient
{
private readonly IRepository _wmsStockReturnOrderRep;
private readonly IRepository _sysDictTypeRep;
private readonly IRepository _sysDictDataRep;
private readonly ISysExcelTemplateService _sysExcelTemplateService;
private readonly static object _lock = new();
private readonly IRepository _wmsStockReturnOrderDetailsRep;
private readonly IRepository _wmsTakeMaterialOrderDetailRep;
private readonly IRepository _wmsOrderTypeRep;
public WmsStockReturnOrderService(
IRepository wmsStockReturnOrderRep
,IRepository sysDictTypeRep
,IRepository sysDictDataRep
,ISysExcelTemplateService sysExcelTemplateService
, IRepository wmsStockReturnOrderDetailsRep
, IRepository wmsTakeMaterialOrderDetailRep
, IRepository wmsOrderTypeRep
)
{
_wmsStockReturnOrderRep = wmsStockReturnOrderRep;
_sysDictTypeRep = sysDictTypeRep;
_sysDictDataRep = sysDictDataRep;
_sysExcelTemplateService = sysExcelTemplateService;
_wmsStockReturnOrderDetailsRep = wmsStockReturnOrderDetailsRep;
_wmsTakeMaterialOrderDetailRep = wmsTakeMaterialOrderDetailRep;
_wmsOrderTypeRep = wmsOrderTypeRep;
}
///
/// 分页查询退库单
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] WmsStockReturnOrderSearch input)
{
var wmsStockReturnOrders = await _wmsStockReturnOrderRep.DetachedEntities
.Where(input.MoveType != null, u => u.MoveType == input.MoveType)
.Where(!string.IsNullOrEmpty(input.NO), u => EF.Functions.Like(u.NO, $"%{input.NO.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.WBSElementcode), u => EF.Functions.Like(u.WBSElementcode, $"%{input.WBSElementcode.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.BenefitingDepartcode), u => EF.Functions.Like(u.BenefitingDepartcode, $"%{input.BenefitingDepartcode.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.CostCenterID), u => EF.Functions.Like(u.CostCenterID, $"%{input.CostCenterID.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.FI_Client_Analysis_H), u => EF.Functions.Like(u.FI_Client_Analysis_H, $"%{input.FI_Client_Analysis_H.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.PickerID), u => EF.Functions.Like(u.PickerID, $"%{input.PickerID.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.Companyname), u => EF.Functions.Like(u.Companyname, $"%{input.Companyname.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.ConstructionTeamID), u => EF.Functions.Like(u.ConstructionTeamID, $"%{input.ConstructionTeamID.Trim()}%"))
.Where(input.OrderStatus != null, u => u.OrderStatus == input.OrderStatus)
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return wmsStockReturnOrders;
}
///
/// 获取单据明细
///
///
///
[HttpGet("PageDetail")]
public async Task> PageDetail([FromQuery] PageDetailStockReturnOrderInput input)
{
var wmsOrders = await _wmsStockReturnOrderDetailsRep.DetachedEntities
.Where(input.Id != null, u => u.OrderId == input.Id)
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return wmsOrders;
}
///
/// 获取出库完成的明细
///
///
///
[HttpGet("GetTakeOrderDetail")]
public async Task> GetTakeOrderDetail([FromQuery] GetTakeOrderDetailInput input)
{
var wmsOrders = await _wmsTakeMaterialOrderDetailRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.Materialcode), u => EF.Functions.Like(u.Materialcode, $"%{input.Materialcode.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.Materialname), u => EF.Functions.Like(u.Materialname, $"%{input.Materialname.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.Batchno_SCM), u => EF.Functions.Like(u.Batchno_SCM, $"%{input.Batchno_SCM.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.Batchno_WMS), u => EF.Functions.Like(u.Batchno_WMS, $"%{input.Batchno_WMS.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.ProjectCode), u => EF.Functions.Like(u.ProjectCode, $"%{input.ProjectCode.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.TACode), u => EF.Functions.Like(u.TACode, $"%{input.TACode.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.PartCode), u => EF.Functions.Like(u.PartCode, $"%{input.PartCode.Trim()}%"))
.Where(x=>x.OrderStatus == OrderDetailsStatusEnum.WANCHENG)
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return wmsOrders;
}
///
/// 增加退库单(yigo系统获取)
///
///
///
[HttpPost("add")]
[UnitOfWork]
public async Task Add()
{
//var wmsStockReturnOrder = input.Adapt();
//var wmsOrderType = await _wmsOrderTypeRep.FirstOrDefaultAsync(z => z.Name.Contains("退库申请"));
//wmsStockReturnOrder.SOID = 66666;
//wmsStockReturnOrder.OrderLargeCategory = wmsOrderType != null ? wmsOrderType.Pid : 0;
//wmsStockReturnOrder.OrderSubclass = wmsOrderType != null ? wmsOrderType.Id : 0;
//wmsStockReturnOrder.OrderStatus = OrderStatusEnum.WEIXIAFA;
//await _wmsStockReturnOrderRep.InsertNowAsync(wmsStockReturnOrder);
//foreach (var item in input.WmsStockReturnOrderDetails)
//{
// var WmsStockReturnOrderDetailsModal = item.Adapt();
// WmsStockReturnOrderDetailsModal.OrderId = wmsStockReturnOrder.Id;
// await _wmsStockReturnOrderDetailsRep.InsertAsync(WmsStockReturnOrderDetailsModal);
//}
//获取入库通知单
string url = App.Configuration["YiGoWebApi:QueryReturnQuisition"];
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 wmsStockReturnOrder = item.Adapt();
var isExcit = await _wmsStockReturnOrderRep.AnyAsync(x => x.NO == item.NO);
if (!isExcit)
{
wmsStockReturnOrder.OrderLargeCategory = wmsOrderType != null ? wmsOrderType.Pid : 0;
wmsStockReturnOrder.OrderSubclass = wmsOrderType != null ? wmsOrderType.Id : 0;
await _wmsStockReturnOrderRep.InsertNowAsync(wmsStockReturnOrder);
foreach (var item1 in item.Dtls)
{
var wmsStockReturnOrderDeatail = item1.Adapt();
wmsStockReturnOrderDeatail.OrderId = item.Id;
await _wmsStockReturnOrderDetailsRep.InsertNowAsync(wmsStockReturnOrderDeatail);
}
}
}
}
///
/// 退料上架接口(yigo系统)
///
///
///
[HttpPost("StockReturnGoodsReturnOrder")]
[UnifyResult(typeof(object))]
[UnitOfWork]
public async Task