gqx 2 anni fa
parent
commit
e864159e1b
12 ha cambiato i file con 767 aggiunte e 11 eliminazioni
  1. 22 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusMarketCouponsCashController.java
  2. 258 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusMarketCouponsCashUsedController.java
  3. 20 5
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusMarketCouponsCash.java
  4. 100 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusMarketCouponsCashUsed.java
  5. 3 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusMarketCouponsCashMapper.java
  6. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusMarketCouponsCashUsedMapper.java
  7. 25 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusMarketCouponsCashMapper.xml
  8. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusMarketCouponsCashUsedMapper.xml
  9. 4 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusMarketCouponsCashService.java
  10. 31 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusMarketCouponsCashUsedService.java
  11. 10 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusMarketCouponsCashServiceImpl.java
  12. 272 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusMarketCouponsCashUsedServiceImpl.java

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

@@ -10,9 +10,14 @@ 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.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.BusMarketCouponsCash;
+import org.jeecg.modules.business.service.IBusHotelService;
 import org.jeecg.modules.business.service.IBusMarketCouponsCashService;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -50,7 +55,10 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
 public class BusMarketCouponsCashController extends JeecgController<BusMarketCouponsCash, IBusMarketCouponsCashService> {
 	@Autowired
 	private IBusMarketCouponsCashService busMarketCouponsCashService;
-	
+
+	 @Autowired
+	 private IBusHotelService busHotelService;
+
 	/**
 	 * 分页列表查询
 	 *
@@ -67,9 +75,14 @@ public class BusMarketCouponsCashController extends JeecgController<BusMarketCou
 								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
 								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
 								   HttpServletRequest req) {
-		QueryWrapper<BusMarketCouponsCash> queryWrapper = QueryGenerator.initQueryWrapper(busMarketCouponsCash, req.getParameterMap());
 		Page<BusMarketCouponsCash> page = new Page<BusMarketCouponsCash>(pageNo, pageSize);
-		IPage<BusMarketCouponsCash> pageList = busMarketCouponsCashService.page(page, queryWrapper);
+		IPage<BusMarketCouponsCash> pageList = busMarketCouponsCashService.pageList(page, busMarketCouponsCash);
+		pageList.getRecords().forEach(item -> {
+			BusHotel hotle = busHotelService.getById(item.getHotelId());
+			if (hotle != null) {
+				item.setHotelName(hotle.getName());
+			}
+		});
 		return Result.OK(pageList);
 	}
 	
@@ -84,6 +97,12 @@ public class BusMarketCouponsCashController extends JeecgController<BusMarketCou
 	//@RequiresPermissions("business:bus_market_coupons_cash_info:add")
 	@PostMapping(value = "/add")
 	public Result<String> add(@RequestBody BusMarketCouponsCash busMarketCouponsCash) {
+		LoginUser user = TokenUtils.getAuthUser();
+		if (user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")) {
+			busMarketCouponsCash.setTenantId(user.getRelTenantIds());
+		} else {
+			throw new JeecgBootException("当前登录人租户信息错误");
+		}
 		busMarketCouponsCashService.save(busMarketCouponsCash);
 		return Result.OK("添加成功!");
 	}

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

@@ -0,0 +1,258 @@
+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 com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+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.dto.CouponsGenerateDto;
+import org.jeecg.modules.business.dto.PostDataDto;
+import org.jeecg.modules.business.dto.ProvideCouponsUsedDto;
+import org.jeecg.modules.business.entity.BusMarketCoupons;
+import org.jeecg.modules.business.entity.BusMarketCouponsCashUsed;
+import org.jeecg.modules.business.entity.BusMarketCouponsUsed;
+import org.jeecg.modules.business.enums.CouponsStatusEnum;
+import org.jeecg.modules.business.service.IBusMarketCouponsCashUsedService;
+
+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.IBusMarketCouponsService;
+import org.jeecg.modules.business.service.IBusMarketCouponsUsedService;
+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_market_coupons_cash_used
+ * @Author: jeecg-boot
+ * @Date:   2023-03-11
+ * @Version: V1.0
+ */
+@Api(tags="bus_market_coupons_cash_used")
+@RestController
+@RequestMapping("/business/busMarketCouponsCashUsed")
+@Slf4j
+public class BusMarketCouponsCashUsedController extends JeecgController<BusMarketCouponsCashUsed, IBusMarketCouponsCashUsedService> {
+	@Autowired
+	private IBusMarketCouponsCashUsedService busMarketCouponsCashUsedService;
+	 @Autowired
+	 private IBusMarketCouponsService busMarketCouponsService;
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busMarketCouponsCashUsed
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "bus_market_coupons_cash_used-分页列表查询")
+	@ApiOperation(value="bus_market_coupons_cash_used-分页列表查询", notes="bus_market_coupons_cash_used-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusMarketCouponsCashUsed>> queryPageList(BusMarketCouponsCashUsed busMarketCouponsCashUsed,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<BusMarketCouponsCashUsed> queryWrapper = QueryGenerator.initQueryWrapper(busMarketCouponsCashUsed, req.getParameterMap());
+		Page<BusMarketCouponsCashUsed> page = new Page<BusMarketCouponsCashUsed>(pageNo, pageSize);
+		IPage<BusMarketCouponsCashUsed> pageList = busMarketCouponsCashUsedService.page(page, queryWrapper);
+		pageList.getRecords().forEach(item -> {
+			BusMarketCoupons coupons = busMarketCouponsService.getById(item.getCouponsId());
+			if (coupons != null) {
+				item.setConponsName(coupons.getName());
+			}
+			CouponsStatusEnum couponsStatusEnum = CouponsStatusEnum.val(item.getStatus());
+			if (couponsStatusEnum != null) {
+				item.setStatusName(couponsStatusEnum.getTitle());
+			}
+		});
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param busMarketCouponsCashUsed
+	 * @return
+	 */
+	@AutoLog(value = "bus_market_coupons_cash_used-添加")
+	@ApiOperation(value="bus_market_coupons_cash_used-添加", notes="bus_market_coupons_cash_used-添加")
+	//@RequiresPermissions("business:bus_market_coupons_cash_used:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BusMarketCouponsCashUsed busMarketCouponsCashUsed) {
+		busMarketCouponsCashUsedService.save(busMarketCouponsCashUsed);
+		return Result.OK("添加成功!");
+	}
+
+	 /**
+	  *   生成优惠券
+	  *
+	  * @param dto
+	  * @return
+	  */
+	 @AutoLog(value = "优惠券领取使用表-生成")
+	 @ApiOperation(value="优惠券领取使用表-生成", notes="优惠券领取使用表-生成")
+	 @PostMapping(value = "/generate")
+	 public Result<String> generate(@RequestBody CouponsGenerateDto dto) {
+		 Result res = busMarketCouponsCashUsedService.generate(dto);
+		 return res;
+	 }
+
+	 /**
+	  *   优惠券发放给非会员
+	  *
+	  * @param dto
+	  * @return
+	  */
+	 @AutoLog(value = "优惠券领取使用表-优惠券发放给非会员")
+	 @ApiOperation(value="优惠券领取使用表-优惠券发放给非会员", notes="优惠券领取使用表-优惠券发放给非会员")
+	 @PostMapping(value = "/gainCouponsCashUsedToNoMember")
+	 public Result<String> gainCouponsCashUsedToNoMember(@RequestBody ProvideCouponsUsedDto dto) {
+		 Result res = busMarketCouponsCashUsedService.gainCouponsCashUsedToNoMember(dto);
+		 return res;
+	 }
+
+	 /**
+	  *   优惠券发放给会员
+	  *
+	  * @param dto
+	  * @return
+	  */
+	 @AutoLog(value = "优惠券领取使用表-优惠券发放给会员")
+	 @ApiOperation(value="优惠券领取使用表-优惠券发放给会员", notes="优惠券领取使用表-优惠券发放给会员")
+	 @PostMapping(value = "/gainCouponsCashUsedToMember")
+	 public Result<String> gainCouponsCashUsedToMember(@RequestBody ProvideCouponsUsedDto dto) {
+		 Result res = busMarketCouponsCashUsedService.gainCouponsCashUsedToMember(dto);
+		 return res;
+	 }
+
+	 /**
+	  * 作废
+	  * @param dto
+	  * @return
+	  */
+	 @AutoLog(value = "优惠券领取使用表-作废")
+	 @ApiOperation(value="优惠券领取使用表-作废", notes="优惠券领取使用表-作废")
+	 @RequestMapping(value = "/voided", method = {RequestMethod.PUT,RequestMethod.POST})
+	 public Result<String> voided(@RequestBody PostDataDto dto) {
+		 LambdaUpdateWrapper<BusMarketCouponsCashUsed> updateWrapper = new UpdateWrapper().lambda();
+		 updateWrapper.set(BusMarketCouponsCashUsed::getStatus, CouponsStatusEnum.voided.getKey());
+		 updateWrapper.eq(BusMarketCouponsCashUsed::getId, dto.getId());
+		 busMarketCouponsCashUsedService.update(updateWrapper);
+		 return Result.OK("编辑成功!");
+	 }
+	
+	/**
+	 *  编辑
+	 *
+	 * @param busMarketCouponsCashUsed
+	 * @return
+	 */
+	@AutoLog(value = "bus_market_coupons_cash_used-编辑")
+	@ApiOperation(value="bus_market_coupons_cash_used-编辑", notes="bus_market_coupons_cash_used-编辑")
+	//@RequiresPermissions("business:bus_market_coupons_cash_used:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusMarketCouponsCashUsed busMarketCouponsCashUsed) {
+		busMarketCouponsCashUsedService.updateById(busMarketCouponsCashUsed);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "bus_market_coupons_cash_used-通过id删除")
+	@ApiOperation(value="bus_market_coupons_cash_used-通过id删除", notes="bus_market_coupons_cash_used-通过id删除")
+	//@RequiresPermissions("business:bus_market_coupons_cash_used:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busMarketCouponsCashUsedService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "bus_market_coupons_cash_used-批量删除")
+	@ApiOperation(value="bus_market_coupons_cash_used-批量删除", notes="bus_market_coupons_cash_used-批量删除")
+	//@RequiresPermissions("business:bus_market_coupons_cash_used:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.busMarketCouponsCashUsedService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "bus_market_coupons_cash_used-通过id查询")
+	@ApiOperation(value="bus_market_coupons_cash_used-通过id查询", notes="bus_market_coupons_cash_used-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusMarketCouponsCashUsed> queryById(@RequestParam(name="id",required=true) String id) {
+		BusMarketCouponsCashUsed busMarketCouponsCashUsed = busMarketCouponsCashUsedService.getById(id);
+		if(busMarketCouponsCashUsed==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busMarketCouponsCashUsed);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busMarketCouponsCashUsed
+    */
+    //@RequiresPermissions("business:bus_market_coupons_cash_used:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusMarketCouponsCashUsed busMarketCouponsCashUsed) {
+        return super.exportXls(request, busMarketCouponsCashUsed, BusMarketCouponsCashUsed.class, "bus_market_coupons_cash_used");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("business:bus_market_coupons_cash_used:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, BusMarketCouponsCashUsed.class);
+    }
+
+}

