소스 검색

实现免房券发放给会员

gqx 2 년 전
부모
커밋
e9fd96743f

+ 16 - 3
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusMarketCouponsUsedController.java

@@ -138,9 +138,8 @@ public class BusMarketCouponsUsedController extends JeecgController<BusMarketCou
 	  * @param dto
 	  * @return
 	  */
-	 @AutoLog(value = "免房券领取使用表-生成")
-	 @ApiOperation(value="免房券领取使用表-生成", notes="免房券领取使用表-生成")
-	 //@RequiresPermissions("business:bus_market_coupons_used:generate")
+	 @AutoLog(value = "免房券领取使用表-免房券发放给非会员")
+	 @ApiOperation(value="免房券领取使用表-免房券发放给非会员", notes="免房券领取使用表-免房券发放给非会员")
 	 @PostMapping(value = "/gainCouponsUsedToNoMember")
 	 public Result<String> gainCouponsUsedToNoMember(@RequestBody ProvideCouponsUsedDto dto) {
 		 Result res = busMarketCouponsUsedService.gainCouponsUsedToNoMember(dto);
@@ -148,6 +147,20 @@ public class BusMarketCouponsUsedController extends JeecgController<BusMarketCou
 	 }
 
 	 /**
+	  *   免房券发放给会员
+	  *
+	  * @param dto
+	  * @return
+	  */
+	 @AutoLog(value = "免房券领取使用表-免房券发放给会员")
+	 @ApiOperation(value="免房券领取使用表-免房券发放给会员", notes="免房券领取使用表-免房券发放给会员")
+	 @PostMapping(value = "/gainCouponsUsedToMember")
+	 public Result<String> gainCouponsUsedToMember(@RequestBody ProvideCouponsUsedDto dto) {
+		 Result res = busMarketCouponsUsedService.gainCouponsUsedToMember(dto);
+		 return res;
+	 }
+
+	 /**
 	  * 作废
 	  * @param dto
 	  * @return

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

@@ -0,0 +1,195 @@
+package org.jeecg.modules.business.controller;
+
+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 org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.business.entity.BusHotel;
+import org.jeecg.modules.business.entity.BusMarketMember;
+import org.jeecg.modules.business.entity.BusMemberCard;
+import org.jeecg.modules.business.service.IBusHotelService;
+import org.jeecg.modules.business.service.IBusMarketMemberService;
+import org.jeecg.modules.business.service.IBusMemberCardService;
+
+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.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_card
+ * @Author: jeecg-boot
+ * @Date:   2023-03-10
+ * @Version: V1.0
+ */
+@Api(tags="bus_member_card")
+@RestController
+@RequestMapping("/business/busMemberCard")
+@Slf4j
+public class BusMemberCardController extends JeecgController<BusMemberCard, IBusMemberCardService> {
+	@Autowired
+	private IBusMemberCardService busMemberCardService;
+	 @Autowired
+	 private IBusHotelService busHotelService;
+	 @Autowired
+	 private IBusMarketMemberService busMarketMemberService;
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busMemberCard
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "bus_member_card-分页列表查询")
+	@ApiOperation(value="bus_member_card-分页列表查询", notes="bus_member_card-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusMemberCard>> queryPageList(BusMemberCard busMemberCard,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<BusMemberCard> queryWrapper = QueryGenerator.initQueryWrapper(busMemberCard, req.getParameterMap());
+		Page<BusMemberCard> page = new Page<BusMemberCard>(pageNo, pageSize);
+		IPage<BusMemberCard> pageList = busMemberCardService.page(page, queryWrapper);
+		pageList.getRecords().forEach(item -> {
+			BusHotel hotle = busHotelService.getById(item.getHotelId());
+			if (hotle != null) {
+				item.setHotelName(hotle.getName());
+			}
+			BusMarketMember busMarketMember = busMarketMemberService.getById(item.getGradeId());
+			if (busMarketMember != null) {
+				item.setGradeName(busMarketMember.getName());
+			}
+		});
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param busMemberCard
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_card-添加")
+	@ApiOperation(value="bus_member_card-添加", notes="bus_member_card-添加")
+	//@RequiresPermissions("business:bus_member_card:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BusMemberCard busMemberCard) {
+		busMemberCardService.save(busMemberCard);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param busMemberCard
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_card-编辑")
+	@ApiOperation(value="bus_member_card-编辑", notes="bus_member_card-编辑")
+	//@RequiresPermissions("business:bus_member_card:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusMemberCard busMemberCard) {
+		busMemberCardService.updateById(busMemberCard);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_card-通过id删除")
+	@ApiOperation(value="bus_member_card-通过id删除", notes="bus_member_card-通过id删除")
+	//@RequiresPermissions("business:bus_member_card:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busMemberCardService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "bus_member_card-批量删除")
+	@ApiOperation(value="bus_member_card-批量删除", notes="bus_member_card-批量删除")
+	//@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(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "bus_member_card-通过id查询")
+	@ApiOperation(value="bus_member_card-通过id查询", notes="bus_member_card-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusMemberCard> queryById(@RequestParam(name="id",required=true) String id) {
+		BusMemberCard busMemberCard = busMemberCardService.getById(id);
+		if(busMemberCard==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busMemberCard);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busMemberCard
+    */
+    //@RequiresPermissions("business:bus_member_card:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusMemberCard busMemberCard) {
+        return super.exportXls(request, busMemberCard, BusMemberCard.class, "bus_member_card");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("business:bus_member_card:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, BusMemberCard.class);
+    }
+
+}

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/dto/ProvideCouponsUsedDto.java

@@ -9,5 +9,6 @@ public class ProvideCouponsUsedDto {
     private String couponsId;
     private Integer num;
     private List<MobileDto> mobiles;
+    private List<String> memberIds;
 }
 

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

@@ -0,0 +1,137 @@
+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_card
+ * @Author: jeecg-boot
+ * @Date:   2023-03-10
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_member_card")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_member_card对象", description="bus_member_card")
+public class BusMemberCard 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;
+	/**手机号*/
+	@Excel(name = "手机号", width = 15)
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+	/**会员卡号*/
+	@Excel(name = "会员卡号", width = 15)
+    @ApiModelProperty(value = "会员卡号")
+    private String cardNo;
+	/**卡内码*/
+	@Excel(name = "卡内码", width = 15)
+    @ApiModelProperty(value = "卡内码")
+    private String cardInnerNo;
+	/**等级类型*/
+	@Excel(name = "等级类型", width = 15)
+    @ApiModelProperty(value = "等级类型")
+    private String gradeId;
+	/**会员费*/
+	@Excel(name = "会员费", width = 15)
+    @ApiModelProperty(value = "会员费")
+    private BigDecimal memberFee;
+	/**付款类型*/
+	@Excel(name = "付款类型", width = 15)
+    @ApiModelProperty(value = "付款类型")
+    private Integer payType;
+	/**付款方式*/
+	@Excel(name = "付款方式", width = 15)
+    @ApiModelProperty(value = "付款方式")
+    private Integer paymentMethod;
+	/**会员姓名*/
+	@Excel(name = "会员姓名", width = 15)
+    @ApiModelProperty(value = "会员姓名")
+    private String name;
+	/**头像*/
+	@Excel(name = "头像", width = 15)
+    @ApiModelProperty(value = "头像")
+    private String avatar;
+	/**性别*/
+	@Excel(name = "性别", width = 15)
+    @ApiModelProperty(value = "性别")
+    private Integer sex;
+	/**证件类型*/
+	@Excel(name = "证件类型", width = 15)
+    @ApiModelProperty(value = "证件类型")
+    private Integer certificateType;
+	/**证件号*/
+	@Excel(name = "证件号", width = 15)
+    @ApiModelProperty(value = "证件号")
+    private String certificateNo;
+	/**地址*/
+	@Excel(name = "地址", width = 15)
+    @ApiModelProperty(value = "地址")
+    private String address;
+	/**消费密码*/
+	@Excel(name = "消费密码", width = 15)
+    @ApiModelProperty(value = "消费密码")
+    private String consumePassword;
+	/**有效期*/
+	@Excel(name = "有效期", width = 15)
+    @ApiModelProperty(value = "有效期")
+    private Integer validity;
+	/**有效期截止日期*/
+	@Excel(name = "有效期截止日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "有效期截止日期")
+    private Date validityEndTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**推荐员工*/
+	@Excel(name = "推荐员工", width = 15)
+    @ApiModelProperty(value = "推荐员工")
+    private String staffId;
+	/**可用积分*/
+	@Excel(name = "可用积分", width = 15)
+    @ApiModelProperty(value = "可用积分")
+    private Integer integral;
+	/**可用余额*/
+	@Excel(name = "可用余额", width = 15)
+    @ApiModelProperty(value = "可用余额")
+    private BigDecimal balance;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+	@TableField(exist = false)
+	private String hotelName;
+	@TableField(exist = false)
+    private String gradeName;
+}

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusMemberCardMapper.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.BusMemberCard;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: bus_member_card
+ * @Author: jeecg-boot
+ * @Date:   2023-03-10
+ * @Version: V1.0
+ */
+public interface BusMemberCardMapper extends BaseMapper<BusMemberCard> {
+
+}

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusMemberCardMapper.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.BusMemberCardMapper">
+
+</mapper>

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

