Browse Source

20220125引入sdk

ptos
zy_Java 4 years ago
parent
commit
8b63972298
  1. 6
      pom.xml
  2. 2
      src/main/java/com/ccsens/ptccsens/PtCcsensApplication.java
  3. 15
      src/main/java/com/ccsens/ptccsens/bean/dto/PluginDto.java
  4. 14
      src/main/java/com/ccsens/ptccsens/bean/dto/TaskDto.java
  5. 194
      src/main/java/com/ccsens/ptccsens/bean/po/ProUser.java
  6. 1241
      src/main/java/com/ccsens/ptccsens/bean/po/ProUserExample.java
  7. 22
      src/main/java/com/ccsens/ptccsens/bean/vo/TaskVo.java
  8. 28
      src/main/java/com/ccsens/ptccsens/persist/dao/LabelBusinessDao.java
  9. 25
      src/main/java/com/ccsens/ptccsens/persist/dao/LabelDao.java
  10. 4
      src/main/java/com/ccsens/ptccsens/persist/dao/PluginDao.java
  11. 12
      src/main/java/com/ccsens/ptccsens/persist/dao/ProMemberDao.java
  12. 34
      src/main/java/com/ccsens/ptccsens/persist/dao/ProParentTaskDao.java
  13. 64
      src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleDao.java
  14. 41
      src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleMemberDao.java
  15. 34
      src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleRepulsionDao.java
  16. 51
      src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleTaskDao.java
  17. 71
      src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskDetailDao.java
  18. 40
      src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskPluginDao.java
  19. 43
      src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskSubDao.java
  20. 21
      src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskVersionDao.java
  21. 30
      src/main/java/com/ccsens/ptccsens/persist/dao/ProjectDao.java
  22. 15
      src/main/java/com/ccsens/ptccsens/persist/dao/UserDao.java
  23. 30
      src/main/java/com/ccsens/ptccsens/persist/mapper/ProUserMapper.java
  24. 17
      src/main/java/com/ccsens/ptccsens/service/IImportService.java
  25. 903
      src/main/java/com/ccsens/ptccsens/service/ImportService.java
  26. 587
      src/main/java/com/ccsens/ptccsens/service/TallService.java
  27. 4
      src/main/java/com/ccsens/ptccsens/util/BasicsCodeError.java
  28. 123
      src/main/java/com/ccsens/ptccsens/util/Constant.java
  29. 37
      src/main/resources/mapper_dao/LabelBusinessDao.xml
  30. 49
      src/main/resources/mapper_dao/LabelDao.xml
  31. 20
      src/main/resources/mapper_dao/PluginDao.xml
  32. 10
      src/main/resources/mapper_dao/ProMemberDao.xml
  33. 59
      src/main/resources/mapper_dao/ProParentTaskDao.xml
  34. 103
      src/main/resources/mapper_dao/ProRoleDao.xml
  35. 45
      src/main/resources/mapper_dao/ProRoleMemberDao.xml
  36. 43
      src/main/resources/mapper_dao/ProRoleRepulsionDao.xml
  37. 71
      src/main/resources/mapper_dao/ProRoleTaskDao.xml
  38. 368
      src/main/resources/mapper_dao/ProTaskDetailDao.xml
  39. 67
      src/main/resources/mapper_dao/ProTaskPluginDao.xml
  40. 63
      src/main/resources/mapper_dao/ProTaskSubDao.xml
  41. 23
      src/main/resources/mapper_dao/ProTaskVersionDao.xml
  42. 50
      src/main/resources/mapper_dao/ProjectDao.xml
  43. 16
      src/main/resources/mapper_dao/UserDao.xml
  44. 385
      src/main/resources/mapper_raw/ProUserMapper.xml
  45. 3
      src/main/resources/mbg.xml

6
pom.xml

@ -27,6 +27,12 @@
<groupId>com.ccsens</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--TALL_SDK-->
<dependency>
<artifactId>tallsdk</artifactId>
<groupId>com.ccsensptos</groupId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--公用接口-->
<!--<dependency>
<artifactId>common</artifactId>

2
src/main/java/com/ccsens/ptccsens/PtCcsensApplication.java

