搜索条件添加

This commit is contained in:
2025-05-13 14:09:46 +08:00
parent 4d0bb07b0b
commit 81cf5bd74e
51 changed files with 1196 additions and 478 deletions

View File

@ -22,7 +22,7 @@ public class CodeGenerator {
//自己的名字 //自己的名字
static String Author = "gqb"; static String Author = "gqb";
public static String tableName = "zt_story_case"; public static String tableName = "zt_bug_bound_user";
/** /**
* <p> * <p>
@ -53,7 +53,7 @@ public class CodeGenerator {
mpg.setGlobalConfig(gc); mpg.setGlobalConfig(gc);
// 数据源配置 // 数据源配置
DataSourceConfig dsc = new DataSourceConfig(); 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.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setDriverName("com.mysql.cj.jdbc.Driver");
// dsc.setUsername("root"); // dsc.setUsername("root");

View File

@ -136,7 +136,7 @@ public class PerformanceDTO implements Serializable {
// private BigDecimal projectScore=BigDecimal.ZERO; // private BigDecimal projectScore=BigDecimal.ZERO;
//项目文档 //项目文档
// private BigDecimal projectDocumentScore=BigDecimal.ZERO; private BigDecimal projectDocumentScore=BigDecimal.ZERO;
// //会议管理 // //会议管理
// private BigDecimal meetDocumentScore=BigDecimal.ZERO; // private BigDecimal meetDocumentScore=BigDecimal.ZERO;

View File

@ -30,11 +30,20 @@ public class ProjectWorkDetailsDTO implements Serializable {
//已验收需求总量 //已验收需求总量
@ExcelProperty(value = "已验收需求总量",index =5) @ExcelProperty(value = "已验收需求总量",index =5)
private BigDecimal ysStoryCount; 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; private BigDecimal ysYesRate;
//验收不通过数量 //验收不通过数量
@ExcelProperty(value = "验收不通过数量",index =7) @ExcelProperty(value = "验收不通过数量",index =9)
private BigDecimal ysNoCount; private BigDecimal ysNoCount;
//验收情况备注 //验收情况备注
} }

View File

@ -44,6 +44,9 @@ public class WorkDetailsDTO implements Serializable {
@ExcelProperty(value = "产出线上Bug ",index =6) @ExcelProperty(value = "产出线上Bug ",index =6)
private BigDecimal bugCount; private BigDecimal bugCount;
@ExcelProperty(value = "任务及时完成率 ",index =7)
private BigDecimal finishPunctuality=BigDecimal.ZERO;;
@ExcelIgnore @ExcelIgnore
private UserType userType; private UserType userType;
@ExcelIgnore @ExcelIgnore

View File

@ -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;
/**
* <p>
*
* </p>
*
* @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;
}

View File

@ -215,4 +215,6 @@ public class ZtBugDTO implements Serializable {
private String releaseName; private String releaseName;
private String feedbackSpec; private String feedbackSpec;
//关联责任人list
private List<ZtBugBoundUserDTO> boundList;
} }

View File

@ -122,4 +122,5 @@ public class ZtStoryFeedbackDTO implements Serializable {
private String oaName; private String oaName;
private String finishedRemark;
} }

View File

@ -203,4 +203,9 @@ public class ZtTaskDTO implements Serializable {
private List<ZtBugDTO> bugList; private List<ZtBugDTO> bugList;
private String feedbackSpec; private String feedbackSpec;
//问题反馈处理结果
private String feedbackRemark;
private Integer delayFlag=0;
} }

View File

@ -70,9 +70,7 @@ public class ZtMeeting implements Serializable {
// private Integer userStory; // private Integer userStory;
private String storyIds; private String storyIds;
@TableField(exist = false)
private String result; private String result;
@TableField(exist = false)
private String meetingAfter; private String meetingAfter;
} }

View File

@ -72,7 +72,8 @@ public class ZtStoryFeedback implements Serializable {
// wait doing finished submitVerified 提交验收 closed reviewing verified 验收 dontHand 无需处理 查询用noVerified 验收不通过) // wait doing finished submitVerified 提交验收 closed reviewing verified 验收 dontHand 无需处理 查询用noVerified 验收不通过)
private String status; private String status;
//处理完成描述
private String finishedRemark;
private String fileUrl; private String fileUrl;

View File

@ -194,5 +194,6 @@ public class ZtTask implements Serializable {
private String approvalRemark; private String approvalRemark;
//问题反馈处理结果
private String feedbackRemark;
} }

View File

@ -45,8 +45,8 @@ public enum ActionStatus {
CASESUBREVIEW(52, "caseSubmitreview","需求用例提交至评审"), CASESUBREVIEW(52, "caseSubmitreview","需求用例提交至评审"),
CASEPSTG(53, "reviewpassed","评审通过"), CASEPSTG(53, "reviewpassed","评审通过"),
CASEPSYDMQ(54, "reviewclarified","评审有待明确"), CASEPSYDMQ(54, "reviewclarified","测试用例评审有待明确"),
CASEPSBTG(55, "reviewrejected","评审不通过"), CASEPSBTG(55, "reviewrejected","测试用例评审不通过"),
CASEBJ(4, "caseEdited","编辑需求用例"), CASEBJ(4, "caseEdited","编辑需求用例"),
CASEXJ(1, "casePpened","新建用例"), CASEXJ(1, "casePpened","新建用例"),

View File

@ -26,4 +26,8 @@ public interface ZtBugMapper extends BaseMapper<ZtBug> {
List<ZtBug> bugListByIds(@Param("ids")List<String> ids); List<ZtBug> bugListByIds(@Param("ids")List<String> ids);
List<ZtBug> bugListByProductAndDate(@Param("pIds")List<Integer> pIds, @Param("start")Date start,@Param("end") Date lastDayOfMonth); List<ZtBug> bugListByProductAndDate(@Param("pIds")List<Integer> pIds, @Param("start")Date start,@Param("end") Date lastDayOfMonth);
List<ZtBug> bugListByProjectAndDate(@Param("pIds")List<Integer> pIds, @Param("start")Date start,@Param("end") Date lastDayOfMonth);
List<ZtBug> bugBoundsListByProjectAndDate(@Param("pIds")List<Integer> pIds,@Param("start") Date firstDayOfMonth, @Param("end")Date lastDayOfMonth,@Param("account") String account);
} }

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sa.zentao.qo.ZtProjectQo; import com.sa.zentao.qo.ZtProjectQo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -32,4 +33,8 @@ public interface ZtStoryMapper extends BaseMapper<ZtStory> {
List<ZtStoryDTO> storyPageListByIds(@Param("ids") List<String> ids); List<ZtStoryDTO> storyPageListByIds(@Param("ids") List<String> ids);
//pids 产品id
List<ZtStory> getStoryListByDatePidsProject(@Param("ids")List<Integer> pids, @Param("project")Integer project
, @Param("start")Date firstDayOfMonth, @Param("end")Date lastDayOfMonth);
} }

View File

@ -107,4 +107,6 @@ public class ZtProjectQo extends BaseQo {
private String bugType; private String bugType;
private String account; private String account;
//1 延期 2不延期
private Integer delayFlag=0 ;
} }

View File

@ -63,4 +63,5 @@ public class ZtReleaseQo extends BaseQo {
//验收结果 1.通过 2不通过 //验收结果 1.通过 2不通过
private Integer ysFlag; private Integer ysFlag;
// //
private String ysUser;
} }

View File

@ -53,4 +53,13 @@ public interface IZtBugService extends IService<ZtBug> {
List<ZtBug> getNormalBugList(List<ZtBug> bugList); List<ZtBug> getNormalBugList(List<ZtBug> bugList);
List<ZtBug> bugListByProductAndDate(List<Integer> pIds, Date firstDayOfMonth, Date lastDayOfMonth); List<ZtBug> bugListByProductAndDate(List<Integer> pIds, Date firstDayOfMonth, Date lastDayOfMonth);
List<ZtBug> bugListByProjectAndDate(List<Integer> pIds, Date firstDayOfMonth, Date lastDayOfMonth);
List<ZtBug> bugBoundsListByProjectAndDate(List<Integer> pIds, Date firstDayOfMonth, Date lastDayOfMonth,String account);
List<ZtBug> getDevBugList(List<ZtBug> bugList);
} }

View File

@ -43,7 +43,7 @@ public interface IZtStoryFeedbackService extends IService<ZtStoryFeedback> {
void feedbackStart(Integer feedbackId); void feedbackStart(Integer feedbackId);
void feedbackFinished(Integer feedbackId); void feedbackFinished(Integer feedbackId,String finishedRemark);
void submitVerified(ZtStoryFeedbackDTO dto); void submitVerified(ZtStoryFeedbackDTO dto);

View File

@ -12,6 +12,7 @@ import com.sa.zentao.enums.TaskType;
import com.sa.zentao.qo.ZtProjectQo; import com.sa.zentao.qo.ZtProjectQo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -97,4 +98,6 @@ public interface IZtStoryService extends IService<ZtStory> {
List<ZtStory> getNormalStory(List<ZtStory> sList); List<ZtStory> getNormalStory(List<ZtStory> sList);
public Map<Integer, ZtStoryCaseDTO> getStoryCaseMap(List<ZtStoryDTO> list); public Map<Integer, ZtStoryCaseDTO> getStoryCaseMap(List<ZtStoryDTO> list);
List<ZtStory> getStoryListByDatePidsProject(List<Integer> pids, Integer id, Date firstDayOfMonth, Date lastDayOfMonth);
} }

View File

@ -27,18 +27,22 @@ import java.util.Map;
public class VxService { public class VxService {
@Value("${vx.corpid}") @Value("${vx.corpid}")
private static String corpid; private String corpid;
@Value("${vx.dkcorpsecret}")
private static String dkcorpsecret;
@Value("${vx.salaryCorpsecretApp}") @Value("${vx.salaryCorpsecretApp}")
private static String salaryCorpsecretApp; private String salaryCorpsecretApp;
@Value("${vx.agentld}")
private String agentid;
@Autowired @Autowired
private IZtUserService userService; private IZtUserService userService;
// public void sendMessageToVx(String vxId, String text, Date date) { // public void sendMessageToVx(String vxId, String text, Date date) {
// Environment bean = SpringUtil.getBean(Environment.class); // Environment bean = SpringUtil.getBean(Environment.class);
// //
@ -83,7 +87,6 @@ public class VxService {
if (corpid == null) { if (corpid == null) {
corpid = bean.getProperty("vx.corpid"); corpid = bean.getProperty("vx.corpid");
dkcorpsecret = bean.getProperty("vx.dkcorpsecret");
salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp"); salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp");
} }
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp; String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp;
@ -96,7 +99,7 @@ public class VxService {
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
map.put("touser", vxId); map.put("touser", vxId);
map.put("agentid", 3010185); map.put("agentid", agentid);
map.put("safe", 0); map.put("safe", 0);
map.put("enable_id_trans", 0); map.put("enable_id_trans", 0);
map.put("enable_duplicate_check", 0); map.put("enable_duplicate_check", 0);
@ -115,18 +118,17 @@ public class VxService {
public void sendMessageToVx(String account, String text, Date date) { public void sendMessageToVx(String account, String text, Date date) {
// //
// ZtUser ztUser = this.userService.selectByName(account); ZtUser ztUser = this.userService.selectByName(account);
// if(ztUser==null||StringUtils.isEmpty(ztUser.getVx())){ if(ztUser==null||StringUtils.isEmpty(ztUser.getVx())){
// return; return;
// } }
String vxId = "lisi";//CryptoUtils.aesDecryptForFront(ztUser.getVx(), CryptoUtils.KEY_DES); String vxId = CryptoUtils.aesDecryptForFront(ztUser.getVx(), CryptoUtils.KEY_DES);
Environment bean = SpringUtil.getBean(Environment.class); Environment bean = SpringUtil.getBean(Environment.class);
if (corpid == null) { if (corpid == null) {
corpid = bean.getProperty("vx.corpid"); corpid = bean.getProperty("vx.corpid");
dkcorpsecret = bean.getProperty("vx.dkcorpsecret");
salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp"); salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp");
} }
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp; String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp;
@ -140,7 +142,7 @@ public class VxService {
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
map.put("touser", vxId); map.put("touser", vxId);
// //
map.put("agentid", 1000002); map.put("agentid", agentid);
// map.put("agentid", 3010185); // map.put("agentid", 3010185);
map.put("safe", 0); map.put("safe", 0);
map.put("enable_id_trans", 0); map.put("enable_id_trans", 0);
@ -149,9 +151,9 @@ public class VxService {
Map<String, Object> texts = new HashMap<String, Object>(); Map<String, Object> texts = new HashMap<String, Object>();
texts.put("content", text); texts.put("content", text);
map.put("text", texts); map.put("text", texts);
log.info("调用微信start==",JSON.toJSONString(map)); log.info("调用微信start=={}",JSON.toJSONString(map));
String s = JSONPost(url, map); String s = JSONPost(url, map);
log.info("调用微信end==",s); log.info("调用微信end=={}",s);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
log.error("",e); log.error("",e);

View File

@ -497,12 +497,15 @@ public class IZtCountService {
//问题反馈 未受理 //问题反馈 未受理
result.setFeedbackWslCount(feedbacks.stream().filter(o -> "wait".equals(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); 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 无需处理 //处理中的 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.setFeedbackClzCount(feedbacks.stream()
//处理完的 .filter(o -> Arrays.asList("doing", "finished")
result.setFeedbackClwCount(feedbacks.stream().filter(o -> Arrays.asList("verified").contains(o.getStatus())).map(o -> o.getId() + "").collect(Collectors.joining(","))); .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.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; return result;
} }
@ -547,12 +550,16 @@ public class IZtCountService {
Map<String, ZtUser> userMap = userService.userMapByIds(null); Map<String, ZtUser> userMap = userService.userMapByIds(null);
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
String sDate = DateUtils.formatDate(qo.getDate(), "yyyy-MM");
//生成模板 //生成模板
for (int i = 0; i < perList.size(); i++) { for (int i = 0; i < perList.size(); i++) {
PerformanceDTO performanceDTO = perList.get(i); PerformanceDTO performanceDTO = perList.get(i);
ZtUser ztUser = userMap.get(performanceDTO.getAccount()); ZtUser ztUser = userMap.get(performanceDTO.getAccount());
ZtMonthScore ztMonthScore = this.monthScoreService.getOne(new QueryWrapper<ZtMonthScore>().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")) { if (ztUser.getAccount().equals("liyuyan")) {
generatorXMZLExcel(performanceDTO.getUserName(), performanceDTO, qo.getDate()); generatorXMZLExcel(performanceDTO.getUserName(), performanceDTO, qo.getDate());
list.add(performanceDTO.getUserName() + "项目助理考核.xlsx"); list.add(performanceDTO.getUserName() + "项目助理考核.xlsx");
@ -591,27 +598,11 @@ public class IZtCountService {
response.setContentType("application/vnd.ms-excel;charset=UTF-8"); 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"; String excelName = DateUtils.formatDate(qo.getDate(), "yyyy-MM-dd") + "绩效" + ".xlsx";
ExcelUtil.mergexcel(list, excelName, dir); ExcelUtil.mergexcel(list, excelName, dir);
File f = new File(dir + excelName); File f = new File(dir + excelName);
InputStream fis = new BufferedInputStream(new FileInputStream(f)); InputStream fis = new BufferedInputStream(new FileInputStream(f));
// InputStream fis = new BufferedInputStream(new FileInputStream("D:\\1.bmp")); // InputStream fis = new BufferedInputStream(new FileInputStream("D:\\1.bmp"));
@ -775,7 +766,9 @@ public class IZtCountService {
if (CollectionUtils.isEmpty(projectproducts)) { if (CollectionUtils.isEmpty(projectproducts)) {
return new ArrayList<>(); return new ArrayList<>();
} }
List<ZtTask> taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth, productList.stream().map(o->o.getId()).collect(Collectors.toList())); List<Integer> pids = productList.stream().map(o -> o.getId()).collect(Collectors.toList());
List<ZtTask> taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth,pids);
List<ZtProject> ztProjects = this.projectService.getExecutionsListByProjectAndDate(projectproducts.stream().map(o->o.getProject()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth); List<ZtProject> 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)) { if (CollectionUtils.isEmpty(accountIds)) {
return new ArrayList<>(); return new ArrayList<>();
} }
Map<String, ZtUser> userMap = this.userService.userMapByIds(accountIds);
//accountIds 成员 //accountIds 成员
List<ZtUser> ztUsers = this.userService.list(new QueryWrapper<ZtUser>().lambda() List<ZtUser> ztUsers = this.userService.list(new QueryWrapper<ZtUser>().lambda()
@ -808,7 +802,7 @@ public class IZtCountService {
} else if (u.getUserType() == UserType.KFZ) { } else if (u.getUserType() == UserType.KFZ) {
result.add(buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); result.add(buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d));
} else if (u.getUserType() == UserType.CS) { } 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) { } else if (u.getUserType() == UserType.UI) {
result.add(buildUiScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d)); result.add(buildUiScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d));
} else if (u.getUserType() == UserType.XMJL || u.getUserType() == UserType.XMGLY || u.getUserType() == UserType.GSGC) { } 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分扣完截止。 * 2. <100%每减少1%扣3分扣完截止。
* *
*/ */
dto.setPunctualityScore(onTimeFinishRate.intValue() == 1 ? BigDecimal.valueOf(25) dto.setPunctualityScore(
: BigDecimal.valueOf(25).subtract((BigDecimal.valueOf(1).subtract(onTimeFinishRate).multiply(BigDecimal.valueOf(100))).multiply(BigDecimal.valueOf(3))).floatValue() <= 0 ? BigDecimal.ZERO : getKFZPunctualityScore(onTimeFinishRate) );
BigDecimal.valueOf(BigDecimal.valueOf(25).subtract((BigDecimal.valueOf(1).subtract(onTimeFinishRate).multiply(BigDecimal.valueOf(100))).multiply(BigDecimal.valueOf(3))).floatValue())
);
//bug得分 //bug得分
List<ZtBug> bugList = this.bugService.bugBoundsListByProjectAndDate(null, firstDayOfMonth, lastDayOfMonth, u.getAccount());
List<ZtBug> bugList = this.bugService.list(new QueryWrapper<ZtBug>().lambda(). // List<ZtBug> bugList = this.bugService.list(new QueryWrapper<ZtBug>().lambda().
ge(ZtBug::getOpeneddate, firstDayOfMonth).le(ZtBug::getOpeneddate, lastDayOfMonth) // ge(ZtBug::getOpeneddate, firstDayOfMonth).le(ZtBug::getOpeneddate, lastDayOfMonth)
.eq(ZtBug::getAssignedTo, u.getAccount())); // .eq(ZtBug::getAssignedTo, u.getAccount()));
bugList=this.bugService.getNormalBugList(bugList); bugList=this.bugService.getNormalBugList(bugList);
//bug密度 //bug密度
int bugSize = bugList.size(); int bugSize = bugList.size();
@ -913,6 +906,22 @@ public class IZtCountService {
return dto; 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<ItApproval> approvalList, Date firstDayOfMonth) { public PerformanceDTO setUserWorkTime(PerformanceDTO dto, Date d, List<ItApproval> approvalList, Date firstDayOfMonth) {
//本月天数 //本月天数
int workDaysInCurrentMonth = DateUtils.getWorkDaysInCurrentMonth(d); int workDaysInCurrentMonth = DateUtils.getWorkDaysInCurrentMonth(d);
@ -931,10 +940,12 @@ public class IZtCountService {
dto.setTotalTime(totalTime.multiply(BigDecimal.valueOf(0.75))); dto.setTotalTime(totalTime.multiply(BigDecimal.valueOf(0.75)));
//达标工时 //达标工时
dto.setExamineTime(totalTime.subtract(applyTime).multiply(BigDecimal.valueOf(0.75))); dto.setExamineTime(totalTime.subtract(applyTime).multiply(BigDecimal.valueOf(0.75)));
return dto; return dto;
} }
PerformanceDTO buildCScore(ZtUser u, List<ItApproval> approvalList, Date firstDayOfMonth, Date lastDayOfMonth, List<ZtTask> taskList, Date d) { PerformanceDTO buildCScore( Map<String, ZtUser> userMap,List<Integer> pids,ZtUser u, List<ItApproval> approvalList, Date firstDayOfMonth, Date lastDayOfMonth, List<ZtTask> taskList, Date d) {
PerformanceDTO dto = new PerformanceDTO(); PerformanceDTO dto = new PerformanceDTO();
dto.setUserName(u.getNickname()); 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 slightBug = allBugList.stream().filter(o -> Arrays.asList(4, 2, 3).contains(o.getSeverity())).count();
long totalBug = seriousBug * 5 + slightBug * 1; 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尹工说的 //缺陷检出率 TODO bug 数量 / 可用工时 250418尹工说的
int bugFindScore = dto.getBugFindRate().multiply(BigDecimal.valueOf(100)).intValue() > 20 ? 30 : // 2025-05-12 尹工说的 测试在指定时间完成 并且指派给他 的开发任务工时
(30 - (20 - BigDecimal.valueOf(totalBug).divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP).multiply(BigDecimal.valueOf(100)).intValue()) * 2);
dto.setDevSeriousBug(BigDecimal.valueOf(seriousBug)); dto.setDevSeriousBug(BigDecimal.valueOf(seriousBug));
dto.setDevSlightBug(BigDecimal.valueOf(slightBug)); dto.setDevSlightBug(BigDecimal.valueOf(slightBug));
//bug检出率 //bug检出率
dto.setBugFindScore(BigDecimal.valueOf(bugFindScore < 0 ? 0 : bugFindScore)); dto =getBugFindScore(dto,u,userMap,pids,firstDayOfMonth,lastDayOfMonth,totalBug);
//暂未定义 //暂未定义
dto.setSlightBug(BigDecimal.ZERO); dto.setSlightBug(BigDecimal.ZERO);
dto.setSeriousBug(BigDecimal.ZERO); dto.setSeriousBug(BigDecimal.ZERO);
@ -1023,6 +1037,43 @@ public class IZtCountService {
return dto; return dto;
} }
private PerformanceDTO getBugFindScore(PerformanceDTO dto,ZtUser u, Map<String, ZtUser> userMap,List<Integer> pids, Date firstDayOfMonth, Date lastDayOfMonth,long totalBug) {
List<ZtStory> list = this.storyService.list(new QueryWrapper<ZtStory>().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<String> accountIds = userMap.values().stream().filter(o -> o.getUserType() == UserType.KFZ).map(o -> o.getAccount()).collect(Collectors.toList());
if(CollectionUtils.isEmpty(accountIds)){
return dto;
}
List<ZtTask> taskList = this.taskService.list(new QueryWrapper<ZtTask>().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<ItApproval> approvalList, Date firstDayOfMonth, Date lastDayOfMonth, List<ZtTask> taskList, Date d) { PerformanceDTO buildUiScore(ZtUser u, List<ItApproval> approvalList, Date firstDayOfMonth, Date lastDayOfMonth, List<ZtTask> taskList, Date d) {
PerformanceDTO dto = new PerformanceDTO(); PerformanceDTO dto = new PerformanceDTO();
@ -1133,7 +1184,7 @@ public class IZtCountService {
dto = getMeetScore(u, firstDayOfMonth, lastDayOfMonth, dto); dto = getMeetScore(u, firstDayOfMonth, lastDayOfMonth, dto);
dto.setDocumentQualityScore(BigDecimal.valueOf(50)); dto.setDocumentQualityScore(BigDecimal.valueOf(50));
dto.setProjectDocumentScore(BigDecimal.valueOf(50));
return dto; return dto;
} }
@ -1150,8 +1201,7 @@ public class IZtCountService {
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
return dto; return dto;
} }
long weekCount = 1; long weekCount =list.stream().filter(o -> o.getType() == MeetingTypeEnums.week).count();
list.stream().filter(o -> o.getType() == MeetingTypeEnums.week).count();
dto.setMeetWeek(BigDecimal.valueOf(weekCount)); dto.setMeetWeek(BigDecimal.valueOf(weekCount));
int weekMeetScore = (int) (weekCount == 0 ? 0 : (weekCount >= 4) ? 4 * 6 : (24 - (4 - weekCount) * 6)); 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)); dto.setMeetStory(BigDecimal.valueOf(storyCount));
int storyScore = storyCount > 0 ? 6 : 0; int storyScore = storyCount > 0 ? 6 : 0;
dto.setMeetScore(BigDecimal.valueOf(storyScore + weekMeetScore)); dto.setMeetScore(BigDecimal.valueOf(storyScore + weekMeetScore));
dto.setDocumentQualityScore(BigDecimal.valueOf(50));
dto.setDocumentQualityProblem(BigDecimal.ZERO);
return dto; return dto;
} }
@ -1562,13 +1614,64 @@ public class IZtCountService {
return result; return result;
} }
List<ZtProject> pList = this.projectService.listByIds(projectproducts.stream().map(o -> o.getProject()).collect(Collectors.toList())); List<Integer> projectIds = projectproducts.stream().map(o -> o.getProject()).collect(Collectors.toList());
List<ZtProject> 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<ZtTask> taskList =this.taskService.taskListByEIdsAndDate(firstDayOfMonth,lastDayOfMonth,pids); List<ZtTask> taskList =this.taskService.taskListByEIdsAndDate(firstDayOfMonth,lastDayOfMonth,pids);
Map<String, ZtUser> userMap = userService.userMapByIds(null); Map<String, ZtUser> userMap = userService.userMapByIds(null);
List<ZtBug> bugList = this.bugService.bugListByProductAndDate(pids,firstDayOfMonth,lastDayOfMonth);
bugList = bugService.getNormalBugList(bugList);
bugList = bugService.getDevBugList(bugList);
List<ZtProject> ztProjects = this.projectService.getExecutionsListByProjectAndDate(projectproducts.stream().map(o->o.getProject()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth);
if (CollectionUtils.isEmpty(ztProjects)) {
return new ArrayList<>();
}
List<ZtTeam> teams = this.teamService.list(new QueryWrapper<ZtTeam>().lambda().eq(ZtTeam::getType, "execution")
.in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList())));
List<String> accountIds = teams.stream().map(o -> o.getAccount()).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(accountIds)) {
return new ArrayList<>();
}
//accountIds 成员
List<ZtUser> ztUsers = this.userService.list(new QueryWrapper<ZtUser>().lambda()
.in(ZtUser::getAccount, accountIds));
List multipleUserList= getmultipleDepartProjectTeam(firstDayOfMonth,lastDayOfMonth);
for (ZtProject p : pList) { for (ZtProject p : pList) {
BigDecimal examineTime =BigDecimal.valueOf(0);
for (ZtUser u:ztUsers ) {
List<ItApproval> 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(); ProjectWorkDetailsDTO dto = new ProjectWorkDetailsDTO();
result.add(dto); result.add(dto);
@ -1582,14 +1685,14 @@ public class IZtCountService {
continue; continue;
} }
//项目的需求 //项目的需求
List<Integer> storyIds = getStoryIds(project); // List<Integer> storyIds = getStoryIds(project);
List<ZtStory> storyList = this.storyService.getStoryListByDatePidsProject(pids,p.getId(),firstDayOfMonth,lastDayOfMonth);
// //完成需求总量 // //完成需求总量
List<ZtStory> storyList = this.storyService.list(new QueryWrapper<ZtStory>().lambda().in(ZtStory::getProduct, pids) // List<ZtStory> storyList = this.storyService.list(new QueryWrapper<ZtStory>().lambda().in(ZtStory::getProduct, pids)
.ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth)); //
// .ge(ZtStory::getEndDate, firstDayOfMonth).le(ZtStory::getEndDate, lastDayOfMonth));
dto.setFinishCount(storyList.size()); dto.setFinishCount(storyList.size());
// //上线的需求数量 // //上线的需求数量
@ -1601,9 +1704,10 @@ public class IZtCountService {
// .filter(o->o.getProject().equals(p.getId()))
// 完成后可能会被关闭 // 完成后可能会被关闭
List<ZtTask> done = taskList.stream() List<ZtTask> done = taskList.stream()
.filter(o->userMap.get(o.getAssignedTo())!=null&&userMap.get(o.getAssignedTo()).getUserType()==UserType.KFZ) .filter(o->userMap.get(o.getAssignedTo())!=null&&userMap.get(o.getAssignedTo()).getUserType()==UserType.KFZ)
.filter(o->o.getStatus().equals("done")).collect(Collectors.toList()); .filter(o->o.getStatus().equals("done")).collect(Collectors.toList());
@ -1636,6 +1740,14 @@ public class IZtCountService {
} }
List<ZtStory> noTg = releaseStoryList.stream().filter(o -> o.getStage().equals("verified") && o.getYsFlag().intValue() == 2).collect(Collectors.toList()); List<ZtStory> noTg = releaseStoryList.stream().filter(o -> o.getStage().equals("verified") && o.getYsFlag().intValue() == 2).collect(Collectors.toList());
dto.setYsNoCount(BigDecimal.valueOf(noTg.size())); 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.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())); 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); result.add(dto);
} }
} }
@ -1993,6 +2114,19 @@ public class IZtCountService {
dataMap.put("工作态度和责任感", "5"); dataMap.put("工作态度和责任感", "5");
dataMap.put("创新贡献", "0"); dataMap.put("创新贡献", "0");
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.put("总分", devlopTotal(
dataMap.get("准时率得分"), dataMap.get("准时率得分"),
dataMap.get("Bug密度"), dataMap.get("Bug密度"),
@ -2010,6 +2144,11 @@ public class IZtCountService {
dataMap.put("name", name); dataMap.put("name", name);
dataMap.put("date", DateUtils.formatDate(d, "yyyy-MM")); dataMap.put("date", DateUtils.formatDate(d, "yyyy-MM"));
dataMap.put("总分", "100"); 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); writeXlsx(name, "templates/scope/UI工程师.xlsx", name + "UI工程师.xlsx", dataMap);
InputStream templateFile = null; InputStream templateFile = null;
// try { // try {
@ -2072,6 +2211,17 @@ public class IZtCountService {
dataMap.put("专业技能提升", "5"); 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.put("总分", devlopTotal(
dataMap.get("版本计划完成率"), dataMap.get("版本计划完成率"),
dataMap.get("任务管理"), dataMap.get("任务管理"),
@ -2315,8 +2465,18 @@ public class IZtCountService {
dataMap.put("name", name); dataMap.put("name", name);
dataMap.put("date", DateUtils.formatDate(d, "yyyy-MM")); dataMap.put("date", DateUtils.formatDate(d, "yyyy-MM"));
dataMap.put("项目绩效", performanceDTO.getReleaseScore().toString()); dataMap.put("项目绩效", performanceDTO.getReleaseScore().toString());
dataMap.put("项目文档", "50"); dataMap.put("项目文档", performanceDTO.getProjectDocumentScore().toString());
dataMap.put("会议管理", performanceDTO.getMeetScore().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("会议管理"))); dataMap.put("总分", devlopTotal(dataMap.get("项目绩效"), dataMap.get("项目文档"), dataMap.get("会议管理")));
writeXlsx(name, "templates/scope/项目助理考核.xlsx", name + "项目助理考核.xlsx", dataMap); writeXlsx(name, "templates/scope/项目助理考核.xlsx", name + "项目助理考核.xlsx", dataMap);
@ -2346,6 +2506,21 @@ public class IZtCountService {
dataMap.put("工作态度", "5"); dataMap.put("工作态度", "5");
dataMap.put("质量贡献", "5"); dataMap.put("质量贡献", "5");
dataMap.put("线上Bug", "20"); 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.put("总分", devlopTotal(dataMap.get("准时率得分")
, dataMap.get("缺陷检出率"), dataMap.get("测试文档"), dataMap.get("工作态度"), dataMap.get("质量贡献"), dataMap.get("线上Bug")) , dataMap.get("缺陷检出率"), dataMap.get("测试文档"), dataMap.get("工作态度"), dataMap.get("质量贡献"), dataMap.get("线上Bug"))
); );
@ -2382,17 +2557,13 @@ public class IZtCountService {
Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(d); Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(d);
Date lastDayOfMonth = DateUtils.getLastDayOfMonth(d); Date lastDayOfMonth = DateUtils.getLastDayOfMonth(d);
List<Integer> pIds = this.projectService.authProductList(); List<Integer> pids = this.projectService.authProductList();
if (CollectionUtils.isEmpty(pIds)) { if (CollectionUtils.isEmpty(pids)) {
return result; return result;
} }
List<ZtProduct> productList = this.productService.listByIds(pIds);
if (CollectionUtils.isEmpty(productList)) {
return result;
}
List<ZtProjectproduct> projectproducts = this.projectproductService.list(new QueryWrapper<ZtProjectproduct>().lambda() List<ZtProjectproduct> projectproducts = this.projectproductService.list(new QueryWrapper<ZtProjectproduct>().lambda()
.in(ZtProjectproduct::getProduct, productList.stream().map(o -> o.getId()).collect(Collectors.toList()))); .in(ZtProjectproduct::getProduct, pids));
if (CollectionUtils.isEmpty(projectproducts)) { if (CollectionUtils.isEmpty(projectproducts)) {
return result; return result;
} }
@ -2401,12 +2572,14 @@ public class IZtCountService {
if (CollectionUtils.isEmpty(execList)) { if (CollectionUtils.isEmpty(execList)) {
return result; return result;
} }
List<ZtTask> taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth, pIds); List<ZtTask> taskList = this.taskService.taskListByEIdsAndDate(firstDayOfMonth, lastDayOfMonth, pids);
taskList=taskService.getNormalTaskList(taskList);
if (CollectionUtils.isEmpty(taskList)) { if (CollectionUtils.isEmpty(taskList)) {
return result; return result;
} }
List<ZtProject> ztProjects = this.projectService.listByIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList())); List<ZtProject> ztProjects = this.projectService.listByIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList()));
@ -2429,8 +2602,9 @@ public class IZtCountService {
//accountIds 成员 //accountIds 成员
UserType userType = RiskUserThreadLocal.get().getUserType();
List<ItApproval> approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth); List<ItApproval> approvalList = this.taskService.itApprovalByUserName(u.getNickname(), firstDayOfMonth, lastDayOfMonth);
Map<String, ZtUser> userMap = this.userService.userMapByIds(accountIds);
if (name.equals("liyuyan")) { if (name.equals("liyuyan")) {
result = buildXMZLScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); result = buildXMZLScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d);
@ -2439,7 +2613,7 @@ public class IZtCountService {
} else if (u.getUserType() == UserType.KFZ) { } else if (u.getUserType() == UserType.KFZ) {
result = buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); result = buildKFZScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d);
} else if (u.getUserType() == UserType.CS) { } 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) { } else if (u.getUserType() == UserType.UI) {
result = buildUiScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d); result = buildUiScore(u, approvalList, firstDayOfMonth, lastDayOfMonth, taskList, d);
} else if (u.getUserType() == UserType.XMJL || u.getUserType() == UserType.XMGLY || u.getUserType() == UserType.GSGC) { } 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(); ZtCountQo ztCountQo = new ZtCountQo();
BeanUtils.copyProperties(qo, ztCountQo); BeanUtils.copyProperties(qo, ztCountQo);
List<PerformanceDTO> perList = this.newPerformanceCount(ztCountQo); List<PerformanceDTO> perList = this.newPerformanceCount(ztCountQo);
Map<String, ZtUser> userMap = this.userService.userMapByIds(accountIds);
result = buildTaskManage(result, perList, userMap); result = buildTaskManage(result, perList, userMap);
result = buildBugManage(result, ztCountQo, perList, userMap); result = buildBugManage(result, ztCountQo, perList, userMap);
@ -2678,8 +2851,7 @@ public class IZtCountService {
} }
} }
dto.setAllocationTime(allocationTime); dto.setAllocationTime(allocationTime);
List<ZtBug> devBugList = this.bugService.getDevBugList(bugList);
List<ZtBug> devBugList = bugList.stream().filter(o -> o.getBugType().equals("dev")).collect(Collectors.toList());
int devBugCount = devBugList.size(); int devBugCount = devBugList.size();
dto.setBugCount(BigDecimal.valueOf(devBugCount)); 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)); dto.setBugDensity((dto.getAllocationTime() == null || BigDecimalUtils.isZero(dto.getAllocationTime())) ? BigDecimal.ZERO : BigDecimal.valueOf(devBugCount).divide(dto.getAllocationTime(), 3, BigDecimal.ROUND_DOWN));