@@ -34,4 +34,11 @@ public interface IBusMarketCouponsUsedService extends IService<BusMarketCouponsU
      * @return
      */
     public Result gainCouponsUsedToNoMember(ProvideCouponsUsedDto dto);
+
+    /**
+     * 发放免房券给会员
+     * @param dto
+     * @return
+     */
+    public Result gainCouponsUsedToMember(ProvideCouponsUsedDto dto);
 }

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

@@ -0,0 +1,14 @@
+package org.jeecg.modules.business.service;
+
+import org.jeecg.modules.business.entity.BusMemberCard;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: bus_member_card
+ * @Author: jeecg-boot
+ * @Date:   2023-03-10
+ * @Version: V1.0
+ */
+public interface IBusMemberCardService extends IService<BusMemberCard> {
+
+}

+ 98 - 5
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusMarketCouponsUsedServiceImpl.java

@@ -15,10 +15,12 @@ import org.jeecg.modules.business.dto.MobileDto;
 import org.jeecg.modules.business.dto.ProvideCouponsUsedDto;
 import org.jeecg.modules.business.entity.BusMarketCoupons;
 import org.jeecg.modules.business.entity.BusMarketCouponsUsed;
+import org.jeecg.modules.business.entity.BusMemberCard;
 import org.jeecg.modules.business.enums.CouponsStatusEnum;
 import org.jeecg.modules.business.mapper.BusMarketCouponsMapper;
 import org.jeecg.modules.business.mapper.BusMarketCouponsUsedMapper;
 import org.jeecg.modules.business.service.IBusMarketCouponsUsedService;
