소스 검색

相机导出excel

lyhzzz 2 년 전
부모
커밋
037ec1b8c0

+ 195 - 4
src/main/java/com/fdkankan/ucenter/controller/CameraController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.controller;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.exception.BusinessException;
@@ -10,16 +11,26 @@ import com.fdkankan.ucenter.common.ResultData;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.entity.Camera;
 import com.fdkankan.ucenter.entity.CameraDetail;
+import com.fdkankan.ucenter.entity.ScenePro;
 import com.fdkankan.ucenter.entity.User;
-import com.fdkankan.ucenter.service.ICameraDetailService;
-import com.fdkankan.ucenter.service.ICameraService;
-import com.fdkankan.ucenter.service.ISceneResourceService;
-import com.fdkankan.ucenter.service.IUserService;
+import com.fdkankan.ucenter.service.*;
+import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.vo.request.CameraParam;
+import com.fdkankan.ucenter.vo.request.ExportCameraParam;
+import com.fdkankan.ucenter.vo.response.CameraAppVo;
+import com.fdkankan.ucenter.vo.response.CameraExcelVo;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -35,6 +46,8 @@ public class CameraController extends BaseController {
     ISceneResourceService sceneResourceService;
     @Autowired
     IUserService userService;
+    @Autowired
+    ISceneProService sceneProService;
 
     /**
      * 获取设备到期数量
@@ -159,4 +172,182 @@ public class CameraController extends BaseController {
         }
         return Result.success(userService.findCameraDetailByChildName(getToken(), jsonObject.getString("childName")));
     }
+
+    /**
+     * 获取四维看看PRO - 我的相机列表 并到处execl
+     * @return
+     */
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    public HSSFWorkbook export(@RequestBody ExportCameraParam param) throws Exception {
+
+        String fileName = "我的相机";
+        User user = userService.getByToken(getToken());
+        List<CameraExcelVo> responseCameraList = cameraDetailService.getListByUserAndTypeEx(user.getId());
+        List<Long> cameraIdList = responseCameraList.stream().map(CameraExcelVo::getCameraId).collect(Collectors.toList());
+
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ScenePro::getCameraId,cameraIdList);
+        wrapper.orderByDesc(ScenePro::getCreateTime);
+        List<ScenePro> sceneEntityList = sceneProService.list(wrapper);
+
+        HashMap<Long,List<ScenePro>> sceneProMap = new HashMap<>();
+        for (ScenePro scenePro : sceneEntityList) {
+            if(sceneProMap.get(scenePro.getCameraId()) == null){
+                List<ScenePro> proList = new ArrayList<>();
+                proList.add(scenePro);
+                sceneProMap.put(scenePro.getCameraId(),proList);
+            }else {
+                sceneProMap.get(scenePro.getCameraId()).add(scenePro);
+            }
+
+        }
+
+        HSSFWorkbook wb = new HSSFWorkbook();
+        if (responseCameraList != null) {
+            HSSFSheet sheet = wb.createSheet("camera");
+            //在sheet里创建第一行,这里即是表头
+            HSSFRow rowTitle = sheet.createRow(0);
+            rowTitle.createCell(0).setCellValue("S/N码");
+            rowTitle.createCell(1).setCellValue("云容量");
+            rowTitle.createCell(2).setCellValue("到期时间");
+            rowTitle.createCell(3).setCellValue("协作者");
+            rowTitle.createCell(4).setCellValue("拍摄场景数量");
+            rowTitle.createCell(5).setCellValue("最后拍摄时间");
+
+            int i = 1;
+            String rl = "";
+            String UsedSpaceStr = "";
+            String TotalSpaceStr = "";
+            for (CameraExcelVo rc : responseCameraList) {
+                HSSFRow rowData = sheet.createRow(i);
+                rowData.createCell(0).setCellValue(rc.getSnCode());
+
+
+                if(rc.getUsedSpaceStr() == null || StringUtils.isEmpty(rc.getUsedSpaceStr())){
+                    UsedSpaceStr = "0GB";
+                }else {
+                    UsedSpaceStr = rc.getUsedSpaceStr();
+                }
+
+                if(rc.getTotalSpaceStr() == null || StringUtils.isEmpty(rc.getTotalSpaceStr())){
+                    TotalSpaceStr = "0GB";
+                }else {
+                    TotalSpaceStr = rc.getTotalSpaceStr();
+                }
+
+                if(rc.getSpaceEndStr() == null){
+                    rowData.createCell(1).setCellValue(UsedSpaceStr + " / " + TotalSpaceStr);
+                }else {
+                    if(rc.getIsExpired() == null || rc.getIsExpired() == 1){
+                        rowData.createCell(1).setCellValue(UsedSpaceStr + " / " + TotalSpaceStr);
+                    }else{
+                        rowData.createCell(1).setCellValue(UsedSpaceStr);
+                    }
+                }
+
+                if(rc.getSpaceEndStr() == null ){
+                    rowData.createCell(2).setCellValue("");
+                }else{
+                    rowData.createCell(2).setCellValue(rc.getSpaceEndStr());
+                }
+
+                if(rc.getCooperationUser() == null ){
+                    rowData.createCell(3).setCellValue("");
+                }else{
+                    rowData.createCell(3).setCellValue(rc.getCooperationUser());
+                }
+                List<ScenePro> proList = sceneProMap.get(rc.getCameraId());
+                if(proList == null || proList.size() <=0){
+                    rowData.createCell(4).setCellValue("");
+                    rowData.createCell(5).setCellValue("");
+                }else {
+                    rowData.createCell(4).setCellValue(proList.size());
+                    String lastTime = null;
+                    for (ScenePro scenePro : proList) {
+                        if(lastTime == null){
+                            lastTime = scenePro.getCreateTime();
+                        }else {
+                            Date date1 = DateUserUtil.getDate(lastTime);
+                            Date date2 = DateUserUtil.getDate(scenePro.getCreateTime());
+                            if(date2.getTime() >date1.getTime()){
+                                lastTime = scenePro.getCreateTime();
+                            }
+                        }
+
+                    }
+                    rowData.createCell(5).setCellValue(lastTime);
+                }
+                i++;
+            }
+
+        }
+
+        HashMap<Long, Camera> cameraMap = cameraService.getByIds(cameraIdList);
+        HashMap<Long, Integer> cameraSnCodeCountMap = new HashMap<>();
+        for (ScenePro sceneProEntity : sceneEntityList) {
+            if(cameraSnCodeCountMap.get(sceneProEntity.getCameraId()) ==null){
+                cameraSnCodeCountMap.put(sceneProEntity.getCameraId(),1);
+                continue;
+            }
+            Integer totalNum = 1 + cameraSnCodeCountMap.get(sceneProEntity.getCameraId()) ;
+            cameraSnCodeCountMap.put(sceneProEntity.getCameraId(),totalNum);
+        }
+
+        HSSFSheet sheet = wb.createSheet("scene");
+        //在sheet里创建第一行,这里即是表头
+        HSSFRow rowTitle = sheet.createRow(0);
+        rowTitle.createCell(0).setCellValue("S/N码");
+        rowTitle.createCell(1).setCellValue("开始时间");
+        rowTitle.createCell(2).setCellValue("结束时间");
+        rowTitle.createCell(3).setCellValue("场景数量");
+        int i = 1;
+        for (Long  cameraId : cameraMap.keySet()) {
+            HSSFRow rowData = sheet.createRow(i);
+            i++;
+            rowData.createCell(0).setCellValue(cameraMap.get(cameraId) == null ? "" : cameraMap.get(cameraId).getSnCode());
+            rowData.createCell(1).setCellValue(param.getStartTime() == null ? "" : param.getStartTime());
+            rowData.createCell(2).setCellValue(param.getEndTime() == null ? "" : param.getEndTime());
+            if(cameraSnCodeCountMap.get(cameraId) == null){
+                rowData.createCell(3).setCellValue("");
+                continue;
+            }
+            rowData.createCell(3).setCellValue(cameraSnCodeCountMap.get(cameraId));
+        }
+
+
+        HSSFSheet sheet2 = wb.createSheet("info");
+        //在sheet里创建第一行,这里即是表头
+        HSSFRow rowTitle2 = sheet2.createRow(0);
+        rowTitle2.createCell(0).setCellValue("S/N码");
+        rowTitle2.createCell(1).setCellValue("场景码");
+        rowTitle2.createCell(2).setCellValue("场景名称");
+        rowTitle2.createCell(3).setCellValue("场景链接");
+        rowTitle2.createCell(4).setCellValue("创建时间");
+
+        int k = 1;
+        for (ScenePro sceneProEntity : sceneEntityList) {
+            HSSFRow rowData = sheet2.createRow(k);
+            k++;
+            if(cameraMap.get(sceneProEntity.getCameraId()) == null){
+                rowData.createCell(0).setCellValue("");
+            }else {
+                rowData.createCell(0).setCellValue(cameraMap.get(sceneProEntity.getCameraId()).getSnCode());
+            }
+            rowData.createCell(1).setCellValue(sceneProEntity.getNum() == null ? "" :sceneProEntity.getNum());
+            rowData.createCell(2).setCellValue(sceneProEntity.getSceneName() == null ? "" :sceneProEntity.getSceneName());
+            rowData.createCell(3).setCellValue(sceneProEntity.getWebSite() == null ? "" :sceneProEntity.getWebSite());
+            rowData.createCell(4).setCellValue(sceneProEntity.getCreateTime() == null ? "" : sceneProEntity.getCreateTime());
+        }
+
+        //输出Excel文件
+        OutputStream output = response.getOutputStream();
+        response.reset();
+        //中文名称要进行编码处理
+        response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1") + ".xls");
+        response.setContentType("application/msexcel");
+        wb.write(output);
+        output.close();
+
+        return wb;
+    }
 }

