Browse Source

管理者wbs

tiaosheng
zy_Java 5 years ago
parent
commit
b0c290a2cc
  1. 4
      mt/src/main/resources/application.yml
  2. BIN
      nullzzz/2020-10-22/1603333027707.xlsx
  3. 14
      tall/src/main/java/com/ccsens/tall/bean/dto/PluginDto.java
  4. 15
      tall/src/main/java/com/ccsens/tall/bean/dto/RoleDto.java
  5. 2
      tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java
  6. 49
      tall/src/main/java/com/ccsens/tall/bean/dto/WeekMeetingDto.java
  7. 95
      tall/src/main/java/com/ccsens/tall/bean/po/ProUserAttentionRole.java
  8. 621
      tall/src/main/java/com/ccsens/tall/bean/po/ProUserAttentionRoleExample.java
  9. 30
      tall/src/main/java/com/ccsens/tall/bean/vo/PluginVo.java
  10. 13
      tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java
  11. 40
      tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java
  12. 11
      tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java
  13. 11
      tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java
  14. 2
      tall/src/main/java/com/ccsens/tall/persist/dao/TaskDetailDao.java
  15. 10
      tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java
  16. 30
      tall/src/main/java/com/ccsens/tall/persist/mapper/ProUserAttentionRoleMapper.java
  17. 23
      tall/src/main/java/com/ccsens/tall/service/ExcelService.java
  18. 6
      tall/src/main/java/com/ccsens/tall/service/IProMemberService.java
  19. 7
      tall/src/main/java/com/ccsens/tall/service/IProRoleService.java
  20. 5
      tall/src/main/java/com/ccsens/tall/service/ISysPluginService.java
  21. 10
      tall/src/main/java/com/ccsens/tall/service/ITaskPluginService.java
  22. 44
      tall/src/main/java/com/ccsens/tall/service/IWeekMeetingService.java
  23. 24
      tall/src/main/java/com/ccsens/tall/service/ProMemberService.java
  24. 82
      tall/src/main/java/com/ccsens/tall/service/ProRoleService.java
  25. 34
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  26. 56
      tall/src/main/java/com/ccsens/tall/service/ProjectService.java
  27. 19
      tall/src/main/java/com/ccsens/tall/service/SysPluginService.java
  28. 70
      tall/src/main/java/com/ccsens/tall/service/TaskPluginService.java
  29. 355
      tall/src/main/java/com/ccsens/tall/service/WeekMeetingService.java
  30. 2
      tall/src/main/java/com/ccsens/tall/util/TallConstant.java
  31. 12
      tall/src/main/java/com/ccsens/tall/web/MemberController.java
  32. 25
      tall/src/main/java/com/ccsens/tall/web/PluginController.java
  33. 24
      tall/src/main/java/com/ccsens/tall/web/ProjectController.java
  34. 10
      tall/src/main/java/com/ccsens/tall/web/RoleController.java
  35. 79
      tall/src/main/java/com/ccsens/tall/web/WeekMeetingController.java
  36. 4
      tall/src/main/resources/application.yml
  37. 34
      tall/src/main/resources/mapper_dao/ProMemberDao.xml
  38. 1
      tall/src/main/resources/mapper_dao/SysPluginDao.xml
  39. 14
      tall/src/main/resources/mapper_dao/SysProjectDao.xml
  40. 10
      tall/src/main/resources/mapper_dao/TaskDetailDao.xml
  41. 84
      tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml
  42. 243
      tall/src/main/resources/mapper_raw/ProUserAttentionRoleMapper.xml
  43. 19
      util/src/main/java/com/ccsens/util/PoiUtil.java
  44. 4
      util/src/main/java/com/ccsens/util/RedisUtil.java

4
mt/src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: dev
include: common, util-dev
active: test
include: common, util-test

BIN
nullzzz/2020-10-22/1603333027707.xlsx

Binary file not shown.

14
tall/src/main/java/com/ccsens/tall/bean/dto/PluginDto.java

@ -15,6 +15,20 @@ import java.util.List;
*/
@Data
public class PluginDto {
@Data
@ApiModel("添加插件")
public static class SaveSysPlugin {
@NotEmpty
@ApiModelProperty("插件名(英文的code)")
private String name;
@NotEmpty
@ApiModelProperty("插件描述")
private String description;
@ApiModelProperty("插件展示位置 默认2:0不显示,1任务头上右侧图标,2任务详情显示按钮,3任务展开面板显示(特殊形式)")
private byte showType = 2;
}
@Data
@ApiModel("添加评论")
public static class AddCommentPlugin {

15
tall/src/main/java/com/ccsens/tall/bean/dto/RoleDto.java

@ -6,6 +6,7 @@ import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class RoleDto {
@ -58,5 +59,19 @@ public class RoleDto {
@NotNull(message = "项目Id")
@ApiModelProperty("项目Id")
private Long projectId;
@ApiModelProperty("开始时间")
private Long startTime;
@ApiModelProperty("结束时间")
private Long endTime;
}
@Data
@ApiModel("修改用户可见的角色的展示")
public static class UpdateRoleShow{
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("角色id")
private List<Long> roleIdList;
}
}

2
tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java

@ -111,7 +111,7 @@ public class UserDto {
@NotEmpty(message = "密码不能为空")
@Pattern(regexp="^[a-zA-Z0-9._-]{6,20}$",message="密码长度需在6~20之间,不能使用汉字,不能包含特殊字符")
private String password;
@ApiModelProperty("来源 0:默认注册,1:HT病人注册")
@ApiModelProperty("来源 0:默认注册,1:HT病人注册,2绿谷注册")
private byte source = WebConstant.Regist.SOURCE;
}

49
tall/src/main/java/com/ccsens/tall/bean/dto/WeekMeetingDto.java

@ -0,0 +1,49 @@
package com.ccsens.tall.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NonNull;
import java.util.List;
/**
* @author
*/
@Data
public class WeekMeetingDto {
@Data
@ApiModel("项目的id")
public static class WeekMeetingId{
@ApiModelProperty("项目的id")
private Long projectId;
}
@Data
@ApiModel("查找个人本周任务")
public static class WeekTaskByMemberAndProject{
@NonNull
@ApiModelProperty("成员id")
private Long memberId;
@ApiModelProperty("“个人汇报”任务的id")
private Long taskId;
@ApiModelProperty("周会项目的id")
private Long projectId;
public WeekTaskByMemberAndProject() {
}
}
@Data
@ApiModel("项目的id")
public static class WeekMeetingMinutes{
@ApiModelProperty("项目的id")
private Long projectId;
@ApiModelProperty("个人汇报任务的id")
private long taskId;
@ApiModelProperty("域名")
private String domainName;
}
}

95
tall/src/main/java/com/ccsens/tall/bean/po/ProUserAttentionRole.java

@ -0,0 +1,95 @@
package com.ccsens.tall.bean.po;
import java.io.Serializable;
import java.util.Date;
public class ProUserAttentionRole implements Serializable {
private Long id;
private Long projectId;
private Long userId;
private Long roleId;
private Date createdAt;
private Date updatedAt;
private Byte recStatus;
private static final long serialVersionUID = 1L;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getProjectId() {
return projectId;
}
public void setProjectId(Long projectId) {
this.projectId = projectId;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public Date getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt;
}
public Byte getRecStatus() {
return recStatus;
}
public void setRecStatus(Byte recStatus) {
this.recStatus = recStatus;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", projectId=").append(projectId);
sb.append(", userId=").append(userId);
sb.append(", roleId=").append(roleId);
sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt);
sb.append(", recStatus=").append(recStatus);
sb.append("]");
return sb.toString();
}
}

621
tall/src/main/java/com/ccsens/tall/bean/po/ProUserAttentionRoleExample.java