+import org.jeecg.modules.system.entity.SysUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -46,6 +48,8 @@ public class BusMarketCouponsUsedServiceImpl extends ServiceImpl<BusMarketCoupon
     private BusMarketCouponsMapper busMarketCouponsMapper;
     @Autowired
     private RedisUtil redisUtil;
+    @Resource
+    private BusMemberCardServiceImpl busMemberCardService;
     /**
      * 生成16位数字+prefix
      * @param prefix
@@ -127,12 +131,16 @@ public class BusMarketCouponsUsedServiceImpl extends ServiceImpl<BusMarketCoupon
 //            for (int i = 0; i < dto.getMobiles().size(); i++) {
 //                int num = dto.getNum();
             //以防手机号相同用分组实现
-            Map<String, List<MobileDto>> map=  dto.getMobiles().stream().collect(Collectors.groupingBy(t->t.getValue()));
-            for (String key:map.keySet()) {
-                int num = dto.getNum()*map.get(key).size();
-                if (num> coupons.getKlqzs()) {
+            Map<String, List<MobileDto>> map = dto.getMobiles().stream().collect(Collectors.groupingBy(t -> t.getValue()));
+            for (String key : map.keySet()) {
+                int num = dto.getNum() * map.get(key).size();
+                if (num > coupons.getKlqzs()) {
                     throw new JeecgBootException("每人最多可领取" + coupons.getKlqzs());
                 }
+                LambdaQueryWrapper<BusMemberCard> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(BusMemberCard::getMobile, key);
+                //查询手机号是否是会员
+                BusMemberCard memeberCard = busMemberCardService.getOne(queryWrapper3);
                 while (num > 0) {
                     LambdaQueryWrapper<BusMarketCouponsUsed> queryWrapper2 = new LambdaQueryWrapper<>();
                     queryWrapper2.eq(BusMarketCouponsUsed::getCouponsId, dto.getCouponsId());
@@ -154,6 +162,10 @@ public class BusMarketCouponsUsedServiceImpl extends ServiceImpl<BusMarketCoupon
                     //这里到时候要根据会员表查询一下是否存在会员信息,现在没有会员表
 //                    model.setMobile(dto.getMobiles().get(i).getValue());
                     model.setMobile(key);
+                    if (memeberCard != null) {
+                        model.setUserName(memeberCard.getName());
+                        model.setUserid(memeberCard.getId());
+                    }
                     model.setGainTime(DateTime.now());
                     model.setStatus(CouponsStatusEnum.received.getKey());
                     index++;
@@ -175,7 +187,7 @@ public class BusMarketCouponsUsedServiceImpl extends ServiceImpl<BusMarketCoupon
         } catch (Exception ex) {
             message = "创建失败";
         } finally {
-            //删除redis缓存
+            //删除redis缓存,添加成功后也可不删除
             list.forEach(item -> {
                 String keyString = String.format("sys:cache:couponsused::%s", item.getId());
                 redisUtil.del(keyString);
@@ -184,4 +196,85 @@ public class BusMarketCouponsUsedServiceImpl extends ServiceImpl<BusMarketCoupon
         return message == "创建成功" ? Result.ok(message) : Result.error(message);
     }
 
+
+    /**
+     * 发放免房券给会员
+     * @param dto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Result gainCouponsUsedToMember(ProvideCouponsUsedDto dto) {
+        if (ObjectUtils.isEmpty(dto.getCouponsId())) return Result.error("免房券id不能为空");
+        if (dto.getNum() <= 0) return Result.error("每人发放张数不能小于1!");
+        if (dto.getMemberIds() == null || dto.getMemberIds().size() <= 0) return Result.error("会员不能为空!");
+        BusMarketCoupons coupons = busMarketCouponsMapper.selectById(dto.getCouponsId());
+        if (ObjectUtils.isEmpty(coupons)) {
+            return Result.error("免房券活动不存在");
+        }
+        if (dto.getNum() > coupons.getKlqzs()) {
+            return Result.error("每人最多可领取" + coupons.getKlqzs());
+        }
+        int totalNum = dto.getMemberIds().size() * dto.getNum();
+
+        LambdaQueryWrapper<BusMarketCouponsUsed> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BusMarketCouponsUsed::getStatus, CouponsStatusEnum.notClaimed.getKey());
+        queryWrapper.eq(BusMarketCouponsUsed::getCouponsId, dto.getCouponsId());
+
+        Page<BusMarketCouponsUsed> page = new Page<BusMarketCouponsUsed>(1, totalNum);
+        IPage<BusMarketCouponsUsed> pageList = this.page(page, queryWrapper);
+        int count = pageList.getRecords().size();
+        if (totalNum > count) {
+            return Result.error("待领取数量" + count + ",不够发放");
+        }
+        List<BusMarketCouponsUsed> list = pageList.getRecords();
+        int index = 0;
+        String message = "创建成功";
+        try {
+            //以防会员相同用分组实现
+            Map<String, List<String>> map=  dto.getMemberIds().stream().collect(Collectors.groupingBy(t->t));
+            for (String key:map.keySet()) {
+                int num = dto.getNum()*map.get(key).size();
+                if (num> coupons.getKlqzs()) {
+                    throw new JeecgBootException("每人最多可领取" + coupons.getKlqzs());
+                }
+                BusMemberCard memeberCard=busMemberCardService.getById(key);
+                while (num > 0) {
+                    LambdaQueryWrapper<BusMarketCouponsUsed> queryWrapper2 = new LambdaQueryWrapper<>();
+                    queryWrapper2.eq(BusMarketCouponsUsed::getCouponsId, dto.getCouponsId());
+                    queryWrapper2.and(i -> i.eq(BusMarketCouponsUsed::getUserid, key).or().eq(BusMarketCouponsUsed::getMobile, memeberCard.getMobile()));
+                    Long gainCount = this.count(queryWrapper2);
+                    if (gainCount > coupons.getKlqzs()) {
+                        throw new JeecgBootException("每人限领数量" + coupons.getKlqzs());
+                    }
+                    BusMarketCouponsUsed model = list.get(index);
+                    String keyString = String.format("sys:cache:couponsused::%s", model.getId());
+                    if (redisUtil.hasKey(keyString)) {
+                        throw new JeecgBootException("该免房券已被领取,请勿同时操作该功能");
+                    } else {
+                        redisUtil.set(keyString, true);
+                    }
+                    model.setUserid(memeberCard.getId());
+                    model.setUserName(memeberCard.getName());
+                    model.setMobile(memeberCard.getMobile());
+                    model.setGainTime(DateTime.now());
+                    model.setStatus(CouponsStatusEnum.received.getKey());
+                    index++;
+                    num--;
+                }
+            }
+
+            this.updateBatchById(list);
+        } catch (JeecgBootException ex) {
+            message = ex.getMessage();
+        } catch (Exception ex) {
+            message = "创建失败";
+        } finally {
+            //删除redis缓存,添加成功后也可不删除
+            list.forEach(item -> {
+                String keyString = String.format("sys:cache:couponsused::%s", item.getId());
+                redisUtil.del(keyString);
+            });
+        }
+        return message == "创建成功" ? Result.ok(message) : Result.error(message);
+    }
 }

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.business.service.impl;
+
+import org.jeecg.modules.business.entity.BusMemberCard;
+import org.jeecg.modules.business.mapper.BusMemberCardMapper;
+import org.jeecg.modules.business.service.IBusMemberCardService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: bus_member_card
+ * @Author: jeecg-boot
+ * @Date:   2023-03-10
+ * @Version: V1.0
+ */
+@Service
+public class BusMemberCardServiceImpl extends ServiceImpl<BusMemberCardMapper, BusMemberCard> implements IBusMemberCardService {
+
+}