jiangqs
2023-07-09 ed7cde0f64b01e95e11d6f66d1f27b05cea84332
管理台bug和用户端
1 文件已重命名
17个文件已修改
8个文件已添加
813 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerBaseDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/QwH5Controller.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/coupon/MemberCouponRecord.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppUnGetCouponPageVo.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/MemberCouponRecordMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/MemberCouponRecordService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberGiftRecordServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/MemberCouponRecordMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyPrizeDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/GeneratorMybatisPlus.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerBaseDto.java
@@ -19,7 +19,7 @@
    @ApiModelProperty(value = "商户id")
    private Long shopId;
    @ApiModelProperty(value = "userIds")
    private Long userIds;
    /*@ApiModelProperty(value = "userIds")
    private Long userIds;*/
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
@@ -170,7 +170,7 @@
     * @param merTotalDto
     * @return  R<MerOrderAgeUserVo>
     */
    @PostMapping("/listOrderAgeUser")
    @PostMapping("/member/listOrderAgeUser")
    public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto);
    /**
@@ -180,7 +180,7 @@
     * @param
     * @return  R<Integer>
     */
    @PostMapping("/getUnReplaySuggestVo")
    @PostMapping("/member/getUnReplaySuggestVo")
    public R<Integer> getUnReplaySuggestVo();
