From 9b9e43adee86384abdcbc50af29c7ba68b818fb7 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期日, 28 九月 2025 09:34:22 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/send_coupon' into send_coupon

---
 manager-api/src/main/java/cn/lili/controller/lmk/StoreCouponController.java                     |   19 +
 framework/src/main/java/cn/lili/modules/lmk/mapper/StoreCouponClaimRecordMapper.java            |    2 
 framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreCouponClaimRecordDTO.java   |   96 +++++++++
 framework/src/main/resources/mapper/lmk/StoreCouponClaimRecordMapper.xml                        |  177 ++++++++++++++++-
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreCouponClaimRecordVO.java             |   72 ++++++
 framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java |  164 ++++++++++++++++
 framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java          |    4 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreCouponClaimRecordQuery.java       |   16 +
 8 files changed, 533 insertions(+), 17 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreCouponClaimRecordQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreCouponClaimRecordQuery.java
index 66aa620..271ee7f 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreCouponClaimRecordQuery.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreCouponClaimRecordQuery.java
@@ -18,5 +18,21 @@
 @Data
 @ApiModel(value = "StoreCouponClaimRecord鏌ヨ鍙傛暟", description = "搴楅摵浼樻儬鍗烽鍙栬褰曟煡璇㈠弬鏁�")
 public class StoreCouponClaimRecordQuery extends AbsQuery {
+
+    private String sort;
+
+    private String order;
+
+    private String getType;
+
+    private Long startTime;
+
+    private Long endTime;
+
+    private String memberCouponStatus;
+
+    private String memberName;
+
+    private String couponName;
 }
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreCouponClaimRecordVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreCouponClaimRecordVO.java
index 0e77ba3..26ea72f 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreCouponClaimRecordVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreCouponClaimRecordVO.java
@@ -2,12 +2,15 @@
 
 import cn.lili.base.AbsVo;
 import cn.lili.modules.lmk.domain.entity.StoreCouponClaimRecord;
-import java.util.List;
-import org.springframework.lang.NonNull;
-import org.springframework.beans.BeanUtils;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.lang.NonNull;
+import org.springframework.beans.BeanUtils;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -34,11 +37,68 @@
 
     /** 搴楅摵id */
     @ApiModelProperty("搴楅摵id")
-    private Long storeId;
+    private String storeId;
 
     /** 鐢ㄦ埛id */
     @ApiModelProperty("鐢ㄦ埛id")
-    private Long userId;
+    private String userId;
+
+
+    @ApiModelProperty("搴楅摵浼樻儬鍒稿叧鑱擨D")
+    private String storeCouponId;
+
+    @ApiModelProperty("鍒涘缓鑰�")
+    private String createBy;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    @ApiModelProperty("淇敼鑰�")
+    private String updateBy;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date updateTime;
+
+    @ApiModelProperty("鍒犻櫎鏍囧織")
+    private Boolean deleteFlag;
+
+    // 琛ュ厖浼氬憳浼樻儬鍒歌〃鍏宠仈瀛楁
+    @ApiModelProperty("浼氬憳ID")
+    private String memberId;
+
+    @ApiModelProperty("浼氬憳鍚嶇О")
+    private String memberName;
+
+    @ApiModelProperty("浼樻儬鍒搁潰棰�")
+    private BigDecimal price;
+
+    @ApiModelProperty("浣跨敤璧峰鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+    @ApiModelProperty("浣跨敤鎴鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+    @ApiModelProperty("浼氬憳浼樻儬鍒哥姸鎬�")
+    private String memberCouponStatus;
+
+    @ApiModelProperty("鍟嗗搧浣跨敤闄愬埗娆℃暟")
+    private Integer goodsUseLimitNum;
+
+    @ApiModelProperty("鏄惁鏄钩鍙颁紭鎯犲埜")
+    private Boolean platformFlag;
+
+    @ApiModelProperty("浼樻儬鍒哥被鍨�")
+    private String getType;
+
+    @ApiModelProperty("鎶樻墸")
+    private BigDecimal discount;
+
+    @ApiModelProperty("娲诲姩绫诲瀷")
+    private String couponType;
 
     public static StoreCouponClaimRecordVO getVoByEntity(@NonNull StoreCouponClaimRecord entity, StoreCouponClaimRecordVO vo) {
         if(vo == null) {
@@ -48,4 +108,4 @@
         return vo;
     }
 
-}
+}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/StoreCouponClaimRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/StoreCouponClaimRecordMapper.java
index 7c1843b..0dfb311 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/StoreCouponClaimRecordMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/StoreCouponClaimRecordMapper.java
@@ -30,5 +30,5 @@
     *  鍒嗛〉
     */
     IPage getPage(IPage page, @Param("query") StoreCouponClaimRecordQuery query);
