Przeglądaj źródła

会员卡管理

hanfucheng 5 miesięcy temu
rodzic
commit
1d512286f6

+ 25 - 1
qmjszx-admin/src/main/java/beilv/web/controller/usermembershipcard/UserMembershipCardController.java

@@ -6,6 +6,7 @@ import beilv.common.core.domain.AjaxResult;
 import beilv.common.core.page.TableDataInfo;
 import beilv.common.enums.BusinessType;
 import beilv.common.utils.poi.ExcelUtil;
+import beilv.usermembershipcard.domain.MemberStream;
 import beilv.usermembershipcard.domain.UserMembershipCard;
 import beilv.usermembershipcard.service.IUserMembershipCardService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -128,6 +129,12 @@ public class UserMembershipCardController extends BaseController {
         return prefix + "/stream";
     }
 
+    /*
+     * 查看流水列表
+     *
+     * @author 韩福成
+     * @date 2025/1/6 下午3:47
+     */
     @RequiresPermissions("system:card:stream")
     @PostMapping("/stream")
     @ResponseBody
@@ -138,6 +145,19 @@ public class UserMembershipCardController extends BaseController {
     }
 
     /*
+    * 增加会员卡流水
+    *
+    * @author 韩福成
+    * @date 2025/1/8 上午9:21
+    */
+    @Log(title = "增加会员卡流水", businessType = BusinessType.INSERT)
+    @PostMapping("/addStream")
+    @ResponseBody
+    public AjaxResult addStream(MemberStream memberStream) {
+        return toAjax(userMembershipCardService.addStream(memberStream));
+    }
+
+    /*
      * 新增退卡记录
      *
      * @author 韩福成
@@ -148,6 +168,10 @@ public class UserMembershipCardController extends BaseController {
     @PostMapping("/refundCard")
     @ResponseBody
     public AjaxResult refundCard(UserMembershipCard userMembershipCard) {
-        return toAjax(userMembershipCardService.refundCard(userMembershipCard));
+        int inserted = userMembershipCardService.refundCard(userMembershipCard);
+        if (inserted == -1){
+            return AjaxResult.error("退款金额小于0,不支持退款!");
+        }
+        return toAjax(inserted);
     }
 }

+ 3 - 3
qmjszx-admin/src/main/resources/templates/card/card.html

@@ -114,7 +114,7 @@
                         var actions = [];
                         actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="stream(\'' + row.id + '\')"><i class="fa fa-edit"></i>流水</a> ');
                         if (row.state==='3'){
-                            actions.push('<a class="btn btn-danger btn-xs ' + refundCard + '" href="javascript:void(0)" onclick="refundCard1(\'' + row.id + '\', \'' + row.recordId + '\')"><i class="fa fa-remove"></i>退卡</a>');
+                            actions.push('<a class="btn btn-danger btn-xs ' + refundCard + '" href="javascript:void(0)" onclick="refundCard1(\'' + row.id + '\', \'' + row.recordId + '\', \'' + row.remainingNumber + '\')"><i class="fa fa-remove"></i>退卡</a>');
                         }
                         return actions.join('');
                     }
@@ -128,11 +128,11 @@
             $.modal.open("查看流水", prefix + "/toStream/" + id);
         }
 
-        function refundCard1(id,recordId) {
+        function refundCard1(id,recordId,remainingNumber) {
             console.log(id)
             console.log(recordId)
             $.modal.confirm("确认要退选中的会员卡吗?", function() {
-                var data = { "id":id, "recordId": recordId };
+                var data = { "id":id, "recordId": recordId, "remainingNumber":remainingNumber };
                 $.operate.submit(prefix + "/refundCard", "post", "json", data);
             });
         }

+ 3 - 3
qmjszx-business/src/main/java/beilv/cardpurchaserecord/domain/CardPurchaseRecord.java

@@ -48,7 +48,7 @@ public class CardPurchaseRecord extends BaseEntity
 
     private Integer totalNumber;
 
-    private String originalPrice;
+    private BigDecimal originalPrice;
 
     /** 价格 */
     @Excel(name = "价格")
