| | |
| | | */ |
| | | package org.sxkj.gd.workorder.service.impl; |
| | | |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.sxkj.gd.workorder.entity.GdPatrolTaskEntity; |
| | | import org.sxkj.gd.workorder.entity.GdWorkOrderFlowEntity; |
| | | import org.sxkj.gd.workorder.enums.PatrolTaskStatusEnum; |
| | | import org.sxkj.gd.workorder.enums.WorkOrderStatusEnum; |
| | | import org.sxkj.gd.workorder.enums.WorkOrderTypeEnum; |
| | | import org.sxkj.gd.workorder.service.IGdWorkOrderFlowService; |
| | | import org.sxkj.gd.workorder.vo.GdPatrolTaskVO; |
| | | import org.sxkj.gd.workorder.excel.GdPatrolTaskExcel; |
| | | import org.sxkj.gd.workorder.mapper.GdPatrolTaskMapper; |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import org.springblade.core.mp.base.BaseServiceImpl; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Service |
| | | public class GdPatrolTaskServiceImpl extends BaseServiceImpl<GdPatrolTaskMapper, GdPatrolTaskEntity> implements IGdPatrolTaskService { |
| | | |
| | | @Autowired |
| | | private IGdWorkOrderFlowService gdWorkOrderFlowService; |
| | | |
| | | @Override |
| | | public IPage<GdPatrolTaskVO> selectGdPatrolTaskPage(IPage<GdPatrolTaskVO> page, GdPatrolTaskVO gdPatrolTask) { |
| | |
| | | return gdPatrolTaskList; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean savePatrolTask(List<GdPatrolTaskEntity> taskEntityList) { |
| | | // 更新流程节点 |
| | | for (GdPatrolTaskEntity gdPatrolTaskEntity : taskEntityList) { |
| | | // 保存巡逻任务 |
| | | boolean save = save(gdPatrolTaskEntity); |
| | | if (!save) { |
| | | // 任务保存失败,抛出异常触发回滚 |
| | | throw new RuntimeException("保存巡逻任务失败:" + gdPatrolTaskEntity.toString()); |
| | | } |
| | | |
| | | // 保存流转记录 |
| | | GdWorkOrderFlowEntity gdWorkOrderFlowEntity = new GdWorkOrderFlowEntity(); |
| | | gdWorkOrderFlowEntity.setCreateUser(AuthUtil.getUserId()); |
| | | gdWorkOrderFlowEntity.setWorkOrderId(gdPatrolTaskEntity.getId()); |
| | | gdWorkOrderFlowEntity.setFlowName(PatrolTaskStatusEnum.PENDING_SIGNING.getDesc()); |
| | | gdWorkOrderFlowEntity.setFlowDesc(AuthUtil.getUserName() + " " + org.springblade.core.tool.utils.DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); |
| | | gdWorkOrderFlowEntity.setOperator(AuthUtil.getUserName()); |
| | | gdWorkOrderFlowEntity.setType(WorkOrderTypeEnum.PATROL_TASK.getValue()); |
| | | gdWorkOrderFlowEntity.setAreaCode(gdPatrolTaskEntity.getAreaCode()); |
| | | gdWorkOrderFlowEntity.setCreateDept(Long.valueOf(AuthUtil.getDeptId())); |
| | | boolean save1 = gdWorkOrderFlowService.save(gdWorkOrderFlowEntity); |
| | | if (!save1) { |
| | | // 流转记录保存失败,抛出异常触发回滚 |
| | | throw new RuntimeException("保存流转记录失败:" + gdWorkOrderFlowEntity.toString()); |
| | | } |
| | | } |
| | | |
| | | // 所有任务和流转记录都保存成功 |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean auditPatrolTask(Long id, String auditStatus, String rejectReason) { |
| | | // 1. 获取巡查任务 |
| | | GdPatrolTaskEntity task = getById(id); |
| | | if (task == null) { |
| | | throw new RuntimeException("巡查任务不存在"); |
| | | } |
| | | |
| | | // 2. 检查任务状态是否为待审核 |
| | | if (!PatrolTaskStatusEnum.PENDING_AUDIT.getValue().equals(task.getTaskStatus().toString())) { |
| | | throw new RuntimeException("任务当前状态无法审核"); |
| | | } |
| | | |
| | | // 3. 如果审核拒绝,检查拒绝原因是否为空 |
| | | if (PatrolTaskStatusEnum.REJECTED_SIGNING.getValue().equals(auditStatus) && (rejectReason == null || rejectReason.trim().isEmpty())) { |
| | | throw new RuntimeException("拒绝签收时必须填写拒绝原因"); |
| | | } |
| | | |
| | | // 4. 检查其他需要拒绝原因的状态 |
| | | if ((PatrolTaskStatusEnum.AUDIT_REJECTED.getValue().equals(auditStatus) || PatrolTaskStatusEnum.REJECTED_ACCEPTANCE.getValue().equals(auditStatus)) && (rejectReason == null || rejectReason.trim().isEmpty())) { |
| | | throw new RuntimeException("审核驳回或拒绝验收时必须填写拒绝原因"); |
| | | } |
| | | |
| | | // 4. 更新任务状态 |
| | | task.setTaskStatus(Byte.valueOf(auditStatus)); |
| | | boolean updateResult = updateById(task); |
| | | if (!updateResult) { |
| | | throw new RuntimeException("更新任务状态失败"); |
| | | } |
| | | |
| | | // 5. 保存流转记录 |
| | | GdWorkOrderFlowEntity flowEntity = new GdWorkOrderFlowEntity(); |
| | | flowEntity.setCreateUser(AuthUtil.getUserId()); |
| | | flowEntity.setWorkOrderId(id); |
| | | |
| | | // 设置流转名称和描述 |
| | | String[] flowInfo = buildFlowInfo(auditStatus, rejectReason); |
| | | String flowName = flowInfo[0]; |
| | | String flowDesc = AuthUtil.getUserName() + " " + org.springblade.core.tool.utils.DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss") + flowInfo[1]; |
| | | |
| | | flowEntity.setFlowName(flowName); |
| | | flowEntity.setFlowDesc(flowDesc); |
| | | flowEntity.setOperator(AuthUtil.getUserName()); |
| | | flowEntity.setType(WorkOrderTypeEnum.PATROL_TASK.getValue()); |
| | | flowEntity.setAreaCode(task.getAreaCode()); |
| | | flowEntity.setCreateDept(Long.valueOf(AuthUtil.getDeptId())); |
| | | |
| | | boolean saveFlowResult = gdWorkOrderFlowService.save(flowEntity); |
| | | if (!saveFlowResult) { |
| | | throw new RuntimeException("保存流转记录失败"); |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 构建流转信息 |
| | | * @param status 状态值 |
| | | * @param rejectReason 拒绝原因 |
| | | * @return 包含流转名称和描述的数组 [flowName, flowDescSuffix] |
| | | */ |
| | | private String[] buildFlowInfo(String status, String rejectReason) { |
| | | String flowName; |
| | | String flowDescSuffix; |
| | | |
| | | switch (status) { |
| | | case "0": |
| | | flowName = PatrolTaskStatusEnum.PENDING_SIGNING.getDesc(); |
| | | flowDescSuffix = " 待签收"; |
| | | break; |
| | | case "1": |
| | | flowName = PatrolTaskStatusEnum.REJECTED_SIGNING.getDesc(); |
| | | flowDescSuffix = " 拒绝签收:" + rejectReason; |
| | | break; |
| | | case "2": |
| | | flowName = PatrolTaskStatusEnum.WITHDRAWN.getDesc(); |
| | | flowDescSuffix = " 已撤回"; |
| | | break; |
| | | case "3": |
| | | flowName = PatrolTaskStatusEnum.PENDING_AUDIT.getDesc(); |
| | | flowDescSuffix = " 待审核"; |
| | | break; |
| | | case "4": |
| | | flowName = PatrolTaskStatusEnum.AUDIT_REJECTED.getDesc(); |
| | | flowDescSuffix = " 审核驳回:" + rejectReason; |
| | | break; |
| | | case "5": |
| | | flowName = PatrolTaskStatusEnum.AUDIT_PASSED.getDesc(); |
| | | flowDescSuffix = " 审核通过"; |
| | | break; |
| | | case "6": |
| | | flowName = PatrolTaskStatusEnum.PENDING_ACCEPTANCE.getDesc(); |
| | | flowDescSuffix = " 待验收"; |
| | | break; |
| | | case "7": |
| | | flowName = PatrolTaskStatusEnum.REJECTED_ACCEPTANCE.getDesc(); |
| | | flowDescSuffix = " 拒绝验收:" + rejectReason; |
| | | break; |
| | | case "8": |
| | | flowName = PatrolTaskStatusEnum.ACCEPTANCE_PASSED.getDesc(); |
| | | flowDescSuffix = " 验收通过"; |
| | | break; |
| | | default: |
| | | flowName = "未知状态"; |
| | | flowDescSuffix = " 未知状态"; |
| | | break; |
| | | } |
| | | |
| | | return new String[]{flowName, flowDescSuffix}; |
| | | } |
| | | } |