Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
1efc10efd3
  1. 246
      xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java

246
xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java

@ -12,6 +12,7 @@ import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils;
import com.xm.core.PubTool;
import com.xm.core.entity.XmProduct;
import com.xm.core.entity.XmProject;
import com.xm.core.entity.XmProjectPhase;
import com.xm.core.service.*;
import com.xm.core.vo.XmProjectGroupVo;
@ -30,7 +31,7 @@ import java.util.stream.Collectors;
import static com.mdp.core.utils.BaseUtils.map;
/**
* url编制采用rest风格,如对XM.xm_project_phase 产品计划模板的操作有增删改查,对应的url分别为:<br>
* url编制采用rest风格,如对XM.xm_project_phase 项目计划模板的操作有增删改查,对应的url分别为:<br>
* 新增: xm/xmProjectPhase/add <br>
* 查询: xm/xmProjectPhase/list<br>
* 模糊查询: xm/xmProjectPhase/listKey<br>
@ -40,9 +41,9 @@ import static com.mdp.core.utils.BaseUtils.map;
* 组织 com.qqkj 顶级模块 oa 大模块 xm 小模块 <br>
* 实体 XmProjectPhase XM.xm_project_phase 当前主键(包括多主键): id;
***/
@RestController("xm.core.xmProductPhaseController")
@RequestMapping(value="/**/xm/core/xmProductPhase")
@Api(tags={"产品计划模板操作接口"})
@RestController("xm.core.xmProjectPhaseController")
@RequestMapping(value="/**/xm/core/xmProjectPhase")
@Api(tags={"项目计划模板操作接口"})
public class XmProductPhaseController {
static Log logger=LogFactory.getLog(XmProductPhaseController.class);
@ -53,24 +54,21 @@ public class XmProductPhaseController {
@Autowired
private XmProjectGroupService groupService;
@Autowired
private XmProjectService xmProjectService;
@Autowired
private XmProductService xmProductService;
@Autowired
XmRecordService xmRecordService;
@ApiOperation( value = "查询产品计划模板信息列表",notes="listXmProjectPhase,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}")
@ApiOperation( value = "查询项目计划模板信息列表",notes="listXmProductPhase,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}")
@ApiImplicitParams({
@ApiImplicitParam(name="id",value="计划主键,主键",required=false),
@ApiImplicitParam(name="phaseName",value="计划名称",required=false),
@ApiImplicitParam(name="remark",value="备注",required=false),
@ApiImplicitParam(name="parentPhaseId",value="上级计划编号",required=false),
@ApiImplicitParam(name="branchId",value="机构编号",required=false),
@ApiImplicitParam(name="productId",value="当前产品编号",required=false),
@ApiImplicitParam(name="productId",value="当前项目编号",required=false),
@ApiImplicitParam(name="beginDate",value="开始时间",required=false),
@ApiImplicitParam(name="endDate",value="结束时间",required=false),
@ApiImplicitParam(name="phaseBudgetHours",value="工时(不包括下一级)-应该大于或等于task中总工时",required=false),
@ -79,7 +77,7 @@ public class XmProductPhaseController {
@ApiImplicitParam(name="phaseBudgetNouserAt",value="非人力成本总预算(不包括下一级)-应该大于或等于task中非人力总成本",required=false),
@ApiImplicitParam(name="phaseBudgetInnerUserAt",value="内部人力成本总预算(不包括下一级)-应该大于或等于task中内部人力总成本",required=false),
@ApiImplicitParam(name="phaseBudgetOutUserAt",value="外购人力成本总预算(不包括下一级)-应该大于或等于task中外购总成本",required=false),
@ApiImplicitParam(name="projectBaselineId",value="产品级基线",required=false),
@ApiImplicitParam(name="projectBaselineId",value="项目级基线",required=false),
@ApiImplicitParam(name="bizProcInstId",value="当前流程实例编号",required=false),
@ApiImplicitParam(name="bizFlowState",value="当前流程状态0初始1审批中2审批通过3审批不通过4流程取消或者删除",required=false),
@ApiImplicitParam(name="phaseBudgetWorkload",value="总工作量单位人时-应该大于或者等于task中的预算总工作量",required=false),
@ -113,7 +111,7 @@ public class XmProductPhaseController {
@ApiResponse(code = 200,response= XmProjectPhase.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},pageInfo:{total:总记录数},data:[数据对象1,数据对象2,...]}")
})
@RequestMapping(value="/list",method=RequestMethod.GET)
public Map<String,Object> listXmProjectPhase( @RequestParam Map<String,Object> xmProjectPhase){
public Map<String,Object> listXmProductPhase( @RequestParam Map<String,Object> xmProjectPhase){
Map<String,Object> m = new HashMap<>();
RequestUtils.transformArray(xmProjectPhase, "ids");
PageUtils.startPage(xmProjectPhase);
@ -148,7 +146,7 @@ public class XmProductPhaseController {
}
@HasQx(value = "xm_core_xmProductPhase_setPhaseMngUser",name = "设置计划负责人",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_setPhaseMngUser",name = "设置计划负责人",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/setPhaseMngUser",method=RequestMethod.POST)
public Map<String,Object> setPhaseMngUser(@RequestBody XmProjectPhase xmProjectPhase) {
Map<String,Object> m = new HashMap<>();
@ -167,7 +165,7 @@ public class XmProductPhaseController {
return m;
}
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhaseDb.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(xmProjectPhaseDb.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectPhaseDb.getProductId());
User user = LoginUtils.getCurrentUserInfo();
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid());
@ -207,12 +205,15 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200,response=XmProjectPhase.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@HasQx(value = "xm_core_xmProductPhase_add",name = "创建产品计划",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_add",name = "创建项目计划",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/add",method=RequestMethod.POST)
public Map<String,Object> addXmProjectPhase(@RequestBody XmProjectPhase xmProjectPhase) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功新增一条数据");
try{
if(!StringUtils.hasText(xmProjectPhase.getProductId())){
return ResponseHelper.failed("productId-0","请上送项目编号");
}
if(StringUtils.isEmpty(xmProjectPhase.getId())) {
xmProjectPhase.setId(xmProjectPhaseService.createKey("id"));
}else{
@ -229,7 +230,7 @@ public class XmProductPhaseController {
xmProjectPhase.setMngUsername(user.getUsername());
}
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectPhase.getProductId());
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid());
@ -246,11 +247,16 @@ public class XmProductPhaseController {
}
List<String> excludePhaseIds=new ArrayList<>();
excludePhaseIds.add(xmProjectPhase.getId());
xmProjectPhaseService.calcPhaseBudgetAmount(xmProjectPhase);
xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase);
if(xmProjectPhase.getLvl()==1){
if("1".equals(xmProduct.getBudgetCtrl())){
tips=xmProjectPhaseService.judgetProductBudget(xmProduct.getId(),xmProjectPhase.getPhaseBudgetAt(),null,null,null,excludePhaseIds);
}
}else {
tips=xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(),xmProjectPhase.getPhaseBudgetAt(),null,null,null,excludePhaseIds);
if("1".equals(xmProduct.getPhaseBudgetCtrl())) {
tips = xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(), xmProjectPhase.getPhaseBudgetAt(), null, null, null, excludePhaseIds);
}
}
if(!tips.isOk()){
return ResponseHelper.failed(tips);
@ -280,14 +286,21 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}")
})
@HasQx(value = "xm_core_xmProductPhase_del",name = "删除产品计划",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_del",name = "删除项目计划",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/del",method=RequestMethod.POST)
public Map<String,Object> delXmProjectPhase(@RequestBody XmProjectPhase xmProjectPhase){
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功删除一条数据");
try{
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId());
if(!StringUtils.hasText(xmProjectPhase.getId())){
return ResponseHelper.failed("id-0","请上送计划编号");
}
XmProjectPhase xmProjectPhaseDb=this.xmProjectPhaseService.selectOneObject(xmProjectPhase);
if(xmProjectPhaseDb==null){
return ResponseHelper.failed("data-0","该计划已不存在");
}
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhaseDb.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectPhaseDb.getProductId());
User user = LoginUtils.getCurrentUserInfo();
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid());
@ -296,9 +309,9 @@ public class XmProductPhaseController {
m.put("tips", tips);
return m;
}
boolean meIsHisTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,xmProjectPhase.getMngUserid(),user.getUserid());
boolean meIsHisTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,xmProjectPhaseDb.getMngUserid(),user.getUserid());
if( !meIsPm && !meIsHisTeamHead ){
tips.setFailureMsg("您不是"+xmProjectPhase.getMngUsername()+"的组长,不允许删除其负责的计划");
tips.setFailureMsg("您不是"+xmProjectPhaseDb.getMngUsername()+"的组长,不允许删除其负责的计划");
m.put("tips", tips);
return m;
}
@ -307,7 +320,7 @@ public class XmProductPhaseController {
if(exists>0) {
tips.setFailureMsg("存在"+exists+"条任务,不允许删除");
}else {
XmProjectPhase xmProjectPhaseDb=this.xmProjectPhaseService.selectOneObject(xmProjectPhase);
if(xmProjectPhaseDb.getChildrenCnt()!=null && xmProjectPhaseDb.getChildrenCnt()>0){
tips.setFailureMsg("存在"+xmProjectPhaseDb.getChildrenCnt()+"条子计划,不允许删除");
} else {
@ -334,14 +347,21 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200,response=XmProjectPhase.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}")
})
@HasQx(value = "xm_core_xmProductPhase_edit",name = "修改产品计划基础信息",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_edit",name = "修改项目计划基础信息",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/edit",method=RequestMethod.POST)
public Map<String,Object> editXmProjectPhase(@RequestBody XmProjectPhase xmProjectPhase) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功更新一条数据");
try{
if(!StringUtils.hasText(xmProjectPhase.getId())){
return ResponseHelper.failed("id-0","请上送计划编号");
}
XmProjectPhase xmProjectPhaseDb=this.xmProjectPhaseService.selectOneObject(xmProjectPhase);
if(xmProjectPhaseDb==null){
return ResponseHelper.failed("data-0","该计划已不存在");
}
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectPhase.getProductId());
User user = LoginUtils.getCurrentUserInfo();
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid());
@ -360,17 +380,27 @@ public class XmProductPhaseController {
m.put("tips", tips);
return m;
}
xmProjectPhase=xmProjectPhaseService.autoCalcWorkload(xmProjectPhase);
xmProjectPhaseService.calcPhaseBudgetAmount(xmProjectPhase);
List<String> excludePhaseIds=new ArrayList<>();
excludePhaseIds.add(xmProjectPhase.getId());
//如果修改了预算数据才进行预算判断
if(xmProjectPhaseDb.getPhaseBudgetAt()!=null && xmProjectPhaseDb.getPhaseBudgetAt().compareTo(xmProjectPhase.getPhaseBudgetAt())!=0){
if(xmProjectPhase.getLvl()==1){
if("1".equals(xmProduct.getBudgetCtrl())){
tips=this.xmProjectPhaseService.judgetProductBudget(xmProduct.getId(),xmProjectPhase.getPhaseBudgetAt(),null,null,null,excludePhaseIds);
}
}else{
tips=this.xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(),xmProjectPhase.getPhaseBudgetAt(),null,null,null,excludePhaseIds);
if("1".equals(xmProduct.getPhaseBudgetCtrl())) {
tips = this.xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(), xmProjectPhase.getPhaseBudgetAt(), null, null, null, excludePhaseIds);
}
}
}
if(!tips.isOk()) {
return ResponseHelper.failed(tips);
}
xmProjectPhase=xmProjectPhaseService.autoCalcWorkload(xmProjectPhase);
xmProjectPhaseService.editByPk(xmProjectPhase);
xmRecordService.addProductPhaseRecord(xmProjectPhase.getProductId(), xmProjectPhase.getId(), "产品-计划-修改计划", "修改计划"+xmProjectPhase.getPhaseName(),JSON.toJSONString(xmProjectPhase),null);
@ -393,7 +423,7 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmProductPhase_batchDel",name = "批量删除产品计划",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_batchDel",name = "批量删除项目计划",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchDel",method=RequestMethod.POST)
public Map<String,Object> batchDelXmProjectPhase(@RequestBody List<XmProjectPhase> xmProjectPhases) {
Map<String,Object> m = new HashMap<>();
@ -406,14 +436,14 @@ public class XmProductPhaseController {
}
XmProjectPhase xmProjectPhase=xmProjectPhases.get(0);
if(!StringUtils.hasText(xmProjectPhase.getProductId())){
tips.setFailureMsg("产品编号不能为空");
tips.setFailureMsg("项目编号不能为空");
m.put("tips", tips);
return m;
}
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId());
List<String> existsTaskList=new ArrayList<>();
List<String> hasChildList=new ArrayList<>();
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectPhase.getProductId());
User user = LoginUtils.getCurrentUserInfo();
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid());
@ -489,7 +519,7 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmProductPhase_batchImportFromTemplate",name = "从模板批量创建产品计划",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_batchImportFromTemplate",name = "从模板批量创建项目计划",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchImportFromTemplate",method=RequestMethod.POST)
public Map<String,Object> batchImportFromTemplate(@RequestBody List<XmProjectPhase> xmProjectPhases) {
Map<String,Object> m = new HashMap<>();
@ -501,8 +531,12 @@ public class XmProductPhaseController {
return m;
}
XmProjectPhase xmProjectPhase=xmProjectPhases.get(0);
if(!StringUtils.hasText(xmProjectPhase.getProductId())){
return ResponseHelper.failed("productId-0","请上送项目编号");
}
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectPhase.getProductId());
User user = LoginUtils.getCurrentUserInfo();
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHeadOrAss(groupVoList,user.getUserid(),user.getUserid());
@ -517,6 +551,7 @@ public class XmProductPhaseController {
g.setMngUserid(user.getUserid());
g.setMngUsername(user.getUsername());
g=xmProjectPhaseService.autoCalcWorkload(g);
xmProjectPhaseService.calcPhaseBudgetAmount(g);
}
xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhases);
@ -542,24 +577,28 @@ public class XmProductPhaseController {
for (XmProjectPhase child : children) {
phaseTotalBudgetAt=phaseTotalBudgetAt.add(child.getPhaseBudgetAt());
}
if("1".equals(xmProduct.getPhaseBudgetCtrl())){
Tips tips2=xmProjectPhaseService.judgetPhaseBudget(parentId,phaseTotalBudgetAt,null,null,null,excludeIds);
if(!tips2.isOk()){
tips2.setFailureMsg(tips2.getMsg()+" 相关计划为【"+children.stream().map(i->i.getPhaseName()).collect(Collectors.joining(","))+"】");
return ResponseHelper.failed(tips2);
}
}
}else{//直接导入到产品之下需要判断当前一级预算是否超出产品总预算
}
}else{//直接导入到项目之下需要判断当前一级预算是否超出项目总预算
BigDecimal phaseTotalBudgetWorkload=BigDecimal.ZERO;
BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO;
for (XmProjectPhase l1Phase : l1Phases) {
phaseTotalBudgetWorkload=phaseTotalBudgetWorkload.add(l1Phase.getPhaseBudgetWorkload());
phaseTotalBudgetAt=phaseTotalBudgetAt.add(l1Phase.getPhaseBudgetAt());
}
tips=xmProjectPhaseService.judgetProductBudget(productId,phaseTotalBudgetAt,null,null,null,l1Phases.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
if("1".equals(xmProduct.getBudgetCtrl())) {
tips = xmProjectPhaseService.judgetProductBudget(productId, phaseTotalBudgetAt, null, null, null, l1Phases.stream().map(i -> i.getId()).collect(Collectors.toList()));
if (!tips.isOk()) {
return ResponseHelper.failed(tips);
}
}
}
if(tips.isOk()) {
for (XmProjectPhase projectPhase : xmProjectPhases) {
projectPhase.setMngUsername(user.getUsername());
@ -590,9 +629,9 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmProductPhase_batchSaveBudget",name = "批量修改产品计划的预算",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_batchSaveBudget",name = "批量修改项目计划的预算",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchSaveBudget",method=RequestMethod.POST)
public Map<String,Object> batchSaveBudget(@RequestBody List<XmProjectPhaseVo> xmProjectPhases) {
public Map<String,Object> batchSaveBudget(@RequestBody List<XmProjectPhase> xmProjectPhases) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功修改"+xmProjectPhases.size()+"条数据");
try{
@ -602,8 +641,12 @@ public class XmProductPhaseController {
return m;
}
XmProjectPhase xmProjectPhase=xmProjectPhases.get(0);
if(!StringUtils.hasText(xmProjectPhase.getProductId())){
return ResponseHelper.failed("productId-0","请上送项目编号");
}
XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId());
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(xmProjectPhase.getProductId());
User user = LoginUtils.getCurrentUserInfo();
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid());
@ -613,24 +656,38 @@ public class XmProductPhaseController {
return m;
}
String productId=null;
List<String> excludePhaseIds=new ArrayList<>();
for (XmProjectPhase g : xmProjectPhases) {
productId=g.getProductId();
g=xmProjectPhaseService.autoCalcWorkload(g);
xmProjectPhaseService.calcPhaseBudgetAmount(g);
}
xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhases);
List<XmProjectPhase> l1Phases=xmProjectPhases.stream().filter(i->1==i.getLvl()).collect(Collectors.toList());
if(l1Phases==null ||l1Phases.size()==0){//如果是导入到某个计划之下
if(l1Phases==null ||l1Phases.size()==0){//如果是导入到某个计划之下{//直接导入到项目之下需要判断当前一级预算是否超出项目总预算
BigDecimal phaseTotalBudgetWorkload=BigDecimal.ZERO;
BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO;
for (XmProjectPhase l1Phase : l1Phases) {
phaseTotalBudgetWorkload=phaseTotalBudgetWorkload.add(l1Phase.getPhaseBudgetWorkload());
phaseTotalBudgetAt=phaseTotalBudgetAt.add(l1Phase.getPhaseBudgetAt());
}
if("1".equals(xmProduct.getBudgetCtrl())){
tips=xmProjectPhaseService.judgetProductBudget(productId,phaseTotalBudgetAt,null,null,null,l1Phases.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
return ResponseHelper.failed(tips);
}
}
}
//找到导入的树中最上面的节点
List<XmProjectPhase> noExists=xmProjectPhases.stream().filter(i->!xmProjectPhases.stream().filter(k->k.getId().equals(i.getParentPhaseId())).findAny().isPresent()).collect(Collectors.toList());
List<XmProjectPhase> parentNoNulls= xmProjectPhases.stream().filter(i->StringUtils.hasText(i.getParentPhaseId())&&!"0".equals(i.getParentPhaseId())).collect(Collectors.toList());
//根据同一个父亲归类
Map<String,List<XmProjectPhase>> map=new HashMap<>();
for (XmProjectPhase noExist : noExists) {
List<XmProjectPhase> phases=map.get(noExist.getParentPhaseId());
for (XmProjectPhase phase : parentNoNulls) {
List<XmProjectPhase> phases=map.get(phase.getParentPhaseId());
if(phases==null){
phases=new ArrayList<>();
map.put(noExist.getParentPhaseId(),phases);
map.put(phase.getParentPhaseId(),phases);
}
phases.add(noExist);
phases.add(phase);
}
for (Map.Entry<String, List<XmProjectPhase>> kv : map.entrySet()) {
String parentId=kv.getKey();
@ -640,41 +697,28 @@ public class XmProductPhaseController {
for (XmProjectPhase child : children) {
phaseTotalBudgetAt=phaseTotalBudgetAt.add(child.getPhaseBudgetAt());
}
Tips tips2=xmProjectPhaseService.judgetPhaseBudget(parentId,phaseTotalBudgetAt,null,null,null,excludeIds);
if(!tips2.isOk()){
tips2.setFailureMsg(tips2.getMsg()+" 相关计划为【"+children.stream().map(i->i.getPhaseName()).collect(Collectors.joining(","))+"】");
if("1".equals(xmProduct.getPhaseBudgetCtrl())) {
Tips tips2 = xmProjectPhaseService.judgetPhaseBudget(parentId, phaseTotalBudgetAt, null, null, null, excludeIds);
if (!tips2.isOk()) {
tips2.setFailureMsg(tips2.getMsg() + " 相关计划为【" + children.stream().map(i -> i.getPhaseName()).collect(Collectors.joining(",")) + "】");
return ResponseHelper.failed(tips2);
}
}
}else{//直接导入到产品之下需要判断当前一级预算是否超出产品总预算
BigDecimal phaseTotalBudgetWorkload=BigDecimal.ZERO;
BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO;
for (XmProjectPhase l1Phase : l1Phases) {
phaseTotalBudgetWorkload=phaseTotalBudgetWorkload.add(l1Phase.getPhaseBudgetWorkload());
phaseTotalBudgetAt=phaseTotalBudgetAt.add(l1Phase.getPhaseBudgetAt());
}
tips=xmProjectPhaseService.judgetProductBudget(productId,phaseTotalBudgetAt,null,null,null,l1Phases.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
return ResponseHelper.failed(tips);
}
}
for (XmProjectPhaseVo projectPhase : xmProjectPhases) {
if(!"1".equals(projectPhase.getNtype()) && !"add".equals(projectPhase.getOpType())&& !"addSub".equals(projectPhase.getOpType())){
if(xmProjectPhases.stream().filter(i->projectPhase.getId().equals(i.getParentPhaseId())).findAny().isPresent()){
return ResponseHelper.failed("p-ntype-no-1",projectPhase.getPhaseName()+"不是计划集,不允许下挂子计划");
}
}
if("add".equals(projectPhase.getOpType())||"addSub".equals(projectPhase.getOpType())){
for (XmProjectPhase projectPhase : xmProjectPhases) {
int childrenCnt=Integer.valueOf(xmProjectPhases.stream().filter(i->projectPhase.getId().equals(i.getParentPhaseId())).count()+"");
if(childrenCnt>0){
projectPhase.setChildrenCnt(childrenCnt);
projectPhase.setNtype("1");
}
}
}
xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhases.stream().map(i->(XmProjectPhase)i).collect(Collectors.toList()));
//xmProjectPhaseService.batchInsertOrUpdate(xmProjectPhases);
List<XmProjectPhase> xmProjectPhaseListDb=xmProjectPhaseService.selectListByIds(xmProjectPhases.stream().map(i->i.getId()).collect(Collectors.toList()));
List<XmProjectPhase> inserts=xmProjectPhases.stream().filter(i->!xmProjectPhaseListDb.stream().filter(k->k.getId().equals(i.getId())).findAny().isPresent()).collect(Collectors.toList());
List<XmProjectPhase> updates=xmProjectPhases.stream().filter(i->xmProjectPhaseListDb.stream().filter(k->k.getId().equals(i.getId())).findAny().isPresent()).collect(Collectors.toList());
xmProjectPhaseService.batchInsertOrUpdate(inserts,updates);
for (XmProjectPhase phase : xmProjectPhases) {
xmRecordService.addProductPhaseRecord(phase.getProductId(), phase.getId(), "产品-计划-修改计划预算", "修改计划"+phase.getPhaseName(),JSON.toJSONString(phase),null);
@ -694,14 +738,18 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmProductPhase_loadTasksToXmProductPhase",name = "计算各个计划对应的bug、task、测试案例等数据",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@RequestMapping(value="/loadTasksToXmProductPhase",method=RequestMethod.POST)
public Map<String,Object> loadTasksToXmProductPhase(@RequestBody Map<String,Object> params) {
@HasQx(value = "xm_core_xmProjectPhase_loadTasksToXmProjectPhase",name = "计算各个计划对应的bug、task、测试案例等数据",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/loadTasksToXmProjectPhase",method=RequestMethod.POST)
public Map<String,Object> loadTasksToXmProjectPhase(@RequestBody Map<String,Object> params) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功修改数据");
try{
String productId=(String) params.get("productId");
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(productId);
if(!StringUtils.hasText(productId)){
return ResponseHelper.failed("productId-0","请上送项目编号");
}
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(productId);
User user = LoginUtils.getCurrentUserInfo();
XmProduct xmProduct=this.xmProductService.getProductFromCache(productId);
@ -712,8 +760,8 @@ public class XmProductPhaseController {
m.put("tips", tips);
return m;
}
int i= xmProjectPhaseService.loadTasksToXmProductPhase(xmProduct.getId());
xmRecordService.addProductPhaseRecord(xmProduct.getId(), "", "产品-计划-汇总统计", "计算产品计划进度","",null);
int i= xmProjectPhaseService.loadTasksToXmProjectPhase(xmProduct.getId());
xmRecordService.addProductPhaseRecord(xmProduct.getId(), "", "产品-计划-汇总统计", "计算项目计划进度","",null);
}catch (BizException e) {
@ -731,14 +779,18 @@ public class XmProductPhaseController {
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmProductPhase_calcKeyPaths",name = "关键路径计算",categoryId = "admin-xm",categoryName = "管理端-产品管理系统")
@HasQx(value = "xm_core_xmProjectPhase_calcKeyPaths",name = "关键路径计算",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/calcKeyPaths",method=RequestMethod.POST)
public Map<String,Object> calcKeyPaths(@RequestBody Map<String,Object> params) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功修改数据");
try{
String productId=(String) params.get("productId");
List<XmProjectGroupVo> groupVoList=groupService.getProductGroupVoList(productId);
if(!StringUtils.hasText(productId)){
return ResponseHelper.failed("productId-0","请上送项目编号");
}
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(productId);
User user = LoginUtils.getCurrentUserInfo();
XmProduct xmProduct=this.xmProductService.getProductFromCache(productId);
@ -750,7 +802,7 @@ public class XmProductPhaseController {
return m;
}
xmProjectPhaseService.calcKeyPaths((String) params.get("productId"));
xmRecordService.addProductPhaseRecord(xmProduct.getId(), "", "产品-计划-关键路径计算", "计算产品计划关键路径","",null);
xmRecordService.addProductPhaseRecord(xmProduct.getId(), "", "产品-计划-关键路径计算", "计算项目计划关键路径","",null);
}catch (BizException e) {
tips=e.getTips();
@ -762,4 +814,42 @@ public class XmProductPhaseController {
m.put("tips", tips);
return m;
}
@ApiOperation( value = "查询产品与计划汇总数据",notes="selectTotalProductAndPhaseBudgetCost")
@ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
})
@HasQx(value = "xm_core_xmProjectPhase_selectTotalProductAndPhaseBudgetCost",name = "查询产品与计划汇总数据",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/selectTotalProductAndPhaseBudgetCost",method=RequestMethod.POST)
public Map<String,Object> getProjectBudgetWithsPhaseBudget(@RequestBody Map<String,Object> params) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功查询预算数据");
try{
String productId=(String) params.get("productId");
if(!StringUtils.hasText(productId)){
return ResponseHelper.failed("productId-0","请上送项目编号");
}
List<XmProjectGroupVo> groupVoList=groupService.getProjectGroupVoList(productId);
User user = LoginUtils.getCurrentUserInfo();
XmProduct xmProduct=this.xmProductService.getProductFromCache(productId);
boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid());
boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid());
if( !meIsPm && !meIsTeamHead ){
tips.setFailureMsg("您不是组长、也不是产品管理者,不允许查询产品与计划汇总数据");
m.put("tips", tips);
return m;
}
Map<String,Object> data=xmProjectPhaseService.selectTotalProjectAndPhaseBudgetCost((String) params.get("productId"),null);
m.put("data",data);
}catch (BizException e) {
tips=e.getTips();
logger.error("",e);
}catch (Exception e) {
tips.setFailureMsg(e.getMessage());
logger.error("",e);
}
m.put("tips", tips);
return m;
}
}
Loading…
Cancel
Save