View File

@ -8,10 +8,7 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.sa.zentao.conf.LoginRiskUser; import com.sa.zentao.conf.LoginRiskUser;
import com.sa.zentao.conf.RiskUserThreadLocal; import com.sa.zentao.conf.RiskUserThreadLocal;
import com.sa.zentao.dao.BusinessException; import com.sa.zentao.dao.*;
import com.sa.zentao.dao.ZtBugDTO;
import com.sa.zentao.dao.ZtCaseDTO;
import com.sa.zentao.dao.ZtTaskDTO;
import com.sa.zentao.entity.*; import com.sa.zentao.entity.*;
import com.sa.zentao.enums.ActionStatus; import com.sa.zentao.enums.ActionStatus;
import com.sa.zentao.enums.ActionType; import com.sa.zentao.enums.ActionType;
@ -90,6 +87,8 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
@Autowired @Autowired
private IZtReleaseService releaseService; private IZtReleaseService releaseService;
@Autowired
private IZtBugBoundUserService bugBoundUserService;
@Override @Override
@ -328,6 +327,8 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
if (d.getDeadline() != null) { if (d.getDeadline() != null) {
d.setDeadline(DateUtils.getDayLast(d.getDeadline())); d.setDeadline(DateUtils.getDayLast(d.getDeadline()));
} }
List<ZtBugBoundUser> boundList = this.bugBoundUserService.listByBugId(d.getId());
d.setBoundList(BeanCopyUtil.copyListProperties(boundList,ZtBugBoundUserDTO::new));
return d; return d;
} }
@ -383,6 +384,7 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda().eq(ZtProjectproduct::getProject, dto.getProject())); ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda().eq(ZtProjectproduct::getProject, dto.getProject()));
Integer product = projectproduct.getProduct(); Integer product = projectproduct.getProduct();
//项目bug //项目bug
List<ZtBugBoundUser> bountSaveList=new ArrayList<>();
for (ZtBugDTO d:list) { for (ZtBugDTO d:list) {
ZtBug b=new ZtBug(); ZtBug b=new ZtBug();
BeanUtils.copyProperties(d,b); BeanUtils.copyProperties(d,b);
@ -393,9 +395,17 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
b.setOpeneddate(new Date()); b.setOpeneddate(new Date());
b.setOpenedby(loginRiskUser.getName()); b.setOpenedby(loginRiskUser.getName());
b.setStatus("active"); b.setStatus("active");
saveBatch.add(b); saveBatch.add(b);
} }
this.saveBatch(saveBatch); 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<Integer, List<ZtBug>> eMap = saveBatch.stream().filter(o->o.getExecution()!=null&&o.getExecution()!=0).collect(Collectors.groupingBy(ZtBug::getExecution)); Map<Integer, List<ZtBug>> eMap = saveBatch.stream().filter(o->o.getExecution()!=null&&o.getExecution()!=0).collect(Collectors.groupingBy(ZtBug::getExecution));
for (Integer e:eMap.keySet()) { for (Integer e:eMap.keySet()) {
@ -571,6 +581,21 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
return this.baseMapper.bugListByProductAndDate(pIds,firstDayOfMonth,lastDayOfMonth); return this.baseMapper.bugListByProductAndDate(pIds,firstDayOfMonth,lastDayOfMonth);
} }
@Override
public List<ZtBug> bugListByProjectAndDate(List<Integer> pIds, Date firstDayOfMonth, Date lastDayOfMonth) {
return this.baseMapper.bugListByProjectAndDate(pIds,firstDayOfMonth,lastDayOfMonth);
}
@Override
public List<ZtBug> bugBoundsListByProjectAndDate(List<Integer> pIds, Date firstDayOfMonth, Date lastDayOfMonth, String account) {
return this.baseMapper.bugBoundsListByProjectAndDate(pIds,firstDayOfMonth,lastDayOfMonth,account);
}
@Override
public List<ZtBug> getDevBugList(List<ZtBug> bugList) {
return bugList.stream().filter(o->"dev".equals(o.getBugType())||"releaseBug".equals(o.getBugType())).collect(Collectors.toList());
}
@Override @Override
@Transactional @Transactional
@ -599,6 +624,23 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
} }
this.baseMapper.insert(ztBug); this.baseMapper.insert(ztBug);
List<ZtBugBoundUser> boundSaveList=new ArrayList<>();
List<ZtBugBoundUserDTO> 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); fileService.updateFile(dto.getFiles(),ztBug.getId(), FileTypes.bug);
if(dto.getExecution()!=null&&dto.getExecution()!=0){ if(dto.getExecution()!=null&&dto.getExecution()!=0){
kanbanlaneService.addBug(dto.getExecution(), Arrays.asList(ztBug)); kanbanlaneService.addBug(dto.getExecution(), Arrays.asList(ztBug));
@ -628,6 +670,30 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
ztBug.setLastediteddate(new Date()); ztBug.setLastediteddate(new Date());
ztBug.setStatus("active"); ztBug.setStatus("active");
this.baseMapper.updateById(ztBug); this.baseMapper.updateById(ztBug);
//删除老的
this.bugBoundUserService.remove(new QueryWrapper<ZtBugBoundUser>().lambda()
.eq(ZtBugBoundUser::getBugId,ztBug.getId()));
List<ZtBugBoundUser> boundSaveList=new ArrayList<>();
List<ZtBugBoundUserDTO> 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){ if(dto.getReleaseId()!=null&&dto.getReleaseId()!=0){
this.releaseService.changeRelease(dto.getReleaseId(),ztBug.getId(),"bug"); this.releaseService.changeRelease(dto.getReleaseId(),ztBug.getId(),"bug");
}else{ }else{
@ -744,7 +810,7 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
} }
if(ztBug.getFeedback()!=null&&ztBug.getFeedback()!=0){ if(ztBug.getFeedback()!=null&&ztBug.getFeedback()!=0){
this.storyFeedbackService.feedbackStart(ztBug.getFeedback()); this.storyFeedbackService.feedbackStart(ztBug.getFeedback());
this.storyFeedbackService.feedbackFinished(ztBug.getFeedback()); this.storyFeedbackService.feedbackFinished(ztBug.getFeedback(),null);
} }

View File

@ -267,10 +267,10 @@ public class ZtMeetingServiceImpl extends ServiceImpl<ZtMeetingMapper, ZtMeeting
pfdStr= pfdStr.replace("{meetingDate}",DateUtils.formatDate(ztMeeting.getMeetingDate(),"yyyy/MM/dd HH:mm")); pfdStr= pfdStr.replace("{meetingDate}",DateUtils.formatDate(ztMeeting.getMeetingDate(),"yyyy/MM/dd HH:mm"));
textMap.put("address",ztMeeting.getAddress()); textMap.put("address",ztMeeting.getAddress());
pfdStr= pfdStr.replace("{address}",ztMeeting.getAddress()); pfdStr= pfdStr.replace("{address}",ztMeeting.getAddress());
pfdStr= pfdStr.replace("{result}",ztMeeting.getResult()); pfdStr= pfdStr.replace("{result}",StringUtils.isEmpty(ztMeeting.getResult())?" ":ztMeeting.getResult());
pfdStr= pfdStr.replace("{meetingAfter}",ztMeeting.getMeetingAfter()); pfdStr= pfdStr.replace("{meetingAfter}",StringUtils.isEmpty(ztMeeting.getMeetingAfter())?" ":ztMeeting.getMeetingAfter());
textMap.put("result", ztMeeting.getResult()); textMap.put("result", StringUtils.isEmpty(ztMeeting.getResult())?" ":ztMeeting.getResult());
textMap.put("meetingAfter", ztMeeting.getMeetingAfter()); textMap.put("meetingAfter", StringUtils.isEmpty(ztMeeting.getMeetingAfter())?" ":ztMeeting.getMeetingAfter());
StringBuilder b=new StringBuilder(); StringBuilder b=new StringBuilder();
if(!StringUtils.isEmpty(ztMeeting.getUsers())){ if(!StringUtils.isEmpty(ztMeeting.getUsers())){
Map<String, ZtUser> userMap = this.userService.userMapByIds(null); Map<String, ZtUser> userMap = this.userService.userMapByIds(null);

View File

@ -3,6 +3,8 @@ package com.sa.zentao.service.impl;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.Page;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
@ -84,6 +86,12 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
@Autowired @Autowired
private IZtBugService bugService; private IZtBugService bugService;
@Autowired
private IZtCountService countService;
@Autowired
private IZtEffortService effortService;
List<String> pLis = new ArrayList<>() {{ List<String> pLis = new ArrayList<>() {{
add("develop"); add("develop");
add("test"); add("test");
@ -309,6 +317,9 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
ztProject.setRealEnd(dto.getClosedDate()); ztProject.setRealEnd(dto.getClosedDate());
ztProject.setLastEditedDate(new Date()); ztProject.setLastEditedDate(new Date());
ztProject.setStatus("closed"); ztProject.setStatus("closed");
ztProject.setClosedBy(RiskUserThreadLocal.get().getName());
ztProject.setClosedDate(new Date());
ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName());
this.baseMapper.updateById(ztProject); this.baseMapper.updateById(ztProject);
ActionType type = null; ActionType type = null;
@ -376,6 +387,8 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
throw new BusinessException("未查询到"); throw new BusinessException("未查询到");
} }
ztProject.setDeleted("1"); ztProject.setDeleted("1");
ztProject.setCanceledBy(RiskUserThreadLocal.get().getName());
ztProject.setCanceledDate(new Date());
ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName());
ztProject.setLastEditedDate(new Date()); ztProject.setLastEditedDate(new Date());
this.baseMapper.updateById(ztProject); this.baseMapper.updateById(ztProject);
@ -409,9 +422,12 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
if (ztProject == null || !"closed".equalsIgnoreCase(ztProject.getStatus())) { if (ztProject == null || !"closed".equalsIgnoreCase(ztProject.getStatus())) {
throw new BusinessException("未查询到"); throw new BusinessException("未查询到");
} }
ztProject.setStatus("doing"); LambdaUpdateWrapper<ZtProject> updateWrapper = new UpdateWrapper<ZtProject>().lambda().set(ZtProject::getStatus, "doing")
ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName()); .set(ZtProject::getRealEnd,null)
this.baseMapper.updateById(ztProject); .set(ZtProject::getLastEditedBy, RiskUserThreadLocal.get().getName())
.set(ZtProject::getLastEditedDate, new Date())
.eq(ZtProject::getId,dto.getId()) ;
this.baseMapper.update(updateWrapper);
ActionType type = null; ActionType type = null;
String product = null; String product = null;
Integer project = null; Integer project = null;
@ -1211,8 +1227,6 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
); );
} }
@Autowired
private IZtEffortService effortService;
//按照每月多少天 1-31 每天的工作 //按照每月多少天 1-31 每天的工作
@Override @Override
@ -1826,8 +1840,6 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
return new PageInfo< Map<String, Object>>(workBuildResult(firstDayOfMonth,lastDayOfMonth, uList,list,effList,uMap,qo.getNeedWeek())); return new PageInfo< Map<String, Object>>(workBuildResult(firstDayOfMonth,lastDayOfMonth, uList,list,effList,uMap,qo.getNeedWeek()));
} }
@Autowired
private IZtCountService countService;
@Override @Override
public PageInfo pageMonthReport(ZtProjectQo qo) { public PageInfo pageMonthReport(ZtProjectQo qo) {
@ -1943,18 +1955,16 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
BigDecimal onTime=BigDecimal.valueOf(floatBatchAdd(onTimeTask.stream().map(o->o.getEstimate()) BigDecimal onTime=BigDecimal.valueOf(floatBatchAdd(onTimeTask.stream().map(o->o.getEstimate())
.collect(Collectors.toList()))); .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)) ); d.setTaskFinishOnTimeRate(onTimeFinishRate.multiply(BigDecimal.valueOf(100)) );
}else{ }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<ZtBug> bugList = this.bugService.list(new QueryWrapper<ZtBug>().lambda().in(ZtBug::getProduct, products.stream().map(o -> o.getId()).collect(Collectors.toList()))
.eq(ZtBug::getBugType,"prod") List<ZtBug> bugList = this.bugService.bugBoundsListByProjectAndDate(products.stream().map(o -> o.getId()).collect(Collectors.toList()), firstDayOfMonth, lastDayOfMonth, account);
.ge(ZtBug::getOpeneddate, firstDayOfMonth) bugList =bugList.stream().filter(o->o.getBugType().equals("prod")).collect(Collectors.toList());
.le(ZtBug::getOpeneddate, lastDayOfMonth)
.eq(ZtBug::getAssignedTo, account));
d.setBugCount(BigDecimal.valueOf(bugList.size())); d.setBugCount(BigDecimal.valueOf(bugList.size()));
result.add(d); result.add(d);

