17 changed files with 2047 additions and 1 deletions
-
462xm-core/src/main/java/com/xm/core/ctrl/XmGroupController.java
-
150xm-core/src/main/java/com/xm/core/ctrl/XmGroupStateController.java
-
598xm-core/src/main/java/com/xm/core/ctrl/XmGroupUserController.java
-
141xm-core/src/main/java/com/xm/core/entity/XmGroup.java
-
178xm-core/src/main/java/com/xm/core/entity/XmGroupState.java
-
90xm-core/src/main/java/com/xm/core/entity/XmGroupUser.java
-
28xm-core/src/main/java/com/xm/core/mapper/XmGroupMapper.java
-
17xm-core/src/main/java/com/xm/core/mapper/XmGroupMapper.xml
-
28xm-core/src/main/java/com/xm/core/mapper/XmGroupStateMapper.java
-
17xm-core/src/main/java/com/xm/core/mapper/XmGroupStateMapper.xml
-
30xm-core/src/main/java/com/xm/core/mapper/XmGroupUserMapper.java
-
17xm-core/src/main/java/com/xm/core/mapper/XmGroupUserMapper.xml
-
5xm-core/src/main/java/com/xm/core/service/XmGroupService.java
-
36xm-core/src/main/java/com/xm/core/service/XmGroupStateService.java
-
38xm-core/src/main/java/com/xm/core/service/XmGroupUserService.java
-
197xm-core/src/main/java/com/xm/core/service/cache/XmGroupCacheService.java
-
16xm-core/src/main/java/com/xm/core/vo/XmGroupVo.java
@ -0,0 +1,462 @@ |
|||
package com.xm.core.ctrl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.mdp.core.entity.Result; |
|||
import com.mdp.core.entity.Tips; |
|||
import com.mdp.core.query.QueryTools; |
|||
import com.mdp.core.utils.RequestUtils; |
|||
import com.mdp.msg.client.PushNotifyMsgService; |
|||
import com.mdp.safe.client.entity.User; |
|||
import com.mdp.safe.client.utils.LoginUtils; |
|||
import com.mdp.swagger.ApiEntityParams; |
|||
import com.xm.core.entity.XmBranchStateHis; |
|||
import com.xm.core.entity.XmGroup; |
|||
import com.xm.core.entity.XmProduct; |
|||
import com.xm.core.entity.XmProject; |
|||
import com.xm.core.service.*; |
|||
import com.xm.core.service.cache.XmGroupCacheService; |
|||
import com.xm.core.service.push.XmPushMsgService; |
|||
import com.xm.core.vo.XmGroupVo; |
|||
import io.swagger.annotations.*; |
|||
import org.apache.commons.logging.Log; |
|||
import org.apache.commons.logging.LogFactory; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.util.StringUtils; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import springfox.documentation.annotations.ApiIgnore; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* url编制采用rest风格,如对XM.xm_group xm_group的操作有增删改查,对应的url分别为:<br> |
|||
* 新增: xm/xmGroup/add <br> |
|||
* 查询: xm/xmGroup/list<br> |
|||
* 模糊查询: xm/xmGroup/listKey<br> |
|||
* 修改: xm/xmGroup/edit <br> |
|||
* 删除: xm/xmGroup/del<br> |
|||
* 批量删除: xm/xmGroup/batchDel<br> |
|||
* 组织 com.qqkj 顶级模块 oa 大模块 xm 小模块 <br> |
|||
* 实体 XmProjectGroup 表 XM.xm_group 当前主键(包括多主键): id; |
|||
***/ |
|||
@RestController("xm.core.xmGroupController") |
|||
@RequestMapping(value="/**/xm/core/xmGroup") |
|||
@Api(tags={"xm_group操作接口"}) |
|||
public class XmGroupController { |
|||
|
|||
static Log logger=LogFactory.getLog(XmGroupController.class); |
|||
|
|||
@Autowired |
|||
private XmGroupService xmGroupService; |
|||
|
|||
|
|||
@Autowired |
|||
private XmGroupCacheService xmGroupCacheService; |
|||
|
|||
@Autowired |
|||
private XmProjectService xmProjectService; |
|||
|
|||
|
|||
@Autowired |
|||
private XmProductService xmProductService; |
|||
|
|||
@Autowired |
|||
private XmProjectQxService projectQxService; |
|||
|
|||
|
|||
@Autowired |
|||
private XmProductQxService productQxService; |
|||
|
|||
@Autowired |
|||
XmPushMsgService pushMsgService; |
|||
|
|||
|
|||
@Autowired |
|||
PushNotifyMsgService notifyMsgService; |
|||
|
|||
@Autowired |
|||
XmRecordService xmRecordService; |
|||
|
|||
@ApiOperation( value = "删除旧团队,新增新团队",notes="") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroup.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") |
|||
}) |
|||
//@HasQx(value = "xm_core_xmGroup_updateGroup",name = "批量更新修改项目团队信息",moduleId = "xm-project",moduleName = "管理端-项目管理系统") |
|||
@RequestMapping(value="/edit",method=RequestMethod.POST) |
|||
public Result updateGroup(@RequestBody XmGroup group) { |
|||
|
|||
|
|||
|
|||
if(group==null){ |
|||
return Result.error("小组信息不能为空"); |
|||
} |
|||
if(!StringUtils.hasText(group.getId())){ |
|||
return Result.error("id-0","小组编号不能为空"); |
|||
} |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
XmGroup groupDb=this.xmGroupService.getById( group.getId()); |
|||
if(groupDb==null){ |
|||
return Result.error("data-0","小组已不存在。"); |
|||
} |
|||
if("0".equals(groupDb.getPgClass())){ |
|||
XmProject project=xmProjectService.getProjectFromCache(groupDb.getProjectId()); |
|||
boolean isPm=xmGroupService.checkUserIsProjectAdm(project, user.getUserid()); |
|||
if(!isPm){ |
|||
Tips tips = projectQxService.checkProjectQx(project,0,user); |
|||
Result.assertIsFalse(tips); |
|||
} |
|||
if(StringUtils.hasText(group.getLeaderUserid()) && !group.getLeaderUserid().equals(groupDb.getLeaderUserid())){ |
|||
Tips tips = projectQxService.checkProjectQx(project,0,user, groupDb.getLeaderUserid(),groupDb.getLeaderUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
tips =projectQxService.checkProjectScopeQx(project,0,group.getLeaderUserid(),group.getLeaderUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
} |
|||
if(StringUtils.hasText(group.getAssUserid()) && !group.getAssUserid().equals(groupDb.getAssUserid())){ |
|||
Tips tips = projectQxService.checkProjectQx(project,0,user, groupDb.getAssUserid(),groupDb.getAssUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
tips =projectQxService.checkProjectScopeQx(project,0,group.getAssUserid(),group.getAssUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
} |
|||
}else { |
|||
XmProduct product=xmProductService.getProductFromCache(groupDb.getProductId()); |
|||
boolean isPm=xmGroupService.checkUserIsProductAdm(product, user.getUserid()); |
|||
if(!isPm){ |
|||
Tips tips = productQxService.checkProductQx(product,0,user); |
|||
Result.assertIsFalse(tips); |
|||
} |
|||
if(StringUtils.hasText(group.getLeaderUserid()) && !group.getLeaderUserid().equals(groupDb.getLeaderUserid())){ |
|||
Tips tips = productQxService.checkProductQx(product,0,user, groupDb.getLeaderUserid(),groupDb.getLeaderUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
tips =productQxService.checkProductScopeQx(product,0,group.getLeaderUserid(),group.getLeaderUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
} |
|||
if(StringUtils.hasText(group.getAssUserid()) && !group.getAssUserid().equals(groupDb.getAssUserid())){ |
|||
Tips tips = productQxService.checkProductQx(product,0,user, groupDb.getAssUserid(),groupDb.getAssUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
tips =productQxService.checkProductScopeQx(product,0,group.getAssUserid(),group.getAssUsername(),null); |
|||
Result.assertIsFalse(tips); |
|||
} |
|||
} |
|||
|
|||
xmGroupService.parentIdPathsCalcBeforeSave(group); |
|||
Tips tips= xmGroupService.updateGroup(group,groupDb); //列出XmProjectGroup列表 |
|||
Result.assertIsFalse(tips); |
|||
if("0".equals(groupDb.getPgClass())){ |
|||
xmGroupCacheService.clearProjectGroup(groupDb.getProjectId()); |
|||
xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-修改小组","修改小组信息【"+groupDb.getGroupName()+"】"); |
|||
|
|||
}else{ |
|||
xmGroupCacheService.clearProductGroup(groupDb.getProductId()); |
|||
xmRecordService.addXmProductRecord(groupDb.getProductId(),"团队-小组-修改小组","修改小组信息【"+groupDb.getGroupName()+"】"); |
|||
|
|||
} |
|||
return Result.ok(); |
|||
} |
|||
|
|||
@ApiOperation( value = "根据项目Id拿到团队",notes="") |
|||
@ApiEntityParams(XmGroup.class) |
|||
@ApiImplicitParams({ |
|||
@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) |
|||
}) |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroup.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") |
|||
}) |
|||
//@HasQx(value = "xm_core_xmGroup_getGroups",name = "查找项目团队信息",moduleId = "xm-project",moduleName = "管理端-项目管理系统") |
|||
@RequestMapping(value="/getGroups",method=RequestMethod.GET) |
|||
public Result getGroup(@ApiIgnore @RequestParam Map<String,Object> params) { |
|||
|
|||
RequestUtils.transformArray(params, "ids"); |
|||
IPage page=QueryTools.initPage(params); |
|||
List<XmGroupVo> datas=new ArrayList<>(); |
|||
String iterationId= (String) params.get("iterationId"); |
|||
String projectId= (String) params.get("projectId"); |
|||
String productId= (String) params.get("productId"); |
|||
if(StringUtils.hasText(productId)){ |
|||
datas = xmGroupService.getProductGroupVoList(productId); //产品团队 |
|||
}else if(StringUtils.hasText(projectId)){ |
|||
datas = xmGroupService.getProjectGroupVoList(projectId); //列出XmProjectGroup列表 |
|||
}else if(StringUtils.hasText(iterationId)){ |
|||
datas = xmGroupService.getProjectGroupVoListByIterationId(iterationId ); //列出XmProjectGroup列表 |
|||
} |
|||
|
|||
return Result.ok().setData(datas); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
@ApiOperation( value = "查询xm_group信息列表",notes="listXmProjectGroup,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") |
|||
@ApiEntityParams(XmGroup.class) |
|||
@ApiImplicitParams({ |
|||
@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) |
|||
}) |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroup.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},total:总记录数,data:[数据对象1,数据对象2,...]}") |
|||
}) |
|||
@RequestMapping(value="/list",method=RequestMethod.GET) |
|||
public Result listXmProjectGroup(@ApiIgnore @RequestParam Map<String,Object> params){ |
|||
|
|||
RequestUtils.transformArray(params, "ids"); |
|||
IPage page=QueryTools.initPage(params); |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
String projectId= (String) params.get("projectId"); |
|||
String productId= (String) params.get("productId"); |
|||
String iterationId= (String) params.get("iterationId"); |
|||
if(!StringUtils.hasText(projectId) && !StringUtils.hasText(productId) && !StringUtils.hasText(iterationId)){ |
|||
params.put("branchId",user.getBranchId()); |
|||
params.put("orCrowBranchId",user.getBranchId()); |
|||
} |
|||
QueryWrapper<XmBranchStateHis> qw = QueryTools.initQueryWrapper(XmBranchStateHis.class , params); |
|||
List<Map<String,Object>> datas = xmGroupService.selectListMapByWhere(page,qw,params); |
|||
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); //列出XmProjectGroup列表 |
|||
|
|||
} |
|||
|
|||
@ApiOperation( value = "新增一条xm_group信息",notes="addXmProjectGroup,主键如果为空,后台自动生成") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroup.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") |
|||
}) |
|||
//@HasQx(value = "xm_core_xmGroup_add",name = "新增项目团队信息",moduleId = "xm-project",moduleName = "管理端-项目管理系统") |
|||
@RequestMapping(value="/add",method=RequestMethod.POST) |
|||
public Result addXmProjectGroup(@RequestBody XmGroup xmGroup) { |
|||
|
|||
User u = LoginUtils.getCurrentUserInfo(); |
|||
|
|||
if(StringUtils.isEmpty(xmGroup.getPgClass())){ |
|||
return Result.error("pgClass-0","小组类型不能为空"); |
|||
} |
|||
xmGroup.setBranchId(null); |
|||
if("0".equals(xmGroup.getPgClass())){ |
|||
if(!StringUtils.hasText(xmGroup.getProjectId())){ |
|||
return Result.error("projectId-0","项目编号不能为空"); |
|||
} |
|||
XmProject project = xmProjectService.getProjectFromCache(xmGroup.getProjectId()); |
|||
if(project==null){ |
|||
return Result.error("project-0","项目已不存在"); |
|||
} |
|||
Tips tips =this.xmGroupService.checkProjectStatus(project); |
|||
if(!tips.isOk()){ |
|||
return Result.error(tips); |
|||
} |
|||
Tips tips =checkProjectGroupQxForAdd(project,u,xmGroup); |
|||
if(!tips.isOk()){ |
|||
return Result.error(tips); |
|||
} |
|||
xmGroup.setProductId(null); |
|||
|
|||
xmGroup.setBranchId(project.getBranchId()); |
|||
}else if("1".equals(xmGroup.getPgClass())){ |
|||
if(!StringUtils.hasText(xmGroup.getProductId())){ |
|||
return Result.error("productId-0","产品编号不能为空"); |
|||
} |
|||
XmProduct xmProduct = xmProductService.getProductFromCache(xmGroup.getProductId()); |
|||
if(xmProduct==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
Tips tips =this.xmGroupService.checkProductStatus(xmProduct); |
|||
if(!tips.isOk()){ |
|||
return Result.error(tips); |
|||
} |
|||
Tips tips =checkProductGroupQxForAdd(xmProduct,u,xmGroup); |
|||
if(!tips.isOk()){ |
|||
return Result.error(tips); |
|||
} |
|||
xmGroup.setBranchId(xmProduct.getBranchId()); |
|||
}else{ |
|||
return Result.error("pgClass-err","小组类型数值不正确"); |
|||
} |
|||
|
|||
|
|||
if (StringUtils.isEmpty(xmGroup.getId())) { |
|||
xmGroup.setId(xmGroupService.createKey("id")); |
|||
} else { |
|||
XmGroup xmGroupQuery = new XmGroup(xmGroup.getId()); |
|||
if (xmGroupService.countByWhere(xmGroupQuery) > 0) { |
|||
return Result.error("编号重复,请修改编号再提交"); |
|||
|
|||
} |
|||
} |
|||
if(!StringUtils.hasText(xmGroup.getBranchId())){ |
|||
xmGroup.setBranchId(u.getBranchId()); |
|||
} |
|||
this.xmGroupService.parentIdPathsCalcBeforeSave(xmGroup); |
|||
xmGroupService.insert(xmGroup); |
|||
if("0".equals(xmGroup.getPgClass())){ |
|||
xmGroupCacheService.clearProjectGroup(xmGroup.getProjectId()); |
|||
xmRecordService.addXmGroupRecord(xmGroup.getProjectId(),xmGroup.getId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】"); |
|||
}else{ |
|||
xmGroupCacheService.clearProductGroup(xmGroup.getProductId()); |
|||
xmRecordService.addXmProductRecord(xmGroup.getProductId(),"团队-小组-新增小组","新增小组【"+xmGroup.getGroupName()+"】"); |
|||
} |
|||
|
|||
|
|||
|
|||
return Result.ok(); |
|||
|
|||
} |
|||
|
|||
|
|||
public Tips checkProductGroupQxForAdd(XmProduct xmProduct,User u,XmGroup xmGroup){ |
|||
|
|||
|
|||
tips=productQxService.checkProductQx(xmProduct,0,u); |
|||
if(!tips.isOk()){ |
|||
return tips; |
|||
} |
|||
if(StringUtils.hasText(xmGroup.getLeaderUserid()) && !xmGroup.getLeaderUserid().equals(u.getUserid())){ |
|||
Tips tips=productQxService.checkProductScopeQx(xmProduct,0,xmGroup.getLeaderUserid(),xmGroup.getLeaderUsername(),null); |
|||
} |
|||
if(!tips.isOk()){ |
|||
return tips; |
|||
} |
|||
if(StringUtils.hasText(xmGroup.getAssUserid()) && !xmGroup.getAssUserid().equals(u.getUserid())){ |
|||
Tips tips=productQxService.checkProductScopeQx(xmProduct,0,xmGroup.getAssUserid(),xmGroup.getAssUsername(),null); |
|||
} |
|||
return tips; |
|||
} |
|||
|
|||
|
|||
public Tips checkProjectGroupQxForAdd(XmProject project,User u,XmGroup xmGroup){ |
|||
|
|||
|
|||
tips=projectQxService.checkProjectQx(project,0,u); |
|||
if(!tips.isOk()){ |
|||
return tips; |
|||
} |
|||
if(StringUtils.hasText(xmGroup.getLeaderUserid()) && !xmGroup.getLeaderUserid().equals(u.getUserid())){ |
|||
Tips tips=projectQxService.checkProjectScopeQx(project,0,xmGroup.getLeaderUserid(),xmGroup.getLeaderUsername(),null); |
|||
} |
|||
if(!tips.isOk()){ |
|||
return tips; |
|||
} |
|||
if(StringUtils.hasText(xmGroup.getAssUserid()) && !xmGroup.getAssUserid().equals(u.getUserid())){ |
|||
Tips tips=projectQxService.checkProjectScopeQx(project,0,xmGroup.getAssUserid(),xmGroup.getAssUsername(),null); |
|||
} |
|||
return tips; |
|||
} |
|||
|
|||
@ApiOperation( value = "删除一条xm_group信息",notes="delXmProjectGroup,仅需要上传主键字段") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}") |
|||
}) |
|||
@RequestMapping(value="/del",method=RequestMethod.POST) |
|||
public Result delXmProjectGroup(@RequestBody XmGroup xmGroup){ |
|||
|
|||
User u = LoginUtils.getCurrentUserInfo(); |
|||
if(!StringUtils.hasText(xmGroup.getId())){ |
|||
return Result.error("id-0","请上送小组编号"); |
|||
} |
|||
XmGroup groupDb=this.xmGroupService.selectOneObject(xmGroup); |
|||
if(groupDb==null){ |
|||
return Result.error("data-0","小组已不存在"); |
|||
} |
|||
if("0".equals(groupDb.getPgClass()) && StringUtils.hasText(groupDb.getProjectId())){ |
|||
XmProject project = xmProjectService.getProjectFromCache(groupDb.getProjectId()); |
|||
if(project==null){ |
|||
return Result.error("project-0","项目已不存在"); |
|||
} |
|||
boolean isPm=xmGroupService.checkUserIsProjectAdm(project,u.getUserid()); |
|||
if(!isPm) { |
|||
Tips tips =projectQxService.checkProjectQx(project,0,u,groupDb.getLeaderUserid(),groupDb.getLeaderUsername(), null); |
|||
if(!tips.isOk()){ |
|||
return Result.error(tips); |
|||
} |
|||
} |
|||
} else if("1".equals(groupDb.getPgClass()) && StringUtils.hasText(groupDb.getProductId())){ |
|||
XmProduct product = xmProductService.getProductFromCache(groupDb.getProductId()); |
|||
if(product==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
boolean isPm=xmGroupService.checkUserIsProductAdm(product,u.getUserid()); |
|||
if(!isPm) { |
|||
Tips tips =productQxService.checkProductQx(product,0,u,groupDb.getLeaderUserid(),groupDb.getLeaderUsername(), null); |
|||
if(!tips.isOk()){ |
|||
return Result.error(tips); |
|||
} |
|||
} |
|||
} |
|||
XmGroup childrenGroupQuery=new XmGroup(); |
|||
childrenGroupQuery.setPgroupId(xmGroup.getId()); |
|||
long childrenCnt=this.xmGroupService.countByWhere(childrenGroupQuery); |
|||
if(childrenCnt>0){ |
|||
return Result.error("childrenCnt-no-0","该小组有下级小组,不能删除。请先删除下级小组。"); |
|||
} |
|||
xmGroupService.doDeleteByPk(xmGroup,groupDb); |
|||
if("0".equals(groupDb.getPgClass())){ |
|||
xmGroupCacheService.clearProjectGroup(groupDb.getProjectId()); |
|||
xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-删除小组","删除小组【"+groupDb.getGroupName()+"】"); |
|||
|
|||
}else{ |
|||
xmGroupCacheService.clearProductGroup(groupDb.getProductId()); |
|||
xmRecordService.addXmProductRecord(groupDb.getProductId(),"团队-小组-删除小组","删除小组【"+groupDb.getGroupName()+"】"); |
|||
|
|||
} |
|||
|
|||
|
|||
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); |
|||
|
|||
} |
|||
|
|||
|
|||
/** |
|||
* |
|||
|
|||
|
|||
@ApiOperation( value = "根据主键列表批量删除xm_group信息",notes="batchDelXmProjectGroup,仅需要上传主键字段") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") |
|||
}) |
|||
@RequestMapping(value="/batchDel",method=RequestMethod.POST) |
|||
public Result batchDelXmProjectGroup(@RequestBody List<XmGroup> xmGroups) { |
|||
|
|||
List<XmGroup> groupsDb=this.xmGroupService.selectListByIds(xmGroups.stream().map(i->i.getId()).collect(Collectors.toList())); |
|||
if(groupsDb==null || groupsDb.size()==0){ |
|||
return Result.error("data-0","要删除的小组已不存在"); |
|||
} |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
XmGroup groupDb=groupsDb.get(0); |
|||
String id=groupDb.getProductId(); |
|||
List<XmGroup> hasChildNodes=new ArrayList<>(); |
|||
List<XmGroup> noQxs=new ArrayList<>(); |
|||
List<XmGroup> canDelNodes=new ArrayList<>(); |
|||
id=groupDb.getProjectId(); |
|||
XmProject prject=this.xmProjectService.getProjectFromCache(id); |
|||
Map<String,String> projectAdmMap=xmGroupService.getProjectAdmUsers(prject); |
|||
if (!projectAdmMap.containsKey(user.getUserid())) { |
|||
return Result.error("not-project-adm","您不是项目管理人员,不能删除小组。项目级助理以上人员可以删除小组。"); |
|||
} |
|||
|
|||
if(canDelNodes.size()>0){ |
|||
for (XmGroup canDelNode : canDelNodes) { |
|||
if(!xmGroupService.checkCanDelAllChild(canDelNode,canDelNodes)){ |
|||
hasChildNodes.add(canDelNode); |
|||
}else{ |
|||
canDelNodes.add(canDelNode); |
|||
} |
|||
} |
|||
} |
|||
if(canDelNodes.size()>0){ |
|||
String groupNames=canDelNodes.stream().map(i->i.getGroupName()).collect(Collectors.joining(",")); |
|||
|
|||
xmGroupService.doBatchDeleteProjectGroups(canDelNodes); |
|||
xmGroupCacheService.clearProjectGroups(groupDb.getProjectId()); |
|||
xmRecordService.addXmGroupRecord(groupDb.getProjectId(),groupDb.getId(),"团队-小组-批量删除小组","删除"+canDelNodes.size()+"个小组【"+groupNames+"】"); |
|||
|
|||
} |
|||
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); |
|||
|
|||
} |
|||
|
|||
*/ |
|||
} |
|||
@ -0,0 +1,150 @@ |
|||
package com.xm.core.ctrl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.mdp.core.entity.Result; |
|||
import com.mdp.core.query.QueryTools; |
|||
import com.mdp.core.utils.RequestUtils; |
|||
import com.mdp.swagger.ApiEntityParams; |
|||
import com.xm.core.entity.XmBranchStateHis; |
|||
import com.xm.core.entity.XmGroupState; |
|||
import com.xm.core.service.XmGroupStateService; |
|||
import io.swagger.annotations.*; |
|||
import org.apache.commons.logging.Log; |
|||
import org.apache.commons.logging.LogFactory; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import springfox.documentation.annotations.ApiIgnore; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* url编制采用rest风格,如对XM.xm_group_state 功能状态表,无需前端维护,所有数据由汇总统计得出的操作有增删改查,对应的url分别为:<br> |
|||
* 新增: core/xmGroupState/add <br> |
|||
* 查询: core/xmGroupState/list<br> |
|||
* 模糊查询: core/xmGroupState/listKey<br> |
|||
* 修改: core/xmGroupState/edit <br> |
|||
* 删除: core/xmGroupState/del<br> |
|||
* 批量删除: core/xmGroupState/batchDel<br> |
|||
* 组织 com.qqkj 顶级模块 xm 大模块 core 小模块 <br> |
|||
* 实体 XmProjectGroupState 表 XM.xm_group_state 当前主键(包括多主键): id; |
|||
***/ |
|||
@RestController("xm.core.xmGroupStateController") |
|||
@RequestMapping(value="/**/core/xmGroupState") |
|||
@Api(tags={"功能状态表,无需前端维护,所有数据由汇总统计得出操作接口"}) |
|||
public class XmGroupStateController { |
|||
|
|||
static Log logger=LogFactory.getLog(XmGroupStateController.class); |
|||
|
|||
@Autowired |
|||
private XmGroupStateService xmGroupStateService; |
|||
|
|||
|
|||
|
|||
|
|||
@ApiOperation( value = "查询功能状态表,无需前端维护,所有数据由汇总统计得出信息列表",notes="listXmProjectGroupState,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") |
|||
@ApiEntityParams(XmGroupState.class) |
|||
@ApiImplicitParams({ |
|||
@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) |
|||
}) |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroupState.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},total:总记录数,data:[数据对象1,数据对象2,...]}") |
|||
}) |
|||
@RequestMapping(value="/list",method=RequestMethod.GET) |
|||
public Result listXmProjectGroupState(@ApiIgnore @RequestParam Map<String,Object> params){ |
|||
|
|||
RequestUtils.transformArray(params, "ids"); |
|||
IPage page= QueryTools.initPage(params); |
|||
QueryWrapper<XmBranchStateHis> qw = QueryTools.initQueryWrapper(XmBranchStateHis.class , params); |
|||
List<Map<String,Object>> datas = xmGroupStateService.selectListMapByWhere(page,qw,params); |
|||
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); //列出XmProjectGroupState列表 |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
@ApiOperation( value = "计算bug、task、测试案例、等数据",notes="loadTasksToXmProjectGroupState") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") |
|||
}) |
|||
@RequestMapping(value="/loadTasksToXmProjectGroupState",method=RequestMethod.POST) |
|||
public Result loadTasksToXmProjectGroupState(@RequestBody Map<String,Object> params) { |
|||
|
|||
|
|||
|
|||
int i= xmGroupStateService.loadTasksToXmProjectGroupState((String) params.get("projectId")); |
|||
return Result.ok(); |
|||
|
|||
} |
|||
/** |
|||
@ApiOperation( value = "新增一条功能状态表,无需前端维护,所有数据由汇总统计得出信息",notes="addXmProjectGroupState,主键如果为空,后台自动生成") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response=XmProjectGroupState.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") |
|||
}) |
|||
@RequestMapping(value="/add",method=RequestMethod.POST) |
|||
public Result addXmProjectGroupState(@RequestBody XmProjectGroupState xmGroupState) { |
|||
|
|||
if(StringUtils.isEmpty(xmGroupState.getId())) { |
|||
xmGroupState.setId(xmGroupStateService.createKey("id")); |
|||
}else{ |
|||
XmProjectGroupState xmGroupStateQuery = new XmProjectGroupState(xmGroupState.getId()); |
|||
if(xmGroupStateService.countByWhere(xmGroupStateQuery)>0){ |
|||
return Result.error("编号重复,请修改编号再提交"); |
|||
|
|||
} |
|||
} |
|||
xmGroupStateService.insert(xmGroupState); |
|||
|
|||
} |
|||
*/ |
|||
|
|||
/** |
|||
@ApiOperation( value = "删除一条功能状态表,无需前端维护,所有数据由汇总统计得出信息",notes="delXmProjectGroupState,仅需要上传主键字段") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}") |
|||
}) |
|||
@RequestMapping(value="/del",method=RequestMethod.POST) |
|||
public Result delXmProjectGroupState(@RequestBody XmProjectGroupState xmGroupState){ |
|||
|
|||
xmGroupStateService.deleteByPk(xmGroupState); |
|||
return Result.ok(); |
|||
|
|||
} |
|||
*/ |
|||
|
|||
/** |
|||
@ApiOperation( value = "根据主键修改一条功能状态表,无需前端维护,所有数据由汇总统计得出信息",notes="editXmProjectGroupState") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response=XmProjectGroupState.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") |
|||
}) |
|||
@RequestMapping(value="/edit",method=RequestMethod.POST) |
|||
public Result editXmProjectGroupState(@RequestBody XmProjectGroupState xmGroupState) { |
|||
|
|||
xmGroupStateService.updateByPk(xmGroupState); |
|||
|
|||
} |
|||
*/ |
|||
|
|||
|
|||
|
|||
/** |
|||
@ApiOperation( value = "根据主键列表批量删除功能状态表,无需前端维护,所有数据由汇总统计得出信息",notes="batchDelXmProjectGroupState,仅需要上传主键字段") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") |
|||
}) |
|||
@RequestMapping(value="/batchDel",method=RequestMethod.POST) |
|||
public Result batchDelXmProjectGroupState(@RequestBody List<XmProjectGroupState> xmGroupStates) { |
|||
|
|||
|
|||
|
|||
xmGroupStateService.batchDelete(xmGroupStates); |
|||
return Result.ok(); |
|||
|
|||
} |
|||
*/ |
|||
} |
|||
@ -0,0 +1,598 @@ |
|||
package com.xm.core.ctrl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.mdp.core.entity.Result; |
|||
import com.mdp.core.query.QueryTools; |
|||
import com.mdp.core.utils.RequestUtils; |
|||
import com.mdp.msg.client.PushNotifyMsgService; |
|||
import com.mdp.safe.client.entity.User; |
|||
import com.mdp.safe.client.utils.LoginUtils; |
|||
import com.mdp.swagger.ApiEntityParams; |
|||
import com.xm.core.entity.XmBranchStateHis; |
|||
import com.xm.core.entity.XmGroupUser; |
|||
import com.xm.core.entity.XmProduct; |
|||
import com.xm.core.entity.XmProject; |
|||
import com.xm.core.service.*; |
|||
import com.xm.core.service.push.XmPushMsgService; |
|||
import com.xm.core.vo.XmGroupVo; |
|||
import io.swagger.annotations.*; |
|||
import org.apache.commons.logging.Log; |
|||
import org.apache.commons.logging.LogFactory; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.util.StringUtils; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import springfox.documentation.annotations.ApiIgnore; |
|||
|
|||
import java.util.*; |
|||
import java.util.stream.Collectors; |
|||
|
|||
import static com.mdp.core.utils.BaseUtils.map; |
|||
|
|||
/** |
|||
* url编制采用rest风格,如对XM.xm_group_user xm_group_user的操作有增删改查,对应的url分别为:<br> |
|||
* 新增: core/xmGroupUser/add <br> |
|||
* 查询: core/xmGroupUser/list<br> |
|||
* 模糊查询: core/xmGroupUser/listKey<br> |
|||
* 修改: core/xmGroupUser/edit <br> |
|||
* 删除: core/xmGroupUser/del<br> |
|||
* 批量删除: core/xmGroupUser/batchDel<br> |
|||
* 组织 com.qqkj 顶级模块 xm 大模块 core 小模块 <br> |
|||
* 实体 XmProjectGroupUser 表 XM.xm_group_user 当前主键(包括多主键): id; |
|||
***/ |
|||
@RestController("xm.core.xmGroupUserController") |
|||
@RequestMapping(value="/**/core/xmGroupUser") |
|||
@Api(tags={"xm_group_user操作接口"}) |
|||
public class XmGroupUserController { |
|||
|
|||
static Log logger=LogFactory.getLog(XmGroupUserController.class); |
|||
|
|||
@Autowired |
|||
private XmGroupUserService xmGroupUserService; |
|||
|
|||
|
|||
@Autowired |
|||
private XmProjectService xmProjectService; |
|||
|
|||
|
|||
@Autowired |
|||
private XmProductService xmProductService; |
|||
|
|||
@Autowired |
|||
XmGroupService xmGroupService; |
|||
|
|||
|
|||
@Autowired |
|||
XmRecordService xmRecordService; |
|||
|
|||
@Autowired |
|||
XmPushMsgService pushMsgService; |
|||
|
|||
|
|||
|
|||
@Autowired |
|||
PushNotifyMsgService notifyMsgService; |
|||
|
|||
|
|||
@ApiOperation( value = "查询xm_group_user信息列表",notes="listXmProjectGroupUser,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") |
|||
@ApiEntityParams(XmGroupUser.class) |
|||
@ApiImplicitParams({ |
|||
@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) |
|||
}) |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroupUser.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},total:总记录数,data:[数据对象1,数据对象2,...]}") |
|||
}) |
|||
@RequestMapping(value="/list",method=RequestMethod.GET) |
|||
public Result listXmProjectGroupUser(@ApiIgnore @RequestParam Map<String,Object> params){ |
|||
|
|||
RequestUtils.transformArray(params, "ids"); |
|||
IPage page= QueryTools.initPage(params); |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
params.put("branchId",user.getBranchId()); |
|||
QueryWrapper<XmBranchStateHis> qw = QueryTools.initQueryWrapper(XmBranchStateHis.class , params); |
|||
List<Map<String,Object>> datas = sssssssssssssssService.selectListMapByWhere(page,qw,params); |
|||
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); //列出XmProjectGroupUser列表 |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
@ApiOperation( value = "新增一条xm_group_user信息",notes="addXmProjectGroupUser,主键如果为空,后台自动生成") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroupUser.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") |
|||
}) |
|||
@RequestMapping(value="/add",method=RequestMethod.POST) |
|||
public Result addXmProjectGroupUser(@RequestBody XmGroupUser gu) { |
|||
|
|||
|
|||
if(!StringUtils.hasText(gu.getGroupId())||!StringUtils.hasText(gu.getUserid())){ |
|||
return Result.error("pk-0","请上送小组编号,用户编号groupId,userid"); |
|||
} |
|||
if(!StringUtils.hasText(gu.getPgClass())){ |
|||
return Result.error("pgClass-0","请上送小组类型pgClass"); |
|||
} |
|||
String pgClass=gu.getPgClass(); |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
String name=""; |
|||
if("0".equals(pgClass)){ |
|||
if(!StringUtils.hasText(gu.getProjectId())){ |
|||
return Result.error("projectId-0","请上送小组归属项目编号"); |
|||
} |
|||
|
|||
XmProject xmProject=this.xmProjectService.getProjectFromCache(gu.getProjectId()); |
|||
if(xmProject==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
name=xmProject.getName(); |
|||
if(!xmGroupService.checkUserIsProjectAdm(xmProject, user.getUserid())){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProjectGroupFromCache(xmProject.getId(),gu.getGroupId()); |
|||
if(xmGroupVo==null){ |
|||
return Result.error("group-0","小组已不存在"); |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
return Result.error("not-leader-ass","组长、副组长、组长助理以上人员可以添加小组成员。"); |
|||
} |
|||
} |
|||
}else if("1".equals(pgClass)){ |
|||
if(!StringUtils.hasText(gu.getProductId())){ |
|||
return Result.error("productId-0","请上送小组归属产品编号"); |
|||
} |
|||
|
|||
XmProduct product=this.xmProductService.getProductFromCache(gu.getProductId()); |
|||
if(product==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
name=product.getProductName(); |
|||
if(!xmGroupService.checkUserIsProductAdm(product, user.getUserid())){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProductGroupFromCache(product.getId(),gu.getGroupId()); |
|||
if(xmGroupVo==null){ |
|||
return Result.error("group-0","小组已不存在"); |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
return Result.error("not-leader-ass","组长、副组长、组长助理以上人员可以添加小组成员。"); |
|||
} |
|||
} |
|||
} |
|||
|
|||
if(xmGroupUserService.countByWhere(gu)>0){ |
|||
return Result.error("该用户已在小组中"); |
|||
|
|||
} |
|||
xmGroupUserService.insert(gu); |
|||
Map<String,Object> usermap=new HashMap<>(); |
|||
usermap.put("userid", gu.getUserid()); |
|||
usermap.put("username", gu.getUsername()); |
|||
List<Map<String,Object>> users=new ArrayList<>(); |
|||
users.add(usermap); |
|||
pushMsgService.pushJoinChannelGroupMsg(user.getBranchId(), gu.getGroupId(), users); |
|||
notifyMsgService.pushMsg(user,gu.getUserid(),gu.getUsername(),"7",gu.getProjectId(),gu.getGroupId(),"恭喜您加入"+("0".equals(pgClass)?"项目":"产品")+"【"+name+"】"); |
|||
if("1".equals(pgClass)){ |
|||
xmGroupService.clearProductGroup(gu.getProductId()); |
|||
xmRecordService.addXmGroupRecord(gu.getProductId(),gu.getGroupId(), "产品-团队-新增小组成员", "增加组员["+gu.getUsername()+"]",gu.getUserid(),null); |
|||
}else{ |
|||
xmGroupService.clearProjectGroup(gu.getProjectId()); |
|||
xmRecordService.addXmGroupRecord(gu.getProjectId(),gu.getGroupId(), "项目-团队-新增小组成员", "增加组员["+gu.getUsername()+"]",gu.getUserid(),null); |
|||
} |
|||
|
|||
|
|||
return Result.ok(); |
|||
|
|||
} |
|||
|
|||
@ApiOperation( value = "删除一条xm_group_user信息",notes="delXmProjectGroupUser,仅需要上传主键字段") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}") |
|||
}) |
|||
@RequestMapping(value="/del",method=RequestMethod.POST) |
|||
public Result delXmProjectGroupUser(@RequestBody XmGroupUser gu){ |
|||
|
|||
if(!StringUtils.hasText(gu.getGroupId())||!StringUtils.hasText(gu.getUserid())){ |
|||
return Result.error("pk-0","请上送小组编号,用户编号groupId,userid"); |
|||
} |
|||
gu=this.xmGroupUserService.selectOneObject(gu); |
|||
if(gu==null){ |
|||
return Result.error("data-0","小组组员已不存在"); |
|||
} |
|||
String pgClass=gu.getPgClass(); |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
|
|||
String name=""; |
|||
if("0".equals(pgClass)){ |
|||
if(!StringUtils.hasText(gu.getProjectId())){ |
|||
return Result.error("projectId-0","请上送小组归属项目编号"); |
|||
} |
|||
XmProject xmProject=this.xmProjectService.getProjectFromCache(gu.getProjectId()); |
|||
if(xmProject==null){ |
|||
return Result.error("project-0","项目已不存在"); |
|||
} |
|||
name=xmProject.getName(); |
|||
if(!xmGroupService.checkUserIsProjectAdm(xmProject, user.getUserid())){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProjectGroupFromCache(xmProject.getId(),gu.getGroupId()); |
|||
if(xmGroupVo==null){ |
|||
return Result.error("group-0","小组已不存在"); |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
return Result.error("not-leader-ass","组长、副组长、组长助理以上人员可以删除小组成员。"); |
|||
} |
|||
} |
|||
}else{ |
|||
if(!StringUtils.hasText(gu.getProductId())){ |
|||
return Result.error("productId-0","请上送小组归属产品编号"); |
|||
} |
|||
XmProduct xmProduct=this.xmProductService.getProductFromCache(gu.getProductId()); |
|||
if(xmProduct==null){ |
|||
return Result.error("productId-0","产品已不存在"); |
|||
} |
|||
name=xmProduct.getProductName(); |
|||
if(!xmGroupService.checkUserIsProductAdm(xmProduct, user.getUserid())){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProductGroupFromCache(xmProduct.getId(),gu.getGroupId()); |
|||
if(xmGroupVo==null){ |
|||
return Result.error("group-0","小组已不存在"); |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
return Result.error("not-leader-ass","组长、副组长、组长助理以上人员可以删除小组成员。"); |
|||
} |
|||
} |
|||
} |
|||
|
|||
xmGroupUserService.deleteByPk(gu); |
|||
Map<String,Object> usermap=new HashMap<>(); |
|||
usermap.put("userid", gu.getUserid()); |
|||
usermap.put("username", gu.getUsername()); |
|||
List<Map<String,Object>> users=new ArrayList<>(); |
|||
users.add(usermap); |
|||
|
|||
notifyMsgService.pushMsg(user,gu.getUserid(),gu.getUsername(),"7",gu.getProjectId(),gu.getGroupId(),"您离开"+("0".equals(pgClass)?"项目":"产品")+"【"+name+"】中的小组【"+gu.getGroupId()+"】"); |
|||
|
|||
pushMsgService.pushLeaveChannelGroupMsg(user.getBranchId(), gu.getGroupId(), users); |
|||
|
|||
if("1".equals(pgClass)){ |
|||
xmGroupService.clearProductGroup(gu.getProductId()); |
|||
xmRecordService.addXmProductRecord(gu.getProductId(), "产品-团队-删除小组成员", "删除组员["+gu.getUsername()+"]",gu.getUserid(),null); |
|||
|
|||
}else{ |
|||
xmGroupService.clearProjectGroup(gu.getProjectId()); |
|||
xmRecordService.addXmGroupRecord(gu.getProjectId(),gu.getGroupId(), "项目-团队-删除小组成员", "删除组员["+gu.getUsername()+"]",gu.getUserid(),null); |
|||
|
|||
} |
|||
|
|||
|
|||
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); |
|||
|
|||
} |
|||
|
|||
@ApiOperation( value = "根据主键修改一条xm_group_user信息",notes="editXmProjectGroupUser") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200,response= XmGroupUser.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") |
|||
}) |
|||
@RequestMapping(value="/edit",method=RequestMethod.POST) |
|||
public Result editXmProjectGroupUser(@RequestBody XmGroupUser gu0) { |
|||
|
|||
if(!StringUtils.hasText(gu0.getGroupId())||!StringUtils.hasText(gu0.getUserid())){ |
|||
return Result.error("pk-0","请上送小组编号,用户编号groupId,userid"); |
|||
} |
|||
XmGroupUser gu=this.xmGroupUserService.selectOneObject(gu0); |
|||
if(gu==null){ |
|||
return Result.error("data-0","小组已不存在"); |
|||
} |
|||
String pgClass=gu.getPgClass(); |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
if("1".equals(pgClass)){ |
|||
|
|||
if(!StringUtils.hasText(gu.getProductId())){ |
|||
return Result.error("productId-0","请上送小组归属产品编号"); |
|||
} |
|||
XmProduct xmProduct=this.xmProductService.getProductFromCache(gu.getProductId()); |
|||
if(xmProduct==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
if(!xmGroupService.checkUserIsProductAdm(xmProduct, user.getUserid())){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProductGroupFromCache(xmProduct.getId(),gu.getGroupId()); |
|||
if(xmGroupVo==null){ |
|||
return Result.error("group-0","小组已不存在"); |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
return Result.error("not-leader-ass","组长、副组长、组长助理以上人员可以修改小组成员。"); |
|||
} |
|||
} |
|||
}else{ |
|||
if(!StringUtils.hasText(gu.getProjectId())){ |
|||
return Result.error("projectId-0","请上送小组归属项目编号"); |
|||
} |
|||
|
|||
XmProject xmProject=this.xmProjectService.getProjectFromCache(gu.getProjectId()); |
|||
if(xmProject==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
if(!xmGroupService.checkUserIsProjectAdm(xmProject, user.getUserid())){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProductGroupFromCache(xmProject.getId(),gu.getGroupId()); |
|||
if(xmGroupVo==null){ |
|||
return Result.error("group-0","小组已不存在"); |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
return Result.error("not-leader-ass","组长、副组长、组长助理以上人员可以修改小组成员。"); |
|||
} |
|||
} |
|||
} |
|||
xmGroupUserService.updateSomeFieldByPk(gu0); |
|||
|
|||
if("0".equals(pgClass)){ |
|||
|
|||
xmGroupService.clearProjectGroup(gu.getProjectId()); |
|||
xmRecordService.addXmGroupRecord(gu.getProjectId(), gu.getGroupId(),"项目-团队-修改小组成员信息", "变更["+gu.getUsername()+"]"); |
|||
}else { |
|||
|
|||
xmGroupService.clearProductGroup(gu.getProductId()); |
|||
xmRecordService.addXmGroupRecord(gu.getProductId(), gu.getGroupId(),"项目-团队-修改小组成员信息", "变更["+gu.getUsername()+"]"); |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
@ApiOperation( value = "根据主键列表批量新增xm_group_user信息",notes="batchAddXmProjectGroupUser,仅需要上传主键字段") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") |
|||
}) |
|||
@RequestMapping(value="/batchAdd",method=RequestMethod.POST) |
|||
public Result batchAddXmProjectGroupUser(@RequestBody List<XmGroupUser> gus) { |
|||
|
|||
if(gus==null || gus.size()==0){ |
|||
return Result.error("data-0","请上送要删除的小组成员"); |
|||
} |
|||
|
|||
|
|||
if(gus.stream().filter(i->!StringUtils.hasText(i.getUserid())||!StringUtils.hasText(i.getGroupId())).findAny().isPresent()){ |
|||
return Result.error("userid-or-groupId-0","请上送用户编号及小组编号"); |
|||
}else{ |
|||
for (XmGroupUser gu : gus) { |
|||
if (!"1".equals(gu.getPgClass()) && !StringUtils.hasText(gu.getProjectId())) { |
|||
return Result.error("projectId-0", "项目编号不能为空"); |
|||
} else if ("1".equals(gu.getPgClass()) && !StringUtils.hasText(gu.getProductId())) { |
|||
return Result.error("productId-0", "产品编号不能为空"); |
|||
} |
|||
if (!StringUtils.hasText(gu.getObranchId())) { |
|||
return Result.error("obranchId-0", "用户归属机构号不能为空"); |
|||
} |
|||
if (!StringUtils.hasText(gu.getUserid())) { |
|||
return Result.error("userid-0", "用户编号不能为空"); |
|||
} |
|||
if (!StringUtils.hasText(gu.getUsername())) { |
|||
return Result.error("username-0", "用户名称不能为空"); |
|||
} |
|||
if (!StringUtils.hasText(gu.getGroupId())) { |
|||
return Result.error("groupId-0", "要加入的组编号不能为空"); |
|||
} |
|||
} |
|||
} |
|||
List<XmGroupUser> gusDb=this.xmGroupUserService.selectListByIds(gus); |
|||
//过滤掉已经存在的 |
|||
List<XmGroupUser> gusNoExists=gus.stream().filter(i->!(gusDb.stream().filter(k->k.getGroupId().equals(i.getGroupId())&&k.getUserid().equals(i.getUserid()))).findAny().isPresent()).collect(Collectors.toList()); |
|||
if(gusNoExists.size()==0){ |
|||
return Result.error("user-had-exists","成功添加0个组员。以下用户已在小组中,不用再添加。【"+gusDb.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"】"); |
|||
} |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
XmGroupUser gu=gusNoExists.get(0); |
|||
String productId=gu.getProductId(); |
|||
String projectId=gu.getProjectId(); |
|||
String pgClass=gu.getPgClass(); |
|||
List<XmGroupUser> gus2=new ArrayList<>(); |
|||
XmProduct xmProduct=null; |
|||
XmProject xmProject=null; |
|||
if("1".equals(pgClass)){ |
|||
xmProduct=this.xmProductService.getProductFromCache(gu.getProductId()); |
|||
if(xmProduct==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
gus2=gusNoExists.stream().filter(i->productId.equals(i.getProductId())).collect(Collectors.toList()); |
|||
if(gus2.size()<gusNoExists.size()){ |
|||
return Result.error("data-0","批量新增只能新增同一个产品的成员。"); |
|||
} |
|||
}else { |
|||
xmProject=this.xmProjectService.getProjectFromCache(gu.getProjectId()); |
|||
if(xmProject==null){ |
|||
return Result.error("project-0","项目已不存在"); |
|||
} |
|||
gus2=gusNoExists.stream().filter(i->projectId.equals(i.getProjectId())).collect(Collectors.toList()); |
|||
if(gus2.size()<gusNoExists.size()){ |
|||
return Result.error("data-0","批量新增只能新增同一个项目的成员。"); |
|||
} |
|||
} |
|||
|
|||
Set<String> groupIds=gusNoExists.stream().map(i->i.getGroupId()).collect(Collectors.toSet()); |
|||
List<XmGroupUser> canAddUsers=new ArrayList<>(); |
|||
Map<String,List<XmGroupUser>> groupUsersMap=new HashMap<>(); |
|||
List<XmGroupUser> noQx=new ArrayList<>(); |
|||
for (String groupId : groupIds) { |
|||
if("1".equals(pgClass)){ |
|||
boolean isPm=xmGroupService.checkUserIsProductAdm(xmProduct,user.getUserid()); |
|||
if(!isPm){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProductGroupFromCache(xmProduct.getId(),groupId); |
|||
if(xmGroupVo==null){ |
|||
continue; |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
continue; |
|||
} |
|||
} |
|||
}else { |
|||
boolean isPm=xmGroupService.checkUserIsProjectAdm(xmProject,user.getUserid()); |
|||
if(!isPm){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProjectGroupFromCache(xmProject.getId(),groupId); |
|||
if(xmGroupVo==null){ |
|||
continue; |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
continue; |
|||
} |
|||
} |
|||
} |
|||
List<XmGroupUser> cdus=gus2.stream().filter(i->groupId.equals(i.getGroupId())).collect(Collectors.toList()); |
|||
canAddUsers.addAll(cdus); |
|||
groupUsersMap.put(groupId,cdus); |
|||
} |
|||
noQx=gus.stream().filter(i->!canAddUsers.stream().filter(k->k.getUserid().equals(i.getUserid()) && k.getGroupId().equals(i.getGroupId())).findAny().isPresent()).collect(Collectors.toList()); |
|||
List<String> msg=new ArrayList<>(); |
|||
msg.add("成功新增"+canAddUsers.size()+"个小组用户."); |
|||
if(canAddUsers.size()>0){ |
|||
xmGroupUserService.batchInsert(canAddUsers); |
|||
} |
|||
if(noQx.size()>0){ |
|||
msg.add("不是项目经理、小组长,无权限操作以下"+noQx.size()+"个用户,【"+noQx.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"】"); |
|||
} |
|||
if(gusDb.size()>0){ |
|||
msg.add("以下"+gusDb.size()+"个小组用户已在组里,无需再添加。【"+gusDb.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"】"); |
|||
} |
|||
if(canAddUsers.size()!=0){ |
|||
return Result.ok(msg.stream().collect(Collectors.joining(" "))); |
|||
}else{ |
|||
return Result.error(msg.stream().collect(Collectors.joining(" "))); |
|||
} |
|||
groupUsersMap.forEach((groupId,groupUsers)->{ |
|||
|
|||
List<Map<String,Object>> users=groupUsers.stream().map(i->map("userid",i.getUserid(),"username",i.getUsername())).collect(Collectors.toList()); |
|||
pushMsgService.pushJoinChannelGroupMsg(user.getBranchId(),groupId, users); |
|||
if("0".equals(pgClass)){ |
|||
|
|||
xmGroupService.clearProjectGroup(projectId); |
|||
xmRecordService.addXmGroupRecord(projectId,groupId, "项目-团队-新增小组成员", "新增组员["+groupUsers.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"]",user.getUserid(),null); |
|||
}else{ |
|||
xmGroupService.clearProductGroup(productId); |
|||
xmRecordService.addXmGroupRecord(productId,groupId, "产品-团队-新增小组成员", "新增组员["+groupUsers.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"]",user.getUserid(),null); |
|||
} |
|||
}); |
|||
|
|||
|
|||
return Result.ok(); |
|||
|
|||
} |
|||
|
|||
|
|||
@ApiOperation( value = "根据主键列表批量删除xm_group_user信息",notes="batchDelXmProjectGroupUser,仅需要上传主键字段") |
|||
@ApiResponses({ |
|||
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") |
|||
}) |
|||
@RequestMapping(value="/batchDel",method=RequestMethod.POST) |
|||
public Result batchDelXmProjectGroupUser(@RequestBody List<XmGroupUser> gus) { |
|||
|
|||
if(gus==null || gus.size()==0){ |
|||
return Result.error("data-0","请上送要删除的小组成员"); |
|||
} |
|||
|
|||
|
|||
List<XmGroupUser> gusDb=this.xmGroupUserService.selectListByIds(gus); |
|||
if(gusDb.size()==0){ |
|||
return Result.error("data-0","要删除的数据已不存在。"); |
|||
} |
|||
User user=LoginUtils.getCurrentUserInfo(); |
|||
XmGroupUser gu=gusDb.get(0); |
|||
String productId=gu.getProductId(); |
|||
String projectId=gu.getProjectId(); |
|||
String pgClass=gu.getPgClass(); |
|||
List<XmGroupUser> gus2=new ArrayList<>(); |
|||
XmProduct xmProduct=null; |
|||
XmProject xmProject=null; |
|||
if("1".equals(pgClass)){ |
|||
xmProduct=this.xmProductService.getProductFromCache(gu.getProductId()); |
|||
if(xmProduct==null){ |
|||
return Result.error("product-0","产品已不存在"); |
|||
} |
|||
gus2=gusDb.stream().filter(i->productId.equals(i.getProductId())).collect(Collectors.toList()); |
|||
if(gus2.size()<gusDb.size()){ |
|||
return Result.error("data-0","批量删除只能删除同一个产品的成员。"); |
|||
} |
|||
}else { |
|||
xmProject=this.xmProjectService.getProjectFromCache(gu.getProjectId()); |
|||
if(xmProject==null){ |
|||
return Result.error("project-0","项目已不存在"); |
|||
} |
|||
gus2=gusDb.stream().filter(i->projectId.equals(i.getProjectId())).collect(Collectors.toList()); |
|||
if(gus2.size()<gusDb.size()){ |
|||
return Result.error("data-0","批量删除只能删除同一个项目的成员。"); |
|||
} |
|||
} |
|||
|
|||
Set<String> groupIds=gusDb.stream().map(i->i.getGroupId()).collect(Collectors.toSet()); |
|||
List<XmGroupUser> canDelUsers=new ArrayList<>(); |
|||
Map<String,List<XmGroupUser>> groupUsersMap=new HashMap<>(); |
|||
for (String groupId : groupIds) { |
|||
if("1".equals(pgClass)){ |
|||
boolean isPm=xmGroupService.checkUserIsProductAdm(xmProduct,user.getUserid()); |
|||
if(!isPm){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProductGroupFromCache(xmProduct.getId(),groupId); |
|||
if(xmGroupVo==null){ |
|||
continue; |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
continue; |
|||
} |
|||
} |
|||
}else { |
|||
boolean isPm=xmGroupService.checkUserIsProjectAdm(xmProject,user.getUserid()); |
|||
if(!isPm){ |
|||
XmGroupVo xmGroupVo=this.xmGroupService.getProjectGroupFromCache(xmProject.getId(),groupId); |
|||
if(xmGroupVo==null){ |
|||
continue; |
|||
} |
|||
boolean isHead=xmGroupService.checkUserIsTeamHeadOrAss(xmGroupVo,user.getUserid()); |
|||
if(isHead==false){ |
|||
continue; |
|||
} |
|||
} |
|||
} |
|||
List<XmGroupUser> cdus=gus2.stream().filter(i->groupId.equals(i.getGroupId())).collect(Collectors.toList()); |
|||
canDelUsers.addAll(cdus); |
|||
groupUsersMap.put(groupId,cdus); |
|||
} |
|||
List<String> msg=new ArrayList<>(); |
|||
msg.add("成功删除"+canDelUsers.size()+"个小组用户."); |
|||
if(canDelUsers.size()>0){ |
|||
xmGroupUserService.doBatchDelete(canDelUsers); |
|||
} |
|||
List<String> noDelUsers=new ArrayList<>(); |
|||
if(canDelUsers.size()<gus.size()){ |
|||
|
|||
for (XmGroupUser gu0 : gus) { |
|||
if(!canDelUsers.stream().filter(i->i.getUserid().equals(gu0.getUserid())&&i.getGroupId().equals(gu0.getGroupId())).findAny().isPresent()){ |
|||
noDelUsers.add(gu0.getUsername()); |
|||
} |
|||
} |
|||
msg.add("以下"+noDelUsers.size()+"个小组用户无权限删除。【"+noDelUsers.stream().collect(Collectors.toSet()).stream().collect(Collectors.joining(","))+"】"); |
|||
} |
|||
if(canDelUsers.size()!=0){ |
|||
return Result.ok(msg.stream().collect(Collectors.joining(" "))); |
|||
}else{ |
|||
return Result.error(msg.stream().collect(Collectors.joining(" "))); |
|||
} |
|||
groupUsersMap.forEach((groupId,groupUsers)->{ |
|||
|
|||
List<Map<String,Object>> users=groupUsers.stream().map(i->map("userid",i.getUserid(),"username",i.getUsername())).collect(Collectors.toList()); |
|||
pushMsgService.pushLeaveChannelGroupMsg(user.getBranchId(),groupId, users); |
|||
if("0".equals(pgClass)){ |
|||
|
|||
xmGroupService.clearProjectGroup(projectId); |
|||
xmRecordService.addXmGroupRecord(projectId,groupId, "项目-团队-删除小组成员", "删除组员["+groupUsers.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"]",user.getUserid(),null); |
|||
}else{ |
|||
xmGroupService.clearProductGroup(productId); |
|||
xmRecordService.addXmGroupRecord(productId,groupId, "产品-团队-删除小组成员", "删除组员["+groupUsers.stream().map(i->i.getUsername()).collect(Collectors.joining(","))+"]",user.getUserid(),null); |
|||
} |
|||
}); |
|||
|
|||
|
|||
return Result.ok("query-ok","查询成功").setData(datas).setTotal(page.getTotal()); |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,141 @@ |
|||
package com.xm.core.entity; |
|||
import lombok.Data; |
|||
import com.baomidou.mybatisplus.annotation.IdType; |
|||
import com.baomidou.mybatisplus.annotation.TableField; |
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.mdp.core.dao.annotation.TableIds; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import org.apache.ibatis.type.Alias; |
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @author code-gen |
|||
* @since 2023-11-10 |
|||
*/ |
|||
@Data |
|||
@TableName("xm_group") |
|||
@ApiModel(description="团队表") |
|||
public class XmGroup implements java.io.Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
@TableId(type = IdType.ASSIGN_ID) |
|||
|
|||
@ApiModelProperty(notes="主键,主键",allowEmptyValue=true,example="",allowableValues="") |
|||
String id; |
|||
|
|||
|
|||
@ApiModelProperty(notes="团队名称",allowEmptyValue=true,example="",allowableValues="") |
|||
String groupName; |
|||
|
|||
|
|||
@ApiModelProperty(notes="项目编号-属于产品线则可为空",allowEmptyValue=true,example="",allowableValues="") |
|||
String projectId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="项目团队类型编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String pgTypeId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="团队类型名称",allowEmptyValue=true,example="",allowableValues="") |
|||
String pgTypeName; |
|||
|
|||
|
|||
@ApiModelProperty(notes="团队负责人",allowEmptyValue=true,example="",allowableValues="") |
|||
String leaderUserid; |
|||
|
|||
|
|||
@ApiModelProperty(notes="负责人姓名",allowEmptyValue=true,example="",allowableValues="") |
|||
String leaderUsername; |
|||
|
|||
|
|||
@ApiModelProperty(notes="创建时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date ctime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="更新时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date ltime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="产品编号,属于项目组的团队则可为空",allowEmptyValue=true,example="",allowableValues="") |
|||
String productId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="归属机构编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String branchId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="团队类别0-项目小组,1-产品小组,2-团队;团队下挂项目团队或者产品团队。产品团队下只能挂产品团队,项目团队下只能挂项目团队",allowEmptyValue=true,example="",allowableValues="") |
|||
String pgClass; |
|||
|
|||
|
|||
@ApiModelProperty(notes="上级团队编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String pgroupId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="级别0级1级2级3级4级",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer lvl; |
|||
|
|||
|
|||
@ApiModelProperty(notes="上级编号路径逗号分割,0,开始,本组编号+逗号结束",allowEmptyValue=true,example="",allowableValues="") |
|||
String pidPaths; |
|||
|
|||
|
|||
@ApiModelProperty(notes="是否为模板",allowEmptyValue=true,example="",allowableValues="") |
|||
String isTpl; |
|||
|
|||
|
|||
@ApiModelProperty(notes="副组长编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String assUserid; |
|||
|
|||
|
|||
@ApiModelProperty(notes="副组长姓名",allowEmptyValue=true,example="",allowableValues="") |
|||
String assUsername; |
|||
|
|||
|
|||
@ApiModelProperty(notes="下级团队数量",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer childrenCnt; |
|||
|
|||
|
|||
@ApiModelProperty(notes="组员数量",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer userCnt; |
|||
|
|||
|
|||
@ApiModelProperty(notes="权限码",allowEmptyValue=true,example="",allowableValues="") |
|||
String qxCode; |
|||
|
|||
|
|||
@ApiModelProperty(notes="是否计算工作量0否1是",allowEmptyValue=true,example="",allowableValues="") |
|||
String calcWorkload; |
|||
|
|||
|
|||
@ApiModelProperty(notes="节点类型0管理团队、1执行团队",allowEmptyValue=true,example="",allowableValues="") |
|||
String ntype; |
|||
|
|||
|
|||
@ApiModelProperty(notes="协作公司编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String crowBranchId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="协作公司名称",allowEmptyValue=true,example="",allowableValues="") |
|||
String crowBranchName; |
|||
|
|||
|
|||
@ApiModelProperty(notes="是否众包团队",allowEmptyValue=true,example="",allowableValues="") |
|||
String isCrow; |
|||
|
|||
/** |
|||
*主键 |
|||
**/ |
|||
public XmGroup(String id) { |
|||
this.id = id; |
|||
} |
|||
|
|||
/** |
|||
* 团队表 |
|||
**/ |
|||
public XmGroup() { |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,178 @@ |
|||
package com.xm.core.entity; |
|||
import lombok.Data; |
|||
import com.baomidou.mybatisplus.annotation.IdType; |
|||
import com.baomidou.mybatisplus.annotation.TableField; |
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.mdp.core.dao.annotation.TableIds; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import org.apache.ibatis.type.Alias; |
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import java.util.Date; |
|||
import java.math.BigDecimal; |
|||
|
|||
/** |
|||
* @author code-gen |
|||
* @since 2023-11-10 |
|||
*/ |
|||
@Data |
|||
@TableName("xm_group_state") |
|||
@ApiModel(description="团队状态表,无需前端维护,所有数据由汇总统计得出") |
|||
public class XmGroupState implements java.io.Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
@TableId(type = IdType.ASSIGN_ID) |
|||
|
|||
@ApiModelProperty(notes="团队编号,主键",allowEmptyValue=true,example="",allowableValues="") |
|||
String groupId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="开始时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date planStartTime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="结束时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date planEndTime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="实际开始时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date actStartTime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="实际结束时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date actEndTime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="计划工作量,根据关联任务汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal planWorkload; |
|||
|
|||
|
|||
@ApiModelProperty(notes="实际工作量,根据关联任务汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal actWorkload; |
|||
|
|||
|
|||
@ApiModelProperty(notes="计划成本,根据关联任务汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal planCostAmount; |
|||
|
|||
|
|||
@ApiModelProperty(notes="实际成本金额根据关联任务汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal actCostAmount; |
|||
|
|||
|
|||
@ApiModelProperty(notes="总体完成比例0-100之间,根据taskType进行汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal finishRate; |
|||
|
|||
|
|||
@ApiModelProperty(notes="需求完成率0-100之间,根据taskType进行汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal demandRate; |
|||
|
|||
|
|||
@ApiModelProperty(notes="设计完成率0-100之间,根据taskType进行汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal designRate; |
|||
|
|||
|
|||
@ApiModelProperty(notes="开发完成率0-100之间,根据taskType进行汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal devRate; |
|||
|
|||
|
|||
@ApiModelProperty(notes="uat测试完成率0-100之间,根据taskType进行汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal uatRate; |
|||
|
|||
|
|||
@ApiModelProperty(notes="sit测试完成率0-100之间,根据taskType进行汇总",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal sitRate; |
|||
|
|||
|
|||
@ApiModelProperty(notes="创建时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date ctime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="汇总时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date calcTime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="工时数",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal planWorkhours; |
|||
|
|||
|
|||
@ApiModelProperty(notes="总人数",allowEmptyValue=true,example="",allowableValues="") |
|||
BigDecimal planWorkerCnt; |
|||
|
|||
|
|||
@ApiModelProperty(notes="总关闭bugs",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer closedBugs; |
|||
|
|||
|
|||
@ApiModelProperty(notes="激活bugs",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer activeBugs; |
|||
|
|||
|
|||
@ApiModelProperty(notes="已确认bugs总数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer confirmedBugs; |
|||
|
|||
|
|||
@ApiModelProperty(notes="已解决bugs总数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer resolvedBugs; |
|||
|
|||
|
|||
@ApiModelProperty(notes="测试案例总数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer testCases; |
|||
|
|||
|
|||
@ApiModelProperty(notes="测试中案例总数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer execCases; |
|||
|
|||
|
|||
@ApiModelProperty(notes="设计中案例总数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer designCases; |
|||
|
|||
|
|||
@ApiModelProperty(notes="完成案例总数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer finishCases; |
|||
|
|||
|
|||
@ApiModelProperty(notes="关联迭代数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer iterationCnt; |
|||
|
|||
|
|||
@ApiModelProperty(notes="任务数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer taskCnt; |
|||
|
|||
|
|||
@ApiModelProperty(notes="完成的任务数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer finishTaskCnt; |
|||
|
|||
|
|||
@ApiModelProperty(notes="业务日期yyyy-MM-dd字符串",allowEmptyValue=true,example="",allowableValues="") |
|||
String bizDate; |
|||
|
|||
|
|||
@ApiModelProperty(notes="bug总数",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer bugCnt; |
|||
|
|||
|
|||
@ApiModelProperty(notes="项目编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String projectId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="项目名称",allowEmptyValue=true,example="",allowableValues="") |
|||
String projectName; |
|||
|
|||
|
|||
@ApiModelProperty(notes="团队名称",allowEmptyValue=true,example="",allowableValues="") |
|||
String groupName; |
|||
|
|||
/** |
|||
*团队编号 |
|||
**/ |
|||
public XmGroupState(String groupId) { |
|||
this.groupId = groupId; |
|||
} |
|||
|
|||
/** |
|||
* 团队状态表,无需前端维护,所有数据由汇总统计得出 |
|||
**/ |
|||
public XmGroupState() { |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,90 @@ |
|||
package com.xm.core.entity; |
|||
import lombok.Data; |
|||
import com.baomidou.mybatisplus.annotation.IdType; |
|||
import com.baomidou.mybatisplus.annotation.TableField; |
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.mdp.core.dao.annotation.TableIds; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import org.apache.ibatis.type.Alias; |
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @author code-gen |
|||
* @since 2023-11-10 |
|||
*/ |
|||
@Data |
|||
@TableName("xm_group_user") |
|||
@ApiModel(description="团队成员表") |
|||
public class XmGroupUser implements java.io.Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
@TableIds |
|||
|
|||
@ApiModelProperty(notes="团队编号,主键",allowEmptyValue=true,example="",allowableValues="") |
|||
String groupId; |
|||
@TableIds |
|||
|
|||
@ApiModelProperty(notes="团队成员编号,主键",allowEmptyValue=true,example="",allowableValues="") |
|||
String userid; |
|||
|
|||
|
|||
@ApiModelProperty(notes="加入时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date joinTime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="团队成员",allowEmptyValue=true,example="",allowableValues="") |
|||
String username; |
|||
|
|||
|
|||
@ApiModelProperty(notes="离队时间",allowEmptyValue=true,example="",allowableValues="") |
|||
Date outTime; |
|||
|
|||
|
|||
@ApiModelProperty(notes="当前状态0参与中1已退出团队",allowEmptyValue=true,example="",allowableValues="") |
|||
String status; |
|||
|
|||
|
|||
@ApiModelProperty(notes="组员原归属机构编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String obranchId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="是否私人加入0否1是",allowEmptyValue=true,example="",allowableValues="") |
|||
String isPri; |
|||
|
|||
|
|||
@ApiModelProperty(notes="排序号--从1开始",allowEmptyValue=true,example="",allowableValues="") |
|||
Integer seqNo; |
|||
|
|||
|
|||
@ApiModelProperty(notes="项目编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String projectId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="产品编号",allowEmptyValue=true,example="",allowableValues="") |
|||
String productId; |
|||
|
|||
|
|||
@ApiModelProperty(notes="0-项目小组,1-产品小组,2-团队",allowEmptyValue=true,example="",allowableValues="") |
|||
String pgClass; |
|||
|
|||
|
|||
@ApiModelProperty(notes="原归属机构名称",allowEmptyValue=true,example="",allowableValues="") |
|||
String obranchName; |
|||
|
|||
/** |
|||
*团队编号,团队成员编号 |
|||
**/ |
|||
public XmGroupUser(String groupId,String userid) { |
|||
this.groupId = groupId; |
|||
this.userid = userid; |
|||
} |
|||
|
|||
/** |
|||
* 团队成员表 |
|||
**/ |
|||
public XmGroupUser() { |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
package com.xm.core.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
import com.xm.core.entity.XmGroup; |
|||
/** |
|||
* @author maimeng-mdp code-gen |
|||
* @since 2023-11-10 |
|||
*/ |
|||
public interface XmGroupMapper extends BaseMapper<XmGroup> { |
|||
|
|||
/** |
|||
* 自定义查询,支持多表关联 |
|||
* @param page 分页条件 |
|||
* @param ew 一定要,并且必须加@Param("ew")注解 |
|||
* @param ext 如果xml中需要根据某些值进行特殊处理,可以通过这个进行传递,非必须,注解也可以不加 |
|||
* @return |
|||
*/ |
|||
List<Map<String,Object>> selectListMapByWhere(IPage page, @Param("ew") QueryWrapper ew,@Param("ext") Map<String,Object> ext); |
|||
|
|||
} |
|||
|
|||
@ -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.xm.core.mapper.XmGroupMapper"> |
|||
|
|||
<select id="selectListMapByWhere" resultType="HashMap"> |
|||
select * from xm_group res |
|||
<where> |
|||
${@com.mdp.Util@trimWhere(ew.customSqlSegment)} |
|||
<!--下面可以添加更多查询条件,正常的if 条件都是支持的--> |
|||
|
|||
</where> |
|||
<!--下面双引号内可以添加默认排序,如果前端没有上传排序,将使用引号内的排序规则--> |
|||
${@com.mdp.Util@trimOrderBy(ew.customSqlSegment,'')} |
|||
<!--下面双引号内可以添加默认分组,如果前端没有上传分组,将使用引号内的分组规则--> |
|||
${@com.mdp.Util@trimGroupBy(ew.customSqlSegment,'')} |
|||
</select> |
|||
</mapper> |
|||
@ -0,0 +1,28 @@ |
|||
package com.xm.core.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.xm.core.entity.XmGroupState; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
/** |
|||
* @author maimeng-mdp code-gen |
|||
* @since 2023-11-10 |
|||
*/ |
|||
public interface XmGroupStateMapper extends BaseMapper<XmGroupState> { |
|||
|
|||
/** |
|||
* 自定义查询,支持多表关联 |
|||
* @param page 分页条件 |
|||
* @param ew 一定要,并且必须加@Param("ew")注解 |
|||
* @param ext 如果xml中需要根据某些值进行特殊处理,可以通过这个进行传递,非必须,注解也可以不加 |
|||
* @return |
|||
*/ |
|||
List<Map<String,Object>> selectListMapByWhere(IPage page, @Param("ew") QueryWrapper ew,@Param("ext") Map<String,Object> ext); |
|||
|
|||
int loadTasksToXmProjectGroupState(String projectId); |
|||
} |
|||
|
|||
@ -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.xm.core.mapper.XmGroupStateMapper"> |
|||
|
|||
<select id="selectListMapByWhere" resultType="HashMap"> |
|||
select * from xm_group_state res |
|||
<where> |
|||
${@com.mdp.Util@trimWhere(ew.customSqlSegment)} |
|||
<!--下面可以添加更多查询条件,正常的if 条件都是支持的--> |
|||
|
|||
</where> |
|||
<!--下面双引号内可以添加默认排序,如果前端没有上传排序,将使用引号内的排序规则--> |
|||
${@com.mdp.Util@trimOrderBy(ew.customSqlSegment,'')} |
|||
<!--下面双引号内可以添加默认分组,如果前端没有上传分组,将使用引号内的分组规则--> |
|||
${@com.mdp.Util@trimGroupBy(ew.customSqlSegment,'')} |
|||
</select> |
|||
</mapper> |
|||
@ -0,0 +1,30 @@ |
|||
package com.xm.core.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.xm.core.entity.XmGroupUser; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
/** |
|||
* @author maimeng-mdp code-gen |
|||
* @since 2023-11-10 |
|||
*/ |
|||
public interface XmGroupUserMapper extends BaseMapper<XmGroupUser> { |
|||
|
|||
/** |
|||
* 自定义查询,支持多表关联 |
|||
* @param page 分页条件 |
|||
* @param ew 一定要,并且必须加@Param("ew")注解 |
|||
* @param ext 如果xml中需要根据某些值进行特殊处理,可以通过这个进行传递,非必须,注解也可以不加 |
|||
* @return |
|||
*/ |
|||
List<Map<String,Object>> selectListMapByWhere(IPage page, @Param("ew") QueryWrapper ew,@Param("ext") Map<String,Object> ext); |
|||
|
|||
List<XmGroupUser> selectGroupUserListByProjectId(String projectId); |
|||
|
|||
List<XmGroupUser> selectGroupUserListByProductId(String productId); |
|||
} |
|||
|
|||
@ -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.xm.core.mapper.XmGroupUserMapper"> |
|||
|
|||
<select id="selectListMapByWhere" resultType="HashMap"> |
|||
select * from xm_group_user res |
|||
<where> |
|||
${@com.mdp.Util@trimWhere(ew.customSqlSegment)} |
|||
<!--下面可以添加更多查询条件,正常的if 条件都是支持的--> |
|||
|
|||
</where> |
|||
<!--下面双引号内可以添加默认排序,如果前端没有上传排序,将使用引号内的排序规则--> |
|||
${@com.mdp.Util@trimOrderBy(ew.customSqlSegment,'')} |
|||
<!--下面双引号内可以添加默认分组,如果前端没有上传分组,将使用引号内的分组规则--> |
|||
${@com.mdp.Util@trimGroupBy(ew.customSqlSegment,'')} |
|||
</select> |
|||
</mapper> |
|||
@ -0,0 +1,36 @@ |
|||
package com.xm.core.service; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.mdp.core.service.BaseService; |
|||
import com.xm.core.entity.XmBranchStateHis; |
|||
import com.xm.core.entity.XmGroupState; |
|||
import com.xm.core.mapper.XmGroupStateMapper; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.<br> |
|||
* 组织 com.qqkj 顶级模块 xm 大模块 core 小模块 <br> |
|||
* 实体 XmProjectGroupState 表 XM.xm_group_state 当前主键(包括多主键): id; |
|||
***/ |
|||
@Service("xm.core.xmGroupStateService") |
|||
public class XmGroupStateService extends BaseService<XmGroupStateMapper, XmGroupState> { |
|||
|
|||
/** |
|||
* 计算bug、task、测试案例、等数据 |
|||
* @param projectId |
|||
* @return |
|||
*/ |
|||
public int loadTasksToXmProjectGroupState(String projectId) { |
|||
|
|||
return baseMapper.loadTasksToXmProjectGroupState( projectId); |
|||
} |
|||
|
|||
public List<Map<String, Object>> selectListMapByWhere(IPage page, QueryWrapper<XmBranchStateHis> qw, Map<String, Object> ext) { |
|||
return baseMapper.selectListMapByWhere(page,qw,ext); |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,38 @@ |
|||
package com.xm.core.service; |
|||
|
|||
import com.mdp.core.service.BaseService; |
|||
import com.xm.core.entity.XmGroupUser; |
|||
import com.xm.core.mapper.XmGroupUserMapper; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
/** |
|||
* 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.<br> |
|||
* 组织 com.qqkj 顶级模块 oa 大模块 xm 小模块 <br> |
|||
* 实体 XmProjectGroupUser 表 XM.xm_group_user 当前主键(包括多主键): id; |
|||
***/ |
|||
@Service("xm.core.xmGroupUserService") |
|||
public class XmGroupUserService extends BaseService<XmGroupUserMapper,XmGroupUser> { |
|||
|
|||
|
|||
@Autowired |
|||
XmRecordService xmRecordService; |
|||
|
|||
public List<XmGroupUser> selectGroupUserListByProjectId(String projectId) { |
|||
return baseMapper.selectGroupUserListByProjectId( projectId); |
|||
} |
|||
|
|||
public List<XmGroupUser> selectGroupUserListByProductId(String productId) { |
|||
return baseMapper.selectGroupUserListByProductId( productId); |
|||
} |
|||
|
|||
|
|||
public void doBatchDelete(List<XmGroupUser> canDelUsers) { |
|||
super.batchDelete(canDelUsers); |
|||
} |
|||
|
|||
/** 请在此类添加自定义函数 */ |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,197 @@ |
|||
package com.xm.core.service.cache; |
|||
|
|||
import com.mdp.mq.sp.Publish; |
|||
import com.xm.core.vo.XmGroupVo; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.data.redis.core.RedisTemplate; |
|||
import org.springframework.scheduling.annotation.Scheduled; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Calendar; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Set; |
|||
import java.util.concurrent.ConcurrentHashMap; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
@Service |
|||
public class XmGroupCacheService { |
|||
|
|||
@Autowired |
|||
RedisTemplate redisTemplate; |
|||
|
|||
Map<String, List<XmGroupVo>> prjCache =new ConcurrentHashMap<>(); |
|||
Map<String, List<XmGroupVo>> prdCache =new ConcurrentHashMap<>(); |
|||
|
|||
@Autowired |
|||
Publish publish; |
|||
|
|||
String currPrdDateKey=""; |
|||
public String getProductKey(String productId){ |
|||
Calendar currCal=Calendar.getInstance(); |
|||
String dateKey=currCal.get(Calendar.YEAR)+"-"+currCal.get(Calendar.DAY_OF_YEAR)+"_prd"; |
|||
String finalKey=this.getCacheKey()+":"+dateKey+":"+productId; |
|||
if(dateKey.equals(currPrdDateKey)){ |
|||
return finalKey; |
|||
}else { |
|||
currPrdDateKey=dateKey; |
|||
this.redisTemplate.expire(finalKey,24,TimeUnit.HOURS); |
|||
return finalKey; |
|||
} |
|||
} |
|||
String currPrjDateKey=""; |
|||
public String getProjectKey(String projectId){ |
|||
Calendar currCal=Calendar.getInstance(); |
|||
String dateKey=currCal.get(Calendar.YEAR)+"-"+currCal.get(Calendar.DAY_OF_YEAR)+"_prj"; |
|||
String finalKey=this.getCacheKey()+":"+dateKey+":"+projectId; |
|||
if(dateKey.equals(currPrjDateKey)){ |
|||
return finalKey; |
|||
}else { |
|||
currPrjDateKey=dateKey; |
|||
this.redisTemplate.expire(finalKey,24,TimeUnit.HOURS); |
|||
return finalKey; |
|||
} |
|||
} |
|||
String getCacheKey() { |
|||
return "xm_group"; |
|||
} |
|||
|
|||
public List<XmGroupVo> getProjectGroups(String projectId){ |
|||
String key=this.getProjectKey(projectId); |
|||
List<XmGroupVo> groupVoList=this.prjCache.get(key); |
|||
if(groupVoList==null){ |
|||
groupVoList= (List<XmGroupVo>) redisTemplate.opsForHash().values(key); |
|||
if(groupVoList!=null){ |
|||
this.prjCache.put(key,groupVoList); |
|||
} |
|||
return groupVoList; |
|||
}else { |
|||
return groupVoList; |
|||
} |
|||
|
|||
|
|||
} |
|||
public XmGroupVo getProjectGroup(String projectId, String groupId){ |
|||
String key=this.getProjectKey(projectId); |
|||
return (XmGroupVo) redisTemplate.opsForHash().get(key,groupId); |
|||
} |
|||
public void putProjectGroup(XmGroupVo group){ |
|||
String key=this.getProjectKey(group.getProjectId()); |
|||
redisTemplate.opsForHash().put(key, group.getId(), group); |
|||
} |
|||
|
|||
/** |
|||
* |
|||
* @param projectId |
|||
*/ |
|||
public void clearProjectGroup(String projectId){ |
|||
String key=this.getProjectKey(projectId); |
|||
this.clearProjectGroups(projectId); |
|||
} |
|||
public void putProjectGroups(String projectId,List<XmGroupVo> groups){ |
|||
|
|||
String key=this.getProjectKey(projectId); |
|||
if(groups==null || groups.size()==0){ |
|||
this.clearProjectGroups(projectId); |
|||
return; |
|||
} |
|||
for (XmGroupVo group : groups) { |
|||
String hashKey= group.getId(); |
|||
redisTemplate.opsForHash().put(key, hashKey, group); |
|||
} |
|||
if(groups==null){ |
|||
this.prjCache.remove(key); |
|||
}else{ |
|||
this.prjCache.put(key,groups); |
|||
} |
|||
publish.push("XM_GROUP_PRJ_CACHE",projectId); |
|||
} |
|||
public void clearProjectGroups(String projectId){ |
|||
String key=this.getProjectKey(projectId); |
|||
Set<String> keySet=redisTemplate.opsForHash().keys(key); |
|||
if(keySet!=null && keySet.size()>0){ |
|||
redisTemplate.opsForHash().delete(key,keySet.toArray()); |
|||
} |
|||
this.prjCache.remove(key); |
|||
publish.push("XM_GROUP_PRJ_CACHE",projectId); |
|||
} |
|||
|
|||
public List<XmGroupVo> getProductGroups(String productId){ |
|||
String key=this.getProductKey(productId); |
|||
List<XmGroupVo> groupVoList=this.prdCache.get(key); |
|||
if(groupVoList==null){ |
|||
|
|||
groupVoList= (List<XmGroupVo>) redisTemplate.opsForHash().values(key); |
|||
if(groupVoList!=null){ |
|||
this.prdCache.put(key,groupVoList); |
|||
} |
|||
return groupVoList; |
|||
}else { |
|||
return groupVoList; |
|||
} |
|||
} |
|||
public XmGroupVo getProductGroup(String productId, String groupId){ |
|||
String key=this.getProductKey(productId); |
|||
return (XmGroupVo) redisTemplate.opsForHash().get(key,groupId); |
|||
} |
|||
public void putProductGroup(XmGroupVo group){ |
|||
String key=this.getProductKey(group.getProductId()); |
|||
redisTemplate.opsForHash().put(key, group.getId(), group); |
|||
} |
|||
public void clearProductGroup(String productId){ |
|||
String key=this.getProductKey(productId); |
|||
this.clearProductGroups(productId); |
|||
} |
|||
public void putProductGroups(String productId,List<XmGroupVo> groups){ |
|||
String key=this.getProductKey(productId); |
|||
if(groups==null || groups.size()==0){ |
|||
this.clearProductGroups(productId); |
|||
return; |
|||
} |
|||
for (XmGroupVo group : groups) { |
|||
String hashKey= group.getId(); |
|||
redisTemplate.opsForHash().put(key, hashKey, group); |
|||
} |
|||
if(groups==null){ |
|||
this.prdCache.remove(key); |
|||
}else{ |
|||
this.prdCache.put(key,groups); |
|||
} |
|||
publish.push("XM_GROUP_PRD_CACHE",productId); |
|||
} |
|||
public void clearProductGroups(String productId){ |
|||
String key=this.getProductKey(productId); |
|||
Set<String> keySet=redisTemplate.opsForHash().keys(key); |
|||
if(keySet!=null && keySet.size()>0){ |
|||
redisTemplate.opsForHash().delete(key,keySet.toArray()); |
|||
} |
|||
this.prdCache.remove(key); |
|||
publish.push("XM_GROUP_PRD_CACHE",productId); |
|||
} |
|||
|
|||
public void clearLocalPrjectCache(String projectId) { |
|||
this.prjCache.remove(getProjectKey(projectId)); |
|||
} |
|||
|
|||
public void clearLocalProductCache(String productId) { |
|||
this.prdCache.remove(getProductKey(productId)); |
|||
} |
|||
|
|||
/*每30分钟清除一次过期的本地缓存*/ |
|||
@Scheduled(cron = "* */30 * * * *") |
|||
public void timer() { |
|||
String currPrdKey=this.getCacheKey()+":"+currPrdDateKey+":"; |
|||
|
|||
String currPrjKey=this.getCacheKey()+":"+currPrjDateKey+":"; |
|||
for (String key : this.prdCache.keySet()) { |
|||
if(!key.startsWith(currPrdKey)){ |
|||
this.prdCache.remove(key); |
|||
} |
|||
} |
|||
for (String key : this.prjCache.keySet()) { |
|||
if(!key.startsWith(currPrjKey)){ |
|||
this.prjCache.remove(key); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
package com.xm.core.vo; |
|||
|
|||
import com.xm.core.entity.XmGroup; |
|||
import com.xm.core.entity.XmGroupUser; |
|||
import io.swagger.annotations.ApiModel; |
|||
|
|||
import java.util.List; |
|||
|
|||
@ApiModel(description="xm_group") |
|||
public class XmGroupVo extends XmGroup { |
|||
List<XmGroupUser> groupUsers; |
|||
|
|||
public List<XmGroupUser> getGroupUsers() { return groupUsers; } |
|||
|
|||
public void setGroupUsers(List<XmGroupUser> groupUsers) { this.groupUsers = groupUsers; } |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue