Просмотр исходного кода

Merge branch 'master' of http://192.168.2.241:3000/lifan/tofly-pms

wangzhun 10 месяцев назад
Родитель
Сommit
f2a41cd749

+ 1 - 1
pms-report/src/main/resources/application-pro.yml

@@ -70,4 +70,4 @@ logging:
   level:
     org.jeecg.modules.jmreport: debug
 server:
-  port: 10026
+  port: 17080

+ 14 - 0
pms-service/src/main/java/com/tofly/pms/testmanage/controller/BugInfoController.java

@@ -31,6 +31,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -89,6 +90,9 @@ public class BugInfoController {
         List<BugInfo> records = page1.getRecords();
         if (CollectionUtil.isNotEmpty(records)) {
             for (BugInfo record : records) {
+                Integer functionId = record.getFunctionId();
+                String name = systemItemService.getFullNameByFunctionId(functionId);
+                record.setFullFunctionName(name);
                 String adviseDate = record.getAdviseTime();
                 Date startDate = null;
                 if (StringUtils.isNotBlank(adviseDate)) {
@@ -439,4 +443,14 @@ public class BugInfoController {
         return ResponseEntity.ok(b);
     }
 
+
+    @ApiOperation("导出excel")
+    @GetMapping("/export")
+    public void export(@RequestParam(name = "projectId", required = false) Integer projectId,
+                       @RequestParam(name = "systemId", required = false) Integer systemId,
+                       @RequestParam(name = "headId", required = false) String headId,
+                       @RequestParam(name = "createUser", required = false) String createUser) throws IOException {
+        bugInfoService.export(projectId, systemId, headId, createUser);
+    }
+
 }

+ 8 - 2
pms-service/src/main/java/com/tofly/pms/testmanage/controller/SystemItemWController.java

@@ -125,8 +125,11 @@ public class SystemItemWController {
             if (collect.size() < 1) {
                 collect.add(999999);
             }
+            String name = systemItem.getName();
+            systemItem.setName(null);
             page1 = systemItemService.page(page, new QueryWrapper<>(systemItem)
                     .lambda()
+                            .like(StringUtils.isNotBlank(name), SystemItem::getName, name)
                     .in(SystemItem::getId, collect)
                     .last("ORDER BY CASE WHEN split_part(number, '.', 1) ~ '^[0-9]+$' THEN split_part(number, '.', 1) ::integer ELSE 0 END,\n" +
                             "         CASE WHEN split_part(number, '.', 2) ~ '^[0-9]+$' THEN split_part(number, '.', 2) ::integer ELSE 0 END,\n" +
@@ -138,9 +141,12 @@ public class SystemItemWController {
                             "         CASE WHEN split_part(number, '.', 8) ~ '^[0-9]+$' THEN split_part(number, '.', 7) ::integer ELSE 0 END,\n" +
                             "         CASE WHEN split_part(number, '.', 9) ~ '^[0-9]+$' THEN split_part(number, '.', 7) ::integer ELSE 0 END"));
         } else {
-
+            String name = systemItem.getName();
+            systemItem.setName(null);
             page1 = systemItemService.page(page, new QueryWrapper<>(systemItem)
-                    .lambda().last("ORDER BY CASE WHEN split_part(number, '.', 1) ~ '^[0-9]+$' THEN split_part(number, '.', 1) ::integer ELSE 0 END,\n" +
+                    .lambda()
+                    .like(StringUtils.isNotBlank(name), SystemItem::getName, name)
+                    .last("ORDER BY CASE WHEN split_part(number, '.', 1) ~ '^[0-9]+$' THEN split_part(number, '.', 1) ::integer ELSE 0 END,\n" +
                             "         CASE WHEN split_part(number, '.', 2) ~ '^[0-9]+$' THEN split_part(number, '.', 2) ::integer ELSE 0 END,\n" +
                             "         CASE WHEN split_part(number, '.', 3) ~ '^[0-9]+$' THEN split_part(number, '.', 3) ::integer ELSE 0 END,\n" +
                             "         CASE WHEN split_part(number, '.', 4) ~ '^[0-9]+$' THEN split_part(number, '.', 4) ::integer ELSE 0 END,\n" +

+ 51 - 0
pms-service/src/main/java/com/tofly/pms/testmanage/entity/BugInfoExcelModel.java

@@ -0,0 +1,51 @@
+package com.tofly.pms.testmanage.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
+import com.tofly.pms.utils.dict.Dict;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author sheldon
+ * @Description
+ * @create 2024-05-21 14:46
+ */
+@Data
+public class BugInfoExcelModel {
+    @ExcelProperty(value = "序号", index = 0)
+    private String number;
+    @ExcelProperty(value = "项目名称", index = 1)
+    private String projectName;
+    @ExcelProperty(value = "系统名称", index = 2)
+    private String systemName;
+    @ExcelProperty(value = "模块名称", index = 3)
+    private String functionName;
+    @ExcelProperty(value = "Bug标题", index = 4)
+    private String title;
+    @ExcelProperty(value = "紧急程度", index = 5)
+    private String urgency;
+    @ExcelProperty(value = "严重程度", index = 6)
+    private String severity;
+    @ExcelProperty(value = "负责人", index = 7)
+    private String headUser;
+    @ExcelProperty(value = "创建时间", index = 8)
+    @DateTimeFormat("yyyy-MM-dd")
+    private Date createTime;
+    @ExcelProperty(value = "创建人", index = 9)
+    private String createUserName;
+    @ExcelProperty(value = "状态", index = 10)
+    private String status;
+    @ExcelProperty(value = "确认人", index = 11)
+    private String sureUser;
+    //    @Dict(code = "CSLX")
+    @ExcelProperty(value = "测试类型", index = 12)
+    private String testType;
+    //    @Dict(code = "BUGLX")
+    @ExcelProperty(value = "缺陷类型", index = 13)
+    private String type;
+
+
+}

+ 6 - 0
pms-service/src/main/java/com/tofly/pms/testmanage/mapper/BugInfoMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.tofly.pms.testmanage.entity.BugInfo;
+import com.tofly.pms.testmanage.entity.BugInfoExcelModel;
 import com.tofly.pms.testmanage.entity.StatisticsBug;
 import com.tofly.pms.testmanage.vo.BugStatusCountOverProjectVo;
 import com.tofly.pms.testmanage.vo.BugStatusCountVo;
@@ -64,4 +65,9 @@ public interface BugInfoMapper extends BaseMapper<BugInfo> {
                                              @Param("startTime") LocalDateTime startTime,
                                              @Param("endTime") LocalDateTime endTime,
                                              @Param("fix")Integer fix);
+
+    List<BugInfoExcelModel> getExportData(@Param("projectId")Integer projectId,
+                                          @Param("systemId")Integer systemId,
+                                          @Param("headId")String headId,
+                                          @Param("createUser")String createUser);
 }

+ 3 - 0
pms-service/src/main/java/com/tofly/pms/testmanage/service/BugInfoService.java

@@ -9,6 +9,7 @@ import com.tofly.pms.testmanage.vo.ToResolveCountVo;
 import com.tofly.pms.testmanage.vo.ToSureLeftVo;
 import com.tofly.pms.working.vo.TestTypeCountVo;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -49,4 +50,6 @@ public interface BugInfoService  extends BaseService<BugInfo> {
     List<StatisticsBug> getStatisticalBySure(Integer projectId, String startSearchTime, String endSearchTime, Integer fix);
 
     void updateBugInfo(BugInfo bugInfo);
+
+    void export(Integer projectId, Integer systemId, String headId, String createUser) throws IOException;
 }

+ 48 - 4
pms-service/src/main/java/com/tofly/pms/testmanage/service/impl/BugInfoServiceImpl.java

@@ -4,15 +4,16 @@ import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.tofly.pms.fegin.DictItemClient;
 import com.tofly.pms.fegin.UserClient;
 import com.tofly.pms.fegin.vo.UserVo;
-import com.tofly.pms.testmanage.entity.BugInfo;
-import com.tofly.pms.testmanage.entity.BugLog;
-import com.tofly.pms.testmanage.entity.StatisticsBug;
+import com.tofly.pms.testmanage.entity.*;
 import com.tofly.pms.testmanage.mapper.BugInfoMapper;
 import com.tofly.pms.testmanage.service.BugInfoService;
 import com.tofly.pms.testmanage.service.BugLogService;
@@ -26,6 +27,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -45,6 +49,8 @@ public class BugInfoServiceImpl extends ServiceImpl<BugInfoMapper, BugInfo>
     private BugLogService bugLogService;
     @Resource
     private EditorlogService editorlogService;
+    @Resource
+    HttpServletResponse response;
 
     @Override
     public BugInfo queryById(Integer id) {
@@ -71,7 +77,7 @@ public class BugInfoServiceImpl extends ServiceImpl<BugInfoMapper, BugInfo>
         bugInfo.setDescription(null);
         LambdaQueryWrapper<BugInfo> wrapper = Wrappers
                 .lambdaQuery(bugInfo)
-                .eq(BugInfo::getDeleted,0)
+                .eq(BugInfo::getDeleted, 0)
                 .like(BugInfo::getHeadId, tokenUserID)
                 .eq(com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(severity), BugInfo::getSeverity, severity)
                 .eq(com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(urgency), BugInfo::getUrgency, urgency)
@@ -261,6 +267,44 @@ public class BugInfoServiceImpl extends ServiceImpl<BugInfoMapper, BugInfo>
         baseMapper.updateById(bugInfo);
     }
 
+    @Override
+    public void export(Integer projectId, Integer systemId, String headId, String createUser) throws IOException {
+        List<BugInfoExcelModel> data = baseMapper.getExportData(projectId, systemId, headId, createUser);
+        DictItemClient bean = SpringUtil.getBean(DictItemClient.class);
+        UserClient userClient = SpringUtil.getBean(UserClient.class);
+        for (BugInfoExcelModel datum : data) {
+            String status = bean.getDicItemText("RWZT", datum.getStatus());
+            String severity = bean.getDicItemText("YZCD", datum.getSeverity());
+            String urgency = bean.getDicItemText("JJCD", datum.getUrgency());
+            String testType = bean.getDicItemText("CSLX", datum.getTestType());
+            String type = bean.getDicItemText("BUGLX", datum.getType());
+            datum.setStatus(status);
+            datum.setSeverity(severity);
+            datum.setUrgency(urgency);
+            datum.setTestType(testType);
+            datum.setType(type);
+            String sureUser = datum.getSureUser();
+            if(StringUtils.isNotBlank(sureUser)){
+                String[] split = sureUser.split(",");
+                 sureUser = Arrays.stream(split).filter(StringUtils::isNotBlank)
+                         .map(userClient::getUserInfo)
+                         .map(UserVo::getRealName)
+                         .collect(Collectors.joining(","));
+                 datum.setSureUser(sureUser);
+
+            }
+        }
+
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
+        String fileName = URLEncoder.encode("缺陷清单", "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), BugInfoExcelModel.class)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                .sheet("缺陷清单").doWrite(data);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean save(BugInfo entity) {

+ 37 - 0
pms-service/src/main/resources/mapper/BugInfoMapper.xml

@@ -369,4 +369,41 @@
         GROUP BY u.sure_id, t.bug_type
         order by u.sure_id, t.bug_type
     </select>
+    <select id="getExportData" resultType="com.tofly.pms.testmanage.entity.BugInfoExcelModel">
+        select
+        row_number() OVER (ORDER BY bug.id) as number,
+        project.name as projectName,
+        testsystem.name as systemName,
+        bug.title as title,
+        bug.severity as severity,
+        bug.urgency as urgency,
+        bug.status as status,
+        bug.create_time as createTime,
+        bug.type,
+        bug.test_type,
+        head.real_name as headUser,
+        cu.real_name as createUserName,
+        sysitem.name as functionName,
+        concat(bug.sure_id,',',bug.already_sure_id) as sureUser
+        from business.tf_pm_bug_w bug
+        left join business.tf_pm_project_w project on bug.project_id = project.id
+        left join business.tf_pm_testsystem_w testsystem on bug.system_id = testsystem.id
+        left join business.tf_pm_testsystemitem_w sysitem on bug.function_id = sysitem.id
+        left join public.sys_user head on bug.head_id = head.id
+        left join public.sys_user cu on bug.create_user = cu.id
+        where bug.deleted = 0
+        <if test="projectId != null">
+            and bug.project_id = #{projectId}
+        </if>
+        <if test="systemId != null">
+            and bug.system_id = #{systemId}
+        </if>
+        <if test="headId != null and headId != ''">
+            and bug.head_id = #{headId}
+        </if>
+        <if test="createUser != null and createUser != ''">
+            and bug.create_user = #{createUser}
+        </if>
+
+    </select>
 </mapper>