+ 3 - 0
src/main/java/com/fdkankan/ucenter/mapper/ICameraDetailMapper.java

@@ -3,6 +3,7 @@ package com.fdkankan.ucenter.mapper;
 import com.fdkankan.ucenter.entity.CameraDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fdkankan.ucenter.vo.response.CameraAppVo;
+import com.fdkankan.ucenter.vo.response.CameraExcelVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,4 +22,6 @@ public interface ICameraDetailMapper extends BaseMapper<CameraDetail> {
 
     List<CameraAppVo> getListByUserAndType(@Param("userId") Long userId, @Param("cameraType") Integer cameraType);
     List<CameraAppVo> getListByUserIdsAndType(@Param("userIds") List<Long> userId, @Param("cameraType") Integer cameraType);
+
+    List<CameraExcelVo> getListByUserAndTypeEx(@Param("userId") Long userId);
 }

+ 3 - 0
src/main/java/com/fdkankan/ucenter/service/ICameraDetailService.java

@@ -4,6 +4,7 @@ import com.fdkankan.ucenter.entity.CameraDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.entity.User;
 import com.fdkankan.ucenter.vo.response.CameraAppVo;
+import com.fdkankan.ucenter.vo.response.CameraExcelVo;
 
 import java.util.HashMap;
 import java.util.List;
