模板导入接口

This commit is contained in:
guo 2024-04-07 18:23:25 +08:00
parent e06785032b
commit b111c5e338
8 changed files with 114 additions and 18 deletions

View File

@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.constant.CommonConstant;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.execption.OpenPromptException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.BindingResult;
@ -45,8 +46,8 @@ public class ExceptionHandlerAdvice {
result.setCode(403);
result.setMessage(appException.getMessage());
result.setSuccess(false);
} else if (ex instanceof PromptException) {
PromptException appException = (PromptException) ex;
} else if (ex instanceof OpenPromptException) {
OpenPromptException appException = (OpenPromptException) ex;
result.setCode(200);
result.setMessage(appException.getMessage());
result.setResult(appException.getResult());

View File

@ -1,24 +1,21 @@
package com.zhgd.exception;
import lombok.Data;
import org.springframework.http.HttpStatus;
package com.zhgd.jeecg.common.execption;
/**
* 提示异常
* 提示code=200异常
*/
public class PromptException extends RuntimeException {
public class OpenPromptException extends RuntimeException {
private static final long serialVersionUID = 1L;
private final String message;
private Object result;
public PromptException(String message) {
public OpenPromptException(String message) {
this.message = message;
}
public PromptException(String message, Object result) {
public OpenPromptException(String message, Object result) {
this.message = message;
this.result = result;
}

View File

@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gexin.fastjson.JSON;
import com.gexin.fastjson.JSONObject;
import com.zhgd.exception.PromptException;
import com.zhgd.jeecg.common.execption.OpenPromptException;
import com.zhgd.xmgl.modules.basicdata.service.INoticeService;
import com.zhgd.xmgl.modules.checking.entity.CheckingPoint;
import com.zhgd.xmgl.modules.checking.entity.CheckingPointInfo;
@ -19,7 +19,6 @@ import com.zhgd.xmgl.modules.checking.entity.qo.ProjectSnQO;
import com.zhgd.xmgl.modules.checking.mapper.CheckingPointInfoMapper;
import com.zhgd.xmgl.modules.checking.mapper.CheckingPointMapper;
import com.zhgd.xmgl.modules.checking.service.CheckingPointService;
import com.zhgd.xmgl.util.DateUtils;
import com.zhgd.xmgl.util.RegionUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -60,12 +59,12 @@ public class CheckingPointServiceImpl extends ServiceImpl<CheckingPointMapper, C
// 判断用户是否存在于检查人员id列表
boolean userFlag = CharSequenceUtil.split(checkingPoint.getInspectUserIds(), ",").contains(String.valueOf(userId));
if (!userFlag) {
throw new PromptException("当前用户不具备巡检权限!", false);
throw new OpenPromptException("当前用户不具备巡检权限!", false);
}
// 范围判定
boolean inCircle = RegionUtil.isInCircle(checkingPoint.getLongitude(), checkingPoint.getLatitude(), longitude, latitude, checkingPoint.getStandArea());
if (!inCircle) {
throw new PromptException("当前用户不在自定义范围区域内!", false);
throw new OpenPromptException("当前用户不在自定义范围区域内!", false);
}
return true;
}

View File

@ -11,11 +11,19 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.poi.util.IOUtils;
import org.simpleframework.xml.core.Validate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
@ -130,4 +138,33 @@ public class SafetyHatDevController {
public Result<CountVehiclePositionDevVo> countSafetyHatDev(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
return Result.success(safetyHatDevService.countSafetyHatDev(paramMap));
}
@ApiOperation(value = "模板导入下载", notes = "模板导入下载")
@GetMapping("/downloadExcelTemplate")
public void downloadSafetyHatDevExcelTemplate(HttpServletResponse response) {
try {
OutputStream out = response.getOutputStream();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel;charset=gb2312");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("安全帽设备导入模板.xlsx", "UTF-8"));
InputStream fis = new ClassPathResource("excel/安全帽设备导入模板.xlsx").getInputStream();
IOUtils.copy(fis, out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@ApiOperation(value = "模板增量导入", notes = "模板增量导入")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "query", required = true, dataType = "String"),
@ApiImplicitParam(name = "file", value = "导入文件", paramType = "query", required = true, dataType = "String"),
})
@PostMapping(value = "/importExcelTemplate")
public Result importExcelTemplate(MultipartFile file, String projectSn) throws Exception {
safetyHatDevService.importExcelTemplate(file, projectSn);
return Result.ok();
}
}

View File

@ -4,7 +4,9 @@ import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
@ -27,4 +29,6 @@ public interface ISafetyHatDevService extends IService<SafetyHatDev> {
void delete(String id);
CountVehiclePositionDevVo countSafetyHatDev(HashMap<String, Object> paramMap);
void importExcelTemplate(MultipartFile excelFile, String projectSn) throws Exception;
}

View File

@ -1,30 +1,41 @@
package com.zhgd.xmgl.modules.safetyhat.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.execption.OpenPromptException;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatAlarm;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatData;
import com.zhgd.xmgl.modules.safetyhat.entity.SafetyHatDev;
import com.zhgd.xmgl.modules.safetyhat.mapper.*;
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatAlarmMapper;
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDataMapper;
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatDevMapper;
import com.zhgd.xmgl.modules.safetyhat.mapper.SafetyHatFenceMapper;
import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDevService;
import com.zhgd.xmgl.modules.vehicleposition.entity.vo.CountVehiclePositionDevVo;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
import com.zhgd.xmgl.util.ExcelUtils;
import com.zhgd.xmgl.util.MessageUtil;
import com.zhgd.xmgl.util.PageUtil;
import com.zhgd.xmgl.util.RefUtil;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @Description: 智能安全帽-设备
@ -43,6 +54,8 @@ public class SafetyHatDevServiceImpl extends ServiceImpl<SafetyHatDevMapper, Saf
private SafetyHatDataMapper safetyHatDataMapper;
@Autowired
private SafetyHatFenceMapper safetyHatFenceMapper;
@Autowired
private WorkerInfoMapper workerInfoMapper;
@Override
public IPage<SafetyHatDev> queryPageList(HashMap<String, Object> paramMap) {
@ -111,5 +124,50 @@ public class SafetyHatDevServiceImpl extends ServiceImpl<SafetyHatDevMapper, Saf
return baseMapper.countSafetyHatDev(paramMap);
}
@Override
@Transactional(noRollbackFor = OpenPromptException.class)
public void importExcelTemplate(MultipartFile excelFile, String projectSn) throws Exception {
if (StrUtil.isBlank(projectSn)) {
throw new OpenAlertException("projectSn不能为空");
}
InputStream is = excelFile.getInputStream();
List<Map<String, String>> list = ExcelUtils.jxlExlToList(is, 0);
if (list == null || list.size() == 0) {
throw new OpenAlertException(MessageUtil.get("excelNotDataErr"));
}
StringBuilder sb = new StringBuilder();
list.forEach(m -> {
String name = m.get("人员名称");
String devSn = m.get("设备序号");
List<WorkerInfo> workerInfos = workerInfoMapper.selectList(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getProjectSn, projectSn)
.eq(WorkerInfo::getInserviceType, 1)
);
Map<String, WorkerInfo> nameMap = workerInfos.stream().collect(Collectors.toMap(WorkerInfo::getWorkerName, Function.identity(), (workerInfo, workerInfo2) -> null));
WorkerInfo workerInfo = nameMap.get(name);
if (workerInfo == null) {
sb.append(devSn + ",");
return;
}
SafetyHatDev oneDev = safetyHatDevMapper.selectOne(new LambdaQueryWrapper<SafetyHatDev>()
.eq(SafetyHatDev::getDevSn, devSn));
if (oneDev != null) {
oneDev.setWorkerInfoId(workerInfo.getId());
oneDev.setProjectSn(projectSn);
baseMapper.updateById(oneDev);
} else {
SafetyHatDev dev = new SafetyHatDev();
dev.setWorkerInfoId(workerInfo.getId());
dev.setDevSn(devSn);
dev.setProjectSn(projectSn);
baseMapper.insert(dev);
}
});
String str = sb.toString();
if (StrUtil.isNotBlank(str)) {
throw new OpenPromptException("某些设备导入失败,该人员不存在或在项目中存在多个同名人员,设备序号:" + str.substring(0, str.length() - 1));
}
}
}