package com.ruoyi.web.controller.api;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.WebUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.export.BigGiftPackageImport;
import com.ruoyi.system.model.TBigGiftPackage;
import com.ruoyi.system.query.BigGiftPackageQuery;
import com.ruoyi.system.service.TBigGiftPackageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
*
* 大礼包 前端控制器
*
*
* @author xiaochen
* @since 2025-12-08
*/
@RestController
@RequestMapping("/t-big-gift-package")
@Api(tags = "(嘉视达)大礼包")
public class TBigGiftPackageController {
private final TBigGiftPackageService tBigGiftPackageService;
private final TokenService tokenService;
public TBigGiftPackageController(TBigGiftPackageService tBigGiftPackageService, TokenService tokenService) {
this.tBigGiftPackageService = tBigGiftPackageService;
this.tokenService = tokenService;
}
@ApiOperation(value = "大礼包分页列表")
@PostMapping(value = "/pageList")
public R> pageList(@RequestBody BigGiftPackageQuery query) {
Page tBigGiftPackagePage = new Page<>(query.getPageNum(), query.getPageSize());
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TBigGiftPackage::getStatus,1);
wrapper.like(Objects.nonNull(query.getName()), TBigGiftPackage::getName, query.getName());
wrapper.orderByDesc(TBigGiftPackage::getCreateTime);
Page pageInfo = tBigGiftPackageService.page(tBigGiftPackagePage, wrapper);
return R.ok(pageInfo);
}
@ApiOperation(value = "大礼包详情")
@GetMapping(value = "/detail/{id}")
public R detail(@PathVariable Integer id ) {
TBigGiftPackage tBigGiftPackage = tBigGiftPackageService.getById(id);
return R.ok(tBigGiftPackage);
}
@ApiOperation(value = "大礼包添加")
@PostMapping(value = "/add")
@Log(title = "大礼包-添加", businessType = BusinessType.INSERT)
public R add(@RequestBody TBigGiftPackage tBigGiftPackage) {
LoginUser loginUser = tokenService.getLoginUser();
tBigGiftPackage.setCreateUserId(loginUser.getUserId());
boolean save = tBigGiftPackageService.save(tBigGiftPackage);
if (save) {
return R.ok("添加成功");
}
return R.fail("添加失败");
}
@ApiOperation(value = "大礼包修改")
@PostMapping(value = "/update")
@Log(title = "大礼包-修改", businessType = BusinessType.UPDATE)
public R update(@RequestBody TBigGiftPackage tBigGiftPackage) {
LoginUser loginUser = tokenService.getLoginUser();
tBigGiftPackage.setUpdateUserId(loginUser.getUserId());
boolean update = tBigGiftPackageService.updateById(tBigGiftPackage);
if (update) {
return R.ok("修改成功");
}
return R.fail("修改失败");
}
@ApiOperation(value = "大礼包删除")
@DeleteMapping(value = "/delete/{id}")
@Log(title = "大礼包-删除", businessType = BusinessType.DELETE)
public R delete(@PathVariable Integer id ) {
TBigGiftPackage bigGiftPackage = tBigGiftPackageService.getById(id);
bigGiftPackage.setStatus(0);
bigGiftPackage.setUpdateUserId(tokenService.getLoginUser().getUserId());
boolean remove = tBigGiftPackageService.updateById(bigGiftPackage);
if (remove) {
return R.ok("删除成功");
}
return R.fail("删除失败");
}
@ApiOperation(value = "大礼包导入模板下载")
@GetMapping("/import-template")
public void importTemplate() {
List bigGiftPackageImports = new ArrayList<>();
BigGiftPackageImport bigGiftPackageImport = new BigGiftPackageImport();
bigGiftPackageImports.add(bigGiftPackageImport);
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), BigGiftPackageImport.class, bigGiftPackageImports);
HttpServletResponse response = WebUtils.response();
ServletOutputStream outputStream = null;
try {
String fileName = URLEncoder.encode("大礼包商品导入模板.xls", "utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
outputStream = response.getOutputStream();
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
System.out.println("大礼包商品导入模板下载失败!");
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Log(title = "大礼包商品-导入", businessType = BusinessType.INSERT)
@ApiOperation(value = "大礼包商品-导入")
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
@PostMapping("/import")
public R importInfo(@RequestPart("file") MultipartFile file) {
List bigGiftPackageImports = new ArrayList<>();
ImportParams params = new ImportParams();
params.setHeadRows(1); //表头行数
InputStream inputStream = null;
List bigGiftPackages = new ArrayList<>();
try {
inputStream = file.getInputStream();
bigGiftPackageImports = ExcelImportUtil.importExcel(inputStream,
BigGiftPackageImport.class, params);
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException("大礼包商品导入失败!");
} finally {
try {
inputStream.close();
} catch (IOException e) {
throw new ServiceException(e.getMessage());
}
}
if (CollectionUtils.isEmpty(bigGiftPackageImports)) {
throw new ServiceException("大礼包商品数据为空!");
}
JSONObject result = new JSONObject();
int i = 1;
for (BigGiftPackageImport bigGiftPackageImport : bigGiftPackageImports) {
if (!StringUtils.hasLength(bigGiftPackageImport.getCode())){
result.append("第"+i+"行:[", "商品ID"+"]不能为空");
continue;
}
if (!StringUtils.hasLength(bigGiftPackageImport.getName())){
result.append("第"+i+"行:[", "商品名称"+"]不能为空");
continue;
}
if (!StringUtils.hasLength(bigGiftPackageImport.getTotalPrice())){
result.append("第"+i+"行:[", "商品总价"+"]不能为空");
continue;
}
if (!StringUtils.hasLength(bigGiftPackageImport.getDeposit())){
result.append("第"+i+"行:[", "定金"+"]不能为空");
continue;
}
if (!StringUtils.hasLength(bigGiftPackageImport.getPointsSettlementPrice())){
result.append("第"+i+"行:[", "积分结算价格"+"]不能为空");
continue;
}
if (!StringUtils.hasLength(bigGiftPackageImport.getIntroduction())){
result.append("第"+i+"行:[", "商品简介"+"]不能为空");
continue;
}
if (!StringUtils.hasLength(bigGiftPackageImport.getInventory())){
result.append("第"+i+"行:[", "库存"+"]不能为空");
continue;
}
TBigGiftPackage bigGiftPackage = new TBigGiftPackage();
bigGiftPackage.setCode(bigGiftPackageImport.getCode());
bigGiftPackage.setName(bigGiftPackageImport.getName());
bigGiftPackage.setIntroduction(bigGiftPackageImport.getIntroduction());
try {
BigDecimal totalPrice = new BigDecimal(bigGiftPackageImport.getTotalPrice());
bigGiftPackage.setTotalPrice(totalPrice);
} catch (Exception e) {
result.append("第"+i+"行:[", "商品总价"+"]格式错误");
continue;
}
try {
BigDecimal deposit = new BigDecimal(bigGiftPackageImport.getDeposit());
bigGiftPackage.setDeposit(deposit);
} catch (Exception e) {
result.append("第"+i+"行:[", "商品定金"+"]格式错误");
continue;
}
try {
BigDecimal pointsSettlementPrice = new BigDecimal(bigGiftPackageImport.getPointsSettlementPrice());
bigGiftPackage.setPointsSettlementPrice(pointsSettlementPrice);
} catch (Exception e) {
result.append("第"+i+"行:[", "积分结算价格"+"]格式错误");
continue;
}
try {
Integer inventory = Integer.parseInt(bigGiftPackageImport.getInventory());
bigGiftPackage.setInventory(inventory);
} catch (Exception e) {
result.append("第"+i+"行:[", "库存"+"]格式错误");
continue;
}
bigGiftPackages.add(bigGiftPackage);
i++;
}
tBigGiftPackageService.saveBatch(bigGiftPackages);
if(!result.isEmpty()){
return R.fail(result.toString());
}
return R.ok();
}
@ApiOperation(value = "大礼包导出")
@PostMapping(value = "/export")
@Log(title = "大礼包-导出", businessType = BusinessType.EXPORT)
public void exportRegistration(@RequestBody BigGiftPackageQuery query){
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TBigGiftPackage::getStatus,1);
wrapper.like(Objects.nonNull(query.getName()), TBigGiftPackage::getName, query.getName());
wrapper.orderByDesc(TBigGiftPackage::getCreateTime);
List list = tBigGiftPackageService.list(wrapper);
ArrayList bigGiftPackageImports = new ArrayList<>();
for (TBigGiftPackage tBigGiftPackage : list) {
BigGiftPackageImport bigGiftPackageImport = new BigGiftPackageImport();
bigGiftPackageImport.setCode(tBigGiftPackage.getCode());
bigGiftPackageImport.setName(tBigGiftPackage.getName());
bigGiftPackageImport.setTotalPrice(tBigGiftPackage.getTotalPrice().toString());
bigGiftPackageImport.setDeposit(tBigGiftPackage.getDeposit().toString());
bigGiftPackageImport.setPointsSettlementPrice(tBigGiftPackage.getPointsSettlementPrice().toString());
bigGiftPackageImport.setIntroduction(tBigGiftPackage.getIntroduction());
bigGiftPackageImport.setInventory(tBigGiftPackage.getInventory().toString());
bigGiftPackageImports.add(bigGiftPackageImport);
}
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), BigGiftPackageImport.class, bigGiftPackageImports);
HttpServletResponse response = WebUtils.response();
assert response != null;
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
ServletOutputStream outputStream = null;
try {
String fileName = URLEncoder.encode("大礼包导出信息.xls", "utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
outputStream = response.getOutputStream();
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}