| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- package cn.com.goldenwater.dcproj.service.impl.offline;
- import cn.com.goldenwater.core.service.AbstractCrudService;
- import cn.com.goldenwater.dcproj.constValue.BisInspEnum;
- import cn.com.goldenwater.dcproj.dao.BisInspOffLineDao;
- import cn.com.goldenwater.dcproj.dao.BisInspPblmDao;
- import cn.com.goldenwater.dcproj.dao.GwComFileDao;
- import cn.com.goldenwater.dcproj.model.*;
- import cn.com.goldenwater.dcproj.param.BisInspOffLineParam;
- import cn.com.goldenwater.dcproj.param.GwComFileParam;
- import cn.com.goldenwater.dcproj.service.BisInspOffLineService;
- import cn.com.goldenwater.dcproj.service.GwComFileService;
- import cn.com.goldenwater.dcproj.utils.FileUtil;
- import cn.com.goldenwater.id.util.UuidUtil;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.fasterxml.jackson.databind.DeserializationFeature;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import org.apache.commons.io.FileUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- 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 java.io.*;
- import java.nio.charset.Charset;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.List;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
- /**
- * @author lhc
- * @date 2019/11/18 11:28
- */
- @Service
- @Transactional
- public class BisInspOffLineServiceImpl extends AbstractCrudService<BisInspOffLine, BisInspOffLineParam> implements BisInspOffLineService {
- private Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- BisInspOffLineDao bisInspOffLineDao;
- @Value("${off.line}")
- private String offLine;
- @Autowired
- BisInspOffLineFactory bisInspOffLineFactory;
- @Autowired
- GwComFileDao gwComFileDao;
- @Autowired
- BisInspPblmDao bisInspPblmDao;
- @Autowired
- private GwComFileService gwComFileService;//文件操作
- @Value("${getFile.prefix}")
- public String prefix;
- public BisInspOffLineServiceImpl(BisInspOffLineDao bisInspOffLineDao) {
- super(bisInspOffLineDao);
- this.bisInspOffLineDao = bisInspOffLineDao;
- }
- @Override
- public int insert(BisInspOffLine bisInspOffLine) {
- return this.bisInspOffLineDao.insert(bisInspOffLine);
- }
- @Override
- public int update(BisInspOffLine bisInspOffLine) {
- return this.bisInspOffLineDao.update(bisInspOffLine);
- }
- @Override
- public int delete(String id) {
- return this.bisInspOffLineDao.delete(id);
- }
- @Override
- public BisInspOffLine uploadOffLine(MultipartFile file, BisInspOffLine bisInspOffLine) throws IOException, ClassNotFoundException {
- Calendar dat = Calendar.getInstance();
- String dirPath = dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH);
- //上传文件
- String uuid = UuidUtil.uuid();
- bisInspOffLine.setId(uuid);
- bisInspOffLine.setIntm(new Date());
- bisInspOffLine.setUptm(new Date());
- bisInspOffLine.setDataStat("0");
- //插入上传记录
- this.insert(bisInspOffLine);
- String fileDir = offLine + File.separator + dirPath + File.separator + uuid;
- //解压文件
- saveAndUnZip(uuid, fileDir, file.getOriginalFilename(), file);
- //读取文件目录 txt文件
- File dirFiles = new File(fileDir);
- String[] filelist = FileUtil.getFileExt(dirFiles, ".txt");
- for (int i = 0; i < filelist.length; i++) {
- //序列化对象
- ObjectMapper mapper = new ObjectMapper();
- mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- BisInspOffLineObj bisInspOffLineObj = mapper.readValue(new File(fileDir + File.separator + filelist[i]), BisInspOffLineObj.class);
- bisInspOffLineObj.setId(UuidUtil.uuid());
- bisInspOffLineObj.setPersId(bisInspOffLine.getPersId());
- bisInspOffLineObj.setOrgId(bisInspOffLine.getOrgId());
- bisInspOffLineObj.setProvince(bisInspOffLine.getProvince());
- bisInspOffLineObj.setOrgId(bisInspOffLine.getOrgId());
- //调用工厂分发到不同对象处理
- BisInspOffLineRet bisInspOffLineRet = bisInspOffLineFactory.CreateProcess(BisInspEnum.getEnumByType(bisInspOffLine.getPtype())).process(bisInspOffLineObj, fileDir);
- //统一处理问题
- processPblm(bisInspOffLineRet, bisInspOffLineObj, fileDir);
- //统一处理 签名上传及视频
- processSignFile(bisInspOffLineRet, bisInspOffLineObj, fileDir);
- }
- return bisInspOffLine;
- }
- /**
- * 插入签名的图片和视频
- */
- void processSignFile(BisInspOffLineRet bisInspOffLineRet, BisInspOffLineObj bisInspOffLineObj, String fileDir) throws IOException {
- ObjectMapper om = new ObjectMapper();
- om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- if (bisInspOffLineObj.getSign() != null) {
- List<GwComFile> gwComFileList = om.readValue(bisInspOffLineObj.getSign(), new TypeReference<List<GwComFile>>() {
- });
- if (gwComFileList != null) {
- for (GwComFile item : gwComFileList) {
- //插入图片信息 到通用表 修改bizId,并获取bizType
- //文件类型转换
- String imgId = item.getId();
- File file = new File(fileDir + File.separator + item.getId());
- if (file.exists()) {
- MultipartFile multipartFile = FileUtil.fileToMultipartFile(file);
- //保存文件管理Id
- String uuid = UuidUtil.uuid(); // 生成uuid
- item.setId(uuid);
- String bizId = "";
- if (item.getBizType().startsWith("signature")) {
- bizId = bisInspOffLineRet.getRegId() + bisInspOffLineObj.getOrgId();
- } else {
- bizId = bisInspOffLineRet.getRegId();
- }
- item.setBizId(bizId);
- Calendar dat = Calendar.getInstance();
- if (null == item.getCreateDate()) {
- item.setCreateDate(Calendar.getInstance().getTime());
- }
- if (multipartFile != null) {
- String originalFilename = multipartFile.getOriginalFilename();
- item.setFileName(originalFilename);
- item.setFileTitle(StringUtils.isNotBlank(item.getFileTitle()) ? item.getFileTitle() : item.getFileName());
- item.setFileSize((double) multipartFile.getSize());
- item.setFileExt(originalFilename.substring(1 + originalFilename.lastIndexOf(".")));
- String filePath = prefix + dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH) + File.separator + uuid + "." + item.getFileExt();
- item.setFilePath(filePath);
- }
- //写入文件
- String filePath = dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH);
- boolean success = gwComFileService.writeFile(item, multipartFile, filePath);
- if (success) {
- int ret = 0;
- if (item.getBizType().startsWith("signature")) {
- //判断是否有,如果有就更新
- GwComFileParam gwComFileParam = new GwComFileParam();
- gwComFileParam.setBizId(item.getBizId());
- gwComFileParam.setBizType(item.getBizType());
- List<GwComFile> gwComFiles = gwComFileService.findList(gwComFileParam);
- if (gwComFiles != null && gwComFiles.size() > 0) {
- gwComFileService.delete(item.getId());
- ret = gwComFileService.insert(item);
- } else {
- ret = gwComFileService.insert(item);
- }
- } else {
- ret=gwComFileService.insert(item);
- }
- }
- }
- }
- }
- }
- }
- /**
- * 统一处理 插入问题信息
- *
- * @param bisInspOffLineObj
- * @param fileDir
- * @param objId
- * @param om
- * @throws IOException
- * @Param bisInspOffLineRet 返回的登记ID objId
- */
- void processPblm(BisInspOffLineRet bisInspOffLineRet, BisInspOffLineObj bisInspOffLineObj, String fileDir) throws
- IOException {
- ObjectMapper om = new ObjectMapper();
- om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- if (bisInspOffLineObj.getProblem() != null) {
- List<BisInspPblm> bisInspPblmList = om.readValue(bisInspOffLineObj.getProblem(), new TypeReference<List<BisInspPblm>>() {
- });
- if (bisInspPblmList != null) {
- for (BisInspPblm bisInspPblm : bisInspPblmList) {
- String pblmId = UuidUtil.uuid();
- bisInspPblm.setInspGroupId(bisInspOffLineObj.getGroupId());
- bisInspPblm.setRegid(bisInspOffLineRet.getRegId());
- bisInspPblm.setPblmId(pblmId);
- bisInspPblm.setObjId(bisInspOffLineRet.getObjId());
- bisInspPblm.setUptm(new Date());
- bisInspPblm.setCollTime(new Date());
- bisInspPblmDao.insert(bisInspPblm);
- //插入附件信息
- insertFile(bisInspPblm, fileDir, pblmId);
- }
- }
- }
- }
- void insertFile(BisInspPblm bisInspPblm, String fileDir, String pblmId) throws IOException {
- if (bisInspPblm.getGwComFiles() != null) {
- for (GwComFile gwComFile : bisInspPblm.getGwComFiles()) {
- //文件类型转换
- String imgId = gwComFile.getId();
- File file = new File(fileDir + File.separator + gwComFile.getId());
- if (file.exists()) {
- MultipartFile multipartFile = FileUtil.fileToMultipartFile(file);
- //保存文件管理Id
- String uuid = UuidUtil.uuid(); // 生成uuid
- gwComFile.setId(uuid);
- gwComFile.setBizId(pblmId);
- Calendar dat = Calendar.getInstance();
- if (null == gwComFile.getCreateDate()) {
- gwComFile.setCreateDate(Calendar.getInstance().getTime());
- }
- if (multipartFile != null) {
- String originalFilename = multipartFile.getOriginalFilename();
- gwComFile.setFileName(originalFilename);
- gwComFile.setFileTitle(StringUtils.isNotBlank(gwComFile.getFileTitle()) ? gwComFile.getFileTitle() : gwComFile.getFileName());
- gwComFile.setFileSize((double) multipartFile.getSize());
- gwComFile.setFileExt(originalFilename.substring(1 + originalFilename.lastIndexOf(".")));
- String filePath = prefix + dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH) + File.separator + uuid + "." + gwComFile.getFileExt();
- gwComFile.setFilePath(filePath);
- }
- //写入文件
- String filePath = dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH);
- boolean success = gwComFileService.writeFile(gwComFile, multipartFile, filePath);
- if (success) {
- int ret = gwComFileService.insert(gwComFile);
- }
- }
- }
- }
- }
- @Override
- public Object offLineRlation(BisInspOffLine bisInspOffLine) {
- return bisInspOffLineFactory.createBaseInfo(BisInspEnum.getEnumByType(bisInspOffLine.getPtype())).getBaseInfo(bisInspOffLine);
- }
- public void saveAndUnZip(String id, String dirPath, String fileName, MultipartFile file) throws IOException {
- File pathFile = new File(dirPath);
- if (!pathFile.exists()) {
- pathFile.mkdirs();
- }
- //插入zip记录
- GwComFile zipGwComFile = new GwComFile();
- zipGwComFile.setId(UuidUtil.uuid());
- zipGwComFile.setBizId(id);
- zipGwComFile.setCreateDate(Calendar.getInstance().getTime());
- zipGwComFile.setFileTitle(fileName);
- zipGwComFile.setFileName(fileName);
- zipGwComFile.setFileSize((double) file.getSize());
- zipGwComFile.setFileExt(fileName.substring(1 + fileName.lastIndexOf(".")));
- String filePath = zipGwComFile.getId() + "." + zipGwComFile.getFileExt();
- zipGwComFile.setFilePath(filePath);
- gwComFileDao.insert(zipGwComFile);
- //保存zip
- FileUtils.copyInputStreamToFile(file.getInputStream(), new File(dirPath, id + "." + zipGwComFile.getFileExt()));
- //解压zip
- ZipInputStream zpIs = new ZipInputStream(file.getInputStream(), Charset.forName(cn.com.goldenwater.dcproj.utils.impexcel.FileUtil.getFilecharset(file)));
- ZipEntry ze = null;
- while ((ze = zpIs.getNextEntry()) != null) {
- if (ze.isDirectory() || ze.getName().endsWith("/")) {
- //暂时不处理压缩包里有文件夹这种形式
- continue;
- }
- GwComFile gwComFile = cn.com.goldenwater.dcproj.utils.impexcel.FileUtil.getGwComFile(ze.getName(), (double) ze.getSize(), "");
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- byte[] byte_s = new byte[1024];
- int num = -1;
- while ((num = zpIs.read(byte_s, 0, byte_s.length)) > -1) {//通过read方法来读取文件内容
- byteArrayOutputStream.write(byte_s, 0, num);
- }
- File outFile = new File(dirPath, gwComFile.getFileName());
- FileOutputStream fileOutputStream = new FileOutputStream(outFile);
- fileOutputStream.write(byteArrayOutputStream.toByteArray());
- byteArrayOutputStream.close();
- fileOutputStream.close();
- }
- zpIs.close();
- }
- }
|