diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/ExcelImportController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/ExcelImportController.java new file mode 100644 index 00000000..60550509 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/ExcelImportController.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.member.controller.admin.excelImport; + +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.member.controller.admin.excelImport.vo.RechargeExcel; +import cn.iocoder.yudao.module.member.controller.admin.excelImport.vo.RechargeExcelListener; +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.service.amount.CashRechargeService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import com.alibaba.excel.EasyExcel; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + + +@Tag(name = "管理后台 - 表格导入") +@RestController +@RequestMapping("/member/excelImport") +@Validated +public class ExcelImportController { + + @Resource + private MemberUserService memberUserService; + @Resource + private CashRechargeService cashRechargeService; + + @PostMapping("/easyExcelImport") + public void importExcel(MultipartFile file, HttpServletResponse response) { + if (!file.isEmpty()) { + //文件名称 + int begin = Objects.requireNonNull(file.getOriginalFilename()).indexOf("."); + //文件名称长度 + int last = file.getOriginalFilename().length(); + //判断文件格式是否正确 + String fileName = file.getOriginalFilename().substring(begin, last); + if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) { + throw new IllegalArgumentException("上传文件格式错误"); + } + } else { + throw new IllegalArgumentException("文件不能为空"); + } + try (InputStream inputStream = file.getInputStream()) { + List rechargeExcels = simpleRead(inputStream); + ExcelUtils.write(response, "人员不存在.xlsx", "数据", RechargeExcel.class, + rechargeExcels); + } catch (IOException e) { + System.out.println(e.getMessage()); + } + } + + /** + * 最简单的读的监听器 + */ + public List simpleRead(InputStream inputStream) { + //获取正确数据 + ArrayList successArrayList = new ArrayList<>(); + EasyExcel.read(inputStream) + .head(RechargeExcel.class) + .registerReadListener(new RechargeExcelListener( + // 监听器中doAfterAllAnalysed执行此方法;所有读取完成之后处理逻辑 + successArrayList::addAll)) + // 设置sheet,默认读取第一个 + .sheet() + // 设置标题(字段列表)所在行数 + .headRowNumber(2) + .doRead(); + List mobiles = successArrayList.stream().map(RechargeExcel::getMobile).collect(Collectors.toList()); + List users = memberUserService.getByMobiles(mobiles); + + + List notExist = new ArrayList<>(); + for (RechargeExcel excel:successArrayList){ + MemberUserDO userByMobile = memberUserService.getUserByMobile(excel.getMobile()); + if(ObjectUtil.isEmpty(userByMobile)){ + notExist.add(excel); + continue; + } + List ids = new ArrayList<>(); + ids.add(userByMobile.getId()); + cashRechargeService.rechargeByAdmin(ids,null,excel.getMoney()); + } + return notExist; + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/vo/RechargeExcel.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/vo/RechargeExcel.java new file mode 100644 index 00000000..cd36c647 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/vo/RechargeExcel.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.member.controller.admin.excelImport.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; + +import java.math.BigDecimal; + +/** + * @author zt + * @description + * @since 2024/11/5 + */ + +@ExcelIgnoreUnannotated +public class RechargeExcel { + + /** + * 用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据 + */ + @ExcelProperty(index = 0) + public String name; + + @ExcelProperty(index = 1) + public String mobile; + + @ExcelProperty( index = 2) + public BigDecimal money; + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public BigDecimal getMoney() { + return money; + } + + public void setMoney(BigDecimal money) { + this.money = money; + } + + @Override + public String toString() { + return "RechargeExcel{" + + "name='" + name + '\'' + + ", mobile='" + mobile + '\'' + + ", money=" + money + + '}'; + } +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/vo/RechargeExcelListener.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/vo/RechargeExcelListener.java new file mode 100644 index 00000000..63d9a0c1 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/excelImport/vo/RechargeExcelListener.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.member.controller.admin.excelImport.vo; + + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; +import java.util.function.Consumer; + + +/** + * 读取excel数据 + */ +public class RechargeExcelListener extends AnalysisEventListener { + + /**临时存储正常数据集合,最大存储100*/ + private List successDataList = Lists.newArrayListWithExpectedSize(300); + + /**自定义消费者函数接口用于自定义监听器中数据组装*/ + private final Consumer> successConsumer; + + public RechargeExcelListener(Consumer> successConsumer) { + this.successConsumer = successConsumer; + } + + @Override + public void invoke(RechargeExcel rechargeExcel, AnalysisContext analysisContext) { + successDataList.add(rechargeExcel); + System.out.println("数据:"+rechargeExcel); + } + + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + if (CollectionUtils.isNotEmpty(successDataList)) { + successConsumer.accept(successDataList); + } + } +} + diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index 3e2e0302..5119f249 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -260,4 +260,6 @@ public interface MemberUserService { boolean delete(Long userId); String getQRCode(); + + List getByMobiles(List mobiles); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index b8f99dcb..13e09511 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -92,10 +92,7 @@ import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.setLoginUser; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil.generateJWT; -import static cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil.validateJWT; /** * 会员 User Service 实现类 @@ -931,4 +928,11 @@ public class MemberUserServiceImpl implements MemberUserService { memberUserRedisTemplate.opsForValue().set(encode,userId.toString(),180, TimeUnit.SECONDS); return s; } + + @Override + public List getByMobiles(List mobiles) { + List list = memberUserMapper.selectList(Wrappers.lambdaQuery() + .in(MemberUserDO::getMobile, mobiles)); + return list; + } }