Bläddra i källkod

Merge remote-tracking branch 'origin/test' into test

dsx 2 år sedan
förälder
incheckning
555c86023c

+ 1 - 1
src/main/java/com/fdkankan/ucenter/common/BaseController.java

@@ -90,7 +90,7 @@ public class BaseController {
         return request.getHeader("token");
     }
     protected String getLang(){
-        return request.getHeader("lang");
+        return StringUtils.isEmpty(request.getHeader("lang")) ? "en":request.getHeader("lang");
     }
     protected String getSign(){
         return request.getHeader("sign");

+ 211 - 5
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;
 
     /**
      * 获取设备到期数量
@@ -94,7 +107,7 @@ public class CameraController extends BaseController {
             throw new BusinessException(LoginConstant.FAILURE_CODE_3025, LoginConstant.FAILURE_MSG_3025);
         }
         cameraService.saveCooperationUser(jsonObject.getString("ids"),
-                jsonObject.getLong("cameraId"),jsonObject.getString("resourceIds"),jsonObject.getString("userName"));
+                jsonObject.getLong("cameraId"),jsonObject.getString("resourceIds"),jsonObject.getString("userName"), getLang());
         return Result.success();
     }
 
@@ -159,4 +172,197 @@ 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());
+
+        List<ScenePro> sceneEntityList = new ArrayList<>();
+        LambdaQueryWrapper<ScenePro> wrapper = new LambdaQueryWrapper<>();
+        if(cameraIdList.size() >0){
+            wrapper.in(ScenePro::getCameraId,cameraIdList);
+            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++;
+            }
+
+        }
+
+        if(sceneEntityList.size() >0){
+            if(StringUtils.isNotBlank(param.getStartTime())){
+                wrapper.ge(ScenePro::getCreateTime,param.getStartTime());
+            }
+            if(StringUtils.isNotBlank(param.getEndTime())){
+                String date = DateUserUtil.getLastZeroTime(param.getEndTime());
+                wrapper.le(ScenePro::getCreateTime,date);
+            }
+            if(StringUtils.isNotBlank(param.getStartTime()) || StringUtils.isNotBlank(param.getEndTime())){
+                sceneEntityList = sceneProService.list(wrapper);
+            }
+        }
+
+        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;
+    }
 }

+ 7 - 0
src/main/java/com/fdkankan/ucenter/httpClient/client/LaserClient.java

@@ -4,6 +4,7 @@ import com.dtflys.forest.annotation.*;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.httpClient.address.LaserAddressSource;
 import com.fdkankan.ucenter.httpClient.param.SSDownSceneParam;
+import com.fdkankan.ucenter.httpClient.param.SsBindParam;
 
 import java.util.List;
 import java.util.Map;
@@ -65,4 +66,10 @@ public interface LaserClient {
      */
     @Post("/laser/4dage/downOfflineSceneStatus")
     Result downOfflineSceneStatus(@JSONBody SSDownSceneParam param) ;
+
+    /**
+     *解绑相机、绑定相机
+     */
+    @Post("/laser/4dage/scene/camera/toBind")
+    Result toBind(@JSONBody SsBindParam param) ;
 }

+ 13 - 0
src/main/java/com/fdkankan/ucenter/httpClient/param/SsBindParam.java

@@ -0,0 +1,13 @@
+package com.fdkankan.ucenter.httpClient.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SsBindParam {
+    private Boolean bind;
+    private String phone;
+    private List<String> snCode;
+    private Long userId;
+}

+ 18 - 0
src/main/java/com/fdkankan/ucenter/httpClient/service/LaserService.java

@@ -15,11 +15,13 @@ import com.fdkankan.ucenter.entity.CameraDetail;
 import com.fdkankan.ucenter.entity.User;
 import com.fdkankan.ucenter.httpClient.client.LaserClient;
 import com.fdkankan.ucenter.httpClient.param.SSDownSceneParam;
