/***********************************************************************
|
* Project: baifenBinfa
|
* ProjectName: 百分兵法管理系统
|
* Web: http://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
|
{
|
/// <summary>
|
/// 服务卡控制器
|
/// </summary>
|
[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;
|
|
/// <summary>
|
/// 构造函数
|
/// </summary>
|
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 取得服务卡列表信息
|
/// <summary>
|
/// 取得服务卡列表信息
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
//[Authorize]
|
public async Task<WebApiCallBack> GetPageList([FromBody] FMPageByIntId entity)
|
{
|
var jm = new WebApiCallBack();
|
|
var dt = DateTime.Now;
|
var where = PredicateBuilder.True<CoreCmsServices>();
|
|
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 获取服务卡详情
|
/// <summary>
|
/// 获取服务卡详情
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
//[Authorize]
|
public async Task<WebApiCallBack> 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 添加服务订单
|
/// <summary>
|
/// 取得服务卡列表信息
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
[Authorize]
|
public async Task<WebApiCallBack> 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 店铺核销的服务券列表
|
/// <summary>
|
/// 店铺核销的服务券列表
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
[Authorize]
|
public async Task<WebApiCallBack> VerificationPageList([FromBody] FMPageByIntId entity)
|
{
|
var jm = await _ticketVerificationLogServices.GetVerificationLogs(_user.ID, entity.id, entity.page, entity.limit);
|
return jm;
|
}
|
#endregion
|
|
#region 软删除服务券核销单数据
|
/// <summary>
|
/// 软删除服务券核销单数据
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
[Authorize]
|
public async Task<WebApiCallBack> LogDelete([FromBody] FMIntId entity)
|
{
|
var jm = await _ticketVerificationLogServices.LogDelete(entity.id, _user.ID);
|
return jm;
|
}
|
#endregion
|
|
|
#region 获取单个提货单详情
|
/// <summary>
|
/// 获取单个提货单详情
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
[Authorize]
|
public async Task<WebApiCallBack> 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<GlobalEnumVars.ServicesTicketStatus>(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 核销服务券
|
/// <summary>
|
/// 核销服务券
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
[Authorize]
|
public async Task<WebApiCallBack> 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
|
|
|
}
|
}
|