@ -21,7 +21,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
@EnableCircuitBreaker
@EnableFeignClients(basePackages = "com.ccsens.cloudutil.feign")
@SpringBootApplication
@ComponentScan(basePackages = "com.ccsens", excludeFilters = { @ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE, value = RibbonConfiguration.class)})
@ComponentScan(basePackages = {"com.ccsens","com.ccsensptos"}, excludeFilters = { @ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE, value = RibbonConfiguration.class)})
public class PtCcsensApplication {
public static void main(String[] args) {

15
src/main/java/com/ccsens/ptccsens/bean/dto/PluginDto.java

@ -0,0 +1,15 @@
package com.ccsens.ptccsens.bean.dto;
import lombok.Data;
@Data
public class PluginDto {
@Data
public static class WbsMember{
//成员id
private Long id;
//userId
private Long userId;
}
}

14
src/main/java/com/ccsens/ptccsens/bean/dto/TaskDto.java

@ -1,13 +1,27 @@
package com.ccsens.ptccsens.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author
*/
@Data
public class TaskDto {
@Data
@ApiModel("查询项目下的任务")
public static class QueryTaskOfProject{
@NotNull(message = "项目id不能为空")
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("项目名称")
private String name;
}
/**
* 导入wbs--插件关联表id
*/

194
src/main/java/com/ccsens/ptccsens/bean/po/ProUser.java

@ -0,0 +1,194 @@
package com.ccsens.ptccsens.bean.po;
import java.io.Serializable;
import java.util.Date;
public class ProUser implements Serializable {
private Long id;
private String name;
private Byte gender;
private String avatarUrl;
private String country;
private String province;
private String city;
private String phone;
private String idCard;
private Byte power;
private String deviceId;
private Byte authType;
private Long operator;
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 String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Byte getGender() {
return gender;
}
public void setGender(Byte gender) {
this.gender = gender;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl == null ? null : avatarUrl.trim();
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country == null ? null : country.trim();
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province == null ? null : province.trim();
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city == null ? null : city.trim();
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone == null ? null : phone.trim();
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard == null ? null : idCard.trim();
}
public Byte getPower() {
return power;
}
public void setPower(Byte power) {
this.power = power;
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId == null ? null : deviceId.trim();
}
public Byte getAuthType() {
return authType;
}
public void setAuthType(Byte authType) {
this.authType = authType;
}
public Long getOperator() {
return operator;
}
public void setOperator(Long operator) {
this.operator = operator;
}
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(", name=").append(name);
sb.append(", gender=").append(gender);
sb.append(", avatarUrl=").append(avatarUrl);
sb.append(", country=").append(country);
sb.append(", province=").append(province);
sb.append(", city=").append(city);
sb.append(", phone=").append(phone);
sb.append(", idCard=").append(idCard);
sb.append(", power=").append(power);
sb.append(", deviceId=").append(deviceId);
sb.append(", authType=").append(authType);
sb.append(", operator=").append(operator);
sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt);
sb.append(", recStatus=").append(recStatus);
sb.append("]");
return sb.toString();
}
}

1241
src/main/java/com/ccsens/ptccsens/bean/po/ProUserExample.java

File diff suppressed because it is too large

22
src/main/java/com/ccsens/ptccsens/bean/vo/TaskVo.java

@ -0,0 +1,22 @@
package com.ccsens.ptccsens.bean.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author
*/
@Data
public class TaskVo {
@Data
@ApiModel("项目下的任务")
public static class TaskOfProject {
@ApiModelProperty("任务详情id")
private Long detailId;
@ApiModelProperty("任务名称")
private String name;
}
}

28
src/main/java/com/ccsens/ptccsens/persist/dao/LabelBusinessDao.java

@ -0,0 +1,28 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.po.LabelBusiness;
import com.ccsens.ptccsens.persist.mapper.LabelBusinessMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author AUSU
*/
@Repository
public interface LabelBusinessDao extends LabelBusinessMapper {
/**
* 根据业务id集合查询任务标签表
* @param businessIdList 业务id集合
* @return 任务标签集合
*/
List<LabelBusiness> findBusinessLabelByBid(@Param("businessIdList") List<Long> businessIdList);
/**
* 保存全部任务标签关系
* @param businessLabelList 任务标签关系列表
*/
void insertAllBusinessLabel(@Param("businessLabelList") List<LabelBusiness> businessLabelList);
}

25
src/main/java/com/ccsens/ptccsens/persist/dao/LabelDao.java

@ -0,0 +1,25 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.persist.mapper.LabelMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface LabelDao extends LabelMapper {
String queryIsPm(Long labelId);
Long getLabelByTypeAndLevel(@Param("type") int type, @Param("level") int level);
/**
* 根据业务id和类型删除关联标签信息
* @param businessId 业务id
* @param type 业务类型
*/
void delByBusinessIdAndType(@Param("businessId") Long businessId, @Param("type") byte type);
Long getLabelByName(@Param("type") int type, @Param("sysRole") String sysRole);
}

4
src/main/java/com/ccsens/ptccsens/persist/dao/PluginDao.java

@ -17,4 +17,8 @@ public interface PluginDao extends ProTaskPluginMapper {
* @return 0无 1有
*/
Integer queryFinancePlugin(@Param("taskDetailId") Long taskDetailId,@Param("code") String code);
Long getPluginIdByName(@Param("pluginName") String pluginName);
void updateParamById(@Param("param") String param, @Param("taskPluginId") Long taskPluginId);
}

12
src/main/java/com/ccsens/ptccsens/persist/dao/ProMemberDao.java

@ -1,8 +1,11 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.persist.mapper.ProMemberMapper;
import org.apache.ibatis.annotations.Param;
public interface ProMemberDao {
import java.util.List;
public interface ProMemberDao extends ProMemberMapper {
/**
* 根据项目ID和userId查找memberId
* @param projectId 项目ID
@ -10,4 +13,11 @@ public interface ProMemberDao {
* @return memberId
*/
Long findUserOfMemberId(@Param("projectId") Long projectId,@Param("userId")Long userId);
/**
* 查询项目下的所有成员
* @param projectId 项目id
* @return 列表
*/
List<Long> queryMembersOfProject(@Param("projectId") Long projectId);
}

34
src/main/java/com/ccsens/ptccsens/persist/dao/ProParentTaskDao.java

@ -0,0 +1,34 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.po.ProParentTask;
import com.ccsens.ptccsens.persist.mapper.ProParentTaskMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author AUSU
*/
public interface ProParentTaskDao extends ProParentTaskMapper {
// /**
// * 根据项目id查找一级任务列表
// * @param oldProjectId 项目id
// * @return 一级任务列表
// */
// List<TallTaskVo.TaskDetail> findTaskByParentId(@Param("oldProjectId") Long oldProjectId);
/**
* 保存所有任务关系
* @param newParentTaskList 任务关系列表
*/
void insertAllParentTask(@Param("newParentTaskList") List<ProParentTask> newParentTaskList);
/**
* 根据项目id查询所有一二级任务详情id
* @param projectId 项目id
* @return 一二级任务详情id列表
*/
List<Long> queryAllTaskIdByProjectId(@Param("projectId") Long projectId);
}

64
src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleDao.java

@ -0,0 +1,64 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.po.ProRole;
import com.ccsens.ptccsens.persist.mapper.ProRoleMapper;
import com.ccsensptos.tallsdk.bean.vo.TallRoleVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author AUSU
*/
@Repository
public interface ProRoleDao extends ProRoleMapper {
/**
* 根据角色id查找项目id
* @param roleId 角色id
* @return 项目id
*/
Long findRoleOfProjectId(@Param("roleId") Long roleId);
/**
* 根据userId查询项目下所属的角色
* @param projectId
* @param userId
* @return
*/
List<ProRole> queryRoleByUserId(@Param("projectId") Long projectId, @Param("userId") Long userId);
/**
* 不是关注者查询可见角色
* @param projectId
* @param userRoleList
* @return
*/
List<TallRoleVo.RoleInfo> notAttentionQueryRole(@Param("projectId") Long projectId, @Param("userRoleList") List<ProRole> userRoleList);
/**
* 是关注者查询可见角色
* @param projectId
* @return
*/
List<TallRoleVo.RoleInfo> attentionQueryRole(@Param("projectId") Long projectId);
/**
* 查询用户配置的角色栏信息
* @param projectId
* @param userId
* @return
*/
List<Long> queryShowByUserAndProject(@Param("projectId") Long projectId, @Param("userId") Long userId);
/**
* 查询项目下的所有角色
* @param projectId 项目id
* @return 角色id列表
*/
List<Long> queryRoleListOfProject(@Param("projectId") Long projectId);
}

41
src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleMemberDao.java

@ -0,0 +1,41 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.persist.mapper.ProRoleMemberMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author AUSU
*/
@Repository
public interface ProRoleMemberDao extends ProRoleMemberMapper {
/**
* 查找成员所属的所有角色
* @param memberId 成员id
* @return 所有所属角色id
*/
List<Long> findMemberOfRoleIds(@Param("memberId") Long memberId);
// /**
// * 根据成员id和角色id查询
// * @param userOfMemberId 成员id
// * @param roleId 角色id
// * @return 角色成员信息
// */
// ProRoleMember queryByRoleAndMember(@Param("memberId") Long userOfMemberId, @Param("roleId") Long roleId);
//
// /**
// * 删除该角色和成员的关联信息
// * @param roleId 角色id
// */
// void delByRoleId(@Param("roleId") Long roleId);
//
// /**
// * 删除该成员和角色的关联信息
// * @param memberId 成员id
// */
// void delByMemberId(@Param("memberId") Long memberId);
}

34
src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleRepulsionDao.java

@ -0,0 +1,34 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.persist.mapper.ProRoleRepulsionMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author AUSU
*/
@Repository
public interface ProRoleRepulsionDao extends ProRoleRepulsionMapper {
/**
* 查看该角色排斥的所有角色
* @param roleId 角色id
* @return 排斥的角色id
*/
List<Long> findRepulsionByRoleId(@Param("roleId") Long roleId);
// /**
// * 查询角色的不可见列表
// * @param oldRoleList 角色列表
// * @return 不可见列表
// */
// List<ProRoleRepulsion> findRepulsionByRoleIdList(@Param("oldRoleList") List<ProRole> oldRoleList);
//
// /**
// * 批量插入角色的不可见列表
// * @param newRoleRepulsionList 不可见列表
// */
// void insertRoleRepulsionList(@Param("newRoleRepulsionList") List<ProRoleRepulsion> newRoleRepulsionList);
}

51
src/main/java/com/ccsens/ptccsens/persist/dao/ProRoleTaskDao.java

@ -0,0 +1,51 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.persist.mapper.ProRoleTaskMapper;
import com.ccsensptos.tallsdk.bean.vo.TallTaskVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author AUSU
*/
@Repository
public interface ProRoleTaskDao extends ProRoleTaskMapper {
// /**
// * 根据角色id查找所有角色任务关系
// * @param oldRoleIdList 角色id集合
// * @return 角色任务关系列表
// */
// List<ProRoleTask> findRoleTaskByRoleId(@Param("roleIds") List<Long> oldRoleIdList);
//
// /**
// * 保存所有的角色任务关系
// * @param newRoleTaskList 角色任务关系列表
// */
// void insertAllRoleTask(@Param("roleTaskList") List<ProRoleTask> newRoleTaskList);
//
// /**
// * 查询我负责的任务
// * @param taskDetailId 任务详情id
// * @param userOfRoles 角色id列表
// * @return 角色任务id
// */
// List<Long> isMyTask(@Param("taskDetailId") Long taskDetailId, @Param("roleIdList") List<Long> userOfRoles);
/**
* 根据任务id查找任务下的检查人
* @param detailId 任务详情id
* @return 检查人列表
*/
List<TallTaskVo.CheckerOfTask> queryCheckerOfTask(@Param("detailId") Long detailId);
// /**
// * 删除任务和角色的关联关系
// * @param detailId 任务id
// * @param roleDuty 类型(0负责人 1检查人)
// */
// void delByTaskDetailIdAndType(@Param("detailId") Long detailId, @Param("roleDuty") byte roleDuty);
}

71
src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskDetailDao.java

@ -1,12 +1,81 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.dto.TaskDto;
import com.ccsens.ptccsens.bean.po.ProTaskSub;
import com.ccsens.ptccsens.bean.vo.TaskVo;
import com.ccsens.ptccsens.persist.mapper.ProTaskDetailMapper;
import com.ccsensptos.tallsdk.bean.vo.TallTaskVo;
import org.apache.ibatis.annotations.Param;
public interface ProTaskDetailDao {
import java.util.List;
public interface ProTaskDetailDao extends ProTaskDetailMapper {
/**
* 根据任务详情id查找项目id
* @param taskDetailId 任务ID
* @return 项目ID
*/
Long projectIdByTaskDetailId(@Param("taskDetailId") Long taskDetailId);
/**
* 根据角色查找永久日常任务
* @param roleIdList 角色id
* @return 永久日常任务列表
*/
List<TallTaskVo.QueryTask> queryPermanentGlobalTask(@Param("roleIdList") List<Long> roleIdList);
/**
* 根据角色和时间节点查找日常任务
* @param roleIdList 角色id集合
* @param timeNode 时间节点
* @param timeUnit 时间颗粒度
* @return 日常任务列表
*/
List<TallTaskVo.QueryTask> queryGlobalTask(@Param("roleIdList") List<Long> roleIdList, @Param("timeNode") Long timeNode, @Param("timeUnit") int timeUnit);
/**
* 根据时间和角色查找定期任务
* @param roleIdList 角色id集合
* @param timeUnit 时间单位
* @param timeNode 时间节点
* @param queryType 查询类型
* @param query 查询颗粒度数量
* @param timeFormat 时间格式
* @return 定期任务列表
*/
List<TallTaskVo.QueryTask> queryRegularTask(@Param("roleIdList") List<Long> roleIdList, @Param("timeUnit") int timeUnit, @Param("timeNode") Long timeNode
, @Param("queryType") int queryType, @Param("query") String query, @Param("timeFormat") String timeFormat);
/**
* 继续向上/向下查找
* @param roleIdList 角色id集合
* @param timeUnit 时间单位
* @param timeNode 时间节点
* @param queryType 查询类型
* @param query 查询颗粒度数量
* @param timeFormat 时间格式
* @return 定期任务列表
*/
List<TallTaskVo.QueryTask> continueQueryTask(@Param("roleIdList") List<Long> roleIdList, @Param("timeUnit") int timeUnit, @Param("timeNode") Long timeNode
, @Param("queryType") int queryType, @Param("query") String query, @Param("timeFormat") String timeFormat);
void insertSelectiveList(@Param("proTaskSubList") List<ProTaskSub> proTaskSubList);
/**
* 根据任务名和项目id查找当前时间下的任务的分解id
* @param taskName 任务名
* @param projectId 项目id
* @param now 当前时间
* @return 返回任务分解id
*/
Long getNowTask(@Param("taskName") String taskName, @Param("projectId") Long projectId, @Param("now") long now);
/**
* 查询项目下的所有任务
* @param param 项目id 任务名称
* @return 任务列表
*/
List<TaskVo.TaskOfProject> queryTaskOfProject(TaskDto.QueryTaskOfProject param);
}

40
src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskPluginDao.java

@ -0,0 +1,40 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.persist.mapper.ProTaskPluginMapper;
import com.ccsensptos.tallsdk.bean.vo.TallTaskVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author AUSU
*/
@Repository
public interface ProTaskPluginDao extends ProTaskPluginMapper {
/**
* 根据任务id查询已配置的插件
* @param detailTaskId 任务详情id
* @return 插件列表
*/
List<TallTaskVo.TaskPluginInfo> queryTaskOfPlugin(@Param("detailTaskId") Long detailTaskId);
// /**
// * 根据任务id列表查询任务插件
// * @param oldTaskIdList 任务id列表
// * @return 任务插件列表
// */
// List<ProTaskPlugin> findPluginByTaskIdList(@Param("oldTaskIdList") List<Long> oldTaskIdList);
//
// /**
// * 添加所有的任务插件列表
// * @param taskPluginList 任务插件列表
// */
// void insertAllTaskPlugin(@Param("taskPluginList") List<ProTaskPlugin> taskPluginList);
//
// /**
// * 删除任务关联的插件信息
// * @param taskDetailId 任务id
// */
// void delByTaskDetailId(@Param("taskDetailId") Long taskDetailId);
}

43
src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskSubDao.java

@ -0,0 +1,43 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.po.ProTaskSub;
import com.ccsens.ptccsens.persist.mapper.ProTaskSubMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author AUSU
*/
@Repository
public interface ProTaskSubDao extends ProTaskSubMapper {
/**
* 查询任务详情的分解任务
* @param taskDetailId 任务详情id
* @return 分解任务列表
*/
List<ProTaskSub> findSubTaskByDetail(@Param("id") Long taskDetailId);
/**
* 保存所有的分解任务
* @param newTaskSubList 分解任务列表
*/
void insertAllTaskSub(@Param("newTaskSubList") List<ProTaskSub> newTaskSubList);
/**
* 查找下一个分解任务
* @param nextTaskDetailId 任务详情id
* @param planTime 计划开始时间
* @return 分解任务
*/
ProTaskSub findNextTaskSub(@Param("nextTaskDetailId") Long nextTaskDetailId, @Param("planTime") Long planTime);
/**
* 删除分解的任务
* @param taskDetailId 任务详情id
*/
void deleteOldSubTask(@Param("taskDetailId") Long taskDetailId);
}

21
src/main/java/com/ccsens/ptccsens/persist/dao/ProTaskVersionDao.java

@ -0,0 +1,21 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.po.ProTaskVersion;
import com.ccsens.ptccsens.persist.mapper.ProTaskVersionMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/**
* @author AUSU
*/
@Repository
public interface ProTaskVersionDao extends ProTaskVersionMapper {
/**
* 根据项目id查询版本信息
* @param id 项目id
* @return 版本信息
*/
ProTaskVersion findVersionByProjectId(@Param("projectId") Long id);
}

30
src/main/java/com/ccsens/ptccsens/persist/dao/ProjectDao.java

@ -0,0 +1,30 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.vo.ProjectVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author
*/
@Repository
public interface ProjectDao {
List<ProjectVo.SysProject> queryByCreator(@Param("userId") Long userId);
/**
* 根据项目id查询项目
* @param projectId 项目id
* @return 项目信息
*/
ProjectVo.SysProject selectById(@Param("projectId") Long projectId);
/**
* 逻辑删除项目
* @param projectId 项目id
*/
void updateStatusById(@Param("projectId") Long projectId);
}

15
src/main/java/com/ccsens/ptccsens/persist/dao/UserDao.java

@ -0,0 +1,15 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.po.ProUser;
import com.ccsens.ptccsens.persist.mapper.ProUserMapper;
import org.apache.ibatis.annotations.Param;
public interface UserDao extends ProUserMapper {
/**
* 通过手机号获取userId
* @param phone
* @return
*/
ProUser getUserIdByPhone(@Param("phone") String phone);
}

30
src/main/java/com/ccsens/ptccsens/persist/mapper/ProUserMapper.java

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

17
src/main/java/com/ccsens/ptccsens/service/IImportService.java

@ -0,0 +1,17 @@
package com.ccsens.ptccsens.service;
import com.ccsensptos.tallsdk.bean.vo.TallProjectVo;
/**
* @author
*/
public interface IImportService {
/**
* 读取excel
* @param path 路径
* @param userId userId
* @throws Exception 异常
*/
TallProjectVo.ProjectInfo importWbs(String path, Long userId, Long projectId) throws Exception;
}

903
src/main/java/com/ccsens/ptccsens/service/ImportService.java

@ -0,0 +1,903 @@
package com.ccsens.ptccsens.service;
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.ccsens.ptccsens.bean.dto.RoleDto;
import com.ccsens.ptccsens.bean.dto.TaskDto;
import com.ccsens.ptccsens.bean.po.*;
import com.ccsens.ptccsens.util.Constant;
import com.ccsens.ptccsens.bean.vo.ProjectVo;
import com.ccsens.ptccsens.persist.dao.*;
import com.ccsens.ptccsens.persist.mapper.ProMemberStakeholderMapper;
import com.ccsens.ptccsens.util.BasicsCodeError;
import com.ccsens.ptccsens.util.BasicsConstant;
import com.ccsens.util.ExcelUtil;
import com.ccsens.util.StringUtil;
import com.ccsens.util.cron.CronConstant;
import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import com.ccsensptos.tallsdk.bean.vo.TallProjectVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
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.FileInputStream;
import java.io.InputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class ImportService implements IImportService {
@Resource
private Snowflake snowflake;
@Resource
private ProTaskDetailDao taskDetailDao;
@Resource
private ProTaskSubDao taskSubDao;
@Resource
private ProTaskVersionDao taskVersionDao;
@Resource
private LabelDao labelDao;
@Resource
private ProRoleDao roleDao;
@Resource
private ProMemberDao memberDao;
@Resource
private ProRoleMemberDao roleMemberDao;
@Resource
private ProMemberStakeholderMapper memberStakeholderMapper;
@Resource
private ProRoleRepulsionDao repulsionDao;
@Resource
private LabelBusinessDao labelBusinessDao;
@Resource
private ProParentTaskDao parentTaskMapper;
@Resource
private ProRoleTaskDao roleTaskMapper;
@Resource
private UserDao userDao;
@Resource
private ProjectDao projectDao;
@Resource
private PluginDao taskPluginDao;
@Resource
private ProTaskPluginDao proTaskPluginDao;
/**
* 读取wbs文件
* @param path 路径
* @param userId userId
* @throws Exception 异常
*/
@Override
public TallProjectVo.ProjectInfo importWbs(String path, Long userId, Long projectId) throws Exception {
TallProjectVo.ProjectInfo projectInfo = new TallProjectVo.ProjectInfo();
//获取excel文件
InputStream is = new FileInputStream(path);
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
//角色
Map<String, Long> roleMap = new HashMap<>();
//成员
Map<String, RoleDto.WbsMember> memberMap = new HashMap<>();
//任务
Map<String, Object> taskMap = new HashMap<>();
//读取文件
readExcel(xssfWorkbook, userId, roleMap, memberMap, taskMap,projectId,projectInfo);
//读取插件配置表
readPluginConfig(xssfWorkbook,taskMap);
return projectInfo;
}
/**
* 读取插件配置表
*/
private void readPluginConfig(XSSFWorkbook wb, Map<String, Object> taskMap) {
//获取插件配置表Sheet
XSSFSheet wbsSheet = wb.getSheet(BasicsConstant.WbsExcel.WBS_PLUGIN_CONFIG);
if (ObjectUtil.isNotNull(wbsSheet)) {
for (int i = 0; i <= wbsSheet.getLastRowNum(); i++) {
//获取行
XSSFRow row = wbsSheet.getRow(i);
if (row == null) {
continue;
}
//序号
String sequence = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(0)));
//任务名
String taskName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(1)));
if(StrUtil.isEmpty(taskName)){
continue;
}
//插件1
String pluginParam1 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2)));
//插件2
String pluginParam2 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3)));
//插件3
String pluginParam3 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4)));
Object o = taskMap.get(sequence + "_" + taskName);
if(ObjectUtil.isNull(o)){
continue;
}
TaskDto.TaskPluginId taskPlugin = (TaskDto.TaskPluginId) o;
if(StrUtil.isNotEmpty(pluginParam1)){
//修改插件表的param
taskPluginDao.updateParamById(pluginParam1,taskPlugin.getTaskPluginId1());
}
if(StrUtil.isNotEmpty(pluginParam2)){
//修改插件表的param
taskPluginDao.updateParamById(pluginParam2,taskPlugin.getTaskPluginId2());
}
if(StrUtil.isNotEmpty(pluginParam3)){
//修改插件表的param
taskPluginDao.updateParamById(pluginParam3,taskPlugin.getTaskPluginId3());
}
}
}
}
/**
* 读取每个sheet
*/
private void readExcel(XSSFWorkbook wb, Long userId, Map<String, Long> roleMap, Map<String, RoleDto.WbsMember> memberMap, Map<String, Object> taskMap, Long projectId, TallProjectVo.ProjectInfo projectInfo) {
//获取wbsSheet
XSSFSheet wbsSheet = wb.getSheet(BasicsConstant.WbsExcel.WBS_SHEET);
if (ObjectUtil.isNull(wbsSheet)) {
throw new BaseException(BasicsCodeError.NOT_WBS_SHEET);
}
//获取项目成员表
XSSFSheet memberSheet = wb.getSheet(BasicsConstant.WbsExcel.MEMBER_SHEET);
if (ObjectUtil.isNull(memberSheet)) {
throw new BaseException(BasicsCodeError.NOT_MEMBER_SHEET);
}
//读取项目信息和任务分解信息的开始结束行
int projectStart = 0;
int taskStart = 0;
for (int i = 0; i <= wbsSheet.getLastRowNum(); i++) {
//获取行
XSSFRow xssfRow = wbsSheet.getRow(i);
if (xssfRow == null) {
continue;
}
//获取第一列
XSSFCell xssfCell = xssfRow.getCell(0);
if (xssfCell == null) {
continue;
}
String s = ExcelUtil.getCellValue(xssfCell);
//获取项目开始行
if (s.indexOf(BasicsConstant.WbsExcel.PROJECT_INFO_TITLE) == 0) {
projectStart = i + 1;
}
//获取任务开始行
if (s.indexOf(BasicsConstant.WbsExcel.TASK_INFO_TITLE) == 0) {
taskStart = i + 1;
}
}
if (projectStart == 0) {
throw new BaseException(BasicsCodeError.WSB_NOT_PROJECT_HEADER);
}
if (taskStart == 0) {
throw new BaseException(BasicsCodeError.WSB_NOT_TASK_HEADER);
}
//添加项目
ProjectVo.SysProject project = readProject(wbsSheet, projectStart, userId,projectId);
if(ObjectUtil.isNull(project)){
throw new BaseException(BasicsCodeError.WSB_NOT_PROJECT_HEADER);
}
//读取成员表
readMemberSheet(memberSheet,project,roleMap,memberMap);
//添加任务
readTask(wbsSheet,taskStart,project,roleMap,taskMap);
//获取用户列表
Set<Long> userIdSet = new HashSet<>();
userIdSet.add(userId);
//处理创建人的权限问题(添加创建人角色)
//查找创建者标签id
Long roleLabelId = labelDao.getLabelByTypeAndLevel(5, 5);
//添加创建者角色
ProRole role = new ProRole();
role.setId(snowflake.nextId());
role.setName("创建者");
role.setProjectId(project.getId());
role.setLabelId(roleLabelId);
roleDao.insertSelective(role);
//查找创建者在项目下的成员信息
Long memberId = null;
if(CollectionUtil.isNotEmpty(memberMap)){
for(RoleDto.WbsMember member : memberMap.values()){
if(ObjectUtil.isNotNull(member.getUserId())){
if(member.getUserId().equals(userId)){
memberId = member.getId();
}
userIdSet.add(member.getUserId());
}
}
}
//如果当前用户不是项目成员,则添加为成员
if(ObjectUtil.isNull(memberId)){
//添加成员至数据库
ProMember proMember = new ProMember();
proMember.setId(snowflake.nextId());
proMember.setProjectId(projectId);
proMember.setUserId(userId);
memberDao.insertSelective(proMember);
memberId = proMember.getId();
}
//添加当前用户未创建者
//添加角色成员关联信息
ProRoleMember roleMember = new ProRoleMember();
roleMember.setId(snowflake.nextId());
roleMember.setRoleId(role.getId());
roleMember.setMemberId(memberId);
roleMemberDao.insertSelective(roleMember);
// //TODO 在tall客户端添加项目和用户的关联信息
// ProjectDto.SaveProjectDto saveProjectDto = new ProjectDto.SaveProjectDto();
// saveProjectDto.setId(project.getId());
// saveProjectDto.setName(project.getName());
// saveProjectDto.setStartTime(project.getBeginTime());
// saveProjectDto.setEndTime(project.getEndTime());
// saveProjectDto.setUrl(PropUtil.domain);
//
// saveProjectDto.setUserIdList(userIdSet);
// JsonResponse jsonResponse = tall3FeignClient.saveProjectList(saveProjectDto);
// if (null == jsonResponse){
// throw new BaseException(BasicsCodeError.FEIGN_ERROR);
// }
//获取项目信息
// BeanUtil.copyProperties(saveProjectDto,projectInfo);
}
/**
* 读取项目信息
*/
private ProjectVo.SysProject readProject(XSSFSheet wbsSheet, int projectStart, Long userId, Long projectId) {
ProjectVo.SysProject project = new ProjectVo.SysProject();
// TODO 查询是否项目是否存在
if (ObjectUtil.isNotNull(projectId)) {
project = projectDao.selectById(projectId);
if (ObjectUtil.isNotNull(project)) {
project.setId(projectId);
project.setImportType((byte)1);
//删除之前的项目详情
projectDao.updateStatusById(projectId);
//删除之前的项目分解
ProTaskSubExample taskSubExample = new ProTaskSubExample();
taskSubExample.createCriteria().andTaskDetailIdEqualTo(projectId);
ProTaskSub taskSub = new ProTaskSub();
taskSub.setRecStatus((byte)2);
taskSubDao.updateByExampleSelective(taskSub,taskSubExample);
//删除之前的版本信息
ProTaskVersion taskVersion = new ProTaskVersion();
taskVersion.setRecStatus((byte)2);
ProTaskVersionExample taskVersionExample = new ProTaskVersionExample();
taskVersionExample.createCriteria().andTaskDetailIdEqualTo(projectId);
taskVersionDao.updateByExampleSelective(taskVersion,taskVersionExample);
//删除项目标签相关的
LabelBusiness labelBusiness = new LabelBusiness();
labelBusiness.setRecStatus((byte)2);
LabelBusinessExample labelBusinessExample = new LabelBusinessExample();
labelBusinessExample.createCriteria().andBusinessIdEqualTo(projectId);
labelBusinessDao.updateByExampleSelective(labelBusiness,labelBusinessExample);
}
}
//获取项目信息的那一行
XSSFRow row = wbsSheet.getRow(projectStart + 1);
if (ObjectUtil.isNull(row)) {
throw new BaseException(BasicsCodeError.WSB_NOT_PROJECT_HEADER);
}
//项目名
String projectName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(0)));
//详情
String description = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(1)));
//项目时间
String address = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2)));
//开始时间
String beginTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3)));
//结束时间
String endTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4)));
//版本
String version = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5)));
if (StrUtil.isEmpty(projectName)) {
throw new BaseException(BasicsCodeError.WBS_NOT_PROJECT_NAME.addMsg(wbsSheet.getSheetName(),projectStart+1));
}
//项目名不能重复(当前用户创建的项目内名字不能重复)
//根据userId查找已创建的项目
List<ProjectVo.SysProject> sysProjectList = projectDao.queryByCreator(userId);
if(CollectionUtil.isNotEmpty(sysProjectList)){
sysProjectList.forEach(p -> {
if(projectName.equalsIgnoreCase(p.getName())){
//如果名称重复则提示错误信息
throw new BaseException(BasicsCodeError.PROJECT_NAME_REPEAT.addMsg(wbsSheet.getSheetName(),projectStart+1,projectName));
}
});
}
//判断时间是否正确
String begin = ExcelUtil.getCellValue(row.getCell(3));
String end = ExcelUtil.getCellValue(row.getCell(4));
if (StrUtil.isEmpty(begin) || StrUtil.isEmpty(end)) {
throw new BaseException(BasicsCodeError.WBS_NOT_PROJECT_TIME.addMsg(wbsSheet.getSheetName(),projectStart+1));
}
long bTime;
long eTime;
try {
bTime = Long.parseLong(beginTime);
eTime = Long.parseLong(endTime);
} catch (Exception e) {
//日期格式错误
throw new BaseException(BasicsCodeError.WBS_PROJECT_TIME_ERROR.addMsg(wbsSheet.getSheetName(),projectStart+1));
}
//添加项目信息(任务详情)
ProTaskDetail taskDetail = new ProTaskDetail();
if (0 == project.getImportType()) {
taskDetail.setId(snowflake.nextId());
}
if (1 == project.getImportType()) {
taskDetail.setId(projectId);
}
taskDetail.setName(projectName);
taskDetail.setDescription(description);
if (0 == project.getImportType()){
taskDetailDao.insertSelective(taskDetail);
}
if (1 == project.getImportType()){
taskDetailDao.updateByPrimaryKeySelective(taskDetail);
}
project.setId(taskDetail.getId());
project.setName(projectName);
//添加(任务分解)
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetail.getId());
taskSub.setPlanStartTime(bTime);
taskSub.setPlanEndTime(eTime);
taskSub.setPlanDuration(eTime - bTime);
taskSubDao.insertSelective(taskSub);
project.setBeginTime(bTime);
project.setEndTime(eTime);
//添加版本信息
ProTaskVersion taskVersion = new ProTaskVersion();
taskVersion.setId(snowflake.nextId());
taskVersion.setTaskDetailId(taskDetail.getId());
taskVersion.setTaskVersionInfo(version);
taskVersion.setAddress(address);
taskVersionDao.insertSelective(taskVersion);
//查找项目标签
Long labelId = labelDao.getLabelByTypeAndLevel(1, 0);
//添加任务标签关联信息
saveLabelTask(taskDetail.getId(), labelId);
return project;
}
/**
* 添加任务标签关联
*/
private void saveLabelTask(Long taskDetailId, Long labelId) {
//添加标签
LabelBusiness labelBusiness = new LabelBusiness();
labelBusiness.setId(snowflake.nextId());
labelBusiness.setBusinessType((byte) 0);
labelBusiness.setBusinessId(taskDetailId);
labelBusiness.setLabelId(labelId);
labelBusinessDao.insertSelective(labelBusiness);
}
/**
* 读取项目成员表
*/
private void readMemberSheet(XSSFSheet memberSheet, ProjectVo.SysProject project, Map<String, Long> roleMap, Map<String, RoleDto.WbsMember> memberMap) {
//系统角色id
Long sysRoleId = null;
//项目角色id
Long roleId = null;
//如果是修改WBS,先进行删除
if (1 == project.getImportType()){
//删除角色和成员
List<Long> roleIdList = roleDao.queryRoleListOfProject(project.getId());
ProRole role = new ProRole();
role.setRecStatus((byte)2);
ProRoleExample roleExample = new ProRoleExample();
roleExample.createCriteria().andIdIn(roleIdList);
roleDao.updateByExampleSelective(role,roleExample);
List<Long> memberIdList = memberDao.queryMembersOfProject(project.getId());
ProMember member = new ProMember();
member.setRecStatus((byte)2);
ProMemberExample memberExample = new ProMemberExample();
memberExample.createCriteria().andIdIn(memberIdList);
memberDao.updateByExampleSelective(member,memberExample);
//删除奖惩干系人
ProMemberStakeholder memberStakeholder = new ProMemberStakeholder();
memberStakeholder.setRecStatus((byte)2);
ProMemberStakeholderExample memberStakeholderExample = new ProMemberStakeholderExample();
memberStakeholderExample.createCriteria().andMemeberIdIn(memberIdList);
memberStakeholderMapper.updateByExampleSelective(memberStakeholder,memberStakeholderExample);
//删除对谁不可见
ProRoleRepulsion roleRepulsion = new ProRoleRepulsion();
roleRepulsion.setRecStatus((byte)2);
ProRoleRepulsionExample roleRepulsionExample = new ProRoleRepulsionExample();
roleRepulsionExample.createCriteria().andRoleIdIn(roleIdList);
repulsionDao.updateByExampleSelective(roleRepulsion,roleRepulsionExample);
//删除角色成员关联
ProRoleMember roleMember = new ProRoleMember();
roleMember.setRecStatus((byte)2);
ProRoleMemberExample roleMemberExample = new ProRoleMemberExample();
roleMemberExample.createCriteria().andRoleIdIn(roleIdList);
roleMemberDao.updateByExampleSelective(roleMember,roleMemberExample);
}
for (int i = 2; i <= memberSheet.getLastRowNum(); i++) {
//获取当前行
XSSFRow row = memberSheet.getRow(i);
if(ObjectUtil.isNull(row)){ continue; }
//系统角色名
String sysRole = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(1)));
if(StrUtil.isEmpty(sysRole) && ObjectUtil.isNull(sysRoleId)){
continue;
}
//验证系统角色(查询标签)
if(StrUtil.isNotEmpty(sysRole) && !"/".equalsIgnoreCase(sysRole)){
Long labelId = labelDao.getLabelByName(5,sysRole);
if(ObjectUtil.isNull(labelId)){
throw new BaseException(BasicsCodeError.WBS_NOT_FIRST_ROLE.addMsg(memberSheet.getSheetName(),i+1,sysRole));
}
sysRoleId = labelId;
}
//项目角色
String roleName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2)));
if((StrUtil.isEmpty(roleName) || "/".equalsIgnoreCase(roleName)) && ObjectUtil.isNull(roleId)){ continue; }
//成员
String memberName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3)));
//角色手机号
String memberPhone = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4)));
if((StrUtil.isNotEmpty(memberName) && !"/".equalsIgnoreCase(memberName)) && (StrUtil.isEmpty(memberPhone) || !memberPhone.matches(Constant.PHONE_REGEX))){
throw new BaseException(BasicsCodeError.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(),i+1,memberPhone));
}
//奖惩干系人
String stakeholderName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5)));
//干系人电话
String stakeholderPhone = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(6)));
if((StrUtil.isNotEmpty(stakeholderName) && !"/".equalsIgnoreCase(stakeholderName)) && (StrUtil.isEmpty(stakeholderPhone) || !stakeholderPhone.matches(Constant.PHONE_REGEX))){
throw new BaseException(BasicsCodeError.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(),i+1,stakeholderName));
}
//添加角色
if(StrUtil.isNotEmpty(roleName) && !"/".equalsIgnoreCase(roleName)){
ProRole role = new ProRole();
role.setId(snowflake.nextId());
role.setName(roleName);
role.setProjectId(project.getId());
role.setLabelId(sysRoleId);
roleDao.insertSelective(role);
roleId = role.getId();
roleMap.put(roleName,role.getId());
}
//添加成员
if(StrUtil.isNotEmpty(memberName) && !"/".equalsIgnoreCase(roleName)){
//如果成员名和手机号重复当做一个人来处理
RoleDto.WbsMember wbsMembers = memberMap.get(memberName + "_" + memberPhone);
Long memberId = null;
if(ObjectUtil.isNotNull(wbsMembers)){
memberId = wbsMembers.getId();
}
if(ObjectUtil.isNull(memberId)){
//TODO 根据成员手机号查找userId 成员关联userId
//根据手机号获取userId
ProUser user = userDao.getUserIdByPhone(memberPhone);
if(ObjectUtil.isNull(user)){
//TODO 如果未查到用户则添加一条新的用户信息
user = new ProUser();
user.setId(snowflake.nextId());
user.setPhone(memberPhone);
userDao.insertSelective(user);
}
Long userId = user.getId();
//添加成员至数据库
ProMember proMember = new ProMember();
proMember.setId(snowflake.nextId());
proMember.setName(memberName);
proMember.setPhone(memberPhone);
proMember.setProjectId(project.getId());
proMember.setUserId(userId);
memberDao.insertSelective(proMember);
RoleDto.WbsMember member = new RoleDto.WbsMember(proMember.getId(),userId);
memberMap.put(memberName+"_"+memberPhone,member);
memberId = proMember.getId();
}
//添加角色成员关联信息
ProRoleMember roleMember = new ProRoleMember();
roleMember.setId(snowflake.nextId());
roleMember.setRoleId(roleId);
roleMember.setMemberId(memberId);
roleMemberDao.insertSelective(roleMember);
//添加奖惩干系人
if(StrUtil.isNotEmpty(stakeholderName) && !"/".equalsIgnoreCase(roleName)){
//TODO 根据干系人手机号查找userId 奖惩干系人关联userId
ProUser user = userDao.getUserIdByPhone(stakeholderPhone);
if(ObjectUtil.isNull(user)){
//TODO 如果未查到用户则添加一条新的用户信息
user = new ProUser();
user.setId(snowflake.nextId());
user.setPhone(stakeholderPhone);
userDao.insertSelective(user);
}
Long userId = user.getId();
ProMemberStakeholder memberStakeholder = new ProMemberStakeholder();
memberStakeholder.setId(snowflake.nextId());
memberStakeholder.setMemeberId(memberId);
memberStakeholder.setStakeholderName(stakeholderName);
memberStakeholder.setStakeholderPhone(stakeholderPhone);
memberStakeholder.setUserId(userId);
memberStakeholderMapper.insertSelective(memberStakeholder);
}
}
}
//添加对谁不可见
roleRepulsion(memberSheet, roleMap);
}
/**
* 处理对谁不可见
*/
private void roleRepulsion(XSSFSheet memberSheet, Map<String, Long> roleMap) {
//角色排斥表需要的角色id
Long roleIdRepulsion = null;
for (int i = 2; i <= memberSheet.getLastRowNum(); i++) {
//获取当前行
XSSFRow row = memberSheet.getRow(i);
if(ObjectUtil.isNull(row)){ continue; }
//项目角色
String roleName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2)));
if(StrUtil.isNotEmpty(roleName)){
roleIdRepulsion = roleMap.get(roleName);
}
if(ObjectUtil.isNull(roleIdRepulsion)){
continue;
}
//对谁不可见
String repulsion = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(7)));
if(StrUtil.isEmpty(repulsion)){
continue;
}
//分解对谁不可见
String[] split = repulsion.split(Constant.STRING_REGEX);
for (String repulsionName : split) {
Long repulsionId = roleMap.get(repulsionName);
if (ObjectUtil.isNull(repulsionId)) {
throw new BaseException(BasicsCodeError.WBS_NOT_FIND_ROLE.addMsg(memberSheet.getSheetName(),i+1,repulsionName));
}
//添加数据
ProRoleRepulsion roleRepulsion = new ProRoleRepulsion();
roleRepulsion.setId(snowflake.nextId());
roleRepulsion.setRoleId(roleIdRepulsion);
roleRepulsion.setRepulsionRoleId(repulsionId);
repulsionDao.insertSelective(roleRepulsion);
}
}
}
/**
* 读取任务信息
*/
private void readTask(XSSFSheet wbsSheet, int taskStart, ProjectVo.SysProject project, Map<String, Long> roleMap, Map<String, Object> taskMap) {
//一级任务id
Long firstTaskId = null;
Long taskStartTime = project.getBeginTime();
//如果是修改WBS需要先删除
if (1 == project.getImportType()) {
List<Long> allTaskId = parentTaskMapper.queryAllTaskIdByProjectId(project.getId());
//删除所有的任务详情
ProTaskDetail taskDetail = new ProTaskDetail();
taskDetail.setRecStatus((byte)2);
ProTaskDetailExample taskDetailExample = new ProTaskDetailExample();
taskDetailExample.createCriteria().andIdIn(allTaskId);
taskDetailDao.updateByExampleSelective(taskDetail,taskDetailExample);
//删除所有的分解任务
ProTaskSub taskSub = new ProTaskSub();
taskSub.setRecStatus((byte)2);
ProTaskSubExample taskSubExample = new ProTaskSubExample();
taskSubExample.createCriteria().andTaskDetailIdIn(allTaskId);
taskSubDao.updateByExampleSelective(taskSub,taskSubExample);
//删除所有的任务标签
LabelBusiness labelBusiness = new LabelBusiness();
labelBusiness.setRecStatus((byte)2);
LabelBusinessExample labelBusinessExample = new LabelBusinessExample();
labelBusinessExample.createCriteria().andBusinessIdIn(allTaskId);
labelBusinessDao.updateByExampleSelective(labelBusiness,labelBusinessExample);
//删除任务角色关联表
ProRoleTask roleTask = new ProRoleTask();
roleTask.setRecStatus((byte)2);
ProRoleTaskExample roleTaskExample = new ProRoleTaskExample();
roleTaskExample.createCriteria().andTaskIdIn(allTaskId);
roleTaskMapper.updateByExampleSelective(roleTask,roleTaskExample);
//删除任务插件关联信息
ProTaskPlugin taskPlugin = new ProTaskPlugin();
taskPlugin.setRecStatus((byte)2);
ProTaskPluginExample taskPluginExample = new ProTaskPluginExample();
taskPluginExample.createCriteria().andTaskDetailIdIn(allTaskId);
proTaskPluginDao.updateByExampleSelective(taskPlugin,taskPluginExample);
//删除任务关系表
allTaskId.add(project.getId());
ProParentTask parentTask = new ProParentTask();
parentTask.setRecStatus((byte)2);
ProParentTaskExample parentTaskExample = new ProParentTaskExample();
parentTaskExample.createCriteria().andTaskDetailIdIn(allTaskId);
parentTaskMapper.updateByExampleSelective(parentTask,parentTaskExample);
}
for (int i = taskStart + 1; i <= wbsSheet.getLastRowNum(); i++) {
//获取当前行
XSSFRow row = wbsSheet.getRow(i);
if(ObjectUtil.isNull(row)){ continue; }
//序号
String sequence = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(0)));
//一级任务名
String firstTaskName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(1)));
if(StrUtil.isEmpty(firstTaskName) && ObjectUtil.isNull(firstTaskId)){
continue;
}
if(StrUtil.isNotEmpty(firstTaskName)){
//添加一级任务
firstTaskId = saveFirstTask(project, firstTaskName);
}
//二级任务名
String taskName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2)));
if(StrUtil.isEmpty(taskName)){
continue;
}
//任务描述
String description = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3)));
//重要性标签
String vitalLabel = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(7)));
//负责人
String executorRole = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(8)));
//开始时间
String beginTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4)));
//结束时间
String endTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5)));
//时长
String duration = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(6)));
//插件
String plugin1 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(12)));
String plugin2 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(13)));
String plugin3 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(14)));
if(StrUtil.isNotEmpty(taskName)){
//添加二级任务信息(任务详情)
ProTaskDetail taskDetail = new ProTaskDetail();
taskDetail.setId(snowflake.nextId());
taskDetail.setName(taskName);
taskDetail.setDescription(description);
taskDetailDao.insertSelective(taskDetail);
//任务关联信息(关联一级任务)
ProParentTask parentTask = new ProParentTask();
parentTask.setId(snowflake.nextId());
parentTask.setTaskDetailId(taskDetail.getId());
parentTask.setParentTaskDetailId(firstTaskId);
parentTaskMapper.insertSelective(parentTask);
//查找重要性标签
Long labelId = labelDao.getLabelByName(2,vitalLabel);
if(ObjectUtil.isNull(labelId)){
throw new BaseException(BasicsCodeError.TASK_VITAL_LABEL_ERROR.addMsg(wbsSheet.getSheetName(),i+1,vitalLabel));
}
LabelBusiness labelBusiness = new LabelBusiness();
labelBusiness.setId(snowflake.nextId());
labelBusiness.setBusinessType((byte) 0);
labelBusiness.setBusinessId(taskDetail.getId());
labelBusiness.setLabelId(labelId);
labelBusinessDao.insertSelective(labelBusiness);
//任务和角色关联
if(StrUtil.isEmpty(executorRole)){
throw new BaseException(BasicsCodeError.WBS_NOT_FIND_ROLE.addMsg(wbsSheet.getSheetName(),i+1,executorRole));
}
String[] split = executorRole.split(Constant.STRING_REGEX);
for (String repulsionName : split) {
Long executorRoleId = roleMap.get(repulsionName);
if(ObjectUtil.isNull(executorRoleId)){
throw new BaseException(BasicsCodeError.WBS_NOT_FIND_ROLE.addMsg(wbsSheet.getSheetName(),i+1,repulsionName));
}
ProRoleTask roleTask = new ProRoleTask();
roleTask.setId(snowflake.nextId());
roleTask.setRoleId(executorRoleId);
roleTask.setTaskId(taskDetail.getId());
roleTaskMapper.insertSelective(roleTask);
}
//处理时间、添加任务分解、添加任务标签
taskStartTime = taskSaveTime(taskStartTime, project, beginTime, endTime, duration, taskDetail.getId(),wbsSheet,i+1);
//添加时间颗粒度标签并关联
Long timeLabel = labelDao.getLabelByTypeAndLevel(0, 4);
saveLabelTask(taskDetail.getId(),timeLabel);
//TODO 插件
Long taskPlugin1 = plugin(plugin1,taskDetail.getId(),1,wbsSheet,i+1);
Long taskPlugin2 = plugin(plugin2,taskDetail.getId(),2,wbsSheet,i+1);
Long taskPlugin3 = plugin(plugin3,taskDetail.getId(),3,wbsSheet,i+1);
TaskDto.TaskPluginId taskPlugin = new TaskDto.TaskPluginId(taskPlugin1,taskPlugin2,taskPlugin3);
taskMap.put(sequence + "_" + taskName, taskPlugin);
}
//TODO 检查人
//TODO 及时奖惩
//TODO 交付物
//TODO 添加默认插件
}
}
private Long plugin(String plugin, Long taskId, int row, XSSFSheet wbsSheet, int errorRow) {
Long taskPlugin = null;
if(StrUtil.isNotEmpty(plugin)){
//根据插件名称查找插件id
// Long pluginId = taskPluginDao.getPluginIdByName(plugin);
Long pluginId = 1L;
if(ObjectUtil.isNull(pluginId)){
throw new BaseException(BasicsCodeError.PLUGIN_NAME_ERROR.addMsg(wbsSheet.getSheetName(),errorRow,plugin));
}
//添加插件
ProTaskPlugin proTaskPlugin = new ProTaskPlugin();
proTaskPlugin.setId(snowflake.nextId());
proTaskPlugin.setTaskDetailId(taskId);
proTaskPlugin.setPluginId(pluginId);
proTaskPlugin.setPlginRow(row);
proTaskPlugin.setPlginCol(1);
proTaskPlugin.setRowspan(1);
proTaskPlugin.setColspan(1);
proTaskPluginDao.insertSelective(proTaskPlugin);
taskPlugin = proTaskPlugin.getId();
}
return taskPlugin;
}
private Long taskSaveTime(Long taskStartTime, ProjectVo.SysProject project, String beginTime, String endTime, String duration, Long taskDetailId, XSSFSheet wbsSheet, int row) {
if(StrUtil.isEmpty(beginTime) || "日常".equalsIgnoreCase(beginTime)){
if(StrUtil.isEmpty(beginTime) && StrUtil.isNotEmpty(duration)){
//获取时长内的字符串
String str = "[0-9]";
Pattern pStr = Pattern.compile(str);
Matcher mStr = pStr.matcher(duration);
String trimStr = mStr.replaceAll("").trim();
Long aLong = Constant.WBS_DURATION.get(trimStr);
if(ObjectUtil.isNull(aLong)){
throw new BaseException(BasicsCodeError.WBS_PROJECT_TIME_ERROR.addMsg(wbsSheet.getSheetName(),row));
}
//获取字符串内的数字
String num = "[^0-9]";
Pattern pNum = Pattern.compile(num);
Matcher mNum = pNum.matcher(duration);
String trimNum = mNum.replaceAll("").trim();
//计算时长
Long durationTime = Long.parseLong(trimNum) * aLong;
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetailId);
taskSub.setPlanDuration(durationTime);
taskSub.setPlanStartTime(taskStartTime);
taskStartTime += durationTime;
taskSub.setPlanEndTime(taskStartTime);
taskSubDao.insertSelective(taskSub);
//查找定期任务标签并关联任务
Long taskLabel = labelDao.getLabelByTypeAndLevel(1, 3);
saveLabelTask(taskDetailId,taskLabel);
}else {
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetailId);
taskSubDao.insertSelective(taskSub);
//查找日常任务标签并关联信息
Long label = labelDao.getLabelByTypeAndLevel(1, 2);
saveLabelTask(taskDetailId,label);
}
}else {
Long bTime;
Long eTime;
try {
bTime = Long.parseLong(beginTime);
eTime = StrUtil.isEmpty(endTime) ? project.getEndTime() : Long.parseLong(endTime);
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetailId);
taskSub.setPlanEndTime(eTime);
taskSub.setPlanStartTime(bTime);
taskSub.setPlanDuration(eTime - bTime);
taskSubDao.insertSelective(taskSub);
//查找定期任务标签并关联任务
Long taskLabel = labelDao.getLabelByTypeAndLevel(1, 3);
saveLabelTask(taskDetailId,taskLabel);
// //添加时间颗粒度标签并关联
// Long timeLabel = subLabelDao.getLabelByTypeAndLevel(0, 4);
// saveLabelTask(taskDetailId,timeLabel);
}catch (Exception e){
Date startDate = new Date(project.getBeginTime());
Date endDate = new Date(project.getEndTime());
try {
List<CronConstant.TaskDate> taskDateList =
NatureToDate.generateDates(beginTime, startDate, endDate);
if (CollectionUtil.isEmpty(taskDateList)) {
return taskStartTime;
}
List<ProTaskSub> proTaskSubList = new ArrayList<>();
for (CronConstant.TaskDate taskDate : taskDateList) {
ProTaskSub proTaskSub = new ProTaskSub();
proTaskSub.setId(snowflake.nextId());
proTaskSub.setTaskDetailId(taskDetailId);
proTaskSub.setPlanStartTime(taskDate.getStartDate().getTime());
proTaskSub.setPlanEndTime(taskDate.getEndDate().getTime());
proTaskSub.setPlanDuration(proTaskSub.getPlanEndTime() - proTaskSub.getPlanStartTime());
proTaskSubList.add(proTaskSub);
}
if(CollectionUtil.isNotEmpty(proTaskSubList)){
taskDetailDao.insertSelectiveList(proTaskSubList);
}
//查找定期任务标签并关联任务
Long taskLabel = labelDao.getLabelByTypeAndLevel(1, 3);
saveLabelTask(taskDetailId,taskLabel);
}catch (Exception e1){
throw new BaseException(String.valueOf(e1));
// throw new BaseException(SportsCodeError.WBS_PROJECT_TIME_ERROR);
}
}
}
return taskStartTime;
}
/**
* 添加一级任务
*/
private Long saveFirstTask(ProjectVo.SysProject project, String firstTaskName) {
//TODO 一级任务负责人是项目经理
Long firstTaskId;
ProTaskDetail taskDetail = new ProTaskDetail();
taskDetail.setId(snowflake.nextId());
taskDetail.setName(firstTaskName);
taskDetailDao.insertSelective(taskDetail);
firstTaskId = taskDetail.getId();
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetail.getId());
taskSub.setPlanStartTime(project.getBeginTime());
taskSub.setPlanEndTime(project.getEndTime());
taskSub.setPlanDuration(project.getEndTime() - project.getBeginTime());
taskSubDao.insertSelective(taskSub);
//任务关联信息(关联项目)
ProParentTask parentTask = new ProParentTask();
parentTask.setId(snowflake.nextId());
parentTask.setTaskDetailId(taskDetail.getId());
parentTask.setParentTaskDetailId(project.getId());
parentTaskMapper.insertSelective(parentTask);
//查找一级任务标签
Long labelId = labelDao.getLabelByTypeAndLevel(1, 1);
//添加任务标签关联信息
saveLabelTask(taskDetail.getId(), labelId);
return firstTaskId;
}
}

