From 86579f21ded7a639f9d6edcf3becdf51dc3a3e41 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 19 Dec 2022 11:57:14 +0800
Subject: [PATCH] 20221219 1、创建订单增加商品ID的入参 2、增加每日购买次数和购买商品会员等级判断 3、注册会员,设置了会员等级 4、商品接口增加了补贴金额和星级字段,增加总评价数量和总评价星数

---
 src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java               |    2 
 src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java                       |    8 ++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   30 ++++++++++
 src/main/resources/mapper/modules/MallOrderInfoMapper.xml                       |    9 +++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java    |    6 -
 src/main/java/cc/mrbird/febs/common/enumerates/MemberAccountLevelEnum.java      |   42 ++++++++++++++
 src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java                    |   13 ++++
 src/main/resources/mapper/modules/MallGoodsMapper.xml                           |    4 +
 src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java            |    1 
 src/main/java/cc/mrbird/febs/mall/entity/MallMember.java                        |    5 +
 src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java                          |    4 +
 src/main/resources/mapper/modules/MallGoodsCommentMapper.xml                    |    6 ++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java     |    2 
 src/main/java/cc/mrbird/febs/common/enumerates/StarRatingEnum.java              |   29 ++++++++-
 14 files changed, 151 insertions(+), 10 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MemberAccountLevelEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MemberAccountLevelEnum.java
