From 4fabfe4dbd2eb28d07a4350597d314958cc1c281 Mon Sep 17 00:00:00 2001 From: MrShi <1878285526@qq.com> Date: 星期四, 09 十月 2025 11:16:43 +0800 Subject: [PATCH] 优化 --- server/services/src/main/java/com/doumee/service/business/impl/LocksServiceImpl.java | 288 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 244 insertions(+), 44 deletions(-) diff --git a/server/services/src/main/java/com/doumee/service/business/impl/LocksServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/LocksServiceImpl.java index af86451..f789565 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/LocksServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/LocksServiceImpl.java @@ -1,21 +1,52 @@ package com.doumee.service.business.impl; +import com.doumee.core.constants.ResponseStatus; +import com.doumee.core.exception.BusinessException; +import com.doumee.core.model.LoginUserInfo; +import com.doumee.core.wx.WxMiniConfig; +import com.doumee.dao.business.BikesMapper; +import com.google.common.collect.Lists; +import com.doumee.biz.system.SystemDictDataBiz; +import com.doumee.core.constants.Constants; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; +import com.doumee.core.wx.WxMiniUtilService; import com.doumee.dao.business.LocksMapper; +import com.doumee.dao.business.join.LocksJoinMapper; +import com.doumee.dao.business.model.BaseParam; +import com.doumee.dao.business.model.Bikes; import com.doumee.dao.business.model.Locks; +import com.doumee.dao.business.model.Sites; +import com.doumee.dao.system.model.SystemDictData; import com.doumee.service.business.LocksService; 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.service.business.SitesService; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import io.swagger.models.auth.In; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * 閿佸ご淇℃伅琛⊿ervice瀹炵幇 @@ -27,6 +58,19 @@ @Autowired private LocksMapper locksMapper; + + @Autowired + private LocksJoinMapper locksJoinMapper; + + + @Autowired + private WxMiniUtilService wxMiniUtilService; + + + @Autowired + private SystemDictDataBiz systemDictDataBiz; + @Autowired + private BikesMapper bikesMapper; @Override public String create(Locks locks) { @@ -84,58 +128,133 @@ QueryWrapper<Locks> wrapper = new QueryWrapper<>(locks); return locksMapper.selectList(wrapper); } - + + @Override + public List<Locks> findLockBase64List(Locks locks) { + LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); + String fullPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FILE_DIR).getCode() + + systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode() ; + + QueryWrapper<Locks> wrapper = new QueryWrapper<>(locks); + wrapper.lambda().orderByAsc(Locks::getCode); + List<Locks> locksList = locksMapper.selectList(wrapper); + SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.ACCESS_TOKEN); + String code = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); + String prePath = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.IMG_DIR).getCode(); + if (!CollectionUtils.isEmpty(locksList)){ + // 妫�鏌ユ槸鍚︽湁鍥剧墖淇℃伅娌℃湁鏇存柊淇濆瓨鍥剧墖 + locksList.forEach(s-> { + if (Constants.equalsInteger(locks.getFource(),Constants.ONE) ||StringUtils.isBlank(s.getInfo())){ + try { + wxMiniUtilService.generateWXMiniCode(s, WxMiniConfig.wxMaService.getAccessToken(),prePath,code); + }catch (Exception e){ + } + s.setEditor(loginUserInfo.getId()); + s.setEditDate(new Date()); + updateById(s); + } + s.setImgfullurl(fullPath+s.getInfo()); + }); + return locksList; + } + return new ArrayList<>(); + } + + /** + * 鑾峰彇鎵�鏈夌數娴嬪皬绋嬪簭浜岀淮鐮� + * @param force 0涓嶅己鍒跺埛鏂� 1寮哄埗鍒锋柊 + * @return + */ + @Override + public List<Bikes> findAllBikeBase(Integer force) { + List<Bikes> bikesList = bikesMapper.selectList(new QueryWrapper<Bikes>().lambda() + .eq(Bikes::getIsdeleted,Constants.ZERO) + .eq(Bikes::getType,Constants.ONE) + ); + if(bikesList!=null && bikesList.size()>0){ + LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); + String fullPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FILE_DIR).getCode() + + systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode() ; + String code = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); + String prePath = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.IMG_DIR).getCode(); + for(Bikes bikes : bikesList){ + if (Constants.equalsInteger(force,Constants.ONE) || StringUtils.isBlank(bikes.getImgurl())){ + try { + wxMiniUtilService.generateEbikeWXMiniCode(bikes, WxMiniConfig.wxMaService.getAccessToken(),prePath,code); + }catch (Exception e){ + } + if (StringUtils.isNotBlank(bikes.getImgurl())){ + bikes.setEditor(loginUserInfo.getId()); + bikes.setEditDate(new Date()); + bikesMapper.updateById(bikes); + } + } + if (StringUtils.isNotBlank(bikes.getImgurl())){ + bikes.setImgurl(fullPath+bikes.getImgurl()); + } + } + + } + + return bikesList; + } + @Override + public Bikes findBikeBase(String bikeId, Integer force) { + Bikes bikes = bikesMapper.selectById(bikeId); + if(bikes == null + || Constants.equalsInteger(bikes.getIsdeleted(),Constants.ONE) + || !Constants.equalsInteger(bikes.getType(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); + String fullPath = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FILE_DIR).getCode() + + systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode() ; + String code = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.PROJECTS).getCode(); + String prePath = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.IMG_DIR).getCode(); + // 妫�鏌ユ槸鍚︽湁鍥剧墖淇℃伅娌℃湁鏇存柊淇濆瓨鍥剧墖 + if (Constants.equalsInteger(force,Constants.ONE) || StringUtils.isBlank(bikes.getImgurl())){ + try { + wxMiniUtilService.generateEbikeWXMiniCode(bikes, WxMiniConfig.wxMaService.getAccessToken(),prePath,code); + }catch (Exception e){ + e.printStackTrace(); + } + if (StringUtils.isNotBlank(bikes.getImgurl())){ + bikes.setEditor(loginUserInfo.getId()); + bikes.setEditDate(new Date()); + bikesMapper.updateById(bikes); + } + } + if (StringUtils.isBlank(bikes.getImgurl())){ + throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"鑾峰彇灏忕▼搴忕爜澶辫触锛岃绋嶅悗閲嶈瘯锛�"); + } + bikes.setImgurl(fullPath+bikes.getImgurl()); + return bikes; + } + + @Override public PageData<Locks> findPage(PageWrap<Locks> pageWrap) { IPage<Locks> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); - QueryWrapper<Locks> queryWrapper = new QueryWrapper<>(); + MPJLambdaWrapper<Locks> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); - if (pageWrap.getModel().getId() != null) { - queryWrapper.lambda().eq(Locks::getId, pageWrap.getModel().getId()); - } - if (pageWrap.getModel().getCreateDate() != null) { - queryWrapper.lambda().ge(Locks::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); - queryWrapper.lambda().le(Locks::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); - } - if (pageWrap.getModel().getCreator() != null) { - queryWrapper.lambda().eq(Locks::getCreator, pageWrap.getModel().getCreator()); - } - if (pageWrap.getModel().getEditDate() != null) { - queryWrapper.lambda().ge(Locks::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); - queryWrapper.lambda().le(Locks::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); - } - if (pageWrap.getModel().getEditor() != null) { - queryWrapper.lambda().eq(Locks::getEditor, pageWrap.getModel().getEditor()); - } - if (pageWrap.getModel().getIsdeleted() != null) { - queryWrapper.lambda().eq(Locks::getIsdeleted, pageWrap.getModel().getIsdeleted()); - } - if (pageWrap.getModel().getInfo() != null) { - queryWrapper.lambda().eq(Locks::getInfo, pageWrap.getModel().getInfo()); - } - if (pageWrap.getModel().getName() != null) { - queryWrapper.lambda().eq(Locks::getName, pageWrap.getModel().getName()); - } + if (pageWrap.getModel().getCode() != null) { - queryWrapper.lambda().eq(Locks::getCode, pageWrap.getModel().getCode()); - } - if (pageWrap.getModel().getStatus() != null) { - queryWrapper.lambda().eq(Locks::getStatus, pageWrap.getModel().getStatus()); + queryWrapper.like(Locks::getCode, pageWrap.getModel().getCode()); } if (pageWrap.getModel().getSiteId() != null) { - queryWrapper.lambda().eq(Locks::getSiteId, pageWrap.getModel().getSiteId()); + queryWrapper.like(Locks::getSiteId, pageWrap.getModel().getSiteId()); } - if (pageWrap.getModel().getBikeCode() != null) { - queryWrapper.lambda().eq(Locks::getBikeCode, pageWrap.getModel().getBikeCode()); + if (pageWrap.getModel().getSiteName() != null) { + queryWrapper.like(Sites::getName, pageWrap.getModel().getSiteName()); } - for(PageWrap.SortData sortData: pageWrap.getSorts()) { - if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { - queryWrapper.orderByDesc(sortData.getProperty()); - } else { - queryWrapper.orderByAsc(sortData.getProperty()); - } - } - return PageData.from(locksMapper.selectPage(page, queryWrapper)); + queryWrapper.leftJoin(Bikes.class,Bikes::getCode,Locks::getBikeCode) + .leftJoin(BaseParam.class,BaseParam::getId,Bikes::getParamId) + .leftJoin(Sites.class,Sites::getCode,Locks::getSiteId); + queryWrapper.orderByDesc(Locks::getBikeCode); + queryWrapper.selectAll(Locks.class) + .selectAs(Sites::getName,Locks::getSiteName) + .selectAs(BaseParam::getName,Locks::getBikeType); + return PageData.from(locksJoinMapper.selectJoinPage(page, Locks.class,queryWrapper)); } @Override @@ -143,6 +262,87 @@ QueryWrapper<Locks> wrapper = new QueryWrapper<>(locks); return locksMapper.selectCount(wrapper); } - + public static void packFilesToZip(List<File> files, ServletOutputStream os) throws IOException { + try (ZipArchiveOutputStream zipOutputStream = new ZipArchiveOutputStream(os)) { + for (File file : files) { + ZipArchiveEntry entry = new ZipArchiveEntry(file.getName()); + zipOutputStream.putArchiveEntry(entry); + try (FileInputStream fileInputStream = new FileInputStream(file)) { + byte[] buffer = new byte[1024]; + int length; + while ((length = fileInputStream.read(buffer)) > 0) { + zipOutputStream.write(buffer, 0, length); + } + } + zipOutputStream.closeArchiveEntry(); + } + } + } + @Override + public void exportImages(String siteId, HttpServletResponse response) { + try { + List<File> fileList = new ArrayList<>(); + List<Locks> locks = locksJoinMapper.selectList(new QueryWrapper<Locks>().lambda().eq(Locks::getSiteId,siteId).isNotNull(Locks::getInfo)); + if(locks== null || locks.size() == 0){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.IMG_DIR).getCode()+systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode(); + for(Locks l : locks){ + if(StringUtils.isNotBlank(l.getInfo())){ + File file = new File(path + l.getInfo()); + if(file!=null && file.isFile()){ + fileList.add(file); + } + } + } + if(fileList == null || fileList.size() == 0){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + String fileName = "绔欑偣銆�"+siteId+"銆戝皬绋嬪簭鐮佹壒閲忓鍑篲"+System.currentTimeMillis()+".zip" ; + String encodeFileName = URLEncoder.encode(fileName); + response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName); + response.setContentType("application/octet-stream"); + response.setHeader("eva-opera-type", "download"); + response.setHeader("eva-download-filename", encodeFileName); + packFilesToZip(fileList,response.getOutputStream()); + } catch (IOException e) { + throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e); + } + } + @Override + public void exportEbikeImages(String bikeid, HttpServletResponse response){ + try { + List<File> fileList = new ArrayList<>(); + List<Bikes> bikesList = bikesMapper.selectList(new QueryWrapper<Bikes>().lambda() + .eq(Bikes::getIsdeleted,Constants.ZERO) + .eq(StringUtils.isNotBlank(bikeid) ,Bikes::getId,bikeid) + .eq(Bikes::getType,Constants.ONE) + ); + if(bikesList== null || bikesList.size() == 0){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.IMG_DIR).getCode()+systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode(); + for(Bikes l : bikesList){ + if(StringUtils.isNotBlank(l.getImgurl())){ + File file = new File(path + l.getImgurl()); + if(file!=null && file.isFile()){ + fileList.add(file); + } + } + } + if(fileList == null || fileList.size() == 0){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + String fileName = "鐢佃溅灏忕▼搴忕爜鎵归噺瀵煎嚭_"+System.currentTimeMillis()+".zip" ; + String encodeFileName = URLEncoder.encode(fileName); + response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName); + response.setContentType("application/octet-stream"); + response.setHeader("eva-opera-type", "download"); + response.setHeader("eva-download-filename", encodeFileName); + packFilesToZip(fileList,response.getOutputStream()); + } catch (IOException e) { + throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e); + } + } } -- Gitblit v1.9.3