Browse Source

金牛积分商品增加限兑按钮

yh 1 tuần trước cách đây
mục cha
commit
7bf64ca4e5

+ 2 - 0
fs-service/src/main/java/com/fs/his/domain/FsIntegralGoods.java

@@ -70,4 +70,6 @@ public class FsIntegralGoods extends BaseEntity
      * 非数据库字段 仅用于订单信息存储购买数量
      */
     private Integer num;
+
+    private Integer isExchange;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/his/enums/FsUserIntegralLogTypeEnum.java

@@ -32,6 +32,7 @@ public enum FsUserIntegralLogTypeEnum {
     TYPE_22(22,"首次完成积分商城下单"),
     TYPE_23(23,"管理员添加"),
     TYPE_24(24, "付费课程订阅"),
+    TYPE_25(25, "app取消积分订单"),
     ;
 
 

+ 2 - 0
fs-service/src/main/java/com/fs/his/mapper/FsIntegralOrderMapper.java

@@ -124,4 +124,6 @@ public interface FsIntegralOrderMapper extends BaseMapper<FsIntegralOrder>
     List<FsIntegralOrder> findOrderByIdsv2(@Param("orderIds") List<Long> orderIds);
 
     List<FsIntegralOrderListVO> selectFsIntegralOrderListJn(FsIntegralOrderParam fsIntegralOrder);
+
+    int selectExchangeCount(@Param("userId") Long userId, @Param("goodsId") Long goodsId);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsIntegralOrderServiceImpl.java

@@ -310,6 +310,11 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
         if(user.getIntegral()<integralGoods.getIntegral()){
             return R.error("积分不足");
         }
+        // 查询是否兑换过此商品
+        int count = fsIntegralOrderMapper.selectExchangeCount(user.getUserId(),integralGoods.getGoodsId());
+        if (integralGoods.getIsExchange() == 1 && count > 0){
+            return R.error("兑换次数已超最大限制");
+        }
 
         // 减库存
         if (fsIntegralGoodsMapper.subStock(integralGoods.getGoodsId(), 1) <= 0) {

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsIntegralGoodsScrm.java

@@ -64,4 +64,6 @@ public class FsIntegralGoodsScrm extends BaseEntity
 
     @Excel(name = "产品编码")
     private String barCode;
+
+    private Integer isExchange;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsIntegralOrderScrmMapper.java

@@ -100,4 +100,5 @@ public interface FsIntegralOrderScrmMapper
     @Select("select fio.*,fu.nick_name,fu.phone from fs_integral_order fio left join fs_user fu on fu.user_id = fio.user_id where order_id=#{orderId} ")
     FsIntegralOrderPVO selectFsIntegralOrderPVO(Long orderId);
 
+    int selectExchangeCount(@Param("userId") Long userId, @Param("goodsId") Long goodsId);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsIntegralOrderScrmService.java

@@ -1,6 +1,7 @@
 package com.fs.hisStore.service;
 
 import com.fs.common.core.domain.R;
+import com.fs.his.domain.FsIntegralOrder;
 import com.fs.hisStore.domain.FsIntegralOrderScrm;
 import com.fs.hisStore.param.FsIntegralOrderCreateParam;
 import com.fs.hisStore.param.FsIntegralOrderListUParam;
@@ -79,4 +80,6 @@ public interface IFsIntegralOrderScrmService
     String importProductDeliver(List<FsStoreProductDeliverExcelVO> list);
 
     FsIntegralOrderPVO selectFsIntegralOrderPVO(Long orderId);
+
+    R cancel(FsIntegralOrder fsIntegralOrder);
 }

+ 46 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsIntegralOrderScrmServiceImpl.java

@@ -3,9 +3,14 @@ package com.fs.hisStore.service.impl;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
+import com.fs.his.domain.FsIntegralOrder;
+import com.fs.his.enums.FsUserIntegralLogTypeEnum;
+import com.fs.his.mapper.FsIntegralGoodsMapper;
+import com.fs.his.utils.RedisCacheUtil;
 import com.fs.hisStore.domain.*;
 import com.fs.hisStore.mapper.*;
 import com.fs.hisStore.param.FsIntegralOrderCreateParam;
@@ -46,6 +51,10 @@ public class FsIntegralOrderScrmServiceImpl implements IFsIntegralOrderScrmServi
     private FsIntegralGoodsScrmMapper fsIntegralGoodsMapper;
     @Autowired
     private FsUserIntegralLogsScrmMapper fsUserIntegralLogsMapper;
+    @Autowired
+    private FsIntegralGoodsMapper goodsMapper;
+    @Autowired
+    private RedisCacheUtil redisCacheUtil;
     /**
      * 查询积分商品订单
      *
@@ -271,4 +280,41 @@ public class FsIntegralOrderScrmServiceImpl implements IFsIntegralOrderScrmServi
     public FsIntegralOrderPVO selectFsIntegralOrderPVO(Long orderId) {
         return fsIntegralOrderMapper.selectFsIntegralOrderPVO(orderId);
     }
+
+    @Override
+    @Transactional
+    public R cancel(FsIntegralOrder params) {
+        FsUserScrm user = fsUserMapper.selectFsUserByUserId(params.getUserId());
+        FsIntegralOrderScrm order = fsIntegralOrderMapper.selectFsIntegralOrderByOrderId(params.getOrderId());
+        if (order.getStatus() != 1) {
+            return R.error("订单已发货,不能取消");
+        }
+        Long goodsId = JSON.parseArray(order.getItemJson()).getJSONObject(0).getLong("goodsId");
+        FsIntegralOrderScrm integralOrderScrm = new FsIntegralOrderScrm();
+        integralOrderScrm.setOrderId(order.getOrderId());
+        integralOrderScrm.setStatus(-1);
+        if (fsIntegralOrderMapper.updateFsIntegralOrder(integralOrderScrm) > 0){
+            // 写入日志
+            FsUserScrm fsUserScrm = new FsUserScrm();
+            fsUserScrm.setUserId(params.getUserId());
+            fsUserScrm.setIntegral(user.getIntegral() + Long.valueOf(order.getIntegral()));
+            fsUserMapper.updateFsUser(fsUserScrm);
+            FsUserIntegralLogsScrm logs = new FsUserIntegralLogsScrm();
+            logs.setIntegral(BigDecimal.valueOf(Long.valueOf(order.getIntegral())));
+            logs.setUserId(params.getUserId());
+            logs.setBalance(BigDecimal.valueOf(fsUserScrm.getIntegral()));
+            logs.setLogType(FsUserIntegralLogTypeEnum.TYPE_25.getValue());
+            logs.setBusinessId(order.getOrderId().toString());
+            logs.setCreateTime(new Date());
+            fsUserIntegralLogsMapper.insertFsUserIntegralLogs(logs);
+            // 加库存
+            goodsMapper.addStock(goodsId, 1);
+            // 清除商品缓存
+            redisCacheUtil.delSpringCacheKey("getIntegralGoodsById", goodsId);
+            redisCacheUtil.delRedisKey("getIntegralGoodsList");
+            return R.ok("取消成功");
+        } else {
+            return R.error("取消失败");
+        }
+    }
 }

+ 4 - 1
fs-service/src/main/resources/mapper/his/FsIntegralGoodsMapper.xml

@@ -22,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsIntegralGoodsVo">
-        select goods_id, img_url, images,bar_code, goods_name, ot_price, goods_type, status, integral, cash, sort, stock, descs, create_time from fs_integral_goods
+        select goods_id, img_url, images,bar_code, goods_name, ot_price, goods_type, status, integral, cash, sort, stock, descs, create_time,is_exchange from fs_integral_goods
     </sql>
 
     <select id="selectFsIntegralGoodsList" parameterType="FsIntegralGoods" resultMap="FsIntegralGoodsResult">
@@ -59,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="descs != null">descs,</if>
             <if test="createTime != null">create_time,</if>
             <if test="barCode != null">bar_code,</if>
+            <if test="isExchange != null">is_exchange,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="goodsId != null">#{goodsId},</if>
@@ -75,6 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="descs != null">#{descs},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="barCode != null">#{barCode},</if>
+            <if test="isExchange != null">#{isExchange},</if>
          </trim>
     </insert>
 
@@ -94,6 +96,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="descs != null">descs = #{descs},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="barCode != null">bar_code = #{barCode},</if>
+            <if test="isExchange != null">is_exchange = #{isExchange},</if>
         </trim>
         where goods_id = #{goodsId}
     </update>

+ 10 - 0
fs-service/src/main/resources/mapper/his/FsIntegralOrderMapper.xml

@@ -144,6 +144,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         fio.order_id DESC
     </select>
 
+    <select id="selectExchangeCount" resultType="java.lang.Integer">
+        SELECT
+            count(*)
+        FROM
+            fs_integral_order o,
+            JSON_TABLE (o.item_json, '$[*]' COLUMNS (goodsId INT PATH '$.goodsId')) AS jt
+        WHERE
+            jt.goodsId = #{goodsId} AND o.user_id = #{userId} and o.status != -1
+    </select>
+
     <insert id="insertFsIntegralOrder" parameterType="FsIntegralOrder" useGeneratedKeys="true" keyProperty="orderId">
         insert into fs_integral_order
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 1 - 1
fs-service/src/main/resources/mapper/hisStore/FsIntegralGoodsScrmMapper.xml

@@ -21,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsIntegralGoodsVo">
-        select goods_id, img_url, images,bar_code, goods_name, ot_price, goods_type, status, integral, sort, stock, descs, create_time from fs_integral_goods
+        select goods_id, img_url, images,bar_code, goods_name, ot_price, goods_type, status, integral, sort, stock, descs, create_time,is_exchange from fs_integral_goods
     </sql>
 
     <select id="selectFsIntegralGoodsList" parameterType="FsIntegralGoodsScrm" resultMap="FsIntegralGoodsResult">

+ 10 - 0
fs-service/src/main/resources/mapper/hisStore/FsIntegralOrderScrmMapper.xml

@@ -45,6 +45,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where order_id = #{orderId}
     </select>
 
+    <select id="selectExchangeCount" resultType="java.lang.Integer">
+        SELECT
+            count(*)
+        FROM
+            fs_integral_order o,
+            JSON_TABLE (o.item_json, '$[*]' COLUMNS (goodsId INT PATH '$.goodsId')) AS jt
+        WHERE
+            jt.goodsId = #{goodsId} AND o.user_id = #{userId}
+    </select>
+
     <insert id="insertFsIntegralOrder" parameterType="FsIntegralOrderScrm" useGeneratedKeys="true" keyProperty="orderId">
         insert into fs_integral_order
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 9 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/IntegralScrmController.java

@@ -5,6 +5,7 @@ import com.fs.app.annotation.Login;
 import com.fs.app.controller.AppBaseController;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
+import com.fs.his.domain.FsIntegralOrder;
 import com.fs.hisStore.domain.FsIntegralGoodsScrm;
 import com.fs.hisStore.domain.FsIntegralOrderScrm;
 import com.fs.hisStore.domain.FsUserScrm;
@@ -124,4 +125,12 @@ public class IntegralScrmController extends AppBaseController {
         Long integral=userSignService.sign(user);
         return R.ok("签到获得" + integral + "积分");
     }
+
+    @Login
+    @ApiOperation("取消积分订单")
+    @PostMapping("/cancel")
+    public R cancel(@RequestBody FsIntegralOrder params, HttpServletRequest request){
+        params.setUserId(Long.parseLong(getUserId()));
+        return integralOrderService.cancel(params);
+    }
 }