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 Microsoft.AspNetCore.Authorization; using Serilog; using HttpMethod = System.Net.Http.HttpMethod; using Furion; using NetTopologySuite.Algorithm.Locate; using Furion.DataValidation; namespace Admin.NET.Application { /// /// 报检单 /// [ApiDescriptionSettings("报检单", Name = "WmsInspectOrder", Order = 100)] [Route("api/[Controller]")] public class WmsInspectOrderService : IWmsInspectOrderService, IDynamicApiController, ITransient { private readonly IRepository _wmsOrderRep; private readonly IRepository _sysDictTypeRep; private readonly IRepository _sysDictDataRep; private readonly ISysExcelTemplateService _sysExcelTemplateService; private readonly static object _lock = new(); private readonly IRepository _wmsOrderTypeRep; private readonly IRepository _wmsOrderDetailsRep; private readonly IRepository _wmsPlaceRep; private readonly IRepository _wmsReceiptOrderRep; public WmsInspectOrderService( IRepository wmsOrderRep ,IRepository sysDictTypeRep ,IRepository sysDictDataRep ,ISysExcelTemplateService sysExcelTemplateService ,IRepository wmsOrderTypeRep ,IRepository wmsOrderDetailsRep ,IRepository wmsPlaceRep ,IRepository wmsReceiptOrderRe ) { _wmsOrderRep = wmsOrderRep; _sysDictTypeRep = sysDictTypeRep; _sysDictDataRep = sysDictDataRep; _sysExcelTemplateService = sysExcelTemplateService; _wmsOrderTypeRep = wmsOrderTypeRep; _wmsOrderDetailsRep = wmsOrderDetailsRep; _wmsPlaceRep = wmsPlaceRep; _wmsReceiptOrderRep = wmsReceiptOrderRe; } /// /// 报检上传 /// /// [HttpPost("InspectionDeclaration")] [AllowAnonymous] [UnifyResult(typeof(object))] public async Task InspectionDeclaration([FromBody] InspectionDeclarationYiGo input) { try { //创建指定名称的订单操作 string url = App.Configuration["YiGoWebApi:Qcnotice"]; //input.Billdate =Convert.ToDateTime(input.Billdate.ToString("yyy-MM-dd")); //获取主单据 //var wmsReceiptOrderModal = await _wmsReceiptOrderRep.FirstOrDefaultAsync(x => x.Id == input.Id); //if (wmsReceiptOrderModal == null) throw Oops.Oh("单据信息不存在!"); input.WMSNO = "505005063098437"; input.Billdate = DateTime.Now.ToString("yyyy-MM-dd"); // 写日志文件 //Log.Error($"[InspectionDeclaration][单据号:{wmsReceiptOrderModal.NO}][url:{url}]"); var response = await url.SetHttpMethod(HttpMethod.Post) .SetBody(input, "application/json") .PostAsAsync(); // 写日志文件 //Log.Error($"[InspectionDeclaration][单据号:{wmsReceiptOrderModal.NO}][response:{response.ToJson()}]"); return XnRestfulResultProvider.RESTfulResult(response); } catch (Exception ex) { throw Oops.Oh(ex.Message); } } /// /// 获取报检结果 /// /// [HttpPost("GetInspectionResult")] [AllowAnonymous] [UnifyResult(typeof(object))] [UnitOfWork] public async Task GetInspectionResult([FromBody] GetInspectionResultInput input) { try { //创建指定名称的订单操作 string url = App.Configuration["YiGoWebApi:QueryRQC"]; // 写日志文件 Log.Error($"[InspectionDeclaration][单据号:{input.NO}][url:{url}]"); var response = await url.SetHttpMethod(HttpMethod.Post) .SetBody(input, "application/json") .PostAsAsync(); // 写日志文件 Log.Error($"[InspectionDeclaration][单据号:{input.NO}][response:{response.ToJson()}]"); //获取结果后,合格生成入库单,测试阶段收货即可生成入库单 return XnRestfulResultProvider.RESTfulResult(); } catch (Exception ex) { throw Oops.Oh(ex.Message); } } /// /// 分页查询入库通知单 /// /// /// [HttpGet("page")] public async Task> Page([FromQuery] WmsOrderSearch input) { var wmsOrders = await _wmsOrderRep.DetachedEntities .Where(!string.IsNullOrEmpty(input.NO), u => EF.Functions.Like(u.NO, $"%{input.NO.Trim()}%")) .Where(!string.IsNullOrEmpty(input.SourceBillNo), u => EF.Functions.Like(u.SourceBillNo, $"%{input.SourceBillNo.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(input.TradeMode != null, u => u.TradeMode == input.TradeMode) .Where(!string.IsNullOrEmpty(input.WarehouseCentername), u => EF.Functions.Like(u.WarehouseCentername, $"%{input.WarehouseCentername.Trim()}%")) .Where(!string.IsNullOrEmpty(input.StoreRoomname), u => EF.Functions.Like(u.StoreRoomname, $"%{input.StoreRoomname.Trim()}%")) .Where(!string.IsNullOrEmpty(input.DeclarationCode), u => EF.Functions.Like(u.DeclarationCode, $"%{input.DeclarationCode.Trim()}%")) .Where(!string.IsNullOrEmpty(input.Majorname), u => EF.Functions.Like(u.Majorname, $"%{input.Majorname.Trim()}%")) .OrderBy(PageInputOrder.OrderBuilder(input)) .ProjectToType() .ToADPagedListAsync(input.PageNo, input.PageSize); return wmsOrders; } /// /// 获取单据明细 /// /// /// [HttpGet("PageDetail")] public async Task> PageDetail([FromQuery] PageDetailInput input) { var wmsOrders = await _wmsOrderDetailsRep.DetachedEntities .Where(input.Id != null, u => u.OrderId == input.Id) .ProjectToType() .ToADPagedListAsync(input.PageNo, input.PageSize); return wmsOrders; } } }