离线数据上传第一版代码提交

This commit is contained in:
guofeihu
2024-07-23 17:31:33 +08:00
parent a630792641
commit e27667c364
71 changed files with 7958 additions and 36 deletions

View File

@@ -12,6 +12,7 @@ import com.njcn.csdevice.pojo.param.WlRecordTemplete;
import com.njcn.csdevice.pojo.po.PortableOfflLog;
import com.njcn.csdevice.service.IPortableOfflLogService;
import com.njcn.csdevice.utils.ExcelStyleUtil;
import com.njcn.csdevice.param.UploadDataParam;
import com.njcn.poi.excel.ExcelUtil;
import com.njcn.poi.util.PoiUtil;
import com.njcn.system.api.DicDataFeignClient;
@@ -20,15 +21,20 @@ import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.*;
import com.njcn.web.controller.BaseController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -75,12 +81,23 @@ public class PortableOfflLogController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@ResponseBody
@ApiOperation("批量导入便携式设备信息")
@PostMapping(value = "importEquipment")
public HttpResult<String> importEquipment(@ApiParam(value = "文件", required = true) @RequestPart("file") MultipartFile file, HttpServletResponse response) {
public HttpResult<String> importEquipment(@RequestParam("devId") String devId
, @RequestParam("lineId") String lineId, @RequestParam("paths") String paths,HttpServletRequest request) {
String methodDescribe = getMethodDescribe("importEquipment");
iPortableOfflLogService.importEquipment(file, response);
UploadDataParam uploadDataParam = new UploadDataParam();
uploadDataParam.setDevId(devId);
uploadDataParam.setLineId(lineId);
uploadDataParam.setPaths(Arrays.asList(paths.split(",")));
MultipartHttpServletRequest Murequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> files = Murequest.getFileMap() ;
List<MultipartFile> fileList = new ArrayList<>();
for(MultipartFile file : files.values()){
fileList.add(file);
}
uploadDataParam.setFiles(fileList);
iPortableOfflLogService.importEquipment(uploadDataParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}

View File

@@ -3,9 +3,8 @@ package com.njcn.csdevice.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.pojo.po.PortableOfflLog;
import com.njcn.csdevice.param.UploadDataParam;
import com.njcn.web.pojo.param.BaseParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
* <p>
@@ -19,5 +18,5 @@ public interface IPortableOfflLogService extends IService<PortableOfflLog> {
Page<PortableOfflLog> queryPage(BaseParam baseParam);
void importEquipment(MultipartFile file, HttpServletResponse response);
void importEquipment(UploadDataParam uploadDataParam);
}

View File

@@ -1,20 +1,31 @@
package com.njcn.csdevice.service.impl;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.gson.Gson;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.constant.DataParam;
import com.njcn.csdevice.mapper.PortableOfflLogMapper;
import com.njcn.csdevice.pojo.param.WlRecordTemplete;
import com.njcn.csdevice.pojo.po.PortableOfflLog;
import com.njcn.csdevice.service.IPortableOfflLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.csdevice.param.UploadDataParam;
import com.njcn.csharmonic.api.OfflineDataUploadFeignClient;
import com.njcn.csharmonic.offline.log.vo.NewTaglogbuffer;
import com.njcn.csharmonic.offline.vo.Response;
import com.njcn.oss.utils.FileStorageUtil;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.pojo.po.DictData;
import com.njcn.web.pojo.param.BaseParam;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.lang.reflect.Field;
import java.util.*;
/**
* <p>
@@ -25,8 +36,15 @@ import java.util.List;
* @since 2024-07-03
*/
@Service
@RequiredArgsConstructor
public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMapper, PortableOfflLog> implements IPortableOfflLogService {
private final FileStorageUtil fileStorageUtil;
private final DicDataFeignClient dicDataFeignClient;
private final OfflineDataUploadFeignClient offlineDataUploadFeignClient;
@Override
public Page<PortableOfflLog> queryPage(BaseParam baseParam) {
Page<PortableOfflLog> returnpage = new Page<> (baseParam.getPageNum(), baseParam.getPageSize ());
@@ -37,28 +55,77 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
}
@Override
public void importEquipment(MultipartFile file, HttpServletResponse response) {
ImportParams params = new ImportParams ( );
params.setHeadRows(1);
params.setTitleRows(1);
//第一个sheet为台账信息
params.setStartSheetIndex(0);
params.setSheetNum(1);
try {
ExcelImportResult<WlRecordTemplete> terminalBaseList = ExcelImportUtil.importExcelMore (file.getInputStream ( ), WlRecordTemplete.class, params);
List<WlRecordTemplete> list = terminalBaseList.getList();
//开始解析.......
} catch (Exception e) {
e.printStackTrace();
public void importEquipment(UploadDataParam uploadDataParam) {
//获取离线上传对应的字典规则
List<DictData> dictDatas = dicDataFeignClient.getDicDataByTypeCode(DataParam.wlRecordUpload).getData();
List<Response> responses = new ArrayList<>();
List<MultipartFile> files = uploadDataParam.getFiles();
List<String> paths = uploadDataParam.getPaths();
for(DictData dictData : dictDatas){
List<MultipartFile> fileList = new ArrayList<>();
for (int i = 0; i < files.size(); i++) {
if(paths.get(i).indexOf(dictData.getName())!=-1){
fileList.add(files.get(i));
}
}
if(!fileList.isEmpty()){
byte[] resp = offlineDataUploadFeignClient.uploadAnalysis(fileList,dictData.getCode()).getData();
ByteArrayInputStream bis = new ByteArrayInputStream(resp);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(bis);
Object obj = ois.readObject();
List<Response> response = (List<Response>) obj;
responses.addAll(response);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException("数据集对象转字节数组失败");
} finally {
try {
ois.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//记录导入信息
PortableOfflLog portableOfflLog = new PortableOfflLog();
portableOfflLog.setName(file.getOriginalFilename());
portableOfflLog.setDataPath("D//file//"+file.getOriginalFilename());
portableOfflLog.setLogsIndex(IdUtil.simpleUUID());
portableOfflLog.setAllCount(100);
portableOfflLog.setRealCount(70);
portableOfflLog.setState(1);
this.baseMapper.insert(portableOfflLog);
//开始上传文件、记录上传日志、解析的文件结果入库
//最外层便利所有文件确保所有文件都上传及记录上传日志
for(MultipartFile file : uploadDataParam.getFiles()){
//初始上传日志基本信息
PortableOfflLog portableOfflLog = new PortableOfflLog();
portableOfflLog.setName(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("/")+1));
portableOfflLog.setPath(file.getOriginalFilename());
portableOfflLog.setDataPath(fileStorageUtil.uploadMultipart(file, DataParam.wlRecordPath+uploadDataParam.getDevId()+"/"+uploadDataParam.getLineId()+"/"));
portableOfflLog.setLogsIndex(IdUtil.simpleUUID());
portableOfflLog.setState(1);
//默认总条数及入库数为0(防止解析的数据重复插入及上传的文件目录路径错误)
portableOfflLog.setAllCount(0);
portableOfflLog.setRealCount(0);
//开始匹配解析的文件结果入库
for(Response response : responses){
//当前文件匹配到解析结果
if(file.getOriginalFilename().indexOf(response.getFilename())!=-1){
//设置当前文件总条数
//portableOfflLog.setAllCount(allCount);
//判断当前解析的数据属于哪种结果(目前来说三种:comtrade、log、min)
}
}
this.baseMapper.insert(portableOfflLog);
}
}
private static <T> T convertToObj(LinkedHashMap<String,Object> map,Class<T> clazz) throws Exception{
T obj = clazz.newInstance();
for(Map.Entry<String,Object> entry : map.entrySet()){
String fieldName = entry.getKey();
Object fieldValue = entry.getValue();
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(obj,fieldValue);
}
return obj;
}
}