From e56330d5305c140eae68f637dd399ef53a9cd03a Mon Sep 17 00:00:00 2001 From: lwh <2679599887@qq.com> Date: Mon, 31 Jul 2023 17:14:07 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=B7=BB=E5=8A=A0=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E8=AE=B0=E5=BD=95=E7=AE=A1=E7=90=86=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E6=83=A0=E5=88=B8=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA=E9=A2=86?= =?UTF-8?q?=E5=8F=96=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomerCoupons/CustomerCouponDto.cs | 59 ++++++++++ .../Marketing/CouponManage/Coupons/Coupon.cs | 2 +- .../CustomerCoupons/CustomerCoupon.cs | 75 ++++++++++++ .../CouponManage/Coupons/CouponVo.cs | 5 + .../CustomerCoupons/CustomerCouponVo.cs | 59 ++++++++++ .../CustomerCouponRepository.cs | 20 ++++ .../CouponManage/Coupons/CouponService.cs | 1 + .../CustomerCoupons/CustomerCouponService.cs | 110 ++++++++++++++++++ .../CustomerCoupons/ICustomerCouponService.cs | 41 +++++++ .../CustomerCouponController.cs | 98 ++++++++++++++++ 10 files changed, 469 insertions(+), 1 deletion(-) create mode 100644 ARW.Model/Dto/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponDto.cs create mode 100644 ARW.Model/Models/Business/Marketing/CouponManage/CustomerCoupons/CustomerCoupon.cs create mode 100644 ARW.Model/Vo/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponVo.cs create mode 100644 ARW.Repository/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponRepository.cs create mode 100644 ARW.Service/Business/BusinessService/Marketing/CouponManage/CustomerCoupons/CustomerCouponService.cs create mode 100644 ARW.Service/Business/IBusinessService/Marketing/CouponManage/CustomerCoupons/ICustomerCouponService.cs create mode 100644 ARW.WebApi/Controllers/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponController.cs diff --git a/ARW.Model/Dto/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponDto.cs b/ARW.Model/Dto/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponDto.cs new file mode 100644 index 0000000..03abc49 --- /dev/null +++ b/ARW.Model/Dto/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponDto.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using ARW.Model.Models.Business.Marketing.CouponManage.CustomerCoupons; + +namespace ARW.Model.Dto.Business.Marketing.CouponManage.CustomerCoupons +{ + /// + /// 领券记录输入对象 + /// + /// @author lwh + /// @date 2023-07-31 + /// + public class CustomerCouponDto + { + + public int CustomerCouponId { get; set; } + + public long CustomerCouponGuid { get; set; } + + [Required(ErrorMessage = "优惠劵guid不能为空")] + public long CouponGuid { get; set; } + + [Required(ErrorMessage = "客户guid不能为空")] + public long CustomerGuid { get; set; } + + [Required(ErrorMessage = "是否过期不能为空")] + public int CustomerCouponIsExpired { get; set; } + + [Required(ErrorMessage = "是否已使用不能为空")] + public int CustomerCouponIsUsed { get; set; } + + + + + + } + + + /// + /// 领券记录查询对象 + /// + /// @author lwh + /// @date 2023-07-31 + /// + public class CustomerCouponQueryDto : PagerInfo + { + + public int? CustomerCouponIsExpired { get; set; } + + public int? CustomerCouponIsUsed { get; set; } + + public string ids { get; set; } + } + + + + +} diff --git a/ARW.Model/Models/Business/Marketing/CouponManage/Coupons/Coupon.cs b/ARW.Model/Models/Business/Marketing/CouponManage/Coupons/Coupon.cs index e3b104f..744c8a1 100644 --- a/ARW.Model/Models/Business/Marketing/CouponManage/Coupons/Coupon.cs +++ b/ARW.Model/Models/Business/Marketing/CouponManage/Coupons/Coupon.cs @@ -166,7 +166,7 @@ namespace ARW.Model.Models.Business.Marketing.CouponManage.Coupons /// [EpplusTableColumn(Header = "已领取数量")] [SugarColumn(ColumnName = "coupon_get_number")] - public int? CouponGetNumber { get; set; } + public int CouponGetNumber { get; set; } /// diff --git a/ARW.Model/Models/Business/Marketing/CouponManage/CustomerCoupons/CustomerCoupon.cs b/ARW.Model/Models/Business/Marketing/CouponManage/CustomerCoupons/CustomerCoupon.cs new file mode 100644 index 0000000..28a1b58 --- /dev/null +++ b/ARW.Model/Models/Business/Marketing/CouponManage/CustomerCoupons/CustomerCoupon.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using SqlSugar; +using OfficeOpenXml.Attributes; +using Newtonsoft.Json; + +namespace ARW.Model.Models.Business.Marketing.CouponManage.CustomerCoupons +{ + /// + /// 领券记录,数据实体对象 + /// + /// @author lwh + /// @date 2023-07-31 + /// + [SugarTable("tb_customer_coupon")] + public class CustomerCoupon : BusinessBase + { + + /// + /// 描述 : + /// 空值 : false + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "customer_coupon_id")] + public int CustomerCouponId { get; set; } + + + /// + /// 描述 : + /// 空值 : false + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, IsIdentity = false, ColumnName = "customer_coupon_guid")] + public long CustomerCouponGuid { get; set; } + + + /// + /// 描述 :优惠劵guid + /// 空值 : false + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName = "coupon_guid")] + public long CouponGuid { get; set; } + + + /// + /// 描述 :客户guid + /// 空值 : false + /// + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(ColumnName = "customer_guid")] + public long CustomerGuid { get; set; } + + + /// + /// 描述 :是否过期 + /// 空值 : false + /// + [SugarColumn(ColumnName = "customer_coupon_is_expired")] + public int CustomerCouponIsExpired { get; set; } + + + /// + /// 描述 :是否已使用 + /// 空值 : false + /// + [SugarColumn(ColumnName = "customer_coupon_is_used")] + public int CustomerCouponIsUsed { get; set; } + + + + + + + } +} \ No newline at end of file diff --git a/ARW.Model/Vo/Business/Marketing/CouponManage/Coupons/CouponVo.cs b/ARW.Model/Vo/Business/Marketing/CouponManage/Coupons/CouponVo.cs index 97832b1..f600575 100644 --- a/ARW.Model/Vo/Business/Marketing/CouponManage/Coupons/CouponVo.cs +++ b/ARW.Model/Vo/Business/Marketing/CouponManage/Coupons/CouponVo.cs @@ -105,6 +105,11 @@ namespace ARW.Model.Vo.Business.Marketing.CouponManage.Coupons [EpplusIgnore] public int? CouponApplicableScope { get; set; } + /// + /// 描述 :领取数量 + /// + [EpplusTableColumn(Header = "领取数量")] + public int CouponGetNumber { get; set; } /// diff --git a/ARW.Model/Vo/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponVo.cs b/ARW.Model/Vo/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponVo.cs new file mode 100644 index 0000000..9d6865b --- /dev/null +++ b/ARW.Model/Vo/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponVo.cs @@ -0,0 +1,59 @@ +using Newtonsoft.Json; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; + +namespace ARW.Model.Vo.Business.Marketing.CouponManage.CustomerCoupons +{ + /// + /// 领券记录展示对象 + /// + /// @author lwh + /// @date 2023-07-31 + /// + public class CustomerCouponVo + { + + + /// + /// 描述 : + /// + public int CustomerCouponId { get; set; } + + + /// + /// 描述 : + /// + [JsonConverter(typeof(ValueToStringConverter))] + public long CustomerCouponGuid { get; set; } + + + /// + /// 描述 :优惠劵guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + public long CouponGuid { get; set; } + + public string CouponName{ get; set; } + + /// + /// 描述 :客户guid + /// + [JsonConverter(typeof(ValueToStringConverter))] + public long CustomerGuid { get; set; } + + public string CustomerName { get; set; } + + /// + /// 描述 :是否过期 + /// + public int CustomerCouponIsExpired { get; set; } + + + /// + /// 描述 :是否已使用 + /// + public int CustomerCouponIsUsed { get; set; } + + } +} diff --git a/ARW.Repository/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponRepository.cs b/ARW.Repository/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponRepository.cs new file mode 100644 index 0000000..0b6d122 --- /dev/null +++ b/ARW.Repository/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponRepository.cs @@ -0,0 +1,20 @@ +using System; +using Infrastructure.Attribute; +using ARW.Repository.System; +using ARW.Model.Models.Business.Marketing.CouponManage.CustomerCoupons; + +namespace ARW.Repository.Business.Marketing.CouponManage.CustomerCoupons +{ + /// + /// 领券记录仓储 + /// + /// @author lwh + /// @date 2023-07-31 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class CustomerCouponRepository : BaseRepository + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW.Service/Business/BusinessService/Marketing/CouponManage/Coupons/CouponService.cs b/ARW.Service/Business/BusinessService/Marketing/CouponManage/Coupons/CouponService.cs index 5dd958f..d92397d 100644 --- a/ARW.Service/Business/BusinessService/Marketing/CouponManage/Coupons/CouponService.cs +++ b/ARW.Service/Business/BusinessService/Marketing/CouponManage/Coupons/CouponService.cs @@ -69,6 +69,7 @@ namespace ARW.Service.Business.BusinessService.Marketing.CouponManage.Coupons CouponFixedEndTime = s.CouponFixedEndTime, CouponApplicableScope = s.CouponApplicableScope, CouponSendNumber = s.CouponSendNumber, + CouponGetNumber = s.CouponGetNumber, CouponDisplayStatus = s.CouponDisplayStatus, CouponSort = s.CouponSort, CouponApplicableScopeConfig = s.CouponApplicableScopeConfig, diff --git a/ARW.Service/Business/BusinessService/Marketing/CouponManage/CustomerCoupons/CustomerCouponService.cs b/ARW.Service/Business/BusinessService/Marketing/CouponManage/CustomerCoupons/CustomerCouponService.cs new file mode 100644 index 0000000..2975b26 --- /dev/null +++ b/ARW.Service/Business/BusinessService/Marketing/CouponManage/CustomerCoupons/CustomerCouponService.cs @@ -0,0 +1,110 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Infrastructure; +using ARW.Model; +using ARW.Repository; +using ARW.Repository.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Service.Business.IBusinessService.Marketing.CouponManage.CustomerCoupons; +using ARW.Model.Dto.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Model.Models.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Model.Vo.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Repository.Business.Marketing.CouponManage.Coupons; +using ARW.Model.Models.Business.Marketing.CouponManage.Coupons; +using ARW.Model.Models.Business.Custom.Customers; + +namespace ARW.Service.Business.BusinessService.Marketing.CouponManage.CustomerCoupons +{ + /// + /// 领券记录接口实现类 + /// + /// @author lwh + /// @date 2023-07-31 + /// + [AppService(ServiceType = typeof(ICustomerCouponService), ServiceLifetime = LifeTime.Transient)] + public class CustomerCouponServiceImpl : BaseService, ICustomerCouponService + { + private readonly CustomerCouponRepository _CustomerCouponRepository; + private readonly CouponRepository _CouponRepository; + + public CustomerCouponServiceImpl(CustomerCouponRepository CustomerCouponRepository, CouponRepository couponRepository) + { + this._CustomerCouponRepository = CustomerCouponRepository; + _CouponRepository = couponRepository; + } + + #region 业务逻辑代码 + + + /// + /// 查询领券记录分页列表 + /// + public async Task> GetCustomerCouponList(CustomerCouponQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(parm.CustomerCouponIsExpired != null, s => s.CustomerCouponIsExpired == parm.CustomerCouponIsExpired); + predicate = predicate.AndIF(parm.CustomerCouponIsUsed != null, s => s.CustomerCouponIsUsed == parm.CustomerCouponIsUsed); + var query = _CustomerCouponRepository + .Queryable() + .LeftJoin((s, c) => s.CustomerGuid == c.CustomerGuid) + .LeftJoin((s, c, d) => s.CouponGuid == d.CouponGuid) + .Where(predicate.ToExpression()) + .OrderBy(s => s.Create_time, OrderByType.Desc) + .Select((s, c, d) => new CustomerCouponVo + { + CustomerCouponId = s.CustomerCouponId, + CustomerCouponGuid = s.CustomerCouponGuid, + CouponName = d.CouponName, + CustomerName = c.CustomerNickname, + CouponGuid = s.CouponGuid, + CustomerGuid = s.CustomerGuid, + CustomerCouponIsExpired = s.CustomerCouponIsExpired, + CustomerCouponIsUsed = s.CustomerCouponIsUsed, + }); + + + return await query.ToPageAsync(parm); + } + + /// + /// 添加或修改领券记录 + /// + public async Task AddOrUpdateCustomerCoupon(CustomerCoupon model) + { + if (model.CustomerCouponId != 0) + { + var response = await _CustomerCouponRepository.UpdateAsync(model); + return "修改成功!"; + } + else + { + var response = await _CustomerCouponRepository.InsertReturnSnowflakeIdAsync(model); + if (response != 0) + { + await _CouponRepository.UpdateAsync(f => new Coupon + { + CouponGetNumber = f.CouponGetNumber + 1 + }, s => s.CouponGuid == model.CouponGuid); + } + return "添加成功!"; + } + } + + #region Excel处理 + + + #endregion + + + + #endregion + + } +} diff --git a/ARW.Service/Business/IBusinessService/Marketing/CouponManage/CustomerCoupons/ICustomerCouponService.cs b/ARW.Service/Business/IBusinessService/Marketing/CouponManage/CustomerCoupons/ICustomerCouponService.cs new file mode 100644 index 0000000..1738b0f --- /dev/null +++ b/ARW.Service/Business/IBusinessService/Marketing/CouponManage/CustomerCoupons/ICustomerCouponService.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Model.Models.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Model.Vo.Business.Marketing.CouponManage.CustomerCoupons; + +namespace ARW.Service.Business.IBusinessService.Marketing.CouponManage.CustomerCoupons +{ + /// + /// 领券记录接口类 + /// + /// @author lwh + /// @date 2023-07-31 + /// + public interface ICustomerCouponService : IBaseService + { + /// + /// 获取领券记录分页列表 + /// + /// + /// + Task> GetCustomerCouponList(CustomerCouponQueryDto parm); + + + /// + /// 添加或修改领券记录 + /// + /// + /// + Task AddOrUpdateCustomerCoupon(CustomerCoupon parm); + + + + + + } +} diff --git a/ARW.WebApi/Controllers/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponController.cs b/ARW.WebApi/Controllers/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponController.cs new file mode 100644 index 0000000..00bf8b2 --- /dev/null +++ b/ARW.WebApi/Controllers/Business/Marketing/CouponManage/CustomerCoupons/CustomerCouponController.cs @@ -0,0 +1,98 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Service.Business.IBusinessService.Marketing.CouponManage.CustomerCoupons; +using ARW.Admin.WebApi.Controllers; +using ARW.Model.Models.Business.Marketing.CouponManage.CustomerCoupons; +using ARW.Model.Vo.Business.Marketing.CouponManage.CustomerCoupons; +using Microsoft.AspNetCore.Authorization; +using ARW.Admin.WebApi.Framework; + + +namespace ARW.WebApi.Controllers.Business.Marketing.CouponManage.CustomerCoupons +{ + /// + /// 领券记录控制器 + /// + /// @author lwh + /// @date 2023-07-31 + /// + [Verify] + [Route("business/[controller]")] + public class CustomerCouponController : BaseController + { + private readonly ICustomerCouponService _CustomerCouponService; + + /// + /// 依赖注入 + /// + /// 领券记录服务 + public CustomerCouponController(ICustomerCouponService CustomerCouponService) + { + _CustomerCouponService = CustomerCouponService; + } + + + /// + /// 获取领券记录列表 + /// + /// 查询参数 + /// + [HttpGet("getCustomerCouponList")] + [ActionPermissionFilter(Permission = "business:customercoupon:list")] + public async Task GetCustomerCouponList([FromQuery] CustomerCouponQueryDto parm) + { + var res = await _CustomerCouponService.GetCustomerCouponList(parm); + return SUCCESS(res); + } + + /// + /// 添加或修改领券记录 + /// + /// + /// + [HttpPost("addOrUpdateCustomerCoupon")] + [ActionPermissionFilter(Permission = "business:customercoupon:addOrUpdate")] + [Log(Title = "添加或修改领券记录", BusinessType = BusinessType.ADDORUPDATE)] + public async Task AddOrUpdateCustomerCoupon([FromBody] CustomerCouponDto parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var modal = new CustomerCoupon(); + if (parm.CustomerCouponId != 0) modal = parm.Adapt().ToUpdate(HttpContext); + else modal = parm.Adapt().ToCreate(HttpContext); + + var res = await _CustomerCouponService.AddOrUpdateCustomerCoupon(modal); + return SUCCESS(res); + } + + /// + /// 删除领券记录 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "business:customercoupon:delete")] + [Log(Title = "领券记录删除", BusinessType = BusinessType.DELETE)] + public IActionResult Delete(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + var response = _CustomerCouponService.Delete(idsArr); + return SUCCESS("删除成功!"); + } + + + + + + + } +}