package com.hssx.cloudmodel.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hssx.cloudmodel.constant.Constant;
import com.hssx.cloudmodel.entity.*;
import com.hssx.cloudmodel.entity.vo.MouldFileVO;
import com.hssx.cloudmodel.entity.vo.UserVO;
import com.hssx.cloudmodel.mapper.*;
import com.hssx.cloudmodel.service.MouldFileService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hssx.cloudmodel.util.FileUtil;
import com.hssx.cloudmodel.util.HttpRespMsg;
import com.hssx.cloudmodel.util.PageUtil;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;
import java.util.zip.ZipOutputStream;
/**
*
* 服务实现类
*
*
* @author 吴涛涛
* @since 2019-08-07
*/
@Service
public class MouldFileServiceImpl extends ServiceImpl implements MouldFileService {
@Resource
UserMapper userMapper;
@Resource
MouldFileMapper mouldFileMapper;
@Resource
MouldOperationDynamicsMapper mouldOperationDynamicsMapper;
@Resource
ProjectMapper projectMapper;
@Override
public HttpRespMsg addFile(UserVO userVO, Integer blongType, MultipartFile file, MultipartFile file2, String path) {
HttpRespMsg msg = new HttpRespMsg();
User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", userVO.getToken()));
if (user != null) {
if (file != null && !file.isEmpty()) {
MouldFile projectFile = new MouldFile();
projectFile.setUplodtorId(user.getId());
projectFile.setUploadtor(user.getUsername());
projectFile.setModelId(userVO.getMouldId());
File dir = null;
dir = new File(path);
// D://cloud/upload 文件上传后所存储的位置,部署到服务器上时配置服务器地址即可
if (!dir.exists()) {
dir.mkdirs();
}
String fileName = "";
if (file != null && !file.isEmpty()) {
fileName = file.getOriginalFilename();
projectFile.setFileName(fileName);
projectFile.setFileSize(FileUtil.getReadableFileSize(file.getSize()));
System.out.println("上传文件名称" + file.getName() + ", dir = " + dir.getAbsolutePath());
int pos = fileName.lastIndexOf(".");
String rand = UUID.randomUUID().toString().replaceAll("-", "");
String sufix = fileName.substring(pos);
fileName = rand + sufix;
projectFile.setFileType(sufix);//文件后缀
projectFile.setFileUrl("/upload/" + fileName);
projectFile.setBlongType(blongType);
if (user.getSubordinateType() == 0) {
//上传人为资产方,自动审核通过
projectFile.setState(1);
} else if (user.getSubordinateType() == 1) {
//上传人为生产方,自动审核通过
projectFile.setState(2);
} else {
projectFile.setState(0);
}
File saveFile = new File(dir, fileName);
try {
saveFile.createNewFile();
file.transferTo(saveFile);
} catch (IOException e) {
e.printStackTrace();
projectFile = null;
} catch (Exception e) {
e.printStackTrace();
projectFile = null;
}
//模具报废情况下,设置files2
if (blongType == 5 && file2 != null && !file2.isEmpty()) {
String fileName2 = file2.getOriginalFilename();
projectFile.setFileName2(fileName2);
projectFile.setFileSize2(FileUtil.getReadableFileSize(file2.getSize()));
System.out.println("上传文件2名称" + file2.getName() + ", dir = " + dir.getAbsolutePath());
pos = fileName2.lastIndexOf(".");
rand = UUID.randomUUID().toString().replaceAll("-", "");
sufix = fileName2.substring(pos);
fileName2 = rand + sufix;
projectFile.setFileType2(sufix);//文件后缀
projectFile.setFileUrl2("/upload/" + fileName2);
File saveFile2 = new File(dir, fileName2);
try {
saveFile2.createNewFile();
file2.transferTo(saveFile2);
} catch (IOException e) {
e.printStackTrace();
projectFile = null;
} catch (Exception e) {
e.printStackTrace();
projectFile = null;
}
}
//上传零件文档和上传模具文档的时候需要区分是否为2D或者3D
if (userVO.getDwgType() != null) {
projectFile.setDwgType(userVO.getDwgType());
}
mouldFileMapper.insert(projectFile);
//添加上传记录
MouldOperationDynamics dynamics = new MouldOperationDynamics();
dynamics.setContent(Constant.UPLOAD);
dynamics.setFileName(file.getOriginalFilename());
dynamics.setOperatorId(user.getId());
dynamics.setFileId(projectFile.getId());
dynamics.setOperatorName(user.getUsername());
dynamics.setMouldId(userVO.getMouldId());
dynamics.setBelongType(blongType);
mouldOperationDynamicsMapper.insert(dynamics);
}
msg.data = projectFile;
}
} else {
msg.setError("当前用户不存在或者未登录");
}
return msg;
}
@Override
public HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO) {
HttpRespMsg msg = new HttpRespMsg();
User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", userVO.getToken()));
MouldFile mf = new MouldFile();
mf.setId(mouldFileId);
MouldFile oldData = mouldFileMapper.selectById(mouldFileId);
if (user != null) {
if (user.getSubordinateType() == 0) {
//资产方
if (isPass == 1) {
if (oldData.getState() == 2) {//生产方也审核通过了
mf.setState(3);
} else {
mf.setState(1);
}
} else {
mf.setState(-1);
}
mouldFileMapper.updateById(mf);
} else if (user.getSubordinateType() == 1) {
//生产方
if (isPass == 1) {
if (oldData.getState() == 1) {//资产方也审核通过了
mf.setState(3);
} else {
mf.setState(2);
}
} else {
mf.setState(-2);
}
mouldFileMapper.updateById(mf);
} else {
msg.setError("只有生产方和资产方才能审核, subordinteType = " + user.getSubordinateType() + ", 无效!");
}
}
return msg;
}
@Override
public HttpRespMsg dowloadFile(MouldFile projectFile, String token) {
HttpRespMsg msg = new HttpRespMsg();
User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", token));
//添加上传记录
MouldFile file = mouldFileMapper.selectById(projectFile.getId());
MouldOperationDynamics dynamics = new MouldOperationDynamics();
dynamics.setContent(Constant.DOWNLOAD);
dynamics.setFileName(file.getFileName());
dynamics.setOperatorId(user.getId());
dynamics.setOperatorName(user.getUsername());
dynamics.setMouldId(file.getModelId());
dynamics.setFileId(file.getId());
dynamics.setBelongType(file.getBlongType());
mouldOperationDynamicsMapper.insert(dynamics);
return msg;
}
@Override
public HttpRespMsg getAllFileList(int mouldId, UserVO userVO) {
List dataList = new ArrayList();
int maxBlongType = 5;
for (int i = 0; i <= maxBlongType; i++) {
HashMap data = new HashMap<>();
data.put("blongType", i);
List list = mouldFileMapper.selectList(new QueryWrapper().eq("model_id", mouldId).eq("blong_type", i).orderByDesc("id"));
data.put("list", list);
dataList.add(data);
}
HttpRespMsg msg = new HttpRespMsg();
msg.data = dataList;
return msg;
}
@Override
public HttpRespMsg getFileList(int mouldId, Integer blongType, UserVO userVO) {
HttpRespMsg msg = new HttpRespMsg();
User user = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", userVO.getToken()));
List list = mouldFileMapper.selectList(new QueryWrapper().eq("model_id", mouldId).eq("blong_type", blongType).orderByDesc("id"));
msg.data = list;
return msg;
}
@Override
public HttpRespMsg delFile(MouldFile mouldFile) {
HttpRespMsg msg = new HttpRespMsg();
msg.data = mouldFileMapper.deleteById(mouldFile.getId());
return msg;
}
@Override
public HttpRespMsg getListByUserAndProjectId(UserVO userVO, PageUtil page) {
HttpRespMsg msg = new HttpRespMsg();
User currentUser = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", userVO.getToken()));
if (currentUser != null) {
PageHelper.startPage(page.getPageNum(), page.getPageSize());
List list = mouldFileMapper.getFileListByProjectId(userVO);
PageInfo pageInfos = new PageInfo<>(list);
msg.data = pageInfos;
} else {
msg.setError("用户不存在或者未登录");
}
return msg;
}
@Override
public HttpRespMsg dowloadFileList(UserVO userVO) {
byte[] buffer = new byte[1024];
Date date=new Date();
////生成zip文件存放位置
// String strZipPath = Constant.exportAddress +loginname+date.getTime()+".zip";
// File file=new File(Constant.exportAddress);
// if(!file.isDirectory() && !file.exists()){
////创建单层目录
//// f.mkdir();
//// 创建多层目录
// file.mkdirs();
// }
// try {
// ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipPath));
//// 需要同时下载的多个文件
// for (int i = 0; i < filepath.length; i++) {
// File f=new File(filepath[i]);
// FileInputStream fis = new FileInputStream(f);
// System.out.println(documentname[i]);
// out.putNextEntry(new ZipEntry(documentname[i]));
////设置压缩文件内的字符编码,不然会变成乱码
// out.setEncoding("GBK");
// int len;
//// 读入需要下载的文件的内容,打包到zip文件
// while ((len = fis.read(buffer)) > 0) {
// out.write(buffer, 0, len);
// }
// out.closeEntry();
// fis.close();
// }
// out.close();
// PublicMethod.downLoadFile(request, response, strZipPath, filename+".zip");
// File temp=new File(strZipPath);
// if(temp.exists()){
// temp.delete();
// }
// } catch (Exception e) {
// System.out.println("文件下载错误");
// }
return null;
}
}