/***********************************************************************
* Project: CoreCms
* ProjectName: 百分兵法管理系统
* Web: hhtp://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CoreCms.Net.Auth.HttpContextUser;
using CoreCms.Net.Configuration;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Essensoft.Paylink.Alipay.Domain;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaAddNearbyPOIResponse.Types;
namespace CoreCms.Net.Web.WebApi.Controllers
{
///
/// 服务卡控制器
///
[Route("api/[controller]/[action]")]
[ApiController]
public class ServiceController : ControllerBase
{
private readonly ICoreCmsServicesServices _servicesServices;
private readonly ICoreCmsUserServicesOrderServices _userServicesOrderServices;
private readonly ICoreCmsUserServicesTicketServices _userServicesTicketServices;
private readonly ICoreCmsUserServices _userServices;
private readonly ICoreCmsUserServicesTicketVerificationLogServices _ticketVerificationLogServices;
private readonly ICoreCmsClerkServices _clerkServices;
private readonly ICoreCmsStoreServices _storeServices;
private readonly ICoreCmsUserGradeServices _userGradeServices;
private readonly ICoreCmsSettingServices _settingServices;
private readonly IHttpContextUser _user;
///
/// 构造函数
///
public ServiceController(ICoreCmsServicesServices servicesServices, IHttpContextUser user, ICoreCmsUserServicesOrderServices userServicesOrderServices, ICoreCmsUserServicesTicketServices userServicesTicketServices, ICoreCmsUserServices userServices, ICoreCmsClerkServices clerkServices, ICoreCmsUserServicesTicketVerificationLogServices ticketVerificationLogServices, ICoreCmsStoreServices storeServices, ICoreCmsUserGradeServices userGradeServices, ICoreCmsSettingServices settingServices)
{
_servicesServices = servicesServices;
_user = user;
_userServicesOrderServices = userServicesOrderServices;
_userServicesTicketServices = userServicesTicketServices;
_userServices = userServices;
_clerkServices = clerkServices;
_ticketVerificationLogServices = ticketVerificationLogServices;
_storeServices = storeServices;
_userGradeServices = userGradeServices;
_settingServices = settingServices;
}
#region 取得服务卡列表信息
///
/// 取得服务卡列表信息
///
///
[HttpPost]
//[Authorize]
public async Task GetPageList([FromBody] FMPageByIntId entity)
{
var jm = new WebApiCallBack();
var dt = DateTime.Now;
var where = PredicateBuilder.True();
where = where.And(p => p.status == (int)GlobalEnumVars.ServicesStatus.Shelve);
where = where.And(p => p.amount > 0);
//where = where.And(p => p.startTime < dt && p.endTime > dt);
var list = await _servicesServices.QueryPageAsync(where, p => p.createTime, OrderByType.Desc, entity.page, entity.limit);
if (list.Any())
{
var storesAll = await _storeServices.QueryAsync();
var userGradesAll = await _userGradeServices.QueryAsync();
foreach (var item in list)
{
if (item.startTime > dt)
{
item.openStatus = (int)GlobalEnumVars.ServicesOpenStatus.notBegun;
TimeSpan ts = item.startTime.Subtract(dt);
item.timestamp = (int)ts.TotalSeconds;
}
else if (item.startTime <= dt && item.endTime > dt)
{
item.openStatus = (int)GlobalEnumVars.ServicesOpenStatus.begin;
TimeSpan ts = item.endTime.Subtract(dt);
item.timestamp = (int)ts.TotalSeconds;
}
else
{
item.openStatus = (int)GlobalEnumVars.ServicesOpenStatus.haveExpired;
}
if (!string.IsNullOrEmpty(item.consumableStore))
{
var consumableStoreStr = CommonHelper.GetCaptureInterceptedText(item.consumableStore, ",");
var consumableStoreIds = CommonHelper.StringToIntArray(consumableStoreStr);
if (consumableStoreIds.Any())
{
var stores = storesAll.Where(p => consumableStoreIds.Contains(p.id)).ToList();
item.consumableStores = stores.Select(p => p.storeName).ToList();
}
}
if (!string.IsNullOrEmpty(item.allowedMembership))
{
var allowedMembershipStr = CommonHelper.GetCaptureInterceptedText(item.allowedMembership, ",");
var allowedMembershipIds = CommonHelper.StringToIntArray(allowedMembershipStr);
if (allowedMembershipIds.Any())
{
var userGrades = userGradesAll.Where(p => allowedMembershipIds.Contains(p.id)).ToList();
item.allowedMemberships = userGrades.Select(p => p.title).ToList();
}
}
}
}
jm.status = true;
jm.data = new
{
list = list,
count = list.TotalCount,
};
return jm;
}
#endregion
#region 获取服务卡详情
///
/// 获取服务卡详情
///
///
[HttpPost]
//[Authorize]
public async Task GetDetails([FromBody] FMIntId entity)
{
var jm = new WebApiCallBack();
var serviceInfo = await _servicesServices.QueryByClauseAsync(p => p.id == entity.id);
if (serviceInfo == null)
{
jm.msg = "服务获取失败";
return jm;
}
var dt = DateTime.Now;
if (!string.IsNullOrEmpty(serviceInfo.consumableStore))
{
var consumableStoreStr = CommonHelper.GetCaptureInterceptedText(serviceInfo.consumableStore, ",");
var consumableStoreIds = CommonHelper.StringToIntArray(consumableStoreStr);
if (consumableStoreIds.Any())
{
var stores = await _storeServices.QueryListByClauseAsync(p => consumableStoreIds.Contains(p.id));
serviceInfo.consumableStores = stores.Select(p => p.storeName).ToList();
}
}
if (!string.IsNullOrEmpty(serviceInfo.allowedMembership))
{
var allowedMembershipStr = CommonHelper.GetCaptureInterceptedText(serviceInfo.allowedMembership, ",");
var allowedMembershipIds = CommonHelper.StringToIntArray(allowedMembershipStr);
if (allowedMembershipIds.Any())
{
var userGrades = await _userGradeServices.QueryListByClauseAsync(p => allowedMembershipIds.Contains(p.id));
serviceInfo.allowedMemberships = userGrades.Select(p => p.title).ToList();
}
}
if (serviceInfo.startTime > dt)
{
serviceInfo.openStatus = (int)GlobalEnumVars.ServicesOpenStatus.notBegun;
var ts = serviceInfo.startTime.Subtract(dt);
serviceInfo.timestamp = (int)ts.TotalSeconds;
}
else if (serviceInfo.startTime <= dt && serviceInfo.endTime > dt)
{
serviceInfo.openStatus = (int)GlobalEnumVars.ServicesOpenStatus.begin;
var ts = serviceInfo.endTime.Subtract(dt);
serviceInfo.timestamp = (int)ts.TotalSeconds;
}
else
{
serviceInfo.openStatus = (int)GlobalEnumVars.ServicesOpenStatus.haveExpired;
}
jm.status = true;
jm.data = serviceInfo;
return jm;
}
#endregion
//验证接口====================================================================================================
#region 添加服务订单
///
/// 取得服务卡列表信息
///
///
[HttpPost]
[Authorize]
public async Task AddServiceOrder([FromBody] FMIntId entity)
{
var jm = new WebApiCallBack();
var data = await _servicesServices.QueryByClauseAsync(p => p.id == entity.id);
if (data == null)
{
jm.msg = "服务数据获取失败";
return jm;
}
var user = await _userServices.QueryByIdAsync(_user.ID);
if (user == null)
{
jm.msg = "用户数据获取失败";
return jm;
}
if (!data.allowedMembership.Contains("," + user.grade + ","))
{
jm.msg = "您所在的用户级别不支持购买";
return jm;
}
var order = new CoreCmsUserServicesOrder();
order.serviceOrderId = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.服务订单编号);
order.userId = _user.ID;
order.servicesId = entity.id;
order.isPay = false;
order.status = (int)GlobalEnumVars.ServicesOrderStatus.正常;
order.createTime = DateTime.Now;
var bl = await _userServicesOrderServices.InsertAsync(order) > 0;
jm.status = bl;
jm.data = order.serviceOrderId;
return jm;
}
#endregion
#region 店铺核销的服务券列表
///
/// 店铺核销的服务券列表
///
///
[HttpPost]
[Authorize]
public async Task VerificationPageList([FromBody] FMPageByIntId entity)
{
var jm = await _ticketVerificationLogServices.GetVerificationLogs(_user.ID, entity.id, entity.page, entity.limit);
return jm;
}
#endregion
#region 软删除服务券核销单数据
///
/// 软删除服务券核销单数据
///
///
[HttpPost]
[Authorize]
public async Task LogDelete([FromBody] FMIntId entity)
{
var jm = await _ticketVerificationLogServices.LogDelete(entity.id, _user.ID);
return jm;
}
#endregion
#region 获取单个提货单详情
///
/// 获取单个提货单详情
///
///
[HttpPost]
[Authorize]
public async Task GetTicketInfo([FromBody] FMStringId entity)
{
var jm = new WebApiCallBack();
if (string.IsNullOrEmpty(entity.id))
{
jm.msg = "请提交查询数据关键词";
return jm;
}
var ticket = await _userServicesTicketServices.QueryByClauseAsync(p => p.redeemCode == entity.id);
if (ticket == null)
{
jm.msg = "未查询到服务券";
return jm;
}
var enumModel = EnumHelper.GetEnumberEntity(ticket.status);
ticket.statusStr = enumModel.title;
var service = await _servicesServices.QueryByClauseAsync(p => p.id == ticket.serviceId);
var serviceOrder =
await _userServicesOrderServices.QueryByClauseAsync(p => p.serviceOrderId == ticket.serviceOrderId);
jm.status = true;
jm.data = new
{
ticket,
service,
serviceOrder
};
return jm;
}
#endregion
#region 核销服务券
///
/// 核销服务券
///
///
[HttpPost]
[Authorize]
public async Task VerificationTicket([FromBody] FMStringId entity)
{
var jm = new WebApiCallBack();
if (string.IsNullOrEmpty(entity.id))
{
jm.msg = "请提交查询数据关键词";
return jm;
}
var ticket = await _userServicesTicketServices.QueryByClauseAsync(p => p.redeemCode == entity.id);
if (ticket == null)
{
jm.msg = "未查询到服务券";
return jm;
}
var order = await _userServicesOrderServices.QueryByClauseAsync(p => p.serviceOrderId == ticket.serviceOrderId);
if (order == null)
{
jm.msg = "订单信息获取失败";
return jm;
}
var service = await _servicesServices.QueryByClauseAsync(p => p.id == order.servicesId, true);
if (service == null)
{
jm.msg = "服务商品获取失败";
return jm;
}
var dt = DateTime.Now;
if (service.validityType == 2 && dt > ticket.validityEndTime)
{
jm.msg = "服务券已经过期";
return jm;
}
if (ticket.status != (int)GlobalEnumVars.ServicesTicketStatus.正常)
{
jm.msg = "服务券状态不支持核销";
return jm;
}
var user = await _userServices.QueryByIdAsync(_user.ID);
if (user == null)
{
jm.msg = "未获取到审核权限";
return jm;
}
var allConfigs = await _settingServices.GetConfigDictionaries();
var shopManagerMobile = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopManagerMobile);
var isManager = !string.IsNullOrEmpty(shopManagerMobile) && shopManagerMobile.Contains(user.mobile);
var clerk = await _clerkServices.QueryByClauseAsync(p => p.userId == user.id);
if (!isManager)
{
if (clerk == null)
{
jm.msg = "非门店店员无权限核验";
return jm;
}
if (!service.consumableStore.Contains("," + clerk.storeId + ","))
{
jm.msg = "您所在的门店无权核销此券";
return jm;
}
}
//开始更新数据
var log = new CoreCmsUserServicesTicketVerificationLog
{
storeId = clerk?.storeId ?? 0,
verificationUserId = _user.ID,
ticketId = ticket.id,
ticketRedeemCode = ticket.redeemCode,
verificationTime = DateTime.Now,
serviceId = ticket.serviceId,
isDel = false
};
ticket.status = (int)GlobalEnumVars.ServicesTicketStatus.已核销;
ticket.verificationTime = DateTime.Now;
ticket.isVerification = true;
var up = await _userServicesTicketServices.UpdateAsync(ticket);
var bl = false;
if (up)
{
bl = await _ticketVerificationLogServices.InsertAsync(log) > 0;
}
jm.status = up && bl;
jm.msg = jm.status ? "核销成功" : "核销失败";
return jm;
}
#endregion
}
}