Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
5603aea5be
  1. 12
      xm-core/src/main/java/com/xm/core/ctrl/XmProductPhaseController.java
  2. 30
      xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java
  3. 43
      xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java
  4. 35
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml

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

@ -244,9 +244,8 @@ public class XmProductPhaseController {
return m; return m;
} }
BigDecimal phaseBudgetCost=BigDecimal.ZERO; BigDecimal phaseBudgetCost=BigDecimal.ZERO;
String productId=null;
BigDecimal zero=BigDecimal.ZERO;
productId=xmProjectPhase.getProductId();
BigDecimal zero=BigDecimal.ZERO;
String productId=xmProjectPhase.getProductId();
BigDecimal phaseBudgetInnerUserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetInnerUserAt(),zero); BigDecimal phaseBudgetInnerUserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetInnerUserAt(),zero);
BigDecimal phaseBudgetOutUserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetOutUserAt(),zero); BigDecimal phaseBudgetOutUserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetOutUserAt(),zero);
BigDecimal phaseBudgetNouserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetNouserAt(),zero); BigDecimal phaseBudgetNouserAt=NumberUtil.getBigDecimal(xmProjectPhase.getPhaseBudgetNouserAt(),zero);
@ -255,6 +254,9 @@ public class XmProductPhaseController {
excludePhaseIds.add(xmProjectPhase.getId()); excludePhaseIds.add(xmProjectPhase.getId());
if(!StringUtils.hasText(xmProjectPhase.getParentPhaseId())){//如果为顶级计划预算不能大于产品总预算 if(!StringUtils.hasText(xmProjectPhase.getParentPhaseId())){//如果为顶级计划预算不能大于产品总预算
Tips judgetTips=xmProjectPhaseService.judgetProductBudget(productId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds); Tips judgetTips=xmProjectPhaseService.judgetProductBudget(productId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds);
if(!judgetTips.isOk()){
return ResponseHelper.failed(judgetTips);
}
}else{ }else{
XmProjectPhase parentDb=xmProjectPhaseService.selectOneObject(new XmProjectPhase(xmProjectPhase.getParentPhaseId())); XmProjectPhase parentDb=xmProjectPhaseService.selectOneObject(new XmProjectPhase(xmProjectPhase.getParentPhaseId()));
if(parentDb==null){ if(parentDb==null){
@ -263,6 +265,10 @@ public class XmProductPhaseController {
if(!"1".equals(parentDb.getNtype())){ if(!"1".equals(parentDb.getNtype())){
return ResponseHelper.failed("p-ntype-no-1","上级【"+parentDb.getPhaseName()+"】不是计划集,不能在其之下建立子计划"); return ResponseHelper.failed("p-ntype-no-1","上级【"+parentDb.getPhaseName()+"】不是计划集,不能在其之下建立子计划");
} }
Tips judgetTips=xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(), phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds);
if(!judgetTips.isOk()){
return ResponseHelper.failed(judgetTips);
}
} }
xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase); xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase);
xmProjectPhaseService.insert(xmProjectPhase); xmProjectPhaseService.insert(xmProjectPhase);

30
xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java

