jiangqs
2023-07-07 5627daeb1ac1a29947e902f9a7efb6730ed98611
管理台bug和用户端生日卡
37个文件已修改
8个文件已添加
1569 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/BirthdayGiftSendDto.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtSelectGoodsPageVo.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/OBSUploadUtils.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppActivityController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberGiftRecord.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppBirthdayCardVo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppBirthdayGiftVo.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGoodsListVo.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberGiftRecordMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberGiftRecordServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberGiftRecordService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponRelUserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberGiftRecordMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/OrderGoods.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 311 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ConsumerGoodsService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopPageDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/GeneratorMybatisPlus.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -79,4 +79,8 @@
    String ACTIVITY_END = "活动已经结束";
    String ACTIVITY_GOODS_NULL = "商品已售罄";
    String BIRTHDAY_NULL = "未填写生日";
    String BIRTHDAY_ERROR = "只有生日当月领取";
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/BirthdayGiftSendDto.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.system.api.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName BirthdayGiftSendDto
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/7 14:48
 * @Version 1.0
 */
@Data
public class BirthdayGiftSendDto {
    @ApiModelProperty(value = "用户id")
    private Long userId;
    @ApiModelProperty(value = "礼物类型1优惠券2商品3现金4实物")
    private Integer giftType;
    @ApiModelProperty(value = "礼物来源1平台2商户")
    private Integer giftFrom;
    @ApiModelProperty(value = "商户id")
    private Long shopId;
    @ApiModelProperty(value = "优惠券id")
    private String couponId;
    @ApiModelProperty(value = "优惠券数量")
    private Integer couponNumber;
    @ApiModelProperty(value = "商品id")
    private String goodsId;
    @ApiModelProperty(value = "商品数量")
    private Integer goodsNumber;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtSelectGoodsPageVo.java
@@ -25,7 +25,10 @@
    private String goodsNo;
    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
    private String goodsType;
    private Integer goodsType;
    @ApiModelProperty(value = "商品类型")
    private String goodsTypeName;
    @ApiModelProperty(value = "商品售价")
    private BigDecimal salesPrice;
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerVerifyCouponGetVo;
import com.ruoyi.system.api.service.RemoteCouponService;
@@ -39,6 +40,11 @@
                return R.fail("获取核销优惠券失败:" + throwable.getMessage());
            }
            @Override
            public R sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList) {
                return null;
            }
        };
    }
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo;
@@ -57,6 +58,11 @@
            public R<BigDecimal> getMemberUnpaidOrder(MerBaseDto merBaseDto) {
                return R.fail("获取用户未结清金额失败:" + throwable.getMessage());
            }
            @Override
            public R sendGoodsGift(List<BirthdayGiftSendDto> giftSendDtoList) {
                return null;
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -97,6 +97,11 @@
            public R<Integer> getUnReplaySuggestVo() {
                return null;
            }
            @Override
            public R<Integer> getShopMarketingStatus(Long shopId) {
                return null;
            }
        };
    }
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerVerifyCouponGetVo;
import com.ruoyi.system.api.factory.RemoteCouponFallbackFactory;
@@ -38,4 +39,14 @@
     */
    @PostMapping("/coupon/getVerifyCoupon")
    public R<MerVerifyCouponGetVo> getVerifyCoupon(@RequestBody String verifyCoupon);
    /**
     * @description  发送用户优惠券礼物
     * @author  jqs
     * @date    2023/7/7 19:53
     * @param giftSendDtoList
     * @return  R
     */
    @PostMapping("/coupon/sendCouponGift")
    public R sendCouponGift(@RequestBody List<BirthdayGiftSendDto> giftSendDtoList);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