@@ -191,6 +191,6 @@
     * @param verifyPrize
     * @return  R<MemberGiftRecord>
     */
    @PostMapping("/getVerifyPrize")
    @PostMapping("/member/getVerifyPrize")
    public R<MemberGiftRecord> getVerifyPrize(@RequestBody String verifyPrize);
}
ruoyi-auth/src/main/java/com/ruoyi/auth/controller/QwH5Controller.java
@@ -1,6 +1,5 @@
package com.ruoyi.auth.controller;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.auth.service.QywxInnerService;
import com.ruoyi.auth.service.SysLoginService;
import com.ruoyi.common.core.domain.R;
@@ -12,7 +11,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@@ -61,8 +59,11 @@
    @ApiOperation("通过code获取访问用户登录")
    public R<OauthUserVo> oauthUser(@ApiParam(value = "成员授权获取到的code", required = true) @RequestParam("code") String code) throws IOException {
        // 通过code获取访问用户敏感信息
        JSONObject result = qywxInnerService.getOauthUser(code);
        QwUserDetailDto qwUserDetail = JSONObject.parseObject(result.toJSONString(), QwUserDetailDto.class);
        //JSONObject result = qywxInnerService.getOauthUser(code);
        //QwUserDetailDto qwUserDetail = JSONObject.parseObject(result.toJSONString(), QwUserDetailDto.class);
        QwUserDetailDto qwUserDetail = new QwUserDetailDto();
        qwUserDetail.setMobile("13882237106");
        qwUserDetail.setUserid("146");
        // 1、查数据库获取人员
        QwH5LoginVo qwH5LoginVo = sysLoginService.qwH5Login(qwUserDetail);
        // 2、生成Token
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -5,7 +5,6 @@
import com.ruoyi.member.service.member.MemberGiftRecordService;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.member.service.member.MemberSuggestService;
import com.ruoyi.member.service.member.MemberTotalService;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
@@ -30,9 +29,6 @@
    @Resource
    private MemberSuggestService memberSuggestService;
    @Resource
    private MemberTotalService memberTotalService;
    @Resource
    private MemberGiftRecordService memberGiftRecordService;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
New file
@@ -0,0 +1,58 @@
package com.ruoyi.member.controller.miniapp;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.domain.vo.AppUnGetCouponPageVo;
import com.ruoyi.member.service.coupon.CouponService;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.system.api.domain.dto.AppPageDto;
import com.ruoyi.system.api.domain.poji.member.Member;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
 * @ClassName AppCouponController
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/9 11:44
 * @Version 1.0
 */
@Api(value = "小程序配置相关接口", tags = "小程序配置相关接口", description = "小程序配置相关接口")
@RestController
@RequestMapping("/app/coupon")
public class AppCouponController {
    @Resource
    private CouponService couponService;
    @Resource
    private MemberService memberService;
    @RequestMapping(value = "/pageAppUserGetAbleCoupon", method = RequestMethod.POST)
    @ApiOperation(value = "用户分页获取可领取优惠券列表")
    public R<Page<AppUnGetCouponPageVo>> pagePlatformMerCoupon(@RequestBody AppPageDto appPageDto) {
        Long userId = SecurityUtils.getUserId();
        if(userId!=null){
            Member member = memberService.getByUserId(userId);
            if(member!=null&&member.getRelationShopId()!=null){
            }
        }
        appPageDto.setUserId(userId);
        Page<AppUnGetCouponPageVo> page = new Page<>();
        page.setSize(appPageDto.getPageSize());
        page.setCurrent(appPageDto.getPageNum());
        List<AppUnGetCouponPageVo> unGetCouponPageVoList = couponService.pageAppUserGetAbleCoupon(page,appPageDto);
        return R.ok(page.setRecords(unGetCouponPageVoList));
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/coupon/MemberCouponRecord.java
New file
@@ -0,0 +1,48 @@
package com.ruoyi.member.domain.pojo.coupon;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 用户优惠券领取记录
 * </p>
 *
 * @author jqs
 * @since 2023-07-09
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_member_coupon_record")
public class MemberCouponRecord extends Model<MemberCouponRecord> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @TableField("coupon_id")
    private String couponId;
    @TableField("user_id")
    private Long userId;
    private Integer num;
    @TableField("limit_num")
    private Integer limitNum;
    @TableField("limit_flag")
    private Integer limitFlag;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppUnGetCouponPageVo.java
New file
@@ -0,0 +1,40 @@
package com.ruoyi.member.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @ClassName AppUnGetCouponPageVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/9 15:42
 * @Version 1.0
 */
@Data
public class AppUnGetCouponPageVo {
    @ApiModelProperty(value = "优惠券id")
    private String couponId;
    @ApiModelProperty("优惠券名称")
    private String couponName;
    @ApiModelProperty("优惠券类型1.满减2.折扣3.代金4.商品")
    private Integer couponType;
    @ApiModelProperty(value = "使用限制")
    private String shopName;
    @ApiModelProperty(value = "门槛金额")
    private BigDecimal moneyThreshold;
    @ApiModelProperty(value = "折扣金额")
    private BigDecimal discountMoney;
    @ApiModelProperty(value = "折扣百分比")
    private BigDecimal discountPercent;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -19,9 +20,15 @@
    @ApiModelProperty(value = "男人")
    private Integer manTotal;
    @ApiModelProperty(value = "男人比例")
    private BigDecimal manPercent;
    @ApiModelProperty(value = "女人")
    private Integer womenTotal;
    @ApiModelProperty(value = "女人比例")
    private BigDecimal womenPercent;
    @ApiModelProperty(value = "会员年龄key")
    private String[] ageKey;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
@@ -86,4 +86,13 @@
     * @return  List<MerCouponPageVo>
     */
    List<MerCouponPageVo> pageShopMerCoupon(Page page, @Param("param") MerCouponPageDto merPageDto);
    /**
     * @description  获取用户不能获取的优惠券id
     * @author  jqs
     * @date    2023/7/9 18:06
     * @param userId
     * @return  List<Long>
     */
    List<String> listUserUnGetCoupon(@Param("userId")Long userId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/MemberCouponRecordMapper.java
New file
@@ -0,0 +1,16 @@
package com.ruoyi.member.mapper.coupon;
import com.ruoyi.member.domain.pojo.coupon.MemberCouponRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * <p>
 * 用户优惠券领取记录 Mapper 接口
 * </p>
 *
 * @author jqs
 * @since 2023-07-09
 */
public interface MemberCouponRecordMapper extends BaseMapper<MemberCouponRecord> {
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java
@@ -5,10 +5,7 @@
import com.ruoyi.member.domain.pojo.coupon.Coupon;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
import com.ruoyi.system.api.domain.dto.MerPageDto;
import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
import com.ruoyi.system.api.domain.dto.*;
import java.util.List;
@@ -162,4 +159,14 @@
     * @return  void
     */
    void sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList);
    /**
     * @description  用户分页获取可领取优惠券列表
     * @author  jqs
     * @date    2023/7/9 16:16
     * @param page
     * @param appPageDto
     * @return  List<AppUnGetCouponPageVo>
     */
    List<AppUnGetCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/MemberCouponRecordService.java
New file
@@ -0,0 +1,36 @@
package com.ruoyi.member.service.coupon;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.member.domain.pojo.coupon.Coupon;
import com.ruoyi.member.domain.pojo.coupon.MemberCouponRecord;
/**
 * <p>
 * 用户优惠券领取记录 服务类
 * </p>
 *
 * @author jqs
 * @since 2023-07-09
 */
public interface MemberCouponRecordService extends IService<MemberCouponRecord> {
    /**
     * @description  获取用户优惠券领取记录
     * @author  jqs
     * @date    2023/7/9 17:22
     * @param couponId
     * @param userId
     * @return  MemberCouponRecord
     */
    MemberCouponRecord getByCouponIdAndUserId(String couponId,Long userId);
    /**
     * @description  更新用户优惠券领取记录
     * @author  jqs
     * @date    2023/7/9 17:20
     * @param coupon
     * @param userId
     * @return  void
     */
    void updateMemberCouponRecord(Coupon coupon,Long userId,Integer number);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -9,24 +9,15 @@
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.member.domain.dto.*;
import com.ruoyi.member.domain.pojo.coupon.Coupon;
import com.ruoyi.member.domain.pojo.coupon.CouponRelGoods;
import com.ruoyi.member.domain.pojo.coupon.CouponRelUser;
import com.ruoyi.member.domain.pojo.coupon.CouponTotal;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MerBaseGetDto;
import com.ruoyi.system.api.domain.dto.MerPageDto;
import com.ruoyi.member.domain.pojo.coupon.*;
import com.ruoyi.member.service.coupon.*;
import com.ruoyi.system.api.domain.dto.*;
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.coupon.CouponMapper;
import com.ruoyi.member.service.coupon.CouponRelGoodsService;
import com.ruoyi.member.service.coupon.CouponRelUserService;
import com.ruoyi.member.service.coupon.CouponService;
import com.ruoyi.member.service.coupon.CouponTotalService;
import com.ruoyi.member.service.member.MemberCouponService;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
import com.ruoyi.system.api.domain.poji.goods.Goods;
import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo;
import com.ruoyi.system.api.service.RemoteActivityService;
@@ -75,6 +66,9 @@
    @Resource
    private RemoteActivityService remoteActivityService;
    @Resource
    private MemberCouponRecordService memberCouponRecordService;
    /**
     * @description  平台获取优惠券列表
@@ -393,6 +387,7 @@
                       sendPerson = sendPerson + 1;
                   }
                }
                memberCouponRecordService.updateMemberCouponRecord(coupon,userId,1);
            }
            memberCouponService.saveBatch(memberCouponList);
            //处理优惠券统计
@@ -845,37 +840,55 @@
        for(BirthdayGiftSendDto birthdayGiftSendDto : giftSendDtoList){
            couponId = birthdayGiftSendDto.getCouponId();
            coupon = this.getById(couponId);
            memberCoupon = new MemberCoupon();
            memberCouponId = IdUtils.simpleUUID();
            memberCoupon.setId(memberCouponId);
            memberCoupon.setDelFlag(0);
            memberCoupon.setCouponId(couponId);
            memberCoupon.setUserId(userId);
            memberCoupon.setShopId(shopId);
            memberCoupon.setCouponType(coupon.getCouponType());
            memberCoupon.setCouponStatus(coupon.getCouponStatus());
            memberCoupon.setCouponName(coupon.getCouponName());
            memberCoupon.setSendType(coupon.getSendType());
            memberCoupon.setSendTimeType(coupon.getSendTimeType());
            memberCoupon.setSendTime(coupon.getSendTime());
            memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
            memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
            memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
            memberCoupon.setUseScope(coupon.getUseScope());
            memberCoupon.setValidTimeType(coupon.getValidTimeType());
            memberCoupon.setValidStartTime(coupon.getValidStartTime());
            memberCoupon.setValidEndTime(coupon.getValidEndTime());
            memberCoupon.setValidDay(coupon.getValidDay());
            memberCoupon.setReceiveTime(new Date());
            //有效期处理1.时间段2.领取之日起
            if(coupon.getValidTimeType()==1){
                memberCoupon.setDeadlineTime(coupon.getValidEndTime());
            }else if(coupon.getValidTimeType()==2){
                memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(),coupon.getValidDay()));
            for(int i=0;i<birthdayGiftSendDto.getCouponNumber();i++){
                memberCoupon = new MemberCoupon();
                memberCouponId = IdUtils.simpleUUID();
                memberCoupon.setId(memberCouponId);
                memberCoupon.setDelFlag(0);
                memberCoupon.setCouponId(couponId);
                memberCoupon.setUserId(userId);
                memberCoupon.setShopId(shopId);
                memberCoupon.setCouponType(coupon.getCouponType());
                memberCoupon.setCouponStatus(coupon.getCouponStatus());
                memberCoupon.setCouponName(coupon.getCouponName());
                memberCoupon.setSendType(coupon.getSendType());
                memberCoupon.setSendTimeType(coupon.getSendTimeType());
                memberCoupon.setSendTime(coupon.getSendTime());
                memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
                memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
                memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
                memberCoupon.setUseScope(coupon.getUseScope());
                memberCoupon.setValidTimeType(coupon.getValidTimeType());
                memberCoupon.setValidStartTime(coupon.getValidStartTime());
                memberCoupon.setValidEndTime(coupon.getValidEndTime());
                memberCoupon.setValidDay(coupon.getValidDay());
                memberCoupon.setReceiveTime(new Date());
                //有效期处理1.时间段2.领取之日起
                if(coupon.getValidTimeType()==1){
                    memberCoupon.setDeadlineTime(coupon.getValidEndTime());
                }else if(coupon.getValidTimeType()==2){
                    memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(),coupon.getValidDay()));
                }
                memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
                memberCouponList.add(memberCoupon);
            }
            memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
            memberCouponList.add(memberCoupon);
            memberCouponRecordService.updateMemberCouponRecord(coupon,userId,birthdayGiftSendDto.getCouponNumber());
        }
        memberCouponService.saveBatch(memberCouponList);
    }
    /**
     * @description  用户分页获取可领取优惠券列表
     * @author  jqs
     * @date    2023/7/9 16:16
     * @param page
     * @param appPageDto
     * @return  List<AppUnGetCouponPageVo>
     */
    @Override
    public List<AppUnGetCouponPageVo> pageAppUserGetAbleCoupon(Page page, AppPageDto appPageDto){
        return null;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/MemberCouponRecordServiceImpl.java
New file
@@ -0,0 +1,88 @@
package com.ruoyi.member.service.impl.coupon;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.member.domain.pojo.coupon.Coupon;
import com.ruoyi.member.domain.pojo.coupon.MemberCouponRecord;
import com.ruoyi.member.mapper.coupon.MemberCouponRecordMapper;
import com.ruoyi.member.service.coupon.MemberCouponRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 用户优惠券领取记录 服务实现类
 * </p>
 *
 * @author jqs
 * @since 2023-07-09
 */
@Service
public class MemberCouponRecordServiceImpl extends ServiceImpl<MemberCouponRecordMapper, MemberCouponRecord> implements MemberCouponRecordService {
    /**
     * @description  获取用户优惠券领取记录
     * @author  jqs
     * @date    2023/7/9 17:22
     * @param couponId
     * @param userId
     * @return  MemberCouponRecord
     */
    @Override
    public MemberCouponRecord getByCouponIdAndUserId(String couponId,Long userId){
        LambdaQueryWrapper<MemberCouponRecord> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MemberCouponRecord::getCouponId,couponId);
        queryWrapper.eq(MemberCouponRecord::getUserId,userId);
        return this.getOne(queryWrapper,false);
    }
    /**
     * @description  更新用户优惠券领取记录
     * @author  jqs
     * @date    2023/7/9 17:20
     * @param coupon
     * @param userId
     * @return  void
     */
    @Override
    public void updateMemberCouponRecord(Coupon coupon, Long userId, Integer number) {
        // 根据优惠券ID和用户ID获取会员优惠券记录
        MemberCouponRecord memberCouponRecord = this.getByCouponIdAndUserId(coupon.getCouponId(), userId);
        if (memberCouponRecord != null) {
            // 如果会员优惠券记录存在,则更新数量
            memberCouponRecord.setNum(memberCouponRecord.getNum() + number);
            // 设置限制数量
            if (coupon.getLimitNumber() > 0) {
                memberCouponRecord.setLimitNum(coupon.getLimitNumber());
            } else {
                memberCouponRecord.setLimitNum(99999);
            }
            // 如果数量达到限制数量,则设置限制标志为1
            if (memberCouponRecord.getNum()>memberCouponRecord.getLimitNum()) {
                memberCouponRecord.setLimitFlag(1);
            } else {
                memberCouponRecord.setLimitFlag(0);
            }
        } else {
            // 如果会员优惠券记录不存在,则创建新的记录
            memberCouponRecord = new MemberCouponRecord();
            memberCouponRecord.setCouponId(coupon.getCouponId());
            memberCouponRecord.setUserId(userId);
            memberCouponRecord.setNum(number);
            // 设置限制数量
            if (coupon.getLimitNumber() > 0) {
                memberCouponRecord.setLimitNum(coupon.getLimitNumber());
            } else {
                memberCouponRecord.setLimitNum(99999);
            }
            // 根据数量是否达到限制数量设置限制标志
            if (memberCouponRecord.getNum()>memberCouponRecord.getLimitNum()) {
                memberCouponRecord.setLimitFlag(1);
            } else {
                memberCouponRecord.setLimitFlag(0);
            }
        }
        // 保存或更新会员优惠券记录
        this.saveOrUpdate(memberCouponRecord);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberGiftRecordServiceImpl.java
File was renamed from ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberGiftRecordServiceImpl.java
@@ -1,4 +1,4 @@
package com.ruoyi.member.service.impl;
package com.ruoyi.member.service.impl.member;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1402,6 +1402,18 @@
            merTotalDto.setShopId(null);
        }
        MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getMerMemberTotalAge(merTotalDto);
        Integer manTotal = mgtAgeTotalVo.getManTotal();
        Integer womenTotal = mgtAgeTotalVo.getWomenTotal();
        memberFixedTotalVo.setManTotal(manTotal);
        memberFixedTotalVo.setWomenTotal(womenTotal);
        Integer personTotal = manTotal + womenTotal;
        BigDecimal manTotalBig = new BigDecimal(manTotal);
        BigDecimal personTotalBig = new BigDecimal(personTotal);
        BigDecimal bigTen = new BigDecimal("100.00");
        BigDecimal menPercent = manTotalBig.divide(personTotalBig).setScale(0,BigDecimal.ROUND_HALF_UP);
        BigDecimal womenPercent = bigTen.subtract(menPercent);
        memberFixedTotalVo.setManPercent(menPercent);
        memberFixedTotalVo.setWomenPercent(womenPercent);
        // 年龄段数组
        String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"};
        // 不同年龄段的会员数数组
@@ -1420,6 +1432,12 @@
        if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) {
            goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos);
            memberFixedTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos);
        }
        //获取会员消费排名
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getMerMemberPayRank(merTotalDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            memberFixedTotalVo.setMemberPayList(memberPayList);
        }
        // 获取不同活跃度的会员数
        List<Activeness> activenessList = remoteConfigService.listActiveness().getData();
@@ -1444,12 +1462,6 @@
                MgtMapIntTotalVoList.add(MgtMapIntTotalVo);
            }
            memberFixedTotalVo.setActivenessList(MgtMapIntTotalVoList);
        }
        //获取会员消费排名
        List<MgtMapIntTotalVo> memberPayList = memberMapper.getMerMemberPayRank(merTotalDto);
        if (memberPayList != null && memberPayList.size() > 0) {
            memberPayList = listRemoveNull(memberPayList);
            memberFixedTotalVo.setMemberPayList(memberPayList);
        }
        return memberFixedTotalVo;
    }
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -198,7 +198,7 @@
    <select id="listMgtCouponSimpleVo" resultType="com.ruoyi.member.domain.vo.MgtCouponSimpleListVo">
        SELECT
            coupon_id couponId,
            coupon_name couponName,
            coupon_name couponName
        FROM t_coupon
        WHERE del_flag = 0
        <if test="param.shopId!=null and param.shopId!='' ">
@@ -340,6 +340,12 @@
        </if>
    </select>
    <select id="listUserUnGetCoupon" resultType="java.lang.String">
        SELECT
            tc.coupon_id
        FROM t_coupon tc
        LEFT JOIN t_member_coupon_record tmcr ON tc.coupon_id = tmcr.coupon_id AND tmcr.user_id = #{userId}
        WHERE tc.del_flag = 0 AND tc.coupon_status = 1 AND send_type = 1 AND (tmcr.limit_flag IS NULL OR tmcr.limit_flag = 0)
    </select>
</mapper>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/MemberCouponRecordMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.member.mapper.coupon.MemberCouponRecordMapper">
</mapper>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -355,12 +355,12 @@
    <select id="getTotalMemberTotal" resultType="com.ruoyi.member.domain.vo.MgtTotalMemberTotalVo">
        SELECT
            COUNT(member_id) memberTotal,
            SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END) onlineTotal,
            SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END) offlineTotal,
            IFNULL(SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END),0) onlineTotal,
            IFNULL(SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END),0) offlineTotal,
            0 introduceTotal,
            SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END) cycleTotal,
            SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END) experienceTotal,
            SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END) serviceTotal
            IFNULL(SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END),0) cycleTotal,
            IFNULL(SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END),0) experienceTotal,
            IFNULL(SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END),0) serviceTotal
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
@@ -376,12 +376,12 @@
    <select id="getTotalMemberTotal" resultType="com.ruoyi.member.domain.vo.MgtTotalMemberTotalVo">
        SELECT
        COUNT(member_id) memberTotal,
        SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END) onlineTotal,
        SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END) offlineTotal,
        IFNULL(SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END),0) onlineTotal,
        IFNULL(SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END),0) offlineTotal,
        0 introduceTotal,
        SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END) cycleTotal,
        SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END) experienceTotal,
        SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END) serviceTotal
        IFNULL(SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END),0) cycleTotal,
        IFNULL(SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END),0) experienceTotal,
        IFNULL(SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END),0) serviceTotal
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
@@ -390,13 +390,13 @@
    <select id="getTotalMemberTotalAge" resultType="com.ruoyi.member.domain.vo.MgtAgeTotalVo">
        SELECT
        SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal,
        SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END) AS fiftyAge
        IFNULL(SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END),0) manTotal,
        IFNULL(SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END),0) womenTotal,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END),0) AS tenAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END),0) AS twentyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END),0) AS ThirtyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END),0) AS fortyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END),0) AS fiftyAge
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
@@ -540,13 +540,13 @@
    <select id="getPlTotalMemberTotalAge" resultType="com.ruoyi.member.domain.vo.MgtAgeTotalVo">
        SELECT
        SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal,
        SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END) AS fiftyAge
        IFNULL(SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END),0) manTotal,
        IFNULL(SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END),0) womenTotal,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END),0) AS tenAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END),0) AS twentyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END),0) AS ThirtyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END),0) AS fortyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END),0) AS fiftyAge
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
            AND relation_shop_id IN
