using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using Hncore.Pass.Vpn.Request.Product;
using Hncore.Pass.Vpn.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Hncore.Pass.Vpn.Controllers
{
[ApiVersion("1.0")]
[Route("api/course/v{version:apiVersion}/productroute/[action]")]
public class ProductRouteController : HncoreControllerBase
{
private ProductRouteService m_ProductRouteService;
private ProductService m_ProductService;
public ProductRouteController(ProductRouteService _ProductRouteService, ProductService _ProductService)
{
m_ProductRouteService = _ProductRouteService;
m_ProductService = _ProductService;
}
///
/// 添加
///
///
///
[HttpPost]
public async Task Post([FromBody]ProductRouteEntity request)
{
var product = await m_ProductService.GetById(request.ProductId);
request.ProductName = product?.Name;
await m_ProductRouteService.Add(request);
return Success();
}
///
/// 修改
///
///
///
[HttpPost]
public async Task Put([FromBody]ProductRouteEntity request)
{
var product = await m_ProductService.GetById(request.ProductId);
request.ProductName = product?.Name;
await m_ProductRouteService.Update(request);
return Success();
}
///
/// 删除
///
///
///
[HttpPost]
public async Task Delete([FromQuery]int id)
{
var flag = await m_ProductRouteService.DeleteById(id);
if (flag)
return Success();
else
return Error("删除失败");
}
///
/// 详情
///
///
///
[HttpGet]
public async Task Get([FromQuery]int id)
{
var data = await m_ProductRouteService.GetById(id);
return Success(data);
}
///
/// 分页查询
///
///
///
[HttpGet]
public async Task Page([FromQuery]RoutePageRequest request)
{
Expression> expr = m => 1 == 1;
if (request.KeyWord.Has())
{
expr = expr.And(m => m.Province.Contains(request.KeyWord) || m.Name.Contains(request.KeyWord) || m.City.Contains(request.KeyWord) || m.ServerUrl.Contains(request.KeyWord));
}
if (request.ProductId.HasValue&& request.ProductId>0)
{
expr = expr.And(m => m.ProductId==request.ProductId);
}
var ret = await m_ProductRouteService.PageAsc(request.PageIndex, request.PageSize, expr, true,m=>m.Sort);
var data = ret.ToApiResult();
return data;
}
///
/// 导入
///
///
///
[HttpPost, AllowAnonymous]
public async Task Import(IFormFile file)
{
// var file = this.Request.Form.Files.First();
var stream = file.OpenReadStream();// this.Request.Body;
//stream.Position = 0;
var data = ExcelHelper.ReadFromStream(stream);
var products = await m_ProductService.GetAll();
var list = new List();
var dataRows = data.Skip(1);
foreach (var row in dataRows)
{
var model = new ProductRouteEntity();
model.ProductName = row[0];
model.Province = row[1];
model.Name = row[2];
model.ServerUrl = row[3];
model.Status = row[4];
model.LineType = row[5];
model.BandWidth = row[6];
model.IpRemark = row[7];
model.ProductId = products.FirstOrDefault(m => m.Name == model.ProductName)?.Id;
}
if (list.Count > 1)
{
await m_ProductRouteService.Adds(list);
}
return Success();
}
}
}