287 lines
11 KiB
C#
287 lines
11 KiB
C#
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.Response.Product;
|
|
using Hncore.Pass.Vpn.Service;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System;
|
|
using System.Linq.Expressions;
|
|
using System.Threading.Tasks;
|
|
using UserService = Hncore.Pass.Vpn.Service.UserService;
|
|
|
|
namespace Hncore.Pass.Vpn.Controllers
|
|
{
|
|
[ApiVersion("1.0")]
|
|
[Route("api/course/v{version:apiVersion}/product/[action]")]
|
|
public class ProductController : HncoreControllerBase
|
|
{
|
|
private ProductService m_ProductService;
|
|
private UserService m_UserService;
|
|
private ProductPackageService m_ProductPackageService;
|
|
private ProductUserPriceService m_ProductUserPriceService;
|
|
public ProductController(UserService _UserService,ProductService _ProductServic, ProductPackageService _ProductPackageService, ProductUserPriceService m_ProductUserPriceService)
|
|
{
|
|
m_ProductService = _ProductServic;
|
|
m_ProductPackageService = _ProductPackageService;
|
|
m_UserService = _UserService;
|
|
this.m_ProductUserPriceService = m_ProductUserPriceService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<ApiResult> Post([FromBody]ProductEntity request)
|
|
{
|
|
request.TenantId = this.Request.GetManageUserInfo().TenantId;
|
|
await m_ProductService.Add(request);
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 修改
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<ApiResult> Put([FromBody]ProductEntity request)
|
|
{
|
|
var entity = await m_ProductService.GetById(request.Id);
|
|
entity.Name = request.Name;
|
|
entity.Profile = request.Profile;
|
|
entity.Image = request.Image;
|
|
entity.RefundDayPrice = request.RefundDayPrice;
|
|
entity.DayLimitPrice = request.DayLimitPrice;
|
|
await m_ProductService.Update(entity);
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 修改
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<ApiResult> PutConfig([FromBody]ProductEntity request)
|
|
{
|
|
var entity = await m_ProductService.GetById(request.Id);
|
|
entity.Account = request.Account;
|
|
entity.Pwd = request.Pwd;
|
|
entity.BaseUrl = request.BaseUrl;
|
|
entity.Token = "";
|
|
await m_ProductService.Update(entity);
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 修改
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<ApiResult> PutSoft([FromBody]ProductEntity request)
|
|
{
|
|
var entity = await m_ProductService.GetById(request.Id);
|
|
entity.PcClientDownloadUrl = request.PcClientDownloadUrl;
|
|
entity.SimulatorDownloadUrl = request.SimulatorDownloadUrl;
|
|
entity.DroidDownloadUrl = request.DroidDownloadUrl;
|
|
entity.IosDownloadUrl = request.IosDownloadUrl;
|
|
await m_ProductService.Update(entity);
|
|
return Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<ApiResult> Delete([FromQuery]int id)
|
|
{
|
|
var flag = await m_ProductService.DeleteById(id);
|
|
if (flag)
|
|
return Success();
|
|
else
|
|
return Error("删除失败");
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 详情
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<ApiResult> Get([FromQuery]int id)
|
|
{
|
|
var data = await m_ProductService.GetById(id);
|
|
return Success(data);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 分页查询
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<ApiResult> Page([FromQuery]PageRequestBase request)
|
|
{
|
|
Expression<Func<ProductEntity, bool>> expr = m => 1 == 1;
|
|
if (request.KeyWord.Has())
|
|
{
|
|
expr = expr.And(m => m.Name.Contains(request.KeyWord));
|
|
}
|
|
var ret = await m_ProductService.PageAsc(request.PageIndex, request.PageSize, expr,true,m=>m.Sort);
|
|
var data = ret.ToApiResult();
|
|
return data;
|
|
}
|
|
|
|
[HttpGet,AllowAnonymous]
|
|
public async Task<ApiResult> OpenPage([FromQuery]PageRequestBase request)
|
|
{
|
|
// Expression<Func<ProductEntity, bool>> expr = m => 1 == 1;
|
|
// if (request.KeyWord.Has())
|
|
// {
|
|
// expr = expr.And(m => m.Name.Contains(request.KeyWord));
|
|
// }
|
|
// var ret = await m_ProductService.PageAsc(request.PageIndex, request.PageSize, expr, true,m=>m.Sort);
|
|
// var data = ret.ToApiResult();
|
|
return null;
|
|
}
|
|
|
|
[HttpGet, AllowAnonymous]
|
|
public async Task<ApiResult> ProductWithPackage()
|
|
{
|
|
var respList = await m_ProductService.ProductWithPackage();
|
|
return Success(respList);
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
public async Task<ApiResult> ProductUserPrice(int userId)
|
|
{
|
|
var ret = await this.m_ProductUserPriceService.GetPackageUserPrice(userId);
|
|
return Success(ret);
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<ApiResult> SetProductLine([FromQuery]int id)
|
|
{
|
|
var productEntity = await m_ProductService.GetById(id);
|
|
if (productEntity == null)
|
|
{
|
|
return Error("产品不存在");
|
|
}
|
|
productEntity.Status = productEntity.OnLine == 0 ? 1 : 0;
|
|
await m_ProductService.Update(productEntity);
|
|
|
|
return Success(productEntity.Status);
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<ApiResult> SetPackageLine([FromQuery]int id)
|
|
{
|
|
var packageEntity = await m_ProductPackageService.GetById(id);
|
|
if (packageEntity == null)
|
|
{
|
|
return Error("套餐不存在");
|
|
}
|
|
packageEntity.Status = packageEntity.Status == 0 ? 1 : 0;
|
|
await m_ProductPackageService.Update(packageEntity);
|
|
|
|
return Success(packageEntity.Status);
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<ApiResult> SetUserPriceStatus([FromQuery]int id)
|
|
{
|
|
var userPriceEntity = await m_ProductUserPriceService.GetById(id);
|
|
if (userPriceEntity == null)
|
|
{
|
|
return Error("请设置会员价");
|
|
}
|
|
var userEntity = await m_UserService.Query(m => m.Id==userPriceEntity.UserId).FirstOrDefaultAsync();
|
|
userEntity.discount_id = -1;
|
|
await m_UserService.Update(userEntity);
|
|
|
|
userPriceEntity.Status = userPriceEntity.Status == 0 ? 1 : 0;
|
|
await m_ProductUserPriceService.Update(userPriceEntity);
|
|
return Success(userPriceEntity.Status);
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
public async Task<ApiResult> PutPackage([FromBody]ProductPackageEntity request)
|
|
{
|
|
var packageEntity = await m_ProductPackageService.GetById(request.Id);
|
|
if (packageEntity == null)
|
|
{
|
|
return Error("套餐不存在");
|
|
}
|
|
packageEntity.LinePrice = request.LinePrice;
|
|
packageEntity.MinPrice = request.MinPrice;
|
|
packageEntity.Name = request.Name;
|
|
packageEntity.Price = request.Price;
|
|
packageEntity.Profile = request.Profile;
|
|
packageEntity.Title = request.Title;
|
|
await m_ProductPackageService.Update(packageEntity);
|
|
return Success(packageEntity);
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
public async Task<ApiResult> PutUserPrice([FromBody]PutUserPriceRequest request)
|
|
{
|
|
var userPriceEntity = await m_ProductUserPriceService.Query(m => m.PackageId == request.PackageId && m.UserId == request.UserId).FirstOrDefaultAsync();
|
|
var userEntity = await m_UserService.Query(m => m.Id==request.UserId).FirstOrDefaultAsync();
|
|
userEntity.discount_id = -1;
|
|
await m_UserService.Update(userEntity);
|
|
var price = request.UserPrice;
|
|
var packageEntity =await m_ProductPackageService.GetById(request.PackageId);
|
|
// var product = await m_ProductService.GetById(packageEntity.ProductId);
|
|
if (request.UserPrice < packageEntity.MinPrice && packageEntity.MinPrice > 0)
|
|
{
|
|
return Error($"不能低于最低限额[{ packageEntity.MinPrice}]");
|
|
}
|
|
|
|
var productEntity = await m_ProductService.GetById(packageEntity.ProductId);
|
|
|
|
if (productEntity.DayLimitPrice>0&&request.RefundDayPrice < productEntity.DayLimitPrice)
|
|
{
|
|
return Error($"退款单价不能低于[{ productEntity.DayLimitPrice}]");
|
|
}
|
|
|
|
//toto
|
|
if (userPriceEntity == null)
|
|
{
|
|
userPriceEntity =new ProductUserPriceEntity()
|
|
{
|
|
PackageId = request.PackageId,
|
|
ProductId = request.ProductId,
|
|
UserId = request.UserId,
|
|
UserPrice = request.UserPrice,
|
|
Status = 1,
|
|
DeleteTag = 0,
|
|
Remark=request.Remark,
|
|
RefundDayPrice= request.RefundDayPrice
|
|
};
|
|
await m_ProductUserPriceService.Add(userPriceEntity);
|
|
}
|
|
else
|
|
{
|
|
userPriceEntity.UserPrice = request.UserPrice;
|
|
userPriceEntity.RefundDayPrice = request.RefundDayPrice;
|
|
userPriceEntity.Remark = request.Remark;
|
|
await m_ProductUserPriceService.Update(userPriceEntity);
|
|
}
|
|
return Success(1);
|
|
}
|
|
}
|
|
}
|