diff --git a/src/main/java/com/sa/zentao/conf/CodeGenerator.java b/src/main/java/com/sa/zentao/conf/CodeGenerator.java
index 8e631ea..ad189b3 100644
--- a/src/main/java/com/sa/zentao/conf/CodeGenerator.java
+++ b/src/main/java/com/sa/zentao/conf/CodeGenerator.java
@@ -22,7 +22,7 @@ public class CodeGenerator {
//自己的名字
static String Author = "gqb";
- public static String tableName = "zt_story_user_task";
+ public static String tableName = "zt_computer_source";
/**
*
diff --git a/src/main/java/com/sa/zentao/controller/ZtComputerSourceController.java b/src/main/java/com/sa/zentao/controller/ZtComputerSourceController.java
new file mode 100644
index 0000000..7842273
--- /dev/null
+++ b/src/main/java/com/sa/zentao/controller/ZtComputerSourceController.java
@@ -0,0 +1,47 @@
+package com.sa.zentao.controller;
+
+
+import com.sa.zentao.dao.Result;
+import com.sa.zentao.dao.ZtComputerSourceDTO;
+import com.sa.zentao.dao.ZtStoryDTO;
+import com.sa.zentao.qo.ZtComputerSourceQo;
+import com.sa.zentao.qo.ZtProjectQo;
+import com.sa.zentao.service.IZtComputerSourceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author gqb
+ * @since 2025-04-07
+ */
+@RestController
+@RequestMapping("/zt-computer-source")
+public class ZtComputerSourceController {
+
+ @Autowired
+ private IZtComputerSourceService computerSourceService;
+
+ @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result storyPageList(@RequestBody ZtComputerSourceQo qo){
+ return Result.success(computerSourceService.pageList(qo));
+ }
+
+ @RequestMapping(value = "/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result add(@RequestBody ZtComputerSourceDTO dto){
+ computerSourceService.addComputerSource(dto);
+ return Result.success();
+ }
+ @RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result modify(@RequestBody ZtComputerSourceDTO dto){
+ computerSourceService.modify(dto);
+ return Result.success();
+ }
+}
diff --git a/src/main/java/com/sa/zentao/controller/ZtReleaseController.java b/src/main/java/com/sa/zentao/controller/ZtReleaseController.java
index 1dfef7e..2711672 100644
--- a/src/main/java/com/sa/zentao/controller/ZtReleaseController.java
+++ b/src/main/java/com/sa/zentao/controller/ZtReleaseController.java
@@ -2,10 +2,8 @@ package com.sa.zentao.controller;
import com.github.pagehelper.PageInfo;
-import com.sa.zentao.dao.Result;
-import com.sa.zentao.dao.ZtReleaseDTO;
-import com.sa.zentao.dao.ZtStoryDTO;
-import com.sa.zentao.dao.ZtTaskDTO;
+import com.sa.zentao.dao.*;
+import com.sa.zentao.entity.ZtBug;
import com.sa.zentao.entity.ZtStory;
import com.sa.zentao.qo.ZtProjectQo;
import com.sa.zentao.qo.ZtReleaseQo;
@@ -39,6 +37,25 @@ public class ZtReleaseController {
releaseService.addRelease(dto);
return Result.success();
}
+ //提交评审
+ @RequestMapping(value = "/submitReviewing", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result submitReviewing(@RequestBody ZtReleaseDTO dto){
+ releaseService.submitReviewing(dto);
+ return Result.success();
+ }
+ //提交重新评审
+ @RequestMapping(value = "/submitAgainReviewing", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result submitAgainReviewing(@RequestBody ZtReleaseDTO dto){
+ releaseService.submitAgainReviewing(dto);
+ return Result.success();
+ }
+
+ @RequestMapping(value = "/releaseList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result releaseList(@RequestBody ZtReleaseDTO dto){
+ List list= releaseService.releaseList(dto);
+ return Result.success(list);
+ }
+
@RequestMapping(value = "/getById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result getById(@RequestBody ZtReleaseQo qo){
@@ -57,13 +74,24 @@ public class ZtReleaseController {
public Result pageList(@RequestBody ZtReleaseQo qo){
return Result.success(releaseService.pageList(qo));
}
-
+ //发布下已关联的需求
@RequestMapping(value = "/releaseStoryPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result releaseStoryPageList(@RequestBody ZtReleaseQo qo){
PageInfo info=releaseService.releaseStoryPageList(qo);
return Result.success(info);
}
+ @RequestMapping(value = "/releaseBugPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result releaseBugPageList(@RequestBody ZtReleaseQo qo){
+ PageInfo info=releaseService.releaseBugPageList(qo);
+ return Result.success(info);
+ }
+ @RequestMapping(value = "/releaseNotSyncBugPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result releaseNotSyncBugPageList(@RequestBody ZtReleaseQo qo){
+ PageInfo info=releaseService.releaseNotSyncBugPageList(qo);
+ return Result.success(info);
+ }
+ //迭代下需求
@RequestMapping(value = "/projectStoryPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result projectStoryPageList(@RequestBody ZtReleaseQo qo){
PageInfo info=releaseService.projectStoryPageList(qo);
@@ -75,12 +103,23 @@ public class ZtReleaseController {
releaseService.removeStory(qo);
return Result.success();
}
+
+ @RequestMapping(value = "/removeBug", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result removeBug(@RequestBody ZtReleaseQo qo){
+ releaseService.removeBug(qo);
+ return Result.success();
+ }
+
@RequestMapping(value = "/batchSyncStory", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result batchSyncStory(@RequestBody ZtReleaseQo qo){
releaseService.batchSyncStory(qo);
return Result.success();
}
-
+ @RequestMapping(value = "/batchSyncBug", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result batchSyncBug(@RequestBody ZtReleaseQo qo){
+ releaseService.batchSyncBug(qo);
+ return Result.success();
+ }
@RequestMapping(value = "/assignedTo", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result assignedTo(@RequestBody ZtReleaseQo dto){
@@ -101,6 +140,12 @@ public class ZtReleaseController {
return Result.success();
}
+ @RequestMapping(value = "/closeRelease", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result closeRelease(@RequestBody ZtReleaseQo dto){
+ releaseService.closeRelease(dto);
+ return Result.success();
+ }
+
@RequestMapping(value = "/execMenu", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result execMenu(@RequestBody ZtReleaseQo dto){
return Result.success(releaseService.execMenu(dto));
diff --git a/src/main/java/com/sa/zentao/controller/ZtTaskController.java b/src/main/java/com/sa/zentao/controller/ZtTaskController.java
index 1f05b07..48d6e43 100644
--- a/src/main/java/com/sa/zentao/controller/ZtTaskController.java
+++ b/src/main/java/com/sa/zentao/controller/ZtTaskController.java
@@ -309,15 +309,15 @@ public class ZtTaskController {
}
List listSpec = storyspecService.getPrdById(oldStory.getId());
-// ZtStory newStory = storyService.getById(oldStory.getId());
-// if(newStory!=null){
-// continue;
-// }
-// if(!CollectionUtils.isEmpty(listSpec)){
-// ZtStoryspec ztStoryspec = listSpec.get(0);
-// ztStoryspec.setFiles(null);
-// storyspecService.save(ztStoryspec);
-// }
+ ZtStory newStory = storyService.getById(oldStory.getId());
+ if(newStory!=null){
+ continue;
+ }
+ if(!CollectionUtils.isEmpty(listSpec)){
+ ZtStoryspec ztStoryspec = listSpec.get(0);
+ ztStoryspec.setFiles(null);
+ storyspecService.save(ztStoryspec);
+ }
List userList=new ArrayList();
@@ -409,10 +409,10 @@ public class ZtTaskController {
//创建新的需求
-// oldStory.setProduct(product);
-// oldStory.setStage("wait");
-// oldStory.setStatus("active");
-// storyService.save(oldStory);
+ oldStory.setProduct(product);
+ oldStory.setStage("wait");
+ oldStory.setStatus("active");
+ storyService.save(oldStory);
//项目关联需求
ZtProjectDTO dto=new ZtProjectDTO();
dto.setStoryIds(new ArrayList<>(){
diff --git a/src/main/java/com/sa/zentao/controller/ZtUserController.java b/src/main/java/com/sa/zentao/controller/ZtUserController.java
index e8ef3f7..0a72984 100644
--- a/src/main/java/com/sa/zentao/controller/ZtUserController.java
+++ b/src/main/java/com/sa/zentao/controller/ZtUserController.java
@@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageInfo;
import com.sa.zentao.conf.RiskUserThreadLocal;
-import com.sa.zentao.dao.BusinessException;
-import com.sa.zentao.dao.Result;
-import com.sa.zentao.dao.ZtProjectDTO;
-import com.sa.zentao.dao.ZtUserDTO;
+import com.sa.zentao.dao.*;
import com.sa.zentao.entity.ZtTeam;
import com.sa.zentao.entity.ZtUser;
import com.sa.zentao.enums.ActionStatus;
@@ -70,8 +67,40 @@ public class ZtUserController {
@RequestMapping(value = "/allList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result allList(@RequestBody ZtUser user){
List ztUserDTOS = userMapper.listAll(null);
+ return Result.success();
+ }
+ @RequestMapping(value = "/syncOldZentaoUser", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
+ public Result allList(){
+ List ztUserDTOS = userMapper.listAll(null);
+ //老的禅道 新的禅道
+ List result=new ArrayList();
+ for (ZtUserDTO u:ztUserDTOS) {
+ ZtUser ztUser = new ZtUser();
+ List list = this.userService.list(new QueryWrapper().lambda().eq(ZtUser::getAccount, u.getAccount()));
+ if(!CollectionUtils.isEmpty(list)){
+ continue;
+ }
+ BeanUtils.copyProperties(u,ztUser);
+ ztUser.setPassword("e10adc3949ba59abbe56e057f20f883e");
+ ztUser.setNickname(u.getRealname());
+ List staff = this.userService.oaUserByNikeName(u.getRealname());
+ if(!CollectionUtils.isEmpty(staff)){
+ String vxId = staff.get(0).getVxId();
+ ztUser.setVx(vxId);
+ Integer departId = staff.get(0).getDepartId();
+
+ BaseDepartment depart =this.userService.getDepart(departId);
+ Integer level = depart.getLevel();
+ while (level.intValue()>1){
+ depart=this.userService.getDepart(depart.getParentId());
+ level =depart.getLevel();
+ }
+ ztUser.setDeptName(depart.getName());
+ }
+ result.add(ztUser);
+ }
return Result.success();
}
@@ -190,6 +219,18 @@ public class ZtUserController {
return Result.success();
}
+ @RequestMapping(value = "/resetPassword", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result resetPassword(@RequestBody ZtUserDTO user){
+ this.userService.resetPassword(user);
+ return Result.success();
+ }
+ @RequestMapping(value = "/deleteUser", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
+ public Result deleteUser(@RequestBody ZtUserDTO user){
+ this.userService.deleteUser(user);
+ return Result.success();
+ }
+
+
@RequestMapping(value = "/modify", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result modify(@RequestBody ZtUserDTO user){
diff --git a/src/main/java/com/sa/zentao/dao/BaseDepartment.java b/src/main/java/com/sa/zentao/dao/BaseDepartment.java
new file mode 100644
index 0000000..cb7650c
--- /dev/null
+++ b/src/main/java/com/sa/zentao/dao/BaseDepartment.java
@@ -0,0 +1,114 @@
+package com.sa.zentao.dao;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author gqb
+ * @since 2024-04-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("base_department")
+public class BaseDepartment implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 部门名
+ */
+ private String name;
+
+ /**
+ * 负责人名
+ */
+ private String manageName;
+
+ /**
+ * 负责人手机
+ */
+ private String managePhone;
+
+ /**
+ * 负责人邮箱
+ */
+ private String manageMail;
+
+ /**
+ * 父节点
+ */
+ private Integer parentId;
+
+ /**
+ * 级别
+ */
+ private Integer level;
+
+ /**
+ * 公司
+ */
+ private Integer companyId;
+
+ private Date createDate;
+
+ private Date updateDate;
+
+ private Integer createUser;
+
+ private Integer updateUser;
+
+ /**
+ * 0正常1.删除
+ */
+ private String deleteFlag;
+
+ /**
+ * 编制用户数量
+ */
+ private BigDecimal bzUserCount;
+
+ /**
+ * 是否需要验证用户 1.需要
+ */
+ private Integer checkUser;
+
+ private String dkStart;
+
+ private String dkEnd;
+
+ /**
+ * 部门,级别,岗位
+ */
+ private String departmentType;
+
+ /**
+ * 部门id
+ */
+ private Integer departmentId;
+
+ private String workingHoursType;
+
+ private Integer parentDepartId;
+
+ private Integer parentCompanyId;
+ //排序
+ private Integer sortIndex;
+
+}
diff --git a/src/main/java/com/sa/zentao/dao/BaseStaff.java b/src/main/java/com/sa/zentao/dao/BaseStaff.java
new file mode 100644
index 0000000..1f55699
--- /dev/null
+++ b/src/main/java/com/sa/zentao/dao/BaseStaff.java
@@ -0,0 +1,290 @@
+package com.sa.zentao.dao;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.sa.zentao.utils.CryptoUtils;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.util.StringUtils;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author
+ * @since 2022-11-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+
+public class BaseStaff implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ private Integer companyId;
+
+ //微信id
+ private String vxId;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 员工号
+ */
+ private String staffNo;
+
+ /**
+ * 部门id
+ */
+ private Integer departId;
+ private String departName;
+ /**
+ * 职位
+ */
+ private String position;
+
+ /**
+ * 1.男 2女
+ */
+ private String gender;
+
+ /**
+ * 出生日期
+ */
+ private Date birthday;
+
+ /**
+ * 入职日期
+ */
+ private Date workDate;
+
+ /**
+ * 年龄
+ */
+ private Integer age;
+ /**
+ * 上海社保缴纳年数
+ */
+ private BigDecimal shSocSecYears;
+
+ /**
+ * 1.试用期 2见习 3.正式 4.退休期 5.离职员工
+ */
+ private String staffStatus;
+
+ /**
+ * 邮箱
+ */
+ private String mail;
+
+ /**
+ * 手机
+ */
+ private String phone;
+
+ /**
+ * 身份证号
+ */
+ private String idNo;
+
+ /**
+ * 户籍
+ */
+ private String births;
+
+ /**
+ * 户籍地址
+ */
+ private String birthsAddress;
+
+ /**
+ * 居住地址
+ */
+ private String liveAddress;
+
+ /**
+ * 0 未婚 1.已婚
+ */
+ private String marriageType;
+
+ /**
+ * 学历
+ */
+ private String education;
+
+ /**
+ * 毕业学校
+ */
+ private String school;
+
+ /**
+ * 专业
+ */
+ private String major;
+
+ /**
+ * 毕业时间
+ */
+ private String graduationDate;
+
+ /**
+ * 紧急联系人
+ */
+ private String emergencyUser;
+
+ /**
+ * 紧急联系人关系
+ */
+ private String emergencyRelationship;
+
+ /**
+ * 紧急联人电话
+ */
+ private String emergencyPhone;
+
+ /**
+ * 创建日期
+ */
+ private Date createDate;
+
+ /**
+ * 创建人
+ */
+ private Integer createUser;
+
+ /**
+ * 更新日期
+ */
+ private Date updateDate;
+
+ /**
+ * 更新人
+ */
+ private Integer updateUser;
+
+ //政治面貌1.党员2.团员3.群众4.其他
+ private String politicalOutlook;
+ //级别
+ private String level;
+ //职称
+ private String workName;
+ // 上海户籍
+ private String shBirths;
+ //邮编
+ private String postalCode;
+
+ private String maxEducation;
+
+ private String header;
+ //全日制 1.是 0否
+ private Integer qrz;
+
+ private String gjjAccount;
+
+ private String bankNo;
+ private String zpType;
+ //所在编制公司
+ private String bzCompany;
+
+ //职业资格
+ private String zyzg;
+ //家人手机
+ private String familyPhone;
+ //家人关系
+ private String familyRelationship;
+ //家人姓名
+ private String familyName;
+ //户口类型
+ private String hkType;
+ // 首次工作日起
+ private Date firstWorkDate;
+
+ //打卡机id
+ private String dkId;
+
+ private String deleteFlagEnum;
+
+ //独身子女 1 是 0 否
+ private Integer dszvFlag;
+ //独生子女多少钱
+ private BigDecimal dszvMoney;
+ //独生子女多少钱到期时间
+ private Date dszvExpireTime;
+ //银行名称
+ private String bankName;
+ //财务编号
+ private String financeNo;
+ //发薪公司
+ private Integer fxCompany;
+ //合同公司
+ private Integer contactCompany;
+ //1.是工会会员 0不是
+ private Integer tradeUnionVip;
+ //入职推荐人
+ private String recommend;
+ //所属中心
+ private String belongTo;
+ //业务系统账号
+ private String accountId;
+
+
+ //其他信息
+ private String otherData;
+ //项目群组
+ private String projectGroup;
+ //驾驶证
+ private String driverLicense;
+
+ //用工性质
+ private String workType;
+
+ //工作地点
+ private String workAddress;
+
+ //民族
+ private String nation;
+
+ //身份证到期时间
+ private Date idExpireDate;
+
+ //司龄校正值
+ private BigDecimal workYearAdd;
+ //预算部门
+ private Integer budgetDepartId;
+ //是否计算工龄工资 1.计算 0不计算
+ private Integer computeWorkYear;
+ //是否开启信息缺省提醒 0不开 1 开
+ private Integer reminderEnabledStatus;
+ //最后提醒时间
+ private Date lastReminderTime;
+
+
+
+ public Integer getBzCompanyInter(){
+ if(StringUtils.isEmpty(bzCompany)){
+ return null;
+ }
+ return Integer.valueOf(bzCompany);
+ }
+
+ public String getVxidAesValue(){
+ if(vxId==null){
+ return null;
+ }
+ try {
+ return CryptoUtils.aesDecryptForFront(vxId, CryptoUtils.KEY_DES);
+ }catch (Exception e){
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/com/sa/zentao/dao/ZtBugDTO.java b/src/main/java/com/sa/zentao/dao/ZtBugDTO.java
index f27c13b..9670af4 100644
--- a/src/main/java/com/sa/zentao/dao/ZtBugDTO.java
+++ b/src/main/java/com/sa/zentao/dao/ZtBugDTO.java
@@ -209,4 +209,7 @@ public class ZtBugDTO implements Serializable {
private Integer reviewerResult;
private String desc;
+
+ private Integer releaseId;
+ private String releaseName;
}
diff --git a/src/main/java/com/sa/zentao/dao/ZtComputerSourceDTO.java b/src/main/java/com/sa/zentao/dao/ZtComputerSourceDTO.java
new file mode 100644
index 0000000..d6d0883
--- /dev/null
+++ b/src/main/java/com/sa/zentao/dao/ZtComputerSourceDTO.java
@@ -0,0 +1,104 @@
+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;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author gqb
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ZtComputerSourceDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 服务器/网络设备/安全设备/语音网关
+ */
+ private String sourceType;
+
+ /**
+ * 内网ip
+ */
+ private String innerIp;
+
+ /**
+ * 品牌
+ */
+ private String bread;
+
+ /**
+ * cpu核心数
+ */
+ private String cpuCore;
+
+ /**
+ * 内存
+ */
+ private String memory;
+
+ /**
+ * 硬盘
+ */
+ private String disk;
+
+ /**
+ * 道路救援/飞侠车服/小仟安行/OA系统/财务系统/其他
+ */
+ private String systemType;
+
+ /**
+ * 用途
+ */
+ private String purpose;
+
+ /**
+ * 服务名称
+ */
+ private String serverName;
+
+ /**
+ * 宝山机房/高科西路机房/其他
+ */
+ private String house;
+
+ /**
+ * 机柜编号
+ */
+ private String idNo;
+
+ /**
+ * 地址
+ */
+ private String address;
+
+ private Date buyDate;
+
+ /**
+ * 未启用/启用中/报废
+ */
+ private String status;
+
+ private String createUser;
+
+ private Date createDate;
+
+ private String updateUser;
+
+ private Date updateDate;
+
+
+}
diff --git a/src/main/java/com/sa/zentao/dao/ZtMeetingDTO.java b/src/main/java/com/sa/zentao/dao/ZtMeetingDTO.java
index 97a797e..445fa59 100644
--- a/src/main/java/com/sa/zentao/dao/ZtMeetingDTO.java
+++ b/src/main/java/com/sa/zentao/dao/ZtMeetingDTO.java
@@ -68,4 +68,10 @@ public class ZtMeetingDTO implements Serializable {
private String files;
private String address;
+
+ private String title;
+
+ private Integer userStory;
+
+ private String userStoryName;
}
diff --git a/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java b/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java
index a44292f..3f0ce1e 100644
--- a/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java
+++ b/src/main/java/com/sa/zentao/dao/ZtReleaseDTO.java
@@ -76,7 +76,7 @@ public class ZtReleaseDTO implements Serializable {
private String deleted;
private String executions;
-
+ private Integer execution;
private String executionsName;
private String level;
diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java
index 5f91b75..f98b0a9 100644
--- a/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java
+++ b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java
@@ -256,7 +256,9 @@ public class ZtStoryDTO implements Serializable {
private Integer taskCount;
private Integer releaseFlag=0;
-
+ //发布id
+ private Integer releaseId;
+ private String releaseName;
private List bugList;
diff --git a/src/main/java/com/sa/zentao/entity/ZtBug.java b/src/main/java/com/sa/zentao/entity/ZtBug.java
index 68ea79c..781ecad 100644
--- a/src/main/java/com/sa/zentao/entity/ZtBug.java
+++ b/src/main/java/com/sa/zentao/entity/ZtBug.java
@@ -201,4 +201,6 @@ public class ZtBug implements Serializable {
//1 通过 2不通过
private Integer ysFlag;
private String ysRemark;
+ @TableField(exist = false)
+ private Integer releaseFlag;
}
diff --git a/src/main/java/com/sa/zentao/entity/ZtComputerSource.java b/src/main/java/com/sa/zentao/entity/ZtComputerSource.java
new file mode 100644
index 0000000..6763bfd
--- /dev/null
+++ b/src/main/java/com/sa/zentao/entity/ZtComputerSource.java
@@ -0,0 +1,105 @@
+package com.sa.zentao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ *
+ *
+ *
+ *
+ * @author gqb
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ZtComputerSource implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 服务器/网络设备/安全设备/语音网关
+ */
+ private String sourceType;
+
+ /**
+ * 内网ip
+ */
+ private String innerIp;
+
+ /**
+ * 品牌
+ */
+ private String bread;
+
+ /**
+ * cpu核心数
+ */
+ private String cpuCore;
+
+ /**
+ * 内存
+ */
+ private String memory;
+
+ /**
+ * 硬盘
+ */
+ private String disk;
+
+ /**
+ * 道路救援/飞侠车服/小仟安行/OA系统/财务系统/其他
+ */
+ private String systemType;
+
+ /**
+ * 用途
+ */
+ private String purpose;
+
+ /**
+ * 服务名称
+ */
+ private String serverName;
+
+ /**
+ * 宝山机房/高科西路机房/其他
+ */
+ private String house;
+
+ /**
+ * 机柜编号
+ */
+ private String idNo;
+
+ /**
+ * 地址
+ */
+ private String address;
+
+ private Date buyDate;
+
+ /**
+ * 未启用/启用中/报废
+ */
+ private String status;
+
+ private String createUser;
+
+ private Date createDate;
+
+ private String updateUser;
+
+ private Date updateDate;
+
+
+}
diff --git a/src/main/java/com/sa/zentao/entity/ZtMeeting.java b/src/main/java/com/sa/zentao/entity/ZtMeeting.java
index 928526c..e0a8289 100644
--- a/src/main/java/com/sa/zentao/entity/ZtMeeting.java
+++ b/src/main/java/com/sa/zentao/entity/ZtMeeting.java
@@ -64,5 +64,8 @@ public class ZtMeeting implements Serializable {
private Date updateDate;
private String address;
+ private String title;
+
+ private Integer userStory;
}
diff --git a/src/main/java/com/sa/zentao/entity/ZtRelease.java b/src/main/java/com/sa/zentao/entity/ZtRelease.java
index 5a74375..9366dc6 100644
--- a/src/main/java/com/sa/zentao/entity/ZtRelease.java
+++ b/src/main/java/com/sa/zentao/entity/ZtRelease.java
@@ -1,5 +1,6 @@
package com.sa.zentao.entity;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -58,9 +59,10 @@ public class ZtRelease implements Serializable {
private String notify;
//active 激活
//reviewing待评审
+ //reviewingError 评审失败
//waitRelease 待发布
//released 发不成功
- //close 发布失败
+ //close 关闭
@TableField("`status`")
private String status;
@@ -89,7 +91,7 @@ public class ZtRelease implements Serializable {
private String noticeContent;
-
+ @TableField(updateStrategy = FieldStrategy.IGNORED)
private String failRemark;
private String releaseFailRemark;
diff --git a/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java b/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java
index e739410..160cad5 100644
--- a/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java
+++ b/src/main/java/com/sa/zentao/entity/ZtReleaseDetails.java
@@ -29,7 +29,7 @@ public class ZtReleaseDetails implements Serializable {
private Integer objectId;
//story bug
private String objectType;
- // released已发布 closed 关闭
+ // closed 关闭 wait
private String status;
diff --git a/src/main/java/com/sa/zentao/entity/ZtStoryUser.java b/src/main/java/com/sa/zentao/entity/ZtStoryUser.java
index ddcf8db..61b24f1 100644
--- a/src/main/java/com/sa/zentao/entity/ZtStoryUser.java
+++ b/src/main/java/com/sa/zentao/entity/ZtStoryUser.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Date;
+import com.sa.zentao.enums.UserStoryEnums;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -64,6 +65,21 @@ public class ZtStoryUser implements Serializable {
private Float estimate;
// active finished closed //reviewing 评审中 active 激活 draft 草稿
+ /// DPS("reviewing", "待评审",0),
+ // CG("draft", "草稿",1),
+ // JH("active", "激活",2),
+ // UNCFM("unconfirmed", "产品确认中",3),
+ // DGT("waitcommunicate", "待沟通",4),
+ //
+ // DSJ("waitdesign","需求待设计",5),
+ // XXSJZ("designdoing","详细设计中",6),
+ // CPYSJ("designdone","产品已设计",7),
+ // //待确认
+ // DQR("storyunconfirmed","需求待确认",8),
+ // CFM("confirmed","需求已确认",9),
+ // KFZ("developing","研发中",10),
+ // YWC("finished","已完成",11),
+ // CLOSED("closed","已关闭",12),
private String status;
// reviewing
@TableField("subStatus")
diff --git a/src/main/java/com/sa/zentao/enums/ActionStatus.java b/src/main/java/com/sa/zentao/enums/ActionStatus.java
index 9328ae6..3dbcd12 100644
--- a/src/main/java/com/sa/zentao/enums/ActionStatus.java
+++ b/src/main/java/com/sa/zentao/enums/ActionStatus.java
@@ -27,11 +27,13 @@ public enum ActionStatus {
FBSB(30, "fb","发布不通过"),
QR(19, "qr","确认"),
KSCE(21, "testing","开始测试"),
+ SUBPS(23, "submitreview","提交评审"),
+
CSWC(20, "tested","测试完成"),
KFWC(41, "developed","开发完成"),
- ZTBG(41, "changeStatus","状态变更"),
- MQXU(41, "mqxu","明确需求"),
+ ZTBG(42, "changeStatus","状态变更"),
+ MQXU(43, "mqxu","明确需求"),
TJYS(51, "verified","提交验收"),
@@ -42,6 +44,7 @@ public enum ActionStatus {
LOGIN(100, "login","登录"),
XGMM(101, "xgmm","修改密码"),
+ CZMM(101, "czmm","重置密码"),
;
@EnumValue
diff --git a/src/main/java/com/sa/zentao/enums/ActionType.java b/src/main/java/com/sa/zentao/enums/ActionType.java
index 5e44963..019cf94 100644
--- a/src/main/java/com/sa/zentao/enums/ActionType.java
+++ b/src/main/java/com/sa/zentao/enums/ActionType.java
@@ -29,7 +29,7 @@ public enum ActionType {
LOGIN(7, "LOGIN","登录"),
USER(8, "user","用户"),
-
+ SOURCE(9, "source","服务器资源"),
;
diff --git a/src/main/java/com/sa/zentao/mapper/ZtComputerSourceMapper.java b/src/main/java/com/sa/zentao/mapper/ZtComputerSourceMapper.java
new file mode 100644
index 0000000..ae1f30e
--- /dev/null
+++ b/src/main/java/com/sa/zentao/mapper/ZtComputerSourceMapper.java
@@ -0,0 +1,22 @@
+package com.sa.zentao.mapper;
+
+import com.sa.zentao.dao.ZtComputerSourceDTO;
+import com.sa.zentao.entity.ZtComputerSource;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sa.zentao.qo.ZtComputerSourceQo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author gqb
+ * @since 2025-04-07
+ */
+public interface ZtComputerSourceMapper extends BaseMapper {
+
+ List pageList(@Param("qo") ZtComputerSourceQo qo);
+}
diff --git a/src/main/java/com/sa/zentao/mapper/ZtReleaseDetailsMapper.java b/src/main/java/com/sa/zentao/mapper/ZtReleaseDetailsMapper.java
index 548ed7d..8b0c145 100644
--- a/src/main/java/com/sa/zentao/mapper/ZtReleaseDetailsMapper.java
+++ b/src/main/java/com/sa/zentao/mapper/ZtReleaseDetailsMapper.java
@@ -1,5 +1,6 @@
package com.sa.zentao.mapper;
+import com.sa.zentao.dao.ZtBugDTO;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.entity.ZtReleaseDetails;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -18,7 +19,11 @@ import java.util.List;
*/
public interface ZtReleaseDetailsMapper extends BaseMapper {
- List releasePageList(@Param("qo") ZtReleaseQo qo);
+ List releaseStoryPageList(@Param("qo") ZtReleaseQo qo);
List storyPageList(@Param("qo") ZtReleaseQo qo);
+
+ List releaseBugPageList(@Param("qo") ZtReleaseQo qo);
+
+ List releaseNotSyncBugPageList(@Param("qo") ZtReleaseQo qo);
}
diff --git a/src/main/java/com/sa/zentao/mapper/ZtUserMapper.java b/src/main/java/com/sa/zentao/mapper/ZtUserMapper.java
index ca4ca4c..35a2dcf 100644
--- a/src/main/java/com/sa/zentao/mapper/ZtUserMapper.java
+++ b/src/main/java/com/sa/zentao/mapper/ZtUserMapper.java
@@ -1,6 +1,8 @@
package com.sa.zentao.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
+import com.sa.zentao.dao.BaseDepartment;
+import com.sa.zentao.dao.BaseStaff;
import com.sa.zentao.dao.DkInfo;
import com.sa.zentao.dao.ZtUserDTO;
import com.sa.zentao.entity.ZtUser;
@@ -34,5 +36,7 @@ public interface ZtUserMapper extends BaseMapper {
ZtUser selectPrdByName(@Param("name")String userName);
+ List oaUserByNikeName(@Param("nickname") String nickname);
+ BaseDepartment getDepart(@Param("departId") Integer departId);
}
diff --git a/src/main/java/com/sa/zentao/qo/ZtComputerSourceQo.java b/src/main/java/com/sa/zentao/qo/ZtComputerSourceQo.java
new file mode 100644
index 0000000..04cf592
--- /dev/null
+++ b/src/main/java/com/sa/zentao/qo/ZtComputerSourceQo.java
@@ -0,0 +1,105 @@
+package com.sa.zentao.qo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author gqb
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ZtComputerSourceQo extends BaseQo {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 服务器/网络设备/安全设备/语音网关
+ */
+ private String sourceType;
+
+ /**
+ * 内网ip
+ */
+ private String innerIp;
+
+ /**
+ * 品牌
+ */
+ private String bread;
+
+ /**
+ * cpu核心数
+ */
+ private String cpuCore;
+
+ /**
+ * 内存
+ */
+ private String memory;
+
+ /**
+ * 硬盘
+ */
+ private String disk;
+
+ /**
+ * 道路救援/飞侠车服/小仟安行/OA系统/财务系统/其他
+ */
+ private String systemType;
+
+ /**
+ * 用途
+ */
+ private String purpose;
+
+ /**
+ * 服务名称
+ */
+ private String serverName;
+
+ /**
+ * 宝山机房/高科西路机房/其他
+ */
+ private String house;
+
+ /**
+ * 机柜编号
+ */
+ private String idNo;
+
+ /**
+ * 地址
+ */
+ private String address;
+
+ private Date buyDate;
+
+ /**
+ * 未启用/启用中/报废
+ */
+ private String status;
+
+ private String createUser;
+
+ private Date createDate;
+
+ private String updateUser;
+
+ private Date updateDate;
+//1年内、3年内、3~5年、5~7年,7年以上 1 2 3 4 5
+ private String yearSearch;
+
+}
diff --git a/src/main/java/com/sa/zentao/qo/ZtMeetingQo.java b/src/main/java/com/sa/zentao/qo/ZtMeetingQo.java
index d3e90ee..86b5924 100644
--- a/src/main/java/com/sa/zentao/qo/ZtMeetingQo.java
+++ b/src/main/java/com/sa/zentao/qo/ZtMeetingQo.java
@@ -30,4 +30,6 @@ public class ZtMeetingQo extends BaseQo {
private String title;
private Integer productId;
+
+
}
diff --git a/src/main/java/com/sa/zentao/qo/ZtProjectQo.java b/src/main/java/com/sa/zentao/qo/ZtProjectQo.java
index 11d8faf..09eda4c 100644
--- a/src/main/java/com/sa/zentao/qo/ZtProjectQo.java
+++ b/src/main/java/com/sa/zentao/qo/ZtProjectQo.java
@@ -103,4 +103,6 @@ public class ZtProjectQo extends BaseQo {
//如果查询 execution 迭代里面加的
private String source;
private String spec;
+
+ private String bugType;
}
diff --git a/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java b/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java
index 81dfc8f..8738f6d 100644
--- a/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java
+++ b/src/main/java/com/sa/zentao/qo/ZtReleaseQo.java
@@ -54,5 +54,9 @@ public class ZtReleaseQo extends BaseQo {
private Integer storyId;
+ private Integer bugId;
+
private List storyList;
+ private List bugList;
+
}
diff --git a/src/main/java/com/sa/zentao/service/IZtComputerSourceService.java b/src/main/java/com/sa/zentao/service/IZtComputerSourceService.java
new file mode 100644
index 0000000..bf35133
--- /dev/null
+++ b/src/main/java/com/sa/zentao/service/IZtComputerSourceService.java
@@ -0,0 +1,26 @@
+package com.sa.zentao.service;
+
+import com.github.pagehelper.PageInfo;
+import com.sa.zentao.dao.ZtComputerSourceDTO;
+import com.sa.zentao.entity.ZtComputerSource;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.sa.zentao.qo.ZtComputerSourceQo;
+import com.sa.zentao.qo.ZtProjectQo;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author gqb
+ * @since 2025-04-07
+ */
+public interface IZtComputerSourceService extends IService {
+
+ PageInfo pageList(ZtComputerSourceQo qo);
+
+ void addComputerSource(ZtComputerSourceDTO dto);
+
+ void modify(ZtComputerSourceDTO dto);
+
+}
diff --git a/src/main/java/com/sa/zentao/service/IZtReleaseDetailsService.java b/src/main/java/com/sa/zentao/service/IZtReleaseDetailsService.java
index a94dc1c..9d73482 100644
--- a/src/main/java/com/sa/zentao/service/IZtReleaseDetailsService.java
+++ b/src/main/java/com/sa/zentao/service/IZtReleaseDetailsService.java
@@ -1,5 +1,6 @@
package com.sa.zentao.service;
+import com.sa.zentao.dao.ZtBugDTO;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.entity.ZtReleaseDetails;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -17,7 +18,11 @@ import java.util.List;
*/
public interface IZtReleaseDetailsService extends IService {
- List releasePageList(ZtReleaseQo qo);
+ List releaseStoryPageList(ZtReleaseQo qo);
List storyPageList(ZtReleaseQo qo);
+
+ List releaseBugPageList(ZtReleaseQo qo);
+
+ List releaseNotSyncBugPageList(ZtReleaseQo qo);
}
diff --git a/src/main/java/com/sa/zentao/service/IZtReleaseService.java b/src/main/java/com/sa/zentao/service/IZtReleaseService.java
index 1765a5c..b2eca23 100644
--- a/src/main/java/com/sa/zentao/service/IZtReleaseService.java
+++ b/src/main/java/com/sa/zentao/service/IZtReleaseService.java
@@ -2,6 +2,7 @@ package com.sa.zentao.service;
import com.github.pagehelper.PageInfo;
import com.sa.zentao.dao.Result;
+import com.sa.zentao.dao.ZtBugDTO;
import com.sa.zentao.dao.ZtReleaseDTO;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.entity.ZtRelease;
@@ -48,4 +49,26 @@ public interface IZtReleaseService extends IService {
void batchSyncStory(ZtReleaseQo qo);
ZtReleaseDTO getReleaseById(Integer id);
+
+ List releaseList(ZtReleaseDTO dto);
+
+ void batchSyncBug(ZtReleaseQo qo);
+
+ void removeBug(ZtReleaseQo qo);
+
+ //id 业务id type story bug
+ void changeRelease(Integer releaseId,Integer id, String type);
+
+ PageInfo releaseBugPageList(ZtReleaseQo qo);
+
+ PageInfo releaseNotSyncBugPageList(ZtReleaseQo qo);
+
+ void closeRelease(ZtReleaseQo dto);
+
+ void submitReviewing(ZtReleaseDTO dto);
+
+ void submitAgainReviewing(ZtReleaseDTO dto);
+
+ ZtRelease getReleaseByStory(Integer id);
+ ZtRelease getReleaseByBug(Integer id);
}
diff --git a/src/main/java/com/sa/zentao/service/IZtUserService.java b/src/main/java/com/sa/zentao/service/IZtUserService.java
index 6eabe17..9a68d16 100644
--- a/src/main/java/com/sa/zentao/service/IZtUserService.java
+++ b/src/main/java/com/sa/zentao/service/IZtUserService.java
@@ -1,9 +1,7 @@
package com.sa.zentao.service;
import com.github.pagehelper.PageInfo;
-import com.sa.zentao.dao.DkInfo;
-import com.sa.zentao.dao.ZtProjectDTO;
-import com.sa.zentao.dao.ZtUserDTO;
+import com.sa.zentao.dao.*;
import com.sa.zentao.entity.ZtUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sa.zentao.qo.ZtUserQo;
@@ -43,4 +41,14 @@ public interface IZtUserService extends IService {
ZtUser getbyVxId(String vx);
List dkList(@Param("ids") List account, @Param("startDate") Date startDate, @Param("endDate")Date endDate);
+
+ void resetPassword(ZtUserDTO user);
+
+ void deleteUser(ZtUserDTO user);
+
+ List oaUserByNikeName(String nickname);
+
+ BaseDepartment getDepart(Integer departId);
+
+ ZtUser getByAccount(String openedby);
}
diff --git a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java
index f18c1c3..4ff77b5 100644
--- a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java
+++ b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java
@@ -196,7 +196,8 @@ public class IZtCountService {
if(!loginRiskUser.getName().equals("admin")){
if(!CollectionUtils.isEmpty(pIds)){
- list = this.storyUserService.list(new QueryWrapper().lambda().in(ZtStoryUser::getProduct,pIds).in(ZtStoryUser::getStatus, "active", "reviewing"));
+ list = this.storyUserService.list(new QueryWrapper().lambda().in(ZtStoryUser::getProduct,pIds)
+ .in(ZtStoryUser::getStatus, "active", "reviewing","active","unconfirmed","waitcommunicate","waitdesign","designdoing","designdone","storyunconfirmed","confirmed"));
ztStory = storyService.list(new QueryWrapper()
.lambda().eq(ZtStory::getDeleted, "0")
.in(ZtStory::getProduct,pIds)
@@ -207,7 +208,7 @@ public class IZtCountService {
ztStory=new ArrayList<>();
}
}else{
- list = this.storyUserService.list(new QueryWrapper().lambda().in(ZtStoryUser::getStatus, "active", "reviewing"));
+ list = this.storyUserService.list(new QueryWrapper().lambda().in(ZtStoryUser::getStatus, "active", "reviewing","active","unconfirmed","waitcommunicate","waitdesign","designdoing","designdone","storyunconfirmed","confirmed"));
if(CollectionUtils.isEmpty(list)){
ztStory=new ArrayList<>();
@@ -244,18 +245,19 @@ public class IZtCountService {
}
-
- result.setPstgCount(list.stream().filter(o -> "active".equals(o.getStatus()))
- .filter(o -> o.getStage().equals("wait")).map(o->o.getId()+"").collect(Collectors.joining(",")));
+ result.setPstgCount(list.stream().filter(o ->
+ Arrays.asList("active","unconfirmed","waitcommunicate","waitdesign","designdoing","designdone","storyunconfirmed","confirmed").contains(o.getStatus()))
+ .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setPlanCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
.filter(o -> o.getStage().equals("wait")).map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setTestingCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
- .filter(o -> o.getStage().equals("testing")).map(o->o.getId()+"").collect(Collectors.joining(",")));
+ .filter(o -> Arrays.asList("testing","tested").contains(o.getStage()) ).map(o->o.getId()+"").collect(Collectors.joining(",")));
// developing 研发中 developed 研发完毕 testing 测试中 tested测试完毕
+
result.setJxzCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
- .filter(o -> Arrays.asList("developing").contains(o.getStage())
+ .filter(o -> Arrays.asList("developing","developed").contains(o.getStage())
).map(o->o.getId()+"").collect(Collectors.joining(",")));
@@ -349,8 +351,9 @@ public class IZtCountService {
result.setDpsCount(storyUsers.stream().filter(o -> "reviewing".equals(o.getStatus())) .map(o->o.getId()+"").collect(Collectors.joining(",")));
- result.setPstgCount(storyUsers.stream().filter(o -> "active".equals(o.getStatus()))
- .filter(o -> o.getStage().equals("wait")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
+ result.setPstgCount(storyUsers.stream().filter(o ->
+ Arrays.asList("active","unconfirmed","waitcommunicate","waitdesign","designdoing","designdone","storyunconfirmed","confirmed").contains(o.getStatus()))
+ .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setPlanCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
.filter(o -> o.getStage().equals("wait")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
@@ -392,7 +395,7 @@ public class IZtCountService {
List pList = this.productService.listByIds(pIds);
List storyUsers = this.storyUserService.list(new QueryWrapper().lambda()
- .in(ZtStoryUser::getStatus, "active", "reviewing")
+ .in(ZtStoryUser::getStatus, "active", "reviewing","active","unconfirmed","waitcommunicate","waitdesign","designdoing","designdone","storyunconfirmed","confirmed")
.in(ZtStoryUser::getProduct,pList.stream().map(o->o.getId()).collect(Collectors.toList()))
);
@@ -412,9 +415,11 @@ public class IZtCountService {
}
result.setDpsCount(storyUsers.stream().filter(o -> "reviewing".equals(o.getStatus())) .map(o->o.getId()+"").collect(Collectors.joining(",")));
- result.setPstgCount(storyUsers.stream().filter(o -> "active".equals(o.getStatus()))
- .filter(o -> o.getStage().equals("wait")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
-
+// result.setPstgCount(storyUsers.stream().filter(o -> "active".equals(o.getStatus()))
+// .filter(o -> o.getStage().equals("wait")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
+ result.setPstgCount(storyUsers.stream().filter(o ->
+ Arrays.asList("active","unconfirmed","waitcommunicate","waitdesign","designdoing","designdone","storyunconfirmed","confirmed").contains(o.getStatus()))
+ .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setPlanCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
.filter(o -> o.getStage().equals("wait")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
@@ -776,8 +781,14 @@ public class IZtCountService {
dto.setSaturation(dto.getTotalTime().floatValue()==0?BigDecimal.ZERO:dto.getAllocationTime().divide(dto.getExamineTime(),2,BigDecimal.ROUND_HALF_UP));
float saturation = dto.getSaturation().floatValue();
//完成准时率 TODO 延期 / 总完成
- List delayTaskList = taskList.stream().filter(o->u.getAccount().equals(o.getAssignedTo())).filter(o -> o.getFinishedDate() != null
- && o.getFinishedDate().getTime() > DateUtils.getDayLast(o.getDeadline()).getTime()).collect(Collectors.toList());
+ List delayTaskList =null;
+ try {
+ delayTaskList = taskList.stream().filter(o->u.getAccount().equals(o.getAssignedTo())).filter(o -> o.getFinishedDate() != null
+ && o.getFinishedDate().getTime() > DateUtils.getDayLast(o.getDeadline()).getTime()).collect(Collectors.toList());
+ }catch (Exception e){
+ log.error("",e);
+ }
+
dto.setFinishTask(BigDecimal.valueOf(taskTimeList.stream().filter(o->o.getFinishedDate()!=null).map(o->o.getEstimate()).collect(Collectors.toList()).size()));
dto.setDelayTask(BigDecimal.valueOf(delayTaskList.size()));
//准时完成率
diff --git a/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java
index 0854802..088773c 100644
--- a/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java
+++ b/src/main/java/com/sa/zentao/service/impl/ZtBugServiceImpl.java
@@ -2,6 +2,7 @@ package com.sa.zentao.service.impl;
import ch.qos.logback.core.util.StringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -19,6 +20,7 @@ import com.sa.zentao.enums.UserType;
import com.sa.zentao.mapper.ZtBugMapper;
import com.sa.zentao.qo.ZtBugQo;
import com.sa.zentao.qo.ZtProjectQo;
+import com.sa.zentao.qo.ZtReleaseQo;
import com.sa.zentao.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sa.zentao.utils.BeanCopyUtil;
@@ -83,6 +85,9 @@ public class ZtBugServiceImpl extends ServiceImpl implements
@Autowired
private IZtStoryFeedbackService storyFeedbackService;
+ @Autowired
+ private IZtReleaseService releaseService;
+
@Override
@@ -137,6 +142,9 @@ public class ZtBugServiceImpl extends ServiceImpl implements
if(ztUser!=null){
bug.setYsUserName(ztUser.getNickname());
}
+ if(bug.getDeadline()!=null){
+ bug.setDeadline(DateUtils.getDayLast(bug.getDeadline()));
+ }
}
}
PageInfo ztBugDTOPageInfo = new PageInfo<>(result);
@@ -217,6 +225,9 @@ public class ZtBugServiceImpl extends ServiceImpl implements
if(ztUser!=null){
bug.setYsUserName(ztUser.getNickname());
}
+ if(bug.getDeadline()!=null){
+ bug.setDeadline(DateUtils.getDayLast(bug.getDeadline()));
+ }
}
}
@@ -242,6 +253,11 @@ public class ZtBugServiceImpl extends ServiceImpl implements
Integer tostory = ztBug.getTostory();
ZtBugDTO d=new ZtBugDTO();
BeanUtils.copyProperties(ztBug,d);
+ ZtRelease release = this.releaseService.getReleaseByBug(id);
+ if(release!=null){
+ d.setReleaseId(release.getId());
+ d.setReleaseName(release.getName());
+ }
if(project!=null&&project!=0){
d.setZtProject(this.projectService.getById(project));
}
@@ -562,7 +578,13 @@ public class ZtBugServiceImpl extends ServiceImpl implements
ztBug.setLastediteddate(new Date());
ztBug.setStatus("active");
this.baseMapper.updateById(ztBug);
-
+ if(dto.getReleaseId()!=null&&dto.getReleaseId()!=0){
+ this.releaseService.changeRelease(dto.getReleaseId(),ztBug.getId(),"bug");
+ }else{
+ ZtReleaseQo qo =new ZtReleaseQo();
+ qo.setBugList(Arrays.asList(ztBug.getId()));
+ this.releaseService.removeBug(qo);
+ }
fileService.updateFile(dto.getFiles(),ztBug.getId(), FileTypes.bug);
this.actionService.addAction(ActionType.BUG, ActionStatus.BJ,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution()
@@ -670,12 +692,20 @@ public class ZtBugServiceImpl extends ServiceImpl implements
if(ztBug.getStatus().equals("closed")){
throw new BusinessException("已关闭");
}
- ztBug.setStatus("active");
- ztBug.setLastediteddate(new Date());
- ztBug.setLasteditedby(RiskUserThreadLocal.get().getName());
- this.baseMapper.updateById(ztBug);
+ if(ztBug.getReleaseFlag().equals(1)){
+ throw new BusinessException("已发布的bug无法重新激活");
+ }
+// ztBug.setStatus("active");
+// ztBug.setLastediteddate(new Date());
+// ztBug.setLasteditedby(RiskUserThreadLocal.get().getName());
+// this.baseMapper.updateById(ztBug);
+ this.baseMapper.update(new UpdateWrapper().lambda().set(ZtBug::getStatus,"active").set(ZtBug::getLastediteddate,new Date())
+ .set(ZtBug::getLasteditedby,RiskUserThreadLocal.get().getName())
+ .set(ZtBug::getResolvedby,"")
+ .set(ZtBug::getResolveddate,null)
+ .eq(ZtBug::getId,ztBug.getId()));
if(ztBug.getExecution()!=null&&ztBug.getExecution()!=0) {
- kanbanlaneService.changeStatus(ztBug.getExecution(), ztBug.getId(), "bug", "fixing");
+ kanbanlaneService.changeStatus(ztBug.getExecution(), ztBug.getId(), "bug", "unconfirmed");
}
this.actionService.addAction(ActionType.BUG, ActionStatus.JH,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution()
diff --git a/src/main/java/com/sa/zentao/service/impl/ZtComputerSourceServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtComputerSourceServiceImpl.java
new file mode 100644
index 0000000..e55a280
--- /dev/null
+++ b/src/main/java/com/sa/zentao/service/impl/ZtComputerSourceServiceImpl.java
@@ -0,0 +1,92 @@
+package com.sa.zentao.service.impl;
+
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sa.zentao.conf.RiskUserThreadLocal;
+import com.sa.zentao.dao.BusinessException;
+import com.sa.zentao.dao.ZtBugDTO;
+import com.sa.zentao.dao.ZtComputerSourceDTO;
+import com.sa.zentao.entity.ZtComputerSource;
+import com.sa.zentao.entity.ZtUser;
+import com.sa.zentao.enums.ActionStatus;
+import com.sa.zentao.enums.ActionType;
+import com.sa.zentao.mapper.ZtComputerSourceMapper;
+import com.sa.zentao.qo.ZtComputerSourceQo;
+import com.sa.zentao.qo.ZtProjectQo;
+import com.sa.zentao.service.IZtActionService;
+import com.sa.zentao.service.IZtComputerSourceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sa.zentao.service.IZtUserService;
+import com.sa.zentao.utils.DateUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author gqb
+ * @since 2025-04-07
+ */
+@Service
+public class ZtComputerSourceServiceImpl extends ServiceImpl implements IZtComputerSourceService {
+
+ @Autowired
+ private IZtUserService userService;
+
+ @Autowired
+ private IZtActionService actionService;
+
+ @Override
+ public PageInfo pageList(ZtComputerSourceQo qo) {
+
+ ////1年内、3年内、3~5年、5~7年,7年以上 1 2 3 4 5
+ String yearSearch = qo.getYearSearch();
+
+
+ Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());
+ List list = this.baseMapper.pageList(qo);
+ PageInfo ztBugDTOPageInfo = new PageInfo<>(list);
+ return ztBugDTOPageInfo;
+ }
+
+ @Override
+ @Transactional
+ public void addComputerSource(ZtComputerSourceDTO dto) {
+
+ ZtComputerSource info=new ZtComputerSource();
+ BeanUtils.copyProperties(dto,info);
+ info.setCreateDate(new Date());
+ info.setCreateUser(RiskUserThreadLocal.get().getName());
+ info.setUpdateDate(new Date());
+ info.setUpdateUser(RiskUserThreadLocal.get().getName());
+ this.baseMapper.insert(info);
+ this.actionService.addAction(ActionType.SOURCE, ActionStatus.XJ,info.getId(),"",null,null
+ ,RiskUserThreadLocal.get().getName(),null,null
+ );
+ }
+
+ @Override
+ public void modify(ZtComputerSourceDTO dto) {
+ ZtComputerSource ztComputerSource = this.baseMapper.selectById(dto.getId());
+ if(ztComputerSource==null){
+ throw new BusinessException("未查询到数据");
+ }
+ BeanUtils.copyProperties(dto,ztComputerSource);
+ ztComputerSource.setUpdateUser(RiskUserThreadLocal.get().getName());
+ ztComputerSource.setUpdateDate(new Date());
+ this.baseMapper.updateById(ztComputerSource);
+ this.actionService.addAction(ActionType.SOURCE, ActionStatus.XJ,ztComputerSource.getId(),"",null,null
+ ,RiskUserThreadLocal.get().getName(),null,null
+ );
+ }
+}
diff --git a/src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java
index f9004ad..c728923 100644
--- a/src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java
+++ b/src/main/java/com/sa/zentao/service/impl/ZtEffortServiceImpl.java
@@ -52,9 +52,12 @@ public class ZtEffortServiceImpl extends ServiceImpl i
}
List saveList=new ArrayList();
- Float consumed =0f;
+ //剩余工时
+ BigDecimal left = BigDecimal.valueOf(ztTask.getLeft());
+
+ BigDecimal consumed =BigDecimal.ZERO;
for (ZtEffortDTO d:list) {
- if(d.getLeft()==0&&d.getConsumed()==0){
+ if(d.getConsumed()==0){
continue;
}
ZtEffort ztEffort = new ZtEffort();
@@ -65,8 +68,11 @@ public class ZtEffortServiceImpl extends ServiceImpl i
ztEffort.setAccount(RiskUserThreadLocal.get().getName());
ztEffort.setDeleted("0");
ztEffort.setProject(ztTask.getProject());
+ left =left.subtract(BigDecimal.valueOf(ztEffort.getConsumed()));
+ float fLeft = left.floatValue();
+ ztEffort.setLeft(fLeft<0?0:fLeft);
saveList.add(ztEffort);
- consumed=d.getLeft();
+ consumed=consumed.add(BigDecimal.valueOf(ztEffort.getConsumed()));
}
if(CollectionUtils.isEmpty(saveList)){
throw new BusinessException("请检查工时");
@@ -86,9 +92,10 @@ public class ZtEffortServiceImpl extends ServiceImpl i
}
}
//剩余
- ztTask.setLeft(max.getLeft());
- if(ztTask.getLeft()<0){
+ if(left.floatValue()<0){
ztTask.setLeft(0f);
+ }else{
+ ztTask.setLeft(left.floatValue());
}
ztTask.setConsumed(ztTask.getConsumed()+f);
this.saveBatch(saveList);
diff --git a/src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java
index ce1a8c9..832c37d 100644
--- a/src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java
+++ b/src/main/java/com/sa/zentao/service/impl/ZtKanbanlaneServiceImpl.java
@@ -311,19 +311,47 @@ public class ZtKanbanlaneServiceImpl extends ServiceImpl ztKanbancolumnDTOS = this.kanbancolumnMapper.listByLaneIds(Arrays.asList(lane.getId()));
- List backlog = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("backlog")).collect(Collectors.toList());
- ZtKanbancolumnDTO ztKanbancolumnDTO = backlog.get(0);
+ for (ZtStory st:ztStories ) {
- ZtKanbancell kanbancell = this.kanbancellService.getOne(new QueryWrapper().lambda()
- .eq(ZtKanbancell::getKanban, id).eq(ZtKanbancell::getColumn, ztKanbancolumnDTO.getId()));
- if(StringUtils.isEmpty(kanbancell.getCards())){
- kanbancell.setCards(StringUtils.join(ztStories.stream().map(o->o.getId()).collect(Collectors.toList()),","));
- }else{
- kanbancell.setCards(kanbancell.getCards()+","+StringUtils.join(ztStories.stream().map(o->o.getId()).collect(Collectors.toList()),","));
+ ZtKanbancolumnDTO ztKanbancolumnDTO =null;
+ if("closed".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("closed")).collect(Collectors.toList()).get(0);
+ }else if ("wait".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("backlog")).collect(Collectors.toList()).get(0);
+ }else if ("projected".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("backlog")).collect(Collectors.toList()).get(0);
+ }else if ("developing".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("developing")).collect(Collectors.toList()).get(0);
+
+ }else if ("developed".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("developed")).collect(Collectors.toList()).get(0);
+
+ }else if ("testing".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("testing")).collect(Collectors.toList()).get(0);
+
+ }else if ("tested".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("tested")).collect(Collectors.toList()).get(0);
+
+ }else if ("released".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("released")).collect(Collectors.toList()).get(0);
+
+ }else if ("verified".equals(st.getStage())){
+ ztKanbancolumnDTO = ztKanbancolumnDTOS.stream().filter(o -> o.getType().equals("verified")).collect(Collectors.toList()).get(0);
+
+ }
+ ZtKanbancell kanbancell = this.kanbancellService.getOne(new QueryWrapper().lambda()
+ .eq(ZtKanbancell::getKanban, id).eq(ZtKanbancell::getColumn, ztKanbancolumnDTO.getId()));
+ if(StringUtils.isEmpty(kanbancell.getCards())){
+ kanbancell.setCards(StringUtils.join(ztStories.stream().map(o->o.getId()).collect(Collectors.toList()),","));
+ }else{
+ kanbancell.setCards(kanbancell.getCards()+","+StringUtils.join(ztStories.stream().map(o->o.getId()).collect(Collectors.toList()),","));
+ }
+
+ kanbancellService.updateById(kanbancell);
}
- kanbancellService.updateById(kanbancell);
+
}
diff --git a/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java
index 14b68d5..8e95f43 100644
--- a/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java
+++ b/src/main/java/com/sa/zentao/service/impl/ZtMeetingServiceImpl.java
@@ -21,6 +21,7 @@ import com.sa.zentao.dao.ZtMeetingDTO;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.entity.ZtMeeting;
import com.sa.zentao.entity.ZtProduct;
+import com.sa.zentao.entity.ZtStoryUser;
import com.sa.zentao.entity.ZtUser;
import com.sa.zentao.enums.ActionStatus;
import com.sa.zentao.enums.ActionType;
@@ -73,6 +74,9 @@ public class ZtMeetingServiceImpl extends ServiceImpl pageList(ZtMeetingQo qo) {
Page page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());
@@ -168,7 +172,13 @@ public class ZtMeetingServiceImpl extends ServiceImpl();
}
+ // 查询日期范围内的迭代
+ List execFilterList = ztProjects.stream().filter(o -> (o.getBegin().getTime() >= firstDayOfMonth.getTime()
+ && o.getBegin().getTime() <= lastDayOfMonth.getTime()) || (
+ o.getEnd().getTime() >= firstDayOfMonth.getTime()
+ && o.getEnd().getTime() <= lastDayOfMonth.getTime()
+ )
+
+ )
+ .map(o -> o.getId()).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(execFilterList)){
+ return new PageInfo<>();
+ }
List teams = this.teamService.list(new QueryWrapper().lambda().eq(ZtTeam::getType, "execution")
- .in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList())));
+ .in(ZtTeam::getRoot, execFilterList));
List accountIds = teams.stream().map(o -> o.getAccount()).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(accountIds)) {
diff --git a/src/main/java/com/sa/zentao/service/impl/ZtReleaseDetailsServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtReleaseDetailsServiceImpl.java
index eec18c7..7e957b4 100644
--- a/src/main/java/com/sa/zentao/service/impl/ZtReleaseDetailsServiceImpl.java
+++ b/src/main/java/com/sa/zentao/service/impl/ZtReleaseDetailsServiceImpl.java
@@ -1,5 +1,6 @@
package com.sa.zentao.service.impl;
+import com.sa.zentao.dao.ZtBugDTO;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.entity.ZtReleaseDetails;
import com.sa.zentao.mapper.ZtReleaseDetailsMapper;
@@ -22,12 +23,22 @@ import java.util.List;
public class ZtReleaseDetailsServiceImpl extends ServiceImpl implements IZtReleaseDetailsService {
@Override
- public List releasePageList(ZtReleaseQo qo) {
- return this.baseMapper.releasePageList(qo);
+ public List releaseStoryPageList(ZtReleaseQo qo) {
+ return this.baseMapper.releaseStoryPageList(qo);
}
@Override
public List storyPageList(ZtReleaseQo qo) {
return this.baseMapper.storyPageList(qo);
}
+
+ @Override
+ public List releaseBugPageList(ZtReleaseQo qo) {
+ return this.baseMapper.releaseBugPageList(qo);
+ }
+
+ @Override
+ public List releaseNotSyncBugPageList(ZtReleaseQo qo) {
+ return this.baseMapper.releaseNotSyncBugPageList(qo);
+ }
}
diff --git a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java
index 243d57c..f2b4ae2 100644
--- a/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java
+++ b/src/main/java/com/sa/zentao/service/impl/ZtReleaseServiceImpl.java
@@ -18,6 +18,7 @@ import com.sa.zentao.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sa.zentao.utils.BeanCopyUtil;
import com.sa.zentao.utils.DateUtils;
+import com.sa.zentao.utils.SendEmail;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +31,7 @@ import java.util.stream.Collectors;
/**
*
- * 服务实现类
+ * 服务实现类
*
*
* @author gqb
@@ -62,25 +63,29 @@ public class ZtReleaseServiceImpl extends ServiceImpl().lambda()
.eq(ZtProjectproduct::getProject, project));
- if(projectproduct!=null){
+ if (projectproduct != null) {
ztRelease.setProduct(projectproduct.getProduct());
}
@@ -88,43 +93,47 @@ public class ZtReleaseServiceImpl extends ServiceImpl execIds = new ArrayList(Arrays.asList(execStr.split(",")));
List list = this.projectstoryService.list(new QueryWrapper().lambda()
.in(ZtProjectstory::getProject, execIds)
.eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue())
);
- if(!CollectionUtils.isEmpty(list)){
+ if (!CollectionUtils.isEmpty(list)) {
+ //当前迭代下所有 测试完成的任务
List sList = this.storyService.list(new QueryWrapper()
.lambda().eq(ZtStory::getStatus, "active")
- .in(ZtStory::getId,list.stream().map(o->o.getStory()).distinct().collect(Collectors.toList()))
+ .in(ZtStory::getId, list.stream().map(o -> o.getStory()).distinct().collect(Collectors.toList()))
.eq(ZtStory::getStage, StoryStageEnums.tested.getValue()));
- if(!CollectionUtils.isEmpty(sList)){
+ if (!CollectionUtils.isEmpty(sList)) {
+ //没有被关联的需求 测试完成的
List releaseStoryList = this.releaseDetailsService.list(new QueryWrapper().lambda()
- .ne(ZtReleaseDetails::getStatus,"closed")
- .eq(ZtReleaseDetails::getObjectType,"story")
+ .ne(ZtReleaseDetails::getStatus, "closed")
+ .eq(ZtReleaseDetails::getObjectType, "story")
.in(ZtReleaseDetails::getObjectId, sList.stream().map(o -> o.getId()).collect(Collectors.toList())));
List sIds = releaseStoryList.stream().map(o -> o.getObjectId().intValue()).collect(Collectors.toList());
- List saveBatch=new ArrayList<>();
- for (ZtStory s:sList) {
- if(!sIds.contains(s.getId())){
- ZtReleaseDetails e=new ZtReleaseDetails();
- e.setObjectId(s.getId());
- e.setObjectType("story");
- e.setReleaseId(ztRelease.getId());
- e.setStatus("wait");
- saveBatch.add(e);
+ List saveBatch = new ArrayList<>();
+ for (ZtStory s : sList) {
+ if (!sIds.contains(s.getId())) {
+ ZtReleaseDetails e = new ZtReleaseDetails();
+ e.setObjectId(s.getId());
+ e.setObjectType("story");
+ e.setReleaseId(ztRelease.getId());
+ e.setStatus("wait");
+ saveBatch.add(e);
}
}
- if(CollectionUtils.isEmpty(saveBatch)){
- throw new BusinessException("当前没有符合发布的需求,请检查");
+ if (CollectionUtils.isEmpty(saveBatch)) {
+// throw new BusinessException("当前没有符合发布的需求,请检查");
+ } else {
+ releaseDetailsService.saveBatch(saveBatch);
}
- releaseDetailsService.saveBatch(saveBatch);
- }else{
- throw new BusinessException("当前没有符合发布的需求,请检查");
+
+ } else {
+// throw new BusinessException("当前没有符合发布的需求,请检查");
}
}
}
@@ -137,45 +146,54 @@ public class ZtReleaseServiceImpl extends ServiceImpl execIds = new ArrayList(Arrays.asList(execStr.split(",")));
-
- List list = this.projectstoryService.list(new QueryWrapper().lambda()
- .in(ZtProjectstory::getProject, execIds)
- .eq(ZtProjectstory::getType, ProjectTypeEnums.execution.getValue())
- );
+ List eIds = new ArrayList<>();
+ for (String s : execIds) {
+ eIds.add(Integer.valueOf(s));
+ }
+ List list = this.projectstoryService.projectListByStory(eIds, ProjectTypeEnums.execution);
- if(!CollectionUtils.isEmpty(list)){
+ if (!CollectionUtils.isEmpty(list)) {
+ //迭代下所有的测试完成需求
List sList = this.storyService.list(new QueryWrapper()
.lambda().eq(ZtStory::getStatus, "active")
- .in(ZtStory::getId,list.stream().map(o->o.getStory()).distinct().collect(Collectors.toList()))
+ .in(ZtStory::getId, list.stream().map(o -> o.getStory()).distinct().collect(Collectors.toList()))
.eq(ZtStory::getStage, StoryStageEnums.tested.getValue()));
- if(!CollectionUtils.isEmpty(sList)){
+ if (!CollectionUtils.isEmpty(sList)) {
List releaseStoryList = this.releaseDetailsService.list(new QueryWrapper().lambda()
- .in(ZtReleaseDetails::getObjectId, sList.stream().map(o -> o.getId()).collect(Collectors.toList())));
+ .in(ZtReleaseDetails::getObjectId, sList.stream().map(o -> o.getId()).collect(Collectors.toList()))
+ .eq(ZtReleaseDetails::getObjectType, "story")
+ .ne(ZtReleaseDetails::getStatus, "closed")
+ );
List sIds = releaseStoryList.stream().map(o -> o.getObjectId().intValue()).collect(Collectors.toList());
- this.releaseDetailsService.remove(new QueryWrapper().lambda().eq(ZtReleaseDetails::getReleaseId,ztRelease.getId()));
+ this.releaseDetailsService.remove(new QueryWrapper().lambda().eq(ZtReleaseDetails::getReleaseId, ztRelease.getId())
+ .ne(ZtReleaseDetails::getObjectType, "bug")
+ );
- List saveBatch=new ArrayList<>();
- for (ZtStory s:sList) {
- if(!sIds.contains(s.getId())){
- ZtReleaseDetails e=new ZtReleaseDetails();
+ List saveBatch = new ArrayList<>();
+ for (ZtStory s : sList) {
+ if (!sIds.contains(s.getId())) {
+ ZtReleaseDetails e = new ZtReleaseDetails();
e.setObjectId(s.getId());
e.setObjectType("story");
e.setReleaseId(ztRelease.getId());
@@ -189,7 +207,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl list = this.baseMapper.pageList(qo);
- if(!CollectionUtils.isEmpty(list)){
+ if (!CollectionUtils.isEmpty(list)) {
Map userMap = userService.userMapByIds(null);
List details = this.releaseDetailsService.list(new QueryWrapper().lambda().in(ZtReleaseDetails::getReleaseId, list.stream().map(o -> o.getId()).collect(Collectors.toList())));
-
- for (ZtReleaseDTO dto:list) {
+ for (ZtReleaseDTO dto : list) {
// ZtReleaseDetailsDTO
List fDetails = details.stream().filter(o -> o.getReleaseId().intValue() == dto.getId().intValue()).collect(Collectors.toList());
- if(!CollectionUtils.isEmpty(fDetails)){
+ if (!CollectionUtils.isEmpty(fDetails)) {
dto.setDetails(BeanCopyUtil.copyListProperties(fDetails, ZtReleaseDetailsDTO::new));
}
ZtUser ztUser = userMap.get(dto.getAssignedTo());
- if(ztUser!=null){
+ if (ztUser != null) {
dto.setAssignedToName(ztUser.getNickname());
}
ztUser = userMap.get(dto.getCreatedby());
- if(ztUser!=null){
+ if (ztUser != null) {
dto.setCreatedbyName(ztUser.getNickname());
}
}
@@ -231,7 +248,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl executions = releaseDetailsService.list(new QueryWrapper().lambda()
- .eq(ZtReleaseDetails::getReleaseId,ztRelease.getId())
- );
- for (ZtReleaseDetails s:executions ) {
- s.setStatus("closed");
- releaseDetailsService.updateById(s);
- }
+// String project = ztRelease.getExecutions();
+// String[] split = project.split(",");
+// List executions = releaseDetailsService.list(new QueryWrapper().lambda()
+// .eq(ZtReleaseDetails::getReleaseId, ztRelease.getId())
+// );
+// for (ZtReleaseDetails s : executions) {
+// s.setStatus("closed");
+// releaseDetailsService.updateById(s);
+// }
}
-
this.baseMapper.updateById(ztRelease);
actionService.addAction(ActionType.FB, ActionStatus.PS, ztRelease.getId(), ztRelease.getProduct() + "", ztRelease.getProject(), null,
@@ -280,90 +296,162 @@ public class ZtReleaseServiceImpl extends ServiceImpl executions = releaseDetailsService.list(new QueryWrapper().lambda()
- .eq(ZtReleaseDetails::getReleaseId,ztRelease.getId())
+ .eq(ZtReleaseDetails::getReleaseId, ztRelease.getId())
);
- for (ZtReleaseDetails s:executions ) {
+ for (ZtReleaseDetails s : executions) {
s.setStatus("closed");
releaseDetailsService.updateById(s);
}
- }else{
+ } else {
ztRelease.setStatus("released");
}
this.baseMapper.updateById(ztRelease);
- if(1==dto.getPushFlag()){
+ if (1 == dto.getPushFlag()) {
//推送
- ZtNotice notice=new ZtNotice();
+ ZtNotice notice = new ZtNotice();
notice.setName(dto.getTitle());
notice.setTitle(dto.getTitle());
notice.setRemark(dto.getRemark());
notice.setCreateDate(new Date());
notice.setCreateUser(RiskUserThreadLocal.get().getName());
- notice.setLoseDate(DateUtils.dateAddDay(new Date(),30));
+ notice.setLoseDate(DateUtils.dateAddDay(new Date(), 30));
notice.setObjectType("release");
notice.setObjectId(ztRelease.getId());
notice.setFlag(0);
noticeService.save(notice);
}
- List details = this.releaseDetailsService.list(new QueryWrapper().lambda().eq(ZtReleaseDetails::getReleaseId, ztRelease.getId()).ne(ZtReleaseDetails::getStatus,"closed").eq(ZtReleaseDetails::getObjectType, "story"));
+ List details = this.releaseDetailsService.list(new QueryWrapper().lambda().eq(ZtReleaseDetails::getReleaseId, ztRelease.getId())
+ .ne(ZtReleaseDetails::getStatus, "closed"));
- List storyList=new ArrayList();
- for (ZtReleaseDetails d:details ) {
- storyList.add(d.getObjectId());
+ List storyList = new ArrayList();
+ List bugList = new ArrayList();
+ for (ZtReleaseDetails d : details) {
+ if(d.getObjectType().equals("bug")){
+ bugList.add(d.getObjectId());
+ }else if(d.getObjectType().equals("story")){
+ storyList.add(d.getObjectId());
+ }
}
-
-// List list = this.projectstoryService.list(new QueryWrapper().lambda()
-// .in(ZtProjectstory::getStory, split).ne(ZtProjectstory::getExecution,0));
- if(CollectionUtils.isEmpty(storyList)){
+ if (CollectionUtils.isEmpty(storyList) &&CollectionUtils.isEmpty(bugList) ) {
throw new BusinessException("当前迭代无需求无法发布");
}
- List ztStories = storyService.listByIds(storyList);
- ZtProduct product = this.productService.getById(ztRelease.getProduct());
- if(dto.getRevieweResult()==1){
- for (ZtStory st:ztStories) {
- if("active".equals(st.getStatus())&&"wait".equals(st.getStage())){
- continue;
- }
- if("closed".equals(st.getStatus())||"closed".equals(st.getStage())){
- continue;
- }
- if(!"tested".equals(st.getStage())){
- throw new BusinessException(st.getTitle()+" 当前需求无法发布,请检查");
+ List ztStories = CollectionUtils.isEmpty(storyList)?new ArrayList<>():storyService.listByIds(storyList);
+
+ List bugs =CollectionUtils.isEmpty(bugList)?new ArrayList<>(): bugService.listByIds(bugList);
+
+
+
+ if (dto.getRevieweResult() == 1) {
+ long notTested = ztStories.stream().filter(o -> !o.getStage().equals("tested")).count();
+ if(notTested>0){
+ throw new BusinessException("当前需求存在未测试完成的请检查");
+ }
+ //'active','resolved','closed'?
+ long count = bugs.stream().filter(o -> !Arrays.asList("resolved","closed").contains(o.getStatus())).count();
+ if(count>0){
+ throw new BusinessException("当前bug存在未完成请检查");
+ }
+ for (ZtStory st : ztStories) {
+ if (!"tested".equals(st.getStage())) {
+ throw new BusinessException(st.getTitle() + " 当前需求无法发布,请检查");
}
this.storyService.releaseStory(st.getId());
}
- product.setReleases(product.getReleases()+ztStories.size());
- this.productService.updateById(product);
+ for (ZtBug b : bugs) {
+ b.setReleaseFlag(1);
+ b.setLasteditedby(RiskUserThreadLocal.get().getName());
+ b.setLastediteddate(new Date());
+ this.bugService.updateById(b);
+ }
+ if(!CollectionUtils.isEmpty(ztStories)){
+ Map userMap = this.userService.userMapByIds(null);
+ List mailTo =new ArrayList<>();
+ StringBuilder b=new StringBuilder();
+ b.append("" +
+ "" +
+ "编号 | 标题 | 验收人 |
"
+ );
+ for (ZtStory s:ztStories) {
+ ZtUser ztUser = userMap.get(s.getYsUser());
+ if(ztUser!=null&&!StringUtils.isEmpty(ztUser.getEmail())){
+// String str="需求编号: {id} 需求名称 : {name} 验收人 : {userName}
";
+// str=str.replace("{id}",s.getId().toString());
+// str= str.replace("{name}",s.getTitle());
+// str= str.replace("{userName}",ztUser.getNickname());
+
+ //{userName} {title} {id}
+ String str= "{id} | {title} | {userName} |
" ;
+ str=str.replace("{userName}",ztUser.getNickname());
+ str=str.replace("{title}",s.getTitle());
+ str=str.replace("{id}",s.getId().toString());
+ b.append(str);
+ mailTo.add(ztUser.getEmail());
+ }
+
+ }
+ b.append( "" );
+ b.append( "
");
+ if(!CollectionUtils.isEmpty(mailTo)){
+ SendEmail.sendMessage("需求发布提醒:",mailTo,
+ null,
+ b.toString());
+ }
+
+ }
- }else{
+
+// if(!StringUtils.isEmpty(ysUser)){
+// ZtUser ztUser = this.userService.selectByName(ysUser);
+// if(ztUser!=null&&!StringUtils.isEmpty(ztUser.getEmail())){
+// try {
+// StringBuilder b=new StringBuilder();
+// b.append("尊敬的{userName}:
");
+// b.append("您的需求 \"{id} {name}\"、\"{id} {name}\" 已发布,请及时登录系统验收。
");
+// String str = b.toString();
+// str= str.replace("{userName}",ztUser.getNickname());
+// str=str.replace("{id}",ztStory.getId().toString());
+// str=str.replace("{name}",ztStory.getTitle());
+// SendEmail.sendMail(ztUser.getEmail(),str,"需求发布提醒");
+// }catch (Exception e){
+// log.error("",e);
+// }
+// }
+// }
+//
+ } else {
actionService.addAction(ActionType.FB, ActionStatus.FBSB, ztRelease.getId(), ztRelease.getProduct() + "", ztRelease.getProject(), null,
RiskUserThreadLocal.get().getName(), "", "");
}
-
}
@Override
- public List