提交 a5aee945 authored 作者: 邓砥奕's avatar 邓砥奕

更新task

上级 a3111a6f
...@@ -10,6 +10,17 @@ ...@@ -10,6 +10,17 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>device-task</artifactId> <artifactId>device-task</artifactId>
<dependencies>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.tykj.dev</groupId>
<artifactId>device-user</artifactId>
</dependency>
</dependencies>
</project> </project>
\ No newline at end of file
package com.tykj.dev.device.task.repository;
import com.tykj.dev.device.task.subject.domin.Task;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author dengdiyi
*/
public interface TaskDao extends JpaRepository<Task, Integer>, JpaSpecificationExecutor<Task> {
}
package com.tykj.dev.device.task.service;
import com.tykj.dev.device.task.subject.bto.TaskBto;
import com.tykj.dev.device.task.subject.common.StatusEnum;
import com.tykj.dev.device.task.subject.domin.Task;
/**
* @author dengdiyi
*/
public interface TaskService {
/**
* <p>业务进行到下一个状态</p>
* <li>不指定待办用户</li>
*/
TaskBto moveToNext(TaskBto taskBto);
/**
* <p>业务进行到下一个状态</p>
* <li>不指定待办用户</li>
* <li>添加自定义信息</li>
* @param customInfo 自定义信息
*/
TaskBto moveToNext(TaskBto taskBto, String customInfo);
/**
* <p>业务进行到下一个状态(指定待办用户)</p>
* <li>指定待办用户</li>
* @param userId 待办用户Id
*/
TaskBto moveToNext(TaskBto taskBto, Integer userId);
/**
* <p>业务进行到下一个状态(指定待办用户)</p>
* <li>指定待办用户</li>
* <li>添加自定义信息</li>
* @param userId 待办用户Id
* @param customInfo 自定义信息
*/
TaskBto moveToNext(TaskBto taskBto, Integer userId, String customInfo);
/**
* <p>业务进行到特殊状态</p>
* <li>不指定待办用户</li>
* @param statusEnum 状态枚举
*/
TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum);
/**
* <p>业务进行到特殊状态</p>
* <li>不指定待办用户</li>
* <li>添加自定义信息</li>
* @param statusEnum 状态枚举
* @param customInfo 自定义信息
*/
TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum, String customInfo);
/**
* <p>业务进行到特殊状态</p>
* <li>指定待办用户</li>
* @param statusEnum 状态枚举
* @param userId 待办用户Id
*/
TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum, Integer userId);
/**
* <p>业务进行到特殊状态</p>
* <li>指定待办用户</li>
* <li>添加自定义信息</li>
* @param statusEnum 状态枚举
* @param userId 待办用户Id
* @param customInfo 自定义信息
*/
TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum, Integer userId, String customInfo);
/**
* 业务完结
*/
TaskBto moveToEnd(TaskBto taskBto);
/**
* 业务审核失败封存
*/
TaskBto moveToArchive(TaskBto taskBto);
/**
* 新增Task
*/
Task add(TaskBto taskBto);
/**
* 更新Task
*/
Task update(TaskBto taskBto);
/**
* 根据id获得Task
*/
TaskBto get(Integer id);
}
package com.tykj.dev.device.task.service.impl;
import com.tykj.dev.device.task.repository.TaskDao;
import com.tykj.dev.device.task.service.TaskService;
import com.tykj.dev.device.task.subject.bto.TaskBto;
import com.tykj.dev.device.task.subject.common.StatusEnum;
import com.tykj.dev.device.task.subject.common.StatusMap;
import com.tykj.dev.device.task.subject.domin.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Optional;
/**
* @author dengdiyi
*/
@Service
public class TaskServiceImpl implements TaskService {
@Autowired
private TaskDao taskDao;
/**
* <p>业务进行到下一个状态</p>
* <li>不指定待办用户</li>
*/
@Override
public TaskBto moveToNext(TaskBto taskBto) {
//status++
taskBto.setBillStatus(StatusMap.getHashMap().getOrDefault(taskBto.getBillStatus()+1, StatusEnum.END).id);
//list add 0,point++
taskBto.getInvoleUserIdList().add(0);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
return taskBto;
}
/**
* <p>业务进行到下一个状态</p>
* <li>不指定待办用户</li>
* <li>添加自定义信息</li>
* @param customInfo 自定义信息
*/
@Override
public TaskBto moveToNext(TaskBto taskBto, String customInfo) {
//status++
taskBto.setBillStatus(StatusMap.getHashMap().getOrDefault(taskBto.getBillStatus()+1,StatusEnum.END).id);
//list add 0,point++
taskBto.getInvoleUserIdList().add(0);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
//set customInfo
taskBto.setCustomInfo(customInfo);
return taskBto;
}
/**
* <p>业务进行到下一个状态(指定待办用户)</p>
* <li>指定待办用户</li>
* @param userId 待办用户Id
*/
@Override
public TaskBto moveToNext(TaskBto taskBto, Integer userId) {
//status++
taskBto.setBillStatus(StatusMap.getHashMap().getOrDefault(taskBto.getBillStatus()+1,StatusEnum.END).id);
//list add userId,point++
taskBto.getInvoleUserIdList().add(userId);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
return taskBto;
}
/**
* <p>业务进行到下一个状态(指定待办用户)</p>
* <li>指定待办用户</li>
* <li>添加自定义信息</li>
* @param userId 待办用户Id
* @param customInfo 自定义信息
*/
@Override
public TaskBto moveToNext(TaskBto taskBto, Integer userId, String customInfo) {
//status++
taskBto.setBillStatus(StatusMap.getHashMap().getOrDefault(taskBto.getBillStatus()+1,StatusEnum.END).id);
//list add userId,point++
taskBto.getInvoleUserIdList().add(userId);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
//set customInfo
taskBto.setCustomInfo(customInfo);
return taskBto;
}
/**
* <p>业务进行到特殊状态</p>
* <li>不指定待办用户</li>
* @param statusEnum 状态枚举
*/
@Override
public TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum) {
//status++
taskBto.setBillStatus(statusEnum.id);
//list add 0,point++
taskBto.getInvoleUserIdList().add(0);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
return taskBto;
}
/**
* <p>业务进行到特殊状态</p>
* <li>不指定待办用户</li>
* <li>添加自定义信息</li>
* @param statusEnum 状态枚举
* @param customInfo 自定义信息
*/
@Override
public TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum, String customInfo) {
//status++
taskBto.setBillStatus(statusEnum.id);
//list add 0,point++
taskBto.getInvoleUserIdList().add(0);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
//set customInfo
taskBto.setCustomInfo(customInfo);
return taskBto;
}
/**
* <p>业务进行到特殊状态</p>
* <li>指定待办用户</li>
* @param statusEnum 状态枚举
* @param userId 待办用户Id
*/
@Override
public TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum, Integer userId) {
//status++
taskBto.setBillStatus(statusEnum.id);
//list add userId,point++
taskBto.getInvoleUserIdList().add(userId);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
return taskBto;
}
/**
* <p>业务进行到特殊状态</p>
* <li>指定待办用户</li>
* <li>添加自定义信息</li>
* @param statusEnum 状态枚举
* @param userId 待办用户Id
* @param customInfo 自定义信息
*/
@Override
public TaskBto moveToSpecial(TaskBto taskBto, StatusEnum statusEnum, Integer userId, String customInfo) {
//status++
taskBto.setBillStatus(statusEnum.id);
//list add userId,point++
taskBto.getInvoleUserIdList().add(userId);
taskBto.setCurrentPoint(taskBto.getCurrentPoint()+1);
//set readList empty
taskBto.setUserReadDetailList(Collections.emptyList());
//set customInfo
taskBto.setCustomInfo(customInfo);
return taskBto;
}
/**
* 业务完结
*/
@Override
public TaskBto moveToEnd(TaskBto taskBto) {
//set status end
taskBto.setBillStatus(StatusEnum.END.id);
return taskBto;
}
/**
* 业务审核失败封存
*/
@Override
public TaskBto moveToArchive(TaskBto taskBto) {
//set status archive
taskBto.setBillStatus(StatusEnum.ARCHIVE.id);
return taskBto;
}
/**
* 新增Task
*/
@Override
public Task add(TaskBto taskBto) {
return taskDao.save(taskBto.toDo());
}
/**
* 更新Task
*
* @param taskBto
*/
@Override
public Task update(TaskBto taskBto) {
return taskDao.save(taskBto.toDo());
}
/**
* 根据id获得Task
*
* @param id
*/
@Override
public TaskBto get(Integer id) {
Optional<Task> task = taskDao.findById(id);
return task.map(Task::parse2Bto).orElse(null);
}
}
package com.tykj.dev.device.task.subject.bto;
import com.tykj.dev.device.task.subject.domin.Task;
import com.tykj.dev.misc.base.BeanHelper;
import com.tykj.dev.misc.utils.StringSplitUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.modelmapper.ModelMapper;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.List;
/**
* @author dengdiyi
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TaskBto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ApiModelProperty(value = "主键id")
private Integer id;
@ApiModelProperty(value = "任务状态")
private Integer billStatus;
@ApiModelProperty(value = "任务标题")
private String title;
@ApiModelProperty(value = "父任务主键id")
private Integer parentTaskId;
@ApiModelProperty(value = "所有节点任务id组合,例如.1.2.,意为从根节点到当前节点所经历的节点为1和2")
private String nodeIdDetail;
@ApiModelProperty(value = "对应账单ID")
private Integer billId;
@ApiModelProperty(value = "业务类型主键id")
private Integer bussinessType;
@ApiModelProperty(value = "所属单位")
private Integer ownUnit;
@ApiModelProperty(value = "数字类型,用于代表指针目前的下标")
private Integer currentPoint;
@ApiModelProperty(value = "自定义信息,针对不同业务需要保存一些自定信息")
private String customInfo;
@ApiModelProperty(value = "置顶用户id的List")
private List<Integer> topFlagDetailList;
@ApiModelProperty(value = "阅读过用户id的List")
private List<Integer> userReadDetailList;
@ApiModelProperty(value = "工作涉及人员id")
private List<Integer> involeUserIdList;
/**
* bto类转化为do类
*/
public Task toDo(){
//复制相同属性
ModelMapper modelMapper = BeanHelper.getUserMapper();
Task task = modelMapper.map(this,Task.class);
task.setInvolveUsers(StringSplitUtil.idListToString(this.involeUserIdList));
task.setUserReadDetail(StringSplitUtil.idListToString(this.userReadDetailList));
task.setTopFlagDetail(StringSplitUtil.idListToString(this.topFlagDetailList));
return task;
}
}
package com.tykj.dev.device.task.subject.common;
import lombok.AllArgsConstructor;
/**
* @author dengdiyi
* 业务枚举
*/
@AllArgsConstructor
public enum BusinessEnum {
/**
* 列装业务
*/
PACKING(1,"列装业务"),
/**
* 入库业务
*/
STORAGE(2,"入库业务"),
/**
* 配发业务
*/
ALLOT(3,"配发业务"),
/**
* 自查业务
*/
SELF_CHECK(4,"自查业务"),
/**
* 维修业务
*/
REPAIR(5,"维修业务"),
/**
* 核查业务
*/
CONFIRM_CHECK(6,"核查业务"),
/**
* 核查统计业务
*/
CONFIRM_CHECK_STAT(7,"核查统计"),
/**
* 核查详情业务
*/
CONFIRM_CHECK_DETAIL(8,"核查详情"),
/**
* 申请业务
*/
APPLY(9,"申请业务"),
/**
* 维修退回
*/
REPAIR_BACK(10,"维修退回"),
/**
* 维修继续送修
*/
REPAIR_SEND(11,"维修业务"),
/**
* 培训
*/
TRAIN(13,"培训业务"),
/**
* 销毁业务
*/
DESTORY(14,"销毁业务"),
/**
* 退装业务
*/
RETIRED(15,"退装业务"),
/**
* 清退业务
*/
SEND_BACK(16,"清退业务"),
/**
* 清退异常处理
*/
SEND_BACK_EXCEPTION(17,"清退异常处理"),
/**
* 清退出库
*/
SEND_BACK_OUT(18,"清退出库"),
/**
* 新增配套设备
*/
ADD_MATCHING_DEVICE(19,"新增配套设备"),
/**
* 标签修改
*/
TAG(20,"标签修改");
public Integer id;
public String name;
}
package com.tykj.dev.device.task.subject.common;
import lombok.AllArgsConstructor;
/**
* @author dengdiyi
* 业务状态枚举
*/
@AllArgsConstructor
public enum StatusEnum {
/**
* 业务完结
*/
END(9999,"业务完结"),
/**
* 业务封存
*/
ARCHIVE(8888,"业务封存");
public Integer id;
public String name;
}
package com.tykj.dev.device.task.subject.common;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author dengdiyi
*/
public class StatusMap {
private static Map<Integer, StatusEnum> hashMap;
static {
hashMap = Arrays.stream(StatusEnum.values())
.collect(Collectors.toMap(statusEnum -> statusEnum.id, Function.identity()));
}
public static Map<Integer, StatusEnum> getHashMap() {
return hashMap;
}
}
package com.tykj.dev.device.task.subject.domin;
import com.tykj.dev.device.task.subject.bto.TaskBto;
import com.tykj.dev.misc.base.BeanHelper;
import com.tykj.dev.misc.utils.StringSplitUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import org.modelmapper.ModelMapper;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
/**
* entity class for task
* 任务详情
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@ApiModel("任务详情")
@EntityListeners(AuditingEntityListener.class)
@SQLDelete(sql = "update task set delete_tag = 1 where id = ?")
@Where(clause = "delete_tag = 0")
@Table(name = "task",schema = "task")
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ApiModelProperty(value = "主键id")
private Integer id;
@ApiModelProperty(value = "任务状态")
private Integer billStatus;
@ApiModelProperty(value = "任务标题")
private String title;
@CreatedBy
@ApiModelProperty(value = "创建用户id")
private Integer createUserId;
@CreatedDate
@ApiModelProperty(value = "创建时间")
private Date createTime;
@LastModifiedBy
@ApiModelProperty(value = "更新用户id")
private Integer updateUserId;
@LastModifiedDate
@ApiModelProperty(value = "更新时间")
private Date updateTime;
@ApiModelProperty(value = "父任务主键id")
private Integer parentTaskId;
@ApiModelProperty(value = "所有节点任务id组合,例如.1.2.,意为从根节点到当前节点所经历的节点为1和2")
private String nodeIdDetail;
@ApiModelProperty(value = "对应账单ID")
private Integer billId;
@ApiModelProperty(value = "删除标记(0:未删除,1:已删除)")
private Integer deleteTag = 0;
@ApiModelProperty(value = "业务类型主键id")
private Integer bussinessType;
@ApiModelProperty(value = "所属单位")
private Integer ownUnit;
@ApiModelProperty(value = "用户置顶信息")
private String topFlagDetail;
@ApiModelProperty(value = "用户阅读信息")
private String userReadDetail;
@ApiModelProperty(value = "数字类型,用于代表指针目前的下标")
private Integer currentPoint;
@ApiModelProperty(value = "自定义信息,针对不同业务需要保存一些自定信息")
private String customInfo;
@ApiModelProperty(value = "工作涉及人员id(x作为分隔符),例如x1x2x,意为id为1,2的用户参与了该任务")
private String involveUsers;
@ApiModelProperty(value = "跟踪时间")
@Transient
private String userTime;
@ApiModelProperty(value = "跟踪时间日期")
@Transient
private Date userTimeDate;
@ApiModelProperty(value = "处理人")
@Transient
private String processingUser;
@ApiModelProperty(value = "待办时间")
@Transient
private String trackingTime;
@ApiModelProperty(value = "待办时间日期")
@Transient
private Date trackingTimeDate;
@ApiModelProperty(value = "发起单位")
@Transient
private String startUnit;
@ApiModelProperty(value = "是否阅读(0:未读,1:已读)")
@Transient
private Integer isRead = 0;
@ApiModelProperty(value = "是否置顶(0:是,1:不是)")
@Transient
private Integer isTop = 0;
@ApiModelProperty(value = "状态描述")
@Transient
private String status;
/**
* do类转化为bto类
*/
public TaskBto parse2Bto(){
//modelMap复制
ModelMapper mapper = BeanHelper.getUserMapper();
TaskBto taskBto = mapper.map(this,TaskBto.class);
//解析组合字段并添加
taskBto.setInvoleUserIdList(StringSplitUtil.userIdSplit(this.involveUsers));
taskBto.setTopFlagDetailList(StringSplitUtil.userIdSplit(this.topFlagDetail));
taskBto.setUserReadDetailList(StringSplitUtil.userIdSplit(this.userReadDetail));
return taskBto;
}
}
...@@ -24,6 +24,17 @@ ...@@ -24,6 +24,17 @@
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.tykj.dev</groupId>
<artifactId>device-user</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
package com.tykj.dev.misc.base;
import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
/**
* @author zjm
* @version 1.0.0
* @ClassName BeanHelper.java
* @Description TODO
* @createTime 2020年08月11日 11:18:00
*/
@Service
public class BeanHelper {
private static ModelMapper mapper = new ModelMapper();
static {
mapper.getConfiguration().setAmbiguityIgnored(true);
//设置为严格匹配
mapper.getConfiguration().setFullTypeMatchingRequired(true);
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
}
public static ModelMapper getUserMapper() {
return mapper;
}
@Bean
public ModelMapper initModelMapper() {
return mapper;
}
// @Bean
// public ObjectMapper objectMapper() {
// return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
// }
}
package com.tykj.dev.misc.base;
import com.tykj.dev.device.user.util.UserUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import java.util.Optional;
/**
* @author dengdiyi
*/
@Configuration
public class UserIDAuditorBean implements AuditorAware<Integer> {
/*
*实现jpa自动插入当前用户id
*/
@Override
public Optional<Integer> getCurrentAuditor() {
//获取当前用户Id并返回
UserUtils userUtils = com.tykj.dev.misc.utils.SpringUtils.getBean("userUtils");
Integer userId = null;
if (userUtils != null) {
userId = userUtils.getCurrentUserId();
}
if (userId != null){
return Optional.of(userId);
}
else {
return Optional.empty();
}
}
}
...@@ -41,11 +41,20 @@ public class StringSplitUtil { ...@@ -41,11 +41,20 @@ public class StringSplitUtil {
if (strings.length != 0) { if (strings.length != 0) {
for (String str : strings) { for (String str : strings) {
if (str.length() > 0) { if (str.length() > 0) {
list.add(Integer.parseInt(str)); list.add(Integer.valueOf(str));
} }
} }
} }
} }
return list; return list;
} }
public static String idListToString(List<Integer> list){
StringBuffer stringBuffer = new StringBuffer();
list.forEach(integer -> {
stringBuffer.append(integer);
stringBuffer.append("x");
});
return stringBuffer.toString();
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论