bug优化

This commit is contained in:
2025-02-18 09:13:28 +08:00
parent cbbc785b74
commit 462460ee72
27 changed files with 691 additions and 143 deletions

View File

@ -8,6 +8,7 @@ import com.sa.zentao.dao.Result;
import com.sa.zentao.dao.UploadDTO;
import com.sa.zentao.entity.ZtFile;
import com.sa.zentao.service.IZtFileService;
import com.sa.zentao.service.VxService;
import com.sa.zentao.utils.DateUtils;
import com.sa.zentao.utils.UploadUtil;
import jakarta.servlet.http.HttpServletRequest;
@ -105,6 +106,9 @@ public class CommonsController {
}
}
@PostMapping("/removeFile")
public Result removeFile( UploadDTO file){
ZtFile ztFile = this.fileService.getById(file.getId());
@ -125,11 +129,18 @@ public class CommonsController {
return Result.success(list);
}
@Autowired
VxService vxxervice;
@GetMapping("/test")
public Result<String> upload(){
downLoad("http://192.168.1.161:8088/file-download-1.html");
downLoad("http://192.168.1.161:8088/file-download-1.html");
vxxervice.sendMessageToVx("GuoQiBing","测试消息",new Date());
return Result.success();
}
@PostMapping("/downLoad")
@ -175,72 +186,77 @@ public class CommonsController {
public String downLoad(String u){
public ZtFile downLoad(String u){
String os = System.getProperty("os.name");
String path=null;
if (os.toLowerCase().startsWith("win")) { //如果是Windows系统
log.info("win");
path=windowsFilePath ;
}else{ //linux和mac系统
log.info("linux");
path=linuxFilePath+"/";
}
int i = u.lastIndexOf("?");
int i2 = u.lastIndexOf("/");
String uname = u.substring(i2+1, i);
downloadByIO(u,path,uname);
String ext = u.substring(u.lastIndexOf(".") + 1).toLowerCase();
StringBuffer buffername = new StringBuffer(u.substring(u.lastIndexOf("/")+1));
ZtFile f=new ZtFile();
f.setAddedby(RiskUserThreadLocal.get()==null?null:RiskUserThreadLocal.get().getName());
f.setAddeddate(new Date());
f.setDeleted("0");
f.setExtension(uname.substring(uname.lastIndexOf(".")+1, uname.length()));
f.setTitle(uname);
f.setSize(0);
f.setPathname(baseUrl+"/zentao/img/"+uname);
fileService.save(f);
return f;
}
URL url = null;
public static void downloadByIO(String url, String saveDir, String fileName) {
BufferedOutputStream bos = null;
InputStream is = null;
try {
url = new URL(u);
InputStream inputStream = url.openStream();
// byte[] buffer = new byte[1024];
// int len;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// while ((len = inputStream.read(buffer)) != -1) {
// outStream.write(buffer, 0, len);
// }
// byte[] buffer = new byte[1024];
// int len;
// String path="/data/"+"202407/03103347085011a0";
// FileInputStream fileInputStream = new FileInputStream(path);
// while ((len = fileInputStream.read(buffer)) != -1) {
// outStream.write(buffer, 0, len);
// }
// fileInputStream.close();
// 获取文件名
String fName = "1.png";
fName=fName.substring(fName.lastIndexOf("."),fName.length());
fName= DateUtils.formatDate(new Date(),"yyyyMMddHHmmss")+UUID.randomUUID().toString().replaceAll("-","")+fName;
// 获取文件的字节
byte[] bytes = outStream.toByteArray();
String p ="";
String os = System.getProperty("os.name");
if (os.toLowerCase().startsWith("win")) { //如果是Windows系统
log.info("win");
os=windowsFilePath +"\\";
}else{ //linux和mac系统
log.info("linux");
os=linuxFilePath+"/";
byte[] buff = new byte[8192];
is = new URL(url).openStream();
File file = new File(saveDir, fileName);
file.getParentFile().mkdirs();
bos = new BufferedOutputStream(new FileOutputStream(file));
int count = 0;
while ((count = is.read(buff)) != -1) {
bos.write(buff, 0, count);
}
// 使用文件名在服务器端创建文件
java.nio.file.Path path = java.nio.file.Paths.get(os + fName);
// 写入文件到服务器的指定目录
java.nio.file.Files.write(path, bytes);
String fileAbsolutePath =baseUrl+"/zentao/img/"+fName;
System.out.print(fileAbsolutePath);
outStream.close();
inputStream.close();
return fileAbsolutePath;
} catch (Exception e) {
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
public static void main(String[] args) {
String u ="http://file-gk.sinoassist.com:38888/group1/M00/95/9E/wKgDd2etgTmAcL-gABfjLU1YfoI166.jpg?date=2025-02-13";
int i = u.lastIndexOf("?");
int i2 = u.lastIndexOf("/");
String substring = u.substring(i2+1, i);
String uname="wKgDd2etgTmAcL-gABfjLU1YfoI166.jpg";
String substring1 = uname.substring(uname.lastIndexOf(".")+1, uname.length());
System.out.print(substring1);
}
}

View File

@ -79,6 +79,12 @@ public class ZtProductController {
public Result<PageInfo<ZtProjectDTO>> productList(@RequestBody ZtProjectQo qo){
return Result.success(ztProductService.productList(qo));
}
@RequestMapping(value = "/myProductList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<PageInfo<ZtProjectDTO>> myProductList(@RequestBody ZtProjectQo qo){
return Result.success(ztProductService.myProductList(qo));
}
@RequestMapping(value = "/productListByProductId", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<PageInfo<ZtProjectDTO>> productListByProductId(@RequestBody ZtProjectQo qo){
return Result.success(ztProductService.productListByProductId

View File

@ -324,4 +324,15 @@ public class ZtProjectController {
//迭代列表根据项目
@RequestMapping(value = "/projectProductByExecution", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result projectProductByExecution(@RequestBody ZtProjectQo qo){
ZtProjectDTO p = this.ztProjectService.projectProductByExecution(qo.getExecution());
return Result.success(p);
}
}

View File

@ -81,9 +81,9 @@ public class ZtUserController {
LambdaQueryWrapper<ZtUser> eq = new QueryWrapper<ZtUser>()
.lambda().eq(ZtUser::getDeleted, "0");
if(!StringUtils.isEmpty(dto.getName())){
eq.like(ZtUser::getAccount,dto.getName())
eq.and(e->e.like(ZtUser::getAccount,dto.getName())
.or().like(ZtUser::getNickname,dto.getName())
.or().like(ZtUser::getPinyin,dto.getName())
.or().like(ZtUser::getPinyin,dto.getName()))
;
}
if("execution".equals(dto.getType())){

View File

@ -215,8 +215,9 @@ public class ZtProjectDTO<T> implements Serializable {
private Integer productId;
private String productName;
//迭代id
private Integer excludeId;
private String executionName;
private List<String> teamList;

View File

@ -69,7 +69,7 @@ public class ZtReleaseDTO implements Serializable {
@TableField("createdBy")
private String createdby;
private String createdbyName;
@TableField("createdDate")
private Date createddate;
@ -97,5 +97,7 @@ public class ZtReleaseDTO implements Serializable {
private String releaseFailRemark;
private String releaseUser;
private List<ZtReleaseDetailsDTO> details;
}

View File

@ -40,6 +40,8 @@ public class ZtStoryFeedbackDTO implements Serializable {
*/
private String files;
private String urls;
private String openedBy;
private String openedByName;
@ -99,5 +101,4 @@ public class ZtStoryFeedbackDTO implements Serializable {
private String weixin;
private String urls;
}

View File

@ -0,0 +1,66 @@
package com.sa.zentao.entity;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author gqb
* @since 2023-03-03
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BaseSalaryToVxError implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 员工id
*/
private String staffNo;
/**
* 员工name
*/
private String staffName;
/**
* 错误时间
*/
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
private Date quitDate;
/**
* 错误时间
*/
@DateTimeFormat("yyyy-MM-dd")
private Date inquireDate;
/**
* 异常code
*/
private String errorCode;
/**
* 异常原因
*/
private String errorMsg;
/**
* 重试次数
*/
private Integer againCount;
/**
* 0正常 1.删除
*/
private Integer deleteFlag;
}

View File

@ -92,4 +92,6 @@ public class ZtRelease implements Serializable {
private String failRemark;
private String releaseFailRemark;
private String releaseUser;
}

View File

@ -44,4 +44,5 @@ public interface IZtProductService extends IService<ZtProduct> {
Map<Integer, ZtProduct> selectMapProduct();
List<ZtProductDTO> myProductList(ZtProjectQo qo);
}

View File

@ -111,4 +111,6 @@ public interface IZtProjectService extends IService<ZtProject> {
ZtProjectDTO selectPrdById(Integer project);
List<PerformanceDTO> performanceCount(Date startDate, Date endDate);
ZtProjectDTO projectProductByExecution(String execution);
}

View File

@ -0,0 +1,82 @@
package com.sa.zentao.service;
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.utils.HttpRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
public class VxService {
@Value("${vx.corpid}")
private static String corpid;
@Value("${vx.dkcorpsecret}")
private static String dkcorpsecret="1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs";
@Value("${vx.salaryCorpsecretApp}")
private static String salaryCorpsecretApp;
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 static String JSONPost(String url, Map<String, Object> map) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders requestHeaders = new HttpHeaders();
// 重点是配置请求头内容类型为:"application/json"
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, Object>> r = new HttpEntity<>(map, requestHeaders);
// 请求服务端添加玩家
return restTemplate.postForObject(url, r, String.class);
}
}

View File

@ -58,6 +58,18 @@ public class IZtCountService {
@Autowired
private IZtCronDevopsService cronDevopsService;
@Autowired
private IZtProjectproductService projectproductService;
@Autowired
private IZtProductService productService;
@Autowired
private IZtStoryreviewService storyreviewService;
@Autowired
private IZtReleaseService releaseService;
@Autowired
private IZtReleaseDetailsService releaseDetailsService;
public Map<String, Object> todayWorkCount(ZtCaseDTO dto) {
String name = RiskUserThreadLocal.get().getName();
@ -94,8 +106,17 @@ public class IZtCountService {
long resolvedBugCount = bugService.count(new QueryWrapper<ZtBug>().lambda().eq(ZtBug::getAssignedTo, name)
.eq(ZtBug::getStatus, "resolved")
);
UserType userType = RiskUserThreadLocal.get().getUserType();
if(userType==UserType.CS){
List<ZtBug> myBugList = bugService.list(new QueryWrapper<ZtBug>().lambda()
.ne(ZtBug::getStatus, "closed")
.and(e->e.eq(ZtBug::getAssignedTo, name).or().eq(ZtBug::getOpenedby, name))
);
result.put("bugCount", myBugList.stream() .map(o->o.getId()+"").collect(Collectors.joining(",")));
}else{
result.put("bugCount", bugList.stream().filter(o->o.getStatus().equals("active")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
}
result.put("bugCount", bugList.stream().filter(o->o.getStatus().equals("active")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.put("bugTimeOutCount", bugList.stream().filter(o -> o.getDeadline() != null && o.getDeadline().getTime() < date.getTime())
.filter(o -> "active".equalsIgnoreCase(o.getStatus())) .map(o->o.getId()+"").collect(Collectors.joining(",")));
@ -145,12 +166,7 @@ public class IZtCountService {
return result;
}
@Autowired
private IZtProjectproductService projectproductService;
@Autowired
private IZtProductService productService;
@Autowired
private IZtStoryreviewService storyreviewService;
public ZtStoryCountDTO storyCount(ZtCaseDTO dto) {
LoginRiskUser loginRiskUser = RiskUserThreadLocal.get();
@ -231,7 +247,7 @@ public class IZtCountService {
.filter(o -> o.getStage().equals("testing")).map(o->o.getId()+"").collect(Collectors.joining(",")));
// developing 研发中 developed 研发完毕 testing 测试中 tested测试完毕
result.setJxzCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
.filter(o -> Arrays.asList("developing","developed","testing","tested").contains(o.getStage())
.filter(o -> Arrays.asList("developing").contains(o.getStage())
).map(o->o.getId()+"").collect(Collectors.joining(",")));
@ -420,9 +436,6 @@ public class IZtCountService {
result.setTestingCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
.filter(o -> o.getStage().equals("testing")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setDpsCount(ztStory.stream().filter(o -> "reviewing".equals(o.getStatus())) .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setPstgCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
.filter(o -> o.getStage().equals("wait")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setJxzCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
.filter(o -> o.getStage().equals("developing")) .map(o->o.getId()+"").collect(Collectors.joining(",")));
result.setYqCount(ztStory.stream().filter(o -> "active".equals(o.getStatus()))
@ -519,10 +532,10 @@ public class IZtCountService {
ByteArrayOutputStream os = new ByteArrayOutputStream();
// ExcelWriter excelWriter = EasyExcel.write(os).build();
WriteSheet 统计 = EasyExcel.writerSheet("统计").
registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.needHead(Boolean.TRUE)
.build();
// WriteSheet 统计 = EasyExcel.writerSheet("统计").
// registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
// .needHead(Boolean.TRUE)
// .build();
@ -1001,31 +1014,34 @@ public class IZtCountService {
//项目列表
List<ZtProjectproduct> projectList = this.projectproductService.list(new QueryWrapper<ZtProjectproduct>().lambda()
.in(ZtProjectproduct::getProduct, products.stream().map(o -> o.getId()).collect(Collectors.toList())));
if(CollectionUtils.isEmpty(projectList)){
return zeroMap(map,objMap);
}
// if(CollectionUtils.isEmpty(projectList)){
// return zeroMap(map,objMap);
// }
List<ZtRelease> releases = this.releaseService.list(new QueryWrapper<ZtRelease>().lambda()
.eq(ZtRelease::getStatus,"released")
.in(ZtRelease::getProject, projectList.stream().map(o -> o.getProject()).collect(Collectors.toList())));
List<ZtProjectstory> list = this.projectstoryService.list(new QueryWrapper<ZtProjectstory>().lambda()
.in(ZtProjectstory::getProject, projectList.stream().map(o->o.getProject()).collect(Collectors.toList())));
if(CollectionUtils.isEmpty(list)){
return zeroMap(map,objMap);
}
List<ZtStory> ztStories = this.storyService.list(new QueryWrapper<ZtStory>().lambda().in(ZtStory::getId,
list.stream().map(o -> o.getStory()).collect(Collectors.toList())).ne(ZtStory::getStatus,"closed"));
List<ZtStory> ztStories = this.storyService.list(new QueryWrapper<ZtStory>().lambda().in(ZtStory::getProduct,
products.stream().map(o -> o.getId()).collect(Collectors.toList())));
if(CollectionUtils.isEmpty(ztStories)){
return zeroMap(map,objMap);
}
long count = ztStories.stream().filter(o -> !"closed".equals(o.getStatus())).count();
long finish = ztStories.stream().filter(o -> "verified".equals(o.getStage()) && o.getYsFlag() == 1).count();
long count = ztStories.stream().count();
long finish = ztStories.stream().filter(o -> "verified".equals(o.getStage())
||("closed".equals(o.getStage()))
).count();
objMap.put("count",count);
objMap.put("finish",finish);
objMap.put("balance",count-finish);
map.put("story",objMap);
if(CollectionUtils.isEmpty(projectList)){
return zeroTaskMap(map,objMap);
}
//项目成员 项目迭代下所有人员 projectList 项目列表
List<ZtExecutionproject> exexList = this.executionprojectService.list(new QueryWrapper<ZtExecutionproject>().lambda()
.in(ZtExecutionproject::getProject, projectList.stream().map(o -> o.getProject()).collect(Collectors.toList())));
@ -1056,23 +1072,32 @@ public class IZtCountService {
objMap.put("wait",taskList.stream().filter(o->"wait".equals(o.getStatus())).count());
objMap.put("process",taskList.stream().filter(o->"doing".equals(o.getStatus())).count());
objMap.put("finish",taskList.stream().filter(o->"done".equals(o.getStatus())).count());
objMap.put("finish",taskList.stream().filter(o->"done".equals(o.getStatus())||"closed".equals(o.getStatus())).count());
objMap.put("totalCount",taskList.size());
map.put("task",objMap);
List<ZtBug> bugList = this.bugService.list(new QueryWrapper<ZtBug>().lambda().eq(ZtBug::getProject, id));
List<ZtBug> bugList = this.bugService.list(new QueryWrapper<ZtBug>().lambda().in(ZtBug::getProduct, products.stream().map(o->o.getId()).collect(Collectors.toList())));
objMap=new HashMap<>();
objMap.put("totalBug",bugList.stream().filter(o->!o.getStatus().equals("closed")).count());
objMap.put("solve",bugList.stream().filter(o->o.getStatus().equals("resolved")).count());
objMap.put("totalBug",bugList.stream().count());
objMap.put("solve",bugList.stream().filter(o->o.getStatus().equals("resolved")||o.getStatus().equals("closed")).count());
objMap.put("noSolve",bugList.stream().filter(o->o.getStatus().equals("active")).count());
map.put("bug",objMap);
objMap=new HashMap<>();
objMap.put("online",ztStories.stream().filter(o->o.getStage().equals("released")||o.getStage().equals("verified")).count());
objMap.put("ysAll",ztStories.stream().filter(o->o.getStage().equals("verified")).count());
objMap.put("ysNo",ztStories.stream().filter(o->o.getStage().equals("verified")&&o.getYsFlag()==2).count());
//查发布
if(!CollectionUtils.isEmpty(releases)){
long relaese= this.releaseDetailsService.count(new QueryWrapper<ZtReleaseDetails>().lambda()
.in(ZtReleaseDetails::getReleaseId, releases.stream().map(o -> o.getId()).collect(Collectors.toList()))
.eq(ZtReleaseDetails::getObjectType, "story"));
objMap.put("online",relaese);
}else{
objMap.put("online",0);
}
objMap.put("ysAll",ztStories.stream().filter(o->o.getYsFlag()!=null&&o.getYsFlag().intValue()!=0).count());
objMap.put("ysNo",ztStories.stream().filter(o->o.getYsFlag()!=null&&o.getYsFlag().intValue()==2).count());
map.put("ys",objMap);
return map;

View File

@ -188,7 +188,7 @@ public class ZtCronDevopsServiceImpl extends ServiceImpl<ZtCronDevopsMapper, ZtC
if(!CollectionUtils.isEmpty(result)){
Map<String, ZtUser> userMap = this.userService.userMapByIds(result.stream().map(o -> o.getCreateUser()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
for (ZtCronDevopsDTO dto:result) {

View File

@ -135,7 +135,7 @@ public class ZtProductServiceImpl extends ServiceImpl<ZtProductMapper, ZtProduct
ztProjectDTOS=ztProjectDTOS.stream().filter(o->o.getStatus().equals("doing")).collect(Collectors.toList());
List<String> userList = ztProjectDTOS.stream().map(o -> o.getPm()).collect(Collectors.toList());
userList.addAll(result.stream().filter(o->!StringUtils.isEmpty(o.getPo())).map(o->o.getPo()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(userList);
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
List<ZtStory> allStoryList = this.storyService.list(new QueryWrapper<ZtStory>().lambda().in(ZtStory::getProduct, result.stream().map(o -> o.getId()).collect(Collectors.toList())));
List<ZtBug> allBugList = bugService.list(new QueryWrapper<ZtBug>().lambda()
@ -166,7 +166,7 @@ public class ZtProductServiceImpl extends ServiceImpl<ZtProductMapper, ZtProduct
.equals("active")&&!o.getStage().equals("verified")).count()).intValue());
p.setFinishedStories(Long.valueOf(fStoryList.stream().filter(o->o.getStatus().equals("active"))
.filter(o->o.getStage().equals("tested")||o.getStage().equals("released")).count()).intValue());
p.setFinishTaskRatio(fStoryList.size()==0?BigDecimal.ZERO:BigDecimal.valueOf(p.getFinishedStories()).divide(BigDecimal.valueOf(
p.setFinishTaskRatio((fStoryList.size()==0||p.getFinishedStories()==0)?BigDecimal.ZERO:BigDecimal.valueOf(p.getFinishedStories()).divide(BigDecimal.valueOf(
fStoryList.stream().filter(o->o.getStatus().equals("active")).filter(o->!o.getStage().equals("verified"))
.collect(Collectors.toList()).size()
),2,BigDecimal.ROUND_HALF_UP));
@ -366,6 +366,31 @@ public class ZtProductServiceImpl extends ServiceImpl<ZtProductMapper, ZtProduct
return list.stream().collect(Collectors.toMap(ZtProduct::getId,o->o));
}
@Override
public List<ZtProductDTO> myProductList(ZtProjectQo qo) {
List<Integer> authList = this.ztProjectService.authProductList();
if(CollectionUtils.isEmpty(authList)){
return new ArrayList<>();
}
List<ZtProduct> ztProducts = this.baseMapper.selectList(new QueryWrapper<ZtProduct>()
.lambda().eq(ZtProduct::getDeleted,"0")
.notIn(ZtProduct::getStatus, Arrays.asList("closed"))
.in(ZtProduct::getId,authList)
);
if(CollectionUtils.isEmpty(ztProducts)){
return new ArrayList<>();
}else{
List<ZtProductDTO> ztProductDTOS = BeanCopyUtil.copyListProperties(ztProducts, ZtProductDTO::new);
for (ZtProductDTO p:ztProductDTOS) {
ZtProject ztProject = this.projectMapper.selectById(p.getProgram());
p.setName(ztProject.getName()+"/"+p.getName());
}
return ztProductDTOS;
}
}
private Map<Integer, List<ZtProductDTO>> getChildrenMap(List<ZtProjectDTO> result) {
List<ZtProduct> ztProjects = this.baseMapper.selectList(

View File

@ -672,7 +672,7 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
List<ZtProject> pList = this.baseMapper.selectBatchIds(list.stream().map(o -> o.getExecution()).collect(Collectors.toList()));
List<ZtProjectDTO> result = BeanCopyUtil.copyListProperties(pList, ZtProjectDTO::new);
Map<Integer, List<ZtProject>> projectMap =null;
Map<String, ZtUser> userMap = this.userService.userMapByIds(result.stream().map(o -> o.getPm()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
if(CollectionUtils.isEmpty(list)){
projectMap=new HashMap<>();
@ -908,7 +908,7 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
public List<Integer> execAuthList() {
ZtUser user = userService.selectByName(RiskUserThreadLocal.get().getName());
if(user.getAccount().equals("admin")||user.getUserType()== UserType.XMGLY){
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());
}
@ -1330,6 +1330,34 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
return this.baseMapper.performanceCount(startDate,endDate);
}
@Override
public ZtProjectDTO projectProductByExecution(String execution) {
if(StringUtils.isEmpty(execution)){
return null;
}
ZtExecutionproject executionproject = this.executionprojectService.getOne(new QueryWrapper<ZtExecutionproject>().lambda()
.eq(ZtExecutionproject::getExecution, execution));
Integer project = executionproject.getProject();
ZtProjectproduct ztProjectproduct = this.projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda()
.eq(ZtProjectproduct::getProject, project));
ZtProject exec = this.baseMapper.selectById(execution);
ZtProject pj = this.baseMapper.selectById(project);
ZtProduct product = this.productService.getById(ztProjectproduct.getProduct());
ZtProjectDTO dto=new ZtProjectDTO();
dto.setExcludeId(exec.getId());
dto.setExecutionName(exec.getName());
dto.setProject(pj.getId());
dto.setProjectName(pj.getName());
dto.setProductName(product.getName());
dto.setProductId(product.getId());
return dto;
}
//修改项目集
@Override
@ -1441,7 +1469,7 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
if(!CollectionUtils.isEmpty(result)){
Map<String, ZtUser> userMap = this.userService.userMapByIds(result.stream().map(o->o.getPm()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
Map<Integer,List<ZtProjectDTO>> m= getChildrenMap(result,qo);
@ -1498,7 +1526,7 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
List<ZtProjectDTO> result = this.baseMapper.implementPageList(qo);
if(!CollectionUtils.isEmpty(result)){
Map<String, ZtUser> userMap = this.userService.userMapByIds(result.stream().map(o -> o.getPm()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
List<ZtExecutionproject> list = executionprojectService.list(new QueryWrapper<ZtExecutionproject>().lambda()
.in(ZtExecutionproject::
@ -1583,7 +1611,7 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
Map<Integer, ZtProduct> pMap = listProduct.stream().collect(Collectors.toMap(ZtProduct::getId, o -> o));
Map<String, ZtUser> userMap = this.userService.userMapByIds(result.stream().map(o -> o.getPm()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
for (ZtProjectDTO d:result) {
String pm = d.getPm();
ZtUser ztUser = userMap.get(pm);

View File

@ -212,7 +212,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl<ZtReleaseMapper, ZtRelease
}
ztUser = userMap.get(dto.getCreatedby());
if(ztUser!=null){
dto.setCreatedby(ztUser.getNickname());
dto.setCreatedbyName(ztUser.getNickname());
}
}
}

View File

@ -1,6 +1,7 @@
package com.sa.zentao.service.impl;
import ch.qos.logback.core.util.StringUtil;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.Page;
@ -8,13 +9,11 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sa.zentao.conf.LoginRiskUser;
import com.sa.zentao.conf.RiskUserThreadLocal;
import com.sa.zentao.controller.CommonsController;
import com.sa.zentao.dao.BusinessException;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.dao.ZtStoryFeedbackDTO;
import com.sa.zentao.entity.ZtProduct;
import com.sa.zentao.entity.ZtStory;
import com.sa.zentao.entity.ZtStoryFeedback;
import com.sa.zentao.entity.ZtUser;
import com.sa.zentao.entity.*;
import com.sa.zentao.enums.ActionStatus;
import com.sa.zentao.enums.ActionType;
import com.sa.zentao.enums.FileTypes;
@ -102,6 +101,9 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
return ztStories.stream().collect(Collectors.toMap(ZtStory::getId,o->o));
}
@Autowired
private CommonsController commonsController;
@Override
@Transactional
public void addFeedback(ZtStoryFeedbackDTO dto) {
@ -130,9 +132,21 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
}else{
ztStoryFeedback.setStatus("wait");
}
ztStoryFeedback.setFileUrl(dto.getUrls());
this.baseMapper.insert(ztStoryFeedback);
if(!org.apache.commons.lang3.StringUtils.isEmpty(dto.getUrls())){
JSONArray array = JSONArray.parseArray(dto.getUrls());
if(array.size()>0){
List<String> list=new ArrayList<>();
for (int i =0;i<array.size();i++){
String o = array.getString(0);
ZtFile ztFile = commonsController.downLoad(o);
list.add(ztFile.getId().toString());
}
fileService.updateFile(dto.getFiles(),ztStoryFeedback.getId(), FileTypes.feedbackStory);
fileService.updateFile(list.stream().collect(Collectors.joining(",")), ztStoryFeedback.getId(), FileTypes.feedbackStory);
}
}
actionService.addAction(ActionType.WTFK, ActionStatus.XJ, dto.getId(), dto.getProduct()+"", null, null,
RiskUserThreadLocal.get()==null?"admin":RiskUserThreadLocal.get().getName(), dto.getSpec(), "");
@ -153,6 +167,9 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
RiskUserThreadLocal.get().getName(), null, "");
}
@Autowired
private VxService vxService;
@Override
public void changeStatus(ZtStoryFeedbackDTO dto) {
ZtStoryFeedback ztStoryFeedback = this.baseMapper.selectById(dto.getId());
@ -166,6 +183,18 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
}else{
ztStoryFeedback.setCloseDate(new Date());
}
if(!org.apache.commons.lang3.StringUtils.isEmpty(ztStoryFeedback.getOpenSource())&&ztStoryFeedback.getOpenSource().equals("weixin")){
StringBuilder b=new StringBuilder();
b.append(ztStoryFeedback.getName()).append(" 的问题");
if("finished".equals(dto.getStatus())){
//完成
b.append("已解决");
}else{
//关闭
b.append("已关闭");
}
vxService.sendMessageToVx(ztStoryFeedback.getWeixin(),b.toString(),new Date());
}
this.baseMapper.updateById(ztStoryFeedback);
if(!StringUtils.isEmpty(dto.getCloseRemark())){

View File

@ -167,7 +167,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
return new HashMap<>();
}
Map<String, ZtUser> userMap = this.userService.userMapByIds(list1.stream().map(o -> o.getReviewer()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
List<ZtStoryreviewDTO> ztStoryreviewDTOS = BeanCopyUtil.copyListProperties(list1, ZtStoryreviewDTO::new);
for (ZtStoryreviewDTO view:ztStoryreviewDTOS) {
ZtUser ztUser = userMap.get(view.getReviewer());
@ -209,9 +209,12 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
ZtStoryUser storyUser = storyUserService.getById(dto.getUserStory());
if(storyUser!=null&&"wait".equals(storyUser.getStatus())){
storyUser.setStatus("active");
storyUserService.updateById(storyUser);
}else if(storyUser!=null&&"active".equals(storyUser.getStatus())){
if(storyUser.getStatus().equals("active")&&storyUser.getStage().equals("wait")){
storyUser.setStage("projected");
}
}
storyUserService.updateById(storyUser);
}
actionService.addAction(ActionType.XQ, ActionStatus.XJ, s.getId(), "", dto.getProduct(), null,
@ -609,16 +612,26 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
@Override
public List<ZtStoryDTO> myStoryList(ZtProjectQo qo) {
UserType userType = RiskUserThreadLocal.get().getUserType();
List<ZtStory> closed = this.baseMapper.selectList(new QueryWrapper<ZtStory>().lambda()
.ne(ZtStory::getStatus, "closed")
.eq(ZtStory::getAssignedTo, RiskUserThreadLocal.get().getName())
.or().eq(ZtStory::getOpenedby, RiskUserThreadLocal.get().getName())
);
if(CollectionUtils.isEmpty(closed)){
return new ArrayList<>();
}
List<ZtStoryDTO> storyDTOList = BeanCopyUtil.copyListProperties(closed, ZtStoryDTO::new);
if(userType==UserType.CP){
List<ZtStoryUser> uStory = this.storyUserService.list(new QueryWrapper<ZtStoryUser>().lambda().ne(ZtStoryUser::getStatus, "closed")
.or().eq(ZtStoryUser::getOpenedby, RiskUserThreadLocal.get().getName())
);
if(!CollectionUtils.isEmpty(uStory)){
List<ZtStoryDTO> storyDTOList1 = BeanCopyUtil.copyListProperties(uStory, ZtStoryDTO::new);
storyDTOList.addAll(storyDTOList1);
}
}
if(!CollectionUtils.isEmpty(storyDTOList)){
Map<Integer, List<ZtProject>> executionMapByStory = getExecutionMapByStory(storyDTOList);
for (ZtStoryDTO d:storyDTOList ) {
@ -631,7 +644,6 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
}
}
return storyDTOList;
}
@ -655,7 +667,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
userIds.addAll(list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(userIds);
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
for (ZtStoryDTO d : list) {
@ -1347,7 +1359,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
userIds.addAll(list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(userIds);
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
for (ZtStoryDTO d : list) {

View File

@ -453,7 +453,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
return new HashMap<>();
}
Map<String, ZtUser> userMap = this.userService.userMapByIds(list1.stream().map(o -> o.getReviewer()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
List<ZtStoryreviewDTO> ztStoryreviewDTOS = BeanCopyUtil.copyListProperties(list1, ZtStoryreviewDTO::new);
for (ZtStoryreviewDTO view:ztStoryreviewDTOS) {
ZtUser ztUser = userMap.get(view.getReviewer());

View File

@ -78,7 +78,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
if(!CollectionUtils.isEmpty(list)){
List<String> userIds = list.stream().map(o -> o.getFinishedby()).collect(Collectors.toList());
userIds.addAll(list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(userIds);
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
for (ZtTaskDTO task:list) {
ZtUser ztUser = userMap.get(task.getFinishedby());
@ -290,7 +290,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
if(!CollectionUtils.isEmpty(list)){
List<String> userIds = list.stream().map(o -> o.getFinishedby()).collect(Collectors.toList());
userIds.addAll(list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList()));
Map<String, ZtUser> userMap = this.userService.userMapByIds(userIds);
Map<String, ZtUser> userMap = this.userService.userMapByIds(null);
for (ZtTaskDTO task:list) {
ZtUser ztUser = userMap.get(task.getFinishedby());
@ -327,12 +327,8 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
ztTask.setOpenedby(RiskUserThreadLocal.get().getName());
ztTask.setOpeneddate(new Date());
ztTask.setEstimate(dto.getLeft());
Integer project = ztTask.getProject();
ZtProjectproduct ztProjectproduct = this.projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda()
.eq(ZtProjectproduct::getProject, project));
if(ztProjectproduct!=null){
ztTask.setProduct(ztProjectproduct.getProduct());
}
@ -353,6 +349,16 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
List<ZtExecutionproject> execList = this.executionprojectService.list(new QueryWrapper<ZtExecutionproject>().lambda().eq(ZtExecutionproject::getExecution, ztTask.getExecution()));
ztTask.setProject(execList.get(0).getExecution());
}
}else{
Integer execution = dto.getExecution();
//迭代
ZtExecutionproject executionproject = this.executionprojectService.getOne(new QueryWrapper<ZtExecutionproject>().lambda().eq(ZtExecutionproject::getExecution, execution));
Integer project = executionproject.getProject();
ZtProjectproduct projectproduct = this.projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda().eq(ZtProjectproduct::getProject, project));
ztTask.setProduct(projectproduct.getProduct());
ztTask.setProject(project);
}
//如果是开发人员 需要评审
UserType userType = RiskUserThreadLocal.get().getUserType();
@ -369,6 +375,12 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
if(ztTask.getDeadline()!=null){
ztTask.setDeadlineTime(ztTask.getDeadline().getTime()/1000);
}
Integer project = ztTask.getProject();
ZtProjectproduct ztProjectproduct = this.projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda()
.eq(ZtProjectproduct::getProject, project));
if(ztProjectproduct!=null){
ztTask.setProduct(ztProjectproduct.getProduct());
}
this.baseMapper.insert(ztTask);
fileService.updateFile(dto.getFiles(),ztTask.getId(), FileTypes.task);
@ -820,7 +832,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
if(dto.getApprovalStatus()==1){
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);
}else if(dto.getApprovalStatus()==2){
}else{
actionService.addAction(ActionType.RW, ActionStatus.PSBTG,t.getId(),projectproduct==null?null:projectproduct.getProduct().toString(),projectproduct==null?null:projectproduct.getProject(),t.getExecution(),
RiskUserThreadLocal.get().getName(),dto.getApprovalRemark(),null);
}

View File

@ -0,0 +1,115 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.sa.zentao.utils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class HttpRequest {
private static final CloseableHttpClient httpclient;
public static final String CHARSET = "UTF-8";
public HttpRequest() {
}
public static String sendGet(String url, Map<String, Object> params) throws ParseException, IOException {
return sendGet(url, params, "UTF-8");
}
public static String sendPost(String url, Map<String, Object> params) throws ParseException, IOException {
return sendPost(url, params, "UTF-8");
}
public static String sendGet(String url, Map<String, Object> params, String charset) throws ParseException, IOException {
if (params != null && !params.isEmpty()) {
List<NameValuePair> pairs = new ArrayList(params.size());
Iterator var4 = params.keySet().iterator();
while(var4.hasNext()) {
String key = (String)var4.next();
pairs.add(new BasicNameValuePair(key, params.get(key).toString()));
}
url = url + "?" + EntityUtils.toString(new UrlEncodedFormEntity(pairs), charset);
}
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = httpclient.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200) {
httpGet.abort();
throw new RuntimeException("HttpClient,error status code :" + statusCode);
} else {
HttpEntity entity = response.getEntity();
String result = null;
if (entity != null) {
result = EntityUtils.toString(entity, "utf-8");
EntityUtils.consume(entity);
response.close();
return result;
} else {
return null;
}
}
}
public static String sendPost(String url, Map<String, Object> params, String charset) throws IOException {
List<NameValuePair> pairs = null;
if (params != null && !params.isEmpty()) {
pairs = new ArrayList(params.size());
Iterator var4 = params.keySet().iterator();
while(var4.hasNext()) {
String key = (String)var4.next();
pairs.add(new BasicNameValuePair(key, params.get(key).toString()));
}
}
HttpPost httpPost = new HttpPost(url);
if (pairs != null && pairs.size() > 0) {
httpPost.setEntity(new UrlEncodedFormEntity(pairs, charset));
}
CloseableHttpResponse response = httpclient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200) {
httpPost.abort();
throw new RuntimeException("HttpClient,error status code :" + statusCode);
} else {
HttpEntity entity = response.getEntity();
String result = null;
if (entity != null) {
result = EntityUtils.toString(entity, "utf-8");
EntityUtils.consume(entity);
response.close();
return result;
} else {
return null;
}
}
}
static {
RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(3000).build();
httpclient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
}
}

View File

@ -32,4 +32,15 @@ spring:
file:
baseUrl: http://192.168.3.200:8013
meeting: /data/buildzentao/meeting.docx
meeting: /data/buildzentao/meeting.docx
vx:
token: vTniTyOG4csBmAnMr
encodingAesKey : gCmhw7vKLcZwsDszILPNSEqyjgRKODemkYmRFdfelmk
receiveid: wwa7cc4743271d6055
corpid: wwa7cc4743271d6055
corpsecret: qQNdRmtanymbshPOLgWTgB-TzX9QmNpVCpOx5suJ2xA
dkCorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs
salaryCorpsecretApp: ib0GyrjV573QdczASCeB-QmCsp0t_QpjsbnQwKBr-Os
salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send
dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs

View File

@ -51,4 +51,14 @@ file:
#
#
#file:
# baseUrl: http://127.0.0.1:8085
# 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
salaryCorpsecretAppUrl: https://qyapi.weixin.qq.com/cgi-bin/message/send
dkcorpsecret: 1MWQxoL8QtypfdnKJqdo3pGdZDAmdhqTF_MaWm3rVjs

View File

@ -155,7 +155,7 @@
<if test="qo.objIds != null and qo.objIds.size() > 0">
and id in
and s.id in
<foreach collection="qo.objIds" item="id" index="index"
open="(" close=")" separator=",">
#{id}
@ -165,7 +165,7 @@
<if test="qo.projectIds != null and qo.projectIds.size() > 0">
and project in
and s.project in
<foreach collection="qo.projectIds" item="id" index="index"
open="(" close=")" separator=",">
#{id}
@ -177,38 +177,38 @@
</if>
<if test="qo.searchVal == 'WGB' ">
-- 未关闭
and status !='closed'
and s.status !='closed'
</if>
<if test="qo.searchVal == 'YWCJ' ">
-- 由我创建
and openedBy =#{qo.userName}
and s.openedBy =#{qo.userName}
</if>
<if test="qo.searchVal == 'ZPGW' ">
-- 指派给我
and assignedTo =#{qo.userName}
and s.assignedTo =#{qo.userName}
</if>
<if test="qo.searchVal == 'YWJJ' ">
-- 由我解决
and resolvedBy =#{qo.userName}
and status= 'resolved'
and s.status= 'resolved'
</if>
<if test="qo.searchVal == 'YWZP' ">
-- 由我指派
and openedBy =#{qo.userName}
and s.openedBy =#{qo.userName}
</if>
<if test="qo.searchVal == 'WJJ' ">
-- //未解决
and status= 'active'
and s.status= 'active'
</if>
<if test="qo.searchVal == 'WQR' ">
-- //未确认
and confirmed= 0
and s.confirmed= 0
</if>
<if test="qo.searchVal == 'WZP' ">
-- //未指派
and assignedTo is null
and s.assignedTo is null
</if>

View File

@ -0,0 +1,49 @@
<?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.ZtDevelopFeedbackMapper">
<resultMap id="BaseResultMap" type="com.sa.zentao.entity.ZtDevelopFeedback">
<result column="id" property="id" />
<result column="product_id" property="productId" />
<result column="level" property="level" />
<result column="propose_time" property="proposeTime" />
<result column="assigned_to" property="assignedTo" />
<result column="remark" property="remark" />
<result column="analysis_remark" property="analysisRemark" />
<result column="handle_remark" property="handleRemark" />
<result column="create_user" property="createUser" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="update_user" property="updateUser" />
</resultMap>
<select id="pageList" resultType="com.sa.zentao.dao.ZtDevelopFeedbackDTO">
SELECT fb.*,p.`name` as productName from zt_develop_feedback fb,zt_product p WHERE 1=1 and fb.product_id = p.id
<if test="qo.title != null and qo.title != '' ">
and p.name like concat('%', #{qo.title}, '%')
</if>
<if test="qo.startDate!=null ">
and fb.create_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate!=null ">
and fb.create_date <![CDATA[<=]]> #{qo.endDate}
</if>
<if test="qo.productId != null ">
and p.id =#{qo.productId}
</if>
order by id desc
</select>
<select id="myFeedbackList" resultType="com.sa.zentao.dao.ZtDevelopFeedbackDTO">
SELECT fb.*,p.`name` as productName from zt_develop_feedback fb,zt_product p WHERE 1=1 and fb.product_id = p.id
<if test="qo.userName != null and qo.userName != '' ">
and fb.create_user = #{qo.userName}
</if>
order by fb.id desc
limit 10
</select>
</mapper>

View File

@ -0,0 +1,42 @@
<?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.ZtMeetingMapper">
<resultMap id="BaseResultMap" type="com.sa.zentao.entity.ZtMeeting">
<result column="id" property="id" />
<result column="product_id" property="productId" />
<result column="name" property="name" />
<result column="type" property="type" />
<result column="meeting_date" property="meetingDate" />
<result column="users" property="users" />
<result column="remark" property="remark" />
<result column="create_user" property="createUser" />
<result column="create_date" property="createDate" />
<result column="update_user" property="updateUser" />
<result column="update_date" property="updateDate" />
</resultMap>
<select id="pageList" resultType="com.sa.zentao.dao.ZtMeetingDTO">
SELECT m.* from zt_meeting m left join zt_product p on p.id = m.product_id
WHERE 1=1
<if test="qo.productId != null ">
and m.product_id =#{qo.productId}
</if>
<if test="qo.type != null ">
and m.type =#{qo.type.code}
</if>
<if test="qo.title != null and qo.title != '' ">
and p.name like concat('%', #{qo.title}, '%')
</if>
<if test="qo.startDate!=null ">
and m.meeting_date <![CDATA[>=]]> #{qo.startDate}
</if>
<if test="qo.endDate!=null ">
and m.meeting_date <![CDATA[<=]]> #{qo.endDate}
</if>
order by m.id desc
</select>
</mapper>