-
+    List<StoreCouponClaimRecordVO> getExportData(@Param("query") StoreCouponClaimRecordQuery query);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java
index fbf3951..f2450c6 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/StoreCouponClaimRecordService.java
@@ -1,12 +1,14 @@
 package cn.lili.modules.lmk.service;
 
 import cn.lili.modules.lmk.domain.entity.StoreCouponClaimRecord;
+import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
 import com.baomidou.mybatisplus.extension.service.IService;
 import cn.lili.base.Result;
 import cn.lili.modules.lmk.domain.form.StoreCouponClaimRecordForm;
 import cn.lili.modules.lmk.domain.query.StoreCouponClaimRecordQuery;
 import org.springframework.web.bind.annotation.PathVariable;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -66,4 +68,6 @@
     Result all();
 
     Result claimCoupon(String id);
+
+    void queryExportCoupon(HttpServletResponse response, StoreCouponClaimRecordQuery query);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java
index 4804fe3..ddcc7c1 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreCouponClaimRecordServiceImpl.java
@@ -1,5 +1,7 @@
 package cn.lili.modules.lmk.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.lili.common.exception.ServiceException;
 import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.context.UserContext;
@@ -9,8 +11,12 @@
 import cn.lili.modules.lmk.enums.general.StoreCouponStausEnum;
 import cn.lili.modules.lmk.service.StoreCouponService;
 import cn.lili.modules.lmk.service.StoreCouponSingleService;
+import cn.lili.modules.order.order.entity.dto.CouponExportDetailDTO;
+import cn.lili.modules.order.order.entity.dto.StoreCouponClaimRecordDTO;
 import cn.lili.modules.order.order.entity.enums.ClaimStatusEnum;
 import cn.lili.modules.promotion.entity.dos.MemberCoupon;
+import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
+import cn.lili.modules.promotion.entity.vos.MemberCouponVO;
 import cn.lili.modules.promotion.service.MemberCouponService;
 import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
 import com.alibaba.fastjson.JSON;
@@ -26,6 +32,10 @@
 import cn.lili.modules.lmk.domain.form.StoreCouponClaimRecordForm;
 import cn.lili.modules.lmk.domain.vo.StoreCouponClaimRecordVO;
 import cn.lili.modules.lmk.domain.query.StoreCouponClaimRecordQuery;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
@@ -37,7 +47,12 @@
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 import org.springframework.util.Assert;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -232,6 +247,155 @@
 
         }
     }
