mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 18:23:25 +08:00
# 2022-01-17
### 1.3.0 开源社区版: 【新增】完善商品查看详情功能。#I4QTLR 【新增】订单详情页面需要增加下单客户信息。 【新增】完善服务订单管理功能,实现订单作废、导出功能;核销码实现列表,作废,导出功能。#I4OSBK 【修复】修复普通订单查看详情,因优惠信息问题导致的异常情况。#I4QXUQ 【修复】修复门店列表下的用户编辑页面名称大小写问题(linux下大小写敏感问题)。 【修复】修复微信支付成功相应的日志记录类型有误。#I4QSNZ 【修复】修复发货日志记录sku货号错误问题。#I4PX25 【修复】修复发货单列表查看详情,提示权限不足的问题。#I4QDQR ### 0.0.8 会员专业版: 【新增】新增接龙功能营销功能,实现单个活动,可以添加多个不同商品的不同sku混合选择下单。 【新增】增加接龙数据库脚本及演示文件。 【升级】升级uView组件到2.0.20版本。 【修复】修复编辑收货地址的路径中选取区域部分可以手动输入文字。 【修复】修复【微信直播带货】组件缺少获取sku分页数据的问题。#I4QKSU 【优化】调整【微信自定义交易组件】商品类目排序方式及展示内容。#I4QE0N
This commit is contained in:
@@ -405,7 +405,7 @@ namespace CoreCms.Net.Services
|
||||
var sLog = new CoreCmsStockLog
|
||||
{
|
||||
stockId = deliveryInfo.deliveryId,
|
||||
productId = item.id,
|
||||
productId = item.productId,
|
||||
goodsId = item.goodsId,
|
||||
nums = -sendNum,
|
||||
sn = item.sn,
|
||||
|
||||
@@ -54,6 +54,8 @@ namespace CoreCms.Net.Services
|
||||
private readonly ICoreCmsPinTuanRecordServices _pinTuanRecordServices;
|
||||
private readonly ICoreCmsGoodsServices _goodsServices;
|
||||
private readonly ICoreCmsGoodsCategoryServices _goodsCategoryServices;
|
||||
private readonly ICoreCmsSolitaireServices _solitaireServices;
|
||||
|
||||
|
||||
public CoreCmsCartServices(
|
||||
ICoreCmsCartRepository dal
|
||||
@@ -66,7 +68,7 @@ namespace CoreCms.Net.Services
|
||||
, ICoreCmsUserServices userServices
|
||||
, ICoreCmsSettingServices settingServices
|
||||
, ICoreCmsProductsServices productsServices
|
||||
, ICoreCmsPinTuanGoodsServices pinTuanGoodsServices, ICoreCmsPromotionConditionServices promotionConditionServices, ICoreCmsGoodsServices goodsServices, ICoreCmsGoodsCategoryServices goodsCategoryServices, ICoreCmsPromotionResultServices promotionResultServices, ICoreCmsPinTuanRecordServices pinTuanRecordServices)
|
||||
, ICoreCmsPinTuanGoodsServices pinTuanGoodsServices, ICoreCmsPromotionConditionServices promotionConditionServices, ICoreCmsGoodsServices goodsServices, ICoreCmsGoodsCategoryServices goodsCategoryServices, ICoreCmsPromotionResultServices promotionResultServices, ICoreCmsPinTuanRecordServices pinTuanRecordServices, ICoreCmsSolitaireServices solitaireServices)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
@@ -86,6 +88,7 @@ namespace CoreCms.Net.Services
|
||||
_goodsCategoryServices = goodsCategoryServices;
|
||||
_promotionResultServices = promotionResultServices;
|
||||
_pinTuanRecordServices = pinTuanRecordServices;
|
||||
_solitaireServices = solitaireServices;
|
||||
}
|
||||
|
||||
#region 设置购物车商品数量====================================================
|
||||
@@ -501,6 +504,16 @@ namespace CoreCms.Net.Services
|
||||
break;
|
||||
case (int)GlobalEnumVars.OrderType.Solitaire:
|
||||
//接龙模式,去获取接龙商品价格。
|
||||
var solitaireInfo = await _solitaireServices.SolitaireInfo(objectId, cartDto.list);
|
||||
if (solitaireInfo.status)
|
||||
{
|
||||
cartDto.list = solitaireInfo.data as List<CartProducts>;
|
||||
}
|
||||
else
|
||||
{
|
||||
return solitaireInfo;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta13" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
||||
<PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.25" />
|
||||
<PackageReference Include="ToolGood.Words" Version="3.0.2.8" />
|
||||
<PackageReference Include="ToolGood.Words" Version="3.0.3.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -667,6 +667,23 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据条件查询商品及sku分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public async Task<IPageList<CoreCmsGoods>> QueryGoodAndSkuPageAsync(Expression<Func<CoreCmsGoods, bool>> predicate,
|
||||
Expression<Func<CoreCmsGoods, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryGoodAndSkuPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
|
||||
}
|
||||
|
||||
#region 获取下拉商品数据
|
||||
/// <summary>
|
||||
/// 获取下拉商品数据
|
||||
|
||||
@@ -624,8 +624,10 @@ namespace CoreCms.Net.Services
|
||||
if (!string.IsNullOrEmpty(p.promotionList))
|
||||
{
|
||||
var jobj = JObject.Parse(p.promotionList);
|
||||
var v = jobj.Values().First();
|
||||
p.promotionObj = v;
|
||||
if (jobj.Values().Any())
|
||||
{
|
||||
p.promotionObj = jobj.Values().FirstOrDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,15 +10,18 @@
|
||||
|
||||
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 CoreCms.Net.Utility.Helper;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using SqlSugar;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
@@ -105,5 +108,27 @@ namespace CoreCms.Net.Services
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region 重写根据条件查询分页数据
|
||||
/// <summary>
|
||||
/// 重写根据条件查询分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<IPageList<CoreCmsUserServicesOrder>> QueryPageAsync(Expression<Func<CoreCmsUserServicesOrder, bool>> predicate,
|
||||
Expression<Func<CoreCmsUserServicesOrder, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,13 +9,15 @@
|
||||
***********************************************************************/
|
||||
|
||||
using System;
|
||||
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.UI;
|
||||
using CoreCms.Net.Model.ViewModels.Basics;
|
||||
using SqlSugar;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
@@ -34,5 +36,26 @@ namespace CoreCms.Net.Services
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
|
||||
#region 重写根据条件查询分页数据
|
||||
/// <summary>
|
||||
/// 重写根据条件查询分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<IPageList<CoreCmsUserServicesTicket>> QueryPageAsync(Expression<Func<CoreCmsUserServicesTicket, bool>> predicate,
|
||||
Expression<Func<CoreCmsUserServicesTicket, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,6 @@ using SixLabors.ImageSharp.Processing;
|
||||
using SKIT.FlurlHttpClient.Wechat.Api;
|
||||
using SKIT.FlurlHttpClient.Wechat.Api.Models;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
@@ -49,9 +48,10 @@ namespace CoreCms.Net.Services
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
private readonly IWebHostEnvironment _webHostEnvironment;
|
||||
|
||||
public static readonly string AppInterFaceUrl = AppSettingsConstVars.AppConfigAppInterFaceUrl;
|
||||
private readonly string _appInterFaceUrl = AppSettingsConstVars.AppConfigAppInterFaceUrl;
|
||||
|
||||
public readonly ICoreCmsGoodsServices GoodsServices;
|
||||
private readonly ICoreCmsGoodsServices _goodsServices;
|
||||
private readonly ICoreCmsSolitaireServices _solitaireServices;
|
||||
private readonly WeChatOptions _weChatOptions;
|
||||
private readonly WeChat.Service.HttpClients.IWeChatApiHttpClientFactory _weChatApiHttpClientFactory;
|
||||
|
||||
@@ -60,13 +60,14 @@ namespace CoreCms.Net.Services
|
||||
public CoreCmsShareServices(IUnitOfWork unitOfWork
|
||||
, IWebHostEnvironment webHostEnvironment
|
||||
, ICoreCmsGoodsServices goodsServices
|
||||
, IOptions<WeChatOptions> weChatOptions, IWeChatApiHttpClientFactory weChatApiHttpClientFactory)
|
||||
, IOptions<WeChatOptions> weChatOptions, IWeChatApiHttpClientFactory weChatApiHttpClientFactory, ICoreCmsSolitaireServices solitaireServices)
|
||||
|
||||
{
|
||||
_unitOfWork = unitOfWork;
|
||||
_webHostEnvironment = webHostEnvironment;
|
||||
GoodsServices = goodsServices;
|
||||
_goodsServices = goodsServices;
|
||||
_weChatApiHttpClientFactory = weChatApiHttpClientFactory;
|
||||
_solitaireServices = solitaireServices;
|
||||
_weChatOptions = weChatOptions.Value;
|
||||
|
||||
}
|
||||
@@ -123,14 +124,20 @@ namespace CoreCms.Net.Services
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> PosterShare(int client, int page, int userShareCode, string url, JObject parameter)
|
||||
{
|
||||
//获取分享代码
|
||||
var res = GetCode(client, page, userShareCode, url, parameter);
|
||||
if (!res.status)
|
||||
{
|
||||
return res;
|
||||
}
|
||||
//如果不是商品和拼团
|
||||
if (page != (int)GlobalEnumVars.UrlSharePageType.PinTuan && page != (int)GlobalEnumVars.UrlSharePageType.Goods && page != (int)GlobalEnumVars.UrlSharePageType.Seckill && page != (int)GlobalEnumVars.UrlSharePageType.Group)
|
||||
if (page != (int)GlobalEnumVars.UrlSharePageType.PinTuan &&
|
||||
page != (int)GlobalEnumVars.UrlSharePageType.Goods &&
|
||||
page != (int)GlobalEnumVars.UrlSharePageType.Seckill &&
|
||||
page != (int)GlobalEnumVars.UrlSharePageType.Solitaire &&
|
||||
page != (int)GlobalEnumVars.UrlSharePageType.Group)
|
||||
{
|
||||
//走二维码分享
|
||||
return await getQr(url, res.otherData.ToString(), client);
|
||||
}
|
||||
//生成海报图片
|
||||
@@ -196,7 +203,7 @@ namespace CoreCms.Net.Services
|
||||
//有这个二维码了
|
||||
jm.status = true;
|
||||
jm.msg = "二维码获取成功";
|
||||
jm.data = AppInterFaceUrl + fileName;
|
||||
jm.data = _appInterFaceUrl + fileName;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -231,50 +238,22 @@ namespace CoreCms.Net.Services
|
||||
//拼团
|
||||
if (!string.IsNullOrEmpty(invite))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(teamId))
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("5", invite, id, teamId);
|
||||
}
|
||||
else
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("5", invite, id, "");
|
||||
}
|
||||
scene = ShareHelper.share_parameter_encode("5", invite, id, !string.IsNullOrEmpty(teamId) ? teamId : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrEmpty(teamId))
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("5", "", id, teamId);
|
||||
}
|
||||
else
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("5", "", id, "");
|
||||
}
|
||||
scene = ShareHelper.share_parameter_encode("5", "", id, !string.IsNullOrEmpty(teamId) ? teamId : "");
|
||||
}
|
||||
}
|
||||
else if (type == 4)
|
||||
{
|
||||
//店铺首页
|
||||
if (!string.IsNullOrEmpty(invite))
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("9", invite, id, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("9", "", id, "");
|
||||
}
|
||||
scene = ShareHelper.share_parameter_encode("9", !string.IsNullOrEmpty(invite) ? invite : "", id, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
//默认首页
|
||||
if (!string.IsNullOrEmpty(invite))
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("3", invite, "", "");
|
||||
}
|
||||
else
|
||||
{
|
||||
scene = ShareHelper.share_parameter_encode("3", "", "", "");
|
||||
}
|
||||
scene = ShareHelper.share_parameter_encode("3", !string.IsNullOrEmpty(invite) ? invite : "", "", "");
|
||||
}
|
||||
|
||||
//没有去官方请求生成
|
||||
@@ -363,7 +342,7 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
jm.status = true;
|
||||
jm.msg = "二维码获取成功";
|
||||
jm.data = AppInterFaceUrl + fileName;
|
||||
jm.data = _appInterFaceUrl + fileName;
|
||||
jm.otherData = fileNameMin;
|
||||
}
|
||||
else
|
||||
@@ -646,6 +625,17 @@ namespace CoreCms.Net.Services
|
||||
return jm;
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.Solitaire:
|
||||
if (parameter.ContainsKey("id"))
|
||||
{
|
||||
str = parameter["id"]?.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = "参数必须传id";
|
||||
return jm;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
@@ -745,7 +735,7 @@ namespace CoreCms.Net.Services
|
||||
case (int)GlobalEnumVars.UrlSharePageType.Form:
|
||||
if (arr.Length == 1)
|
||||
{
|
||||
jm.data = new { goodsId = arr[0] };
|
||||
jm.data = new { id = arr[0] };
|
||||
jm.status = true;
|
||||
}
|
||||
break;
|
||||
@@ -778,6 +768,13 @@ namespace CoreCms.Net.Services
|
||||
jm.status = true;
|
||||
}
|
||||
break;
|
||||
case (int)GlobalEnumVars.UrlSharePageType.Solitaire:
|
||||
if (arr.Length == 1)
|
||||
{
|
||||
jm.data = new { id = arr[0] };
|
||||
jm.status = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
@@ -814,7 +811,7 @@ namespace CoreCms.Net.Services
|
||||
//有这个二维码了
|
||||
jm.status = true;
|
||||
jm.msg = "海报获取成功";
|
||||
jm.data = AppInterFaceUrl + fileName;
|
||||
jm.data = _appInterFaceUrl + fileName;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -838,7 +835,7 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
jm.status = true;
|
||||
jm.msg = "海报生成成功";
|
||||
jm.data = AppInterFaceUrl + fileName;
|
||||
jm.data = _appInterFaceUrl + fileName;
|
||||
}
|
||||
jm.otherData = mkResult;
|
||||
}
|
||||
@@ -856,7 +853,6 @@ namespace CoreCms.Net.Services
|
||||
{
|
||||
var fileName = fileNameStr;
|
||||
|
||||
|
||||
//文件硬地址
|
||||
var savePath = _webHostEnvironment.WebRootPath + "/static/qrCode/weChat/";
|
||||
var qrCodeDir = _webHostEnvironment.WebRootPath + "/static/qrCode/weChat/" + otherData;
|
||||
@@ -871,7 +867,7 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
//2商品详情页,3拼团详情页
|
||||
var page = dataObj["page"].ObjectToInt(0);
|
||||
if (page == 2 || page == 3)
|
||||
if (page == (int)GlobalEnumVars.UrlSharePageType.Goods || page == (int)GlobalEnumVars.UrlSharePageType.PinTuan)
|
||||
{
|
||||
if (dataObj.ContainsKey("params"))
|
||||
{
|
||||
@@ -881,20 +877,19 @@ namespace CoreCms.Net.Services
|
||||
return false;
|
||||
}
|
||||
var goodId = paramsObj["goodsId"].ObjectToInt();
|
||||
var goodModel = await GoodsServices.GetGoodsDetial(goodId);
|
||||
var goodModel = await _goodsServices.GetGoodsDetial(goodId);
|
||||
if (goodModel != null)
|
||||
{
|
||||
var images = goodModel.images.Split(",");
|
||||
if (images.Any())
|
||||
{
|
||||
var image = images[0];
|
||||
//创建一个背景宽度为400X600的底图
|
||||
using var imageTemple = new SixLabors.ImageSharp.Image<Rgba32>(400, 600);
|
||||
//设置底图的背景色为白色
|
||||
imageTemple.Mutate(x => x.BackgroundColor(SixLabors.ImageSharp.Color.White));
|
||||
//绘制商品图片(网络下载图片)
|
||||
HttpClient client = new HttpClient();
|
||||
HttpResponseMessage response = await client.GetAsync(image);
|
||||
HttpResponseMessage response = await client.GetAsync(goodModel.image);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stream = await response.Content.ReadAsStreamAsync();
|
||||
//载入下载的图片流
|
||||
@@ -956,9 +951,88 @@ namespace CoreCms.Net.Services
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (page == (int)GlobalEnumVars.UrlSharePageType.Solitaire)
|
||||
{
|
||||
if (dataObj.ContainsKey("params"))
|
||||
{
|
||||
var paramsObj = JObject.FromObject(dataObj["params"]);
|
||||
if (!paramsObj.ContainsKey("id"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
var id = paramsObj["id"].ObjectToInt();
|
||||
var solitaireModel = await _solitaireServices.QueryByClauseAsync(p => p.id == id);
|
||||
if (solitaireModel != null && !string.IsNullOrEmpty(solitaireModel.thumbnail))
|
||||
{
|
||||
//创建一个背景宽度为400X600的底图
|
||||
using var imageTemple = new SixLabors.ImageSharp.Image<Rgba32>(400, 600);
|
||||
//设置底图的背景色为白色
|
||||
imageTemple.Mutate(x => x.BackgroundColor(SixLabors.ImageSharp.Color.White));
|
||||
//绘制商品图片(网络下载图片)
|
||||
HttpClient client = new HttpClient();
|
||||
HttpResponseMessage response = await client.GetAsync(solitaireModel.thumbnail);
|
||||
response.EnsureSuccessStatusCode();
|
||||
var stream = await response.Content.ReadAsStreamAsync();
|
||||
//载入下载的图片流
|
||||
var imageThumbnail = await SixLabors.ImageSharp.Image.LoadAsync(stream);
|
||||
//将下载的图片压缩至400X400
|
||||
imageThumbnail.Mutate(x =>
|
||||
{
|
||||
x.Resize(400, 400);
|
||||
});
|
||||
//将商品大图合并到背景图上
|
||||
imageTemple.Mutate(x => x.DrawImage(imageThumbnail, new SixLabors.ImageSharp.Point(0, 0), 1));
|
||||
//将用户的分享二维码合并大背景图上
|
||||
var imageQrcode = await SixLabors.ImageSharp.Image.LoadAsync(qrCodeDir);
|
||||
//将二维码缩略至120X120
|
||||
imageQrcode.Mutate(x =>
|
||||
{
|
||||
x.Resize(120, 120);
|
||||
});
|
||||
//将二维码图片合并到背景图上
|
||||
imageTemple.Mutate(x => x.DrawImage(imageQrcode, new SixLabors.ImageSharp.Point(275, 420), 1));
|
||||
//构建字体//装载字体(ttf)(而且字体一定要支持简体中文的)
|
||||
var fonts = new FontCollection();
|
||||
SixLabors.Fonts.FontFamily fontFamily = fonts.Install(_webHostEnvironment.WebRootPath + "/fonts/SourceHanSansK-Normal.ttf");
|
||||
//绘制商品名称
|
||||
SixLabors.Fonts.Font titleFont = new SixLabors.Fonts.Font(fontFamily, 20, SixLabors.Fonts.FontStyle.Regular);
|
||||
//商品名称可能较长,设置为多行文本输出
|
||||
var textOptions = new TextOptions()
|
||||
{
|
||||
ApplyKerning = true,
|
||||
VerticalAlignment = VerticalAlignment.Top,
|
||||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
WrapTextWidth = 230
|
||||
};
|
||||
var graphicsOptions = new GraphicsOptions()
|
||||
{
|
||||
Antialias = true
|
||||
};
|
||||
//沿着行尾的绕行路径绘制文本
|
||||
var options = new SixLabors.ImageSharp.Drawing.Processing.DrawingOptions
|
||||
{
|
||||
GraphicsOptions = graphicsOptions,
|
||||
TextOptions = textOptions
|
||||
};
|
||||
//开始绘制商品名称
|
||||
imageTemple.Mutate(ctx => ctx.DrawText(options, solitaireModel.title, titleFont, SixLabors.ImageSharp.Color.Red, new SixLabors.ImageSharp.PointF(10, 450)));
|
||||
//绘制商品金额
|
||||
SixLabors.Fonts.Font moneyFont = new SixLabors.Fonts.Font(fontFamily, 18);
|
||||
//获取该文件绘制所需的大小
|
||||
//var size = TextMeasurer.Measure(moneyText, new RendererOptions(moneyFont));
|
||||
imageTemple.Mutate(ctx => ctx.DrawText("火热接龙中", moneyFont, SixLabors.ImageSharp.Color.Crimson, new SixLabors.ImageSharp.PointF(10, 410)));
|
||||
//绘制提示语
|
||||
SixLabors.Fonts.Font tipsFont = new SixLabors.Fonts.Font(fontFamily, 10);
|
||||
imageTemple.Mutate(ctx => ctx.DrawText("扫描或长按识别二维码", tipsFont, SixLabors.ImageSharp.Color.Black, new SixLabors.ImageSharp.PointF(283, 555)));
|
||||
|
||||
//载入流存储在到文件
|
||||
await imageTemple.SaveAsync(_webHostEnvironment.WebRootPath + fileName);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
154
CoreCms.Net.Services/Solitaire/CoreCmsSolitaireItemsServices.cs
Normal file
154
CoreCms.Net.Services/Solitaire/CoreCmsSolitaireItemsServices.cs
Normal file
@@ -0,0 +1,154 @@
|
||||
/***********************************************************************
|
||||
* Project: CoreCms
|
||||
* ProjectName: 核心内容管理系统
|
||||
* Web: https://www.corecms.net
|
||||
* Author: 大灰灰
|
||||
* Email: jianweie@163.com
|
||||
* CreateTime: 2021/6/14 23:18:18
|
||||
* 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 CoreCmsSolitaireItemsServices : BaseServices<CoreCmsSolitaireItems>, ICoreCmsSolitaireItemsServices
|
||||
{
|
||||
private readonly ICoreCmsSolitaireItemsRepository _dal;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
|
||||
public CoreCmsSolitaireItemsServices(IUnitOfWork unitOfWork, ICoreCmsSolitaireItemsRepository dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
#region 实现重写增删改查操作==========================================================
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步插入方法
|
||||
/// </summary>
|
||||
/// <param name="entity">实体数据</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsSolitaireItems entity)
|
||||
{
|
||||
return await _dal.InsertAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步更新方法方法
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsSolitaireItems entity)
|
||||
{
|
||||
return await _dal.UpdateAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步更新方法方法
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsSolitaireItems> entity)
|
||||
{
|
||||
return await _dal.UpdateAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写删除指定ID的数据
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
|
||||
{
|
||||
return await _dal.DeleteByIdAsync(id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写删除指定ID集合的数据(批量删除)
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
|
||||
{
|
||||
return await _dal.DeleteByIdsAsync(ids);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 获取缓存的所有数据==========================================================
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓存的所有数据
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<List<CoreCmsSolitaireItems>> GetCaChe()
|
||||
{
|
||||
return await _dal.GetCaChe();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新cache
|
||||
/// </summary>
|
||||
public async Task<List<CoreCmsSolitaireItems>> UpdateCaChe()
|
||||
{
|
||||
return await _dal.UpdateCaChe();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 重写根据条件查询列表数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public new Task<List<CoreCmsSolitaireItems>> QueryListByClauseAsync(
|
||||
Expression<Func<CoreCmsSolitaireItems, bool>> predicate,
|
||||
Expression<Func<CoreCmsSolitaireItems, object>> orderByExpression, OrderByType orderByType,
|
||||
bool blUseNoLock = false)
|
||||
{
|
||||
return _dal.QueryListByClauseAsync(predicate, orderByExpression, orderByType, blUseNoLock);
|
||||
}
|
||||
|
||||
|
||||
#region 重写根据条件查询分页数据
|
||||
/// <summary>
|
||||
/// 重写根据条件查询分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<IPageList<CoreCmsSolitaireItems>> QueryPageAsync(Expression<Func<CoreCmsSolitaireItems, bool>> predicate,
|
||||
Expression<Func<CoreCmsSolitaireItems, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
162
CoreCms.Net.Services/Solitaire/CoreCmsSolitaireServices.cs
Normal file
162
CoreCms.Net.Services/Solitaire/CoreCmsSolitaireServices.cs
Normal file
@@ -0,0 +1,162 @@
|
||||
/***********************************************************************
|
||||
* Project: CoreCms
|
||||
* ProjectName: 核心内容管理系统
|
||||
* Web: https://www.corecms.net
|
||||
* Author: 大灰灰
|
||||
* Email: jianweie@163.com
|
||||
* CreateTime: 2021/6/14 23:17:57
|
||||
* 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.DTO;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
using SqlSugar;
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 接龙活动表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsSolitaireServices : BaseServices<CoreCmsSolitaire>, ICoreCmsSolitaireServices
|
||||
{
|
||||
private readonly ICoreCmsSolitaireRepository _dal;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
|
||||
public CoreCmsSolitaireServices(IUnitOfWork unitOfWork, ICoreCmsSolitaireRepository dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
#region 实现重写增删改查操作==========================================================
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步插入方法
|
||||
/// </summary>
|
||||
/// <param name="entity">实体数据</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsSolitaire entity)
|
||||
{
|
||||
return await _dal.InsertAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步更新方法方法
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsSolitaire entity)
|
||||
{
|
||||
return await _dal.UpdateAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步更新方法方法
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsSolitaire> entity)
|
||||
{
|
||||
return await _dal.UpdateAsync(entity);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写删除指定ID的数据
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
|
||||
{
|
||||
return await _dal.DeleteByIdAsync(id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写删除指定ID集合的数据(批量删除)
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
|
||||
{
|
||||
return await _dal.DeleteByIdsAsync(ids);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 获取缓存的所有数据==========================================================
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓存的所有数据
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<List<CoreCmsSolitaire>> GetCaChe()
|
||||
{
|
||||
return await _dal.GetCaChe();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新cache
|
||||
/// </summary>
|
||||
public async Task<List<CoreCmsSolitaire>> UpdateCaChe()
|
||||
{
|
||||
return await _dal.UpdateCaChe();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 重写根据条件查询分页数据
|
||||
/// <summary>
|
||||
/// 重写根据条件查询分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<IPageList<CoreCmsSolitaire>> QueryPageAsync(Expression<Func<CoreCmsSolitaire, bool>> predicate,
|
||||
Expression<Func<CoreCmsSolitaire, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 取购物车数据的时候,更新价格
|
||||
|
||||
/// <summary>
|
||||
/// 取购物车数据的时候,更新价格
|
||||
/// </summary>
|
||||
/// <param name="objectId"></param>
|
||||
/// <param name="list"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> SolitaireInfo(int objectId, List<CartProducts> list)
|
||||
{
|
||||
return await _dal.SolitaireInfo(objectId, list);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 获取接龙购买用户记录
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> GetBuyRecord(int id)
|
||||
{
|
||||
return await _dal.GetBuyRecord(id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user