View File

@ -66,6 +66,8 @@ public class ZtReleaseServiceImpl extends ServiceImpl<ZtReleaseMapper, ZtRelease
@Autowired @Autowired
private IZtBugService bugService; private IZtBugService bugService;
@Autowired
private IZtExecutionprojectService executionprojectService;
@Override @Override
@Transactional @Transactional
@ -500,8 +502,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl<ZtReleaseMapper, ZtRelease
return null; return null;
} }
@Autowired
private IZtExecutionprojectService executionprojectService;
@Override @Override
public PageInfo<ZtStoryDTO> execStoryPageList(ZtReleaseQo qo) { public PageInfo<ZtStoryDTO> execStoryPageList(ZtReleaseQo qo) {

View File

@ -50,7 +50,7 @@ public class ZtStoryCaseServiceImpl extends ServiceImpl<ZtStoryCaseMapper, ZtSto
ztStoryCase.setOpenedUser(RiskUserThreadLocal.get().getName()); ztStoryCase.setOpenedUser(RiskUserThreadLocal.get().getName());
this.baseMapper.insert(ztStoryCase); this.baseMapper.insert(ztStoryCase);
actionService.addAction(ActionType.XQ, ActionStatus.CASEXJ, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null, actionService.addAction(ActionType.XQ, ActionStatus.CASEXJ, ztStoryCase.getStory(), ztStoryCase.getProduct() + "", null, null,
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", ""); RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
} }
@ -74,7 +74,7 @@ public class ZtStoryCaseServiceImpl extends ServiceImpl<ZtStoryCaseMapper, ZtSto
ztStoryCase.setStatus("reviewing"); ztStoryCase.setStatus("reviewing");
ztStoryCase.setUpdateUser(RiskUserThreadLocal.get().getName()); ztStoryCase.setUpdateUser(RiskUserThreadLocal.get().getName());
this.baseMapper.updateById(ztStoryCase); this.baseMapper.updateById(ztStoryCase);
actionService.addAction(ActionType.XQ, ActionStatus.CASEBJ, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null, actionService.addAction(ActionType.XQ, ActionStatus.CASEBJ, ztStoryCase.getStory(), ztStoryCase.getProduct() + "", null, null,
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", ""); RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
} }
@ -95,12 +95,12 @@ public class ZtStoryCaseServiceImpl extends ServiceImpl<ZtStoryCaseMapper, ZtSto
if(qo.getRevieweResult().equals(1)){ if(qo.getRevieweResult().equals(1)){
//评审通过 //评审通过
ztStoryCase.setStatus("finished"); ztStoryCase.setStatus("finished");
actionService.addAction(ActionType.XQ, ActionStatus.CASEPSTG, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null, actionService.addAction(ActionType.XQ, ActionStatus.CASEPSTG, ztStoryCase.getStory(), ztStoryCase.getProduct() + "", null, null,
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", ""); RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
}else{ }else{
//评审不通过 //评审不通过
ztStoryCase.setStatus("refuse"); ztStoryCase.setStatus("refuse");
actionService.addAction(ActionType.XQ, ActionStatus.CASEPSBTG, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null, actionService.addAction(ActionType.XQ, ActionStatus.CASEPSBTG, ztStoryCase.getStory(), ztStoryCase.getProduct() + "", null, null,
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), qo.getDesc(), ""); RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), qo.getDesc(), "");
} }
ztStoryCase.setUpdateDate(new Date()); ztStoryCase.setUpdateDate(new Date());
@ -127,7 +127,7 @@ public class ZtStoryCaseServiceImpl extends ServiceImpl<ZtStoryCaseMapper, ZtSto
ztStoryCase.setStatus("reviewing"); ztStoryCase.setStatus("reviewing");
this.baseMapper.updateById(ztStoryCase); this.baseMapper.updateById(ztStoryCase);
actionService.addAction(ActionType.XQ, ActionStatus.CASESUBREVIEW, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null, actionService.addAction(ActionType.XQ, ActionStatus.CASESUBREVIEW, ztStoryCase.getStory(), ztStoryCase.getProduct() + "", null, null,
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", ""); RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
} }
} }

