Browse Source

团队重构

master
陈裕财 3 years ago
parent
commit
7f840ee0f0
  1. 162
      xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java
  2. 195
      xm-core/src/main/java/com/xm/core/service/XmGroupService.java

162
xm-core/src/main/java/com/xm/core/ctrl/XmQuestionController.java

@ -13,12 +13,9 @@ import com.mdp.qx.HasQx;
import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils;
import com.mdp.sensitive.SensitiveWordService;
import com.xm.core.entity.XmMenu;
import com.xm.core.entity.XmQuestion;
import com.xm.core.entity.XmQuestionHandle;
import com.xm.core.service.XmQuestionHandleService;
import com.xm.core.service.XmQuestionService;
import com.xm.core.service.XmRecordService;
import com.mdp.swagger.ApiEntityParams;
import com.xm.core.entity.*;
import com.xm.core.service.*;
import com.xm.core.service.push.XmPushMsgService;
import com.xm.core.vo.XmQuestionVo;
import io.swagger.annotations.*;
@ -67,6 +64,15 @@ public class XmQuestionController {
@Autowired
SensitiveWordService sensitiveWordService;
@Autowired
XmProductService productService;
@Autowired
XmProjectService projectService;
@Autowired
XmGroupService groupService;
@Autowired
PushNotifyMsgService notifyMsgService;
@ -74,48 +80,7 @@ public class XmQuestionController {
Map<String,Object> fieldsMap = BaseUtils.toMap(new XmQuestion());
@ApiOperation( value = "查询xm_question信息列表",notes="listXmQuestion,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}")
@ApiImplicitParams({
@ApiImplicitParam(name="id",value="问题编号,主键",required=false),
@ApiImplicitParam(name="name",value="问题标题",required=false),
@ApiImplicitParam(name="projectId",value="项目编号",required=false),
@ApiImplicitParam(name="projectName",value="项目名称",required=false),
@ApiImplicitParam(name="taskId",value="任务编号",required=false),
@ApiImplicitParam(name="taskName",value="任务名称",required=false),
@ApiImplicitParam(name="endTime",value="到期时间",required=false),
@ApiImplicitParam(name="askUserid",value="提出人编号",required=false),
@ApiImplicitParam(name="askUsername",value="提出人",required=false),
@ApiImplicitParam(name="handlerUserid",value="处理人编号",required=false),
@ApiImplicitParam(name="handlerUsername",value="处理人",required=false),
@ApiImplicitParam(name="priority",value="优先级别",required=false),
@ApiImplicitParam(name="solution",value="解决方案:",required=false),
@ApiImplicitParam(name="description",value="问题描述",required=false),
@ApiImplicitParam(name="createUserid",value="问题创建人编号",required=false),
@ApiImplicitParam(name="createUsername",value="问题创建人",required=false),
@ApiImplicitParam(name="createTime",value="创建时间",required=false),
@ApiImplicitParam(name="bugStatus",value="create创建(active激活)–confirm确认(confirmed已确认)–solve解决(resolved已解决)–close关闭(closed已关闭)",required=false),
@ApiImplicitParam(name="bizProcInstId",value="当前流程实例编号",required=false),
@ApiImplicitParam(name="bizFlowState",value="当前流程状态0初始1审批中2审批通过3审批不通过4流程取消或者删除",required=false),
@ApiImplicitParam(name="menuId",value="菜单编号",required=false),
@ApiImplicitParam(name="menuName",value="菜单名称",required=false),
@ApiImplicitParam(name="planWorkload",value="预估工时单位人时",required=false),
@ApiImplicitParam(name="planCostAmount",value="预估成本金额",required=false),
@ApiImplicitParam(name="totalActWorkload",value="实际工时",required=false),
@ApiImplicitParam(name="totalActCostAmount",value="实际总金额",required=false),
@ApiImplicitParam(name="expectResult",value="期望结果",required=false),
@ApiImplicitParam(name="opStep",value="操作步骤",required=false),
@ApiImplicitParam(name="currResult",value="当前结果",required=false),
@ApiImplicitParam(name="refRequire",value="相关需求",required=false),
@ApiImplicitParam(name="bugSeverity",value="严重程度1、2、3、4,分别对应:致命缺陷、严重缺陷、普通缺陷、轻微缺陷",required=false),
@ApiImplicitParam(name="bugType",value="BUG类型1、2、3、4,分别对应:代码错误、低级缺陷、设计缺陷、配置相关、安全相关、性能问题、其他",required=false),
@ApiImplicitParam(name="tagIds",value="标签id列表逗号分隔",required=false),
@ApiImplicitParam(name="tagNames",value="标签名称列表逗号分隔",required=false),
@ApiImplicitParam(name="urls",value="链接地址列表逗号分隔",required=false),
@ApiImplicitParam(name="pageSize",value="每页记录数",required=false),
@ApiImplicitParam(name="pageNum",value="当前页码,从1开始",required=false),
@ApiImplicitParam(name="total",value="总记录数,服务器端收到0时,会自动计算总记录数,如果上传>0的不自动计算",required=false),
@ApiImplicitParam(name="orderBy",value="排序列 如性别、学生编号排序 orderBy = sex desc,student_id desc",required=false),
@ApiImplicitParam(name="count",value="是否进行总条数计算,count=true|false",required=false)
})
@ApiEntityParams(XmQuestion.class)
@ApiResponses({
@ApiResponse(code = 200,response= XmQuestion.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},total:总记录数,data:[数据对象1,数据对象2,...]}")
})
@ -404,44 +369,99 @@ public class XmQuestionController {
Tips tips=new Tips("成功删除"+xmQuestions.size()+"条数据");
try{
User user=LoginUtils.getCurrentUserInfo();
if(xmQuestions==null || xmQuestions.size()==0){
return ResponseHelper.failed("p-0","参数不能为空");
}
List<XmQuestion> xmQuestionsDb=xmQuestionService.selectListByIds(xmQuestions.stream().map(i->i.getId()).collect(Collectors.toList()));
if(xmQuestionsDb==null || xmQuestionsDb.size()==0){
return ResponseHelper.failed("data-0","所有数据已不存在");
}
List<XmQuestion> canDel=new ArrayList<>();
List<XmQuestion> noMyCreate=new ArrayList<>();
List<XmQuestion> noDel=new ArrayList<>();
/**
* 如果有测试计划有产品编号走产品团队判断权限
* 如果未通过继续走项目权限判断
*/
Map<String,List<XmQuestion>> productsMap=new HashMap<>();//有产品的数据
Map<String,List<XmQuestion>> projectsMap=new HashMap<>();//没有产品但有项目的数据
for (XmQuestion xmQuestion : xmQuestionsDb) {
if(!user.getUserid().equals(xmQuestion.getCreateUserid())){
noMyCreate.add(xmQuestion);
if(StringUtils.hasText(xmQuestion.getProductId())){
List<XmQuestion> datas=productsMap.get(xmQuestion.getProductId());
if(datas==null){
datas=new ArrayList<>();
datas.add(xmQuestion);
productsMap.put(xmQuestion.getProductId(),datas);
}else {
datas.add(xmQuestion);
}
}else if(StringUtils.hasText(xmQuestion.getProjectId())) {
List<XmQuestion> datas=projectsMap.get(xmQuestion.getProjectId());
if(datas==null){
datas=new ArrayList<>();
datas.add(xmQuestion);
projectsMap.put(xmQuestion.getProjectId(),datas);
}else {
datas.add(xmQuestion);
}
}
}
if(productsMap.size()>0){
for (String productId : productsMap.keySet()) {
XmProduct xmProduct=productService.getProductFromCache(productId);
Tips tips1=groupService.checkProductQx(xmProduct,user);
if(!tips1.isOk()){
noDel.addAll(productsMap.get(productId));
productsMap.remove(productId);
}else{
List<XmQuestion> questions=productsMap.get(productId);
for (XmQuestion question : questions) {
tips1=groupService.checkProductQx(xmProduct,user,question.getCreateUserid(),question.getHandlerUserid());
if(!tips1.isOk()){
noDel.add(question);
}else {
canDel.add(xmQuestion);
canDel.add(question);
}
}
}
}
}
if(projectsMap.size()>0){
for (String projectId : projectsMap.keySet()) {
XmProject xmProject=projectService.getProjectFromCache(projectId);
Tips tips1=groupService.checkProjectQx(xmProject,user);
if(!tips1.isOk()){
noDel.addAll(projectsMap.get(projectId));
projectsMap.remove(projectId);
}else{
List<XmQuestion> questions=projectsMap.get(projectId);
for (XmQuestion question : questions) {
tips1=groupService.checkProjectQx(xmProject,user,question.getCreateUserid(),question.getHandlerUserid());
if(!tips1.isOk()){
noDel.add(question);
}else {
canDel.add(question);
}
}
}
}
}
if(canDel.size()>0){
xmQuestionService.batchDelete(canDel);
List<XmQuestionHandle> handles=new ArrayList<>();
for (XmQuestion xmQuestionVo : canDel) {
XmQuestionHandle handle=new XmQuestionHandle();
handle.setReceiptMessage(user.getUsername()+"删除了缺陷:"+xmQuestionVo.getName());
handle.setHandleStatus(xmQuestionVo.getBugStatus());
handle.setCreateTime(new Date());
handle.setReceiptTime(new Date());
handle.setHandlerUserid(xmQuestionVo.getCreateUserid());
handle.setHandlerUsername(xmQuestionVo.getCreateUsername());
handle.setLastUpdateTime(new Date());
handle.setHandleSolution(xmQuestionVo.getSolution());
handle.setQuestionId(xmQuestionVo.getId());
handle.setTargetUserid(xmQuestionVo.getHandlerUserid());
handle.setTargetUsername(xmQuestionVo.getHandlerUsername());
handle.setId(this.xmQuestionHandleService.createKey("id"));
handles.add(handle);
}
xmQuestionHandleService.batchAddAsync(handles);
}
List<String> msgs=new ArrayList<>();
if(canDel.size()>0){
msgs.add(String.format("删除了%s个缺陷。",canDel.size()));
}
if(noMyCreate.size()>0){
msgs.add(String.format("以下%s个缺陷不属于您创建的缺陷,无权限删除。",noMyCreate.size()));
if(noDel.size()>0){
msgs.add(String.format("其中%s个缺陷,无权限删除。",noDel.size()));
}
if(canDel.size()>0){
tips.setOkMsg(msgs.stream().collect(Collectors.joining()));

195
xm-core/src/main/java/com/xm/core/service/XmGroupService.java

@ -151,8 +151,187 @@ public class XmGroupService extends BaseService {
}
public Tips checkProductQx(XmProduct xmProduct,User head){
Tips tips=new Tips();
boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid());
if(headIsPm){
return tips;
}
tips=this.checkProductScopeQx(xmProduct,head,head.getUserid());
if(!tips.isOk()){
return tips;
}
return this.checkProductTransmitQx(xmProduct,head.getUserid(),head.getUserid());
}
public Tips checkProductQx(XmProduct xmProduct,User head,String ...memUserids){
Tips tips=new Tips("成功");
boolean headIsPm=this.checkUserIsProductAdm(xmProduct,head.getUserid());
if(headIsPm){
return tips;
}
tips=this.checkProductScopeQx(xmProduct,head,memUserids);
if(!tips.isOk()){
return tips;
}
return this.checkProductTransmitQx(xmProduct,head.getUserid(),memUserids);
}
public Tips checkProductScopeQx(XmProduct xmProduct,User head,String ...memUserids){
Tips tips=new Tips();
if(memUserids==null || memUserids.length==0){
return this.checkProductScopeQx(xmProduct,head.getUserid(),head.getBranchId());
}
Set<String> memUseridSet= Arrays.stream(memUserids).filter(k->StringUtils.hasText(k)&&!k.equals(head.getUserid())).collect(Collectors.toSet());
if(memUseridSet.size()==0){
return this.checkProductScopeQx(xmProduct,head.getUserid(),head.getBranchId());
}
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProduct.getQxCode());
if("1".equals(scopeQx)){//同组织
if( !head.getBranchId().equals(xmProduct.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
return tips;
}
boolean isAllNull=true;
for (String memUserid : memUseridSet) {//只要有一个满足条件即可
if(this.checkUserIsProductAdm(xmProduct,memUserid)){
return tips;
}
User sysU=sysClient.getUserByUserid(memUserid);
if(sysU==null || StringUtils.isEmpty(sysU.getUserid())){
continue;
}
isAllNull=false;
if(sysU.getBranchId().equals(xmProduct.getBranchId())){
return tips;
}
}
if(isAllNull){
return tips;
}else{
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
return tips;
}
}else if("2".equals(scopeQx)){//同项目
List<XmGroupVo> groups=this.getProductGroupVoList(xmProduct.getId());
if( !this.checkUserExistsGroup(groups, head.getUserid())){
tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。");
return tips;
};
for (String memUserid : memUseridSet) {
if(this.checkUserIsProductAdm(xmProduct,memUserid)){
return tips;
}
if( this.checkUserExistsGroup(groups,memUserid) ){
return tips;
};
}
tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。");
return tips;
}else if("3".equals(scopeQx)){//同小组
List<XmGroupVo> groups=this.getProductGroupVoList(xmProduct.getId());
List<XmGroupVo> headGroups=groups;
headGroups=this.getUserGroups(groups,head.getUserid());
if( headGroups==null || headGroups.size()==0 ){
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。");
return tips;
}
for (String memUserid : memUseridSet) {
if(this.checkUserIsProductAdm(xmProduct,memUserid)){
return tips;
}
List<XmGroupVo> memGroups=this.getUserGroups(headGroups,memUserid);
if( memGroups!=null && memGroups.size()>0 ){
return tips;
}
}
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。");
return tips;
}
return tips;
}
public Tips checkProductTransmitQx(XmProduct xmProduct,String headUserid,String ...memUserids){
Tips tips=new Tips();
String transmitQx= ProjectQxTool.getTaskTransmitQx(xmProduct.getQxCode());
if("0".equals(transmitQx)){//不检查上下级关系
return tips;
}else if("1".equals(transmitQx)){//检查上下级关系
if(memUserids==null || memUserids.length==0){
return tips;
}
Set<String> memUseridSet= Arrays.stream(memUserids).filter(k->StringUtils.hasText(k) && !k.equals(headUserid)).collect(Collectors.toSet());
if(memUseridSet.size()==0){
return tips;
}
List<XmGroupVo> groups=this.getProjectGroupVoList(xmProduct.getId());
for (String memUserid : memUseridSet) {
if(this.checkUserIsOtherUserTeamHeadOrAss(groups,headUserid,memUserid)){
return tips;
}
}
tips.setFailureMsg("no-qx-transmit-0","该项目开启了上下级关系检查,您当前账户不属于【"+memUseridSet.stream().collect(Collectors.joining(","))+"】中任意账户的上级,无权操作。");
}
return tips;
}
public Tips checkProductScopeQx(XmProduct xmProduct,String userid,String ubranchId){
Tips tips=new Tips();
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProduct.getQxCode());
boolean isPm=this.checkUserIsProductAdm(xmProduct,userid);
if(isPm){
return tips;
}
if("1".equals(scopeQx)){//同组织
if(!StringUtils.hasText(ubranchId)){
User sysUser=sysClient.getUserByUserid(userid);
if(sysUser==null || StringUtils.isEmpty(sysUser.getUserid())){
//如果账户不存在可能已注销再判断没有意义会导致企业无法操作遗留数据问题
//tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
return tips;
}
if(!sysUser.getBranchId().equals(xmProduct.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
return tips;
}
}else{
if(!ubranchId.equals(xmProduct.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
return tips;
}
}
}else if("2".equals(scopeQx)){//同项目
if(!this.checkUserExistsGroup(this.getProjectGroupVoList(xmProduct.getId()), userid)){
tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。");
return tips;
};
}else if("3".equals(scopeQx)){//同小组
if(!this.checkUserExistsProjectGroup(xmProduct.getId(), userid)){
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。");
return tips;
}
}
return tips;
}
public Tips checkProjectQx(XmProject xmProject,User head){
Tips tips=new Tips();
boolean headIsPm=this.checkUserIsProjectAdm(xmProject,head.getUserid());
if(headIsPm){
return tips;
}
tips=this.checkProjectScopeQx(xmProject,head,head.getUserid());
if(!tips.isOk()){
return tips;
@ -169,7 +348,10 @@ public class XmGroupService extends BaseService {
}
public Tips checkProjectScopeQx(XmProject xmProject,User head,String ...memUserids){
Tips tips=new Tips();
boolean headIsPm=this.checkUserIsProjectAdm(xmProject,head.getUserid());
if(headIsPm){
return tips;
}
if(memUserids==null || memUserids.length==0){
return this.checkProjectScopeQx(xmProject,head.getUserid(),head.getBranchId());
}
@ -178,10 +360,10 @@ public class XmGroupService extends BaseService {
return this.checkProjectScopeQx(xmProject,head.getUserid(),head.getBranchId());
}
boolean headIsPm=this.checkUserIsProjectAdm(xmProject,head.getUserid());
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProject.getQxCode());
if("1".equals(scopeQx)){//同组织
if( !headIsPm && !head.getBranchId().equals(xmProject.getBranchId())){
if( !head.getBranchId().equals(xmProject.getBranchId())){
tips.setFailureMsg("no-qx-no-same-branchId","该项目只开放给同企业人员。");
return tips;
}
@ -209,7 +391,7 @@ public class XmGroupService extends BaseService {
}else if("2".equals(scopeQx)){//同项目
List<XmGroupVo> groups=this.getProjectGroupVoList(xmProject.getId());
if(!headIsPm && !this.checkUserExistsGroup(groups, head.getUserid())){
if(!this.checkUserExistsGroup(groups, head.getUserid())){
tips.setFailureMsg("no-qx-no-same-project","该项目只开放给同项目组人员。请先加入项目团队再操作。");
return tips;
};
@ -226,13 +408,11 @@ public class XmGroupService extends BaseService {
}else if("3".equals(scopeQx)){//同小组
List<XmGroupVo> groups=this.getProjectGroupVoList(xmProject.getId());
List<XmGroupVo> headGroups=groups;
if(!headIsPm){
headGroups=this.getUserGroups(groups,head.getUserid());
if( headGroups==null || headGroups.size()==0 ){
tips.setFailureMsg("no-qx-no-same-team","该项目只开放给同项目同小组人员。请先加入项目团队再操作。");
return tips;
}
}
for (String memUserid : memUseridSet) {
if(this.checkUserIsProjectAdm(xmProject,memUserid)){
@ -281,8 +461,6 @@ public class XmGroupService extends BaseService {
public Tips checkProjectScopeQx(XmProject xmProject,String userid,String ubranchId){
Tips tips=new Tips();
String scopeQx= ProjectQxTool.getTaskScopeQx(xmProject.getQxCode());
boolean isPm=this.checkUserIsProjectAdm(xmProject,userid);
if(!isPm){
if("1".equals(scopeQx)){//同组织
if(!StringUtils.hasText(ubranchId)){
User sysUser=sysClient.getUserByUserid(userid);
@ -313,7 +491,6 @@ public class XmGroupService extends BaseService {
return tips;
}
}
}
return tips;
}

Loading…
Cancel
Save