|
@@ -1,9 +1,10 @@
|
|
|
package com.onemap.api.service.impl;
|
|
|
|
|
|
+import ch.qos.logback.core.util.FileUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.onemap.api.domain.CghjQxcgsbrwIoDto;
|
|
|
-import com.onemap.api.domain.AuthorizeDto;
|
|
|
-import com.onemap.api.domain.TSysOpenUser;
|
|
|
+import com.onemap.api.domain.*;
|
|
|
+import com.onemap.api.mapper.QxcgsbrwMapper;
|
|
|
+import com.onemap.api.mapper.QxcgsbrwfpMapper;
|
|
|
import com.onemap.api.mapper.TSysOpenUserMapper;
|
|
|
import com.onemap.api.service.ResultsService;
|
|
|
import com.onemap.common.core.constant.SecurityConstants;
|
|
@@ -11,12 +12,26 @@ import com.onemap.common.core.domain.R;
|
|
|
import com.onemap.common.core.utils.StringUtils;
|
|
|
import com.onemap.common.core.web.domain.RequestResult;
|
|
|
import com.onemap.common.security.service.TokenService;
|
|
|
+import com.onemap.common.security.utils.SecurityUtils;
|
|
|
import com.onemap.system.api.RemoteUserService;
|
|
|
+import org.apache.commons.io.FileUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
-import java.util.Map;
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.lang.reflect.Array;
|
|
|
+import java.nio.file.Files;
|
|
|
+import java.nio.file.Paths;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+import static com.onemap.api.util.Md5Utils.getMD5;
|
|
|
+import static com.onemap.api.util.utils.*;
|
|
|
|
|
|
|
|
|
@Service
|
|
@@ -25,23 +40,210 @@ public class ResultsServiceImpl implements ResultsService {
|
|
|
@Autowired
|
|
|
private TSysOpenUserMapper tSysOpenUserMapper;
|
|
|
@Autowired
|
|
|
- private RemoteUserService remoteUserService;
|
|
|
+ private QxcgsbrwMapper qxcgsbrwMapper;
|
|
|
@Autowired
|
|
|
- private TokenService tokenService;
|
|
|
+ private QxcgsbrwfpMapper qxcgsbrwfpMapper;
|
|
|
+ private Rwzt rwzt = new Rwzt();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ @Value("${Cggl.temp}")
|
|
|
+ private String tempfolder;
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public RequestResult md5(CghjQxcgsbrwIoDto cghjQxcgsbrwIoDto, HttpServletRequest request) {
|
|
|
- String appid = cghjQxcgsbrwIoDto.getAppid();
|
|
|
-
|
|
|
+ public RequestResult md5(Map<String, Object> allParams) {
|
|
|
+ try {
|
|
|
+ //TODO wanger 获取参数
|
|
|
+ if (allParams.get("md5") == null) {
|
|
|
+ return RequestResult.error("文件MD5参数不能为空");
|
|
|
+ } else if (allParams.get("size") == null) {
|
|
|
+ return RequestResult.error("文件分片总数量参数不能为空");
|
|
|
+ }
|
|
|
+ Boolean isnew = false;
|
|
|
+ if (allParams.get("new") != null) {
|
|
|
+ isnew = Boolean.valueOf(String.valueOf(allParams.get("new")));
|
|
|
+ }
|
|
|
+ Integer size = Integer.valueOf(String.valueOf(allParams.get("size")));
|
|
|
+ String md5 = String.valueOf(allParams.get("md5"));
|
|
|
+ TSysOpenUser user = getOpenUser();
|
|
|
+ if (user == null) {
|
|
|
+ return RequestResult.error("非法用户!");
|
|
|
+ }
|
|
|
+ Integer ghlx = 1;
|
|
|
+ if (allParams.get("ghlx") != null) {
|
|
|
+ String lx = String.valueOf(allParams.get("ghlx"));
|
|
|
+ ghlx = getPlanTypeForSj(lx);
|
|
|
+ if (ghlx == 0) {
|
|
|
+ return RequestResult.error("规划类型参数错误!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String folder = String.format("%s旗县成果上报\\%s\\%s\\%s\\", tempfolder, user.getXzqdm(), ghlx, md5);
|
|
|
+ loginfo(folder);
|
|
|
+ File curFile = new File(folder);
|
|
|
+ if (isnew) {
|
|
|
+ qxcgsbrwMapper.deleteByMd5(md5);
|
|
|
+ qxcgsbrwfpMapper.deleteByMd5(md5);
|
|
|
+ FileUtils.deleteDirectory(curFile);
|
|
|
+ }
|
|
|
+ makedir(folder);
|
|
|
+ //判断成果包是否存在
|
|
|
+ QueryWrapper<Qxcgsbrw> sbrwwrapper = new QueryWrapper<>();
|
|
|
+ sbrwwrapper.eq("bsm", md5);
|
|
|
+ Qxcgsbrw qxsbcg = qxcgsbrwMapper.selectOne(sbrwwrapper);
|
|
|
+ List<Integer> chunks = new ArrayList<>();
|
|
|
+ Date time = new Date();
|
|
|
+ if (qxsbcg == null) {//新的数据包
|
|
|
+ loginfo("新创建的任务");
|
|
|
+ Qxcgsbrw newRw = new Qxcgsbrw();
|
|
|
+ newRw.setBsm(md5);
|
|
|
+ newRw.setGhlx(String.valueOf(ghlx));
|
|
|
+ newRw.setTotal(size);
|
|
|
+ newRw.setXzqdm(user.getXzqdm());
|
|
|
+ newRw.setXzqmc(user.getXzqmc());
|
|
|
+ newRw.setRwzt(rwzt.getCj());
|
|
|
+ newRw.setTime(new Date());
|
|
|
+ qxcgsbrwMapper.insert(newRw);
|
|
|
+ } else {//已存在的数据包
|
|
|
+ loginfo("已创建过的任务");
|
|
|
+ time = qxsbcg.getTime();
|
|
|
+ chunks = qxcgsbrwfpMapper.selectChunksByMd5(md5);
|
|
|
+ }
|
|
|
+ Map<String, Object> res = new HashMap<>();
|
|
|
+ res.put("size", size);
|
|
|
+ res.put("chunks", chunks);
|
|
|
+ res.put("time", sdf.format(time));
|
|
|
+ loginfo("md5接口请求成功!");
|
|
|
+ return RequestResult.success("操作成功", res);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ loginfo("md5接口请求失败!");
|
|
|
+ }
|
|
|
+ return RequestResult.error("操作失败");
|
|
|
+ }
|
|
|
|
|
|
- if (cghjQxcgsbrwIoDto.getMd5() == null || cghjQxcgsbrwIoDto.getMd5().isEmpty()){
|
|
|
+ @Override
|
|
|
+ public RequestResult upload(String md5, Integer chunk, MultipartFile file) {
|
|
|
+ if (StringUtils.isEmpty(md5)) {
|
|
|
return RequestResult.error("文件MD5参数不能为空");
|
|
|
+ } else if (chunk == null) {
|
|
|
+ return RequestResult.error("文件分片总数量参数不能为空");
|
|
|
+ } else if (file == null) {
|
|
|
+ return RequestResult.error("文件参数不能为空");
|
|
|
+ } else if (file.getSize() == 0) {
|
|
|
+ return RequestResult.error("文件上传失败(0kb),请重新上传");
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ TSysOpenUser user = getOpenUser();
|
|
|
+ if (user == null) {
|
|
|
+ return RequestResult.error("未获取到登录用户信息");
|
|
|
+ }
|
|
|
+ QueryWrapper<Qxcgsbrw> sbrwwrapper = new QueryWrapper<>();
|
|
|
+ sbrwwrapper.eq("bsm", md5);
|
|
|
+ Qxcgsbrw qxsbcg = qxcgsbrwMapper.selectOne(sbrwwrapper);
|
|
|
+ if (qxsbcg == null) {
|
|
|
+ return RequestResult.error("上传分片文件前,请先调用【检查文件分片信息接口(/api/open/results/md5)】创建任务");
|
|
|
+ } else if (qxsbcg.getRwzt() == rwzt.getWc()) {
|
|
|
+ return RequestResult.error("当前成果已提交完成,不允许再次进行文件上传");
|
|
|
+ }
|
|
|
+ String folder = String.format("%s旗县成果上报\\%s\\%s\\%s\\", tempfolder, user.getXzqdm(), qxsbcg.getGhlx(), md5);
|
|
|
+ makedir(folder);
|
|
|
+ loginfo(folder);
|
|
|
+ String filename = file.getOriginalFilename();
|
|
|
+ try {
|
|
|
+ file.transferTo(Paths.get(folder + "\\" + filename));
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ //TODO wanger 删除成果包分片表
|
|
|
+ QueryWrapper<Qxcgsbrwfp> wrapper = new QueryWrapper();
|
|
|
+ wrapper.eq("md5", md5);
|
|
|
+ wrapper.eq("chunk", chunk);
|
|
|
+ qxcgsbrwfpMapper.delete(wrapper);
|
|
|
+ //TODO wanger 添加成果包分片表
|
|
|
+ Qxcgsbrwfp qxcgsbrwfp = new Qxcgsbrwfp();
|
|
|
+ qxcgsbrwfp.setBsm(StringUtils.getUUID());
|
|
|
+ qxcgsbrwfp.setChunk(chunk);
|
|
|
+ qxcgsbrwfp.setMd5(md5);
|
|
|
+ qxcgsbrwfp.setScsj(new Date());
|
|
|
+ qxcgsbrwfp.setPath(folder + "" + filename);
|
|
|
+ qxcgsbrwfpMapper.insert(qxcgsbrwfp);
|
|
|
+ //TODO wanger 添加成果任务表
|
|
|
+ qxsbcg.setTime(new Date());
|
|
|
+ qxsbcg.setRwzt(rwzt.getWhb());
|
|
|
+ qxcgsbrwMapper.update(qxsbcg, sbrwwrapper);
|
|
|
+ return RequestResult.success("操作成功", 1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
+ return RequestResult.error("操作失败", 0);
|
|
|
+ }
|
|
|
|
|
|
- if (cghjQxcgsbrwIoDto.getGhlx() == null || cghjQxcgsbrwIoDto.getGhlx().isEmpty()){
|
|
|
- cghjQxcgsbrwIoDto.setGhlx("总体规划");
|
|
|
+ @Override
|
|
|
+ public RequestResult complete(CompleteParams completeParams) {
|
|
|
+ String md5 = completeParams.getMd5();
|
|
|
+ String filename = completeParams.getFilename();
|
|
|
+ String type = completeParams.getType();
|
|
|
+ String reason = completeParams.getReason();
|
|
|
+ String instid = completeParams.getInstid();
|
|
|
+ if (StringUtils.isEmpty(md5)) {
|
|
|
+ return RequestResult.error("文件MD5参数不能为空");
|
|
|
+ } else if ("1".equals(type) && StringUtils.isEmpty(reason)) {
|
|
|
+ return RequestResult.error("请填写更新原因");
|
|
|
+ } else if (StringUtils.isEmpty(filename)) {
|
|
|
+ return RequestResult.error("文件名称不能为空");
|
|
|
+ }
|
|
|
+ TSysOpenUser user = getOpenUser();
|
|
|
+ if (user == null) {
|
|
|
+ return RequestResult.error("未获取到登录用户信息");
|
|
|
+ }
|
|
|
+ QueryWrapper<Qxcgsbrw> sbrwwrapper = new QueryWrapper<>();
|
|
|
+ sbrwwrapper.eq("bsm", md5);
|
|
|
+ Qxcgsbrw qxsbcg = qxcgsbrwMapper.selectOne(sbrwwrapper);
|
|
|
+ if (qxsbcg == null) {
|
|
|
+ return RequestResult.error("合包前请先调用【检查文件分片信息接口(/api/open/results/md5)】创建任务");
|
|
|
+ } else if (qxsbcg.getRwzt() == rwzt.getWc()) {
|
|
|
+ return RequestResult.error("当前成果已提交完成,不允许再次进行文件上传");
|
|
|
+ }
|
|
|
+ QueryWrapper<Qxcgsbrwfp> fpwrapper = new QueryWrapper<>();
|
|
|
+ fpwrapper.eq("md5", md5);
|
|
|
+ List<Qxcgsbrwfp> fplist = qxcgsbrwfpMapper.selectList(fpwrapper);
|
|
|
+ if (fplist.size() == 0) {
|
|
|
+ return RequestResult.error("合包前请先调用【分片上传成果包接口(/api/open/results/Upload)】上传成果");
|
|
|
+ } else if (fplist.size() != qxsbcg.getTotal()) {
|
|
|
+ return RequestResult.error(String.format("成果分片总数(%s)与上传片文件数量(%s)不符", qxsbcg.getTotal(), fplist.size()));
|
|
|
}
|
|
|
+ String folder = String.format("%s旗县成果上报\\%s\\%s\\%s\\", tempfolder, user.getXzqdm(), qxsbcg.getGhlx(), md5);
|
|
|
+ loginfo("准备合包:" + folder);
|
|
|
+ List<String> filelist = new ArrayList<>();
|
|
|
+ for (Qxcgsbrwfp cur : fplist) {
|
|
|
+ filelist.add(cur.getPath());
|
|
|
+ }
|
|
|
+ String targetfilepath = folder + "" + filename;
|
|
|
+ try {
|
|
|
+ mergeZipFiles(filelist, targetfilepath);
|
|
|
+ loginfo("完成合包:" + folder);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return RequestResult.error("合包失败,没找到合包后的文件,请联系管理员");
|
|
|
+ }
|
|
|
+ File targetfile = new File(targetfilepath);
|
|
|
+ String fileMd5 = getMD5(targetfile);
|
|
|
+ if (!fileMd5.equals(md5)) {
|
|
|
+ return RequestResult.error("警告:文件的MD5不一致");
|
|
|
+ }
|
|
|
+ return RequestResult.success("操作成功", 1);
|
|
|
+ }
|
|
|
|
|
|
- return RequestResult.success("");
|
|
|
+ /**
|
|
|
+ * 通过当前登录用户token获取openuser表信息
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public TSysOpenUser getOpenUser() {
|
|
|
+ String username = SecurityUtils.getUsername();
|
|
|
+ QueryWrapper<TSysOpenUser> openUserWrapper = new QueryWrapper<>();
|
|
|
+ openUserWrapper.eq("name", username);
|
|
|
+ openUserWrapper.last(" and rownum = 1");
|
|
|
+ TSysOpenUser user = tSysOpenUserMapper.selectOne(openUserWrapper);
|
|
|
+ return user;
|
|
|
}
|
|
|
}
|