Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
41d7e739f7
  1. 56
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
  2. 25
      xm-core/src/main/java/com/xm/core/entity/XmProject.java
  3. 12
      xm-core/src/main/java/com/xm/core/service/XmProjectService.java
  4. 55
      xm-core/src/main/java/com/xm/core/vo/BatchImportVo.java
  5. 12
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml

56
xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java

@ -18,10 +18,7 @@ import com.xm.core.entity.*;
import com.xm.core.service.*;
import com.xm.core.service.cache.XmTaskCacheService;
import com.xm.core.service.push.XmPushMsgService;
import com.xm.core.vo.BatchChangeParentTaskVo;
import com.xm.core.vo.BatchRelTasksWithMenu;
import com.xm.core.vo.XmGroupVo;
import com.xm.core.vo.XmTaskVo;
import com.xm.core.vo.*;
import io.swagger.annotations.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -690,33 +687,53 @@ public class XmTaskController {
})
@HasQx(value = "xm_core_xmTask_batchImportFromTemplate",name = "从模板导入任务",categoryId = "admin-xm",categoryName = "管理端-项目管理系统")
@RequestMapping(value="/batchImportFromTemplate",method=RequestMethod.POST)
public Map<String,Object> batchImportFromTemplate(@RequestBody List<XmTask> xmTasks) {
public Map<String,Object> batchImportFromTemplate(@RequestBody BatchImportVo batchImportVo) {
Map<String,Object> m = new HashMap<>();
Tips tips=new Tips("成功导入"+xmTasks.size()+"条数据");
Tips tips=new Tips("成功导入");
try{
List<XmTask> xmTasks=batchImportVo.getXmTasks();
User user=LoginUtils.getCurrentUserInfo();
if(xmTasks==null || xmTasks.size()==0){
tips.setFailureMsg("任务列表不能为空");
m.put("tips", tips);
return m;
}
XmTask xmTask=xmTasks.get(0);
String projectId=xmTask.getProjectId();
String productId=xmTask.getProductId();
tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),xmTask.getPtype(),xmTask.getProductId(),xmTask.getProjectId());
if(!StringUtils.hasText(batchImportVo.getPtype())){
return ResponseHelper.failed("ptype-0","请上送ptype,0代表项目计划(任务),1代表产品计划(任务)");
}
if("0".equals(batchImportVo.getPtype()) && !StringUtils.hasText(batchImportVo.getProjectId())){
return ResponseHelper.failed("projectId-0","请上送项目编号");
} else if("1".equals(batchImportVo.getPtype()) && !StringUtils.hasText(batchImportVo.getProductId())){
return ResponseHelper.failed("productId-0","请上送产品编号");
}else if(!"0".equals(batchImportVo.getPtype()) && !"1".equals(batchImportVo.getPtype())){
return ResponseHelper.failed("ptype-0","请上送ptype,0代表项目计划(任务),1代表产品计划(任务)");
}
String projectId=batchImportVo.getProjectId();
String productId=batchImportVo.getProductId();
tips=groupService.checkIsAdmOrTeamHeadOrAssByPtype(user,user.getUserid(),batchImportVo.getPtype(),batchImportVo.getProductId(),batchImportVo.getProjectId());
if(!tips.isOk()){
return ResponseHelper.failed(tips);
}
Map<String,String> newIdMap=new HashMap<>();
if(!StringUtils.hasText(batchImportVo.getParentTaskid())){
newIdMap.put(batchImportVo.getParentTaskid(),batchImportVo.getParentTaskid());
}
for (XmTask xmTask : xmTasks) {
newIdMap.put(xmTask.getId(),this.xmTaskService.createKey("id"));
}
for (XmTask g : xmTasks) {
if("0".equals(xmTask.getPtype()) && !projectId.equals(g.getProjectId())){
return ResponseHelper.failed("no-same-project","只能在同一个项目下批量导入任务");
}else{
if("1".equals(xmTask.getPtype()) && !productId.equals(g.getProductId())){
return ResponseHelper.failed("no-same-productId","只能在同一个产品下批量导入任务");
g.setId(newIdMap.get(g.getId()));
if(StringUtils.hasText(g.getParentTaskid())){
if(newIdMap.containsKey(g.getParentTaskid())){
g.setParentTaskid(newIdMap.get(g.getParentTaskid()));
}else{
if(StringUtils.hasText(batchImportVo.getParentTaskid())){
g.setParentTaskid(batchImportVo.getParentTaskid());
}else{
g.setParentTaskid(null);
}
}
}
g.setCreateUserid(user.getUserid());
g.setCreateUsername(user.getUsername());
g.setExecutorUserid(user.getUserid());
@ -725,6 +742,9 @@ public class XmTaskController {
g.setExeUserids(null);
g.setExeUsernames(null);
g.setCdeptid(user.getDeptid());
g.setPtype(batchImportVo.getPtype());
g.setProjectId(projectId);
g.setProductId(productId);
if(g.getBudgetCost()==null)g.setBudgetCost(BigDecimal.ZERO);
}
xmTaskService.parentIdPathsCalcBeforeSave(xmTasks);
@ -734,7 +754,7 @@ public class XmTaskController {
for (XmTask task : tasksLvl1) {
totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost());
}
if("0".equals(xmTask.getPtype())&&totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
if("0".equals(batchImportVo.getPtype())&&totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetProjectBudget(projectId,totalTaskBudgetCost,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
tips.setFailureMsg(tips.getMsg()+" 相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");

25
xm-core/src/main/java/com/xm/core/entity/XmProject.java

@ -8,9 +8,9 @@ import java.math.BigDecimal;
/**
* 组织 com 顶级模块 xm 大模块 core 小模块 <br>
* 实体 XmProject所有属性名: <br>
* id,code,name,xmType,startTime,endTime,urgent,priority,description,createUserid,createUsername,createTime,assess,assessRemarks,status,branchId,planTotalCost,bizProcInstId,bizFlowState,planNouserAt,planIuserAt,planOuserAt,locked,baseTime,baseRemark,baselineId,planWorkload,totalReceivables,budgetMarginRate,contractAmt,planIuserPrice,planOuserPrice,planOuserCnt,planIuserCnt,planWorkingHours,taxRate,planIuserWorkload,planOuserWorkload,fromTplId,budgetCtrl,deptid,showOut,isTpl,pmUserid,pmUsername,assUserid,assUsername,admUserid,admUsername,phaseBudgetCtrl,phaseActCtrl,del,ltime;<br>
* id,code,name,xmType,startTime,endTime,urgent,priority,description,createUserid,createUsername,createTime,assess,assessRemarks,status,branchId,planTotalCost,bizProcInstId,bizFlowState,planNouserAt,planIuserAt,planOuserAt,locked,baseTime,baseRemark,baselineId,planWorkload,totalReceivables,budgetMarginRate,contractAmt,planIuserPrice,planOuserPrice,planOuserCnt,planIuserCnt,planWorkingHours,taxRate,planIuserWorkload,planOuserWorkload,fromTplId,budgetCtrl,deptid,showOut,isTpl,pmUserid,pmUsername,assUserid,assUsername,admUserid,admUsername,phaseBudgetCtrl,phaseActCtrl,del,ltime,ostatus;<br>
* xm_project xm_project的所有字段名: <br>
* id,code,name,xm_type,start_time,end_time,urgent,priority,description,create_userid,create_username,create_time,assess,assess_remarks,status,branch_id,plan_total_cost,biz_proc_inst_id,biz_flow_state,plan_nouser_at,plan_iuser_at,plan_ouser_at,locked,base_time,base_remark,baseline_id,plan_workload,total_receivables,budget_margin_rate,contract_amt,plan_iuser_price,plan_ouser_price,plan_ouser_cnt,plan_iuser_cnt,plan_working_hours,tax_rate,plan_iuser_workload,plan_ouser_workload,from_tpl_id,budget_ctrl,deptid,show_out,is_tpl,pm_userid,pm_username,ass_userid,ass_username,adm_userid,adm_username,phase_budget_ctrl,phase_act_ctrl,del,ltime;<br>
* id,code,name,xm_type,start_time,end_time,urgent,priority,description,create_userid,create_username,create_time,assess,assess_remarks,status,branch_id,plan_total_cost,biz_proc_inst_id,biz_flow_state,plan_nouser_at,plan_iuser_at,plan_ouser_at,locked,base_time,base_remark,baseline_id,plan_workload,total_receivables,budget_margin_rate,contract_amt,plan_iuser_price,plan_ouser_price,plan_ouser_cnt,plan_iuser_cnt,plan_working_hours,tax_rate,plan_iuser_workload,plan_ouser_workload,from_tpl_id,budget_ctrl,deptid,show_out,is_tpl,pm_userid,pm_username,ass_userid,ass_username,adm_userid,adm_username,phase_budget_ctrl,phase_act_ctrl,del,ltime,ostatus;<br>
* 当前主键(包括多主键):<br>
* id;<br>
*/
@ -62,7 +62,7 @@ public class XmProject implements java.io.Serializable {
@ApiModelProperty(notes="考核备注",allowEmptyValue=true,example="",allowableValues="")
String assessRemarks;
@ApiModelProperty(notes="0|初始",allowEmptyValue=true,example="",allowableValues="")
@ApiModelProperty(notes="0|初始1|售前2|立项中3|实施中4|暂停中5|结项中6|已结项7|售后8|已完成9|已关闭",allowEmptyValue=true,example="",allowableValues="")
String status;
@ApiModelProperty(notes="机构编号",allowEmptyValue=true,example="",allowableValues="")
@ -178,6 +178,9 @@ public class XmProject implements java.io.Serializable {
@ApiModelProperty(notes="最后更新时间",allowEmptyValue=true,example="",allowableValues="")
Date ltime;
@ApiModelProperty(notes="原状态,暂停时记录原状态,暂停恢复后把原状态恢复",allowEmptyValue=true,example="",allowableValues="")
String ostatus;
/**项目编号**/
public XmProject(String id) {
@ -273,7 +276,7 @@ public class XmProject implements java.io.Serializable {
this.assessRemarks = assessRemarks;
}
/**
* 0|初始
* 0|初始1|售前2|立项中3|实施中4|暂停中5|结项中6|已结项7|售后8|已完成9|已关闭
**/
public void setStatus(String status) {
this.status = status;
@ -506,6 +509,12 @@ public class XmProject implements java.io.Serializable {
public void setLtime(Date ltime) {
this.ltime = ltime;
}
/**
* 原状态暂停时记录原状态暂停恢复后把原状态恢复
**/
public void setOstatus(String ostatus) {
this.ostatus = ostatus;
}
/**
* 项目编号
@ -592,7 +601,7 @@ public class XmProject implements java.io.Serializable {
return this.assessRemarks;
}
/**
* 0|初始
* 0|初始1|售前2|立项中3|实施中4|暂停中5|结项中6|已结项7|售后8|已完成9|已关闭
**/
public String getStatus() {
return this.status;
@ -825,5 +834,11 @@ public class XmProject implements java.io.Serializable {
public Date getLtime() {
return this.ltime;
}
/**
* 原状态暂停时记录原状态暂停恢复后把原状态恢复
**/
public String getOstatus() {
return this.ostatus;
}
}

12
xm-core/src/main/java/com/xm/core/service/XmProjectService.java

@ -476,12 +476,11 @@ public class XmProjectService extends BaseService {
//project.setCode(project.getCode());
this.updateSomeFieldByPk(project);
xmRecordService.addXmProjectRecord(bizProject.getId(), "项目-基本信息", "修改基本信息" );
this.createBaseline(bizProject.getId(),"项目修改基本信息");
}else if("xm_project_start_approva".equals(bizKey)) {//立项 立项通过需要把预算数据同步到财务系统把项目数据同步到财务系统
XmProject project=new XmProject();
project.setId(bizProject.getId());
project.setStatus("ssz");
project.setStatus("3");
//todo 立项通过需要把预算数据同步到财务系统把项目数据同步到财务系统
this.updateSomeFieldByPk(project);
@ -497,15 +496,14 @@ public class XmProjectService extends BaseService {
}else if("xm_project_over_approva".equals(bizKey) ) { //结项
XmProject project=new XmProject();
project.setId(bizProject.getId());
project.setStatus("yjx");
project.setStatus("6");
this.updateSomeFieldByPk(project);
this.createBaseline(bizProject.getId(),"项目结项申请通过审批");
xmRecordService.addXmProjectRecord(bizProject.getId(), "项目-结项", "项目结项申请通过审批" );
}else if("xm_project_budget_change_approva".equals(bizKey) ) { //总预算调整需要同步预算到财务系统
this.editBudget(bizProject);
this.createBaseline(bizProject.getId(),"项目预算调整申请通过审批");
this.editBudget(bizProject);
xmRecordService.addXmProjectRecord(bizProject.getId(), "项目-预算调整", "项目预算调整申请通过审批" );
}else if("xm_project_restart_approva".equals(bizKey) ) { //重新启动
XmProject project=new XmProject();
@ -516,7 +514,7 @@ public class XmProjectService extends BaseService {
}else if("xm_project_pause_approva".equals(bizKey) ) { //暂停
XmProject project=new XmProject();
project.setId(bizProject.getId());
project.setStatus("ztz");
project.setLocked("0");
this.updateSomeFieldByPk(project);
xmRecordService.addXmProjectRecord(bizProject.getId(), "项目-暂停", "项目暂停申请通过审批" );
}

55
xm-core/src/main/java/com/xm/core/vo/BatchImportVo.java

@ -0,0 +1,55 @@
package com.xm.core.vo;
import com.xm.core.entity.XmTask;
import java.util.List;
public class BatchImportVo {
List<XmTask> xmTasks;
String parentTaskid;
String projectId;
String productId;
String ptype;
public List<XmTask> getXmTasks() {
return xmTasks;
}
public void setXmTasks(List<XmTask> xmTasks) {
this.xmTasks = xmTasks;
}
public String getParentTaskid() {
return parentTaskid;
}
public void setParentTaskid(String parentTaskid) {
this.parentTaskid = parentTaskid;
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getPtype() {
return ptype;
}
public void setPtype(String ptype) {
this.ptype = ptype;
}
}

12
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml

@ -165,7 +165,7 @@
insert into xm_project(
<include refid="columns"/>
) values (
#{id},#{code},#{name},#{xmType},#{startTime},#{endTime},#{urgent},#{priority},#{description},#{createUserid},#{createUsername},#{createTime},#{assess},#{assessRemarks},#{status},#{branchId},#{planTotalCost},#{bizProcInstId},#{bizFlowState},#{planNouserAt},#{planIuserAt},#{planOuserAt},#{locked},#{baseTime},#{baseRemark},#{baselineId},#{planWorkload},#{totalReceivables},#{budgetMarginRate},#{contractAmt},#{planIuserPrice},#{planOuserPrice},#{planOuserCnt},#{planIuserCnt},#{planWorkingHours},#{taxRate},#{planIuserWorkload},#{planOuserWorkload},#{fromTplId},#{budgetCtrl},#{deptid},#{showOut},#{isTpl},#{pmUserid},#{pmUsername},#{assUserid},#{assUsername},#{admUserid},#{admUsername},#{phaseBudgetCtrl},#{phaseActCtrl},#{del},#{ltime}
#{id},#{code},#{name},#{xmType},#{startTime},#{endTime},#{urgent},#{priority},#{description},#{createUserid},#{createUsername},#{createTime},#{assess},#{assessRemarks},#{status},#{branchId},#{planTotalCost},#{bizProcInstId},#{bizFlowState},#{planNouserAt},#{planIuserAt},#{planOuserAt},#{locked},#{baseTime},#{baseRemark},#{baselineId},#{planWorkload},#{totalReceivables},#{budgetMarginRate},#{contractAmt},#{planIuserPrice},#{planOuserPrice},#{planOuserCnt},#{planIuserCnt},#{planWorkingHours},#{taxRate},#{planIuserWorkload},#{planOuserWorkload},#{fromTplId},#{budgetCtrl},#{deptid},#{showOut},#{isTpl},#{pmUserid},#{pmUsername},#{assUserid},#{assUsername},#{admUserid},#{admUsername},#{phaseBudgetCtrl},#{phaseActCtrl},#{del},#{ltime},#{ostatus}
)
</insert>
@ -228,7 +228,7 @@
<!--sql片段 列-->
<sql id="columns">
id,code,name,xm_type,start_time,end_time,urgent,priority,description,create_userid,create_username,create_time,assess,assess_remarks,status,branch_id,plan_total_cost,biz_proc_inst_id,biz_flow_state,plan_nouser_at,plan_iuser_at,plan_ouser_at,locked,base_time,base_remark,baseline_id,plan_workload,total_receivables,budget_margin_rate,contract_amt,plan_iuser_price,plan_ouser_price,plan_ouser_cnt,plan_iuser_cnt,plan_working_hours,tax_rate,plan_iuser_workload,plan_ouser_workload,from_tpl_id,budget_ctrl,deptid,show_out,is_tpl,pm_userid,pm_username,ass_userid,ass_username,adm_userid,adm_username,phase_budget_ctrl,phase_act_ctrl,del,ltime
id,code,name,xm_type,start_time,end_time,urgent,priority,description,create_userid,create_username,create_time,assess,assess_remarks,status,branch_id,plan_total_cost,biz_proc_inst_id,biz_flow_state,plan_nouser_at,plan_iuser_at,plan_ouser_at,locked,base_time,base_remark,baseline_id,plan_workload,total_receivables,budget_margin_rate,contract_amt,plan_iuser_price,plan_ouser_price,plan_ouser_cnt,plan_iuser_cnt,plan_working_hours,tax_rate,plan_iuser_workload,plan_ouser_workload,from_tpl_id,budget_ctrl,deptid,show_out,is_tpl,pm_userid,pm_username,ass_userid,ass_username,adm_userid,adm_username,phase_budget_ctrl,phase_act_ctrl,del,ltime,ostatus
</sql>
<!--sql片段 动态条件 YYYY-MM-DD HH24:MI:SS-->
@ -286,6 +286,7 @@
<if test="phaseActCtrl != null and phaseActCtrl != ''"> and res.phase_act_ctrl = #{phaseActCtrl} </if>
<if test="del != null and del != ''"> and res.del = #{del} </if>
<if test="ltime != null"> and date_format(res.ltime,'%Y-%m-%d') = date_format(#{ltime},'%Y-%m-%d') </if>
<if test="ostatus != null and ostatus != ''"> and res.ostatus = #{ostatus} </if>
</sql>
<!--sql片段 更新字段 -->
<sql id="set">
@ -340,7 +341,8 @@
phase_budget_ctrl = #{phaseBudgetCtrl},
phase_act_ctrl = #{phaseActCtrl},
del = #{del},
ltime = #{ltime}
ltime = #{ltime},
ostatus = #{ostatus}
</sql>
<sql id="someFieldSet">
<if test="code != null and code != ''"> code = #{code}, </if>
@ -395,6 +397,7 @@
<if test="phaseActCtrl != null and phaseActCtrl != ''"> phase_act_ctrl = #{phaseActCtrl}, </if>
<if test="del != null and del != ''"> del = #{del}, </if>
<if test="ltime != null"> ltime = #{ltime}, </if>
<if test="ostatus != null and ostatus != ''"> ostatus = #{ostatus}, </if>
</sql>
<!--sql片段 批量更新 -->
<sql id="batchSet">
@ -449,6 +452,7 @@
phase_budget_ctrl = #{item.phaseBudgetCtrl},
phase_act_ctrl = #{item.phaseActCtrl},
del = #{item.del},
ltime = #{item.ltime}
ltime = #{item.ltime},
ostatus = #{item.ostatus}
</sql>
</mapper>
Loading…
Cancel
Save