+import com.fdkankan.ucenter.httpClient.param.SsBindParam;
 import com.fdkankan.ucenter.httpClient.vo.SSDownSceneVo;
 import com.fdkankan.ucenter.service.ICameraService;
 import com.fdkankan.ucenter.service.IUserService;
 import com.fdkankan.ucenter.vo.SceneBySnCodeVo;
 import com.fdkankan.ucenter.vo.response.SceneNumVo;
+import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -315,4 +317,20 @@ public class LaserService {
         params.put("businessType", 0);
         rabbitMqProducer.sendByWorkQueue(cloudPointBuild, params);
     }
+
+    public void toBind(Boolean bind,String snCode,String userName,Long userId) {
+        try {
+            SsBindParam param = new SsBindParam();
+            param.setBind(bind);
+            param.setSnCode(Lists.newArrayList(snCode));
+            param.setPhone(userName);
+            param.setUserId(userId);
+            Result responseEntity = laserClient.toBind(param);
+            if( responseEntity.getCode() != HttpStatus.OK.value()){
+                log.error("解绑用户激光转台下载失败:{}",responseEntity);
+            }
+        }catch (Exception e){
+            log.error("解绑用户获取激光转台下载状态失败!",e);
+        }
+    }
 }

+ 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);
 }

+ 5 - 1
src/main/java/com/fdkankan/ucenter/service/ICameraDetailService.java

@@ -2,7 +2,9 @@ package com.fdkankan.ucenter.service;
 
 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;
@@ -25,7 +27,7 @@ public interface ICameraDetailService extends IService<CameraDetail> {
 
     void unbindCamera(List<Long> cameraIds);
 
-    void bindCamera(List<Long> cameraIds,Long userId);
+    void bindCamera(List<Long> cameraIds, User user);
 
     HashMap<Long, CameraDetail> getByCameraIds(List<Long> cameraIds);
 
@@ -40,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);
 }

+ 1 - 1
src/main/java/com/fdkankan/ucenter/service/ICameraService.java

@@ -32,7 +32,7 @@ public interface ICameraService extends IService<Camera> {
 
     void bind(Integer cameraType, String snCode, String username);
 
-    void saveCooperationUser(String ids, Long cameraId,String resourceIds, String username);
+    void saveCooperationUser(String ids, Long cameraId,String resourceIds, String username,String lang);
 
     HashMap<Long, Camera> getByIds(List<Long> cameraIds);
 

+ 4 - 0
src/main/java/com/fdkankan/ucenter/service/IMailTemplateService.java

@@ -1,10 +1,12 @@
 package com.fdkankan.ucenter.service;
 
+import com.fdkankan.ucenter.entity.Camera;
 import com.fdkankan.ucenter.entity.MailTemplate;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.entity.ScenePlus;
 import com.fdkankan.ucenter.entity.ScenePro;
 
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -43,4 +45,6 @@ public interface IMailTemplateService extends IService<MailTemplate> {
      * 发送协作邮件
      */
     Boolean sendSceneCooperation(List<ScenePro> proList, List<ScenePlus> plusList, String username,String lang);
+
+    Boolean sendCameraCooperation(HashMap<Long, Camera> cameraMap, String username, String lang);
 }

+ 1 - 1
src/main/java/com/fdkankan/ucenter/service/impl/AppCameraService.java

@@ -82,7 +82,7 @@ public class AppCameraService {
         cameraDetail.setUserId(user.getId());
         cameraIncrementLogService.saveLog(camera.getId(),null,user.getId(),2);
 
-        cameraDetailService.bindCamera(cameraIds,user.getId());
+        cameraDetailService.bindCamera(cameraIds,user);
         sceneProService.bindOrUnCamera(cameraIds,user.getId());
         scenePlusService.bindOrUnCamera(cameraIds,user.getId());
         CameraAppVo responseCamera = new CameraAppVo();

+ 21 - 2
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;
@@ -115,6 +116,9 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
             if(!"local".equals(NacosProperty.uploadType) && cameraDetail.getType()!=10){
                 sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),-2);     //封存场景
             }
