diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java index 15b5511c..905e8c9d 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmMenuController.java @@ -1,5 +1,6 @@ package com.xm.core.ctrl; +import com.alibaba.fastjson.JSON; import com.mdp.core.entity.Tips; import com.mdp.core.err.BizException; import com.mdp.core.utils.NumberUtil; @@ -14,6 +15,7 @@ import com.xm.core.entity.XmMenu; import com.xm.core.entity.XmProjectPhase; import com.xm.core.entity.XmTask; import com.xm.core.service.XmMenuService; +import com.xm.core.service.XmRecordService; import com.xm.core.service.XmTaskService; import com.xm.core.vo.XmMenuVo; import io.swagger.annotations.*; @@ -52,6 +54,10 @@ public class XmMenuController { @Autowired private XmTaskService xmTaskService; + + + @Autowired + private XmRecordService xmRecordService; @ApiOperation( value = "查询项目菜单表信息列表",notes="listXmMenu,条件之间是 and关系,模糊查询写法如 {studentName:'%才哥%'}") @ApiImplicitParams({ @@ -304,7 +310,7 @@ public class XmMenuController { } xmMenuService.parentIdPathsCalcBeforeSave(xmMenu); xmMenuService.insert(xmMenu); - + xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"新增产品需求","新增需求"+xmMenu.getMenuName()); m.put("data",xmMenu); }catch (BizException e) { tips=e.getTips(); @@ -342,6 +348,8 @@ public class XmMenuController { tips.setFailureMsg("存在"+childCount+"个子需求关联该需求,不允许删除"); }else { xmMenuService.deleteByPk(xmMenu); + xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"删除产品需求","删除需求"+xmMenu.getMenuName(),"",JSON.toJSONString(xmMenu)); + } } }catch (BizException e) { @@ -387,6 +395,8 @@ public class XmMenuController { } } xmMenuService.updateByPk(xmMenu); + xmRecordService.addXmMenuRecord(xmMenu.getProductId(),xmMenu.getMenuId(),"修改产品需求","修改产品需求"+xmMenu.getMenuName(),"", JSON.toJSONString(xmMenu)); + m.put("data",xmMenu); }catch (BizException e) { tips=e.getTips(); @@ -426,6 +436,8 @@ public class XmMenuController { } if(canDelList.size()>0) { xmMenuService.doBatchDelete(canDelList); + xmRecordService.addXmMenuRecord(canDelList.get(0).getProductId(),"","批量删除产品需求","批量删除产品需求"+canDelList.size()+"个。【"+canDelList.stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】","", JSON.toJSONString(canDelList)); + } String msg="成功删除"+canDelList.size()+"个需求信息。\n"; if(hasChildMenus.size()>0 ) { @@ -458,7 +470,9 @@ public class XmMenuController { this.xmMenuService.parentIdPathsCalcBeforeSave(xmMenus); this.xmMenuService.doBatchInsert(xmMenus); - }else { + xmRecordService.addXmMenuRecord(xmMenus.get(0).getProductId(),"","批量新增产品需求","批量新增产品需求"+xmMenus.size()+"个。【"+xmMenus.stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】"); + + }else { tips.setFailureMsg("没有数据可以新增,请上送数据"); } @@ -483,8 +497,9 @@ public class XmMenuController { if(xmMenus.size()>0) { this.xmMenuService.parentIdPathsCalcBeforeSave(xmMenus.stream().map(i->(XmMenu)i).collect(Collectors.toList())); this.xmMenuService.batchInsertOrUpdate(xmMenus); - - }else { + xmRecordService.addXmMenuRecord(xmMenus.get(0).getProductId(),"","批量修改产品需求","批量修改产品需求【"+xmMenus.stream().map(i->i.getMenuName()).collect(Collectors.joining(","))+"】"); + + }else { tips.setFailureMsg("没有数据可以修改,请上送数据"); } diff --git a/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java b/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java index 74341edd..4bef169c 100644 --- a/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java +++ b/xm-core/src/main/java/com/xm/core/ctrl/XmProductController.java @@ -1,5 +1,6 @@ package com.xm.core.ctrl; +import com.alibaba.fastjson.JSON; import com.mdp.core.entity.Tips; import com.mdp.core.err.BizException; import com.mdp.core.utils.RequestUtils; @@ -14,6 +15,7 @@ import com.xm.core.entity.XmProject; import com.xm.core.service.XmProductService; import com.xm.core.service.XmProjectGroupService; import com.xm.core.service.XmProjectService; +import com.xm.core.service.XmRecordService; import io.swagger.annotations.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -49,6 +51,10 @@ public class XmProductController { @Autowired private XmProjectGroupService groupService; + + @Autowired + private XmRecordService xmRecordService; + @Value("${mdp.platform-branch-id:platform-branch-001}") String platformBranchId="platform-branch-001"; @@ -195,6 +201,7 @@ public class XmProductController { } XmProduct xmProductNew=xmProductService.copyTo(user,xmProduct); + xmRecordService.addXmProductRecord(xmProductNew.getId(),"通过拷贝创建产品","拷贝项目【"+xmProduct.getId()+"】【"+xmProduct.getProductName()+"】,创建新的项目【"+xmProductNew.getId()+"】【"+xmProductNew.getProductName()+"】","参数:"+ JSON.toJSONString(xmProduct),""); m.put("data",xmProductNew); }catch (BizException e) { tips=e.getTips(); @@ -235,6 +242,8 @@ public class XmProductController { } xmProduct.setCtime(new Date()); xmProductService.insert(xmProduct); + xmRecordService.addXmProductRecord(xmProduct.getId(),"创建产品","创建产品【"+xmProduct.getId()+"】【"+xmProduct.getProductName()+"】"); + m.put("data",xmProduct); }catch (BizException e) { tips=e.getTips(); @@ -284,6 +293,8 @@ public class XmProductController { **/ xmProductService.doDeleteByPk(xmProduct); xmProductService.clearCache(xmProduct.getId()); + xmRecordService.addXmProductRecord(xmProduct.getId(),"删除产品","删除产品【"+xmProductDb.getId()+"】【"+xmProductDb.getProductName()+"】","",JSON.toJSONString(xmProductDb)); + }catch (BizException e) { tips=e.getTips(); logger.error("",e); @@ -314,6 +325,8 @@ public class XmProductController { xmProductService.updateByPk(xmProduct); xmProductService.clearCache(xmProduct.getId()); + xmRecordService.addXmProductRecord(xmProduct.getId(),"修改产品","修改产品【"+xmProductDb.getId()+"】【"+xmProductDb.getProductName()+"】",JSON.toJSONString(xmProduct),JSON.toJSONString(xmProductDb)); + m.put("data",xmProduct); }catch (BizException e) { tips=e.getTips(); @@ -379,7 +392,11 @@ public class XmProductController { xmProductService.doBatchDelete(canDelList); for (XmProduct xmProduct : canDelList) { xmProductService.clearCache(xmProduct.getId()); + xmRecordService.addXmProductRecord(xmProduct.getId(),"批量删除产品","批量删除产品【"+xmProduct.getId()+"】【"+xmProduct.getProductName()+"】","",JSON.toJSONString(xmProduct)); + } + + } String msg="成功删除"+canDelList.size()+"条产品信息"; if(canDelList.size()==xmProducts.size()){ 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 ecec83f5..a579d916 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 @@ -188,6 +188,7 @@ public class XmProductPhaseController { xmProjectPhaseToUpdate.setMngUserid(xmProjectPhase.getMngUserid()); xmProjectPhaseToUpdate.setMngUsername(xmProjectPhase.getMngUsername()); this.xmProjectPhaseService.updateSomeFieldByPk(xmProjectPhaseToUpdate); + this.xmRecordService.addProductPhaseRecord(xmProduct.getId(),xmProjectPhase.getId(),"产品-计划-设置计划负责人","计划负责人由【"+xmProjectPhaseDb.getMngUsername()+"】变更为【"+xmProjectPhase.getMngUsername()+"】"); } } @@ -321,7 +322,7 @@ public class XmProductPhaseController { tips.setFailureMsg("存在"+xmProjectPhaseDb.getChildrenCnt()+"条子计划,不允许删除"); } else { xmProjectPhaseService.deleteByPk(xmProjectPhaseDb); - xmRecordService.addProductPhaseRecord(xmProjectPhaseDb.getProductId(), xmProjectPhaseDb.getId(), "产品-计划-删除计划", "删除计划"+xmProjectPhaseDb.getPhaseName(),JSON.toJSONString(xmProjectPhaseDb),null); + xmRecordService.addProductPhaseRecord(xmProjectPhaseDb.getProductId(), xmProjectPhaseDb.getId(), "产品-计划-删除计划", "删除计划"+xmProjectPhaseDb.getPhaseName(),"",JSON.toJSONString(xmProjectPhaseDb)); } } @@ -465,6 +466,8 @@ public class XmProductPhaseController { } if(canDelNodes.size()>0){ this.xmProjectPhaseService.doBatchDelete(canDelNodes); + xmRecordService.addProductPhaseRecord(xmProjectPhase.getProductId(), "", "产品-计划-批量删除计划", "批量删除计划"+canDelNodes.stream().map(i->i.getPhaseName()).collect(Collectors.joining(",")),"",JSON.toJSONString(canDelNodes)); + } List msgs=new ArrayList<>(); msgs.add("成功删除"+canDelNodes.size()+"条数据。"); @@ -674,7 +677,10 @@ public class XmProductPhaseController { m.put("tips", tips); return m; } - int i= xmProjectPhaseService.loadTasksToXmProjectPhase((String) params.get("productId")); + int i= xmProjectPhaseService.loadTasksToXmProductPhase(xmProduct.getId()); + xmRecordService.addProductPhaseRecord(xmProduct.getId(), "", "产品-计划-汇总统计", "计算产品计划进度","",null); + + }catch (BizException e) { tips=e.getTips(); logger.error("",e); @@ -686,11 +692,11 @@ public class XmProductPhaseController { return m; } - @ApiOperation( value = "计算bug、task、测试案例、等数据",notes="loadTasksToXmProjectPhase") + @ApiOperation( value = "关键路径计算",notes="calcKeyPaths") @ApiResponses({ @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") }) - @HasQx(value = "xm_core_xmProductPhase_loadTasksToXmProductPhase",name = "计算各个计划对应的bug、task、测试案例等数据",categoryId = "admin-xm",categoryName = "管理端-产品管理系统") + @HasQx(value = "xm_core_xmProductPhase_calcKeyPaths",name = "关键路径计算",categoryId = "admin-xm",categoryName = "管理端-产品管理系统") @RequestMapping(value="/calcKeyPaths",method=RequestMethod.POST) public Map calcKeyPaths(@RequestBody Map params) { Map m = new HashMap<>(); @@ -709,6 +715,8 @@ public class XmProductPhaseController { return m; } xmProjectPhaseService.calcKeyPaths((String) params.get("productId")); + xmRecordService.addProductPhaseRecord(xmProduct.getId(), "", "产品-计划-关键路径计算", "计算产品计划关键路径","",null); + }catch (BizException e) { tips=e.getTips(); logger.error("",e); diff --git a/xm-core/src/main/java/com/xm/core/service/XmProductService.java b/xm-core/src/main/java/com/xm/core/service/XmProductService.java index 6cfcdda9..2ecf6cf4 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProductService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmProductService.java @@ -94,6 +94,7 @@ public class XmProductService extends BaseService { if(xmProductDb==null){ throw new BizException("产品不存在"); } + if(!"1".equals(xmProductDb.getIsTpl())){ if(!user.getBranchId().equals(xmProductDb.getBranchId())){ throw new BizException("您无权复制其它组织的产品。"); @@ -240,6 +241,7 @@ public class XmProductService extends BaseService { this.groupUserService.batchInsert(usersDb); } } + xmProduct.setProductName(xmProductDb.getProductName()); return xmProductTo; } diff --git a/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java b/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java index 118883ea..d7adb9b0 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java @@ -169,6 +169,16 @@ public class XmProjectPhaseService extends BaseService { return this.update("loadTasksToXmProjectPhase", projectId); } + + /** + * 计算bug、task、测试案例、等数据 + * @param productId + * @return + */ + public int loadTasksToXmProductPhase(String productId) { + + return this.update("loadTasksToXmProductPhase", productId); + } public Long checkExistsTask(String phaseId) { Long i= this.selectOne("checkExistsTask", phaseId); return i; diff --git a/xm-core/src/main/java/com/xm/core/service/XmRecordService.java b/xm-core/src/main/java/com/xm/core/service/XmRecordService.java index b9840cb2..e7a26319 100644 --- a/xm-core/src/main/java/com/xm/core/service/XmRecordService.java +++ b/xm-core/src/main/java/com/xm/core/service/XmRecordService.java @@ -31,7 +31,44 @@ public class XmRecordService extends BaseService { record.setBranchId(user.getBranchId()); return record; } - + + /** + * 针对产品的所有的操作日志用此方法 + * @param productId 项目编号 + * @param action 操作如 新增产品,修改产品,修改产品进度 等 + * @param remarks 人性化语言描述 + * @param newValue 需要记录下来的新数据,可空 + * @param oldValue 需要记录下来的旧数据,可空 + */ + @Async + public void addXmProductRecord(String productId,String action,String remarks,String newValue,String oldValue) { + XmRecord record=this.initXmRecord(); + record.setProductId(productId); + record.setBizId(productId); + record.setAction(action); + record.setRemarks(remarks); + record.setObjType("product"); + record.setNewValue(newValue); + record.setOldValue(oldValue); + this.insert(record); + } + + /** + * 针对产品的所有的操作日志用此方法 + * @param productId 产品编号 + * @param action 操作如 新增产品,修改产品,修改产品进度 等 + * @param remarks 人性化语言描述 + */ + @Async + public void addXmProductRecord(String productId,String action,String remarks) { + XmRecord record=this.initXmRecord(); + record.setProductId(productId); + record.setAction(action); + record.setBizId(productId); + record.setRemarks(remarks); + record.setObjType("product"); + this.insert(record); + } /** * 针对项目的所有的操作日志用此方法 * @param projectId 项目编号 @@ -44,6 +81,7 @@ public class XmRecordService extends BaseService { public void addXmProjectRecord(String projectId,String action,String remarks,String newValue,String oldValue) { XmRecord record=this.initXmRecord(); record.setProjectId(projectId); + record.setBizId(projectId); record.setAction(action); record.setRemarks(remarks); record.setObjType("project"); @@ -63,7 +101,8 @@ public class XmRecordService extends BaseService { XmRecord record=this.initXmRecord(); record.setProjectId(projectId); record.setAction(action); - record.setRemarks(remarks); + record.setRemarks(remarks); + record.setBizId(projectId); record.setObjType("project"); this.insert(record); } @@ -107,7 +146,46 @@ public class XmRecordService extends BaseService { record.setOldValue(oldValue); this.insert(record); } - + + /** + * 针对产品下的需求的所有操作用此方法 + * @param productId 产品编号 + * @param menuId 需求编号 + * @param action 操作如 新增任务,修改任务信息,修改任务进度 等 + * @param remarks 人性化语言描述 + */ + @Async + public void addXmMenuRecord(String productId,String menuId,String action,String remarks) { + XmRecord record=this.initXmRecord(); + record.setProductId(productId); + record.setBizId(menuId); + record.setAction(action); + record.setRemarks(remarks); + record.setObjType("menu"); + this.insert(record); + } + + /** + * 针对产品下的需求的所有操作用此方法 + * @param productId 产品编号 + * @param menuId 需求编号 + * @param action 操作如 新增任务,修改任务信息,修改任务进度 等 + * @param remarks 人性化语言描述 + * @param newValue 需要记录下来的新数据 可空 + * @param oldValue 需要记录下来的旧数据 可空 + */ + @Async + public void addXmMenuRecord(String productId,String menuId,String action,String remarks,String newValue,String oldValue) { + XmRecord record=this.initXmRecord(); + record.setProductId(productId); + record.setBizId(menuId); + record.setAction(action); + record.setRemarks(remarks); + record.setObjType("task"); + record.setNewValue(newValue); + record.setOldValue(oldValue); + this.insert(record); + } /** * 针对项目下的任务的所有操作用此方法 @@ -151,7 +229,7 @@ public class XmRecordService extends BaseService { /** * 针对项目下的任务的所有操作用此方法 - * @param productId 项目编号 + * @param productId 产品编号 * @param phaseId 计划编号 * @param action 操作如 新增任务,修改任务信息,修改任务进度 等 * @param remarks 人性化语言描述 @@ -159,7 +237,7 @@ public class XmRecordService extends BaseService { @Async public void addProductPhaseRecord(String productId, String phaseId, String action, String remarks) { XmRecord record=this.initXmRecord(); - record.setProjectId(productId); + record.setProductId(productId); record.setBizId(phaseId); record.setAction(action); record.setRemarks(remarks); @@ -169,7 +247,7 @@ public class XmRecordService extends BaseService { /** * 针对项目下的任务的所有操作用此方法 - * @param productId 项目编号 + * @param productId 产品编号 * @param phaseId 计划编号 * @param action 操作如 新增任务,修改任务信息,修改任务进度 等 * @param remarks 人性化语言描述 @@ -179,7 +257,7 @@ public class XmRecordService extends BaseService { @Async public void addProductPhaseRecord(String productId, String phaseId, String action, String remarks, String newValue, String oldValue) { XmRecord record=this.initXmRecord(); - record.setProjectId(productId); + record.setProductId(productId); record.setBizId(phaseId); record.setAction(action); record.setRemarks(remarks); @@ -230,7 +308,7 @@ public class XmRecordService extends BaseService { /** * 针对项目下的任务的所有操作用此方法 - * @param productId 项目编号 + * @param productId 产品编号 * @param groupId 小组编号 * @param action 操作如 新增任务,修改任务信息,修改任务进度 等 * @param remarks 人性化语言描述 @@ -238,7 +316,7 @@ public class XmRecordService extends BaseService { @Async public void addXmProductGroupRecord(String productId,String groupId,String action,String remarks) { XmRecord record=this.initXmRecord(); - record.setProjectId(productId); + record.setProductId(productId); record.setBizId(groupId); record.setAction(action); record.setRemarks(remarks); @@ -248,7 +326,7 @@ public class XmRecordService extends BaseService { /** * 针对项目下的任务的所有操作用此方法 - * @param productId 项目编号 + * @param productId 产品编号 * @param action 操作如 新增任务,修改任务信息,修改任务进度 等 * @param remarks 人性化语言描述 * @param newValue 需要记录下来的新数据 可空 @@ -257,7 +335,7 @@ public class XmRecordService extends BaseService { @Async public void addXmProductGroupRecord(String productId,String groupId,String action,String remarks,String newValue,String oldValue) { XmRecord record=this.initXmRecord(); - record.setProjectId(productId); + record.setProductId(productId); record.setBizId(groupId); record.setAction(action); record.setRemarks(remarks); @@ -322,7 +400,7 @@ public class XmRecordService extends BaseService { record.setBizId(costId); record.setAction(action); record.setRemarks(remarks); - record.setObjType("group"); + record.setObjType("cost"); this.insert(record); } @@ -342,7 +420,7 @@ public class XmRecordService extends BaseService { record.setBizId(costId); record.setAction(action); record.setRemarks(remarks); - record.setObjType("group"); + record.setObjType("cost"); record.setNewValue(newValue); record.setOldValue(oldValue); this.insert(record);