From 800dc50fed660ddbdf51c957956383d3e05daab0 Mon Sep 17 00:00:00 2001 From: admin <1752476835@qq.com> Date: Sat, 6 Jul 2024 16:57:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/entity/PlayOrderInfoEntity.java | 6 + .../order/service/IPlayOrderInfoService.java | 3 +- .../impl/PlayOrderInfoServiceImpl.java | 6 +- .../PlayCouponDetailsController.java | 19 +- .../controller/PlayCouponInfoController.java | 66 +++++- .../entity/PlayCouponDetailsEntity.java | 29 +-- .../module/entity/PlayCouponInfoEntity.java | 28 ++- .../module/vo/PlayCouponDetailsQueryVo.java | 2 +- .../module/vo/PlayCouponDetailsReturnVo.java | 205 ++++++++++++++++++ .../shop/module/vo/PlayCouponInfoAddVo.java | 51 ++++- .../vo/PlayCouponInfoOnLineStateUpdateVo.java | 32 +++ .../module/vo/PlayCouponInfoReturnVo.java | 24 +- .../shop/module/vo/PlayCouponInfoSendVo.java | 39 ++++ .../service/IPlayCouponDetailsService.java | 27 ++- .../shop/service/IPlayCouponInfoService.java | 37 ++++ .../impl/PlayCouponDetailsServiceImpl.java | 40 +++- .../impl/PlayCouponInfoServiceImpl.java | 114 +++++++++- .../controller/WxCouponController.java | 113 ++++++++-- .../controller/WxCustomController.java | 29 ++- .../WxPersonnelGroupInfoController.java | 50 +++++ .../weichat/entity/PlayGroupWagesQueryVo.java | 20 ++ .../entity/PlayGroupWagesReturnVo.java | 64 ++++++ .../weichat/entity/WxCouponOrderQueryVo.java | 24 ++ .../weichat/entity/WxCouponOrderReturnVo.java | 83 +++++++ .../entity/WxCouponReceiveReturnVo.java | 81 +++++++ 25 files changed, 1093 insertions(+), 99 deletions(-) create mode 100644 play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsReturnVo.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoOnLineStateUpdateVo.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoSendVo.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPersonnelGroupInfoController.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesQueryVo.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesReturnVo.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderQueryVo.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderReturnVo.java create mode 100644 play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponReceiveReturnVo.java diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/PlayOrderInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/PlayOrderInfoEntity.java index 2f844fb..74b3572 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/PlayOrderInfoEntity.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/module/entity/PlayOrderInfoEntity.java @@ -130,6 +130,12 @@ public class PlayOrderInfoEntity extends BaseEntity { */ private String useCoupon; + /** + * 优惠券列表 + */ + @TableField(typeHandler = StringTypeHandler.class) + private List couponIds; + /** * 是否是客服录入订单[0:不是,1:是] */ diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java index 1d25d62..93a37db 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/service/IPlayOrderInfoService.java @@ -62,11 +62,12 @@ public interface IPlayOrderInfoService extends IService { * @param purchaserBy 下单人 * @param acceptBy 接单人 * @param weiChatCode 订单微信号码 + * @param couponIds 优惠券ID列表 * @param remark 订单备注 * @author admin * @since 2024/6/3 10:53 **/ - void createOrderInfo(String orderId, String orderNo, String orderState, String orderType, String placeType, String rewardType, String firstOrder, String commodityId, String commodityType, BigDecimal commodityPrice, String serviceDuration, String commodityName, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, BigDecimal discountAmount, String purchaserBy, String acceptBy, String weiChatCode, String remark); + void createOrderInfo(String orderId, String orderNo, String orderState, String orderType, String placeType, String rewardType, String firstOrder, String commodityId, String commodityType, BigDecimal commodityPrice, String serviceDuration, String commodityName, String commodityNumber, BigDecimal orderMoney, BigDecimal finalAmount, BigDecimal discountAmount, String purchaserBy, String acceptBy, String weiChatCode, List couponIds, String remark); /** diff --git a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java index 0afd2f8..b598ef8 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/order/service/impl/PlayOrderInfoServiceImpl.java @@ -74,7 +74,7 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl couponIds, String remark) { PlayOrderInfoEntity entity = new PlayOrderInfoEntity(); entity.setId(orderId); entity.setOrderNo(orderNo); @@ -101,6 +101,8 @@ public class PlayOrderInfoServiceImpl extends ServiceImpl page = this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayOrderInfoReturnVo.class, lambdaQueryWrapper); page.getRecords().forEach(ca -> { - if (ca.getPlaceType().equals("1")) { + if ("1".equals(ca.getPlaceType())) { PlayOrderRandomInfoEntity randomInfo = playOrderRandomInfoService.getById(ca.getId()); if (Objects.nonNull(randomInfo)) { ca.setLabels(randomInfo.getLabels()); diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponDetailsController.java b/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponDetailsController.java index f556b8f..62c4fa2 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponDetailsController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponDetailsController.java @@ -3,11 +3,13 @@ package com.starry.admin.modules.shop.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo; +import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsReturnVo; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsUpdateUseStateVo; import com.starry.admin.modules.shop.service.IPlayCouponDetailsService; import com.starry.common.annotation.Log; import com.starry.common.enums.BusinessType; import com.starry.common.result.R; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -30,12 +32,11 @@ public class PlayCouponDetailsController { */ // @PreAuthorize("@customSs.hasPermission('shop:couponDetails:list')") @PostMapping("/listByPage") - public R listByPage(PlayCouponDetailsQueryVo vo) { - IPage list = playCouponDetailsService.selectByPage(vo); + public R listByPage(@Validated @RequestBody PlayCouponDetailsQueryVo vo) { + IPage list = playCouponDetailsService.selectByPage(vo); return R.ok(list); } - /** * 获取优惠券详情详细信息 */ @@ -68,7 +69,9 @@ public class PlayCouponDetailsController { @PostMapping("/updateUseState") public R update(PlayCouponDetailsUpdateUseStateVo vo) { for (String couponId : vo.getCouponIds()) { - PlayCouponDetailsEntity entity = playCouponDetailsService.selectPlayCouponDetailsById(couponId); + playCouponDetailsService.selectPlayCouponDetailsById(couponId); + PlayCouponDetailsEntity entity = new PlayCouponDetailsEntity(); + entity.setId(couponId); entity.setUseState(vo.getUseState()); playCouponDetailsService.update(entity); } @@ -97,6 +100,12 @@ public class PlayCouponDetailsController { @Log(title = "优惠券详情", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R remove(@PathVariable String[] ids) { - return R.ok(playCouponDetailsService.deletePlayCouponDetailsByIds(ids)); + for (String id : ids) { + PlayCouponDetailsEntity entity = new PlayCouponDetailsEntity(); + entity.setId(id); + entity.setUseState("3"); + playCouponDetailsService.update(entity); + } + return R.ok(); } } diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java index 3b6cb53..75f3304 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/controller/PlayCouponInfoController.java @@ -2,19 +2,23 @@ package com.starry.admin.modules.shop.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.starry.admin.common.exception.CustomException; +import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity; +import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService; import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; -import com.starry.admin.modules.shop.module.vo.PlayCouponInfoAddVo; -import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo; -import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo; +import com.starry.admin.modules.shop.module.vo.*; +import com.starry.admin.modules.shop.service.IPlayCouponDetailsService; import com.starry.admin.modules.shop.service.IPlayCouponInfoService; import com.starry.common.annotation.Log; import com.starry.common.enums.BusinessType; import com.starry.common.result.R; import com.starry.common.utils.ConvertUtil; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; /** * 优惠券信息Controller @@ -28,6 +32,12 @@ public class PlayCouponInfoController { @Resource private IPlayCouponInfoService playCouponInfoService; + @Resource + private IPlayCouponDetailsService playCouponDetailsService; + + @Resource + private IPlayCustomUserInfoService playCustomUserInfoService; + /** * 查询优惠券信息列表 */ @@ -38,6 +48,35 @@ public class PlayCouponInfoController { return R.ok(list); } + /** + * 修改优惠券上下架状态 + * + * @param vo 优惠券上下架对象 + */ + @PostMapping("/updateOnLineState") + public R updateOnLineState(@Validated @RequestBody PlayCouponInfoOnLineStateUpdateVo vo) { + playCouponInfoService.selectPlayCouponInfoById(vo.getId()); + PlayCouponInfoEntity entity = new PlayCouponInfoEntity(); + entity.setId(vo.getId()); + entity.setCouponOnLineState(vo.getCouponOnLineState()); + playCouponInfoService.update(entity); + return R.ok(); + } + + + /** + * 发放优惠券 + * + * @param vo 优惠券发放对象 + */ + @PostMapping("/sendCoupon") + public R sendCoupon(@Validated @RequestBody PlayCouponInfoSendVo vo) { + PlayCustomUserInfoEntity customUserInfo = playCustomUserInfoService.selectById(vo.getCustomId()); + playCouponDetailsService.create(customUserInfo.getId(), customUserInfo.getNickname(), customUserInfo.getLevelId(), vo.getId(), "2", "1"); + return R.ok(); + } + + /** * 获取优惠券信息详细信息 */ @@ -53,14 +92,14 @@ public class PlayCouponInfoController { // @PreAuthorize("@customSs.hasPermission('shop:coupon:create')") @Log(title = "优惠券信息", businessType = BusinessType.INSERT) @PostMapping("/create") - public R create(@RequestBody PlayCouponInfoAddVo vo) { + public R create(@Validated @RequestBody PlayCouponInfoAddVo vo) { PlayCouponInfoEntity entity = ConvertUtil.entityToVo(vo, PlayCouponInfoEntity.class); if ("1".equals(vo.getValidityPeriodType())) { if (vo.getProductiveTime() == null || vo.getProductiveTime().size() != 2) { throw new CustomException("用券时间输入错误"); } - LocalDateTime startTime = LocalDateTime.parse(vo.getProductiveTime().get(0)); - LocalDateTime endTime = LocalDateTime.parse(vo.getProductiveTime().get(1)); + LocalDateTime startTime = LocalDateTime.parse(vo.getProductiveTime().get(0), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDateTime endTime = LocalDateTime.parse(vo.getProductiveTime().get(1), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); if (endTime.isBefore(startTime)) { throw new CustomException("用券时间输入错误,结束时间大于开始时间"); } @@ -70,8 +109,19 @@ public class PlayCouponInfoController { if ("2".equals(vo.getValidityPeriodType()) && vo.getEffectiveDay() <= 0) { throw new CustomException("用券时间输入错误,有效天数不能为0"); } - - + String discountContent = ""; + if (BigDecimal.ZERO.compareTo(vo.getUseMinAmount()) == 0) { + discountContent = "无门槛"; + } else { + discountContent = "满" + vo.getUseMinAmount() + "船票"; + } + if ("0".equals(vo.getDiscountType())) { + discountContent += ("减" + vo.getDiscountAmount() + "船票"); + } else { + discountContent += ("打" + vo.getDiscountAmount() + "折"); + } + entity.setDiscountContent(discountContent); + entity.setCouponOnLineState("1"); boolean success = playCouponInfoService.create(entity); if (success) { return R.ok(); diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponDetailsEntity.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponDetailsEntity.java index a88583c..50affb4 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponDetailsEntity.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponDetailsEntity.java @@ -7,7 +7,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; -import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -48,7 +47,7 @@ public class PlayCouponDetailsEntity extends BaseEntity private String customLevelId; /** - * 优惠券名称 + * 优惠券ID */ private String couponId; @@ -63,32 +62,6 @@ public class PlayCouponDetailsEntity extends BaseEntity private String useState; /** - * 优惠类型(0:满减;1:折扣) - */ - private String discountType; - - /** - * 优惠内容,文字展示 - */ - private String discountContent; - - /** - * 折扣值 - */ - private BigDecimal discountAmount; - - /** - * 有效期类型(0:永久有效;1:临时有效) - */ - private String validityPeriodType; - - - /** - * 到期时间 - */ - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private LocalDateTime expirationTime; /** * 获得时间 diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java index e34d555..3fb2455 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/entity/PlayCouponInfoEntity.java @@ -24,7 +24,6 @@ import java.util.List; @TableName(value = "play_coupon_info", autoResultMap = true) public class PlayCouponInfoEntity extends BaseEntity { - /** * UUID */ @@ -33,7 +32,7 @@ public class PlayCouponInfoEntity extends BaseEntity { /** * 优惠券名称 **/ - private String couponName; + private String couponName ="测试券"; /** * 租户ID */ @@ -64,7 +63,7 @@ public class PlayCouponInfoEntity extends BaseEntity { private Integer effectiveDay; /** - * 使用优惠券最近消费金额 + * 使用优惠券最低消费金额 **/ private BigDecimal useMinAmount; @@ -125,16 +124,30 @@ public class PlayCouponInfoEntity extends BaseEntity { private String claimConditionType; /** - * 顾客等级 + * 顾客等级选择状态(0:未选择,1:选择) + */ + private String customLevelCheckType; + + /** + * 店员等级 */ @TableField(typeHandler = StringTypeHandler.class) private List customLevel; + /** + * 用户关注公众号选择状态(0:未选择,1:选择) + */ + private String customFollowStatusCheckType; + /** * 顾客关注公众号状态(0:未关注,1:已关注) */ private String customFollowStatus; + /** + * 顾客性别选择状态(0:未选择,1:选择) + */ + private String customSexCheckType; /** * 顾客性别(0:未知;1:男,2:女) */ @@ -144,7 +157,12 @@ public class PlayCouponInfoEntity extends BaseEntity { /** * 仅限新用户领取(0:不是;1:是)(没有下过单的用户,下单后再退单也不算) */ - private String isNewUser; + private String newUser; + + /** + * 优惠券上架状态(0;下架;1:上架) + */ + private String couponOnLineState; } diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsQueryVo.java index b406520..26b344f 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsQueryVo.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsQueryVo.java @@ -49,6 +49,6 @@ public class PlayCouponDetailsQueryVo extends BasePageEntity { /** * 用户等级 */ - private List customLevelId; + private String customLevelId; } diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsReturnVo.java new file mode 100644 index 0000000..54c0c80 --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponDetailsReturnVo.java @@ -0,0 +1,205 @@ +package com.starry.admin.modules.shop.module.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.starry.admin.common.conf.StringTypeHandler; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 优惠券详细信息返回列表 + * + * @author admin + * @since 2024/7/8 下午11:29 + **/ +@Data +public class PlayCouponDetailsReturnVo { + + /** + * UUID + */ + private String id; + + + /** + * 顾客ID + */ + private String customId; + + /** + * 顾客昵称 + */ + private String customNickname; + + /** + * 顾客等级ID + */ + private String customLevelId; + + /** + * 优惠券ID + */ + private String couponId; + + /** + * 获得渠道(1:自主领取;2:后台发放;3:退款返还;4:分享领取;5:抽奖获得) + */ + private String obtainingChannels; + + /** + * 优惠券使用状态(1:未使用;2:已使用;3:已回收) + */ + private String useState; + + /** + * 生效时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime productiveTime; + + /** + * 到期时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime expirationTime; + + /** + * 获得时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime obtainingTime; + + /** + * 使用时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime useTime; + + /** + * 优惠券名称 + **/ + private String couponName; + + /** + * 有效期类型(0:永久有效;1:固定时间内有效;2:领取后几天内有效) + */ + private String validityPeriodType; + + + /** + * 生效时长,validityPeriodType=2时有效 + **/ + private Integer effectiveDay; + + /** + * 使用优惠券最低消费金额 + **/ + private BigDecimal useMinAmount; + + /** + * 优惠类型(0:满减;1:折扣) + */ + private String discountType; + + /** + * 优惠内容,文字展示 + */ + private String discountContent; + + /** + * 折扣值 + */ + private BigDecimal discountAmount; + + /** + * 优惠金额是否由店铺承担(0:不是;1:是) + */ + private String attributionDiscounts; + + /** + * 下单类型(0:指定单,1:随机单。2:打赏单) + */ + @TableField(typeHandler = StringTypeHandler.class) + private List placeType; + + /** + * 店员范围(0:所有店员) + */ + private String clerkType; + + /** + * 优惠券总数 + */ + private Integer couponQuantity; + + /** + * 已发放数量 + */ + private Integer issuedQuantity; + + /** + * 剩余数量 + */ + private Integer remainingQuantity; + + /** + * 店员获得最大数量 + */ + private Integer clerkObtainedMaxQuantity; + + /** + * 领取条件类型(0:所有人可领取,1:指定条件领取) + */ + private String claimConditionType; + + /** + * 顾客等级选择状态(0:未选择,1:选择) + */ + private String customLevelCheckType; + + /** + * 店员等级 + */ + @TableField(typeHandler = StringTypeHandler.class) + private List customLevel; + + /** + * 用户关注公众号选择状态(0:未选择,1:选择) + */ + private String customFollowStatusCheckType; + + /** + * 顾客关注公众号状态(0:未关注,1:已关注) + */ + private String customFollowStatus; + + /** + * 顾客性别选择状态(0:未选择,1:选择) + */ + private String customSexCheckType; + /** + * 顾客性别(0:未知;1:男,2:女) + */ + @TableField(typeHandler = StringTypeHandler.class) + private List customSex; + + /** + * 仅限新用户领取(0:不是;1:是)(没有下过单的用户,下单后再退单也不算) + */ + private String newUser; + + /** + * 优惠券上架状态(0;下架;1:上架) + */ + private String couponOnLineState; + + +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java index 458dbdc..99bbfe3 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoAddVo.java @@ -1,11 +1,10 @@ package com.starry.admin.modules.shop.module.vo; -import com.baomidou.mybatisplus.annotation.TableField; -import com.starry.admin.common.conf.StringTypeHandler; import lombok.Data; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; import java.math.BigDecimal; import java.util.List; @@ -62,7 +61,7 @@ public class PlayCouponInfoAddVo { /** * 折扣值 */ - @NotNull(message = "优惠类型不能为空") + @NotNull(message = "优惠金额不能为空") private BigDecimal discountAmount; /** @@ -76,8 +75,8 @@ public class PlayCouponInfoAddVo { * 下单类型(0:指定单,1:随机单。2:打赏单) */ @NotNull(message = "订单类型不能为空") - @Pattern(regexp = "[01]", message = "订单类型只能为0或1") - private String placeType; + @Size(min = 1, message = "下单类型不能为空") + private List placeType; /** * 店员范围(0:所有店员) @@ -86,6 +85,12 @@ public class PlayCouponInfoAddVo { @Pattern(regexp = "[0]", message = "店员范围只能为0") private String clerkType; + /** + * 优惠券数量限制(0:不限制,1:限制) + */ + @NotNull(message = "优惠券总数不能为空") + @Pattern(regexp = "[01]", message = "优惠券数量限制只能为0或1") + private String couponQuantityType; /** * 优惠券总数(-1表示不限制数量) */ @@ -102,6 +107,13 @@ public class PlayCouponInfoAddVo { */ private Integer remainingQuantity; + /** + * 店员获得最大数量是否限制 + */ + @NotNull(message = "店员获得最大数量是否限制不能为空") + @Pattern(regexp = "[01]", message = "店员获得最大数量是否限制只能为0或1") + private String clerkObtainedMaxQuantityType; + /** * 店员获得最大数量 */ @@ -115,24 +127,45 @@ public class PlayCouponInfoAddVo { @Pattern(regexp = "[0|1]", message = "店员范围只能为0或者1") private String claimConditionType; + /** - * 顾客等级 + * 顾客等级选择状态(0:未选择,1:选择) + */ + private String customLevelCheckType; + + /** + * 店员等级 */ - @TableField(typeHandler = StringTypeHandler.class) private List customLevel; + + /** + * 用户关注公众号选择状态(0:未选择,1:选择) + */ + private String customFollowStatusCheckType; + + /** * 顾客关注公众号状态(0:未关注,1:已关注) */ private String customFollowStatus; + /** + * 顾客性别关注状态(0:未选择,1:选择) + */ + private String customSexCheckType; /** * 顾客性别(0:未知;1:男,2:女) */ - private String customSex; + private List customSex; + + /** + * 仅限新用户领取选择状态(0:未选择,1:已选择) + */ + private String isNewUserCheckType; /** * 仅限新用户领取(0:不是;1:是)(没有下过单的用户,下单后再退单也不算) */ - private String isNewUser; + private String newUser; } diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoOnLineStateUpdateVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoOnLineStateUpdateVo.java new file mode 100644 index 0000000..69ba376 --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoOnLineStateUpdateVo.java @@ -0,0 +1,32 @@ +package com.starry.admin.modules.shop.module.vo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * 优惠券信息上架信息查询 + * + * @author admin + * @since 2024/7/4 15:26 + **/ +@Data +public class PlayCouponInfoOnLineStateUpdateVo { + + /** + * 优惠券ID + */ + @NotNull(message = "优惠券ID不能为空") + private String id; + + + /** + * 上下架状态不能为空 + */ + @NotNull(message = "上下架状态不能为空不能为空") + @Pattern(regexp = "[0|1]", message = "上下架状态不能必须为0或1") + private String couponOnLineState; + + +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java index ee600b4..8e6b01b 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoReturnVo.java @@ -116,16 +116,30 @@ public class PlayCouponInfoReturnVo { private String claimConditionType; /** - * 顾客等级 + * 顾客等级选择状态(0:未选择,1:选择) + */ + private String customLevelCheckType; + + /** + * 店员等级 */ @TableField(typeHandler = StringTypeHandler.class) private List customLevel; + /** + * 用户关注公众号选择状态(0:未选择,1:选择) + */ + private String customFollowStatusCheckType; + /** * 顾客关注公众号状态(0:未关注,1:已关注) */ private String customFollowStatus; + /** + * 顾客性别选择状态(0:未选择,1:选择) + */ + private String customSexCheckType; /** * 顾客性别(0:未知;1:男,2:女) */ @@ -135,6 +149,12 @@ public class PlayCouponInfoReturnVo { /** * 仅限新用户领取(0:不是;1:是)(没有下过单的用户,下单后再退单也不算) */ - private String isNewUser; + private String newUser; + + /** + * 优惠券上架状态(0;下架;1:上架) + */ + private String couponOnLineState; + } diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoSendVo.java b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoSendVo.java new file mode 100644 index 0000000..dcd24b1 --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/module/vo/PlayCouponInfoSendVo.java @@ -0,0 +1,39 @@ +package com.starry.admin.modules.shop.module.vo; + +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * 优惠券信息上架信息查询 + * + * @author admin + * @since 2024/7/4 15:26 + **/ +@Data +public class PlayCouponInfoSendVo { + + /** + * 优惠券ID + */ + @NotNull(message = "优惠券ID不能为空") + private String id; + + + /** + * 用户ID + */ + @NotNull(message = "用户ID不能为空") + private String customId; + + /** + * 优惠券数量不能为空 + */ + @Max(value = 1,message = "优惠券数量必须小于1") + @Min(value = 1,message = "优惠券数量必须大于1") + private Integer sendNumber; + + +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponDetailsService.java b/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponDetailsService.java index ed594e6..fd3b988 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponDetailsService.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponDetailsService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo; +import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsReturnVo; import java.util.List; @@ -20,7 +21,7 @@ public interface IPlayCouponDetailsService extends IService selectByPage(PlayCouponDetailsQueryVo vo); + IPage selectByPage(PlayCouponDetailsQueryVo vo); /** * 查询优惠券详情列表 @@ -42,13 +43,27 @@ public interface IPlayCouponDetailsService extends IService - * @author 杭州世平信息科技有限公司-xuhq + * @author admin * @since 2024/7/5 11:37 **/ - List selectByCustomId(String customId, boolean canBeUsed); + List selectByCustomId(String customId); + + + /** + * 新建优惠券使用详情 + * + * @param customId 用户ID + * @param customNickName 用户昵称 + * @param customLevel 用户等级 + * @param couponId 优惠券ID + * @param obtainingChannels 获得渠道(1:自主领取;2:后台发放;3:退款返还;4:分享领取;5:抽奖获得) + * @param useState 优惠券使用状态(1:未使用;2:已使用;3:已回收) + * @author admin + * @since 2024/7/8 16:21 + **/ + void create(String customId, String customNickName, String customLevel, String couponId, String obtainingChannels, String useState); /** * 新增优惠券详情 diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponInfoService.java b/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponInfoService.java index af0178d..f594c93 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponInfoService.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/service/IPlayCouponInfoService.java @@ -2,10 +2,14 @@ package com.starry.admin.modules.shop.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity; import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo; +import java.math.BigDecimal; +import java.util.List; + /** * 优惠券信息Service接口 * @@ -13,6 +17,31 @@ import com.starry.admin.modules.shop.module.vo.PlayCouponInfoReturnVo; * @since 2024-07-04 */ public interface IPlayCouponInfoService extends IService { + + + /** + * 获取优惠券不可用的原因 + * + * @param couponInfo 优惠券信息 + * @param placeType 下单类型 + * @param commodityId 商品ID + * @param commodityQuantity 商品数量 + * @param price 商品单价 + * @return 不可用原因 + */ + String getCouponReasonForUnavailableUse(PlayCouponInfoEntity couponInfo, String placeType, String commodityId, Integer commodityQuantity, BigDecimal price); + + /** + * 获取优惠券不可领取的原因 + * + * @param entity 优惠券实体 + * @param customUserInfo 顾客实体 + * @return String + * @author admin + * @since 2024/7/8 14:44 + **/ + String getReasonForNotObtainingCoupons(PlayCouponInfoEntity entity, PlayCustomUserInfoEntity customUserInfo); + /** * 查询优惠券信息 * @@ -30,6 +59,14 @@ public interface IPlayCouponInfoService extends IService { */ IPage selectByPage(PlayCouponInfoQueryVo vo); + + /** + * 查询优惠券信息列表 + * + * @return 优惠券信息集合 + */ + List queryAll(); + /** * 查询优惠券信息列表 * diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponDetailsServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponDetailsServiceImpl.java index 1293df2..d08ea17 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponDetailsServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponDetailsServiceImpl.java @@ -8,12 +8,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.starry.admin.modules.shop.mapper.PlayCouponDetailsMapper; import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity; +import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo; +import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsReturnVo; import com.starry.admin.modules.shop.service.IPlayCouponDetailsService; import com.starry.common.utils.IdUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; @@ -35,14 +38,21 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl lambdaWrapper = new MPJLambdaWrapper<>(); + lambdaWrapper.selectAll(PlayCouponDetailsEntity.class); + lambdaWrapper.leftJoin(PlayCouponInfoEntity.class, PlayCouponInfoEntity::getId, PlayCouponDetailsEntity::getCouponId); + lambdaWrapper.eq(PlayCouponDetailsEntity::getId, id); + return this.baseMapper.selectJoinOne(PlayCouponDetailsReturnVo.class, lambdaWrapper); } @Override - public IPage selectByPage(PlayCouponDetailsQueryVo vo) { + public IPage selectByPage(PlayCouponDetailsQueryVo vo) { MPJLambdaWrapper lambdaWrapper = new MPJLambdaWrapper<>(); + lambdaWrapper.selectAll(PlayCouponDetailsEntity.class); + lambdaWrapper.selectAll(PlayCouponInfoEntity.class); + lambdaWrapper.leftJoin(PlayCouponInfoEntity.class, PlayCouponInfoEntity::getId, PlayCouponDetailsEntity::getCouponId); if (StrUtil.isNotBlank(vo.getCouponId())) { lambdaWrapper.eq(PlayCouponDetailsEntity::getCouponId, vo.getCouponId()); } @@ -61,11 +71,9 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl(vo.getPageNum(), vo.getPageSize()), PlayCouponDetailsEntity.class, lambdaWrapper); + + return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayCouponDetailsReturnVo.class, lambdaWrapper); } /** @@ -80,6 +88,21 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl()); } + + @Override + public void create(String customId, String customNickName, String customLevel, String couponId, String obtainingChannels, String useState) { + PlayCouponDetailsEntity couponDetails = new PlayCouponDetailsEntity(); + couponDetails.setId(IdUtils.getUuid()); + couponDetails.setCustomId(customId); + couponDetails.setCustomNickname(customNickName); + couponDetails.setCustomLevelId(customLevel); + couponDetails.setCouponId(couponId); + couponDetails.setObtainingChannels(obtainingChannels); + couponDetails.setObtainingTime(LocalDateTime.now()); + couponDetails.setUseState(useState); + this.create(couponDetails); + } + /** * 新增优惠券详情 * @@ -95,9 +118,10 @@ public class PlayCouponDetailsServiceImpl extends ServiceImpl selectByCustomId(String customId, boolean canBeUsed) { + public List selectByCustomId(String customId) { MPJLambdaWrapper lambdaWrapper = new MPJLambdaWrapper<>(); lambdaWrapper.eq(PlayCouponDetailsEntity::getCustomId, customId); + return this.baseMapper.selectList(lambdaWrapper); } /** diff --git a/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java index c315479..effed81 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/shop/service/impl/PlayCouponInfoServiceImpl.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.starry.admin.common.exception.CustomException; +import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity; import com.starry.admin.modules.shop.mapper.PlayCouponInfoMapper; import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; import com.starry.admin.modules.shop.module.vo.PlayCouponInfoQueryVo; @@ -15,7 +17,9 @@ import com.starry.common.utils.IdUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.Arrays; +import java.util.List; /** * 优惠券信息Service业务层处理 @@ -28,6 +32,101 @@ public class PlayCouponInfoServiceImpl extends ServiceImpl attributes, String attribute, String type) { + if ("0".equals(checkStatus)) { + return ""; + } + for (String s : attributes) { + if (s.equals(attribute)) { + return ""; + } + } + if ("0".equals(type)) { + return "用户等级不匹配"; + } + if ("1".equals(type)) { + return "用户性别不匹配"; + } + return ""; + } + + + /** * 查询优惠券信息 * @@ -36,7 +135,11 @@ public class PlayCouponInfoServiceImpl extends ServiceImpl selectByPage(PlayCouponInfoQueryVo vo) { MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper<>(); lambdaQueryWrapper.selectAll(PlayCouponInfoEntity.class); + lambdaQueryWrapper.orderByDesc(PlayCouponInfoEntity::getCreatedTime); return this.baseMapper.selectJoinPage(new Page<>(vo.getPageNum(), vo.getPageSize()), PlayCouponInfoReturnVo.class, lambdaQueryWrapper); } + @Override + public List queryAll() { + MPJLambdaWrapper lambdaQueryWrapper = new MPJLambdaWrapper<>(); + lambdaQueryWrapper.selectAll(PlayCouponInfoEntity.class); + lambdaQueryWrapper.orderByDesc(PlayCouponInfoEntity::getCreatedTime); + return this.baseMapper.selectJoinList(PlayCouponInfoEntity.class, lambdaQueryWrapper); + } + /** * 查询优惠券信息列表 * diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCouponController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCouponController.java index 5096ac7..d500fac 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCouponController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCouponController.java @@ -1,14 +1,30 @@ package com.starry.admin.modules.weichat.controller; +import cn.hutool.core.util.StrUtil; import com.starry.admin.common.aspect.CustomUserLogin; +import com.starry.admin.common.conf.ThreadLocalRequestDetail; +import com.starry.admin.common.exception.CustomException; +import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity; +import com.starry.admin.modules.play.module.vo.PlayCommodityInfoVo; +import com.starry.admin.modules.play.service.IPlayCommodityInfoService; +import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity; +import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; import com.starry.admin.modules.shop.service.IPlayCouponDetailsService; +import com.starry.admin.modules.shop.service.IPlayCouponInfoService; +import com.starry.admin.modules.weichat.entity.WxCouponOrderQueryVo; +import com.starry.admin.modules.weichat.entity.WxCouponOrderReturnVo; +import com.starry.admin.modules.weichat.entity.WxCouponReceiveReturnVo; import com.starry.common.result.R; +import com.starry.common.utils.ConvertUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author admin @@ -21,23 +37,90 @@ public class WxCouponController { @Resource - IPlayCouponDetailsService couponDetailsService; + IPlayCouponDetailsService couponDetailsService; + + @Resource + IPlayCouponInfoService couponInfoService; + + @Resource + private IPlayCommodityInfoService playCommodityInfoService; + + + @CustomUserLogin + @GetMapping("/custom/obtainCoupon") + public R queryAll(@RequestParam("id") String id) { + PlayCustomUserInfoEntity customUserInfo = ThreadLocalRequestDetail.getCustomUserInfo(); + if (StrUtil.isEmpty(id)) { + throw new CustomException("请求参数异常,优惠券ID不能为"); + } + PlayCouponInfoEntity entity = couponInfoService.selectPlayCouponInfoById(id); + String msg = couponInfoService.getReasonForNotObtainingCoupons(entity, customUserInfo); + boolean success = StrUtil.isBlank(msg); + // 优惠券领取验证通过,发放优惠券 + if (success) { + couponDetailsService.create(customUserInfo.getId(), customUserInfo.getNickname(), customUserInfo.getLevelId(), entity.getId(), "1", "1"); + } + Map result = new HashMap<>(); + result.put("success", success); + result.put("msg", msg); + return R.ok(result); + } + + + /** + * 查询所有优惠券,以及本人是否可领取 + * + * @return com.starry.common.result.R + * @author admin + * @since 2024/7/8 13:53 + **/ + @CustomUserLogin + @PostMapping("/custom/queryAll") + public R queryAll() { + List obtainedCoupons = couponDetailsService.selectByCustomId(ThreadLocalRequestDetail.getCustomUserInfo().getId()); + List couponInfoEntities = couponInfoService.queryAll(); + List returnVos = new ArrayList<>(couponInfoEntities.size()); + for (PlayCouponInfoEntity couponInfoEntity : couponInfoEntities) { + if ("0".equals(couponInfoEntity.getCouponOnLineState())) { + continue; + } + WxCouponReceiveReturnVo vo = ConvertUtil.entityToVo(couponInfoEntity, WxCouponReceiveReturnVo.class); + for (PlayCouponDetailsEntity obtainedCoupon : obtainedCoupons) { + if (obtainedCoupon.getCouponId().equals(couponInfoEntity.getId())) { + vo.setObtained("1"); + } + } + returnVos.add(vo); + } + return R.ok(returnVos); + } + /** * 顾客查询本人优惠券列表 */ @CustomUserLogin - @GetMapping("/custom/queryAll") - public R queryAll() { -// couponDetailsService.selectByPage() -// List list = levelInfoService.selectAll(); -// List result = new ArrayList<>(); -// for (PlayCustomLevelInfoEntity entity : list) { -// PlayCustomLevelInfoReturnVo vo = new PlayCustomLevelInfoReturnVo(); -// BeanUtils.copyProperties(entity, vo); -// result.add(vo); -// } - return R.ok(""); + @PostMapping("/custom/queryByOrder") + public R queryByOrder(@Validated @RequestBody WxCouponOrderQueryVo vo) { + List list = couponDetailsService.selectByCustomId(ThreadLocalRequestDetail.getCustomUserInfo().getId()); + PlayCommodityInfoVo commodityInfo = playCommodityInfoService.queryCommodityInfo(vo.getCommodityId()); + // 优惠券列表 + List couponReturnVos = new ArrayList<>(); + for (PlayCouponDetailsEntity couponDetails : list) { + PlayCouponInfoEntity couponInfo = couponInfoService.selectPlayCouponInfoById(couponDetails.getCouponId()); + WxCouponOrderReturnVo wxCouponReturnVo = ConvertUtil.entityToVo(couponDetails, WxCouponOrderReturnVo.class); + String couponReasonForUnavailableUse = couponInfoService.getCouponReasonForUnavailableUse(couponInfo, vo.getPlaceType(), vo.getCommodityId(), vo.getCommodityQuantity(), commodityInfo.getCommodityPrice()); + if (StrUtil.isEmpty(couponReasonForUnavailableUse)) { + wxCouponReturnVo.setAvailable("1"); + } else { + wxCouponReturnVo.setAvailable("0"); + wxCouponReturnVo.setReasonForUnavailableUse(couponReasonForUnavailableUse); + } + couponReturnVos.add(wxCouponReturnVo); + } + return R.ok(couponReturnVos); } + + } diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java index a1a8e0d..7ea11fd 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxCustomController.java @@ -1,6 +1,7 @@ package com.starry.admin.modules.weichat.controller; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.starry.admin.common.aspect.CustomUserLogin; @@ -30,6 +31,8 @@ import com.starry.admin.modules.order.service.IPlayOrderInfoService; import com.starry.admin.modules.order.service.IPlayOrderRandomInfoService; import com.starry.admin.modules.play.module.vo.PlayCommodityInfoVo; import com.starry.admin.modules.play.service.IPlayCommodityInfoService; +import com.starry.admin.modules.shop.module.entity.PlayCouponInfoEntity; +import com.starry.admin.modules.shop.service.IPlayCouponInfoService; import com.starry.admin.modules.weichat.entity.*; import com.starry.admin.modules.weichat.entity.clerk.PlayClerkUserInfoResultVo; import com.starry.admin.modules.weichat.entity.costom.PlayCustomHideLevelStateEditVo; @@ -53,6 +56,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; /** @@ -105,6 +109,9 @@ public class WxCustomController { @Resource private IPlayClerkGiftInfoService playClerkGiftInfoService; + @Resource + private IPlayCouponInfoService playCouponInfoService; + /** * 根据店员ID查询店员详细信息 @@ -194,7 +201,7 @@ public class WxCustomController { } String orderId = IdUtils.getUuid(); // 记录订单信息 - playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "0", "1", "", "0", BigDecimal.ZERO, "", "", "0", new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), vo.getRemark()); + playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "0", "1", "", "0", BigDecimal.ZERO, "", "", "0", new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), new ArrayList<>(),vo.getRemark()); // // playOrderInfoService.createRewardOrder(orderId, new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), userId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode()); // 顾客减少余额 @@ -221,7 +228,7 @@ public class WxCustomController { } String orderId = IdUtils.getUuid(); // 记录订单信息 - playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "1", "1", giftInfo.getId(), "0", giftInfo.getPrice(), "", giftInfo.getName(), String.valueOf(vo.getGiftQuantity()), money, money, BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), vo.getRemark()); + playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "3", "2", "2", "1", "1", giftInfo.getId(), "0", giftInfo.getPrice(), "", giftInfo.getName(), String.valueOf(vo.getGiftQuantity()), money, money, BigDecimal.ZERO, userId, vo.getClerkId(), vo.getWeiChatCode(), new ArrayList<>(), vo.getRemark()); // playOrderInfoService.createGiftOrder(orderId, vo.getGiftId(), giftInfo.getPrice(), String.valueOf(vo.getGiftQuantity()), money, money, userId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode()); // 顾客减少余额 @@ -271,6 +278,16 @@ public class WxCustomController { public R commodityToOrdder(@Validated @RequestBody PlayOrderInfoCommodityAdd vo) { String customId = ThreadLocalRequestDetail.getCustomUserInfo().getId(); PlayCommodityInfoVo commodityInfo = playCommodityInfoService.queryCommodityInfo(vo.getCommodityId()); + + for (String couponId : vo.getCouponIds()) { + PlayCouponInfoEntity couponInfo = playCouponInfoService.selectPlayCouponInfoById(couponId); + String couponReasonForUnavailableUse = playCouponInfoService.getCouponReasonForUnavailableUse(couponInfo, "0", vo.getCommodityId(), vo.getCommodityQuantity(), commodityInfo.getCommodityPrice()); + if (StrUtil.isNotBlank(couponReasonForUnavailableUse)) { + throw new CustomException("优惠券不可用"); + } + } + + PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(customId); PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClerkId()); BigDecimal money = commodityInfo.getCommodityPrice().multiply(new BigDecimal(vo.getCommodityQuantity())); @@ -281,12 +298,9 @@ public class WxCustomController { String orderId = IdUtils.getUuid(); // 记录订单信息 - playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "0", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, clerkUserInfo.getId(), vo.getWeiChatCode(), vo.getRemark()); - // playOrderInfoService.createOrdinaryOrder(orderId, commodityInfo.getCommodityId(), commodityInfo.getCommodityPrice(), String.valueOf(vo.getCommodityQuantity()), commodityInfo.getCommodityName(), commodityInfo.getServiceDuration(), money, money, customId, clerkUserInfo.getId(), vo.getRemark(), vo.getWeiChatCode()); + playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "0", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, clerkUserInfo.getId(), vo.getWeiChatCode(), vo.getCouponIds(), vo.getRemark()); // 顾客减少余额 customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(money), "1", "下单-指定单", money, BigDecimal.ZERO, orderId); - // 陪聊增加余额 - // clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(money), "2", "下单-指定单", money, orderId); return R.ok("成功"); } @@ -311,7 +325,6 @@ public class WxCustomController { String orderId = IdUtils.getUuid(); PlayOrderRandomInfoEntity orderRandomInfo = ConvertUtil.entityToVo(vo, PlayOrderRandomInfoEntity.class); - ; orderRandomInfo.setCommodityId(commodityInfo.getCommodityId()); orderRandomInfo.setCommodityName(commodityInfo.getCommodityName()); orderRandomInfo.setCommodityPrice(commodityInfo.getCommodityPrice()); @@ -320,7 +333,7 @@ public class WxCustomController { orderRandomInfo.setId(orderId); playOrderRandomInfoService.create(orderRandomInfo); // 记录订单信息 - playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "1", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, "", vo.getWeiChatCode(), vo.getRemark()); + playOrderInfoService.createOrderInfo(orderId, playOrderInfoService.getOrderNo(), "0", "2", "1", "", "1", commodityInfo.getCommodityId(), "1", commodityInfo.getCommodityPrice(), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), String.valueOf(vo.getCommodityQuantity()), money, money, BigDecimal.ZERO, customId, "", vo.getWeiChatCode(), vo.getCouponIds(), vo.getRemark()); // playOrderInfoService.createRandomOrder(orderId, customUserInfo.getId(), commodityInfo.getCommodityPrice(), String.valueOf(vo.getCommodityQuantity()), commodityInfo.getServiceDuration(), commodityInfo.getCommodityName(), money, money, customId, vo.getRemark(), vo.getWeiChatCode()); // 顾客减少余额 diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPersonnelGroupInfoController.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPersonnelGroupInfoController.java new file mode 100644 index 0000000..342bff1 --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/controller/WxPersonnelGroupInfoController.java @@ -0,0 +1,50 @@ +package com.starry.admin.modules.weichat.controller; + +import com.starry.admin.common.aspect.ClerkUserLogin; +import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEntity; +import com.starry.admin.modules.personnel.service.IPlayPersonnelGroupInfoService; +import com.starry.admin.modules.weichat.entity.PlayGroupWagesQueryVo; +import com.starry.admin.modules.weichat.entity.PlayGroupWagesReturnVo; +import com.starry.common.result.R; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 微信查询组长工资 + * + * @author admin + * @since 2024/7/6 下午3:46 + **/ +@Slf4j +@RestController +@RequestMapping("/wx/group") +public class WxPersonnelGroupInfoController { + + + @Resource + private IPlayPersonnelGroupInfoService playClerkGroupInfoService; + + + /** + * 查询组长公工资 + */ + @ClerkUserLogin + @PostMapping("/wages/listAll") + public R listGroupWagesAll(@Validated @RequestBody PlayGroupWagesQueryVo vo) { + List list = playClerkGroupInfoService.selectAll(); + List data = new ArrayList<>(); + for (PlayPersonnelGroupInfoEntity entity : list) { + PlayGroupWagesReturnVo bean = new PlayGroupWagesReturnVo(); + bean.setGroupName(entity.getGroupName()); + data.add(bean); + } + return R.ok(data); + } + + +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesQueryVo.java new file mode 100644 index 0000000..0ae7d26 --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesQueryVo.java @@ -0,0 +1,20 @@ +package com.starry.admin.modules.weichat.entity; + +import lombok.Data; + +import java.util.List; + +/** + * 组长工资查询对象 + * + * @author admin + * @since 2024/7/6 下午3:56 + **/ +@Data +public class PlayGroupWagesQueryVo { + + /** + * 统计时间 + */ + private List statisticalTime; +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesReturnVo.java new file mode 100644 index 0000000..10d62c8 --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/PlayGroupWagesReturnVo.java @@ -0,0 +1,64 @@ +package com.starry.admin.modules.weichat.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 组长工资查询对象 + * + * @author admin + * @since 2024/7/6 下午3:56 + **/ +@Data +public class PlayGroupWagesReturnVo { + + /** + * 组名称 + */ + private String groupName; + + /** + * 订单金额 + */ + private BigDecimal orderMoney = BigDecimal.ZERO; + + + /** + * 订单最终金额(支付金额) + */ + private BigDecimal finalAmount = BigDecimal.ZERO; + + /** + * 续单比例 + */ + private final double orderContinueProportion = 0.0; + /** + * 续单金额 + */ + private final BigDecimal orderTotalAmount = BigDecimal.ZERO; + + /** + * 续费率 + */ + private final BigDecimal orderContinueRechargeProportion = BigDecimal.ZERO; + /** + * 退单率 + */ + private final BigDecimal orderChargebackProportion = BigDecimal.ZERO; + /** + * 续客率 + */ + private final BigDecimal continuousCustomProportion = BigDecimal.ZERO; + + /** + * 订单平均价格 + */ + private final BigDecimal averageUnitPrice = BigDecimal.ZERO; + + + /** + * 组长工资 + */ + private final BigDecimal commission = BigDecimal.ZERO; +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderQueryVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderQueryVo.java new file mode 100644 index 0000000..c96a2be --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderQueryVo.java @@ -0,0 +1,24 @@ +package com.starry.admin.modules.weichat.entity; + +import lombok.Data; + +/** + * 顾客优惠券下单查询对象 + * + * @author admin + * @since 2024/7/6 下午4:16 + **/ +@Data +public class WxCouponOrderQueryVo { + + + private String commodityId; + + /** + * 下单类型(-1:其他类型;0:指定单;1:随机单;2:打赏单) + */ + private String placeType; + + + private int commodityQuantity; +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderReturnVo.java new file mode 100644 index 0000000..f0ffacc --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponOrderReturnVo.java @@ -0,0 +1,83 @@ +package com.starry.admin.modules.weichat.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 顾客优惠券下单查询返回对象 + * + * @author admin + * @since 2024/7/6 下午4:16 + **/ +@Data +public class WxCouponOrderReturnVo { + + /** + * 优惠券ID + */ + private String id; + + + /** + * 优惠券名称 + **/ + private String couponName ="测试券"; + + + /** + * 有效期类型(0:永久有效;1:固定时间内有效;2:领取后几天内有效) + */ + private String validityPeriodType; + + /** + * 生效时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime productiveTime; + + /** + * 到期时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime expirationTime; + + /** + * 生效时长,validityPeriodType=2时有效 + **/ + private Integer effectiveDay; + + /** + * 使用优惠券最低消费金额 + **/ + private BigDecimal useMinAmount; + + /** + * 优惠类型(0:满减;1:折扣) + */ + private String discountType; + + /** + * 折扣值 + */ + private BigDecimal discountAmount; + + private String discountContent; + + /** + * 优惠是否可使用(0:不可使用,1:可使用) + */ + private String available; + + /** + * 优惠券不可用的原因 + */ + private String reasonForUnavailableUse; + + +} diff --git a/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponReceiveReturnVo.java b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponReceiveReturnVo.java new file mode 100644 index 0000000..41a3a07 --- /dev/null +++ b/play-admin/src/main/java/com/starry/admin/modules/weichat/entity/WxCouponReceiveReturnVo.java @@ -0,0 +1,81 @@ +package com.starry.admin.modules.weichat.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 顾客优惠券领取查询返回对象 + * + * @author admin + * @since 2024/7/6 下午4:16 + **/ +@Data +public class WxCouponReceiveReturnVo { + + /** + * 优惠券ID + */ + private String id; + + + /** + * 优惠券名称 + **/ + private String couponName; + + + /** + * 有效期类型(0:永久有效;1:固定时间内有效;2:领取后几天内有效) + */ + private String validityPeriodType; + + /** + * 生效时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime productiveTime; + + /** + * 到期时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime expirationTime; + + /** + * 生效时长,validityPeriodType=2时有效 + **/ + private Integer effectiveDay; + + /** + * 使用优惠券最低消费金额 + **/ + private BigDecimal useMinAmount; + + /** + * 优惠类型(0:满减;1:折扣) + */ + private String discountType; + + /** + * 折扣值 + */ + private BigDecimal discountAmount; + + /** + * 优惠内容(文字展示) + **/ + private String discountContent; + + /** + * 优惠是否已领取(0:未领取,1:已领取) + */ + private String obtained = "0"; + + +}