diff --git a/src/main/java/com/xqopen/kehui/Api.java b/src/main/java/com/xqopen/kehui/Api.java index d403e74..57825ff 100644 --- a/src/main/java/com/xqopen/kehui/Api.java +++ b/src/main/java/com/xqopen/kehui/Api.java @@ -380,6 +380,7 @@ public class Api { public static final String PROJECT_WEEKLY = PROJECT_PREFIX + "/weekly"; public static final String PROJECT_WEEKLYBYID = PROJECT_PREFIX + "/weeklyById"; public static final String PROJECT_WEEKLY_ADD = PROJECT_WEEKLY + "/add"; + public static final String PROJECT_WEEKLY_ADDList = PROJECT_WEEKLY + "/addList"; public static final String PROJECT_WEEKLY_BUDGET = PROJECT_PREFIX + "/weekly/budget"; public static final String PROJECT_WEEKLY_BUDGET_ADD = PROJECT_WEEKLY_BUDGET + "/add"; public static final String PROJECT_WEEKLY_BUDGET_DEL = PROJECT_WEEKLY_BUDGET + "/del"; diff --git a/src/main/java/com/xqopen/kehui/project/action/ProjectWeeklyController.java b/src/main/java/com/xqopen/kehui/project/action/ProjectWeeklyController.java index 05f14a1..4fdbf22 100644 --- a/src/main/java/com/xqopen/kehui/project/action/ProjectWeeklyController.java +++ b/src/main/java/com/xqopen/kehui/project/action/ProjectWeeklyController.java @@ -11,13 +11,8 @@ import com.xqopen.kehui.common.service.ISystemUserLoginService; import com.xqopen.kehui.exception.ErrorCode; import com.xqopen.kehui.exception.XQException; import com.xqopen.kehui.project.api.ProjectWeeklyApi; -import com.xqopen.kehui.project.dto.ProjectWeeklyAddReq; -import com.xqopen.kehui.project.dto.ProjectWeeklyDto; -import com.xqopen.kehui.project.dto.ProjectWeeklyFindReq; -import com.xqopen.kehui.project.dto.ProjectWeeklyListResp; -import com.xqopen.kehui.project.entity.ProjectBudgetImplement; -import com.xqopen.kehui.project.entity.ProjectInfo; -import com.xqopen.kehui.project.entity.ProjectWeekly; +import com.xqopen.kehui.project.dto.*; +import com.xqopen.kehui.project.entity.*; import com.xqopen.kehui.project.service.IProjectBudgetImplementService; import com.xqopen.kehui.project.service.IProjectInfoService; import com.xqopen.kehui.project.service.IProjectWeeklyService; @@ -251,4 +246,94 @@ public class ProjectWeeklyController implements ProjectWeeklyApi { throw new XQException(ErrorCode.PROJECTINFO_PROJECTSTEP_EMPTY_ERROR, null); } } + + /** + * 批量新增周报填报 + * + * @param initDto + * @return + * @throws XQException + */ + @Override + @PostMapping(Api.PROJECT_WEEKLY_ADDList) + @Transactional + public String addWeek(@RequestHeader("userId") Long userId, @RequestBody ProjectWeeklyInitDto initDto) throws XQException { + try { + if (!ObjectUtils.isEmpty(initDto)){ + List membersList = initDto.getMembersList(); + ProjectInfoReq projectInfoReq = initDto.getProjectInfoReq(); + // 根据编号,名称查询是否存在 + for (ProjectWeeklyList list : membersList) { + String projectName = list.getProjectName(); + String projectNo = list.getProjectNo(); + EntityWrapper wrapper = new EntityWrapper<>(); + if (!StringUtils.isEmpty(projectNo)) wrapper.eq("project_no", projectNo); + if (!StringUtils.isEmpty(projectName)) wrapper.eq("project_name", projectName); + wrapper.eq("is_deleted", false); + wrapper.eq("project_category", "init"); + ProjectInfo project = projectInfoService.selectOne(wrapper); + + if (ObjectUtils.isEmpty(project)) return ApiResponse.fillFail("你输入的项目编号/名称不存在!"); + ProjectWeekly projectWeekly = new ProjectWeekly(); + projectWeekly.setProjectId(String.valueOf(project.getId())); + //将项目专员和项目负责人id 存入Weekly中 + JSONObject extInfo = project.getExt(); + JSONArray projectManagerData = extInfo.getJSONArray("projectManagerData"); + JSONArray projectAdmin = extInfo.getJSONArray("projectAdmin"); + JSONObject ext = projectWeekly.getExt(); + ext.put("projectManagerData",projectManagerData.getString(projectManagerData.toArray().length -1 )); + ext.put("projectAdmin",projectAdmin.getString(projectAdmin.toArray().length -1 )); + ext.put("draftManId",extInfo.getString("draftManId")); + + //新增个人周报填报时,判断相应的部门周报是否存在,否则添加 + EntityWrapper weeklyEntityWrapper = new EntityWrapper<>(); + weeklyEntityWrapper.eq("is_deleted", "0"); + weeklyEntityWrapper.eq("week", list.getWeek()); + weeklyEntityWrapper.eq("weekly_type", "1"); + weeklyEntityWrapper.eq("dept_id", projectInfoReq.getExt().getJSONArray("executeDepts").getString(0)); + weeklyEntityWrapper.eq("project_id", projectWeekly.getProjectId()); + ProjectWeekly weekly = projectWeeklyService.selectOne(weeklyEntityWrapper); + if (ObjectUtils.isEmpty(weekly)) { + weekly = new ProjectWeekly(); + weekly.setWeeklyType("1"); + weekly.setExt(projectWeekly.getExt()); + weekly.setWeek(list.getWeek()); + weekly.setProjectId(projectWeekly.getProjectId()); + weekly.setDeptId(projectInfoReq.getExt().getJSONArray("executeDepts").getString(0)); + weekly.setCreatedAt(new Timestamp(System.currentTimeMillis())); + projectWeeklyService.insert(weekly); + projectWeekly.setParentId(weekly.getId()); + // 添加部门周报时判断项目类型 若为平台专项 则添加项目预算 + if (project.getExt().get("openRange").equals(5)){ + ProjectBudgetImplement budgetImplement = new ProjectBudgetImplement(); + budgetImplement.setWeek(list.getWeek()); + budgetImplement.setProjectId(projectWeekly.getProjectId()); + budgetImplement.setBudget(project.getExt().get("budget").toString()); + budgetImplement.setCreatedAt(new Timestamp(System.currentTimeMillis())); + budgetImplementService.insert(budgetImplement); + } + }else { + // 部门周报存在时,直接给个人周报加上parentId + projectWeekly.setParentId(weekly.getId()); + } + // 添加个人周报 + projectWeekly.setUserId(projectInfoReq.getExt().get("draftManId").toString()); + projectWeekly.setThisWeek(list.getThisWeek()); + projectWeekly.setNextWeek(list.getNextWeek()); + projectWeekly.setCreatedBy(projectInfoReq.getExt().get("draftManId").toString()); + projectWeekly.setCreatedAt(new Timestamp(System.currentTimeMillis())); + projectWeeklyService.insert(projectWeekly); + } + return ApiResponse.fillSuccess("新增成功!"); + } + return ApiResponse.fillFail("操作失败"); + } catch (Exception e) { + log.error("ProjectWeeklyController.add", e); + //批量新增出现异常被捕获时,手动回滚事务,保证数据库一致 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + throw new XQException(ErrorCode.PROJECTINFO_EXCEPTION_ERROR, null); + } + } + + } diff --git a/src/main/java/com/xqopen/kehui/project/api/ProjectWeeklyApi.java b/src/main/java/com/xqopen/kehui/project/api/ProjectWeeklyApi.java index 8320046..56cf86a 100644 --- a/src/main/java/com/xqopen/kehui/project/api/ProjectWeeklyApi.java +++ b/src/main/java/com/xqopen/kehui/project/api/ProjectWeeklyApi.java @@ -1,8 +1,10 @@ package com.xqopen.kehui.project.api; import com.xqopen.kehui.exception.XQException; +import com.xqopen.kehui.project.dto.ProjectInfoInitDto; import com.xqopen.kehui.project.dto.ProjectWeeklyAddReq; import com.xqopen.kehui.project.dto.ProjectWeeklyFindReq; +import com.xqopen.kehui.project.dto.ProjectWeeklyInitDto; import com.xqopen.kehui.util.ApiResponse; import com.xqopen.kehui.util.Constants; import io.swagger.annotations.Api; @@ -25,4 +27,10 @@ public interface ProjectWeeklyApi { }) String list(Long userId, ProjectWeeklyFindReq projectWeeklyFindReq) throws XQException; + @ApiOperation(value = "新增个人周报填报", notes = "新增个人周报填报", response = ApiResponse.class) + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "登录标识符", required = true, paramType = "header", dataType = "String"), + @ApiImplicitParam(name = "userId", value = "用户id", required = true, paramType = "header", dataType = "Long"), + }) + String addWeek(Long userId, ProjectWeeklyInitDto initDto) throws XQException; } diff --git a/src/main/java/com/xqopen/kehui/project/dto/ProjectWeeklyInitDto.java b/src/main/java/com/xqopen/kehui/project/dto/ProjectWeeklyInitDto.java new file mode 100644 index 0000000..f5cdb0f --- /dev/null +++ b/src/main/java/com/xqopen/kehui/project/dto/ProjectWeeklyInitDto.java @@ -0,0 +1,15 @@ +package com.xqopen.kehui.project.dto; + +import com.xqopen.kehui.project.entity.ProjectAssessmentIndicators; +import com.xqopen.kehui.project.entity.ProjectWeekly; +import com.xqopen.kehui.project.entity.ProjectWeeklyList; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class ProjectWeeklyInitDto { + ProjectInfoReq projectInfoReq; + List membersList; +} diff --git a/src/main/java/com/xqopen/kehui/project/entity/ProjectWeeklyList.java b/src/main/java/com/xqopen/kehui/project/entity/ProjectWeeklyList.java new file mode 100644 index 0000000..6c7c85a --- /dev/null +++ b/src/main/java/com/xqopen/kehui/project/entity/ProjectWeeklyList.java @@ -0,0 +1,47 @@ +package com.xqopen.kehui.project.entity; + + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.activerecord.Model; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/*** + * 周报填报 + */ +@Data +@TableName("project_weekly") +public class ProjectWeeklyList extends Model { + private static final long serialVersionUID = 1L; + @TableId(value = "id_", type = IdType.AUTO) + private String id; + private String projectName; + private String projectNo; + @ApiModelProperty("工作量") + private String workload; + @ApiModelProperty("本周进展") + private String thisWeek; + @ApiModelProperty("下周计划") + private String nextWeek; + @ApiModelProperty("任务是否完成") + private String isComplete; + private String createdBy ; + private java.sql.Timestamp createdAt ; + private String updatedBy ; + private java.sql.Timestamp updatedAt ; + @TableField("ext_") + private JSONObject ext; + private String parentId; + private String week; + + @Override + protected Serializable pkVal() { + return null; + } +}