浏览代码

实现会员充值功能

gqx 2 年之前
父节点
当前提交
7662c458ea

+ 237 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusMemberBalanceLogController.java

@@ -0,0 +1,237 @@
+package org.jeecg.modules.business.controller;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.commons.lang3.ObjectUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.business.entity.BusHotel;
+import org.jeecg.modules.business.entity.BusMemberBalanceLog;
+import org.jeecg.modules.business.entity.BusMemberCard;
+import org.jeecg.modules.business.entity.BusRoomPayType;
+import org.jeecg.modules.business.service.IBusHotelService;
+import org.jeecg.modules.business.service.IBusMemberBalanceLogService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecg.modules.business.service.IBusMemberCardService;
+import org.jeecg.modules.business.service.IBusRoomPayTypeService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: bus_member_balance_log
+ * @Author: jeecg-boot
+ * @Date:   2023-03-13
+ * @Version: V1.0
+ */
+@Api(tags="bus_member_balance_log")
+@RestController
+@RequestMapping("/business/busMemberBalanceLog")
+@Slf4j
+public class BusMemberBalanceLogController extends JeecgController<BusMemberBalanceLog, IBusMemberBalanceLogService> {
+	@Autowired
+	private IBusMemberBalanceLogService busMemberBalanceLogService;
+	 @Autowired
+	 private IBusHotelService busHotelService;
+	 @Autowired
+	 private IBusMemberCardService busMemberCardService;
+	 @Autowired
+	 private IBusRoomPayTypeService busRoomPayTypeService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busMemberBalanceLog
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "bus_member_balance_log-分页列表查询")
+	@ApiOperation(value="bus_member_balance_log-分页列表查询", notes="bus_member_balance_log-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusMemberBalanceLog>> queryPageList(BusMemberBalanceLog busMemberBalanceLog,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+															@RequestParam(name="startTime",required = false) String startTime,
+															@RequestParam(name="endTime",required = false) String endTime,
+															@RequestParam(name="hotelIds[]",required = false) List<String> hotelIds,
+								   HttpServletRequest req) {
+		LambdaQueryWrapper<BusMemberBalanceLog> queryWrapper = QueryGenerator.initQueryWrapper(busMemberBalanceLog, req.getParameterMap()).lambda();
+		if (ObjectUtils.isNotEmpty(startTime)) {
+			queryWrapper.ge(BusMemberBalanceLog::getCreateTime, DateUtil.parseDate(startTime));
+		}
+		if (ObjectUtils.isNotEmpty(endTime)) {
+			queryWrapper.le(BusMemberBalanceLog::getCreateTime, DateUtil.parseDate(endTime));
+		}
+		if (ObjectUtils.isNotEmpty(hotelIds)) {
+			queryWrapper.and(j -> {
+				for (int k = 0; k < hotelIds.size(); k++) {
+					j = j.or().eq(BusMemberBalanceLog::getHotelId, hotelIds.get(k));
+				}
+			});
+		}
+		Page<BusMemberBalanceLog> page = new Page<BusMemberBalanceLog>(pageNo, pageSize);
+		IPage<BusMemberBalanceLog> pageList = busMemberBalanceLogService.page(page, queryWrapper);
+		pageList.getRecords().forEach(item -> {
+			BusHotel hotle = busHotelService.getById(item.getHotelId());
+			if (hotle != null) {
+				item.setHotelName(hotle.getName());
+			}
+			BusMemberCard member = busMemberCardService.getById(item.getMemberId());
+			if (member != null) {
+				item.setMemberName(member.getName());
+				item.setMobile(member.getMobile());
+				item.setCardNo(member.getCardNo());
+			}
+			BusRoomPayType busRoomPayType = busRoomPayTypeService.getById(item.getPaymentMethod());
+			if (busRoomPayType != null) {
+				item.setPaymentMethodName(busRoomPayType.getName());
+			}
+		});
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param busMemberBalanceLog
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_balance_log-添加")
+	@ApiOperation(value="bus_member_balance_log-添加", notes="bus_member_balance_log-添加")
+	//@RequiresPermissions("business:bus_member_balance_log:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BusMemberBalanceLog busMemberBalanceLog) {
+		LoginUser user = TokenUtils.getAuthUser();
+		if (user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")) {
+			busMemberBalanceLog.setTenantId(user.getRelTenantIds());
+		} else {
+			throw new JeecgBootException("当前登录人租户信息错误");
+		}
+		busMemberBalanceLogService.saveBalance(busMemberBalanceLog);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param busMemberBalanceLog
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_balance_log-编辑")
+	@ApiOperation(value="bus_member_balance_log-编辑", notes="bus_member_balance_log-编辑")
+	//@RequiresPermissions("business:bus_member_balance_log:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusMemberBalanceLog busMemberBalanceLog) {
+		busMemberBalanceLogService.updateById(busMemberBalanceLog);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_balance_log-通过id删除")
+	@ApiOperation(value="bus_member_balance_log-通过id删除", notes="bus_member_balance_log-通过id删除")
+	//@RequiresPermissions("business:bus_member_balance_log:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busMemberBalanceLogService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_balance_log-批量删除")
+	@ApiOperation(value="bus_member_balance_log-批量删除", notes="bus_member_balance_log-批量删除")
+	//@RequiresPermissions("business:bus_member_balance_log:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.busMemberBalanceLogService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "bus_member_balance_log-通过id查询")
+	@ApiOperation(value="bus_member_balance_log-通过id查询", notes="bus_member_balance_log-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusMemberBalanceLog> queryById(@RequestParam(name="id",required=true) String id) {
+		BusMemberBalanceLog busMemberBalanceLog = busMemberBalanceLogService.getById(id);
+		if(busMemberBalanceLog==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busMemberBalanceLog);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busMemberBalanceLog
+    */
+    //@RequiresPermissions("business:bus_member_balance_log:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusMemberBalanceLog busMemberBalanceLog) {
+        return super.exportXls(request, busMemberBalanceLog, BusMemberBalanceLog.class, "bus_member_balance_log");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("business:bus_member_balance_log:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, BusMemberBalanceLog.class);
+    }
+
+}

+ 34 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusMemberCardController.java

@@ -1,6 +1,8 @@
 package org.jeecg.modules.business.controller;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
+import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -68,6 +70,7 @@ public class BusMemberCardController extends JeecgController<BusMemberCard, IBus
 								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
 													  @RequestParam(name="startTime",required = false) String startTime,
 													  @RequestParam(name="endTime",required = false) String endTime,
+													  @RequestParam(name="hotelIds[]",required = false) List<String> hotelIds,
 								   HttpServletRequest req) {
 		LambdaQueryWrapper<BusMemberCard> queryWrapper = QueryGenerator.initQueryWrapper(busMemberCard, req.getParameterMap()).lambda();
 		if (ObjectUtils.isNotEmpty(startTime)) {
@@ -76,6 +79,13 @@ public class BusMemberCardController extends JeecgController<BusMemberCard, IBus
 		if (ObjectUtils.isNotEmpty(endTime)) {
 			queryWrapper.le(BusMemberCard::getCreateTime, DateUtil.parseDate(endTime));
 		}
+		if (ObjectUtils.isNotEmpty(hotelIds)) {
+			queryWrapper.and(j -> {
+				for (int k = 0; k < hotelIds.size(); k++) {
+					j = j.or().eq(BusMemberCard::getHotelId, hotelIds.get(k));
+				}
+			});
+		}
 		Page<BusMemberCard> page = new Page<BusMemberCard>(pageNo, pageSize);
 		IPage<BusMemberCard> pageList = busMemberCardService.page(page, queryWrapper);
 		pageList.getRecords().forEach(item -> {
@@ -193,6 +203,15 @@ public class BusMemberCardController extends JeecgController<BusMemberCard, IBus
 	//@RequiresPermissions("business:bus_member_card:delete")
 	@DeleteMapping(value = "/delete")
 	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		BusMemberCard member = busMemberCardService.getById(id);
+		if (member != null) {
+			if (member.getIntegral() > 0) {
+				return Result.error("剩余可用积分不可删除!");
+			}
+			if (member.getBalance().compareTo(BigDecimal.ZERO)>0) {
+				return Result.error("剩余可用余额不可删除!");
+			}
+		}
 		busMemberCardService.removeById(id);
 		return Result.OK("删除成功!");
 	}
@@ -208,7 +227,21 @@ public class BusMemberCardController extends JeecgController<BusMemberCard, IBus
 	//@RequiresPermissions("business:bus_member_card:deleteBatch")
 	@DeleteMapping(value = "/deleteBatch")
 	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		this.busMemberCardService.removeByIds(Arrays.asList(ids.split(",")));
+		List<String> idList = Arrays.asList(ids.split(","));
+		if (ObjectUtils.isNotEmpty(idList)) {
+			for (int i = 0; i < idList.size(); i++) {
+				BusMemberCard member = busMemberCardService.getById(idList.get(i));
+				if (member != null) {
+					if (member.getIntegral() > 0) {
+						return Result.error("剩余可用积分不可删除!");
+					}
+					if (member.getBalance().compareTo(BigDecimal.ZERO) > 0) {
+						return Result.error("剩余可用余额不可删除!");
+					}
+				}
+			}
+		}
+		this.busMemberCardService.removeByIds(idList);
 		return Result.OK("批量删除成功!");
 	}
 	

+ 109 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusMemberBalanceLog.java

@@ -0,0 +1,109 @@
+package org.jeecg.modules.business.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: bus_member_balance_log
+ * @Author: jeecg-boot
+ * @Date:   2023-03-13
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_member_balance_log")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_member_balance_log对象", description="bus_member_balance_log")
+public class BusMemberBalanceLog implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**关联租户*/
+	@Excel(name = "关联租户", width = 15)
+    @ApiModelProperty(value = "关联租户")
+    private String tenantId;
+	/**关联酒店*/
+	@Excel(name = "关联酒店", width = 15)
+    @ApiModelProperty(value = "关联酒店")
+    private String hotelId;
+	/**会员id*/
+	@Excel(name = "会员id", width = 15)
+    @ApiModelProperty(value = "会员id")
+    private String memberId;
+	/**类型*/
+	@Excel(name = "类型", width = 15)
+    @ApiModelProperty(value = "类型")
+    private Integer type;
+    /**状态*/
+    @Excel(name = "状态", width = 15)
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+	/**充值金额*/
+	@Excel(name = "充值金额", width = 15)
+    @ApiModelProperty(value = "充值金额")
+    private BigDecimal money;
+	/**金额余额*/
+	@Excel(name = "金额余额", width = 15)
+    @ApiModelProperty(value = "金额余额")
+    private BigDecimal balance;
+	/**赠送金额*/
+	@Excel(name = "赠送金额", width = 15)
+    @ApiModelProperty(value = "赠送金额")
+    private BigDecimal giveMoney;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remarks;
+	/**推荐员工*/
+	@Excel(name = "推荐员工", width = 15)
+    @ApiModelProperty(value = "推荐员工")
+    private String staffId;
+	/**支付方式*/
+	@Excel(name = "支付方式", width = 15)
+    @ApiModelProperty(value = "支付方式")
+    private String paymentMethod;
+	/**支付金额*/
+	@Excel(name = "支付金额", width = 15)
+    @ApiModelProperty(value = "支付金额")
+    private BigDecimal payMoney;
+	/**流水号*/
+	@Excel(name = "流水号", width = 15)
+    @ApiModelProperty(value = "流水号")
+    private String code;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField(exist = false)
+    private String hotelName;
+
+    @TableField(exist = false)
+    private String memberName;
+
+    @TableField(exist = false)
+    private String mobile;
+
+    @TableField(exist = false)
+    private String cardNo;
+
+    @TableField(exist = false)
+    private String paymentMethodName;
+}

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusMemberBalanceLogMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.business.entity.BusMemberBalanceLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: bus_member_balance_log
+ * @Author: jeecg-boot
+ * @Date:   2023-03-13
+ * @Version: V1.0
+ */
+public interface BusMemberBalanceLogMapper extends BaseMapper<BusMemberBalanceLog> {
+
+}

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusMemberBalanceLogMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.demo.business.mapper.BusMemberBalanceLogMapper">
+
+</mapper>

