B00029Service.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.miniframe.bisiness.system;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.math.BigDecimal;
  7. import java.nio.file.Files;
  8. import java.nio.file.Path;
  9. import java.nio.file.Paths;
  10. import java.util.List;
  11. import java.util.Map;
  12. import com.miniframe.constant.MFConstant;
  13. import com.miniframe.core.ExecProcessFlow;
  14. import com.miniframe.core.exception.BusinessException;
  15. import com.miniframe.core.ext.UtilTools;
  16. import com.miniframe.generate.appcode.UserState;
  17. import com.miniframe.generate.business.system.model.B00029BaseModel;
  18. import com.miniframe.model.system.SysFile;
  19. import com.miniframe.model.system.SysFileSQLBuilder;
  20. import com.miniframe.model.system.SysUser;
  21. import com.miniframe.model.system.SysUserSQLBuilder;
  22. import com.miniframe.model.system.dao.SysFileMapper;
  23. import com.miniframe.tools.XIFileUtils;
  24. /**
  25. * 基础系统,“文件分片合并”逻辑处理(重新生成不覆盖)。
  26. */
  27. public class B00029Service extends B00029BaseModel implements ExecProcessFlow {
  28. private static final long serialVersionUID = -7051358269847459502L;
  29. /**
  30. * 基础系统,“文件分片合并”业务核心处理
  31. */
  32. public void transExecute() throws Exception {
  33. String bfid =this.getA_b00029().getBfid();
  34. SysFileMapper sysFileDAO = UtilTools.getBean(SysFileMapper.class);
  35. SysFile bfile = sysFileDAO.selectByPrimaryKey(bfid);
  36. if(bfile==null){
  37. throw new BusinessException("EB4000002");
  38. }
  39. //本地是否存在
  40. SysFileSQLBuilder fsb = new SysFileSQLBuilder();
  41. //先使用loginName查询用户,再用手机号查询
  42. fsb.createCriteria().andParentidEqualTo(bfid);
  43. fsb.setOrderByClause("chunk");
  44. List<SysFile> sonFiles =sysFileDAO.selectByExample(fsb);
  45. if(sonFiles.isEmpty()){
  46. throw new BusinessException("EB4000003");
  47. }
  48. if(bfile.getChunks()!=sonFiles.size()){
  49. throw new BusinessException("EB4000003");
  50. }
  51. merge(bfile, sonFiles);
  52. for (SysFile tmp:sonFiles) {
  53. File file =new File(XIFileUtils.getRootPathStr()+ MFConstant.separator+tmp.getFilepath());
  54. file.delete();
  55. sysFileDAO.deleteByPrimaryKey(tmp.getId());
  56. }
  57. bfile.setNeedop("1");
  58. Path path = Paths.get(XIFileUtils.getRootPathStr() + MFConstant.separator + bfile.getFilepath());
  59. bfile.setFilesize(BigDecimal.valueOf(Files.size(path)));
  60. sysFileDAO.updateByPrimaryKey(bfile);
  61. }
  62. private void merge(SysFile bfile, List<SysFile> sonFiles) throws BusinessException, IOException {
  63. FileOutputStream outputStream = null;
  64. FileInputStream fileInputStream = null; //分片文件
  65. try {
  66. byte[] byt = new byte[10 * 1024 * 1024];
  67. int len;
  68. outputStream = new FileOutputStream(XIFileUtils.getRootPathStr()+ MFConstant.separator+ bfile.getFilepath(), true); // 文件追加写入
  69. for (SysFile tmp : sonFiles) {
  70. fileInputStream = new FileInputStream(XIFileUtils.getRootPathStr()+ MFConstant.separator+tmp.getFilepath());
  71. while ((len = fileInputStream.read(byt)) != -1) {
  72. outputStream.write(byt, 0, len);
  73. }
  74. fileInputStream.close();
  75. }
  76. outputStream.close();
  77. } catch (Exception e) {
  78. e.printStackTrace();
  79. throw new BusinessException("EB8100015");
  80. } finally {
  81. if (outputStream != null) {
  82. outputStream.close();
  83. }
  84. if (fileInputStream != null) {
  85. fileInputStream.close();
  86. }
  87. }
  88. }
  89. /**
  90. * 基础系统,“文件分片合并”业务前处理
  91. */
  92. public void preTransFlow() throws Exception {
  93. this.validater();
  94. }
  95. /**
  96. * 基础系统,“文件分片合并”业务后处理
  97. */
  98. public void afterTransFlow() throws Exception {
  99. }
  100. /**
  101. * 基础系统,“文件分片合并”逻辑入口处理方法
  102. */
  103. @SuppressWarnings("rawtypes")
  104. @Override
  105. public Map execute(Map vars) throws Exception {
  106. this.setTransMap(vars);
  107. preTransFlow();// 执行业务开始的规则检查和校验
  108. transExecute();// 执行核心业务段
  109. afterTransFlow();// 执行核心逻辑完成后的收尾逻辑
  110. return this.getTransMap();
  111. }
  112. }