diff --git a/src/main/java/com/sa/zentao/conf/CodeGenerator.java b/src/main/java/com/sa/zentao/conf/CodeGenerator.java index 2fe084d..6e7196c 100644 --- a/src/main/java/com/sa/zentao/conf/CodeGenerator.java +++ b/src/main/java/com/sa/zentao/conf/CodeGenerator.java @@ -22,7 +22,7 @@ public class CodeGenerator { //自己的名字 static String Author = "gqb"; - public static String tableName = "zt_story_case"; + public static String tableName = "zt_bug_bound_user"; /** *

@@ -53,7 +53,7 @@ public class CodeGenerator { mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); - dsc.setUrl("jdbc:mysql://192.168.1.161:3306/zentao?useUnicode=true&useSSL=false&characterEncoding=utf8"); + dsc.setUrl("jdbc:mysql://192.168.1.161:3306/zentao_dev?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); // dsc.setUsername("root"); diff --git a/src/main/java/com/sa/zentao/dao/PerformanceDTO.java b/src/main/java/com/sa/zentao/dao/PerformanceDTO.java index 210f4fb..adfb7ea 100644 --- a/src/main/java/com/sa/zentao/dao/PerformanceDTO.java +++ b/src/main/java/com/sa/zentao/dao/PerformanceDTO.java @@ -136,7 +136,7 @@ public class PerformanceDTO implements Serializable { // private BigDecimal projectScore=BigDecimal.ZERO; //项目文档 -// private BigDecimal projectDocumentScore=BigDecimal.ZERO; + private BigDecimal projectDocumentScore=BigDecimal.ZERO; // //会议管理 // private BigDecimal meetDocumentScore=BigDecimal.ZERO; diff --git a/src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java b/src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java index c1c11c8..872c068 100644 --- a/src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java +++ b/src/main/java/com/sa/zentao/dao/ProjectWorkDetailsDTO.java @@ -30,11 +30,20 @@ public class ProjectWorkDetailsDTO implements Serializable { //已验收需求总量 @ExcelProperty(value = "已验收需求总量",index =5) private BigDecimal ysStoryCount; + //验收通过率 - @ExcelProperty(value = "验收通过率",index =6) + @ExcelProperty(value = "检出bug量",index =6) + private BigDecimal findBugCount; + //验收不通过数量 + @ExcelProperty(value = "检出bug率",index =7) + private BigDecimal findBugRate; + + + //验收通过率 + @ExcelProperty(value = "验收通过率",index =8) private BigDecimal ysYesRate; //验收不通过数量 - @ExcelProperty(value = "验收不通过数量",index =7) + @ExcelProperty(value = "验收不通过数量",index =9) private BigDecimal ysNoCount; //验收情况备注 } diff --git a/src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java b/src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java index 0f21ac8..f081073 100644 --- a/src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java +++ b/src/main/java/com/sa/zentao/dao/WorkDetailsDTO.java @@ -44,6 +44,9 @@ public class WorkDetailsDTO implements Serializable { @ExcelProperty(value = "产出线上Bug ",index =6) private BigDecimal bugCount; + @ExcelProperty(value = "任务及时完成率 ",index =7) + private BigDecimal finishPunctuality=BigDecimal.ZERO;; + @ExcelIgnore private UserType userType; @ExcelIgnore diff --git a/src/main/java/com/sa/zentao/dao/ZtBugBoundUserDTO.java b/src/main/java/com/sa/zentao/dao/ZtBugBoundUserDTO.java new file mode 100644 index 0000000..ee735c6 --- /dev/null +++ b/src/main/java/com/sa/zentao/dao/ZtBugBoundUserDTO.java @@ -0,0 +1,35 @@ +package com.sa.zentao.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author gqb + * @since 2025-05-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class ZtBugBoundUserDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + private Integer bugId; + + /** + * 责任人 + */ + private String assignedTo; + + +} diff --git a/src/main/java/com/sa/zentao/dao/ZtBugDTO.java b/src/main/java/com/sa/zentao/dao/ZtBugDTO.java index cd1d535..395f6bc 100644 --- a/src/main/java/com/sa/zentao/dao/ZtBugDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtBugDTO.java @@ -215,4 +215,6 @@ public class ZtBugDTO implements Serializable { private String releaseName; private String feedbackSpec; + //关联责任人list + private List boundList; } diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java index c212f3c..0e6fe8c 100644 --- a/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java @@ -122,4 +122,5 @@ public class ZtStoryFeedbackDTO implements Serializable { private String oaName; + private String finishedRemark; } diff --git a/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java b/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java index 49509ff..694d09e 100644 --- a/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtTaskDTO.java @@ -203,4 +203,9 @@ public class ZtTaskDTO implements Serializable { private List bugList; private String feedbackSpec; + + //问题反馈处理结果 + private String feedbackRemark; + + private Integer delayFlag=0; } diff --git a/src/main/java/com/sa/zentao/entity/ZtMeeting.java b/src/main/java/com/sa/zentao/entity/ZtMeeting.java index b606f29..b2e9045 100644 --- a/src/main/java/com/sa/zentao/entity/ZtMeeting.java +++ b/src/main/java/com/sa/zentao/entity/ZtMeeting.java @@ -70,9 +70,7 @@ public class ZtMeeting implements Serializable { // private Integer userStory; private String storyIds; - @TableField(exist = false) private String result; - @TableField(exist = false) private String meetingAfter; } diff --git a/src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java b/src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java index 542d46c..8177a6a 100644 --- a/src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java +++ b/src/main/java/com/sa/zentao/entity/ZtStoryFeedback.java @@ -72,7 +72,8 @@ public class ZtStoryFeedback implements Serializable { // wait doing finished submitVerified 提交验收 closed reviewing verified 验收 dontHand 无需处理 (查询用noVerified 验收不通过) private String status; - + //处理完成描述 + private String finishedRemark; private String fileUrl; diff --git a/src/main/java/com/sa/zentao/entity/ZtTask.java b/src/main/java/com/sa/zentao/entity/ZtTask.java index 92a3f10..06786f5 100644 --- a/src/main/java/com/sa/zentao/entity/ZtTask.java +++ b/src/main/java/com/sa/zentao/entity/ZtTask.java @@ -194,5 +194,6 @@ public class ZtTask implements Serializable { private String approvalRemark; - + //问题反馈处理结果 + private String feedbackRemark; } diff --git a/src/main/java/com/sa/zentao/enums/ActionStatus.java b/src/main/java/com/sa/zentao/enums/ActionStatus.java index 16184a2..32a4485 100644 --- a/src/main/java/com/sa/zentao/enums/ActionStatus.java +++ b/src/main/java/com/sa/zentao/enums/ActionStatus.java @@ -45,8 +45,8 @@ public enum ActionStatus { CASESUBREVIEW(52, "caseSubmitreview","需求用例提交至评审"), CASEPSTG(53, "reviewpassed","评审通过"), - CASEPSYDMQ(54, "reviewclarified","评审有待明确"), - CASEPSBTG(55, "reviewrejected","评审不通过"), + CASEPSYDMQ(54, "reviewclarified","测试用例评审有待明确"), + CASEPSBTG(55, "reviewrejected","测试用例评审不通过"), CASEBJ(4, "caseEdited","编辑需求用例"), CASEXJ(1, "casePpened","新建用例"), diff --git a/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java b/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java index 518724b..aa3f93d 100644 --- a/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java +++ b/src/main/java/com/sa/zentao/mapper/ZtBugMapper.java @@ -26,4 +26,8 @@ public interface ZtBugMapper extends BaseMapper { List bugListByIds(@Param("ids")List ids); List bugListByProductAndDate(@Param("pIds")List pIds, @Param("start")Date start,@Param("end") Date lastDayOfMonth); + + 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); } diff --git a/src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java b/src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java index 5a9c930..1b15264 100644 --- a/src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java +++ b/src/main/java/com/sa/zentao/mapper/ZtStoryMapper.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.sa.zentao.qo.ZtProjectQo; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; /** @@ -32,4 +33,8 @@ public interface ZtStoryMapper extends BaseMapper { List storyPageListByIds(@Param("ids") List ids); + + //pids 产品id + List getStoryListByDatePidsProject(@Param("ids")List pids, @Param("project")Integer project + , @Param("start")Date firstDayOfMonth, @Param("end")Date lastDayOfMonth); } diff --git a/src/main/java/com/sa/zentao/qo/ZtProjectQo.java b/src/main/java/com/sa/zentao/qo/ZtProjectQo.java index df26def..aefe172 100644 --- a/src/main/java/com/sa/zentao/qo/ZtProjectQo.java +++ b/src/main/java/com/sa/zentao/qo/ZtProjectQo.java @@ -107,4 +107,6 @@ public class ZtProjectQo extends BaseQo { private String bugType; private String account; + //1 延期 2不延期 + private Integer delayFlag=0 ; } diff --git a/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java b/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java index 1212799..7c0b8aa 100644 --- a/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java +++ b/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java @@ -63,4 +63,5 @@ public class ZtReleaseQo extends BaseQo { //验收结果 1.通过 2不通过 private Integer ysFlag; // + private String ysUser; } diff --git a/src/main/java/com/sa/zentao/service/IZtBugService.java b/src/main/java/com/sa/zentao/service/IZtBugService.java index 9fa7ccd..cfa21fb 100644 --- a/src/main/java/com/sa/zentao/service/IZtBugService.java +++ b/src/main/java/com/sa/zentao/service/IZtBugService.java @@ -53,4 +53,13 @@ public interface IZtBugService extends IService { List getNormalBugList(List bugList); List bugListByProductAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth); + + List bugListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth); + + + List bugBoundsListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth,String account); + + List getDevBugList(List bugList); + + } diff --git a/src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java b/src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java index e0fe23f..284d826 100644 --- a/src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java +++ b/src/main/java/com/sa/zentao/service/IZtStoryFeedbackService.java @@ -43,7 +43,7 @@ public interface IZtStoryFeedbackService extends IService { void feedbackStart(Integer feedbackId); - void feedbackFinished(Integer feedbackId); + void feedbackFinished(Integer feedbackId,String finishedRemark); void submitVerified(ZtStoryFeedbackDTO dto); diff --git a/src/main/java/com/sa/zentao/service/IZtStoryService.java b/src/main/java/com/sa/zentao/service/IZtStoryService.java index 25e0f3e..86a7393 100644 --- a/src/main/java/com/sa/zentao/service/IZtStoryService.java +++ b/src/main/java/com/sa/zentao/service/IZtStoryService.java @@ -12,6 +12,7 @@ import com.sa.zentao.enums.TaskType; import com.sa.zentao.qo.ZtProjectQo; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; import java.util.Map; @@ -97,4 +98,6 @@ public interface IZtStoryService extends IService { List getNormalStory(List sList); public Map getStoryCaseMap(List list); + + List getStoryListByDatePidsProject(List pids, Integer id, Date firstDayOfMonth, Date lastDayOfMonth); } diff --git a/src/main/java/com/sa/zentao/service/VxService.java b/src/main/java/com/sa/zentao/service/VxService.java index 606a414..39c13a6 100644 --- a/src/main/java/com/sa/zentao/service/VxService.java +++ b/src/main/java/com/sa/zentao/service/VxService.java @@ -27,18 +27,22 @@ import java.util.Map; public class VxService { @Value("${vx.corpid}") - private static String corpid; + private String corpid; - @Value("${vx.dkcorpsecret}") - private static String dkcorpsecret; @Value("${vx.salaryCorpsecretApp}") - private static String salaryCorpsecretApp; + private String salaryCorpsecretApp; + + @Value("${vx.agentld}") + private String agentid; + @Autowired private IZtUserService userService; + + // public void sendMessageToVx(String vxId, String text, Date date) { // Environment bean = SpringUtil.getBean(Environment.class); // @@ -83,7 +87,6 @@ public class VxService { if (corpid == null) { corpid = bean.getProperty("vx.corpid"); - dkcorpsecret = bean.getProperty("vx.dkcorpsecret"); salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp"); } String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp; @@ -96,7 +99,7 @@ public class VxService { Map map = new HashMap(); map.put("touser", vxId); - map.put("agentid", 3010185); + map.put("agentid", agentid); map.put("safe", 0); map.put("enable_id_trans", 0); map.put("enable_duplicate_check", 0); @@ -115,18 +118,17 @@ public class VxService { public void sendMessageToVx(String account, String text, Date date) { // -// ZtUser ztUser = this.userService.selectByName(account); -// if(ztUser==null||StringUtils.isEmpty(ztUser.getVx())){ -// return; -// } - String vxId = "lisi";//CryptoUtils.aesDecryptForFront(ztUser.getVx(), CryptoUtils.KEY_DES); + ZtUser ztUser = this.userService.selectByName(account); + if(ztUser==null||StringUtils.isEmpty(ztUser.getVx())){ + return; + } + String vxId = CryptoUtils.aesDecryptForFront(ztUser.getVx(), CryptoUtils.KEY_DES); Environment bean = SpringUtil.getBean(Environment.class); if (corpid == null) { corpid = bean.getProperty("vx.corpid"); - dkcorpsecret = bean.getProperty("vx.dkcorpsecret"); salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp"); } String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp; @@ -140,7 +142,7 @@ public class VxService { Map map = new HashMap(); map.put("touser", vxId); // - map.put("agentid", 1000002); + map.put("agentid", agentid); // map.put("agentid", 3010185); map.put("safe", 0); map.put("enable_id_trans", 0); @@ -149,9 +151,9 @@ public class VxService { Map texts = new HashMap(); texts.put("content", text); map.put("text", texts); - log.info("调用微信start==",JSON.toJSONString(map)); + log.info("调用微信start=={}",JSON.toJSONString(map)); String s = JSONPost(url, map); - log.info("调用微信end==",s); + log.info("调用微信end=={}",s); } catch (IOException e) { e.printStackTrace(); log.error("",e); 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 a4600ea..e6d62f7 100644 --- a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java +++ b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java @@ -497,12 +497,15 @@ public class IZtCountService { //问题反馈 未受理 result.setFeedbackWslCount(feedbacks.stream().filter(o -> "wait".equals(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); //处理中的 wait doing finished submitVerified 提交验收 closed reviewing verified 验收 dontHand 无需处理 - result.setFeedbackClzCount(feedbacks.stream().filter(o -> Arrays.asList("doing", "finished", "submitVerified").contains(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); - //处理完的 - result.setFeedbackClwCount(feedbacks.stream().filter(o -> Arrays.asList("verified").contains(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); + result.setFeedbackClzCount(feedbacks.stream() + .filter(o -> Arrays.asList("doing", "finished") + .contains(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); + //处理完的 改完待验收 250512 + result.setFeedbackClwCount(feedbacks.stream().filter(o -> Arrays.asList("submitVerified").contains(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); //延期的 result.setFeedbackYqCount(feedbacks.stream().filter(o -> Arrays.asList("doing", "wait").contains(o.getStatus())).filter(o -> o.getPlanFinishDate() != null && o.getPlanFinishDate().getTime() < new Date().getTime()).map(o -> o.getId() + "").collect(Collectors.joining(","))); - result.setFeedbackGbCount(feedbacks.stream().filter(o -> "closed".equals(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); + + result.setFeedbackGbCount(feedbacks.stream().filter(o -> "closed".equals(o.getStatus())||"verified".equals(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); return result; } @@ -547,12 +550,16 @@ public class IZtCountService { Map userMap = userService.userMapByIds(null); List list = new ArrayList<>(); - + String sDate = DateUtils.formatDate(qo.getDate(), "yyyy-MM"); //生成模板 for (int i = 0; i < perList.size(); i++) { PerformanceDTO performanceDTO = perList.get(i); ZtUser ztUser = userMap.get(performanceDTO.getAccount()); - + ZtMonthScore ztMonthScore = this.monthScoreService.getOne(new QueryWrapper().lambda().eq(ZtMonthScore::getDateStr, sDate).eq(ZtMonthScore::getAccount, performanceDTO.getAccount())); + if(ztMonthScore==null){ + continue; + } + performanceDTO=JSON.parseObject(ztMonthScore.getScopeJson(),PerformanceDTO.class); if (ztUser.getAccount().equals("liyuyan")) { generatorXMZLExcel(performanceDTO.getUserName(), performanceDTO, qo.getDate()); list.add(performanceDTO.getUserName() + "项目助理考核.xlsx"); @@ -591,27 +598,11 @@ public class IZtCountService { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); -// list.add(fileName); -// for (int i = 0; i < perList.size(); i++) { -// PerformanceDTO performanceDTO = perList.get(i); -// ZtUser ztUser = userMap.get(performanceDTO.getAccount()); -// -// -// if(ztUser.getUserType()==UserType.CS){ -// list.add(performanceDTO.getUserName()+"测试.xlsx"); -// -// generatorTestExcel(performanceDTO.getUserName(),performanceDTO,qo.getDate()); -// }else if(ztUser.getUserType()==UserType.KFZ){ -// list.add(performanceDTO.getUserName()+"开发.xlsx"); -// generatorDevlopExcel(performanceDTO.getUserName(),performanceDTO,qo.getDate()); -// } -// } String excelName = DateUtils.formatDate(qo.getDate(), "yyyy-MM-dd") + "绩效" + ".xlsx"; ExcelUtil.mergexcel(list, excelName, dir); - File f = new File(dir + excelName); InputStream fis = new BufferedInputStream(new FileInputStream(f)); // InputStream fis = new BufferedInputStream(new FileInputStream("D:\\1.bmp")); @@ -775,7 +766,9 @@ public class IZtCountService { if (CollectionUtils.isEmpty(projectproducts)) { return new ArrayList<>(); } - List taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth, productList.stream().map(o->o.getId()).collect(Collectors.toList())); + List pids = productList.stream().map(o -> o.getId()).collect(Collectors.toList()); + + List taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth,pids); List ztProjects = this.projectService.getExecutionsListByProjectAndDate(projectproducts.stream().map(o->o.getProject()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth); @@ -790,6 +783,7 @@ public class IZtCountService { if (CollectionUtils.isEmpty(accountIds)) { return new ArrayList<>(); } + Map userMap = this.userService.userMapByIds(accountIds); //accountIds 成员 List ztUsers = this.userService.list(new QueryWrapper().lambda() @@ -808,7 +802,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(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); + result.add(buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); } 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) { @@ -863,17 +857,16 @@ public class IZtCountService { * 2. <100%,每减少1%,扣3分,扣完截止。 * */ - dto.setPunctualityScore(onTimeFinishRate.intValue() == 1 ? BigDecimal.valueOf(25) - : BigDecimal.valueOf(25).subtract((BigDecimal.valueOf(1).subtract(onTimeFinishRate).multiply(BigDecimal.valueOf(100))).multiply(BigDecimal.valueOf(3))).floatValue() <= 0 ? BigDecimal.ZERO : - BigDecimal.valueOf(BigDecimal.valueOf(25).subtract((BigDecimal.valueOf(1).subtract(onTimeFinishRate).multiply(BigDecimal.valueOf(100))).multiply(BigDecimal.valueOf(3))).floatValue()) - ); + 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.list(new QueryWrapper().lambda(). +// ge(ZtBug::getOpeneddate, firstDayOfMonth).le(ZtBug::getOpeneddate, lastDayOfMonth) +// .eq(ZtBug::getAssignedTo, u.getAccount())); bugList=this.bugService.getNormalBugList(bugList); //bug密度 int bugSize = bugList.size(); @@ -913,6 +906,22 @@ public class IZtCountService { return dto; } + private BigDecimal getKFZPunctualityScore(BigDecimal onTimeFinishRate) { + + if(BigDecimalUtils.isZero(onTimeFinishRate)){ + return BigDecimal.ZERO; + } + int onTimeRate = onTimeFinishRate.multiply(BigDecimal.valueOf(100)).intValue(); + if(onTimeRate>=100){ + return BigDecimal.valueOf(25); + }else if(onTimeRate>=95){ + return BigDecimal.valueOf(20+(100-onTimeRate)); + }else{ + int scope = (20-(94-onTimeRate)*2); + return scope<0?BigDecimal.ZERO:BigDecimal.valueOf(scope); + } + } + public PerformanceDTO setUserWorkTime(PerformanceDTO dto, Date d, List approvalList, Date firstDayOfMonth) { //本月天数 int workDaysInCurrentMonth = DateUtils.getWorkDaysInCurrentMonth(d); @@ -931,10 +940,12 @@ public class IZtCountService { dto.setTotalTime(totalTime.multiply(BigDecimal.valueOf(0.75))); //达标工时 dto.setExamineTime(totalTime.subtract(applyTime).multiply(BigDecimal.valueOf(0.75))); + + return dto; } - PerformanceDTO buildCScore(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) { PerformanceDTO dto = new PerformanceDTO(); dto.setUserName(u.getNickname()); @@ -976,14 +987,17 @@ public class IZtCountService { //轻微 long slightBug = allBugList.stream().filter(o -> Arrays.asList(4, 2, 3).contains(o.getSeverity())).count(); long totalBug = seriousBug * 5 + slightBug * 1; - dto.setBugFindRate(BigDecimalUtils.isZero(dto.getExamineTime()) ? BigDecimal.ZERO : BigDecimal.valueOf(totalBug).divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP)); //缺陷检出率 TODO bug 数量 / 可用工时 250418尹工说的 - int bugFindScore = dto.getBugFindRate().multiply(BigDecimal.valueOf(100)).intValue() > 20 ? 30 : - (30 - (20 - BigDecimal.valueOf(totalBug).divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP).multiply(BigDecimal.valueOf(100)).intValue()) * 2); + // 2025-05-12 尹工说的 测试在指定时间完成 并且指派给他 的开发任务工时 + + + + dto.setDevSeriousBug(BigDecimal.valueOf(seriousBug)); dto.setDevSlightBug(BigDecimal.valueOf(slightBug)); //bug检出率 - dto.setBugFindScore(BigDecimal.valueOf(bugFindScore < 0 ? 0 : bugFindScore)); + dto =getBugFindScore(dto,u,userMap,pids,firstDayOfMonth,lastDayOfMonth,totalBug); + //暂未定义 dto.setSlightBug(BigDecimal.ZERO); dto.setSeriousBug(BigDecimal.ZERO); @@ -1023,6 +1037,43 @@ public class IZtCountService { return dto; } + private PerformanceDTO getBugFindScore(PerformanceDTO dto,ZtUser u, Map userMap,List pids, Date firstDayOfMonth, Date lastDayOfMonth,long totalBug) { + + 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)){ + return dto; + } + + List taskList = this.taskService.list(new QueryWrapper().lambda() + .eq(ZtTask::getType,"devel") + .in(ZtTask::getAssignedTo,accountIds) + .in(ZtTask::getStory, list.stream().map(o -> o.getId()).collect(Collectors.toList()))); + if(CollectionUtils.isEmpty(taskList)){ + return dto; + } + + //开发总工时 + BigDecimal totalTimeWorkHours = floatBatchAdd(taskList.stream().map(o -> o.getEstimate()).collect(Collectors.toList())); + + BigDecimal bugRate= BigDecimalUtils.isZero(totalTimeWorkHours)?BigDecimal.ZERO: + BigDecimal.valueOf(totalBug).divide(totalTimeWorkHours,2,BigDecimal.ROUND_UP); + int i = bugRate.multiply(BigDecimal.valueOf(100)).intValue(); + dto.setBugFindRate(bugRate); + if(i<=0){ + + }else if(i>20){ + dto.setBugFindScore(BigDecimal.valueOf(30)); + }else{ + dto.setBugFindScore((30-(20-i)*2)<=0?BigDecimal.ZERO:BigDecimal.valueOf((30-(20-i)*2))); + } + return dto; + } + PerformanceDTO buildUiScore(ZtUser u, List approvalList, Date firstDayOfMonth, Date lastDayOfMonth, List taskList, Date d) { PerformanceDTO dto = new PerformanceDTO(); @@ -1133,7 +1184,7 @@ public class IZtCountService { dto = getMeetScore(u, firstDayOfMonth, lastDayOfMonth, dto); dto.setDocumentQualityScore(BigDecimal.valueOf(50)); - + dto.setProjectDocumentScore(BigDecimal.valueOf(50)); return dto; } @@ -1150,8 +1201,7 @@ public class IZtCountService { if (CollectionUtils.isEmpty(list)) { return dto; } - long weekCount = 1; - list.stream().filter(o -> o.getType() == MeetingTypeEnums.week).count(); + long weekCount =list.stream().filter(o -> o.getType() == MeetingTypeEnums.week).count(); dto.setMeetWeek(BigDecimal.valueOf(weekCount)); int weekMeetScore = (int) (weekCount == 0 ? 0 : (weekCount >= 4) ? 4 * 6 : (24 - (4 - weekCount) * 6)); @@ -1159,6 +1209,8 @@ public class IZtCountService { dto.setMeetStory(BigDecimal.valueOf(storyCount)); int storyScore = storyCount > 0 ? 6 : 0; dto.setMeetScore(BigDecimal.valueOf(storyScore + weekMeetScore)); + dto.setDocumentQualityScore(BigDecimal.valueOf(50)); + dto.setDocumentQualityProblem(BigDecimal.ZERO); return dto; } @@ -1562,13 +1614,64 @@ public class IZtCountService { return result; } - List pList = this.projectService.listByIds(projectproducts.stream().map(o -> o.getProject()).collect(Collectors.toList())); - + List projectIds = projectproducts.stream().map(o -> o.getProject()).collect(Collectors.toList()); + List pList = this.projectService.listByIds(projectIds); + pList=pList.stream().filter(o->!"1".equals(o.getDeleted())).filter(o->o.getRealEnd()==null|| + (o.getRealEnd()!=null&&DateUtils.getDayLast(o.getRealEnd()).getTime()>firstDayOfMonth.getTime())).collect(Collectors.toList()); //完成任务总量 开发 List taskList =this.taskService.taskListByEIdsAndDate(firstDayOfMonth,lastDayOfMonth,pids); + Map userMap = userService.userMapByIds(null); + + List bugList = this.bugService.bugListByProductAndDate(pids,firstDayOfMonth,lastDayOfMonth); + bugList = bugService.getNormalBugList(bugList); + + bugList = bugService.getDevBugList(bugList); + + + + List ztProjects = this.projectService.getExecutionsListByProjectAndDate(projectproducts.stream().map(o->o.getProject()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth); + + if (CollectionUtils.isEmpty(ztProjects)) { + return new ArrayList<>(); + } + + 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 multipleUserList= getmultipleDepartProjectTeam(firstDayOfMonth,lastDayOfMonth); + + for (ZtProject p : pList) { + BigDecimal examineTime =BigDecimal.valueOf(0); + for (ZtUser u:ztUsers ) { + List approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth); + + PerformanceDTO performanceDTO = buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, + taskList.stream().filter(o->o.getProject().equals(p.getId())).collect(Collectors.toList()), d); + + if (u != null && u.getUserType() == UserType.KFZ) { + //如果多项目组 那么 分配任务工时占 总工时的% TODO + if(multipleUserList.contains(u.getAccount())){ + examineTime = examineTime.add(performanceDTO.getAllocationTime()); + }else{ + examineTime = examineTime.add(performanceDTO.getExamineTime()); + } + } + } + + ProjectWorkDetailsDTO dto = new ProjectWorkDetailsDTO(); result.add(dto); @@ -1582,14 +1685,14 @@ public class IZtCountService { continue; } //项目的需求 - List storyIds = getStoryIds(project); - - +// List storyIds = getStoryIds(project); + List storyList = this.storyService.getStoryListByDatePidsProject(pids,p.getId(),firstDayOfMonth,lastDayOfMonth); // //完成需求总量 - List storyList = this.storyService.list(new QueryWrapper().lambda().in(ZtStory::getProduct, pids) - .ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth)); +// List storyList = this.storyService.list(new QueryWrapper().lambda().in(ZtStory::getProduct, pids) +// +// .ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth)); dto.setFinishCount(storyList.size()); // //上线的需求数量 @@ -1601,9 +1704,10 @@ 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) .filter(o->o.getStatus().equals("done")).collect(Collectors.toList()); @@ -1636,6 +1740,14 @@ public class IZtCountService { } List noTg = releaseStoryList.stream().filter(o -> o.getStage().equals("verified") && o.getYsFlag().intValue() == 2).collect(Collectors.toList()); dto.setYsNoCount(BigDecimal.valueOf(noTg.size())); + + int bugSize = (int)bugList.stream().filter(o->o.getProject().equals(p.getId())).count(); + dto.setFindBugCount(BigDecimal.valueOf(bugSize)); + if(BigDecimalUtils.isZero(examineTime)){ + examineTime=BigDecimal.valueOf(1); + } + dto.setFindBugRate(dto.getFindBugCount().divide(examineTime,3,BigDecimal.ROUND_DOWN)); + } @@ -1736,6 +1848,15 @@ public class IZtCountService { dto.setSaturation(dto.getWorkTime().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : dto.getStoryTotalTime().divide(dto.getHaveTime(), 2, BigDecimal.ROUND_HALF_UP)); dto.setBugCount(BigDecimal.valueOf(prodBugList.stream().filter(o -> u.getAccount().equals(o.getAssignedTo())).count())); + + + BigDecimal onTime = floatBatchAdd(fTask.stream().filter(o -> o.getFinishedDate() != null && o.getFinishedDate().getTime() <= DateUtils.getDayLast(o.getDeadline()).getTime()).map(o -> o.getEstimate()).collect(Collectors.toList())); + + + BigDecimal onTimeFinishRate = BigDecimalUtils.isZero(dto.getStoryTotalTime()) ? onTime : onTime.divide(dto.getStoryTotalTime(), 2, BigDecimal.ROUND_UP); + + dto.setFinishPunctuality(onTimeFinishRate); + result.add(dto); } } @@ -1993,6 +2114,19 @@ public class IZtCountService { dataMap.put("工作态度和责任感", "5"); dataMap.put("创新贡献", "0"); dataMap.put("质量贡献", "0"); + + dataMap.put("totalTask", performanceDTO.getTotalTask().toString()); + dataMap.put("delayTask", performanceDTO.getDelayTask().toString()); + dataMap.put("finishPunctuality", performanceDTO.getFinishPunctuality().multiply(BigDecimal.valueOf(100)).toString()); + + dataMap.put("workTime", performanceDTO.getWorkTime().toString()); + dataMap.put("saturation", performanceDTO.getSaturation().multiply(BigDecimal.valueOf(100)).toString()); + dataMap.put("examineTime", performanceDTO.getExamineTime().toString()); + + dataMap.put("bugCount", performanceDTO.getBugCount().toString()); + dataMap.put("bugDensity", performanceDTO.getBugDensity().multiply(BigDecimal.valueOf(100)).toString()); + + dataMap.put("总分", devlopTotal( dataMap.get("准时率得分"), dataMap.get("Bug密度"), @@ -2010,6 +2144,11 @@ public class IZtCountService { dataMap.put("name", name); dataMap.put("date", DateUtils.formatDate(d, "yyyy-MM")); dataMap.put("总分", "100"); + + dataMap.put("任务总量", performanceDTO.getTotalTask().toString()); + dataMap.put("超期数量", performanceDTO.getDelayTask().toString()); + dataMap.put("及时完成率", performanceDTO.getFinishPunctuality().toString()); + writeXlsx(name, "templates/scope/UI工程师.xlsx", name + "UI工程师.xlsx", dataMap); InputStream templateFile = null; // try { @@ -2072,6 +2211,17 @@ public class IZtCountService { dataMap.put("专业技能提升", "5"); + dataMap.put("普通bug",performanceDTO.getSlightBug().toString()); + dataMap.put("重大bug", performanceDTO.getSeriousBug().toString()); + dataMap.put("线上bug率", performanceDTO.getBugDensity().multiply(BigDecimal.valueOf(100)).toString()); + dataMap.put("分配工时", performanceDTO.getAllocationTime().toString()); + dataMap.put("可用工时", performanceDTO.getExamineTime().toString()); + dataMap.put("分配工时占比", performanceDTO.getAllocationTimeManageRate().multiply(BigDecimal.valueOf(100)).toString()); + dataMap.put("召开周会数量", performanceDTO.getMeetWeek().toString()); + dataMap.put("召开需求会议数量", performanceDTO.getMeetStory().toString()); + + + dataMap.put("总分", devlopTotal( dataMap.get("版本计划完成率"), dataMap.get("任务管理"), @@ -2315,8 +2465,18 @@ public class IZtCountService { dataMap.put("name", name); dataMap.put("date", DateUtils.formatDate(d, "yyyy-MM")); dataMap.put("项目绩效", performanceDTO.getReleaseScore().toString()); - dataMap.put("项目文档", "50"); + dataMap.put("项目文档", performanceDTO.getProjectDocumentScore().toString()); dataMap.put("会议管理", performanceDTO.getMeetScore().toString()); + + + dataMap.put("上线需求数量", performanceDTO.getReleaseCount().toString()); + dataMap.put("及时验收数量", performanceDTO.getReleaseOnTimeCount().toString()); + dataMap.put("及时验收率", performanceDTO.getReleaseOnTimeRate().multiply(BigDecimal.valueOf(100)).toString()); + dataMap.put("召开周会数量", performanceDTO.getMeetWeek().toString()); + dataMap.put("召开需求数量", performanceDTO.getMeetStory().toString()); + + + dataMap.put("总分", devlopTotal(dataMap.get("项目绩效"), dataMap.get("项目文档"), dataMap.get("会议管理"))); writeXlsx(name, "templates/scope/项目助理考核.xlsx", name + "项目助理考核.xlsx", dataMap); @@ -2346,6 +2506,21 @@ public class IZtCountService { dataMap.put("工作态度", "5"); dataMap.put("质量贡献", "5"); dataMap.put("线上Bug", "20"); + + + + + dataMap.put("任务总量", performanceDTO.getTotalTask().toString()); + dataMap.put("延期数量", performanceDTO.getDelayTask().toString()); + dataMap.put("及时完成率", performanceDTO.getFinishPunctuality().multiply(BigDecimal.valueOf(100)).toString()); + + + dataMap.put("测试普通bug", performanceDTO.getDevSlightBug().toString()); + dataMap.put("测试重大bug", performanceDTO.getDevSeriousBug().toString()); + dataMap.put("缺陷检出率", performanceDTO.getBugFindRate().multiply(BigDecimal.valueOf(100)).toString()); + dataMap.put("线上普通bug", performanceDTO.getSlightBug().toString()); + dataMap.put("线上重大bug", performanceDTO.getSeriousBug().toString()); + dataMap.put("总分", devlopTotal(dataMap.get("准时率得分") , dataMap.get("缺陷检出率"), dataMap.get("测试文档"), dataMap.get("工作态度"), dataMap.get("质量贡献"), dataMap.get("线上Bug")) ); @@ -2382,17 +2557,13 @@ public class IZtCountService { Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(d); Date lastDayOfMonth = DateUtils.getLastDayOfMonth(d); - List pIds = this.projectService.authProductList(); - if (CollectionUtils.isEmpty(pIds)) { + List pids = this.projectService.authProductList(); + if (CollectionUtils.isEmpty(pids)) { return result; } - List productList = this.productService.listByIds(pIds); - if (CollectionUtils.isEmpty(productList)) { - return result; - } List projectproducts = this.projectproductService.list(new QueryWrapper().lambda() - .in(ZtProjectproduct::getProduct, productList.stream().map(o -> o.getId()).collect(Collectors.toList()))); + .in(ZtProjectproduct::getProduct, pids)); if (CollectionUtils.isEmpty(projectproducts)) { return result; } @@ -2401,12 +2572,14 @@ public class IZtCountService { if (CollectionUtils.isEmpty(execList)) { return result; } - List taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth, pIds); - + List taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth, pids); + taskList=taskService.getNormalTaskList(taskList); if (CollectionUtils.isEmpty(taskList)) { return result; } + + List ztProjects = this.projectService.listByIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList())); @@ -2429,8 +2602,9 @@ public class IZtCountService { //accountIds 成员 - UserType userType = RiskUserThreadLocal.get().getUserType(); List approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth); + Map userMap = this.userService.userMapByIds(accountIds); + if (name.equals("liyuyan")) { result = buildXMZLScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); @@ -2439,7 +2613,7 @@ 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(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); + result = buildCScore(userMap,pids,u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); } 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) { @@ -2447,7 +2621,6 @@ public class IZtCountService { ZtCountQo ztCountQo = new ZtCountQo(); BeanUtils.copyProperties(qo, ztCountQo); List perList = this.newPerformanceCount(ztCountQo); - Map userMap = this.userService.userMapByIds(accountIds); result = buildTaskManage(result, perList, userMap); result = buildBugManage(result, ztCountQo, perList, userMap); @@ -2678,8 +2851,7 @@ public class IZtCountService { } } dto.setAllocationTime(allocationTime); - - List devBugList = bugList.stream().filter(o -> o.getBugType().equals("dev")).collect(Collectors.toList()); + List devBugList = this.bugService.getDevBugList(bugList); int devBugCount = devBugList.size(); dto.setBugCount(BigDecimal.valueOf(devBugCount)); dto.setBugDensity((dto.getAllocationTime() == null || BigDecimalUtils.isZero(dto.getAllocationTime())) ? BigDecimal.ZERO : BigDecimal.valueOf(devBugCount).divide(dto.getAllocationTime(), 3, BigDecimal.ROUND_DOWN)); 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 a5c6d74..af34428 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java @@ -8,10 +8,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.sa.zentao.conf.LoginRiskUser; import com.sa.zentao.conf.RiskUserThreadLocal; -import com.sa.zentao.dao.BusinessException; -import com.sa.zentao.dao.ZtBugDTO; -import com.sa.zentao.dao.ZtCaseDTO; -import com.sa.zentao.dao.ZtTaskDTO; +import com.sa.zentao.dao.*; import com.sa.zentao.entity.*; import com.sa.zentao.enums.ActionStatus; import com.sa.zentao.enums.ActionType; @@ -90,6 +87,8 @@ public class ZtBugServiceImpl extends ServiceImpl implements @Autowired private IZtReleaseService releaseService; + @Autowired + private IZtBugBoundUserService bugBoundUserService; @Override @@ -328,6 +327,8 @@ public class ZtBugServiceImpl extends ServiceImpl implements if (d.getDeadline() != null) { d.setDeadline(DateUtils.getDayLast(d.getDeadline())); } + List boundList = this.bugBoundUserService.listByBugId(d.getId()); + d.setBoundList(BeanCopyUtil.copyListProperties(boundList,ZtBugBoundUserDTO::new)); return d; } @@ -383,6 +384,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<>(); for (ZtBugDTO d:list) { ZtBug b=new ZtBug(); BeanUtils.copyProperties(d,b); @@ -393,9 +395,17 @@ public class ZtBugServiceImpl extends ServiceImpl implements b.setOpeneddate(new Date()); b.setOpenedby(loginRiskUser.getName()); b.setStatus("active"); + saveBatch.add(b); } this.saveBatch(saveBatch); + for (ZtBug b:saveBatch) { + ZtBugBoundUser ztBugBoundUser = new ZtBugBoundUser(); + ztBugBoundUser.setBugId(b.getId()); + ztBugBoundUser.setAssignedTo(b.getAssignedTo()); + bountSaveList.add(ztBugBoundUser); + } + bugBoundUserService.saveBatch(bountSaveList); Map> eMap = saveBatch.stream().filter(o->o.getExecution()!=null&&o.getExecution()!=0).collect(Collectors.groupingBy(ZtBug::getExecution)); for (Integer e:eMap.keySet()) { @@ -571,6 +581,21 @@ public class ZtBugServiceImpl extends ServiceImpl implements return this.baseMapper.bugListByProductAndDate(pIds,firstDayOfMonth,lastDayOfMonth); } + @Override + public List bugListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth) { + return this.baseMapper.bugListByProjectAndDate(pIds,firstDayOfMonth,lastDayOfMonth); + } + + @Override + public List bugBoundsListByProjectAndDate(List pIds, Date firstDayOfMonth, Date lastDayOfMonth, String account) { + return this.baseMapper.bugBoundsListByProjectAndDate(pIds,firstDayOfMonth,lastDayOfMonth,account); + } + + @Override + public List getDevBugList(List bugList) { + return bugList.stream().filter(o->"dev".equals(o.getBugType())||"releaseBug".equals(o.getBugType())).collect(Collectors.toList()); + } + @Override @Transactional @@ -599,6 +624,23 @@ public class ZtBugServiceImpl extends ServiceImpl implements } this.baseMapper.insert(ztBug); + List boundSaveList=new ArrayList<>(); + List boundList = dto.getBoundList(); + if(!CollectionUtils.isEmpty(boundList)){ + for (ZtBugBoundUserDTO ztBugBoundUserDTO:boundList ) { + ZtBugBoundUser bound = new ZtBugBoundUser(); + bound.setBugId(ztBug.getId()); + bound.setAssignedTo(ztBugBoundUserDTO.getAssignedTo()); + boundSaveList.add(bound); + } + }else{ + ZtBugBoundUser bound = new ZtBugBoundUser(); + bound.setBugId(ztBug.getId()); + bound.setAssignedTo(ztBug.getAssignedTo()); + boundSaveList.add(bound); + } + this.bugBoundUserService.saveBatch(boundSaveList); + fileService.updateFile(dto.getFiles(),ztBug.getId(), FileTypes.bug); if(dto.getExecution()!=null&&dto.getExecution()!=0){ kanbanlaneService.addBug(dto.getExecution(), Arrays.asList(ztBug)); @@ -628,6 +670,30 @@ public class ZtBugServiceImpl extends ServiceImpl implements ztBug.setLastediteddate(new Date()); ztBug.setStatus("active"); this.baseMapper.updateById(ztBug); + + //删除老的 + this.bugBoundUserService.remove(new QueryWrapper().lambda() + .eq(ZtBugBoundUser::getBugId,ztBug.getId())); + List boundSaveList=new ArrayList<>(); + List boundList = dto.getBoundList(); + if(!CollectionUtils.isEmpty(boundList)){ + for (ZtBugBoundUserDTO ztBugBoundUserDTO:boundList ) { + ZtBugBoundUser bound = new ZtBugBoundUser(); + bound.setBugId(ztBug.getId()); + bound.setAssignedTo(ztBugBoundUserDTO.getAssignedTo()); + boundSaveList.add(bound); + } + }else{ + ZtBugBoundUser bound = new ZtBugBoundUser(); + bound.setBugId(ztBug.getId()); + bound.setAssignedTo(ztBug.getAssignedTo()); + boundSaveList.add(bound); + } + this.bugBoundUserService.saveBatch(boundSaveList); + + + + if(dto.getReleaseId()!=null&&dto.getReleaseId()!=0){ this.releaseService.changeRelease(dto.getReleaseId(),ztBug.getId(),"bug"); }else{ @@ -744,7 +810,7 @@ public class ZtBugServiceImpl extends ServiceImpl implements } if(ztBug.getFeedback()!=null&&ztBug.getFeedback()!=0){ this.storyFeedbackService.feedbackStart(ztBug.getFeedback()); - this.storyFeedbackService.feedbackFinished(ztBug.getFeedback()); + this.storyFeedbackService.feedbackFinished(ztBug.getFeedback(),null); } diff --git a/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java index 15c1609..db22a79 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java @@ -267,10 +267,10 @@ public class ZtMeetingServiceImpl extends ServiceImpl userMap = this.userService.userMapByIds(null); 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 92dac80..f78d16f 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java @@ -3,6 +3,8 @@ package com.sa.zentao.service.impl; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -84,6 +86,12 @@ public class ZtProjectServiceImpl extends ServiceImpl pLis = new ArrayList<>() {{ add("develop"); add("test"); @@ -309,6 +317,9 @@ public class ZtProjectServiceImpl extends ServiceImpl updateWrapper = new UpdateWrapper().lambda().set(ZtProject::getStatus, "doing") + .set(ZtProject::getRealEnd,null) + .set(ZtProject::getLastEditedBy, RiskUserThreadLocal.get().getName()) + .set(ZtProject::getLastEditedDate, new Date()) + .eq(ZtProject::getId,dto.getId()) ; + this.baseMapper.update(updateWrapper); ActionType type = null; String product = null; Integer project = null; @@ -1211,8 +1227,6 @@ public class ZtProjectServiceImpl extends ServiceImpl>(workBuildResult(firstDayOfMonth,lastDayOfMonth, uList,list,effList,uMap,qo.getNeedWeek())); } - @Autowired - private IZtCountService countService; @Override public PageInfo pageMonthReport(ZtProjectQo qo) { @@ -1943,18 +1955,16 @@ public class ZtProjectServiceImpl extends ServiceImplo.getEstimate()) .collect(Collectors.toList()))); //准时完成率 - BigDecimal onTimeFinishRate = BigDecimalUtils.isZero(finishAllTime) ? finishAllTime : onTime.divide(finishAllTime, 2, BigDecimal.ROUND_HALF_UP); + BigDecimal onTimeFinishRate = BigDecimalUtils.isZero(finishAllTime) ? finishAllTime : onTime.divide(finishAllTime, 2, BigDecimal.ROUND_UP); d.setTaskFinishOnTimeRate(onTimeFinishRate.multiply(BigDecimal.valueOf(100)) ); }else{ - d.setTaskFinishOnTimeRate(BigDecimalUtils.isZero(d.getTaskCount())?BigDecimal.ZERO:delayList.size()==0?BigDecimal.valueOf(100):BigDecimal.valueOf(100).subtract(BigDecimal.valueOf(delayList.size()).divide(d.getTaskCount(),2,BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)))); + d.setTaskFinishOnTimeRate(BigDecimalUtils.isZero(d.getTaskCount())?BigDecimal.ZERO:delayList.size()==0?BigDecimal.valueOf(100):BigDecimal.valueOf(100).subtract(BigDecimal.valueOf(delayList.size()).divide(d.getTaskCount(),2,BigDecimal.ROUND_UP).multiply(BigDecimal.valueOf(100)))); } //任务及时完成率 - List bugList = this.bugService.list(new QueryWrapper().lambda().in(ZtBug::getProduct, products.stream().map(o -> o.getId()).collect(Collectors.toList())) - .eq(ZtBug::getBugType,"prod") - .ge(ZtBug::getOpeneddate, firstDayOfMonth) - .le(ZtBug::getOpeneddate, lastDayOfMonth) - .eq(ZtBug::getAssignedTo, account)); + + List bugList = this.bugService.bugBoundsListByProjectAndDate(products.stream().map(o -> o.getId()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth, account); + bugList =bugList.stream().filter(o->o.getBugType().equals("prod")).collect(Collectors.toList()); d.setBugCount(BigDecimal.valueOf(bugList.size())); result.add(d); 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 2f12809..56d28a2 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java @@ -66,6 +66,8 @@ public class ZtReleaseServiceImpl extends ServiceImpl execStoryPageList(ZtReleaseQo qo) { diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryCaseServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryCaseServiceImpl.java index 809572d..f622f85 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtStoryCaseServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryCaseServiceImpl.java @@ -50,7 +50,7 @@ public class ZtStoryCaseServiceImpl extends ServiceImpl myPageList(ZtProjectQo qo) { LambdaQueryWrapper query = new QueryWrapper().lambda(); - query.select(ZtStoryFeedback::getId, - ZtStoryFeedback::getName, - ZtStoryFeedback::getOpenedBy, - ZtStoryFeedback::getFiles, - ZtStoryFeedback::getOpenedDate, - ZtStoryFeedback::getSource, - ZtStoryFeedback::getStatus, - ZtStoryFeedback::getOpenSource, - ZtStoryFeedback::getPlanEndDate, - ZtStoryFeedback::getAssignedTo, - ZtStoryFeedback::getSpec, - ZtStoryFeedback::getFinishDate, - ZtStoryFeedback::getType, - ZtStoryFeedback::getCloseRemark, - ZtStoryFeedback::getProduct, - ZtStoryFeedback::getPlanFinishDate, - ZtStoryFeedback::getHandDate, - ZtStoryFeedback::getCloseDate, - ZtStoryFeedback::getClosedBy, - ZtStoryFeedback::getApprovalRemark, - ZtStoryFeedback::getYsFlag, - ZtStoryFeedback::getDontHandSelect, - ZtStoryFeedback::getDontHandRemark - ); + query.select(SFunctionColums.feedbackColumes()); if (!org.apache.commons.lang3.StringUtils.isEmpty(qo.getSearchVal())) { if ("ALL".equals(qo.getSearchVal())) { } @@ -543,7 +521,7 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl"; + } + } + + ztStoryFeedback.setFinishedRemark(buff); + + } this.baseMapper.updateById(ztStoryFeedback); //添加action actionService.addAction(ActionType.WTFK, ActionStatus.CLWC, ztStoryFeedback.getId(), ztStoryFeedback.getProduct() + "", null, null, diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java index a75420f..e21d44a 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryServiceImpl.java @@ -832,6 +832,11 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } } + @Override + public List getStoryListByDatePidsProject(List pids, Integer id, Date firstDayOfMonth, Date lastDayOfMonth) { + return this.baseMapper.getStoryListByDatePidsProject(pids,id,firstDayOfMonth,lastDayOfMonth); + } + private Map> getTaskCountMap(List list) { List tList = this.taskService.list(new QueryWrapper().lambda() @@ -1133,7 +1138,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl ZtStory ztStory = this.baseMapper.selectById(story); if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { - this.storyFeedbackService.feedbackFinished(ztStory.getFeedback()); + this.storyFeedbackService.feedbackFinished(ztStory.getFeedback(),null); } if (ztStory == null) { @@ -1196,7 +1201,7 @@ public class ZtStoryServiceImpl extends ServiceImpl impl } if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { - this.storyFeedbackService.feedbackFinished(ztStory.getFeedback()); + this.storyFeedbackService.feedbackFinished(ztStory.getFeedback(),null); } diff --git a/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java index 353bc7f..160e046 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtTaskServiceImpl.java @@ -329,6 +329,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme } List taskList = this.list(new QueryWrapper().lambda() .select(SFunctionColums.taskColumes()) + .in(ZtTask::getProduct,pids) .ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth)); // return this.baseMapper.taskListByPIdsAndDate(pids,firstDayOfMonth,lastDayOfMonth); @@ -492,7 +493,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme List userIds = list.stream().map(o -> o.getFinishedby()).collect(Collectors.toList()); userIds.addAll(list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList())); Map userMap = this.userService.userMapByIds(null); - + Date d=new Date(); for (ZtTaskDTO task : list) { ZtUser ztUser = userMap.get(task.getFinishedby()); if (ztUser != null) { @@ -505,6 +506,20 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme if (task.getDeadline() != null) { task.setDeadline(DateUtils.getDayLast(task.getDeadline())); } + if(task.getFinishedDate()!=null){ + if(task.getFinishedDate().getTime()>DateUtils.getDayLast(task.getDeadline()).getTime()){ + task.setDelayFlag(1); + }else{ + task.setDelayFlag(2); + } + }else{ + if(d.getTime()>DateUtils.getDayLast(task.getDeadline()).getTime()){ + task.setDelayFlag(1); + }else{ + task.setDelayFlag(2); + } + } + } @@ -785,6 +800,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme ztTask.setLastediteddate(new Date()); ztTask.setConsumed(dto.getConsumed()); ztTask.setLeft(dto.getLeft() - dto.getConsumed()); + ztTask.setFeedbackRemark(dto.getFeedbackRemark()); if (ztTask.getLeft() < 0) { ztTask.setLeft(0f); } @@ -793,7 +809,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme if ("doing".equals(ztTask.getStatus())) { this.storyFeedbackService.feedbackStart(ztTask.getFeedback()); } else { - this.storyFeedbackService.feedbackFinished(ztTask.getFeedback()); + this.storyFeedbackService.feedbackFinished(ztTask.getFeedback(),ztTask.getFeedbackRemark()); } } @@ -907,17 +923,6 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme StringUtils.isEmpty(finishBy) ? RiskUserThreadLocal.get().getName() : finishBy, dto.getRemark(), null); if (ztTask.getExecution() != null && ztTask.getExecution() != 0) { if (StringUtils.isEmpty(dto.getTabType())) { -// KanbanQo qo = new KanbanQo(); -// qo.setStatusType("developed"); -// qo.setTabType("task"); -// qo.setId(dto.getId()); -// //查 -// ZtKanbancell ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "developing", ztTask.getExecution()); -// -// qo.setFromId(ztKanbanlane.getColumn()); -// //查 -// ztKanbanlane = this.kanbanlaneService.getZtKanbanlane("task", "developed", ztTask.getExecution()); -// qo.setToId(ztKanbanlane.getColumn()); kanbanlaneService.changeStatus(ztTask.getExecution(), ztTask.getId(), "task", "developed"); } else { KanbanQo qo = new KanbanQo(); @@ -948,7 +953,7 @@ public class ZtTaskServiceImpl extends ServiceImpl impleme // } } if (ztTask.getFeedback() != null && ztTask.getFeedback() != 0) { - this.storyFeedbackService.feedbackFinished(ztTask.getFeedback()); + this.storyFeedbackService.feedbackFinished(ztTask.getFeedback(),ztTask.getFeedbackRemark()); } } diff --git a/src/main/java/com/sa/zentao/utils/SFunctionColums.java b/src/main/java/com/sa/zentao/utils/SFunctionColums.java index 2eabfd5..74888b0 100644 --- a/src/main/java/com/sa/zentao/utils/SFunctionColums.java +++ b/src/main/java/com/sa/zentao/utils/SFunctionColums.java @@ -63,13 +63,33 @@ public class SFunctionColums { public static List> feedbackColumes(){ List> result=new ArrayList<>(); - result.add(ZtStoryFeedback::getId); - result.add(ZtStoryFeedback::getAssignedTo); - result.add(ZtStoryFeedback::getProduct); - result.add(ZtStoryFeedback::getName); - result.add(ZtStoryFeedback::getStatus); - result.add(ZtStoryFeedback::getSource); - result.add(ZtStoryFeedback::getType); + + + 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; } diff --git a/src/main/java/com/sa/zentao/utils/SendEmail.java b/src/main/java/com/sa/zentao/utils/SendEmail.java index 1cb3247..640ffc0 100644 --- a/src/main/java/com/sa/zentao/utils/SendEmail.java +++ b/src/main/java/com/sa/zentao/utils/SendEmail.java @@ -43,8 +43,14 @@ public class SendEmail { String host = "smtp.qiye.163.com"; String port = "587"; - String username = "sino-employee@sino-assistance.com"; - String password = "A112233a"; + String username = "itsm@sino-assistance.com"; + String password = "GKXL@650"; + + +// String host = "smtp.qiye.163.com"; +// String port = "587"; +// String username = "sino-employee@sino-assistance.com"; +// String password = "A112233a"; Properties props = new Properties(); props.put("mail.smtp.host", host); @@ -57,7 +63,7 @@ public class SendEmail { return new PasswordAuthentication(username, password); } }); - + session.setDebug(true); try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); @@ -91,13 +97,17 @@ public class SendEmail { // String host = "smtp.qiye.163.com"; // String port = "587"; // String username = "qinglin.yin@do-tec.com.cn"; +// String password = "A112233a"; + +// String host = "smtp.qiye.163.com"; +// String port = "587"; +// String username = "sino-employee@sino-assistance.com"; // String password = "A112233a"; String host = "smtp.qiye.163.com"; String port = "587"; - String username = "sino-employee@sino-assistance.com"; - String password = "A112233a"; - + String username = "itsm@sino-assistance.com"; + String password = "GKXL@650"; // 创建Properties对象,设置SMTP服务器相关信息 Properties props = new Properties(); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 1ca8788..184c651 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -34,13 +34,24 @@ file: baseUrl: http://192.168.3.200:8013 meeting: /data/buildzentao/meeting.docx +#vx: +# token: vTniTyOG4csBmAnMr +# encodingAesKey : gCmhw7vKLcZwsDszILPNSEqyjgRKODemkYmRFdfelmk +# receiveid: wwa7cc4743271d6055 +# corpid: wwa7cc4743271d6055 +# corpsecret: qQNdRmtanymbshPOLgWTgB-TzX9QmNpVCpOx5suJ2xA +# dkCorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs +# salaryCorpsecretApp: ib0GyrjV573QdczASCeB-QmCsp0t_QpjsbnQwKBr-Os +# salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send +# dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs vx: + agentld: 1000059 token: vTniTyOG4csBmAnMr encodingAesKey : gCmhw7vKLcZwsDszILPNSEqyjgRKODemkYmRFdfelmk receiveid: wwa7cc4743271d6055 corpid: wwa7cc4743271d6055 corpsecret: qQNdRmtanymbshPOLgWTgB-TzX9QmNpVCpOx5suJ2xA dkCorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs - salaryCorpsecretApp: ib0GyrjV573QdczASCeB-QmCsp0t_QpjsbnQwKBr-Os + salaryCorpsecretApp: BsgdcmLV5L1jbO7uro9QqdgGQaGItVb_tvfaasAq_3w salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs \ No newline at end of file diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 76336e5..65f8742 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -52,15 +52,27 @@ file: # #file: # baseUrl: http://127.0.0.1:8085 -vx: - token: DGkygyJELpIY2 - encodingAesKey: Pp2D1vttrxVMoTzocD1SukkRe3IYXQjW5nuOjvc2JRE - receiveid: ww0b2dc90421854148 - corpid: ww0b2dc90421854148 - corpsecret: LRVwfc11K-JQS2nJC8xTPrZLBKmMRZ7nPyGchsVfKF4 -# salaryCorpsecretApp: KlE8J0rMS3W8Hprztl_EnCfAonm34mPpS1B6vaOmzBc - salaryCorpsecretApp: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU - salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send - dkcorpsecret: fMf4nGnkpcYMHq0JzEXx-LcyGvgoxX-DbbCjIjaHqZ0 +#vx: +# agentld: 1000002 +# token: DGkygyJELpIY2 +# encodingAesKey: Pp2D1vttrxVMoTzocD1SukkRe3IYXQjW5nuOjvc2JRE +# receiveid: ww0b2dc90421854148 +# corpid: ww0b2dc90421854148 +# corpsecret: LRVwfc11K-JQS2nJC8xTPrZLBKmMRZ7nPyGchsVfKF4 +# salaryCorpsecretApp: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU +# salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send +# dkcorpsecret: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU #书籍 -# dkcorpsecret: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU #书籍 \ No newline at end of file + + +vx: + agentld: 1000059 + token: vTniTyOG4csBmAnMr + encodingAesKey : gCmhw7vKLcZwsDszILPNSEqyjgRKODemkYmRFdfelmk + receiveid: wwa7cc4743271d6055 + corpid: wwa7cc4743271d6055 + corpsecret: qQNdRmtanymbshPOLgWTgB-TzX9QmNpVCpOx5suJ2xA + dkCorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs + salaryCorpsecretApp: BsgdcmLV5L1jbO7uro9QqdgGQaGItVb_tvfaasAq_3w + salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send + dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs \ No newline at end of file diff --git a/src/main/resources/mapper/ZtBugMapper.xml b/src/main/resources/mapper/ZtBugMapper.xml index b2430bc..3a34f6d 100644 --- a/src/main/resources/mapper/ZtBugMapper.xml +++ b/src/main/resources/mapper/ZtBugMapper.xml @@ -2,295 +2,295 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - SELECT b.id, - b.project, - b.product, - b.injection, - b.identify, - b.branch, - b.module, - b.execution, - b.plan, - b.story, - b.storyVersion, - b.task, - b.toTask, - b.toStory, - b.title, - b.keywords, - b.severity, - b.pri, - b.type, - b.os, - b.browser, - b.hardware, - b.found, - b.`status`, - b.subStatus, - b.color, - b.confirmed, - b.activatedCount, - b.activatedDate, - b.feedbackBy, - b.notifyEmail, - b.mailto, - b.openedBy, - b.openedDate, - b.assignedTo, - b.openedBuild, - b.assignedDate, - b.deadline, - b.resolvedBy, - b.resolution, - b.resolvedBuild, - b.resolvedDate, - b.closedBy, - b.closedDate, - b.duplicateBug, - b.linkBug, - b.caseId, - b.caseVersion, - b.feedback, - b.result, - b.repo, - b.mr, - b.entry, - b.`lines`, - b.v1, - b.v2, - b.repoType, - b.testtask, - b.issueKey, - b.lastEditedBy, - b.lastEditedDate, - b.deleted, - b.file_url, - b.bug_type, - b.ys_user, - b.ys_flag, - b.ys_remark, - b.release_flag, - p.name productName - from zt_bug b left join zt_product p on b.product = p.id - WHERE 1=1 - - and b.project =#{qo.project} - - - and b.bug_type =#{qo.bugType} - + SELECT b.id, + b.project, + b.product, + b.injection, + b.identify, + b.branch, + b.module, + b.execution, + b.plan, + b.story, + b.storyVersion, + b.task, + b.toTask, + b.toStory, + b.title, + b.keywords, + b.severity, + b.pri, + b.type, + b.os, + b.browser, + b.hardware, + b.found, + b.`status`, + b.subStatus, + b.color, + b.confirmed, + b.activatedCount, + b.activatedDate, + b.feedbackBy, + b.notifyEmail, + b.mailto, + b.openedBy, + b.openedDate, + b.assignedTo, + b.openedBuild, + b.assignedDate, + b.deadline, + b.resolvedBy, + b.resolution, + b.resolvedBuild, + b.resolvedDate, + b.closedBy, + b.closedDate, + b.duplicateBug, + b.linkBug, + b.caseId, + b.caseVersion, + b.feedback, + b.result, + b.repo, + b.mr, + b.entry, + b.`lines`, + b.v1, + b.v2, + b.repoType, + b.testtask, + b.issueKey, + b.lastEditedBy, + b.lastEditedDate, + b.deleted, + b.file_url, + b.bug_type, + b.ys_user, + b.ys_flag, + b.ys_remark, + b.release_flag, + p.name productName + from zt_bug b left join zt_product p on b.product = p.id + WHERE 1=1 + + and b.project =#{qo.project} + + + and b.bug_type =#{qo.bugType} + - - and b.id = #{qo.id} - + + and b.id = #{qo.id} + - - and b.title like concat('%', #{qo.name}, '%') - - - and b.severity = #{qo.severity} - + + and b.title like concat('%', #{qo.name}, '%') + + + and b.severity = #{qo.severity} + - - and b.status = #{qo.status} - + + and b.status = #{qo.status} + - - and b.pri = #{qo.pri} - + + and b.pri = #{qo.pri} + - - and b.`type` = #{qo.type} - - - and b.assignedTo = #{qo.assignedTo} - - - and b.openedDate =]]> #{qo.startDate} - - - and b.openedDate #{qo.endDate} - - - and b.openedby = #{qo.openedby} - + + and b.`type` = #{qo.type} + + + and b.assignedTo = #{qo.assignedTo} + + + and b.openedDate =]]> #{qo.startDate} + + + and b.openedDate #{qo.endDate} + + + and b.openedby = #{qo.openedby} + - - and b.openedDate =]]> #{qo.openStartDate} - - - and b.openedDate #{qo.openEndDate} - - - and b.execution =#{qo.execution} - + + and b.openedDate =]]> #{qo.openStartDate} + + + and b.openedDate #{qo.openEndDate} + + + and b.execution =#{qo.execution} + - - and b.product in - - #{id} - + + and b.product in + + #{id} + - + - - and b.id in - - #{id} - + + and b.id in + + #{id} + - + - + - - --- 未关闭 - and b.status !='closed' - - --- 由我创建 - and b.openedBy =#{qo.userName} - - --- 指派给我 - and b.assignedTo =#{qo.userName} - - - -- 由我解决 - and b.resolvedBy =#{qo.userName} - and b.status= 'resolved' - - --- 由我指派 - and b.openedBy =#{qo.userName} - - --- //未解决 - and b.status= 'active' - + + + -- 未关闭 + and b.status !='closed' + + + -- 由我创建 + and b.openedBy =#{qo.userName} + + + -- 指派给我 + and b.assignedTo =#{qo.userName} + + + -- 由我解决 + and b.resolvedBy =#{qo.userName} + and b.status= 'resolved' + + + -- 由我指派 + and b.openedBy =#{qo.userName} + + + -- //未解决 + and b.status= 'active' + - - -- //未确认 - and b.confirmed= 0 - + + -- //未确认 + and b.confirmed= 0 + - - -- //未指派 - and b.assignedTo is null - + + -- //未指派 + and b.assignedTo is null + - - -- //久未处理 + + -- //久未处理 - + - - -- //待关闭 + + -- //待关闭 - - - -- //被延期 - + + + -- //被延期 + - - -- //过期BUG - + + -- //过期BUG + - - -- //研发需求变动 - + + -- //研发需求变动 + - - - - - order by ${qo.orderName} ${qo.orderSort} - - - order by id desc - - - - - order by id desc - - + + + + + order by ${qo.orderName} ${qo.orderSort} + + + order by id desc + + + + + order by id desc + + - + + + SELECT s.id, + s.project, + s.product, + s.injection, + s.identify, + s.branch, + s.module, + s.execution, + s.plan, + s.story, + s.storyVersion, + s.task, + s.toTask, + s.toStory, + s.title, + s.keywords, + s.severity, + s.pri, + s.type, + s.os, + s.browser, + s.hardware, + s.found, + s.`status`, + s.subStatus, + s.color, + s.confirmed, + s.activatedCount, + s.activatedDate, + s.feedbackBy, + s.notifyEmail, + s.mailto, + s.openedBy, + s.openedDate, + s.assignedTo, + s.openedBuild, + s.assignedDate, + s.deadline, + s.resolvedBy, + s.resolution, + s.resolvedBuild, + s.resolvedDate, + s.closedBy, + s.closedDate, + s.duplicateBug, + s.linkBug, + s.caseId, + s.caseVersion, + s.feedback, + s.result, + s.repo, + s.mr, + s.entry, + s.`lines`, + s.v1, + s.v2, + s.repoType, + s.testtask, + s.issueKey, + s.lastEditedBy, + s.lastEditedDate, + s.deleted, + s.file_url, + s.bug_type, + s.ys_user, + s.ys_flag, + s.ys_remark, + s.release_flag + from zt_bug s + WHERE 1=1 + + and s.project in + + #{id} + + + + and openedDate =]]> #{start} + and openedDate #{end} + + + diff --git a/src/main/resources/mapper/ZtReleaseDetailsMapper.xml b/src/main/resources/mapper/ZtReleaseDetailsMapper.xml index 4306b9e..bd39d9a 100644 --- a/src/main/resources/mapper/ZtReleaseDetailsMapper.xml +++ b/src/main/resources/mapper/ZtReleaseDetailsMapper.xml @@ -22,6 +22,11 @@ and details.release_id = #{qo.id} and details.status != 'closed' + + + and s.ys_user = #{qo.ysUser} + + and s.title like concat('%', #{qo.name}, '%') diff --git a/src/main/resources/mapper/ZtStoryFeedbackMapper.xml b/src/main/resources/mapper/ZtStoryFeedbackMapper.xml index 62ee271..6d59641 100644 --- a/src/main/resources/mapper/ZtStoryFeedbackMapper.xml +++ b/src/main/resources/mapper/ZtStoryFeedbackMapper.xml @@ -42,8 +42,8 @@ business_id, ys_flag, dont_hand_select, - dont_hand_remark - + dont_hand_remark, + finished_remark from zt_story_feedback s WHERE 1 = 1 diff --git a/src/main/resources/mapper/ZtStoryMapper.xml b/src/main/resources/mapper/ZtStoryMapper.xml index 906d198..4c9e0a4 100644 --- a/src/main/resources/mapper/ZtStoryMapper.xml +++ b/src/main/resources/mapper/ZtStoryMapper.xml @@ -1105,7 +1105,7 @@ s.user_story, s.ys_user, s.task_count, - s.ys_date, + s.ys_date from zt_story s left join zt_storyreview v on s.id = v.story and s.version = v.version @@ -1121,4 +1121,92 @@ order by s.id desc + diff --git a/src/main/resources/mapper/ZtStoryUserMapper.xml b/src/main/resources/mapper/ZtStoryUserMapper.xml index d037157..66540ff 100644 --- a/src/main/resources/mapper/ZtStoryUserMapper.xml +++ b/src/main/resources/mapper/ZtStoryUserMapper.xml @@ -161,8 +161,18 @@ and s.openedBy = #{qo.openedby} + + - and s.status = #{qo.status} +-- 需求明确中、详细设计、详细设计中、产品已设计、需求待确认 这些查询状态合并成 “需求明确中” + + and s.status in ('unconfirmed' + ,'waitcommunicate' + ,'waitdesign','designdoing','designdone','storyunconfirmed') + + + and s.status = #{qo.status} + diff --git a/src/main/resources/mapper/ZtTaskMapper.xml b/src/main/resources/mapper/ZtTaskMapper.xml index b44b20a..27c0182 100644 --- a/src/main/resources/mapper/ZtTaskMapper.xml +++ b/src/main/resources/mapper/ZtTaskMapper.xml @@ -127,6 +127,18 @@ where 1= 1 + + + + and (date(deadline ) date(finishedDate ) or( finishedDate is null and date(deadline) date(now()))) + + + and (date(deadline ) =]]> date(finishedDate ) or( finishedDate is null and date(deadline) =]]> date(now()))) + + + + + and s.id = #{qo.id} diff --git a/src/main/resources/mapper/ZtYwBackupsMapper.xml b/src/main/resources/mapper/ZtYwBackupsMapper.xml index 1ee95b7..2944696 100644 --- a/src/main/resources/mapper/ZtYwBackupsMapper.xml +++ b/src/main/resources/mapper/ZtYwBackupsMapper.xml @@ -15,6 +15,16 @@ diff --git a/src/main/resources/mapper/ZtYwChangeMapper.xml b/src/main/resources/mapper/ZtYwChangeMapper.xml index 45dd5ac..356556e 100644 --- a/src/main/resources/mapper/ZtYwChangeMapper.xml +++ b/src/main/resources/mapper/ZtYwChangeMapper.xml @@ -24,6 +24,15 @@ SELECT * from zt_yw_change WHERE 1=1 + + and change_effect_date =]]> #{qo.startDate} + + + + and change_effect_date #{qo.endDate} + + + order by id desc diff --git a/src/main/resources/mapper/ZtYwFwqsearchMapper.xml b/src/main/resources/mapper/ZtYwFwqsearchMapper.xml index 00a9757..528797d 100644 --- a/src/main/resources/mapper/ZtYwFwqsearchMapper.xml +++ b/src/main/resources/mapper/ZtYwFwqsearchMapper.xml @@ -17,6 +17,15 @@ diff --git a/src/main/resources/mapper/ZtYwMachineRoomMapper.xml b/src/main/resources/mapper/ZtYwMachineRoomMapper.xml index b0b9db3..7caf033 100644 --- a/src/main/resources/mapper/ZtYwMachineRoomMapper.xml +++ b/src/main/resources/mapper/ZtYwMachineRoomMapper.xml @@ -19,6 +19,14 @@ diff --git a/src/main/resources/mapper/ZtYwPatrolMapper.xml b/src/main/resources/mapper/ZtYwPatrolMapper.xml index b2cc2a2..b537081 100644 --- a/src/main/resources/mapper/ZtYwPatrolMapper.xml +++ b/src/main/resources/mapper/ZtYwPatrolMapper.xml @@ -19,6 +19,13 @@ diff --git a/src/main/resources/mapper/ZtYwTaskMapper.xml b/src/main/resources/mapper/ZtYwTaskMapper.xml index ad1dd36..ba83fdb 100644 --- a/src/main/resources/mapper/ZtYwTaskMapper.xml +++ b/src/main/resources/mapper/ZtYwTaskMapper.xml @@ -18,6 +18,15 @@ diff --git a/src/main/resources/templates/scope/UI工程师.xlsx b/src/main/resources/templates/scope/UI工程师.xlsx index 3d65ac9..f066290 100644 Binary files a/src/main/resources/templates/scope/UI工程师.xlsx and b/src/main/resources/templates/scope/UI工程师.xlsx differ diff --git a/src/main/resources/templates/scope/开发工程师.xlsx b/src/main/resources/templates/scope/开发工程师.xlsx index d2d3ac3..0718ade 100644 Binary files a/src/main/resources/templates/scope/开发工程师.xlsx and b/src/main/resources/templates/scope/开发工程师.xlsx differ diff --git a/src/main/resources/templates/scope/测试工程师.xlsx b/src/main/resources/templates/scope/测试工程师.xlsx index eab7a10..92b8274 100644 Binary files a/src/main/resources/templates/scope/测试工程师.xlsx and b/src/main/resources/templates/scope/测试工程师.xlsx differ diff --git a/src/main/resources/templates/scope/项目助理考核.xlsx b/src/main/resources/templates/scope/项目助理考核.xlsx index d4fd9a2..37b9d67 100644 Binary files a/src/main/resources/templates/scope/项目助理考核.xlsx and b/src/main/resources/templates/scope/项目助理考核.xlsx differ diff --git a/src/main/resources/templates/scope/项目经理考核.xlsx b/src/main/resources/templates/scope/项目经理考核.xlsx index e01e98d..2bb81a8 100644 Binary files a/src/main/resources/templates/scope/项目经理考核.xlsx and b/src/main/resources/templates/scope/项目经理考核.xlsx differ diff --git a/src/main/resources/templates/scope测试.xlsx b/src/main/resources/templates/scope测试.xlsx index 604a9c5..e69de29 100644 Binary files a/src/main/resources/templates/scope测试.xlsx and b/src/main/resources/templates/scope测试.xlsx differ