@ -252,24 +252,28 @@ public class XmProjectPhaseController {
phaseBudgetCost=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt); phaseBudgetCost=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt);
List<String> excludePhaseIds=new ArrayList<>(); List<String> excludePhaseIds=new ArrayList<>();
excludePhaseIds.add(xmProjectPhase.getId()); excludePhaseIds.add(xmProjectPhase.getId());
Tips judgetTips=xmProjectPhaseService.judgetBudget(projectId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds);
if(judgetTips.isOk()) {
if(StringUtils.hasText(xmProjectPhase.getParentPhaseId())){
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()+"】不是计划集,不能在其之下建立子计划");
}
if(!StringUtils.hasText(xmProjectPhase.getParentPhaseId())){//如果为顶级计划预算不能大于产品总预算
Tips judgetTips=xmProjectPhaseService.judgetBudget(projectId, phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds);
if(!judgetTips.isOk()){
return ResponseHelper.failed(judgetTips);
}
}else{
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()+"】不是计划集,不能在其之下建立子计划");
}
Tips judgetTips=xmProjectPhaseService.judgetPhaseBudget(xmProjectPhase.getParentPhaseId(), phaseBudgetCost,phaseBudgetInnerUserAt,phaseBudgetOutUserAt,phaseBudgetNouserAt,excludePhaseIds);
if(!judgetTips.isOk()){
return ResponseHelper.failed(judgetTips);
}
}
xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase); xmProjectPhaseService.parentIdPathsCalcBeforeSave(xmProjectPhase);
xmProjectPhaseService.insert(xmProjectPhase); xmProjectPhaseService.insert(xmProjectPhase);
xmRecordService.addProjectPhaseRecord(projectId, xmProjectPhase.getId(), "项目-计划-新增计划", "新增计划"+xmProjectPhase.getPhaseName(),JSON.toJSONString(xmProjectPhase),null); xmRecordService.addProjectPhaseRecord(projectId, xmProjectPhase.getId(), "项目-计划-新增计划", "新增计划"+xmProjectPhase.getPhaseName(),JSON.toJSONString(xmProjectPhase),null);
m.put("data",xmProjectPhase); m.put("data",xmProjectPhase);
}else {
tips=judgetTips;
}
}catch (BizException e) { }catch (BizException e) {
tips=e.getTips(); tips=e.getTips();
logger.error("",e); logger.error("",e);

43
xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java

@ -522,5 +522,48 @@ public class XmProjectPhaseService extends BaseService {
p.put("excludePhaseIds", excludePhaseIds); p.put("excludePhaseIds", excludePhaseIds);
return this.selectOne("selectTotalProductAndPhaseBudgetCost", p); return this.selectOne("selectTotalProductAndPhaseBudgetCost", p);
} }
public Map<String,Object> selectPhaseBudgetCost(String phaseId,List<String> excludePhaseIds){
Map<String,Object> p=new HashMap<>();
p.put("id", phaseId);
p.put("excludePhaseIds", excludePhaseIds);
return this.selectOne("selectPhaseBudgetCost", p);
}
/**
* res2.id,
* res2.phase_budget_workload,
* res2.phase_budget_nouser_at,
* res2.phase_budget_inner_user_at,
* res2.phase_budget_out_user_at,
* res2.phase_budget_at,
* res0.child_phase_budget_workload,
* res0.child_phase_budget_nouser_at,
* res0.child_phase_budget_inner_user_at,
* res0.child_phase_budget_out_user_at,
* res0.child_phase_budget_at
* @param parentPhaseId
* @param phaseBudgetCost
* @param phaseBudgetInnerUserAt
* @param phaseBudgetOutUserAt
* @param phaseBudgetNouserAt
* @param excludePhaseIds
* @return
*/
public Tips judgetPhaseBudget(String parentPhaseId, BigDecimal phaseBudgetCost, BigDecimal phaseBudgetInnerUserAt, BigDecimal phaseBudgetOutUserAt, BigDecimal phaseBudgetNouserAt, List<String> excludePhaseIds) {
Tips tips= new Tips("检查通过");
Map<String,Object> phaseBudget=this.selectPhaseBudgetCost(parentPhaseId,excludePhaseIds);
if(phaseBudget==null || phaseBudget.isEmpty()){
tips.setFailureMsg("计划不存在");
}else{
BigDecimal childPhaseBudgetAt=NumberUtil.getBigDecimal(phaseBudget.get("childPhaseBudgetAt"),BigDecimal.ZERO);
BigDecimal phaseBudgetAt=NumberUtil.getBigDecimal(phaseBudget.get("phaseBudgetAt"),BigDecimal.ZERO);
if(childPhaseBudgetAt.add(phaseBudgetCost).compareTo(phaseBudgetAt)>0){
tips.setFailureMsg("预算金额超出剩余预算金额"+childPhaseBudgetAt.add(phaseBudgetCost).subtract(phaseBudgetAt)+"元");
}
}
return tips;
}
} }