View File

@ -23,6 +23,7 @@ import com.sa.zentao.qo.ZtProjectQo;
import com.sa.zentao.service.*; import com.sa.zentao.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sa.zentao.utils.BeanCopyUtil; import com.sa.zentao.utils.BeanCopyUtil;
import com.sa.zentao.utils.SFunctionColums;
import com.sa.zentao.utils.VxMessageUtils; import com.sa.zentao.utils.VxMessageUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -373,30 +374,7 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
private List<ZtStoryFeedback> myPageList(ZtProjectQo qo) { private List<ZtStoryFeedback> myPageList(ZtProjectQo qo) {
LambdaQueryWrapper<ZtStoryFeedback> query = new QueryWrapper<ZtStoryFeedback>().lambda(); LambdaQueryWrapper<ZtStoryFeedback> query = new QueryWrapper<ZtStoryFeedback>().lambda();
query.select(ZtStoryFeedback::getId, query.select(SFunctionColums.feedbackColumes());
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
);
if (!org.apache.commons.lang3.StringUtils.isEmpty(qo.getSearchVal())) { if (!org.apache.commons.lang3.StringUtils.isEmpty(qo.getSearchVal())) {
if ("ALL".equals(qo.getSearchVal())) { if ("ALL".equals(qo.getSearchVal())) {
} }
@ -543,7 +521,7 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
} }
@Override @Override
public void feedbackFinished(Integer feedbackId) { public void feedbackFinished(Integer feedbackId,String finishedRemark) {
if (feedbackId == null || feedbackId == 0) { if (feedbackId == null || feedbackId == 0) {
throw new BusinessException("请检查问题反馈id"); throw new BusinessException("请检查问题反馈id");
} }
@ -582,6 +560,17 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
} }
ztStoryFeedback.setFinishDate(new Date()); ztStoryFeedback.setFinishDate(new Date());
ztStoryFeedback.setStatus("finished"); ztStoryFeedback.setStatus("finished");
if(!CollectionUtils.isEmpty(feedbackList)){
String buff="";
for (ZtTask t:feedbackList) {
if(!org.apache.commons.lang3.StringUtils.isEmpty(t.getFeedbackRemark())){
buff+=t.getFeedbackRemark()+"</br>";
}
}
ztStoryFeedback.setFinishedRemark(buff);
}
this.baseMapper.updateById(ztStoryFeedback); this.baseMapper.updateById(ztStoryFeedback);
//添加action //添加action
actionService.addAction(ActionType.WTFK, ActionStatus.CLWC, ztStoryFeedback.getId(), ztStoryFeedback.getProduct() + "", null, null, actionService.addAction(ActionType.WTFK, ActionStatus.CLWC, ztStoryFeedback.getId(), ztStoryFeedback.getProduct() + "", null, null,

View File

@ -832,6 +832,11 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
} }
} }
@Override
public List<ZtStory> getStoryListByDatePidsProject(List<Integer> pids, Integer id, Date firstDayOfMonth, Date lastDayOfMonth) {
return this.baseMapper.getStoryListByDatePidsProject(pids,id,firstDayOfMonth,lastDayOfMonth);
}
private Map<Integer, List<ZtTask>> getTaskCountMap(List<ZtStoryDTO> list) { private Map<Integer, List<ZtTask>> getTaskCountMap(List<ZtStoryDTO> list) {
List<ZtTask> tList = this.taskService.list(new QueryWrapper<ZtTask>().lambda() List<ZtTask> tList = this.taskService.list(new QueryWrapper<ZtTask>().lambda()
@ -1133,7 +1138,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
ZtStory ztStory = this.baseMapper.selectById(story); ZtStory ztStory = this.baseMapper.selectById(story);
if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) {
this.storyFeedbackService.feedbackFinished(ztStory.getFeedback()); this.storyFeedbackService.feedbackFinished(ztStory.getFeedback(),null);
} }
if (ztStory == null) { if (ztStory == null) {
@ -1196,7 +1201,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
} }
if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) { if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) {
this.storyFeedbackService.feedbackFinished(ztStory.getFeedback()); this.storyFeedbackService.feedbackFinished(ztStory.getFeedback(),null);
} }

