package com.ycl.service.impl;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.ycl.common.enums.business.WorkStationEnum;
|
import com.ycl.common.utils.SecurityUtils;
|
import com.ycl.domain.entity.WorkStationSchedule;
|
import com.ycl.factory.FlowServiceFactory;
|
import com.ycl.mapper.WorkStationScheduleMapper;
|
import com.ycl.service.WorkStationScheduleService;
|
import com.ycl.common.base.Result;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.domain.form.WorkStationScheduleForm;
|
import com.ycl.domain.vo.WorkStationScheduleVO;
|
import com.ycl.domain.query.WorkStationScheduleQuery;
|
import org.flowable.task.api.history.HistoricTaskInstance;
|
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
|
import org.springframework.stereotype.Service;
|
import lombok.RequiredArgsConstructor;
|
import com.ycl.framework.utils.PageUtil;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.util.Assert;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 服务实现类
|
*
|
* @author zxl
|
* @since 2025-12-05
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class WorkStationScheduleServiceImpl extends ServiceImpl<WorkStationScheduleMapper, WorkStationSchedule> implements WorkStationScheduleService {
|
|
private final WorkStationScheduleMapper workStationScheduleMapper;
|
|
private final FlowServiceFactory flowServiceFactory;
|
/**
|
* 添加
|
* @param form
|
* @return
|
*/
|
@Override
|
public Result add(WorkStationScheduleForm form) {
|
WorkStationSchedule entity = WorkStationScheduleForm.getEntityByForm(form, null);
|
baseMapper.insert(entity);
|
return Result.ok("添加成功");
|
}
|
|
/**
|
* 修改
|
* @param form
|
* @return
|
*/
|
@Override
|
public Result update(WorkStationScheduleForm form) {
|
WorkStationSchedule entity = baseMapper.selectById(form.getId());
|
|
// 为空抛IllegalArgumentException,做全局异常处理
|
Assert.notNull(entity, "记录不存在");
|
BeanUtils.copyProperties(form, entity);
|
baseMapper.updateById(entity);
|
return Result.ok("修改成功");
|
}
|
|
/**
|
* 批量删除
|
* @param ids
|
* @return
|
*/
|
@Override
|
public Result remove(List<String> ids) {
|
baseMapper.deleteBatchIds(ids);
|
return Result.ok("删除成功");
|
}
|
|
/**
|
* id删除
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result removeById(String id) {
|
baseMapper.deleteById(id);
|
return Result.ok("删除成功");
|
}
|
|
/**
|
* 分页查询
|
* @param query
|
* @return
|
*/
|
@Override
|
public Result page(WorkStationScheduleQuery query) {
|
IPage<WorkStationScheduleVO> page = PageUtil.getPage(query, WorkStationScheduleVO.class);
|
baseMapper.getPage(page, query);
|
return Result.ok().data(page.getRecords()).total(page.getTotal());
|
}
|
|
/**
|
* 根据id查找
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result detail(Integer id) {
|
WorkStationScheduleVO vo = baseMapper.getById(id);
|
Assert.notNull(vo, "记录不存在");
|
return Result.ok().data(vo);
|
}
|
|
/**
|
* 列表
|
* @return
|
*/
|
@Override
|
public Result all() {
|
List<WorkStationSchedule> entities = baseMapper.selectList(null);
|
List<WorkStationScheduleVO> vos = entities.stream()
|
.map(entity -> WorkStationScheduleVO.getVoByEntity(entity, null))
|
.collect(Collectors.toList());
|
return Result.ok().data(vos);
|
}
|
|
@Override
|
public Result completedAchievements(Integer id) {
|
WorkStationSchedule workStationSchedule = baseMapper.selectById(id);
|
workStationSchedule.setStatus(WorkStationEnum.COMPLETED.name());
|
baseMapper.updateById(workStationSchedule);
|
return Result.ok();
|
}
|
|
@Override
|
public Result countAchievements() {
|
//获得个人已完成流程任务,并计算平均用时
|
Long userId = SecurityUtils.getUserId();
|
|
HistoricTaskInstanceQuery query = flowServiceFactory.getHistoryService()
|
.createHistoricTaskInstanceQuery()
|
.finished()
|
.taskAssignee(userId.toString())
|
.orderByHistoricTaskInstanceEndTime()
|
.desc();
|
List<HistoricTaskInstance> taskList = query.list();
|
long totalDuration = 0L;
|
int taskCount = 0;
|
if (!CollectionUtils.isEmpty(taskList)) {
|
taskCount = taskList.size();
|
}
|
|
for (HistoricTaskInstance task : taskList) {
|
// 任务创建时间和完成时间
|
Long createTime = task.getCreateTime().getTime();
|
Long endTime = task.getEndTime().getTime();
|
// 单个任务耗时(毫秒)
|
long duration = endTime - createTime;
|
totalDuration += duration;
|
}
|
double avgDurationMs = (double) totalDuration / taskCount; // 平均耗时(毫秒)
|
double avgDurationSec = avgDurationMs / 1000; // 转换为秒
|
double avgDurationMin = avgDurationSec / 60; // 转换为分钟
|
double avgDurationHour = avgDurationMin / 60; // 转换为分钟
|
System.out.println("用户完成任务总数:" + taskCount);
|
System.out.println("平均耗时(秒):" + avgDurationSec);
|
System.out.println("平均耗时(分钟):" + avgDurationMin);
|
System.out.println("平均耗时(小时):" + avgDurationHour);
|
|
//查询 日程总数
|
List<WorkStationSchedule> list = new LambdaQueryChainWrapper<>(baseMapper)
|
.eq(WorkStationSchedule::getUserId, userId)
|
.eq(WorkStationSchedule::getDeleted, Boolean.FALSE)
|
.list();
|
|
int count = 0;
|
for (WorkStationSchedule workStationSchedule : list) {
|
if (WorkStationEnum.COMPLETED.name().equals(workStationSchedule.getStatus())){
|
count++;
|
}
|
}
|
|
HashMap<String,Object> map = new HashMap<>();
|
map.put("totalDuration",totalDuration);
|
map.put("avgDurationHour",avgDurationHour);
|
map.put("scheduleCount",list.size());
|
map.put("completedCount",count);
|
return Result.ok().data(map);
|
}
|
}
|