+            if(cameraDetail.getType() == 10){
+                fdkkLaserService.toBind(false,cameraMap.get(cameraDetail.getCameraId()).getSnCode(),null,null);
+            }
         }
         //恢复10G基本容量
 
@@ -126,13 +130,23 @@ public class CameraDetailServiceImpl extends ServiceImpl<ICameraDetailMapper, Ca
     }
 
     @Override
-    public void bindCamera(List<Long> cameraIds,Long userId) {
+    public void bindCamera(List<Long> cameraIds,User user) {
         if(cameraIds.size() >0){
             LambdaUpdateWrapper<CameraDetail> wrapper = new LambdaUpdateWrapper<>();
             wrapper.in(CameraDetail::getCameraId,cameraIds)
-                    .set(CameraDetail::getUserId,userId);
+                    .set(CameraDetail::getUserId,user.getId());
             this.update(wrapper);
+
+            HashMap<Long, CameraDetail> detailMap = this.getByCameraIds(cameraIds);
+            HashMap<Long, Camera> cameraMap = cameraService.getByIds(cameraIds);
+            for (CameraDetail cameraDetail : detailMap.values()) {
+                if(cameraDetail.getType() == 10){
+                    fdkkLaserService.toBind(true,cameraMap.get(cameraDetail.getCameraId()).getSnCode(),user.getUserName(),user.getId());
+                }
+            }
         }
+
+
     }
 
     @Override
@@ -190,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);
+    }
 }

+ 34 - 20
src/main/java/com/fdkankan/ucenter/service/impl/CameraServiceImpl.java

@@ -68,6 +68,8 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
     ISceneCooperationService sceneCooperationService;
     @Autowired
     ICameraIncrementLogService cameraIncrementLogService;
+    @Autowired
+    IMailTemplateService mailTemplateService;
 
     @Override
     public Camera getBySnCode(String snCode) {
@@ -79,6 +81,15 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
         }
         return null;
     }
