Commit e89670b1 by landerliang@163.com

完成文件上传功能

parent 3097b14e
......@@ -16,4 +16,37 @@ public class MyConstants {
*/
public static final String USER_TOKEN_CONTEXT_KEY = "user-token";
//////// 约定的上传检测报告的其他文件以 车牌号 + 文件名称的后缀 .jpg 来扫描
/**
* 车牌号文件后缀
*/
public static final String CARNUM_SUFFIX = "_1.jpg";
/**
* 身份证文件名后缀
*/
public static final String IDCARD_SUFFIX = "_2.jpg";
/**
* 申请表文件后缀
*/
public static final String APPLY_SUFFIX = "_3.jpg";
/**
* 维修凭证文件后缀
*/
/*public static final String CERTIFICATE_SUFFIX = "_4.jpg";*/
/**
* 行驶证1文件后缀
*/
public static final String DRIVER_SUFFIX1 = "_4.jpg";
/**
* 行驶证2文件后缀
*/
public static final String DRIVER_SUFFIX2 = "_5.jpg";
}
......@@ -17,6 +17,15 @@ public class ReportDetailsReqVo {
@ApiModelProperty("检测报告编码")
private String reportNum;
@ApiModelProperty("业务流水key")
private String businessKey;
@ApiModelProperty("唯一字符串")
private String uniqueString;
private String vehicleId;
@ApiModelProperty("开始时间")
private Date startTime;
......
package me.zhengjie.modules.system.domain.vo.report;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
......@@ -29,6 +30,14 @@ public class ReportPdfVo {
@ApiModelProperty("关联的检测报告编号")
private String reportNum;
@ApiModelProperty("业务流水key")
private String businessKey;
@ApiModelProperty("唯一字符串")
private String uniqueString;
private String vehicleId;
@ApiModelProperty("车牌号")
private String carNum;
......
......@@ -110,6 +110,13 @@ public class ReportController {
return ResultVo.success(reportService.findCurrentDeptSignature());
}
@ApiOperation("上传当前检测报告")
@GetMapping("/uploadCurrent/{reportPdfId}")
public ResultVo uploadCurrentReport(@PathVariable Integer reportPdfId){
AssertUtil.isNotNull(reportPdfId,"缺少参数reportPdfId");
reportService.uploadReport(reportPdfId,null);
return ResultVo.success();
}
@ApiOperation("上传报告")
@PostMapping("/upload")
......@@ -134,6 +141,9 @@ public class ReportController {
@ApiOperation("检测报告详情")
public ResultVo<ReportPdfVo> signatureReport(@RequestBody ReportDetailsReqVo detailsReqVo){
AssertUtil.isNotBlank(detailsReqVo.getCarNum(),"缺少参数车牌号");
AssertUtil.isNotBlank(detailsReqVo.getBusinessKey(),"缺少参数businessKey");
AssertUtil.isNotBlank(detailsReqVo.getUniqueString(),"缺少参数uniqueString");
AssertUtil.isNotBlank(detailsReqVo.getVehicleId(),"缺少参数vehicleId");
AssertUtil.isNotBlank(detailsReqVo.getReportNum(),"缺少参数检测报告编号");
AssertUtil.isNotNull(detailsReqVo.getStartTime(),"缺少参数开始检测时间");
AssertUtil.isNotNull(detailsReqVo.getEndTime(),"缺少参数检测结束时间");
......
......@@ -132,7 +132,7 @@ public class ReportService {
List<String> filePath=new ArrayList<>();
try {
int i =0;
/*int i =0;
for (MultipartFile file : files) {
String reportPath = carReportUtil.getReportPath(reportPdfVo.getReportNum() + "_" + i , ".jpg");
if(FileUtil.exist(reportPath)){
......@@ -141,10 +141,12 @@ public class ReportService {
FileUtil.writeBytes(file.getBytes(),reportPath);
filePath.add(reportPath);
i++;
}
carReportUtil.uploadReport(currUserDept.getEpAccount(),currUserDept.getEpPassword(),reportPdfVo,filePath);
}*/
//carReportUtil.uploadReport(currUserDept.getEpAccount(),currUserDept.getEpPassword(),reportPdfVo);
carReportUtil.uploadReportPost(currUserDept.getEpAccount(),currUserDept.getEpPassword(),reportPdfVo);
} catch (Exception e) {
throw new BusinessException(e.getMessage());
throw new BusinessException(e.getLocalizedMessage());
} finally {
//删除刚才保存的文件
filePath.forEach(path -> {
......@@ -248,6 +250,9 @@ public class ReportService {
reportPdfVo.setReportNum(detailsReqVo.getReportNum());
reportPdfVo.setCreateTime(DateUtil.date());
reportPdfVo.setReportName(name);
reportPdfVo.setVehicleId(detailsReqVo.getVehicleId());
reportPdfVo.setUniqueString(detailsReqVo.getUniqueString());
reportPdfVo.setBusinessKey(detailsReqVo.getBusinessKey());
reportPdfMapper.insert(reportPdfVo);
} else {
reportPdfVo.setCarNum(detailsReqVo.getCarNum());
......@@ -255,6 +260,9 @@ public class ReportService {
reportPdfVo.setReportNum(detailsReqVo.getReportNum());
reportPdfVo.setCreateTime(DateUtil.date());
reportPdfVo.setReportName(name);
reportPdfVo.setUniqueString(detailsReqVo.getUniqueString());
reportPdfVo.setVehicleId(detailsReqVo.getVehicleId());
reportPdfVo.setBusinessKey(detailsReqVo.getBusinessKey());
reportPdfMapper.updateById(reportPdfVo);
}
......
......@@ -3,6 +3,8 @@ package me.zhengjie.modules.system.util;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpStatus;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
......@@ -12,6 +14,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import lombok.extern.slf4j.Slf4j;
import me.zhengjie.exception.BusinessException;
import me.zhengjie.modules.system.constants.MyConstants;
import me.zhengjie.modules.system.domain.vo.report.*;
import me.zhengjie.utils.AssertUtil;
import org.jsoup.Jsoup;
......@@ -24,12 +27,10 @@ import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.support.ui.Select;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Encoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.io.File;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
......@@ -46,22 +47,164 @@ public class CarReportUtil {
private String getStationUrl;
@Value("${like.url}")
private String likeUrl;
@Value("${like.uploadFileUrl}")
private String uploadFileUrl;
@Value("${like.host}")
private String host;
@Value("${file.linux.report}")
private String linuxReport;
@Value("${file.windows.report}")
private String winReport;
@Value("${uploadFilePath}")
private String uploadFilePath;
/**
* 上传post
* @param formData
* @param url
* @param cookies
* @return
*/
private static HttpResponse uploadPost(Map<String,Object> formData,String url,Object [] cookies){
//上传检测报告
HttpResponse reportResp = HttpUtil.createPost(url).header("Cookie", cookies[0].toString() + ";" + cookies[1].toString() + ";" + cookies[2].toString())
.contentType(formData.get("contentType").toString()).form("Filename",formData.get("Filename").toString())
.form("umclData",formData.get("umclData").toString())
.form("folder",formData.get("folder").toString())
.form("businessKey", formData.get("businessKey").toString())
.form("FileGroup", formData.get("FileGroup").toString())
.form("BusinessType", formData.get("BusinessType").toString())
.form("fileext", "*.pdf;*.jpg;*.png")
.form("UniqueString", formData.get("UniqueString").toString())
.form("VehicleID", formData.get("VehicleID").toString())
.form("params", formData.get("params").toString())
.form("FileData", (File) formData.get("FileData")).execute();
return reportResp;
}
/**
* 上传文件post
* @param username
* @param password
* @param reportPdfVo
*/
public void uploadReportPost(String username, String password,ReportPdfVo reportPdfVo){
//登录环保系统获取token
WebDriver driver = null;
try {
String errMsgList = "";
//登录环保
driver = loginEp(username, password,BrowserVersion.INTERNET_EXPLORER);
Object[] cookies = driver.manage().getCookies().toArray();
Map<String,Object> formData = new HashMap<>();
//检测报告上传
formData.put("contentType","multipart/form-data; boundary=----------ae0ei4Ef1gL6GI3GI3KM7gL6Ef1gL6");
formData.put("Filename",FileUtil.file(reportPdfVo.getPath()).getName());
formData.put("umclData","{\"UploadFileDataID\":0,\"MAI_ID\":0}");
formData.put("folder","/Addins/Template/");
formData.put("businessKey", reportPdfVo.getBusinessKey());
formData.put("FileGroup", "04");
formData.put("BusinessType", "11");
formData.put("fileext", "*.pdf;*.jpg;*.png");
formData.put("UniqueString", reportPdfVo.getUniqueString());
formData.put("VehicleID", reportPdfVo.getVehicleId());
formData.put("params", "Submit Query");
formData.put("FileData", FileUtil.file(reportPdfVo.getPath()));
HttpResponse reportResp = uploadPost(formData,uploadFileUrl,cookies);
if(reportResp.getStatus() != HttpStatus.HTTP_OK){
errMsgList += "上传检测报告失败!\n";
}
//申请表上传
if(FileUtil.exist(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.APPLY_SUFFIX)){
formData.put("contentType","multipart/form-data; boundary=----------gL6ei4cH2GI3ei4ae0ei4ae0ei4KM7");
formData.put("Filename",FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.APPLY_SUFFIX).getName());
formData.put("FileGroup", "21");
formData.put("FileData", FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.APPLY_SUFFIX));
HttpResponse applyResp = uploadPost(formData,uploadFileUrl,cookies);
if(applyResp.getStatus() != HttpStatus.HTTP_OK){
errMsgList += "上传检测申请表失败!\n";
}
}
//身份证上传
if(FileUtil.exist(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.IDCARD_SUFFIX)){
formData.put("contentType","multipart/form-data; boundary=----------GI3gL6cH2GI3gL6GI3GI3KM7KM7ae0");
formData.put("Filename",FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.IDCARD_SUFFIX).getName());
formData.put("FileGroup", "02");
formData.put("FileData", FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.IDCARD_SUFFIX));
HttpResponse applyResp = uploadPost(formData,uploadFileUrl,cookies);
if(applyResp.getStatus() != HttpStatus.HTTP_OK){
errMsgList += "上传身份证失败!\n";
}
}
//行驶证1文件上传
if(FileUtil.exist(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.DRIVER_SUFFIX1)){
formData.put("contentType","multipart/form-data; boundary=----------ei4Ef1ei4Ef1gL6KM7ei4cH2ei4cH2");
formData.put("Filename",FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.DRIVER_SUFFIX1).getName());
formData.put("FileGroup", "03");
formData.put("FileData", FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.DRIVER_SUFFIX1));
HttpResponse applyResp = uploadPost(formData,uploadFileUrl,cookies);
if(applyResp.getStatus() != HttpStatus.HTTP_OK){
errMsgList += "上传行驶证1文件失败!\n";
}
}
//行驶证2文件上传
if(FileUtil.exist(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.DRIVER_SUFFIX2)){
formData.put("contentType","multipart/form-data; boundary=----------GI3KM7Ij5GI3gL6ae0Ij5ae0KM7cH2");
formData.put("Filename",FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.DRIVER_SUFFIX2).getName());
formData.put("FileGroup", "19");
formData.put("FileData", FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.DRIVER_SUFFIX2));
HttpResponse applyResp = uploadPost(formData,uploadFileUrl,cookies);
if(applyResp.getStatus() != HttpStatus.HTTP_OK){
errMsgList += "上传行驶证2文件失败!\n";
}
}
//维修凭证上传
/*if(FileUtil.exist(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.CERTIFICATE_SUFFIX)){
formData.put("contentType","multipart/form-data; boundary=----------GI3gL6cH2GI3gL6GI3GI3KM7KM7ae0");
formData.put("Filename",FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.CERTIFICATE_SUFFIX).getName());
formData.put("FileGroup", "02");
formData.put("FileData", FileUtil.file(uploadFilePath + reportPdfVo.getCarNum() + MyConstants.CERTIFICATE_SUFFIX));
HttpResponse applyResp = uploadPost(formData,uploadFileUrl,cookies);
if(applyResp.getStatus() != HttpStatus.HTTP_OK){
errMsgList += "上传维修凭证失败!\n";
}
}*/
//如果有错误信息则抛出给客户端
if(StrUtil.isNotBlank(errMsgList)){
throw new BusinessException(errMsgList);
}
} catch (Exception e) {
log.error(e.getLocalizedMessage());
throw new BusinessException(e.getLocalizedMessage());
}
}
/**
* 上传检测报告
* @param username 环保系统登录账号
* @param reportPdfVo 检测报告信息
* @param password 环保系统登录密码
* @param reportPath 要上传的检测报告路径
* @param paths 其他文件的路径
*/
public void uploadReport(String username, String password,ReportPdfVo reportPdfVo, List<String> paths) throws InterruptedException {
public void uploadReport(String username, String password,ReportPdfVo reportPdfVo) throws InterruptedException {
WebDriver driver = null;
......@@ -169,10 +312,13 @@ public class CarReportUtil {
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) frameDriver;
javascriptExecutor.executeScript("document.getElementById('uploadify4').style.display='block';");
//检测测报告第一页
WebElement pic1 = frameDriver.findElement(new By.ById("uploadify4"));
pic1.sendKeys(paths.get(0));
WebElement pic1 = frameDriver.findElement(new By.ById("fileQueue4"));
pic1.sendKeys(reportPdfVo.getPath());
//检测报告第二页
//点击上传检测报告
frameDriver.findElement(new By.ByXPath("//*[@id=\"tb_4\"]/tbody/tr[2]/td[2]/input")).click();
/*//检测报告第二页
WebElement pic2 = frameDriver.findElement(new By.ByXPath("//*[@id=\"tb_85\"]/tbody/tr[1]/td/label"));
pic2.sendKeys(paths.get(1));
......@@ -190,18 +336,18 @@ public class CarReportUtil {
//检测申请表
WebElement pic6 = frameDriver.findElement(new By.ByXPath("//*[@id=\"tb_40\"]/tbody/tr[1]/td/label"));
pic6.sendKeys(paths.get(5));
pic6.sendKeys(paths.get(5));*/
if(paths.size()>6){
/*if(paths.size()>6){
//维修凭证
WebElement pic7 = frameDriver.findElement(new By.ByXPath("//*[@id=\"chb_14\"]/tbody/tr[1]/td/label"));
pic7.sendKeys(paths.get(6));
}
}*/
//点击上传已勾选的文件
frameDriver.findElement(new By.ById("Button3")).click();
/*frameDriver.findElement(new By.ById("Button3")).click();*/
//校验是否上传成功
......@@ -214,19 +360,19 @@ public class CarReportUtil {
WebElement divContent = frameDriver.findElement(new By.ById("divContent"));
//如果全部成功
if(divContent.getText().contains("red")){
if(divContent.getText().contains("green")){
frameDriver.close();
driver.close();
log.info(">> ======== 资料已上传完成 =========== <<");
} else {
List<WebElement> elements = divContent.findElements(new By.ByXPath("//*[@id=\"divContent\"]/span[contains(@style,\"color: red;\")]"));
/*List<WebElement> elements = divContent.findElements(new By.ByXPath("//*[@id=\"divContent\"]/span[contains(@style,\"color: red;\")]"));
String errMsgList = "";
for(WebElement elem: elements){
errMsgList += elem.getText() +"\n";
}
}*/
frameDriver.close();
driver.close();
throw new BusinessException(errMsgList);
throw new BusinessException("检测报告上传失败");
}
......
......@@ -75,6 +75,7 @@ reptiles:
#环保检索配置
like:
host: http://10.48.21.198:8899/
uploadFileUrl: http://10.48.21.198:8899/uploadFile/UploadFileData/SaveUploadVIMFiles
url: http://10.48.21.198:8899/businesscom/common/DataAndPhotoPageQuery
inspectReportUrl: http://10.48.21.198:8899/Addins_NanNing/Template/InspectionReport_GasMethod_NN.aspx
......@@ -82,6 +83,9 @@ like:
kinggrid:
url: http://sign.kinggrid.com/OfficeServer.jsp
#上传检测报告其他文件的存放目录
uploadFilePath: C:\\reptiles\\uploadPicture\\
#签章服务的url
signature:
carSignature:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment