|
|
@ -6,17 +6,23 @@ import cn.hutool.core.date.DateUtil; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import cn.hutool.core.util.ObjectUtil; |
|
|
|
import cn.iocoder.yudao.framework.common.page.PageUtil; |
|
|
|
import cn.iocoder.yudao.framework.common.page.PageUtil; |
|
|
|
import cn.iocoder.yudao.framework.common.page.PageVO; |
|
|
|
import cn.iocoder.yudao.framework.common.page.PageVO; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
|
|
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
|
|
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
|
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
|
|
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; |
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.resource.dto.ResourceDTO; |
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.resource.dto.ResourceDTO; |
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.resource.dto.ResourceMsgDTO; |
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.resource.dto.ResourceMsgDTO; |
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.task.dto.*; |
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.task.dto.*; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.task.vo.TaskCreateReqVO; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.task.vo.TaskExportReqVO; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.task.vo.TaskPageReqVO; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.task.vo.TaskUpdateReqVO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.area.AreaDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.area.AreaDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.crop.CropDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.crop.CropDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.discuss.DiscussDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.discuss.DiscussDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.project.ProjectDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.project.ProjectDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.resource.ResourceDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.resource.ResourceDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.resourceType.ResourceTypeDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.resourceType.ResourceTypeDO; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.task.TaskDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.taskCate.TaskCateDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.taskCate.TaskCateDO; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.area.AreaMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.area.AreaMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.crop.CropMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.crop.CropMapper; |
|
|
@ -24,6 +30,7 @@ import cn.iocoder.yudao.module.farm.dal.mysql.discuss.DiscussMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.project.ProjectMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.project.ProjectMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.resource.ResourceMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.resource.ResourceMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.resourceType.ResourceTypeMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.resourceType.ResourceTypeMapper; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.task.TaskMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.taskCate.TaskCateMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.taskCate.TaskCateMapper; |
|
|
|
import cn.iocoder.yudao.module.farm.enums.ProjectStateEnum; |
|
|
|
import cn.iocoder.yudao.module.farm.enums.ProjectStateEnum; |
|
|
|
import cn.iocoder.yudao.module.farm.enums.TaskMemberEnum; |
|
|
|
import cn.iocoder.yudao.module.farm.enums.TaskMemberEnum; |
|
|
@ -38,19 +45,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
import com.zsw.base.R; |
|
|
|
import com.zsw.base.R; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import javax.annotation.Resource; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.util.*; |
|
|
|
import java.util.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.controller.admin.task.vo.*; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.dal.dataobject.task.TaskDO; |
|
|
|
|
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.farm.dal.mysql.task.TaskMapper; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
|
|
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
|
|
|
import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.*; |
|
|
|
import static cn.iocoder.yudao.module.farm.enums.ErrorCodeConstants.*; |
|
|
@ -91,7 +91,7 @@ public class TaskServiceImpl implements TaskService { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Long createTask(TaskCreateReqVO createReqVO) { |
|
|
|
public Long createTask(TaskCreateReqVO createReqVO) { |
|
|
|
TaskDO task = BeanUtil.copyProperties(createReqVO, TaskDO.class); |
|
|
|
TaskDO task = BeanUtil.copyProperties(createReqVO, TaskDO.class); |
|
|
|
//检查项目能否开始
|
|
|
|
//检查任务能否新增
|
|
|
|
this.canTheTaskStart(task); |
|
|
|
this.canTheTaskStart(task); |
|
|
|
//检查任务资源数量
|
|
|
|
//检查任务资源数量
|
|
|
|
this.checkTaskResourceNumber(task); |
|
|
|
this.checkTaskResourceNumber(task); |
|
|
@ -105,6 +105,8 @@ public class TaskServiceImpl implements TaskService { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void updateTask(TaskUpdateReqVO updateReqVO) { |
|
|
|
public void updateTask(TaskUpdateReqVO updateReqVO) { |
|
|
|
TaskDO task = BeanUtil.copyProperties(updateReqVO, TaskDO.class); |
|
|
|
TaskDO task = BeanUtil.copyProperties(updateReqVO, TaskDO.class); |
|
|
|
|
|
|
|
//项目能否更改状态
|
|
|
|
|
|
|
|
this.checkTaskStatus(updateReqVO); |
|
|
|
//检查项目能否开始
|
|
|
|
//检查项目能否开始
|
|
|
|
this.canTheTaskStart(task); |
|
|
|
this.canTheTaskStart(task); |
|
|
|
// 校验存在
|
|
|
|
// 校验存在
|
|
|
@ -224,7 +226,7 @@ public class TaskServiceImpl implements TaskService { |
|
|
|
} |
|
|
|
} |
|
|
|
//任务活动的累计数量
|
|
|
|
//任务活动的累计数量
|
|
|
|
List<DiscussDO> discussDOList = discussMapper.selectList(DiscussDO::getTaskId, id); |
|
|
|
List<DiscussDO> discussDOList = discussMapper.selectList(DiscussDO::getTaskId, id); |
|
|
|
taskMsg.setCumulativeQuantity(ObjectUtil.isEmpty(discussDOList) ? 0 : discussDOList.stream().mapToInt(DiscussDO::getCropNum).sum()); |
|
|
|
taskMsg.setCumulativeQuantity(ObjectUtil.isEmpty(discussDOList) ? 0 : discussDOList.stream().mapToDouble(DiscussDO::getCropNum).sum()); |
|
|
|
//已选择的二级区域
|
|
|
|
//已选择的二级区域
|
|
|
|
if (ObjectUtil.isNotEmpty(taskDO.getAreas())){ |
|
|
|
if (ObjectUtil.isNotEmpty(taskDO.getAreas())){ |
|
|
|
List<AreaDO> secondAreaList = areaMapper.selectList(AreaDO::getId, taskDO.getAreas()); |
|
|
|
List<AreaDO> secondAreaList = areaMapper.selectList(AreaDO::getId, taskDO.getAreas()); |
|
|
@ -476,25 +478,24 @@ public class TaskServiceImpl implements TaskService { |
|
|
|
* 新增或修改检查任务所需资源数量 |
|
|
|
* 新增或修改检查任务所需资源数量 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void checkTaskResourceNumber(TaskDO taskDO){ |
|
|
|
public void checkTaskResourceNumber(TaskDO taskDO){ |
|
|
|
if (!taskDO.getDraft()){ |
|
|
|
List<ResourceDTO> resourceList = taskDO.getResources().toJavaList(ResourceDTO.class); |
|
|
|
List<ResourceDTO> resourceList = taskDO.getResources().toJavaList(ResourceDTO.class); |
|
|
|
//任务状态更改成进行中 或 任务状态更改成完成
|
|
|
|
//任务状态更改成进行中 或 任务状态更改成完成
|
|
|
|
if (taskDO.getStatus().equals(TaskStatus.STARTED) || taskDO.getStatus().equals(TaskStatus.COMPLETE)){ |
|
|
|
if (taskDO.getStatus().equals(TaskStatus.STARTED) || taskDO.getStatus().equals(TaskStatus.COMPLETE)){ |
|
|
|
for (ResourceDTO resourceDTO : resourceList) { |
|
|
|
resourceList.forEach(item ->{ |
|
|
|
ResourceDO resourceDO = resourceMapper.selectById(resourceDTO.getResourceId().get(1)); |
|
|
|
ResourceDO resourceDO = resourceMapper.selectById(item.getResourceId().get(1)); |
|
|
|
//更改成进行中
|
|
|
|
//更改成进行中
|
|
|
|
if (taskDO.getStatus().equals(TaskStatus.STARTED)){ |
|
|
|
if (taskDO.getStatus().equals(TaskStatus.STARTED)){ |
|
|
|
resourceDO.setNumber(resourceDO.getNumber() - resourceDTO.getNum()); |
|
|
|
resourceDO.setNumber(resourceDO.getNumber() - item.getNum()); |
|
|
|
} |
|
|
|
} |
|
|
|
//更改成已完成
|
|
|
|
//更改成已完成
|
|
|
|
if (taskDO.getStatus().equals(TaskStatus.COMPLETE)){ |
|
|
|
if (taskDO.getStatus().equals(TaskStatus.COMPLETE)){ |
|
|
|
if (resourceDO.getSolo()){ |
|
|
|
if (resourceDO.getSolo()){ |
|
|
|
resourceDO.setNumber(resourceDO.getNumber() + resourceDTO.getNum()); |
|
|
|
resourceDO.setNumber(resourceDO.getNumber() + item.getNum()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
resourceMapper.updateById(resourceDO); |
|
|
|
} |
|
|
|
}); |
|
|
|
resourceMapper.updateById(resourceDO); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -503,10 +504,34 @@ public class TaskServiceImpl implements TaskService { |
|
|
|
* 任务能否开始,只有所属项目开始了才可以开始 |
|
|
|
* 任务能否开始,只有所属项目开始了才可以开始 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void canTheTaskStart(TaskDO taskDO){ |
|
|
|
public void canTheTaskStart(TaskDO taskDO){ |
|
|
|
if (!taskDO.getDraft() && taskDO.getStatus().equals(TaskStatus.STARTED)){ |
|
|
|
ProjectDO project = projectMapper.selectById(taskDO.getProjectId()); |
|
|
|
ProjectDO project = projectMapper.selectById(taskDO.getProjectId()); |
|
|
|
if (!project.getState().equals(ProjectStateEnum.STARTING)){ |
|
|
|
if (!project.getState().equals(ProjectStateEnum.STARTING)){ |
|
|
|
throw exception(PROJECT_NOT_STARTING); |
|
|
|
throw exception(PROJECT_NOT_STARTING); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void checkTaskStatus(TaskUpdateReqVO updateVO){ |
|
|
|
|
|
|
|
TaskDO task = taskMapper.selectById(updateVO.getId()); |
|
|
|
|
|
|
|
if (updateVO.getStatus().equals(task.getStatus())) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else{ |
|
|
|
|
|
|
|
//任务更改失败, 计划中或准备中的任务只能更改为开始
|
|
|
|
|
|
|
|
if (task.getStatus().equals(TaskStatus.PLAN) || task.getStatus().equals(TaskStatus.READY)){ |
|
|
|
|
|
|
|
if (!updateVO.getStatus().equals(TaskStatus.STARTED)){ |
|
|
|
|
|
|
|
throw exception(TASK_STATE_CHANGE_FAIL); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//任务更改失败, 已开始的任务不能更改为计划中或准备中
|
|
|
|
|
|
|
|
if (task.getStatus().equals(TaskStatus.STARTED)){ |
|
|
|
|
|
|
|
if (updateVO.getStatus().equals(TaskStatus.PLAN) || updateVO.getStatus().equals(TaskStatus.READY)){ |
|
|
|
|
|
|
|
throw exception(TASK_WAS_STARTED); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//任务更改失败, 已完成的任务只能更改为任务关闭
|
|
|
|
|
|
|
|
if (task.getStatus().equals(TaskStatus.COMPLETE)){ |
|
|
|
|
|
|
|
if (!updateVO.getStatus().equals(TaskStatus.END)){ |
|
|
|
|
|
|
|
throw exception(TASK_WAS_END); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|