mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 17:33:27 +08:00
【新增】新增微信扫码支付功能,对接PC端。
【新增】增加DTO类库,将逐步完善dto层。 【修复】修复【分类】切换后,切换回来未清零原始数据,导致更新数据重复的问题。 【调整】移除模板库功能,防止出现审核因为模板库页面存在而导致的审核失败。暂将模板库的代码存放到会员QQ群内,方便下载使用。 【调整】代码生成器【Repository.tpl】移除Cache手动增删改,【SqlSugarSetup】增加sqlsugar自动检测增删改后清理二级缓存。 【调整】后端新增秒杀独立组件,用于区分团购及秒杀的差异,首页新增秒杀组件。 【优化】重写首页所有组件样式及接口数据获取效率。 【优化】优化拼团,秒杀,团购,接龙数据获取逻辑,提升列表及详情页面数据获取效率。 【优化】调整拼团,秒杀,团购,服务商品推广海报为新式海报效果。增加服务商品推广海报。 【优化】清理h5相关代码判断,移除h5支付组件,提高响应速度。 【优化】移除小程序前端冗余代码。加快代码执行效率。
This commit is contained in:
@@ -4,19 +4,28 @@
|
||||
* Web: https://www.corecms.net
|
||||
* Author: 大灰灰
|
||||
* Email: jianweie@163.com
|
||||
* CreateTime: 2021/1/31 21:45:10
|
||||
* CreateTime: 2022/10/24 3:54:14
|
||||
* Description: 暂无
|
||||
***********************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.ViewModels.Basics;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
using SqlSugar;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 文章分类表 接口实现
|
||||
/// 文章分类表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsArticleTypeServices : BaseServices<CoreCmsArticleType>, ICoreCmsArticleTypeServices
|
||||
{
|
||||
@@ -25,9 +34,40 @@ namespace CoreCms.Net.Services
|
||||
|
||||
public CoreCmsArticleTypeServices(IUnitOfWork unitOfWork, ICoreCmsArticleTypeRepository dal)
|
||||
{
|
||||
_dal = dal;
|
||||
BaseDal = dal;
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步插入方法
|
||||
/// </summary>
|
||||
/// <param name="entity">实体数据</param>
|
||||
/// <returns></returns>
|
||||
public async Task<AdminUiCallBack> InsertAsync(CoreCmsArticleType entity)
|
||||
{
|
||||
return await _dal.InsertAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步更新方法方法
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<AdminUiCallBack> UpdateAsync(CoreCmsArticleType entity)
|
||||
{
|
||||
return await _dal.UpdateAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写删除指定ID的数据
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
|
||||
{
|
||||
return await _dal.DeleteByIdAsync(id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
|
||||
<PackageReference Include="Qiniu" Version="8.2.0" />
|
||||
<PackageReference Include="QRCoder" Version="1.4.3" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.4" />
|
||||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta13" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
||||
|
||||
@@ -998,7 +998,6 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据条件查询代理池商品分页数据
|
||||
/// </summary>
|
||||
@@ -1045,5 +1044,19 @@ namespace CoreCms.Net.Services
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取商品及默认货品信息
|
||||
/// </summary>
|
||||
/// <param name="predicate"></param>
|
||||
/// <param name="orderByPredicate"></param>
|
||||
/// <param name="orderByType"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<CoreCmsGoods>> QueryGoodWithDefaultProductAsync(Expression<Func<CoreCmsGoods, bool>> predicate,
|
||||
Expression<Func<CoreCmsGoods, object>> orderByPredicate, OrderByType orderByType, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryGoodWithDefaultProductAsync(predicate, orderByPredicate, orderByType, blUseNoLock);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,6 +185,7 @@ namespace CoreCms.Net.Services
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 获取税号
|
||||
/// <summary>
|
||||
/// 获取税号
|
||||
|
||||
@@ -17,6 +17,7 @@ using Newtonsoft.Json;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using Essensoft.Paylink.Alipay;
|
||||
using Essensoft.Paylink.Alipay.Domain;
|
||||
using Essensoft.Paylink.Alipay.Request;
|
||||
@@ -67,7 +68,7 @@ namespace CoreCms.Net.Services
|
||||
OutTradeNo = entity.paymentId,
|
||||
Subject = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle,
|
||||
ProductCode = entity.paymentCode,
|
||||
TotalAmount = entity.money.ToString(),
|
||||
TotalAmount = entity.money.ToString(CultureInfo.InvariantCulture),
|
||||
Body = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle
|
||||
};
|
||||
var req = new AlipayTradeAppPayRequest();
|
||||
|
||||
@@ -19,6 +19,7 @@ using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
using CoreCms.Net.Utility.Extensions;
|
||||
using CoreCms.Net.WeChat.Service.HttpClients;
|
||||
using Essensoft.Paylink.Alipay.Domain;
|
||||
using Essensoft.Paylink.WeChatPay;
|
||||
using Essensoft.Paylink.WeChatPay.V2;
|
||||
using Essensoft.Paylink.WeChatPay.V2.Request;
|
||||
@@ -26,6 +27,7 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using QRCoder;
|
||||
using SKIT.FlurlHttpClient.Wechat.Api;
|
||||
using SKIT.FlurlHttpClient.Wechat.Api.Models;
|
||||
|
||||
@@ -178,36 +180,69 @@ namespace CoreCms.Net.Services
|
||||
var response = await _client.ExecuteAsync(orderRequest, _optionsAccessor.Value);
|
||||
if (response.ReturnCode == WeChatPayCode.Success && response.ResultCode == WeChatPayCode.Success)
|
||||
{
|
||||
var req = new WeChatPayJsApiSdkRequest
|
||||
{
|
||||
Package = "prepay_id=" + response.PrepayId
|
||||
};
|
||||
WeChatPayDictionary parameter;
|
||||
//App微信支付
|
||||
if (tradeType == GlobalEnumVars.WeiChatPayTradeType.APP.ToString())
|
||||
{
|
||||
var reqApp = new WeChatPayAppSdkRequest()
|
||||
{
|
||||
PrepayId = response.PrepayId
|
||||
};
|
||||
parameter = await _client.ExecuteAsync(reqApp, _optionsAccessor.Value);
|
||||
var parameter = await _client.ExecuteAsync(reqApp, _optionsAccessor.Value);
|
||||
parameter.Add("paymentId", entity.paymentId);
|
||||
jm.status = true;
|
||||
jm.msg = "创建微信APP支付环境成功";
|
||||
jm.data = parameter;
|
||||
jm.otherData = response;
|
||||
}
|
||||
else
|
||||
//JsApi通用微信支付
|
||||
else if (tradeType == GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString())
|
||||
{
|
||||
parameter = await _client.ExecuteAsync(req, _optionsAccessor.Value);
|
||||
// 将参数(parameter)给 公众号前端 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
|
||||
var req = new WeChatPayJsApiSdkRequest
|
||||
{
|
||||
Package = "prepay_id=" + response.PrepayId
|
||||
};
|
||||
var parameter = await _client.ExecuteAsync(req, _optionsAccessor.Value);
|
||||
parameter.Add("paymentId", entity.paymentId);
|
||||
jm.status = true;
|
||||
jm.msg = "创建JSAPI支付环境成功";
|
||||
jm.data = parameter;
|
||||
//jm.otherData = response;
|
||||
}
|
||||
//扫码支付
|
||||
else if (tradeType == GlobalEnumVars.WeiChatPayTradeType.NATIVE.ToString())
|
||||
{
|
||||
jm.status = true;
|
||||
jm.msg = "创建微信扫码支付环境成功";
|
||||
jm.data = new
|
||||
{
|
||||
response,
|
||||
entity.paymentId
|
||||
};
|
||||
//确定是否存在扫码的图片,然后转成base64到前端进行扫码支付
|
||||
if (!string.IsNullOrEmpty(response.CodeUrl) && response.CodeUrl.Contains("weixin://wxpay/bizpayurl?pr="))
|
||||
{
|
||||
using var qrGenerator = new QRCodeGenerator();
|
||||
using var qrCodeData = qrGenerator.CreateQrCode(response.CodeUrl, QRCodeGenerator.ECCLevel.L);
|
||||
using var pngByteQrCode = new PngByteQRCode(qrCodeData);
|
||||
var pngBytes = pngByteQrCode.GetGraphic(20, false);
|
||||
var stringBase64Str = Convert.ToBase64String(pngBytes);
|
||||
jm.otherData = stringBase64Str;
|
||||
}
|
||||
}
|
||||
//H5支付
|
||||
else if (tradeType == GlobalEnumVars.WeiChatPayTradeType.MWEB.ToString())
|
||||
{
|
||||
jm.status = true;
|
||||
jm.msg = "创建H5支付环境成功";
|
||||
jm.data = response;
|
||||
}
|
||||
// 将参数(parameter)给 公众号前端 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
|
||||
parameter.Add("paymentId", entity.paymentId);
|
||||
|
||||
jm.status = true;
|
||||
//jm.msg = "创建支付环境成功";
|
||||
jm.data = parameter;
|
||||
jm.otherData = response;
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.status = false;
|
||||
jm.msg = "微信建立支付请求失败";
|
||||
jm.otherData = response;
|
||||
//jm.otherData = response;
|
||||
}
|
||||
return jm;
|
||||
}
|
||||
|
||||
@@ -63,9 +63,7 @@ namespace CoreCms.Net.Services
|
||||
using var container = _serviceProvider.CreateScope();
|
||||
|
||||
var goodsServices = container.ServiceProvider.GetService<ICoreCmsGoodsServices>();
|
||||
var pinTuanRuleServices = container.ServiceProvider.GetService<ICoreCmsPinTuanRuleServices>();
|
||||
var pinTuanRecordServices = container.ServiceProvider.GetService<ICoreCmsPinTuanRecordServices>();
|
||||
var pinTuanGoodsServices = container.ServiceProvider.GetService<ICoreCmsPinTuanGoodsServices>();
|
||||
var orderServices = container.ServiceProvider.GetService<ICoreCmsOrderServices>();
|
||||
|
||||
var goodsInfo = await goodsServices.GetGoodsDetail(goodsId, userId, false, "goods", 0, needGoodSku);
|
||||
@@ -83,14 +81,14 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
goodsInfo.pinTuanRule.pinTuanStartStatus = (int)GlobalEnumVars.PinTuanRuleStatus.notBegun;
|
||||
|
||||
TimeSpan ts = goodsInfo.pinTuanRule.startTime.Subtract(dt);
|
||||
var ts = goodsInfo.pinTuanRule.startTime.Subtract(dt);
|
||||
goodsInfo.pinTuanRule.lastTime = (int)ts.TotalSeconds;
|
||||
}
|
||||
else if (goodsInfo.pinTuanRule.startTime <= dt && goodsInfo.pinTuanRule.endTime > dt)
|
||||
{
|
||||
goodsInfo.pinTuanRule.pinTuanStartStatus = (int)GlobalEnumVars.PinTuanRuleStatus.begin;
|
||||
|
||||
TimeSpan ts = goodsInfo.pinTuanRule.endTime.Subtract(dt);
|
||||
var ts = goodsInfo.pinTuanRule.endTime.Subtract(dt);
|
||||
goodsInfo.pinTuanRule.lastTime = (int)ts.TotalSeconds;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -14,6 +14,7 @@ using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.DTO;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
@@ -23,6 +24,7 @@ using CoreCms.Net.Model.Entities.Expression;
|
||||
using CoreCms.Net.Model.ViewModels.Basics;
|
||||
using CoreCms.Net.Model.ViewModels.DTO;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
using Essensoft.Paylink.Alipay.Domain;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using SqlSugar;
|
||||
@@ -65,15 +67,18 @@ namespace CoreCms.Net.Services
|
||||
/// 接口上获取拼团所有商品
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> GetPinTuanList(int userId = 0)
|
||||
public async Task<WebApiCallBack> GetPinTuanList(int userId = 0, int pageIndex = 1, int pageSize = 20)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
using var container = _serviceProvider.CreateScope();
|
||||
var pinTuanGoodsServices = container.ServiceProvider.GetService<ICoreCmsPinTuanGoodsServices>();
|
||||
var pinTuanRuleServices = container.ServiceProvider.GetService<ICoreCmsPinTuanRuleServices>();
|
||||
var goodsServices = container.ServiceProvider.GetService<ICoreCmsGoodsServices>();
|
||||
|
||||
var pinTuanRules = await pinTuanRuleServices.QueryListByClauseAsync(p => p.isStatusOpen == true, p => p.sort, OrderByType.Asc, true, true, 24 * 60);
|
||||
//从缓存中获取有效的数据
|
||||
var dt = DateTime.Now;
|
||||
var pinTuanRules = await pinTuanRuleServices.QueryListByClauseAsync(p => p.isStatusOpen == true && p.startTime < dt && p.endTime > dt, p => p.sort, OrderByType.Asc, true, true, 24 * 60);
|
||||
if (pinTuanRules == null && !pinTuanRules.Any())
|
||||
{
|
||||
jm.status = true;
|
||||
@@ -81,30 +86,35 @@ namespace CoreCms.Net.Services
|
||||
return jm;
|
||||
}
|
||||
//获取开启的规则集序列
|
||||
var pinTuanRuleIds = pinTuanRules.Select(p => p.id).ToList();
|
||||
//获取下级商品数据
|
||||
var pinTuanGoods = await pinTuanGoodsServices.QueryListByClauseAsync(p => pinTuanRuleIds.Contains(p.ruleId), p => p.ruleId, OrderByType.Asc, true, true);
|
||||
//从缓存中获取有效的数据
|
||||
var dt = DateTime.Now;
|
||||
var list = pinTuanRules.Where(p => p.startTime < dt && p.endTime > dt).OrderBy(p => p.sort).ToList();
|
||||
var pinTuanRuleIds = pinTuanRules.Select(p => p.id).ToArray();
|
||||
|
||||
if (list.Any())
|
||||
|
||||
var dtoData = await _dal.GetPinTuanInfos(pinTuanRuleIds, p => p.sortId, OrderByType.Asc, pageIndex, pageSize);
|
||||
foreach (var item in dtoData)
|
||||
{
|
||||
var goods = new List<CoreCmsGoods>();
|
||||
foreach (var item in list)
|
||||
//判断拼团状态
|
||||
var dtNow = DateTime.Now;
|
||||
if (item.startTime > dt)
|
||||
{
|
||||
var pinTuanGood = pinTuanGoods.Find(p => p.ruleId == item.id);
|
||||
if (pinTuanGood != null)
|
||||
{
|
||||
var g = await pinTuanGoodsServices.GetGoodsInfo(item, pinTuanGood.goodsId, userId, false,
|
||||
false, false);
|
||||
if (g == null) continue;
|
||||
goods.Add(g);
|
||||
}
|
||||
item.startStatus = (int)GlobalEnumVars.PinTuanRuleStatus.notBegun;
|
||||
var ts = item.startTime.Subtract(dt);
|
||||
item.timestamp = (int)ts.TotalSeconds;
|
||||
}
|
||||
jm.data = goods;
|
||||
else if (item.startTime <= dt && item.endTime > dt)
|
||||
{
|
||||
item.startStatus = (int)GlobalEnumVars.PinTuanRuleStatus.begin;
|
||||
var ts = item.endTime.Subtract(dt);
|
||||
item.timestamp = (int)ts.TotalSeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
item.startStatus = (int)GlobalEnumVars.PinTuanRuleStatus.haveExpired;
|
||||
}
|
||||
|
||||
item.pinTuanPrice -= item.discountAmount;
|
||||
}
|
||||
|
||||
jm.data = dtoData;
|
||||
jm.status = true;
|
||||
return jm;
|
||||
}
|
||||
@@ -136,5 +146,25 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
return await _dal.GetPinTuanInfo(ruleId);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据规则ID数组获取拼团相关信息
|
||||
/// </summary>
|
||||
/// <param name="ruleIds">规则序列</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="orderByType"></param>
|
||||
/// <param name="pageIndex"></param>
|
||||
/// <param name="pageSize"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IPageList<PinTuanListDTO>> GetPinTuanInfos(int[] ruleIds,
|
||||
Expression<Func<PinTuanListDTO, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20)
|
||||
{
|
||||
|
||||
return await _dal.GetPinTuanInfos(ruleIds, orderByExpression, orderByType, pageIndex, pageSize);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.DTO;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
@@ -175,17 +176,17 @@ namespace CoreCms.Net.Services
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#region 获取团购列表数据
|
||||
/// <summary>
|
||||
/// 获取团购列表数据
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> GetGroupList(int type, int userId, int status, int pageIndex, int pageSize)
|
||||
public async Task<WebApiCallBack> GetGroupList(int type, int status, int pageIndex, int pageSize)
|
||||
{
|
||||
using var container = _serviceProvider.CreateScope();
|
||||
|
||||
var goodsServices = container.ServiceProvider.GetService<ICoreCmsGoodsServices>();
|
||||
var orderServices = container.ServiceProvider.GetService<ICoreCmsOrderServices>();
|
||||
|
||||
var jm = new WebApiCallBack { status = true };
|
||||
|
||||
@@ -207,51 +208,75 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
where = where.And(p => p.endTime < dt);
|
||||
}
|
||||
|
||||
var goods = new List<CoreCmsGoods>();
|
||||
var list = await _dal.QueryPageAsync(where, p => p.endTime, OrderByType.Desc, pageIndex, pageSize);
|
||||
if (list != null && list.Any())
|
||||
var promotions = await _dal.QueryPageAsync(where, p => p.endTime, OrderByType.Desc, pageIndex, pageSize, true, true, 60);
|
||||
var dtoData = new List<GroupPurchaseSeckillDTO>();
|
||||
if (promotions != null && promotions.Any())
|
||||
{
|
||||
foreach (var item in list)
|
||||
//获取团购序列
|
||||
var pIds = promotions.Select(p => p.id).ToList();
|
||||
//获取规则参数
|
||||
var conditions = await _promotionConditionServices.QueryListByClauseAsync(p => pIds.Contains(p.promotionId), p => p.id, OrderByType.Asc, true, true);
|
||||
//获取规则结果集
|
||||
var results = await _promotionResultServices.QueryListByClauseAsync(p => pIds.Contains(p.promotionId), p => p.id, OrderByType.Asc, true, true);
|
||||
|
||||
var goodIds = (from condition in conditions where condition != null && condition.parameters.Contains("goodsId") select (JObject)JsonConvert.DeserializeObject(condition.parameters) into parameters select parameters["goodsId"].ObjectToInt(0)).ToList();
|
||||
|
||||
var goodData = await goodsServices.QueryGoodWithDefaultProductAsync(p => goodIds.Contains(p.id), p => p.id, OrderByType.Asc, true);
|
||||
|
||||
foreach (var item in promotions)
|
||||
{
|
||||
var promotionId = item.id;
|
||||
var condition = await _promotionConditionServices.QueryByClauseAsync(p => p.promotionId == promotionId);
|
||||
var dtNow = DateTime.Now;
|
||||
|
||||
var dto = new GroupPurchaseSeckillDTO();
|
||||
|
||||
//事物处理过程开始
|
||||
dto.id = item.id;
|
||||
dto.name = item.name;
|
||||
dto.type = item.type;
|
||||
dto.sort = item.sort;
|
||||
dto.maxNums = item.maxNums;
|
||||
dto.maxGoodsNums = item.maxGoodsNums;
|
||||
dto.maxRecevieNums = item.maxRecevieNums;
|
||||
dto.startTime = item.startTime;
|
||||
dto.endTime = item.endTime;
|
||||
dto.isEnable = item.isEnable;
|
||||
dto.isExclusive = item.isExclusive;
|
||||
dto.isAutoReceive = item.isAutoReceive;
|
||||
dto.effectiveDays = item.effectiveDays;
|
||||
dto.effectiveHours = item.effectiveHours;
|
||||
dto.startStatus = status;
|
||||
|
||||
var condition = conditions.Find(p => p.promotionId == item.id);
|
||||
if (condition != null && condition.parameters.Contains("goodsId"))
|
||||
{
|
||||
JObject parameters = (JObject)JsonConvert.DeserializeObject(condition.parameters);
|
||||
|
||||
|
||||
var res = await GetGroupDetail(parameters["goodsId"].ObjectToInt(0), userId, type, item.id);
|
||||
if (res.status)
|
||||
var parameters = (JObject)JsonConvert.DeserializeObject(condition.parameters);
|
||||
var goodId = parameters["goodsId"].ObjectToInt(0);
|
||||
var good = goodData.Find(p => p.id == goodId);
|
||||
if (good != null)
|
||||
{
|
||||
var good = res.data as CoreCmsGoods;
|
||||
dto.goodBrief = good.brief;
|
||||
dto.goodName = good.name;
|
||||
dto.goodThumbnail = good.image;
|
||||
dto.goodImages = good.images;
|
||||
dto.goodStock = good.stock;
|
||||
dto.goodViewCount = good.viewCount;
|
||||
dto.goodUnit = good.unit;
|
||||
dto.mktPrice = good.mktprice;
|
||||
dto.price = good.price;
|
||||
|
||||
good.groupId = item.id;
|
||||
good.groupType = item.type;
|
||||
good.groupStatus = item.isEnable;
|
||||
good.groupTime = DateTime.Now;
|
||||
good.groupStartTime = item.startTime;
|
||||
good.groupEndTime = item.endTime;
|
||||
|
||||
TimeSpan ts = item.endTime.Subtract(dt);
|
||||
good.groupTimestamp = (int)ts.TotalSeconds;
|
||||
|
||||
goods.Add(good);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.expression1 = res.msg;
|
||||
TimeSpan ts = item.endTime.Subtract(dtNow);
|
||||
dto.timestamp = (int)ts.TotalSeconds;
|
||||
}
|
||||
}
|
||||
dtoData.Add(dto);
|
||||
}
|
||||
}
|
||||
|
||||
jm.data = new
|
||||
{
|
||||
goods,
|
||||
list.TotalCount,
|
||||
list.TotalPages,
|
||||
list,
|
||||
promotions.TotalCount,
|
||||
promotions.TotalPages,
|
||||
list = dtoData,
|
||||
pageIndex,
|
||||
pageSize
|
||||
};
|
||||
@@ -266,7 +291,7 @@ namespace CoreCms.Net.Services
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
|
||||
public async Task<WebApiCallBack> GetGroupDetail(int goodId = 0, int userId = 0, int type = (int)GlobalEnumVars.PromotionType.Group, int groupId = 0, bool needSku = false)
|
||||
public async Task<WebApiCallBack> GetGroupDetail(int groupId, int userId, int type, bool needSku)
|
||||
{
|
||||
using var container = _serviceProvider.CreateScope();
|
||||
|
||||
@@ -275,31 +300,40 @@ namespace CoreCms.Net.Services
|
||||
|
||||
var jm = new WebApiCallBack() { msg = "关键参数丢失" };
|
||||
|
||||
if (goodId == 0)
|
||||
if (groupId == 0)
|
||||
{
|
||||
return jm;
|
||||
}
|
||||
|
||||
//判断商品是否参加团购
|
||||
var isInGroup = _dal.IsInGroup(goodId, out var promotionId, type);
|
||||
if (!isInGroup)
|
||||
{
|
||||
jm.msg = "商品未参加团购";
|
||||
return jm;
|
||||
}
|
||||
|
||||
var promotion = await _dal.QueryByClauseAsync(p => p.isDel == false && p.isEnable == true && p.id == promotionId);
|
||||
var promotion = await _dal.QueryByClauseAsync(p => p.isDel == false && p.isEnable == true && p.id == groupId, true, true);
|
||||
if (promotion == null)
|
||||
{
|
||||
jm.msg = "无此活动";
|
||||
jm.otherData = promotionId;
|
||||
jm.otherData = groupId;
|
||||
return jm;
|
||||
}
|
||||
|
||||
var goodId = 0;
|
||||
var condition = await _promotionConditionServices.QueryByClauseAsync(p => p.promotionId == groupId, true, true);
|
||||
if (condition != null)
|
||||
{
|
||||
var obj = (JObject)JsonConvert.DeserializeObject(condition.parameters);
|
||||
if (obj.ContainsKey("goodsId") && obj["goodsId"].ObjectToInt(0) > 0)
|
||||
{
|
||||
goodId = obj["goodsId"].ObjectToInt(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (goodId == 0)
|
||||
{
|
||||
jm.msg = "未提交商品信息";
|
||||
jm.otherData = groupId;
|
||||
return jm;
|
||||
}
|
||||
|
||||
var goods = new CoreCmsGoods();
|
||||
string typeStr = type == (int)GlobalEnumVars.PromotionType.Group ? GlobalEnumVars.PromotionType.Group.ToString().ToLowerInvariant() : GlobalEnumVars.PromotionType.Seckill.ToString().ToLowerInvariant();
|
||||
|
||||
goods = await goodsServices.GetGoodsDetail(goodId, userId, true, typeStr, groupId, needSku);
|
||||
var goods = await goodsServices.GetGoodsDetail(goodId, userId, true, typeStr, groupId, needSku);
|
||||
if (goods == null)
|
||||
{
|
||||
jm.msg = "商品不存在";
|
||||
@@ -315,8 +349,6 @@ namespace CoreCms.Net.Services
|
||||
//调整前台显示数量
|
||||
var checkOrder = orderServices.FindLimitOrder(goods.product.id, userId, promotion.startTime, promotion.endTime, promotion.type);
|
||||
|
||||
var productStock = goods.product.stock;
|
||||
|
||||
//如果最大为设置值
|
||||
if (promotion.maxGoodsNums > 0)
|
||||
{
|
||||
@@ -335,10 +367,8 @@ namespace CoreCms.Net.Services
|
||||
goods.product.stock = checkOrder.TotalOrders - promotion.maxNums >= 0 ? 0 : promotion.maxNums - checkOrder.TotalOrders;
|
||||
}
|
||||
|
||||
|
||||
goods.buyPromotionCount = checkOrder.TotalOrders;
|
||||
|
||||
|
||||
var dt = DateTime.Now;
|
||||
|
||||
goods.groupId = promotion.id;
|
||||
@@ -351,7 +381,6 @@ namespace CoreCms.Net.Services
|
||||
TimeSpan ts = promotion.endTime.Subtract(dt);
|
||||
goods.groupTimestamp = (int)ts.TotalSeconds;
|
||||
|
||||
|
||||
//进行促销后要更换原销售价替换原市场价
|
||||
var originPrice = Math.Round(goods.product.price + goods.product.promotionAmount, 2);
|
||||
goods.product.mktprice = originPrice;
|
||||
|
||||
@@ -532,9 +532,9 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.PinTuan:
|
||||
if (parameter.ContainsKey("goodsId") && parameter.ContainsKey("teamId") && parameter.ContainsKey("groupId"))
|
||||
if (parameter.ContainsKey("teamId") && parameter.ContainsKey("groupId"))
|
||||
{
|
||||
str = parameter["goodsId"] + "_" + parameter["groupId"] + "_" + parameter["teamId"];
|
||||
str = parameter["groupId"] + "_" + parameter["teamId"];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -565,9 +565,9 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.AddPinTuan:
|
||||
if (parameter.ContainsKey("goodsId") && parameter.ContainsKey("groupId") && parameter.ContainsKey("teamId"))
|
||||
if (parameter.ContainsKey("groupId") && parameter.ContainsKey("teamId"))
|
||||
{
|
||||
str = parameter["goodsId"] + "_" + parameter["groupId"] + "_" + parameter["teamId"];
|
||||
str = parameter["groupId"] + "_" + parameter["teamId"];
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -598,24 +598,24 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.Group:
|
||||
if (parameter.ContainsKey("goodsId") || parameter.ContainsKey("groupId"))
|
||||
if (parameter.ContainsKey("groupId"))
|
||||
{
|
||||
str = parameter["goodsId"] + "_" + parameter["groupId"];
|
||||
str = parameter["groupId"].ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = "参数必须传goodsId,groupId";
|
||||
jm.msg = "参数必须传groupId";
|
||||
return jm;
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.Seckill:
|
||||
if (parameter.ContainsKey("goodsId") || parameter.ContainsKey("groupId"))
|
||||
if (parameter.ContainsKey("groupId"))
|
||||
{
|
||||
str = parameter["goodsId"] + "_" + parameter["groupId"];
|
||||
str = parameter["groupId"].ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = "参数必须传goodsId,groupId";
|
||||
jm.msg = "参数必须传groupId";
|
||||
return jm;
|
||||
}
|
||||
break;
|
||||
@@ -641,6 +641,17 @@ namespace CoreCms.Net.Services
|
||||
return jm;
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.ServiceGoods:
|
||||
if (parameter.ContainsKey("serviceGoodsId"))
|
||||
{
|
||||
str = parameter["serviceGoodsId"]?.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = "参数必须传id";
|
||||
return jm;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
@@ -682,9 +693,8 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
jm.data = new
|
||||
{
|
||||
goodsId = arr[0],
|
||||
groupId = arr[1],
|
||||
teamId = arr[2]
|
||||
groupId = arr[0],
|
||||
teamId = arr[1]
|
||||
};
|
||||
jm.status = true;
|
||||
}
|
||||
@@ -712,9 +722,8 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
jm.data = new
|
||||
{
|
||||
goodsId = arr[0],
|
||||
groupId = arr[1],
|
||||
teamId = arr[2]
|
||||
groupId = arr[0],
|
||||
teamId = arr[1]
|
||||
};
|
||||
jm.status = true;
|
||||
}
|
||||
@@ -734,23 +743,21 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.Group:
|
||||
if (arr.Length == 2)
|
||||
if (arr.Length == 1)
|
||||
{
|
||||
jm.data = new
|
||||
{
|
||||
goodsId = arr[0],
|
||||
groupId = arr[1],
|
||||
groupId = arr[0],
|
||||
};
|
||||
jm.status = true;
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.Seckill:
|
||||
if (arr.Length == 2)
|
||||
if (arr.Length == 1)
|
||||
{
|
||||
jm.data = new
|
||||
{
|
||||
goodsId = arr[0],
|
||||
groupId = arr[1],
|
||||
groupId = arr[0],
|
||||
};
|
||||
jm.status = true;
|
||||
}
|
||||
@@ -769,6 +776,13 @@ namespace CoreCms.Net.Services
|
||||
jm.status = true;
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.ServiceGoods:
|
||||
if (arr.Length == 1)
|
||||
{
|
||||
jm.data = new { serviceGoodsId = arr[0] };
|
||||
jm.status = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
|
||||
@@ -57,19 +57,13 @@ namespace CoreCms.Net.Services
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取列表首页用
|
||||
/// 获取首页组件数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<CoreCmsNotice>> QueryListAsync(Expression<Func<CoreCmsNotice, bool>> predicate,
|
||||
Expression<Func<CoreCmsNotice, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20)
|
||||
public async Task<List<dynamic>> QueryComponentAsync(Expression<Func<CoreCmsNotice, bool>> predicate)
|
||||
{
|
||||
return await _dal.QueryListAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize);
|
||||
return await _dal.QueryComponentAsync(predicate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user