+    public Camera getByWfiName(String snCode) {
+        LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Camera::getWifiName,snCode);
+        List<Camera> list = this.list(wrapper);
+        if(list !=null && list.size() > 0){
+            return list.get(0);
+        }
+        return null;
+    }
 
     @Override
     public List<Camera> getCameraLikeSnCode(String snCode) {
@@ -248,31 +259,31 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
     public void bind(Integer cameraType, String snCodes, String username) {
         User user = userService.getByUserName(username);
         String[] snCodeArr = snCodes.split(",");
-        List<String> snCodeList = Arrays.asList(snCodeArr);
-        LambdaUpdateWrapper<Camera> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.in(Camera::getSnCode,snCodeList);
-        List<Camera> list = this.list(wrapper);
-        if(list.size() <=0){
-            throw new BusinessException(AppConstant.FAILURE_CODE_4010, snCodes +"-"+ AppConstant.FAILURE_MSG_4010);
-        }
-        List<String> dbSnCode = list.stream().map(Camera::getSnCode).collect(Collectors.toList());
-        for (String code : snCodeList) {
-            if(!dbSnCode.contains(code)){
-                throw new BusinessException(AppConstant.FAILURE_CODE_4010, code +"-"+ AppConstant.FAILURE_MSG_4010);
+        List<Long> cameraIds = new ArrayList<>();
+        for (String wifiName : snCodeArr) {
+            Camera camera = null;
+            if(wifiName.contains("_")){
+                camera = this.getByWfiName(wifiName);
+            }else {
+                camera = this.getBySnCode(wifiName);
             }
-        }
-        Map<Long, Camera> cameraHashMap = list.stream().collect(Collectors.toMap(Camera::getId, camera -> camera, (o1, o2) -> o1));
-        List<Long> cameraIds = new ArrayList<>(cameraHashMap.keySet());
-        HashMap<Long, CameraDetail> detailHashMap = cameraDetailService.getByCameraIds(cameraIds);
-        for (CameraDetail detail : detailHashMap.values()) {
-            if(detail.getUserId() != null){
-                throw new BusinessException(CameraConstant.FAILURE_CODE_6010, cameraHashMap.get(detail.getCameraId()).getSnCode() +"-"+ CameraConstant.FAILURE_MSG_6010);
+
+            if(camera == null){
+                throw new BusinessException(AppConstant.FAILURE_CODE_4010, wifiName +"-"+ AppConstant.FAILURE_MSG_4010);
+            }
+            CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
+            if(cameraDetail == null){
+                throw new BusinessException(AppConstant.FAILURE_CODE_4010, wifiName +"-"+ AppConstant.FAILURE_MSG_4010);
             }
+            if( cameraDetail.getUserId() != null){
+                throw new BusinessException(CameraConstant.FAILURE_CODE_6010, wifiName +"-"+ CameraConstant.FAILURE_MSG_6010);
+            }
+            cameraIds.add(camera.getId());
         }
 
         cameraIncrementLogService.saveLog(cameraIds,null,user.getId(),2);
 
-        cameraDetailService.bindCamera(cameraIds,user.getId());
+        cameraDetailService.bindCamera(cameraIds,user);
         sceneService.bindOrUnCamera(cameraIds,user.getId());
         sceneProService.bindOrUnCamera(cameraIds,user.getId());
         scenePlusService.bindOrUnCamera(cameraIds,user.getId());
@@ -283,7 +294,7 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
     }
 
     @Override
-    public void saveCooperationUser(String ids, Long id,String resourceIds, String username) {
+    public void saveCooperationUser(String ids, Long id,String resourceIds, String username,String lang) {
         User user = userService.getByUserName(username);
         if(user == null){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3021, LoginConstant.FAILURE_MSG_3021);
@@ -339,6 +350,9 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
 
         fdkkLaserService.disableCooperation(detailMap, cameraMap);
         fdkkLaserService.enableCameraCooperation(detailMap, cameraMap, username);
+        if("aws".equals(NacosProperty.uploadType)){
+            mailTemplateService.sendCameraCooperation(cameraMap,username,lang);
+        }
     }
 
     @Override

+ 45 - 15
src/main/java/com/fdkankan/ucenter/service/impl/MailTemplateServiceImpl.java

@@ -3,17 +3,18 @@ package com.fdkankan.ucenter.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.ucenter.common.constants.ResultCode;
-import com.fdkankan.ucenter.entity.MailTemplate;
-import com.fdkankan.ucenter.entity.ScenePlus;
-import com.fdkankan.ucenter.entity.ScenePro;
+import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.mapper.IMailTemplateMapper;
 import com.fdkankan.ucenter.service.IMailTemplateService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.ucenter.service.IScenePlusExtService;
 import com.fdkankan.ucenter.util.SendMailUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -28,6 +29,9 @@ import java.util.List;
 @Slf4j
 public class MailTemplateServiceImpl extends ServiceImpl<IMailTemplateMapper, MailTemplate> implements IMailTemplateService {
 
+    @Autowired
+    IScenePlusExtService scenePlusExtService;
+
     @Override
     public Boolean sendMail(String email , MailTemplate mailTemplate, String file) {
         if(mailTemplate == null){
@@ -90,35 +94,61 @@ public class MailTemplateServiceImpl extends ServiceImpl<IMailTemplateMapper, Ma
             if(proList.size()<=0 && plusList.size() <=0){
                 return false;
             }
-            String sceneName = null;
+            StringBuilder webSites = new StringBuilder();
             for (ScenePro scenePro : proList) {
-                sceneName = scenePro.getSceneName();
+                webSites.append(scenePro.getWebSite()).append("<br>");
             }
             for (ScenePlus scenePlus : plusList) {
-                sceneName = scenePlus.getTitle();
+                ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
+                if(scenePlusExt != null){
+                    webSites.append(scenePlusExt.getWebSite()).append("<br>");
+                }
             }
-            if(StringUtils.isBlank(sceneName)){
+            if(StringUtils.isBlank(webSites)){
                 return false;
             }
             MailTemplate mailTemplate = this.getTemplate(6,lang);
             if(mailTemplate != null){
                 String msg = mailTemplate.getMsg();
-                if(StringUtils.isNotBlank(sceneName)){
-                    msg = msg.replace("{sceneName}",sceneName);
+                if(StringUtils.isNotBlank(webSites)){
+                    msg = msg.replace("{sceneWebSites}",webSites.toString());
                 }
+                mailTemplate.setMsg(msg);
+            }
+            return sendMail(username,mailTemplate,null);
+        }catch (Exception e){
+            log.error("邮件发送失败,type:{},error:{}","协作场景邮件",e);
+        }
+        return false;
+    }
 
-                String subject = mailTemplate.getSubject();
-                if(StringUtils.isNotBlank(sceneName)){
-                    subject = subject.replace("{sceneName}",sceneName);
+    @Override
+    public Boolean sendCameraCooperation(HashMap<Long, Camera> cameraMap, String username, String lang) {
+        try {
+            if(cameraMap.size()<=0 ){
+                return false;
+            }
+            StringBuilder snCodes = new StringBuilder();
+            for (Long cameraId : cameraMap.keySet()) {
+                if(cameraMap.get(cameraId) != null){
+                    snCodes.append(cameraMap.get(cameraId).getWifiName()).append("<br>");
+                }
+            }
+            if(StringUtils.isBlank(snCodes)){
+                return false;
+            }
+            MailTemplate mailTemplate = this.getTemplate(8,lang);
+            if(mailTemplate != null){
+                String msg = mailTemplate.getMsg();
+                if(StringUtils.isNotBlank(snCodes)){
+                    msg = msg.replace("{snCodes}",snCodes.toString());
                 }
-
                 mailTemplate.setMsg(msg);
-                mailTemplate.setSubject(subject);
             }
             return sendMail(username,mailTemplate,null);
         }catch (Exception e){
             log.error("邮件发送失败,type:{},error:{}","协作场景邮件",e);
         }
-       return false;
+        return false;
     }
 }

+ 20 - 0
src/main/java/com/fdkankan/ucenter/util/DateUserUtil.java

@@ -2,7 +2,9 @@ package com.fdkankan.ucenter.util;
 
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import com.fdkankan.ucenter.common.MailUtil;
 import com.fdkankan.ucenter.entity.IncrementType;
+import com.fdkankan.ucenter.entity.ScenePro;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.DateTime;
 
@@ -33,6 +35,9 @@ public class DateUserUtil {
     public static String getDate(Date time){
         return new SimpleDateFormat(DEF_FMT).format(time);
     }
+    public static String getDate(Date time,String fmt){
+        return new SimpleDateFormat(fmt).format(time);
+    }
     public static String getZeroDate(){
         return new SimpleDateFormat(DAY_FMT).format(new Date()) +" 00:00:00";
     }
@@ -117,4 +122,19 @@ public class DateUserUtil {
         }
         return date;
     }
+
+    public static String getLastZeroTime(String endTime) {
+        try {
+            Date date = DateUserUtil.getDate(endTime);
+            String date1 = DateUserUtil.getDate(date, DateUserUtil.DAY_FMT);
+            return date1 + " 23:59:59";
+        }catch ( Exception e){
+            e.printStackTrace();
+        }
+        return endTime;
+    }
+
+    public static void main(String[] args) {
+        System.out.println(getLastZeroTime("2023-03-01 00:00:00"));
+    }
 }

+ 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>