587
src/main/java/com/ccsens/ptccsens/service/TallService.java

@ -0,0 +1,587 @@
//package com.ccsens.ptos_zero.service;
//
//import cn.hutool.core.collection.CollectionUtil;
//import com.ccsens.ptos_zero.bean.po.ProRole;
//import com.ccsens.ptos_zero.persist.dao.ProRoleDao;
//import com.ccsensptos.tallsdk.bean.dto.ProjectDto;
//import com.ccsensptos.tallsdk.bean.dto.RoleDto;
//import com.ccsensptos.tallsdk.bean.dto.TaskDto;
//import com.ccsensptos.tallsdk.bean.vo.ProjectVo;
//import com.ccsensptos.tallsdk.bean.vo.RoleVo;
//import com.ccsensptos.tallsdk.bean.vo.TaskVo;
//import com.ccsensptos.tallsdk.service.ITallService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Propagation;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.annotation.Resource;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * @author 逗
// */
//@Slf4j
//@Service
//@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
//public class TallService implements ITallService {
//
// @Resource
// private ProRoleDao proRoleDao;
//
//
// @Override
// public List<ProjectVo.ProjectInfo> queryProjectByUser(String token,ProjectDto.QueryProjectDto param) {
// return null;
// }
//
// @Override
// public RoleVo.QueryRole queryShowRole(String token,RoleDto.QueryRoleById param) {
// //TODO 通过token向tall获取用户信息,
// Long userId = null;
//
// //返回的对象
// RoleVo.QueryRole queryRole = new RoleVo.QueryRole();
// List<RoleVo.RoleInfo> visibleList = new ArrayList<>();
// List<RoleVo.RoleInfo> invisibleList = new ArrayList<>();
//
// //查询当前用户在项目下的角色,没有则算作关注者
// List<ProRole> userRoleList = proRoleDao.queryRoleByUserId(param.getProjectId(),userId);
// //查询用户可见的角色
// List<RoleVo.RoleInfo> roleInfoList;
// if(CollectionUtil.isNotEmpty(userRoleList)){
// //不是关注者,查询可见的角色(完全屏蔽才不可见)
// roleInfoList = proRoleDao.notAttentionQueryRole(param.getProjectId(),userRoleList);
// }else {
// //是关注者查询可见的角色(未设置过对谁不可见信息的角色)
// roleInfoList = proRoleDao.attentionQueryRole(param.getProjectId());
// }
// //查询配置信息
// List<Long> showRoleList = proRoleDao.queryShowByUserAndProject(param.getProjectId(),userId);
// if(CollectionUtil.isNotEmpty(showRoleList)){
// for (Long showRoleId : showRoleList) {
// //循环配置内的信息去匹配角色列表,来确定角色该放在什么地方
// for (RoleVo.RoleInfo roleInfo : roleInfoList) {
// if(showRoleId.equals(roleInfo.getId())){
// //和配置内的信息相同则放入展示角色列表
// visibleList.add(roleInfo);
// //同时删除数组内的信息
// roleInfoList.remove(roleInfo);
// //跳出循环,开始配置信息内的下一个
// break;
// }
// }
// }
// //剩下的角色全部放在不可见角色列表
// invisibleList.addAll(roleInfoList);
// }else {
// //没有配置信息则按默认规则
// if (CollectionUtil.isNotEmpty(roleInfoList)) {
// //循环所有角色
// for (RoleVo.RoleInfo roleInfo : roleInfoList) {
// //如果是项目经理,放入展示的角色
// if (roleInfo.getPm() == 1) {
// visibleList.add(roleInfo);
// continue;
// }
// //是用户所属的角色,放入展示的角色列表
// if (roleInfo.getMine() == 1) {
// visibleList.add(roleInfo);
// continue;
// } else {
// //不是用户所属的角色,但展示角色列表数量不足设置的数量
//
// //展示数量等于0,展示全部
// if(param.getNum() == 0){
// visibleList.add(roleInfo);
// continue;
// }
// //不是用户所属的角色,但展示角色列表数量不足五个,
// if (visibleList.size() < param.getNum()) {
// visibleList.add(roleInfo);
// continue;
// }
// }
// //不满足上面条件的,放入不展示的角色列表
// invisibleList.add(roleInfo);
// }
// }
// }
// queryRole.setVisibleList(visibleList);
// queryRole.setInvisibleList(invisibleList);
// return queryRole;
// }
//
// @Override
// public List<TaskVo.QueryTask> queryPermanentGlobalTask(String token,TaskDto.QueryPermanentGlobalTask param) {
// return null;
// }
//
// @Override
// public List<TaskVo.QueryTask> queryGlobalTask(String token,TaskDto.QueryGlobalTask param) {
// return null;
// }
//
// @Override
// public List<TaskVo.QueryTask> queryRegularTask(String token,TaskDto.QueryRegularTask param) {
// return null;
// }
//
// @Override
// public List<ProjectVo.ProjectInfo> importWbs(String token,MultipartFile params) {
// return null;
// }
//}
package com.ccsens.ptccsens.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.ptccsens.bean.po.ProRole;
import com.ccsens.ptccsens.bean.po.ProRoleExample;
import com.ccsens.ptccsens.bean.po.ProUser;
import com.ccsens.ptccsens.persist.dao.*;
import com.ccsens.ptccsens.util.BasicsCodeError;
import com.ccsens.ptccsens.util.Constant;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.WebConstant;
import com.ccsens.util.exception.BaseException;
import com.ccsensptos.tallsdk.bean.dto.TallProjectDto;
import com.ccsensptos.tallsdk.bean.dto.TallRoleDto;
import com.ccsensptos.tallsdk.bean.dto.TallTaskDto;
import com.ccsensptos.tallsdk.bean.dto.TallTokenDto;
import com.ccsensptos.tallsdk.bean.vo.TallProjectVo;
import com.ccsensptos.tallsdk.bean.vo.TallRoleVo;
import com.ccsensptos.tallsdk.bean.vo.TallTaskVo;
import com.ccsensptos.tallsdk.bean.vo.TallTokenVo;
import com.ccsensptos.tallsdk.service.ITallService;
import com.ccsensptos.tallsdk.util.TokenUtil;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class TallService implements ITallService {
@Resource
private ProRoleDao proRoleDao;
@Resource
private ProTaskDetailDao taskDetailDao;
@Resource
private ProRoleDao roleDao;
@Resource
private ProMemberDao memberDao;
@Resource
private ProRoleRepulsionDao roleRepulsionDao;
@Resource
private ProRoleMemberDao roleMemberDao;
@Resource
private ProRoleTaskDao roleTaskDao;
@Resource
private ProTaskPluginDao taskPluginDao;
@Resource
private IImportService importService;
@Resource
private UserDao userDao;
@SneakyThrows
@Override
public TallProjectVo.ProjectInfo importWbs(String token, MultipartFile params) {
// //TODO 根据token获取用户信息
// TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, "appId", "secret"));
// //通过手机号获取用户在服务内的userId
ProUser user = new ProUser();
// if(ObjectUtil.isNotNull(userByToken) && StrUtil.isNotBlank(userByToken.getPhone())){
// user = userDao.getUserIdByPhone(userByToken.getPhone());
// }
// if(user == null){
// throw new BaseException(CodeEnum.NOT_LOGIN);
// }
// if(ObjectUtil.isNull(userByToken)){
// throw new BaseException(CodeEnum.NOT_LOGIN);
// }
String ext = FileUtil.extName(params.getOriginalFilename());
if(StrUtil.isEmpty(ext) || !Constant.WbsExcel.WBS_FILE_FORMAT.contains(ext)){
throw new BaseException(BasicsCodeError.FILE_FORMAT_ERROR);
}
//文件路径
String dir = WebConstant.UPLOAD_PROJECT_WBS + File.separator;
String extraPath = DateUtil.format(new Date(), "yyyyMMdd");
String path = extraPath + File.separator + IdUtil.simpleUUID() + "." + ext;
//转成file
File file = new File(dir + extraPath);
if (!file.exists()) {
file.mkdirs();
}
String fullPath = dir + File.separator + path;
FileUtil.writeFromStream(params.getInputStream(), fullPath);
//导入数据库
return importService.importWbs(fullPath,user.getId(),null);
}
@Override
public List<TallProjectVo.ProjectInfo> queryProjectByUser(String token, TallProjectDto.QueryProjectDto param) {
TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, "appId", "secret"));
List<TallProjectVo.ProjectInfo> projectInfos = new ArrayList<>();
TallProjectVo.ProjectInfo projectInfo = new TallProjectVo.ProjectInfo();
projectInfo.setId(1L);
projectInfo.setName("零号项目");
projectInfo.setUrl("http://127.0.0.1:7310");
projectInfo.setBusinessCode("zero");
projectInfo.setDomainCode("tall_dh");
projectInfos.add(projectInfo);
return projectInfos;
}
@Override
public TallRoleVo.QueryRole queryShowRole(String token, TallRoleDto.QueryRoleById param) {
//TODO 通过token向tall获取用户信息,
TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, "appId", "secret"));
if(ObjectUtil.isNull(userByToken)){
throw new BaseException(CodeEnum.NOT_LOGIN);
}
//返回的对象
TallRoleVo.QueryRole queryRole = new TallRoleVo.QueryRole();
List<TallRoleVo.RoleInfo> visibleList = new ArrayList<>();
List<TallRoleVo.RoleInfo> invisibleList = new ArrayList<>();
//查询当前用户在项目下的角色,没有则算作关注者
List<ProRole> userRoleList = proRoleDao.queryRoleByUserId(param.getProjectId(),userByToken.getId());
//查询用户可见的角色
List<TallRoleVo.RoleInfo> roleInfoList = new ArrayList<>();
if(CollectionUtil.isNotEmpty(userRoleList)){
//不是关注者,查询可见的角色(完全屏蔽才不可见)
roleInfoList = proRoleDao.notAttentionQueryRole(param.getProjectId(),userRoleList);
}else {
// //是关注者查询可见的角色(未设置过对谁不可见信息的角色)
// roleInfoList = proRoleDao.attentionQueryRole(param.getProjectId());
//TODO 0号项目游客查看所有,默认属于管理员
ProRoleExample proRoleExample = new ProRoleExample();
proRoleExample.createCriteria().andProjectIdEqualTo(param.getProjectId());
List<ProRole> proRoles = proRoleDao.selectByExample(proRoleExample);
if(CollectionUtil.isNotEmpty(proRoles)){
for (ProRole proRole : proRoles) {
if("管理员".equals(proRole.getName())){
TallRoleVo.RoleInfo roleInfo = new TallRoleVo.RoleInfo();
roleInfo.setId(proRole.getId());
roleInfo.setName(proRole.getName());
roleInfo.setMine(1);
roleInfoList.add(roleInfo);
}
}
}
}
//查询配置信息
List<Long> showRoleList = proRoleDao.queryShowByUserAndProject(param.getProjectId(),userByToken.getId());
if(CollectionUtil.isNotEmpty(showRoleList)){
for (Long showRoleId : showRoleList) {
//循环配置内的信息去匹配角色列表,来确定角色该放在什么地方
for (TallRoleVo.RoleInfo roleInfo : roleInfoList) {
if(showRoleId.equals(roleInfo.getId())){
//和配置内的信息相同则放入展示角色列表
visibleList.add(roleInfo);
//同时删除数组内的信息
roleInfoList.remove(roleInfo);
//跳出循环,开始配置信息内的下一个
break;
}
}
}
//剩下的角色全部放在不可见角色列表
invisibleList.addAll(roleInfoList);
}else {
//没有配置信息则按默认规则
if (CollectionUtil.isNotEmpty(roleInfoList)) {
//循环所有角色
for (TallRoleVo.RoleInfo roleInfo : roleInfoList) {
//如果是项目经理,放入展示的角色
if (roleInfo.getPm() == 1) {
visibleList.add(roleInfo);
continue;
}
//是用户所属的角色,放入展示的角色列表
if (roleInfo.getMine() == 1) {
visibleList.add(roleInfo);
continue;
} else {
//不是用户所属的角色,但展示角色列表数量不足设置的数量
//展示数量等于0,展示全部
if(param.getNum() == 0){
visibleList.add(roleInfo);
continue;
}
//不是用户所属的角色,但展示角色列表数量不足五个,
if (visibleList.size() < param.getNum()) {
visibleList.add(roleInfo);
continue;
}
}
//不满足上面条件的,放入不展示的角色列表
invisibleList.add(roleInfo);
}
}
}
queryRole.setVisibleList(visibleList);
queryRole.setInvisibleList(invisibleList);
return queryRole;
}
@Override
public List<TallTaskVo.QueryTask> queryPermanentGlobalTask(String token, TallTaskDto.QueryPermanentGlobalTask param) {
//TODO 通过token向tall获取用户信息,
Long userId = null;
//查找当前角色是否有查看权限
Boolean isLook = queryRoleIsLook(param.getRoleId(), userId);
if (BooleanUtil.isFalse(isLook)) {
throw new BaseException(CodeEnum.NO_POWER);
}
List<Long> roleIds = new ArrayList<>();
roleIds.add(param.getRoleId());
List<TallTaskVo.QueryTask> permanentGlobalTask = taskDetailDao.queryPermanentGlobalTask(roleIds);
//查找项目面板和插件信息
queryPluginForTask(permanentGlobalTask);
//查询任务下的检查人
queryCheckerOfTask(permanentGlobalTask);
return permanentGlobalTask;
}
@Override
public List<TallTaskVo.QueryTask> queryGlobalTask(String token, TallTaskDto.QueryGlobalTask param) {
//TODO 通过token向tall获取用户信息,
Long userId = null;
//查找当前角色是否有查看权限
Boolean isLook = queryRoleIsLook(param.getRoleId(), userId);
if (BooleanUtil.isFalse(isLook)) {
throw new BaseException(CodeEnum.NO_POWER);
}
List<Long> roleIds = new ArrayList<>();
roleIds.add(param.getRoleId());
//查询当前角色是否项目经理
List<TallTaskVo.QueryTask> globalTask = taskDetailDao.queryGlobalTask(roleIds, param.getTimeNode(), param.getTimeUnit());
queryPluginForTask(globalTask);
//查询任务下的检查人
queryCheckerOfTask(globalTask);
return globalTask;
}
@Override
public List<TallTaskVo.QueryTask> queryRegularTask(String token, TallTaskDto.QueryRegularTask param) {
//TODO 通过token向tall获取用户信息,
Long userId = null;
//查找类型:0向上查找,1向下查找(默认),下查包含自己,上查不包含
//根据参数配置sql语句
String query = "";
String timeFormat = Constant.timeFormat.get(param.getTimeUnit());
String unit = Constant.timeUnit.get(param.getTimeUnit());
if (0 == param.getQueryType()) {
query = "interval -" + param.getQueryNum() + " " + unit;
} else {
query += "interval " + (param.getQueryNum() - 1) + " " + unit;
}
//查找当前角色是否有查看权限
Boolean isLook = queryRoleIsLook(param.getRoleId(), userId);
if (BooleanUtil.isFalse(isLook)) {
throw new BaseException(BasicsCodeError.NOT_PERMISSION);
}
List<Long> roleIds = new ArrayList<>();
roleIds.add(param.getRoleId());
//TODO 季度未实现
List<TallTaskVo.QueryTask> regularTask = taskDetailDao.queryRegularTask(roleIds, param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat);
//如果该时段没有任务向上或向下补充
if (CollectionUtil.isEmpty(regularTask)) {
List<TallTaskVo.QueryTask> replenishTask = taskDetailDao.continueQueryTask(roleIds, param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat);
Map<String, List<TallTaskVo.QueryTask>> taskMap = replenishTask.stream().collect(Collectors.groupingBy(task -> new SimpleDateFormat("yyyy-MM-dd").format(new Date(task.getPlanStart()))));
List<String> mapOfKey = new ArrayList<>();
taskMap.forEach((key, val) -> mapOfKey.add(key));
if (CollectionUtil.isNotEmpty(mapOfKey)) {
if (0 == param.getQueryType()) {
String max = Collections.max(mapOfKey);
queryPluginForTask(taskMap.get(max));
return taskMap.get(max);
} else {
String min = Collections.min(mapOfKey);
queryPluginForTask(taskMap.get(min));
return taskMap.get(min);
}
}
queryPluginForTask(replenishTask);
//查询任务下的检查人
queryCheckerOfTask(replenishTask);
return replenishTask;
}
queryPluginForTask(regularTask);
//查询任务下的检查人
queryCheckerOfTask(regularTask);
return regularTask;
}
/**
* 判断当前用户的角色是否被设置不可见(是否有权限查看任务)
*
* @param roleId 查看的角色id
* @param userId 用户id
* @return 是否可见(true可见, false不可见)
*/
public Boolean queryRoleIsLook(Long roleId, Long userId) {
byte visitor = 0;
Long projectId = roleDao.findRoleOfProjectId(roleId);
if (ObjectUtil.isNull(projectId)) {
throw new BaseException(BasicsCodeError.ROLE_ERROR);
}
Long memberId = memberDao.findUserOfMemberId(projectId, userId);
//不是项目成员则为游客
if (ObjectUtil.isNull(memberId)) {
visitor = 1;
}
//查看角色互斥表是否有对所属角色不可见
List<Long> repulsionRoleIds = roleRepulsionDao.findRepulsionByRoleId(roleId);
//如果为游客
if (1 == visitor) {
return !CollectionUtil.isNotEmpty(repulsionRoleIds);
}
//查找成员所属的所有角色
List<Long> roleIds = roleMemberDao.findMemberOfRoleIds(memberId);
if (CollectionUtil.isEmpty(roleIds)) {
if (CollectionUtil.isNotEmpty(repulsionRoleIds)) {
return false;
}
}
//排斥角色包含所有所属角色则不可见
if (CollectionUtil.isNotEmpty(repulsionRoleIds) && CollectionUtil.isNotEmpty(roleIds)) {
boolean isLook = repulsionRoleIds.containsAll(roleIds);
return !isLook;
}
return true;
}
/**
* 查询任务的插件相关信息
*
* @param taskList 任务列表
*/
public void queryPluginForTask(List<TallTaskVo.QueryTask> taskList) {
if (CollectionUtil.isNotEmpty(taskList)) {
for (TallTaskVo.QueryTask queryTask : taskList) {
List<List<TallTaskVo.TaskPluginInfo>> plugins = new ArrayList<>();
//如果任务面板信息不为空,则根据任务面板的行/列创建二维数组
if (ObjectUtil.isNotNull(queryTask.getPanel())) {
int panelRow = queryTask.getPanel().getRow();
int panelCol = queryTask.getPanel().getCol();
if (0 != panelRow && 0 != panelCol) {
//创建任务面板的二维数组
createSecondPanel(plugins, panelRow, panelCol);
//将插件放入二维数组对应的位置中
List<TallTaskVo.TaskPluginInfo> taskPluginInfoList = taskPluginDao.queryTaskOfPlugin(queryTask.getDetailId());
putDateInList(taskPluginInfoList, plugins, queryTask);
} else {
//根据插件最大的行和列创建二维数组
createPanelByPlugin(queryTask.getDetailId(), plugins, queryTask);
}
} else {
//根据插件最大的行和列创建二维数组
createPanelByPlugin(queryTask.getDetailId(), plugins, queryTask);
}
}
}
}
/**
* 创建面板
*
* @param plugins 插件列表
* @param row
* @param col
*/
public void createSecondPanel(List<List<TallTaskVo.TaskPluginInfo>> plugins, int row, int col) {
for (int i = 0; i < row; i++) {
List<TallTaskVo.TaskPluginInfo> pluginInfoList = new ArrayList<>();
for (int j = 0; j < col; j++) {
pluginInfoList.add(null);
}
plugins.add(pluginInfoList);
}
}
/**
* 查询任务下的检查人
* @param taskList 任务列表
*/
public void queryCheckerOfTask(List<TallTaskVo.QueryTask> taskList) {
if (CollectionUtil.isNotEmpty(taskList)) {
for (TallTaskVo.QueryTask queryTask : taskList) {
List<TallTaskVo.CheckerOfTask> checkerList = roleTaskDao.queryCheckerOfTask(queryTask.getDetailId());
queryTask.setCheckerList(checkerList);
}
}
}
/**
* 向空面板里插入插件详情
*
* @param taskPluginInfoList 插件详情列表
* @param plugins 插件列表
* @param queryTask 任务
*/
public void putDateInList(List<TallTaskVo.TaskPluginInfo> taskPluginInfoList, List<List<TallTaskVo.TaskPluginInfo>> plugins, TallTaskVo.QueryTask queryTask) {
for (TallTaskVo.TaskPluginInfo taskPlugin : taskPluginInfoList) {
int pluginCol = taskPlugin.getCol();
int pluginRow = taskPlugin.getRow();
if (0 == pluginCol || 0 == pluginRow) {
continue;
}
plugins.get(pluginRow - 1).set(pluginCol - 1, taskPlugin);
}
queryTask.setPlugins(plugins);
}
/**
* 根据插件的最大行列创建面板
*
* @param taskDetailId 任务详情id
* @param plugins 插件列表
* @param queryTask 任务
*/
public void createPanelByPlugin(Long taskDetailId, List<List<TallTaskVo.TaskPluginInfo>> plugins, TallTaskVo.QueryTask queryTask) {
List<TallTaskVo.TaskPluginInfo> taskPluginInfoList = taskPluginDao.queryTaskOfPlugin(taskDetailId);
if (CollectionUtil.isNotEmpty(taskPluginInfoList)) {
List<Integer> col = taskPluginInfoList.stream().map(TallTaskVo.TaskPluginInfo::getCol).collect(Collectors.toList());
List<Integer> row = taskPluginInfoList.stream().map(TallTaskVo.TaskPluginInfo::getRow).collect(Collectors.toList());
Integer newCol = Collections.max(col);
Integer newRow = Collections.max(row);
//创建任务面板的二维数组
createSecondPanel(plugins, newRow, newCol);
//将插件放入二维数组对应的位置中
putDateInList(taskPluginInfoList, plugins, queryTask);
}
}
}