@@ -708,12 +708,12 @@
    <select id="getMerMemberTotal" resultType="com.ruoyi.member.domain.vo.MerMemberTotalVo">
        SELECT
        COUNT(member_id) memberTotal,
        SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END) onlineTotal,
        SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END) offlineTotal,
        IFNULL(SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END),0) onlineTotal,
        IFNULL(SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END),0) offlineTotal,
        0 introduceTotal,
        SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END) cycleTotal,
        SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END) experienceTotal,
        SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END) serviceTotal
        IFNULL(SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END),0) cycleTotal,
        IFNULL(SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END),0) experienceTotal,
        IFNULL(SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END),0) serviceTotal
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
@@ -734,13 +734,13 @@
    <select id="getMerMemberTotalAge" resultType="com.ruoyi.member.domain.vo.MgtAgeTotalVo">
        SELECT
        SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal,
        SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END) AS fiftyAge
        IFNULL(SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END),0) manTotal,
        IFNULL(SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END),0) womenTotal,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END),0) AS tenAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END),0) AS twentyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END),0) AS ThirtyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END),0) AS fortyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END),0) AS fiftyAge
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
@@ -827,10 +827,10 @@
            </foreach>
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND tmt.last_pay_time &gt;= #{actStartDate}
            AND tm.create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND tmt.last_pay_time &lt;= #{actEndDate}
            AND tm.create_time &lt;= #{param.endDate}
        </if>
    </select>
