modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/controller/ItemCirculatOrderController.java
@@ -14,7 +14,9 @@ import com.zt.common.validator.group.UpdateGroup; import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; import com.zt.life.modules.itemCirculatOrder.service.ItemCirculatOrderService; import com.zt.life.modules.itemCirculatOrder.service.ItemCirculatOrderTechnicalService; import com.zt.life.modules.project.dto.SoftwareTestOrderDto; import com.zt.life.sys.dto.OssDto; import com.zt.life.sys.service.SysOssConfigService; @@ -52,6 +54,9 @@ @Autowired private SysOssConfigService sysOssConfigService; @Autowired private ItemCirculatOrderTechnicalService technicalService; @GetMapping("page") @ApiOperation("分页") @ApiImplicitParams({ @@ -59,7 +64,10 @@ @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT), @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING), @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), @ApiImplicitParam(name = "code", value = "物品流转单编号", dataType = Constant.QT.STRING, format = "code^LK") }) @ApiImplicitParam(name = "code", value = "物品流转单编号", dataType = Constant.QT.STRING, format = "code^LK"), @ApiImplicitParam(name = "softwareName", value = "物品名称", dataType = Constant.QT.STRING, format = "software_name^EQ"), @ApiImplicitParam(name = "softwareIdentity", value = "物品编号", dataType = Constant.QT.STRING, format = "software_identity^EQ") }) public PageResult<ItemCirculatOrder> page(@ApiIgnore @QueryParam QueryFilter queryFilter){ return PageResult.ok(itemCirculatOrderService.page(queryFilter)); @@ -70,9 +78,12 @@ public Result<ItemCirculatOrderDto> getDto(Long projectId, Long circulatOrderid) { ItemCirculatOrderDto data = itemCirculatOrderService.getDto(projectId, circulatOrderid); if (circulatOrderid!=null) { OssDto ossDto = sysOssConfigService.getOssByBusiType(circulatOrderid, "circulat_order"); for (ItemCirculatOrderTechnical technical : technicalService.getList(circulatOrderid)) { Long technicalId = technical.getId(); OssDto ossDto = sysOssConfigService.getOssByBusiType(technicalId, "circulat_order"); if (ossDto != null) { data.setFiles(ossDto); technical.setFiles(ossDto); } } } return Result.ok(data); modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderDao.java
@@ -22,5 +22,5 @@ List<ItemCirculatOrder> getList(Map<String, Object> params); List<DictIstance> itemList(Long projectId); } modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dao/ItemCirculatOrderTechnicalDao.java
@@ -1,6 +1,7 @@ package com.zt.life.modules.itemCirculatOrder.dao; import com.zt.common.dao.BaseDao; import com.zt.core.sys.dto.DictIstance; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; import org.apache.ibatis.annotations.Mapper; @@ -19,5 +20,6 @@ public interface ItemCirculatOrderTechnicalDao extends BaseDao<ItemCirculatOrderTechnical> { List<ItemCirculatOrderTechnical> getList(Map<String, Object> params); List<DictIstance> itemList(Long projectId); } modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/dto/ItemCirculatOrderDto.java
@@ -23,8 +23,7 @@ private ItemCirculatOrder circulatOrder; @ApiModelProperty(value = "测试机构信息") private TestAgencyInfo TestAgencyInfo; @ApiModelProperty(value = "附件") private OssDto files; @ApiModelProperty(value = "技术资料") private List<ItemCirculatOrderTechnical> technicalList = new ArrayList<>(); modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java
@@ -1,5 +1,6 @@ package com.zt.life.modules.itemCirculatOrder.model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.zt.common.entity.BusiEntity; @@ -51,6 +52,7 @@ @JsonFormat(pattern = "yyyy-MM-dd") private Date detectDate; @ApiModelProperty(value = "校准检测情况说明") private String detectSituation; @@ -80,4 +82,13 @@ @ApiModelProperty(value = "年份") private String year; @TableField(exist = false) @ApiModelProperty(value = "物品名称") private String softwareName; @TableField(exist = false) @ApiModelProperty(value = "物品编号") private String softwareIdentity; } modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrderTechnical.java
@@ -1,7 +1,9 @@ package com.zt.life.modules.itemCirculatOrder.model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.zt.common.entity.BusiEntity; import com.zt.life.sys.dto.OssDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -28,7 +30,7 @@ private Integer no; @ApiModelProperty(value = "技术资料名称") private String infoName; private String name; @ApiModelProperty(value = "标识") private String identify; @@ -48,7 +50,8 @@ @ApiModelProperty(value = "备注") private String remark; @ApiModelProperty(value = "文件") private String file; @TableField(exist = false) @ApiModelProperty(value = "附件") private OssDto files; } modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java
@@ -6,6 +6,7 @@ import com.zt.core.sys.dto.DictLeafDto; import com.zt.life.export.dto.WordFile; import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderDao; import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderTechnicalDao; import com.zt.life.modules.itemCirculatOrder.dto.ItemCirculatOrderDto; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrder; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; @@ -14,6 +15,7 @@ import com.zt.life.modules.project.service.ProjectService; import com.zt.life.modules.project.service.SoftwareTestOrderService; import com.zt.life.modules.sysBaseInfo.service.TestAgencyInfoService; import com.zt.life.sys.dto.OssDto; import com.zt.life.sys.service.SysOssConfigService; import com.zt.modules.coderule.service.SysCodeRuleService; import com.zt.modules.oss.service.SysOssService; @@ -101,6 +103,7 @@ circulatOrderTechnical.setCirculatOrderId(circulatOrderid); technicalService.insert(circulatOrderTechnical); } sysOssConfigService.updateOss(circulatOrderTechnical.getId(), circulatOrderTechnical.getFiles());// 保存附件 } if (itemCirculatOrderDto.getTestAgencyInfo().getId() == 10000) { @@ -109,7 +112,6 @@ } else { testAgencyInfoService.update(itemCirculatOrderDto.getTestAgencyInfo()); } sysOssConfigService.updateOss(itemCirculatOrderDto.getId(), itemCirculatOrderDto.getFiles());// 保存附件 return true; } @@ -130,10 +132,9 @@ } else { ItemCirculatOrder itemCirculatOrder =new ItemCirculatOrder(); data.setCirculatOrder(itemCirculatOrder); List<?> resultList = baseDao.itemList(projectId); List<?> resultList = technicalService.itemList(projectId); List<?> technicalList = resultList; data.setTechnicalList((List<ItemCirculatOrderTechnical>) technicalList); } if (projectId != null) { modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderTechnicalService.java
@@ -1,6 +1,7 @@ package com.zt.life.modules.itemCirculatOrder.service; import com.zt.common.service.BaseService; import com.zt.core.sys.dto.DictIstance; import com.zt.life.modules.itemCirculatOrder.dao.ItemCirculatOrderTechnicalDao; import com.zt.life.modules.itemCirculatOrder.model.ItemCirculatOrderTechnical; import com.zt.life.modules.project.model.SoftwareTestOrderMeasured; @@ -45,5 +46,8 @@ params.put("circulatOrderid",circulatOrderid); return baseDao.getList(params); } public List<DictIstance> itemList(Long projectId) { return baseDao.itemList(projectId); } } modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderDao.xml
@@ -17,16 +17,6 @@ ORDER BY ${orderBySql} </if> </select> <select id="itemList" resultType="com.zt.core.sys.dto.DictIstance"> SELECT m.* FROM software_test_order_measured m JOIN software_test_order s ON s.id = m.order_id <where> s.is_delete = 0 and m.is_delete = 0 <if test="projectId!=null"> and s.project_id = ${projectId} </if> </where> </select> </mapper> modules/mainPart/src/main/resources/mapper/itemCirculatOrder/ItemCirculatOrderTechnicalDao.xml
@@ -16,5 +16,16 @@ ORDER BY ${orderBySql} </if> </select> <select id="itemList" resultType="com.zt.core.sys.dto.DictIstance"> SELECT m.*, p.secret_class FROM software_test_order_measured m JOIN software_test_order s ON s.id = m.order_id JOIN project p ON p.id = ${projectId} <where> s.is_delete = 0 and m.is_delete = 0 <if test="projectId!=null"> and s.project_id = ${projectId} </if> </where> </select> </mapper> web/package-lock.json
@@ -7504,8 +7504,7 @@ "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "duplexer2": { "version": "0.0.2", @@ -8452,6 +8451,27 @@ "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", "dev": true }, "event-stream": { "version": "4.0.1", "resolved": "https://registry.npmmirror.com/event-stream/-/event-stream-4.0.1.tgz", "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", "requires": { "duplexer": "^0.1.1", "from": "^0.1.7", "map-stream": "0.0.7", "pause-stream": "^0.0.11", "split": "^1.0.1", "stream-combiner": "^0.2.2", "through": "^2.3.8" }, "dependencies": { "map-stream": { "version": "0.0.7", "resolved": "https://registry.npmmirror.com/map-stream/-/map-stream-0.0.7.tgz", "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" } } }, "eventemitter3": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz", @@ -9295,6 +9315,11 @@ "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, "from": { "version": "0.1.7", "resolved": "https://registry.npmmirror.com/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" }, "from2": { "version": "2.3.0", @@ -12860,6 +12885,11 @@ "lodash._objecttypes": "~2.4.1" } }, "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmmirror.com/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -13533,6 +13563,11 @@ "matches-selector": "^1.2.0", "min-dash": "^3.8.1" } }, "mingo": { "version": "6.4.9", "resolved": "https://registry.npmmirror.com/mingo/-/mingo-6.4.9.tgz", "integrity": "sha512-jsOiIEJ19UtTaWjNFN4CnuKWqELm2sINZcHqI/nmjezMvXthBIQOftJrlT85NuIDoSFc0vrbjD+GnrzEgYnPbA==" }, "mini-css-extract-plugin": { "version": "0.8.2", @@ -14878,6 +14913,14 @@ "integrity": "sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==", "dev": true, "optional": true }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmmirror.com/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "requires": { "through": "~2.3" } }, "pbkdf2": { "version": "3.1.2", @@ -17340,6 +17383,17 @@ } } }, "save": { "version": "2.9.0", "resolved": "https://registry.npmmirror.com/save/-/save-2.9.0.tgz", "integrity": "sha512-eg8+g8CjvehE/2C6EbLdtK1pINVD27pcJLj4M9PjWWhoeha/y5bWf4dp/0RF+OzbKTcG1bae9qi3PAqiR8CJTg==", "requires": { "async": "^3.2.2", "event-stream": "^4.0.1", "lodash.assign": "^4.2.0", "mingo": "^6.1.0" } }, "sax": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz", @@ -17967,6 +18021,11 @@ "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, "spark-md5": { "version": "3.0.2", "resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz", "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" }, "sparkles": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/sparkles/-/sparkles-1.0.1.tgz", @@ -18085,6 +18144,14 @@ "safe-buffer": "~5.2.0" } } } }, "split": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "requires": { "through": "2" } }, "split-string": { @@ -18254,6 +18321,15 @@ } } }, "stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmmirror.com/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", "requires": { "duplexer": "~0.1.1", "through": "~2.3.4" } }, "stream-consume": { "version": "0.1.1", "resolved": "https://registry.npmmirror.com/stream-consume/-/stream-consume-0.1.1.tgz", web/package.json
@@ -49,7 +49,9 @@ "qs": "^6.7.0", "quill": "^1.3.6", "sass-loader": "^7.1.0", "save": "^2.9.0", "screenfull": "^4.2.1", "spark-md5": "^3.0.2", "v-distpicker": "^1.2.6", "v-gantt-chart": "^1.5.1", "vue": "^2.7.14", web/packages/components/zt-uploader/src/zt-uploader.vue
@@ -4,39 +4,65 @@ <el-upload ref="upload" class="upload-input" :class="{hide: uploadDisabled || !isShowUpload}" :accept="accept" :action="uploadAction" :before-upload="handleBeforeUpload" :data="data" :disabled="uploading" :drag="false" :limit="limit" list-type="text" :multiple="multiple" :name="name" :on-change="handleChange" :on-error="handleUploadError" :auto-upload="true" :before-upload="handleBeforeUpload" :http-request="checkedFile" :before-remove="removeFile" :on-exceed="handleExceed" :on-success="handleUploadSuccess" :on-progress="onUploadProgress" :show-file-list="false" :file-list="fileList" v-if="!image && !crop" > <el-button class="upload-btn" size="mini" type="primary" icon="el-icon-upload" v-show="!uploadDisabled && isShowUpload">{{ buttonText }} <!-- <el-upload--> <!-- ref="upload"--> <!-- class="upload-input"--> <!-- :class="{hide: uploadDisabled || !isShowUpload}"--> <!-- :accept="accept"--> <!-- :action="uploadAction"--> <!-- :before-upload="handleBeforeUpload"--> <!-- :data="data"--> <!-- :disabled="uploading"--> <!-- :drag="false"--> <!-- :limit="limit"--> <!-- list-type="text"--> <!-- :multiple="multiple"--> <!-- :name="name"--> <!-- :on-change="handleChange"--> <!-- :on-error="handleUploadError"--> <!-- :on-exceed="handleExceed"--> <!-- :on-success="handleUploadSuccess"--> <!-- :on-progress="onUploadProgress"--> <!-- :show-file-list="false"--> <!-- :file-list="fileList"--> <!-- v-if="!image && !crop"--> <!-- :auto-upload="true"--> <!-- :http-request="checkedFile"--> <!-- :before-remove="removeFile"--> <!-- >--> <div style="display:inline-block;width:600px;text-align: center" v-if="onlyUploadFile" class="el-upload__tip"> {{computerFileName}} </div> <el-button slot="trigger" v-if="onlyUploadFile" size="small" type="primary">选取文件</el-button> <el-button type="primary" v-if="onlyUploadFile" size="small" style="margin-left:20px" @click="myCheckedFile">提 交 </el-button> <el-button class="upload-btn" size="mini" type="primary" icon="el-icon-upload" v-show="!uploadDisabled && isShowUpload && !onlyUploadFile">{{ buttonText }} </el-button> <div slot="tip" class="el-upload__tip" v-show="!uploadDisabled && isShowUpload && tip">{{ tip }}</div> </el-upload> <br/> <div v-show="progressFlag"> <el-progress :text-inside="true" :stroke-width="30" :percentage="progressPercent" :format="format"></el-progress> </div> <ul class="el-upload-list el-upload-list--text" v-if="!image && !crop && showFileList"> <ul class="el-upload-list el-upload-list--text" v-if="!image && !crop && !onlyUploadFile"> <li tabindex="0" class="el-upload-list__item is-success" v-for="(file, index) in uploadList" :key="file.id"> <a class="el-upload-list__item-name" :href="file.url" target="_blank"><i class="el-icon-document"></i>{{ file.name }}</a> @@ -71,6 +97,7 @@ :limit="limit" :list-type="drag ? 'picture' : 'picture-card'" :multiple="multiple" :name="name" :on-change="handleChange" :on-error="handleUploadError" :on-exceed="handleExceed" @@ -164,6 +191,9 @@ import Cookies from 'js-cookie' import Cropper from 'vue-image-crop-upload' import EleGallery from '../../vue-ele-gallery' import SparkMD5 from "spark-md5"; import axios from "axios"; import {getUUID} from "../../../utils"; export default { name: 'ZtUploader', @@ -175,9 +205,19 @@ return this.multiple ? [] : null } }, dataForm: Object, action: { type: String, default: '/sys/oss/upload' default: '/sys/oss/uploadNew' }, // 是否为图片 showFileList: { type: Boolean, default: true }, onlyUploadFile: { type: Boolean, default: false }, // 是否为图片 image: { @@ -257,10 +297,6 @@ default: '上传' }, tip: String, showFileList: { type: Boolean, default: true }, disabled: { type: Boolean, default: false @@ -277,8 +313,25 @@ }, data() { return { isUpload: false, maxSize: 50 * 1024 * 1024 * 1024, // 上传最大文件限制 最小单位是b multiUploadSize: 10 * 1024 * 1024, // 大于这个大小的文件使用分块上传(后端可以支持断点续传) 100mb eachSize: 10 * 1024 * 1024, // 每块文件大小 100mb requestCancelQueue: [], // 请求方法队列(调用取消上传 // 每上传一块的进度 eachProgress: 0, // 总共有多少块。断点续传使用 chunksKeep: 0, // 切割后的文件数组 fileChunksKeep: [], // 这个文件,断点续传 fileKeep: null, // 断点续传,文件md5 fileMd5Keep: "", progressPercent: 0, uploadAction: `${window.SITE_CONFIG['apiURL']}${this.action}?token=${Cookies.get('token')}`, uploadAction: `${window.SITE_CONFIG['apiURL']}/sys/oss/upload_chunk?token=${Cookies.get('token')}`, uploadCheckAction: `${window.SITE_CONFIG['apiURL']}/sys/oss/upload_success?token=${Cookies.get('token')}`, uploadProcessAction: `${window.SITE_CONFIG['apiURL']}${this.action}?token=${Cookies.get('token')}`, cropData: {}, isShowCrop: false, uploading: false, @@ -287,10 +340,24 @@ progressFlag:false } }, created() { if (this.onlyUploadFile) { this.fileList = [{id: '1', name: '', url: ''}] } else { this.fileList = [] } }, computed: { // 是否显示提示 showTip() { return this.isShowTip && (this.fileType.length || this.fileSize) }, computerFileName(computerFileName) { let fileName = 'aaaa' if (this.fileList.length > 0) { fileName = this.fileList[0].name } return fileName }, galleryValues() { let urls = [] @@ -313,7 +380,7 @@ if (this.multiple) { return this.uploadList.length < this.limit } else { return this.uploadList.length === 0 return this.uploadList.length === 0 || this.onlyUploadFile } }, uploadDisabled() { @@ -327,12 +394,15 @@ } }, watch: { // eslint-disable-next-line no-unused-vars value(val, oldval) { if (this.uploadList !== val) { this.uploadList = this.getUploadList(val) this.fileList = this.getUploadList(val) console.log(this.fileList,'this.fileList this.fileList') this.$emit('getUploaderImg',this.fileList) if (this.fileList.length>0){ console.log(this.fileList[0].status, 'val.files[0].status23') // alert('2222'+this.fileList[0].status) } } }, isShowCrop(value) { @@ -343,28 +413,31 @@ }, methods: { format(percentage) { return percentage === 100 ? '后台正在处理' : `${percentage}%`; return percentage === 100 ? '后台正在处理' : percentage === 99 ? '正在进行文件校验' : `已上传${percentage}%`; }, // 获取已上传的文件列表 getUploadList(val) { if (val) { // console.log(val, 'getUploadList val') if (val.length > 0) { if (!this.multiple) { // 单选 return [val] console.log(val, 'getUploadList val') return val } else { // console.log([...val], 'getUploadList [...val]') console.log([...val], 'getUploadList [...val]') return [...val] } } else { return [] } } }, // eslint-disable-next-line no-unused-vars onUploadProgress(event, file, fileList) { this.progressFlag = true let per = Number( /*let per = Number( ((event.loaded / event.total) * 100).toFixed(2) ) this.progressPercent = per > 100 ? 100 : per this.progressPercent = per > 100 ? 100 : per*/ }, handleSetFileSet(fileName, fileType, fileSize) { const uid = this.cropData.uid || new Date().getTime() @@ -385,6 +458,7 @@ this.$emit('error', status) }, handleCropUploadSuccess(response) { console.log(response, 'handleCropUploadSuccess response') this.cropData.status = 'success' this.cropData.percentage = 100 this.cropData.response = response @@ -416,10 +490,14 @@ return false } } if (this.dataForm) { // eslint-disable-next-line vue/no-mutating-props this.dataForm.hasUploadFinsh = 50 } this.uploading = true return true }, handleChange() { async handleChange() { this.uploading = false /*const config = { onUploadProgress: (progressEvent) => { @@ -436,8 +514,14 @@ })*/ }, // 文件个数超出 handleExceed() { this.$message.error(`最多上传${this.limit}个`) handleExceed(files, fileList) { if (this.onlyUploadFile) { this.$set(fileList[0], 'raw', files[0]) this.$set(fileList[0], 'name', files[0].name) /* this.$refs.upload.clearFiles() this.$refs.upload.handleStart(files[0])*/ } //this.$message.error(`最多上传${this.limit}个`) }, // 上传失败 handleUploadError(err) { @@ -446,8 +530,9 @@ this.$emit('error', err) }, // 上传成功回调 // eslint-disable-next-line no-unused-vars handleUploadSuccess(response, file) { console.log(response, file,'response, file') console.log(response, 'handleUploadSuccess response') if (response.code === 0) { this.progressPercent = 100 this.uploading = false @@ -477,6 +562,7 @@ } }, handRemoveAndSetValue(index) { console.log(index, 'handRemoveAndSetValue') if (this.multiple) { this.uploadList.splice(index, 1) this.$refs.upload.uploadFiles.splice(index, 1) @@ -484,6 +570,377 @@ } else { this.$emit('input', null) } }, nullFunction(param) { }, //开始分片上传myCheckedFile async myCheckedFile() { if (!this.handleBeforeUpload(this.fileList[0].raw)) return let options = { file: this.fileList[0].raw, onProgress: function (val) { }, onSuccess: function (val) { }, onError: function (val) { } } await this.checkedFile(options) }, async checkedFile(options) { if (!this.isUpload) { this.isUpload = true; } else { return this.$message({ message: `当前文件正在上传`, type: "warning" }); } this.progressFlag = true const { maxSize, multiUploadSize, getSize, splitUpload, singleUpload } = this; // 解构赋值 const {file, onProgress, onSuccess, onError} = options; // 解构赋值 file.uid = getUUID().toString() if (file.size > maxSize) { return this.$message({ message: `您选择的文件大于${getSize(maxSize)}`, type: "error" }); } this.fileKeep = file; const uploadFunc = file.size > multiUploadSize ? splitUpload : singleUpload; // 选择上传方式 try { await uploadFunc(file, onProgress); onSuccess(); } catch (e) { console.error(e); this.$message({ message: e.message, type: "error" }); this.progressFlag = false; this.progressPercent = 0; onError(); } }, // 格式化文件大小显示文字 getSize(size) { return size > 1024 ? size / 1024 > 1024 ? size / (1024 * 1024) > 1024 ? (size / (1024 * 1024 * 1024)).toFixed(2) + "GB" : (size / (1024 * 1024)).toFixed(2) + "MB" : (size / 1024).toFixed(2) + "KB" : size.toFixed(2) + "B"; }, // 单文件直接上传 async singleUpload(file, onProgress) { await this.postFile( {file, uid: file.uid, fileName: file.fileName, chunk: 0}, onProgress ); const reader = new FileReader(); reader.readAsArrayBuffer(file); console.log(file, 'singleUpload file'); let hashMd5 = ""; console.log(hashMd5); const that = this; function getHash(cb) { console.log(cb, "进入单个上传的getHash"); console.log("进入单个上传的getHash"); reader.onload = function (e) { console.log("进入单个上传的getHash的函数2"); console.log(hashMd5); console.log(this); // console.log(e) const hash = SparkMD5.ArrayBuffer.hash(e.target.result, false); console.log(e.target.result, 'e.target.result'); console.log(hash, 'hash'); that.hashMd5 = hash; console.log(that.hashMd5, 'hashMd5'); that.fileMd5Keep = hash; cb(hash); }; } await getHash(function (hash) { console.log(hash, 'getHash(function (hash) hash'); console.log(that, 'getHash(function (hash) that'); // 请求接口 that.validateFile({ name: file.name, uid: file.uid, md5: hash, chunks: 1, filter_type: "user_data_file" }); }); }, // 大文件分块上传 splitUpload(file, onProgress) { console.log(file, 'splitUpload(file'); // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve, reject) => { try { const {eachSize} = this; const chunks = Math.ceil(file.size / eachSize); this.chunksKeep = chunks; const fileChunks = await this.splitFile(file, eachSize, chunks); this.fileChunksKeep = fileChunks; //判断每上传一个文件,进度条涨多少,保留两位小数 this.eachProgress = 100 / chunks; this.progressFlag = true; let currentChunk = 0; let percent = 0; for (let i = 0; i < fileChunks.length; i++) { // 服务端检测已经上传到第currentChunk块了,那就直接跳到第currentChunk块,实现断点续传 // 此时需要判断进度条 if (Number(currentChunk) === i) { // 每块上传完后则返回需要提交的下一块的index await this.postFile( { chunked: true, chunk: i, chunks, eachSize, fileName: file.name, fullSize: file.size, uid: file.uid, file: fileChunks[i] }, onProgress ); currentChunk++; // 上传完一块后,进度条增加 percent = percent + this.eachProgress; // 不能超过100 this.progressPercent = percent > 100 ? 99 : Math.floor(percent); } } const spark = new SparkMD5.ArrayBuffer(); let currentChunkMd5 = 0; const that = this; const reader = new FileReader(); reader.onload = async function (e) { spark.append(e.target.result); currentChunkMd5++; if (currentChunkMd5 < chunks) { await loadNext(); } else { // console.log(spark.end()); const hashMd5111 = spark.end(); that.fileMd5Keep = hashMd5111; // 在这里请求接口 await that.validateFile({ name: file.name, uid: file.uid, md5: hashMd5111, chunks: fileChunks.length, filter_type: "git_secret_file" }); } }; // eslint-disable-next-line no-inner-declarations async function loadNext() { const start = currentChunkMd5 * eachSize; const end = start + eachSize >= file.size ? file.size : start + eachSize; await reader.readAsArrayBuffer(file.slice(start, end)); } await loadNext(); resolve(); } catch (error) { reject(error); } }); }, // 断点续传 againSplitUpload(file, array) { console.log("file,array"); console.log(file); console.log(array); // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve, reject) => { try { // eslint-disable-next-line no-unused-vars const {eachSize, fileKeep} = this; const chunks = this.chunksKeep; const fileChunks = this.fileChunksKeep; this.progressFlag = true; // let currentChunk = 0; for (let i = 0; i < array.length; i++) { // 服务端检测已经上传到第currentChunk块了,那就直接跳到第currentChunk块,实现断点续传 // 此时需要判断进度条 // 每块上传完后则返回需要提交的下一块的index await this.postFile({ chunked: true, chunk: array[i], chunks, name: file.name, fullSize: fileKeep.size, uid: file.uid, file: fileChunks[array[i]] }); // currentChunk++ // 上传完一块后,进度条增加 this.progressPercent += this.eachProgress; // 不能超过100 this.progressPercent = this.progressPercent > 100 ? 100 : this.progressPercent; } let fileMd5KeepTwo = this.fileMd5Keep; const isValidate = await this.validateFile({ name: file.name, uid: file.uid, md5: fileMd5KeepTwo, chunks: fileChunks.length, filter_type: "git_secret_file" }); if (!isValidate) { throw new Error("文件校验异常"); } // 关闭进度条 this.progressFlag = false; // 重置进度条 this.progressPercent = 0; resolve(); } catch (e) { reject(e); } }); }, // 文件分块,利用Array.prototype.slice方法 splitFile(file, eachSize, chunks) { return new Promise((resolve, reject) => { try { setTimeout(() => { const fileChunk = []; for (let chunk = 0; chunks > 0; chunks--) { fileChunk.push(file.slice(chunk, chunk + eachSize)); chunk += eachSize; } resolve(fileChunk); }, 0); } catch (e) { console.error(e); reject(new Error("文件切块发生错误")); } }); }, removeFile(file) { this.requestCancelQueue[file.uid](); delete this.requestCancelQueue[file.uid]; return true; }, // 提交文件方法,将参数转换为FormData, 然后通过axios发起请求 postFile(param, onProgress) { const formData = new FormData(); formData.append("file", param.file); // 改了 formData.append("fileName", param.fileName); // 改了 formData.append("uid", param.uid); formData.append("chunk", param.chunk); formData.append("filter_type", "git_secret_file"); formData.append("chunks", param.chunks); const {requestCancelQueue} = this; const config = { cancelToken: new axios.CancelToken(function executor(cancel) { if (requestCancelQueue[param.uid]) { requestCancelQueue[param.uid](); delete requestCancelQueue[param.uid]; } requestCancelQueue[param.uid] = cancel; }), onUploadProgress: e => { if (param.chunked) { e.percent = Number( ( ((param.chunk * (param.eachSize - 1) + e.loaded) / param.fullSize) * 100 ).toFixed(2) ); } else { e.percent = Number(((e.loaded / e.total) * 100).toFixed(2)); } onProgress(e) } } //return axios.post('sys/oss/upload_chunk/', formData, config).then(rs => rs.data) return this.$http({ url: "/sys/oss/upload_chunk/", method: "POST", data: formData }).then(rs => rs.data ); }, // 文件校验方法 validateFile(file) { //return axios.post('sys/oss/upload_success/', file).then(rs => rs.data) return this.$http({ url: "/sys/oss/upload_success/", method: "POST", data: file }).then(res => { console.log(res, "validateFile res") if (res && !res.data) { this.againSplitUpload(file, res.data.error_file) this.$message({ message: "有文件上传失败,正在重新上传", type: "warning" }); } else if (res && res.data) { this.progressPercent = 100 if (!this.onlyUploadFile) { this.$http({ url: this.action, method: "POST", data: file }).then(res => { console.log(res, '后台处理 res1') let aa = res.data.status console.log(aa, 'res.data.status') if (this.multiple) { this.uploadList.push(res.data) this.$emit('input', this.uploadList) } else { this.$emit('input', res.data) } this.uploading = false this.progressFlag = false this.progressPercent = 0 this.isUpload = false }) } else { console.log(file.uid, 'file.uid') this.$emit('recall', file.uid) this.uploading = false this.progressFlag = false this.progressPercent = 0 this.isUpload = false } } else if (res && res.status == 40008) { this.$message.error(res.message); this.progressFlag = false; this.progressPercent = 0; } }) } }, mounted() { web/src/components/config-uploader/src/config-uploader.vue
@@ -1,9 +1,9 @@ <template> <div> <el-collapse class="config-uploader" v-model="activeNames" v-if="oss && oss.groups.length>1"> <div v-if="oss"> <el-collapse class="config-uploader" v-model="activeNames" v-if="oss.groups.length>1"> <el-collapse-item name="1" v-for="group in (oss.groups || [])" :key="group.busiFieldGroup"> <template slot="title"> <el-tag v-if="!image">{{group.busiFieldGroup}}</el-tag> <el-tag>{{group.busiFieldGroup}}</el-tag> </template> <!-- <zt-form-item :label="field.busiFieldName" :prop="field.busiField" v-for="field in group.fields" :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;"> @@ -11,15 +11,17 @@ :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> </zt-form-item>--> <el-table :data="group.fields" :show-header="false"> <el-table-column width="250" style="text-align: left;white-space:nowrap;"> <el-table-column width="180" style="text-align: left;white-space:nowrap;"> <template slot-scope="scope"> <span v-html="scope.row.busiFieldName"></span> <span v-html="(scope.row.isRequired?'<font color=red>* </font>':'')+ scope.row.busiFieldName"></span> </template> </el-table-column> <el-table-column align="left"> <template slot-scope="scope"> <zt-uploader :image="image" v-model="dataForm[scope.row.busiField]" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileType" :accept="scope.row.accept" :file-size="scope.row.fileSize" @getUploaderImg="getUploaderImg" @input="change(scope.row.busiField)"/> <zt-uploader v-model="dataForm[scope.row.busiField]" :dataForm="dataForm" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileTypeArr" :showFileList2="false" :accept="scope.row.accept" :file-size="scope.row.fileSize" @input="change(scope.row.busiField)"/> </template> </el-table-column> </el-table> @@ -32,16 +34,26 @@ <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType" :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> </zt-form-item>--> <template slot="title"> <el-tag>{{group.busiFieldGroup}}</el-tag> </template> <!-- <zt-form-item :label="field.busiFieldName" :prop="field.busiField" v-for="field in group.fields" :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;"> <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType" :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> </zt-form-item>--> <el-table :data="group.fields" :show-header="false"> <el-table-column width="250" style="text-align: left;white-space:nowrap;"> <el-table-column width="180" style="text-align: left;white-space:nowrap;"> <template slot-scope="scope"> <span v-html="scope.row.busiFieldName"></span> <span v-html="(scope.row.isRequired?'<font color=red>* </font>':'')+ scope.row.busiFieldName"></span> </template> </el-table-column> <el-table-column align="left"> <template slot-scope="scope"> <zt-uploader :image="image" v-model="dataForm[scope.row.busiField]" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileType" :accept="scope.row.accept" :file-size="scope.row.fileSize" @getUploaderImg="getUploaderImg" @input="change(scope.row.busiField)"/> <zt-uploader v-model="dataForm[scope.row.busiField]" :dataForm="dataForm" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileTypeArr" :showFileList2="false" :accept="scope.row.accept" :file-size="scope.row.fileSize" @input="change(scope.row.busiField)"/> </template> </el-table-column> </el-table> @@ -58,7 +70,6 @@ props: { value: Object, dataForm: Object, image:false, busiType: String // 业务类型 }, data() { @@ -72,7 +83,15 @@ let arr = [] if (this.dataForm.files && this.dataForm.files.groups) { this.dataForm.files.groups.forEach(group => { group.fields.forEach(field => arr.push(field)) group.fields.forEach(field => { let arrType = [] if (field.fileTypes) { arrType = field.fileTypes.split(',') } //this.$set(field, 'fileTypeArr', arrType) field.fileTypeArr = arrType arr.push(field) }) }) } return arr @@ -110,25 +129,31 @@ getOss() { let arr = (this.$store.state.oss.configs || []).filter(config => config.busiType === this.busiType) if (arr.length > 0) { arr[0].groups.forEach(group => { group.fields.forEach(field => { let arrType = [] if (field.fileTypes) { arrType = field.fileTypes.split(',') } //this.$set(field, 'fileTypeArr', arrType) field.fileTypeArr = arrType }) }) console.log(JSON.parse(JSON.stringify(arr[0])),'JSON.parse(JSON.stringify(arr[0]))') return JSON.parse(JSON.stringify(arr[0])) } return null }, change(busiField) { console.log(busiField,'busiField busiField') this.fields.forEach(field => { if (field.busiField === busiField) { field.files.length = 0 this.dataForm[busiField].forEach(file => field.files.push(file)) if (this.dataForm) { this.dataForm.hasUploadFinsh = 100 } } }) }, getUploaderImg(list){ // this.imageList = list if(list[0].url){ this.$emit('getImageUrl',list[0].url) } } } } web/src/components/table-uploader/src/table-uploader.vue
@@ -1,25 +1,12 @@ <template> <div> <div class="config-uploader" > <div class="config-uploader" v-if="oss"> <div v-for="group in (oss.groups || [])" :key="group.busiFieldGroup"> <zt-form-item v-for="field in group.fields" :prop="field.busiField" :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;margin-bottom: 0"> <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType" :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/> </zt-form-item> <!-- <el-table :data="group.fields" :show-header="false">--> <!-- <el-table-column width="250" style="text-align: left;white-space:nowrap;">--> <!-- <template slot-scope="scope">--> <!-- <span v-html="scope.row.busiFieldName"></span>--> <!-- </template>--> <!-- </el-table-column>--> <!-- <el-table-column align="left">--> <!-- <template slot-scope="scope">--> <!-- <zt-uploader v-model="dataForm[scope.row.busiField]" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileType"--> <!-- :accept="scope.row.accept" :file-size="scope.row.fileSize" @getUploaderImg="getUploaderImg" @input="change(scope.row.busiField)"/>--> <!-- </template>--> <!-- </el-table-column>--> <!-- </el-table>--> </div> </div> </div> @@ -60,6 +47,7 @@ ...this.getOss(), ...(val || {}) } console.log(this.oss,"this.oss") // this.dataForm.files = this.oss this.$set(this.dataForm, 'files', this.oss) @@ -72,6 +60,7 @@ } }, mounted() { this.oss = this.getOss() if (this.oss) { this.oss.groups.forEach(group => { @@ -91,10 +80,14 @@ }, change(busiField) { console.log(busiField,'busiField busiField') this.fields.forEach(field => { if (field.busiField === busiField) { field.files.length = 0 this.dataForm[busiField].forEach(file => field.files.push(file)) this.dataForm[busiField].forEach(file => { console.log(file,"change file") field.files.push(file) }) } }) }, web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
@@ -24,7 +24,7 @@ <el-input v-model="dataForm.project.softwareIdentity" placeholder="物品编号"></el-input> </el-form-item> <el-form-item class="marginTopAndMarginBottom3" label="数 量" style="width: 32%"> <el-input v-model="dataForm.project.softwareName" placeholder="数量"></el-input> <el-input v-model="dataForm.project.isContract" placeholder="数量"></el-input> </el-form-item> </div> <div style="border-bottom: 1px solid rgba(0,0,0,.2);"> @@ -38,19 +38,19 @@ <span v-html="indexFormat(scope.$index)"></span> </template> </el-table-column> <el-table-column prop="Name" min-width="180" label="技术资料名称"> <el-table-column prop="infoName" min-width="180" label="技术资料名称"> <template v-slot="{ row }"> <el-input v-model="row.Name" placeholder="技术资料名称"></el-input> <el-input v-model="row.name" placeholder="技术资料名称"></el-input> </template> </el-table-column> <el-table-column prop="identify" align="center" width="150" label="标识"> <template v-slot="{ row }"> <el-input v-model="row.identify" placeholder="标识"></el-input> <el-input v-model="row.version" placeholder="标识"></el-input> </template> </el-table-column> <el-table-column prop="version" align="center" width="120" label="版本"> <template v-slot="{ row }"> <el-input v-model="row.version" placeholder="版本"></el-input> <el-input v-model="row.identify" placeholder="版本"></el-input> </template> </el-table-column> <el-table-column prop="secretClass" label="密级" width="100" align="center"> @@ -77,7 +77,7 @@ <el-table-column fixed="right" prop="files" label="上传附件" width="80" align="center"> <template v-slot="{ row }"> <!-- <zt-table-button @click="files(row.id)">上传附件</zt-table-button>--> <table-uploader busi-type="test_order" model-name="dataForm" :dataForm="dataForm" <table-uploader busi-type="circulat_order" model-name="row" :dataForm="row" v-model="row.files"/> </template> </el-table-column> @@ -156,7 +156,7 @@ </div> <div class="el-border-left " style="width: 35%;height: 40px;"> <el-form-item label="是否满足测试要求" label-width="150px" style="padding-left:20px;margin-bottom:0"> <zt-dict v-model="dataForm.circulatOrder.acceptSituation" :radio="true" dict="is_or_not"></zt-dict> <zt-dict v-model="dataForm.circulatOrder.cscs" :radio="true" dict="is_or_not"></zt-dict> </el-form-item> </div> </div> @@ -364,16 +364,18 @@ ...this.dataForm, ...res.data } console.log(this.dataForm,"this.dataForm") console.log(this.dataForm,"getInfo this.dataForm") }, // 表单提交 async formSubmit() { console.log(this.dataForm,"this.dataForm11111") let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/itemCirculatOrder/ItemCirculatOrder/', this.dataForm) if (res.success) { await this.$tip.success() this.$refs.dialog.close() this.$emit('refreshDataList') } } } } web/src/views/modules/itemCirculatOrder/ItemCirculatOrder.vue
@@ -5,7 +5,12 @@ <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()"> <el-form-item> <el-input v-model="dataForm.code" placeholder="请输入物品流转单编号" clearable></el-input> </el-form-item> <el-form-item> <el-input v-model="dataForm.softwareName" placeholder="请输入物品名称" clearable></el-input> </el-form-item> <el-form-item> <el-input v-model="dataForm.softwareIdentity" placeholder="请输入物品编号" clearable></el-input> </el-form-item> <el-form-item> <zt-button type="query" @click="table.query()"/> @@ -16,6 +21,8 @@ <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle"> <el-table-column type="selection" width="40"/> <el-table-column prop="code" label="物品流转单编号"/> <el-table-column prop="softwareName" label="物品名称"/> <el-table-column prop="softwareIdentity" label="物品编号"/> <zt-table-column-handle :table="table" edit-perm="itemCirculatOrder:update" delete-perm="itemCirculatOrder::delete"/> </el-table> <!-- 弹窗, 新增 / 修改 --> @@ -37,6 +44,8 @@ return { dataForm: { code: '', softwareName:'', softwareIdentity:'', } } }, web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue
@@ -568,6 +568,7 @@ } } // console.log(this.dataForm, "this.dataForm") console.log(this.dataForm,"getInfo this.dataForm") }, async print(){ var params = qs.stringify({ @@ -579,7 +580,7 @@ }, // 表单提交 async formSubmit() { console.log(this.dataForm, ' this.dataForm') console.log(this.dataForm, 'formSubmit this.dataForm') if(this.dataForm.softwareTestOrder.testType1){ this.dataForm.softwareTestOrder.testType1=this.dataForm.softwareTestOrder.testType1.join(',') } zt/common/src/main/java/com/zt/core/sys/dto/DictIstance.java
@@ -12,4 +12,6 @@ private String identify; private String secretClass; } zt/core/src/main/java/com/zt/modules/oss/annotation/DataFieldParser.java
@@ -1,10 +1,8 @@ package com.zt.modules.oss.annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.zt.common.annotation.OssField; import com.zt.modules.oss.model.OssFieldDefine; import io.swagger.annotations.ApiModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -16,10 +14,10 @@ import org.springframework.core.type.classreading.MetadataReaderFactory; import org.springframework.stereotype.Component; import com.zt.common.annotation.OssField; import com.zt.modules.oss.model.OssFieldDefine; import io.swagger.annotations.ApiModel; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; @Component("dataFieldParser") public class DataFieldParser { zt/core/src/main/java/com/zt/modules/oss/cloud/LocalStorageService.java
@@ -8,12 +8,10 @@ package com.zt.modules.oss.cloud; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.spire.xls.Workbook; import com.zt.common.exception.ErrorCode; import com.zt.common.exception.RenException; import com.zt.common.utils.CommonUtils; import com.zt.core.oss.encry.IOssEncryptService; import com.zt.modules.oss.enums.CloudChannel; import com.zt.modules.oss.model.QdSysOss; @@ -29,7 +27,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.util.Date; /** * 本地上传 @@ -98,8 +95,6 @@ } public void content(SysOss oss, HttpServletResponse response) throws Exception { Date beginDate = new Date(); Date lastDate = beginDate; if (oss == null) { throw new IOException("文件不存在!"); } @@ -118,15 +113,7 @@ System.out.println(File.separator); System.out.println(oss.getPath()); // 创建文件输入流 Date nowDate = new Date(); System.out.println("准备时间:" + CommonUtils.getDatePoor(nowDate, lastDate)); lastDate = nowDate; InputStream is = ossEncryptService.decrypt(file); nowDate = new Date(); System.out.println("解密时间:" + CommonUtils.getDatePoor(nowDate, lastDate)); lastDate = nowDate; // 响应输出流 ServletOutputStream out = response.getOutputStream(); // 创建缓冲区 @@ -138,9 +125,6 @@ is.close(); out.flush(); out.close(); nowDate = new Date(); System.out.println("输出时间:" + CommonUtils.getDatePoor(nowDate, lastDate)); System.out.println("总时间:" + CommonUtils.getDatePoor(nowDate, beginDate)); } } @@ -166,7 +150,8 @@ workbook.saveToStream(outputStream, com.spire.xls.FileFormat.Version2013); // 指定文件格式 documentBytes = outputStream.toByteArray(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); } else if (filename.endsWith(".docx") || filename.endsWith(".xlsx")) { } if (filename.endsWith(".doc") || filename.endsWith(".docx") || filename.endsWith(".xlsx")) { documentBytes = FileCopyUtils.copyToByteArray(in); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", filename); zt/core/src/main/java/com/zt/modules/oss/cloud/StorageConfig.java
@@ -8,10 +8,10 @@ package com.zt.modules.oss.cloud; import java.io.Serializable; import lombok.Data; import java.io.Serializable; /** * 云存储配置信息 * zt/core/src/main/java/com/zt/modules/oss/controller/SysOssController.java
@@ -8,7 +8,6 @@ package com.zt.modules.oss.controller; import cn.hutool.core.io.IoUtil; import com.zt.common.annotation.LogOperation; import com.zt.common.annotation.QueryParam; import com.zt.common.constant.Constant; @@ -30,21 +29,14 @@ import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.nio.file.Files; import java.util.Map; /** zt/core/src/main/java/com/zt/modules/oss/controller/chunkUploadController.java
@@ -5,7 +5,6 @@ import io.swagger.annotations.Api; import org.apache.tomcat.util.http.fileupload.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; zt/core/src/main/java/com/zt/modules/oss/encry/NoEncryptService.java
@@ -1,13 +1,11 @@ package com.zt.modules.oss.encry; import java.io.File; import java.io.InputStream; import cn.hutool.core.io.IoUtil; import com.zt.core.oss.encry.IOssEncryptService; import org.springframework.stereotype.Service; import cn.hutool.core.io.IoUtil; import com.zt.core.oss.encry.IOssEncryptService; import java.io.File; import java.io.InputStream; @Service("noEncryptService") public class NoEncryptService implements IOssEncryptService { zt/core/src/main/java/com/zt/modules/oss/enums/OssStatus.java
@@ -20,7 +20,7 @@ @Dictionary(type = "oss_status", name = "文件状态") public enum OssStatus implements IDictionary { TEMPORARY(0, "临时"), PERMANENT(1, "永久"); TEMPORARY(100, "临时"), PERMANENT(101, "永久"); private Integer value; private String name; zt/core/src/main/java/com/zt/modules/oss/mapstruct/OssMapper.java
@@ -1,9 +1,8 @@ package com.zt.modules.oss.mapstruct; import org.mapstruct.Mapper; import com.zt.core.oss.dto.OssDto; import com.zt.modules.oss.model.SysOss; import org.mapstruct.Mapper; @Mapper(componentModel = "spring") public interface OssMapper { zt/core/src/main/java/com/zt/modules/oss/model/OssFieldDefine.java
@@ -1,11 +1,10 @@ package com.zt.modules.oss.model; import lombok.Data; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; import lombok.Data; import org.apache.commons.lang3.StringUtils; @Data public class OssFieldDefine { zt/core/src/main/java/com/zt/modules/oss/model/SysOss.java
@@ -8,16 +8,14 @@ package com.zt.modules.oss.model; import lombok.Data; import lombok.EqualsAndHashCode; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.zt.common.entity.BusiEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; /** * 文件上传 zt/core/src/main/java/com/zt/modules/oss/service/SysOssService.java
@@ -1,6 +1,5 @@ package com.zt.modules.oss.service; import ch.qos.logback.core.util.FileUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.NumberUtil; @@ -13,8 +12,6 @@ import com.zt.common.exception.ErrorCode; import com.zt.common.exception.RenException; import com.zt.common.service.BaseService; import com.zt.common.utils.MoveTotherFoldersUtils; import com.zt.common.utils.UUIDUtil; import com.zt.core.oss.dto.OssDto; import com.zt.core.oss.service.ISysOssService; import com.zt.modules.oss.annotation.DataFieldParser; @@ -38,7 +35,6 @@ import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import java.io.*; import java.nio.file.Files; import java.security.Key; import java.security.SecureRandom; import java.util.*; zt/core/src/main/resources/mapper/oss/SysOssDao.xml
@@ -45,5 +45,6 @@ </if> ORDER by a.busi_id,a.sort </select> <select id="getOldFileList" resultType="com.zt.modules.oss.model.SysOss"></select> </mapper> zt/core/src/main/resources/mapper/sys/SysDictTypeDao.xml
@@ -5,7 +5,7 @@ <select id="getTenantDictTypes" resultType="com.zt.modules.sys.model.SysDictType"> select a.* from DJ_SYS_DICT_TYPE a from SYS_DICT_TYPE a where a.is_delete = 0 <if test="tenantId == 0"> and a.tenant_id = #{tenantId}