+ 22 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusMemberBalanceLogService.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.business.service;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.business.entity.BusMemberBalanceLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @Description: bus_member_balance_log
+ * @Author: jeecg-boot
+ * @Date:   2023-03-13
+ * @Version: V1.0
+ */
+public interface IBusMemberBalanceLogService extends IService<BusMemberBalanceLog> {
+    /**
+     * 充值/扣费余额
+     *
+     * @param dto
+     * @return
+     */
+    public Result saveBalance(BusMemberBalanceLog dto);
+}

+ 83 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusMemberBalanceLogServiceImpl.java

@@ -0,0 +1,83 @@
+package org.jeecg.modules.business.service.impl;
+
+import cn.hutool.core.date.DateTime;
+import org.apache.commons.lang3.ObjectUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.business.entity.BusMemberBalanceLog;
+import org.jeecg.modules.business.entity.BusMemberCard;
+import org.jeecg.modules.business.entity.BusMemberPointLog;
+import org.jeecg.modules.business.mapper.BusMemberBalanceLogMapper;
+import org.jeecg.modules.business.mapper.BusMemberCardMapper;
+import org.jeecg.modules.business.service.IBusMemberBalanceLogService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Random;
+import java.util.UUID;
+
+/**
+ * @Description: bus_member_balance_log
+ * @Author: jeecg-boot
+ * @Date:   2023-03-13
+ * @Version: V1.0
+ */
+@Service
+public class BusMemberBalanceLogServiceImpl extends ServiceImpl<BusMemberBalanceLogMapper, BusMemberBalanceLog> implements IBusMemberBalanceLogService {
+    @Resource
+    private BusMemberCardMapper busMemberCardMapper;
+    /**
+     * 生成16位数字+prefix
+     * @param prefix
+     * @return
+     */
+    private String randomNumber(String prefix) {
+        int first = new Random(10).nextInt(8) + 1;
+        int hashCode = UUID.randomUUID().toString().hashCode();
+        if (hashCode < 0) {
+            hashCode = -hashCode;
+        }
+        return prefix + first + String.format("%015d", hashCode);
+    }
+    /**
+     * 充值/扣费余额
+     *
+     * @param dto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Result saveBalance(BusMemberBalanceLog dto) {
+        if (ObjectUtils.isEmpty(dto.getMemberId())) return Result.error("会员id不能为空");
+        if (dto.getMoney().compareTo(BigDecimal.ZERO) <= 0) return Result.error("金额不能小于1!");
+        BusMemberCard member = busMemberCardMapper.selectById(dto.getMemberId());
+        if (ObjectUtils.isEmpty(member)) {
+            return Result.error("会员不存在");
+        }
+        String prefix="";
+        BigDecimal balance = new BigDecimal(0);
+        switch (dto.getType()) {
+            case 1:
+                balance = member.getBalance().add(dto.getMoney()).add(dto.getGiveMoney());
+                prefix="CZ";
+                break;
+            case 2:
+                balance = member.getBalance().subtract(dto.getMoney());
+                prefix="KF";
+                break;
+        }
+        if (balance.compareTo(BigDecimal.ZERO) < 0) balance = new BigDecimal(0);
+        member.setBalance(balance);
+        Integer res = busMemberCardMapper.updateById(member);
+        if (res > 0) {
+            dto.setBalance(balance);
+            dto.setCode(randomNumber(prefix));
+            dto.setStatus(1);
+            dto.setCreateTime(DateTime.now());
+            this.save(dto);
+        }
+        return Result.ok("创建成功");
+    }
+}