From c68b6951e11483bdf8f2153cd4c9829ca669b4e2 Mon Sep 17 00:00:00 2001 From: guoqibing Date: Thu, 24 Jul 2025 13:30:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=9C=AA=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E4=B8=AD=E4=B9=9F=E8=AE=A1=E7=AE=97=E5=B7=A5?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=B5=8B=E8=AF=95=E4=BB=BB=E5=8A=A1=E6=8F=90?= =?UTF-8?q?=E5=87=BA=E7=8E=87=E4=BF=AE=E6=94=B9=E4=B8=BA=E6=8C=89=E7=85=A7?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sa/zentao/ZentaoApplication.java | 69 ----- .../controller/CarManageController.java | 4 +- ...ller.java => ZtBugBindUserController.java} | 11 +- .../zentao/controller/ZtCountController.java | 9 - .../controller/ZtReleaseController.java | 2 - .../com/sa/zentao/dao/CarFiveTypeDTO.java | 2 + .../com/sa/zentao/entity/CarFiveType.java | 2 + src/main/java/com/sa/zentao/entity/ZtBug.java | 23 +- ...ZtBugBoundUser.java => ZtBugBindUser.java} | 2 +- .../com/sa/zentao/enums/BugTypeEnums.java | 30 ++ ...erMapper.java => ZtBugBindUserMapper.java} | 4 +- .../com/sa/zentao/mapper/ZtBugMapper.java | 13 +- ...ervice.java => IZtBugBindUserService.java} | 6 +- .../com/sa/zentao/service/IZtBugService.java | 14 +- .../com/sa/zentao/service/IZtTaskService.java | 5 - .../zentao/service/impl/CarManageService.java | 40 ++- .../zentao/service/impl/IZtCountService.java | 265 +++++++----------- ...mpl.java => ZtBugBindUserServiceImpl.java} | 12 +- .../zentao/service/impl/ZtBugServiceImpl.java | 53 ++-- .../service/impl/ZtProjectServiceImpl.java | 29 +- .../service/impl/ZtReleaseServiceImpl.java | 18 +- .../service/impl/ZtTaskServiceImpl.java | 78 +++--- .../com/sa/zentao/utils/SFunctionColums.java | 185 +++++++++--- ...UserMapper.xml => ZtBugBindUserMapper.xml} | 4 +- src/main/resources/mapper/ZtBugMapper.xml | 117 +++++++- src/main/resources/mapper/ZtTaskMapper.xml | 6 +- 26 files changed, 587 insertions(+), 416 deletions(-) rename src/main/java/com/sa/zentao/controller/{ZtBugBoundUserController.java => ZtBugBindUserController.java} (50%) rename src/main/java/com/sa/zentao/entity/{ZtBugBoundUser.java => ZtBugBindUser.java} (91%) create mode 100644 src/main/java/com/sa/zentao/enums/BugTypeEnums.java rename src/main/java/com/sa/zentao/mapper/{ZtBugBoundUserMapper.java => ZtBugBindUserMapper.java} (58%) rename src/main/java/com/sa/zentao/service/{IZtBugBoundUserService.java => IZtBugBindUserService.java} (53%) rename src/main/java/com/sa/zentao/service/impl/{ZtBugBoundUserServiceImpl.java => ZtBugBindUserServiceImpl.java} (51%) rename src/main/resources/mapper/{ZtBugBoundUserMapper.xml => ZtBugBindUserMapper.xml} (84%) diff --git a/src/main/java/com/sa/zentao/ZentaoApplication.java b/src/main/java/com/sa/zentao/ZentaoApplication.java index e747ecc..cf22354 100644 --- a/src/main/java/com/sa/zentao/ZentaoApplication.java +++ b/src/main/java/com/sa/zentao/ZentaoApplication.java @@ -1,42 +1,10 @@ package com.sa.zentao; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.write.metadata.WriteSheet; -import com.tencentcloudapi.ses.v20201002.models.EmailSender; -import lombok.SneakyThrows; -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.util.Iterator; - -import org.apache.poi.ss.usermodel.DateUtil; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFCellStyle; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; //,exclude = DataSourceAutoConfiguration.class @SpringBootApplication(scanBasePackages = {"com.sa.zentao"}) @@ -49,41 +17,4 @@ public class ZentaoApplication { SpringApplication.run(ZentaoApplication.class, args); } - - -// public static void main(String[] args) { -// // 定义数据 -// Map dataMap = new HashMap<>(); -// dataMap.put("name", "张三"); -// dataMap.put("age", "28"); -// -// // 读取模板 -// try (FileInputStream templateFile =(FileInputStream)ZentaoApplication.class.getClassLoader().getResourceAsStream("templates/scope测试.xlsx")) { -// Workbook workbook = WorkbookFactory.create(templateFile); -// Sheet sheet = workbook.getSheetAt(0); -// -// // 替换占位符 -// for (Row row : sheet) { -// for (Cell cell : row) { -// if (cell.getCellType() == CellType.STRING) { -// String cellValue = cell.getStringCellValue(); -// for (Map.Entry entry : dataMap.entrySet()) { -// cellValue = cellValue.replace("${" + entry.getKey() + "}", entry.getValue()); -// } -// cell.setCellValue(cellValue); -// } -// } -// } -// -// // 生成新文件 -// try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) { -// workbook.write(outputStream); -// } -// workbook.close(); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// } - } diff --git a/src/main/java/com/sa/zentao/controller/CarManageController.java b/src/main/java/com/sa/zentao/controller/CarManageController.java index d11a39e..3936fe0 100644 --- a/src/main/java/com/sa/zentao/controller/CarManageController.java +++ b/src/main/java/com/sa/zentao/controller/CarManageController.java @@ -39,14 +39,14 @@ public class CarManageController { * @return */ @GetMapping("/searchFive") - public Result removeFile(@RequestParam(value = "plate",required = true)String plate,@RequestParam(value = "model",required = false)String model){ + public Result removeFile(@RequestParam(value = "plate",required = true)String plate,@RequestParam(value = "model",required = false)String model,@RequestParam(value = "userName",required = false)String userName){ if(plate.length()==8&&"02".equals(model)){ model="52"; } if(plate.length()==8&&"01".equals(model)){ model="51"; } - CarFiveType carFiveType = carManageService.searchFive(plate, model); + CarFiveType carFiveType = carManageService.searchFive(plate, model,userName); if(carFiveType!=null){ CarFiveTypeDTO carFiveTypeDTO = new CarFiveTypeDTO(); BeanUtils.copyProperties(carFiveType,carFiveTypeDTO); diff --git a/src/main/java/com/sa/zentao/controller/ZtBugBoundUserController.java b/src/main/java/com/sa/zentao/controller/ZtBugBindUserController.java similarity index 50% rename from src/main/java/com/sa/zentao/controller/ZtBugBoundUserController.java rename to src/main/java/com/sa/zentao/controller/ZtBugBindUserController.java index 01d4416..b719010 100644 --- a/src/main/java/com/sa/zentao/controller/ZtBugBoundUserController.java +++ b/src/main/java/com/sa/zentao/controller/ZtBugBindUserController.java @@ -1,6 +1,9 @@ package com.sa.zentao.controller; +import com.sa.zentao.dao.Result; +import com.sa.zentao.dao.UploadDTO; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +18,12 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/zt-bug-bound-user") -public class ZtBugBoundUserController { +public class ZtBugBindUserController { + + @PostMapping("/test") + public Result upload(String name1,String name2){ + + return Result.success(""); + } } diff --git a/src/main/java/com/sa/zentao/controller/ZtCountController.java b/src/main/java/com/sa/zentao/controller/ZtCountController.java index c86f785..7e14cf9 100644 --- a/src/main/java/com/sa/zentao/controller/ZtCountController.java +++ b/src/main/java/com/sa/zentao/controller/ZtCountController.java @@ -1,25 +1,16 @@ package com.sa.zentao.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.sa.zentao.conf.LoginRiskUser; -import com.sa.zentao.conf.RiskUserThreadLocal; import com.sa.zentao.dao.*; -import com.sa.zentao.entity.ZtBug; import com.sa.zentao.entity.ZtProject; -import com.sa.zentao.entity.ZtStory; -import com.sa.zentao.entity.ZtTask; import com.sa.zentao.qo.ZtCountQo; import com.sa.zentao.qo.ZtProjectQo; -import com.sa.zentao.service.IZtBugService; import com.sa.zentao.service.IZtProjectService; -import com.sa.zentao.service.IZtStoryService; -import com.sa.zentao.service.IZtTaskService; import com.sa.zentao.service.impl.IZtCountService; import com.sa.zentao.utils.DateUtils; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import lombok.SneakyThrows; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestBody; diff --git a/src/main/java/com/sa/zentao/controller/ZtReleaseController.java b/src/main/java/com/sa/zentao/controller/ZtReleaseController.java index a7d2248..186ebb6 100644 --- a/src/main/java/com/sa/zentao/controller/ZtReleaseController.java +++ b/src/main/java/com/sa/zentao/controller/ZtReleaseController.java @@ -158,6 +158,4 @@ public class ZtReleaseController { } - - } diff --git a/src/main/java/com/sa/zentao/dao/CarFiveTypeDTO.java b/src/main/java/com/sa/zentao/dao/CarFiveTypeDTO.java index d87254d..5023c71 100644 --- a/src/main/java/com/sa/zentao/dao/CarFiveTypeDTO.java +++ b/src/main/java/com/sa/zentao/dao/CarFiveTypeDTO.java @@ -80,4 +80,6 @@ public class CarFiveTypeDTO implements Serializable { */ private Integer status; + private String userName; + } diff --git a/src/main/java/com/sa/zentao/entity/CarFiveType.java b/src/main/java/com/sa/zentao/entity/CarFiveType.java index 11c4ec4..dfec37d 100644 --- a/src/main/java/com/sa/zentao/entity/CarFiveType.java +++ b/src/main/java/com/sa/zentao/entity/CarFiveType.java @@ -88,4 +88,6 @@ public class CarFiveType implements Serializable { private Integer status; private String model; + + private String userName; } diff --git a/src/main/java/com/sa/zentao/entity/ZtBug.java b/src/main/java/com/sa/zentao/entity/ZtBug.java index 3fa850d..fdd6d2f 100644 --- a/src/main/java/com/sa/zentao/entity/ZtBug.java +++ b/src/main/java/com/sa/zentao/entity/ZtBug.java @@ -2,9 +2,7 @@ package com.sa.zentao.entity; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; -import java.time.LocalDate; import com.baomidou.mybatisplus.annotation.TableId; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.TableField; import java.io.Serializable; import java.util.Date; @@ -78,17 +76,11 @@ public class ZtBug implements Serializable { private String steps; -// unconfirmed -// confirmed -// fixing -// fixed -// testing -// tested -// closed - // ZtBug 已完成 - //1.active 2.confire=1 3.解决进行中 不变 4 resolved 完成 5.测试中不变 6.测试完毕不变 verified验收 - // 'active','resolved','closed'? cancel - // active 激活 + /** + * active 2.confire=1 3.解决进行中 不变 4 resolved 完成 5.测试中不变 6.测试完毕不变 verified验收 + * 'active','resolved','closed'? cancel + * active 激活 + */ @TableField("`status`") private String status; @@ -199,7 +191,7 @@ public class ZtBug implements Serializable { private String fileUrl; - // dev prod + // dev prod releaseBug private String bugType; private String ysUser; @@ -207,4 +199,7 @@ public class ZtBug implements Serializable { private Integer ysFlag; private String ysRemark; private Integer releaseFlag; + //关联用户 + @TableField(exist = false) + private String bindUser; } diff --git a/src/main/java/com/sa/zentao/entity/ZtBugBoundUser.java b/src/main/java/com/sa/zentao/entity/ZtBugBindUser.java similarity index 91% rename from src/main/java/com/sa/zentao/entity/ZtBugBoundUser.java rename to src/main/java/com/sa/zentao/entity/ZtBugBindUser.java index 999c5b5..aacb299 100644 --- a/src/main/java/com/sa/zentao/entity/ZtBugBoundUser.java +++ b/src/main/java/com/sa/zentao/entity/ZtBugBindUser.java @@ -17,7 +17,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = false) -public class ZtBugBoundUser implements Serializable { +public class ZtBugBindUser implements Serializable { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/sa/zentao/enums/BugTypeEnums.java b/src/main/java/com/sa/zentao/enums/BugTypeEnums.java new file mode 100644 index 0000000..5a9dda5 --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/BugTypeEnums.java @@ -0,0 +1,30 @@ +package com.sa.zentao.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; + +public enum BugTypeEnums { + + DEV(1, "dev"), + PROD(2, "prod"), + RELEASE(3, "releaseBug"), + + ; + + + private int code; + @EnumValue + private String value; + + private BugTypeEnums(int code, String value) { + this.code = code; + this.value = value; + } + + public int getCode() { + return this.code; + } + + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/sa/zentao/mapper/ZtBugBoundUserMapper.java b/src/main/java/com/sa/zentao/mapper/ZtBugBindUserMapper.java similarity index 58% rename from src/main/java/com/sa/zentao/mapper/ZtBugBoundUserMapper.java rename to src/main/java/com/sa/zentao/mapper/ZtBugBindUserMapper.java index 7a1bb87..d890b2e 100644 --- a/src/main/java/com/sa/zentao/mapper/ZtBugBoundUserMapper.java +++ b/src/main/java/com/sa/zentao/mapper/ZtBugBindUserMapper.java @@ -1,6 +1,6 @@ package com.sa.zentao.mapper; -import com.sa.zentao.entity.ZtBugBoundUser; +import com.sa.zentao.entity.ZtBugBindUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** @@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @author gqb * @since 2025-05-13 */ -public interface ZtBugBoundUserMapper extends BaseMapper { +public interface ZtBugBindUserMapper extends BaseMapper { } diff --git a/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java b/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java index aa3f93d..311a4ca 100644 --- a/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java +++ b/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java @@ -3,6 +3,7 @@ package com.sa.zentao.mapper; import com.sa.zentao.dao.ZtBugDTO; import com.sa.zentao.entity.ZtBug; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sa.zentao.enums.BugTypeEnums; import com.sa.zentao.qo.ZtProjectQo; import org.apache.ibatis.annotations.Param; @@ -29,5 +30,15 @@ public interface ZtBugMapper extends BaseMapper { List bugListByProjectAndDate(@Param("pIds")List pIds, @Param("start")Date start,@Param("end") Date lastDayOfMonth); - List bugBoundsListByProjectAndDate(@Param("pIds")List pIds,@Param("start") Date firstDayOfMonth, @Param("end")Date lastDayOfMonth,@Param("account") String account); + /** + * + * @param pIds 产品及 + * @param firstDayOfMonth 开始 + * @param lastDayOfMonth 结束 + * @param account 账户 + * @return + */ + List bugBindsListByProjectAndDate(@Param("pIds")List pIds, @Param("start") Date firstDayOfMonth, @Param("end")Date lastDayOfMonth, @Param("account") String account, @Param("bugType") BugTypeEnums bugType); + + List bugListByTestUser(@Param("pIds")List pIds, @Param("start") Date firstDayOfMonth, @Param("end")Date lastDayOfMonth, @Param("accounts") List accounts, @Param("bugType") BugTypeEnums bugType); } diff --git a/src/main/java/com/sa/zentao/service/IZtBugBoundUserService.java b/src/main/java/com/sa/zentao/service/IZtBugBindUserService.java similarity index 53% rename from src/main/java/com/sa/zentao/service/IZtBugBoundUserService.java rename to src/main/java/com/sa/zentao/service/IZtBugBindUserService.java index 1c121e4..68f7f73 100644 --- a/src/main/java/com/sa/zentao/service/IZtBugBoundUserService.java +++ b/src/main/java/com/sa/zentao/service/IZtBugBindUserService.java @@ -1,6 +1,6 @@ package com.sa.zentao.service; -import com.sa.zentao.entity.ZtBugBoundUser; +import com.sa.zentao.entity.ZtBugBindUser; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -13,7 +13,7 @@ import java.util.List; * @author gqb * @since 2025-05-13 */ -public interface IZtBugBoundUserService extends IService { +public interface IZtBugBindUserService extends IService { - List listByBugId(Integer id); + List listByBugId(Integer id); } diff --git a/src/main/java/com/sa/zentao/service/IZtBugService.java b/src/main/java/com/sa/zentao/service/IZtBugService.java index d67fb21..0c26e29 100644 --- a/src/main/java/com/sa/zentao/service/IZtBugService.java +++ b/src/main/java/com/sa/zentao/service/IZtBugService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.sa.zentao.dao.ZtBugDTO; import com.sa.zentao.entity.ZtBug; import com.baomidou.mybatisplus.extension.service.IService; +import com.sa.zentao.enums.BugTypeEnums; import com.sa.zentao.qo.ZtBugQo; import com.sa.zentao.qo.ZtProjectQo; @@ -57,7 +58,18 @@ public interface IZtBugService extends IService { List bugListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth); - List bugBoundsListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth,String account); + List bugBindsListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth,String account, BugTypeEnums bugType); + + /** + * + * @param pIds 产品 + * @param firstDayOfMonth 开始 + * @param lastDayOfMonth 结束 + * @param accounts 用户 + * @param bugType bug类型 + * @return + */ + List bugListByTestUser(List pIds, Date firstDayOfMonth, Date lastDayOfMonth,List accounts, BugTypeEnums bugType); List getDevBugList(List bugList); diff --git a/src/main/java/com/sa/zentao/service/IZtTaskService.java b/src/main/java/com/sa/zentao/service/IZtTaskService.java index 6626f74..23e62bc 100644 --- a/src/main/java/com/sa/zentao/service/IZtTaskService.java +++ b/src/main/java/com/sa/zentao/service/IZtTaskService.java @@ -2,15 +2,11 @@ package com.sa.zentao.service; import com.github.pagehelper.PageInfo; import com.sa.zentao.dao.ItApproval; -import com.sa.zentao.dao.ZtProjectDTO; import com.sa.zentao.dao.ZtTaskDTO; -import com.sa.zentao.dao.ZtYwTaskDTO; import com.sa.zentao.entity.ZtTask; import com.baomidou.mybatisplus.extension.service.IService; import com.sa.zentao.qo.ZtProjectQo; -import org.springframework.util.CollectionUtils; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -88,7 +84,6 @@ public interface IZtTaskService extends IService { List getNormalTaskList(List tList); - List getDevelAllocation(List tList); /** * diff --git a/src/main/java/com/sa/zentao/service/impl/CarManageService.java b/src/main/java/com/sa/zentao/service/impl/CarManageService.java index f1ebd91..c197661 100644 --- a/src/main/java/com/sa/zentao/service/impl/CarManageService.java +++ b/src/main/java/com/sa/zentao/service/impl/CarManageService.java @@ -12,6 +12,7 @@ import com.sa.zentao.service.ICarDrivingLicenseService; import com.sa.zentao.service.ICarFiveTypeService; import com.sa.zentao.service.ICarOperatingVehicleLevelService; import com.sa.zentao.utils.DateUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; @@ -45,11 +46,12 @@ public class CarManageService { * @param model * @return */ - public CarFiveType searchFive(String plate,String model){ + public CarFiveType searchFive(String plate,String model,String userName){ LambdaQueryWrapper eq = new QueryWrapper().lambda().eq(CarFiveType::getPlate, plate); if(!StringUtils.isEmpty(model)){ eq.eq(CarFiveType::getModel, model); } + List list = carFiveTypeService.list(eq); if(!CollectionUtils.isEmpty(list)){ CarFiveType carFiveType = list.get(0); @@ -57,6 +59,15 @@ public class CarManageService { if(i>90){ carFiveTypeService.removeById(carFiveType.getId()); }else{ + //查询车主 + if(StringUtils.isEmpty(carFiveType.getUserName())&&!StringUtils.isEmpty(userName)){ + if(getUserYzFlag(plate,model,userName)){ + for (CarFiveType t:list){ + t.setUserName(userName); + } + this.carFiveTypeService.saveOrUpdateBatch(list); + } + } return carFiveType; } } @@ -85,7 +96,14 @@ public class CarManageService { carFiveType.setCreateTime(new Date()); carFiveType.setPlate(plate); carFiveType.setModel(model); + //查询车主 + if(!StringUtils.isEmpty(userName)){ + if(getUserYzFlag(plate,model,userName)){ + carFiveType.setUserName(userName); + } + } this.carFiveTypeService.save(carFiveType); + return carFiveType; } @@ -95,6 +113,26 @@ public class CarManageService { } + private boolean getUserYzFlag(String plate, String model, String userName) { + StringBuffer buffer = new StringBuffer(); + if(!StringUtils.isEmpty(plate)){ + buffer.append("&plateNumber=").append(plate); + } + if(!StringUtils.isEmpty(model)){ + buffer.append("&model=").append(model); + } + if(!StringUtils.isEmpty(userName)){ + buffer.append("&name=").append(userName); + } + ResponseEntity forEntity = rest.getForEntity("https://api.chequan.cn/?a=vehicleOwnerCheck&user=dgkjshdxm&token=eab3335e2ffe15b8410553cedc1f589a"+buffer.toString() , String.class); + com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(forEntity.getBody()); + if("一致".equals(jsonObject.getString("data"))){ + return true; + }else{ + return false; + } + } + /** * 查询行驶证 driving_license diff --git a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java index c3127dd..090a19d 100644 --- a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java +++ b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java @@ -202,7 +202,7 @@ public class IZtCountService { ztStory = storyService.list(new QueryWrapper() .lambda().eq(ZtStory::getDeleted, "0") .in(ZtStory::getProduct, pIds) - .ne(ZtStory::getStatus, "closed") + .notIn(ZtStory::getStatus, "closed","finished") ); } else { list = new ArrayList<>(); @@ -267,6 +267,7 @@ public class IZtCountService { } else { //延期需求改成延期任务 List tList = this.taskService.list(new QueryWrapper().lambda() + .select(SFunctionColums.taskColumes()) .in(ZtTask::getStory, ztStory.stream().map(o -> o.getId()).collect(Collectors.toList())) .notIn(ZtTask::getStatus, "pause", "cancel", "closed", "done", "reviewing") .last(" and DATE(now()) > DATE(deadline) ")); @@ -295,7 +296,7 @@ public class IZtCountService { .filter(o -> o.getYsFlag() == 1 || o.getYsFlag() == 0) .map(o -> o.getId() + "").collect(Collectors.joining(","))); - List feedbacks = this.storyFeedbackService.list(new QueryWrapper().lambda() + List feedbacks = this.storyFeedbackService.list(new QueryWrapper().lambda().select(SFunctionColums.feedbackColumes()) .in(ZtStoryFeedback::getProduct, pIds) ); @@ -671,66 +672,6 @@ public class IZtCountService { } } - private List performanceCount(ZtCountQo qo) { - - Date d = qo.getDate(); - if (d == null) { - d = new Date(); - } - Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(d); - Date lastDayOfMonth = DateUtils.getLastDayOfMonth(d); - //产品集 - Integer project = qo.getProject(); -// if(qo.){ -// -// } - List productList = this.productService.list(new QueryWrapper().lambda().eq(ZtProduct::getProgram, project)); - if (CollectionUtils.isEmpty(productList)) { - return new ArrayList<>(); - } - List projectproducts = this.projectproductService.list(new QueryWrapper().lambda() - .in(ZtProjectproduct::getProduct, productList.stream().map(o -> o.getId()).collect(Collectors.toList()))); - if (CollectionUtils.isEmpty(projectproducts)) { - return new ArrayList<>(); - } - List execList = executionprojectService.list(new QueryWrapper().lambda() - .in(ZtExecutionproject::getProject, projectproducts.stream().map(o -> o.getProject()).collect(Collectors.toList()))); - if (CollectionUtils.isEmpty(execList)) { - return new ArrayList<>(); - } - List taskList = this.taskService.list(new QueryWrapper().lambda() - .and(o -> o.between(ZtTask::getDeadline, firstDayOfMonth, lastDayOfMonth) - .or() - .between(ZtTask::getFinishedDate, firstDayOfMonth, lastDayOfMonth) - ) - .in(ZtTask::getExecution, execList.stream().map(o -> o.getExecution()) - .collect(Collectors.toList()))); - if (CollectionUtils.isEmpty(taskList)) { - return new ArrayList<>(); - } - List ztProjects = this.projectService.listByIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList())); - - List teams = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getType, "execution") - .in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList()))); - - List accountIds = teams.stream().map(o -> o.getAccount()).distinct().collect(Collectors.toList()); - if (CollectionUtils.isEmpty(accountIds)) { - return new ArrayList<>(); - } - //accountIds 成员 - - List ztUsers = this.userService.list(new QueryWrapper().lambda().in(ZtUser::getAccount, accountIds)); - - - List result = new ArrayList<>(); - - for (ZtUser u : ztUsers) { - - List approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth); - result.add(buildCsScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); - } - return result; - } private List newPerformanceCount(ZtCountQo qo) { @@ -783,6 +724,13 @@ public class IZtCountService { List result = new ArrayList<>(); + List csAccountIds = ztUsers.stream().filter(o -> o.getUserType() == UserType.CS).map(o -> o.getAccount()).collect(Collectors.toList()); + + //获取测试产生的线上bug + List releaseBugs = this.bugService.bugListByTestUser(null, firstDayOfMonth, lastDayOfMonth,csAccountIds, BugTypeEnums.RELEASE); + //获取测试需求 + List cswcStoryList = CollectionUtils.isEmpty(csAccountIds)?Collections.EMPTY_LIST:this.storyService.list(new QueryWrapper().lambda().in(ZtStory::getProduct, pids) + .in(ZtStory::getAssignedTo, csAccountIds).ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth)); for (ZtUser u : ztUsers) { @@ -794,7 +742,7 @@ public class IZtCountService { } else if (u.getUserType() == UserType.KFZ) { result.add(buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); } else if (u.getUserType() == UserType.CS) { - result.add(buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); + result.add(buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d,releaseBugs.stream().filter(o->u.getAccount().equals(o.getBindUser())).collect(Collectors.toList()), cswcStoryList.stream().filter(o->u.getAccount().equals(o.getAssignedTo())).collect(Collectors.toList()))); } else if (u.getUserType() == UserType.UI) { result.add(buildUiScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); } else if (u.getUserType() == UserType.XMJL || u.getUserType() == UserType.XMGLY || u.getUserType() == UserType.GSGC) { @@ -856,6 +804,14 @@ public class IZtCountService { List result = new ArrayList<>(); + //计算测试线上bug + List csAccountIds = ztUsers.stream().filter(o -> o.getUserType() == UserType.CS).map(o -> o.getAccount()).collect(Collectors.toList()); + List releaseBugs = this.bugService.bugListByTestUser(null, firstDayOfMonth, lastDayOfMonth,csAccountIds , BugTypeEnums.RELEASE); + //获取测试需求 + List cswcStoryList = CollectionUtils.isEmpty(csAccountIds)?Collections.EMPTY_LIST:this.storyService.list(new QueryWrapper().lambda().in(ZtStory::getProduct, pids) + .in(ZtStory::getAssignedTo, csAccountIds).ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth)); + + for (ZtUser u : ztUsers) { List approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth); @@ -866,7 +822,7 @@ public class IZtCountService { } else if (u.getUserType() == UserType.KFZ) { result.add(buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); } else if (u.getUserType() == UserType.CS) { - result.add(buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); + result.add(buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d,releaseBugs.stream().filter(o->u.getAccount().equals(o.getBindUser())).collect(Collectors.toList()), cswcStoryList.stream().filter(o->u.getAccount().equals(o.getAssignedTo())).collect(Collectors.toList()))); } else if (u.getUserType() == UserType.UI) { result.add(buildUiScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); } else if (u.getUserType() == UserType.XMJL || u.getUserType() == UserType.XMGLY || u.getUserType() == UserType.GSGC) { @@ -889,21 +845,21 @@ public class IZtCountService { //产出工时 算task - List taskTimeList = this.taskService.getDevelAllocation(taskList.stream().filter(o -> u.getAccount().equals(o.getAssignedTo())).collect(Collectors.toList())); + List taskTimeList = this.taskService.getNormalTaskList(taskList.stream().filter(o -> u.getAccount().equals(o.getAssignedTo())).collect(Collectors.toList())); - dto.setTotalTask(BigDecimal.valueOf(taskTimeList.stream().filter(o->o.getStatus().equals("done")).collect(Collectors.toList()).size())); + dto.setTotalTask(BigDecimal.valueOf(taskTimeList.stream().collect(Collectors.toList()).size())); //延期任务 List delayTaskList = this.taskService.getDelayTask(taskTimeList); dto.setDelayTask(BigDecimal.valueOf(delayTaskList.size())); //分配总工时 - dto.setAllocationTime(floatBatchAdd(taskTimeList.stream().filter(o->o.getStatus().equals("done")).map(o -> o.getEstimate()).collect(Collectors.toList()))); + dto.setAllocationTime(floatBatchAdd(taskTimeList.stream().map(o -> o.getEstimate()).collect(Collectors.toList()))); dto.setWorkTime(floatBatchAdd(taskTimeList.stream().map(o -> o.getConsumed()).collect(Collectors.toList()))); //工作饱和度 - dto.setSaturation(dto.getTotalTime().floatValue() == 0 ? BigDecimal.ZERO : dto.getAllocationTime().divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP)); + dto.setSaturation(BigDecimalUtils.isZero(dto.getExamineTime()) ? BigDecimal.ZERO : dto.getAllocationTime().divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP)); //完成准时率 TODO 延期 / 总完成 @@ -911,25 +867,19 @@ public class IZtCountService { //全部完成 BigDecimal finishAllTime = dto.getAllocationTime(); -// List finishAllTime = ; //准时完成率 BigDecimal onTimeFinishRate = BigDecimalUtils.isZero(finishAllTime) ? finishAllTime : onTime.divide(finishAllTime, 2, BigDecimal.ROUND_UP); dto.setFinishPunctuality(onTimeFinishRate); /**准时率得分 * 1. =100%,得满分; * 2. <100%,每减少1%,扣3分,扣完截止。 - * */ dto.setPunctualityScore( getKFZPunctualityScore(onTimeFinishRate) ); //bug得分 - List bugList = this.bugService.bugBoundsListByProjectAndDate(null, firstDayOfMonth, lastDayOfMonth, u.getAccount()); - -// List bugList = this.bugService.list(new QueryWrapper().lambda(). -// ge(ZtBug::getOpeneddate, firstDayOfMonth).le(ZtBug::getOpeneddate, lastDayOfMonth) -// .eq(ZtBug::getAssignedTo, u.getAccount())); + List bugList = this.bugService.bugBindsListByProjectAndDate(null, firstDayOfMonth, lastDayOfMonth, u.getAccount(),null); bugList=this.bugService.getNormalBugList(bugList); //bug密度 int bugSize = bugList.size(); @@ -992,7 +942,6 @@ public class IZtCountService { BigDecimal applyTime = BigDecimal.ZERO; if (!CollectionUtils.isEmpty(approvalList)) { applyTime = getApprovalTime(approvalList, firstDayOfMonth); - ; } //本月天数 dto.setDays(BigDecimal.valueOf(workDaysInCurrentMonth)); @@ -1008,7 +957,7 @@ public class IZtCountService { return dto; } - PerformanceDTO buildCScore( Map userMap,List pids,ZtUser u, List approvalList, Date firstDayOfMonth, Date lastDayOfMonth, List taskList, Date d) { + PerformanceDTO buildCScore( Map userMap,List pids,ZtUser u, List approvalList, Date firstDayOfMonth, Date lastDayOfMonth, List taskList, Date d,List releaseBugs,List testedStory) { PerformanceDTO dto = new PerformanceDTO(); dto.setUserName(u.getNickname()); @@ -1040,26 +989,9 @@ public class IZtCountService { onTimeFinishRate.multiply(BigDecimal.valueOf(100)).intValue() < 90 ? BigDecimal.ZERO : finishScope.subtract(BigDecimal.valueOf(1).subtract(onTimeFinishRate).multiply(BigDecimal.valueOf(2)).multiply(BigDecimal.valueOf(100)))); - List allBugList = this.bugService.list(new QueryWrapper().lambda() - .eq(ZtBug::getOpenedby, u.getAccount()) - .ge(ZtBug::getOpeneddate, firstDayOfMonth).le(ZtBug::getOpeneddate, lastDayOfMonth)); - allBugList = allBugList.stream().filter(o -> ("closed".equals(o.getStatus())||"cancel".equals(o.getStatus()) ? - ((!StringUtils.isEmpty(o.getResolvedby())) ? true : false) : true)).collect(Collectors.toList()); - //严重 - long seriousBug = allBugList.stream().filter(o -> Integer.valueOf(1).equals(o.getSeverity())).count(); - //轻微 - long slightBug = allBugList.stream().filter(o -> Arrays.asList(4, 2, 3).contains(o.getSeverity())).count(); - long totalBug = seriousBug * 5 + slightBug * 1; - //缺陷检出率 TODO bug 数量 / 可用工时 250418尹工说的 - // 2025-05-12 尹工说的 测试在指定时间完成 并且指派给他 的开发任务工时 - - - - dto.setDevSeriousBug(BigDecimal.valueOf(seriousBug)); - dto.setDevSlightBug(BigDecimal.valueOf(slightBug)); //bug检出率 - dto =getBugFindScore(dto,u,userMap,pids,firstDayOfMonth,lastDayOfMonth,totalBug); + getBugFindScore(dto,u,firstDayOfMonth,lastDayOfMonth,testedStory); //暂未定义 dto.setSlightBug(BigDecimal.ZERO); @@ -1071,57 +1003,48 @@ public class IZtCountService { dto.setWorkTime(BigDecimal.ZERO); dto.setExcellentShare(BigDecimal.ZERO); dto.setQuality(BigDecimal.ZERO); - //TODO 加分项1. 全月无Bug - //2. 当月绩效考核成绩95分以上 +10分 - - //线上bug 当月上线需求的线上Bug数量 TODO 待明确 - List prodBugList = this.bugService.list(new QueryWrapper().lambda() - .eq(ZtBug::getAssignedTo, u.getAccount()) - .ge(ZtBug::getOpeneddate, firstDayOfMonth).le(ZtBug::getOpeneddate, lastDayOfMonth)); - prodBugList = allBugList.stream().filter(o -> o.getBugType().equals("prod")).filter(o -> ("closed".equals(o.getStatus()) ? - ((!StringUtils.isEmpty(o.getResolvedby())) ? true : false) : true)).collect(Collectors.toList()); - prodBugList.add(new ZtBug()); - if (CollectionUtils.isEmpty(prodBugList)) { - dto.setBugScore(BigDecimal.valueOf(20)); - } else { - //严重 - long prodSeriousBug = prodBugList.stream().filter(o -> Integer.valueOf(1).equals(o.getSeverity())).count(); - //轻微 - long prodSlightBug = prodBugList.stream().filter(o -> Arrays.asList(4, 2, 3).contains(o.getSeverity())).count(); - if (prodSeriousBug > 0) { - dto.setBugScore(BigDecimal.valueOf(0)); - } else { - dto.setBugScore(BigDecimal.valueOf((20 - prodSlightBug * 5) <= 0 ? 0 : (20 - prodSlightBug * 5))); - } - } - dto.setBugScore(BigDecimal.valueOf(20)); + //计算线上bug 严重 + long seriousCount = releaseBugs.stream().filter(o -> o.getSeverity().equals(1)).count(); + //轻微 + long slightCount = releaseBugs.stream().filter(o -> Arrays.asList(2, 3, 4).contains(o.getSeverity())).count(); + int bugScore =(int)(seriousCount>0?0:(slightCount>3)?0:(20-slightCount*5)); + //bug得分 + dto.setSeriousBug(BigDecimal.valueOf(seriousCount)); + dto.setSlightBug(BigDecimal.valueOf(slightCount)); + dto.setBugScore(BigDecimal.valueOf(bugScore)); dto.setDocumentQualityScore(BigDecimal.valueOf(25)); dto.setWorkAttitude(BigDecimal.valueOf(5)); return dto; } - private PerformanceDTO getBugFindScore(PerformanceDTO dto,ZtUser u, Map userMap,List pids, Date firstDayOfMonth, Date lastDayOfMonth,long totalBug) { + private PerformanceDTO getBugFindScore(PerformanceDTO dto,ZtUser u,Date firstDayOfMonth,Date lastDayOfMonth,List testedStory) { - List list = this.storyService.list(new QueryWrapper().lambda().in(ZtStory::getProduct, pids) - .eq(ZtStory::getAssignedTo, u.getAccount()).ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth)); - if(CollectionUtils.isEmpty(list)){ - return dto; - } - List accountIds = userMap.values().stream().filter(o -> o.getUserType() == UserType.KFZ).map(o -> o.getAccount()).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(accountIds)){ + if(CollectionUtils.isEmpty(testedStory)){ return dto; } List taskList = this.taskService.list(new QueryWrapper().lambda() - .select(SFunctionColums.taskColumes()) - .eq(ZtTask::getType,"devel") - .in(ZtTask::getAssignedTo,accountIds) - .notIn(ZtTask::getStatus,"cancel","closed") - .in(ZtTask::getStory, list.stream().map(o -> o.getId()).collect(Collectors.toList()))); + .select(SFunctionColums.taskColumes()).eq(ZtTask::getType,"devel") + .notIn(ZtTask::getStatus,"cancel","closed") + .in(ZtTask::getStory, testedStory.stream().map(o -> o.getId()).collect(Collectors.toList()))); if(CollectionUtils.isEmpty(taskList)){ return dto; } + List allBugList = this.bugService.list(new QueryWrapper().lambda().select(SFunctionColums.bugColumes()) + .eq(ZtBug::getOpenedby, u.getAccount()) + .in(ZtBug::getTostory,testedStory.stream().map(o -> o.getId()).collect(Collectors.toList()))); + allBugList = allBugList.stream().filter(o -> ("closed".equals(o.getStatus())||"cancel".equals(o.getStatus()) ? + ((!StringUtils.isEmpty(o.getResolvedby())) ? true : false) : true)).collect(Collectors.toList()); + //严重 + long seriousBug = allBugList.stream().filter(o -> Integer.valueOf(1).equals(o.getSeverity())).count(); + //轻微 + long slightBug = allBugList.stream().filter(o -> Arrays.asList(4, 2, 3).contains(o.getSeverity())).count(); + long totalBug = seriousBug * 5 + slightBug * 1; + //缺陷检出率 TODO bug 数量 / 可用工时 250418尹工说的 + // 2025-05-12 尹工说的 测试在指定时间完成 并且指派给他 的开发任务工时 + dto.setDevSeriousBug(BigDecimal.valueOf(seriousBug)); + dto.setDevSlightBug(BigDecimal.valueOf(slightBug)); //开发总工时 BigDecimal totalTimeWorkHours = floatBatchAdd(taskList.stream().map(o -> o.getEstimate()).collect(Collectors.toList())); @@ -1578,7 +1501,6 @@ public class IZtCountService { if (CollectionUtils.isEmpty(ztProjects)) { return new ArrayList<>(); } - List executionIds = ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList()); //所有任务 List taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth, pids); if (CollectionUtils.isEmpty(taskList)) { @@ -1696,6 +1618,7 @@ public class IZtCountService { + List ztProjects = this.projectService.getExecutionsListByProjectAndDate(projectproducts.stream().map(o->o.getProject()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth); if (CollectionUtils.isEmpty(ztProjects)) { @@ -1714,7 +1637,7 @@ public class IZtCountService { List ztUsers = this.userService.list(new QueryWrapper().lambda() .in(ZtUser::getAccount, accountIds)); - + //多个项目组成员 List multipleUserList= getmultipleDepartProjectTeam(firstDayOfMonth,lastDayOfMonth); @@ -1781,9 +1704,7 @@ public class IZtCountService { // .filter(o->o.getProject().equals(p.getId())) // 完成后可能会被关闭 - List done = taskList.stream() - - .filter(o->userMap.get(o.getAssignedTo())!=null&&userMap.get(o.getAssignedTo()).getUserType()==UserType.KFZ) + List done = taskList.stream().filter(o->userMap.get(o.getAssignedTo())!=null&&userMap.get(o.getAssignedTo()).getUserType()==UserType.KFZ) .filter(o->o.getStatus().equals("done")).collect(Collectors.toList()); @@ -1832,7 +1753,9 @@ public class IZtCountService { private BigDecimal floatBatchAdd(List list) { BigDecimal f = BigDecimal.ZERO; for (Float i : list) { - f = f.add(BigDecimal.valueOf(i)); + if(i!=null){ + f = f.add(BigDecimal.valueOf(i)); + } } BigDecimal decimal = f.setScale(2, BigDecimal.ROUND_HALF_UP); @@ -1891,7 +1814,7 @@ public class IZtCountService { //项目 //迭代 - int time = DateUtils.getWorkDaysInCurrentMonth(d) * 8; +// int time = DateUtils.getWorkDaysInCurrentMonth(d) * 8; List prodBugList = this.bugService.list(new QueryWrapper().lambda().in(ZtBug::getProduct, pids) .eq(ZtBug::getBugType, "prod") .ge(ZtBug::getOpeneddate, firstDayOfMonth) @@ -1901,14 +1824,14 @@ public class IZtCountService { if(u.getUserType()==UserType.KFZ){ List approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth); - List fTask = this.taskService.getDevelAllocation(taskList.stream().filter(o -> o.getAssignedTo().equals(u.getAccount())).collect(Collectors.toList())); + List fTask = this.taskService.getNormalTaskList(taskList.stream().filter(o -> o.getAssignedTo().equals(u.getAccount())).collect(Collectors.toList())); PerformanceDTO performanceDTO = new PerformanceDTO(); performanceDTO = setUserWorkTime(performanceDTO, d, approvalList, firstDayOfMonth); WorkDetailsDTO dto = new WorkDetailsDTO(); dto.setUserName(u.getNickname()); - fTask=fTask.stream().filter(o->o.getStatus().equals("done")).collect(Collectors.toList()); +// fTask=fTask.stream().filter(o->o.getStatus().equals("done")).collect(Collectors.toList()); dto.setTaskCount(BigDecimal.valueOf(fTask.size())); @@ -1992,7 +1915,7 @@ public class IZtCountService { return zeroTaskMap(map, objMap); } - List taskList = this.taskService.list(new QueryWrapper().lambda() + List taskList = this.taskService.list(new QueryWrapper().lambda().select(SFunctionColums.taskColumes()) .in(ZtTask::getExecution, exexList.stream().map(o -> o.getExecution()).collect(Collectors.toList()))); if (CollectionUtils.isEmpty(taskList)) { return zeroTaskMap(map, objMap); @@ -2018,7 +1941,7 @@ public class IZtCountService { objMap.put("totalCount", taskList.size()); map.put("task", objMap); - List bugList = this.bugService.list(new QueryWrapper().lambda().in(ZtBug::getProduct, products.stream().map(o -> o.getId()).collect(Collectors.toList()))); + List bugList = this.bugService.list(new QueryWrapper().lambda().select(SFunctionColums.bugColumes()).in(ZtBug::getProduct, products.stream().map(o -> o.getId()).collect(Collectors.toList()))); objMap = new HashMap<>(); @@ -2660,32 +2583,20 @@ public class IZtCountService { return result; } - - List ztProjects = this.projectService.listByIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList())); - - - ztProjects = ztProjects.stream().filter(o -> (o.getBegin().getTime() >= firstDayOfMonth.getTime() - && o.getBegin().getTime() <= lastDayOfMonth.getTime()) || ( - o.getEnd().getTime() >= firstDayOfMonth.getTime() - && o.getEnd().getTime() <= lastDayOfMonth.getTime() - )).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(ztProjects)) { - return result; - } - - List teams = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getType, "execution") - .in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList()))); - - List accountIds = teams.stream().map(o -> o.getAccount()).distinct().collect(Collectors.toList()); + //accountIds 成员 + List accountIds =getTeamAccountByExecutionIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList()),firstDayOfMonth,lastDayOfMonth); if (CollectionUtils.isEmpty(accountIds)) { return result; } - //accountIds 成员 List approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth); Map userMap = this.userService.userMapByIds(accountIds); - + //正线bug + List releaseBugs = this.bugService.bugListByTestUser(null, firstDayOfMonth, lastDayOfMonth, Arrays.asList(u.getAccount()), BugTypeEnums.RELEASE); + //获取测试需求 + List cswcStoryList = this.storyService.list(new QueryWrapper().lambda().in(ZtStory::getProduct, pids) + .in(ZtStory::getAssignedTo, Arrays.asList(u.getAccount())).ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth)); if (name.equals("liyuyan")) { result = buildXMZLScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); @@ -2694,11 +2605,11 @@ public class IZtCountService { } else if (u.getUserType() == UserType.KFZ) { result = buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); } else if (u.getUserType() == UserType.CS) { - result = buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); + result = buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d,releaseBugs.stream().filter(o->u.getAccount().equals(o.getBindUser())).collect(Collectors.toList()),cswcStoryList.stream().filter(o->u.getAccount().equals(o.getAssignedTo())).collect(Collectors.toList())); } else if (u.getUserType() == UserType.UI) { result = buildUiScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); } else if (u.getUserType() == UserType.XMJL || u.getUserType() == UserType.XMGLY || u.getUserType() == UserType.GSGC) { - List list = projectService.list(new QueryWrapper().lambda().eq(ZtProject::getPm, result.getAccount())); +// List list = projectService.list(new QueryWrapper().lambda().eq(ZtProject::getPm, result.getAccount())); result = buildXMJLScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); ZtCountQo ztCountQo = new ZtCountQo(); BeanUtils.copyProperties(qo, ztCountQo); @@ -2720,6 +2631,26 @@ public class IZtCountService { } + private List getTeamAccountByExecutionIds(List execIds,Date firstDayOfMonth,Date lastDayOfMonth) { + + List ztProjects = this.projectService.listByIds(execIds); + + + ztProjects = ztProjects.stream().filter(o -> (o.getBegin().getTime() >= firstDayOfMonth.getTime() + && o.getBegin().getTime() <= lastDayOfMonth.getTime()) || ( + o.getEnd().getTime() >= firstDayOfMonth.getTime() + && o.getEnd().getTime() <= lastDayOfMonth.getTime() + )).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(ztProjects)) { + return Collections.emptyList(); + } + + List teams = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getType, "execution") + .in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList()))); + + return teams.stream().map(o -> o.getAccount()).distinct().collect(Collectors.toList()); + } + public Map storyBarChart(ZtProjectQo qo) { Integer id = qo.getId(); Map map = new HashMap<>(); @@ -2876,11 +2807,11 @@ public class IZtCountService { } } - BigDecimal Density = BigDecimalUtils.isZero(allocationTime) ? BigDecimal.valueOf(devBugList.size()) : BigDecimal.valueOf(devBugList.size()).divide(allocationTime, 2, BigDecimal.ROUND_HALF_UP); + BigDecimal density = BigDecimalUtils.isZero(allocationTime) ? BigDecimal.valueOf(devBugList.size()) : BigDecimal.valueOf(devBugList.size()).divide(allocationTime, 2, BigDecimal.ROUND_HALF_UP); //bug率 List prodBugList = bugList.stream().filter(o -> o.getBugType().equals("prod")).collect(Collectors.toList()); - obj.put("devBugCount", Density); + obj.put("devBugCount", density); obj.put("prodBugCount", BigDecimalUtils.isZero(allocationTime) ? 0 : BigDecimal.valueOf(prodBugList.size()).divide(allocationTime, 2, BigDecimal.ROUND_HALF_UP)); map.put(DateUtils.formatDate(d, "yyyy-MM"), obj); @@ -2979,7 +2910,7 @@ public class IZtCountService { dto.setFinishPunctuality(kfzCount<=0?BigDecimal.ZERO:finishPunctuality.divide(BigDecimal.valueOf(kfzCount),3,BigDecimal.ROUND_UP)); // //处理问题数量 List feedbackList = this.storyFeedbackService.list(new QueryWrapper() - .lambda().in(ZtStoryFeedback::getProduct, pIds) + .lambda().select(SFunctionColums.feedbackColumes()).in(ZtStoryFeedback::getProduct, pIds) .ge(ZtStoryFeedback::getOpenedDate, firstDayOfMonth).le(ZtStoryFeedback::getOpenedDate, lastDayOfMonth)); List feedbacks = feedbackList.stream().filter(o -> !o.getStatus().equals("closed")).collect(Collectors.toList()); diff --git a/src/main/java/com/sa/zentao/service/impl/ZtBugBoundUserServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtBugBindUserServiceImpl.java similarity index 51% rename from src/main/java/com/sa/zentao/service/impl/ZtBugBoundUserServiceImpl.java rename to src/main/java/com/sa/zentao/service/impl/ZtBugBindUserServiceImpl.java index 29a00c6..6cebf83 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtBugBoundUserServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtBugBindUserServiceImpl.java @@ -1,10 +1,10 @@ package com.sa.zentao.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.sa.zentao.entity.ZtBugBoundUser; -import com.sa.zentao.mapper.ZtBugBoundUserMapper; -import com.sa.zentao.service.IZtBugBoundUserService; +import com.sa.zentao.entity.ZtBugBindUser; +import com.sa.zentao.mapper.ZtBugBindUserMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sa.zentao.service.IZtBugBindUserService; import org.springframework.stereotype.Service; import java.util.List; @@ -18,10 +18,10 @@ import java.util.List; * @since 2025-05-13 */ @Service -public class ZtBugBoundUserServiceImpl extends ServiceImpl implements IZtBugBoundUserService { +public class ZtBugBindUserServiceImpl extends ServiceImpl implements IZtBugBindUserService { @Override - public List listByBugId(Integer id) { - return this.baseMapper.selectList(new QueryWrapper().lambda().eq(ZtBugBoundUser::getBugId, id)); + public List listByBugId(Integer id) { + return this.baseMapper.selectList(new QueryWrapper().lambda().eq(ZtBugBindUser::getBugId, id)); } } diff --git a/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java index 26cf114..6a5630b 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java @@ -1,6 +1,5 @@ package com.sa.zentao.service.impl; -import ch.qos.logback.core.util.StringUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.Page; @@ -10,10 +9,7 @@ import com.sa.zentao.conf.LoginRiskUser; import com.sa.zentao.conf.RiskUserThreadLocal; import com.sa.zentao.dao.*; import com.sa.zentao.entity.*; -import com.sa.zentao.enums.ActionStatus; -import com.sa.zentao.enums.ActionType; -import com.sa.zentao.enums.FileTypes; -import com.sa.zentao.enums.UserType; +import com.sa.zentao.enums.*; import com.sa.zentao.mapper.ZtBugMapper; import com.sa.zentao.qo.ZtBugQo; import com.sa.zentao.qo.ZtProjectQo; @@ -88,7 +84,7 @@ public class ZtBugServiceImpl extends ServiceImpl implements private IZtReleaseService releaseService; @Autowired - private IZtBugBoundUserService bugBoundUserService; + private IZtBugBindUserService bugBindUserService; @Autowired private VxService vxService; @@ -330,7 +326,7 @@ public class ZtBugServiceImpl extends ServiceImpl implements if (d.getDeadline() != null) { d.setDeadline(DateUtils.getDayLast(d.getDeadline())); } - List boundList = this.bugBoundUserService.listByBugId(d.getId()); + List boundList = this.bugBindUserService.listByBugId(d.getId()); List ztBugBoundUserDTOS = BeanCopyUtil.copyListProperties(boundList, ZtBugBoundUserDTO::new); ztBugBoundUserDTOS = ztBugBoundUserDTOS.stream().peek(o->{ ZtUser u = userMap.get(o.getAssignedTo()); @@ -395,7 +391,7 @@ public class ZtBugServiceImpl extends ServiceImpl implements ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper().lambda().eq(ZtProjectproduct::getProject, dto.getProject())); Integer product = projectproduct.getProduct(); //项目bug - List bountSaveList=new ArrayList<>(); + List bountSaveList=new ArrayList<>(); for (ZtBugDTO d:list) { ZtBug b=new ZtBug(); BeanUtils.copyProperties(d,b); @@ -411,12 +407,12 @@ public class ZtBugServiceImpl extends ServiceImpl implements } this.saveBatch(saveBatch); for (ZtBug b:saveBatch) { - ZtBugBoundUser ztBugBoundUser = new ZtBugBoundUser(); + ZtBugBindUser ztBugBoundUser = new ZtBugBindUser(); ztBugBoundUser.setBugId(b.getId()); ztBugBoundUser.setAssignedTo(b.getAssignedTo()); bountSaveList.add(ztBugBoundUser); } - bugBoundUserService.saveBatch(bountSaveList); + bugBindUserService.saveBatch(bountSaveList); Map> eMap = saveBatch.stream().filter(o->o.getExecution()!=null&&o.getExecution()!=0).collect(Collectors.groupingBy(ZtBug::getExecution)); for (Integer e:eMap.keySet()) { @@ -598,13 +594,21 @@ public class ZtBugServiceImpl extends ServiceImpl implements } @Override - public List bugBoundsListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth, String account) { - return this.baseMapper.bugBoundsListByProjectAndDate(pIds,firstDayOfMonth,lastDayOfMonth,account); + public List bugBindsListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth, String account, BugTypeEnums bugType) { + return this.baseMapper.bugBindsListByProjectAndDate(pIds,firstDayOfMonth,lastDayOfMonth,account,bugType); + } + + @Override + public List bugListByTestUser(List pIds, Date firstDayOfMonth, Date lastDayOfMonth, List accounts, BugTypeEnums bugType) { + if(CollectionUtils.isEmpty(accounts)){ + return Collections.emptyList(); + } + return this.baseMapper.bugListByTestUser(pIds,firstDayOfMonth,lastDayOfMonth,accounts,bugType); } @Override public List getDevBugList(List bugList) { - return bugList.stream().filter(o->"dev".equals(o.getBugType())||"releaseBug".equals(o.getBugType())).collect(Collectors.toList()); + return bugList.stream().filter(o->BugTypeEnums.DEV.getValue().equals(o.getBugType())||BugTypeEnums.RELEASE.getValue().equals(o.getBugType())).collect(Collectors.toList()); } @Override @@ -646,22 +650,22 @@ public class ZtBugServiceImpl extends ServiceImpl implements } this.baseMapper.insert(ztBug); - List boundSaveList=new ArrayList<>(); + List boundSaveList=new ArrayList<>(); List boundList = dto.getBoundList(); if(!CollectionUtils.isEmpty(boundList)){ for (ZtBugBoundUserDTO ztBugBoundUserDTO:boundList ) { - ZtBugBoundUser bound = new ZtBugBoundUser(); + ZtBugBindUser bound = new ZtBugBindUser(); bound.setBugId(ztBug.getId()); bound.setAssignedTo(ztBugBoundUserDTO.getAssignedTo()); boundSaveList.add(bound); } }else{ - ZtBugBoundUser bound = new ZtBugBoundUser(); + ZtBugBindUser bound = new ZtBugBindUser(); bound.setBugId(ztBug.getId()); bound.setAssignedTo(ztBug.getAssignedTo()); boundSaveList.add(bound); } - this.bugBoundUserService.saveBatch(boundSaveList); + this.bugBindUserService.saveBatch(boundSaveList); fileService.updateFile(dto.getFiles(),ztBug.getId(), FileTypes.bug); if(dto.getExecution()!=null&&dto.getExecution()!=0){ @@ -695,24 +699,24 @@ public class ZtBugServiceImpl extends ServiceImpl implements this.baseMapper.updateById(ztBug); //删除老的 - this.bugBoundUserService.remove(new QueryWrapper().lambda() - .eq(ZtBugBoundUser::getBugId,ztBug.getId())); - List boundSaveList=new ArrayList<>(); + this.bugBindUserService.remove(new QueryWrapper().lambda() + .eq(ZtBugBindUser::getBugId,ztBug.getId())); + List boundSaveList=new ArrayList<>(); List boundList = dto.getBoundList(); if(!CollectionUtils.isEmpty(boundList)){ for (ZtBugBoundUserDTO ztBugBoundUserDTO:boundList ) { - ZtBugBoundUser bound = new ZtBugBoundUser(); + ZtBugBindUser bound = new ZtBugBindUser(); bound.setBugId(ztBug.getId()); bound.setAssignedTo(ztBugBoundUserDTO.getAssignedTo()); boundSaveList.add(bound); } }else{ - ZtBugBoundUser bound = new ZtBugBoundUser(); + ZtBugBindUser bound = new ZtBugBindUser(); bound.setBugId(ztBug.getId()); bound.setAssignedTo(ztBug.getAssignedTo()); boundSaveList.add(bound); } - this.bugBoundUserService.saveBatch(boundSaveList); + this.bugBindUserService.saveBatch(boundSaveList); @@ -837,8 +841,7 @@ public class ZtBugServiceImpl extends ServiceImpl implements this.actionService.addAction(ActionType.BUG, ActionStatus.WC,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution() - ,RiskUserThreadLocal.get().getName(),dto.getRemark(),"" - ); + ,RiskUserThreadLocal.get().getName(),dto.getRemark(),""); this.bugFinishedSendMessage(ztBug.getId(),ztBug.getOpenedby()); diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java index 69c4c69..f018bb3 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java @@ -1935,9 +1935,9 @@ public class ZtProjectServiceImpl extends ServiceImpl(); } - List list =this.taskService.taskListByEIdsAndDate(firstDayOfMonth,lastDayOfMonth,products.stream().map(o->o.getId()).collect(Collectors.toList())); + List allTaskList =this.taskService.taskListByEIdsAndDate(firstDayOfMonth,lastDayOfMonth,products.stream().map(o->o.getId()).collect(Collectors.toList())); - if (CollectionUtils.isEmpty(list)) { + if (CollectionUtils.isEmpty(allTaskList)) { return new PageInfo<>(); } @@ -1963,12 +1963,8 @@ public class ZtProjectServiceImpl extends ServiceImpl taskList =null; - if(ztUser.getUserType()==UserType.KFZ){ - taskList = this.taskService.getDevelAllocation(list.stream().filter(o->account.equals(o.getAssignedTo())).collect(Collectors.toList())); - }else{ - taskList = this.taskService.getNormalTaskList(list.stream().filter(o->account.equals(o.getAssignedTo())).collect(Collectors.toList())); - } + + List taskList = this.taskService.getNormalTaskList(allTaskList.stream().filter(o->account.equals(o.getAssignedTo())).collect(Collectors.toList())); var d=new WorkDetailsDTO(); ZtMonthScore ztMonthScore = scoreMap.get(account); @@ -1981,7 +1977,7 @@ public class ZtProjectServiceImpl extends ServiceImplo.getStatus().equals("done")).map(o -> o.getEstimate()).collect(Collectors.toList())))); + d.setStoryTotalTime(floatToBigDecimal(floatBatchAdd(taskList.stream().map(o -> o.getEstimate()).collect(Collectors.toList())))); //实际产出工时 d.setWorkTime(floatToBigDecimal(floatBatchAdd(taskList.stream().map(o -> o.getConsumed()).collect(Collectors.toList())))); @@ -1996,15 +1992,15 @@ public class ZtProjectServiceImpl extends ServiceImplo.getStatus().equals("done")).collect(Collectors.toList()).size())); + d.setSaturation(BigDecimalUtils.isZero(d.getHaveTime())?BigDecimal.valueOf(1):BigDecimalUtils.isZero(d.getWorkTime())?BigDecimal.ZERO:d.getStoryTotalTime().divide(d.getHaveTime(),2,BigDecimal.ROUND_UP)); + // 任务总量 .filter(o->o.getStatus().equals("done")) + d.setTaskCount(BigDecimal.valueOf(taskList.stream().collect(Collectors.toList()).size())); List delayList =this.taskService.getDelayTask(taskList); //任务延期量 d.setTaskDelayCount(BigDecimal.valueOf(delayList.size())); if(ztUser.getUserType()==UserType.CS||ztUser.getUserType()==UserType.KFZ){ - BigDecimal finishAllTime = BigDecimal.valueOf(floatBatchAdd(taskList.stream().filter(o->o.getStatus().equals("done")).map(o->o.getEstimate()).collect(Collectors.toList()))); + BigDecimal finishAllTime = BigDecimal.valueOf(floatBatchAdd(taskList.stream().map(o->o.getEstimate()).collect(Collectors.toList()))); List onTimeTask = taskList.stream().filter(o -> o.getFinishedDate() != null && o.getFinishedDate().getTime() <= DateUtils.getDayLast(o.getDeadline()).getTime()).collect(Collectors.toList()); BigDecimal onTime=BigDecimal.valueOf(floatBatchAdd(onTimeTask.stream().map(o->o.getEstimate()) @@ -2018,7 +2014,7 @@ public class ZtProjectServiceImpl extends ServiceImpl bugList = this.bugService.bugBoundsListByProjectAndDate(products.stream().map(o -> o.getId()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth, account); + List bugList = this.bugService.bugBindsListByProjectAndDate(products.stream().map(o -> o.getId()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth, account,null); bugList =bugList.stream().filter(o->o.getBugType().equals("prod")).collect(Collectors.toList()); d.setBugCount(BigDecimal.valueOf(bugList.size())); @@ -2451,11 +2447,6 @@ public class ZtProjectServiceImpl extends ServiceImpl(result); } - private List userAuth() { - - return null; - } - private Map> getZtProjectproductMap(List result) { List list = this.projectproductService.list(new QueryWrapper() .lambda().in(ZtProjectproduct::getProject, result.stream().map(o -> o.getId()).collect(Collectors.toList()))); diff --git a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java index 738e0d7..56f9ad7 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java @@ -346,10 +346,6 @@ public class ZtReleaseServiceImpl extends ServiceImpl details = this.releaseDetailsService.list(new QueryWrapper().lambda().eq(ZtReleaseDetails::getReleaseId, ztRelease.getId()) .ne(ZtReleaseDetails::getStatus, "closed")); - - - - if (dto.getRevieweResult() == 1) { List storyList = new ArrayList(); List bugList = new ArrayList(); @@ -418,16 +414,20 @@ public class ZtReleaseServiceImpl extends ServiceImpl
"); b.append(""); b.append("" + - "" + - "" ); +// "" + +// "" + "" + ); for (ZtStory s:ztStories) { ZtUser ztUser = userMap.get(s.getYsUser()); if(ztUser!=null&&!StringUtils.isEmpty(ztUser.getEmail())){ - String str= "" + - ""; +// String str= "" + +// ""; + String str=""; str=str.replace("{nickName}",ztUser.getNickname()); str=str.replace("{title}",s.getTitle()); str=str.replace("{id}",s.getId().toString()); + str=str.replace("{dept}",s.getSource()); b.append(str); mailTo.add(ztUser.getEmail()); } @@ -473,7 +473,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl impleme if (firstDayOfMonth == null || lastDayOfMonth == null) { return new ArrayList<>(); } - List taskList = this.list(new QueryWrapper().lambda() - .select(SFunctionColums.taskColumes()) - .in(ZtTask::getProduct,pids) - .ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth)); +// List taskList = this.list(new QueryWrapper().lambda() +// .select(SFunctionColums.taskColumes()) +// .in(ZtTask::getProduct,pids) +// .and(e->e.ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth)) +// .and(e->e.or().) +// ); -// return this.baseMapper.taskListByPIdsAndDate(pids,firstDayOfMonth,lastDayOfMonth); - return taskList; + return this.baseMapper.taskListByPIdsAndDate(pids,firstDayOfMonth,lastDayOfMonth); +// return taskList; + } + + @Override + public List getDelayTask(List t) { + if (CollectionUtils.isEmpty(t)) { + return new ArrayList<>(); + } + List delayList = new ArrayList(); + for (ZtTask task : t) { + //完成延期 + if (task.getFinishedDate() != null && task.getFinishedDate().getTime() > DateUtils.getDayLast(task.getDeadline()).getTime()) { + delayList.add(task); + } else { + if (task.getFinishedDate() == null) { + //直接完成任务等待审核不需要管 + if (task.getFinishedFlag() == 1) { + //直接完成任务的不管 + } else { + //当前时间大于预计完成时间 + if (new Date().getTime() > DateUtils.getDayLast(task.getDeadline()).getTime()) { + delayList.add(task); + } + } + } + } + + } + return delayList; } @Override @@ -356,40 +386,12 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme List taskList = this.list(new QueryWrapper().lambda() .select(SFunctionColums.taskColumes()) .in(ZtTask::getProduct,pids) - .in(ZtTask::getAssignedTo,uids) + .in(ZtTask::getAssignedTo,uids) .ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth)); return taskList; } - @Override - public List getDelayTask(List t) { - if (CollectionUtils.isEmpty(t)) { - return new ArrayList<>(); - } - List delayList = new ArrayList(); - for (ZtTask task : t) { - //完成延期 - if (task.getFinishedDate() != null && task.getFinishedDate().getTime() > DateUtils.getDayLast(task.getDeadline()).getTime()) { - delayList.add(task); - } else { - if (task.getFinishedDate() == null) { - //直接完成任务等待审核不需要管 -// if (task.getFinishedFlag() == 1) { -// //直接完成任务的不管 -// } else { -// //当前时间大于预计完成时间 -// if (new Date().getTime() > DateUtils.getDayLast(task.getDeadline()).getTime()) { -// delayList.add(task); -// } -// } - } - } - - } - return delayList; - } - @Override public List getOnTimeTask(List t) { if (CollectionUtils.isEmpty(t)) { @@ -425,10 +427,6 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme return result; } - @Override - public List getDevelAllocation(List tList) { - return getNormalTaskList(tList); - } @Override public List develTaskListByExecutions(Date firstDayOfMonth, Date lastDayOfMonth, List eIds) { @@ -1166,7 +1164,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme for (ZtTask ztTask : saveList) { if (!ztTask.getStatus().equals("reviewing")) { this.storyService.taskFinishChangeStatus(ztTask.getStory(), null, TaskType.transferType(ztTask.getType()), false); - taskSendZpMessage(ztTask.getId(), null, ztProject.getPm()); + taskSendZpMessage(ztTask.getId(), null, ztTask.getAssignedTo()); } else { taskSendPsMessage(ztTask.getId(), ztProject.getPm(),ztTask.getOpenedby()); diff --git a/src/main/java/com/sa/zentao/utils/SFunctionColums.java b/src/main/java/com/sa/zentao/utils/SFunctionColums.java index ee20a8f..7becf1c 100644 --- a/src/main/java/com/sa/zentao/utils/SFunctionColums.java +++ b/src/main/java/com/sa/zentao/utils/SFunctionColums.java @@ -1,19 +1,24 @@ package com.sa.zentao.utils; +import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; -import com.sa.zentao.dao.ZtStoryCaseDTO; +import com.sa.zentao.entity.ZtBug; import com.sa.zentao.entity.ZtStoryCase; import com.sa.zentao.entity.ZtStoryFeedback; import com.sa.zentao.entity.ZtTask; +import java.lang.invoke.CallSite; +import java.lang.invoke.LambdaMetafactory; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Field; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class SFunctionColums { - public static List> taskColumes(){ - List> result=new ArrayList<>(); + public static List> taskColumes() { + List> result = new ArrayList<>(); result.add(ZtTask::getId); result.add(ZtTask::getAssignedTo); result.add(ZtTask::getProduct); @@ -45,8 +50,8 @@ public class SFunctionColums { } - public static List> caseColumes(){ - List> result=new ArrayList<>(); + public static List> caseColumes() { + List> result = new ArrayList<>(); result.add(ZtStoryCase::getId); @@ -65,36 +70,148 @@ public class SFunctionColums { } - public static List> feedbackColumes(){ - List> result=new ArrayList<>(); - - - result.add(ZtStoryFeedback::getId); - result.add(ZtStoryFeedback::getName); - result.add(ZtStoryFeedback::getOpenedBy); - result.add(ZtStoryFeedback::getFiles); - result.add(ZtStoryFeedback::getOpenedDate); - result.add(ZtStoryFeedback::getSource); - result.add(ZtStoryFeedback::getStatus); - result.add(ZtStoryFeedback::getOpenSource); - result.add(ZtStoryFeedback::getPlanEndDate); - result.add(ZtStoryFeedback::getAssignedTo); - result.add(ZtStoryFeedback::getSpec); - result.add(ZtStoryFeedback::getFinishDate); - result.add(ZtStoryFeedback::getType); - result.add(ZtStoryFeedback::getCloseRemark); - result.add(ZtStoryFeedback::getProduct); - result.add(ZtStoryFeedback::getPlanFinishDate); - result.add(ZtStoryFeedback::getHandDate); - result.add(ZtStoryFeedback::getCloseDate); - result.add(ZtStoryFeedback::getClosedBy); - result.add(ZtStoryFeedback::getApprovalRemark); - result.add(ZtStoryFeedback::getYsFlag); - result.add(ZtStoryFeedback::getDontHandSelect); - result.add(ZtStoryFeedback::getDontHandRemark); - result.add(ZtStoryFeedback::getFinishedRemark); + public static List> feedbackColumes() { + List> result = new ArrayList<>(); + result.add(ZtStoryFeedback::getId); + result.add(ZtStoryFeedback::getName); + result.add(ZtStoryFeedback::getOpenedBy); + result.add(ZtStoryFeedback::getFiles); + result.add(ZtStoryFeedback::getOpenedDate); + result.add(ZtStoryFeedback::getSource); + result.add(ZtStoryFeedback::getStatus); + result.add(ZtStoryFeedback::getOpenSource); + result.add(ZtStoryFeedback::getPlanEndDate); + result.add(ZtStoryFeedback::getAssignedTo); + result.add(ZtStoryFeedback::getSpec); + result.add(ZtStoryFeedback::getFinishDate); + result.add(ZtStoryFeedback::getType); + result.add(ZtStoryFeedback::getCloseRemark); + result.add(ZtStoryFeedback::getProduct); + result.add(ZtStoryFeedback::getPlanFinishDate); + result.add(ZtStoryFeedback::getHandDate); + result.add(ZtStoryFeedback::getCloseDate); + result.add(ZtStoryFeedback::getClosedBy); + result.add(ZtStoryFeedback::getApprovalRemark); + result.add(ZtStoryFeedback::getYsFlag); + result.add(ZtStoryFeedback::getDontHandSelect); + result.add(ZtStoryFeedback::getDontHandRemark); + result.add(ZtStoryFeedback::getFinishedRemark); return result; } + + public static List> bugColumes() { + + List> result = new ArrayList<>(); + // 基础ID和关联ID字段 + result.add(ZtBug::getId); + result.add(ZtBug::getProject); + result.add(ZtBug::getProduct); + result.add(ZtBug::getInjection); + result.add(ZtBug::getIdentify); + result.add(ZtBug::getBranch); + result.add(ZtBug::getModule); + result.add(ZtBug::getExecution); + result.add(ZtBug::getPlan); + result.add(ZtBug::getStory); + result.add(ZtBug::getStoryversion); + result.add(ZtBug::getTask); + result.add(ZtBug::getTotask); + result.add(ZtBug::getTostory); + + // 描述性字段 + result.add(ZtBug::getTitle); + result.add(ZtBug::getKeywords); + result.add(ZtBug::getSeverity); + result.add(ZtBug::getPri); + result.add(ZtBug::getType); + result.add(ZtBug::getOs); + result.add(ZtBug::getBrowser); + result.add(ZtBug::getHardware); + result.add(ZtBug::getFound); +// result.add(ZtBug::getSteps); + + // 状态相关字段 + result.add(ZtBug::getStatus); + result.add(ZtBug::getSubstatus); + result.add(ZtBug::getColor); + result.add(ZtBug::getConfirmed); + result.add(ZtBug::getActivatedcount); + result.add(ZtBug::getActivateddate); + + // 人员相关字段 + result.add(ZtBug::getFeedbackby); + result.add(ZtBug::getNotifyemail); + result.add(ZtBug::getMailto); + result.add(ZtBug::getOpenedby); + result.add(ZtBug::getOpeneddate); + result.add(ZtBug::getOpenedbuild); + result.add(ZtBug::getAssignedTo); + result.add(ZtBug::getAssigneddate); + result.add(ZtBug::getDeadline); + result.add(ZtBug::getResolvedby); + result.add(ZtBug::getResolution); + + return result; + } + public static SFunction getSFunction(Class entityClass, String fieldName) { + // 获取实体类中名为 fieldName 的字段。 + Field field = getDeclaredField(entityClass, fieldName); + if (field == null) { + //如果字段不存在,使用 ExceptionUtils 抛出一个异常,指出实体类中没有找到该字段。 + throw ExceptionUtils.mpe("This class %s is not have field %s ", entityClass.getName(), fieldName); + } + SFunction func = null; + // 获取 MethodHandles.Lookup 实例,用于反射操作。 + final MethodHandles.Lookup lookup = MethodHandles.lookup(); + // 定义方法类型,表示实体类的实例方法,该方法返回字段的类型。 + MethodType methodType = MethodType.methodType(field.getType(), entityClass); + // 用于存储 LambdaMetafactory 创建的 CallSite 对象。 + final CallSite site; + // 构造标准的 Java getter 方法名。 + String getFunName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); + try { + // 使用 LambdaMetafactory 创建一个动态的 SFunction 实例。 + site = LambdaMetafactory.altMetafactory( + lookup, + "invoke", + MethodType.methodType(SFunction.class), + methodType, + lookup.findVirtual(entityClass, getFunName, MethodType.methodType(field.getType())), + methodType + ); + // 使用 CallSite 来获取 SFunction 实例。 + func = (SFunction) site.getTarget().invokeExact(); + // 将生成的 SFunction 实例存储到缓存中。 + return func; + } catch (Throwable e) { + // 如果在创建 SFunction 过程中发生异常,抛出异常,指出实体类中没有找到对应的 getter 方法。 + throw ExceptionUtils.mpe("This class %s is not have method %s ", entityClass.getName(), getFunName); + } + } + /** + * 递归获取类中声明的字段,包括私有字段。 + * @param clazz 要检查的类。 + * @param fieldName 要查找的字段名。 + * @return 返回找到的 Field 对象,如果没有找到则返回 null。 + */ + public static Field getDeclaredField(Class clazz, String fieldName) { + Field field = null; + // 遍历类及其父类,直到到达 Object 类。 + for (; clazz != Object.class; clazz = clazz.getSuperclass()) { + try { + // 尝试获取声明的字段。 + field = clazz.getDeclaredField(fieldName); + // 如果找到字段,返回该字段。 + return field; + } catch (NoSuchFieldException e) { + // 如果没有找到字段,继续查找父类。 + // 这里不处理异常,让其继续执行循环。 + } + } + // 如果没有找到字段,返回 null。 + return null; + } + } diff --git a/src/main/resources/mapper/ZtBugBoundUserMapper.xml b/src/main/resources/mapper/ZtBugBindUserMapper.xml similarity index 84% rename from src/main/resources/mapper/ZtBugBoundUserMapper.xml rename to src/main/resources/mapper/ZtBugBindUserMapper.xml index d733959..722086f 100644 --- a/src/main/resources/mapper/ZtBugBoundUserMapper.xml +++ b/src/main/resources/mapper/ZtBugBindUserMapper.xml @@ -1,7 +1,7 @@ - - + + diff --git a/src/main/resources/mapper/ZtBugMapper.xml b/src/main/resources/mapper/ZtBugMapper.xml index 3a34f6d..d7f221c 100644 --- a/src/main/resources/mapper/ZtBugMapper.xml +++ b/src/main/resources/mapper/ZtBugMapper.xml @@ -743,7 +743,7 @@ and openedDate #{end} - SELECT s.id, s.project, @@ -814,7 +814,7 @@ s.ys_remark, s.release_flag from zt_bug s - LEFT JOIN zt_bug_bound_user u on s.id = u.bug_id + LEFT JOIN zt_bug_bind_user u on s.id = u.bug_id WHERE 1= 1 and u.assigned_to = #{account} @@ -825,11 +825,124 @@ #{id} + + and s.bug_type = #{bugType.value } + and openedDate =]]> #{start} and openedDate #{end} + + + group by s.id + + + + diff --git a/src/main/resources/mapper/ZtTaskMapper.xml b/src/main/resources/mapper/ZtTaskMapper.xml index 27c0182..f9d5428 100644 --- a/src/main/resources/mapper/ZtTaskMapper.xml +++ b/src/main/resources/mapper/ZtTaskMapper.xml @@ -644,8 +644,12 @@ #{id} and ( - (openedDate >= #{start} and s.openedDate #{end}) + ( + s.status in ('wait','doing') and s.deadline >= #{start} + and DATE_ADD(deadline, INTERVAL 1 DAY) #{end} + ) or + ( finishedDate >= #{start} and s.finishedDate #{end}) )
需求编号
研发需求名称
验收人
需求编号
研发需求名称
验收人
需求编号
研发需求名称
来源部门
验收人
{id}
{title}
{nickName}
{id}
{title}
{nickName}
{id}
{title}
{dept}
{nickName}