4
src/main/java/com/ccsens/ptccsens/util/BasicsCodeError.java

@ -35,11 +35,13 @@ public class BasicsCodeError extends CodeError {
public static final Code NOT_FILE = new Code(525,"找不到文件", true);
public static final Code FINANCE_ERROR = new Code(526,"财务信息错误", true);
public static final Code TOTAL_MONEY_ERROR = new Code(526,"申请总金额和发票总金额不一致,请检查修改后重新提交。", true);
public static final Code CHECK_NOT_FOUND = new Code(527,"没有找到对应的审核记录,请确认后重新提交。", true);
public static final Code CHECK_EXISTED = new Code(528,"您已经提交过审核结果了,无需重复提交。", true);
public static final Code NOT_PERMISSION = new Code(529,"没有权限!", true);
public static final Code ROLE_ERROR = new Code(530,"角色信息错误!", true);

123
src/main/java/com/ccsens/ptccsens/util/Constant.java

@ -0,0 +1,123 @@
package com.ccsens.ptccsens.util;
import java.util.HashMap;
import java.util.Map;
/**
* 常量相关
* @author AUSU
*/
public class Constant {
/**零号项目Id*/
public static Long ZERO_PROJECT_ID = 1484800783814889472L;
/**引导页任务名*/
public static String ZERO_GUIDE = "引导页";
/**广告页任务名*/
public static String ZERO_ADVERTISING = "广告页";
public static Map<Integer, String> timeUnit = new HashMap<>();
public static Map<Integer, String> timeFormat = new HashMap<>();
static {
timeUnit.put(1,"SECOND");
timeUnit.put(2,"MINUTE");
timeUnit.put(3,"HOUR");
timeUnit.put(4,"DAY");
timeUnit.put(5,"WEEK");
timeUnit.put(6,"MONTH");
timeUnit.put(7,"QUARTER");
timeUnit.put(8,"YEAR");
timeFormat.put(1,"%Y-%m-%d %h:%m:%s");
timeFormat.put(2,"%Y-%m-%d %h:%m");
timeFormat.put(3,"%Y-%m-%d %h");
timeFormat.put(4,"%Y-%m-%d");
timeFormat.put(5,"%Y-%u");
timeFormat.put(6,"%Y-%m");
timeFormat.put(7,"7");
timeFormat.put(8,"%Y");
}
public static final class TaskType {
/**未开始*/
public static final byte PENDING = 0;
/**进行中*/
public static final byte PROCESSING = 1;
/**暂停中*/
public static final byte PAUSE = 2;
/**已结束*/
public static final byte COMPLETED = 3;
}
public static final class TaskOperationType {
/**开始*/
public static final byte START = 0;
/**暂停*/
public static final byte PAUSE = 1;
/**继续*/
public static final byte TASK_CONTINUE = 2;
/**完成*/
public static final byte COMPLETE = 3;
}
public static final class MessageType {
/**修改任务状态*/
public static final String TASK_STATUS = "taskStatus";
/**上传交付物*/
public static final String UPLOAD_DELIVER = "uploadDeliver";
/**检查交付物*/
public static final String CHECKER_DELIVER = "checkerDeliver";
}
public enum ROLE_LEVEL {
/**系统角色*/
MEMBER((byte)0,"项目成员"),PM((byte)1,"项目经理"),STAKEHOLDER((byte)2,"干系人"),PIPE((byte)3,"管带"),GOD((byte)4,"上帝");
public Byte value;
public String phase;
ROLE_LEVEL(Byte value, String thePhase){
this.value =value;
this.phase = thePhase;
}
}
public static final Long SPRCTATOR_ID = 0L;
public static final String SPRCTATOR = "观众";
/**图片类型*/
public static final String FILE_TYPE_IMG = "bmp,jpg,jpeg,png,tif,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw,WMF,webp";
/**文档类型*/
public static final String FILE_TYPE_DOCUMENT = "doc, dot, wps, wpt, docx, dotx, docm, dotm, xls, xlt, et, xlsx, xltx, csv, xlsm, xltm, ppt,pptx,pptm,ppsx,ppsm,pps,potx,potm,dpt,dps, pdf";
/**验证手机正则*/
public static final String PHONE_REGEX = "^[1]([3-9])[0-9]{9}$";
/**字符串分隔符*/
public static final String STRING_REGEX = ",|,|;|;|、|/";
/**wbs相关*/
public static final class WbsExcel {
/**wbsSheet*/
public static final String WBS_SHEET = "WBS";
/**项目成员Sheet*/
public static final String MEMBER_SHEET = "项目成员表";
/**项目信息头*/
public static final String PROJECT_INFO_TITLE = "项目信息";
/**任务信息头*/
public static final String TASK_INFO_TITLE = "项目任务分解";
/**excel文件格式验证*/
public static final String WBS_FILE_FORMAT = "xls,xlsx";
/**插件配置表*/
public static final String WBS_PLUGIN_CONFIG = "插件配置表";
}
/**wbs表时长对应关系表*/
public static final Map<String, Long> WBS_DURATION = new HashMap<>();
static {
WBS_DURATION.put("s",1000L);
WBS_DURATION.put("min",60 * 1000L);
WBS_DURATION.put("h",60 * 60 * 1000L);
WBS_DURATION.put("d",24 * 60 * 60 * 1000L);
WBS_DURATION.put("w",7 * 24 * 60 * 60 * 1000L);
WBS_DURATION.put("m",30 * 24 * 60 * 60 * 1000L);
WBS_DURATION.put("y",365 * 24 * 60 * 60 * 1000L);
}
}

37
src/main/resources/mapper_dao/LabelBusinessDao.xml

@ -0,0 +1,37 @@
<?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.ptccsens.persist.dao.LabelBusinessDao">
<insert id="insertAllBusinessLabel">
INSERT INTO t_label_business (
id,
label_id,
user_id,
business_type,
business_id
)
VALUES
<foreach collection="businessLabelList" item="item" separator=",">
(#{item.id},#{item.labelId},#{item.userId},#{item.businessType},#{item.businessId})
</foreach>
</insert>
<select id="findBusinessLabelByBid" resultType="com.ccsens.ptccsens.bean.po.LabelBusiness">
SELECT
id,
label_id,
user_id,
business_type,
business_id
FROM
t_label_business
WHERE
rec_status=0
AND
business_id IN
<foreach collection="businessIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper>

49
src/main/resources/mapper_dao/LabelDao.xml

@ -0,0 +1,49 @@
<?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.ptccsens.persist.dao.LabelDao">
<update id="delByBusinessIdAndType">
UPDATE
t_label_business
SET
rec_status = 2
WHERE
business_id = #{businessId}
and business_type = #{type}
</update>
<select id="queryIsPm" resultType="String">
select t_label.description
from t_label,t_label_type
where t_label.id=#{labelId}
and t_label.`level` = 1
and t_label.label_type_id=t_label_type.id
</select>
<select id="getLabelByTypeAndLevel" resultType="java.lang.Long">
SELECT
l.id
FROM
t_label l
LEFT JOIN t_label_type lt on l.label_type_id = lt.id
WHERE
lt.label_type = #{type}
and
l.level = #{level}
limit 1
</select>
<select id="getLabelByName" resultType="java.lang.Long">
SELECT
l.id
FROM
t_label l
LEFT JOIN t_label_type lt on l.label_type_id = lt.id
WHERE
lt.label_type = #{type}
and
l.description = #{sysRole}
limit 1
</select>
</mapper>

20
src/main/resources/mapper_dao/PluginDao.xml

@ -14,4 +14,24 @@
AND tp.task_detail_id = #{taskDetailId}
</select>
<select id="getPluginIdByName" resultType="java.lang.Long">
SELECT
id
FROM
`plugin`.t_pro_plugin
WHERE
`name` = #{pluginName}
and rec_status = 0
limit 1
</select>
<update id="updateParamById">
update
t_pro_task_plugin
set
param = #{param}
where
id = #{taskPluginId}
and rec_status = 0
</update>
</mapper>

10
src/main/resources/mapper_dao/ProMemberDao.xml

@ -12,4 +12,14 @@
AND user_id = #{userId}
limit 1
</select>
<select id="queryMembersOfProject" resultType="java.lang.Long">
SELECT
id
FROM
t_pro_member
WHERE
rec_status = 0
AND project_id = #{projectId}
</select>
</mapper>

59
src/main/resources/mapper_dao/ProParentTaskDao.xml

@ -0,0 +1,59 @@
<?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.ptccsens.persist.dao.ProParentTaskDao">
<insert id="insertAllParentTask">
INSERT INTO t_pro_parent_task (
id,
task_detail_id,
parent_task_detail_id
)
VALUES
<foreach collection="newParentTaskList" item="item" separator=",">
(#{item.id},#{item.taskDetailId},#{item.parentTaskDetailId})
</foreach>
</insert>
<!-- <select id="findTaskByParentId" resultType="com.ccsensptos.tallsdk.bean.vo.TallTaskVo$TaskDetail">-->
<!-- SELECT-->
<!-- d.id AS detailId,-->
<!-- d.`name`,-->
<!-- d.description,-->
<!-- d.cycle,-->
<!-- pt.id AS parentTaskId,-->
<!-- pt.parent_task_detail_id AS parentTaskDetailId-->
<!-- FROM-->
<!-- t_pro_parent_task AS pt-->
<!-- LEFT JOIN t_pro_task_detail AS d ON d.id = pt.task_detail_id-->
<!-- WHERE-->
<!-- pt.parent_task_detail_id = #{oldProjectId}-->
<!-- AND pt.rec_status = 0 AND d.rec_status = 0-->
<!-- </select>-->
<select id="queryAllTaskIdByProjectId" resultType="java.lang.Long">
SELECT
task_detail_id
FROM
t_pro_parent_task
WHERE
rec_status = 0
AND parent_task_detail_id = #{projectId}
UNION ALL
SELECT
task_detail_id
FROM
t_pro_parent_task
WHERE
rec_status = 0
AND parent_task_detail_id IN (
SELECT
task_detail_id
FROM
t_pro_parent_task
WHERE
rec_status = 0
AND parent_task_detail_id = #{projectId}
)
</select>
</mapper>

103
src/main/resources/mapper_dao/ProRoleDao.xml

@ -0,0 +1,103 @@
<?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.ptccsens.persist.dao.ProRoleDao">
<select id="findRoleOfProjectId" resultType="java.lang.Long">
SELECT
project_id
FROM
t_pro_role
WHERE
rec_status = 0
AND id = #{roleId}
</select>
<select id="queryRoleByUserId" resultType="com.ccsens.ptccsens.bean.po.ProRole">
SELECT
r.id,
r.`name`
FROM
t_pro_role r
LEFT JOIN t_pro_role_member rm on rm.role_id = r.id
LEFT JOIN t_pro_member m on m.id = rm.member_id
WHERE
r.project_id = #{projectId}
and m.user_id = #{userId}
and m.project_id = #{projectId}
and r.rec_status = 0
and rm.rec_status = 0
and m.rec_status = 0
</select>
<select id="notAttentionQueryRole" resultType="com.ccsensptos.tallsdk.bean.vo.TallRoleVo$RoleInfo">
SELECT
r.id,
r.`name`,
if(l.`level` = 0,0,1) as pm,
if(r.id in
<foreach collection="userRoleList" index="index" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
,1,0) as mine
FROM
t_pro_role r
LEFT JOIN t_label l on r.label_id = l.id
LEFT JOIN t_pro_role_repulsion rr on r.id = rr.role_id and rr.rec_status = 0
and rr.repulsion_role_id in
<foreach collection="userRoleList" index="index" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
WHERE
r.project_id = #{projectId}
and r.rec_status = 0
and l.`level` &lt; 2
and l.rec_status = 0
and
(
rr.repulsion_role_id not in
<foreach collection="userRoleList" index="index" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
or
rr.id is null
)
GROUP BY r.id
ORDER BY pm DESC,mine DESC,r.id
</select>
<select id="attentionQueryRole" resultType="com.ccsensptos.tallsdk.bean.vo.TallRoleVo$RoleInfo">
SELECT
r.id,
r.`name`,
if(l.`level` = 0,0,1) as pm,
0 as mine
FROM
t_pro_role r
LEFT JOIN t_label l on r.label_id = l.id
LEFT JOIN t_pro_role_repulsion rr on r.id = rr.role_id and rr.rec_status = 0
WHERE
r.project_id = #{projectId}
and r.rec_status = 0
and l.`level` &lt; 2
and l.rec_status = 0
and rr.id is null
GROUP BY r.id
</select>
<select id="queryShowByUserAndProject" resultType="java.lang.Long">
SELECT
*
FROM
t_pro_role_show
WHERE
project_id = #{projectId}
and user_id = #{userId}
</select>
<select id="queryRoleListOfProject" resultType="java.lang.Long">
SELECT
id
FROM
t_pro_role
WHERE
rec_status = 0
AND project_id = #{projectId}
</select>
</mapper>

45
src/main/resources/mapper_dao/ProRoleMemberDao.xml

@ -0,0 +1,45 @@
<?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.ptccsens.persist.dao.ProRoleMemberDao">
<update id="delByRoleId">
update
t_pro_role_member
set
rec_status = 2
where
role_id = #{roleId}
</update>
<!-- <update id="delByMemberId">-->
<!-- update-->
<!-- t_pro_role_member-->
<!-- set-->
<!-- rec_status = 2-->
<!-- where-->
<!-- member_id = #{memberId}-->
<!-- </update>-->
<select id="findMemberOfRoleIds" resultType="java.lang.Long">
SELECT
role_id
FROM
t_pro_role_member
WHERE
rec_status = 0
AND member_id = #{memberId}
</select>
<!-- <select id="queryByRoleAndMember" resultType="com.ccsens.common.bean.po.ProRoleMember">-->
<!-- SELECT-->
<!-- id,-->
<!-- role_id,-->
<!-- member_id,-->
<!-- operator-->
<!-- FROM-->
<!-- t_pro_role_member-->
<!-- WHERE-->
<!-- rec_status = 0-->
<!-- AND role_id = #{roleId}-->
<!-- AND member_id = #{memberId}-->
<!-- </select>-->
</mapper>

43
src/main/resources/mapper_dao/ProRoleRepulsionDao.xml

@ -0,0 +1,43 @@
<?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.ptccsens.persist.dao.ProRoleRepulsionDao">
<!-- <insert id="insertRoleRepulsionList">-->
<!-- INSERT INTO t_pro_role_repulsion (-->
<!-- id,-->
<!-- role_id,-->
<!-- repulsion_role_id,-->
<!-- operator-->
<!-- )-->
<!-- VALUES-->
<!-- <foreach collection="newRoleRepulsionList" item="item" separator=",">-->
<!-- (#{item.id},#{item.roleId},#{item.repulsionRoleId},#{item.operator})-->
<!-- </foreach>-->
<!-- </insert>-->
<select id="findRepulsionByRoleId" resultType="java.lang.Long">
SELECT
repulsion_role_id
FROM
t_pro_role_repulsion
WHERE
rec_status = 0
AND role_id = #{roleId}
</select>
<!-- <select id="findRepulsionByRoleIdList" resultType="com.ccsens.common.bean.po.ProRoleRepulsion">-->
<!-- SELECT-->
<!-- id,-->
<!-- role_id,-->
<!-- repulsion_role_id,-->
<!-- operator-->
<!-- FROM-->
<!-- t_pro_role_repulsion-->
<!-- WHERE-->
<!-- rec_status = 0-->
<!-- AND role_id IN-->
<!-- <foreach collection="oldRoleList" index="index" item="item" open="(" separator="," close=")">-->
<!-- #{item.id}-->
<!-- </foreach>-->
<!-- </select>-->
</mapper>

71
src/main/resources/mapper_dao/ProRoleTaskDao.xml

@ -0,0 +1,71 @@
<?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.ptccsens.persist.dao.ProRoleTaskDao">
<!-- <insert id="insertAllRoleTask">-->
<!-- INSERT INTO t_pro_role_task (-->
<!-- id,-->
<!-- role_id,-->
<!-- task_id,-->
<!-- operator-->
<!-- )-->
<!-- VALUES-->
<!-- <foreach collection="roleTaskList" item="item" separator=",">-->
<!-- (#{item.id},#{item.roleId},#{item.taskId},#{item.operator})-->
<!-- </foreach>-->
<!-- </insert>-->
<!-- <update id="delByTaskDetailIdAndType">-->
<!-- update-->
<!-- t_pro_role_task-->
<!-- set-->
<!-- rec_status = 2-->
<!-- where-->
<!-- task_id = #{detailId}-->
<!-- and role_duty = #{roleDuty}-->
<!-- </update>-->
<!-- <select id="findRoleTaskByRoleId" resultType="com.ccsens.common.bean.po.ProRoleTask">-->
<!-- SELECT-->
<!-- id,-->
<!-- role_id,-->
<!-- task_id,-->
<!-- operator-->
<!-- FROM-->
<!-- t_pro_role_task-->
<!-- WHERE-->
<!-- rec_status = 0-->
<!-- AND role_id IN-->
<!-- <foreach collection="roleIds" index="index" item="item" open="(" separator="," close=")">-->
<!-- #{item}-->
<!-- </foreach>-->
<!-- </select>-->
<!-- <select id="isMyTask" resultType="java.lang.Long">-->
<!-- SELECT-->
<!-- id-->
<!-- FROM-->
<!-- t_pro_role_task-->
<!-- WHERE-->
<!-- task_id = #{taskDetailId}-->
<!-- AND role_id IN-->
<!-- <foreach collection="roleIdList" item="id" open="(" separator="," close=")">-->
<!-- #{id}-->
<!-- </foreach>-->
<!-- </select>-->
<select id="queryCheckerOfTask" resultType="com.ccsensptos.tallsdk.bean.vo.TallTaskVo$CheckerOfTask">
SELECT
r.id,
r.`name`
FROM
t_pro_role_task AS rt
LEFT JOIN t_pro_role AS r ON r.id = rt.role_id
WHERE
rt.rec_status = 0
AND r.rec_status = 0
AND rt.task_id = #{detailId}
AND rt.role_duty = 1
</select>
</mapper>

368
src/main/resources/mapper_dao/ProTaskDetailDao.xml

@ -22,4 +22,372 @@
and b.rec_status = 0
limit 1
</select>
<resultMap id="queryTask" type="com.ccsensptos.tallsdk.bean.vo.TallTaskVo$QueryTask">
<id column="id" property="id"/>
<result column="detailId" property="detailId"/>
<result column="name" property="name"/>
<result column="description" property="description"/>
<result column="planStart" property="planStart"/>
<result column="plan_duration" property="planDuration"/>
<result column="plan_end_time" property="planEnd"/>
<result column="realStart" property="realStart"/>
<result column="real_duration" property="realDuration"/>
<result column="real_end_time" property="realEnd"/>
<result column="process" property="process"/>
<result column="skip" property="skip"/>
<result column="skipTaskId" property="skipTaskId"/>
<collection property="panel" ofType="com.ccsensptos.tallsdk.bean.vo.TallTaskVo$PanelInfo">
<result column="backgroundColor" property="backgroundColor"/>
<result column="borderRadius" property="borderRadius"/>
<result column="border" property="border"/>
<result column="shadow" property="shadow"/>
<result column="width" property="width"/>
<result column="height" property="height"/>
<result column="row" property="row"/>
<result column="col" property="col"/>
</collection>
</resultMap>
<!-- <insert id="insertAllTaskDetail">-->
<!-- INSERT INTO t_pro_task_detail (-->
<!-- id,-->
<!-- `name`,-->
<!-- description,-->
<!-- cycle-->
<!-- )-->
<!-- VALUES-->
<!-- <foreach collection="newTaskDetailList" item="item" separator=",">-->
<!-- (#{item.id},#{item.name},#{item.description},#{item.cycle})-->
<!-- </foreach>-->
<!-- </insert>-->
<select id="queryPermanentGlobalTask" resultMap="queryTask">
SELECT
ts.id,
td.id AS detailId,
td.`name`,
td.description,
ts.plan_start_time AS planStart,
ts.plan_duration,
ts.plan_end_time,
ts.real_start_time AS realStart,
ts.real_duration,
ts.real_end_time,
ts.task_status AS process,
tf.flow_type AS skip,
tf.jump_task_detail_id AS skipTaskId,
tpi.back_color AS backgroundColor,
tpi.round_corner AS borderRadius,
tpi.border AS border,
tpi.shadow AS shadow,
tpi.width AS width,
tpi.height AS height,
tpi.`row` AS `row`,
tpi.col AS col
FROM
t_pro_task_detail AS td
LEFT JOIN t_pro_task_sub AS ts ON ts.task_detail_id = td.id
LEFT JOIN t_pro_task_flow AS tf ON tf.task_detail_id = td.id AND tf.rec_status = 0
LEFT JOIN t_pro_role_task AS rt ON rt.task_id = td.id
LEFT JOIN t_pro_task_panel_info AS tpi ON tpi.task_detail_id = td.id AND tpi.rec_status = 0
LEFT JOIN t_label_business AS lb ON td.id = lb.business_id
LEFT JOIN t_label AS l ON l.id = lb.label_id
LEFT JOIN t_label_type AS lt ON lt.id = l.label_type_id
WHERE
td.rec_status = 0 AND ts.rec_status = 0 AND lb.rec_status = 0 AND l.rec_status = 0 AND lt.rec_status = 0 AND rt.rec_status = 0
AND lb.business_type = 0
AND l.`level` = 2
AND lt.label_type = 1
AND ts.plan_start_time = 0
AND ts.plan_duration = 0
AND rt.role_id IN
<foreach collection="roleIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
ORDER BY ts.plan_start_time
</select>
<select id="queryGlobalTask" resultMap="queryTask">
SELECT
alltask.*
FROM
(
SELECT
ts.id,
td.id AS detailId,
td.`name`,
td.description,
ts.plan_start_time AS planStart,
ts.plan_duration,
ts.plan_end_time,
ts.real_end_time,
ts.real_start_time AS realStart,
ts.real_duration,
ts.task_status AS process,
tf.flow_type AS skip,
tf.jump_task_detail_id AS skipTaskId,
tpi.back_color AS backgroundColor,
tpi.round_corner AS borderRadius,
tpi.border AS border,
tpi.shadow AS shadow,
tpi.width AS width,
tpi.height AS height,
tpi.`row` AS `row`,
tpi.col AS col
FROM
t_pro_task_detail AS td
LEFT JOIN t_pro_task_sub AS ts ON ts.task_detail_id = td.id
LEFT JOIN t_pro_task_flow AS tf ON tf.task_detail_id = td.id
AND tf.rec_status = 0
LEFT JOIN t_pro_role_task AS rt ON rt.task_id = td.id
LEFT JOIN t_pro_task_panel_info AS tpi ON tpi.task_detail_id = td.id
AND tpi.rec_status = 0
LEFT JOIN t_label_business AS lb ON td.id = lb.business_id
LEFT JOIN t_label AS l ON l.id = lb.label_id
LEFT JOIN t_label_type AS lt ON lt.id = l.label_type_id
WHERE
td.rec_status = 0
AND ts.rec_status = 0
AND lb.rec_status = 0
AND l.rec_status = 0
AND lt.rec_status = 0
AND rt.rec_status = 0
AND lb.business_type = 0
AND l.`level` = 2
AND lt.label_type = 1
AND ts.plan_start_time != 0
AND ts.plan_duration != 0
AND rt.role_id IN
<foreach collection="roleIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
AND ts.plan_start_time &lt;= #{timeNode}
AND ts.plan_end_time &gt;= #{timeNode}
) AS alltask
LEFT JOIN t_label_business AS llbb ON alltask.detailId = llbb.business_id
LEFT JOIN t_label AS ll ON llbb.label_id = ll.id
LEFT JOIN t_label_type AS lltt ON ll.label_type_id = lltt.id
WHERE
llbb.rec_status = 0
AND ll.rec_status = 0
AND lltt.rec_status = 0
AND lltt.label_type = 0
AND llbb.business_type = 0
AND ll.`level` >= #{timeUnit}
ORDER BY alltask.planStart
</select>
<select id="queryRegularTask" resultMap="queryTask">
SELECT
alltask.*
FROM
(
SELECT
ts.id,
td.id AS detailId,
td.`name`,
td.description,
ts.plan_start_time AS planStart,
ts.plan_duration,
ts.plan_end_time,
ts.real_end_time,
ts.real_start_time AS realStart,
ts.real_duration,
ts.task_status AS process,
tf.flow_type AS skip,
tf.jump_task_detail_id AS skipTaskId,
tpi.back_color AS backgroundColor,
tpi.round_corner AS borderRadius,
tpi.border AS border,
tpi.shadow AS shadow,
tpi.width AS width,
tpi.height AS height,
tpi.`row` AS `row`,
tpi.col AS col
FROM
t_pro_task_detail AS td
LEFT JOIN t_pro_task_sub AS ts ON ts.task_detail_id = td.id
LEFT JOIN t_pro_task_flow AS tf ON tf.task_detail_id = td.id AND tf.rec_status = 0
LEFT JOIN t_pro_role_task AS rt ON rt.task_id = td.id
LEFT JOIN t_pro_task_panel_info AS tpi ON tpi.task_detail_id = td.id AND tpi.rec_status = 0
LEFT JOIN t_label_business AS lb ON td.id = lb.business_id
LEFT JOIN t_label AS l ON l.id = lb.label_id
LEFT JOIN t_label_type AS lt ON lt.id = l.label_type_id
WHERE
td.rec_status = 0
AND ts.rec_status = 0
AND lb.rec_status = 0
AND l.rec_status = 0
AND lt.rec_status = 0
AND rt.rec_status = 0
AND lb.business_type = 0
AND l.`level` = 3
AND lt.label_type = 1
AND ts.plan_start_time != 0
AND ts.plan_duration != 0
AND rt.role_id IN
<foreach collection="roleIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="queryType==0 and timeUnit != 7">
AND FROM_UNIXTIME(plan_start_time/1000,#{timeFormat}) &lt;= FROM_UNIXTIME((#{timeNode}-86400000)/1000,#{timeFormat})
AND FROM_UNIXTIME(plan_start_time/1000,#{timeFormat}) &gt;= DATE_ADD(FROM_UNIXTIME(#{timeNode}/1000,#{timeFormat}),${query})
</if>
<if test="queryType==1 and timeUnit != 7">
AND FROM_UNIXTIME(plan_start_time/1000,#{timeFormat}) &gt;= FROM_UNIXTIME(#{timeNode}/1000,#{timeFormat})
AND FROM_UNIXTIME(plan_start_time/1000,#{timeFormat}) &lt;=DATE_ADD(FROM_UNIXTIME(#{timeNode}/1000,#{timeFormat}),${query})
</if>
<if test="queryType==0 and timeUnit == 7">
AND CONCAT(FROM_UNIXTIME(plan_start_time/1000,'%Y'),QUARTER(FROM_UNIXTIME(plan_start_time/1000))) &lt;= CONCAT(FROM_UNIXTIME(plan_start_time/1000,'%Y'),QUARTER(FROM_UNIXTIME(plan_start_time/1000)))
AND CONCAT(FROM_UNIXTIME(plan_start_time/1000,'%Y'),QUARTER(FROM_UNIXTIME(plan_start_time/1000))) &gt;= DATE_ADD(FROM_UNIXTIME(#{timeNode}/1000,#{timeFormat}),${query})
</if>
<if test="queryType==1 and timeUnit == 7">
AND FROM_UNIXTIME(plan_start_time/1000,#{timeFormat}) &gt;= FROM_UNIXTIME(#{timeNode}/1000,#{timeFormat})
AND FROM_UNIXTIME(plan_start_time/1000,#{timeFormat}) &lt;=DATE_ADD(FROM_UNIXTIME(#{timeNode}/1000,#{timeFormat}),${query})
</if>
) AS alltask
LEFT JOIN t_label_business AS llbb ON alltask.detailId = llbb.business_id
LEFT JOIN t_label AS ll ON llbb.label_id = ll.id
LEFT JOIN t_label_type AS lltt ON ll.label_type_id = lltt.id
WHERE
llbb.rec_status = 0
AND ll.rec_status = 0
AND lltt.rec_status = 0
AND lltt.label_type = 0
AND llbb.business_type = 0
AND ll.`level` >= #{timeUnit}
ORDER BY alltask.planStart
</select>
<select id="continueQueryTask" resultMap="queryTask">
SELECT
alltask.*
FROM
(
SELECT
ts.id,
td.id AS detailId,
td.`name`,
td.description,
ts.plan_start_time AS planStart,
ts.plan_duration,
ts.plan_end_time,
ts.real_end_time,
ts.real_start_time AS realStart,
ts.real_duration,
ts.task_status AS process,
tf.flow_type AS skip,
tf.jump_task_detail_id AS skipTaskId,
tpi.back_color AS backgroundColor,
tpi.round_corner AS borderRadius,
tpi.border AS border,
tpi.shadow AS shadow,
tpi.width AS width,
tpi.height AS height,
tpi.`row` AS `row`,
tpi.col AS col
FROM
t_pro_task_detail AS td
LEFT JOIN t_pro_task_sub AS ts ON ts.task_detail_id = td.id
LEFT JOIN t_pro_task_flow AS tf ON tf.task_detail_id = td.id AND tf.rec_status = 0
LEFT JOIN t_pro_role_task AS rt ON rt.task_id = td.id
LEFT JOIN t_pro_task_panel_info AS tpi ON tpi.task_detail_id = td.id AND tpi.rec_status = 0
LEFT JOIN t_label_business AS lb ON td.id = lb.business_id
LEFT JOIN t_label AS l ON l.id = lb.label_id
LEFT JOIN t_label_type AS lt ON lt.id = l.label_type_id
WHERE
td.rec_status = 0
AND ts.rec_status = 0
AND lb.rec_status = 0
AND l.rec_status = 0
AND lt.rec_status = 0
AND rt.rec_status = 0
AND lb.business_type = 0
AND l.`level` = 3
AND lt.label_type = 1
AND ts.plan_start_time != 0
AND ts.plan_duration != 0
AND rt.role_id IN
<foreach collection="roleIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="queryType==0 and timeUnit != 7">
AND FROM_UNIXTIME(ts.plan_start_time / 1000 ,#{timeFormat}) &lt;= FROM_UNIXTIME((#{timeNode}-86400000)/ 1000 ,#{timeFormat})
</if>
<if test="queryType==1 and timeUnit != 7">
AND FROM_UNIXTIME(ts.plan_start_time / 1000 ,#{timeFormat}) &gt;= FROM_UNIXTIME((#{timeNode})/ 1000 ,#{timeFormat})
</if>
) AS alltask
LEFT JOIN t_label_business AS llbb ON alltask.detailId = llbb.business_id
LEFT JOIN t_label AS ll ON llbb.label_id = ll.id
LEFT JOIN t_label_type AS lltt ON ll.label_type_id = lltt.id
WHERE
llbb.rec_status = 0
AND ll.rec_status = 0
AND lltt.rec_status = 0
AND lltt.label_type = 0
AND llbb.business_type = 0
AND ll.`level` >= #{timeUnit}
ORDER BY alltask.planStart
</select>
<insert id="insertSelectiveList">
INSERT INTO t_pro_task_sub
(
id,
task_detail_id,
plan_start_time,
plan_end_time,
plan_duration
)
VALUES
<foreach collection="proTaskSubList" item="item" separator=",">
(#{item.id},#{item.taskDetailId},#{item.planStartTime},#{item.planEndTime},#{item.planDuration})
</foreach>
</insert>
<select id="getNowTask" resultType="java.lang.Long">
SELECT
s.id
FROM
t_pro_task_detail d
LEFT JOIN t_pro_parent_task p on d.id = p.task_detail_id
LEFT JOIN (SELECT * FROM t_pro_parent_task WHERE parent_task_detail_id = #{projectId}) p1 on p.parent_task_detail_id = p1.task_detail_id
LEFT JOIN
t_pro_task_sub s on d.id = s.task_detail_id and s.rec_status = 0
WHERE
`name` = #{taskName}
and s.plan_start_time &lt;= #{now}
and s.plan_end_time &gt;= #{now}
and d.rec_status = 0
and p.rec_status = 0
and p1.rec_status = 0
limit 1
</select>
<select id="queryTaskOfProject" resultType="com.ccsens.ptccsens.bean.vo.TaskVo$TaskOfProject">
SELECT
t.id AS detailId,
t.`name`
FROM
t_pro_parent_task AS p
LEFT JOIN t_pro_task_detail AS t ON t.id = p.task_detail_id
WHERE
p.rec_status = 0
AND t.rec_status = 0
AND p.parent_task_detail_id IN (
SELECT
pp.task_detail_id
FROM
t_pro_parent_task AS pp
WHERE
pp.parent_task_detail_id = #{projectId}
AND pp.rec_status = 0
)
AND t.`name` LIKE CONCAT('%',#{name},'%')
</select>
</mapper>

67
src/main/resources/mapper_dao/ProTaskPluginDao.xml

@ -0,0 +1,67 @@
<?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.ptccsens.persist.dao.ProTaskPluginDao">
<!-- <insert id="insertAllTaskPlugin">-->
<!-- INSERT INTO t_pro_task_plugin (-->
<!-- id,-->
<!-- param,-->
<!-- plgin_row,-->
<!-- plgin_col,-->
<!-- task_detail_id,-->
<!-- plugin_id,-->
<!-- colspan,-->
<!-- rowspan-->
<!-- )-->
<!-- VALUES-->
<!-- <foreach collection="taskPluginList" item="item" separator=",">-->
<!-- (#{item.id},#{item.param},#{item.plginRow},#{item.plginCol},#{item.taskDetailId},#{item.pluginId},#{item.colspan},#{item.rowspan})-->
<!-- </foreach>-->
<!-- </insert>-->
<!-- <update id="delByTaskDetailId">-->
<!-- update-->
<!-- t_pro_task_plugin-->
<!-- set-->
<!-- rec_status = 2-->
<!-- where-->
<!-- task_detail_id = #{taskDetailId}-->
<!-- </update>-->
<select id="queryTaskOfPlugin" resultType="com.ccsensptos.tallsdk.bean.vo.TallTaskVo$TaskPluginInfo">
SELECT
tp.plugin_id AS pluginId,
tp.param As param,
tp.plgin_row AS `row`,
tp.plgin_col AS col,
tp.colspan AS colspan,
tp.rowspan AS rowspan,
tp.id AS pluginTaskId
FROM
t_pro_task_plugin AS tp
LEFT JOIN t_pro_task_detail AS td ON td.id = tp.task_detail_id
WHERE td.rec_status = 0 AND tp.rec_status = 0
AND tp.task_detail_id = #{detailTaskId}
</select>
<!-- <select id="findPluginByTaskIdList" resultType="com.ccsens.common.bean.po.ProTaskPlugin">-->
<!-- SELECT-->
<!-- id,-->
<!-- param,-->
<!-- plgin_row,-->
<!-- plgin_col,-->
<!-- task_detail_id,-->
<!-- plugin_id,-->
<!-- colspan,-->
<!-- rowspan-->
<!-- FROM-->
<!-- t_pro_task_plugin-->
<!-- WHERE-->
<!-- rec_status = 0-->
<!-- AND task_detail_id IN-->
<!-- <foreach collection="oldTaskIdList" index="index" item="item" open="(" separator="," close=")">-->
<!-- #{item}-->
<!-- </foreach>-->
<!-- </select>-->
</mapper>

63
src/main/resources/mapper_dao/ProTaskSubDao.xml

@ -0,0 +1,63 @@
<?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.ptccsens.persist.dao.ProTaskSubDao">
<insert id="insertAllTaskSub">
INSERT INTO t_pro_task_sub (
id,
plan_start_time,
plan_duration,
plan_end_time,
task_detail_id
)
VALUES
<foreach collection="newTaskSubList" item="item" separator=",">
(#{item.id},#{item.planStartTime},#{item.planDuration},#{item.planEndTime},#{item.taskDetailId})
</foreach>
</insert>
<update id="deleteOldSubTask">
update
t_pro_task_sub
set
rec_status = 2
where
task_detail_id = #{taskDetailId}
</update>
<select id="findSubTaskByDetail" resultType="com.ccsens.ptccsens.bean.po.ProTaskSub">
SELECT
id,
plan_start_time,
plan_duration,
plan_end_time,
task_detail_id
FROM
t_pro_task_sub
WHERE
rec_status = 0
AND task_detail_id = #{id}
</select>
<select id="findNextTaskSub" resultType="com.ccsens.ptccsens.bean.po.ProTaskSub">
SELECT
s.id,
s.plan_start_time,
s.plan_duration,
s.plan_end_time,
s.real_start_time,
s.real_duration,
s.real_end_time,
s.task_detail_id
FROM
t_pro_task_detail AS d
LEFT JOIN t_pro_task_sub AS s ON d.id = s.task_detail_id
WHERE
d.rec_status = 0
AND s.rec_status = 0
AND s.task_status = 0
AND d.id = #{nextTaskDetailId}
AND s.plan_start_time &gt;= #{planTime}
LIMIT 1
</select>
</mapper>

23
src/main/resources/mapper_dao/ProTaskVersionDao.xml

@ -0,0 +1,23 @@
<?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.ptccsens.persist.dao.ProTaskVersionDao">
<select id="findVersionByProjectId" resultType="com.ccsens.ptccsens.bean.po.ProTaskVersion">
SELECT
id,
task_detail_id,
task_version_info,
project_type,
address
FROM
t_pro_task_version
WHERE
rec_status = 0
AND task_detail_id = #{projectId}
ORDER BY
created_at DESC
LIMIT 1
</select>
</mapper>

50
src/main/resources/mapper_dao/ProjectDao.xml

@ -0,0 +1,50 @@
<?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.ptccsens.persist.dao.ProjectDao">
<update id="updateStatusById">
UPDATE t_pro_task_detail
SET rec_status = 2
WHERE
id = #{projectId}
</update>
<select id="queryByCreator" resultType="com.ccsens.ptccsens.bean.vo.ProjectVo$SysProject">
SELECT
t.id,
t.`name`
FROM
t_pro_member m,
t_pro_role_member rm,
t_pro_role r,
t_label l,
t_pro_task_detail t
WHERE
m.id = rm.member_id
and r.id = rm.role_id
and r.label_id = l.id
and l.`level` = 5
and r.project_id = t.id
and m.user_id = #{userId}
and m.rec_status = 0
and rm.rec_status = 0
and r.rec_status = 0
and t.rec_status = 0
and l.rec_status = 0
</select>
<select id="selectById" resultType="com.ccsens.ptccsens.bean.vo.ProjectVo$SysProject">
SELECT
d.id,
d.`name`,
s.plan_start_time AS beginTime,
s.plan_end_time AS endTime
FROM
t_pro_task_detail AS d
LEFT JOIN t_pro_task_sub AS s ON d.id = s.task_detail_id
WHERE
d.rec_status = 0
AND s.rec_status = 0
AND d.id = #{projectId}
</select>
</mapper>

16
src/main/resources/mapper_dao/UserDao.xml

@ -0,0 +1,16 @@
<?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.ptccsens.persist.dao.UserDao">
<select id="getUserIdByPhone" resultType="com.ccsens.ptccsens.bean.po.ProUser">
select
*
from
t_pro_user
where
phone = #{phone}
and rec_status = 0
limit 1
</select>
</mapper>

385
src/main/resources/mapper_raw/ProUserMapper.xml

@ -0,0 +1,385 @@
<?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.ptccsens.persist.mapper.ProUserMapper">
<resultMap id="BaseResultMap" type="com.ccsens.ptccsens.bean.po.ProUser">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="gender" jdbcType="TINYINT" property="gender" />
<result column="avatar_url" jdbcType="VARCHAR" property="avatarUrl" />
<result column="country" jdbcType="VARCHAR" property="country" />
<result column="province" jdbcType="VARCHAR" property="province" />
<result column="city" jdbcType="VARCHAR" property="city" />
<result column="phone" jdbcType="VARCHAR" property="phone" />
<result column="id_card" jdbcType="VARCHAR" property="idCard" />
<result column="power" jdbcType="TINYINT" property="power" />
<result column="device_id" jdbcType="VARCHAR" property="deviceId" />
<result column="auth_type" jdbcType="TINYINT" property="authType" />
<result column="operator" jdbcType="BIGINT" property="operator" />
<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, name, gender, avatar_url, country, province, city, phone, id_card, power, device_id,
auth_type, operator, created_at, updated_at, rec_status
</sql>
<select id="selectByExample" parameterType="com.ccsens.ptccsens.bean.po.ProUserExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from t_pro_user
<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
where id = #{id,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from t_pro_user
where id = #{id,jdbcType=BIGINT}
</delete>
<delete id="deleteByExample" parameterType="com.ccsens.ptccsens.bean.po.ProUserExample">
delete from t_pro_user
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="com.ccsens.ptccsens.bean.po.ProUser">
insert into t_pro_user (id, name, gender,
avatar_url, country, province,
city, phone, id_card,
power, device_id, auth_type,
operator, created_at, updated_at,
rec_status)
values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=TINYINT},
#{avatarUrl,jdbcType=VARCHAR}, #{country,jdbcType=VARCHAR}, #{province,jdbcType=VARCHAR},
#{city,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{idCard,jdbcType=VARCHAR},
#{power,jdbcType=TINYINT}, #{deviceId,jdbcType=VARCHAR}, #{authType,jdbcType=TINYINT},
#{operator,jdbcType=BIGINT}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP},
#{recStatus,jdbcType=TINYINT})
</insert>
<insert id="insertSelective" parameterType="com.ccsens.ptccsens.bean.po.ProUser">
insert into t_pro_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="gender != null">
gender,
</if>
<if test="avatarUrl != null">
avatar_url,
</if>
<if test="country != null">
country,
</if>
<if test="province != null">
province,
</if>
<if test="city != null">
city,
</if>
<if test="phone != null">
phone,
</if>
<if test="idCard != null">
id_card,
</if>
<if test="power != null">
power,
</if>
<if test="deviceId != null">
device_id,
</if>
<if test="authType != null">
auth_type,
</if>
<if test="operator != null">
operator,
</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="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="gender != null">
#{gender,jdbcType=TINYINT},
</if>
<if test="avatarUrl != null">
#{avatarUrl,jdbcType=VARCHAR},
</if>
<if test="country != null">
#{country,jdbcType=VARCHAR},
</if>
<if test="province != null">
#{province,jdbcType=VARCHAR},
</if>
<if test="city != null">
#{city,jdbcType=VARCHAR},
</if>
<if test="phone != null">
#{phone,jdbcType=VARCHAR},
</if>
<if test="idCard != null">
#{idCard,jdbcType=VARCHAR},
</if>
<if test="power != null">
#{power,jdbcType=TINYINT},
</if>
<if test="deviceId != null">
#{deviceId,jdbcType=VARCHAR},
</if>
<if test="authType != null">
#{authType,jdbcType=TINYINT},
</if>
<if test="operator != null">
#{operator,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.ptccsens.bean.po.ProUserExample" resultType="java.lang.Long">
select count(*) from t_pro_user
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
update t_pro_user
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=BIGINT},
</if>
<if test="record.name != null">
name = #{record.name,jdbcType=VARCHAR},
</if>
<if test="record.gender != null">
gender = #{record.gender,jdbcType=TINYINT},
</if>
<if test="record.avatarUrl != null">
avatar_url = #{record.avatarUrl,jdbcType=VARCHAR},
</if>
<if test="record.country != null">
country = #{record.country,jdbcType=VARCHAR},
</if>
<if test="record.province != null">
province = #{record.province,jdbcType=VARCHAR},
</if>
<if test="record.city != null">
city = #{record.city,jdbcType=VARCHAR},
</if>
<if test="record.phone != null">
phone = #{record.phone,jdbcType=VARCHAR},
</if>
<if test="record.idCard != null">
id_card = #{record.idCard,jdbcType=VARCHAR},
</if>
<if test="record.power != null">
power = #{record.power,jdbcType=TINYINT},
</if>
<if test="record.deviceId != null">
device_id = #{record.deviceId,jdbcType=VARCHAR},
</if>
<if test="record.authType != null">
auth_type = #{record.authType,jdbcType=TINYINT},
</if>
<if test="record.operator != null">
operator = #{record.operator,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
set id = #{record.id,jdbcType=BIGINT},
name = #{record.name,jdbcType=VARCHAR},
gender = #{record.gender,jdbcType=TINYINT},
avatar_url = #{record.avatarUrl,jdbcType=VARCHAR},
country = #{record.country,jdbcType=VARCHAR},
province = #{record.province,jdbcType=VARCHAR},
city = #{record.city,jdbcType=VARCHAR},
phone = #{record.phone,jdbcType=VARCHAR},
id_card = #{record.idCard,jdbcType=VARCHAR},
power = #{record.power,jdbcType=TINYINT},
device_id = #{record.deviceId,jdbcType=VARCHAR},
auth_type = #{record.authType,jdbcType=TINYINT},
operator = #{record.operator,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.ptccsens.bean.po.ProUser">
update t_pro_user
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="gender != null">
gender = #{gender,jdbcType=TINYINT},
</if>
<if test="avatarUrl != null">
avatar_url = #{avatarUrl,jdbcType=VARCHAR},
</if>
<if test="country != null">
country = #{country,jdbcType=VARCHAR},
</if>
<if test="province != null">
province = #{province,jdbcType=VARCHAR},
</if>
<if test="city != null">
city = #{city,jdbcType=VARCHAR},
</if>
<if test="phone != null">
phone = #{phone,jdbcType=VARCHAR},
</if>
<if test="idCard != null">
id_card = #{idCard,jdbcType=VARCHAR},
</if>
<if test="power != null">
power = #{power,jdbcType=TINYINT},
</if>
<if test="deviceId != null">
device_id = #{deviceId,jdbcType=VARCHAR},
</if>
<if test="authType != null">
auth_type = #{authType,jdbcType=TINYINT},
</if>
<if test="operator != null">
operator = #{operator,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.ptccsens.bean.po.ProUser">
update t_pro_user
set name = #{name,jdbcType=VARCHAR},
gender = #{gender,jdbcType=TINYINT},
avatar_url = #{avatarUrl,jdbcType=VARCHAR},
country = #{country,jdbcType=VARCHAR},
province = #{province,jdbcType=VARCHAR},
city = #{city,jdbcType=VARCHAR},
phone = #{phone,jdbcType=VARCHAR},
id_card = #{idCard,jdbcType=VARCHAR},
power = #{power,jdbcType=TINYINT},
device_id = #{deviceId,jdbcType=VARCHAR},
auth_type = #{authType,jdbcType=TINYINT},
operator = #{operator,jdbcType=BIGINT},
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
rec_status = #{recStatus,jdbcType=TINYINT}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

3
src/main/resources/mbg.xml

@ -82,7 +82,8 @@
<!-- <table tableName="t_pro_task_flow" domainObjectName="ProTaskFlow"></table>-->
<!-- <table tableName="t_pro_task_notify" domainObjectName="ProTaskNotify"></table>-->
<!-- <table tableName="t_pro_task_panel_info" domainObjectName="ProTaskPanelInfo"></table>-->
<table tableName="t_pro_task_plugin" domainObjectName="ProTaskPlugin"> </table>
<table tableName="t_pro_user" domainObjectName="ProUser"> </table>
<!-- <table tableName="t_pro_task_plugin" domainObjectName="ProTaskPlugin"> </table>-->
<!-- <table tableName="t_pro_task_process" domainObjectName="ProTaskProcess"></table>-->
<!-- <table tableName="t_pro_task_share" domainObjectName="ProTaskShare"></table>-->
<!-- <table tableName="t_pro_task_status_record" domainObjectName="ProTaskStatusRecord"></table>-->

Loading…
Cancel
Save