+    private XSSFWorkbook initCouponExportData(List<StoreCouponClaimRecordVO> list) {
+        // 杞崲VO涓篋TO锛堝鏋淒TO涓嶸O瀛楁涓�鑷达紝鍙洿鎺ヤ娇鐢╒O绠�鍖栦唬鐮侊級
+        List<StoreCouponClaimRecordDTO> dtos = new ArrayList<>();
+        for (StoreCouponClaimRecordVO vo : list) {
+            StoreCouponClaimRecordDTO dto = new StoreCouponClaimRecordDTO();
+            BeanUtil.copyProperties(vo, dto);
+            dtos.add(dto);
+        }
+        System.out.println("-----------------------");
+        System.out.println(dtos);
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("浼樻儬鍒搁鍙栬褰�");
+        // 鍒涘缓琛ㄥご
+        Row header = sheet.createRow(0);
+        String[] headers = {
+                "浼氬憳鍚嶇О", "浼樻儬鍒稿悕绉�", "鍙戝竷搴楅摵", "闈㈤/鎶樻墸",
+                 "鑾峰彇鏂瑰紡", "浼氬憳浼樻儬鍒哥姸鎬�", "浼樻儬鍒哥被鍨�",
+                 "浣跨敤璧峰鏃堕棿", "鎴鏃堕棿"
+        };
+        for (int i = 0; i < headers.length; i++) {
+            Cell cell = header.createCell(i);
+            cell.setCellValue(headers[i]);
+        }
+
+        // 濉厖鏁版嵁锛堝鍔犵┖鍊煎鐞嗭紝閬垮厤NPE锛�
+        for (int i = 0; i < dtos.size(); i++) {
+            StoreCouponClaimRecordDTO dto = dtos.get(i);
+            Row row = sheet.createRow(i + 1);
+
+            // 1. 浼氬憳鍚嶇О锛堝彲鑳戒负null锛�
+            row.createCell(0).setCellValue(Objects.nonNull(dto.getMemberName()) ? dto.getMemberName() : "");
+
+            // 2. 浼樻儬鍒稿悕绉帮紙鍙兘涓簄ull锛�
+            row.createCell(1).setCellValue(Objects.nonNull(dto.getCouponName()) ? dto.getCouponName() : "");
+
+            // 3. 鍙戝竷搴楅摵锛堝鐞唒latform鐗规畩鍊硷紝榛樿绌哄瓧绗︿覆锛�
+            String storeName = dto.getStoreName();
+            if ("platform".equals(storeName)) {
+                row.createCell(2).setCellValue("骞冲彴");
+            } else {
+                row.createCell(2).setCellValue(Objects.nonNull(storeName) ? storeName : "");
+            }
+
+            // 4. 闈㈤/鎶樻墸锛堜紭鍏堟樉绀烘姌鎵o紝鍏舵鏄剧ず闈㈤锛岄伩鍏嶈鐩栵級
+            Cell amountCell = row.createCell(3);
+            if (Objects.nonNull(dto.getDiscount())) {
+                amountCell.setCellValue(dto.getDiscount() + "鎶�");
+            } else if (Objects.nonNull(dto.getPrice())) {
+                amountCell.setCellValue(dto.getPrice() + "鍏�"); // 缁熶竴鐢�"鍏�"鏇磋鑼�
+            } else {
+                amountCell.setCellValue(""); // 鍧囦负绌烘椂鏄剧ず绌�
+            }
+
+
+            // 4. 鑾峰彇鏂瑰紡锛堣ˉ鍏呴粯璁ゆ湭鐭ョ姸鎬侊紝瑕嗙洊鎵�鏈夋灇涓惧�硷級
+            String getType = dto.getGetType();
+            String getTypeDesc;
+            switch (getType) {
+                case "FREE":
+                    getTypeDesc = "鍏嶈垂鑾峰彇";
+                    break;
+                case "ACTIVITY":
+                    getTypeDesc = "娲诲姩鑾峰彇";
+                    break;
+                case "INSIDE": // 娉ㄦ剰锛氬師浠g爜lime鏄鑹诧紝瀹為檯鏋氫妇搴斾负INSIDE
+                    getTypeDesc = "鍐呰喘";
+                    break;
+                default:
+                    getTypeDesc = "鏈煡";
+            }
+            row.createCell(4).setCellValue(getTypeDesc);
+
+            // 5. 浼氬憳浼樻儬鍒哥姸鎬侊紙瑕嗙洊鎵�鏈夊彲鑳界姸鎬侊級
+            String status = dto.getMemberCouponStatus();
+            String statusDesc;
+            switch (status) {
+                case "NEW":
+                    statusDesc = "宸查鍙�";
+                    break;
+                case "USED":
+                    statusDesc = "宸蹭娇鐢�";
+                    break;
+                case "EXPIRE":
+                    statusDesc = "宸茶繃鏈�";
+                    break;
+                case "CLOSED":
+                    statusDesc = "宸蹭綔搴�";
+                    break;
+                default:
+                    statusDesc = "鏈煡鐘舵��";
+            }
+            row.createCell(5).setCellValue(statusDesc);
+
+            // 6. 浼樻儬鍒哥被鍨嬶紙琛ュ厖榛樿澶勭悊锛�
+            String couponType = dto.getCouponType();
+            String couponTypeDesc;
+            if ("DISCOUNT".equals(couponType)) {
+                couponTypeDesc = "鎵撴姌";
+            } else if ("PRICE".equals(couponType)) {
+                couponTypeDesc = "鍑忓厤鐜伴噾";
+            } else {
+                couponTypeDesc = "鏈煡绫诲瀷";
+            }
+            row.createCell(6).setCellValue(couponTypeDesc);
+
+
+            // 10. 浣跨敤璧峰鏃堕棿锛堝鐞唍ull锛屾牸寮忓寲鏃堕棿锛�
+            Cell startTimeCell = row.createCell(7);
+            if (Objects.nonNull(dto.getStartTime())) {
+                startTimeCell.setCellValue(DateUtil.formatDateTime(dto.getStartTime()));
+            } else {
+                startTimeCell.setCellValue("");
+            }
+
+            // 11. 鎴鏃堕棿锛堝悓涓婏級
+            Cell endTimeCell = row.createCell(8);
+            if (Objects.nonNull(dto.getEndTime())) {
+                endTimeCell.setCellValue(DateUtil.formatDateTime(dto.getEndTime()));
+            } else {
+                endTimeCell.setCellValue("");
+            }
+        }
+
+        return workbook;
+    }
+
+    @Override
+    public void queryExportCoupon(HttpServletResponse response, StoreCouponClaimRecordQuery query) {
+        List<StoreCouponClaimRecordVO> exportData = baseMapper.getExportData(query);
+        XSSFWorkbook workbook = initCouponExportData(exportData);
+
+        try {
+            // 璁剧疆鍝嶅簲澶�
+            String fileName = URLEncoder.encode("浼樻儬鍒搁鍙栬褰�", "UTF-8");
+            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
+
+            ServletOutputStream out = response.getOutputStream();
+            workbook.write(out);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                workbook.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
 
     private static StoreCouponClaimRecord getStoreCouponClaimRecord(StoreCouponSingle storeCouponSingle, String userId) {
         StoreCouponClaimRecord storeCouponClaimRecord = new StoreCouponClaimRecord();
diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreCouponClaimRecordDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreCouponClaimRecordDTO.java
new file mode 100644
index 0000000..9bec5c0
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/StoreCouponClaimRecordDTO.java
@@ -0,0 +1,96 @@
+package cn.lili.modules.order.order.entity.dto;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * lmk-shop-java
+ *
+ * @author : zxl
+ * @date : 2025-09-27 21:40
+ **/
+@Data
+public class StoreCouponClaimRecordDTO {
+    /** 搴楅摵鍚嶇О */
+    @ApiModelProperty("搴楅摵鍚嶇О")
+    private String storeName;
+
+    /** 浼樻儬鍗穒d */
+    @ApiModelProperty("浼樻儬鍗穒d")
+    private Long couponId;
+
+    /** 浼樻儬鍗峰悕绉� */
+    @ApiModelProperty("浼樻儬鍗峰悕绉�")
+    private String couponName;
+
+    /** 搴楅摵id */
+    @ApiModelProperty("搴楅摵id")
+    private String storeId;
+
+    /** 鐢ㄦ埛id */
+    @ApiModelProperty("鐢ㄦ埛id")
+    private String userId;
+
+
+    @ApiModelProperty("搴楅摵浼樻儬鍒稿叧鑱擨D")
+    private String storeCouponId;
+
+    @ApiModelProperty("鍒涘缓鑰�")
+    private String createBy;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    @ApiModelProperty("淇敼鑰�")
+    private String updateBy;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    private Date updateTime;
+
+    @ApiModelProperty("鍒犻櫎鏍囧織")
+    private Boolean deleteFlag;
+
+    // 琛ュ厖浼氬憳浼樻儬鍒歌〃鍏宠仈瀛楁
+    @ApiModelProperty("浼氬憳ID")
+    private String memberId;
+
+    @ApiModelProperty("浼氬憳鍚嶇О")
+    private String memberName;
+
+    @ApiModelProperty("浼樻儬鍒搁潰棰�")
+    private BigDecimal price;
+
+    @ApiModelProperty("浣跨敤璧峰鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date startTime;
+
+    @ApiModelProperty("浣跨敤鎴鏃堕棿")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date endTime;
+
+    @ApiModelProperty("浼氬憳浼樻儬鍒哥姸鎬�")
+    private String memberCouponStatus;
+
+    @ApiModelProperty("鍟嗗搧浣跨敤闄愬埗娆℃暟")
+    private Integer goodsUseLimitNum;
+
+    @ApiModelProperty("鏄惁鏄钩鍙颁紭鎯犲埜")
+    private Boolean platformFlag;
+
+    @ApiModelProperty("浼樻儬鍒哥被鍨�")
+    private String getType;
+
+    @ApiModelProperty("鎶樻墸")
+    private BigDecimal discount;
+
+    @ApiModelProperty("娲诲姩绫诲瀷")
+    private String couponType;
+}
diff --git a/framework/src/main/resources/mapper/lmk/StoreCouponClaimRecordMapper.xml b/framework/src/main/resources/mapper/lmk/StoreCouponClaimRecordMapper.xml
index 3083ba5..63b144e 100644
--- a/framework/src/main/resources/mapper/lmk/StoreCouponClaimRecordMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/StoreCouponClaimRecordMapper.xml
@@ -31,20 +31,177 @@
         WHERE
             LSCCR.id = #{id} AND LSCCR.delete_flag = 0
     </select>
+    <resultMap id="BaseResultMapByManager" type="cn.lili.modules.lmk.domain.vo.StoreCouponClaimRecordVO">
+        <!-- 浼氬憳浼樻儬鍒歌〃(li_member_coupon)瀛楁鏄犲皠 -->
+        <result column="member_id" property="memberId"/>
+        <result column="member_name" property="memberName"/>
+        <result column="price" property="price"/>
+        <result column="start_time" property="startTime"/>
+        <result column="end_time" property="endTime"/>
+        <result column="member_coupon_status" property="memberCouponStatus"/>
+        <result column="goods_use_limit_num" property="goodsUseLimitNum"/>
+        <result column="platform_flag" property="platformFlag"/>
+        <result column="get_type" property="getType"/>
+        <result column="discount" property="discount"/>
+        <result column="coupon_type" property="couponType"/>
+        <result column="coupon_id" property="couponId" />
+        <!-- 搴楅摵浼樻儬鍒搁鍙栬褰曡〃(lmk_store_coupon_claim_record)瀛楁鏄犲皠 -->
+        <result column="id" property="id"/>
+        <result column="store_name" property="storeName"/>
+        <result column="store_coupon_id" property="storeCouponId"/>
+        <result column="store_id" property="storeId"/>
+        <result column="user_id" property="userId"/>
+        <result column="coupon_name" property="couponName"/>
+    </resultMap>
 
-
-    <select id="getPage" resultMap="BaseResultMap">
+    <select id="getPage" resultMap="BaseResultMapByManager">
         SELECT
-            LSCCR.store_name,
-            LSCCR.coupon_id,
-            LSCCR.coupon_name,
-            LSCCR.store_id,
-            LSCCR.user_id,
-            LSCCR.id
+        lmc.member_id,
+        lmc.member_name,
+        lmc.price,
+        lmc.start_time,
+        lmc.end_time,
+        lmc.member_coupon_status,
+        lmc.goods_use_limit_num,
+        lmc.platform_flag,
+        lmc.get_type,
+        lmc.discount,
+        lmc.coupon_type,
+        lsccr.id,
+        lsccr.store_name,
+        lsccr.store_coupon_id,
+        lsccr.store_id,
+        lsccr.user_id,
+        lsccr.coupon_name,
+        lsccr.create_time,
+        lsccr.coupon_id
         FROM
-            lmk_store_coupon_claim_record LSCCR
+        lmk_store_coupon_claim_record lsccr
+        INNER JOIN
+        li_member_coupon lmc ON lmc.coupon_id = lsccr.coupon_id
         WHERE
-            LSCCR.delete_flag = 0
+        lmc.delete_flag = 0
+        AND lsccr.delete_flag = 0
+        <!-- 1. 浼氬憳鍚嶇О妯$硦鏌ヨ锛堝叧鑱攍i_member_coupon琛級 -->
+        <if test="query.memberName != null and query.memberName != ''">
+            AND lmc.member_name LIKE CONCAT('%', #{query.memberName}, '%')
+        </if>
+        <!-- 2. 浼樻儬鍒稿悕绉版ā绯婃煡璇紙鍏宠仈lmk_store_coupon_claim_record琛級 -->
+        <if test="query.couponName != null and query.couponName != ''">
+            AND lsccr.coupon_name LIKE CONCAT('%', #{query.couponName}, '%')
+        </if>
+        <!-- 3. 浼樻儬鍒歌幏鍙栨柟寮忥紙绮剧‘鍖归厤锛屽叧鑱攍i_member_coupon琛級 -->
+        <if test="query.getType != null and query.getType != ''">
+            AND lmc.get_type = #{query.getType}
+        </if>
+        <!-- 4. 浼氬憳浼樻儬鍒哥姸鎬侊紙绮剧‘鍖归厤锛屽叧鑱攍i_member_coupon琛級 -->
+        <if test="query.memberCouponStatus != null and query.memberCouponStatus != ''">
+            AND lmc.member_coupon_status = #{query.memberCouponStatus}
+        </if>
+        <!-- 5. 鏃堕棿鑼冨洿绛涢�夛細鐢˙ETWEEN鍖归厤start_time鍜宔nd_time锛堥渶鍚屾椂浼犲叆寮�濮嬪拰缁撴潫鏃堕棿锛� -->
+        <if test="query.startTime != null and query.endTime != null">
+            AND lmc.start_time BETWEEN FROM_UNIXTIME(#{query.startTime}/1000)
+            AND FROM_UNIXTIME(#{query.endTime}/1000)
+        </if>
+        <!-- 6. 鎺掑簭閫昏緫锛堟牴鎹墠绔紶鍏ョ殑sort瀛楁鍜宱rder鎺掑簭鏂瑰悜锛� -->
+        <if test="query.sort != null and query.sort != '' and query.order != null and query.order != ''">
+            ORDER BY
+            <choose>
+                <!-- li_member_coupon琛ㄥ瓧娈� -->
+                <when test="query.sort == 'memberName'">lmc.member_name #{query.order},</when>
+                <when test="query.sort == 'price'">lmc.price #{query.order},</when>
+                <when test="query.sort == 'startTime'">lmc.start_time #{query.order},</when>
+                <when test="query.sort == 'endTime'">lmc.end_time #{query.order},</when>
+                <when test="query.sort == 'memberCouponStatus'">lmc.member_coupon_status #{query.order},</when>
+                <when test="query.sort == 'getType'">lmc.get_type #{query.order},</when>
+
+                <when test="query.sort == 'couponName'">lsccr.coupon_name #{query.order},</when>
+                <when test="query.sort == 'storeName'">lsccr.store_name #{query.order},</when>
+                <when test="query.sort == 'createTime'">lsccr.create_time #{query.order},</when>
+                <!-- 榛樿鎺掑簭 -->
+                <otherwise>lsccr.create_time DESC,</otherwise>
+            </choose>
+            lsccr.create_time DESC  <!-- 鍏滃簳鎺掑簭锛岄伩鍏嶈娉曢敊璇� -->
+        </if>
+        <!-- 鏈紶鎺掑簭鍙傛暟鏃讹紝榛樿鎸夐鍙栨椂闂村�掑簭 -->
+        <if test="(query.sort == null or query.sort == '') or (query.order == null or query.order == '')">
+            ORDER BY lsccr.create_time DESC
+        </if>
+    </select>
+
+    <select id="getExportData" resultMap="BaseResultMapByManager">
+        SELECT
+        lmc.member_id,
+        lmc.member_name,
+        lmc.price,
+        lmc.start_time,
+        lmc.end_time,
+        lmc.member_coupon_status,
+        lmc.goods_use_limit_num,
+        lmc.platform_flag,
+        lmc.get_type,
+        lmc.discount,
+        lmc.coupon_type,
+        lsccr.id,
+        lsccr.store_name,
+        lsccr.store_coupon_id,
+        lsccr.store_id,
+        lsccr.user_id,
+        lsccr.coupon_name,
+        lsccr.create_time,
+        lsccr.coupon_id
+        FROM
+        lmk_store_coupon_claim_record lsccr
+        INNER JOIN
+        li_member_coupon lmc ON lmc.coupon_id = lsccr.coupon_id
+        WHERE
+        lmc.delete_flag = 0
+        AND lsccr.delete_flag = 0
+        <!-- 1. 浼氬憳鍚嶇О妯$硦鏌ヨ锛堝叧鑱攍i_member_coupon琛級 -->
+        <if test="query.memberName != null and query.memberName != ''">
+            AND lmc.member_name LIKE CONCAT('%', #{query.memberName}, '%')
+        </if>
+        <!-- 2. 浼樻儬鍒稿悕绉版ā绯婃煡璇紙鍏宠仈lmk_store_coupon_claim_record琛級 -->
+        <if test="query.couponName != null and query.couponName != ''">
+            AND lsccr.coupon_name LIKE CONCAT('%', #{query.couponName}, '%')
+        </if>
+        <!-- 3. 浼樻儬鍒歌幏鍙栨柟寮忥紙绮剧‘鍖归厤锛屽叧鑱攍i_member_coupon琛級 -->
+        <if test="query.getType != null and query.getType != ''">
+            AND lmc.get_type = #{query.getType}
+        </if>
+        <!-- 4. 浼氬憳浼樻儬鍒哥姸鎬侊紙绮剧‘鍖归厤锛屽叧鑱攍i_member_coupon琛級 -->
+        <if test="query.memberCouponStatus != null and query.memberCouponStatus != ''">
+            AND lmc.member_coupon_status = #{query.memberCouponStatus}
+        </if>
+        <!-- 5. 鏃堕棿鑼冨洿绛涢�夛細鐢˙ETWEEN鍖归厤start_time鍜宔nd_time锛堥渶鍚屾椂浼犲叆寮�濮嬪拰缁撴潫鏃堕棿锛� -->
+        <if test="query.startTime != null and query.endTime != null">
+            AND lmc.start_time BETWEEN FROM_UNIXTIME(#{query.startTime}/1000)
+            AND FROM_UNIXTIME(#{query.endTime}/1000)
+        </if>
+        <!-- 6. 鎺掑簭閫昏緫锛堟牴鎹墠绔紶鍏ョ殑sort瀛楁鍜宱rder鎺掑簭鏂瑰悜锛� -->
+        <if test="query.sort != null and query.sort != '' and query.order != null and query.order != ''">
+            ORDER BY
+            <choose>
+                <!-- li_member_coupon琛ㄥ瓧娈� -->
+                <when test="query.sort == 'memberName'">lmc.member_name #{query.order},</when>
+                <when test="query.sort == 'price'">lmc.price #{query.order},</when>
+                <when test="query.sort == 'startTime'">lmc.start_time #{query.order},</when>
+                <when test="query.sort == 'endTime'">lmc.end_time #{query.order},</when>
+                <when test="query.sort == 'memberCouponStatus'">lmc.member_coupon_status #{query.order},</when>
+                <when test="query.sort == 'getType'">lmc.get_type #{query.order},</when>
+
+                <when test="query.sort == 'couponName'">lsccr.coupon_name #{query.order},</when>
+                <when test="query.sort == 'storeName'">lsccr.store_name #{query.order},</when>
+                <when test="query.sort == 'createTime'">lsccr.create_time #{query.order},</when>
+                <!-- 榛樿鎺掑簭 -->
+                <otherwise>lsccr.create_time DESC,</otherwise>
+            </choose>
+            lsccr.create_time DESC  <!-- 鍏滃簳鎺掑簭锛岄伩鍏嶈娉曢敊璇� -->
+        </if>
+        <!-- 鏈紶鎺掑簭鍙傛暟鏃讹紝榛樿鎸夐鍙栨椂闂村�掑簭 -->
+        <if test="(query.sort == null or query.sort == '') or (query.order == null or query.order == '')">
+            ORDER BY lsccr.create_time DESC
+        </if>
     </select>
 
 </mapper>
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/StoreCouponController.java b/manager-api/src/main/java/cn/lili/controller/lmk/StoreCouponController.java
index a0b56ce..5d5b6c2 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/StoreCouponController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/StoreCouponController.java
@@ -1,13 +1,20 @@
 package cn.lili.controller.lmk;
 
 import cn.lili.base.Result;
+import cn.lili.common.context.ThreadContextHolder;
 import cn.lili.modules.lmk.domain.form.StoreCouponForm;
+import cn.lili.modules.lmk.domain.query.StoreCouponClaimRecordQuery;
 import cn.lili.modules.lmk.domain.query.StoreCouponQuery;
 import cn.lili.modules.lmk.domain.query.StoreCouponSingleQuery;
+import cn.lili.modules.lmk.service.StoreCouponClaimRecordService;
 import cn.lili.modules.lmk.service.StoreCouponService;
+import cn.lili.modules.promotion.entity.dto.search.MemberCouponSearchParams;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * 鍟嗗绔敓鎴愬簵閾轰紭鎯犲嵎淇℃伅
@@ -22,6 +29,7 @@
 
     private final StoreCouponService storeCouponService;
 
+    private final StoreCouponClaimRecordService storeCouponClaimRecordService;
     /**
      * 鍒涘缓搴楅摵涓庝紭鎯犲嵎鍏宠仈鍏崇郴
      * @param storeCoupon
@@ -65,4 +73,15 @@
     public Result getPageByStoreCoupon(StoreCouponSingleQuery query){
         return storeCouponService.getPageByStoreCoupon(query);
     }
+
+    @GetMapping("/getPageByStoreCouponClaimRecord")
+    public Result getPageByStoreCouponClaimRecord(StoreCouponClaimRecordQuery query){
+        return storeCouponClaimRecordService.page(query);
+    }
+
+    @ApiOperation(value = "鏌ヨ浼樻儬鍗峰鍑哄垪琛�")
+    @GetMapping("/queryExportCoupon")
+    public void queryExportCoupon(StoreCouponClaimRecordQuery query) {
+        HttpServletResponse response = ThreadContextHolder.getHttpResponse();
+        storeCouponClaimRecordService.queryExportCoupon(response,query);}
 }

--
Gitblit v1.8.0