using Abp.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Senparc.Weixin.TenPay.V3;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using TaiHeTun.Mall.EntityFrameworkCore.Repositories;
using TaiHeTun.Mall.Helpers;
using TaiHeTun.Mall.HuoDong;
using TaiHeTun.Mall.Models;
using TaiHeTun.Mall.Pay;
using TaiHeTun.Mall.Pay.Dto;
using TaiHeTun.Mall.Shop;
using TaiHeTun.Mall.Shop.Dto;
using TaiHeTun.Mall.Users;
namespace TaiHeTun.Mall.Mall
{
/// <summary>
/// 支付相关
/// </summary>
[ApiExplorerSettings(GroupName = "Mall")]
[Route("api/Mall/[controller]/[action]")]
[AbpAuthorize]
public class PayController : MallAppServiceBase
{
private readonly IPreCreateOrderAppService _preCreateOrderAppService;
private readonly ISendWechatMessageAppService _sendWechatMessageAppService;
private readonly IStoreProcedureRepository _storeProcedureRepository;
private readonly IOrderAppService _orderAppService;
private readonly IGroupBuyingEventAppService _groupBuyingEventAppService;
private readonly IWxPayAppService _wxPay;
private readonly ICustomFunctionAppService _customFunctionAppService;
public PayController(IPreCreateOrderAppService preCreateOrderAppService,
IOrderAppService orderAppService, ISendWechatMessageAppService sendWechatMessageAppService,
ICustomFunctionAppService customFunctionAppService, IStoreProcedureRepository storeProcedureRepository, IWxPayAppService wxPay, IGroupBuyingEventAppService groupBuyingEventAppService)
{
_preCreateOrderAppService = preCreateOrderAppService;
_customFunctionAppService = customFunctionAppService;
_orderAppService = orderAppService;
_sendWechatMessageAppService = sendWechatMessageAppService;
_storeProcedureRepository = storeProcedureRepository;
_wxPay = wxPay;
_groupBuyingEventAppService = groupBuyingEventAppService;
}
/// <summary>
/// 根据商品创建并返回预支付id
/// 如果是拼团商品需要在这里判断拼团人数是否已满
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public ResultDtos<Guid, Boolean> GetPreOrderId([FromBody] List<PreCreateOrderCreateDto> input)
{
try
{
var CheckCreateOrderState = false;
Guid id = Guid.NewGuid(); ;
if (input.Count == 0)
{
return new ResultDtos<Guid, Boolean>
{
Code = 1,
Mes = "参数不能为空"
};
}
else
{
if (input[0].PtId != null && input[0].PtId != Guid.Empty)
{
//如果是拼团订单在这里返回用户是否需要新开团
CheckCreateOrderState = _groupBuyingEventAppService.CheckCreateOrder(input[0].PtId.Value);
}
if (_preCreateOrderAppService.CheckData(input) == 0)
{
foreach (var item in input)
{
var entity = ObjectMapper.Map<PreCreateOrderInputDto>(item);
entity.PreId = id;
entity.UserId = (int)AbpSession.UserId;
_preCreateOrderAppService.Insert(entity);
}
return new ResultDtos<Guid, Boolean>
{
Code = 0,
Mes = "创建成功",
Data = id,
OhtherData = CheckCreateOrderState
};
}
else
{
return new ResultDtos<Guid, Boolean>
{
Code = 1,
Mes = "商品已过期"
};
}
}
}
catch (Exception ex)
{
return new ResultDtos<Guid, Boolean>
{
Code = 1,
Mes = "账号异常"
};
}
}
/// <summary>
/// 购买过指定商品的用户才可以享受优惠
/// </summary>
/// <param name="ProductName">指定商品名称</param>
/// <returns></returns>
[HttpGet]
public ResultDto CheckOldUser(string ProductName)
{
if (AbpSession.UserId.Value == 2323)
{
return new ResultDto
{
Code = 0,
Mes = ""
};
}
string ids = "4656,2479,1279,5631,5623,2841,5413,5319,4974,5050,4999,4750,3670,4738,4744,4640,4501,228,85,238,272,311,322,335,542,954,1182,1285,1294,1553,1665,1897,1984,1987,2024,2045,2078,2121,2123,2136,2144,2198,2226,2230,2235,2237,2238,2266,2384,2388,2394,2456,2462,2477,2520,2606,2718,2770,2778,2780,2786,2803,2809,2810,2813,2825,2829,2833,2840,2881,2919,2933,2934,2989,2995,3025,3038,3060,3156,3161,3164,3191,3200,3211,3214,3223,3238,3240,3283,3284,3299,3302,3306,3314,3423,3436,3469,3486,3521,3532,3569,3663,3676,3929,3970,3998";
List<int> us = new List<int>();
foreach (var item in ids.Split(','))
{
us.Add(int.Parse(item));
}
if (us.Count(g => g == AbpSession.UserId) > 0)
{
return new ResultDto
{
Code = 0,
Mes = ""
};
}
var result = _customFunctionAppService.CheckOldUser(ProductName, AbpSession.UserId.Value);
if (result.success)
{
return new ResultDto
{
Code = 0,
Mes = ""
};
}
else
{
return new ResultDto
{
Code = 1,
Mes = result.message
};
}
}
/// <summary>
/// 根据预支付id查询返回创建订单页面数据
/// </summary>
/// <param name="id">预支付id</param>
/// <param name="AddressId">用户选择的收货地址id,可不传(按默认收货执行)</param>
/// <returns></returns>
[HttpPost]
public ResultDto<CreateOrderDto> GetCreateOrderDetail(Guid id, Guid? AddressId)
{
var dfd = _preCreateOrderAppService.GetCreateOrderDetail(id, (int)AbpSession.UserId, AddressId);
return new ResultDto<CreateOrderDto>
{
Code = 0,
Data = dfd,
Mes = "查询成功"
};
}
/// <summary>
/// 提提交订单并返回订单编号【支持多店铺】
/// </summary>
/// <param name="input"></param>
[HttpPost]
public ResultDto<List<Guid?>> CreateOrder([FromBody] CreateShopOrderDto input)
{
var dfd = _preCreateOrderAppService.CreateOrder(input, (int)AbpSession.UserId);
if (dfd.State == 0)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = null,
Mes = "创建失败"
};
}
else if (dfd.State == 2)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = null,
Mes = "库存不足"
};
}
else if (dfd.State == 3)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = null,
Mes = "创建失败存在失效商品"
};
}
else if (dfd.State == 4)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = null,
Mes = "您有商品超过限购数量限制"
};
}
else
{
return new ResultDto<List<Guid?>>
{
Code = 0,
Data = dfd.Orderids,
Mes = "创建成功"
};
}
}
/// <summary>
/// 提提交订单并返回订单编号【支持多店铺】
/// </summary>
/// <param name="input"></param>
[HttpPost]
public ResultDto<List<Guid?>> CreateGroupOrder([FromBody] CreateShopOrderDto input)
{
var dfd = _preCreateOrderAppService.CreateGroupOrder(input, (int)AbpSession.UserId);
if (dfd.State == 0)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = new List<Guid?> { },
Mes = "创建失败"
};
}
else if (dfd.State == 3)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = new List<Guid?> { },
Mes = "创建失败存在失效商品"
};
}
else if (dfd.State == 5)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = new List<Guid?> { },
Mes = "拼团活动已结束"
};
}
else if (dfd.State == 51)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = new List<Guid?> { },
Mes = "存在未支付的订单"
};
}
else if (dfd.State == 52)
{
return new ResultDto<List<Guid?>>
{
Code = 1,
Data = new List<Guid?> { },
Mes = "该活动仅限新用户参加"
};
}
else
{
return new ResultDto<List<Guid?>>
{
Code = 0,
Data = dfd.Orderids,
Mes = "成功"
};
}
}
/// <summary>
/// 根据订单id获取订单详情
/// </summary>
/// <param name="Ids">多订单id逗号分割</param>
/// <returns></returns>
[HttpGet]
public ResultDto<List<OrderListDto>> GetOrderDetail(string Ids)
{
List<Guid> Id = new List<Guid>();
List<OrderListDto> result = new List<OrderListDto>();
foreach (var item in Ids.Split(","))
{
result.Add(_orderAppService.GetOneById(Guid.Parse(item)));
}
return new ResultDto<List<OrderListDto>> { Code = 0, Data = result, Mes = "查询成功" };
}
/// <summary>
/// 根据订单完成支付
/// 【2022年2月17日14:36:44】如果支付密码为paywx表示余额不足,充值成功后调用的支付这里不判断支付密码是否存在
/// </summary>
[HttpPost]
public ResultDto OrderPay([FromBody] PayDataDto input)
{
var result = _orderAppService.UserPayCheck(input.OrderId.Select(g => g.Id).ToList(), (int)AbpSession.UserId, input.PaymentPassword);
if (result == 1)
{
return new ResultDto { Code = 1, Mes = "余额不足,请充值" };
}
else if (result == 4)
{
return new ResultDto { Code = 2, Mes = "订单异常" };
}
else
{
Hashtable ht = new Hashtable();
ht.Add("@order", ListToDataTable(input.OrderId));
ht.Add("@userid", AbpSession.UserId);
var dfdd = _storeProcedureRepository.GetFromStoreProcedure("Pro_PayOrder", ht);
int resultid = Convert.ToInt32(dfdd.Rows[0].Table.Rows[0]["id"]);
if (resultid == 0)
{
return new ResultDto { Code = 1, Mes = "订单异常" };
}
else if (resultid == 2)
{
return new ResultDto { Code = 1, Mes = "余额不足,请充值" };
}
else
{
foreach (var item in input.OrderId)
{
_sendWechatMessageAppService.SendDeliveryRelease(item.Id);
}
//在此处增加推送通知
return new ResultDto { Code = 0, Mes = "支付成功" };
}
}
}
public class PayDataDto
{
/// <summary>
/// 支付订单
/// </summary>
public List<GuidList> OrderId { get; set; }
/// <summary>
/// 支付密码
/// </summary>
public string PaymentPassword { get; set; }
}
public class GuidList
{
/// <summary>
/// 订单id
/// </summary>
public Guid Id { get; set; }
}
/// <summary>
/// 订单确认收货
/// </summary>
/// <param name="OrderId">订单id</param>
/// <param name="PaymentPassword">支付密码</param>
/// <returns></returns>
[HttpPost]
public ResultDto CompleteOrder(Guid OrderId, string PaymentPassword)
{
var pas = _orderAppService.GetOneById(OrderId); //(int)AbpSession.UserId);
if (pas.Userid == (int)AbpSession.UserId)
{
Hashtable ht = new Hashtable();
ht.Add("@orderid", OrderId);
var dfdd = _storeProcedureRepository.GetFromStoreProcedure("Pro_CompleteOrder", ht);
int resultid = Convert.ToInt32(dfdd.Rows[0].Table.Rows[0]["id"]);
if (resultid == 0)
{
return new ResultDto { Code = 1, Mes = "订单异常" };
}
else
{
var order = _orderAppService.GetOneById(OrderId);
return new ResultDto { Code = 0, Mes = "操作成功" };
}
}
else
{
return new ResultDto { Code = 1, Mes = "订单异常" };
}
}
/// <summary>
/// 订单确认收货(定时器)
/// </summary>
/// <param name="OrderId">订单id</param>
/// <param name="PaymentPassword">支付密码</param>
/// <param name="UserId">用户id</param>
/// <returns></returns>
[HttpPost]
[AbpAllowAnonymous]
public ResultDto CompleteOrderForTimer(Guid OrderId, string PaymentPassword, int UserId)
{
var pas = _orderAppService.GetOneById(OrderId); //(int)AbpSession.UserId);
if (pas.Userid == UserId)
{
Hashtable ht = new Hashtable();
ht.Add("@orderid", OrderId);
var dfdd = _storeProcedureRepository.GetFromStoreProcedure("Pro_CompleteOrder", ht);
int resultid = Convert.ToInt32(dfdd.Rows[0].Table.Rows[0]["id"]);
if (resultid == 0)
{
return new ResultDto { Code = 1, Mes = "订单异常" };
}
else
{
var order = _orderAppService.GetOneById(OrderId);
return new ResultDto { Code = 0, Mes = "操作成功" };
}
}
else
{
return new ResultDto { Code = 1, Mes = "订单异常" };
}
}
[ApiExplorerSettings(GroupName = "Mall", IgnoreApi = true)]
public static System.Data.DataTable ListToDataTable(IList list)
{
System.Data.DataTable result = new System.Data.DataTable();
if (list.Count > 0)
{
PropertyInfo[] propertys = list[0].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
//获取类型
Type colType = pi.PropertyType;
//当类型为Nullable<>时
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[0];
}
result.Columns.Add(pi.Name, colType);
}
for (int i = 0; i < list.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
result.LoadDataRow(array, true);
}
}
return result;
}
}
}
这里面的就生效了
最新发布