package com.doumee.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.annotation.excel.ExcelImporter; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.PinYinUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.*; import com.doumee.dao.business.join.GoodsJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.business.model.dto.GoodsRequest; import com.doumee.service.business.GoodsService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * 商品信息表Service实现 * @author 江蹄蹄 * @date 2023/05/12 13:58 */ @Service public class GoodsServiceImpl implements GoodsService { @Autowired private GoodsMapper goodsMapper; @Autowired private CategoryMapper categoryMapper; @Autowired private CateAttrMapper cateAttrMapper; @Autowired private CateParamMapper cateParamMapper; @Autowired private GoodsParamMapper goodsParamMapper; @Autowired private MultifileMapper multifileMapper; @Autowired @Lazy private SystemDictDataBiz systemDictDataBiz; @Autowired private BrandMapper brandMapper; @Autowired private GoodsJoinMapper goodsJoinMapper; @Override public Integer create(Goods goods) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(goodsMapper.selectCount(new QueryWrapper().eq("ISDELETED",Constants.ZERO).eq("name",goods.getName()))>0){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+goods.getName()+"】已存在"); }; goods.setStatus(Constants.ZERO); goods.setCreateDate(new Date()); goods.setCreator(user.getId()); goods.setIsdeleted(Constants.ZERO); //处理拼音问题 goods.setPinyin(PinYinUtil.getFullSpell(goods.getName())); goods.setShortPinyin(PinYinUtil.getFirstSpell(goods.getName())); goodsMapper.insert(goods); List multifileList = goods.getMultifileList(); if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){ for (int i = 0; i < multifileList.size(); i++) { Multifile multifile = multifileList.get(i); multifile.setCreator(user.getId()); multifile.setCreateDate(new Date()); multifile.setIsdeleted(Constants.ZERO); multifile.setSortnum(i+Constants.ONE); multifile.setObjId(goods.getId()); multifile.setType(Constants.ZERO); multifile.setObjType(Constants.ZERO); multifileMapper.insert(multifile); } } List goodsParamList = goods.getGoodsParamList(); if(!Objects.isNull(goodsParamList)&&goodsParamList.size()>0){ for (int i = 0; i < goodsParamList.size(); i++) { GoodsParam goodsParam = goodsParamList.get(i); goodsParam.setCreator(user.getId()); goodsParam.setCreateDate(new Date()); goodsParam.setIsdeleted(Constants.ZERO); goodsParam.setSortnum(i+Constants.ONE); goodsParam.setStatus(Constants.ZERO); goodsParam.setGoodsId(goods.getId()); goodsParamMapper.insert(goodsParam); } } return goods.getId(); } @Override public void deleteById(Integer id) { Goods goods = goodsMapper.selectById(id); if(Objects.isNull(goods)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到对象信息"); } goods.setIsdeleted(Constants.ONE); goodsMapper.updateById(goods); } @Override public void delete(Goods goods) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(goods); goodsMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } goodsMapper.deleteBatchIds(ids); } @Override public void updateById(Goods goods) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(goodsMapper.selectCount(new QueryWrapper().eq("ISDELETED",Constants.ZERO).ne("id",goods.getId()).eq("name",goods.getName()))>0){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+goods.getName()+"】已存在"); }; goods.setStatus(Constants.ZERO); goods.setEditDate(new Date()); goods.setEditor(user.getId()); goods.setIsdeleted(Constants.ZERO); //处理拼音问题 goods.setPinyin(PinYinUtil.getFullSpell(goods.getName())); goods.setShortPinyin(PinYinUtil.getFirstSpell(goods.getName())); goodsMapper.updateById(goods); multifileMapper.delete(new QueryWrapper().eq("OBJ_ID",goods.getId())); List multifileList = goods.getMultifileList(); if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){ for (int i = 0; i < multifileList.size(); i++) { Multifile multifile = multifileList.get(i); multifile.setCreator(user.getId()); multifile.setCreateDate(new Date()); multifile.setIsdeleted(Constants.ZERO); multifile.setSortnum(i+Constants.ONE); multifile.setObjId(goods.getId()); multifile.setType(Constants.ZERO); multifile.setObjType(Constants.ZERO); multifileMapper.insert(multifile); } } goodsParamMapper.delete(new QueryWrapper().eq("GOODS_ID",goods.getId())); List goodsParamList = goods.getGoodsParamList(); if(!Objects.isNull(goodsParamList)&&goodsParamList.size()>0){ for (int i = 0; i < goodsParamList.size(); i++) { GoodsParam goodsParam = goodsParamList.get(i); goodsParam.setCreator(user.getId()); goodsParam.setCreateDate(new Date()); goodsParam.setIsdeleted(Constants.ZERO); goodsParam.setSortnum(i+Constants.ONE); goodsParam.setStatus(Constants.ZERO); goodsParam.setGoodsId(goods.getId()); goodsParamMapper.insert(goodsParam); } } } @Override public void updateByIdInBatch(List goodss) { if (CollectionUtils.isEmpty(goodss)) { return; } for (Goods goods: goodss) { this.updateById(goods); } } @Override public void updateDisableById(Goods goods) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); goods.setEditDate(new Date()); goods.setEditor(user.getId()); goodsMapper.updateById(goods); } @Override public Goods findById(Integer id) { Goods goods = goodsMapper.selectById(id); String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); goods.setPrefixUrl(prefixUrl); Brand brand = brandMapper.selectById(goods.getBrandId()); if(!Objects.isNull(brand)){ goods.setBrandName(brand.getName()); } Category category = categoryMapper.selectById(goods.getCategoryId()); if(!Objects.isNull(category)){ goods.setCategoryName(category.getName()); } goods.setMultifileList(multifileMapper.selectList(new QueryWrapper().eq("OBJ_ID",id))); return goods; } @Override public Goods findOne(Goods goods) { QueryWrapper wrapper = new QueryWrapper<>(goods); return goodsMapper.selectOne(wrapper); } @Override public List findList(Goods goods) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Goods.class); queryWrapper.selectAs(Category::getName, Goods::getCategoryName); queryWrapper.selectAs(Brand::getName, Goods::getBrandName); queryWrapper.selectAs(Category::getAttrFirst, Goods::getAttrFirst); queryWrapper.selectAs(Category::getAttrSecond, Goods::getAttrSecond); queryWrapper.selectAs(Category::getImgurl, Goods::getCategoryImgurl); queryWrapper.leftJoin(Category.class, Category::getId, Goods::getCategoryId); queryWrapper.leftJoin(Brand.class, Brand::getId, Goods::getBrandId); queryWrapper.eq(Goods::getStatus,Constants.ZERO); queryWrapper.eq(Goods::getIsdeleted,Constants.ZERO); queryWrapper.like(StringUtils.isNotBlank(goods.getAttrFirstIds()),Goods::getAttrFirstIds,goods.getAttrFirstIds()); queryWrapper.like(StringUtils.isNotBlank(goods.getAttrFirstNames()),Goods::getAttrFirstNames,goods.getAttrFirstNames()); queryWrapper.like(StringUtils.isNotBlank(goods.getAttrSecodIds()),Goods::getAttrSecodIds,goods.getAttrSecodIds()); queryWrapper.like(StringUtils.isNotBlank(goods.getAttrSecodNames()),Goods::getAttrSecodNames,goods.getAttrSecodNames()); queryWrapper.eq(!Objects.isNull(goods.getBrandId()),Goods::getBrandId,goods.getBrandId()); queryWrapper.eq(!Objects.isNull(goods.getCategoryId()),Goods::getCategoryId,goods.getCategoryId()); queryWrapper.between(!Objects.isNull(goods.getSPrice())&&!Objects.isNull(goods.getEPrice()), Goods::getPrice,goods.getSPrice(),goods.getEPrice()); queryWrapper.orderByDesc(Goods::getId); List goodsList = goodsJoinMapper.selectJoinList(Goods.class,queryWrapper); String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); goodsList.forEach(i->{ i.setPrefixUrl(prefixUrl); i.setMultifileList(multifileMapper.selectList(new QueryWrapper().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM "))); i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper().eq("GOODS_ID",i.getId()).orderByAsc(" SORTNUM "))); }); return goodsList; } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.selectAll(Goods.class); queryWrapper.selectAs(Category::getName, Goods::getCategoryName); queryWrapper.selectAs(Brand::getName, Goods::getBrandName); queryWrapper.selectAs(Category::getAttrFirst, Goods::getAttrFirst); queryWrapper.selectAs(Category::getAttrSecond, Goods::getAttrSecond); queryWrapper.leftJoin(Category.class, Category::getId, Goods::getCategoryId); queryWrapper.leftJoin(Brand.class, Brand::getId, Goods::getBrandId); queryWrapper.eq(Goods::getIsdeleted, Constants.ZERO); if (pageWrap.getModel().getId() != null) { queryWrapper.like(Goods::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getName() != null) { queryWrapper.like(Goods::getName, pageWrap.getModel().getName()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.eq(Goods::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getCategoryId() != null) { queryWrapper.eq(Goods::getCategoryId, pageWrap.getModel().getCategoryId()); } if (pageWrap.getModel().getBrandId() != null) { queryWrapper.eq(Goods::getBrandId, pageWrap.getModel().getBrandId()); } queryWrapper.orderByDesc(Goods::getId); IPage goodsIPage = goodsJoinMapper.selectJoinPage(page, Goods.class, queryWrapper); String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); goodsIPage.getRecords().forEach(i->{ i.setPrefixUrl(prefixUrl); }); return PageData.from(goodsIPage); } @Override public long count(Goods goods) { QueryWrapper wrapper = new QueryWrapper<>(goods); return goodsMapper.selectCount(wrapper); } @Override public String h5Image() { String url = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.HOME_IMAGE).getCode(); return url; } @Transactional(rollbackFor = {Exception.class, BusinessException.class}) @Override public Integer importBatch(MultipartFile file){ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); ExcelImporter ie = null; List dataList =null; try { ie = new ExcelImporter(file,0,0); dataList = ie.getDataList(GoodsImport.class,null); } catch (Exception e) { e.printStackTrace(); } if(dataList == null || dataList.size() ==0){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!"); } int num =1; for(GoodsImport m: dataList){ if(StringUtils.isBlank(m.getName()) &&StringUtils.isBlank(m.getCategory()) &&StringUtils.isBlank(m.getZdPrice()) &&StringUtils.isBlank(m.getPrice()) &&StringUtils.isBlank(m.getId()) &&StringUtils.isBlank(m.getBrand())){ continue; } if(StringUtils.isBlank(m.getName()) ||StringUtils.isBlank(m.getCategory()) ||StringUtils.isBlank(m.getZdPrice()) ||StringUtils.isBlank(m.getPrice()) ||StringUtils.isBlank(m.getId()) ||StringUtils.isBlank(m.getBrand())){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行数据无效,请检查输入!"); } Goods g = new Goods(); g.setIsdeleted(Constants.ZERO); g.setRemark(m.getId()); //品类数据 g = goodsMapper.selectOne(new QueryWrapper<>(g).last(" limit 1")); if(g != null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行商品图片文件夹重复,请检查输入!"); } Category cate = new Category(); cate.setIsdeleted(Constants.ZERO); cate.setName(m.getCategory()); //品类数据 cate = categoryMapper.selectOne(new QueryWrapper<>(cate).last(" limit 1")); if(cate == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行商品类别无效,请检查输入!"); } Brand brand = new Brand(); brand.setIsdeleted(Constants.ZERO); brand.setName(m.getBrand()); //品类数据 brand = brandMapper.selectOne(new QueryWrapper<>(brand).last(" limit 1")); if(brand == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行商品品牌无效,请检查输入!"); } if(goodsMapper.selectCount(new QueryWrapper().eq("ISDELETED",Constants.ZERO).eq("name",m.getName()))>0){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"【"+m.getName()+"】已存在"); }; Goods newModel = new Goods(); newModel.setRemark(m.getId()); newModel.setCategoryId(cate.getId()); newModel.setBrandId(brand.getId()); newModel.setIsdeleted(Constants.ZERO); newModel.setCreator(user.getId()); newModel.setCreateDate(new Date()); newModel.setName(m.getName()); newModel.setStatus(Constants.ZERO); try { newModel.setZdPrice(BigDecimal.valueOf(Double.parseDouble(m.getZdPrice()))); newModel.setPrice(BigDecimal.valueOf(Double.parseDouble(m.getPrice()))); }catch (Exception e){ } if(newModel.getZdPrice() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行指导价无效,请检查输入!"); } if(newModel.getPrice() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行入手价无效,请检查输入!"); } newModel.setPinyin(PinYinUtil.getFullSpell(m.getName())); newModel.setShortPinyin(PinYinUtil.getFirstSpell(m.getName())); CateAttr ca = new CateAttr(); ca.setCategoryId(cate.getId()); ca.setIsdeleted(Constants.ZERO); //查询全部属性1和属性2规格值 List allAttr = cateAttrMapper.selectList(new QueryWrapper<>(ca)); //属性1集合 String[] attrs = StringUtils.defaultString(m.getAttrFirstNames(),"").split("\n"); //属性2集合 String[] attrs2 = StringUtils.defaultString(m.getAttrSecodNames(),"").split("\n"); //产品参数集合 String[] params = StringUtils.defaultString(m.getParamStr(),"").split("\n"); if(attrs.length > 0){ String attrids="" ,attrNames=""; for(String s : attrs){ if(StringUtils.isBlank(s)){ continue; } //查询属性规格对象 CateAttr ta = getCateAttrByName(s,Constants.ZERO,allAttr); if(ta == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行属性1中【"+s+"】无效,请检查输入!"); } if(StringUtils.isNotBlank(attrids)){ attrids += ","; attrNames += ","; } attrids+= ta.getId(); attrNames+= ta.getName(); } newModel.setAttrFirstIds(attrids); newModel.setAttrFirstNames(attrNames); } if(attrs2.length > 0){ String attrids="" ,attrNames=""; for(String s : attrs2){ if(StringUtils.isBlank(s)){ continue; } //查询属性规格对象 CateAttr ta = getCateAttrByName(s,Constants.ONE,allAttr); if(ta == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行属性1中【"+s+"】无效,请检查输入!"); } if(StringUtils.isNotBlank(attrids)){ attrids += ","; attrNames += ","; } attrids+= ta.getId(); attrNames+= ta.getName(); } newModel.setAttrSecodIds(attrids); newModel.setAttrSecodNames(attrNames); } List mulFiles = null; String proDir =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode(); String tf = proDir.substring(0,proDir.length()-1); String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.GOODS_IMG_DIR).getCode() + proDir; if(StringUtils.isNotBlank(path)){ File dir =new File(path+File.separator+newModel.getRemark()+File.separator); if(dir!=null && dir.isDirectory()){ File[] files = dir.listFiles(); if(files!=null && files.length>0){ for(File f:files){ if(StringUtils.isBlank(newModel.getImgurl()) && isImgFile(f)){ //取第一张图片作为列表图 String imgdir =f.getPath().substring(f.getPath().indexOf(tf)+tf.length()+1); newModel.setImgurl(imgdir.replace(File.separator,"/")); // newModel.setImgurl(f.getPath().replace(path.replace(File.separator,"/"),"")); } // else{ // if(mulFiles==null){ // mulFiles = new ArrayList<>(); // } // mulFiles.add(f.getPath().replace(path.replace("/",File.separator),"")); // } if((mulFiles ==null || mulFiles.size() == 0) && f.isDirectory()){ //如果是文件夹 File[] fs = f.listFiles(); if(fs!=null && fs.length>0){ for(File mf : fs){ if(isImgFile(mf)){ if(mulFiles==null){ mulFiles = new ArrayList<>(); } String imgdir =mf.getPath().substring(mf.getPath().indexOf(tf)+tf.length()+1); mulFiles.add(imgdir.replace(File.separator,"/")); // newModel.setImgurl(imgdir); //// mulFiles.add(mf.getName()); // mulFiles.add(mf.getPath().replace(path.replace(File.separator,"/"),"")); } } } } } } } } //查询商品信息 goodsMapper.insert(newModel); CateParam cp = new CateParam(); cp.setIsdeleted(Constants.ZERO); cp.setCategoryId(cate.getId()); //查询全部产品参数配置 List allParams = cateParamMapper.selectList(new QueryWrapper<>(cp)); if(params.length > 0){ for(String s : params){ if(StringUtils.isBlank(s)){ continue; } s = s.replace(":",":"); String[] ts = s.split(":"); if(ts.length == 0){ continue; } //查询属性规格对象 CateParam ta = getCateParamByName(ts[0], allParams); if(ta == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(num)+"】行产品参数中【"+s+"】无效,请检查输入!"); } GoodsParam gp = new GoodsParam(); gp.setIsdeleted(Constants.ZERO); gp.setCreator(user.getId()); gp.setCreateDate(newModel.getCreateDate()); gp.setGoodsId(newModel.getId()); gp.setName(ta.getName()); gp.setPramaId(ta.getId()); gp.setStatus(Constants.ZERO); gp.setVal(ts.length>1?ts[1]:null); gp.setSortnum(ta.getSortnum()); //插入产品参数关联表 goodsParamMapper.insert(gp); } } if(mulFiles !=null && mulFiles.size()>0){ for(int i=0;i allAttr) { if(allAttr != null ){ for(CateAttr ca :allAttr){ if(Constants.equalsInteger(type,ca.getType()) && StringUtils.equals(s.trim(),ca.getName())){ return ca; } } } return null; } private CateParam getCateParamByName(String s, List allAttr) { if(allAttr != null ){ for(CateParam ca :allAttr){ if( StringUtils.equals(s.trim(),ca.getName())){ return ca; } } } return null; } // @Override // public void export(HttpServletRequest request, HttpServletResponse response) throws Exception { // //excel文件名 // String fileName = "产品导入表"+System.currentTimeMillis()+".xls"; // //创建HSSFWorkbook // HSSFWorkbook wb = new HSSFWorkbook(); // //sheet名 // String[] sheet1Title = {"商品ID","商品名称","商品类别","商品品牌","指导价","入手价","属性1","属性2","产品参数"}; // ExcelUtil.createSheet("导入模板",sheet1Title, null, wb); // String[] sheet2Title = {"参数名称","参数"}; // List categoryList = categoryMapper.selectList(new QueryWrapper() // .eq("ISDELETED","0") // ); // ExcelUtil.createSheet("类别的产品参数模板",sheet2Title, null, wb); // //响应到客户端 // try { // this.setResponseHeader(response, fileName); // OutputStream os = response.getOutputStream(); // wb.write(os); // os.flush(); // os.close(); // } catch (Exception e) { // e.printStackTrace(); // } // } public void setResponseHeader(HttpServletResponse response, String fileName) { try { String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()); response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName); response.setContentType("application/octet-stream"); response.setHeader("eva-opera-type", "download"); response.setHeader("eva-download-filename", encodeFileName); } catch (Exception ex) { ex.printStackTrace(); } } @Override public void export(HttpServletRequest request, HttpServletResponse response) throws Exception { try { String fileName = "产品导入表"+System.currentTimeMillis()+".xlsx"; // 获取文件输入流 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("static/file/goodsExcelTemp.xlsx"); // 定义一个org.apache.poi.ss.usermodel.Workbook的变量 Workbook workbook = new XSSFWorkbook(inputStream); // 获取第一张表 Sheet sheet = workbook.getSheetAt(1); CellStyle cs = workbook.createCellStyle(); cs.setWrapText(true); // sheet.getPhysicalNumberOfRows()获取总的行数 // 循环读取每一行 Row row = sheet.createRow(1); List categoryList = categoryMapper.selectList(new QueryWrapper().eq("ISDELETED",0)); categoryList.forEach(i->{ i.setParamList(cateParamMapper.selectList(new QueryWrapper().eq("ISDELETED",0).eq("CATEGORY_ID",i.getId()))); }); //创建内容 if(!Objects.isNull(categoryList)){ for(int i=0;i paramList = category.getParamList(); String param = ""; for (int j = 0; j < paramList.size() ; j++) { if(j==0){ param = paramList.get(j).getName()+":"; }else{ param =param + "\r\n" + paramList.get(j).getName()+":"; } } Cell cell = row.createCell(1); cell.setCellStyle(cs); cell.setCellValue(param); } } this.setResponseHeader(response, fileName); OutputStream os = response.getOutputStream(); workbook.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); } } @Override public PageData getGoodsPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.selectAll(Goods.class); queryWrapper.selectAs(Category::getName, Goods::getCategoryName); queryWrapper.selectAs(Brand::getName, Goods::getBrandName); queryWrapper.selectAs(Category::getAttrFirst, Goods::getAttrFirst); queryWrapper.selectAs(Category::getAttrSecond, Goods::getAttrSecond); queryWrapper.selectAs(Category::getImgurl, Goods::getCategoryImgurl); queryWrapper.leftJoin(Category.class, Category::getId, Goods::getCategoryId); queryWrapper.leftJoin(Brand.class, Brand::getId, Goods::getBrandId); queryWrapper.eq(Goods::getStatus,Constants.ZERO); queryWrapper.eq(Goods::getIsdeleted,Constants.ZERO); queryWrapper.eq(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getCategoryId()), Goods::getCategoryId, pageWrap.getModel().getCategoryId()) .eq(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getBrandId()), Goods::getBrandId, pageWrap.getModel().getBrandId()) .and(!Objects.isNull(pageWrap.getModel()) && StringUtils.isNotBlank(pageWrap.getModel().getKeyword()), i->i.like(Goods::getPinyin,pageWrap.getModel().getKeyword()) .or().like(Goods::getShortPinyin,pageWrap.getModel().getKeyword()) .or().like(Goods::getName,pageWrap.getModel().getKeyword()) ) .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrFirst()), " find_in_set('"+pageWrap.getModel().getAttrFirst()+"',t.ATTR_FIRST_IDS) ") .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getAttrSecond()), " find_in_set('"+pageWrap.getModel().getAttrSecond()+"',t.ATTR_SECOD_IDS) ") .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getSPrice()), " t.PRICE >= "+pageWrap.getModel().getSPrice()+" ") .apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getEPrice()), " t.PRICE <= "+pageWrap.getModel().getEPrice()+" "); queryWrapper.orderByDesc(Goods::getId); IPage goodsIPage = goodsJoinMapper.selectJoinPage(page, Goods.class, queryWrapper); String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); goodsIPage.getRecords().forEach(i->{ i.setPrefixUrl(prefixUrl); i.setMultifileList(multifileMapper.selectList(new QueryWrapper().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM "))); i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper().eq("GOODS_ID",i.getId()).orderByAsc(" SORTNUM "))); }); return PageData.from(goodsIPage); } @Override public List findListForH5(GoodsRequest goodsRequest) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Goods.class); queryWrapper.selectAs(Category::getName, Goods::getCategoryName); queryWrapper.selectAs(Brand::getName, Goods::getBrandName); queryWrapper.selectAs(Category::getAttrFirst, Goods::getAttrFirst); queryWrapper.selectAs(Category::getAttrSecond, Goods::getAttrSecond); queryWrapper.selectAs(Category::getImgurl, Goods::getCategoryImgurl); queryWrapper.leftJoin(Category.class, Category::getId, Goods::getCategoryId); queryWrapper.leftJoin(Brand.class, Brand::getId, Goods::getBrandId); queryWrapper.eq(Goods::getStatus,Constants.ZERO); queryWrapper.eq(Goods::getIsdeleted,Constants.ZERO); queryWrapper.eq(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getCategoryId()), Goods::getCategoryId, goodsRequest.getCategoryId()) .eq(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getBrandId()), Goods::getBrandId, goodsRequest.getBrandId()) .and(!Objects.isNull(goodsRequest) && StringUtils.isNotBlank(goodsRequest.getKeyword()), i->i.like(Goods::getPinyin,goodsRequest.getKeyword()) .or().like(Goods::getShortPinyin,goodsRequest.getKeyword()) .or().like(Goods::getName,goodsRequest.getKeyword()) ) .apply(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getAttrFirst()), " find_in_set('"+goodsRequest.getAttrFirst()+"',t.ATTR_FIRST_IDS) ") .apply(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getAttrSecond()), " find_in_set('"+goodsRequest.getAttrSecond()+"',t.ATTR_SECOD_IDS) ") .apply(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getSPrice()), " t.PRICE >= "+goodsRequest.getSPrice()+" ") .apply(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getEPrice()), " t.PRICE <= "+goodsRequest.getEPrice()+" "); queryWrapper.orderByDesc(Goods::getId); List goodsList = goodsJoinMapper.selectJoinList(Goods.class,queryWrapper); String prefixUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.FILE_DIR).getCode() + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); goodsList.forEach(i->{ i.setPrefixUrl(prefixUrl); i.setMultifileList(multifileMapper.selectList(new QueryWrapper().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM "))); i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper().eq("GOODS_ID",i.getId()).orderByAsc(" SORTNUM "))); }); return goodsList; } }