@ -0,0 +1,621 @@
package com.ccsens.tall.bean.po;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ProUserAttentionRoleExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public ProUserAttentionRoleExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(Long value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(Long value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(Long value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(Long value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(Long value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(Long value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<Long> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<Long> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(Long value1, Long value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(Long value1, Long value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andProjectIdIsNull() {
addCriterion("project_id is null");
return (Criteria) this;
}
public Criteria andProjectIdIsNotNull() {
addCriterion("project_id is not null");
return (Criteria) this;
}
public Criteria andProjectIdEqualTo(Long value) {
addCriterion("project_id =", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotEqualTo(Long value) {
addCriterion("project_id <>", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdGreaterThan(Long value) {
addCriterion("project_id >", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdGreaterThanOrEqualTo(Long value) {
addCriterion("project_id >=", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLessThan(Long value) {
addCriterion("project_id <", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLessThanOrEqualTo(Long value) {
addCriterion("project_id <=", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdIn(List<Long> values) {
addCriterion("project_id in", values, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotIn(List<Long> values) {
addCriterion("project_id not in", values, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdBetween(Long value1, Long value2) {
addCriterion("project_id between", value1, value2, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotBetween(Long value1, Long value2) {
addCriterion("project_id not between", value1, value2, "projectId");
return (Criteria) this;
}
public Criteria andUserIdIsNull() {
addCriterion("user_id is null");
return (Criteria) this;
}
public Criteria andUserIdIsNotNull() {
addCriterion("user_id is not null");
return (Criteria) this;
}
public Criteria andUserIdEqualTo(Long value) {
addCriterion("user_id =", value, "userId");
return (Criteria) this;
}
public Criteria andUserIdNotEqualTo(Long value) {
addCriterion("user_id <>", value, "userId");
return (Criteria) this;
}
public Criteria andUserIdGreaterThan(Long value) {
addCriterion("user_id >", value, "userId");
return (Criteria) this;
}
public Criteria andUserIdGreaterThanOrEqualTo(Long value) {
addCriterion("user_id >=", value, "userId");
return (Criteria) this;
}
public Criteria andUserIdLessThan(Long value) {
addCriterion("user_id <", value, "userId");
return (Criteria) this;
}
public Criteria andUserIdLessThanOrEqualTo(Long value) {
addCriterion("user_id <=", value, "userId");
return (Criteria) this;
}
public Criteria andUserIdIn(List<Long> values) {
addCriterion("user_id in", values, "userId");
return (Criteria) this;
}
public Criteria andUserIdNotIn(List<Long> values) {
addCriterion("user_id not in", values, "userId");
return (Criteria) this;
}
public Criteria andUserIdBetween(Long value1, Long value2) {
addCriterion("user_id between", value1, value2, "userId");
return (Criteria) this;
}
public Criteria andUserIdNotBetween(Long value1, Long value2) {
addCriterion("user_id not between", value1, value2, "userId");
return (Criteria) this;
}
public Criteria andRoleIdIsNull() {
addCriterion("role_id is null");
return (Criteria) this;
}
public Criteria andRoleIdIsNotNull() {
addCriterion("role_id is not null");
return (Criteria) this;
}
public Criteria andRoleIdEqualTo(Long value) {
addCriterion("role_id =", value, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdNotEqualTo(Long value) {
addCriterion("role_id <>", value, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdGreaterThan(Long value) {
addCriterion("role_id >", value, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdGreaterThanOrEqualTo(Long value) {
addCriterion("role_id >=", value, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdLessThan(Long value) {
addCriterion("role_id <", value, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdLessThanOrEqualTo(Long value) {
addCriterion("role_id <=", value, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdIn(List<Long> values) {
addCriterion("role_id in", values, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdNotIn(List<Long> values) {
addCriterion("role_id not in", values, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdBetween(Long value1, Long value2) {
addCriterion("role_id between", value1, value2, "roleId");
return (Criteria) this;
}
public Criteria andRoleIdNotBetween(Long value1, Long value2) {
addCriterion("role_id not between", value1, value2, "roleId");
return (Criteria) this;
}
public Criteria andCreatedAtIsNull() {
addCriterion("created_at is null");
return (Criteria) this;
}
public Criteria andCreatedAtIsNotNull() {
addCriterion("created_at is not null");
return (Criteria) this;
}
public Criteria andCreatedAtEqualTo(Date value) {
addCriterion("created_at =", value, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtNotEqualTo(Date value) {
addCriterion("created_at <>", value, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtGreaterThan(Date value) {
addCriterion("created_at >", value, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtGreaterThanOrEqualTo(Date value) {
addCriterion("created_at >=", value, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtLessThan(Date value) {
addCriterion("created_at <", value, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtLessThanOrEqualTo(Date value) {
addCriterion("created_at <=", value, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtIn(List<Date> values) {
addCriterion("created_at in", values, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtNotIn(List<Date> values) {
addCriterion("created_at not in", values, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtBetween(Date value1, Date value2) {
addCriterion("created_at between", value1, value2, "createdAt");
return (Criteria) this;
}
public Criteria andCreatedAtNotBetween(Date value1, Date value2) {
addCriterion("created_at not between", value1, value2, "createdAt");
return (Criteria) this;
}
public Criteria andUpdatedAtIsNull() {
addCriterion("updated_at is null");
return (Criteria) this;
}
public Criteria andUpdatedAtIsNotNull() {
addCriterion("updated_at is not null");
return (Criteria) this;
}
public Criteria andUpdatedAtEqualTo(Date value) {
addCriterion("updated_at =", value, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtNotEqualTo(Date value) {
addCriterion("updated_at <>", value, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtGreaterThan(Date value) {
addCriterion("updated_at >", value, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtGreaterThanOrEqualTo(Date value) {
addCriterion("updated_at >=", value, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtLessThan(Date value) {
addCriterion("updated_at <", value, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtLessThanOrEqualTo(Date value) {
addCriterion("updated_at <=", value, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtIn(List<Date> values) {
addCriterion("updated_at in", values, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtNotIn(List<Date> values) {
addCriterion("updated_at not in", values, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtBetween(Date value1, Date value2) {
addCriterion("updated_at between", value1, value2, "updatedAt");
return (Criteria) this;
}
public Criteria andUpdatedAtNotBetween(Date value1, Date value2) {
addCriterion("updated_at not between", value1, value2, "updatedAt");
return (Criteria) this;
}
public Criteria andRecStatusIsNull() {
addCriterion("rec_status is null");
return (Criteria) this;
}
public Criteria andRecStatusIsNotNull() {
addCriterion("rec_status is not null");
return (Criteria) this;
}
public Criteria andRecStatusEqualTo(Byte value) {
addCriterion("rec_status =", value, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusNotEqualTo(Byte value) {
addCriterion("rec_status <>", value, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusGreaterThan(Byte value) {
addCriterion("rec_status >", value, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusGreaterThanOrEqualTo(Byte value) {
addCriterion("rec_status >=", value, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusLessThan(Byte value) {
addCriterion("rec_status <", value, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusLessThanOrEqualTo(Byte value) {
addCriterion("rec_status <=", value, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusIn(List<Byte> values) {
addCriterion("rec_status in", values, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusNotIn(List<Byte> values) {
addCriterion("rec_status not in", values, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusBetween(Byte value1, Byte value2) {
addCriterion("rec_status between", value1, value2, "recStatus");
return (Criteria) this;
}
public Criteria andRecStatusNotBetween(Byte value1, Byte value2) {
addCriterion("rec_status not between", value1, value2, "recStatus");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

30
tall/src/main/java/com/ccsens/tall/bean/vo/PluginVo.java

@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class PluginVo {
@ -92,5 +94,33 @@ public class PluginVo {
private Long wpsFileId;
}
@Data
@ApiModel("个人任务汇报插件的入参(包含成员id姓名,项目id姓名,话术)")
public static class PersonalTaskReport{
@ApiModelProperty("话术")
private String verbalTrick;
@ApiModelProperty("成员信息")
private List<ReportMember> memberList;
@ApiModelProperty("项目信息")
private List<ReportProject> projectList;
}
@Data
@ApiModel("需要汇报的成员")
public static class ReportMember{
@ApiModelProperty("成员id")
private Long memberId;
@ApiModelProperty("成员名")
private String memberName;
}
@Data
@ApiModel("需要汇报的项目")
public static class ReportProject{
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("项目名")
private String projectName;
}
}

13
tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java

@ -135,7 +135,7 @@ public class ProjectVo {
@ApiModelProperty("是否展示MVP 0:不展示 1:展示")
private int showMvp = 1;
@JsonIgnore//0日程,1天,2周,3月
private int selectTaskType = 1;
private int selectTaskType = 2;
@ApiModelProperty("查询任务类型")
private String selectType;
@ApiModelProperty("第三列展示页面的路径")
@ -359,4 +359,15 @@ public class ProjectVo {
private String phone;
}
@Data
@ApiModel("查找项目内所有的成员")
public static class MemberList{
@ApiModelProperty("成员id")
private Long memberId;
@ApiModelProperty("成员名")
private String memberName;
}
}

40
tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java

@ -409,39 +409,55 @@ public class TaskVo {
* 会议纪要里的任务信息
*/
@Data
@ApiModel("每周的任务信息")
public static class TaskMinutesWps{
@ApiModelProperty("分解后的任务id")
private Long taskSubTimeId;
//负责人角色名
@ApiModelProperty("负责人角色名")
private String executorRoleName;
//任务名
@ApiModelProperty("任务名")
private String taskName;
//计划开始时间
@ApiModelProperty("计划开始时间")
private String beginTime;
//计划结束时间
@ApiModelProperty("计划结束时间")
private String endTime;
//实际开始时间
@ApiModelProperty("实际开始时间")
private String realBeginTime;
//实际结束时间
@ApiModelProperty("实际结束时间")
private String realEndTime;
//评论
@ApiModelProperty("是否是里程碑 0否 1是")
private Byte milestone;
@ApiModelProperty("状态:0-未开始,1-进行中,2-已完成")
private Byte process;
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("项目名")
private String projectName;
@ApiModelProperty("评论")
private List<CommentByMinutes> comment;
//交付物
@ApiModelProperty("交付物")
private List<DeliverByMinutes> deliverList;
@Data
@ApiModel("每周任务的评论")
public static class CommentByMinutes{
@ApiModelProperty("评论id")
private Long commentId;
//发送者的名字
@ApiModelProperty("发送者的名字")
private String userName;
//评论内容
@ApiModelProperty("评论内容")
private String commentValue;
}
@Data
@ApiModel("每周任务的交付物")
public static class DeliverByMinutes{
@ApiModelProperty("交付物id")
private Long deliverId;
//交付物名
@ApiModelProperty("交付物名")
private String deliverName;
//交付物文件地址,没有则为空
@ApiModelProperty("交付物文件地址,没有则为空")
private String deliverPath;
@ApiModelProperty("交付物分数")
private int score;
}
}

11
tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java

@ -2,6 +2,7 @@ package com.ccsens.tall.persist.dao;
import com.ccsens.tall.bean.po.ProMember;
import com.ccsens.tall.bean.vo.MemberVo;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.ProjectVo;
import com.ccsens.tall.bean.vo.WbsVo;
import com.ccsens.tall.persist.mapper.ProMemberMapper;
@ -41,4 +42,14 @@ public interface ProMemberDao extends ProMemberMapper{
* @return 用户信息
*/
MemberVo.MemberInfo getMemberByUserIdAndTaskId(@Param("userId") Long userId, @Param("taskId")Long taskId);
List<PluginVo.ReportMember> queryMemberByProjectId(@Param("projectId")Long projectId);
/**
* 根据项目id查询所有成员信息(不包含奖惩干系人)
* @param projectId
* @return
*/
List<ProjectVo.MemberList> queryMembersByProjectId(@Param("projectId")Long projectId);
}

11
tall/src/main/java/com/ccsens/tall/persist/dao/SysProjectDao.java

@ -2,6 +2,7 @@ package com.ccsens.tall.persist.dao;
import com.ccsens.tall.bean.po.SysProject;
import com.ccsens.tall.bean.vo.ChartVo;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.ProjectVo;
import com.ccsens.tall.persist.mapper.SysProjectMapper;
import org.apache.ibatis.annotations.Param;
@ -40,7 +41,15 @@ public interface SysProjectDao extends SysProjectMapper{
@Param("start")Long start, @Param("end")Long end,
@Param("roleId")Long roleId,@Param("allMemberId")Long allMemberId,@Param("type") Integer type);
Integer getTaskTotalByProjectId(@Param("projectId")Long projectId, @Param("start")Long start, @Param("end")Long end, @Param("roleId")Long roleId);
// Integer getTaskTotalByProjectId(@Param("projectId")Long projectId, @Param("start")Long start, @Param("end")Long end, @Param("roleId")Long roleId);
ChartVo.ProjectOverview getOverviewByToDay(@Param("projectId")Long projectId, @Param("startTime")Long startTime, @Param("endTime")Long endTime,@Param("roleIdList")List<Long> roleIdList);
/**
* 根据父项目id查找项目不包含当前项目
* @param parentId 父项目id
* @param projectId 当前项目id
* @return
*/
List<PluginVo.ReportProject> queryProjectByParentIdAndNotOwn(@Param("parentId")Long parentId, @Param("projectId")Long projectId);
}

2
tall/src/main/java/com/ccsens/tall/persist/dao/TaskDetailDao.java

@ -52,5 +52,5 @@ public interface TaskDetailDao extends ProTaskDetailMapper {
* @param parentTaskId
* @return
*/
List<TaskVo.TaskListByProjectId> getTaskByParentId(@Param("parentTaskId")Long parentTaskId,@Param("milestone")Integer milestone);
List<TaskVo.TaskListByProjectId> getTaskByParentId(@Param("parentTaskId")Long parentTaskId,@Param("milestone")Integer milestone,@Param("beginTime")Long beginTime,@Param("endTime")Long endTime);
}

10
tall/src/main/java/com/ccsens/tall/persist/dao/TaskSubTimeDao.java

@ -21,5 +21,15 @@ public interface TaskSubTimeDao extends ProTaskSubTimeMapper{
@Param("type")Integer type,@Param("orderType")Integer orderType,@Param("order")Integer order);
List<TaskVo.TaskMinutesWps> queryMinutesTaskByTime(@Param("projectId")Long projectId, @Param("startTime")Long startTime, @Param("endTime")Long endTime);
/**
* 根据成员和项目查看本周任务
* @param projectId 项目id
* @param userId 用户id
* @param thisWeekStartTime 开始时间
* @param thisWeekEndTime 结束时间
* @return
*/
List<TaskVo.TaskMinutesWps> queryWeekTaskByMemberAndProject(@Param("projectId")Long projectId, @Param("userId")Long userId, @Param("startTime")long thisWeekStartTime, @Param("endTime")long thisWeekEndTime);
}

30
tall/src/main/java/com/ccsens/tall/persist/mapper/ProUserAttentionRoleMapper.java

@ -0,0 +1,30 @@
package com.ccsens.tall.persist.mapper;
import com.ccsens.tall.bean.po.ProUserAttentionRole;
import com.ccsens.tall.bean.po.ProUserAttentionRoleExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface ProUserAttentionRoleMapper {
long countByExample(ProUserAttentionRoleExample example);
int deleteByExample(ProUserAttentionRoleExample example);
int deleteByPrimaryKey(Long id);
int insert(ProUserAttentionRole record);
int insertSelective(ProUserAttentionRole record);
List<ProUserAttentionRole> selectByExample(ProUserAttentionRoleExample example);
ProUserAttentionRole selectByPrimaryKey(Long id);
int updateByExampleSelective(@Param("record") ProUserAttentionRole record, @Param("example") ProUserAttentionRoleExample example);
int updateByExample(@Param("record") ProUserAttentionRole record, @Param("example") ProUserAttentionRoleExample example);
int updateByPrimaryKeySelective(ProUserAttentionRole record);
int updateByPrimaryKey(ProUserAttentionRole record);
}

23
tall/src/main/java/com/ccsens/tall/service/ExcelService.java

@ -678,30 +678,22 @@ public class ExcelService implements IExcelService {
firstTaskDetail.setVirtual((byte) WebConstant.TASK_VIRTUAL.Normal.value);
firstTaskDetail.setLevel((byte) WebConstant.TASK_LEVEL.FirstTask.value);
firstTaskDetail.setExecutorRole(pmRoleId);
if(ObjectUtil.isNotNull(firstStartTime)){
firstTaskDetail.setBeginTime(firstStartTime);
}else{
// if(ObjectUtil.isNotNull(firstStartTime)){
// firstTaskDetail.setBeginTime(firstStartTime);
// }else{
if (StrUtil.isNotEmpty(beginTime)) {
firstTaskDetail.setBeginTime(Long.valueOf(beginTime));
}else {
firstTaskDetail.setBeginTime(sysProject.getBeginTime());
}
}
// }
firstTaskDetail.setEndTime(sysProject.getEndTime());
proTaskDetailService.saveTaskDetail(firstTaskDetail);
taskDetails.add(firstTaskDetail);
firstTaskDetailId = firstTaskDetail.getId();
// if (CollectionUtil.isNotEmpty(taskDetails)) {
// for (ProTaskDetail proTask1 : taskDetails) {
// if (proTask1.getName().equals(task1)) {
// firstTaskDetailId = proTask1.getId();
// break;
// }
// }
// }
}
if (ObjectUtil.isNull(firstTaskDetailId)) {
@ -1171,9 +1163,10 @@ public class ExcelService implements IExcelService {
}
}
}
} else {
throw new BaseException(CodeEnum.WBS_NOT_PLUGIN_SHEET);
}
// else {
// throw new BaseException(CodeEnum.WBS_NOT_PLUGIN_SHEET);
// }
}
}

6
tall/src/main/java/com/ccsens/tall/service/IProMemberService.java

@ -70,4 +70,10 @@ public interface IProMemberService {
*/
MemberVo.MemberInfo getMemberByUserIdAndTaskId(Long userId, Long taskId);
/**
* 通过项目id获取所有的成员信息(不包含奖惩干系人)
* @param projectId 项目id
* @return 返回所有成员信息
*/
List<ProjectVo.MemberList> queryMembersByProjectId(Long projectId);
}

7
tall/src/main/java/com/ccsens/tall/service/IProRoleService.java

@ -42,6 +42,13 @@ public interface IProRoleService {
*/
List<TaskVo.NormalTask> queryByProjectVirtualRole(RoleDto.ProjectId projectId);
/**
* 修改该用户关注的角色是否展示
* @param currentUserId
* @param roleShow
*/
void updateRoleShow(Long currentUserId, RoleDto.UpdateRoleShow roleShow);
// /**
// * 查找项目下的角色包含“全体成员”
// * @param projectId 项目id

5
tall/src/main/java/com/ccsens/tall/service/ISysPluginService.java

@ -1,10 +1,14 @@
package com.ccsens.tall.service;
import com.ccsens.tall.bean.dto.PluginDto;
import com.ccsens.tall.bean.vo.PluginVo;
import java.util.List;
public interface ISysPluginService {
void saveSysPlugin(PluginDto.SaveSysPlugin saveSysPlugin);
List<PluginVo.PluginInfo> getPluginAll();
List<PluginVo.PluginSignField> getSignByPlugin(Long taskPluginId);
@ -12,4 +16,5 @@ public interface ISysPluginService {
List<String> getSignFuzzy(Long taskPluginId, String signinName, String key);
Long getTaskDetailIdByPlugin(Long taskPluginId);
}

10
tall/src/main/java/com/ccsens/tall/service/ITaskPluginService.java

@ -65,6 +65,14 @@ public interface ITaskPluginService {
/**
* 修改插件配置
* @param updatePluginConfig 插件配置
* @return
*/
void updatePluginConfig(PluginDto.UpdatePluginConfig updatePluginConfig);
TaskVo.PluginVo updatePluginConfig(PluginDto.UpdatePluginConfig updatePluginConfig);
/**
* 查找周会项目的父项目的成员和项目
* @param projectId
* @return
*/
PluginVo.PersonalTaskReport getPersonalTaskReport(Long projectId);
}

44
tall/src/main/java/com/ccsens/tall/service/IWeekMeetingService.java

@ -0,0 +1,44 @@
package com.ccsens.tall.service;
import com.ccsens.tall.bean.dto.WeekMeetingDto;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.ProjectVo;
import com.ccsens.tall.bean.vo.TaskVo;
import java.io.IOException;
import java.util.List;
/**
* @author
*/
public interface IWeekMeetingService {
/**
* 查找周会要用到的项目
* @param projectId 周会项目id
* @param userId userId
* @return 返回查询到的项目列表
*/
List<PluginVo.ReportProject> queryWeekUserProject(Long projectId, Long userId);
/**
* 查找本周任务
* @param projectId 项目id
* @return 本周任务
*/
List<TaskVo.TaskMinutesWps> queryWeekTaskByProject(Long projectId);
/**
* 查找个人本周任务
* @param param 成员id和项目id
* @return 返回本周任务
*/
List<TaskVo.TaskMinutesWps> queryWeekTaskByMemberAndProject(WeekMeetingDto.WeekTaskByMemberAndProject param) throws IOException;
/**
* 生成会议记录表传控模板
* @param userId userId
* @param param 项目id和域名
* @return
*/
String getCcMinutes(Long userId, WeekMeetingDto.WeekMeetingMinutes param) throws IOException;
}

24
tall/src/main/java/com/ccsens/tall/service/ProMemberService.java

@ -221,24 +221,7 @@ public class ProMemberService implements IProMemberService {
memberInfo.setUserId(user.getId());
memberInfo.setNickname(user.getNickname());
memberInfo.setAvatarUrl(user.getAvatarUrl());
// //查询该用户的手机号
// SysAuthExample authExample = new SysAuthExample();
// authExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Phone.value)
// .andUserIdEqualTo(user.getId());
// List<SysAuth> authList = authDao.selectByExample(authExample);
// if(CollectionUtil.isNotEmpty(authList)){
// memberInfo.setPhone(authList.get(0).getIdentifier());
// }
// if(ObjectUtil.isNull(user.getNickname())){
// //查找账号名
// SysAuthExample sysAuthExample = new SysAuthExample();
// sysAuthExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Account.value)
// .andUserIdEqualTo(user.getId());
// List<SysAuth> accountAuth = authDao.selectByExample(sysAuthExample);
// if(CollectionUtil.isNotEmpty(accountAuth)){
// memberInfo.setNickname(accountAuth.get(0).getIdentifier());
// }
// }
}
return memberInfo;
}
@ -449,4 +432,9 @@ public class ProMemberService implements IProMemberService {
public MemberVo.MemberInfo getMemberByUserIdAndTaskId(Long userId, Long taskId) {
return proMemberDao.getMemberByUserIdAndTaskId(userId, taskId);
}
@Override
public List<ProjectVo.MemberList> queryMembersByProjectId(Long projectId) {
return proMemberDao.queryMembersByProjectId(projectId);
}
}

82
tall/src/main/java/com/ccsens/tall/service/ProRoleService.java

@ -11,6 +11,7 @@ import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.ProjectVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.persist.mapper.ProUserAttentionRoleMapper;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.WebConstant;
import com.ccsens.util.exception.BaseException;
@ -18,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.w3c.dom.ls.LSInput;
import javax.annotation.Resource;
import java.util.ArrayList;
@ -52,6 +54,8 @@ public class ProRoleService implements IProRoleService {
private SysProjectDao sysProjectDao;
@Resource
private TaskDetailDao taskDetailDao;
@Resource
private ProUserAttentionRoleMapper userAttentionRoleMapper;
@Override
public void saveProRole(ProRole proRole) {
@ -77,22 +81,8 @@ public class ProRoleService implements IProRoleService {
List<ProRole> roleList = proMemberService.selectRolesByUserIdAndProjectId(currentUserId, projectId, imitation);
//1.查询二级角色(项目经理+项目成员+mvp)
memberRoleList = getRealMemberRolesByProjectId(projectId);
if (CollectionUtil.isNotEmpty(memberRoleList)) {
// //获取项目的配置(是否展示mvp)
// ProShowExample showExample = new ProShowExample();
// showExample.createCriteria().andProjectIdEqualTo(projectId);
// List<ProShow> showList = proShowDao.selectByExample(showExample);
// if(CollectionUtil.isNotEmpty(showList)){
// if(showList.get(0).getIsShowMvp() == 0){
// for(int i = 0 ; i < memberRoleList.size() ; i++){
// ProjectVo.RoleInfo roleInfo = memberRoleList.get(i);
// if(roleInfo.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.MVP.phase)){
// memberRoleList.remove(i);
// break;
// }
// }
// }
// }
if (CollectionUtil.isNotEmpty(roleList)) {
//用户是否只是关注者
boolean isAttention = false;
@ -118,10 +108,18 @@ public class ProRoleService implements IProRoleService {
break;
} else {
memberRole.setMine(false);
//查找当前用户是否关注此角色
ProUserAttentionRoleExample userAttentionRoleExample = new ProUserAttentionRoleExample();
userAttentionRoleExample.createCriteria().andProjectIdEqualTo(projectId)
.andUserIdEqualTo(currentUserId).andRoleIdEqualTo(memberRole.getId());
if (userAttentionRoleMapper.countByExample(userAttentionRoleExample) != 0) {
memberRole.setIsShow(true);
} else {
memberRole.setIsShow(false);
}
}
}
}
//排除该角色不能看的其他角色
List<Long> excludeIdList = new ArrayList<>();
for (ProRole role : roleList) {
@ -185,6 +183,21 @@ public class ProRoleService implements IProRoleService {
}
}
}
// //查找该项目的子项目,转换成项目角色返回
// SysProjectExample projectExample = new SysProjectExample();
// projectExample.createCriteria().andParentIdEqualTo(projectId).andParentIdNotEqualTo(0L);
// List<SysProject> sysProject = sysProjectDao.selectByExample(projectExample);
// if(CollectionUtil.isNotEmpty(sysProject)){
// sysProject.forEach(project -> {
// ProjectVo.RoleInfo roleInfo = new ProjectVo.RoleInfo();
// roleInfo.setName(project.getName());
//// roleInfo.setIsShow(true);
// roleInfo.setProjectRole((byte) 1);
// roleInfo.setRelevanceProjectId(project.getId());
// roleInfo.setRelevanceProjectName(project.getName());
// memberRoleList.add(roleInfo);
// });
// }
return memberRoleList;
}
@ -209,6 +222,7 @@ public class ProRoleService implements IProRoleService {
/**
* 获取用户在项目中的最高权限
*
* @return 返回权限
*/
@Override
@ -459,9 +473,13 @@ public class ProRoleService implements IProRoleService {
if (ObjectUtil.isNull(project)) {
throw new BaseException(CodeEnum.NOT_PROJECT);
}
long beginTime = projectId.getStartTime() == null ? project.getBeginTime() : projectId.getStartTime();
long endTime = projectId.getEndTime() == null ? project.getEndTime() : projectId.getEndTime();
//1、查找一级任务
ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample();
proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId.getProjectId()).andLevelEqualTo((byte) 1);
proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId.getProjectId())
.andLevelEqualTo((byte) 1).andBeginTimeLessThanOrEqualTo(endTime).andEndTimeGreaterThanOrEqualTo(beginTime);
proTaskDetailExample.setOrderByClause("begin_time");
List<ProTaskDetail> firstTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample);
log.info("查找到一级任务:{}", firstTaskDetailList);
if (CollectionUtil.isNotEmpty(firstTaskDetailList)) {
@ -472,11 +490,12 @@ public class ProRoleService implements IProRoleService {
normalTask.setDetailId(firstTaskDetail.getId());
normalTask.setSequence(sequence);
List<TaskVo.TaskListByProjectId> secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId(),1);
List<TaskVo.TaskListByProjectId> secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId(), 1,beginTime,endTime);
List<TaskVo.NormalTask> secondList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(secondTaskList)) {
secondTaskList.forEach(secondTask -> {
TaskVo.NormalTask second = new TaskVo.NormalTask();
second.setId(taskDetailDao.selectSubTimeByTaskIdAndTime(secondTask.getDetailId(), System.currentTimeMillis()));
BeanUtil.copyProperties(secondTask, second);
second.setParentName(firstTaskDetail.getName());
secondList.add(second);
@ -493,8 +512,29 @@ public class ProRoleService implements IProRoleService {
return proRoleDao.getRoleInfoByRoleId(roleId);
}
// @Override
// public RoleVo.RoleByProjectId queryRoleByProjectId(Long projectId) {
// return null;
// }
@Override
public void updateRoleShow(Long currentUserId, RoleDto.UpdateRoleShow roleShow) {
if (CollectionUtil.isNotEmpty(roleShow.getRoleIdList())) {
//查找该用户在项目下关注的角色
ProUserAttentionRoleExample userAttentionRoleExample = new ProUserAttentionRoleExample();
userAttentionRoleExample.createCriteria().andProjectIdEqualTo(roleShow.getProjectId()).andUserIdEqualTo(currentUserId);
List<ProUserAttentionRole> userAttentionRoleList = userAttentionRoleMapper.selectByExample(userAttentionRoleExample);
if (CollectionUtil.isNotEmpty(userAttentionRoleList)) {
//有则全部删除
userAttentionRoleList.forEach(userAttentionRole -> {
userAttentionRole.setRecStatus((byte) 2);
userAttentionRoleMapper.updateByPrimaryKeySelective(userAttentionRole);
});
}
//然后重新添加关注信息
roleShow.getRoleIdList().forEach(roleId -> {
ProUserAttentionRole userAttentionRole = new ProUserAttentionRole();
userAttentionRole.setId(snowflake.nextId());
userAttentionRole.setProjectId(roleShow.getProjectId());
userAttentionRole.setUserId(currentUserId);
userAttentionRole.setRoleId(roleId);
userAttentionRoleMapper.insertSelective(userAttentionRole);
});
}
}
}

34
tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java

@ -5,19 +5,23 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.ccsens.cloudutil.feign.MtFeignClient;
import com.ccsens.tall.bean.dto.ProjectDto;
import com.ccsens.tall.bean.dto.TaskDto;
import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.MemberVo;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.ProjectVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.persist.dao.ProTaskShowDao;
import com.ccsens.tall.persist.mapper.ProPluginConfigMapper;
import com.ccsens.tall.util.TallConstant;
import com.ccsens.tall.util.TaskUtil;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.DateUtil;
import com.ccsens.util.JacksonUtil;
import com.ccsens.util.WebConstant;
import com.ccsens.util.cron.CronConstant;
import com.ccsens.util.cron.NatureToDate;
@ -71,7 +75,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
@Resource
private MtFeignClient mtFeignClient;
@Resource
private ProPluginConfigMapper proPluginConfigMapper;
private ProPluginConfigDao pluginConfigDao;
@Resource
private IRobotService robotService;
@Resource
@ -80,6 +84,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
private TaskDeliverDao taskDeliverDao;
@Resource
private ProMemberRoleDao proMemberRoleDao;
@Resource
private TaskPluginService taskPluginService;
@Override
public void saveTaskDetail(ProTaskDetail taskDetail) {
@ -160,7 +166,9 @@ public class ProTaskDetailService implements IProTaskDetailService {
return proTaskInfo;
}
ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample();
proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId).andLevelEqualTo((byte) 1);
proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId).andLevelEqualTo((byte) 1)
.andLevelEqualTo((byte) 1).andBeginTimeLessThanOrEqualTo(endTime).andEndTimeGreaterThanOrEqualTo(startTime);
proTaskDetailExample.setOrderByClause("begin_time");
List<ProTaskDetail> firstTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample);
if (CollectionUtil.isNotEmpty(firstTaskDetailList)) {
int sequence = 1;
@ -173,7 +181,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
// 查询任务名对应的配置
ProPluginConfigExample configExample = new ProPluginConfigExample();
configExample.createCriteria().andTaskIdEqualTo(firstTaskDetail.getId()).andPlaceLocationEqualTo((byte) 0);
List<ProPluginConfig> proPluginConfigs = proPluginConfigMapper.selectByExample(configExample);
List<ProPluginConfig> proPluginConfigs = pluginConfigDao.selectByExample(configExample);
if (CollectionUtil.isNotEmpty(proPluginConfigs)) {
ProPluginConfig config = proPluginConfigs.get(0);
normalTask.setImportParam(config.getImportParam());
@ -466,7 +474,14 @@ public class ProTaskDetailService implements IProTaskDetailService {
plugin.setShowType(pluginShowType[i]);
//查找插件的配置信息
ProPluginConfig proPluginConfig = sysPluginDao.getPluginConfigByTaskPluginId(pluginIds[i], normalTask.getDetailId());
if (ObjectUtil.isNotNull(proPluginConfig)) {
//如果是“个人任务汇报”插件,特殊查询
if(pluginNames[i].equalsIgnoreCase(TallConstant.PERSONAL_TASK_REPORT) && StrUtil.isEmpty(proPluginConfig.getImportParam())){
PluginVo.PersonalTaskReport personalTaskReport = taskPluginService.getPersonalTaskReport(normalTask.getProjectId());
proPluginConfig.setImportParam(JacksonUtil.beanToJson(personalTaskReport));
// pluginConfigDao.updateByPrimaryKeySelective(proPluginConfig);
}
plugin.setWebPath(proPluginConfig.getWebPath());
plugin.setRoutineLocation(proPluginConfig.getRoutineLocation());
plugin.setImportParam(proPluginConfig.getImportParam());
@ -479,6 +494,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
}
/**
* 点击MVP查看交付物
*/
@ -552,16 +568,22 @@ public class ProTaskDetailService implements IProTaskDetailService {
*/
@Override
public TaskVo.NormalTask getTaskInfoByTaskId(Long currentUserId, Long projectId, Long taskId, Integer imitation) throws Exception {
TaskVo.NormalTask taskDetail;
Long taskSubTimeId = null;
ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(taskId);
if (ObjectUtil.isNotNull(subTime)) {
taskId = subTime.getTaskDetailId();
taskSubTimeId = subTime.getId();
}
TaskVo.NormalTask taskDetail;
ProTaskDetail task = taskDetailDao.selectByPrimaryKey(taskId);
if (ObjectUtil.isNull(task)) {
throw new BaseException(CodeEnum.NOT_TASK);
}
taskDetail = taskDetailDao.selectTaskByTaskId(null, taskId, task.getExecutorRole());
if(ObjectUtil.isNull(taskSubTimeId)){
taskSubTimeId = taskDeliverService.isTaskOrSubTime(taskId);
}
taskDetail = taskDetailDao.selectTaskByTaskId(taskSubTimeId, taskId, task.getExecutorRole());
if (ObjectUtil.isNotNull(taskDetail)) {
//处理查询到的任务的插件
managePlugin(currentUserId, task.getExecutorRole(), taskDetail, imitation);
@ -1468,7 +1490,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
if (CollectionUtil.isNotEmpty(firstTaskDetailList)) {
firstTaskDetailList.forEach(firstTaskDetail -> {
TaskVo.TaskListByProjectId firstTask = taskDetailDao.getTaskById(firstTaskDetail.getId());
List<TaskVo.TaskListByProjectId> secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId(), null);
List<TaskVo.TaskListByProjectId> secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId(), null,null,null);
if (CollectionUtil.isNotEmpty(secondTaskList)) {
secondTaskList.forEach(secondTask -> secondTask.setParentName(firstTaskDetail.getName()));
}

56
tall/src/main/java/com/ccsens/tall/service/ProjectService.java

@ -548,10 +548,31 @@ public class ProjectService implements IProjectService {
if (power > 1) {
//删除项目下的所有信息
deleteProjectById(projectId);
//将此项目的所有子项目解绑
SysProjectExample projectExample = new SysProjectExample();
projectExample.createCriteria().andParentIdEqualTo(projectId);
List<SysProject> sysProjectList = sysProjectDao.selectByExample(projectExample);
if(CollectionUtil.isNotEmpty(sysProjectList)){
sysProjectList.forEach(sysProject -> {
sysProject.setParentId(0L);
sysProjectDao.updateByPrimaryKeySelective(sysProject);
});
}
//将此项目从父项目的角色中删除
ProRoleExample proRoleExample = new ProRoleExample();
proRoleExample.createCriteria().andProjectIdEqualTo(project.getParentId()).andRelevanceProjectIdEqualTo(project.getId());
List<ProRole> roleList = proRoleDao.selectByExample(proRoleExample);
if(CollectionUtil.isNotEmpty(roleList)){
roleList.forEach(role -> {
role.setRecStatus((byte) 2);
proRoleDao.updateByPrimaryKeySelective(role);
});
}
//修改项目状态
project.setRecStatus(WebConstant.REC_STATUS.Deleted.value);
sysProjectDao.updateByPrimaryKeySelective(project);
} else {
throw new BaseException(CodeEnum.NOT_POWER);
}
@ -871,8 +892,9 @@ public class ProjectService implements IProjectService {
if (power > 1) {
if (StrUtil.isNotEmpty(projectInfoDto.getName())) {
SysProjectExample projectExample = new SysProjectExample();
projectExample.createCriteria().andNameEqualTo(projectInfoDto.getName());
projectExample.createCriteria().andNameEqualTo(projectInfoDto.getName()).andIdNotEqualTo(project.getId()).andCreatorIdEqualTo(currentUserId);
List<SysProject> projectList = sysProjectDao.selectByExample(projectExample);
log.info("重名的项目:{}",projectList);
if (CollectionUtil.isNotEmpty(projectList)) {
throw new BaseException(CodeEnum.REPEAT_PROJECT_NAME);
} else {
@ -895,6 +917,8 @@ public class ProjectService implements IProjectService {
}
if(ObjectUtil.isNotNull(projectInfoDto.getParentId())){
project.setParentId(projectInfoDto.getParentId());
//将此项目添加为父项目的虚拟项目角色
saveProjectVirtualRole(project,projectInfoDto.getParentId());
}
if(ObjectUtil.isNotNull(projectInfoDto.getHomePageShow())){
project.setHomePageShow(projectInfoDto.getHomePageShow());
@ -912,6 +936,36 @@ public class ProjectService implements IProjectService {
}
return getProjectInfoById(currentUserId, project.getId(),token);
}
/**
* 将项目加到父项目的项目角色中
*/
private void saveProjectVirtualRole(SysProject thisProject,Long projectParentId){
//获取项目下的“普通成员”一级角色的id
Long parentId;
ProRoleExample proRoleExample = new ProRoleExample();
proRoleExample.createCriteria().andProjectIdEqualTo(projectParentId).andNameEqualTo(WebConstant.ROLE_NAME.ProjectVirtualRole.value);
List<ProRole> memberRoleList = proRoleDao.selectByExample(proRoleExample);
if(CollectionUtil.isNotEmpty(memberRoleList)){
parentId = memberRoleList.get(0).getId();
}else {
//添加一个角色项目的一级角色
ProRole firstRole = new ProRole();
firstRole.setId(snowflake.nextId());
firstRole.setProjectId(projectParentId);
firstRole.setName(WebConstant.ROLE_NAME.ProjectVirtualRole.value);
firstRole.setDescription(WebConstant.ROLE_NAME.ProjectVirtualRole.phase);
proRoleDao.insertSelective(firstRole);
parentId = firstRole.getId();
}
//添加角色
ProRole proRole = new ProRole();
proRole.setId(snowflake.nextId());
proRole.setName(thisProject.getName());
proRole.setParentId(parentId);
proRole.setProjectId(projectParentId);
proRole.setRelevanceProjectId(thisProject.getId());
proRoleDao.insertSelective(proRole);
}
/**
* 根据标签查找项目

19
tall/src/main/java/com/ccsens/tall/service/SysPluginService.java

@ -1,7 +1,9 @@
package com.ccsens.tall.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.ObjectUtil;
import com.ccsens.tall.bean.dto.PluginDto;
import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.persist.dao.*;
@ -12,6 +14,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.ContextLoaderListener;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@ -29,6 +32,22 @@ public class SysPluginService implements ISysPluginService{
private ProPluginSigninDao pluginSigninDao;
@Autowired
private SigninFieldDao signinFieldDao;
@Resource
private Snowflake snowflake;
/**
* 添加插件
* @param saveSysPlugin
*/
@Override
public void saveSysPlugin(PluginDto.SaveSysPlugin saveSysPlugin) {
SysPlugin sysPlugin = new SysPlugin();
sysPlugin.setId(snowflake.nextId());
sysPlugin.setName(saveSysPlugin.getName());
sysPlugin.setDescription(saveSysPlugin.getDescription());
sysPlugin.setShowType(saveSysPlugin.getShowType());
sysPluginDao.insertSelective(sysPlugin);
}
@Override
public List<PluginVo.PluginInfo> getPluginAll() {

70
tall/src/main/java/com/ccsens/tall/service/TaskPluginService.java

@ -19,7 +19,6 @@ import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.eclipse.jetty.util.log.Log;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -51,6 +50,8 @@ public class TaskPluginService implements ITaskPluginService{
@Resource
private ProRoleDao roleDao;
@Resource
private ProMemberDao memberDao;
@Resource
private IProMemberService proMemberService;
@Resource
private Snowflake snowflake;
@ -124,7 +125,6 @@ public class TaskPluginService implements ITaskPluginService{
return pluginList;
}
/**
* 添加评论
* @param addCommentPlugin 评论信息
@ -350,28 +350,6 @@ public class TaskPluginService implements ITaskPluginService{
}
});
}
// SysProject sysProject = sysProjectDao.selectByPrimaryKey(projectId);
// if(ObjectUtil.isNull(sysProject)){
// throw new BaseException(CodeEnum.NOT_PROJECT);
// }
// //获取本周和上周的时间
// long thisWeekStartTime = DateUtil.beginOfWeek(new Date()).getTime();
// long thisWeekEndTime = DateUtil.endOfWeek(new Date()).getTime();
// long lastWeekStartTime = DateUtil.beginOfWeek(new Date(thisWeekStartTime - 1)).getTime();
// long lastWeekEndTime = DateUtil.endOfWeek(new Date(thisWeekStartTime - 1)).getTime();
// //查找上周任务
// List<TaskVo.TaskMinutesWps> lastWeekTask = taskSubTimeDao.queryMinutesTaskByTime(projectId,lastWeekStartTime,lastWeekEndTime);
// //查找本周任务
// List<TaskVo.TaskMinutesWps> thisWeekTask = taskSubTimeDao.queryMinutesTaskByTime(projectId,thisWeekStartTime,thisWeekEndTime);
// //生成excel写入的数据
// List<List<PoiUtil.PoiUtilCell>> minutes = writeMinutes(lastWeekTask,thisWeekTask,sysProject.getName());
//写入WBS
// ResourceLoader resourceLoader = new DefaultResourceLoader();
// InputStream is = resourceLoader.getResource("classpath:template/regularMeetingTemplate.xlsx").getInputStream();
// XSSFWorkbook wb = new XSSFWorkbook(is);
// PoiUtil.exportWB("会议记录", minutes, wb);
// PoiUtil.setImg(wb,"会议记录",logo,0,1,0,1);
//生成文件
String name = "会议记录"+DateUtil.today() + ".xlsx";
@ -738,9 +716,11 @@ public class TaskPluginService implements ITaskPluginService{
/**
* 修改插件配置
* @param updatePluginConfig 插件配置
* @return
*/
@Override
public void updatePluginConfig(PluginDto.UpdatePluginConfig updatePluginConfig) {
public TaskVo.PluginVo updatePluginConfig(PluginDto.UpdatePluginConfig updatePluginConfig) {
TaskVo.PluginVo pluginVo = new TaskVo.PluginVo();
//获取任务详情id
Long taskDetailId = updatePluginConfig.getTaskId();
ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(updatePluginConfig.getTaskId());
@ -752,6 +732,13 @@ public class TaskPluginService implements ITaskPluginService{
ProTaskPlugin taskPlugin = taskPluginDao.selectByPrimaryKey(updatePluginConfig.getTaskPluginId());
if(ObjectUtil.isNotNull(taskPlugin)){
sysPluginId = taskPlugin.getPluginId();
SysPlugin sysPlugin = sysPluginDao.selectByPrimaryKey(sysPluginId);
if(ObjectUtil.isNotNull(sysPlugin)){
pluginVo.setId(sysPlugin.getId().toString());
pluginVo.setName(sysPlugin.getName());
pluginVo.setDescription(sysPlugin.getDescription());
pluginVo.setShowType(sysPlugin.getShowType().toString());
}
}
//查找原来的插件配置
ProPluginConfigExample proPluginConfigExample = new ProPluginConfigExample();
@ -775,6 +762,9 @@ public class TaskPluginService implements ITaskPluginService{
}
proPluginConfigDao.updateByPrimaryKeySelective(pluginConfig);
}
pluginVo.setWebPath(pluginConfig.getWebPath());
pluginVo.setImportParam(pluginConfig.getImportParam());
pluginVo.setRoutineLocation(pluginConfig.getRoutineLocation());
} else {
//没有则添加
ProPluginConfig proPluginConfig = new ProPluginConfig();
@ -794,7 +784,37 @@ public class TaskPluginService implements ITaskPluginService{
proPluginConfig.setRoutineLocation(updatePluginConfig.getRoutineLocation());
}
proPluginConfigDao.insertSelective(proPluginConfig);
pluginVo.setWebPath(proPluginConfig.getWebPath());
pluginVo.setImportParam(proPluginConfig.getImportParam());
pluginVo.setRoutineLocation(proPluginConfig.getRoutineLocation());
}
return pluginVo;
}
/**
* 特殊处理插件个人任务汇报插件
* 当没有入参的时候默认查询管理者wbs项目理的所有的成员和项目
*/
@Override
public PluginVo.PersonalTaskReport getPersonalTaskReport(Long projectId){
PluginVo.PersonalTaskReport personalTaskReport = new PluginVo.PersonalTaskReport();
SysProject sysProject = sysProjectDao.selectByPrimaryKey(projectId);
if(ObjectUtil.isNotNull(sysProject) && ObjectUtil.isNotNull(sysProject.getParentId()) && sysProject.getParentId() != 0){
//查找该项目(周会项目)的父项目的成员
List<PluginVo.ReportMember> reportMemberList = memberDao.queryMemberByProjectId(sysProject.getParentId());
if(CollectionUtil.isNotEmpty(reportMemberList)){
personalTaskReport.setMemberList(reportMemberList);
}
//查找父项目下的所有子项目除去当前项目
List<PluginVo.ReportProject> reportProjectList = sysProjectDao.queryProjectByParentIdAndNotOwn(sysProject.getParentId(),sysProject.getId());
if(CollectionUtil.isNotEmpty(reportProjectList)){
personalTaskReport.setProjectList(reportProjectList);
}
}
//添加一个默认话术“本周的第X个工作计划是XXX,重点是XXX”
personalTaskReport.setVerbalTrick("本周的第X个工作计划是XXX,重点是XXX");
return personalTaskReport;
}
}

355
tall/src/main/java/com/ccsens/tall/service/WeekMeetingService.java

@ -0,0 +1,355 @@
package com.ccsens.tall.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.tall.bean.dto.WeekMeetingDto;
import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.persist.dao.*;
import com.ccsens.tall.util.TallConstant;
import com.ccsens.util.JacksonUtil;
import com.ccsens.util.PoiUtil;
import com.ccsens.util.PropUtil;
import com.ccsens.util.WebConstant;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class WeekMeetingService implements IWeekMeetingService{
@Resource
private SysProjectDao sysProjectDao;
@Resource
private TaskSubTimeDao taskSubTimeDao;
@Resource
private ProMemberDao proMemberDao;
@Resource
private SysDomainDao sysDomainDao;
@Resource
private SysPluginDao sysPluginDao;
@Resource
private ProPluginConfigDao proPluginConfigDao;
@Resource
private ITaskPluginService taskPluginService;
/**
* 查找周会要用到的项目
* @param projectId 周会项目id
* @param userId userId
* @return 返回项目id和名字
*/
@Override
public List<PluginVo.ReportProject> queryWeekUserProject(Long projectId, Long userId) {
SysProject sysProject = sysProjectDao.selectByPrimaryKey(projectId);
List<PluginVo.ReportProject> reportProjectList = null;
if(ObjectUtil.isNotNull(sysProject)){
reportProjectList = sysProjectDao.queryProjectByParentIdAndNotOwn(sysProject.getParentId(),sysProject.getId());
}
//查找父项目下的所有子项目除去当前项目
return reportProjectList;
}
/**
* 查找项目本周任务
* @param projectId 项目id
* @return 返回项目的本周任务
*/
@Override
public List<TaskVo.TaskMinutesWps> queryWeekTaskByProject(Long projectId) {
long thisWeekStartTime = DateUtil.beginOfWeek(new Date()).getTime();
long thisWeekEndTime = DateUtil.endOfWeek(new Date()).getTime();
return taskSubTimeDao.queryMinutesTaskByTime(projectId,thisWeekStartTime,thisWeekEndTime);
}
/**
* 查找个人本周任务
* @param param 成员id和项目id
* @return 返回当前成员在这些项目中本周的任务
*/
@Override
public List<TaskVo.TaskMinutesWps> queryWeekTaskByMemberAndProject(WeekMeetingDto.WeekTaskByMemberAndProject param) throws IOException {
List<TaskVo.TaskMinutesWps> taskList = new ArrayList<>();
long thisWeekStartTime = DateUtil.beginOfWeek(new Date()).getTime();
long thisWeekEndTime = DateUtil.endOfWeek(new Date()).getTime();
ProMember member = proMemberDao.selectByPrimaryKey(param.getMemberId());
if(ObjectUtil.isNotNull(member) && ObjectUtil.isNotNull(member.getUserId()) && member.getUserId() != 0){
//查找关联的项目(通过插件的入参查找)
PluginVo.PersonalTaskReport taskReportByTaskId = getTaskReportByTaskId(param.getTaskId(), param.getProjectId());
//查找每个项目
if(CollectionUtil.isNotEmpty(taskReportByTaskId.getProjectList())){
taskReportByTaskId.getProjectList().forEach(project ->{
List<TaskVo.TaskMinutesWps> taskMinutesWpsList = taskSubTimeDao.queryWeekTaskByMemberAndProject(project.getProjectId(),member.getUserId(),thisWeekStartTime,thisWeekEndTime);
if(CollectionUtil.isNotEmpty(taskMinutesWpsList)){
taskList.addAll(taskMinutesWpsList);
}
});
}
}
return taskList;
}
@Override
public String getCcMinutes(Long userId, WeekMeetingDto.WeekMeetingMinutes param) throws IOException {
//根据域名查找公司logo
String logo = "/home/staticrec/logo.png";
if(StrUtil.isNotEmpty(param.getDomainName())) {
SysDomainExample domainExample = new SysDomainExample();
domainExample.createCriteria().andDomainNameEqualTo(param.getDomainName());
List<SysDomain> sysDomainList = sysDomainDao.selectByExample(domainExample);
if (CollectionUtil.isNotEmpty(sysDomainList)) {
logo = sysDomainList.get(0).getLogoPath();
}
}
log.info("获取公司logo:{}",logo);
//获取本周的开始和结束时间
long thisWeekStartTime = DateUtil.beginOfWeek(new Date()).getTime();
long thisWeekEndTime = DateUtil.endOfWeek(new Date()).getTime();
//生成一个excel文件
XSSFWorkbook workbook = new XSSFWorkbook();
//获取周会用到的项目
List<PluginVo.ReportProject> projectList = queryWeekUserProject(param.getProjectId(), userId);
log.info("导出模板-获取周会用到的项目:{}",projectList);
//生成第一个sheet(项目汇报)
List<List<PoiUtil.PoiUtilCell>> projectMinutes = writeProjectMinutes(projectList,thisWeekStartTime,thisWeekEndTime);
PoiUtil.exportWB("项目汇报", projectMinutes, workbook);
PoiUtil.setImg(workbook,"项目汇报", logo,0,1,0,1);
//通过个人汇报的任务id查找插件的入参(汇报的成员和项目id)
PluginVo.PersonalTaskReport taskReport = getTaskReportByTaskId(param.getTaskId(),param.getProjectId());
if(CollectionUtil.isNotEmpty(taskReport.getMemberList())){
taskReport.getMemberList().forEach(reportMember -> {
//生成每个成员汇报的任务
List<List<PoiUtil.PoiUtilCell>> memberMinutes = writeMemberTaskMinutes(reportMember,taskReport.getProjectList(),thisWeekStartTime,thisWeekEndTime);
PoiUtil.exportWB(reportMember.getMemberName(), memberMinutes, workbook);
});
}
//生成文件
String fileName = "minutes/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".xlsx";
String path = PropUtil.path + fileName;
File tmpFile = new File(path);
if (!tmpFile.getParentFile().exists()) {
tmpFile.getParentFile().mkdirs();
}
OutputStream stream = new FileOutputStream(tmpFile);
workbook.write(stream);
stream.close();
return PropUtil.imgDomain + "/" + fileName;
}
/**
* 生成个人汇报的任务
* @param reportMember
* @param projectList
* @param thisWeekStartTime
* @param thisWeekEndTime
* @return
*/
private List<List<PoiUtil.PoiUtilCell>> writeMemberTaskMinutes(PluginVo.ReportMember reportMember, List<PluginVo.ReportProject> projectList, long thisWeekStartTime, long thisWeekEndTime) {
List<List<PoiUtil.PoiUtilCell>> sheet = new ArrayList<>();
//logo 和标题
List<PoiUtil.PoiUtilCell> headerTitle = new ArrayList<>();
headerTitle.add(new PoiUtil.PoiUtilCell("个人任务汇报-"+reportMember.getMemberName(),7,1));
sheet.add(headerTitle);
//任务表头
List<PoiUtil.PoiUtilCell> projectTitle = new ArrayList<>();
projectTitle.add(new PoiUtil.PoiUtilCell("项目名",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("任务名",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("计划开始时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("计划结束时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("实际开始时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("实际结束时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("负责人",1,1));
sheet.add(projectTitle);
if(CollectionUtil.isNotEmpty(projectList)){
projectList.forEach(project ->{
SysProject sysProject = sysProjectDao.selectByPrimaryKey(project.getProjectId());
if(ObjectUtil.isNotNull(sysProject)){
//查找成员在这个项目内的任务
List<TaskVo.TaskMinutesWps> taskMinutesWpsList = new ArrayList<>();
ProMember member = proMemberDao.selectByPrimaryKey(reportMember.getMemberId());
if(ObjectUtil.isNotNull(member) && ObjectUtil.isNotNull(member.getUserId()) && member.getUserId() != 0) {
taskMinutesWpsList = taskSubTimeDao.queryWeekTaskByMemberAndProject(sysProject.getId(), member.getUserId(), thisWeekStartTime, thisWeekEndTime);
}
if(CollectionUtil.isNotEmpty(taskMinutesWpsList)){
int i = 0;
for (TaskVo.TaskMinutesWps weekTask : taskMinutesWpsList) {
List<PoiUtil.PoiUtilCell> lastWeekValue = new ArrayList<>();
if(i == 0){
lastWeekValue.add(new PoiUtil.PoiUtilCell(project.getProjectName(),1,taskMinutesWpsList.size()));
}else {
lastWeekValue.add(new PoiUtil.PoiUtilCell());
}
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getTaskName()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getBeginTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getEndTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getRealBeginTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getRealEndTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getExecutorRoleName()));
sheet.add(lastWeekValue);
i++;
}
}
}
});
}
return sheet;
}
/**
* 查找个人会报任务里的成员和项目
* @param taskId
* @param projectId
* @return
*/
private PluginVo.PersonalTaskReport getTaskReportByTaskId(Long taskId,Long projectId) throws IOException {
PluginVo.PersonalTaskReport personalTaskReport = new PluginVo.PersonalTaskReport();
//插件入参
String importParam = null;
if(ObjectUtil.isNotNull(taskId)) {
//获取任务详情id
Long taskDetailId = taskId;
ProTaskSubTime proTaskSubTime = taskSubTimeDao.selectByPrimaryKey(taskId);
if (ObjectUtil.isNotNull(proTaskSubTime)) {
taskDetailId = proTaskSubTime.getTaskDetailId();
}
//查找“个人汇报”插件
long pluginId = 0;
SysPluginExample sysPluginExample = new SysPluginExample();
sysPluginExample.createCriteria().andNameEqualTo(TallConstant.PERSONAL_TASK_REPORT);
List<SysPlugin> sysPluginList = sysPluginDao.selectByExample(sysPluginExample);
if (CollectionUtil.isNotEmpty(sysPluginList)) {
pluginId = sysPluginList.get(0).getId();
}
ProPluginConfigExample proPluginConfigExample = new ProPluginConfigExample();
proPluginConfigExample.createCriteria().andTaskIdEqualTo(taskDetailId).andPluginIdEqualTo(pluginId);
List<ProPluginConfig> pluginConfigList = proPluginConfigDao.selectByExample(proPluginConfigExample);
if (CollectionUtil.isNotEmpty(pluginConfigList)) {
importParam = pluginConfigList.get(0).getImportParam();
}
}
if(StrUtil.isNotEmpty(importParam)){
personalTaskReport = JacksonUtil.jsonToBean(importParam,PluginVo.PersonalTaskReport.class);
}else {
taskPluginService.getPersonalTaskReport(projectId);
}
return personalTaskReport;
}
/**
* 生成项目汇报的数据
* @param projectList 项目列表
* @return 返回写入的数据
*/
private List<List<PoiUtil.PoiUtilCell>> writeProjectMinutes(List<PluginVo.ReportProject> projectList,long thisWeekStartTime,long thisWeekEndTime) {
List<List<PoiUtil.PoiUtilCell>> sheet = new ArrayList<>();
//logo 和标题
List<PoiUtil.PoiUtilCell> headerTitle = new ArrayList<>();
headerTitle.add(new PoiUtil.PoiUtilCell("",1,1,1650,18));
headerTitle.add(new PoiUtil.PoiUtilCell("项目汇报",7,1));
sheet.add(headerTitle);
//会议时间和主持人
List<PoiUtil.PoiUtilCell> header1 = new ArrayList<>();
header1.add(new PoiUtil.PoiUtilCell("会议时间"));
header1.add(new PoiUtil.PoiUtilCell("",3,1));
header1.add(new PoiUtil.PoiUtilCell());
header1.add(new PoiUtil.PoiUtilCell());
header1.add(new PoiUtil.PoiUtilCell("主持人"));
header1.add(new PoiUtil.PoiUtilCell("",3,1));
sheet.add(header1);
//参会人员
List<PoiUtil.PoiUtilCell> header2 = new ArrayList<>();
header2.add(new PoiUtil.PoiUtilCell("参会人员",1,1));
header2.add(new PoiUtil.PoiUtilCell("",7,1));
sheet.add(header2);
//主题议题
List<PoiUtil.PoiUtilCell> header3 = new ArrayList<>();
header3.add(new PoiUtil.PoiUtilCell("主题议题",1,1));
header3.add(new PoiUtil.PoiUtilCell("",7,1));
sheet.add(header3);
//再空一行
List<PoiUtil.PoiUtilCell> header4 = new ArrayList<>();
header4.add(new PoiUtil.PoiUtilCell("",8,1));
sheet.add(header4);
// //会议记录内容
// List<PoiUtil.PoiUtilCell> minutesValue = new ArrayList<>();
// minutesValue.add(new PoiUtil.PoiUtilCell("会议记录内容",8,1));
// sheet.add(minutesValue);
//任务表头
List<PoiUtil.PoiUtilCell> projectTitle = new ArrayList<>();
projectTitle.add(new PoiUtil.PoiUtilCell("项目名",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("任务名",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("计划开始时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("计划结束时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("实际开始时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("实际结束时间",1,1));
projectTitle.add(new PoiUtil.PoiUtilCell("负责人",1,1));
sheet.add(projectTitle);
if(CollectionUtil.isNotEmpty(projectList)){
projectList.forEach(project ->{
SysProject sysProject = sysProjectDao.selectByPrimaryKey(project.getProjectId());
if(ObjectUtil.isNotNull(sysProject)){
List<TaskVo.TaskMinutesWps> weekTaskList = taskSubTimeDao.queryMinutesTaskByTime(sysProject.getId(), thisWeekStartTime, thisWeekEndTime);
log.info("查找项目内的本周任务:{}",weekTaskList);
if(CollectionUtil.isNotEmpty(weekTaskList)){
int i = 0;
for (TaskVo.TaskMinutesWps weekTask : weekTaskList) {
List<PoiUtil.PoiUtilCell> lastWeekValue = new ArrayList<>();
if(i == 0){
lastWeekValue.add(new PoiUtil.PoiUtilCell(project.getProjectName(),1,weekTaskList.size()));
}else {
lastWeekValue.add(new PoiUtil.PoiUtilCell());
}
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getTaskName()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getBeginTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getEndTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getRealBeginTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getRealEndTime()));
lastWeekValue.add(new PoiUtil.PoiUtilCell(weekTask.getExecutorRoleName()));
sheet.add(lastWeekValue);
i++;
}
}
}
});
}
//会议记录人和领导签字
List<PoiUtil.PoiUtilCell> end = new ArrayList<>();
end.add(new PoiUtil.PoiUtilCell("会议记录人",1,1));
end.add(new PoiUtil.PoiUtilCell("",3,1));
end.add(new PoiUtil.PoiUtilCell());
end.add(new PoiUtil.PoiUtilCell());
end.add(new PoiUtil.PoiUtilCell("负责人签字",1,1));
end.add(new PoiUtil.PoiUtilCell("",3,1));
sheet.add(end);
//备注留白
List<PoiUtil.PoiUtilCell> remark = new ArrayList<>();
remark.add(new PoiUtil.PoiUtilCell("",8,8));
sheet.add(remark);
return sheet;
}
}

2
tall/src/main/java/com/ccsens/tall/util/TallConstant.java

@ -11,6 +11,8 @@ public class TallConstant {
public static final String UPDATE_NICKNAME = "update_nickname_";
/*** redis key: 查找登陆用户 格式 identifier_login_identifyType 有效期一天*/
public static final String LOGIN = "_login_";
/*** (需要特殊处理的插件)个人任务汇报插件*/
public static final String PERSONAL_TASK_REPORT = "personal_task_report";
/***一天 */
public static final long LOGIN_TIME = 60 * 60 * 24;

12
tall/src/main/java/com/ccsens/tall/web/MemberController.java

@ -79,4 +79,16 @@ public class MemberController {
return JsonResponse.newInstance().ok(attentionInfo);
}
@ApiOperation(value = "查找项目内的所有成员(不包含奖惩干系人)",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/query/all", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<ProjectVo.MemberList> queryMembersByProjectId(HttpServletRequest request,
@ApiParam @Validated @RequestBody ProjectDto.ProjectIdDto projectIdDto) {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
List<ProjectVo.MemberList> membersInfo = proMemberService.queryMembersByProjectId(projectIdDto.getProjectId());
return JsonResponse.newInstance().ok(membersInfo);
}
}

25
tall/src/main/java/com/ccsens/tall/web/PluginController.java

@ -1,7 +1,9 @@
package com.ccsens.tall.web;
import com.ccsens.tall.bean.dto.PluginDto;
import com.ccsens.tall.bean.dto.WeekMeetingDto;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.service.ISysPluginService;
import com.ccsens.tall.service.ITaskPluginService;
import com.ccsens.util.JsonResponse;
@ -9,13 +11,14 @@ import com.ccsens.util.WebConstant;
import com.ccsens.util.annotation.OperateType;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Slf4j
@Api(tags = "插件相关", description = "")
@RestController
@RequestMapping("/plugins")
@ -25,6 +28,18 @@ public class PluginController {
@Autowired
private ISysPluginService sysPluginService;
@ApiOperation(value = "添加插件", notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/save", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse saveSysPlugin(HttpServletRequest request, @ApiParam @Validated @RequestBody PluginDto.SaveSysPlugin saveSysPlugin) throws Exception {
log.info("添加一个插件:{}",saveSysPlugin);
sysPluginService.saveSysPlugin(saveSysPlugin);
return JsonResponse.newInstance().ok();
}
@ApiOperation(value = "查询所有插件", notes = "按照优先级倒序+时间正序排序")
@ApiImplicitParams({
})
@ -187,8 +202,10 @@ public class PluginController {
@ApiImplicitParams({
})
@RequestMapping(value = "/config", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse updatePluginConfig(HttpServletRequest request,@ApiParam @Validated @RequestBody PluginDto.UpdatePluginConfig updatePluginConfig) throws Exception {
taskPluginService.updatePluginConfig(updatePluginConfig);
return JsonResponse.newInstance().ok();
public JsonResponse<TaskVo.PluginVo> updatePluginConfig(HttpServletRequest request, @ApiParam @Validated @RequestBody PluginDto.UpdatePluginConfig updatePluginConfig) throws Exception {
TaskVo.PluginVo pluginVo = taskPluginService.updatePluginConfig(updatePluginConfig);
return JsonResponse.newInstance().ok(pluginVo);
}
}

24
tall/src/main/java/com/ccsens/tall/web/ProjectController.java

@ -111,30 +111,6 @@ public class ProjectController {
return JsonResponse.newInstance().ok(membersByProjects);
}
// @ApiOperation(value = "根据角色id获取日程(任务列表 + 插件列表)",notes = "")
// @ApiImplicitParams({
// @ApiImplicitParam(name = "id", value = "项目Id", required = true, paramType = "path"),
// @ApiImplicitParam(name = "roleId", value = "角色Id", required = true, paramType = "query"),
// @ApiImplicitParam(name = "startTime", value = "开始时间", required = true, paramType = "query"),
// @ApiImplicitParam(name = "endTime", value = "结束时间", required = true, paramType = "query"),
// @ApiImplicitParam(name = "process", value = "完成状态 0全部,1完成,2未完成", required = true, paramType = "query"),
// @ApiImplicitParam(name = "page", value = "页数", required = true, paramType = "query"),
// @ApiImplicitParam(name = "priority", value = "优先级排序 0无 1倒叙(优先级高的在前) 2正序", required = true, paramType = "query")
// })
// @RequestMapping(value = "/{id}/tasks", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
// public JsonResponse<TaskVo.ProTaskInfo> getTasksByRoleId(HttpServletRequest request,
// @PathVariable("id") Long projectId,
// @RequestParam(required = true) Long roleId, Integer page,
// Long startTime, Long endTime, Integer process,Integer priority) throws Exception{
// Integer pageSize = 10;
// page = page == null ? 1 : page;
// process = process == null ? 0 : process;
// priority = priority == null ? 0 :priority;
//
// Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
// Object proTaskInfo = taskDetailService.getTasksByRoleId(currentUserId,projectId,roleId,startTime,endTime,process,page,pageSize,priority);
// return JsonResponse.newInstance().ok(proTaskInfo);
// }
@ApiOperation(value = "根据角色id获取日程(任务列表 + 插件列表)",notes = "")
@ApiImplicitParams({

10
tall/src/main/java/com/ccsens/tall/web/RoleController.java

@ -103,5 +103,15 @@ public class RoleController {
return JsonResponse.newInstance().ok(taskListByProjectIdList);
}
@ApiOperation(value = "修改用户可见角色展示",notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/update/show", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse updateRoleShow(HttpServletRequest request,
@ApiParam @Validated @RequestBody RoleDto.UpdateRoleShow roleShow) throws Exception {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
proRoleService.updateRoleShow(currentUserId,roleShow);
return JsonResponse.newInstance().ok();
}
}

79
tall/src/main/java/com/ccsens/tall/web/WeekMeetingController.java

@ -0,0 +1,79 @@
package com.ccsens.tall.web;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.tall.bean.dto.WeekMeetingDto;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.service.IWeekMeetingService;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
/**
* @author
*/
@Slf4j
@Api(tags = "周会相关" , description = "")
@RestController
@RequestMapping("/weekMeeting")
public class WeekMeetingController {
@Resource
private IWeekMeetingService weekMeetingService;
@MustLogin
@ApiOperation(value = "获取周会用的项目(管理者项目的子项目内的除了周会的所有项目)",notes = "")
@RequestMapping(value = "/project", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<PluginVo.ReportProject>> queryWeekUserProject(@ApiParam @Validated @RequestBody QueryDto<WeekMeetingDto.WeekMeetingId> param) {
log.info("获取周会用的项目:{}", param);
List<PluginVo.ReportProject> projectInfoList = weekMeetingService.queryWeekUserProject(param.getParam().getProjectId(), param.getUserId());
log.info("查询到的项目列表:{}", projectInfoList);
return JsonResponse.newInstance().ok(projectInfoList);
}
@MustLogin
@ApiOperation(value = "查找项目本周的任务",notes = "获取未读消息数")
@RequestMapping(value = "/week/task", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.TaskMinutesWps>> queryWeekTaskByProject(@ApiParam @Validated @RequestBody QueryDto<WeekMeetingDto.WeekMeetingId> param) {
log.info("查找项目本周的任务:{}", param);
//查找本周任务
List<TaskVo.TaskMinutesWps> thisWeekTask = weekMeetingService.queryWeekTaskByProject(param.getParam().getProjectId());
log.info("项目本周的任务:{}", thisWeekTask);
return JsonResponse.newInstance().ok(thisWeekTask);
}
@MustLogin
@ApiOperation(value = "根据成员和项目查找本周任务",notes = "获取未读消息数")
@RequestMapping(value = "/member/task", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.TaskMinutesWps>> queryWeekTaskByMemberAndProject(
@ApiParam @Validated @RequestBody QueryDto<WeekMeetingDto.WeekTaskByMemberAndProject> param) throws IOException {
log.info("根据成员和项目查找本周任务:{}", param);
//查找本周任务
List<TaskVo.TaskMinutesWps> thisWeekTask = weekMeetingService.queryWeekTaskByMemberAndProject(param.getParam());
log.info("根据成员和项目查找本周任务:{}", thisWeekTask);
return JsonResponse.newInstance().ok(thisWeekTask);
}
@MustLogin
@ApiOperation(value = "会议纪要表-传控模板", notes = "")
@RequestMapping(value = "/cc/minutes", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<String> getCcMinutes(@ApiParam @Validated @RequestBody QueryDto<WeekMeetingDto.WeekMeetingMinutes> param) throws IOException {
log.info("生成会议纪要表-传控模板:{}", param);
String path = weekMeetingService.getCcMinutes(param.getUserId(),param.getParam());
log.info("返回会议纪要表-传控模板路径:{}", path);
return JsonResponse.newInstance().ok(path);
}
}

4
tall/src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: dev
include: util-dev,common
active: prod
include: util-prod,common

34
tall/src/main/resources/mapper_dao/ProMemberDao.xml

@ -299,4 +299,38 @@
limit 1
</select>
<select id="queryMemberByProjectId" resultType="com.ccsens.tall.bean.vo.PluginVo$ReportMember">
SELECT
m.id as memberId,
m.nickname as memberName
FROM
t_pro_member m LEFT JOIN t_pro_member_role mr on mr.member_id = m.id
LEFT JOIN t_pro_role r on r.id = mr.role_id
WHERE
(SELECT `name` FROM t_pro_role WHERE id = r.parent_id) != 'MoneyStakeholder'
and
m.project_id = #{projectId}
and
m.rec_status = 0
and
r.rec_status = 0
GROUP BY m.id
</select>
<select id="queryMembersByProjectId" resultType="com.ccsens.tall.bean.vo.ProjectVo$MemberList">
SELECT
m.id as memberId,
m.nickname as memberName
FROM
t_pro_member m
LEFT JOIN t_pro_member_role mr on mr.member_id = m.id
LEFT JOIN t_pro_role r on mr.role_id = r.id
WHERE
m.project_id = #{projectId}
and
(r.`name` != '奖惩干系人' or r.`name` is Null)
and
m.rec_status = 0
GROUP BY m.id
</select>
</mapper>

1
tall/src/main/resources/mapper_dao/SysPluginDao.xml

@ -98,6 +98,7 @@
<select id="getPluginConfigByTaskPluginId" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.po.ProPluginConfig">
SELECT
pc.id,
pc.web_path as webPath,
pc.routine_location as routineLocation,
pc.import_param as importParam

14
tall/src/main/resources/mapper_dao/SysProjectDao.xml

@ -152,6 +152,8 @@
l.user_id = #{userId}
WHERE
a.user_id = #{userId}
and
(p.parent_id = 0 or p.home_page_show = 1)
AND
p.rec_status = 0
and
@ -560,4 +562,16 @@
group by FROM_UNIXTIME(s.begin_time/1000,'%Y-%m-%d')
</if>
</select>
<select id="queryProjectByParentIdAndNotOwn" resultType="com.ccsens.tall.bean.vo.PluginVo$ReportProject">
SELECT
id as projectId,
`name` as projectName
FROM
t_sys_project
WHERE
parent_id = #{parentId}
and
id != #{projectId}
and rec_status = 0
</select>
</mapper>

10
tall/src/main/resources/mapper_dao/TaskDetailDao.xml

@ -105,7 +105,7 @@
p.id IS NULL
)
LEFT JOIN t_sys_plugin sp ON sp.id = p.plugin_id
left join t_pro_plugin_config c on d.id = c.task_id
left join t_pro_plugin_config c on d.id = c.task_id and c.plugin_id = 0
WHERE
d.rec_status = 0
and
@ -190,7 +190,7 @@
p.id IS NULL
)
LEFT JOIN t_sys_plugin sp ON sp.id = p.plugin_id
left join t_pro_plugin_config c on d.id = c.task_id
left join t_pro_plugin_config c on d.id = c.task_id and c.plugin_id = 0
WHERE
d.rec_status = 0
and
@ -562,6 +562,12 @@
LEFT JOIN t_pro_task_deliver d on t.id = d.task_detail_id
WHERE
t.parent_id = #{parentTaskId}
<if test="endTime != null">
AND t.begin_time &lt;= #{endTime}
</if>
<if test="beginTime != null">
AND t.end_time &gt;= #{beginTime}
</if>
<if test="milestone != null">
and t.milestone = #{milestone}
</if>

84
tall/src/main/resources/mapper_dao/TaskSubTimeDao.xml

@ -10,6 +10,10 @@
<result column="endTime" property="endTime" />
<result column="realBeginTime" property="realBeginTime" />
<result column="realEndTime" property="realEndTime" />
<result column="milestone" property="milestone" />
<result column="projectName" property="projectName" />
<result column="projectId" property="projectId" />
<result column="process" property="process" />
<collection property="comment" ofType="com.ccsens.tall.bean.vo.TaskVo$TaskMinutesWps$CommentByMinutes">
<id column="commentId" property="commentId"/>
<result column="userName" property="userName"/>
@ -17,8 +21,9 @@
</collection>
<collection property="deliverList" ofType="com.ccsens.tall.bean.vo.TaskVo$TaskMinutesWps$DeliverByMinutes">
<id column="deliverId" property="deliverId"/>
<id column="deliverName" property="deliverName"/>
<result column="deliverName" property="deliverName"/>
<result column="deliverPath" property="deliverPath"/>
<result column="score" property="score"/>
</collection>
</resultMap>
@ -182,6 +187,7 @@
s.id as taskSubTimeId,
r.`name` as executorRoleName,
d.`name` as taskName,
d.milestone as milestone,
FROM_UNIXTIME(s.begin_time/1000,'%Y-%m-%d %H:%m') as beginTime,
FROM_UNIXTIME(s.end_time/1000,'%Y-%m-%d %H:%m') as endTime,
if(s.real_begin_time = 0,'' ,FROM_UNIXTIME(s.real_begin_time/1000,'%Y-%m-%d %H:%m')) as realBeginTime,
@ -191,7 +197,8 @@
t.commentValue as commentValue,
td.`name` as deliverName,
n.deliverPath as deliverPath,
td.id as deliverId
td.id as deliverId,
s.complated_status as process
FROM
t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d on s.task_detail_id = d.id
LEFT JOIN t_pro_role r on d.executor_role = r.id
@ -216,9 +223,12 @@
SELECT
dl.id as deliverLogPostId,
dl.task_sub_time_id as taskId,
cf.path as deliverPath
cf.path as deliverPath,
AVG(ch.score)
FROM
t_pro_task_deliver_post_log dl LEFT JOIN t_sys_commited_file cf on cf.id = dl.file_id
LEFT JOIN t_pro_task_deliver_post_log_checker ch on ch.deliver_post_log_id = dl.id
GROUP BY dl.id
)n on s.id = n.taskId
WHERE
d.rec_status = 0
@ -230,5 +240,73 @@
s.end_time &gt; #{startTime}
and
d.level != 1
group by d.id
</select>
<select id="queryWeekTaskByMemberAndProject" resultMap="taskMinutesWps">
SELECT
s.id as taskSubTimeId,
r.`name` as executorRoleName,
d.`name` as taskName,
d.milestone as milestone,
FROM_UNIXTIME(s.begin_time/1000,'%Y-%m-%d %H:%m') as beginTime,
FROM_UNIXTIME(s.end_time/1000,'%Y-%m-%d %H:%m') as endTime,
if(s.real_begin_time = 0,'' ,FROM_UNIXTIME(s.real_begin_time/1000,'%Y-%m-%d %H:%m')) as realBeginTime,
if(s.real_end_time = 0,'' ,FROM_UNIXTIME(s.real_end_time/1000,'%Y-%m-%d %H:%m')) as realEndTime,
p.id as projectId,
p.`name` as projectName,
t.commentId as commentId,
t.userName as userName,
t.commentValue as commentValue,
td.`name` as deliverName,
n.deliverPath as deliverPath,
td.id as deliverId,
s.complated_status as process
FROM
t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d on s.task_detail_id = d.id
LEFT JOIN t_sys_project p on d.project_id = p.id
LEFT JOIN t_pro_role r on d.executor_role = r.id
LEFT JOIN t_pro_member_role mr on mr.role_id = r.id
LEFT JOIN t_pro_member m on m.id = mr.member_id
LEFT JOIN t_pro_task_deliver td on d.id = td.task_detail_id
LEFT JOIN
(
SELECT
c.id as commentId,
c.task_sub_time_id as taskId,
c.description as `commentValue`,
if(s.nickname = '',a.identifier,s.nickname) as userName
FROM
t_pro_task_comment c left join t_sys_user s on c.user_id = s.id
left join t_sys_auth a on s.id = a.user_id and a.identify_type = 3
WHERE
c.rec_status = 0
and
a.rec_status = 0
)t on t.taskId = s.id
LEFT JOIN
(
SELECT
dl.id as deliverLogPostId,
dl.task_sub_time_id as taskId,
cf.path as deliverPath,
AVG(ch.score)
FROM
t_pro_task_deliver_post_log dl LEFT JOIN t_sys_commited_file cf on cf.id = dl.file_id
LEFT JOIN t_pro_task_deliver_post_log_checker ch on ch.deliver_post_log_id = dl.id
GROUP BY dl.id
)n on s.id = n.taskId
WHERE
(m.user_id = #{userId} or r.`name` = '全体成员')
AND
d.project_id = #{projectId}
AND
s.begin_time &lt; #{endTime}
AND
s.end_time &gt; #{startTime}
and
d.rec_status = 0
and
d.level != 1
group by d.id
</select>
</mapper>

243
tall/src/main/resources/mapper_raw/ProUserAttentionRoleMapper.xml

@ -0,0 +1,243 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.tall.persist.mapper.ProUserAttentionRoleMapper">
<resultMap id="BaseResultMap" type="com.ccsens.tall.bean.po.ProUserAttentionRole">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="project_id" jdbcType="BIGINT" property="projectId" />
<result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="role_id" jdbcType="BIGINT" property="roleId" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="rec_status" jdbcType="TINYINT" property="recStatus" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
<foreach collection="oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<where>
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
id, project_id, user_id, role_id, created_at, updated_at, rec_status
</sql>
<select id="selectByExample" parameterType="com.ccsens.tall.bean.po.ProUserAttentionRoleExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from t_pro_user_attention_role
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from t_pro_user_attention_role
where id = #{id,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from t_pro_user_attention_role
where id = #{id,jdbcType=BIGINT}
</delete>
<delete id="deleteByExample" parameterType="com.ccsens.tall.bean.po.ProUserAttentionRoleExample">
delete from t_pro_user_attention_role
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="com.ccsens.tall.bean.po.ProUserAttentionRole">
insert into t_pro_user_attention_role (id, project_id, user_id,
role_id, created_at, updated_at,
rec_status)
values (#{id,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT},
#{roleId,jdbcType=BIGINT}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP},
#{recStatus,jdbcType=TINYINT})
</insert>
<insert id="insertSelective" parameterType="com.ccsens.tall.bean.po.ProUserAttentionRole">
insert into t_pro_user_attention_role
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="projectId != null">
project_id,
</if>
<if test="userId != null">
user_id,
</if>
<if test="roleId != null">
role_id,
</if>
<if test="createdAt != null">
created_at,
</if>
<if test="updatedAt != null">
updated_at,
</if>
<if test="recStatus != null">
rec_status,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=BIGINT},
</if>
<if test="projectId != null">
#{projectId,jdbcType=BIGINT},
</if>
<if test="userId != null">
#{userId,jdbcType=BIGINT},
</if>
<if test="roleId != null">
#{roleId,jdbcType=BIGINT},
</if>
<if test="createdAt != null">
#{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
#{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="recStatus != null">
#{recStatus,jdbcType=TINYINT},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.ccsens.tall.bean.po.ProUserAttentionRoleExample" resultType="java.lang.Long">
select count(*) from t_pro_user_attention_role
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
update t_pro_user_attention_role
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=BIGINT},
</if>
<if test="record.projectId != null">
project_id = #{record.projectId,jdbcType=BIGINT},
</if>
<if test="record.userId != null">
user_id = #{record.userId,jdbcType=BIGINT},
</if>
<if test="record.roleId != null">
role_id = #{record.roleId,jdbcType=BIGINT},
</if>
<if test="record.createdAt != null">
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
</if>
<if test="record.updatedAt != null">
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="record.recStatus != null">
rec_status = #{record.recStatus,jdbcType=TINYINT},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map">
update t_pro_user_attention_role
set id = #{record.id,jdbcType=BIGINT},
project_id = #{record.projectId,jdbcType=BIGINT},
user_id = #{record.userId,jdbcType=BIGINT},
role_id = #{record.roleId,jdbcType=BIGINT},
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
rec_status = #{record.recStatus,jdbcType=TINYINT}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="com.ccsens.tall.bean.po.ProUserAttentionRole">
update t_pro_user_attention_role
<set>
<if test="projectId != null">
project_id = #{projectId,jdbcType=BIGINT},
</if>
<if test="userId != null">
user_id = #{userId,jdbcType=BIGINT},
</if>
<if test="roleId != null">
role_id = #{roleId,jdbcType=BIGINT},
</if>
<if test="createdAt != null">
created_at = #{createdAt,jdbcType=TIMESTAMP},
</if>
<if test="updatedAt != null">
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
</if>
<if test="recStatus != null">
rec_status = #{recStatus,jdbcType=TINYINT},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.ccsens.tall.bean.po.ProUserAttentionRole">
update t_pro_user_attention_role
set project_id = #{projectId,jdbcType=BIGINT},
user_id = #{userId,jdbcType=BIGINT},
role_id = #{roleId,jdbcType=BIGINT},
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
rec_status = #{recStatus,jdbcType=TINYINT}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

19
util/src/main/java/com/ccsens/util/PoiUtil.java

@ -168,10 +168,11 @@ public class PoiUtil {
newCell = row.createCell(j);
}
//查找当前单元格的样式
CellStyle style = newCell.getCellStyle();
if(ObjectUtil.isNull(style)){
style = wb.createCellStyle();
}
// CellStyle style = newCell.getCellStyle();
// if(ObjectUtil.isNull(style)){
// style = wb.createCellStyle();
// }
CellStyle style = wb.createCellStyle();
//设置内容
if (!cell.value.equals(WebConstant.CELL_NULL)){
if(cell.num == 1){
@ -623,7 +624,7 @@ public class PoiUtil {
PoiUtilCell poiUtilCella = new PoiUtilCell();
PoiUtilCell poiUtilCellb = new PoiUtilCell();
PoiUtilCell poiUtilCell1 = new PoiUtilCell();
poiUtilCell1.setValue("aaadddfff");
poiUtilCell1.setValue("aaadddfffersdfsdfasftargadfgergsdfhasfgasfgaertagaergafdhsfgjfyk");
List<PoiUtilCell> cells = new ArrayList<>();
cells.add(poiUtilCell);
@ -655,9 +656,15 @@ public class PoiUtil {
// cells5.add(new PoiUtilCell("9", 2, 2));
// cells5.add(new PoiUtilCell("9"));
// list.add(cells5);
String fileName = "zzz/" + cn.hutool.core.date.DateUtil.today() + "/" + System.currentTimeMillis() + ".xlsx";
String path = WebConstant.UPLOAD_PATH_BASE + fileName;
File tmpFile = new File(path);
if (!tmpFile.getParentFile().exists()) {
tmpFile.getParentFile().mkdirs();
}
Workbook wbs = exportWB("Sheet1", list, workbook);
OutputStream stream = new FileOutputStream(new File("F:\\wenjian\\"+System.currentTimeMillis()+".xlsx"));
OutputStream stream = new FileOutputStream(tmpFile);
wbs.write(stream);
stream.close();

4
util/src/main/java/com/ccsens/util/RedisUtil.java

@ -146,7 +146,7 @@ public class RedisUtil {
* 递减
*
* @param key
* @param by 要减少几(小于0)
* @param delta 要减少几(小于0)
* @return
*/
public long decr(String key, long delta) {
@ -496,7 +496,7 @@ public class RedisUtil {
* @param time 时间()
* @return
*/
public boolean lSet(String key, List<Object> value) {
public boolean lSet(String key, List<? extends Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;

Loading…
Cancel
Save