core/src/main/java/com/zt/life/export/service/WordFileService.java
@@ -8,6 +8,8 @@ import com.deepoove.poi.policy.HackLoopTableRenderPolicy; import com.zt.life.export.dto.WordFile; import com.zt.life.oss.OssEncryptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -23,6 +25,10 @@ @Value("${zt.oss.local-path}") private String localPath; @Autowired private OssEncryptService ossEncryptService; public void exportWordFile(HttpServletRequest request, Object dataObj, WordFile wordFile, HttpServletResponse response) throws UnsupportedEncodingException, FileNotFoundException { // 数据map集合 Map<String, Object> wordData = new HashMap<>(); @@ -32,7 +38,7 @@ this.formatWordData(dataObj, wordData, builder); config = builder.build(); File fl = new File(localPath+"/template/"+wordFile.getModulePath()); File fl = new File(localPath + "/template/" + wordFile.getModulePath()); FileInputStream fs = new FileInputStream(fl); XWPFTemplate template; if (config != null) { @@ -55,17 +61,24 @@ formatWordData(staticFieldValue, wordData, builder); } else { if (field.getType().getName().equals("java.util.List")) { builder.bind(fieldName, new HackLoopTableRenderPolicy()); builder.bind(fieldName, new HackLoopTableRenderPolicy()); } else if (staticFieldValue != null) { String valStr = staticFieldValue.toString(); if (valStr.contains("签名图片:")) { valStr = valStr.replace("签名图片:", ""); staticFieldValue = new PictureRenderData(80, 100, "d://" + valStr); /*put("localbyte", new PictureRenderData(80, 100, ".png", new FileInputStream("./logo.png")));*/ if (valStr.contains("文件图片:")) { valStr = valStr.replace("文件图片:", ""); File file = new File(valStr); if (file.exists()) { try (InputStream in = ossEncryptService.decrypt(file)) { staticFieldValue = new PictureRenderData(500, 500, ".png", in); /*staticFieldValue = new PictureRenderData(80, 100, "d://" + valStr);*/ } catch (IOException e) { e.printStackTrace(); } } if (wordData.get(fieldName) == null) wordData.put(fieldName, staticFieldValue); } } if (wordData.get(fieldName) == null) wordData.put(fieldName, staticFieldValue); } } } core/src/main/java/com/zt/life/sys/service/SysOssConfigService.java
@@ -10,6 +10,7 @@ import com.zt.common.service.BaseService; import com.zt.common.utils.CacheUtils; import com.zt.common.utils.UUIDUtil; import com.zt.core.oss.service.ISysOssConfigService; import com.zt.core.oss.service.ISysOssService; import com.zt.life.core.constant.Cache; import com.zt.life.sys.dao.SysOssConfigDao; @@ -32,7 +33,7 @@ * @since 1.0.0 2020-08-25 */ @Service public class SysOssConfigService extends BaseService<SysOssConfigDao, SysOssConfig> { public class SysOssConfigService extends BaseService<SysOssConfigDao, SysOssConfig> implements ISysOssConfigService { @Autowired private OssExMapper ossExMapper; modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java
@@ -91,5 +91,9 @@ @ApiModelProperty(value = "物品编号") private String softwareIdentity; @TableField(exist = false) @ApiModelProperty(value = "其他要求") private String itemRequireStr; } modules/mainPart/src/main/java/com/zt/life/modules/mainPart/test/service/testService.java
File was deleted modules/mainPart/src/main/java/com/zt/life/modules/project/controller/EnvironController.java
@@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.swing.*; import java.text.SimpleDateFormat; @@ -78,12 +79,6 @@ @ApiOperation("信息") public Result<EnvironDto> getDto(Long environId, Long projectId) { EnvironDto data = environService.getDto(environId, projectId); if (environId != null) { OssDto ossDto = sysOssConfigService.getOssByBusiType(environId, "test_environt_diagram"); if (ossDto != null) { data.setFiles(ossDto); } } return Result.ok(data); } @@ -124,4 +119,11 @@ return Result.ok(); } @GetMapping("exportEnviron") @ApiOperation("打印测试环境建立确认表") @LogOperation("打印测试环境建立确认表") public void exportEnviron(Long id, HttpServletRequest request, HttpServletResponse response) { environService.exportEnviron(id, request, response); } } modules/mainPart/src/main/java/com/zt/life/modules/project/model/Environ.java
@@ -83,4 +83,7 @@ @ApiModelProperty(value = "版本") private String softwareIdentity; @TableField(exist = false) @ApiModelProperty(value = "是否进行环境病毒查杀") private String isVirusScanStr; } modules/mainPart/src/main/java/com/zt/life/modules/project/service/EnvironService.java
@@ -1,21 +1,38 @@ package com.zt.life.modules.project.service; import com.zt.common.service.BaseService; import com.zt.core.sys.dto.DictDto; import com.zt.core.sys.dto.DictItemDto; import com.zt.core.sys.dto.DictLeafDto; import com.zt.life.export.dto.WordFile; import com.zt.life.export.service.WordFileService; import com.zt.life.modules.mainPart.utils.GetShowDictList; import com.zt.life.modules.project.dao.EnvironDao; import com.zt.life.modules.project.dto.EnvironDto; import com.zt.life.modules.project.dto.SoftwareTestOrderDto; import com.zt.life.modules.project.model.*; import com.zt.life.modules.sysBaseInfo.model.TestAgencyInfo; 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.cloud.LocalStorageService; import com.zt.modules.oss.model.SysOss; import com.zt.modules.oss.service.SysOssService; import com.zt.modules.sys.service.SysDictTypeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.zt.common.db.query.QueryFilter; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileNotFoundException; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** @@ -34,7 +51,10 @@ private EnvironHardwareResourcesService environHardwareResourcesService; @Autowired private SoftwareTestOrderService softwareTestOrderService; private GetShowDictList getShowDictList; @Autowired private WordFileService wordFileService; @Autowired private SysCodeRuleService sysCodeRuleService; @@ -54,10 +74,16 @@ @Autowired private SysOssService sysOssService; @Autowired private LocalStorageService localStorageService; @Value("${zt.oss.local-path}") private String localPath; public EnvironDto getDto(Long environId, Long projectId) { EnvironDto data = new EnvironDto(); if (environId != null) { data.setId(environId); Environ environ = this.get(environId); data.setEnviron(environ); data.setTestAgencyInfo(testAgencyInfoService.get(environId)); @@ -72,7 +98,7 @@ List<EnvironAnalysis> environAnalysesList = environAnalysisService.getList(environId); data.setEnvironAnalysisList(environAnalysesList); } else { Environ environ =new Environ(); Environ environ = new Environ(); data.setEnviron(environ); } if (projectId != null) { @@ -81,6 +107,12 @@ } if (data.getTestAgencyInfo() == null) data.setTestAgencyInfo(testAgencyInfoService.get(10000L)); if (environId != null) { OssDto ossDto = sysOssConfigService.getOssByBusiType(environId, "test_environt_diagram"); if (ossDto != null) { data.setFiles(ossDto); } } return data; } @@ -113,7 +145,7 @@ String year = sdf.format(new Date()); Map<String, String> map = new HashMap<>(); map.put("funCode", "environ"); map.put("projectId",environDto.getProjectId().toString()); map.put("projectId", environDto.getProjectId().toString()); environDto.getEnviron().setYear(year); environDto.getEnviron().setProjectId(environDto.getProjectId()); environDto.getEnviron().setCode(sysCodeRuleService.getNewCode(map)); @@ -167,4 +199,42 @@ sysOssConfigService.updateOss(environDto.getEnviron().getId(), environDto.getFiles());// 保存附件 return true; } public void exportEnviron(Long id, HttpServletRequest request, HttpServletResponse response) { try { EnvironDto dataObj = this.getDto(id, null); String imagePath = "文件图片:"+getFirstImagePath(dataObj.getFiles()); dataObj.getEnviron().setTestEnvirontDiagram(imagePath); //通用字典列表字符串生成 String isVirusScanStr = getShowDictList.getShowDictList(dataObj.getEnviron().getIsVirusScan(), "is_or_not", false); dataObj.getEnviron().setIsVirusScanStr(isVirusScanStr); WordFile wordFile = new WordFile(); wordFile.setModulePath("测试环境建立确认表.docx"); wordFile.setWordName(dataObj.getProject().getSoftwareName() + "_测试环境建立确认表.docx"); wordFileService.exportWordFile(request, dataObj, wordFile, response); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } public String getFirstImagePath(OssDto oss) { String filePath = ""; if (oss != null) { if (oss.getGroups().size() > 0) { OssDto.OssFieldGroupDto group = oss.getGroups().get(0); if (group.getFields().size() > 0) { OssDto.OssFieldDto field = group.getFields().get(0); if (field.getFiles().size() > 0) { com.zt.core.oss.dto.OssDto file = field.getFiles().get(0); SysOss sysOss = sysOssService.get(file.getId()); filePath = localPath+sysOss.getPath(); } } } } return filePath; } } web/packages/i18n/zh-CN.js
@@ -128,6 +128,7 @@ t.user.title = '用户信息' t.user.username = '用户名' t.user.avatar = '头像' t.user.sign = '签名' t.user.deptName = '所属部门' t.user.dept = '用户部门' t.user.nickName = '昵称' web/src/components/config-uploader/src/config-uploader.vue
@@ -82,13 +82,13 @@ fields() { let arr = [] if (this.dataForm.files && this.dataForm.files.groups) { console.log(this.dataForm,"fields this.dataForm") this.dataForm.files.groups.forEach(group => { group.fields.forEach(field => { let arrType = [] if (field.fileTypes) { arrType = field.fileTypes.split(',') } //this.$set(field, 'fileTypeArr', arrType) field.fileTypeArr = arrType arr.push(field) }) web/src/views/modules/project/Environ-AddOrUpdate.vue
@@ -211,10 +211,16 @@ </div> </div> </el-form> <template v-slot:footer> <el-button v-if="dataForm.disabled" type="primary" @click="print()">打印</el-button> </template> </zt-dialog> </template> <script> import qs from "qs"; import Cookies from "js-cookie"; export default { data() { return { @@ -251,11 +257,11 @@ }, methods: { init(id, row) { console.log(row, 'row') this.dataForm.id = row.id this.dataForm.projectId = row.projectId // this.dataForm.disabled this.dataForm.disabled this.getInfo() this.getImageUrl() console.log(this.dataForm.id, this.dataForm.projectId, 'params params') }, // 获取信息 @@ -265,11 +271,13 @@ projectId: this.dataForm.projectId } let res = await this.$http.get(`/project/Environ/getDto`, {params: params}) this.dataForm = { ...this.dataForm, ...res.data if (res.data) { this.dataForm = { ...this.dataForm, ...res.data } this.getImageUrl() } console.log(this.dataForm, 'this.dataForm') }, indexFormat(index) { return index += 1 @@ -295,27 +303,36 @@ tableBody.scrollTop = tableBody.scrollHeight; }) }, getImageUrl() { let pictureId = this.getFirstImageId(this.dataForm.files, 'test_environt_diagram') this.dataForm.url = `${window.SITE_CONFIG['apiURL']}/sys/oss/content2?fileId=${pictureId}` console.log(this.dataForm.url, ' this.dataForm.url') }, getFirstImageId(oss) { console.log(oss, ' getFirstImageId(oss)') let fileId = 0 if (oss != null) { if (oss.groups.length > 0) { let group = oss.groups[0] if (group.fields.length > 0) { let field = group.fields[0] if (field.files.length > 0) { let file = field.files[0] fileId = file.id } } } } return fileId getImageUrl() { let pictureId = this.getFirstImageId(this.dataForm.files) this.dataForm.url = `${window.SITE_CONFIG['apiURL']}/sys/oss/content2?fileId=${pictureId}` console.log(this.dataForm.url, ' this.dataForm.url') }, getFirstImageId(oss) { console.log(oss, ' getFirstImageId(oss)') let fileId = 0 if (oss != null) { if (oss.groups.length > 0) { let group = oss.groups[0] if (group.fields.length > 0) { let field = group.fields[0] if (field.files.length > 0) { let file = field.files[0] fileId = file.id } } } } return fileId }, async print() { console.log(this.dataForm) let params = qs.stringify({ token: Cookies.get('token'), id: this.dataForm.id }) let apiURL = `/project/Environ/exportEnviron/` window.location.href = `${window.SITE_CONFIG['apiURL']}${apiURL}?${params}` }, // 表单提交 async formSubmit() { web/src/views/modules/sys/user-add-or-update.vue
@@ -6,9 +6,13 @@ <template slot="title"> <el-tag>{{ $t('user.title') }}</el-tag> </template> <el-form-item prop="avatar" :label="$t('user.avatar')"> <zt-uploader v-model="dataForm.avatar" crop :size="60"/> </el-form-item> <config-uploader busi-type="users" model-name="dataForm" :dataForm="dataForm" @getImageUrl="getImageUrl" v-model="dataForm.files"/> <div v-if="dataForm.url" > <el-image :src="dataForm.url" v-for="url in dataForm.url" :key="url[0,1]"></el-image> </div> <zt-form-item prop="username" :label="$t('user.username')" rules="required"> <el-input v-model="dataForm.username" :placeholder="$t('user.username')"></el-input> </zt-form-item> @@ -102,6 +106,7 @@ register:0, teamgroupIds:'', shipIds: '', url: [] } } }, @@ -140,6 +145,8 @@ ...this.dataForm, ...res.data } this.getImageUrl() console.log(this.dataForm,"getInfo this.dataForm ") } }, onDeptSelect(data, isChange) { @@ -155,6 +162,36 @@ this.dataForm.postIdList = [] } }, getImageUrl() { let pictureId=[]; pictureId = this.getFirstImageId(this.dataForm.files) for (let i=0;i<=pictureId.length;i++){ pictureId=pictureId[i] this.dataForm.url[i] = `${window.SITE_CONFIG['apiURL']}/sys/oss/content2?fileId=${pictureId}` console.log(this.dataForm.url[i], ' this.dataForm.url') } }, getFirstImageId(oss) { console.log(oss, ' getFirstImageId(oss)') let fileId = [] if (oss != null) { if (oss.groups.length > 0) { let group1 = oss.groups[0] let group2 = oss.groups[0] if (group1.fields.length > 0 ||group2.fields.length > 0 ) { let field1 = group1.fields[0] let field2 = group2.fields[0] if (field1.files.length > 0 || field2.files.length > 0) { let file1 = field1.files[0] let file2 = field2.files[0] fileId[0]=file1.id fileId[1]=file2.id } } } } return fileId }, // 表单提交 async formSubmit() { this.dataForm.companyId = this.companyId zt/common/src/main/java/com/zt/core/oss/service/ISysOssConfigService.java
New file @@ -0,0 +1,6 @@ package com.zt.core.oss.service; public interface ISysOssConfigService { void updateOss(Long busiId, com.zt.life.sys.dto.OssDto dto); com.zt.life.sys.dto.OssDto getOssByBusiType(Long busiId, String busiType); } zt/common/src/main/java/com/zt/core/oss/service/ISysOssService.java
@@ -11,6 +11,7 @@ void setOssField(BaseEntity entity); void updateBusiInfo(BaseEntity entity); void updateBusiInfo(Long busiId, String busiType, String busiTypeName, String busiField, String busiFieldName, zt/common/src/main/java/com/zt/core/sys/model/SysUser.java
@@ -18,12 +18,13 @@ import com.zt.common.annotation.OssField; import com.zt.common.entity.BusiEntity; import com.zt.common.validator.group.DefaultGroup; import com.zt.core.oss.dto.OssDto; import com.zt.life.sys.dto.OssDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.hibernate.validator.constraints.Range; import org.springframework.context.annotation.Lazy; import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.Email; @@ -42,6 +43,7 @@ @EqualsAndHashCode(callSuper = false) @TableName("SYS_USER") public class SysUser extends BusiEntity { private static final long serialVersionUID = 1L; @TableField(exist = false) @ApiModelProperty(value = "用户名", required = false) @@ -147,7 +149,7 @@ @OssField("用户头像") @ApiModelProperty(value = "用户头像") @TableField(exist = false) private OssDto avatar; private OssDto files; @ApiModelProperty(value = "岗位ID列表") @TableField(exist = false) zt/common/src/main/java/com/zt/life/sys/dto/OssDto.java
New file @@ -0,0 +1,112 @@ package com.zt.life.sys.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * SYS_OSS_CONFIG * * @author zt generator * @since 1.0.0 2020-08-25 */ @Data public class OssDto implements Serializable, Cloneable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "模块分类") private String busiType; @ApiModelProperty(value = "模块名称") private String busiTypeName; @ApiModelProperty(value = "分组") private List<OssFieldGroupDto> groups = new ArrayList<>(); public OssDto() { } public OssDto(String busiType, String busiTypeName) { this.busiType = busiType; this.busiTypeName = busiTypeName; } @Override public OssDto clone() throws CloneNotSupportedException { OssDto dto = (OssDto) super.clone(); List<OssFieldGroupDto> list = new ArrayList<>(); for (OssFieldGroupDto group : groups) { list.add(group.clone()); } dto.setGroups(list); return dto; } @Data public static class OssFieldGroupDto implements Serializable, Cloneable { @ApiModelProperty(value = "字段所属分组") private String busiFieldGroup; @ApiModelProperty(value = "字段") private List<OssFieldDto> fields = new ArrayList<>(); public OssFieldGroupDto() { } public OssFieldGroupDto(String busiFieldGroup) { this.busiFieldGroup = busiFieldGroup; } @Override public OssFieldGroupDto clone() throws CloneNotSupportedException { OssFieldGroupDto dto = (OssFieldGroupDto) super.clone(); List<OssFieldDto> list = new ArrayList<>(); for (OssFieldDto field : fields) { list.add(field.clone()); } dto.setFields(list); return dto; } } @Data public static class OssFieldDto implements Serializable, Cloneable { @ApiModelProperty(value = "字段") private String busiField; @ApiModelProperty(value = "字段名称") private String busiFieldName; @ApiModelProperty(value = "可上传文件类型") private String accept; @ApiModelProperty(value = "可上传文件后缀") private String fileTypes; @ApiModelProperty(value = "文件大小限制(MB)") private BigDecimal fileSize; @ApiModelProperty(value = "文件个数") private Integer fileLimit; @ApiModelProperty(value = "排序") private Integer sort; @ApiModelProperty(value = "是否必填") private Boolean isRequired; @ApiModelProperty(value = "字段") private List<com.zt.core.oss.dto.OssDto> files = new ArrayList<>(); @Override public OssFieldDto clone() throws CloneNotSupportedException { OssFieldDto dto = (OssFieldDto) super.clone(); dto.setFiles(new ArrayList<>()); return dto; } } } zt/core/src/main/java/com/zt/modules/oss/cloud/LocalStorageService.java
@@ -237,7 +237,6 @@ is.close(); out.flush(); out.close(); } } } zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java
@@ -26,8 +26,10 @@ import com.zt.common.validator.group.UpdateGroup; import com.zt.core.context.User; import com.zt.core.context.UserContext; import com.zt.core.oss.service.ISysOssConfigService; import com.zt.core.security.Md5Utils; import com.zt.core.sys.model.SysUser; import com.zt.life.sys.dto.OssDto; import com.zt.modules.sys.dto.MapDto; import com.zt.modules.sys.dto.PasswordDto; import com.zt.modules.sys.dto.UserRoleDto; @@ -65,7 +67,8 @@ private SysPostUserService sysPostUserService; @Autowired private SysJobUserService sysJobUserService; @Autowired private ISysOssConfigService sysOssConfigService; @Autowired private SysMapService sysMapService; @@ -101,7 +104,12 @@ @RequiresPermissions("sys:user:info") public Result<SysUser> get(@PathVariable("id") Long id) { SysUser data = sysUserService.get(id); if (data != null) { OssDto ossDto= sysOssConfigService.getOssByBusiType(data.getId() , "users"); if (ossDto != null) { data.setFiles(ossDto); } } // 用户岗位列表 data.setPostIdList(sysPostUserService.getUserPosts(id).stream().map(post -> post.getId()) .collect(Collectors.toList())); zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java
@@ -21,11 +21,14 @@ import com.zt.common.utils.TreeUtils; import com.zt.core.context.User; import com.zt.core.context.UserContext; import com.zt.core.oss.service.ISysOssConfigService; import com.zt.core.oss.service.ISysOssService; import com.zt.core.security.BCryptPasswordEncoder; import com.zt.core.security.Md5Utils; import com.zt.core.sys.model.SysDept; import com.zt.core.sys.model.SysUser; import com.zt.core.sys.service.ISysUserService; import com.zt.life.sys.dto.OssDto; import com.zt.modules.sys.dao.SysUserDao; import com.zt.modules.sys.dto.RoleDto; import com.zt.modules.sys.dto.UserTreeDto; @@ -34,6 +37,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -60,6 +64,9 @@ private SysParamsService paramsService; @Autowired SysMapService sysMapService; @Autowired private ISysOssConfigService sysOssConfigService; public List<SysUser> page(QueryFilter queryFilter) { @@ -159,6 +166,7 @@ entity.setCompanyId(sysDeptService.getCompanyIdByDeptId(entity.getDeptId())); // 保存用户 sysOssConfigService.updateOss(entity.getId(), entity.getFiles()); super.insert(entity); sysPostUserService.saveOrUpdate(entity.getId(), entity.getPostIdList()); @@ -171,6 +179,7 @@ public void update(SysUser entity) { // 更新用户 entity.setCompanyId(sysDeptService.getCompanyIdByDeptId(entity.getDeptId())); sysOssConfigService.updateOss(entity.getId(), entity.getFiles()); super.update(entity); // 保存岗位用户关系