From d01924bd85d25681713eebc80b45b3f3dad81cef Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 19 九月 2025 13:57:36 +0800
Subject: [PATCH] 会员列表导出
---
framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java | 25 ++++++++
framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java | 1
framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java | 3
manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java | 6 ++
framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java | 118 ++++++++++++++++++++++++++++++++++++--
framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java | 3 +
framework/src/main/java/cn/lili/modules/member/service/MemberService.java | 2
7 files changed, 148 insertions(+), 10 deletions(-)
diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
index 771aa09..ed82d84 100644
--- a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
+++ b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
@@ -30,5 +30,8 @@
@Select("select * from li_member ${ew.customSqlSegment}")
IPage<MemberVO> pageByMemberVO(IPage<MemberVO> page, @Param(Constants.WRAPPER) Wrapper<Member> queryWrapper);
+ @Select("select * from li_member ${ew.customSqlSegment}")
+ List<MemberVO> exportMember(@Param(Constants.WRAPPER) Wrapper<Member> queryWrapper);
+
MemberVO getVoById(@Param("id") String id);
}
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
index e7d5f73..4539594 100644
--- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
+++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java
@@ -243,6 +243,8 @@
IPage<MemberVO> getMemberPageAndTag(MemberSearchVO memberSearchVO, PageVO page);
+ void exportMember(MemberSearchVO memberSearchVO);
+
/**
* 浼氬憳绉垎鍙樺姩
*
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
index ed570fb..455df7b 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -27,6 +27,10 @@
import cn.lili.modules.lmk.domain.entity.VideoAccount;
import cn.lili.modules.lmk.domain.form.MemberNickNameForm;
import cn.lili.modules.lmk.domain.form.MemberTagForm;
+import cn.lili.modules.lmk.domain.vo.PrizeRecordVO;
+import cn.lili.modules.lmk.enums.general.PrizeDistributeStatusEnum;
+import cn.lili.modules.lmk.enums.general.PrizeGrantStatusEnums;
+import cn.lili.modules.lmk.enums.general.PrizeStatusEnum;
import cn.lili.modules.lmk.service.MemberTagService;
import cn.lili.modules.lmk.service.VideoAccountService;
import cn.lili.modules.member.aop.annotation.PointLogPoint;
@@ -34,14 +38,12 @@
import cn.lili.modules.member.entity.dto.*;
import cn.lili.modules.member.entity.enums.PointTypeEnum;
import cn.lili.modules.member.entity.enums.QRCodeLoginSessionStatusEnum;
-import cn.lili.modules.member.entity.vo.MemberSearchVO;
-import cn.lili.modules.member.entity.vo.MemberVO;
-import cn.lili.modules.member.entity.vo.QRCodeLoginSessionVo;
-import cn.lili.modules.member.entity.vo.QRLoginResultVo;
+import cn.lili.modules.member.entity.vo.*;
import cn.lili.modules.member.mapper.MemberMapper;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.member.token.MemberTokenGenerate;
import cn.lili.modules.member.token.StoreTokenGenerate;
+import cn.lili.modules.order.order.entity.dto.PrizeRecordExportDetailDTO;
import cn.lili.modules.store.entity.dos.Store;
import cn.lili.modules.store.entity.enums.StoreStatusEnum;
import cn.lili.modules.store.service.StoreService;
@@ -56,17 +58,23 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -607,6 +615,100 @@
return this.baseMapper.pageByMemberVO(PageUtil.initPage(page),queryWrapper);
}
+ @Override
+ public void exportMember(MemberSearchVO memberSearchVO) {
+ HttpServletResponse response = ThreadContextHolder.getHttpResponse();
+ QueryWrapper<Member> queryWrapper = Wrappers.query();
+ //鐢ㄦ埛鍚嶆煡璇�
+ queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getUsername()), "username", memberSearchVO.getUsername());
+ //鐢ㄦ埛鍚嶆煡璇�
+ queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getNickName()), "nick_name", memberSearchVO.getNickName());
+ //鎸夌収鐢佃瘽鍙风爜鏌ヨ
+ queryWrapper.like(CharSequenceUtil.isNotBlank(memberSearchVO.getMobile()), "mobile", memberSearchVO.getMobile());
+ //鎸夌収浼氬憳鐘舵�佹煡璇�
+ queryWrapper.eq(CharSequenceUtil.isNotBlank(memberSearchVO.getDisabled()), "disabled",
+ memberSearchVO.getDisabled().equals(SwitchEnum.OPEN.name()) ? 1 : 0);
+ queryWrapper.orderByDesc("create_time");
+ if (CollectionUtils.isNotEmpty(memberSearchVO.getTagIds())) {
+ // 浣跨敤inSql鏂规硶杩涜瀹夊叏鐨勫瓙鏌ヨ
+ String tagIdsStr = memberSearchVO.getTagIds().stream()
+ .map(String::valueOf)
+ .collect(Collectors.joining(","));
+ queryWrapper.inSql("id",
+ "SELECT DISTINCT member_id FROM lmk_member_tag WHERE tag_id IN (" +
+ tagIdsStr + ")");
+ }
+ List<MemberVO> memberVOS = this.baseMapper.exportMember(queryWrapper);
+ XSSFWorkbook workbook = initExportMember(memberVOS);
+ 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();
+ }
+ }
+
+ }
+ public XSSFWorkbook initExportMember(List<MemberVO> list){
+ List<MemberExportVO> exportDetailDTOS = new ArrayList<>();
+ for (MemberVO vo : list){
+ MemberExportVO detailDtO = new MemberExportVO();
+ BeanUtils.copyProperties(vo,detailDtO);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ // 灏咲ate绫诲瀷杞崲涓烘寚瀹氭牸寮忕殑瀛楃涓�
+ Date createTime = vo.getCreateTime();
+ if (createTime != null) {
+ String createTimeStr = sdf.format(createTime);
+ detailDtO.setCreateTime(createTimeStr);
+ }else {
+ detailDtO.setCreateTime("");
+ }
+ Date lastLoginDate1 = vo.getLastLoginDate();
+ if (lastLoginDate1 != null) {
+ String lastLoginDate = sdf.format(lastLoginDate1);
+ detailDtO.setLastLoginDate(lastLoginDate);
+ }else {
+ detailDtO.setLastLoginDate("");
+ }
+ // 璁剧疆鍒癉TO涓�
+ exportDetailDTOS.add(detailDtO);
+ }
+ 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]);
+ }
+ for (int i=0;i< exportDetailDTOS.size();i++){
+ MemberExportVO dto = exportDetailDTOS.get(i);
+ Row row = sheet.createRow(i+1);
+ row.createCell(0).setCellValue(dto.getUsername());
+ row.createCell(1).setCellValue(dto.getNickName());
+ row.createCell(2).setCellValue(dto.getMobile());
+ row.createCell(3).setCellValue(dto.getCreateTime());
+ row.createCell(4).setCellValue(dto.getLastLoginDate());
+ }
+
+ return workbook;
+
+ }
@Override
@PointLogPoint
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java
index 1504b59..60cb3c9 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java
@@ -9,6 +9,7 @@
import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
+import cn.lili.modules.order.order.entity.enums.RefundStatusEnum;
import cn.lili.modules.order.order.mapper.OrderItemMapper;
import cn.lili.modules.order.order.service.OrderItemService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
index b775eca..d458917 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -25,11 +25,14 @@
import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.goods.entity.dos.Goods;
+import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.dto.GoodsCompleteMessage;
import cn.lili.modules.goods.service.GoodsService;
+import cn.lili.modules.goods.service.GoodsSkuService;
import cn.lili.modules.lmk.domain.entity.CouponVirtual;
import cn.lili.modules.lmk.domain.vo.OrderCountVO;
import cn.lili.modules.lmk.enums.general.AdminRoleEnum;
+import cn.lili.modules.lmk.enums.general.VirtualGoodsTypeEnum;
import cn.lili.modules.lmk.service.CouponVirtualService;
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.entity.dto.MemberAddressDTO;
@@ -213,6 +216,8 @@
@Autowired
private RedissonClient redissonClient;
+ @Autowired
+ private GoodsSkuService goodsSkuService;
private final static String LOCK_ORDER_NO_MQ="lock_order_no_mq:";
private final static String LOCK_EDIT_ORDER_ADDRESS="lock_edit_order_address:";
private final static String LOCK_COUPON_CARD="lock_coupon_card:";
@@ -251,7 +256,21 @@
// item.getPriceDetailDTO().setPlatFormCommissionPoint(Double.valueOf(goods.getCommission().toString()));
// e.setPriceDetailDTO(item.getPriceDetailDTO());
// orderItems.add(e);
- orderItems.add(new OrderItem(sku, item, tradeDTO));
+ //鐗规畩澶勭悊绾夸笂绀煎搧鍗¢棶棰�
+ String skuId = sku.getGoodsSku().getId();
+ GoodsSku skuInfo = goodsSkuService.getById(skuId);
+ OrderItem orderItem = new OrderItem(sku, item, tradeDTO);
+ if (skuInfo != null) {
+ String goodsId = skuInfo.getGoodsId();
+ Goods goodsInfo = goodsService.getById(goodsId);
+ if (goodsInfo != null&& VirtualGoodsTypeEnum.COUPON.name().equals(goodsInfo.getVirtualGoodsType())) {
+ String couponId = skuInfo.getCouponId();
+ String couponName = skuInfo.getCouponName();
+ orderItem.setCouponId(couponId);
+ orderItem.setCouponName(couponName);
+ }
+ }
+ orderItems.add(orderItem);
currentOrderItems.add(new OrderItem(sku, item, tradeDTO));
}
);
@@ -801,12 +820,14 @@
@OrderLogPoint(description = "'璁㈠崟['+#orderSn+']鏍搁攢锛屾牳閿�鐮乕'+#verificationCode+']'", orderSn = "#orderSn")
@Transactional(rollbackFor = Exception.class)
public Order take(String orderSn, String verificationCode) {
+ log.info("璁㈠崟鏍搁攢璁㈠崟鍙蜂负锛歿}锛屾牳閿�鐮佷负{}",orderSn,verificationCode);
Order order;
RLock lock = redissonClient.getLock(LOCK_COUPON_CARD + orderSn);
try {
lock.lock();
//鑾峰彇璁㈠崟淇℃伅
order = this.getBySn(orderSn);
+ log.info("鑾峰彇鍒扮殑璁㈠崟淇℃伅涓簕}",JSON.toJSONString(order));
//璁㈠崟骞傜瓑闂
if (OrderStatusEnum.COMPLETED.name().equals(order.getOrderStatus())) {
throw new ServiceException("褰撳墠璁㈠崟宸插畬鎴愭棤娉曞啀娆℃牳楠�");
@@ -820,6 +841,7 @@
List<OrderItem> orderItems = orderItemService.getByOrderSn(orderSn);
List<CouponVirtual> couponVirtuals = new ArrayList<>();
for (OrderItem orderItem : orderItems) {
+ log.info("鑾峰彇鍒扮殑瀛愯鍗曚俊鎭负{}",JSON.toJSONString(orderItem));
String couponId = orderItem.getCouponId();
if (StringUtils.isBlank(couponId)) {
continue;
@@ -842,6 +864,7 @@
}
}
if (!couponVirtuals.isEmpty()) {
+ log.info("鐢熸垚鐨勫厬鎹㈠崱涓簕}",JSON.toJSONString(couponVirtuals));
order.setCouponFlag(CouPonFlagEnum.COUPON.name());
couponVirtualService.saveBatch(couponVirtuals);
//鏇存柊鐘舵�佺敤浜庡悗缁皬绋嬪簭鍒ゆ柇寮瑰嚭鍗峰垪琛�
diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java
index 591f7ae..a79ad64 100644
--- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/StoreFlowStatisticsServiceImpl.java
@@ -153,7 +153,8 @@
if (StringUtils.isNotEmpty(statisticsQueryParam.getStoreId())) {
queryWrapper.eq("store_id", statisticsQueryParam.getStoreId());
}
- queryWrapper.select("SUM(final_price) AS price , COUNT(0) AS num");
+// queryWrapper.select("SUM(final_price) AS price , COUNT(0) AS num");
+ queryWrapper.select("SUM(final_price) AS price , COUNT(DISTINCT order_sn) AS num");
queryWrapper.eq("flow_type", FlowTypeEnum.PAY.name());
Map payment = this.getMap(queryWrapper);
diff --git a/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java
index 08800e0..5f9fb11 100644
--- a/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java
+++ b/manager-api/src/main/java/cn/lili/controller/passport/MemberManagerController.java
@@ -42,6 +42,12 @@
return ResultUtil.data(memberService.getMemberPageAndTag(memberSearchVO, page));
}
+ @ApiOperation(value = "瀵煎嚭excel")
+ @GetMapping("/export")
+ public void exportMember(MemberSearchVO memberSearchVO) {
+ memberService.exportMember(memberSearchVO);
+ }
+
@ApiOperation(value = "閫氳繃ID鑾峰彇浼氬憳淇℃伅")
@ApiImplicitParam(name = "id", value = "浼氬憳ID", required = true, dataType = "String", paramType = "path")
--
Gitblit v1.8.0