离线数据上传第一版代码提交
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user