View File

@ -329,6 +329,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
} }
List<ZtTask> taskList = this.list(new QueryWrapper<ZtTask>().lambda() List<ZtTask> taskList = this.list(new QueryWrapper<ZtTask>().lambda()
.select(SFunctionColums.taskColumes()) .select(SFunctionColums.taskColumes())
.in(ZtTask::getProduct,pids)
.ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth)); .ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth));
// return this.baseMapper.taskListByPIdsAndDate(pids,firstDayOfMonth,lastDayOfMonth); // return this.baseMapper.taskListByPIdsAndDate(pids,firstDayOfMonth,lastDayOfMonth);
@ -492,7 +493,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
List<String> userIds = list.stream().map(o -> o.getFinishedby()).collect(Collectors.toList()); List<String> userIds = list.stream().map(o -> o.getFinishedby()).collect(Collectors.toList());
userIds.addAll(list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList())); userIds.addAll(list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null); Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
Date d=new Date();
for (ZtTaskDTO task : list) { for (ZtTaskDTO task : list) {
ZtUser ztUser = userMap.get(task.getFinishedby()); ZtUser ztUser = userMap.get(task.getFinishedby());
if (ztUser != null) { if (ztUser != null) {
@ -505,6 +506,20 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
if (task.getDeadline() != null) { if (task.getDeadline() != null) {
task.setDeadline(DateUtils.getDayLast(task.getDeadline())); 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<ZtTaskMapper, ZtTask> impleme
ztTask.setLastediteddate(new Date()); ztTask.setLastediteddate(new Date());
ztTask.setConsumed(dto.getConsumed()); ztTask.setConsumed(dto.getConsumed());
ztTask.setLeft(dto.getLeft() - dto.getConsumed()); ztTask.setLeft(dto.getLeft() - dto.getConsumed());
ztTask.setFeedbackRemark(dto.getFeedbackRemark());
if (ztTask.getLeft() < 0) { if (ztTask.getLeft() < 0) {
ztTask.setLeft(0f); ztTask.setLeft(0f);
} }
@ -793,7 +809,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
if ("doing".equals(ztTask.getStatus())) { if ("doing".equals(ztTask.getStatus())) {
this.storyFeedbackService.feedbackStart(ztTask.getFeedback()); this.storyFeedbackService.feedbackStart(ztTask.getFeedback());
} else { } else {
this.storyFeedbackService.feedbackFinished(ztTask.getFeedback()); this.storyFeedbackService.feedbackFinished(ztTask.getFeedback(),ztTask.getFeedbackRemark());
} }
} }
@ -907,17 +923,6 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
StringUtils.isEmpty(finishBy) ? RiskUserThreadLocal.get().getName() : finishBy, dto.getRemark(), null); StringUtils.isEmpty(finishBy) ? RiskUserThreadLocal.get().getName() : finishBy, dto.getRemark(), null);
if (ztTask.getExecution() != null && ztTask.getExecution() != 0) { if (ztTask.getExecution() != null && ztTask.getExecution() != 0) {
if (StringUtils.isEmpty(dto.getTabType())) { 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"); kanbanlaneService.changeStatus(ztTask.getExecution(), ztTask.getId(), "task", "developed");
} else { } else {
KanbanQo qo = new KanbanQo(); KanbanQo qo = new KanbanQo();
@ -948,7 +953,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
// } // }
} }
if (ztTask.getFeedback() != null && ztTask.getFeedback() != 0) { if (ztTask.getFeedback() != null && ztTask.getFeedback() != 0) {
this.storyFeedbackService.feedbackFinished(ztTask.getFeedback()); this.storyFeedbackService.feedbackFinished(ztTask.getFeedback(),ztTask.getFeedbackRemark());
} }
} }

View File

@ -63,13 +63,33 @@ public class SFunctionColums {
public static List<SFunction<ZtStoryFeedback, ?>> feedbackColumes(){ public static List<SFunction<ZtStoryFeedback, ?>> feedbackColumes(){
List<SFunction<ZtStoryFeedback, ?>> result=new ArrayList<>(); List<SFunction<ZtStoryFeedback, ?>> result=new ArrayList<>();
result.add(ZtStoryFeedback::getId);
result.add(ZtStoryFeedback::getAssignedTo);
result.add(ZtStoryFeedback::getProduct); result.add(ZtStoryFeedback::getId);
result.add(ZtStoryFeedback::getName); result.add(ZtStoryFeedback::getName);
result.add(ZtStoryFeedback::getStatus); result.add(ZtStoryFeedback::getOpenedBy);
result.add(ZtStoryFeedback::getSource); result.add(ZtStoryFeedback::getFiles);
result.add(ZtStoryFeedback::getType); 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; return result;
} }

View File

@ -43,8 +43,14 @@ public class SendEmail {
String host = "smtp.qiye.163.com"; String host = "smtp.qiye.163.com";
String port = "587"; String port = "587";
String username = "sino-employee@sino-assistance.com"; String username = "itsm@sino-assistance.com";
String password = "A112233a"; 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(); Properties props = new Properties();
props.put("mail.smtp.host", host); props.put("mail.smtp.host", host);
@ -57,7 +63,7 @@ public class SendEmail {
return new PasswordAuthentication(username, password); return new PasswordAuthentication(username, password);
} }
}); });
session.setDebug(true);
try { try {
MimeMessage message = new MimeMessage(session); MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(username)); message.setFrom(new InternetAddress(username));
@ -91,13 +97,17 @@ public class SendEmail {
// String host = "smtp.qiye.163.com"; // String host = "smtp.qiye.163.com";
// String port = "587"; // String port = "587";
// String username = "qinglin.yin@do-tec.com.cn"; // 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 password = "A112233a";
String host = "smtp.qiye.163.com"; String host = "smtp.qiye.163.com";
String port = "587"; String port = "587";
String username = "sino-employee@sino-assistance.com"; String username = "itsm@sino-assistance.com";
String password = "A112233a"; String password = "GKXL@650";
// 创建Properties对象设置SMTP服务器相关信息 // 创建Properties对象设置SMTP服务器相关信息
Properties props = new Properties(); Properties props = new Properties();

View File

@ -34,13 +34,24 @@ file:
baseUrl: http://192.168.3.200:8013 baseUrl: http://192.168.3.200:8013
meeting: /data/buildzentao/meeting.docx 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: vx:
agentld: 1000059
token: vTniTyOG4csBmAnMr token: vTniTyOG4csBmAnMr
encodingAesKey : gCmhw7vKLcZwsDszILPNSEqyjgRKODemkYmRFdfelmk encodingAesKey : gCmhw7vKLcZwsDszILPNSEqyjgRKODemkYmRFdfelmk
receiveid: wwa7cc4743271d6055 receiveid: wwa7cc4743271d6055
corpid: wwa7cc4743271d6055 corpid: wwa7cc4743271d6055
corpsecret: qQNdRmtanymbshPOLgWTgB-TzX9QmNpVCpOx5suJ2xA corpsecret: qQNdRmtanymbshPOLgWTgB-TzX9QmNpVCpOx5suJ2xA
dkCorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs dkCorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs
salaryCorpsecretApp: ib0GyrjV573QdczASCeB-QmCsp0t_QpjsbnQwKBr-Os salaryCorpsecretApp: BsgdcmLV5L1jbO7uro9QqdgGQaGItVb_tvfaasAq_3w
salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send
dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs

View File

@ -52,15 +52,27 @@ file:
# #
#file: #file:
# baseUrl: http://127.0.0.1:8085 # baseUrl: http://127.0.0.1:8085
vx: #vx:
token: DGkygyJELpIY2 # agentld: 1000002
encodingAesKey: Pp2D1vttrxVMoTzocD1SukkRe3IYXQjW5nuOjvc2JRE # token: DGkygyJELpIY2
receiveid: ww0b2dc90421854148 # encodingAesKey: Pp2D1vttrxVMoTzocD1SukkRe3IYXQjW5nuOjvc2JRE
corpid: ww0b2dc90421854148 # receiveid: ww0b2dc90421854148
corpsecret: LRVwfc11K-JQS2nJC8xTPrZLBKmMRZ7nPyGchsVfKF4 # corpid: ww0b2dc90421854148
# salaryCorpsecretApp: KlE8J0rMS3W8Hprztl_EnCfAonm34mPpS1B6vaOmzBc # corpsecret: LRVwfc11K-JQS2nJC8xTPrZLBKmMRZ7nPyGchsVfKF4
salaryCorpsecretApp: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU # salaryCorpsecretApp: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU
salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send # salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send
dkcorpsecret: fMf4nGnkpcYMHq0JzEXx-LcyGvgoxX-DbbCjIjaHqZ0 # dkcorpsecret: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU #书籍
# dkcorpsecret: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU #书籍
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

View File

@ -2,295 +2,295 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sa.zentao.mapper.ZtBugMapper"> <mapper namespace="com.sa.zentao.mapper.ZtBugMapper">
<resultMap id="BaseResultMap" type="com.sa.zentao.entity.ZtBug"> <resultMap id="BaseResultMap" type="com.sa.zentao.entity.ZtBug">
<result column="id" property="id" /> <result column="id" property="id"/>
<result column="project" property="project" /> <result column="project" property="project"/>
<result column="product" property="product" /> <result column="product" property="product"/>
<result column="injection" property="injection" /> <result column="injection" property="injection"/>
<result column="identify" property="identify" /> <result column="identify" property="identify"/>
<result column="branch" property="branch" /> <result column="branch" property="branch"/>
<result column="module" property="module" /> <result column="module" property="module"/>
<result column="execution" property="execution" /> <result column="execution" property="execution"/>
<result column="plan" property="plan" /> <result column="plan" property="plan"/>
<result column="story" property="story" /> <result column="story" property="story"/>
<result column="storyVersion" property="storyversion" /> <result column="storyVersion" property="storyversion"/>
<result column="task" property="task" /> <result column="task" property="task"/>
<result column="toTask" property="totask" /> <result column="toTask" property="totask"/>
<result column="toStory" property="tostory" /> <result column="toStory" property="tostory"/>
<result column="title" property="title" /> <result column="title" property="title"/>
<result column="keywords" property="keywords" /> <result column="keywords" property="keywords"/>
<result column="severity" property="severity" /> <result column="severity" property="severity"/>
<result column="pri" property="pri" /> <result column="pri" property="pri"/>
<result column="type" property="type" /> <result column="type" property="type"/>
<result column="os" property="os" /> <result column="os" property="os"/>
<result column="browser" property="browser" /> <result column="browser" property="browser"/>
<result column="hardware" property="hardware" /> <result column="hardware" property="hardware"/>
<result column="found" property="found" /> <result column="found" property="found"/>
<result column="steps" property="steps" /> <result column="steps" property="steps"/>
<result column="status" property="status" /> <result column="status" property="status"/>
<result column="subStatus" property="substatus" /> <result column="subStatus" property="substatus"/>
<result column="color" property="color" /> <result column="color" property="color"/>
<result column="confirmed" property="confirmed" /> <result column="confirmed" property="confirmed"/>
<result column="activatedCount" property="activatedcount" /> <result column="activatedCount" property="activatedcount"/>
<result column="activatedDate" property="activateddate" /> <result column="activatedDate" property="activateddate"/>
<result column="feedbackBy" property="feedbackby" /> <result column="feedbackBy" property="feedbackby"/>
<result column="notifyEmail" property="notifyemail" /> <result column="notifyEmail" property="notifyemail"/>
<result column="mailto" property="mailto" /> <result column="mailto" property="mailto"/>
<result column="openedBy" property="openedby" /> <result column="openedBy" property="openedby"/>
<result column="openedDate" property="openeddate" /> <result column="openedDate" property="openeddate"/>
<result column="openedBuild" property="openedbuild" /> <result column="openedBuild" property="openedbuild"/>
<result column="assignedTo" property="assignedto" /> <result column="assignedTo" property="assignedto"/>
<result column="assignedDate" property="assigneddate" /> <result column="assignedDate" property="assigneddate"/>
<result column="deadline" property="deadline" /> <result column="deadline" property="deadline"/>
<result column="resolvedBy" property="resolvedby" /> <result column="resolvedBy" property="resolvedby"/>
<result column="resolution" property="resolution" /> <result column="resolution" property="resolution"/>
<result column="resolvedBuild" property="resolvedbuild" /> <result column="resolvedBuild" property="resolvedbuild"/>
<result column="resolvedDate" property="resolveddate" /> <result column="resolvedDate" property="resolveddate"/>
<result column="closedBy" property="closedby" /> <result column="closedBy" property="closedby"/>
<result column="closedDate" property="closeddate" /> <result column="closedDate" property="closeddate"/>
<result column="duplicateBug" property="duplicatebug" /> <result column="duplicateBug" property="duplicatebug"/>
<result column="linkBug" property="linkbug" /> <result column="linkBug" property="linkbug"/>
<result column="case" property="caseId" /> <result column="case" property="caseId"/>
<result column="caseVersion" property="caseversion" /> <result column="caseVersion" property="caseversion"/>
<result column="feedback" property="feedback" /> <result column="feedback" property="feedback"/>
<result column="result" property="result" /> <result column="result" property="result"/>
<result column="repo" property="repo" /> <result column="repo" property="repo"/>
<result column="mr" property="mr" /> <result column="mr" property="mr"/>
<result column="entry" property="entry" /> <result column="entry" property="entry"/>
<result column="lines" property="lines" /> <result column="lines" property="lines"/>
<result column="v1" property="v1" /> <result column="v1" property="v1"/>
<result column="v2" property="v2" /> <result column="v2" property="v2"/>
<result column="repoType" property="repotype" /> <result column="repoType" property="repotype"/>
<result column="issueKey" property="issuekey" /> <result column="issueKey" property="issuekey"/>
<result column="testtask" property="testtask" /> <result column="testtask" property="testtask"/>
<result column="lastEditedBy" property="lasteditedby" /> <result column="lastEditedBy" property="lasteditedby"/>
<result column="lastEditedDate" property="lastediteddate" /> <result column="lastEditedDate" property="lastediteddate"/>
<result column="deleted" property="deleted" /> <result column="deleted" property="deleted"/>
</resultMap> </resultMap>
<select id="bugPageList" resultType="com.sa.zentao.dao.ZtBugDTO"> <select id="bugPageList" resultType="com.sa.zentao.dao.ZtBugDTO">
SELECT b.id, SELECT b.id,
b.project, b.project,
b.product, b.product,
b.injection, b.injection,
b.identify, b.identify,
b.branch, b.branch,
b.module, b.module,
b.execution, b.execution,
b.plan, b.plan,
b.story, b.story,
b.storyVersion, b.storyVersion,
b.task, b.task,
b.toTask, b.toTask,
b.toStory, b.toStory,
b.title, b.title,
b.keywords, b.keywords,
b.severity, b.severity,
b.pri, b.pri,
b.type, b.type,
b.os, b.os,
b.browser, b.browser,
b.hardware, b.hardware,
b.found, b.found,
b.`status`, b.`status`,
b.subStatus, b.subStatus,
b.color, b.color,
b.confirmed, b.confirmed,
b.activatedCount, b.activatedCount,
b.activatedDate, b.activatedDate,
b.feedbackBy, b.feedbackBy,
b.notifyEmail, b.notifyEmail,
b.mailto, b.mailto,
b.openedBy, b.openedBy,
b.openedDate, b.openedDate,
b.assignedTo, b.assignedTo,
b.openedBuild, b.openedBuild,
b.assignedDate, b.assignedDate,
b.deadline, b.deadline,
b.resolvedBy, b.resolvedBy,
b.resolution, b.resolution,
b.resolvedBuild, b.resolvedBuild,
b.resolvedDate, b.resolvedDate,
b.closedBy, b.closedBy,
b.closedDate, b.closedDate,
b.duplicateBug, b.duplicateBug,
b.linkBug, b.linkBug,
b.caseId, b.caseId,
b.caseVersion, b.caseVersion,
b.feedback, b.feedback,
b.result, b.result,
b.repo, b.repo,
b.mr, b.mr,
b.entry, b.entry,
b.`lines`, b.`lines`,
b.v1, b.v1,
b.v2, b.v2,
b.repoType, b.repoType,
b.testtask, b.testtask,
b.issueKey, b.issueKey,
b.lastEditedBy, b.lastEditedBy,
b.lastEditedDate, b.lastEditedDate,
b.deleted, b.deleted,
b.file_url, b.file_url,
b.bug_type, b.bug_type,
b.ys_user, b.ys_user,
b.ys_flag, b.ys_flag,
b.ys_remark, b.ys_remark,
b.release_flag, b.release_flag,
p.name productName p.name productName
from zt_bug b left join zt_product p on b.product = p.id from zt_bug b left join zt_product p on b.product = p.id
WHERE 1=1 WHERE 1=1
<if test="qo.project != null and qo.project != 0"> <if test="qo.project != null and qo.project != 0">
and b.project =#{qo.project} and b.project =#{qo.project}
</if> </if>
<if test="qo.bugType != null and qo.bugType != ''"> <if test="qo.bugType != null and qo.bugType != ''">
and b.bug_type =#{qo.bugType} and b.bug_type =#{qo.bugType}
</if> </if>
<if test="qo.id != null and qo.id != 0"> <if test="qo.id != null and qo.id != 0">
and b.id = #{qo.id} and b.id = #{qo.id}
</if> </if>
<if test="qo.name != null and qo.name != ''"> <if test="qo.name != null and qo.name != ''">
and b.title like concat('%', #{qo.name}, '%') and b.title like concat('%', #{qo.name}, '%')
</if> </if>
<if test="qo.severity != null and qo.severity != ''"> <if test="qo.severity != null and qo.severity != ''">
and b.severity = #{qo.severity} and b.severity = #{qo.severity}
</if> </if>
<if test="qo.status != null and qo.status != ''"> <if test="qo.status != null and qo.status != ''">
and b.status = #{qo.status} and b.status = #{qo.status}
</if> </if>
<if test="qo.pri != null and qo.pri != ''"> <if test="qo.pri != null and qo.pri != ''">
and b.pri = #{qo.pri} and b.pri = #{qo.pri}
</if> </if>
<if test="qo.type != null and qo.type != ''"> <if test="qo.type != null and qo.type != ''">
and b.`type` = #{qo.type} and b.`type` = #{qo.type}
</if> </if>
<if test="qo.assignedTo != null and qo.assignedTo != ''"> <if test="qo.assignedTo != null and qo.assignedTo != ''">
and b.assignedTo = #{qo.assignedTo} and b.assignedTo = #{qo.assignedTo}
</if> </if>
<if test="qo.startDate !=null"> <if test="qo.startDate !=null">
and b.openedDate <![CDATA[>=]]> #{qo.startDate} and b.openedDate <![CDATA[>=]]> #{qo.startDate}
</if> </if>
<if test="qo.endDate !=null"> <if test="qo.endDate !=null">
and b.openedDate <![CDATA[<=]]> #{qo.endDate} and b.openedDate <![CDATA[<=]]> #{qo.endDate}
</if> </if>
<if test="qo.openedby != null and qo.openedby != ''"> <if test="qo.openedby != null and qo.openedby != ''">
and b.openedby = #{qo.openedby} and b.openedby = #{qo.openedby}
</if> </if>
<if test="qo.openStartDate !=null"> <if test="qo.openStartDate !=null">
and b.openedDate <![CDATA[>=]]> #{qo.openStartDate} and b.openedDate <![CDATA[>=]]> #{qo.openStartDate}
</if> </if>
<if test="qo.openEndDate !=null"> <if test="qo.openEndDate !=null">
and b.openedDate <![CDATA[<=]]> #{qo.openEndDate} and b.openedDate <![CDATA[<=]]> #{qo.openEndDate}
</if> </if>
<if test="qo.execution != null and qo.execution != '' "> <if test="qo.execution != null and qo.execution != '' ">
and b.execution =#{qo.execution} and b.execution =#{qo.execution}
</if> </if>
<if test="qo.productIds != null and qo.productIds.size() > 0"> <if test="qo.productIds != null and qo.productIds.size() > 0">
and b.product in and b.product in
<foreach collection="qo.productIds" item="id" index="index" <foreach collection="qo.productIds" item="id" index="index"
open="(" close=")" separator=","> open="(" close=")" separator=",">
#{id} #{id}
</foreach> </foreach>
</if> </if>
<if test="qo.objIds != null and qo.objIds.size() > 0"> <if test="qo.objIds != null and qo.objIds.size() > 0">
and b.id in and b.id in
<foreach collection="qo.objIds" item="id" index="index" <foreach collection="qo.objIds" item="id" index="index"
open="(" close=")" separator=","> open="(" close=")" separator=",">
#{id} #{id}
</foreach> </foreach>
</if> </if>
<if test="qo.searchVal == 'ALL' "> <if test="qo.searchVal == 'ALL' ">
</if> </if>
<if test="qo.searchVal == 'WGB' "> <if test="qo.searchVal == 'WGB' ">
-- 未关闭 -- 未关闭
and b.status !='closed' and b.status !='closed'
</if> </if>
<if test="qo.searchVal == 'YWCJ' "> <if test="qo.searchVal == 'YWCJ' ">
-- 由我创建 -- 由我创建
and b.openedBy =#{qo.userName} and b.openedBy =#{qo.userName}
</if> </if>
<if test="qo.searchVal == 'ZPGW' "> <if test="qo.searchVal == 'ZPGW' ">
-- 指派给我 -- 指派给我
and b.assignedTo =#{qo.userName} and b.assignedTo =#{qo.userName}
</if> </if>
<if test="qo.searchVal == 'YWJJ' "> <if test="qo.searchVal == 'YWJJ' ">
-- 由我解决 -- 由我解决
and b.resolvedBy =#{qo.userName} and b.resolvedBy =#{qo.userName}
and b.status= 'resolved' and b.status= 'resolved'
</if> </if>
<if test="qo.searchVal == 'YWZP' "> <if test="qo.searchVal == 'YWZP' ">
-- 由我指派 -- 由我指派
and b.openedBy =#{qo.userName} and b.openedBy =#{qo.userName}
</if> </if>
<if test="qo.searchVal == 'WJJ' "> <if test="qo.searchVal == 'WJJ' ">
-- //未解决 -- //未解决
and b.status= 'active' and b.status= 'active'
</if> </if>
<if test="qo.searchVal == 'WQR' "> <if test="qo.searchVal == 'WQR' ">
-- //未确认 -- //未确认
and b.confirmed= 0 and b.confirmed= 0
</if> </if>
<if test="qo.searchVal == 'WZP' "> <if test="qo.searchVal == 'WZP' ">
-- //未指派 -- //未指派
and b.assignedTo is null and b.assignedTo is null
</if> </if>
<if test="qo.searchVal == 'JWCL' "> <if test="qo.searchVal == 'JWCL' ">
-- //久未处理 -- //久未处理
</if> </if>
<if test="qo.searchVal == 'DGB' "> <if test="qo.searchVal == 'DGB' ">
-- //待关闭 -- //待关闭
</if> </if>
<if test="qo.searchVal == 'BYQ' "> <if test="qo.searchVal == 'BYQ' ">
-- //被延期 -- //被延期
</if> </if>
<if test="qo.searchVal == 'GQ' "> <if test="qo.searchVal == 'GQ' ">
-- //过期BUG -- //过期BUG
</if> </if>
<if test="qo.searchVal == 'XQBD' "> <if test="qo.searchVal == 'XQBD' ">
-- //研发需求变动 -- //研发需求变动
</if> </if>
<choose> <choose>
<when test="qo.orderName != '' and qo.orderName != null "> <when test="qo.orderName != '' and qo.orderName != null ">
<choose> <choose>
<when test="qo.orderSort != '' and qo.orderSort != null "> <when test="qo.orderSort != '' and qo.orderSort != null ">
order by ${qo.orderName} ${qo.orderSort} order by ${qo.orderName} ${qo.orderSort}
</when> </when>
<otherwise> <otherwise>
order by id desc order by id desc
</otherwise> </otherwise>
</choose> </choose>
</when> </when>
<otherwise> <otherwise>
order by id desc order by id desc
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
<select id="myBugPageList" resultType="com.sa.zentao.dao.ZtBugDTO"> <select id="myBugPageList" resultType="com.sa.zentao.dao.ZtBugDTO">
@ -364,52 +364,51 @@
s.ys_remark, s.ys_remark,
s.release_flag, 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 WHERE 1=1
<if test="qo.id != null and qo.id != 0"> <if test="qo.id != null and qo.id != 0">
and s.id = #{qo.id} and s.id = #{qo.id}
</if> </if>
<if test="qo.name != null and qo.name != ''"> <if test="qo.name != null and qo.name != ''">
and s.title like concat('%', #{qo.name}, '%') and s.title like concat('%', #{qo.name}, '%')
</if> </if>
<if test="qo.severity != null and qo.severity != ''"> <if test="qo.severity != null and qo.severity != ''">
and s.severity = #{qo.severity} and s.severity = #{qo.severity}
</if> </if>
<if test="qo.pri != null and qo.pri != ''"> <if test="qo.pri != null and qo.pri != ''">
and pri = #{qo.pri} and pri = #{qo.pri}
</if> </if>
<if test="qo.type != null and qo.type != ''"> <if test="qo.type != null and qo.type != ''">
and s.`type` = #{qo.type} and s.`type` = #{qo.type}
</if> </if>
<if test="qo.assignedTo != null and qo.assignedTo != ''"> <if test="qo.assignedTo != null and qo.assignedTo != ''">
and s.assignedTo = #{qo.assignedTo} and s.assignedTo = #{qo.assignedTo}
</if> </if>
<if test="qo.openedby != null and qo.openedby != ''"> <if test="qo.openedby != null and qo.openedby != ''">
and s.openedby = #{qo.openedby} and s.openedby = #{qo.openedby}
</if> </if>
<if test="qo.openStartDate !=null"> <if test="qo.openStartDate !=null">
and s.openedDate <![CDATA[>=]]> #{qo.openStartDate} and s.openedDate <![CDATA[>=]]> #{qo.openStartDate}
</if> </if>
<if test="qo.openEndDate !=null"> <if test="qo.openEndDate !=null">
and s.openedDate <![CDATA[<=]]> #{qo.openEndDate} and s.openedDate <![CDATA[<=]]> #{qo.openEndDate}
</if> </if>
<if test="qo.startDate !=null"> <if test="qo.startDate !=null">
and s.deadline <![CDATA[>=]]> #{qo.startDate} and s.deadline <![CDATA[>=]]> #{qo.startDate}
</if> </if>
<if test="qo.endDate !=null"> <if test="qo.endDate !=null">
and s.deadline <![CDATA[<=]]> #{qo.endDate} and s.deadline <![CDATA[<=]]> #{qo.endDate}
</if> </if>
<if test="qo.productName != null and qo.productName != '' "> <if test="qo.productName != null and qo.productName != '' ">
and pt.name like concat('%', #{qo.productName}, '%') and pt.name like concat('%', #{qo.productName}, '%')
</if> </if>
@ -435,70 +434,69 @@
</if> </if>
<if test="qo.searchVal == 'WGB' "> <if test="qo.searchVal == 'WGB' ">
-- 未关闭 -- 未关闭
and s.status !='closed' and s.status !='closed'
</if> </if>
<if test="qo.searchVal == 'YWCJ' "> <if test="qo.searchVal == 'YWCJ' ">
-- 由我创建 -- 由我创建
and s.openedBy =#{qo.userName} and s.openedBy =#{qo.userName}
</if> </if>
<if test="qo.searchVal == 'ZPGW' "> <if test="qo.searchVal == 'ZPGW' ">
-- 指派给我 -- 指派给我
and s.assignedTo =#{qo.userName} and s.assignedTo =#{qo.userName}
</if> </if>
<if test="qo.searchVal == 'YWJJ' "> <if test="qo.searchVal == 'YWJJ' ">
-- 由我解决 -- 由我解决
and resolvedBy =#{qo.userName} and resolvedBy =#{qo.userName}
and s.status= 'resolved' and s.status= 'resolved'
</if> </if>
<if test="qo.searchVal == 'YWZP' "> <if test="qo.searchVal == 'YWZP' ">
-- 由我指派 -- 由我指派
and s.openedBy =#{qo.userName} and s.openedBy =#{qo.userName}
</if> </if>
<if test="qo.searchVal == 'WJJ' "> <if test="qo.searchVal == 'WJJ' ">
-- //未解决 -- //未解决
and s.status= 'active' and s.status= 'active'
</if> </if>
<if test="qo.searchVal == 'WQR' "> <if test="qo.searchVal == 'WQR' ">
-- //未确认 -- //未确认
and s.confirmed= 0 and s.confirmed= 0
</if> </if>
<if test="qo.searchVal == 'WZP' "> <if test="qo.searchVal == 'WZP' ">
-- //未指派 -- //未指派
and s.assignedTo is null and s.assignedTo is null
</if> </if>
<if test="qo.searchVal == 'JWCL' "> <if test="qo.searchVal == 'JWCL' ">
-- //久未处理 -- //久未处理
</if> </if>
<if test="qo.searchVal == 'DGB' "> <if test="qo.searchVal == 'DGB' ">
-- //待关闭 -- //待关闭
</if> </if>
<if test="qo.searchVal == 'BYQ' "> <if test="qo.searchVal == 'BYQ' ">
-- //被延期 -- //被延期
</if> </if>
<if test="qo.searchVal == 'GQ' "> <if test="qo.searchVal == 'GQ' ">
-- //过期BUG -- //过期BUG
</if> </if>
<if test="qo.searchVal == 'XQBD' "> <if test="qo.searchVal == 'XQBD' ">
-- //研发需求变动 -- //研发需求变动
</if> </if>
order by id desc order by id desc
</select> </select>
<select id="bugListByIds" resultType="com.sa.zentao.entity.ZtBug"> <select id="bugListByIds" resultType="com.sa.zentao.entity.ZtBug">
SELECT s.id, SELECT s.id,
s.project, s.project,
s.product, s.product,
s.injection, s.injection,
@ -567,7 +565,7 @@
s.ys_remark, s.ys_remark,
s.release_flag s.release_flag
from zt_bug s from zt_bug s
WHERE 1=1 WHERE 1=1
<if test="ids != null and ids.size() > 0"> <if test="ids != null and ids.size() > 0">
and s.id in and s.id in
<foreach collection="ids" item="id" index="index" <foreach collection="ids" item="id" index="index"
@ -661,6 +659,177 @@
</select> </select>
<select id="bugListByProjectAndDate" resultType="com.sa.zentao.entity.ZtBug">
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
<if test="pIds != null and pIds.size() > 0">
and s.project in
<foreach collection="pIds" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
and openedDate <![CDATA[>=]]> #{start}
and openedDate <![CDATA[<=]]> #{end}
</select>
<select id="bugBoundsListByProjectAndDate" resultType="com.sa.zentao.entity.ZtBug">
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}
<if test="pIds != null and pIds.size() > 0">
and s.product in
<foreach collection="pIds" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
and openedDate <![CDATA[>=]]> #{start}
and openedDate <![CDATA[<=]]> #{end}
group by s.id
</select>
</mapper> </mapper>

View File

@ -22,6 +22,11 @@
and details.release_id = #{qo.id} and details.release_id = #{qo.id}
and details.status != 'closed' and details.status != 'closed'
<if test="qo.ysUser != null and qo.ysUser != '' ">
and s.ys_user = #{qo.ysUser}
</if>
<if test="qo.name != null and qo.name != '' "> <if test="qo.name != null and qo.name != '' ">
and s.title like concat('%', #{qo.name}, '%') and s.title like concat('%', #{qo.name}, '%')
</if> </if>

View File

@ -42,8 +42,8 @@
business_id, business_id,
ys_flag, ys_flag,
dont_hand_select, dont_hand_select,
dont_hand_remark dont_hand_remark,
finished_remark
from zt_story_feedback s WHERE 1 = 1 from zt_story_feedback s WHERE 1 = 1

View File

@ -1105,7 +1105,7 @@
s.user_story, s.user_story,
s.ys_user, s.ys_user,
s.task_count, s.task_count,
s.ys_date, s.ys_date
from zt_story s from zt_story s
left join zt_storyreview v on s.id = v.story and s.version = v.version left join zt_storyreview v on s.id = v.story and s.version = v.version
@ -1121,4 +1121,92 @@
order by s.id desc order by s.id desc
</select> </select>
<select id="getStoryListByDatePidsProject" resultType="com.sa.zentao.entity.ZtStory">
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
<if test="ids != null and ids.size() > 0">
and s.product in
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
and ps.project = #{project}
<if test="start !=null">
and s.end_date <![CDATA[>=]]> #{start}
</if>
<if test="end !=null">
and s.end_date <![CDATA[<=]]> #{end}
</if>
</select>
</mapper> </mapper>

View File

@ -161,8 +161,18 @@
<if test="qo.openedby != null and qo.openedby != '' "> <if test="qo.openedby != null and qo.openedby != '' ">
and s.openedBy = #{qo.openedby} and s.openedBy = #{qo.openedby}
</if> </if>
<if test="qo.status != null and qo.status != '' "> <if test="qo.status != null and qo.status != '' ">
and s.status = #{qo.status} -- 需求明确中、详细设计、详细设计中、产品已设计、需求待确认 这些查询状态合并成 “需求明确中”
<if test="qo.status != null and qo.status == 'unconfirmed' ">
and s.status in ('unconfirmed'
,'waitcommunicate'
,'waitdesign','designdoing','designdone','storyunconfirmed')
</if>
<if test="qo.status != null and qo.status != 'unconfirmed' ">
and s.status = #{qo.status}
</if>
</if> </if>
<if test="qo.productName != null and qo.productName != '' "> <if test="qo.productName != null and qo.productName != '' ">

View File

@ -127,6 +127,18 @@
where 1= 1 where 1= 1
<if test="qo.delayFlag != null and qo.delayFlag != 0">
<if test="qo.delayFlag==1">
and (date(deadline ) <![CDATA[<]]> date(finishedDate ) or( finishedDate is null and date(deadline) <![CDATA[<]]> date(now())))
</if>
<if test="qo.delayFlag==2">
and (date(deadline ) <![CDATA[>=]]> date(finishedDate ) or( finishedDate is null and date(deadline) <![CDATA[>=]]> date(now())))
</if>
</if>
<if test="qo.id != null and qo.id != 0"> <if test="qo.id != null and qo.id != 0">
and s.id = #{qo.id} and s.id = #{qo.id}
</if> </if>

View File

@ -15,6 +15,16 @@
<select id="pageList" resultType="com.sa.zentao.dao.ZtYwBackupsDTO"> <select id="pageList" resultType="com.sa.zentao.dao.ZtYwBackupsDTO">
SELECT * from zt_yw_backups WHERE 1=1 SELECT * from zt_yw_backups WHERE 1=1
<if test="qo.startDate !=null">
and backups_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate !=null">
and backups_date <![CDATA[<=]]> #{qo.endDate}
</if>
order by id desc order by id desc
</select> </select>

View File

@ -24,6 +24,15 @@
SELECT * from zt_yw_change WHERE 1=1 SELECT * from zt_yw_change WHERE 1=1
<if test="qo.startDate !=null">
and change_effect_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate !=null">
and change_effect_date <![CDATA[<=]]> #{qo.endDate}
</if>
order by id desc order by id desc
</select> </select>

View File

@ -17,6 +17,15 @@
<select id="pageList" resultType="com.sa.zentao.dao.ZtYwFwqsearchDTO"> <select id="pageList" resultType="com.sa.zentao.dao.ZtYwFwqsearchDTO">
SELECT * from zt_yw_fwqsearch WHERE 1=1 SELECT * from zt_yw_fwqsearch WHERE 1=1
<if test="qo.startDate !=null">
and create_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate !=null">
and create_date <![CDATA[<=]]> #{qo.endDate}
</if>
order by id desc order by id desc
</select> </select>

View File

@ -19,6 +19,14 @@
</resultMap> </resultMap>
<select id="pageList" resultType="com.sa.zentao.dao.ZtYwMachineRoomDTO"> <select id="pageList" resultType="com.sa.zentao.dao.ZtYwMachineRoomDTO">
SELECT * from zt_yw_machine_room WHERE 1= 1 SELECT * from zt_yw_machine_room WHERE 1= 1
<if test="qo.startDate !=null">
and inspect_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate !=null">
and inspect_date <![CDATA[<=]]> #{qo.endDate}
</if>
order by id desc order by id desc
</select> </select>

View File

@ -19,6 +19,13 @@
</resultMap> </resultMap>
<select id="pageList" resultType="com.sa.zentao.dao.ZtYwPatrolDTO"> <select id="pageList" resultType="com.sa.zentao.dao.ZtYwPatrolDTO">
SELECT * from zt_yw_patrol WHERE 1=1 SELECT * from zt_yw_patrol WHERE 1=1
<if test="qo.startDate !=null">
and patrol_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate !=null">
and patrol_date <![CDATA[<=]]> #{qo.endDate}
</if>
</select> </select>
</mapper> </mapper>

View File

@ -18,6 +18,15 @@
</resultMap> </resultMap>
<select id="pageList" resultType="com.sa.zentao.dao.ZtYwTaskDTO"> <select id="pageList" resultType="com.sa.zentao.dao.ZtYwTaskDTO">
SELECT * from zt_yw_task WHERE 1=1 SELECT * from zt_yw_task WHERE 1=1
<if test="qo.startDate !=null">
and task_end_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate !=null">
and task_end_date <![CDATA[<=]]> #{qo.endDate}
</if>
order by id desc order by id desc
</select> </select>