图片下载

master
admin 2 years ago
parent 2cc58f2c01
commit 4e3cd3237f

@ -3,12 +3,12 @@ package com.glxp.api.idc.service;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import com.glxp.api.common.res.BaseResponse;
/*数据中继数据中心(接收)*/
public interface IdcService {
@ -31,5 +31,5 @@ public interface IdcService {
public void asyncIdcTask();
void asyncUdiTask();
void asyncSpsTask();
void downloadFile(String fileName,HttpServletResponse response) ;
}

@ -3,6 +3,8 @@ package com.glxp.api.idc.service.impl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@ -13,6 +15,7 @@ import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.WordUtils;
@ -74,7 +77,7 @@ public class IdcServiceImpl implements IdcService {
"basicCorp//basic_corp/id///updateTime///往来单位","typeThird//thr_bustype_origin/id///updateTime///第三方单据类型",
"basicThirdCorp//thr_corp/id///updateTime///第三方往来单位","//thr_dept/id///updateTime///第三方部门",
"//thr_inv_products/id///updateTime///第三方库存","basicThirdInv//thr_inv_warehouse/id//////第三方仓库",
"basicThirdBusOrder//thr_order/id///updateTime///第三方业务单据", "/basicThirdBusOrder/thr_order_detail/orderIdFk///updateTime///第三方单据详情",
"basicThirdBusOrder//thr_order/id///updateTime///第三方业务单据","/basicThirdBusOrder/thr_order_detail/orderIdFk/id/orderIdFk/updateTime///第三方单据详情",
"basicThirdProducts//thr_products/id///updateTime///第三方产品信息","//sup_cert/id///updateTime/filePath//资质证书信息",
"//sup_cert_set/id///updateTime///供应商资质证书设置","companyCert//sup_company/customerId///updateTime///配送企业",
"manufacturerCert//sup_manufacturer/id///updateTime///生产企业","productCert//sup_product/id///updateTime///产品资质信息",
@ -125,7 +128,6 @@ public class IdcServiceImpl implements IdcService {
logger.info("UDI管理系统同步任务开始--------");
asyncDataTask(true);
}
/*自助平台生成任务,不上传*/
@Override
public void asyncSpsTask() {
@ -139,13 +141,10 @@ public class IdcServiceImpl implements IdcService {
public void asyncFetchUdiTask() {
fetchTask(false);
}
@Async
@Override
public void asyncFetchTask() {
fetchTask(true);
}
@ -212,17 +211,16 @@ public class IdcServiceImpl implements IdcService {
boolean sync = true;
String[] tnames = t.split("/");
String lastUpdateTime = getUpdateTime(tnames[2]);
String lastUpdateTime = getUpdateTime(tnames[3]);
Date nowUpdateTime = new Date();
if(!StringUtils.isEmpty(tnames[0])) {
List<Map<String, String>> keyList = dbDao.listKeyMysql(tnames[2]);
String keyColumn = keyList!=null&&keyList.size()>0 ? keyList.get(0).get("columnName").toString() : "id";
Map<String,Object> map = new HashMap<String,Object>();
String sqlWhere = "";
if(!StringUtils.isEmpty(tnames[6])) {
sqlWhere += " " + tnames[6] + ">=cast('" + lastUpdateTime + "' as datetime)";
sqlWhere+=" "+tnames[6]+"between cast('"+lastUpdateTime+"' as datetime) and cast('"+DateUtil.formatDate(nowUpdateTime, "yyyy-MM-dd HH:mm:ss")+"' as datetime)";
} else {
sqlWhere = "not exists (select fkId from idc_record where type='"+tnames[2]+"' and fkId="+tnames[2]+"."+keyColumn+")";
map.put("isEnd", "1");
@ -257,6 +255,7 @@ public class IdcServiceImpl implements IdcService {
}
private String fetchData(String host,Map<String,Object> params) {
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
@ -277,9 +276,9 @@ public class IdcServiceImpl implements IdcService {
if(isLastLevel()) {
if(json.get("code")!=null) {
success = analyToDB(json.getJSONObject("data"), files);
success = analyToDB(host,json.getJSONObject("data"),files,false);
} else {
success = analyToDB(json, files);
success = analyToDB(host,json,files,false);
}
if(!success)
logger.info("fetchData-->解析失败");
@ -333,7 +332,6 @@ public class IdcServiceImpl implements IdcService {
dbDao.update(sql);
return ResultVOUtils.success();
}
/****/
@Override
public BaseResponse receive(HttpServletRequest request,
@ -343,14 +341,15 @@ public class IdcServiceImpl implements IdcService {
String secretKey = request.getHeader("secretKey");
/*******/
JSONObject json = JSONObject.parseObject(content);
String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : "/";
String backFileSlash = backFilePath.substring(filePath.length() -1).equals("/") ? "" : "/";
String datePath = DateUtil.formatDate(new Date(),"yyyy-MM-dd");
String fileName = filePath + datePath + "/" + json.getString("messageType") + "-" + json.getString("messageId") + ".udi";
String backFileName = backFilePath + datePath + "/" + json.getString("messageType") + "-" + json.getString("messageId") + ".udi";
if (!FileUtils.makeDirectory(filePath + datePath))
IDCUtils.createDirectory(filePath + datePath + "/");
if (!FileUtils.makeDirectory(backFilePath + datePath))
IDCUtils.createDirectory(filePath + datePath + "/");
String fileName =filePath +filePathSlash +datePath+"/"+json.getString("messageType")+"-"+json.getString("messageId")+".udi";
String backFileName = backFilePath +backFileSlash +datePath+"/"+json.getString("messageType")+"-"+json.getString("messageId")+".udi";
if(!FileUtils.makeDirectory( filePath +filePathSlash +datePath))
IDCUtils.createDirectory(filePath +filePathSlash +datePath+"/");
if(!FileUtils.makeDirectory(backFilePath +backFileSlash +datePath))
IDCUtils.createDirectory(filePath +backFileSlash +datePath+"/");
FileUtils.SaveFileAs(content, fileName);
FileUtils.SaveFileAs(content, backFileName);
@ -360,9 +359,10 @@ public class IdcServiceImpl implements IdcService {
int n=0;
try {
for(MultipartFile file:files) {
saveFiles[n] = filePath + datePath + "/" + json.getString("messageId") + "/" + file.getOriginalFilename();
writeFile(file.getBytes(), filePath + datePath + "/" + json.getString("messageId") + "/", file.getOriginalFilename());
writeFile(file.getBytes(), backFilePath + datePath + "/" + json.getString("messageId") + "/", file.getOriginalFilename());
String imageName = filePath +filePathSlash+"register/file/image2/"+file.getOriginalFilename();
saveFiles[n] = imageName;
writeFile(file.getBytes(), filePath +filePathSlash+"register/file/image2/", file.getOriginalFilename());
writeFile(file.getBytes(), backFilePath +backFileSlash+datePath+"register/file/image2/", file.getOriginalFilename());
n++;
}
} catch (IOException e) {
@ -377,7 +377,7 @@ public class IdcServiceImpl implements IdcService {
syncAddTaskStatus(json,true,true);
/*解析入库*/
if(isLastLevel()) {
if (!analyToDB(json, files))
if(!analyToDB("",json,files,true))
return ResultVOUtils.error(9000, "解析失败");
} else {
//需要转发
@ -405,13 +405,27 @@ public class IdcServiceImpl implements IdcService {
}
@Override
public BaseResponse send(String messageType,String tableName,Map<String,Object> params) {
return ResultVOUtils.error(9999, "");
}
@Override
public void downloadFile(String fileName,HttpServletResponse response) {
OutputStream os;
String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : fileName.substring(0,1).equals("/") ? "" : "/";
try {
byte[] bytes = FileUtils.readFileByBytes(filePath+filePathSlash+fileName);
os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void saveUploadStatus(Map<String,Object> params) {
Map<String,Object> map = new HashMap<String,Object>();
@ -435,7 +449,6 @@ public class IdcServiceImpl implements IdcService {
dbDao.save(sql);
}
private void saveDownloadStatus(String messageType,String taskId,String remark) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("id", CustomUtil.getId());
@ -449,7 +462,6 @@ public class IdcServiceImpl implements IdcService {
dbDao.save(sql);
}
private void saveIdcLog(String messageType,String taskId,String content,int offset,int total) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("id", CustomUtil.getId());
@ -503,7 +515,7 @@ public class IdcServiceImpl implements IdcService {
orderNum++;
String messageType = params.get("messageType").toString();
saveIdcLog(messageType,"",tableName +">"+where,0,total);
String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : "/";
if(total>0) {
success = true;
@ -526,7 +538,7 @@ public class IdcServiceImpl implements IdcService {
if(list!=null&&list.size()>0) {
for(int m=0;m<list.size();m++) {
if(!StringUtils.isEmpty(filePathColumn)&&list.get(m).get(filePathColumn)!=null) {
files[m] = list.get(m).get(filePathColumn).toString();
files[m] = filePath+filePathSlash+"register/file/image2/"+list.get(m).get(filePathColumn).toString();
}
recordSql+=!StringUtils.isEmpty(recordSql) ? "," : "";
recordSql+="('"+UUID.randomUUID().toString().replaceAll("-", "")+"','"+tableName+"','"+list.get(m).get(keyColumn)+"','"+isEnd+"',now())";
@ -615,28 +627,30 @@ public class IdcServiceImpl implements IdcService {
}
/*解析到数据库*/
private boolean analyToDB(JSONObject jsonObject, MultipartFile[] files) {
private boolean analyToDB(String host,JSONObject jsonObject,MultipartFile[] files,boolean isUpload) {
if(jsonObject.get("data")!=null) {
logger.error("json>>>>>>>>>");
String tableName = "";
String uniqueColumn = "";
String filePathColumn = "";
Object object = jsonObject.get("data");
List<Map<String,Object>> list = new ArrayList<>();
if(object instanceof List<?>) {
list = jsonObject.getObject("data", List.class);
tableName = jsonObject.getString("tableName");
uniqueColumn = jsonObject.getString("uniqueColumn");
filePathColumn = jsonObject.getString("filePathColumn");
} else {
JSONObject obj = jsonObject.getJSONObject("data");
list = obj.getObject("data", List.class);
tableName = obj.getString("tableName");
uniqueColumn = obj.getString("uniqueColumn");
filePathColumn = obj.getString("filePathColumn");
}
logger.error("table-->" + tableName);
if(!StringUtils.isEmpty(tableName)) {
return analyData(tableName, uniqueColumn, list);
return analyData(host,tableName,uniqueColumn,filePathColumn,list,isUpload);
} else {
logger.error("数据格式错误:无数据标记");
}
@ -646,8 +660,8 @@ public class IdcServiceImpl implements IdcService {
}
/*按表名解析数据到数据库,子表暂未处理*/
private boolean analyData(String tableName, String uniqueColumn, List<Map<String, Object>> list) {
logger.error("ana-->" + tableName + "--list-->" + JSON.toJSONString(list));
private boolean analyData(String host,String tableName,String uniqueColumn,String filePathColumn,List<Map<String,Object>> list,boolean isUpload) {
String tName = DBAUtils.tableRealName(tableName);
String sql="replace "+tName +"(";
String del="delete from "+tName+" where ";
@ -682,10 +696,15 @@ public class IdcServiceImpl implements IdcService {
if(list!=null&&list.size()>0) {
int n = 0;
int d = 0;
String[] files = new String[list.size()];
for(int i=0;i<list.size();i++) {
String operateMode = list.get(i).get("operateMode") !=null ? list.get(i).get("operateMode").toString() : "A";
String updateWhere ="";
String updateSet = "";
if(!StringUtils.isEmpty(filePathColumn)) {
files[i] = list.get(i).get(filePathColumn) !=null ? list.get(i).get(filePathColumn).toString() : "";
}
if("A,D,U".contains(operateMode)) {
for(int z=0;z<keyColumn.length;z++ ) {
if(list.get(i).get(keyColumn[z])!=null&&!StringUtils.isEmpty(list.get(i).get(keyColumn[z]).toString())) {
@ -752,7 +771,7 @@ public class IdcServiceImpl implements IdcService {
for (Object o : (List<?>) obj) {
chList.add((Map<String,Object>)o);
}
analyData(list.get(i).get("tableName" + m).toString(), "", chList);
analyData(host,list.get(i).get("tableName"+m).toString(),"","",chList,isUpload);
} else {
break;
}
@ -764,6 +783,9 @@ public class IdcServiceImpl implements IdcService {
if(!result)
logger.error(tableName+"-->fetchSave Fail");
}
if(!isUpload&&!StringUtils.isEmpty(filePathColumn)) {
batchDownloadFile(host,files);
}
}
return result;
@ -823,6 +845,68 @@ public class IdcServiceImpl implements IdcService {
return result;
}
/*下载文件*/
private boolean batchDownloadFile(String syncIp,String[] files) {
boolean success = true;
for(String fileName:files) {
if(!StringUtils.isEmpty(fileName)) {
if(!signleDownloadFile(syncIp,fileName))
success = false;
}
}
return success;
}
private boolean signleDownloadFile(String syncIp,String fileName) {
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("fileName", fileName)
.build();
Request request = new Request.Builder()
.url(syncIp+"/spssync/common/downloadFile")
.post(requestBody)
.build();
try {
Response result = client.newCall(request).execute();
if (MediaType.parse("application/force-download").equals(result.body().contentType())) {
try (InputStream inputStream = result.body().byteStream()) {
String filePathSlash = filePath.substring(filePath.length() -1).equals("/") ? "" : "/";
FileOutputStream outputStream =new FileOutputStream(filePath +filePathSlash+fileName);
byte b[]=new byte[1024];
int len=0;
while ((len=inputStream.read(b))!=-1){
outputStream.write(b,0,len);
}
outputStream.flush();
} catch (Exception e) {
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
/*获取转发服务地址当前值允许单向只使用参数upper_server_ip*/
private String getNextHost() {
SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey("upper_server_ip");
@ -856,7 +940,6 @@ public class IdcServiceImpl implements IdcService {
List<Map<String,Object>> list = dbDao.list(map);
return list;
}
/*由表名获取数据*/
private Map<String,Object> getData(String messageType,String tableName,Map<String,Object> params,Map<String,Object> whereParams) {
List<Map<String,Object>> list = getList(tableName,whereParams);
@ -875,6 +958,8 @@ public class IdcServiceImpl implements IdcService {
}
private SystemParamConfigEntity getSystemParamConfig(String paramKey,String paramName,String defaultValue,String paramExplain) {
SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey(paramKey);
if(systemParamConfigEntity==null||(systemParamConfigEntity!=null&&StringUtils.isEmpty(systemParamConfigEntity.getParamKey()))) {
@ -888,10 +973,8 @@ public class IdcServiceImpl implements IdcService {
systemParamConfigEntity.setParamType(0);
systemParamConfigService.insert(systemParamConfigEntity);
}
System.out.print(JSON.toJSONString(systemParamConfigEntity) + "\n");
return systemParamConfigEntity;
}
private void writeFile(byte[] file, String filePath, String fileName) throws Exception {
File targetFile = new File(filePath);
if (!targetFile.exists()) {
@ -916,8 +999,7 @@ public class IdcServiceImpl implements IdcService {
for(int i=0;i<columnList.size();i++) {
Map<String,Object> column = new HashMap<String,Object>();
String dataType =columnList.get(i).get("dataType").toLowerCase().contains("char") || columnList.get(i).get("dataType").toLowerCase().contains("text")?
"C" : columnList.get(i).get("dataType").toLowerCase().contains("date") ? "D" : "N";
;
"C" : columnList.get(i).get("dataType").toLowerCase().contains("date") ? "D" : "N" ;;
String attrName = columnList.get(i).get("columnName").toString();
if(map.get(attrName)==null) {
column.put("tableName", tname);
@ -947,13 +1029,16 @@ public class IdcServiceImpl implements IdcService {
if(map!=null&&map.get("id")!=null) {
updateTime = DateUtil.formatDate(IDCUtils.parseDate(map.get("statusTime").toString()),"yyyy-MM-dd HH:mm:ss");
} else {
//国家库数据
if(id.equals("productinfo")) {
}
updateTime = "2000-01-01 00:00:00";
String sql = "insert into idc_status (id,statusTime) values ('"+id+"',cast('"+updateTime+"' as datetime))";
dbDao.save(sql);
}
return updateTime;
}
private String setUpdateTime(String id,String updateTime) {
String sql = "";
Map<String,Object> map = dbDao.get("select * from idc_status where id='"+id+"'");
@ -966,7 +1051,6 @@ public class IdcServiceImpl implements IdcService {
}
return updateTime;
}
private void initTable() {
alterTable("idc_var","create table idc_var (code varchar(60),content varchar(200),PRIMARY KEY (code))");
alterTable("idc_status","create table idc_status (id varchar(36),statusTime datetime,PRIMARY KEY (id))");
@ -980,7 +1064,6 @@ public class IdcServiceImpl implements IdcService {
}
}
private void alterTable(String tableName,String sql) {
Map<String,String> map = dbDao.getMysql(tableName);
if(!(map!=null&&map.get("tableName")!=null)) {

@ -0,0 +1,79 @@
package com.glxp.api.idc.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import cn.hutool.core.io.IoUtil;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class UriUtils {
public String parseUri(String url) {
String uri = url;
int a1 = uri.indexOf("://");
int a2 = 0;
if (a1 > 0) {
a2 = uri.indexOf("/", a1 + 4);
if (a2 > 0) {
uri = uri.substring(a2 + 1);
}
}
return uri;
}
public HttpEntity<String> buildHeader(HttpServletRequest request) {
log.info(request.getMethod());
String bodyContent = "";
Map<String, Object> headerParam = new HashMap<>();
if (request.getMethod().equals(HttpMethod.GET)) {
Map<String, Object> bodyParam = new HashMap<String, Object>();
Enumeration pNames = request.getParameterNames();
while (pNames.hasMoreElements()) {
String name = (String) pNames.nextElement();
String value = request.getParameter(name);
bodyParam.put(name, value);
}
bodyContent = JSON.toJSONString(bodyParam);
} else {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
bodyContent = IoUtil.read(reader);
log.info(bodyContent);
} catch (IOException e) {
e.printStackTrace();
}
}
HttpHeaders headers = new HttpHeaders();
Enumeration<String> enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
String value = request.getHeader(name);
headerParam.put(name, value);
headers.add(name, value);
}
//headers.add("Content-Type", "application/json;charset=UTF-8");
HttpEntity<String> http = new HttpEntity<>(bodyContent, headers);
return http;
}
}
Loading…
Cancel
Save