@@ -41,4 +42,6 @@ public interface ICameraDetailService extends IService<CameraDetail> {
     boolean updateCameraBalance(Long cameraId, int body, Integer points);
 
     void uploadUserCameraInfo(Long id, String cameraVersion, String appVersion);
+
+    List<CameraExcelVo> getListByUserAndTypeEx(Long cameraId);
 }

+ 6 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CameraDetailServiceImpl.java

@@ -11,6 +11,7 @@ import com.fdkankan.ucenter.mapper.ICameraDetailMapper;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.ucenter.vo.response.CameraAppVo;
+import com.fdkankan.ucenter.vo.response.CameraExcelVo;
 import com.fdkankan.ucenter.vo.response.CameraSpaceVo;
 import org.joda.time.DateTime;
 import org.joda.time.Days;
@@ -203,4 +204,9 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
                 .set(CameraDetail::getLastRequestTime,new DateTime());
         this.update(wrapper);
     }
+
+    @Override
+    public List<CameraExcelVo> getListByUserAndTypeEx(Long userId) {
+        return this.getBaseMapper().getListByUserAndTypeEx(userId);
+    }
 }

+ 9 - 0
src/main/java/com/fdkankan/ucenter/vo/request/ExportCameraParam.java

@@ -0,0 +1,9 @@
+package com.fdkankan.ucenter.vo.request;
+
+import lombok.Data;
+
+@Data
+public class ExportCameraParam {
+    private String startTime;
+    private String endTime;
+}

+ 33 - 0
src/main/java/com/fdkankan/ucenter/vo/response/CameraExcelVo.java

@@ -0,0 +1,33 @@
+package com.fdkankan.ucenter.vo.response;
+
+import com.fdkankan.common.util.FileSizeUtil;
+import lombok.Data;
+
+@Data
+public class CameraExcelVo {
+    private Long cameraId;                    //S/N码
+    private String snCode;                      //
+    private String totalSpaceStr;               //云容量
+    private Long totalSpace;               //云容量
+    private Long usedSpace;               //云容量
+    private String UsedSpaceStr;               //云容量
+    private String spaceEndStr;                 //到期时间
+    private String cooperationUser;             //协作者
+    private String sceneCount;                  //拍摄场景数量
+    private String lastTime;                    //最后拍摄时间
+    private Integer isExpired;                    //最后拍摄时间
+
+    public String getTotalSpaceStr() {
+        if(totalSpace == null){
+            return "0GB";
+        }
+       return FileSizeUtil.formatFileSize(totalSpace);
+    }
+
+    public String getUsedSpaceStr() {
+        if(usedSpace == null){
+            return "0GB";
+        }
+        return FileSizeUtil.formatFileSize(usedSpace);
+    }
+}

+ 10 - 0
src/main/resources/mapper/ucenter/CameraDetailMapper.xml

@@ -22,4 +22,14 @@
         </foreach>
           and d.goods_id = #{cameraType}
     </select>
+
+    <select id="getListByUserAndTypeEx" resultType="com.fdkankan.ucenter.vo.response.CameraExcelVo">
+        SELECT d.camera_id,c.sn_code,d.used_space,d.total_space,u.user_name as cooperationUser ,ui.increment_end_time as spaceEndStr,ui.is_expired
+            FROM t_camera_detail d
+                LEFT JOIN t_camera c on d.camera_id = c.id
+                left join t_user_increment ui on d.camera_id = ui.camera_id
+                left join t_user u on d.cooperation_user = u.id
+        WHERE d.rec_status = 'A'  and d.user_id = #{userId}
+
+    </select>
 </mapper>