@@ -55,4 +56,14 @@
     */
    @PostMapping("/order/getMemberUnpaidOrder")
    public R<BigDecimal> getMemberUnpaidOrder(@RequestBody MerBaseDto merBaseDto);
    /**
     * @description  发送用户商品礼物
     * @author  jqs
     * @date    2023/7/7 19:53
     * @param giftSendDtoList
     * @return  R
     */
    @PostMapping("/order/sendGoodsGift")
    public R sendGoodsGift(@RequestBody List<BirthdayGiftSendDto> giftSendDtoList);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -97,7 +97,7 @@
     * @param shopTotalChangeDto
     * @return  R
     */
    @PostMapping("/changeShopTotal")
    @PostMapping("/shop/changeShopTotal")
    public R changeShopTotal(@RequestBody ShopTotalChangeDto shopTotalChangeDto);
    /**
@@ -107,7 +107,7 @@
     * @param userId
     * @return  R<MemberTaskSimpleVo>
     */
    @PostMapping("/member/getLastMemberTask")
    @PostMapping("/shop/getLastMemberTask")
    public R<MemberTaskSimpleVo> getLastMemberTask(@RequestBody Long userId);
    /**
@@ -116,7 +116,7 @@
     * @date    2023/7/3 17:26
     * @return  R<List<Long>>
     */
    @PostMapping("/listShopIdByShopId")
    @PostMapping("/shop/listShopIdByShopId")
    public R<List<Long>> listShopIdByShopId(@RequestBody Long shopId);
    /**
@@ -126,6 +126,16 @@
     * @param
     * @return  R<Integer>
     */
    @PostMapping("/getUnReplaySuggestVo")
    @PostMapping("/shop/getUnReplaySuggestVo")
    public R<Integer> getUnReplaySuggestVo();
    /**
     * @description  获取商户营销状态
     * @author  jqs
     * @date    2023/7/7 14:05
     * @param shopId
     * @return  R<Integer>
     */
    @PostMapping("/shop/getShopMarketingStatus")
    public R<Integer> getShopMarketingStatus(@RequestBody Long shopId);
}
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
@@ -1,6 +1,10 @@
package com.ruoyi.file.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.file.FileUtils;
import com.ruoyi.file.service.ISysFileService;
import com.ruoyi.file.utils.OBSUploadUtils;
import com.ruoyi.system.api.domain.poji.sys.SysFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -8,10 +12,9 @@
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.file.FileUtils;
import com.ruoyi.file.service.ISysFileService;
import com.ruoyi.system.api.domain.poji.sys.SysFile;
import java.util.ArrayList;
import java.util.List;
/**
 * 文件请求处理
@@ -67,4 +70,19 @@
        }
    }
    @PostMapping("batchUploadOSS")
    public R<List<String>> batchUploadOSS(@RequestPart("file") MultipartFile[] files) {
        List<String> urls = new ArrayList<>();
        for (MultipartFile file : files) {
            try {
                // 上传并返回访问地址
                String url = OBSUploadUtils.uploadFile(file);
                urls.add(url);
            } catch (Exception e) {
                log.error("上传文件失败", e);
                return R.fail(e.getMessage());
            }
        }
        return R.ok(urls);
    }
}
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/OBSUploadUtils.java
@@ -9,7 +9,6 @@
import com.ruoyi.common.core.utils.uuid.IdUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Calendar;
@@ -64,7 +63,7 @@
            // 创建PutObject请求。
            result = ossClient.putObject(putObjectRequest);
            // 如果上传成功,则返回200。
            System.out.println(result.getResponse().getStatusCode());
            System.out.println(fileName + "上传返回" + result.getResponse().getStatusCode());
            return result.getResponse().getUri();
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppActivityController.java
@@ -85,4 +85,6 @@
        List<AppSimpleActivityGoodsVo> appSimpleGoodsVoList = goodsService.pageAppActivityGoods(page,appActivityGoodsPageDto);
        return R.ok(page.setRecords(appSimpleGoodsVoList));
    }
}
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -417,6 +417,12 @@
            goods_name  goodsName,
            goods_no  goodsNo,
            goods_type  goodsType,
            CASE goods_type
            WHEN 1 THEN "周期"
            WHEN 2 THEN "服务"
            WHEN 3 THEN "体验"
            WHEN 4 THEN "单品"
            END goodsTypeName,
            sales_price  salesPrice
        FROM
            t_goods
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java
@@ -2,7 +2,9 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.member.service.coupon.CouponService;
import com.ruoyi.member.service.member.MemberCouponService;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerVerifyCouponGetVo;
import org.springframework.web.bind.annotation.PostMapping;
@@ -24,6 +26,8 @@
@RequestMapping("/coupon")
public class CouponController extends BaseController {
    @Resource
    private CouponService couponService;
    @Resource
    private MemberCouponService memberCouponService;
@@ -69,4 +73,16 @@
        return R.ok(verifyCouponGetVo);
    }
    /**
     * @description  发送用户优惠券礼物
     * @author  jqs
     * @date    2023/7/7 19:53
     * @param giftSendDtoList
     * @return  R
     */
    @PostMapping("/sendCouponGift")
    public R sendCouponGift(@RequestBody List<BirthdayGiftSendDto> giftSendDtoList){
        couponService.sendCouponGift(giftSendDtoList);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java
@@ -2,14 +2,20 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.member.domain.vo.AppBirthdayCardVo;
import com.ruoyi.member.domain.vo.AppSuggestPageVo;
import com.ruoyi.member.domain.vo.AppUserInfoVo;
import com.ruoyi.member.service.birthday.BirthdayCardService;
import com.ruoyi.member.service.member.MemberService;
import com.ruoyi.member.service.member.MemberSuggestService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.AppEditUserDto;
import com.ruoyi.system.api.domain.dto.AppSuggestPageDto;
import com.ruoyi.system.api.domain.dto.AppUserSuggestDto;
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;
@@ -18,6 +24,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
/**
@@ -38,7 +45,8 @@
    @Resource
    private MemberSuggestService memberSuggestService;
    @Resource
    private BirthdayCardService birthdayCardService;
    @RequestMapping(value = "/getAppUserInfo", method = RequestMethod.POST)
@@ -78,4 +86,55 @@
        memberSuggestService.userSuggest(appUserSuggestDto);
        return R.ok();
    }
    @RequestMapping(value = "/getUserBirthdayCard", method = RequestMethod.POST)
    @ApiOperation(value = "获取用户生日卡信息")
    public R<AppBirthdayCardVo> getUserBirthdayCard() {
        Long userId = SecurityUtils.getUserId();
        Member member = memberService.getByUserId(userId);
        AppBirthdayCardVo appBirthdayCardVo = new AppBirthdayCardVo();
        if(StringUtils.isNotBlank(member.getBirthday())){
            appBirthdayCardVo.setHaveBirthdayFlag(1);
            String birthday = member.getBirthday();
            LocalDate today = LocalDate.now();
            int birthdayMonth = Integer.parseInt(birthday.split("-")[1]);
            int todayMonth = today.getMonthValue();
            if (birthdayMonth == todayMonth) {
                appBirthdayCardVo = birthdayCardService.getUserBirthdayCard(userId,member.getRelationShopId());
                appBirthdayCardVo.setHaveBirthdayFlag(1);
                appBirthdayCardVo.setInBirthdayFlag(1);
            } else {
                appBirthdayCardVo.setHaveBirthdayFlag(1);
                appBirthdayCardVo.setInBirthdayFlag(0);
            }
        }else{
            appBirthdayCardVo.setHaveBirthdayFlag(0);
        }
        return R.ok(appBirthdayCardVo);
    }
    @RequestMapping(value = "/getBirthdayGift", method = RequestMethod.POST)
    @ApiOperation(value = "领取生日礼包")
    public R<AppBirthdayCardVo> getBirthdayGift() {
        Long userId = SecurityUtils.getUserId();
        Member member = memberService.getByUserId(userId);
        AppBirthdayCardVo appBirthdayCardVo = new AppBirthdayCardVo();
        if(StringUtils.isNotBlank(member.getBirthday())){
            appBirthdayCardVo.setHaveBirthdayFlag(1);
            String birthday = member.getBirthday();
            LocalDate today = LocalDate.now();
            int birthdayMonth = Integer.parseInt(birthday.split("-")[1]);
            int todayMonth = today.getMonthValue();
            if (birthdayMonth == todayMonth) {
                appBirthdayCardVo = birthdayCardService.getBirthdayGift(userId,member.getRelationShopId());
                appBirthdayCardVo.setHaveBirthdayFlag(1);
                appBirthdayCardVo.setInBirthdayFlag(1);
            } else {
                throw new ServiceException(AppErrorConstant.BIRTHDAY_ERROR);
            }
        }else{
            throw new ServiceException(AppErrorConstant.BIRTHDAY_NULL);
        }
        return R.ok(appBirthdayCardVo);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberGiftRecord.java
New file
@@ -0,0 +1,130 @@
package com.ruoyi.member.domain.pojo.member;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * <p>
 * 生日卡
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_member_gift_record")
public class MemberGiftRecord extends Model<MemberGiftRecord> {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 删除标记
     */
    @TableField("del_flag")
    private Integer delFlag;
    /**
     * 用户id
     */
    @TableField("user_id")
    private Long userId;
    /**
     * 生日卡id
     */
    @TableField("card_id")
    private Long cardId;
    /**
     * 礼品id
     */
    @TableField("gift_id")
    private Long giftId;
    /**
     * 礼物来源1平台2商户
     */
    @TableField("gift_from")
    private Integer giftFrom;
    /**
     * 商户id
     */
    @TableField("shop_id")
    private Long shopId;
    /**
     * 礼物类型1优惠券2商品3现金4实物
     */
    @TableField("gift_type")
    private Integer giftType;
    /**
     * 优惠券id
     */
    @TableField("coupon_id")
    private String couponId;
    /**
     * 优惠券数量
     */
    @TableField("coupon_number")
    private Integer couponNumber;
    /**
     * 商品id
     */
    @TableField("goods_id")
    private String goodsId;
    /**
     * 商品数量
     */
    @TableField("goods_number")
    private Integer goodsNumber;
    /**
     * 实物名称
     */
    @TableField("gift_name")
    private String giftName;
    /**
     * 实物数量
     */
    @TableField("gift_number")
    private Integer giftNumber;
    /**
     * 现金
     */
    private BigDecimal money;
    /**
     * 创建时间
     */
    @TableField("create_time")
    private Date createTime;
    /**
     * 优惠券名称
     */
    @TableField("coupon_name")
    private String couponName;
    /**
     * 商品名称
     */
    @TableField("goods_name")
    private String goodsName;
    /**
     * 领取年份
     */
    @TableField("gift_year")
    private String giftYear;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppBirthdayCardVo.java
New file
@@ -0,0 +1,30 @@
package com.ruoyi.member.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @ClassName AppBirthdayCardVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/7 10:22
 * @Version 1.0
 */
@Data
public class AppBirthdayCardVo {
    @ApiModelProperty(value = "是否有生日0否1是")
    private Integer haveBirthdayFlag;
    @ApiModelProperty(value = "是否生日当月0否1是")
    private Integer inBirthdayFlag;
    @ApiModelProperty(value = "是否已领取礼物0否1是")
    private Integer getGiftFlag;
    @ApiModelProperty(value = "礼物列表")
    private List<AppBirthdayGiftVo> birthdayGiftVoList;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/AppBirthdayGiftVo.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.member.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @ClassName AppBirthdayGiftVo
 * @Description TODO
 * @Author jqs
 * @Date 2023/7/7 10:25
 * @Version 1.0
 */
@Data
public class AppBirthdayGiftVo {
    @ApiModelProperty(value = "礼物名称")
    private String giftName;
    @ApiModelProperty(value = "礼物数量")
    private double giftNumber;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java
@@ -13,6 +13,7 @@
@Data
public class MerBirthdayGetVo {
    @ApiModelProperty(value = "生日卡状态1开启2关闭")
    private Integer cardStatus;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGetVo.java
@@ -37,7 +37,7 @@
    private Date sendTime;
    @ApiModelProperty(value = "使用范围1.全场2.指定商品")
    private String useScope;
    private Integer useScope;
    @ApiModelProperty(value = "有效期类型1.时间段2.领取之日起")
    private Integer validTimeType;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponGoodsListVo.java
@@ -25,7 +25,10 @@
    private String goodsNo;
    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
    private String goodsType;
    private Integer goodsType;
    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
    private String goodsTypeName;
    @ApiModelProperty(value = "商品售价")
    private BigDecimal salesPrice;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MgtCouponPageVo.java
@@ -24,7 +24,7 @@
    private String couponName;
    @ApiModelProperty("优惠券类型1.满减2.折扣3.代金4.商品")
    private Integer couponType;
    private String couponType;
    @ApiModelProperty(value = "使用限制")
    private String useLimit;
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberGiftRecordMapper.java
New file
@@ -0,0 +1,16 @@
package com.ruoyi.member.mapper.member;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.member.domain.pojo.member.MemberGiftRecord;
/**
 * <p>
 * 生日卡 Mapper 接口
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
public interface MemberGiftRecordMapper extends BaseMapper<MemberGiftRecord> {
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java
@@ -5,6 +5,7 @@
import com.ruoyi.member.domain.dto.MgtBirthdayEditDto;
import com.ruoyi.member.domain.dto.MgtBirthdayGetDto;
import com.ruoyi.member.domain.pojo.birthday.BirthdayCard;
import com.ruoyi.member.domain.vo.AppBirthdayCardVo;
import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo;
import com.ruoyi.member.domain.vo.MerBirthdayGetVo;
import com.ruoyi.member.domain.vo.MgtBirthdayGetVo;
@@ -81,4 +82,25 @@
     * @return  void
     */
    void toggleMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto);
    /**
     * @description  获取用户生日礼物
     * @author  jqs
     * @date    2023/7/7 10:55
     * @param shopId
     * @return  AppBirthdayCardVo
     */
    AppBirthdayCardVo getUserBirthdayCard(Long userId,Long shopId);
    /**
     * @description  获取用户生日礼物
     * @author  jqs
     * @date    2023/7/7 10:55
     * @param shopId
     * @return  AppBirthdayCardVo
     */
    AppBirthdayCardVo getBirthdayGift(Long userId, Long shopId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java
@@ -5,6 +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;
@@ -151,4 +152,14 @@
     * @return  void
     */
    void deleteMerCoupon(MerBaseGetDto merBaseGetDto);
    /**
     * @description  发送用户优惠券礼物
     * @author  jqs
     * @date    2023/7/7 19:54
     * @param giftSendDtoList
     * @return  void
     */
    void sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberGiftRecordServiceImpl.java
New file
@@ -0,0 +1,44 @@
package com.ruoyi.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.member.domain.pojo.member.MemberGiftRecord;
import com.ruoyi.member.mapper.member.MemberGiftRecordMapper;
import com.ruoyi.member.service.member.MemberGiftRecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 生日卡 服务实现类
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
@Service
public class MemberGiftRecordServiceImpl extends ServiceImpl<MemberGiftRecordMapper, MemberGiftRecord> implements MemberGiftRecordService {
    /**
     * @description  通过用户和日期获取礼物记录
     * @author  jqs
     * @date    2023/7/7 17:26
     * @param userId
     * @param giftYear
     * @return  List<MemberGiftRecord>
     */
    @Override
    public List<MemberGiftRecord> listByUserIdAndYear(Long userId, String giftYear){
        LambdaQueryWrapper<MemberGiftRecord> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MemberGiftRecord::getDelFlag,0);
        queryWrapper.eq(MemberGiftRecord::getUserId,userId);
        queryWrapper.eq(MemberGiftRecord::getGiftYear,giftYear);
        return this.list(queryWrapper);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
@@ -2,26 +2,30 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.member.domain.dto.MerBirthdayEditDto;
import com.ruoyi.member.domain.dto.MgtBirthdayEditDto;
import com.ruoyi.member.domain.dto.MgtBirthdayGetDto;
import com.ruoyi.member.domain.dto.MgtBirthdayGiftDto;
import com.ruoyi.member.domain.pojo.birthday.BirthdayCard;
import com.ruoyi.member.domain.pojo.birthday.BirthdayGift;
import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo;
import com.ruoyi.member.domain.vo.MerBirthdayGetVo;
import com.ruoyi.member.domain.vo.MgtBirthdayGetVo;
import com.ruoyi.member.domain.vo.MgtBirthdayGiftVo;
import com.ruoyi.member.domain.pojo.member.MemberGiftRecord;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.birthday.BirthdayCardMapper;
import com.ruoyi.member.service.birthday.BirthdayCardService;
import com.ruoyi.member.service.birthday.BirthdayGiftService;
import com.ruoyi.member.service.member.MemberGiftRecordService;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.service.RemoteCouponService;
import com.ruoyi.system.api.service.RemoteOrderService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.StringJoiner;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
/**
 * <p>
@@ -39,6 +43,18 @@
    @Resource
    private BirthdayGiftService birthdayGiftService;
    @Resource
    private RemoteShopService remoteShopService;
    @Resource
    private MemberGiftRecordService memberGiftRecordService;
    @Resource
    private RemoteCouponService remoteCouponService;
    @Resource
    private RemoteOrderService remoteOrderService;
    /**
     * @description  平台编辑生日卡
@@ -394,4 +410,212 @@
        birthdayCard.setCardStatus(merBirthdayEditDto.getCardStatus());
        this.saveOrUpdate(birthdayCard);
    }
    /**
     * @description 获取用户生日礼物
     * @author  jqs
     * @date    2023/7/7 10:55
     * @param shopId
     * @return  AppBirthdayCardVo
     */
    @Override
    public AppBirthdayCardVo getUserBirthdayCard(Long userId,Long shopId){
        AppBirthdayCardVo appBirthdayCardVo = new AppBirthdayCardVo();
        String currentYear = String.valueOf(LocalDate.now().getYear());
        List<MemberGiftRecord> memberGiftRecordList = memberGiftRecordService.listByUserIdAndYear(userId,currentYear);
        if(memberGiftRecordList!=null&&!memberGiftRecordList.isEmpty()){
            List<AppBirthdayGiftVo> birthdayGiftVoList = memberGiftRecordList.stream().map(
                    memberGiftRecord -> {
                        AppBirthdayGiftVo appBirthdayGiftVo = new AppBirthdayGiftVo();
                        switch (memberGiftRecord.getGiftType()) {
                            case 1:
                                // 礼物类型为1,即优惠券
                                appBirthdayGiftVo.setGiftName(memberGiftRecord.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getCouponNumber());
                                break;
                            case 2:
                                // 礼物类型为2,即商品
                                appBirthdayGiftVo.setGiftName(memberGiftRecord.getGoodsName());
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getGoodsNumber());
                                break;
                            case 3:
                                // 礼物类型为3,即现金
                                appBirthdayGiftVo.setGiftName("现金");
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                                break;
                            case 4:
                                // 礼物类型为4,即礼品
                                appBirthdayGiftVo.setGiftName(memberGiftRecord.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getCouponNumber());
                                break;
                            default:
                                break;
                        }
                        return appBirthdayGiftVo;
                    }
            ).collect(Collectors.toList());
            appBirthdayCardVo.setGetGiftFlag(1);
            appBirthdayCardVo.setBirthdayGiftVoList(birthdayGiftVoList);
        }else{
            appBirthdayCardVo.setGetGiftFlag(0);
        }
        return appBirthdayCardVo;
    }
    /**
     * @description  获取用户生日礼物
     * @author  jqs
     * @date    2023/7/7 10:55
     * @param shopId
     * @return  AppBirthdayCardVo
     */
    @Override
    public AppBirthdayCardVo getBirthdayGift(Long userId, Long shopId){
        AppBirthdayCardVo appBirthdayCardVo = new AppBirthdayCardVo();
        List<AppBirthdayGiftVo> birthdayGiftVoList = new ArrayList<>();
        List<MemberGiftRecord> memberGiftRecordList = new ArrayList<>();
        List<BirthdayGiftSendDto> sendGoodsList = new ArrayList<>();
        List<BirthdayGiftSendDto> sendCouponList = new ArrayList<>();
        AppBirthdayGiftVo appBirthdayGiftVo;
        MemberGiftRecord memberGiftRecord;
        BigDecimal winningProbability;
        BigDecimal randomProbability;
        BirthdayGiftSendDto birthdayGiftSendDto;
        String currentYear = String.valueOf(LocalDate.now().getYear());
        // 获取平台生日卡信息
        BirthdayCard plBirthdayCard = birthdayCardMapper.getPlatformBirthdayCard(shopId);
        // 如果生日卡存在
        if (plBirthdayCard != null && plBirthdayCard.getCardStatus()==1) {
            // 获取生日卡对应的生日礼物列表
            List<BirthdayGift> birthdayGiftList = birthdayGiftService.listByCardId(plBirthdayCard.getCardId());
            if(!birthdayGiftList.isEmpty()){
                // 遍历生日礼物列表
                for (BirthdayGift birthdayGift : birthdayGiftList) {
                    winningProbability = birthdayGift.getWinningProbability();
                    randomProbability = new BigDecimal(new Random().nextInt(100));
                    if(winningProbability.compareTo(randomProbability)>0){
                        appBirthdayGiftVo = new AppBirthdayGiftVo();
                        memberGiftRecord = new MemberGiftRecord();
                        birthdayGiftSendDto = new BirthdayGiftSendDto();
                        BeanUtils.copyProperties(birthdayGift, memberGiftRecord);
                        memberGiftRecord.setGiftFrom(1);
                        memberGiftRecord.setGiftYear(currentYear);
                        memberGiftRecord.setCreateTime(new Date());
                        memberGiftRecord.setUserId(userId);
                        birthdayGiftSendDto.setUserId(userId);
                        birthdayGiftSendDto.setGiftFrom(1);
                        birthdayGiftSendDto.setGiftType(birthdayGift.getGiftType());
                        switch (birthdayGift.getGiftType()) {
                            case 1:
                                // 礼物类型为1,即优惠券
                                appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                birthdayGiftSendDto.setCouponId(birthdayGift.getCouponId());
                                birthdayGiftSendDto.setCouponNumber(birthdayGift.getCouponNumber());
                                sendGoodsList.add(birthdayGiftSendDto);
                                break;
                            case 2:
                                // 礼物类型为2,即商品
                                appBirthdayGiftVo.setGiftName(birthdayGift.getGoodsName());
                                appBirthdayGiftVo.setGiftNumber(birthdayGift.getGoodsNumber());
                                birthdayGiftSendDto.setGoodsId(birthdayGift.getGoodsId());
                                birthdayGiftSendDto.setCouponNumber(birthdayGift.getGoodsNumber());
                                sendCouponList.add(birthdayGiftSendDto);
                                break;
                            case 3:
                                // 礼物类型为3,即现金
                                appBirthdayGiftVo.setGiftName("现金");
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                                break;
                            case 4:
                                // 礼物类型为4,即礼品
                                appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                break;
                            default:
                                break;
                        }
                        birthdayGiftVoList.add(appBirthdayGiftVo);
                        memberGiftRecordList.add(memberGiftRecord);
                    }
                }
            }
        }
        //获取商户营销开关状态
        Integer marketingStatus = remoteShopService.getShopMarketingStatus(shopId).getData();
        if(marketingStatus>1){
            //获取商户生日卡
            LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(BirthdayCard::getDelFlag,0);
            queryWrapper.eq(BirthdayCard::getShopId,shopId);
            BirthdayCard shopBirthdayCard = this.getOne(queryWrapper,false);
            // 如果生日卡存在
            if (shopBirthdayCard != null && shopBirthdayCard.getCardStatus()==1) {
                // 获取生日卡对应的生日礼物列表
                List<BirthdayGift> birthdayGiftList = birthdayGiftService.listByCardId(shopBirthdayCard.getCardId());
                if(!birthdayGiftList.isEmpty()){
                    // 遍历生日礼物列表
                    for (BirthdayGift birthdayGift : birthdayGiftList) {
                        winningProbability = birthdayGift.getWinningProbability();
                        randomProbability = new BigDecimal(new Random().nextInt(100));
                        if(winningProbability.compareTo(randomProbability)>0){
                            appBirthdayGiftVo = new AppBirthdayGiftVo();
                            memberGiftRecord = new MemberGiftRecord();
                            birthdayGiftSendDto = new BirthdayGiftSendDto();
                            BeanUtils.copyProperties(birthdayGift, memberGiftRecord);
                            memberGiftRecord.setGiftFrom(2);
                            memberGiftRecord.setShopId(shopId);
                            memberGiftRecord.setGiftYear(currentYear);
                            memberGiftRecord.setCreateTime(new Date());
                            memberGiftRecord.setUserId(userId);
                            birthdayGiftSendDto.setUserId(userId);
                            birthdayGiftSendDto.setGiftFrom(2);
                            birthdayGiftSendDto.setShopId(shopId);
                            birthdayGiftSendDto.setGiftType(birthdayGift.getGiftType());
                            switch (birthdayGift.getGiftType()) {
                                case 1:
                                    // 礼物类型为1,即优惠券
                                    appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                    appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                    birthdayGiftSendDto.setCouponId(birthdayGift.getCouponId());
                                    birthdayGiftSendDto.setCouponNumber(birthdayGift.getCouponNumber());
                                    sendGoodsList.add(birthdayGiftSendDto);
                                    break;
                                case 2:
                                    // 礼物类型为2,即商品
                                    appBirthdayGiftVo.setGiftName(birthdayGift.getGoodsName());
                                    appBirthdayGiftVo.setGiftNumber(birthdayGift.getGoodsNumber());
                                    birthdayGiftSendDto.setGoodsId(birthdayGift.getGoodsId());
                                    birthdayGiftSendDto.setCouponNumber(birthdayGift.getGoodsNumber());
                                    sendCouponList.add(birthdayGiftSendDto);
                                    break;
                                case 3:
                                    // 礼物类型为3,即现金
                                    appBirthdayGiftVo.setGiftName("现金");
                                    appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                                    break;
                                case 4:
                                    // 礼物类型为4,即礼品
                                    appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                    appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                    break;
                                default:
                                    break;
                            }
                            birthdayGiftVoList.add(appBirthdayGiftVo);
                            memberGiftRecordList.add(memberGiftRecord);
                        }
                    }
                }
            }
        }
        //发放奖品
        remoteOrderService.sendGoodsGift(sendGoodsList);
        remoteCouponService.sendCouponGift(sendCouponList);
        //保存用户礼物记录
        memberGiftRecordService.saveBatch(memberGiftRecordList);
        appBirthdayCardVo.setBirthdayGiftVoList(birthdayGiftVoList);
        return appBirthdayCardVo;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -13,6 +13,7 @@
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.system.api.domain.poji.member.MemberCoupon;
@@ -88,7 +89,7 @@
        List<MgtCouponPageVo> mgtCouponPageVoList = couponMapper.pageMgtCoupon(page, mgtCouponPageDto);
        //处理使用限制和有效期
        if(mgtCouponPageVoList!=null&&!mgtCouponPageVoList.isEmpty()){
            Integer couponType;
            String couponType;
            Integer validTimeType;
            Date validStartTime;
            Date validEndTime;
@@ -101,20 +102,10 @@
            for(MgtCouponPageVo mgtCouponPageVo : mgtCouponPageVoList){
                //处理使用限制
                couponType = mgtCouponPageVo.getCouponType();
                switch (couponType){
                    case 1:
                        moneyThreshold = mgtCouponPageVo.getMoneyThreshold();
                        discountMoney = mgtCouponPageVo.getDiscountMoney();
                        useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元";
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    default:
                        break;
                if(couponType.equals("满减")){
                    moneyThreshold = mgtCouponPageVo.getMoneyThreshold();
                    discountMoney = mgtCouponPageVo.getDiscountMoney();
                    useLimit = "满" + moneyThreshold.toString() + "减" + discountMoney.toString() + "元";
                }
                mgtCouponPageVo.setUseLimit(useLimit);
                //处理有效期
@@ -160,19 +151,20 @@
                        mgtCouponGoodsListVo.setGoodsId(goods.getGoodsId());
                        mgtCouponGoodsListVo.setGoodsName(goods.getGoodsName());
                        mgtCouponGoodsListVo.setGoodsNo(goods.getGoodsNo());
                        mgtCouponGoodsListVo.setGoodsType(goods.getGoodsType());
                        //商品类型1周期2服务3体验4单品
                        switch (goods.getGoodsType()){
                            case 1:
                                mgtCouponGoodsListVo.setGoodsType("周期");
                                mgtCouponGoodsListVo.setGoodsTypeName("周期");
                                break;
                            case 2:
                                mgtCouponGoodsListVo.setGoodsType("服务");
                                mgtCouponGoodsListVo.setGoodsTypeName("服务");
                                break;
                            case 3:
                                mgtCouponGoodsListVo.setGoodsType("体验");
                                mgtCouponGoodsListVo.setGoodsTypeName("体验");
                                break;
                            case 4:
                                mgtCouponGoodsListVo.setGoodsType("单品");
                                mgtCouponGoodsListVo.setGoodsTypeName("单品");
                                break;
                            default:
                                break;
@@ -544,19 +536,20 @@
                        mgtCouponGoodsListVo.setGoodsId(goods.getGoodsId());
                        mgtCouponGoodsListVo.setGoodsName(goods.getGoodsName());
                        mgtCouponGoodsListVo.setGoodsNo(goods.getGoodsNo());
                        mgtCouponGoodsListVo.setGoodsType(goods.getGoodsType());
                        //商品类型1周期2服务3体验4单品
                        switch (goods.getGoodsType()){
                            case 1:
                                mgtCouponGoodsListVo.setGoodsType("周期");
                                mgtCouponGoodsListVo.setGoodsTypeName("周期");
                                break;
                            case 2:
                                mgtCouponGoodsListVo.setGoodsType("服务");
                                mgtCouponGoodsListVo.setGoodsTypeName("服务");
                                break;
                            case 3:
                                mgtCouponGoodsListVo.setGoodsType("体验");
                                mgtCouponGoodsListVo.setGoodsTypeName("体验");
                                break;
                            case 4:
                                mgtCouponGoodsListVo.setGoodsType("单品");
                                mgtCouponGoodsListVo.setGoodsTypeName("单品");
                                break;
                            default:
                                break;
@@ -832,4 +825,57 @@
        coupon.setUpdateTime(new Date());
        this.saveOrUpdate(coupon);
    }
    /**
     * @description  发送用户优惠券礼物
     * @author  jqs
     * @date    2023/7/7 19:54
     * @param giftSendDtoList
     * @return  void
     */
    @Override
    public void sendCouponGift(List<BirthdayGiftSendDto> giftSendDtoList){
        Long userId = giftSendDtoList.get(0).getUserId();
        Long shopId = giftSendDtoList.get(0).getShopId();
        String couponId;
        Coupon coupon;
        List<MemberCoupon> memberCouponList = new ArrayList<>();
        MemberCoupon memberCoupon;
        String memberCouponId;
        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()));
            }
            memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
            memberCouponList.add(memberCoupon);
        }
        memberCouponService.saveBatch(memberCouponList);
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -151,4 +151,5 @@
        Integer total = this.count(queryWrapper);
        return total;
    }
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -1,7 +1,7 @@
package com.ruoyi.member.service.member;
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
import com.ruoyi.system.api.domain.vo.MerVerifyCouponGetVo;
@@ -48,8 +48,10 @@
     * @author  jqs
     * @date    2023/6/29 11:43
     * @param userId
 * @param couponId
     * @param couponId
     * @return  Integer
     */
    Integer totalMemberCouponByUserAndCoupon(Long userId,String couponId);
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberGiftRecordService.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.member.service.member;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.member.domain.pojo.member.MemberGiftRecord;
import java.util.List;
/**
 * <p>
 * 生日卡 服务类
 * </p>
 *
 * @author jqs
 * @since 2023-07-07
 */
public interface MemberGiftRecordService extends IService<MemberGiftRecord> {
    /**
     * @description  通过用户和日期获取礼物记录
     * @author  jqs
     * @date    2023/7/7 17:26
     * @param userId
     * @param giftYear
     * @return  List<MemberGiftRecord>
     */
    List<MemberGiftRecord> listByUserIdAndYear(Long userId,String giftYear);
}
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -177,7 +177,7 @@
        tc.create_time  createTime
        FROM t_coupon tc
        LEFT JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id
        WHERE tc.del_flag = 0 AND tc.coupon_status = 2
        WHERE tc.del_flag = 0 AND tc.audit_status = 2
        <if test="param.shopId==null">
            AND tc.coupon_from = 1
        </if>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponRelUserMapper.xml
@@ -72,6 +72,6 @@
        FROM
            t_coupon_rel_user tcru
                INNER JOIN t_member tm ON tm.user_id = tcru.user_id
        WHERE tm.del_flag = 0 AND tcru.coupon_id = #{couponId}
        WHERE tm.del_flag = 0 AND tcru.del_flag = 0 AND tcru.coupon_id = #{couponId}
    </select>
</mapper>
ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberGiftRecordMapper.xml
New file
@@ -0,0 +1,7 @@
<?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.member.MemberGiftRecordMapper">
</mapper>
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java
@@ -1,7 +1,9 @@
package com.ruoyi.order.controller.concole;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.service.order.ConsumerGoodsService;
import com.ruoyi.order.service.order.OrderService;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MerBaseDto;
import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto;
import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
@@ -30,6 +32,9 @@
    @Resource
    private OrderService orderService;
    @Resource
    private ConsumerGoodsService consumerGoodsService;
    @PostMapping("/getAppOrderTotal")
@@ -89,4 +94,16 @@
        return R.ok(unpaidMoney);
    }
    /**
     * @description  发送用户商品礼物
     * @author  jqs
     * @date    2023/7/7 19:53
     * @param giftSendDtoList
     * @return  R
     */
    @PostMapping("/sendGoodsGift")
    public R sendGoodsGift(@RequestBody List<BirthdayGiftSendDto> giftSendDtoList){
        consumerGoodsService.sendGoodsGift(giftSendDtoList);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/OrderGoods.java
@@ -62,6 +62,9 @@
     */
    @TableField("goods_price")
    private BigDecimal goodsPrice;
    @TableField("goods_deposit")
    private BigDecimal goodsDeposit;
    /**
     * 商品总价
     */
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ConsumerGoodsServiceImpl.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.order.domain.dto.*;
import com.ruoyi.order.domain.pojo.order.ConsumerGoods;
import com.ruoyi.order.domain.pojo.order.UserServiceRecord;
@@ -16,15 +17,22 @@
import com.ruoyi.order.service.order.ConsumerGoodsService;
import com.ruoyi.order.service.order.UserServiceRecordService;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.AppShopGoodsGetDto;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto;
import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto;
import com.ruoyi.system.api.domain.poji.goods.Goods;
import com.ruoyi.system.api.domain.poji.goods.GoodsFile;
import com.ruoyi.system.api.domain.poji.goods.ShopGoods;
import com.ruoyi.system.api.service.RemoteGoodsService;
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * <p>
@@ -48,6 +56,9 @@
    @Resource
    private RemoteShopService remoteShopService;
    @Resource
    private RemoteGoodsService remoteGoodsService;
    /**
     * 获取用户服务
@@ -147,7 +158,7 @@
    }
    /**
     * 确认商品次数
     * 消费服务商品
     * @param merSureConsumerGoodsDto
     */
    @Override
@@ -286,4 +297,143 @@
    public MerMemberConsumerGoodsTotalVo getMemberConsumerGoodsTotalVo(Long userId, Long shopId){
        return consumerGoodsMapper.getMemberConsumerGoodsTotalVo(userId, shopId);
    }
    /**
     * @description  发放用户商品礼物
     * @author  jqs
     * @date    2023/7/7 18:51
     * @param giftSendDtoList
     * @return  void
     */
    @Override
    public void sendGoodsGift(List<BirthdayGiftSendDto> giftSendDtoList){
        // 使用StringJoiner拼接goodsId
        StringJoiner goodsSj = new StringJoiner(",");
        for (BirthdayGiftSendDto birthdayGiftSendDto : giftSendDtoList) {
            goodsSj.add(birthdayGiftSendDto.getGoodsId());
        }
        String goodsIds = goodsSj.toString();
        // 获取商品列表
        List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIds).getData();
        // 初始化变量
        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
        Map<String, Goods> goodsMap = goodsList.stream()
                .collect(Collectors.toMap(Goods::getGoodsId, Function.identity()));
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
        Goods goods;
        String goodsId;
        GoodsFile goodsFile;
        AppShopGoodsGetDto appShopGoodsGetDto;
        ShopGoods shopGoods = null;
        // 遍历giftSendDtoList
        for (BirthdayGiftSendDto birthdayGiftSendDto : giftSendDtoList) {
            goodsId = birthdayGiftSendDto.getGoodsId();
            goods = goodsMap.get(goodsId);
            goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
            // 获取商户服务次数
            if (birthdayGiftSendDto.getGiftFrom() == 2) {
                appShopGoodsGetDto = new AppShopGoodsGetDto();
                appShopGoodsGetDto.setGoodsId(goodsId);
                appShopGoodsGetDto.setShopId(birthdayGiftSendDto.getShopId());
                shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
            }
            // 根据goodsNumber创建ConsumerGoods对象并添加到列表中
            for (int i = 0; i < birthdayGiftSendDto.getGoodsNumber(); i++) {
                consumerGoods = new ConsumerGoods();
                consumerGoodsId = IdUtils.simpleUUID();
                consumerGoods.setConsumerGoodsId(consumerGoodsId);
                consumerGoods.setDelFlag(0);
                consumerGoods.setServiceStatus(1);
                consumerGoods.setShopId(birthdayGiftSendDto.getShopId());
                consumerGoods.setUserId(birthdayGiftSendDto.getUserId());
                consumerGoods.setGoodsId(goodsId);
                consumerGoods.setGoodsName(goods.getGoodsName());
                consumerGoods.setCycleNumFlag(goods.getCycleNumFlag());
                consumerGoods.setServiceNum(goods.getServiceNum());
                consumerGoods.setUsedNum(0);
                consumerGoods.setCreateTime(new Date());
                consumerGoods.setGoodsType(goods.getGoodsType());
                consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
                consumerGoods.setGoodsPicture(goodsFile.getFileUrl());
                consumerGoods.setGoodsNurses(goods.getGoodsNurses());
                consumerGoods.setSourceFrom(3);
                // 如果shopGoods不为空,则使用shopGoods的serviceNum
                if (shopGoods != null) {
                    consumerGoods.setServiceNum(shopGoods.getServiceNum());
                }
                consumerGoodsList.add(consumerGoods);
            }
        }
        // 批量保存consumerGoodsList
        this.saveBatchConsumerGoods(consumerGoodsList);
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/7/7 19:31
     * @param consumerGoodsList
     * @return  boolean
     */
    @Override
    public boolean saveBatchConsumerGoods(List<ConsumerGoods> consumerGoodsList){
        Integer serviceCount = 0;
        Integer cycleService = 0;
        Integer cyclePerson = 0;
        Integer serviceService = 0;
        Integer servicePerson = 0;
        Integer experienceService = 0;
        Integer experiencePerson = 0;
        Long shopId = consumerGoodsList.get(0).getShopId();
        Long userId = consumerGoodsList.get(0).getUserId();
        MerMemberConsumerGoodsTotalVo memberConsumerGoodsTotalVo = this.getMemberConsumerGoodsTotalVo(userId, shopId);
        for(ConsumerGoods consumerGoods : consumerGoodsList){
            //处理商品服务次数
            switch (consumerGoods.getGoodsType()) {
                case 1:
                    cycleService = cycleService + consumerGoods.getServiceNum();
                    break;
                case 2:
                    serviceService = serviceService + consumerGoods.getServiceNum();
                    break;
                case 3:
                    experienceService = experienceService + consumerGoods.getServiceNum();
                    break;
                default:
                    break;
            }
        }
        //判断是否加人
        if (cycleService > 0 && memberConsumerGoodsTotalVo.getCycleOrder() == 0) {
            cyclePerson = 1;
        }
        if (serviceService > 0 && memberConsumerGoodsTotalVo.getServiceOrder() == 0) {
            servicePerson = 1;
        }
        if (experienceService > 0 && memberConsumerGoodsTotalVo.getExperienceOrder() == 0) {
            experiencePerson = 1;
        }
        serviceCount = cycleService + serviceService + experienceService;
        //更新商户和会员服务统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(userId);
        memberTotalChangeDto.setTypeService(1);
        memberTotalChangeDto.setServiceCount(serviceCount);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(shopId);
        shopTotalChangeDto.setTypeCycleService(1);
        shopTotalChangeDto.setCycleService(cycleService);
        shopTotalChangeDto.setCyclePerson(cyclePerson);
        shopTotalChangeDto.setTypeServiceService(1);
        shopTotalChangeDto.setServiceService(serviceService);
        shopTotalChangeDto.setServicePerson(servicePerson);
        shopTotalChangeDto.setTypeExperienceService(1);
        shopTotalChangeDto.setExperienceService(experienceService);
        shopTotalChangeDto.setExperiencePerson(experiencePerson);
        remoteShopService.changeShopTotal(shopTotalChangeDto);
        return this.saveBatch(consumerGoodsList);
    }
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -210,14 +210,14 @@
    }
    /**
     * @description  抢购商品
     * @author  jqs
     * @date    2023/7/6 11:45
     * @param appPanicBuyDto
     * @return  AppSureOrderVo
     * @return AppSureOrderVo
     * @description 抢购商品
     * @author jqs
     * @date 2023/7/6 11:45
     */
    @Override
    public AppPanicBuyVo panicBuyGoods(AppPanicBuyDto appPanicBuyDto){
    public AppPanicBuyVo panicBuyGoods(AppPanicBuyDto appPanicBuyDto) {
        Long userId = appPanicBuyDto.getUserId();
        AppPanicBuyVo appPanicBuyVo = new AppPanicBuyVo();
        String activityId = appPanicBuyDto.getActivityId();
@@ -238,13 +238,13 @@
        activityGoodsGetDto.setGoodsId(goodsId);
        activityGoodsGetDto.setUserId(userId);
        ActivityGoodsGetVo activityGoodsGetVo = remoteActivityService.getUserActivityGoods(activityGoodsGetDto).getData();
        if(activityGoodsGetVo.getActivityStatus()==0){
        if (activityGoodsGetVo.getActivityStatus() == 0) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_NO_START);
        }
        if(activityGoodsGetVo.getActivityStatus()==2){
        if (activityGoodsGetVo.getActivityStatus() == 2) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_END);
        }
        if(activityGoodsGetVo.getAvailableBuyNum()<1){
        if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
        }
        Goods goods = remoteGoodsService.getGoods(goodsId).getData();
@@ -295,11 +295,16 @@
     */
    @Override
    public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) {
        // 获取用户ID
        Long userId = appPlaceOrderDto.getUserId();
        // 创建下单视图对象
        AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
        // 创建商品列表
        List<AppSureOrderGoodsVo> appSureOrderGoodsVoList = new ArrayList<>();
        AppSureOrderGoodsVo appSureOrderGoodsVo;
        // 获取购买的商品列表
        List<AppBuyGoodsDto> appBuyGoodsDtoList = appPlaceOrderDto.getAppBuyGoodsDtoList();
        // 初始化变量
        String goodsId;
        Integer buyNum;
        BigDecimal buyNumBig;
@@ -311,7 +316,9 @@
        BigDecimal goodsPrice;
        BigDecimal goodsTotalPrice;
        BigDecimal goodsRealPrice;
        // 获取用户优惠券列表
        List<AppMemberCouponVo> appMemberCouponVoList = remoteCouponService.listVoMemberCouponByUserId(userId).getData();
        // 将用户优惠券列表转换为Map,方便后续查找
        Map<String, AppMemberCouponVo> appMemberCouponVoMap = appMemberCouponVoList.stream().collect(Collectors.toMap(AppMemberCouponVo::getMemberCouponId, Function.identity()));
        AppMemberCouponVo appMemberCouponVo;
        Integer couponType;
@@ -324,45 +331,58 @@
        BigDecimal couponDiscount = new BigDecimal("0.00");
        BigDecimal orderPayDeposit = new BigDecimal("0.00");
        BigDecimal orderPayMoney = new BigDecimal("0.00");
        // 创建订单ID和订单号
        String orderId = IdUtils.simpleUUID();
        String orderNo = CodeFactoryUtil.getShopOrderNo();
        OrderGoods orderGoods;
        String orderGoodsId;
        // 创建商品类型集合,用于记录订单中所有商品的类型
        HashSet<String> goodsTypeSet = new HashSet<>();
        // 遍历购买的商品列表
        for (AppBuyGoodsDto appBuyGoodsDto : appBuyGoodsDtoList) {
            appSureOrderGoodsVo = new AppSureOrderGoodsVo();
            useCoupon = 0;
            // 获取商品ID和优惠券ID
            goodsId = appBuyGoodsDto.getGoodsId();
            memberCouponId = appBuyGoodsDto.getMemberCouponId();
            // 获取商品信息
            goods = remoteGoodsService.getGoods(goodsId).getData();
            // 设置商品信息
            appSureOrderGoodsVo.setGoodsId(goodsId);
            appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
            appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction());
            appSureOrderGoodsVo.setGoodsType(goods.getGoodsType());
            //商品图片
            // 获取商品图片
            goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData();
            appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl());
            // 获取购买数量
            buyNum = appBuyGoodsDto.getBuyNum();
            appSureOrderGoodsVo.setBuyNum(buyNum);
            // 获取商品价格和服务数量
            goodsPrice = goods.getSalesPrice();
            serviceNum = goods.getServiceNum();
            //商户定制价格
            // 获取商户定制价格
            AppShopGoodsGetDto appShopGoodsGetDto = new AppShopGoodsGetDto();
            appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
            appShopGoodsGetDto.setShopId(appPlaceOrderDto.getShopId());
            ShopGoods shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
            // 如果商户定制价格存在,则使用商户定制价格和服务数量
            if (shopGoods != null) {
                goodsPrice = shopGoods.getSalesPrice();
                serviceNum = shopGoods.getServiceNum();
            }
            appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
            // 计算商品总价
            buyNumBig = BigDecimal.valueOf(buyNum);
            goodsTotalPrice = goodsPrice.multiply(buyNumBig);
            goodsRealPrice = goodsTotalPrice;
            // 如果使用了优惠券,计算优惠后的价格
            if (memberCouponId != null) {
                appMemberCouponVo = appMemberCouponVoMap.get(memberCouponId);
                // 如果优惠券适用于该商品
                if (StringUtils.isBlank(appMemberCouponVo.getRelGoodsIds()) || appMemberCouponVo.getRelGoodsIds().contains(goodsId)) {
                    couponType = appMemberCouponVo.getCouponType();
                    // 根据优惠券类型计算优惠后的价格
                    if (couponType == 1 && appMemberCouponVo.getMoneyThreshold() != null && appMemberCouponVo.getDiscountMoney() != null) {
                        moneyThreshold = appMemberCouponVo.getMoneyThreshold();
                        if (goodsTotalPrice.compareTo(moneyThreshold) >= 0) {
@@ -386,17 +406,19 @@
            appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
            appSureOrderGoodsVo.setCouponDiscount(discountMoney);
            appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
            // 获取商品押金
            goodsDeposit = goods.getSubscription();
            if (goodsDeposit == null) {
                goodsDeposit = new BigDecimal("0.00");
            }
            appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
            // 计算商品总数量、商品总价、优惠总金额、支付押金、支付金额
            goodsNum = goodsNum + buyNum;
            orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
            couponDiscount = couponDiscount.add(discountMoney);
            orderPayDeposit = orderPayDeposit.add(goodsDeposit);
            orderPayMoney = orderPayMoney.add(goodsRealPrice);
            //创建OrderGoods
            // 创建订单商品
            orderGoods = new OrderGoods();
            orderGoodsId = IdUtils.simpleUUID();
            orderGoods.setOrderGoodsId(orderGoodsId);
@@ -408,6 +430,7 @@
                orderGoods.setCouponId(memberCouponId.toString());
            }
            orderGoods.setGoodsPrice(goodsPrice);
            orderGoods.setGoodsDeposit(goodsDeposit);
            orderGoods.setGoodsTotalMoney(orderGoodsMoney);
            orderGoods.setGoodsReceivableMoney(goodsRealPrice);
            orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
@@ -415,12 +438,14 @@
            orderGoods.setGoodsType(goods.getGoodsType());
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
            // 保存订单商品
            orderGoodsService.save(orderGoods);
            //清空购物车
            // 清空购物车
            AppShoppingCartDelDto appShoppingCartDelDto = new AppShoppingCartDelDto();
            appShoppingCartDelDto.setGoodsId(goodsId);
            appShoppingCartDelDto.setUserId(userId);
            remoteShoppingCartService.deleteShoppingCart(appShoppingCartDelDto);
            // 记录商品类型
            if (goods.getGoodsType() == 1) {
                goodsTypeSet.add("周期");
            } else if (goods.getGoodsType() == 2) {
@@ -431,10 +456,10 @@
                goodsTypeSet.add("单品");
            }
        }
        // 创建订单
        Order order = new Order();
        order.setOrderId(orderId);
        order.setDelFlag(0);
        //为对接支付 直接付款成功
        order.setOrderStatus(1);
        order.setOrderNo(orderNo);
        order.setOrderFrom(1);
@@ -447,6 +472,7 @@
        order.setReceivableDeposit(orderPayDeposit);
        order.setChangeReceivableMoney(orderPayMoney);
        order.setPayType(appPlaceOrderDto.getPayType());
        // 根据支付类型计算支付金额
        if (order.getPayType() == 1) {
            order.setPayMoney(orderPayMoney);
            order.setOnlinePayMoney(orderPayMoney);
@@ -463,8 +489,9 @@
        order.setOrderRemark(appPlaceOrderDto.getOrderRemark());
        order.setGoodsNum(goodsNum);
        order.setCreateTime(new Date());
        // 保存订单
        this.save(order);
        //更新用户商品类型
        // 更新用户商品类型
        if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
            AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
            appMemberGoodsTypeDto.setUserId(userId);
@@ -473,31 +500,33 @@
        }
        appPlaceOrderVo.setOrderId(orderId);
        appPlaceOrderVo.setOrderNo(orderNo);
        //调用支付
        // 调用支付
        return appPlaceOrderVo;
    }
    /**
     * @description  创建活动订单
     * @author  jqs
     * @date    2023/7/6 17:59
     * @param appPlaceActivityDto
     * @return  AppPlaceOrderVo
     * @return AppPlaceOrderVo
     * @description 创建活动订单
     * @author jqs
     * @date 2023/7/6 17:59
     */
    @Override
    public AppPlaceOrderVo placeActivityOrder( AppPlaceActivityDto appPlaceActivityDto){
    public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) {
        Long userId = appPlaceActivityDto.getUserId();
        // 创建订单对象
        AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo();
        // 定义商品订单对象
        AppSureOrderGoodsVo appSureOrderGoodsVo;
        // 获取活动ID,商品ID,购买数量
        String activityId = appPlaceActivityDto.getActivityId();
        String goodsId = appPlaceActivityDto.getGoodsId();
        Integer buyNum = appPlaceActivityDto.getBuyNum();
        // 定义购买数量,服务数量,商品数量
        BigDecimal buyNumBig;
        Integer serviceNum;
        Integer goodsNum = 0;
        // 定义商品,商品文件,商品价格,商品总价,商品实际价格,折扣金额,折扣百分比,商品押金,使用优惠券,订单商品金额,优惠券折扣,订单支付押金,订单支付金额
        Goods goods;
        GoodsFile goodsFile;
        BigDecimal goodsPrice;
@@ -511,25 +540,32 @@
        BigDecimal couponDiscount = new BigDecimal("0.00");
        BigDecimal orderPayDeposit = new BigDecimal("0.00");
        BigDecimal orderPayMoney = new BigDecimal("0.00");
        // 创建活动商品对象,并设置活动ID,商品ID,用户ID
        ActivityGoodsGetDto activityGoodsGetDto = new ActivityGoodsGetDto();
        activityGoodsGetDto.setActivityId(activityId);
        activityGoodsGetDto.setGoodsId(goodsId);
        activityGoodsGetDto.setUserId(userId);
        // 获取用户活动商品
        ActivityGoodsGetVo activityGoodsGetVo = remoteActivityService.getUserActivityGoods(activityGoodsGetDto).getData();
        if(activityGoodsGetVo.getActivityStatus()==0){
        // 检查活动状态
        if (activityGoodsGetVo.getActivityStatus() == 0) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_NO_START);
        }
        if(activityGoodsGetVo.getActivityStatus()==2){
        if (activityGoodsGetVo.getActivityStatus() == 2) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_END);
        }
        if(activityGoodsGetVo.getAvailableBuyNum()<1){
        if (activityGoodsGetVo.getAvailableBuyNum() < 1) {
            throw new ServiceException(AppErrorConstant.ACTIVITY_GOODS_NULL);
        }
        // 创建订单ID和订单号
        String orderId = IdUtils.simpleUUID();
        String orderNo = CodeFactoryUtil.getShopOrderNo();
        // 创建订单商品对象和订单商品ID
        OrderGoods orderGoods;
        String orderGoodsId;
        // 创建商品类型集合
        HashSet<String> goodsTypeSet = new HashSet<>();
        // 创建商品订单对象,并设置商品ID,商品名称,商品介绍,商品类型
        appSureOrderGoodsVo = new AppSureOrderGoodsVo();
        useCoupon = 0;
        goodsId = appPlaceActivityDto.getGoodsId();
@@ -538,34 +574,38 @@
        appSureOrderGoodsVo.setGoodsName(goods.getGoodsName());
        appSureOrderGoodsVo.setGoodsIntroduction(goods.getGoodsIntroduction());
        appSureOrderGoodsVo.setGoodsType(goods.getGoodsType());
        //商品图片
        // 获取商品图片
        goodsFile = remoteGoodsService.getGoodsFile(goodsId).getData();
        appSureOrderGoodsVo.setGoodsPicture(goodsFile.getFileUrl());
        buyNum = appPlaceActivityDto.getBuyNum();
        // 设置购买数量,商品价格,服务数量
        appSureOrderGoodsVo.setBuyNum(buyNum);
        goodsPrice = goods.getSalesPrice();
        serviceNum = goods.getServiceNum();
        //活动价格
        // 获取活动价格
        goodsPrice = activityGoodsGetVo.getActivityPrice();
        appSureOrderGoodsVo.setGoodsPrice(goodsPrice);
        // 计算商品总价,商品实际价格
        buyNumBig = BigDecimal.valueOf(buyNum);
        goodsTotalPrice = goodsPrice.multiply(buyNumBig);
        goodsRealPrice = goodsTotalPrice;
        // 设置使用优惠券,商品总价,优惠券折扣,商品实际价格
        appSureOrderGoodsVo.setUseCoupon(useCoupon);
        appSureOrderGoodsVo.setGoodsTotalPrice(goodsTotalPrice);
        appSureOrderGoodsVo.setCouponDiscount(discountMoney);
        appSureOrderGoodsVo.setGoodsRealPrice(goodsRealPrice);
        goodsDeposit = goods.getSubscription();
        // 获取商品押金
        goodsDeposit = activityGoodsGetVo.getActivitySubscription();
        if (goodsDeposit == null) {
            goodsDeposit = new BigDecimal("0.00");
        }
        appSureOrderGoodsVo.setGoodsDeposit(goodsDeposit);
        // 计算商品数量,订单商品金额,优惠券折扣,订单支付押金,订单支付金额
        goodsNum = goodsNum + buyNum;
        orderGoodsMoney = orderGoodsMoney.add(goodsTotalPrice);
        couponDiscount = couponDiscount.add(discountMoney);
        orderPayDeposit = orderPayDeposit.add(goodsDeposit);
        orderPayMoney = orderPayMoney.add(goodsRealPrice);
        //创建OrderGoods
        // 创建订单商品,并设置订单商品ID,删除标志,订单ID,商品ID,购买数量,商品价格,商品押金,商品总金额,商品应收金额,周期数量标志,服务数量,商品类型,商品名称,商品图片
        orderGoods = new OrderGoods();
        orderGoodsId = IdUtils.simpleUUID();
        orderGoods.setOrderGoodsId(orderGoodsId);
@@ -574,6 +614,7 @@
        orderGoods.setGoodsId(goodsId);
        orderGoods.setBuyNum(buyNum);
        orderGoods.setGoodsPrice(goodsPrice);
        orderGoods.setGoodsDeposit(goodsDeposit);
        orderGoods.setGoodsTotalMoney(orderGoodsMoney);
        orderGoods.setGoodsReceivableMoney(goodsRealPrice);
        orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
@@ -581,12 +622,14 @@
        orderGoods.setGoodsType(goods.getGoodsType());
        orderGoods.setGoodsName(goods.getGoodsName());
        orderGoods.setGoodsPicture(goodsFile.getFileUrl());
        // 保存订单商品
        orderGoodsService.save(orderGoods);
        //清空购物车
        // 清空购物车
        AppShoppingCartDelDto appShoppingCartDelDto = new AppShoppingCartDelDto();
        appShoppingCartDelDto.setGoodsId(goodsId);
        appShoppingCartDelDto.setUserId(userId);
        remoteShoppingCartService.deleteShoppingCart(appShoppingCartDelDto);
        // 根据商品类型添加到商品类型集合中
        if (goods.getGoodsType() == 1) {
            goodsTypeSet.add("周期");
        } else if (goods.getGoodsType() == 2) {
@@ -596,11 +639,10 @@
        } else if (goods.getGoodsType() == 4) {
            goodsTypeSet.add("单品");
        }
        // 创建订单,并设置订单ID,删除标志,订单状态,订单号,订单来源,店铺ID,用户ID,订单金额,优惠券金额,折扣金额,应收金额,应收押金,变动应收金额,支付类型
        Order order = new Order();
        order.setOrderId(orderId);
        order.setDelFlag(0);
        //为对接支付 直接付款成功
        order.setOrderStatus(1);
        order.setOrderNo(orderNo);
        order.setOrderFrom(1);
@@ -613,6 +655,7 @@
        order.setReceivableDeposit(orderPayDeposit);
        order.setChangeReceivableMoney(orderPayMoney);
        order.setPayType(appPlaceActivityDto.getPayType());
        // 根据支付类型设置订单支付金额,在线支付金额,订单支付金额,未支付金额,关闭标志
        if (order.getPayType() == 1) {
            order.setPayMoney(orderPayMoney);
            order.setOnlinePayMoney(orderPayMoney);
@@ -626,26 +669,25 @@
            appPlaceOrderVo.setUnpaidMoney(order.getReceivableMoney().subtract(order.getPayMoney()));
            order.setCloseFlag(0);
        }
        // 设置订单备注,商品数量,创建时间
        order.setOrderRemark(appPlaceActivityDto.getOrderRemark());
        order.setGoodsNum(goodsNum);
        order.setCreateTime(new Date());
        // 保存订单
        this.save(order);
        //更新用户商品类型
        // 更新用户商品类型
        if (goodsTypeSet != null && goodsTypeSet.size() > 0) {
            AppMemberGoodsTypeDto appMemberGoodsTypeDto = new AppMemberGoodsTypeDto();
            appMemberGoodsTypeDto.setUserId(userId);
            appMemberGoodsTypeDto.setGoodsTypeSet(goodsTypeSet);
            remoteMemberService.updateMemberGoodsType(appMemberGoodsTypeDto);
        }
        // 设置订单ID和订单号
        appPlaceOrderVo.setOrderId(orderId);
        appPlaceOrderVo.setOrderNo(orderNo);
        //调用支付
        // 调用支付
        return appPlaceOrderVo;
    }
    /**
@@ -778,15 +820,15 @@
     * @return
     */
    @Override
    public MerVerifyOrderVo verifyOrder(String orderId,Long shopId) {
    public MerVerifyOrderVo verifyOrder(String orderId, Long shopId) {
        // 创建返回对象
        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
        // 根据订单ID获取订单信息
        Order order = this.getById(orderId);
        if(order.getOrderStatus()!=2){
        if (order.getOrderStatus() != 2) {
            throw new ServiceException(AppErrorConstant.VERIFY_USED);
        }
        if(!order.getShopId().equals(shopId)){
        if (!order.getShopId().equals(shopId)) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        // 根据订单ID获取订单商品列表
@@ -829,7 +871,7 @@
        Date nowTime = new Date();
        //更新订单信息
        Order order = this.getById(orderId);
        if(order.getOrderStatus()!=2){
        if (order.getOrderStatus() != 2) {
            throw new ServiceException(AppErrorConstant.VERIFY_USED);
        }
        order.setOrderStatus(3);
@@ -854,14 +896,7 @@
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
        Goods goods;
        Integer serviceCount = 0;
        Integer cycleService = 0;
        Integer cyclePerson = 0;
        Integer serviceService = 0;
        Integer servicePerson = 0;
        Integer experienceService = 0;
        Integer experiencePerson = 0;
        MerMemberConsumerGoodsTotalVo memberConsumerGoodsTotalVo = consumerGoodsService.getMemberConsumerGoodsTotalVo(order.getUserId(), order.getShopId());
        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
        for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) {
            consumerGoods = new ConsumerGoods();
            goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId());
@@ -884,35 +919,9 @@
            consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture());
            consumerGoods.setGoodsNurses(goods.getGoodsNurses());
            consumerGoods.setSourceFrom(1);
            consumerGoodsService.save(consumerGoods);
            //处理商品服务次数
            if (consumerGoods.getCycleNumFlag() == 1) {
                switch (goods.getGoodsType()) {
                    case 1:
                        cycleService = cycleService + appUserOrderGoodsPageVo.getServiceNum();
                        break;
                    case 2:
                        serviceService = serviceService + appUserOrderGoodsPageVo.getServiceNum();
                        break;
                    case 3:
                        experienceService = experienceService + appUserOrderGoodsPageVo.getServiceNum();
                        break;
                    default:
                        break;
                }
            }
            consumerGoodsList.add(consumerGoods);
        }
        //判断是否加人
        if (cycleService > 0 && memberConsumerGoodsTotalVo.getCycleOrder() == 0) {
            cyclePerson = 1;
        }
        if (serviceService > 0 && memberConsumerGoodsTotalVo.getServiceOrder() == 0) {
            servicePerson = 1;
        }
        if (experienceService > 0 && memberConsumerGoodsTotalVo.getExperienceOrder() == 0) {
            experiencePerson = 1;
        }
        serviceCount = cycleService + serviceService + experienceService;
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        //生成返回
        MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo();
        merVerifyOrderVo.setOrderId(orderId);
@@ -932,24 +941,6 @@
        SysUser sysUser = remoteUserService.getSysUser(order.getUserId()).getData();
        merVerifyOrderVo.setUserName(sysUser.getNickName());
        merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber());
        //更新商户和会员服务统计
        MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto();
        memberTotalChangeDto.setUserId(order.getUserId());
        memberTotalChangeDto.setTypeService(1);
        memberTotalChangeDto.setServiceCount(serviceCount);
        remoteMemberService.changeMemberTotal(memberTotalChangeDto);
        ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto();
        shopTotalChangeDto.setShopId(order.getShopId());
        shopTotalChangeDto.setTypeCycleService(1);
        shopTotalChangeDto.setCycleService(cycleService);
        shopTotalChangeDto.setCyclePerson(cyclePerson);
        shopTotalChangeDto.setTypeServiceService(1);
        shopTotalChangeDto.setServiceService(serviceService);
        shopTotalChangeDto.setServicePerson(servicePerson);
        shopTotalChangeDto.setTypeExperienceService(1);
        shopTotalChangeDto.setExperienceService(experienceService);
        shopTotalChangeDto.setExperiencePerson(experiencePerson);
        remoteShopService.changeShopTotal(shopTotalChangeDto);
        return merVerifyOrderVo;
    }
@@ -990,6 +981,9 @@
        ConsumerGoods consumerGoods;
        String consumerGoodsId;
        GoodsFile goodsFile;
        AppShopGoodsGetDto appShopGoodsGetDto;
        ShopGoods shopGoods;
        List<ConsumerGoods> consumerGoodsList = new ArrayList<>();
        for (Goods goods : goodsList) {
            consumerGoods = new ConsumerGoods();
            consumerGoodsId = IdUtils.simpleUUID();
@@ -1004,6 +998,14 @@
            consumerGoods.setGoodsName(goods.getGoodsName());
            consumerGoods.setCycleNumFlag(goods.getCycleNumFlag());
            consumerGoods.setServiceNum(goods.getServiceNum());
            appShopGoodsGetDto = new AppShopGoodsGetDto();
            appShopGoodsGetDto.setGoodsId(goods.getGoodsId());
            appShopGoodsGetDto.setShopId(memberCoupon.getShopId());
            //获取商户服务次数
            shopGoods = remoteGoodsService.getShopGoods(appShopGoodsGetDto).getData();
            if(shopGoods!=null){
                consumerGoods.setServiceNum(shopGoods.getServiceNum());
            }
            consumerGoods.setUsedNum(0);
            consumerGoods.setGoodsType(goods.getGoodsType());
            consumerGoods.setCreateTime(new Date());
@@ -1012,8 +1014,9 @@
            consumerGoods.setGoodsPicture(goodsFile.getFileUrl());
            consumerGoods.setGoodsNurses(goods.getGoodsNurses());
            consumerGoods.setSourceFrom(1);
            consumerGoodsService.save(consumerGoods);
            consumerGoodsList.add(consumerGoods);
        }
        consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList);
        return merVerifyCouponVo;
    }
@@ -1203,7 +1206,7 @@
            orderGoods.setGoodsName(goods.getGoodsName());
            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
            orderGoodsService.save(orderGoods);
            switch(orderGoods.getGoodsType()){
            switch (orderGoods.getGoodsType()) {
                case 1:
                    cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney());
                    break;
@@ -1235,9 +1238,9 @@
        order.setReceivableMoney(orderPayMoney);
        order.setReceivableDeposit(new BigDecimal("0.00"));
        order.setPayType(1);
        if(merNewOrderDto.getChangeMoney()!=null){
        if (merNewOrderDto.getChangeMoney() != null) {
            order.setChangeReceivableMoney(merNewOrderDto.getChangeMoney());
        }else{
        } else {
            order.setChangeReceivableMoney(orderPayMoney);
        }
        order.setPayMoney(orderPayMoney);
@@ -1614,7 +1617,7 @@
            //处理商品信息
            List<MgtOrderGoodsPageVo> mgtOrderGoodsVoList;
            String goodsString;
            for(MgtShopOrderPageVo entity : shopOrderPageVoList){
            for (MgtShopOrderPageVo entity : shopOrderPageVoList) {
                mgtOrderGoodsVoList = entity.getMgtOrderGoodsPageVoList();
                goodsString = mgtOrderGoodsVoList.stream()
                        .map(goods -> goods.getGoodsName() + "*" + goods.getBuyNum())
@@ -2272,7 +2275,7 @@
     * @date 2023/6/27 11:10
     */
    @Override
    public MerVerifyCouponVo verifyCoupon(String verifyCode,Long shopId) {
    public MerVerifyCouponVo verifyCoupon(String verifyCode, Long shopId) {
        // 创建MerVerifyCouponVo对象
        MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo();
        // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象
@@ -2287,7 +2290,7 @@
        } else if (couponStatus != 0) {
            throw new ServiceException(AppErrorConstant.COUPON_NO_FIND);
        }
        if(!memberCoupon.getShopId().equals(shopId)){
        if (!memberCoupon.getShopId().equals(shopId)) {
            throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
        }
        List<Goods> goodsList = verifyCouponGetVo.getGoodsList();
@@ -2313,33 +2316,33 @@
    }
    /**
     * @description  获取用户未支付金额
     * @author  jqs
     * @date    2023/6/29 18:00
     * @param merBaseDto
     * @return  BigDecimal
     * @return BigDecimal
     * @description 获取用户未支付金额
     * @author jqs
     * @date 2023/6/29 18:00
     */
    @Override
    public BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto){
    public BigDecimal getMemberUnpaidOrder(MerBaseDto merBaseDto) {
        BigDecimal unpaidMoney = orderMapper.getMemberUnpaidOrder(merBaseDto);
        return unpaidMoney;
    }
    /**
     * @description  商户获取订单统计
     * @author  jqs
     * @date    2023/7/3 19:29
     * @param merTotalDto
     * @return  MerOrderTotalVo
     * @return MerOrderTotalVo
     * @description 商户获取订单统计
     * @author jqs
     * @date 2023/7/3 19:29
     */
    @Override
    public MerOrderTotalVo getMerOrderTotal(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
    public MerOrderTotalVo getMerOrderTotal(MerTotalDto merTotalDto) {
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
        }
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
@@ -2350,15 +2353,15 @@
    /**
     * @description
     * @author  jqs
     * @date    2023/7/4 9:29
     * @param merTotalDto
     * @return  MerOrderDistributionTotalVo
     * @return MerOrderDistributionTotalVo
     * @description
     * @author jqs
     * @date 2023/7/4 9:29
     */
    @Override
    public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
    public MerOrderDistributionTotalVo MerOrderDistributionTotalVo(MerTotalDto merTotalDto) {
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
@@ -2419,15 +2422,15 @@
    }
    /**
     * @description  商户获取销售占比统计
     * @author  jqs
     * @date    2023/7/4 13:58
     * @param merTotalDto
     * @return  MerOrderTypeTotalVo
     * @return MerOrderTypeTotalVo
     * @description 商户获取销售占比统计
     * @author jqs
     * @date 2023/7/4 13:58
     */
    @Override
    public MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
    public MerOrderTypeTotalVo getMerOrderTypeTotal(MerTotalDto merTotalDto) {
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
@@ -2470,15 +2473,15 @@
    /**
     * @description  商户端获取销售排行
     * @author  jqs
     * @date    2023/7/4 14:23
     * @param merTotalDto
     * @return  MerOrderGoodsRankVo
     * @return MerOrderGoodsRankVo
     * @description 商户端获取销售排行
     * @author jqs
     * @date 2023/7/4 14:23
     */
    @Override
    public MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
    public MerOrderGoodsRankVo getMerOrderGoodsRank(MerTotalDto merTotalDto) {
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
@@ -2494,15 +2497,15 @@
    /**
     * @description  商户端获取渠道排行
     * @author  jqs
     * @date    2023/7/4 14:51
     * @param merTotalDto
     * @return  MerOrderFromRankVo
     * @return MerOrderFromRankVo
     * @description 商户端获取渠道排行
     * @author jqs
     * @date 2023/7/4 14:51
     */
    @Override
    public MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto){
        if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){
    public MerOrderFromRankVo getMerOrderFromRank(MerTotalDto merTotalDto) {
        if (merTotalDto.getShopAllFlag() != null && merTotalDto.getShopAllFlag() == 1) {
            List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData();
            merTotalDto.setShopIdList(shopIdList);
            merTotalDto.setShopId(null);
@@ -2518,29 +2521,29 @@
    }
    /**
     * @description  商户端订单管理统计
     * @author  jqs
     * @date    2023/7/4 16:27
     * @param merBaseDto
     * @return  MerTotalOrderVo
     * @return MerTotalOrderVo
     * @description 商户端订单管理统计
     * @author jqs
     * @date 2023/7/4 16:27
     */
    @Override
    public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto){
    public MerTotalOrderVo totalMerOrder(MerBaseDto merBaseDto) {
        return orderMapper.totalMerOrder(merBaseDto.getShopId());
    }
    /**
     * @description  平台获取商户订单记录
     * @author  jqs
     * @date    2023/7/5 20:17
     * @param page
     * @param mgtShopAllOrderPageDto
     * @return  List<MgtShopAllOrderPageVo>
     * @return List<MgtShopAllOrderPageVo>
     * @description 平台获取商户订单记录
     * @author jqs
     * @date 2023/7/5 20:17
     */
    @Override
    public List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, MgtShopAllOrderPageDto mgtShopAllOrderPageDto){
    public List<MgtShopAllOrderPageVo> pageMgtShopAllOrder(Page page, MgtShopAllOrderPageDto mgtShopAllOrderPageDto) {
        List<MgtShopAllOrderPageVo> shopAllOrderPageVoList = orderMapper.pageMgtShopAllOrder(page, mgtShopAllOrderPageDto);
        if(!shopAllOrderPageVoList.isEmpty()){
        if (!shopAllOrderPageVoList.isEmpty()) {
            // 定义变量
            HashSet<Long> userIdSet = new HashSet<>();
            BigDecimal zeroBig = new BigDecimal("0.00");
@@ -2566,7 +2569,7 @@
                    if (userMap.get(mgtShopOrderPageVo.getUserId()) != null) {
                        userInfo = userMap.get(mgtShopOrderPageVo.getUserId()).getNickName();
                        mobile = userMap.get(mgtShopOrderPageVo.getUserId()).getUserMobile();
                        if(StringUtils.isNotBlank(mobile)){
                        if (StringUtils.isNotBlank(mobile)) {
                            userInfo = userInfo + "(" + mobile + ")";
                        }
                        mgtShopOrderPageVo.setUserInfo(userInfo);
@@ -2576,7 +2579,7 @@
            //处理商品信息
            List<MgtOrderGoodsPageVo> mgtOrderGoodsVoList;
            String goodsString;
            for(MgtShopAllOrderPageVo entity : shopAllOrderPageVoList){
            for (MgtShopAllOrderPageVo entity : shopAllOrderPageVoList) {
                mgtOrderGoodsVoList = entity.getMgtOrderGoodsPageVoList();
                goodsString = mgtOrderGoodsVoList.stream()
                        .map(goods -> goods.getGoodsName() + "*" + goods.getBuyNum())
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ConsumerGoodsService.java
@@ -11,6 +11,7 @@
import com.ruoyi.order.domain.vo.MerConsumerGoodsListVo;
import com.ruoyi.order.domain.vo.MerConsumerGoodsVo;
import com.ruoyi.order.domain.vo.MerMemberConsumerGoodsTotalVo;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import java.util.List;
@@ -46,7 +47,7 @@
    void sureMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto);
    /**
     * 确认商品次数
     * 消费服务商品
     * @param merSureConsumerGoodsDto
     */
    void useMerConsumerGoods(MerSureConsumerGoodsDto merSureConsumerGoodsDto);
@@ -68,4 +69,22 @@
     * @return  MerMemberConsumerGoodsTotalVo
     */
    MerMemberConsumerGoodsTotalVo getMemberConsumerGoodsTotalVo(Long userId, Long shopId);
    /**
     * @description  发放用户商品礼物
     * @author  jqs
     * @date    2023/7/7 18:51
     * @param giftSendDtoList
     * @return  void
     */
    void sendGoodsGift(List<BirthdayGiftSendDto> giftSendDtoList);
    /**
     * @description
     * @author  jqs
     * @date    2023/7/7 19:34
     * @param consumerGoodsList
     * @return  boolean
     */
    boolean saveBatchConsumerGoods(List<ConsumerGoods> consumerGoodsList);
}
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -1128,7 +1128,7 @@
        SELECT
        DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey,
        COUNT(DISTINCT order_id) AS mapValueFirst,
        IFNULL(SUM(toc.order_money),0) AS mapValueSecond
        IFNULL(SUM(order_money),0) AS mapValueSecond
        FROM t_order
        WHERE del_flag = 0 AND order_from = 2
        AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY)
@@ -1196,7 +1196,7 @@
            </foreach>
        </if>
        GROUP BY shop_id
        ORDER BY COUNT(toc.order_id) DESC LIMIT 15
        ORDER BY COUNT(order_id) DESC LIMIT 15
    </select>
    <select id="listPlTotalShopActivitySalesRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo">
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -246,4 +246,28 @@
        Integer count = shopSuggestService.getUnReplaySuggestVo();
        return R.ok(count);
    }
    /**
     * @description  获取商户营销状态
     * @author  jqs
     * @date    2023/7/7 14:05
     * @param shopId
     * @return  R<Integer>
     */
    @PostMapping("/getShopMarketingStatus")
    public R<Integer> getShopMarketingStatus(@RequestBody Long shopId)
    {
        Shop shop = shopService.getByShopId(shopId);
        Integer platformCouponFlag = shop.getPlatformCouponFlag();
        Integer platformBirthdayFlag = shop.getPlatformBirthdayFlag();
        Integer marketingStatus = 0;
        if(platformCouponFlag==1&&platformBirthdayFlag==0){
            marketingStatus = 1;
        }else if(platformCouponFlag==0&&platformBirthdayFlag==1){
            marketingStatus = 2;
        }else if(platformCouponFlag==1&&platformBirthdayFlag==1){
            marketingStatus = 3;
        }
        return R.ok(marketingStatus);
    }
}
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopPageDto.java
@@ -53,6 +53,9 @@
    @ApiModelProperty(value = "归属员工")
    private Long belongUserId;
    @ApiModelProperty(value = "归属经销商id")
    private Long belongShopId;
    @ApiModelProperty(value = "来源渠道")
    private String shopSource;
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -277,71 +277,85 @@
            }
        }
        if(newShop){
            //商户账户信息初始化
            ShopAccount shopAccount = new ShopAccount();
            shopAccount.setShopId(shop.getShopId());
            shopAccount.setDelFlag(0);
            shopAccount.setTotalIncome(new BigDecimal("0"));
            shopAccount.setTotalDisburse(new BigDecimal("0"));
            shopAccount.setTotalRefund(new BigDecimal("0"));
            shopAccount.setTotalProfitsharing(new BigDecimal("0"));
            shopAccount.setTotalMoney(new BigDecimal("0"));
            shopAccountService.save(shopAccount);
            //商户认证信息初始化
            String authId = IdUtils.simpleUUID();
            ShopAuthentication shopAuthentication = new ShopAuthentication();
            shopAuthentication.setAuthId(authId);
            shopAuthentication.setDelFlag(0);
            shopAuthentication.setShopId(shop.getShopId());
            shopAuthenticationService.save(shopAuthentication);
            //商户分成信息初始化
            ShopProportion shopProportion = new ShopProportion();
            shopProportion.setDelFlag(0);
            shopProportion.setShopId(shop.getShopId());
            shopProportion.setShopType(shop.getShopType());
            shopProportion.setProportionPercent(new BigDecimal("100.00"));
            shopProportion.setUpdateTime(new Date());
            shopProportion.setUpdateUserId(mgtEditShopDto.getUserId());
            shopProportionService.save(shopProportion);
            //商户统计
            ShopTotal shopTotal = new ShopTotal();
            shopTotal.setShopId(shop.getShopId());
            shopTotal.setDelFlag(0);
            shopTotal.setLastPayMoney(zeroBig);
            shopTotal.setTotalActivityCount(0);
            shopTotal.setTotalOrder(0);
            shopTotal.setTotalCycleOrder(0);
            shopTotal.setTotalExperienceOrder(0);
            shopTotal.setTotalServiceOrder(0);
            shopTotal.setTotalGoodsOrder(0);
            shopTotal.setTotalServiceCount(0);
            shopTotal.setUsedServiceCount(0);
            shopTotal.setUseableServiceCount(0);
            shopTotal.setTotalCycleService(0);
            shopTotal.setUsedCycleService(0);
            shopTotal.setUseableCycleService(0);
            shopTotal.setTotalCyclePerson(0);
            shopTotal.setUseableCyclePerson(0);
            shopTotal.setTotalServiceService(0);
            shopTotal.setUsedServiceService(0);
            shopTotal.setUseableServiceService(0);
            shopTotal.setTotalServicePerson(0);
            shopTotal.setUseableServicePerson(0);
            shopTotal.setTotalExperienceService(0);
            shopTotal.setUsedExperienceService(0);
            shopTotal.setUseableExperienceService(0);
            shopTotal.setTotalExperiencePerson(0);
            shopTotal.setUseableExperiencePerson(0);
            shopTotal.setTotalOrderMoney(zeroBig);
            shopTotal.setTotalCycleMoney(zeroBig);
            shopTotal.setTotalExperienceMoney(zeroBig);
            shopTotal.setTotalServiceMoney(zeroBig);
            shopTotal.setTotalGoodsMoney(zeroBig);
            shopTotalService.save(shopTotal);
            //生成商户关联记录
            initNewShop(shop,mgtEditShopDto.getUserId());
        }
    }
    /**
     * @description  商户关联类初始化
     * @author  jqs
     * @date    2023/7/7 11:25
     * @param shop
     * @param userId
     * @return  void
     */
    private void initNewShop(Shop shop,Long userId){
        BigDecimal zeroBig = new BigDecimal("0.00");
        //商户账户信息初始化
        ShopAccount shopAccount = new ShopAccount();
        shopAccount.setShopId(shop.getShopId());
        shopAccount.setDelFlag(0);
        shopAccount.setTotalIncome(new BigDecimal("0"));
        shopAccount.setTotalDisburse(new BigDecimal("0"));
        shopAccount.setTotalRefund(new BigDecimal("0"));
        shopAccount.setTotalProfitsharing(new BigDecimal("0"));
        shopAccount.setTotalMoney(new BigDecimal("0"));
        shopAccountService.save(shopAccount);
        //商户认证信息初始化
        String authId = IdUtils.simpleUUID();
        ShopAuthentication shopAuthentication = new ShopAuthentication();
        shopAuthentication.setAuthId(authId);
        shopAuthentication.setDelFlag(0);
        shopAuthentication.setShopId(shop.getShopId());
        shopAuthenticationService.save(shopAuthentication);
        //商户分成信息初始化
        ShopProportion shopProportion = new ShopProportion();
        shopProportion.setDelFlag(0);
        shopProportion.setShopId(shop.getShopId());
        shopProportion.setShopType(shop.getShopType());
        shopProportion.setProportionPercent(new BigDecimal("100.00"));
        shopProportion.setUpdateTime(new Date());
        shopProportion.setUpdateUserId(userId);
        shopProportionService.save(shopProportion);
        //商户统计
        ShopTotal shopTotal = new ShopTotal();
        shopTotal.setShopId(shop.getShopId());
        shopTotal.setDelFlag(0);
        shopTotal.setLastPayMoney(zeroBig);
        shopTotal.setTotalActivityCount(0);
        shopTotal.setTotalOrder(0);
        shopTotal.setTotalCycleOrder(0);
        shopTotal.setTotalExperienceOrder(0);
        shopTotal.setTotalServiceOrder(0);
        shopTotal.setTotalGoodsOrder(0);
        shopTotal.setTotalServiceCount(0);
        shopTotal.setUsedServiceCount(0);
        shopTotal.setUseableServiceCount(0);
        shopTotal.setTotalCycleService(0);
        shopTotal.setUsedCycleService(0);
        shopTotal.setUseableCycleService(0);
        shopTotal.setTotalCyclePerson(0);
        shopTotal.setUseableCyclePerson(0);
        shopTotal.setTotalServiceService(0);
        shopTotal.setUsedServiceService(0);
        shopTotal.setUseableServiceService(0);
        shopTotal.setTotalServicePerson(0);
        shopTotal.setUseableServicePerson(0);
        shopTotal.setTotalExperienceService(0);
        shopTotal.setUsedExperienceService(0);
        shopTotal.setUseableExperienceService(0);
        shopTotal.setTotalExperiencePerson(0);
        shopTotal.setUseableExperiencePerson(0);
        shopTotal.setTotalOrderMoney(zeroBig);
        shopTotal.setTotalCycleMoney(zeroBig);
        shopTotal.setTotalExperienceMoney(zeroBig);
        shopTotal.setTotalServiceMoney(zeroBig);
        shopTotal.setTotalGoodsMoney(zeroBig);
        shopTotalService.save(shopTotal);
    }
    /**
     * @description  终止合作
     * @author  jqs
     * @date    2023/6/20 12:01
ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -345,6 +345,9 @@
        <if test="param.belongUserId!=null and param.belongUserId!=''">
            AND ts.belong_user_id = #{param.belongUserId}
        </if>
        <if test="param.belongShopId!=null and param.belongShopId!=''">
            AND ts.belong_shop_id = #{param.belongShopId}
        </if>
        <if test="param.shopSource!=null and param.shopSource!=''">
            AND ts.shop_source = #{param.shopSource}
        </if>
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/GeneratorMybatisPlus.java
@@ -44,7 +44,7 @@
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL);
        dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
        dataSourceConfig.setUrl("jdbc:mysql://47.109.78.184:10010/hrt_shop?tinyInt1isBit=false");
        dataSourceConfig.setUrl("jdbc:mysql://47.109.78.184:10010/hrt_member?tinyInt1isBit=false");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("hrt123456");
@@ -53,7 +53,7 @@
        // 包名配置
        PackageConfig packageConfig = new PackageConfig();
        // 父包和子包名分开处理
        packageConfig.setParent("com.ruoyi.shop");
        packageConfig.setParent("com.ruoyi.member");
        packageConfig.setController("app");
        packageConfig.setEntity("domain.pojo");
        packageConfig.setMapper("mapper");
@@ -74,7 +74,7 @@
        strategy.setControllerMappingHyphenStyle(true);
        //表和前缀处理
        String[] table = {
                "t_shop_total"
                "t_member_gift_record"
        };
        strategy.setInclude(table);
        String[] tablePre = new String[]{"t_"};