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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -364,52 +364,51 @@
s.ys_remark,
s.release_flag,
- pt.name productName from zt_bug s left join zt_product pt on s.product = pt.id
+ pt.name productName from zt_bug s left join zt_product pt on s.product = pt.id
WHERE 1=1
- and s.id = #{qo.id}
+ and s.id = #{qo.id}
and s.title like concat('%', #{qo.name}, '%')
- and s.severity = #{qo.severity}
+ and s.severity = #{qo.severity}
- and pri = #{qo.pri}
+ and pri = #{qo.pri}
- and s.`type` = #{qo.type}
+ and s.`type` = #{qo.type}
- and s.assignedTo = #{qo.assignedTo}
+ and s.assignedTo = #{qo.assignedTo}
- and s.openedby = #{qo.openedby}
+ and s.openedby = #{qo.openedby}
- and s.openedDate =]]> #{qo.openStartDate}
+ and s.openedDate =]]> #{qo.openStartDate}
- and s.openedDate #{qo.openEndDate}
+ and s.openedDate #{qo.openEndDate}
- and s.deadline =]]> #{qo.startDate}
+ and s.deadline =]]> #{qo.startDate}
- and s.deadline #{qo.endDate}
+ and s.deadline #{qo.endDate}
-
- and pt.name like concat('%', #{qo.productName}, '%')
+ and pt.name like concat('%', #{qo.productName}, '%')
@@ -435,70 +434,69 @@
- -- 未关闭
+ -- 未关闭
and s.status !='closed'
- -- 由我创建
+ -- 由我创建
and s.openedBy =#{qo.userName}
- -- 指派给我
+ -- 指派给我
and s.assignedTo =#{qo.userName}
- -- 由我解决
+ -- 由我解决
and resolvedBy =#{qo.userName}
and s.status= 'resolved'
- -- 由我指派
+ -- 由我指派
and s.openedBy =#{qo.userName}
- -- //未解决
+ -- //未解决
and s.status= 'active'
- -- //未确认
+ -- //未确认
and s.confirmed= 0
- -- //未指派
+ -- //未指派
and s.assignedTo is null
- -- //久未处理
+ -- //久未处理
- -- //待关闭
+ -- //待关闭
- -- //被延期
+ -- //被延期
- -- //过期BUG
+ -- //过期BUG
- -- //研发需求变动
+ -- //研发需求变动
-
order by id desc
- SELECT s.id,
+ SELECT s.id,
s.project,
s.product,
s.injection,
@@ -567,7 +565,7 @@
s.ys_remark,
s.release_flag
from zt_bug s
- WHERE 1=1
+ WHERE 1=1
and s.id in
+
+
+ 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}
+
+
+
+
+ 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
+ LEFT JOIN zt_bug_bound_user u on s.id = u.bug_id
+
+ WHERE 1= 1 and u.assigned_to = #{account}
+
+
+ and s.product in
+
+ #{id}
+
+
+
+ and openedDate =]]> #{start}
+ and openedDate #{end}
+ group by s.id
+
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
+
+
+ select s.id,
+ s.vision,
+ s.parent,
+ s.product,
+ s.project,
+ s.branch,
+ s.module,
+ s.plan,
+ s.source,
+ s.sourceNote,
+ s.fromBug,
+ s.feedback,
+ s.title,
+ s.keywords,
+ s.type,
+ s.category,
+ s.pri,
+ s.estimate,
+ s.`status`,
+ s.subStatus,
+ s.color,
+ s.stage,
+ s.stagedBy,
+ s.mailto,
+ s.lib,
+ s.fromStory,
+ s.fromVersion,
+ s.openedBy,
+ s.openedDate,
+ s.assignedTo,
+ s.assignedDate,
+ s.approvedDate,
+ s.lastEditedBy,
+ s.lastEditedDate,
+ s.changedBy,
+ s.changedDate,
+ s.reviewedBy,
+ s.reviewedDate,
+ s.releasedDate,
+ s.closedBy,
+ s.closedDate,
+ s.closedReason,
+ s.activatedDate,
+ s.toBug,
+ s.childStories,
+ s.linkStories,
+ s.linkRequirements,
+ s.twins,
+ s.duplicateStory,
+ s.version,
+ s.storyChanged,
+ s.feedbackBy,
+ s.notifyEmail,
+ s.BSA,
+ s.duration,
+ s.demand,
+ s.submitedBy,
+ s.roadmap,
+ s.URChanged,
+ s.deleted,
+ s.plan_start_date,
+ s.plan_end_date,
+ s.start_date,
+ s.end_date,
+ s.ys_flag,
+ s.user_story,
+ s.ys_user,
+ s.task_count,
+ s.ys_date
+ from zt_story s, zt_projectstory ps WHERE s.id = ps.story
+
+ and s.product in
+
+ #{id}
+
+
+ and ps.project = #{project}
+
+ and s.end_date =]]> #{start}
+
+
+ and s.end_date #{end}
+
+
+
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 @@
SELECT * from zt_yw_backups WHERE 1=1
+
+
+ and backups_date =]]> #{qo.startDate}
+
+
+
+ and backups_date #{qo.endDate}
+
+
+
order by id desc
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 @@
SELECT * from zt_yw_fwqsearch WHERE 1=1
+
+
+ and create_date =]]> #{qo.startDate}
+
+
+
+ and create_date #{qo.endDate}
+
+
order by id desc
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 @@
SELECT * from zt_yw_machine_room WHERE 1= 1
+
+
+ and inspect_date =]]> #{qo.startDate}
+
+
+ and inspect_date #{qo.endDate}
+
+
order by id desc
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 @@
SELECT * from zt_yw_patrol WHERE 1=1
+
+
+ and patrol_date =]]> #{qo.startDate}
+
+
+ and patrol_date #{qo.endDate}
+
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 @@
SELECT * from zt_yw_task WHERE 1=1
+
+
+
+ and task_end_date =]]> #{qo.startDate}
+
+
+ and task_end_date #{qo.endDate}
+
+
order by id desc
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