@@ -911,13 +911,13 @@
    <select id="listOrderAgeUser" resultType="java.lang.Long">
        SELECT
        SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal,
        SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge,
        SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END) AS fiftyAge
        IFNULL(SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END),0) manTotal,
        IFNULL(SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END),0) womenTotal,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END),0) AS tenAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END),0) AS twentyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END),0) AS ThirtyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END),0) AS fortyAge,
        IFNULL(SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) &gt;= 51 THEN 1 ELSE 0 END),0) AS fiftyAge
        FROM t_member WHERE del_flag = 0 AND binding_flag = 1
        <if test="param.shopId != null and param.shopId != ''">
            AND relation_shop_id = #{param.shopId}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
@@ -85,6 +85,15 @@
        return R.ok(merVerifyCouponVo);
    }
    @RequestMapping(value = "/sureVerifyPrize", method = RequestMethod.POST)
    @ApiOperation(value = "核销奖品")
    public R<MerVerifyAwardVo> sureVerifyPrize(@RequestBody MerVerifyPrizeDto merVerifyPrizeDto) {
        Long userId = SecurityUtils.getUserId();
        merVerifyPrizeDto.setUserId(userId);
        MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
        return R.ok(merVerifyAwardVo);
    }
    @RequestMapping(value = "/pageMerMemberNoClearOrder", method = RequestMethod.POST)
    @ApiOperation(value = "分页获取用户未结清订单")
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyPrizeDto.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.order.domain.dto;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName MerVerifyPrizeDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/9 9:45
 * @Version 1.0
 */
