用例
This commit is contained in:
@ -22,7 +22,7 @@ public class CodeGenerator {
|
||||
//自己的名字
|
||||
static String Author = "gqb";
|
||||
|
||||
public static String tableName = "zt_month_scope";
|
||||
public static String tableName = "zt_story_case";
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
@ -56,13 +56,18 @@ public class ZtProjectController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
//添加项目集
|
||||
//获取项目信息
|
||||
@RequestMapping(value = "/getProjectById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result getProjectById(@RequestBody ZtProjectDTO dto){
|
||||
ZtProjectDTO p =ztProjectService.getProjectById(dto);
|
||||
return Result.success(p);
|
||||
}
|
||||
|
||||
//获取迭代信息
|
||||
@RequestMapping(value = "/getExecutionById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result getExecutionById(@RequestBody ZtProjectDTO dto){
|
||||
ZtProjectDTO p =ztProjectService.getExecutionById(dto);
|
||||
return Result.success(p);
|
||||
}
|
||||
//修改执行
|
||||
@RequestMapping(value = "/editImplement", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result editImplement(@RequestBody ZtProjectDTO dto){
|
||||
|
@ -0,0 +1,62 @@
|
||||
package com.sa.zentao.controller;
|
||||
|
||||
|
||||
import com.sa.zentao.dao.Result;
|
||||
import com.sa.zentao.dao.ZtStoryCaseDTO;
|
||||
import com.sa.zentao.dao.ZtStoryDTO;
|
||||
import com.sa.zentao.qo.ZtStoryCaseQo;
|
||||
import com.sa.zentao.service.IZtStoryCaseService;
|
||||
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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author gqb
|
||||
* @since 2025-05-07
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/zt-story-case")
|
||||
public class ZtStoryCaseController {
|
||||
|
||||
@Autowired
|
||||
private IZtStoryCaseService storyCaseService;
|
||||
|
||||
// ZtStoryCaseDTO
|
||||
@RequestMapping(value = "/addCase", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result addStory(@RequestBody ZtStoryCaseDTO dto) {
|
||||
storyCaseService.addCase(dto);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/modifyCase", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result modifyCase(@RequestBody ZtStoryCaseDTO dto) {
|
||||
storyCaseService.modifyCase(dto);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/userReview", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result userReview(@RequestBody ZtStoryCaseQo qo){
|
||||
storyCaseService.userReview(qo);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/submitUserReview", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result submitUserReview(@RequestBody ZtStoryCaseQo qo){
|
||||
storyCaseService.submitUserReview(qo);
|
||||
return Result.success();
|
||||
}
|
||||
@RequestMapping(value = "/getById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result getById(@RequestBody ZtStoryCaseQo qo){
|
||||
return Result.success(storyCaseService.getById(qo.getId()));
|
||||
}
|
||||
|
||||
}
|
@ -621,4 +621,14 @@ public class ZtTaskController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@Autowired
|
||||
private VxService vxService;
|
||||
|
||||
@RequestMapping(value = "/testMessage", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
|
||||
public Result testMessage(@RequestParam("implementName")String implementName){
|
||||
vxService.sendMessageToVx("guoqibing","测试",new Date());
|
||||
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
|
59
src/main/java/com/sa/zentao/dao/ZtStoryCaseDTO.java
Normal file
59
src/main/java/com/sa/zentao/dao/ZtStoryCaseDTO.java
Normal file
@ -0,0 +1,59 @@
|
||||
package com.sa.zentao.dao;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author gqb
|
||||
* @since 2025-05-07
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class ZtStoryCaseDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Integer id;
|
||||
|
||||
private String remark;
|
||||
|
||||
private Integer story;
|
||||
|
||||
private Date openedDate;
|
||||
|
||||
private String openedUser;
|
||||
|
||||
private String openedUserName;
|
||||
|
||||
private Date updateDate;
|
||||
|
||||
private String updateUser;
|
||||
|
||||
private String updateUserName;
|
||||
|
||||
private String psUser;
|
||||
|
||||
private String psUserName;
|
||||
|
||||
private Date psDate;
|
||||
|
||||
/**
|
||||
* wait reviewing refuse 拒绝 finished
|
||||
*/
|
||||
private String status;
|
||||
|
||||
private Integer product;
|
||||
|
||||
private Integer execution;
|
||||
|
||||
private Integer project;
|
||||
|
||||
}
|
@ -3,6 +3,7 @@ package com.sa.zentao.dao;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.sa.zentao.entity.ZtStoryCase;
|
||||
import com.sa.zentao.entity.ZtStoryreview;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@ -270,4 +271,7 @@ public class ZtStoryDTO implements Serializable {
|
||||
private Date develDate;
|
||||
//测试完成时间
|
||||
private Date testedDate;
|
||||
|
||||
private ZtStoryCaseDTO caseInfo;
|
||||
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ public class ZtBug implements Serializable {
|
||||
// closed
|
||||
// ZtBug 已完成
|
||||
//1.active 2.confire=1 3.解决进行中 不变 4 resolved 完成 5.测试中不变 6.测试完毕不变 verified验收
|
||||
// 'active','resolved','closed'?
|
||||
// 'active','resolved','closed'? cancel
|
||||
// active 激活
|
||||
@TableField("`status`")
|
||||
private String status;
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.sa.zentao.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
|
||||
import java.sql.Blob;
|
||||
@ -69,9 +70,9 @@ public class ZtMeeting implements Serializable {
|
||||
// private Integer userStory;
|
||||
|
||||
private String storyIds;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String result;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String meetingAfter;
|
||||
|
||||
}
|
||||
|
55
src/main/java/com/sa/zentao/entity/ZtStoryCase.java
Normal file
55
src/main/java/com/sa/zentao/entity/ZtStoryCase.java
Normal file
@ -0,0 +1,55 @@
|
||||
package com.sa.zentao.entity;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author gqb
|
||||
* @since 2025-05-07
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class ZtStoryCase implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
private String remark;
|
||||
|
||||
private Integer story;
|
||||
|
||||
private Date openedDate;
|
||||
|
||||
private String openedUser;
|
||||
|
||||
private Date updateDate;
|
||||
|
||||
private String updateUser;
|
||||
|
||||
private String psUser;
|
||||
|
||||
private Date psDate;
|
||||
|
||||
/**
|
||||
* wait reviewing refuse 拒绝 finished
|
||||
*/
|
||||
private String status;
|
||||
|
||||
private Integer product;
|
||||
|
||||
private Integer execution;
|
||||
|
||||
private Integer project;
|
||||
|
||||
}
|
@ -21,6 +21,10 @@ public enum ActionStatus {
|
||||
PSTG(13, "reviewpassed","评审通过"),
|
||||
PSYDMQ(14, "reviewclarified","评审有待明确"),
|
||||
PSBTG(15, "reviewrejected","评审不通过"),
|
||||
|
||||
|
||||
|
||||
|
||||
YSTG(16, "ystg","验收通过"),
|
||||
YSBTG(17, "ysbtg","验收不通过"),
|
||||
FBCG(18, "fb","发布通过"),
|
||||
@ -38,6 +42,14 @@ public enum ActionStatus {
|
||||
STORYCCYS(44, "storyccys","发布催促验收"),
|
||||
TJYS(51, "verified","提交验收"),
|
||||
|
||||
CASESUBREVIEW(52, "caseSubmitreview","需求用例提交至评审"),
|
||||
|
||||
CASEPSTG(53, "reviewpassed","评审通过"),
|
||||
CASEPSYDMQ(54, "reviewclarified","评审有待明确"),
|
||||
CASEPSBTG(55, "reviewrejected","评审不通过"),
|
||||
CASEBJ(4, "caseEdited","编辑需求用例"),
|
||||
CASEXJ(1, "casePpened","新建用例"),
|
||||
|
||||
KSCL(61, "startHand","开始处理"),
|
||||
WXCL(62, "dontHand","无需处理"),
|
||||
|
||||
|
@ -22,6 +22,7 @@ public enum ActionType {
|
||||
|
||||
WTFK(15, "story-feedback","问题反馈"),
|
||||
|
||||
|
||||
RW(5, "task","任务"),
|
||||
|
||||
STORYUSERTASK(21, "user-story-task","用户需求任务"),
|
||||
|
16
src/main/java/com/sa/zentao/mapper/ZtStoryCaseMapper.java
Normal file
16
src/main/java/com/sa/zentao/mapper/ZtStoryCaseMapper.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.sa.zentao.mapper;
|
||||
|
||||
import com.sa.zentao.entity.ZtStoryCase;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author gqb
|
||||
* @since 2025-05-07
|
||||
*/
|
||||
public interface ZtStoryCaseMapper extends BaseMapper<ZtStoryCase> {
|
||||
|
||||
}
|
14
src/main/java/com/sa/zentao/qo/ZtStoryCaseQo.java
Normal file
14
src/main/java/com/sa/zentao/qo/ZtStoryCaseQo.java
Normal file
@ -0,0 +1,14 @@
|
||||
package com.sa.zentao.qo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ZtStoryCaseQo extends BaseQo {
|
||||
|
||||
//1 通过 2不通过
|
||||
private Integer revieweResult;
|
||||
|
||||
private Integer id;
|
||||
|
||||
private String desc;
|
||||
}
|
@ -142,4 +142,7 @@ public interface IZtProjectService extends IService<ZtProject> {
|
||||
List<ZtProject> projectListByProductIds(List<Integer> pIds);
|
||||
|
||||
List<ZtProject> getExecutionsListByProjectAndDate(List<Integer> projects, Date firstDayOfMonth, Date lastDayOfMonth);
|
||||
|
||||
ZtProjectDTO getExecutionById(ZtProjectDTO dto);
|
||||
|
||||
}
|
||||
|
26
src/main/java/com/sa/zentao/service/IZtStoryCaseService.java
Normal file
26
src/main/java/com/sa/zentao/service/IZtStoryCaseService.java
Normal file
@ -0,0 +1,26 @@
|
||||
package com.sa.zentao.service;
|
||||
|
||||
import com.sa.zentao.dao.ZtStoryCaseDTO;
|
||||
import com.sa.zentao.entity.ZtStoryCase;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.sa.zentao.qo.ZtStoryCaseQo;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author gqb
|
||||
* @since 2025-05-07
|
||||
*/
|
||||
public interface IZtStoryCaseService extends IService<ZtStoryCase> {
|
||||
|
||||
void addCase(ZtStoryCaseDTO dto);
|
||||
|
||||
|
||||
void modifyCase(ZtStoryCaseDTO dto);
|
||||
|
||||
void userReview(ZtStoryCaseQo qo);
|
||||
|
||||
void submitUserReview(ZtStoryCaseQo qo);
|
||||
}
|
@ -1,11 +1,13 @@
|
||||
package com.sa.zentao.service;
|
||||
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.sa.zentao.dao.ZtStoryCaseDTO;
|
||||
import com.sa.zentao.dao.ZtStoryDTO;
|
||||
import com.sa.zentao.dao.ZtStoryUserDTO;
|
||||
import com.sa.zentao.entity.ZtProject;
|
||||
import com.sa.zentao.entity.ZtStory;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.sa.zentao.entity.ZtStoryCase;
|
||||
import com.sa.zentao.enums.TaskType;
|
||||
import com.sa.zentao.qo.ZtProjectQo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@ -94,4 +96,5 @@ public interface IZtStoryService extends IService<ZtStory> {
|
||||
|
||||
List<ZtStory> getNormalStory(List<ZtStory> sList);
|
||||
|
||||
public Map<Integer, ZtStoryCaseDTO> getStoryCaseMap(List<ZtStoryDTO> list);
|
||||
}
|
||||
|
@ -4,8 +4,11 @@ import com.alibaba.excel.util.StringUtils;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.sa.zentao.conf.SpringUtil;
|
||||
import com.sa.zentao.entity.ZtUser;
|
||||
import com.sa.zentao.utils.CryptoUtils;
|
||||
import com.sa.zentao.utils.HttpRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.http.HttpEntity;
|
||||
@ -27,13 +30,54 @@ public class VxService {
|
||||
private static String corpid;
|
||||
|
||||
@Value("${vx.dkcorpsecret}")
|
||||
private static String dkcorpsecret="1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs";
|
||||
private static String dkcorpsecret;
|
||||
|
||||
@Value("${vx.salaryCorpsecretApp}")
|
||||
private static String salaryCorpsecretApp;
|
||||
|
||||
@Autowired
|
||||
private IZtUserService userService;
|
||||
|
||||
|
||||
// public void sendMessageToVx(String vxId, String text, Date date) {
|
||||
// Environment bean = SpringUtil.getBean(Environment.class);
|
||||
//
|
||||
//
|
||||
// if (corpid == null) {
|
||||
// corpid = bean.getProperty("vx.corpid");
|
||||
// dkcorpsecret = bean.getProperty("vx.dkcorpsecret");
|
||||
// salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp");
|
||||
// }
|
||||
// String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp;
|
||||
// try {
|
||||
// String data = HttpRequest.sendGet(url, null);
|
||||
// JSONObject object = JSON.parseObject(data);
|
||||
// String access_token = object.getString("access_token");
|
||||
//
|
||||
// url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + access_token;
|
||||
//
|
||||
// Map<String, Object> map = new HashMap<String, Object>();
|
||||
// map.put("touser", vxId);
|
||||
// map.put("agentid", 3010185);
|
||||
// map.put("safe", 0);
|
||||
// map.put("enable_id_trans", 0);
|
||||
// map.put("enable_duplicate_check", 0);
|
||||
// map.put("msgtype","text");
|
||||
// Map<String, Object> texts = new HashMap<String, Object>();
|
||||
// texts.put("content", text);
|
||||
// map.put("text", texts);
|
||||
// log.info("调用微信start==",JSON.toJSONString(map));
|
||||
// String s = JSONPost(url, map);
|
||||
// log.info("调用微信end==",s);
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// log.error("",e);
|
||||
// }
|
||||
// }
|
||||
|
||||
public void feedbackSendMessageToVx(String vxId, String text, Date date) {
|
||||
|
||||
|
||||
public void sendMessageToVx(String vxId, String text, Date date) {
|
||||
Environment bean = SpringUtil.getBean(Environment.class);
|
||||
|
||||
|
||||
@ -69,6 +113,52 @@ public class VxService {
|
||||
}
|
||||
}
|
||||
|
||||
public void sendMessageToVx(String account, String text, Date date) {
|
||||
//
|
||||
// ZtUser ztUser = this.userService.selectByName(account);
|
||||
// if(ztUser==null||StringUtils.isEmpty(ztUser.getVx())){
|
||||
// return;
|
||||
// }
|
||||
String vxId = "lisi";//CryptoUtils.aesDecryptForFront(ztUser.getVx(), CryptoUtils.KEY_DES);
|
||||
|
||||
Environment bean = SpringUtil.getBean(Environment.class);
|
||||
|
||||
|
||||
if (corpid == null) {
|
||||
corpid = bean.getProperty("vx.corpid");
|
||||
dkcorpsecret = bean.getProperty("vx.dkcorpsecret");
|
||||
salaryCorpsecretApp = bean.getProperty("vx.salaryCorpsecretApp");
|
||||
}
|
||||
String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + salaryCorpsecretApp;
|
||||
try {
|
||||
String data = HttpRequest.sendGet(url, null);
|
||||
JSONObject object = JSON.parseObject(data);
|
||||
String access_token = object.getString("access_token");
|
||||
|
||||
url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + access_token;
|
||||
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put("touser", vxId);
|
||||
//
|
||||
map.put("agentid", 1000002);
|
||||
// map.put("agentid", 3010185);
|
||||
map.put("safe", 0);
|
||||
map.put("enable_id_trans", 0);
|
||||
map.put("enable_duplicate_check", 0);
|
||||
map.put("msgtype","text");
|
||||
Map<String, Object> texts = new HashMap<String, Object>();
|
||||
texts.put("content", text);
|
||||
map.put("text", texts);
|
||||
log.info("调用微信start==",JSON.toJSONString(map));
|
||||
String s = JSONPost(url, map);
|
||||
log.info("调用微信end==",s);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
log.error("",e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static String JSONPost(String url, Map<String, Object> map) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
HttpHeaders requestHeaders = new HttpHeaders();
|
||||
|
@ -198,12 +198,12 @@ public class IZtCountService {
|
||||
return new ZtStoryCountDTO();
|
||||
}
|
||||
String name = loginRiskUser.getName();
|
||||
if (name.equals("admin") || userType == UserType.GSGC) {
|
||||
if (userType == UserType.GSGC) {
|
||||
|
||||
List<ZtStoryUser> list = null;
|
||||
List<ZtStory> ztStory = null;
|
||||
|
||||
if (!name.equals("admin")) {
|
||||
// if (!name.equals("admin")) {
|
||||
if (!CollectionUtils.isEmpty(pIds)) {
|
||||
list = this.storyUserService.list(new QueryWrapper<ZtStoryUser>().lambda().in(ZtStoryUser::getProduct, pIds)
|
||||
.in(ZtStoryUser::getStatus, "active", "reviewing", "active", "unconfirmed", "waitcommunicate", "waitdesign", "designdoing", "designdone", "storyunconfirmed", "confirmed"));
|
||||
@ -216,18 +216,18 @@ public class IZtCountService {
|
||||
list = new ArrayList<>();
|
||||
ztStory = new ArrayList<>();
|
||||
}
|
||||
} else {
|
||||
list = this.storyUserService.list(new QueryWrapper<ZtStoryUser>().lambda().in(ZtStoryUser::getStatus, "active", "reviewing", "active", "unconfirmed", "waitcommunicate", "waitdesign", "designdoing", "designdone", "storyunconfirmed", "confirmed"));
|
||||
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
ztStory = new ArrayList<>();
|
||||
} else {
|
||||
ztStory = storyService.list(new QueryWrapper<ZtStory>()
|
||||
.lambda().eq(ZtStory::getDeleted, "0")
|
||||
.ne(ZtStory::getStatus, "closed")
|
||||
);
|
||||
}
|
||||
}
|
||||
// } else {
|
||||
// list = this.storyUserService.list(new QueryWrapper<ZtStoryUser>().lambda().in(ZtStoryUser::getStatus, "active", "reviewing", "active", "unconfirmed", "waitcommunicate", "waitdesign", "designdoing", "designdone", "storyunconfirmed", "confirmed"));
|
||||
//
|
||||
// if (CollectionUtils.isEmpty(list)) {
|
||||
// ztStory = new ArrayList<>();
|
||||
// } else {
|
||||
// ztStory = storyService.list(new QueryWrapper<ZtStory>()
|
||||
// .lambda().eq(ZtStory::getDeleted, "0")
|
||||
// .ne(ZtStory::getStatus, "closed")
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
List<ZtProduct> products = this.productService.list(new QueryWrapper<ZtProduct>().lambda().eq(ZtProduct::getStatus, "normal").in(ZtProduct::getId, pIds));
|
||||
@ -846,7 +846,7 @@ public class IZtCountService {
|
||||
dto.setWorkTime(floatBatchAdd(taskTimeList.stream().map(o -> o.getConsumed()).collect(Collectors.toList())));
|
||||
|
||||
//工作饱和度
|
||||
dto.setSaturation(dto.getTotalTime().floatValue() == 0 ? BigDecimal.ZERO : dto.getAllocationTime().divide(dto.getExamineTime(), 2, BigDecimal.ROUND_HALF_UP));
|
||||
dto.setSaturation(dto.getTotalTime().floatValue() == 0 ? BigDecimal.ZERO : dto.getAllocationTime().divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP));
|
||||
|
||||
|
||||
//完成准时率 TODO 延期 / 总完成
|
||||
@ -856,7 +856,7 @@ public class IZtCountService {
|
||||
|
||||
// List<Float> finishAllTime = ;
|
||||
//准时完成率
|
||||
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);
|
||||
dto.setFinishPunctuality(onTimeFinishRate);
|
||||
/**准时率得分
|
||||
* 1. =100%,得满分;
|
||||
@ -870,9 +870,11 @@ public class IZtCountService {
|
||||
|
||||
|
||||
//bug得分
|
||||
|
||||
List<ZtBug> bugList = this.bugService.list(new QueryWrapper<ZtBug>().lambda().
|
||||
ge(ZtBug::getOpeneddate, firstDayOfMonth).le(ZtBug::getOpeneddate, lastDayOfMonth)
|
||||
.eq(ZtBug::getAssignedTo, u.getAccount()));
|
||||
bugList=this.bugService.getNormalBugList(bugList);
|
||||
//bug密度
|
||||
int bugSize = bugList.size();
|
||||
BigDecimal bugDensity = BigDecimalUtils.isZero(finishAllTime) ? finishAllTime : BigDecimal.valueOf(bugSize).divide(finishAllTime, 2, BigDecimal.ROUND_HALF_UP);
|
||||
@ -956,7 +958,7 @@ public class IZtCountService {
|
||||
BigDecimal onTime = floatBatchAdd(onTimeTask.stream().map(o -> o.getEstimate())
|
||||
.collect(Collectors.toList()));
|
||||
//准时完成率
|
||||
BigDecimal onTimeFinishRate = BigDecimalUtils.isZero(finishAllTime) ? finishAllTime : onTime.divide(finishAllTime, 2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal onTimeFinishRate = BigDecimalUtils.isZero(finishAllTime) ? finishAllTime : onTime.divide(finishAllTime, 2, BigDecimal.ROUND_UP);
|
||||
onTimeFinishRate = onTimeFinishRate.floatValue() > 1 ? BigDecimal.valueOf(1) : onTimeFinishRate;
|
||||
dto.setFinishPunctuality(onTimeFinishRate);
|
||||
BigDecimal finishScope = BigDecimal.valueOf(20);
|
||||
@ -974,10 +976,10 @@ public class IZtCountService {
|
||||
//轻微
|
||||
long slightBug = allBugList.stream().filter(o -> Arrays.asList(4, 2, 3).contains(o.getSeverity())).count();
|
||||
long totalBug = seriousBug * 5 + slightBug * 1;
|
||||
dto.setBugFindRate(BigDecimalUtils.isZero(dto.getExamineTime()) ? BigDecimal.ZERO : BigDecimal.valueOf(totalBug).divide(dto.getExamineTime(), 2, BigDecimal.ROUND_HALF_UP));
|
||||
dto.setBugFindRate(BigDecimalUtils.isZero(dto.getExamineTime()) ? BigDecimal.ZERO : BigDecimal.valueOf(totalBug).divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP));
|
||||
//缺陷检出率 TODO bug 数量 / 可用工时 250418尹工说的
|
||||
int bugFindScore = dto.getBugFindRate().multiply(BigDecimal.valueOf(100)).intValue() > 20 ? 30 :
|
||||
(30 - (20 - BigDecimal.valueOf(totalBug).divide(dto.getExamineTime(), 2, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)).intValue()) * 2);
|
||||
(30 - (20 - BigDecimal.valueOf(totalBug).divide(dto.getExamineTime(), 2, BigDecimal.ROUND_UP).multiply(BigDecimal.valueOf(100)).intValue()) * 2);
|
||||
dto.setDevSeriousBug(BigDecimal.valueOf(seriousBug));
|
||||
dto.setDevSlightBug(BigDecimal.valueOf(slightBug));
|
||||
//bug检出率
|
||||
@ -2555,9 +2557,6 @@ public class IZtCountService {
|
||||
List<ZtBug> list = this.bugService.list(new QueryWrapper<ZtBug>().lambda().in(ZtBug::getProduct, pIds)
|
||||
.ge(ZtBug::getOpeneddate, start).le(ZtBug::getOpeneddate, end));
|
||||
list=this.bugService.getNormalBugList(list);
|
||||
List<ZtTask> tList = this.taskService.list(new QueryWrapper<ZtTask>().lambda().in(ZtTask::getProduct, pIds)
|
||||
.ge(ZtTask::getOpeneddate, start).le(ZtTask::getOpeneddate, end));
|
||||
tList = this.taskService.getNormalTaskList(tList);
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return map;
|
||||
}
|
||||
@ -2683,16 +2682,16 @@ public class IZtCountService {
|
||||
List<ZtBug> devBugList = bugList.stream().filter(o -> o.getBugType().equals("dev")).collect(Collectors.toList());
|
||||
int devBugCount = devBugList.size();
|
||||
dto.setBugCount(BigDecimal.valueOf(devBugCount));
|
||||
dto.setBugDensity((dto.getAllocationTime() == null || BigDecimalUtils.isZero(dto.getAllocationTime())) ? BigDecimal.ZERO : BigDecimal.valueOf(devBugCount).divide(dto.getAllocationTime(), 2, BigDecimal.ROUND_HALF_UP));
|
||||
dto.setBugDensity((dto.getAllocationTime() == null || BigDecimalUtils.isZero(dto.getAllocationTime())) ? BigDecimal.ZERO : BigDecimal.valueOf(devBugCount).divide(dto.getAllocationTime(), 3, BigDecimal.ROUND_DOWN));
|
||||
|
||||
|
||||
dto.setWorkTime(workTime);
|
||||
// //完成任务总量
|
||||
dto.setTaskCount(taskCount);
|
||||
//分配公式/达标工时 分配任务工时占 总工时的% TODO
|
||||
dto.setSaturation(BigDecimalUtils.isZero(examineTime) ? BigDecimal.ZERO : dto.getAllocationTime().divide(examineTime, 2, BigDecimal.ROUND_HALF_UP));
|
||||
dto.setSaturation(BigDecimalUtils.isZero(examineTime) ? BigDecimal.ZERO : dto.getAllocationTime().divide(examineTime, 2, BigDecimal.ROUND_UP));
|
||||
//完成准时率
|
||||
dto.setFinishPunctuality(kfzCount<=0?BigDecimal.ZERO:finishPunctuality.divide(BigDecimal.valueOf(kfzCount),2,BigDecimal.ROUND_HALF_UP));
|
||||
dto.setFinishPunctuality(kfzCount<=0?BigDecimal.ZERO:finishPunctuality.divide(BigDecimal.valueOf(kfzCount),3,BigDecimal.ROUND_UP));
|
||||
// //处理问题数量
|
||||
List<ZtStoryFeedback> feedbackList = this.storyFeedbackService.list(new QueryWrapper<ZtStoryFeedback>()
|
||||
.lambda().in(ZtStoryFeedback::getProduct, pIds)
|
||||
@ -2705,7 +2704,7 @@ public class IZtCountService {
|
||||
// 处理结果通过率
|
||||
BigDecimal verifiedCount = BigDecimal.valueOf(feedbackList.stream().filter(o -> o.getStatus().equals("verified")).count());
|
||||
|
||||
dto.setPassFeedbackCountRate(BigDecimalUtils.isZero(dto.getHandFeedbackCount()) ? BigDecimal.ZERO : verifiedCount.divide(dto.getHandFeedbackCount(), 2, BigDecimal.ROUND_HALF_UP));
|
||||
dto.setPassFeedbackCountRate(BigDecimalUtils.isZero(dto.getHandFeedbackCount()) ? BigDecimal.ZERO : verifiedCount.divide(dto.getHandFeedbackCount(), 2, BigDecimal.ROUND_UP));
|
||||
|
||||
// //上线的需求数量
|
||||
List<ZtStory> releaseStoryList = monthReleaseBeforeAfterFifteen(firstDayOfMonth, pList.stream().map(o -> o.getId()).collect(Collectors.toList()));
|
||||
@ -2732,4 +2731,6 @@ public class IZtCountService {
|
||||
return multipleDepartProjectTeamList.stream().filter(o->!StringUtils.isEmpty(o.getAssignedTo())).map(o->o.getAssignedTo()).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ 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.VxMessageUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -338,7 +340,7 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
ZtBug ztBug = this.baseMapper.selectById(qo.getId());
|
||||
|
||||
String oldAssignedTo = ztBug.getAssignedTo();
|
||||
if(!ztBug.getOpenedby().equals(loginRiskUser.getName())){
|
||||
if(!ztBug.getAssignedTo().equals(loginRiskUser.getName())){
|
||||
if(loginRiskUser.getUserType()!=UserType.XMGLY&&loginRiskUser.getUserType()!=UserType.GSGC){
|
||||
@ -362,6 +364,7 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
this.actionService.addAction(ActionType.BUG, ActionStatus.FP,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution()
|
||||
,RiskUserThreadLocal.get().getName(),null,qo.getAssignedTo()
|
||||
);
|
||||
this.bugSendMessage(ztBug.getId(),oldAssignedTo,ztBug.getAssignedTo());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -434,6 +437,8 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
this.actionService.addAction(ActionType.BUG, ActionStatus.XJ,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution()
|
||||
,RiskUserThreadLocal.get().getName(),ztBug.getSteps(),""
|
||||
);
|
||||
this.bugSendMessage(ztBug.getId(),null,ztBug.getAssignedTo());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -545,9 +550,14 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
public List<ZtBug> getNormalBugList(List<ZtBug> bugList) {
|
||||
List<ZtBug> result=new ArrayList();
|
||||
for (ZtBug b:bugList) {
|
||||
if("cancel".equals(b.getStatus())){
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!b.getStatus().equals("closed")){
|
||||
result.add(b);
|
||||
}
|
||||
|
||||
if(b.getStatus().equals("closed")&&!StringUtils.isEmpty(b.getResolvedby())){
|
||||
result.add(b);
|
||||
}
|
||||
@ -600,12 +610,17 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
this.actionService.addAction(ActionType.BUG, ActionStatus.XJ,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution()
|
||||
,RiskUserThreadLocal.get().getName(),"",""
|
||||
);
|
||||
|
||||
this.bugSendMessage(ztBug.getId(),null,ztBug.getAssignedTo());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void editBug(ZtBugDTO dto) {
|
||||
ZtBug ztBug = this.baseMapper.selectById(dto.getId());
|
||||
String oldAssignedTo = ztBug.getAssignedTo();
|
||||
|
||||
|
||||
BeanUtils.copyProperties(dto,ztBug,"execution");
|
||||
|
||||
|
||||
@ -625,6 +640,7 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
this.actionService.addAction(ActionType.BUG, ActionStatus.BJ,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution()
|
||||
,RiskUserThreadLocal.get().getName(),ztBug.getSteps(),""
|
||||
);
|
||||
this.bugSendMessage(ztBug.getId(),oldAssignedTo,ztBug.getAssignedTo());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -735,6 +751,9 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
this.actionService.addAction(ActionType.BUG, ActionStatus.WC,ztBug.getId(),ztBug.getProject()+"",ztBug.getProject(),ztBug.getExecution()
|
||||
,RiskUserThreadLocal.get().getName(),dto.getRemark(),""
|
||||
);
|
||||
|
||||
this.bugFinishedSendMessage(ztBug.getId(),ztBug.getOpenedby());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -765,6 +784,19 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
);
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private VxService vxService;
|
||||
|
||||
|
||||
private void bugSendMessage(Integer id, String oldUser, String newUser) {
|
||||
if (ObjectUtils.notEqual(oldUser, newUser) && !StringUtils.isEmpty(newUser)) {
|
||||
if (!StringUtils.isEmpty(newUser)) {
|
||||
this.vxService.sendMessageToVx(newUser, VxMessageUtils.bugMessage.assignToMessage(id), new Date());
|
||||
}
|
||||
}
|
||||
}
|
||||
private void bugFinishedSendMessage(Integer id, String newUser) {
|
||||
if (!StringUtils.isEmpty(newUser)) {
|
||||
this.vxService.sendMessageToVx(newUser, VxMessageUtils.bugMessage.bugFinished(id), new Date());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -100,9 +100,10 @@ public class ZtKanbanlaneServiceImpl extends ServiceImpl<ZtKanbanlaneMapper, ZtK
|
||||
List<ZtStoryDTO> ztStoryDTOS = BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new);
|
||||
if(!CollectionUtils.isEmpty(ztStories)){
|
||||
ZtProduct product = this.productService.getById(ztStoryDTOS.get(0).getProduct());
|
||||
Map<Integer, ZtStoryCaseDTO> caseMap = this.storyService.getStoryCaseMap(ztStoryDTOS);
|
||||
|
||||
for (ZtStoryDTO st:ztStoryDTOS) {
|
||||
ZtUser ztUser = userMap.get(st.getAssignedTo());
|
||||
|
||||
List<ZtProject> ztProjects = executionMapByStory.get(st.getId());
|
||||
if(!CollectionUtils.isEmpty(ztProjects)){
|
||||
st.setExecutionName(ztProjects.stream().map(o->o.getName()).collect(Collectors.joining(",")));
|
||||
@ -116,6 +117,23 @@ public class ZtKanbanlaneServiceImpl extends ServiceImpl<ZtKanbanlaneMapper, ZtK
|
||||
st.setProductName(product.getName());
|
||||
}
|
||||
|
||||
ZtStoryCaseDTO ztStoryCaseDTO = caseMap.get(st.getId());
|
||||
if(ztStoryCaseDTO!=null){
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getOpenedUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setOpenedUserName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getUpdateUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setUpdateUserName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getPsUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setPsUserName(ztUser.getNickname());
|
||||
}
|
||||
st.setCaseInfo(ztStoryCaseDTO);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
d.setList(ztStoryDTOS);
|
||||
|
@ -890,10 +890,10 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
|
||||
}
|
||||
|
||||
ZtUser user = userService.selectByName(RiskUserThreadLocal.get().getName());
|
||||
if (user.getAccount().equals("admin")) {
|
||||
return this.baseMapper.selectList(new QueryWrapper<ZtProject>()
|
||||
.lambda().eq(ZtProject::getType, "program")).stream().map(o -> o.getId()).collect(Collectors.toList());
|
||||
}
|
||||
// if (user.getAccount().equals("admin")) {
|
||||
// return this.baseMapper.selectList(new QueryWrapper<ZtProject>()
|
||||
// .lambda().eq(ZtProject::getType, "program")).stream().map(o -> o.getId()).collect(Collectors.toList());
|
||||
// }
|
||||
String productIds = user.getProductIds();
|
||||
if (StringUtils.isEmpty(productIds)) {
|
||||
return new ArrayList<>();
|
||||
@ -913,10 +913,10 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
|
||||
@Override
|
||||
public List<Integer> projectAuthList() {
|
||||
ZtUser user = userService.selectByName(RiskUserThreadLocal.get().getName());
|
||||
if (user.getAccount().equals("admin")) {
|
||||
return this.baseMapper.selectList(new QueryWrapper<ZtProject>()
|
||||
.lambda().eq(ZtProject::getType, "project")).stream().map(o -> o.getId()).collect(Collectors.toList());
|
||||
}
|
||||
// if (user.getAccount().equals("admin")) {
|
||||
// return this.baseMapper.selectList(new QueryWrapper<ZtProject>()
|
||||
// .lambda().eq(ZtProject::getType, "project")).stream().map(o -> o.getId()).collect(Collectors.toList());
|
||||
// }
|
||||
String productIds = user.getProductIds();
|
||||
if (StringUtils.isEmpty(productIds)) {
|
||||
return new ArrayList<>();
|
||||
@ -943,10 +943,10 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
|
||||
public List<Integer> execAuthList() {
|
||||
|
||||
ZtUser user = userService.selectByName(RiskUserThreadLocal.get().getName());
|
||||
if (user.getAccount().equals("admin")) {
|
||||
return this.baseMapper.selectList(new QueryWrapper<ZtProject>()
|
||||
.lambda().eq(ZtProject::getType, "sprint")).stream().map(o -> o.getId()).collect(Collectors.toList());
|
||||
}
|
||||
// if (user.getAccount().equals("admin")) {
|
||||
// return this.baseMapper.selectList(new QueryWrapper<ZtProject>()
|
||||
// .lambda().eq(ZtProject::getType, "sprint")).stream().map(o -> o.getId()).collect(Collectors.toList());
|
||||
// }
|
||||
List<Integer> ids = null;
|
||||
String productIds = user.getProductIds();
|
||||
if (StringUtils.isEmpty(productIds)) {
|
||||
@ -1101,6 +1101,22 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
|
||||
return ztProjects;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ZtProjectDTO getExecutionById(ZtProjectDTO dto) {
|
||||
ZtProject project = this.baseMapper.selectById(dto.getId());
|
||||
if(project==null){
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
ZtProjectDTO d=new ZtProjectDTO();
|
||||
BeanUtils.copyProperties(project,d);
|
||||
ZtUser account = this.userService.getByAccount(d.getPm());
|
||||
if(account!=null){
|
||||
d.setPmName(account.getNickname());
|
||||
}
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void projectTeamUpdate(ZtProjectQo qo) {
|
||||
List<String> teamList = qo.getTeamList();
|
||||
|
@ -0,0 +1,133 @@
|
||||
package com.sa.zentao.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.sa.zentao.conf.RiskUserThreadLocal;
|
||||
import com.sa.zentao.dao.BusinessException;
|
||||
import com.sa.zentao.dao.ZtStoryCaseDTO;
|
||||
import com.sa.zentao.entity.ZtStoryCase;
|
||||
import com.sa.zentao.enums.ActionStatus;
|
||||
import com.sa.zentao.enums.ActionType;
|
||||
import com.sa.zentao.mapper.ZtStoryCaseMapper;
|
||||
import com.sa.zentao.qo.ZtStoryCaseQo;
|
||||
import com.sa.zentao.service.IZtActionService;
|
||||
import com.sa.zentao.service.IZtStoryCaseService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
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.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author gqb
|
||||
* @since 2025-05-07
|
||||
*/
|
||||
@Service
|
||||
public class ZtStoryCaseServiceImpl extends ServiceImpl<ZtStoryCaseMapper, ZtStoryCase> implements IZtStoryCaseService {
|
||||
|
||||
@Autowired
|
||||
private IZtActionService actionService;
|
||||
|
||||
@Override
|
||||
public void addCase(ZtStoryCaseDTO dto) {
|
||||
List<ZtStoryCase> ztStoryCases = this.baseMapper.selectList(new QueryWrapper<ZtStoryCase>().lambda().eq(ZtStoryCase::getStory, dto.getStory()));
|
||||
if(!CollectionUtils.isEmpty(ztStoryCases)){
|
||||
throw new BusinessException("重复提交");
|
||||
}
|
||||
ZtStoryCase ztStoryCase = new ZtStoryCase();
|
||||
|
||||
BeanUtils.copyProperties(dto,ztStoryCase);
|
||||
ztStoryCase.setStatus("reviewing");
|
||||
ztStoryCase.setOpenedDate(new Date());
|
||||
ztStoryCase.setOpenedUser(RiskUserThreadLocal.get().getName());
|
||||
this.baseMapper.insert(ztStoryCase);
|
||||
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.CASEXJ, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void modifyCase(ZtStoryCaseDTO dto) {
|
||||
Integer id = dto.getId();
|
||||
if(id==null){
|
||||
throw new BusinessException("id为空");
|
||||
}
|
||||
|
||||
ZtStoryCase ztStoryCase = this.baseMapper.selectById(dto.getId());
|
||||
if(!Arrays.asList("reviewing","refuse").contains(ztStoryCase.getStatus())){
|
||||
throw new BusinessException("无法编辑");
|
||||
}
|
||||
ztStoryCase.setPsUser(dto.getPsUser());
|
||||
ztStoryCase.setStory(dto.getStory());
|
||||
ztStoryCase.setExecution(dto.getExecution());
|
||||
ztStoryCase.setRemark(dto.getRemark());
|
||||
ztStoryCase.setUpdateDate(new Date());
|
||||
ztStoryCase.setStatus("reviewing");
|
||||
ztStoryCase.setUpdateUser(RiskUserThreadLocal.get().getName());
|
||||
this.baseMapper.updateById(ztStoryCase);
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.CASEBJ, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void userReview(ZtStoryCaseQo qo) {
|
||||
|
||||
Integer id = qo.getId();
|
||||
ZtStoryCase ztStoryCase = this.baseMapper.selectById(id);
|
||||
if(ztStoryCase==null){
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
if(!RiskUserThreadLocal.get().getName().equals(ztStoryCase.getPsUser())){
|
||||
throw new BusinessException("无需评审");
|
||||
}
|
||||
if(!ztStoryCase.getStatus().equals("reviewing")){
|
||||
throw new BusinessException("无需评审");
|
||||
}
|
||||
if(qo.getRevieweResult().equals(1)){
|
||||
//评审通过
|
||||
ztStoryCase.setStatus("finished");
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.CASEPSTG, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
|
||||
}else{
|
||||
//评审不通过
|
||||
ztStoryCase.setStatus("refuse");
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.CASEPSBTG, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), qo.getDesc(), "");
|
||||
}
|
||||
ztStoryCase.setUpdateDate(new Date());
|
||||
ztStoryCase.setUpdateUser(RiskUserThreadLocal.get().getName());
|
||||
ztStoryCase.setPsDate(new Date());
|
||||
this.baseMapper.updateById(ztStoryCase);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void submitUserReview(ZtStoryCaseQo qo) {
|
||||
ZtStoryCase ztStoryCase = this.baseMapper.selectById(qo.getId());
|
||||
|
||||
if(!Arrays.asList("wait","refuse").contains(ztStoryCase.getStatus())){
|
||||
throw new BusinessException("当前无法提交评审");
|
||||
}
|
||||
|
||||
ztStoryCase.setUpdateDate(new Date());
|
||||
ztStoryCase.setUpdateUser(RiskUserThreadLocal.get().getName());
|
||||
ztStoryCase.setStatus("reviewing");
|
||||
this.baseMapper.updateById(ztStoryCase);
|
||||
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.CASESUBREVIEW, ztStoryCase.getId(), ztStoryCase.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
|
||||
}
|
||||
}
|
@ -23,6 +23,7 @@ import com.sa.zentao.qo.ZtProjectQo;
|
||||
import com.sa.zentao.service.*;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sa.zentao.utils.BeanCopyUtil;
|
||||
import com.sa.zentao.utils.VxMessageUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -154,9 +155,15 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
}
|
||||
|
||||
ztStoryFeedback.setFileUrl(dto.getUrls());
|
||||
String addName = null;
|
||||
if(org.apache.commons.lang3.StringUtils.isEmpty(name)&& !org.apache.commons.lang3.StringUtils.isEmpty(dto.getOaName())){
|
||||
ztStoryFeedback.setSpec(ztStoryFeedback.getSpec()+" 提出人:"+dto.getOaName());
|
||||
addName=dto.getOaName();
|
||||
}else{
|
||||
ZtUser account = this.userService.getByAccount(ztStoryFeedback.getOpenedBy());
|
||||
addName=account==null?"":account.getNickname();
|
||||
}
|
||||
|
||||
this.baseMapper.insert(ztStoryFeedback);
|
||||
|
||||
|
||||
@ -176,6 +183,11 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ZtProduct ztProduct = this.productService.getById(ztStoryFeedback.getProduct());
|
||||
ZtProject ztProject = this.projectService.getById(ztProduct);
|
||||
|
||||
addFeedbackMessage(ztStoryFeedback.getId(),addName,ztProject.getPm());
|
||||
actionService.addAction(ActionType.WTFK, ActionStatus.XJ, ztStoryFeedback.getId(), ztStoryFeedback.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get() == null ? "admin" : RiskUserThreadLocal.get().getName(), "", "");
|
||||
}
|
||||
@ -220,7 +232,7 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
//关闭
|
||||
b.append("已关闭");
|
||||
}
|
||||
vxService.sendMessageToVx(ztStoryFeedback.getWeixin(), b.toString(), new Date());
|
||||
vxService.feedbackSendMessageToVx(ztStoryFeedback.getWeixin(), b.toString(), new Date());
|
||||
}
|
||||
|
||||
this.baseMapper.updateById(ztStoryFeedback);
|
||||
@ -602,11 +614,13 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
if (!org.apache.commons.lang3.StringUtils.isEmpty(ztStoryFeedback.getOpenSource()) && ztStoryFeedback.getOpenSource().equals("weixin")) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append("您反馈的").append(ztStoryFeedback.getName()).append(" 的问题已提交验收,请及时登陆系统验收。");
|
||||
vxService.sendMessageToVx(ztStoryFeedback.getWeixin(), b.toString(), new Date());
|
||||
vxService.feedbackSendMessageToVx(ztStoryFeedback.getWeixin(), b.toString(), new Date());
|
||||
}
|
||||
|
||||
actionService.addAction(ActionType.WTFK, ActionStatus.TJYS, ztStoryFeedback.getId(), ztStoryFeedback.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStoryFeedback.getAssignedTo());
|
||||
|
||||
waitYsMessage(ztStoryFeedback.getId(),ztStoryFeedback.getOpenedBy());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -816,4 +830,17 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
actionService.addAction(ActionType.WTFK, ActionStatus.TJBZ, dto.getId(), ztStory.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getRemark(), "");
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void addFeedbackMessage(Integer id,String openUser,String newUser) {
|
||||
if (!org.apache.commons.lang3.StringUtils.isEmpty(newUser)) {
|
||||
this.vxService.sendMessageToVx(newUser, VxMessageUtils.storyFeedbackMessage.addSendMessage(openUser, id), new Date());
|
||||
}
|
||||
}
|
||||
private void waitYsMessage(Integer id,String openUser) {
|
||||
if (!org.apache.commons.lang3.StringUtils.isEmpty(openUser)) {
|
||||
this.vxService.sendMessageToVx(openUser, VxMessageUtils.storyFeedbackMessage.finishedFeedback( id), new Date());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,9 +20,7 @@ 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;
|
||||
import com.sa.zentao.utils.BeanCopyUtilCallBack;
|
||||
import com.sa.zentao.utils.SendEmail;
|
||||
import com.sa.zentao.utils.*;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@ -101,6 +99,9 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
private IZtReleaseService releaseService;
|
||||
|
||||
|
||||
@Autowired
|
||||
private IZtStoryCaseService storyCaseService;
|
||||
|
||||
@Override
|
||||
public PageInfo<ZtStoryDTO> pageList(ZtProjectQo qo) {
|
||||
Page<ZtStoryDTO> page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());
|
||||
@ -265,8 +266,18 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
this.executionBindStory(s, executions);
|
||||
}
|
||||
|
||||
storySendZpMessage(s.getId(),"",s.getAssignedTo());
|
||||
|
||||
}
|
||||
@Autowired
|
||||
private VxService vxService;
|
||||
|
||||
private void storySendZpMessage(Integer id, String oldUser,String newUser) {
|
||||
if(ObjectUtils.notEqual(oldUser, newUser)&&!StringUtils.isEmpty(newUser)){
|
||||
|
||||
this.vxService.sendMessageToVx(newUser, VxMessageUtils.storyMessage.assignToMessage(id),new Date());
|
||||
}
|
||||
}
|
||||
|
||||
private ZtStoryspec buildSpec(ZtStoryDTO dto, ZtStory s) {
|
||||
|
||||
@ -454,6 +465,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
public void editStory(ZtStoryDTO dto) {
|
||||
Integer id = dto.getId();
|
||||
ZtStory ztStory = this.baseMapper.selectById(id);
|
||||
String oldAssignedTo = ztStory.getAssignedTo();
|
||||
if ("closed".equals(ztStory.getStatus())) {
|
||||
throw new BusinessException("当前已关闭");
|
||||
}
|
||||
@ -607,6 +619,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
RiskUserThreadLocal.get().getName(), dto.getRemark(), "");
|
||||
}
|
||||
|
||||
storySendZpMessage(ztStory.getId(),oldAssignedTo,ztStory.getAssignedTo());
|
||||
|
||||
}
|
||||
|
||||
@ -747,10 +760,29 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
|
||||
Map<Integer,List<ZtTask>> taskCountMap = getTaskCountMap(list);
|
||||
|
||||
Map<Integer,ZtStoryCaseDTO> caseMap = getStoryCaseMap(list);
|
||||
|
||||
|
||||
for (ZtStoryDTO d : list) {
|
||||
d.setRevieweUser(d.getReviewedby().replaceAll(",", ""));
|
||||
d.setViews(rMap.get(d.getId()));
|
||||
List<ZtTask> ztTasks = taskCountMap.get(d.getId());
|
||||
ZtStoryCaseDTO ztStoryCaseDTO = caseMap.get(d.getId());
|
||||
if(ztStoryCaseDTO!=null){
|
||||
ZtUser ztUser = userMap.get(ztStoryCaseDTO.getOpenedUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setOpenedUserName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getUpdateUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setUpdateUserName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getPsUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setPsUserName(ztUser.getNickname());
|
||||
}
|
||||
d.setCaseInfo(ztStoryCaseDTO);
|
||||
}
|
||||
|
||||
|
||||
d.setTaskCount(ztTasks==null?0:ztTasks.size());
|
||||
@ -781,9 +813,30 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
return new PageInfo<ZtStoryDTO>(list);
|
||||
}
|
||||
|
||||
|
||||
public Map<Integer, ZtStoryCaseDTO> getStoryCaseMap(List<ZtStoryDTO> list) {
|
||||
|
||||
if(CollectionUtils.isEmpty(list)){
|
||||
return new HashMap<>();
|
||||
}
|
||||
List<Integer> sIds = list.stream().map(o -> o.getId()).collect(Collectors.toList());
|
||||
|
||||
List<ZtStoryCase> caseList = this.storyCaseService.list(new QueryWrapper<ZtStoryCase>().lambda()
|
||||
.select(SFunctionColums.caseColumes())
|
||||
.in(ZtStoryCase::getStory, sIds));
|
||||
if(CollectionUtils.isEmpty(caseList)){
|
||||
return new HashMap<>();
|
||||
}else{
|
||||
List<ZtStoryCaseDTO> ztStoryCaseDTOS = BeanCopyUtil.copyListProperties(caseList, ZtStoryCaseDTO::new);
|
||||
return ztStoryCaseDTOS.stream().collect(Collectors.toMap(ZtStoryCaseDTO::getStory, o -> o));
|
||||
}
|
||||
}
|
||||
|
||||
private Map<Integer, List<ZtTask>> getTaskCountMap(List<ZtStoryDTO> list) {
|
||||
|
||||
List<ZtTask> tList = this.taskService.list(new QueryWrapper<ZtTask>().lambda().in(ZtTask::getStory, list.stream().map(o -> o.getId()).collect(Collectors.toList())));
|
||||
List<ZtTask> tList = this.taskService.list(new QueryWrapper<ZtTask>().lambda()
|
||||
.select(SFunctionColums.taskColumes())
|
||||
.in(ZtTask::getStory, list.stream().map(o -> o.getId()).collect(Collectors.toList())));
|
||||
if(CollectionUtils.isEmpty(tList)){
|
||||
return new HashMap<>();
|
||||
}else{
|
||||
@ -984,6 +1037,10 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.KFWC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null,
|
||||
StringUtils.isEmpty(finishBy) ? RiskUserThreadLocal.get().getName() : finishBy, null, "");
|
||||
|
||||
//需求完成通知测试
|
||||
this.vxService.sendMessageToVx(ztStory.getAssignedTo(), VxMessageUtils.storyMessage.finishedStory(id), new Date());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1689,6 +1746,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
@Override
|
||||
public void assignedTo(ZtStoryDTO dto) {
|
||||
ZtStory ztStory = this.baseMapper.selectById(dto.getId());
|
||||
String oldAssignedTo = ztStory.getAssignedTo();
|
||||
if (ztStory == null) {
|
||||
throw new BusinessException("未查询到");
|
||||
}
|
||||
@ -1701,6 +1759,8 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.FP, ztStory.getId(), ztStory.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo());
|
||||
storySendZpMessage(ztStory.getId(),oldAssignedTo,ztStory.getAssignedTo());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -2011,6 +2071,27 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
d.setVerify(ztStoryspec.getVerify());
|
||||
}
|
||||
|
||||
|
||||
ZtStoryCase ztStoryCase = this.storyCaseService.getOne(new QueryWrapper<ZtStoryCase>().lambda().eq(ZtStoryCase::getStory, d.getId()));
|
||||
if(ztStoryCase!=null){
|
||||
ZtStoryCaseDTO ztStoryCaseDTO=new ZtStoryCaseDTO();
|
||||
BeanUtils.copyProperties(ztStoryCase,ztStoryCaseDTO);
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getOpenedUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setOpenedUserName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getUpdateUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setUpdateUserName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(ztStoryCaseDTO.getPsUser());
|
||||
if(ztUser!=null){
|
||||
ztStoryCaseDTO.setPsUserName(ztUser.getNickname());
|
||||
}
|
||||
d.setCaseInfo(ztStoryCaseDTO);
|
||||
}
|
||||
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
|
@ -15,10 +15,7 @@ import com.sa.zentao.qo.KanbanQo;
|
||||
import com.sa.zentao.qo.ZtProjectQo;
|
||||
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.KanBanConstant;
|
||||
import com.sa.zentao.utils.SFunctionColums;
|
||||
import com.sa.zentao.utils.*;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@ -152,7 +149,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
ZtTaskDTO ztTaskDTO = new ZtTaskDTO();
|
||||
ztTaskDTO.setApprovalStatus(dto.getApprovalStatus());
|
||||
ztTaskDTO.setApprovalRemark(dto.getApprovalRemark());
|
||||
BeanUtils.copyProperties(t,ztTaskDTO);
|
||||
BeanUtils.copyProperties(t, ztTaskDTO);
|
||||
this.approval(ztTaskDTO);
|
||||
}
|
||||
}
|
||||
@ -161,7 +158,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
public List<ZtTaskDTO> myTaskList(ZtProjectQo qo) {
|
||||
|
||||
List<Integer> pList = this.ztProjectService.authProductList();
|
||||
if(CollectionUtils.isEmpty(pList)){
|
||||
if (CollectionUtils.isEmpty(pList)) {
|
||||
return Arrays.asList();
|
||||
}
|
||||
|
||||
@ -169,8 +166,8 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
List<ZtTask> taskList = this.baseMapper.selectList(new QueryWrapper<ZtTask>().lambda()
|
||||
.select(SFunctionColums.taskColumes())
|
||||
.in(ZtTask::getProduct, pList)
|
||||
.notIn(ZtTask::getStatus, Arrays.asList("closed","cancel","done") )
|
||||
.and(o->o.eq(ZtTask::getOpenedby, RiskUserThreadLocal.get().getName())
|
||||
.notIn(ZtTask::getStatus, Arrays.asList("closed", "cancel", "done"))
|
||||
.and(o -> o.eq(ZtTask::getOpenedby, RiskUserThreadLocal.get().getName())
|
||||
.or().eq(ZtTask::getAssignedTo, RiskUserThreadLocal.get().getName()))
|
||||
|
||||
.orderByDesc(ZtTask::getDeadline)
|
||||
@ -223,9 +220,9 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
dto.setImplementName(project.getName());
|
||||
}
|
||||
Integer story = dto.getStory();
|
||||
if(story!=null&&story!=0){
|
||||
if (story != null && story != 0) {
|
||||
ZtStory ztStory = this.storyService.getById(story);
|
||||
if(ztStory!=null){
|
||||
if (ztStory != null) {
|
||||
dto.setStoryName(ztStory.getTitle());
|
||||
}
|
||||
}
|
||||
@ -246,15 +243,15 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (ztUser != null) {
|
||||
dto.setFinishedbyName(ztUser.getNickname());
|
||||
|
||||
}
|
||||
}
|
||||
ztUser = userMap.get(ztTask.getClosedby());
|
||||
if (ztUser != null) {
|
||||
dto.setClosedbyName(ztUser.getNickname());
|
||||
}
|
||||
Integer feedback = ztTask.getFeedback();
|
||||
if(feedback!=null&&feedback!=0){
|
||||
if (feedback != null && feedback != 0) {
|
||||
ZtStoryFeedback ztStoryFeedback = this.storyFeedbackService.getById(feedback);
|
||||
if(ztStoryFeedback!=null){
|
||||
if (ztStoryFeedback != null) {
|
||||
dto.setFeedbackSpec(ztStoryFeedback.getSpec());
|
||||
}
|
||||
}
|
||||
@ -264,51 +261,51 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
List<ZtBug> list = this.bugService.list(new QueryWrapper<ZtBug>().lambda().eq(ZtBug::getTotask, id));
|
||||
|
||||
if(!CollectionUtils.isEmpty(list)){
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
List<ZtBugDTO> ztBugDTOS = BeanCopyUtil.copyListProperties(list, ZtBugDTO::new);
|
||||
for (ZtBugDTO bug:ztBugDTOS) {
|
||||
for (ZtBugDTO bug : ztBugDTOS) {
|
||||
ztUser = userMap.get(bug.getOpenedby());
|
||||
if(ztUser!=null){
|
||||
if (ztUser != null) {
|
||||
bug.setOpenedbyName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(bug.getAssignedTo());
|
||||
|
||||
if(ztUser!=null){
|
||||
if (ztUser != null) {
|
||||
bug.setAssignedToName(ztUser.getNickname());
|
||||
}
|
||||
|
||||
ztUser = userMap.get(bug.getResolvedby());
|
||||
if(ztUser!=null){
|
||||
if (ztUser != null) {
|
||||
bug.setResolvedbyName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(bug.getYsUser());
|
||||
if(ztUser!=null){
|
||||
if (ztUser != null) {
|
||||
bug.setYsUserName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(bug.getLasteditedby());
|
||||
if(ztUser!=null){
|
||||
if (ztUser != null) {
|
||||
bug.setLasteditedbyName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(bug.getClosedby());
|
||||
if(ztUser!=null){
|
||||
if (ztUser != null) {
|
||||
bug.setClosedbyName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(bug.getLasteditedby());
|
||||
if(ztUser!=null){
|
||||
if (ztUser != null) {
|
||||
bug.setLasteditedbyName(ztUser.getNickname());
|
||||
}
|
||||
|
||||
|
||||
if(bug.getDeadline()!=null){
|
||||
if (bug.getDeadline() != null) {
|
||||
bug.setDeadline(DateUtils.getDayLast(bug.getDeadline()));
|
||||
}
|
||||
}
|
||||
dto.setBugList(ztBugDTOS);
|
||||
}else{
|
||||
} else {
|
||||
dto.setBugList(Arrays.asList());
|
||||
}
|
||||
ZtProduct ztProduct = this.productService.getById(dto.getProduct());
|
||||
dto.setProductName(ztProduct==null?null:ztProduct.getName());
|
||||
dto.setProductName(ztProduct == null ? null : ztProduct.getName());
|
||||
return dto;
|
||||
}
|
||||
|
||||
@ -324,17 +321,15 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
@Override
|
||||
public List<ZtTask> taskListByEIdsAndDate(Date firstDayOfMonth, Date lastDayOfMonth, List<Integer> pids) {
|
||||
if(CollectionUtils.isEmpty(pids)){
|
||||
if (CollectionUtils.isEmpty(pids)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
if(firstDayOfMonth==null||lastDayOfMonth==null){
|
||||
if (firstDayOfMonth == null || lastDayOfMonth == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<ZtTask> taskList = this.list(new QueryWrapper<ZtTask>().lambda()
|
||||
.select(SFunctionColums.taskColumes())
|
||||
.in(ZtTask::getProduct, pids).and(f->f
|
||||
.and(o->o.ge(ZtTask::getDeadline,firstDayOfMonth).le(ZtTask::getDeadline,lastDayOfMonth))
|
||||
.or(e->e.ge(ZtTask::getFinishedDate,firstDayOfMonth).le(ZtTask::getFinishedDate,lastDayOfMonth))));
|
||||
.ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth));
|
||||
|
||||
// return this.baseMapper.taskListByPIdsAndDate(pids,firstDayOfMonth,lastDayOfMonth);
|
||||
return taskList;
|
||||
@ -342,35 +337,35 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
@Override
|
||||
public List<ZtTask> getDelayTask(List<ZtTask> t) {
|
||||
if(CollectionUtils.isEmpty(t)){
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List delayList =new ArrayList();
|
||||
for (ZtTask task:t) {
|
||||
//完成延期
|
||||
if(task.getFinishedDate()!=null&&task.getFinishedDate().getTime()> DateUtils.getDayLast(task.getDeadline()).getTime()){
|
||||
delayList.add(task);
|
||||
}else{
|
||||
if(task.getFinishedDate()==null){
|
||||
//直接完成任务等待审核不需要管
|
||||
if(task.getFinishedFlag()==1){
|
||||
//直接完成任务的不管
|
||||
}else{
|
||||
//当前时间大于预计完成时间
|
||||
if ( new Date().getTime()>DateUtils.getDayLast(task.getDeadline()).getTime()){
|
||||
delayList.add(task);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(t)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List delayList = new ArrayList();
|
||||
for (ZtTask task : t) {
|
||||
//完成延期
|
||||
if (task.getFinishedDate() != null && task.getFinishedDate().getTime() > DateUtils.getDayLast(task.getDeadline()).getTime()) {
|
||||
delayList.add(task);
|
||||
} else {
|
||||
if (task.getFinishedDate() == null) {
|
||||
//直接完成任务等待审核不需要管
|
||||
if (task.getFinishedFlag() == 1) {
|
||||
//直接完成任务的不管
|
||||
} else {
|
||||
//当前时间大于预计完成时间
|
||||
if (new Date().getTime() > DateUtils.getDayLast(task.getDeadline()).getTime()) {
|
||||
delayList.add(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return delayList;
|
||||
|
||||
}
|
||||
return delayList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ZtTask> getOnTimeTask(List<ZtTask> t) {
|
||||
if(CollectionUtils.isEmpty(t)){
|
||||
if (CollectionUtils.isEmpty(t)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return t.stream().filter(o -> o.getFinishedDate() != null
|
||||
@ -384,7 +379,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
@Override
|
||||
public List<ZtTask> taskListByStoryIds(List<Integer> sIds) {
|
||||
if(CollectionUtils.isEmpty(sIds)){
|
||||
if (CollectionUtils.isEmpty(sIds)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return this.baseMapper.taskListByStoryIds(sIds);
|
||||
@ -392,10 +387,10 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
@Override
|
||||
public List<ZtTask> getNormalTaskList(List<ZtTask> tList) {
|
||||
List<ZtTask> result=new ArrayList();
|
||||
List<ZtTask> result = new ArrayList();
|
||||
|
||||
for (ZtTask t:tList) {
|
||||
if(!"closed".equals(t.getStatus())&&!"cancel".equals(t.getStatus())){
|
||||
for (ZtTask t : tList) {
|
||||
if (!"closed".equals(t.getStatus()) && !"cancel".equals(t.getStatus())) {
|
||||
result.add(t);
|
||||
}
|
||||
}
|
||||
@ -410,35 +405,35 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
@Override
|
||||
public List<ZtTask> develTaskListByExecutions(Date firstDayOfMonth, Date lastDayOfMonth, List<Integer> eIds) {
|
||||
if(CollectionUtils.isEmpty(eIds)){
|
||||
if (CollectionUtils.isEmpty(eIds)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<ZtTeam> teamList = this.teamService.list(new QueryWrapper<ZtTeam>().lambda().in(ZtTeam::getRoot, eIds).eq(ZtTeam::getType, "execution"));
|
||||
if(CollectionUtils.isEmpty(teamList)){
|
||||
if (CollectionUtils.isEmpty(teamList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
Map<String, ZtUser> userMap = this.userService.userMapByIds(teamList.stream().map(o -> o.getAccount()).collect(Collectors.toList()));
|
||||
List<String> kfzList=new ArrayList<>();
|
||||
for (ZtTeam t:teamList) {
|
||||
List<String> kfzList = new ArrayList<>();
|
||||
for (ZtTeam t : teamList) {
|
||||
ZtUser ztUser = userMap.get(t.getAccount());
|
||||
if(ztUser!=null&&ztUser.getUserType()==UserType.KFZ){
|
||||
if (ztUser != null && ztUser.getUserType() == UserType.KFZ) {
|
||||
kfzList.add(ztUser.getAccount());
|
||||
}
|
||||
}
|
||||
if(CollectionUtils.isEmpty(kfzList)){
|
||||
if (CollectionUtils.isEmpty(kfzList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<ZtTask> taskList = this.list(new QueryWrapper<ZtTask>().lambda()
|
||||
.in(ZtTask::getExecution, eIds)
|
||||
.in(ZtTask::getAssignedTo,kfzList)
|
||||
.in(ZtTask::getExecution, eIds)
|
||||
.in(ZtTask::getAssignedTo, kfzList)
|
||||
);
|
||||
return taskList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ZtTask> multipleDepartProjectTeam(Date firstDayOfMonth, Date lastDayOfMonth) {
|
||||
return this.baseMapper.multipleDepartProjectTeam(firstDayOfMonth,lastDayOfMonth);
|
||||
return this.baseMapper.multipleDepartProjectTeam(firstDayOfMonth, lastDayOfMonth);
|
||||
}
|
||||
|
||||
|
||||
@ -484,9 +479,9 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
String[] split = qo.getIds().split(",");
|
||||
qo.setObjIds(new ArrayList<>(Arrays.asList(split)));
|
||||
}
|
||||
if(qo.getProductId()!=null&&qo.getProductId()!=0){
|
||||
if (qo.getProductId() != null && qo.getProductId() != 0) {
|
||||
qo.setProductIds(Arrays.asList(qo.getProductId()));
|
||||
}else{
|
||||
} else {
|
||||
|
||||
qo.setProductIds(pids);
|
||||
}
|
||||
@ -539,10 +534,10 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (story != null && story != 0) {
|
||||
ZtStory ztStory = this.storyService.getById(story);
|
||||
// wait 初始化 projected 已立项 developing 研发中 developed 研发完毕 testing 测试中 tested
|
||||
if(!Arrays.asList("wait","projected","developing","developed","testing","tested").contains(ztStory.getStage())){
|
||||
if (!Arrays.asList("wait", "projected", "developing", "developed", "testing", "tested").contains(ztStory.getStage())) {
|
||||
throw new BusinessException("当前状态无法添加任务");
|
||||
}
|
||||
if(ztStory.getStatus().equals("closed")){
|
||||
if (ztStory.getStatus().equals("closed")) {
|
||||
throw new BusinessException("已关闭的需求无法拆分任务");
|
||||
}
|
||||
ztStory.setTaskCount(ztStory.getTaskCount() + 1);
|
||||
@ -594,22 +589,22 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (ztProjectproduct != null) {
|
||||
ztTask.setProduct(ztProjectproduct.getProduct());
|
||||
}
|
||||
if(dto.getFinishedFlag()==null||dto.getFinishedFlag()==0){
|
||||
if (dto.getFinishedFlag() == null || dto.getFinishedFlag() == 0) {
|
||||
//不完成任务
|
||||
dto.setApplyDate(null);
|
||||
}else{
|
||||
} else {
|
||||
//完成修补数据
|
||||
ztTask.setRealstarted(new Date(ztTask.getApplyDate().getTime()-ztTask.getUseTime()
|
||||
.multiply(BigDecimal.valueOf(60*60*1000)).longValue()));
|
||||
ztTask.setRealstarted(new Date(ztTask.getApplyDate().getTime() - ztTask.getUseTime()
|
||||
.multiply(BigDecimal.valueOf(60 * 60 * 1000)).longValue()));
|
||||
ztTask.setEstStarted(ztTask.getRealstarted());
|
||||
ztTask.setDeadline(new Date(DateUtils.getDayEndDate(ztTask.getApplyDate()).getTime()-1000*60*5));
|
||||
ztTask.setDeadline(new Date(DateUtils.getDayEndDate(ztTask.getApplyDate()).getTime() - 1000 * 60 * 5));
|
||||
ztTask.setEstimate(ztTask.getUseTime().floatValue());
|
||||
ztTask.setLeft(ztTask.getUseTime().floatValue());
|
||||
}
|
||||
|
||||
this.baseMapper.insert(ztTask);
|
||||
if("wait".equals(ztTask.getStatus())){
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),false);
|
||||
if ("wait".equals(ztTask.getStatus())) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(), null, TaskType.transferType(ztTask.getType()), false);
|
||||
}
|
||||
|
||||
fileService.updateFile(dto.getFiles(), ztTask.getId(), FileTypes.task);
|
||||
@ -622,12 +617,12 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
actionService.addAction(ActionType.RW, ActionStatus.XJ, ztTask.getId()
|
||||
, projectproduct == null ? null : projectproduct.getProduct().toString(), projectproduct == null ? null : projectproduct.getProject(), ztTask.getExecution(),
|
||||
RiskUserThreadLocal.get().getName(),"", null);
|
||||
RiskUserThreadLocal.get().getName(), "", null);
|
||||
|
||||
|
||||
if(dto.getFinishedFlag()!=null&&dto.getFinishedFlag()==1){
|
||||
if (dto.getFinishedFlag() != null && dto.getFinishedFlag() == 1) {
|
||||
//如果选了完成并且不需要审核那么直接完成
|
||||
if((userType==UserType.XMGLY||userType==UserType.GSGC)&&!ztTask.getStatus().equals("draft")){
|
||||
if ((userType == UserType.XMGLY || userType == UserType.GSGC) && !ztTask.getStatus().equals("draft")) {
|
||||
dto.setId(ztTask.getId());
|
||||
dto.setConsumed(ztTask.getUseTime().floatValue());
|
||||
dto.setLeft(ztTask.getUseTime().floatValue());
|
||||
@ -636,6 +631,13 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
}
|
||||
|
||||
ZtProject ztProject = this.ztProjectService.getById(ztTask.getExecution());
|
||||
if (ztTask.getStatus().equals("reviewing")) {
|
||||
taskSendPsMessage(ztTask.getId(), null, ztProject.getPm());
|
||||
}
|
||||
taskSendZpMessage(ztTask.getId(), null, ztTask.getAssignedTo());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -645,12 +647,13 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (ztTask == null) {
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
String oldAssignedTo = ztTask.getAssignedTo();
|
||||
Integer s1 = ztTask.getStory();
|
||||
Integer s2 = dto.getStory();
|
||||
|
||||
|
||||
//cancel取消 closed 关闭 done
|
||||
if(Arrays.asList("cancel","closed","done").contains(ztTask.getStatus())){
|
||||
if (Arrays.asList("cancel", "closed", "done").contains(ztTask.getStatus())) {
|
||||
throw new BusinessException("当前无法编辑");
|
||||
}
|
||||
String desc = ztTask.getDesc();
|
||||
@ -667,12 +670,12 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
UserType userType = RiskUserThreadLocal.get().getUserType();
|
||||
|
||||
if (dto.getDraftFlag() != null && dto.getDraftFlag() == 1) {
|
||||
if(status.equals("wait")){
|
||||
if (status.equals("wait")) {
|
||||
throw new BusinessException("开始后不可以存为草稿");
|
||||
}
|
||||
ztTask.setStatus("draft");
|
||||
}else{
|
||||
if(status.equals("draft")){
|
||||
} else {
|
||||
if (status.equals("draft")) {
|
||||
//如果是开发人员 需要评审
|
||||
|
||||
if (userType == UserType.KFZ) {
|
||||
@ -683,11 +686,11 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
ztTask.setStatus("wait");
|
||||
ztTask.setReviewingUser(null);
|
||||
}
|
||||
}else if (status.equals("wait")){
|
||||
} else if (status.equals("wait")) {
|
||||
ztTask.setStatus("wait");
|
||||
}else if (status.equals("doing")){
|
||||
} else if (status.equals("doing")) {
|
||||
ztTask.setStatus("doing");
|
||||
}else{
|
||||
} else {
|
||||
ztTask.setStatus("reviewing");
|
||||
ZtProject ztProject = this.ztProjectService.getById(ztTask.getExecution());
|
||||
ztTask.setReviewingUser(ztProject.getPm());
|
||||
@ -695,25 +698,25 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
|
||||
}
|
||||
if(dto.getFinishedFlag()==null||dto.getFinishedFlag()==0){
|
||||
if (dto.getFinishedFlag() == null || dto.getFinishedFlag() == 0) {
|
||||
//不完成任务
|
||||
}else{
|
||||
} else {
|
||||
//完成修补数据
|
||||
ztTask.setRealstarted(new Date(ztTask.getApplyDate().getTime()-ztTask.getUseTime()
|
||||
.multiply(BigDecimal.valueOf(60*60*1000)).longValue()));
|
||||
ztTask.setRealstarted(new Date(ztTask.getApplyDate().getTime() - ztTask.getUseTime()
|
||||
.multiply(BigDecimal.valueOf(60 * 60 * 1000)).longValue()));
|
||||
ztTask.setEstStarted(ztTask.getRealstarted());
|
||||
ztTask.setDeadline(new Date(DateUtils.getDayEndDate(ztTask.getApplyDate()).getTime()-1000*60*5));
|
||||
ztTask.setDeadline(new Date(DateUtils.getDayEndDate(ztTask.getApplyDate()).getTime() - 1000 * 60 * 5));
|
||||
ztTask.setEstimate(ztTask.getUseTime().floatValue());
|
||||
ztTask.setLeft(ztTask.getUseTime().floatValue());
|
||||
}
|
||||
|
||||
this.baseMapper.updateById(ztTask);
|
||||
if(ObjectUtils.notEqual(s1,s2)){
|
||||
if(s1!=null&&s1.intValue()!=0){
|
||||
this.storyService.taskFinishChangeStatus(s1,null,TaskType.transferType(ztTask.getType()),true);
|
||||
if (ObjectUtils.notEqual(s1, s2)) {
|
||||
if (s1 != null && s1.intValue() != 0) {
|
||||
this.storyService.taskFinishChangeStatus(s1, null, TaskType.transferType(ztTask.getType()), true);
|
||||
}
|
||||
if(s2!=null&&s2.intValue()!=0){
|
||||
this.storyService.taskFinishChangeStatus(s2,null,TaskType.transferType(ztTask.getType()),false);
|
||||
if (s2 != null && s2.intValue() != 0) {
|
||||
this.storyService.taskFinishChangeStatus(s2, null, TaskType.transferType(ztTask.getType()), false);
|
||||
}
|
||||
|
||||
}
|
||||
@ -738,6 +741,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
RiskUserThreadLocal.get().getName(), dto.getRemark(), null);
|
||||
}
|
||||
}
|
||||
taskSendZpMessage(ztTask.getId(), oldAssignedTo, ztTask.getAssignedTo());
|
||||
|
||||
|
||||
}
|
||||
@ -752,10 +756,10 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
String name = RiskUserThreadLocal.get().getName();
|
||||
|
||||
ZtTask ztTask = this.baseMapper.selectById(dto.getId());
|
||||
if(StringUtils.isEmpty(ztTask.getAssignedTo())){
|
||||
if (StringUtils.isEmpty(ztTask.getAssignedTo())) {
|
||||
throw new BusinessException("未指派任务无法开始");
|
||||
}
|
||||
if(!ztTask.getAssignedTo().equals(name)){
|
||||
if (!ztTask.getAssignedTo().equals(name)) {
|
||||
throw new BusinessException("无法开始");
|
||||
}
|
||||
String status = ztTask.getStatus();
|
||||
@ -767,9 +771,9 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (dto.getFinishedFlag() == 0) {
|
||||
ztTask.setStatus("doing");
|
||||
} else {
|
||||
if(ztTask.getFinishedFlag()!=null&&ztTask.getFinishedFlag()==1){
|
||||
if (ztTask.getFinishedFlag() != null && ztTask.getFinishedFlag() == 1) {
|
||||
ztTask.setFinishedDate(ztTask.getApplyDate());
|
||||
}else{
|
||||
} else {
|
||||
ztTask.setFinishedDate(new Date());
|
||||
}
|
||||
ztTask.setStatus("done");
|
||||
@ -781,14 +785,14 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
ztTask.setLastediteddate(new Date());
|
||||
ztTask.setConsumed(dto.getConsumed());
|
||||
ztTask.setLeft(dto.getLeft() - dto.getConsumed());
|
||||
if(ztTask.getLeft()<0){
|
||||
if (ztTask.getLeft() < 0) {
|
||||
ztTask.setLeft(0f);
|
||||
}
|
||||
this.baseMapper.updateById(ztTask);
|
||||
if(ztTask.getFeedback()!=null&&ztTask.getFeedback()!=0){
|
||||
if("doing".equals(ztTask.getStatus())){
|
||||
if (ztTask.getFeedback() != null && ztTask.getFeedback() != 0) {
|
||||
if ("doing".equals(ztTask.getStatus())) {
|
||||
this.storyFeedbackService.feedbackStart(ztTask.getFeedback());
|
||||
}else{
|
||||
} else {
|
||||
this.storyFeedbackService.feedbackFinished(ztTask.getFeedback());
|
||||
}
|
||||
|
||||
@ -838,24 +842,6 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
kanbanlaneService.changeStatus(qo);
|
||||
}
|
||||
}
|
||||
// if ("devel".equals(ztTask.getType())) {
|
||||
//处理需求
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),false);
|
||||
// if ("done".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.devel,false);
|
||||
// } else if ("doing".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.devel,false);
|
||||
// }
|
||||
// }
|
||||
// if ("test".equals(ztTask.getType())) {
|
||||
// //处理需求
|
||||
// if ("done".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// } else if ("doing".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
Integer execution = ztTask.getExecution();
|
||||
@ -864,25 +850,28 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
project.setStatus("doing");
|
||||
this.ztProjectService.updateById(project);
|
||||
}
|
||||
if (dto.getFinishedFlag() == 1) {
|
||||
String type = ztTask.getType();
|
||||
if (ztTask.getStory() != null && ztTask.getStory() != 0) {
|
||||
// if ("test".equals(type)) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// } else if ("devel".equals(type)) {
|
||||
// //开发
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// }
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(type),false);
|
||||
}
|
||||
}
|
||||
// if (dto.getFinishedFlag() == 1) {
|
||||
// String type = ztTask.getType();
|
||||
// if (ztTask.getStory() != null && ztTask.getStory() != 0) {
|
||||
//// if ("test".equals(type)) {
|
||||
//// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
//// } else if ("devel".equals(type)) {
|
||||
//// //开发
|
||||
//// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
//// }
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(), null, TaskType.transferType(type), false);
|
||||
// }
|
||||
// }else{
|
||||
//
|
||||
// }
|
||||
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(), null, TaskType.transferType(ztTask.getType()), false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void finishTask(ZtTaskDTO dto,String finishBy) {
|
||||
public void finishTask(ZtTaskDTO dto, String finishBy) {
|
||||
ZtTask ztTask = this.baseMapper.selectById(dto.getId());
|
||||
if ("done".equalsIgnoreCase(ztTask.getStatus())) {
|
||||
throw new BusinessException("未查询到数据");
|
||||
@ -891,10 +880,10 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
ztTask.setLeft(ztTask.getEstimate() - ztTask.getConsumed());
|
||||
ztTask.setLeft(0f);
|
||||
ztTask.setStatus("done");
|
||||
if(ztTask.getFinishedFlag()!=null&&ztTask.getFinishedFlag()==1){
|
||||
if (ztTask.getFinishedFlag() != null && ztTask.getFinishedFlag() == 1) {
|
||||
ztTask.setFinishedDate(ztTask.getApplyDate());
|
||||
ztTask.setFinishedby(ztTask.getAssignedTo());
|
||||
}else{
|
||||
} else {
|
||||
ztTask.setFinishedby(RiskUserThreadLocal.get().getName());
|
||||
ztTask.setFinishedDate(new Date());
|
||||
}
|
||||
@ -909,13 +898,13 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
e.setObjectid(ztTask.getId());
|
||||
e.setLeft(0F);
|
||||
e.setConsumed(dto.getConsumed());
|
||||
e.setAccount(StringUtils.isEmpty(finishBy)?RiskUserThreadLocal.get().getName():finishBy);
|
||||
e.setAccount(StringUtils.isEmpty(finishBy) ? RiskUserThreadLocal.get().getName() : finishBy);
|
||||
this.effortService.add(e);
|
||||
|
||||
//添加action
|
||||
ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda().eq(ZtProjectproduct::getProject, ztTask.getProject()));
|
||||
actionService.addAction(ActionType.RW, ActionStatus.WC, dto.getId(), projectproduct == null ? null : projectproduct.getProduct().toString(), projectproduct == null ? null : projectproduct.getProject(), ztTask.getExecution(),
|
||||
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 (StringUtils.isEmpty(dto.getTabType())) {
|
||||
// KanbanQo qo = new KanbanQo();
|
||||
@ -929,7 +918,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
// //查
|
||||
// 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 {
|
||||
KanbanQo qo = new KanbanQo();
|
||||
qo.setStatusType(dto.getStatusType());
|
||||
@ -950,7 +939,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
// devel 开发 request 需求 test
|
||||
String type = ztTask.getType();
|
||||
if (ztTask.getStory() != null && ztTask.getStory() != 0) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy,TaskType.transferType(type),false);
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(), finishBy, TaskType.transferType(type), false);
|
||||
// if ("test".equals(type)) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy,TaskType.test);
|
||||
// } else if ("devel".equals(type)) {
|
||||
@ -958,7 +947,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy,TaskType.devel);
|
||||
// }
|
||||
}
|
||||
if(ztTask.getFeedback()!=null&&ztTask.getFeedback()!=0){
|
||||
if (ztTask.getFeedback() != null && ztTask.getFeedback() != 0) {
|
||||
this.storyFeedbackService.feedbackFinished(ztTask.getFeedback());
|
||||
}
|
||||
|
||||
@ -995,7 +984,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
kanbanlaneService.changeStatus(qo);
|
||||
}
|
||||
}
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),true);
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(), null, TaskType.transferType(ztTask.getType()), true);
|
||||
|
||||
|
||||
}
|
||||
@ -1008,7 +997,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if ("cancel".equalsIgnoreCase(ztTask.getStatus())) {
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
if("done".equals(status)||"closed".equals(status)){
|
||||
if ("done".equals(status) || "closed".equals(status)) {
|
||||
throw new BusinessException("当前状态无法取消");
|
||||
}
|
||||
ztTask.setLeft(0f);
|
||||
@ -1028,7 +1017,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (ztTask.getExecution() != null && ztTask.getExecution() != 0) {
|
||||
if (StringUtils.isEmpty(dto.getTabType())) {
|
||||
|
||||
kanbanlaneService.changeStatus(ztTask.getExecution(),ztTask.getId(),"task","canceled");
|
||||
kanbanlaneService.changeStatus(ztTask.getExecution(), ztTask.getId(), "task", "canceled");
|
||||
} else {
|
||||
KanbanQo qo = new KanbanQo();
|
||||
qo.setStatusType(dto.getStatusType());
|
||||
@ -1039,12 +1028,11 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
kanbanlaneService.changeStatus(qo);
|
||||
}
|
||||
}
|
||||
if(ztTask.getStory()!=null&&ztTask.getStory()!=0){
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),true);
|
||||
if (ztTask.getStory() != null && ztTask.getStory() != 0) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(), null, TaskType.transferType(ztTask.getType()), true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1072,11 +1060,11 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
List<ZtTask> saveList = new ArrayList();
|
||||
|
||||
List<Integer> storyList = list.stream().filter(o -> o.getStory() != null && o.getStory() != 0).map(o -> o.getStory()).collect(Collectors.toList());
|
||||
if(!CollectionUtils.isEmpty(storyList)){
|
||||
if (!CollectionUtils.isEmpty(storyList)) {
|
||||
List<ZtStory> sList = this.storyService.listByIds(storyList);
|
||||
List<ZtStory> closedStoryList = sList.stream().filter(o -> o.getStatus().equals("closed")).collect(Collectors.toList());
|
||||
if(!CollectionUtils.isEmpty(closedStoryList)){
|
||||
throw new BusinessException(closedStoryList.get(0).getTitle()+"已关闭");
|
||||
if (!CollectionUtils.isEmpty(closedStoryList)) {
|
||||
throw new BusinessException(closedStoryList.get(0).getTitle() + "已关闭");
|
||||
}
|
||||
}
|
||||
for (ZtTaskDTO d : list) {
|
||||
@ -1115,9 +1103,14 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
|
||||
this.saveBatch(saveList);
|
||||
for (ZtTask ztTask:saveList) {
|
||||
if(!ztTask.getStatus().equals("reviewing")){
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),false);
|
||||
ZtProject ztProject = this.ztProjectService.getById(saveList.get(0).getExecution());
|
||||
for (ZtTask ztTask : saveList) {
|
||||
if (!ztTask.getStatus().equals("reviewing")) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(), null, TaskType.transferType(ztTask.getType()), false);
|
||||
taskSendZpMessage(ztTask.getId(), null, ztProject.getPm());
|
||||
} else {
|
||||
taskSendPsMessage(ztTask.getId(), ztProject.getPm(),ztTask.getOpenedby());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1144,20 +1137,18 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
|
||||
LoginRiskUser loginRiskUser = RiskUserThreadLocal.get();
|
||||
if(loginRiskUser==null){
|
||||
if (loginRiskUser == null) {
|
||||
throw new BusinessException("请登录");
|
||||
}
|
||||
String account = loginRiskUser.getName();
|
||||
|
||||
|
||||
|
||||
|
||||
ZtTask t = this.baseMapper.selectById(dto.getId());
|
||||
|
||||
if (!t.getStatus().equals("reviewing")) {
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
if(!account.equals(t.getReviewingUser())){
|
||||
if (!account.equals(t.getReviewingUser())) {
|
||||
throw new BusinessException("当前无法评审");
|
||||
}
|
||||
if (dto.getApprovalStatus() == 1) {
|
||||
@ -1178,7 +1169,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda().eq(ZtProjectproduct::getProject, t.getProject()));
|
||||
this.baseMapper.updateById(t);
|
||||
if (dto.getApprovalStatus() == 1) {
|
||||
this.storyService.taskFinishChangeStatus(t.getStory(),t.getAssignedTo(),TaskType.transferType(t.getType()),false);
|
||||
this.storyService.taskFinishChangeStatus(t.getStory(), t.getAssignedTo(), TaskType.transferType(t.getType()), false);
|
||||
actionService.addAction(ActionType.RW, ActionStatus.PSTG, t.getId(), projectproduct == null ? null : projectproduct.getProduct().toString(), projectproduct == null ? null : projectproduct.getProject(), t.getExecution(),
|
||||
RiskUserThreadLocal.get().getName(), dto.getApprovalRemark(), null);
|
||||
|
||||
@ -1189,25 +1180,22 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
|
||||
if (dto.getApprovalStatus() == 1) {
|
||||
if(t.getFinishedFlag()!=null&&t.getFinishedFlag()==1){
|
||||
if (t.getFinishedFlag() != null && t.getFinishedFlag() == 1) {
|
||||
dto.setConsumed(t.getEstimate());
|
||||
dto.setRealstarted(t.getRealstarted());
|
||||
dto.setFinishedDate(t.getApplyDate());
|
||||
this.finishTask(dto,t.getAssignedTo());
|
||||
this.finishTask(dto, t.getAssignedTo());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<ZtTaskDTO> taskListByExecution(ZtTaskDTO dto) {
|
||||
LambdaQueryWrapper<ZtTask> eq = new QueryWrapper<ZtTask>().lambda();
|
||||
|
||||
eq.select(SFunctionColums.taskColumes());
|
||||
if (dto.getExecution() != null) {
|
||||
eq.eq(ZtTask::getExecution, dto.getExecution());
|
||||
}
|
||||
@ -1224,5 +1212,22 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private VxService vxService;
|
||||
|
||||
private void taskSendZpMessage(Integer id, String oldUser, String newUser) {
|
||||
if (ObjectUtils.notEqual(oldUser, newUser) && !StringUtils.isEmpty(newUser)) {
|
||||
ZtTask ztTask = this.baseMapper.selectById(id);
|
||||
if (!ztTask.getOpenedby().equals(newUser)) {
|
||||
this.vxService.sendMessageToVx(newUser, VxMessageUtils.taskMessage.assignToMessage(id), new Date());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void taskSendPsMessage(Integer id, String newUser, String openUser) {
|
||||
if (!StringUtils.isEmpty(newUser)) {
|
||||
// ZtUser u = this.userService.getByAccount(openUser);
|
||||
// this.vxService.sendMessageToVx(newUser, VxMessageUtils.taskMessage.psMessage(u.getNickname(), id), new Date());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package com.sa.zentao.utils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import com.sa.zentao.dao.ZtStoryCaseDTO;
|
||||
import com.sa.zentao.entity.ZtStoryCase;
|
||||
import com.sa.zentao.entity.ZtStoryFeedback;
|
||||
import com.sa.zentao.entity.ZtTask;
|
||||
|
||||
@ -29,9 +31,36 @@ public class SFunctionColums {
|
||||
result.add(ZtTask::getDeadline);
|
||||
result.add(ZtTask::getCloseddate);
|
||||
result.add(ZtTask::getClosedby);
|
||||
result.add(ZtTask::getStory);
|
||||
result.add(ZtTask::getFeedback);
|
||||
result.add(ZtTask::getExecution);
|
||||
result.add(ZtTask::getProject);
|
||||
result.add(ZtTask::getCanceledby);
|
||||
result.add(ZtTask::getCanceleddate);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static List<SFunction<ZtStoryCase, ?>> caseColumes(){
|
||||
List<SFunction<ZtStoryCase, ?>> result=new ArrayList<>();
|
||||
|
||||
|
||||
result.add(ZtStoryCase::getId);
|
||||
result.add(ZtStoryCase::getProduct);
|
||||
result.add(ZtStoryCase::getStory);
|
||||
result.add(ZtStoryCase::getStatus);
|
||||
result.add(ZtStoryCase::getOpenedDate);
|
||||
result.add(ZtStoryCase::getOpenedUser);
|
||||
result.add(ZtStoryCase::getUpdateDate);
|
||||
result.add(ZtStoryCase::getUpdateUser);
|
||||
result.add(ZtStoryCase::getPsUser);
|
||||
result.add(ZtStoryCase::getPsDate);
|
||||
result.add(ZtStoryCase::getExecution);
|
||||
result.add(ZtStoryCase::getProject);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static List<SFunction<ZtStoryFeedback, ?>> feedbackColumes(){
|
||||
List<SFunction<ZtStoryFeedback, ?>> result=new ArrayList<>();
|
||||
result.add(ZtStoryFeedback::getId);
|
||||
|
141
src/main/java/com/sa/zentao/utils/VxMessageUtils.java
Normal file
141
src/main/java/com/sa/zentao/utils/VxMessageUtils.java
Normal file
@ -0,0 +1,141 @@
|
||||
package com.sa.zentao.utils;
|
||||
|
||||
public class VxMessageUtils {
|
||||
|
||||
|
||||
public static class taskMessage{
|
||||
public static String assignToMessage(Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("任务分配提醒:项目经理分派了一个任务给您,任务编号{id},请及时处理。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",id.toString());
|
||||
return str;
|
||||
}
|
||||
public static String psMessage(String userName,Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("自建任务评审:{userName}自建了一个任务,任务编号{id},请及时评审。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{userName}",userName);
|
||||
str=str.replace("{id}",id.toString());
|
||||
return str;
|
||||
}
|
||||
public static String finish(String name,Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("当前有任务指派 id: {id} 任务名称:{name},请及时登录IT服务台处理");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",name);
|
||||
str=str.replace("{name}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class storyMessage{
|
||||
public static String assignToMessage(Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("需求指派提醒:项目经理指派了一个需求给您,需求编号{id},请及时处理。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
public static String finishedStory(Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("需求提测:需求编号{id},已经完成了开发,请及时测试。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static class storyFeedbackMessage{
|
||||
|
||||
public static String addSendMessage(String userName,Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("问题反馈提醒:需求部门{name}提交了问题反馈,编号{id}, 请及时处理。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",id.toString());
|
||||
str=str.replace("{name}",userName);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
public static String finishedFeedback(Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("问题反馈验收提醒:您提出的问题反馈已经处理完成,编号{id},请及时验收。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class feedbackMessage{
|
||||
public static String assignToMessage(String name,Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("当前有任务指派 id: {id} 任务名称:{name},请及时登录IT服务台处理");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",name);
|
||||
str=str.replace("{name}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
public static String finish(String name,Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("当前有任务指派 id: {id} 任务名称:{name},请及时登录IT服务台处理");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",name);
|
||||
str=str.replace("{name}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class bugMessage{
|
||||
public static String assignToMessage(Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("BUG修复提醒:测试人员提交了BUG给你,BUG编号{id},请及时修复。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
public static String bugFinished(Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("BUG复测提醒: 开发人员已经修复BUG, bug编号{id}, 请及时复测。");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class storyUserMessage{
|
||||
public static String assignToMessage(String name,Integer id){
|
||||
StringBuilder b=new StringBuilder();
|
||||
|
||||
b.append("当前有任务指派 id: {id} 任务名称:{name},请及时登录IT服务台处理");
|
||||
String str = b.toString();
|
||||
str=str.replace("{id}",name);
|
||||
str=str.replace("{name}",id.toString());
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -53,12 +53,14 @@ file:
|
||||
#file:
|
||||
# baseUrl: http://127.0.0.1:8085
|
||||
vx:
|
||||
token: vTniTyOG4csBmAnMr
|
||||
encodingAesKey : gCmhw7vKLcZwsDszILPNSEqyjgRKODemkYmRFdfelmk
|
||||
receiveid: wwa7cc4743271d6055
|
||||
corpid: wwa7cc4743271d6055
|
||||
corpsecret: qQNdRmtanymbshPOLgWTgB-TzX9QmNpVCpOx5suJ2xA
|
||||
dkCorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs
|
||||
salaryCorpsecretApp: ib0GyrjV573QdczASCeB-QmCsp0t_QpjsbnQwKBr-Os
|
||||
token: DGkygyJELpIY2
|
||||
encodingAesKey: Pp2D1vttrxVMoTzocD1SukkRe3IYXQjW5nuOjvc2JRE
|
||||
receiveid: ww0b2dc90421854148
|
||||
corpid: ww0b2dc90421854148
|
||||
corpsecret: LRVwfc11K-JQS2nJC8xTPrZLBKmMRZ7nPyGchsVfKF4
|
||||
# salaryCorpsecretApp: KlE8J0rMS3W8Hprztl_EnCfAonm34mPpS1B6vaOmzBc
|
||||
salaryCorpsecretApp: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU
|
||||
salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send
|
||||
dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs
|
||||
dkcorpsecret: fMf4nGnkpcYMHq0JzEXx-LcyGvgoxX-DbbCjIjaHqZ0
|
||||
|
||||
# dkcorpsecret: biYcz9e1gIJSsAaTgCZXbcO8Vh9YT11JtaFeZPaPmtU #书籍
|
17
src/main/resources/mapper/ZtStoryCaseMapper.xml
Normal file
17
src/main/resources/mapper/ZtStoryCaseMapper.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.sa.zentao.mapper.ZtStoryCaseMapper">
|
||||
<resultMap id="BaseResultMap" type="com.sa.zentao.entity.ZtStoryCase">
|
||||
<result column="id" property="id" />
|
||||
<result column="remark" property="remark" />
|
||||
<result column="story" property="story" />
|
||||
<result column="opened_date" property="openedDate" />
|
||||
<result column="opened_user" property="openedUser" />
|
||||
<result column="update_date" property="updateDate" />
|
||||
<result column="update_user" property="updateUser" />
|
||||
<result column="ps_user" property="psUser" />
|
||||
<result column="ps_date" property="psDate" />
|
||||
<result column="status" property="status" />
|
||||
</resultMap>
|
||||
|
||||
</mapper>
|
@ -96,7 +96,9 @@
|
||||
<if test="qo.searchVal == 'ZGW' ">
|
||||
and s.assigned_to= #{qo.userName}
|
||||
</if>
|
||||
|
||||
<if test="qo.productId != null ">
|
||||
and s.product= #{qo.productId}
|
||||
</if>
|
||||
|
||||
<if test="qo.searchVal == 'YGB' ">
|
||||
and s.status = 'closed'
|
||||
|
Reference in New Issue
Block a user