From 41d7e739f7b382932e7380174261427512b6ffd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Sat, 19 Mar 2022 17:02:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8A=82=E7=82=B9=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E3=80=81=E6=A0=87=E7=AD=BE=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xm/core/ctrl/XmTaskController.java | 56 +++++++++++++------ .../java/com/xm/core/entity/XmProject.java | 25 +++++++-- .../com/xm/core/service/XmProjectService.java | 12 ++-- .../java/com/xm/core/vo/BatchImportVo.java | 55 ++++++++++++++++++ .../mapper/xm/core/dao/XmProjectMapper.xml | 12 ++-- 5 files changed, 126 insertions(+), 34 deletions(-) create mode 100644 xm-core/src/main/java/com/xm/core/vo/BatchImportVo.java diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java index 05c299d6..4985014d 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java +++ b/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 batchImportFromTemplate(@RequestBody List xmTasks) { + public Map batchImportFromTemplate(@RequestBody BatchImportVo batchImportVo) { Map m = new HashMap<>(); - Tips tips=new Tips("成功导入"+xmTasks.size()+"条数据"); + Tips tips=new Tips("成功导入"); try{ - + List 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 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(","))+"】"); diff --git a/xm-core/src/main/java/com/xm/core/entity/XmProject.java b/xm-core/src/main/java/com/xm/core/entity/XmProject.java index ccd01e27..e1eb0725 100644 --- a/xm-core/src/main/java/com/xm/core/entity/XmProject.java +++ b/xm-core/src/main/java/com/xm/core/entity/XmProject.java @@ -8,9 +8,9 @@ import java.math.BigDecimal; /** * 组织 com 顶级模块 xm 大模块 core 小模块
* 实体 XmProject所有属性名:
- * 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;
* 表 xm_project xm_project的所有字段名:
- * 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;
* 当前主键(包括多主键):
* id;
*/ @@ -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; + } } \ No newline at end of file diff --git a/xm-core/src/main/java/com/xm/core/service/XmProjectService.java b/xm-core/src/main/java/com/xm/core/service/XmProjectService.java index 84fb76ff..ba5479b3 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProjectService.java +++ b/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(), "项目-暂停", "项目暂停申请通过审批" ); } diff --git a/xm-core/src/main/java/com/xm/core/vo/BatchImportVo.java b/xm-core/src/main/java/com/xm/core/vo/BatchImportVo.java new file mode 100644 index 00000000..818a1532 --- /dev/null +++ b/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 xmTasks; + String parentTaskid; + String projectId; + String productId; + String ptype; + + public List getXmTasks() { + return xmTasks; + } + + public void setXmTasks(List 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; + } +} diff --git a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml index 0291e415..f21a9cee 100644 --- a/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml +++ b/xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectMapper.xml @@ -165,7 +165,7 @@ insert into xm_project( ) 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} ) @@ -228,7 +228,7 @@ - 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 @@ -286,6 +286,7 @@ and res.phase_act_ctrl = #{phaseActCtrl} and res.del = #{del} and date_format(res.ltime,'%Y-%m-%d') = date_format(#{ltime},'%Y-%m-%d') + and res.ostatus = #{ostatus} @@ -340,7 +341,8 @@ phase_budget_ctrl = #{phaseBudgetCtrl}, phase_act_ctrl = #{phaseActCtrl}, del = #{del}, - ltime = #{ltime} + ltime = #{ltime}, + ostatus = #{ostatus} code = #{code}, @@ -395,6 +397,7 @@ phase_act_ctrl = #{phaseActCtrl}, del = #{del}, ltime = #{ltime}, + ostatus = #{ostatus}, @@ -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} \ No newline at end of file