diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java index 66809f86..9a7270f5 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java +++ b/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分别为:
+ * url编制采用rest风格,如对XM.xm_project_phase 项目计划模板的操作有增删改查,对应的url分别为:
* 新增: xm/xmProjectPhase/add
* 查询: xm/xmProjectPhase/list
* 模糊查询: xm/xmProjectPhase/listKey
@@ -40,81 +41,78 @@ import static com.mdp.core.utils.BaseUtils.map; * 组织 com.qqkj 顶级模块 oa 大模块 xm 小模块
* 实体 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); - + @Autowired private XmProjectPhaseService xmProjectPhaseService; @Autowired private XmProjectGroupService groupService; - - @Autowired - private XmProjectService xmProjectService; - @Autowired private XmProductService xmProductService; - + + @Autowired - XmRecordService xmRecordService; - - @ApiOperation( value = "查询产品计划模板信息列表",notes="listXmProjectPhase,条件之间是 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="beginDate",value="开始时间",required=false), - @ApiImplicitParam(name="endDate",value="结束时间",required=false), - @ApiImplicitParam(name="phaseBudgetHours",value="工时(不包括下一级)-应该大于或等于task中总工时",required=false), - @ApiImplicitParam(name="phaseBudgetStaffNu",value="投入人员数(不包括下一级)-应该大于或等于task中总人数",required=false), - @ApiImplicitParam(name="ctime",value="创建时间",required=false), - @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="bizProcInstId",value="当前流程实例编号",required=false), - @ApiImplicitParam(name="bizFlowState",value="当前流程状态0初始1审批中2审批通过3审批不通过4流程取消或者删除",required=false), - @ApiImplicitParam(name="phaseBudgetWorkload",value="总工作量单位人时-应该大于或者等于task中的预算总工作量",required=false), - @ApiImplicitParam(name="phaseActWorkload",value="已完成工作量单位人时-从task中的实际工作量算出",required=false), - @ApiImplicitParam(name="phaseActInnerUserWorkload",value="实际内部人力工作量-来自任务表合计",required=false), - @ApiImplicitParam(name="phaseActOutUserWorkload",value="实际外购人力工作量-来自任务表合计",required=false), - @ApiImplicitParam(name="taskType",value="0售前方案1投标2需求3设计4开发5测试6验收7部署8运维--来自基础数据表taskType",required=false), - @ApiImplicitParam(name="planType",value="计划类型w1-周,w2-2周,w3-3周,m1-1月,m2-2月,q1-季,q2-半年,y1-年",required=false), - @ApiImplicitParam(name="seqNo",value="顺序号",required=false), - @ApiImplicitParam(name="phaseBudgetInnerUserWorkload",value="内部人力工作量总预算(不包括下一级)-应该大于或等于task中内部人力总成本",required=false), - @ApiImplicitParam(name="phaseBudgetOutUserWorkload",value="外购人力工作量总预算(不包括下一级)-应该大于或等于task中外购总成本",required=false), - @ApiImplicitParam(name="actNouserAt",value="实际非人力成本-来自任务表合计",required=false), - @ApiImplicitParam(name="actInnerUserAt",value="实际内部人力成本-来自任务表合计",required=false), - @ApiImplicitParam(name="phaseBudgetInnerUserPrice",value="内部人力成本单价元/人时",required=false), - @ApiImplicitParam(name="phaseBudgetOutUserPrice",value="外购人力成本单价元/人时",required=false), - @ApiImplicitParam(name="phaseBudgetOutUserCnt",value="外购人数",required=false), - @ApiImplicitParam(name="phaseBudgetInnerUserCnt",value="内部人数",required=false), - @ApiImplicitParam(name="actRate",value="实际进度0-100",required=false), - @ApiImplicitParam(name="phaseStatus",value="计划状态0初始1执行中2完工3关闭4删除中5已删除6暂停",required=false), - @ApiImplicitParam(name="actOutUserAt",value="实际外部人力成本",required=false), - @ApiImplicitParam(name="taskCnt",value="任务数",required=false), - @ApiImplicitParam(name="finishTaskCnt",value="完成的任务数",required=false), - @ApiImplicitParam(name="iterationCnt",value="迭代数",required=false), - @ApiImplicitParam(name="pageSize",value="每页记录数",required=false), - @ApiImplicitParam(name="currentPage",value="当前页码,从1开始",required=false), - @ApiImplicitParam(name="total",value="总记录数,服务器端收到0时,会自动计算总记录数,如果上传>0的不自动计算",required=false), - @ApiImplicitParam(name="orderFields",value="排序列 如性别、学生编号排序 ['sex','studentId']",required=false), - @ApiImplicitParam(name="orderDirs",value="排序方式,与orderFields对应,升序 asc,降序desc 如 性别 升序、学生编号降序 ['asc','desc']",required=false) + XmRecordService xmRecordService; + + @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="beginDate",value="开始时间",required=false), + @ApiImplicitParam(name="endDate",value="结束时间",required=false), + @ApiImplicitParam(name="phaseBudgetHours",value="工时(不包括下一级)-应该大于或等于task中总工时",required=false), + @ApiImplicitParam(name="phaseBudgetStaffNu",value="投入人员数(不包括下一级)-应该大于或等于task中总人数",required=false), + @ApiImplicitParam(name="ctime",value="创建时间",required=false), + @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="bizProcInstId",value="当前流程实例编号",required=false), + @ApiImplicitParam(name="bizFlowState",value="当前流程状态0初始1审批中2审批通过3审批不通过4流程取消或者删除",required=false), + @ApiImplicitParam(name="phaseBudgetWorkload",value="总工作量单位人时-应该大于或者等于task中的预算总工作量",required=false), + @ApiImplicitParam(name="phaseActWorkload",value="已完成工作量单位人时-从task中的实际工作量算出",required=false), + @ApiImplicitParam(name="phaseActInnerUserWorkload",value="实际内部人力工作量-来自任务表合计",required=false), + @ApiImplicitParam(name="phaseActOutUserWorkload",value="实际外购人力工作量-来自任务表合计",required=false), + @ApiImplicitParam(name="taskType",value="0售前方案1投标2需求3设计4开发5测试6验收7部署8运维--来自基础数据表taskType",required=false), + @ApiImplicitParam(name="planType",value="计划类型w1-周,w2-2周,w3-3周,m1-1月,m2-2月,q1-季,q2-半年,y1-年",required=false), + @ApiImplicitParam(name="seqNo",value="顺序号",required=false), + @ApiImplicitParam(name="phaseBudgetInnerUserWorkload",value="内部人力工作量总预算(不包括下一级)-应该大于或等于task中内部人力总成本",required=false), + @ApiImplicitParam(name="phaseBudgetOutUserWorkload",value="外购人力工作量总预算(不包括下一级)-应该大于或等于task中外购总成本",required=false), + @ApiImplicitParam(name="actNouserAt",value="实际非人力成本-来自任务表合计",required=false), + @ApiImplicitParam(name="actInnerUserAt",value="实际内部人力成本-来自任务表合计",required=false), + @ApiImplicitParam(name="phaseBudgetInnerUserPrice",value="内部人力成本单价元/人时",required=false), + @ApiImplicitParam(name="phaseBudgetOutUserPrice",value="外购人力成本单价元/人时",required=false), + @ApiImplicitParam(name="phaseBudgetOutUserCnt",value="外购人数",required=false), + @ApiImplicitParam(name="phaseBudgetInnerUserCnt",value="内部人数",required=false), + @ApiImplicitParam(name="actRate",value="实际进度0-100",required=false), + @ApiImplicitParam(name="phaseStatus",value="计划状态0初始1执行中2完工3关闭4删除中5已删除6暂停",required=false), + @ApiImplicitParam(name="actOutUserAt",value="实际外部人力成本",required=false), + @ApiImplicitParam(name="taskCnt",value="任务数",required=false), + @ApiImplicitParam(name="finishTaskCnt",value="完成的任务数",required=false), + @ApiImplicitParam(name="iterationCnt",value="迭代数",required=false), + @ApiImplicitParam(name="pageSize",value="每页记录数",required=false), + @ApiImplicitParam(name="currentPage",value="当前页码,从1开始",required=false), + @ApiImplicitParam(name="total",value="总记录数,服务器端收到0时,会自动计算总记录数,如果上传>0的不自动计算",required=false), + @ApiImplicitParam(name="orderFields",value="排序列 如性别、学生编号排序 ['sex','studentId']",required=false), + @ApiImplicitParam(name="orderDirs",value="排序方式,与orderFields对应,升序 asc,降序desc 如 性别 升序、学生编号降序 ['asc','desc']",required=false) }) @ApiResponses({ - @ApiResponse(code = 200,response= XmProjectPhase.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'错误码'},pageInfo:{total:总记录数},data:[数据对象1,数据对象2,...]}") + @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 listXmProjectPhase( @RequestParam Map xmProjectPhase){ - Map m = new HashMap<>(); + public Map listXmProductPhase( @RequestParam Map xmProjectPhase){ + Map m = new HashMap<>(); RequestUtils.transformArray(xmProjectPhase, "ids"); PageUtils.startPage(xmProjectPhase); List> xmProjectPhaseList = xmProjectPhaseService.selectListMapByWhere(xmProjectPhase); //列出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 setPhaseMngUser(@RequestBody XmProjectPhase xmProjectPhase) { Map m = new HashMap<>(); @@ -167,7 +165,7 @@ public class XmProductPhaseController { return m; } XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhaseDb.getProductId()); - List groupVoList=groupService.getProductGroupVoList(xmProjectPhaseDb.getProductId()); + List 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()); @@ -205,18 +203,21 @@ public class XmProductPhaseController { @ApiOperation( value = "新增一条xm_project_phase信息",notes="addXmProjectPhase,主键如果为空,后台自动生成") @ApiResponses({ - @ApiResponse(code = 200,response=XmProjectPhase.class,message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") + @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 addXmProjectPhase(@RequestBody XmProjectPhase xmProjectPhase) { Map 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{ - XmProjectPhase xmProjectPhaseQuery = new XmProjectPhase(xmProjectPhase.getId()); + XmProjectPhase xmProjectPhaseQuery = new XmProjectPhase(xmProjectPhase.getId()); if(xmProjectPhaseService.countByWhere(xmProjectPhaseQuery)>0){ tips.setFailureMsg("编号重复,请修改编号再提交"); m.put("tips", tips); @@ -229,7 +230,7 @@ public class XmProductPhaseController { xmProjectPhase.setMngUsername(user.getUsername()); } XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId()); - List groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId()); + List groupVoList=groupService.getProjectGroupVoList(xmProjectPhase.getProductId()); boolean meIsPm=groupService.checkUserIsProductAdm(xmProduct,user.getUserid()); boolean meIsTeamHead=groupService.checkUserIsOtherUserTeamHead(groupVoList,user.getUserid(),user.getUserid()); @@ -246,48 +247,60 @@ public class XmProductPhaseController { } List excludePhaseIds=new ArrayList<>(); excludePhaseIds.add(xmProjectPhase.getId()); + xmProjectPhaseService.calcPhaseBudgetAmount(xmProjectPhase); xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase); if(xmProjectPhase.getLvl()==1){ - tips=xmProjectPhaseService.judgetProductBudget(xmProduct.getId(),xmProjectPhase.getPhaseBudgetAt(),null,null,null,excludePhaseIds); + 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); } - XmProjectPhase parentDb=xmProjectPhaseService.selectOneObject(new XmProjectPhase(xmProjectPhase.getParentPhaseId())); - if(parentDb==null){ - return ResponseHelper.failed("p-no-exists","上级计划不存在"); - } - if(!"1".equals(parentDb.getNtype())){ - return ResponseHelper.failed("p-ntype-no-1","上级【"+parentDb.getPhaseName()+"】不是计划集,不能在其之下建立子计划"); - } - xmProjectPhaseService.insert(xmProjectPhase); - xmRecordService.addProductPhaseRecord(xmProduct.getId(), xmProjectPhase.getId(), "产品-计划-新增计划", "新增计划"+xmProjectPhase.getPhaseName(),JSON.toJSONString(xmProjectPhase),null); - m.put("data",xmProjectPhase); - }catch (BizException e) { + XmProjectPhase parentDb=xmProjectPhaseService.selectOneObject(new XmProjectPhase(xmProjectPhase.getParentPhaseId())); + if(parentDb==null){ + return ResponseHelper.failed("p-no-exists","上级计划不存在"); + } + if(!"1".equals(parentDb.getNtype())){ + return ResponseHelper.failed("p-ntype-no-1","上级【"+parentDb.getPhaseName()+"】不是计划集,不能在其之下建立子计划"); + } + xmProjectPhaseService.insert(xmProjectPhase); + xmRecordService.addProductPhaseRecord(xmProduct.getId(), xmProjectPhase.getId(), "产品-计划-新增计划", "新增计划"+xmProjectPhase.getPhaseName(),JSON.toJSONString(xmProjectPhase),null); + m.put("data",xmProjectPhase); + }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; - } + } /***/ @ApiOperation( value = "删除一条xm_project_phase信息",notes="delXmProjectPhase,仅需要上传主键字段") @ApiResponses({ - @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}}") + @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 delXmProjectPhase(@RequestBody XmProjectPhase xmProjectPhase){ Map m = new HashMap<>(); Tips tips=new Tips("成功删除一条数据"); try{ - XmProduct xmProduct=this.xmProductService.getProductFromCache(xmProjectPhase.getProductId()); - List 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 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 { @@ -315,33 +328,40 @@ public class XmProductPhaseController { xmRecordService.addProductPhaseRecord(xmProjectPhaseDb.getProductId(), xmProjectPhaseDb.getId(), "产品-计划-删除计划", "删除计划"+xmProjectPhaseDb.getPhaseName(),"",JSON.toJSONString(xmProjectPhaseDb)); } } - - - }catch (BizException e) { + + + }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; } - - + + /***/ @ApiOperation( value = "根据主键修改一条xm_project_phase信息",notes="editXmProjectPhase") @ApiResponses({ - @ApiResponse(code = 200,response=XmProjectPhase.class, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'},data:数据对象}") + @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 editXmProjectPhase(@RequestBody XmProjectPhase xmProjectPhase) { Map 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 groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId()); + List 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,40 +380,50 @@ public class XmProductPhaseController { m.put("tips", tips); return m; } + xmProjectPhase=xmProjectPhaseService.autoCalcWorkload(xmProjectPhase); + xmProjectPhaseService.calcPhaseBudgetAmount(xmProjectPhase); List excludePhaseIds=new ArrayList<>(); excludePhaseIds.add(xmProjectPhase.getId()); - if(xmProjectPhase.getLvl()==1){ - 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(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{ + if("1".equals(xmProduct.getPhaseBudgetCtrl())) { + tips = this.xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(), xmProjectPhase.getPhaseBudgetAt(), null, null, null, excludePhaseIds); + } + } + } - if(!tips.isOk()) { + 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); m.put("data",xmProjectPhase); - }catch (BizException e) { + }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; } - - + + /***/ @ApiOperation( value = "根据主键列表批量删除xm_project_phase信息",notes="batchDelXmProjectPhase,仅需要上传主键字段") @ApiResponses({ - @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") + @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 batchDelXmProjectPhase(@RequestBody List xmProjectPhases) { Map 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 existsTaskList=new ArrayList<>(); List hasChildList=new ArrayList<>(); - List groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId()); + List 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()); @@ -442,12 +472,12 @@ public class XmProductPhaseController { List canDelNodes=new ArrayList<>(); for (XmProjectPhase phase : delPhases) { - boolean canDelAllChild =xmProjectPhaseService.checkCanDelAllChild(phase,delPhases); - if(!canDelAllChild) { - hasChildList.add(phase.getPhaseName()); - }else { - canDelNodes.add(phase); - } + boolean canDelAllChild =xmProjectPhaseService.checkCanDelAllChild(phase,delPhases); + if(!canDelAllChild) { + hasChildList.add(phase.getPhaseName()); + }else { + canDelNodes.add(phase); + } } if(canDelNodes.size()>0){ this.xmProjectPhaseService.doBatchDelete(canDelNodes); @@ -471,29 +501,29 @@ public class XmProductPhaseController { }else{ tips.setOkMsg(msgs.stream().collect(Collectors.joining(" "))); } - - - - }catch (BizException e) { + + + + }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; - } + } /***/ @ApiOperation( value = "根据主键列表批量删除xm_project_phase信息",notes="batchDelXmProjectPhase,仅需要上传主键字段") @ApiResponses({ - @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") + @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 batchImportFromTemplate(@RequestBody List xmProjectPhases) { Map m = new HashMap<>(); - Tips tips=new Tips("成功导入"+xmProjectPhases.size()+"条数据"); + Tips tips=new Tips("成功导入"+xmProjectPhases.size()+"条数据"); try{ if(xmProjectPhases==null || xmProjectPhases.size()==0){ tips.setFailureMsg("计划不能为空"); @@ -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 groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId()); + List 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,59 +577,63 @@ 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(","))+"】"); - return ResponseHelper.failed(tips2); + 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()){ - return ResponseHelper.failed(tips); - } + 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()) { + if(tips.isOk()) { for (XmProjectPhase projectPhase : xmProjectPhases) { projectPhase.setMngUsername(user.getUsername()); projectPhase.setMngUserid(user.getUserid()); projectPhase.setCtime(new Date()); projectPhase.setLtime(new Date()); } - xmProjectPhaseService.doBatchInsert(xmProjectPhases); + xmProjectPhaseService.doBatchInsert(xmProjectPhases); for (XmProjectPhase phase : xmProjectPhases) { xmRecordService.addProductPhaseRecord(phase.getProductId(), phase.getId(), "产品-计划-新增计划", "新增计划"+phase.getPhaseName(),JSON.toJSONString(phase),null); - + } } - - }catch (BizException e) { + + }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; - } + } /***/ @ApiOperation( value = "批量修改预算",notes="batchSaveBudget,仅需要上传主键字段") @ApiResponses({ - @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") + @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 batchSaveBudget(@RequestBody List xmProjectPhases) { + public Map batchSaveBudget(@RequestBody List xmProjectPhases) { Map m = new HashMap<>(); - Tips tips=new Tips("成功修改"+xmProjectPhases.size()+"条数据"); + Tips tips=new Tips("成功修改"+xmProjectPhases.size()+"条数据"); try{ if(xmProjectPhases==null || xmProjectPhases.size()==0){ tips.setFailureMsg("计划不能为空"); @@ -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 groupVoList=groupService.getProductGroupVoList(xmProjectPhase.getProductId()); + List 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,95 +656,100 @@ public class XmProductPhaseController { return m; } String productId=null; - List excludePhaseIds=new ArrayList<>(); for (XmProjectPhase g : xmProjectPhases) { productId=g.getProductId(); g=xmProjectPhaseService.autoCalcWorkload(g); + xmProjectPhaseService.calcPhaseBudgetAmount(g); } + xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhases); List l1Phases=xmProjectPhases.stream().filter(i->1==i.getLvl()).collect(Collectors.toList()); - if(l1Phases==null ||l1Phases.size()==0){//如果是导入到某个计划之下, - //找到导入的树中最上面的节点 - List noExists=xmProjectPhases.stream().filter(i->!xmProjectPhases.stream().filter(k->k.getId().equals(i.getParentPhaseId())).findAny().isPresent()).collect(Collectors.toList()); - //根据同一个父亲归类 - Map> map=new HashMap<>(); - for (XmProjectPhase noExist : noExists) { - List phases=map.get(noExist.getParentPhaseId()); - if(phases==null){ - phases=new ArrayList<>(); - map.put(noExist.getParentPhaseId(),phases); - } - phases.add(noExist); - } - for (Map.Entry> kv : map.entrySet()) { - String parentId=kv.getKey(); - List children=kv.getValue(); - BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; - List excludeIds=children.stream().map(i->i.getId()).collect(Collectors.toList()); - 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(","))+"】"); - return ResponseHelper.failed(tips2); - } - } - }else{//直接导入到产品之下,需要判断当前一级预算是否超出产品总预算 + 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()); } - 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("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); + } } } - - 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())){ - int childrenCnt=Integer.valueOf(xmProjectPhases.stream().filter(i->projectPhase.getId().equals(i.getParentPhaseId())).count()+""); - if(childrenCnt>0){ - projectPhase.setChildrenCnt(childrenCnt); - projectPhase.setNtype("1"); - } + //找到导入的树中最上面的节点 + List parentNoNulls= xmProjectPhases.stream().filter(i->StringUtils.hasText(i.getParentPhaseId())&&!"0".equals(i.getParentPhaseId())).collect(Collectors.toList()); + //根据同一个父亲归类 + Map> map=new HashMap<>(); + for (XmProjectPhase phase : parentNoNulls) { + List phases=map.get(phase.getParentPhaseId()); + if(phases==null){ + phases=new ArrayList<>(); + map.put(phase.getParentPhaseId(),phases); + } + phases.add(phase); + } + for (Map.Entry> kv : map.entrySet()) { + String parentId=kv.getKey(); + List children=kv.getValue(); + BigDecimal phaseTotalBudgetAt=BigDecimal.ZERO; + List excludeIds=children.stream().map(i->i.getId()).collect(Collectors.toList()); + 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); } } - xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhases.stream().map(i->(XmProjectPhase)i).collect(Collectors.toList())); - //xmProjectPhaseService.batchInsertOrUpdate(xmProjectPhases); - for (XmProjectPhase phase : xmProjectPhases) { - xmRecordService.addProductPhaseRecord(phase.getProductId(), phase.getId(), "产品-计划-修改计划预算", "修改计划"+phase.getPhaseName(),JSON.toJSONString(phase),null); - + } + + + 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"); } - - }catch (BizException e) { + } + List xmProjectPhaseListDb=xmProjectPhaseService.selectListByIds(xmProjectPhases.stream().map(i->i.getId()).collect(Collectors.toList())); + + List inserts=xmProjectPhases.stream().filter(i->!xmProjectPhaseListDb.stream().filter(k->k.getId().equals(i.getId())).findAny().isPresent()).collect(Collectors.toList()); + List 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); + + } + + }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; - } + } @ApiOperation( value = "计算bug、task、测试案例、等数据",notes="loadTasksToXmProjectPhase") @ApiResponses({ - @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") + @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 loadTasksToXmProductPhase(@RequestBody Map params) { + @HasQx(value = "xm_core_xmProjectPhase_loadTasksToXmProjectPhase",name = "计算各个计划对应的bug、task、测试案例等数据",categoryId = "admin-xm",categoryName = "管理端-项目管理系统") + @RequestMapping(value="/loadTasksToXmProjectPhase",method=RequestMethod.POST) + public Map loadTasksToXmProjectPhase(@RequestBody Map params) { Map m = new HashMap<>(); - Tips tips=new Tips("成功修改数据"); + Tips tips=new Tips("成功修改数据"); try{ String productId=(String) params.get("productId"); - List groupVoList=groupService.getProductGroupVoList(productId); + + if(!StringUtils.hasText(productId)){ + return ResponseHelper.failed("productId-0","请上送项目编号"); + } + List groupVoList=groupService.getProjectGroupVoList(productId); User user = LoginUtils.getCurrentUserInfo(); XmProduct xmProduct=this.xmProductService.getProductFromCache(productId); @@ -712,17 +760,17 @@ 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) { + }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; } @@ -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 calcKeyPaths(@RequestBody Map params) { Map m = new HashMap<>(); Tips tips=new Tips("成功修改数据"); try{ String productId=(String) params.get("productId"); - List groupVoList=groupService.getProductGroupVoList(productId); + + if(!StringUtils.hasText(productId)){ + return ResponseHelper.failed("productId-0","请上送项目编号"); + } + List 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 getProjectBudgetWithsPhaseBudget(@RequestBody Map params) { + Map m = new HashMap<>(); + Tips tips=new Tips("成功查询预算数据"); + try{ + String productId=(String) params.get("productId"); + if(!StringUtils.hasText(productId)){ + return ResponseHelper.failed("productId-0","请上送项目编号"); + } + List 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 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; + } + }