ModelServiceImpl.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package com.fdkankan.fusion.service.impl;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.math.BigDecimal;
  5. import java.util.Arrays;
  6. import java.util.List;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.fdkankan.fusion.common.PageInfo;
  10. import com.fdkankan.fusion.common.util.JwtUtil;
  11. import com.fdkankan.fusion.common.FilePath;
  12. import com.fdkankan.fusion.common.ResultCode;
  13. import com.fdkankan.fusion.common.util.OBJToGLBUtil;
  14. import com.fdkankan.fusion.common.util.ShellUtil;
  15. import com.fdkankan.fusion.common.util.UploadToOssUtil;
  16. import com.fdkankan.fusion.entity.CaseNumEntity;
  17. import com.fdkankan.fusion.entity.FusionNum;
  18. import com.fdkankan.fusion.entity.Model;
  19. import com.fdkankan.fusion.exception.BusinessException;
  20. import com.fdkankan.fusion.mapper.IModelMapper;
  21. import com.fdkankan.fusion.request.ModelPram;
  22. import com.fdkankan.fusion.request.ScenePram;
  23. import com.fdkankan.fusion.response.SceneVo;
  24. import com.fdkankan.fusion.service.ICaseNumService;
  25. import com.fdkankan.fusion.service.IFusionNumService;
  26. import com.fdkankan.fusion.service.IModelService;
  27. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  28. import jdk.nashorn.tools.Shell;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.springframework.beans.BeanUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.beans.factory.annotation.Value;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.web.multipart.MultipartFile;
  35. /**
  36. * <p>
  37. * 服务实现类
  38. * </p>
  39. *
  40. * @author
  41. * @since 2022-08-03
  42. */
  43. @Service
  44. public class ModelServiceImpl extends ServiceImpl<IModelMapper, Model> implements IModelService {
  45. @Autowired
  46. UploadToOssUtil uploadToOssUtil;
  47. @Autowired
  48. UploadService uploadService;
  49. @Autowired
  50. ICaseNumService caseNumService;
  51. @Autowired
  52. IFusionNumService fusionNumService;
  53. @Value("${local.obj_path}")
  54. private String OBJ_PATH;
  55. @Value("${local.glb_path}")
  56. private String GLB_PATH;
  57. @Value("${upload.query-path}")
  58. private String queryPath;
  59. @Override
  60. public void uploadObj(MultipartFile file, String username) throws Exception {
  61. if(file.isEmpty()){
  62. throw new BusinessException(ResultCode.UPLOAD_FILE_NO_EXIST);
  63. }
  64. if(file.getSize()>10 * 1024 * 1024 * 100){
  65. System.out.println(file.getSize());
  66. throw new BusinessException(ResultCode.UPLOAD_FILE_TO_LONG);
  67. }
  68. //获取文件名
  69. String fileName = file.getOriginalFilename();
  70. if(StringUtils.isEmpty(fileName)){
  71. throw new BusinessException(ResultCode.UPLOAD_FILE_NO_EXIST);
  72. }
  73. if(!fileName.toLowerCase().contains("zip") && !fileName.toLowerCase().contains("rar")){
  74. throw new BusinessException(ResultCode.UPLOAD_FILE_TYPE_ERROR);
  75. }
  76. //获取文件后缀名
  77. String modelName = fileName.substring(0,fileName.lastIndexOf("."));
  78. Model model = new Model();
  79. model.setModelTitle(modelName);
  80. model.setModelDateType("obj");
  81. model.setModelType("glb");
  82. model.setModelSize(file.getSize());
  83. model.setUserName(username);
  84. this.save(model);
  85. File newObjFile = null;
  86. try {
  87. String objPath = String.format(OBJ_PATH , "modelId_"+model.getModelId());
  88. String glbPath = String.format(GLB_PATH , "modelId_"+model.getModelId()) +"/"+modelName +"/mesh.glb";
  89. String glbOssPath = String.format(FilePath.GLB_OSS_PATH, model.getModelId());
  90. newObjFile = new File(objPath +"/" + fileName);
  91. if(!newObjFile.getParentFile().exists()){
  92. newObjFile.mkdirs();
  93. }
  94. file.transferTo(newObjFile);
  95. if(fileName.toLowerCase().contains("zip")){
  96. ShellUtil.unZip(newObjFile.getPath(),objPath);
  97. }
  98. if(fileName.toLowerCase().contains("rar")){
  99. ShellUtil.unRar(newObjFile.getPath(),objPath);
  100. }
  101. OBJToGLBUtil.objToGlb(objPath+"/"+modelName,glbPath);
  102. uploadToOssUtil.upload(glbPath,glbOssPath);
  103. model.setModelObjUrl(objPath);
  104. model.setModelGlbUrl(queryPath + glbOssPath);
  105. model.setCreateStatus(1); //上传成功
  106. this.updateById(model);
  107. }catch (Exception e){
  108. model.setCreateStatus(-1);
  109. this.updateById(model);
  110. throw e;
  111. }finally {
  112. if(newObjFile!=null){
  113. newObjFile.delete();
  114. }
  115. }
  116. }
  117. @Override
  118. public PageInfo pageList(ModelPram param, String token) {
  119. String username = JwtUtil.getUsername(token);
  120. LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
  121. wrapper.eq(Model::getUserName,username);
  122. wrapper.eq(Model::getType,3);
  123. if(param.getStatus()!=null){ //参数2为成功,数据库中成功为1
  124. wrapper.eq(Model::getCreateStatus,param.getStatus() == 2 ? 1 :param.getStatus());
  125. }
  126. if(StringUtils.isNotBlank(param.getModelTitle())){
  127. wrapper.like(Model::getModelTitle,param.getModelTitle());
  128. }
  129. wrapper.orderByDesc(Model::getCreateTime);
  130. Page<Model> page = this.page(new Page<>(param.getPageNum(),param.getPageSize()),wrapper);
  131. for (Model model : page.getRecords()) {
  132. if(model.getType() == 3 && StringUtils.isEmpty(model.getNum())) {
  133. model.setNum(model.getModelId().toString());
  134. }
  135. }
  136. return PageInfo.PageInfo(page);
  137. }
  138. @Override
  139. public void delete(Integer modelId) {
  140. List<CaseNumEntity> caseNumEntityList = caseNumService.getByNum(modelId.toString());
  141. List<FusionNum> fusionNumList = fusionNumService.getByNum(modelId.toString());
  142. if(caseNumEntityList.size() >0 || fusionNumList.size() >0){
  143. throw new BusinessException(ResultCode.CASE_USE);
  144. }
  145. Model model = this.getById(modelId);
  146. if(model == null ){
  147. throw new BusinessException(ResultCode.MODEL_NOT_EXIST);
  148. }
  149. this.removeById(modelId);
  150. if(StringUtils.isNotBlank(model.getModelGlbUrl())){
  151. uploadService.deleteOssUrl(model.getModelGlbUrl());
  152. }
  153. }
  154. @Override
  155. public List<Model> getListByNum(List<String> numList) {
  156. LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
  157. wrapper.in(Model::getNum,numList);
  158. return this.list(wrapper);
  159. }
  160. @Override
  161. public List<Model> getListByModelIds(List<Integer> modelIds) {
  162. LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
  163. wrapper.in(Model::getModelId,modelIds);
  164. return this.list(wrapper);
  165. }
  166. @Override
  167. public List<Model> getListByModelIdStrs(List<String> numList) {
  168. LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
  169. wrapper.in(Model::getModelId,numList);
  170. return this.list(wrapper);
  171. }
  172. @Override
  173. public void deleteByNum(List<String> numList) {
  174. LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
  175. wrapper.in(Model::getNum,numList);
  176. this.remove(wrapper);
  177. }
  178. @Override
  179. public List<Model> getByUserName(String username) {
  180. LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
  181. wrapper.eq(Model::getUserName,username)
  182. .eq(Model::getType,3);
  183. return this.list(wrapper);
  184. }
  185. @Override
  186. public Model getIsNullNewByNum(String num) {
  187. LambdaQueryWrapper<Model> wrapper = new LambdaQueryWrapper<>();
  188. wrapper.eq(Model::getNum,num);
  189. Model model = this.getOne(wrapper);
  190. if(model == null){
  191. model = new Model();
  192. }
  193. return model;
  194. }
  195. @Override
  196. public Object getInfo(Integer modelId) {
  197. Model model = this.getById(modelId);
  198. SceneVo sceneVo = new SceneVo();
  199. BeanUtils.copyProperties(model,sceneVo);
  200. return sceneVo;
  201. }
  202. }