@@ -88,11 +88,11 @@ public class CardPurchaseRecord extends BaseEntity
         this.cardTypeLabel = cardTypeLabel;
     }
 
-    public String getOriginalPrice() {
+    public BigDecimal getOriginalPrice() {
         return originalPrice;
     }
 
-    public void setOriginalPrice(String originalPrice) {
+    public void setOriginalPrice(BigDecimal originalPrice) {
         this.originalPrice = originalPrice;
     }
 

+ 20 - 50
qmjszx-business/src/main/java/beilv/usermembershipcard/domain/MemberStream.java

@@ -1,9 +1,9 @@
 package beilv.usermembershipcard.domain;
 
+import beilv.common.core.domain.BaseEntity;
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import beilv.common.annotation.Excel;
-import beilv.common.core.domain.BaseEntity;
 
 /**
  * 会员用卡流水对象 member_stream
@@ -11,61 +11,31 @@ import beilv.common.core.domain.BaseEntity;
  * @author ruoyi
  * @date 2025-01-06
  */
-public class MemberStream extends BaseEntity
-{
+@Data
+public class MemberStream extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** 主键 */
+    /**
+     * 主键
+     */
     private Long id;
 
-    /** 用户id */
-    @Excel(name = "用户id")
-    private String userId;
-
-    /** 卡种id */
-    @Excel(name = "卡种id")
-    private String cardId;
-
-    public void setId(Long id)
-    {
-        this.id = id;
-    }
-
-    public Long getId()
-    {
-        return id;
-    }
-
-    public void setUserId(String userId)
-    {
-        this.userId = userId;
-    }
-
-    public String getUserId()
-    {
-        return userId;
-    }
+    /**
+     * 用户会员卡id
+     */
+    private String userCardId;
 
-    public void setCardId(String cardId)
-    {
-        this.cardId = cardId;
-    }
-
-    public String getCardId()
-    {
-        return cardId;
-    }
+    //剩余次数
+    private Integer remainingNumber;
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("userId", getUserId())
-            .append("cardId", getCardId())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("createBy", getCreateBy())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateTime", getUpdateTime())
+                .toString();
     }
 }

+ 15 - 0
qmjszx-business/src/main/java/beilv/usermembershipcard/mapper/UserMembershipCardMapper.java

@@ -1,5 +1,6 @@
 package beilv.usermembershipcard.mapper;
 
+import beilv.usermembershipcard.domain.MemberStream;
 import beilv.usermembershipcard.domain.UserMembershipCard;
 
 import java.util.List;
@@ -60,5 +61,19 @@ public interface UserMembershipCardMapper {
      */
     public int deleteUserMembershipCardByIds(String[] ids);
 
+    /*
+    * 查看流水列表
+    *
+    * @author 韩福成
+    * @date 2025/1/8 上午9:24
+    */
     public List<Map<String,Object>> getStream(Long id);
+
+    /*
+    * 增加会员卡流水
+    *
+    * @author 韩福成
+    * @date 2025/1/8 上午9:24
+    */
+    public int addStream(MemberStream memberStream);
 }

+ 14 - 0
qmjszx-business/src/main/java/beilv/usermembershipcard/service/IUserMembershipCardService.java

@@ -62,9 +62,23 @@ public interface IUserMembershipCardService {
      */
     public int deleteUserMembershipCardById(Long id);
 
+    /*
+    * 查看流水列表
+    *
+    * @author 韩福成
+    * @date 2025/1/8 上午9:23
+    */
     public List<Map<String,Object>> getStream(Long id);
 
     /*
+    * 增加会员卡流水
+    *
+    * @author 韩福成
+    * @date 2025/1/8 上午9:23
+    */
+    public int addStream(MemberStream memberStream);
+
+    /*
      * 新增退卡记录
      *
      * @author 韩福成

+ 44 - 2
qmjszx-business/src/main/java/beilv/usermembershipcard/service/impl/UserMembershipCardServiceImpl.java

@@ -5,6 +5,7 @@ import beilv.cardpurchaserecord.mapper.CardPurchaseRecordMapper;
 import beilv.common.core.text.Convert;
 import beilv.common.utils.DateUtils;
 import beilv.common.utils.ShiroUtils;
+import beilv.usermembershipcard.domain.MemberStream;
 import beilv.usermembershipcard.domain.UserMembershipCard;
 import beilv.usermembershipcard.mapper.UserMembershipCardMapper;
 import beilv.usermembershipcard.service.IUserMembershipCardService;
@@ -12,6 +13,8 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.List;
 import java.util.Map;
 
@@ -97,12 +100,34 @@ public class UserMembershipCardServiceImpl implements IUserMembershipCardService
         return userMembershipCardMapper.deleteUserMembershipCardById(id);
     }
 
+    /*
+    * 查询流水列表
+    *
+    * @author 韩福成
+    * @date 2025/1/8 上午9:29
+    */
     @Override
     public List<Map<String,Object>> getStream(Long id) {
         return userMembershipCardMapper.getStream(id);
     }
 
     /*
+    * 新增会员卡流水
+    *
+    * @author 韩福成
+    * @date 2025/1/8 上午9:29
+    */
+    @Override
+    public int addStream(MemberStream memberStream) {
+        //扣除会员卡剩余次数
+        UserMembershipCard userMembershipCard = new UserMembershipCard();
+        userMembershipCard.setId(Long.valueOf(memberStream.getUserCardId()));
+        userMembershipCard.setRemainingNumber(memberStream.getRemainingNumber()-1);
+        userMembershipCardMapper.updateUserMembershipCard(userMembershipCard);
+        return userMembershipCardMapper.addStream(memberStream);
+    }
+
+    /*
      * 新增退卡记录
      *
      * @author 韩福成
@@ -111,7 +136,24 @@ public class UserMembershipCardServiceImpl implements IUserMembershipCardService
     @Override
     public int refundCard(UserMembershipCard userMembershipCard) {
         CardPurchaseRecord cardPurchaseRecord = cardPurchaseRecordMapper.selectCardPurchaseRecordById(Long.parseLong(userMembershipCard.getRecordId()));
-        //新增退卡记录
+        /*退款*/
+        //使用次数
+        int useCount = cardPurchaseRecord.getTotalNumber() - userMembershipCard.getRemainingNumber();
+        //原单价
+        BigDecimal originalPrice = cardPurchaseRecord.getOriginalPrice().divide(BigDecimal.valueOf(cardPurchaseRecord.getTotalNumber()),2, RoundingMode.HALF_UP);
+        //使用总价
+        BigDecimal usePrice = originalPrice.multiply(new BigDecimal(useCount));
+        if (usePrice.compareTo(cardPurchaseRecord.getMemberPrice())<0){
+            //退款价格
+            BigDecimal refundPrice = cardPurchaseRecord.getMemberPrice().subtract(usePrice);
+            /*调用退款接口*/
+
+
+
+        }else {
+            return -1;
+        }
+        /*新增退卡记录*/
         CardPurchaseRecord record = new CardPurchaseRecord();
         BeanUtils.copyProperties(cardPurchaseRecord,record);
         record.setId(null);
@@ -121,7 +163,7 @@ public class UserMembershipCardServiceImpl implements IUserMembershipCardService
         record.setTime(DateUtils.getNowDate());
         record.setVersion("0");
         cardPurchaseRecordMapper.insertCardPurchaseRecord(record);
-        //修改用户会员卡
+        /*修改用户会员卡*/
         userMembershipCard.setState("2");
         userMembershipCard.setRemainingNumber(0);
         return userMembershipCardMapper.updateUserMembershipCard(userMembershipCard);

+ 20 - 0
qmjszx-business/src/main/resources/mapper/card/UserMembershipCardMapper.xml

@@ -135,4 +135,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by a.create_time desc
     </select>
 
+    <insert id="addStream" parameterType="MemberStream">
+        insert into member_stream
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="userCardId != null">user_card_id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="userCardId != null">#{userId},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
 </mapper>