|
|
@@ -1,21 +1,32 @@
|
|
|
package org.jeecg.modules.business.controller;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import com.alibaba.druid.support.json.JSONUtils;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.IService;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.poi.ss.formula.functions.T;
|
|
|
+import org.apache.shiro.SecurityUtils;
|
|
|
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.dto.UserGroupDto;
|
|
|
import org.jeecg.modules.business.dto.UserLabelDto;
|
|
|
import org.jeecg.modules.business.entity.*;
|
|
|
@@ -28,8 +39,17 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.jeecg.modules.business.vo.MemberCardStatVo;
|
|
|
import org.jeecg.common.system.base.controller.JeecgController;
|
|
|
import org.jeecg.modules.mall.entity.MallUserInfo;
|
|
|
+import org.jeecg.modules.system.entity.SysUser;
|
|
|
+import org.jeecg.modules.system.service.ISysUserService;
|
|
|
+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.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 io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
@@ -58,6 +78,8 @@ public class BusMemberCardController extends JeecgController<BusMemberCard, IBus
|
|
|
private IBusMarketMemberLableService busMarketMemberLableService;
|
|
|
@Resource
|
|
|
private IService<MallUserInfo> mallUserInfoIService;
|
|
|
+ @Resource
|
|
|
+ private ISysUserService sysUserService;
|
|
|
/**
|
|
|
* 分页列表查询
|
|
|
*
|
|
|
@@ -282,9 +304,50 @@ public class BusMemberCardController extends JeecgController<BusMemberCard, IBus
|
|
|
//@RequiresPermissions("business:bus_member_card:exportXls")
|
|
|
@RequestMapping(value = "/exportXls")
|
|
|
public ModelAndView exportXls(HttpServletRequest request, BusMemberCard busMemberCard) {
|
|
|
- return super.exportXls(request, busMemberCard, BusMemberCard.class, "bus_member_card");
|
|
|
+ return exportXls2(request, busMemberCard, BusMemberCard.class, "会员列表");
|
|
|
}
|
|
|
|
|
|
+ private ModelAndView exportXls2(HttpServletRequest request, BusMemberCard object, Class<BusMemberCard> clazz, String title) {
|
|
|
+ // Step.1 组装查询条件
|
|
|
+ QueryWrapper<BusMemberCard> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap());
|
|
|
+ LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
|
+
|
|
|
+ // 过滤选中数据
|
|
|
+ String selections = request.getParameter("selections");
|
|
|
+ if (oConvertUtils.isNotEmpty(selections)) {
|
|
|
+ List<String> selectionList = Arrays.asList(selections.split(","));
|
|
|
+ queryWrapper.in("id", selectionList);
|
|
|
+ }
|
|
|
+ // Step.2 获取导出数据
|
|
|
+ List<BusMemberCard> exportList = service.list(queryWrapper);
|
|
|
+ exportList.forEach(t -> {
|
|
|
+ BusHotel busHotel = busHotelService.getById(t.getHotelId());
|
|
|
+ if (busHotel != null) {
|
|
|
+ t.setHotelId(busHotel.getName());
|
|
|
+ }
|
|
|
+ BusMarketMember busMarketMember = busMarketMemberService.getById(t.getGradeId());
|
|
|
+ if (busMarketMember != null) {
|
|
|
+ t.setGradeId(busMarketMember.getName());
|
|
|
+ }
|
|
|
+ SysUser sysUser1=sysUserService.getById(t.getStaffId());
|
|
|
+ if(sysUser1!=null) {
|
|
|
+ t.setStaffId(sysUser1.getRealname());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // Step.3 AutoPoi 导出Excel
|
|
|
+ ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
|
|
+ //此处设置的filename无效 ,前端会重更新设置一下
|
|
|
+ mv.addObject(NormalExcelConstants.FILE_NAME, title);
|
|
|
+ mv.addObject(NormalExcelConstants.CLASS, clazz);
|
|
|
+ //update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
|
|
|
+ ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
|
|
|
+ exportParams.setImageBasePath(this.upLoadPath);
|
|
|
+ //update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
|
|
|
+ mv.addObject(NormalExcelConstants.PARAMS, exportParams);
|
|
|
+ mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
|
|
|
+ return mv;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 通过excel导入数据
|
|
|
*
|
|
|
@@ -294,8 +357,82 @@ public class BusMemberCardController extends JeecgController<BusMemberCard, IBus
|
|
|
*/
|
|
|
//@RequiresPermissions("business:bus_member_card:importExcel")
|
|
|
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
|
|
|
- public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
|
|
|
- return super.importExcel(request, response, BusMemberCard.class);
|
|
|
+ public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response,@RequestParam(name="hotelId",required=true) String hotelId) {
|
|
|
+ return importExcel2(request, response, BusMemberCard.class,hotelId);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ private Result<?> importExcel2(HttpServletRequest request, HttpServletResponse response, Class<BusMemberCard> clazz,String hotelId) {
|
|
|
+ LoginUser user = TokenUtils.getAuthUser();
|
|
|
+ if (user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")) {
|
|
|
+ } else {
|
|
|
+ throw new JeecgBootException("当前登录人租户信息错误");
|
|
|
+ }
|
|
|
+ MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
|
|
+ Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
|
|
|
+ for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
|
|
|
+ // 获取上传文件对象
|
|
|
+ MultipartFile file = entity.getValue();
|
|
|
+ ImportParams params = new ImportParams();
|
|
|
+ params.setTitleRows(2);
|
|
|
+ params.setHeadRows(1);
|
|
|
+ params.setNeedSave(true);
|
|
|
+ try {
|
|
|
+ List<BusMemberCard> list = ExcelImportUtil.importExcel(file.getInputStream(), clazz, params);
|
|
|
+// log.info(JSON.toJSONString(list));
|
|
|
+ //update-begin-author:taoyan date:20190528 for:批量插入数据
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+
|
|
|
+ List<BusMemberCard> addList = new ArrayList<>();
|
|
|
+ list.forEach(t -> {
|
|
|
+ if (StringUtils.isNotBlank(t.getGradeId())) {
|
|
|
+ LambdaQueryWrapper<BusMemberCard> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper2.eq(BusMemberCard::getHotelId, hotelId);
|
|
|
+ lambdaQueryWrapper2.and(o -> {
|
|
|
+ o.or().eq(BusMemberCard::getCardNo, t.getCardNo());
|
|
|
+ o.or().eq(BusMemberCard::getMobile, t.getMobile());
|
|
|
+ o.or().eq(BusMemberCard::getCertificateNo, t.getCertificateNo());
|
|
|
+ });
|
|
|
+ Long count = busMemberCardService.count(lambdaQueryWrapper2);
|
|
|
+ if (count == 0) {
|
|
|
+ LambdaQueryWrapper<BusMarketMember> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(BusMarketMember::getHotelId, hotelId);
|
|
|
+ lambdaQueryWrapper.eq(BusMarketMember::getName, t.getGradeId());
|
|
|
+ List<BusMarketMember> busMarketMembers = busMarketMemberService.list(lambdaQueryWrapper);
|
|
|
+ if (ObjectUtils.isNotEmpty(busMarketMembers)) {
|
|
|
+ t.setGradeId(busMarketMembers.get(0).getId());
|
|
|
+ }
|
|
|
+ t.setCreateTime(DateTime.now());
|
|
|
+ t.setHotelId(hotelId);
|
|
|
+ t.setTenantId(user.getRelTenantIds());
|
|
|
+ addList.add(t);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ service.saveBatch(addList);
|
|
|
+ //400条 saveBatch消耗时间1592毫秒 循环插入消耗时间1947毫秒
|
|
|
+ //1200条 saveBatch消耗时间3687毫秒 循环插入消耗时间5212毫秒
|
|
|
+ log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒");
|
|
|
+ //update-end-author:taoyan date:20190528 for:批量插入数据
|
|
|
+ return Result.ok("文件导入成功!数据行数:" + addList.size());
|
|
|
+ } catch (Exception e) {
|
|
|
+ //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示
|
|
|
+ String msg = e.getMessage();
|
|
|
+ log.error(msg, e);
|
|
|
+ if (msg != null && msg.indexOf("Duplicate entry") >= 0) {
|
|
|
+ return Result.error("文件导入失败:有重复数据!");
|
|
|
+ } else {
|
|
|
+ return Result.error("文件导入失败:" + e.getMessage());
|
|
|
+ }
|
|
|
+ //update-end-author:taoyan date:20211124 for: 导入数据重复增加提示
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ file.getInputStream().close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Result.error("文件导入失败!");
|
|
|
+ }
|
|
|
}
|