+ 20 - 5
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusMarketCouponsCash.java

@@ -4,10 +4,8 @@ import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
 import java.util.Date;
 import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableLogic;
+
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -63,7 +61,7 @@ public class BusMarketCouponsCash implements Serializable {
 	/**优惠限制*/
 	@Excel(name = "优惠限制", width = 15)
     @ApiModelProperty(value = "优惠限制")
-    private String type;
+    private Integer type;
 	/**可使用最低金额*/
 	@Excel(name = "可使用最低金额", width = 15)
     @ApiModelProperty(value = "可使用最低金额")
@@ -92,4 +90,21 @@ public class BusMarketCouponsCash implements Serializable {
 	@Excel(name = "使用说明", width = 15)
     @ApiModelProperty(value = "使用说明")
     private String ruleDec;
+
+    @TableField(exist = false)
+    private String hotelName;
+
+    @TableField(exist = false)
+    private Integer count;
+
+    @TableField(exist = false)
+    private Integer notClaimed;
+
+    @TableField(exist = false)
+    private Integer received;
+
+    @TableField(exist = false)
+    private Integer used;
+    @TableField(exist = false)
+    private Integer voided;
 }

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

@@ -0,0 +1,100 @@
+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_market_coupons_cash_used
+ * @Author: jeecg-boot
+ * @Date:   2023-03-11
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_market_coupons_cash_used")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_market_coupons_cash_used对象", description="bus_market_coupons_cash_used")
+public class BusMarketCouponsCashUsed 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 couponsId;
+	/**券号*/
+	@Excel(name = "券号", width = 15)
+    @ApiModelProperty(value = "券号")
+    private String code;
+	/**状态 0未领取 1已领取 2已使用 3已作废*/
+	@Excel(name = "状态 0未领取 1已领取 2已使用 3已作废", width = 15)
+    @ApiModelProperty(value = "状态 0未领取 1已领取 2已使用 3已作废")
+    private Integer status;
+	/**会员id*/
+	@Excel(name = "会员id", width = 15)
+    @ApiModelProperty(value = "会员id")
+    private String userid;
+	/**姓名*/
+	@Excel(name = "姓名", width = 15)
+    @ApiModelProperty(value = "姓名")
+    private String userName;
+	/**房间号*/
+	@Excel(name = "房间号", width = 15)
+    @ApiModelProperty(value = "房间号")
+    private String roomNumber;
+	/**入住单号*/
+	@Excel(name = "入住单号", width = 15)
+    @ApiModelProperty(value = "入住单号")
+    private String checkedInNo;
+	/**手机号*/
+	@Excel(name = "手机号", width = 15)
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**领取时间*/
+	@Excel(name = "领取时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "领取时间")
+    private Date gainTime;
+	/**使用时间*/
+	@Excel(name = "使用时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "使用时间")
+    private Date usedTime;
+
+    @TableField(exist = false)
+    private String conponsName;
+
+    @TableField(exist = false)
+    private String statusName;
+}

+ 3 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusMarketCouponsCashMapper.java

@@ -2,7 +2,9 @@ package org.jeecg.modules.business.mapper;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.business.entity.BusMarketCoupons;
 import org.jeecg.modules.business.entity.BusMarketCouponsCash;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -13,5 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @Version: V1.0
  */
 public interface BusMarketCouponsCashMapper extends BaseMapper<BusMarketCouponsCash> {
-
+    public List<BusMarketCouponsCash> getCouponsCashList(Page<BusMarketCouponsCash> page, @Param("busMarketCouponsCash") BusMarketCouponsCash model);
 }

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

+ 25 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusMarketCouponsCashMapper.xml

@@ -1,5 +1,29 @@
 <?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.BusMarketCouponsCashMapper">
+<mapper namespace="org.jeecg.modules.business.mapper.BusMarketCouponsCashMapper">
+    <select id="getCouponsCashList" parameterType="Object" resultType="org.jeecg.modules.business.entity.BusMarketCouponsCash">
+        select c.*,ifnull(u.count,0) as count,ifnull(u.not_claimed,0) as not_claimed,ifnull(u.received,0) as received,ifnull(u.used,0) as used,ifnull(u.voided,0) as voided from bus_market_coupons_cash_info c
+        left join (select coupons_id,count(0) as count
+        ,SUM(CASE WHEN `status`  = 0 then 1 else 0 end) as not_claimed
+        ,SUM(CASE WHEN `status`  = 1 then 1 else 0 end) as received
+        ,SUM(CASE WHEN `status`  = 2 then 1 else 0 end) as used
+        ,SUM(CASE WHEN `status`  = 3 then 1 else 0 end) as voided
+        from bus_market_coupons_cash_used  group by coupons_id) u
+        on u.coupons_id=c.id
+        where c.hotel_id = #{busMarketCouponsCash.hotelId}
+        <if test="busMarketCouponsCash.hotelId!= null">
+            <if test="busMarketCouponsCash.name !=null and busMarketCouponsCash.name != ''">
+                and c.name like CONCAT(CONCAT('%', #{busMarketCouponsCash.name}), '%')
+            </if>
 
+            <if test="busMarketCouponsCash.startTime !=null and busMarketCouponsCash.startTime != ''">
+                and c.start_time &gt;= #{busMarketCouponsCash.startTime}
+            </if>
+
+            <if test="busMarketCouponsCash.endTime !=null and busMarketCouponsCash.endTime != ''">
+                and c.end_time &lt;= #{busMarketCouponsCash.endTime}
+            </if>
+        </if>
+        ORDER BY c.id desc
+    </select>
 </mapper>

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

+ 4 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusMarketCouponsCashService.java

@@ -1,5 +1,8 @@
 package org.jeecg.modules.business.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.business.entity.BusMarketCoupons;
 import org.jeecg.modules.business.entity.BusMarketCouponsCash;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -10,5 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Version: V1.0
  */
 public interface IBusMarketCouponsCashService extends IService<BusMarketCouponsCash> {
-
+    public Page<BusMarketCouponsCash> pageList(Page<BusMarketCouponsCash> page, @Param("busMarketCouponsCash") BusMarketCouponsCash model);
 }

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

@@ -0,0 +1,31 @@
+package org.jeecg.modules.business.service;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.business.dto.CouponsGenerateDto;
+import org.jeecg.modules.business.dto.ProvideCouponsUsedDto;
+import org.jeecg.modules.business.entity.BusMarketCouponsCashUsed;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: bus_market_coupons_cash_used
+ * @Author: jeecg-boot
+ * @Date:   2023-03-11
+ * @Version: V1.0
+ */
+public interface IBusMarketCouponsCashUsedService extends IService<BusMarketCouponsCashUsed> {
+    public Result generate(CouponsGenerateDto dto);
+
+    /**
+     * 发放免房券给非会员
+     * @param dto
+     * @return
+     */
+    public Result gainCouponsCashUsedToNoMember(ProvideCouponsUsedDto dto);
+
+    /**
+     * 发放免房券给会员
+     * @param dto
+     * @return
+     */
+    public Result gainCouponsCashUsedToMember(ProvideCouponsUsedDto dto);
+}

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

@@ -1,12 +1,17 @@
 package org.jeecg.modules.business.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.business.entity.BusMarketCoupons;
 import org.jeecg.modules.business.entity.BusMarketCouponsCash;
 import org.jeecg.modules.business.mapper.BusMarketCouponsCashMapper;
+import org.jeecg.modules.business.mapper.BusMarketCouponsMapper;
 import org.jeecg.modules.business.service.IBusMarketCouponsCashService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import javax.annotation.Resource;
+
 /**
  * @Description: bus_market_coupons_cash_info
  * @Author: jeecg-boot
@@ -15,5 +20,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  */
 @Service
 public class BusMarketCouponsCashServiceImpl extends ServiceImpl<BusMarketCouponsCashMapper, BusMarketCouponsCash> implements IBusMarketCouponsCashService {
+    @Resource
+    private BusMarketCouponsCashMapper busMarketCouponsCashMapper;
 
+    public Page<BusMarketCouponsCash> pageList(Page<BusMarketCouponsCash> page, BusMarketCouponsCash model) {
+        return page.setRecords(busMarketCouponsCashMapper.getCouponsCashList(page, model));
+    }
 }

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

@@ -0,0 +1,272 @@
+package org.jeecg.modules.business.service.impl;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang3.ObjectUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.modules.business.dto.CouponsGenerateDto;
+import org.jeecg.modules.business.dto.MobileDto;
+import org.jeecg.modules.business.dto.ProvideCouponsUsedDto;
+import org.jeecg.modules.business.entity.*;
+import org.jeecg.modules.business.enums.CouponsStatusEnum;
+import org.jeecg.modules.business.mapper.BusMarketCouponsCashMapper;
+import org.jeecg.modules.business.mapper.BusMarketCouponsCashUsedMapper;
+import org.jeecg.modules.business.mapper.BusMarketCouponsMapper;
+import org.jeecg.modules.business.service.IBusMarketCouponsCashUsedService;
+import org.springframework.beans.factory.annotation.Autowired;
+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.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: bus_market_coupons_cash_used
+ * @Author: jeecg-boot
+ * @Date:   2023-03-11
+ * @Version: V1.0
+ */
+@Service
+public class BusMarketCouponsCashUsedServiceImpl extends ServiceImpl<BusMarketCouponsCashUsedMapper, BusMarketCouponsCashUsed> implements IBusMarketCouponsCashUsedService {
+
+    @Resource
+    private BusMarketCouponsCashMapper busMarketCouponsCashMapper;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Resource
+    private BusMemberCardServiceImpl busMemberCardService;
+    /**
+     * 生成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 generate(CouponsGenerateDto dto){
+        if(ObjectUtils.isEmpty(dto.getCouponsId())) return Result.error("优惠券id不能为空");
+        if(dto.getNum()<=0) return Result.error("生成数量不能小于1!");
+        BusMarketCouponsCash coupons=busMarketCouponsCashMapper .selectById(dto.getCouponsId());
+        if(ObjectUtils.isEmpty(coupons)) {
+            return Result.error("优惠券活动不存在");
+        }
+        List<BusMarketCouponsCashUsed> busMarketCouponsUsedList = new ArrayList<>();
+        while (dto.getNum()>0){
+            BusMarketCouponsCashUsed busMarketCouponsCashUsed =new BusMarketCouponsCashUsed();
+            busMarketCouponsCashUsed.setTenantId(TokenUtils.currentTenantId());
+            busMarketCouponsCashUsed.setHotelId(coupons.getHotelId());
+            busMarketCouponsCashUsed.setCouponsId(dto.getCouponsId());
+            busMarketCouponsCashUsed.setCode(randomNumber("YHJ"));
+            busMarketCouponsCashUsed.setStatus(0);
+            busMarketCouponsCashUsed.setCreateTime(DateTime.now());
+            busMarketCouponsUsedList.add(busMarketCouponsCashUsed);
+            dto.setNum(dto.getNum()-1);
+        }
+        this.saveBatch(busMarketCouponsUsedList);
+        return Result.ok("创建成功");
+    }
+
+    /**
+     * 发放优惠券给非会员
+     * @param dto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Result gainCouponsCashUsedToNoMember(ProvideCouponsUsedDto dto) {
+        if (ObjectUtils.isEmpty(dto.getCouponsId())) return Result.error("优惠券id不能为空");
+        if (dto.getNum() <= 0) return Result.error("每人发放张数不能小于1!");
+        if (dto.getMobiles() == null || dto.getMobiles().size() <= 0) return Result.error("手机号不能为空!");
+        BusMarketCouponsCash coupons = busMarketCouponsCashMapper.selectById(dto.getCouponsId());
+        if (ObjectUtils.isEmpty(coupons)) {
+            return Result.error("优惠券活动不存在");
+        }
+        if (dto.getNum() > coupons.getKlqzs()) {
+            return Result.error("每人最多可领取" + coupons.getKlqzs());
+        }
+        int totalNum = dto.getMobiles().size() * dto.getNum();
+
+        LambdaQueryWrapper<BusMarketCouponsCashUsed> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BusMarketCouponsCashUsed::getStatus, CouponsStatusEnum.notClaimed.getKey());
+        queryWrapper.eq(BusMarketCouponsCashUsed::getCouponsId, dto.getCouponsId());
+
+        Page<BusMarketCouponsCashUsed> page = new Page<BusMarketCouponsCashUsed>(1, totalNum);
+        IPage<BusMarketCouponsCashUsed> pageList = this.page(page, queryWrapper);
+        int count = pageList.getRecords().size();
+//        Long count= this.count(queryWrapper);
+        if (totalNum > count) {
+            return Result.error("待领取数量" + count + ",不够发放");
+        }
+        List<BusMarketCouponsCashUsed> list = pageList.getRecords();
+        int index = 0;
+//        AtomicReference<Boolean> isBreak = new AtomicReference<>(false);
+        String message = "创建成功";
+        try {
+//            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()) {
+                    throw new JeecgBootException("每人最多可领取" + coupons.getKlqzs());
+                }
+                LambdaQueryWrapper<BusMemberCard> queryWrapper3 = new LambdaQueryWrapper<>();
+                queryWrapper3.eq(BusMemberCard::getMobile, key);
+                //查询手机号是否是会员
+                BusMemberCard memeberCard = busMemberCardService.getOne(queryWrapper3);
+                while (num > 0) {
+                    LambdaQueryWrapper<BusMarketCouponsCashUsed> queryWrapper2 = new LambdaQueryWrapper<>();
+                    queryWrapper2.eq(BusMarketCouponsCashUsed::getCouponsId, dto.getCouponsId());
+//                    queryWrapper2.eq(BusMarketCouponsCashUsed::getMobile, dto.getMobiles().get(i).getValue());
+                    queryWrapper2.eq(BusMarketCouponsCashUsed::getMobile, key);
+                    Long gainCount = this.count(queryWrapper2);
+                    if (gainCount > coupons.getKlqzs()) {
+                        throw new JeecgBootException("每人限领数量" + coupons.getKlqzs());
+                    }
+                    BusMarketCouponsCashUsed model = list.get(index);
+                    String keyString = String.format("sys:cache:couponscashused::%s", model.getId());
+                    if (redisUtil.hasKey(keyString)) {
+//                        isBreak.set(true);
+//                        break;
+                        throw new JeecgBootException("该优惠券已被领取,请勿同时操作该功能");
+                    } else {
+                        redisUtil.set(keyString, true);
+                    }
+                    //这里到时候要根据会员表查询一下是否存在会员信息,现在没有会员表
+//                    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++;
+                    num--;
+                }
+//                if (isBreak.get()) {
+//                    //删除redis缓存
+//                    list.forEach(item -> {
+//                        String keyString = String.format("sys:cache:couponscashused::%s", item.getId());
+//                        redisUtil.del(keyString);
+//                    });
+//                    return Result.error("该优惠券已被领取,请勿同时操作该功能");
+//                }
+            }
+
+            this.updateBatchById(list);
+        } catch (JeecgBootException ex) {
+            message = ex.getMessage();
+        } catch (Exception ex) {
+            message = "创建失败";
+        } finally {
+            //删除redis缓存,添加成功后也可不删除
+            list.forEach(item -> {
+                String keyString = String.format("sys:cache:couponscashused::%s", item.getId());
+                redisUtil.del(keyString);
+            });
+        }
+        return message == "创建成功" ? Result.ok(message) : Result.error(message);
+    }
+
+
+    /**
+     * 发放优惠券给会员
+     * @param dto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Result gainCouponsCashUsedToMember(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("会员不能为空!");
+        BusMarketCouponsCash coupons = busMarketCouponsCashMapper.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<BusMarketCouponsCashUsed> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BusMarketCouponsCashUsed::getStatus, CouponsStatusEnum.notClaimed.getKey());
+        queryWrapper.eq(BusMarketCouponsCashUsed::getCouponsId, dto.getCouponsId());
+
+        Page<BusMarketCouponsCashUsed> page = new Page<BusMarketCouponsCashUsed>(1, totalNum);
+        IPage<BusMarketCouponsCashUsed> pageList = this.page(page, queryWrapper);
+        int count = pageList.getRecords().size();
+        if (totalNum > count) {
+            return Result.error("待领取数量" + count + ",不够发放");
+        }
+        List<BusMarketCouponsCashUsed> 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<BusMarketCouponsCashUsed> queryWrapper2 = new LambdaQueryWrapper<>();
+                    queryWrapper2.eq(BusMarketCouponsCashUsed::getCouponsId, dto.getCouponsId());
+                    queryWrapper2.and(i -> i.eq(BusMarketCouponsCashUsed::getUserid, key).or().eq(BusMarketCouponsCashUsed::getMobile, memeberCard.getMobile()));
+                    Long gainCount = this.count(queryWrapper2);
+                    if (gainCount > coupons.getKlqzs()) {
+                        throw new JeecgBootException("每人限领数量" + coupons.getKlqzs());
+                    }
+                    BusMarketCouponsCashUsed model = list.get(index);
+                    String keyString = String.format("sys:cache:couponscashused::%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:couponscashused::%s", item.getId());
+                redisUtil.del(keyString);
+            });
+        }
+        return message == "创建成功" ? Result.ok(message) : Result.error(message);
+    }
+}