new file mode 100644
index 0000000..e51f5fa
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MemberAccountLevelEnum.java
@@ -0,0 +1,42 @@
+package cc.mrbird.febs.common.enumerates;
+
+import lombok.Getter;
+
+//会员星级
+@Getter
+public enum MemberAccountLevelEnum {
+    /**
+     * 定级规则
+     */
+    NORMAL("普通",0,1),
+    ONE_STAR("一星",50,2),
+    TWO_STAR("二星",100,3),
+    THREE_STAR("三星",200,4);
+
+    private String name;
+
+    private Integer amount;
+
+    private Integer code;
+
+    MemberAccountLevelEnum(String name,Integer amount,Integer code) {
+        this.name = name;
+        this.amount = amount;
+        this.code = code;
+    }
+
+    /**
+     * 根据输入的会员星级获取对应的Code
+     * @param name
+     * @return
+     */
+    public Integer getMemberLevelCode(String name){
+        Integer code = 0;
+        for(MemberAccountLevelEnum memberAccountLevelEnum : MemberAccountLevelEnum.values()){
+            if(memberAccountLevelEnum.name.equals(name)){
+                code = memberAccountLevelEnum.code;
+            }
+        }
+        return  code;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/StarRatingEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/StarRatingEnum.java
index 20c120e..4ecab40 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/StarRatingEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/StarRatingEnum.java
@@ -3,16 +3,17 @@
 import lombok.Getter;
 
 import java.math.BigDecimal;
+//商品星级
 @Getter
 public enum StarRatingEnum {
     /**
      * 定级规则
      *      大于最小值,小于等于最大值
      */
-    NORMAL("普通",0,30),
-    ONE_STAR("一星",30,50),
-    TWO_STAR("二星",50,100),
-    THREE_STAR("三星",100,200);
+    NORMAL("普通",0,30,1),
+    ONE_STAR("一星",30,50,2),
+    TWO_STAR("二星",50,100,3),
+    THREE_STAR("三星",100,200,4);
 
     private String name;
 
@@ -20,10 +21,13 @@
 
     private Integer maxValue;
 
-    StarRatingEnum(String name,Integer minValue, Integer maxValue) {
+    private Integer code;
+
+    StarRatingEnum(String name,Integer minValue, Integer maxValue,Integer code) {
         this.name = name;
         this.minValue = minValue;
         this.maxValue = maxValue;
+        this.code = code;
     }
 
     /**
@@ -44,6 +48,21 @@
         return name;
     }
 
+    /**
+     * 根据输入的商品星级获取对应的Code
+     * @param name
+     * @return
+     */
+    public Integer getGoodsStarCode(String name){
+        Integer code = 0;
+        for(StarRatingEnum starRatingEnum : StarRatingEnum.values()){
+            if(starRatingEnum.name.equals(name)){
+                code = starRatingEnum.code;
+            }
+        }
+        return  code;
+    }
+
     public static void main(String[] args) {
         String s = StarRatingEnum.NORMAL.belongStarRating(String.valueOf(100));
         System.out.println(s);
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
index 5940ee7..bc70f3a 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
@@ -16,6 +16,10 @@
 public class AddOrderDto {
 
     @NotNull(message = "参数不能为空")
+    @ApiModelProperty(value = "商品ID", example = "1")
+    private Long goodsId;
+
+    @NotNull(message = "参数不能为空")
     @ApiModelProperty(value = "地址ID", example = "1")
     private Long addressId;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
index 61a5590..36afe16 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
@@ -134,4 +134,9 @@
      */
     private Integer storeMaster;
 
+    /**
+     * 会员等级
+     */
+    private String accountLevel;
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java
index 145c577..6e62067 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsCommentMapper.java
@@ -12,4 +12,5 @@
 
     IPage<AdminMallGoodsCommentVo> getCommentListInPage(Page<AdminMallGoodsCommentVo> page, @Param("record")AdminMallGoodsCommentDto adminMallGoodsCommentDto);
 
+    Double selectSumStarByGoodsId(@Param("goodsId")Long id);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
index 670a51b..2671ca1 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
@@ -65,4 +65,6 @@
     BigDecimal selectTotalAmountByPayDoneAndDataString(@Param("payResult")int i, @Param("date") Date date);
 
     BigDecimal selectSumAmountByPayMethodAndSomeStatue(@Param("payMethod")String name, @Param("statues") List<Long> values);
+
+    Integer selectCountByCreateTimeAndMemberId(@Param("createdTime")String yyyyMMdd,@Param("memberId")Long memberId);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java
index 6135e77..7808583 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java
@@ -66,6 +66,8 @@
         objectQueryWrapper.eq("goods_id",id);
         Integer commentCount = mallGoodsCommentMapper.selectCount(objectQueryWrapper);
         mallGoodsDetailsVo.setCommentCount(commentCount);
+        Double star = mallGoodsCommentMapper.selectSumStarByGoodsId(id);
+        mallGoodsDetailsVo.setStar(star);
         return mallGoodsDetailsVo;
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
index 4465115..324e026 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -1,10 +1,7 @@
 package cc.mrbird.febs.mall.service.impl;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
-import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
-import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.*;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.*;
 import cc.mrbird.febs.mall.conversion.MallGoodsConversion;
@@ -114,6 +111,7 @@
         mallMember.setName(registerDto.getName());
         mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
         mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
+        mallMember.setAccountLevel(MemberAccountLevelEnum.NORMAL.getName());
         mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name());
         mallMember.setSex("男");
         mallMember.setBindPhone(registerDto.getAccount());
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index c05d958..113348b 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -25,6 +25,7 @@
 import cc.mrbird.febs.pay.service.UnipayService;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -43,6 +44,7 @@
 
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -77,11 +79,39 @@
     private final MallMemberBankSignMapper mallMemberBankSignMapper;
     private final MallMemberBankMapper mallMemberBankMapper;
     private final MallShopApplyMapper mallShopApplyMapper;
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createOrder(AddOrderDto addOrderDto) {
         MallMember member = LoginUserUtil.getLoginUser();
+        /**
+         * 根据会员星级判断是否可以购买该商品
+         */
+        MallMember mallMember = memberMapper.selectById(member.getId());
+        String accountLevel = mallMember.getAccountLevel();
+        Integer memberLevelCode = MemberAccountLevelEnum.NORMAL.getMemberLevelCode(accountLevel);
+        //获取商品星级
+        MallGoods goods = mallGoodsMapper.selectById(addOrderDto.getGoodsId());
+        String starRating = goods.getStarRating();
+        Integer goodsStarCode = StarRatingEnum.NORMAL.getGoodsStarCode(starRating);
+        if(memberLevelCode < goodsStarCode){
+            throw new FebsException("会员等级不够");
+        }
+        /**
+         * 会员一天最多下单次数
+         */
+        DataDictionaryCustom buyTimesDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BUY_TIMES.getType(), DataDictionaryEnum.BUY_TIMES.getCode());
+        Integer buyTimes = Integer.parseInt(buyTimesDic.getValue());
+
+        DateTime date = DateUtil.date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String yyyyMMdd = sdf.format(date);
+        Integer times = this.baseMapper.selectCountByCreateTimeAndMemberId(yyyyMMdd,member.getId());
+        if(buyTimes <= times){
+            throw new FebsException("会员今日已无法购买");
+        }
 
 //        MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
 //        if (address == null) {
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
index 25eebaa..f755ee5 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsDetailsVo.java
@@ -69,6 +69,17 @@
     @ApiModelProperty(value = "样式")
     private List<GoodsDetailsStyleVo> styles;
 
-    @ApiModelProperty(value = "评论数量")
+    @ApiModelProperty(value = "评论总数量")
     private Integer commentCount;
+
+    @ApiModelProperty(value = "评论总星数")
+    private Double star;
+    //补贴金额
+
+    @ApiModelProperty(value = "补贴金额")
+    private BigDecimal subsidyAmount;
+    //星级等级
+
+    @ApiModelProperty(value = "星级等级")
+    private String starRating;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java
index bc3d4d4..e0bf224 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MallGoodsListVo.java
@@ -40,4 +40,12 @@
 
     @ApiModelProperty(value = "是否有运费 1-是 2-包邮")
     private Integer hasCarriage;
+    //补贴金额
+
+    @ApiModelProperty(value = "补贴金额")
+    private BigDecimal subsidyAmount;
+    //星级等级
+
+    @ApiModelProperty(value = "星级等级")
+    private String starRating;
 }
diff --git a/src/main/resources/mapper/modules/MallGoodsCommentMapper.xml b/src/main/resources/mapper/modules/MallGoodsCommentMapper.xml
index e7221ee..ccce507 100644
--- a/src/main/resources/mapper/modules/MallGoodsCommentMapper.xml
+++ b/src/main/resources/mapper/modules/MallGoodsCommentMapper.xml
@@ -22,4 +22,10 @@
         order by a.created_time desc
     </select>
 
+    <select id="selectSumStarByGoodsId" resultType="java.lang.Double">
+        select Ifnull(sum(star),0)
+        from mall_goods_comment a
+        where goods_id = #{goodsId}
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml
index 66ce2c7..55ef542 100644
--- a/src/main/resources/mapper/modules/MallGoodsMapper.xml
+++ b/src/main/resources/mapper/modules/MallGoodsMapper.xml
@@ -22,6 +22,8 @@
         <result property="hasCarriage" column="has_carriage" />
         <result property="carriage" column="carriage" />
         <result property="isNormal" column="is_normal" />
+        <result property="subsidyAmount" column="subsidy_amount" />
+        <result property="starRating" column="star_rating" />
         <collection property="styles" ofType="cc.mrbird.febs.mall.entity.MallGoodsStyle">
             <id property="id" column="style_id" />
             <result property="name" column="style_name" />
@@ -70,6 +72,8 @@
                 a.thumb,
                 a.original_price,
                 a.present_price,
+                a.subsidy_amount,
+                a.star_rating,
                 a.score,
                 a.is_hot,
                 min(b.present_price) price,
diff --git a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
index a16b8d7..5e7a466 100644
--- a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
+++ b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
@@ -309,4 +309,13 @@
             #{item}
         </foreach>
     </select>
+
+    <select id="selectCountByCreateTimeAndMemberId" resultType="java.lang.Integer">
+        select
+            count(a.id)
+        from mall_order_info a
+        where
+            date_format(a.CREATED_TIME, '%Y-%m-%d') = #{createTime}
+            and a.member_id = #{memberId}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1