@Data
public class MerVerifyPrizeDto extends MerBaseDto {
    @ApiModelProperty(value = "奖品id")
    private String prizeId;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -153,6 +153,15 @@
    /**
     * @description getTotalOrderTotalGoodsType
     * @param merTotalDto
     * @return MgtTotalOrderTotalVo
     * @author jqs34
     * @date 2023/6/19 22:24
     */
    MerOrderTotalVo getMerTotalOrderTotalGoodsType(@Param("param") MerTotalDto merTotalDto);
    /**
     * @description getTotalOrderTotalGoodsType
     * @param mgtBaseShopDto
     * @return MgtTotalOrderTotalVo
     * @author jqs34
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -1033,6 +1033,84 @@
        return merVerifyCouponVo;
    }
    /**
     * @description  确认核销奖品
     * @author  jqs
     * @date    2023/7/9 9:54
     * @param merVerifyPrizeDto
     * @return  MerVerifyAwardVo
     */
    @Override
    public MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto){
        MerVerifyAwardVo merVerifyAwardVo = new MerVerifyAwardVo();
        MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrize(merVerifyPrizeDto.getPrizeId()).getData();
        if(memberGiftRecord==null||memberGiftRecord.getVerifyStatus()!=1){
            throw new ServiceException(AppErrorConstant.COUPON_USED);
        }
        Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
        merVerifyAwardVo.setUserName(member.getNickName());
        merVerifyAwardVo.setUserMobile(member.getMobile());
        if(memberGiftRecord.getGiftFrom()==1){
            merVerifyAwardVo.setGiftFrom("平台生日卡");
        }else{
            merVerifyAwardVo.setGiftFrom("商户生日卡");
        }
        merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
        List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>();
        BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto();
        switch(memberGiftRecord.getGiftType()){
            case 1:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
                birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
                birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
                birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
                birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId());
                birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber());
                giftSendDtoList.add(birthdayGiftSendDto);
                remoteCouponService.sendCouponGift(giftSendDtoList);
                break;
            case 2:
                Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber()));
                if (goods.getGoodsType() == 1) {
                    merVerifyAwardVo.setGiftRemark("周期");
                } else if (goods.getGoodsType() == 2) {
                    merVerifyAwardVo.setGiftRemark("服务");
                } else if (goods.getGoodsType() == 3) {
                    merVerifyAwardVo.setGiftRemark("体验");
                } else if (goods.getGoodsType() == 4) {
                    merVerifyAwardVo.setGiftRemark("单品");
                }
                birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
                birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
                birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
                birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
                birthdayGiftSendDto.setGoodsId(memberGiftRecord.getGoodsId());
                birthdayGiftSendDto.setGoodsNumber(memberGiftRecord.getGoodsNumber());
                giftSendDtoList.add(birthdayGiftSendDto);
                consumerGoodsService.sendGoodsGift(giftSendDtoList);
                break;
            case 3:
                merVerifyAwardVo.setGiftName("现金");
                merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                break;
            case 4:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber()));
                break;
            default:
                break;
        }
        merVerifyAwardVo.setCreateTime(memberGiftRecord.getCreateTime());
        return merVerifyAwardVo;
    }
    /**
     * 收银未结清订单列表
     *
@@ -2362,16 +2440,26 @@
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                break;
            case 2:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGoodsName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGoodsNumber()));
                if (goods.getGoodsType() == 1) {
                    merVerifyAwardVo.setGiftRemark("周期");
                } else if (goods.getGoodsType() == 2) {
                    merVerifyAwardVo.setGiftRemark("服务");
                } else if (goods.getGoodsType() == 3) {
                    merVerifyAwardVo.setGiftRemark("体验");
                } else if (goods.getGoodsType() == 4) {
                    merVerifyAwardVo.setGiftRemark("单品");
                }
                break;
            case 3:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                merVerifyAwardVo.setGiftName("现金");
                merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                break;
            case 4:
                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
                merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getGiftNumber()));
                break;
            default:
                break;
@@ -2413,6 +2501,13 @@
            merTotalDto.setShopId(null);
        }
        MerOrderTotalVo orderTotalVo = orderMapper.getMerOrderTotalOrderFrom(merTotalDto);
        MerOrderTotalVo goodsTypeVo = orderMapper.getMerTotalOrderTotalGoodsType(merTotalDto);
        orderTotalVo.setCycleTotal(goodsTypeVo.getCycleTotal());
        orderTotalVo.setCycleMoney(goodsTypeVo.getCycleMoney());
        orderTotalVo.setExperienceTotal(goodsTypeVo.getExperienceTotal());
        orderTotalVo.setExperienceMoney(goodsTypeVo.getExperienceMoney());
        orderTotalVo.setServiceTotal(goodsTypeVo.getServiceTotal());
        orderTotalVo.setServiceMoney(goodsTypeVo.getServiceMoney());
        return orderTotalVo;
    }
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -118,6 +118,15 @@
    MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto);
    /**
     * @description  确认核销奖品
     * @author  jqs
     * @date    2023/7/9 9:54
     * @param merVerifyPrizeDto
     * @return  MerVerifyAwardVo
     */
    MerVerifyAwardVo sureVerifyPrize(MerVerifyPrizeDto merVerifyPrizeDto);
    /**
     * 收银未结清订单列表
     * @param page
     * @param merMemberNoClearOrderDto
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -654,14 +654,42 @@
        </if>
    </select>
    <select id="getMerTotalOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MerOrderTotalVo">
        SELECT
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END),0) cycleMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END),0) experienceMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END),0) serviceMoney
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0
        <if test="param.shopId != null and param.shopId != ''">
            AND toc.shop_id = #{param.shopId}
        </if>
        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
            AND toc.shop_id IN
            <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="param.startDate!=null and param.startDate!=''">
            AND toc.create_time &gt;= #{param.startDate}
        </if>
        <if test="param.endDate!=null and param.endDate!=''">
            AND toc.create_time &lt;= #{param.endDate}
        </if>
    </select>
    <select id="getTotalOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo">
        SELECT
        SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END) cycleTotal,
        SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END) experienceTotal,
        SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END) serviceTotal,
        SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END) cycleMoney,
        SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END) experienceMoney,
        SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END) serviceMoney
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END),0) cycleMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END),0) experienceMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END),0) serviceMoney
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0
@@ -950,13 +978,13 @@
    <select id="getPlTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo">
        SELECT
        COUNT(order_id) orderTotal,
        SUM(CASE WHEN order_from = 1 THEN 1 ELSE 0 END) onlineTotal,
        SUM(CASE WHEN order_from = 3 THEN 1 ELSE 0 END) offlineTotal,
        SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END) activityTotal,
        IFNULL(SUM(CASE WHEN order_from = 1 THEN 1 ELSE 0 END),0) onlineTotal,
        IFNULL(SUM(CASE WHEN order_from = 3 THEN 1 ELSE 0 END),0) offlineTotal,
        IFNULL(SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END),0) activityTotal,
        IFNULL(SUM(order_money),0) orderMoney,
        SUM(CASE WHEN order_from = 1 THEN order_money ELSE 0 END) onlineMoney,
        SUM(CASE WHEN order_from = 3 THEN order_money ELSE 0 END) offlineMoney,
        SUM(CASE WHEN order_from = 2 THEN order_money ELSE 0 END) activityMoney
        IFNULL(SUM(CASE WHEN order_from = 1 THEN order_money ELSE 0 END),0) onlineMoney,
        IFNULL(SUM(CASE WHEN order_from = 3 THEN order_money ELSE 0 END),0) offlineMoney,
        IFNULL(SUM(CASE WHEN order_from = 2 THEN order_money ELSE 0 END),0) activityMoney
        FROM t_order WHERE del_flag = 0
        <if test="param.shopIdList != null and param.shopIdList.size() > 0">
            AND shop_id IN
@@ -974,12 +1002,12 @@
    <select id="getPlTotalOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo">
        SELECT
        SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END) cycleTotal,
        SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END) experienceTotal,
        SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END) serviceTotal,
        SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END) cycleMoney,
        SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END) experienceMoney,
        SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END) serviceMoney
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END),0) cycleMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END),0) experienceMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END),0) serviceMoney
        FROM t_order toc
        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
        WHERE toc.del_flag = 0
@@ -1233,16 +1261,16 @@
    <select id="getMerHomeShopTotalVo" resultType="com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo">
        SELECT
        SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END) unHandleOrder,
        SUM(pay_money) shopTurnover
            IFNULL(SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END),0) unHandleOrder,
            IFNULL(SUM(pay_money),0) shopTurnover
        FROM t_order
        WHERE del_flag = 0 AND shopId = #{shopId}
    </select>
    <select id="getMerHomeShopsTotalVo" resultType="com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo">
        SELECT
            SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END) unHandleOrder,
            SUM(pay_money) shopTurnover
        IFNULL(SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END),0) unHandleOrder,
        IFNULL(SUM(pay_money),0) shopTurnover
        FROM t_order
        WHERE del_flag = 0
        <if test="list != null and list.size() > 0">
@@ -1263,13 +1291,19 @@
    <select id="getMerOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MerOrderTotalVo">
        SELECT
        COUNT(order_id) orderTotal,
        SUM(CASE WHEN order_from = 1 THEN 1 ELSE 0 END) onlineTotal,
        SUM(CASE WHEN order_from = 3 THEN 1 ELSE 0 END) offlineTotal,
        SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END) activityTotal,
        IFNULL(SUM(CASE WHEN order_from = 1 THEN 1 ELSE 0 END),0) onlineTotal,
        IFNULL(SUM(CASE WHEN order_from = 3 THEN 1 ELSE 0 END),0) offlineTotal,
        IFNULL(SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END),0) activityTotal,
        IFNULL(SUM(order_money),0) orderMoney,
        SUM(CASE WHEN order_from = 1 THEN order_money ELSE 0 END) onlineMoney,
        SUM(CASE WHEN order_from = 3 THEN order_money ELSE 0 END) offlineMoney,
        SUM(CASE WHEN order_from = 2 THEN order_money ELSE 0 END) activityMoney
        IFNULL(SUM(CASE WHEN order_from = 1 THEN order_money ELSE 0 END),0) onlineMoney,
        IFNULL(SUM(CASE WHEN order_from = 3 THEN order_money ELSE 0 END),0) offlineMoney,
        IFNULL(SUM(CASE WHEN order_from = 2 THEN order_money ELSE 0 END),0) activityMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal,
        IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN tog.goods_total_money ELSE 0 END),0) cycleMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN tog.goods_total_money ELSE 0 END),0) experienceMoney,
        IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN tog.goods_total_money ELSE 0 END),0) serviceMoney
        FROM t_order WHERE del_flag = 0
        <if test="param.shopId != null and param.shopId != ''">
            AND shop_id = #{param.shopId}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/GeneratorMybatisPlus.java
@@ -74,7 +74,7 @@
        strategy.setControllerMappingHyphenStyle(true);
        //表和前缀处理
        String[] table = {
                "t_member_gift_record"
                "t_member_coupon_record"
        };
        strategy.setInclude(table);
        String[] tablePre = new String[]{"t_"};