35
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml

@ -33,6 +33,7 @@
sum( ifnull(res.phase_budget_nouser_at,0) ) AS phase_budget_nouser_at, sum( ifnull(res.phase_budget_nouser_at,0) ) AS phase_budget_nouser_at,
sum( ifnull(res.phase_budget_inner_user_at,0) ) AS phase_budget_inner_user_at, sum( ifnull(res.phase_budget_inner_user_at,0) ) AS phase_budget_inner_user_at,
sum( ifnull(res.phase_budget_out_user_at,0) ) AS phase_budget_out_user_at, sum( ifnull(res.phase_budget_out_user_at,0) ) AS phase_budget_out_user_at,
sum( ifnull(res.phase_budget_at,0) ) AS phase_budget_at,
p.plan_nouser_at, p.plan_nouser_at,
p.plan_inner_user_at, p.plan_inner_user_at,
p.plan_out_user_at, p.plan_out_user_at,
@ -65,6 +66,8 @@
sum( ifnull(res.phase_budget_nouser_at,0) ) AS phase_budget_nouser_at, sum( ifnull(res.phase_budget_nouser_at,0) ) AS phase_budget_nouser_at,
sum( ifnull(res.phase_budget_inner_user_at,0) ) AS phase_budget_inner_user_at, sum( ifnull(res.phase_budget_inner_user_at,0) ) AS phase_budget_inner_user_at,
sum( ifnull(res.phase_budget_out_user_at,0) ) AS phase_budget_out_user_at, sum( ifnull(res.phase_budget_out_user_at,0) ) AS phase_budget_out_user_at,
sum( ifnull(res.phase_budget_at,0) ) AS phase_budget_at,
p.pbudget_workload, p.pbudget_workload,
p.pbudget_amount, p.pbudget_amount,
p.pmenu_budget_workload, p.pmenu_budget_workload,
@ -80,6 +83,38 @@
</if> </if>
where p.id=#{productId} where p.id=#{productId}
</select> </select>
<select id="selectPhaseBudgetCost" parameterType="HashMap" resultType="HashMap">
select
res2.id,
res2.phase_budget_workload,
res2.phase_budget_nouser_at,
res2.phase_budget_inner_user_at,
res2.phase_budget_out_user_at,
res2.phase_budget_at,
res0.child_phase_budget_workload,
res0.child_phase_budget_nouser_at,
res0.child_phase_budget_inner_user_at,
res0.child_phase_budget_out_user_at,
res0.child_phase_budget_at
from xm_project_phase res2 left join
(
SELECT
res.parent_phase_id,
sum( ifnull(res.phase_budget_workload,0) ) AS child_phase_budget_workload,
sum( ifnull(res.phase_budget_nouser_at,0) ) AS child_phase_budget_nouser_at,
sum( ifnull(res.phase_budget_inner_user_at,0) ) AS child_phase_budget_inner_user_at,
sum( ifnull(res.phase_budget_out_user_at,0) ) AS child_phase_budget_out_user_at,
sum( ifnull(res.phase_budget_at,0) ) AS child_phase_budget_at,
FROM xm_project_phase res where res.parent_phase_id=#{id}
<if test=" excludePhaseIds !=null "> and res.id not in
<foreach collection="excludePhaseIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</if>
group by res.parent_phase_id
) as res0 on res2.parent_phase_id=res2.id
where res2.id=#{id}
</select>
<update id="loadTasksToXmProjectPhase" parameterType="String" statementType="CALLABLE"> <update id="loadTasksToXmProjectPhase" parameterType="String" statementType="CALLABLE">
{call load_tasks_to_xm_project_phase(#{projectId,mode=IN})} {call load_tasks_to_xm_project_phase(#{projectId,mode=IN})}
</update> </update>

Loading…
Cancel
Save