diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkDelayProcessController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkDelayProcessController.java new file mode 100644 index 0000000..1b6e6be --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkDelayProcessController.java @@ -0,0 +1,114 @@ +package org.dromara.platform.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.platform.domain.bo.WorkOrderProcessBo; +import org.dromara.platform.domain.vo.WorkOrderProcessVo; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.platform.domain.vo.WorkDelayProcessVo; +import org.dromara.platform.domain.bo.WorkDelayProcessBo; +import org.dromara.platform.service.IWorkDelayProcessService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 工单延期流程信息 + * + * @author gejunhao + * @date 2025-05-07 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/platform/delayProcess") +public class WorkDelayProcessController extends BaseController { + + private final IWorkDelayProcessService workDelayProcessService; + + /** + * 查询工单延期流程信息列表 + */ + @SaCheckPermission("platform:delayProcess:list") + @GetMapping("/list") + public TableDataInfo list(WorkDelayProcessBo bo, PageQuery pageQuery) { + return workDelayProcessService.queryPageList(bo, pageQuery); + } + + /** + * 导出工单延期流程信息列表 + */ + @SaCheckPermission("platform:delayProcess:export") + @Log(title = "工单延期流程信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WorkDelayProcessBo bo, HttpServletResponse response) { + List list = workDelayProcessService.queryList(bo); + ExcelUtil.exportExcel(list, "工单延期流程信息", WorkDelayProcessVo.class, response); + } + + /** + * 获取工单延期流程信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("platform:delayProcess:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String id) { + return R.ok(workDelayProcessService.queryById(id)); + } + + /** + * 新增工单延期流程信息 + */ + @SaCheckPermission("platform:delayProcess:add") + @Log(title = "工单延期流程信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WorkDelayProcessBo bo) { + return toAjax(workDelayProcessService.insertByBo(bo)); + } + + /** + * 修改工单延期流程信息 + */ + @SaCheckPermission("platform:delayProcess:edit") + @Log(title = "工单延期流程信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WorkDelayProcessBo bo) { + return toAjax(workDelayProcessService.updateByBo(bo)); + } + + /** + * 删除工单延期流程信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("platform:delayProcess:remove") + @Log(title = "工单延期流程信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] ids) { + return toAjax(workDelayProcessService.deleteWithValidByIds(List.of(ids), true)); + } + + @SaCheckPermission("platform:delayProcess:queryProcess") + @GetMapping("/queryProcess") + public R> queryProcess(WorkDelayProcessBo bo) { + List rs = workDelayProcessService.queryList(bo); + return R.ok(rs); + } +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkDelayProcess.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkDelayProcess.java new file mode 100644 index 0000000..5c710c6 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkDelayProcess.java @@ -0,0 +1,84 @@ +package org.dromara.platform.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 工单延期流程信息对象 work_delay_process + * + * @author gejunhao + * @date 2025-05-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("work_delay_process") +public class WorkDelayProcess extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 唯一标识符 + */ + @TableId(value = "id") + private String id; + + /** + * 关联的工单ID + */ + private String workOrderId; + + /** + * 操作人 + */ + private String operator; + + /** + * 操作时间 + */ + private Date operationTime; + + /** + * 操作名称 + */ + private String operationName; + + /** + * 用时 + */ + private String duration; + + /** + * 操作描述 + */ + private String description; + + /** + * 环节 + */ + private String stage; + + /** + * 处理结果描述 + */ + private String feedback; + + /** + * 当前状态 + */ + private Long status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkDelayProcessBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkDelayProcessBo.java new file mode 100644 index 0000000..9ce9f3f --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkDelayProcessBo.java @@ -0,0 +1,86 @@ +package org.dromara.platform.domain.bo; + +import org.dromara.platform.domain.WorkDelayProcess; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 工单延期流程信息业务对象 work_delay_process + * + * @author gejunhao + * @date 2025-05-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WorkDelayProcess.class, reverseConvertGenerate = false) +public class WorkDelayProcessBo extends BaseEntity { + + /** + * 唯一标识符 + */ + @NotBlank(message = "唯一标识符不能为空", groups = { EditGroup.class }) + private String id; + + /** + * 关联的工单ID + */ + //@NotBlank(message = "关联的工单ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private String workOrderId; + + /** + * 操作人 + */ + //@NotBlank(message = "操作人不能为空", groups = { AddGroup.class, EditGroup.class }) + private String operator; + + /** + * 操作时间 + */ + //@NotNull(message = "操作时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date operationTime; + + /** + * 操作名称 + */ + //@NotBlank(message = "操作名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String operationName; + + /** + * 用时 + */ + //@NotBlank(message = "用时不能为空", groups = { AddGroup.class, EditGroup.class }) + private String duration; + + /** + * 操作描述 + */ + //@NotBlank(message = "操作描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String description; + + /** + * 环节 + */ + //@NotBlank(message = "环节不能为空", groups = { AddGroup.class, EditGroup.class }) + private String stage; + + /** + * 处理结果描述 + */ + //@NotBlank(message = "处理结果描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String feedback; + + /** + * 当前状态 + */ + //@NotNull(message = "当前状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long status; + + +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java index a38e4df..1d86bef 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java @@ -120,7 +120,7 @@ public class WorkOrderInfoBo extends BaseEntity { private String faultDescription; /** - * 故障图片 + * 故障图片 或者 延期图片 */ //@NotBlank(message = "故障图片不能为空", groups = { AddGroup.class, EditGroup.class }) private String attachment; @@ -207,7 +207,7 @@ public class WorkOrderInfoBo extends BaseEntity { */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date delayTime; - //TODO 延期图片 + private String handleResult; diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkDelayProcessVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkDelayProcessVo.java new file mode 100644 index 0000000..63b0000 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkDelayProcessVo.java @@ -0,0 +1,95 @@ +package org.dromara.platform.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.platform.domain.WorkDelayProcess; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 工单延期流程信息视图对象 work_delay_process + * + * @author gejunhao + * @date 2025-05-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WorkDelayProcess.class) +public class WorkDelayProcessVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 唯一标识符 + */ + @ExcelProperty(value = "唯一标识符") + private String id; + + /** + * 关联的工单ID + */ + @ExcelProperty(value = "关联的工单ID") + private String workOrderId; + + /** + * 操作人 + */ + @ExcelProperty(value = "操作人") + private String operator; + + /** + * 操作时间 + */ + @ExcelProperty(value = "操作时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date operationTime; + + /** + * 操作名称 + */ + @ExcelProperty(value = "操作名称") + private String operationName; + + /** + * 用时 + */ + @ExcelProperty(value = "用时") + private String duration; + + /** + * 操作描述 + */ + @ExcelProperty(value = "操作描述") + private String description; + + /** + * 环节 + */ + @ExcelProperty(value = "环节") + private String stage; + + /** + * 处理结果描述 + */ + @ExcelProperty(value = "处理结果描述") + private String feedback; + + /** + * 当前状态 + */ + @ExcelProperty(value = "当前状态") + private Long status; + + +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/WorkDelayProcessMapper.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/WorkDelayProcessMapper.java new file mode 100644 index 0000000..0c9fefb --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/WorkDelayProcessMapper.java @@ -0,0 +1,15 @@ +package org.dromara.platform.mapper; + +import org.dromara.platform.domain.WorkDelayProcess; +import org.dromara.platform.domain.vo.WorkDelayProcessVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 工单延期流程信息Mapper接口 + * + * @author gejunhao + * @date 2025-05-07 + */ +public interface WorkDelayProcessMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkDelayProcessService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkDelayProcessService.java new file mode 100644 index 0000000..573fe08 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkDelayProcessService.java @@ -0,0 +1,68 @@ +package org.dromara.platform.service; + +import org.dromara.platform.domain.vo.WorkDelayProcessVo; +import org.dromara.platform.domain.bo.WorkDelayProcessBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 工单延期流程信息Service接口 + * + * @author gejunhao + * @date 2025-05-07 + */ +public interface IWorkDelayProcessService { + + /** + * 查询工单延期流程信息 + * + * @param id 主键 + * @return 工单延期流程信息 + */ + WorkDelayProcessVo queryById(String id); + + /** + * 分页查询工单延期流程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工单延期流程信息分页列表 + */ + TableDataInfo queryPageList(WorkDelayProcessBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的工单延期流程信息列表 + * + * @param bo 查询条件 + * @return 工单延期流程信息列表 + */ + List queryList(WorkDelayProcessBo bo); + + /** + * 新增工单延期流程信息 + * + * @param bo 工单延期流程信息 + * @return 是否新增成功 + */ + Boolean insertByBo(WorkDelayProcessBo bo); + + /** + * 修改工单延期流程信息 + * + * @param bo 工单延期流程信息 + * @return 是否修改成功 + */ + Boolean updateByBo(WorkDelayProcessBo bo); + + /** + * 校验并批量删除工单延期流程信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkDelayProcessServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkDelayProcessServiceImpl.java new file mode 100644 index 0000000..d4df5cc --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkDelayProcessServiceImpl.java @@ -0,0 +1,147 @@ +package org.dromara.platform.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.platform.domain.WorkOrderProcess; +import org.dromara.platform.domain.vo.WorkOrderProcessVo; +import org.springframework.stereotype.Service; +import org.dromara.platform.domain.bo.WorkDelayProcessBo; +import org.dromara.platform.domain.vo.WorkDelayProcessVo; +import org.dromara.platform.domain.WorkDelayProcess; +import org.dromara.platform.mapper.WorkDelayProcessMapper; +import org.dromara.platform.service.IWorkDelayProcessService; + +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.stream.Collectors; + +/** + * 工单延期流程信息Service业务层处理 + * + * @author gejunhao + * @date 2025-05-07 + */ +@RequiredArgsConstructor +@Service +public class WorkDelayProcessServiceImpl implements IWorkDelayProcessService { + + private final WorkDelayProcessMapper baseMapper; + + /** + * 查询工单延期流程信息 + * + * @param id 主键 + * @return 工单延期流程信息 + */ + @Override + public WorkDelayProcessVo queryById(String id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询工单延期流程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工单延期流程信息分页列表 + */ + @Override + public TableDataInfo queryPageList(WorkDelayProcessBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的工单延期流程信息列表 + * + * @param bo 查询条件 + * @return 工单延期流程信息列表 + */ + @Override + public List queryList(WorkDelayProcessBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List workDelayProcessVos = baseMapper.selectVoList(lqw); + // 按照操作时间排序 + List sortedRecords = workDelayProcessVos.stream() + .sorted(Comparator.comparing(WorkDelayProcessVo::getOperationTime)) + .collect(Collectors.toList()); + return sortedRecords; + + } + + private LambdaQueryWrapper buildQueryWrapper(WorkDelayProcessBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getWorkOrderId()), WorkDelayProcess::getWorkOrderId, bo.getWorkOrderId()); + lqw.eq(StringUtils.isNotBlank(bo.getOperator()), WorkDelayProcess::getOperator, bo.getOperator()); + lqw.eq(bo.getOperationTime() != null, WorkDelayProcess::getOperationTime, bo.getOperationTime()); + lqw.like(StringUtils.isNotBlank(bo.getOperationName()), WorkDelayProcess::getOperationName, bo.getOperationName()); + lqw.eq(StringUtils.isNotBlank(bo.getDuration()), WorkDelayProcess::getDuration, bo.getDuration()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), WorkDelayProcess::getDescription, bo.getDescription()); + lqw.eq(StringUtils.isNotBlank(bo.getStage()), WorkDelayProcess::getStage, bo.getStage()); + lqw.eq(StringUtils.isNotBlank(bo.getFeedback()), WorkDelayProcess::getFeedback, bo.getFeedback()); + lqw.eq(bo.getStatus() != null, WorkDelayProcess::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增工单延期流程信息 + * + * @param bo 工单延期流程信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(WorkDelayProcessBo bo) { + WorkDelayProcess add = MapstructUtils.convert(bo, WorkDelayProcess.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改工单延期流程信息 + * + * @param bo 工单延期流程信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(WorkDelayProcessBo bo) { + WorkDelayProcess update = MapstructUtils.convert(bo, WorkDelayProcess.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WorkDelayProcess entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除工单延期流程信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java index c45a281..57da43b 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java @@ -34,6 +34,7 @@ import org.dromara.workflow.service.IActTaskService; import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -62,6 +63,13 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Resource private IWorkReviewInfoService workReviewInfoService; + @Resource + private IWorkDelayProcessService workDelayProcessService; + + @Resource + private WorkDelayProcessMapper workDelayProcessMapper; + + @Resource private IWorkOrderDelayService workOrderDelayService; @@ -845,7 +853,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { queryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper); Date operationTime = target.getOperationTime(); - + // 1.创建工单延期信息 if (responseTime != null){ // 延期前时间 operationTime + responseTime(小时) Date beforeDelayTime = DateUtils.addHours(operationTime, responseTime.intValue()); @@ -863,13 +871,38 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { delayBo.setApprover(loginUser.getNickname()); delayBo.setAttachment(serializedAttachment); - // 存在则更新,不存在则新增 + // 2.更新工单延期信息 WorkOrderDelayVo delayVo = workOrderDelayMapper.selectVoById(bo.getId()); if (delayVo != null){ workOrderDelayService.updateByBo(delayBo); }else { workOrderDelayService.insertByBo(delayBo); } + + // 3.创建延期流程 + WorkDelayProcess workDelayProcess = new WorkDelayProcess(); + workDelayProcess.setWorkOrderId(workOrderId); + workDelayProcess.setOperator(loginUser.getNickname()); + workDelayProcess.setStage("延期申请"); + workDelayProcess.setOperationName("延期申请"); + workDelayProcess.setDescription("在延期申请环节进行了延期申请操作"); + LocalDateTime time = LocalDateTime.now(); + Date date = Date.from(time.atZone(ZoneId.systemDefault()).toInstant()); + workDelayProcess.setOperationTime(date); + + // 4.设置延期描述 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String formattedBefore = beforeDelayTime.toInstant() + .atZone(ZoneId.systemDefault()) + .format(formatter); + String formattedAfter = bo.getDelayTime().toInstant() + .atZone(ZoneId.systemDefault()) + .format(formatter); + String delayDesc = "申请从" + formattedBefore + "延期至" + formattedAfter; + workDelayProcess.setFeedback(delayDesc); + + // 5.创建工单延期流程 + workDelayProcessMapper.insert(workDelayProcess); } } @@ -878,6 +911,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { public void delaySubmit(WorkOrderDelayBo bo) { String workOrderId = bo.getId(); String handleResult = bo.getHandleResult(); + LoginUser loginUser = LoginHelper.getLoginUser(); + if (handleResult.equals("审核通过")) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(WorkOrderInfo::getId, workOrderId) @@ -889,6 +924,48 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { updateWrapper1.eq(WorkOrderDelay::getId,bo.getId()); updateWrapper1.set(WorkOrderDelay::getHandleResult,"审核通过"); workOrderDelayMapper.update(null,updateWrapper1); + + // TODO 创建延期流程 + WorkDelayProcess workDelayProcess = new WorkDelayProcess(); + workDelayProcess.setWorkOrderId(workOrderId); + workDelayProcess.setOperator(loginUser.getNickname()); + workDelayProcess.setStage("派单人审核"); + workDelayProcess.setOperationName("派单人审核"); + workDelayProcess.setDescription("在派单人审核环节进行了派单人审核操作"); + workDelayProcess.setFeedback(bo.getAuditOpinion()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(WorkDelayProcess::getWorkOrderId, workOrderId) + .orderByDesc(WorkDelayProcess::getOperationTime) + .last("LIMIT 1"); + WorkDelayProcess recentTarget = workDelayProcessMapper.selectOne(wrapper); + + if (recentTarget != null){ + log.info("最近一个节点:{}-->操作时间{}",recentTarget.getOperationName(), recentTarget.getOperationTime()); + Date lastTime = recentTarget.getOperationTime(); + LocalDateTime time1 = LocalDateTime.ofInstant(lastTime.toInstant(), ZoneId.systemDefault()); + // 设置操作时间 + LocalDateTime time2 = LocalDateTime.now(); + Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); + workDelayProcess.setOperationTime(date2); + workDelayProcess.setFeedback(bo.getHandleResult()); + // 计算时间差 + Duration duration = Duration.between(time1, time2); + long durationInSeconds = duration.getSeconds(); + String formatDuration = formatDuration((int) durationInSeconds); + workDelayProcess.setDuration(formatDuration); + workDelayProcessMapper.insert(workDelayProcess); + // 生成完成的流程 + WorkDelayProcess workDelayProcessLast = new WorkDelayProcess(); + workDelayProcessLast.setWorkOrderId(workOrderId); + workDelayProcessLast.setFeedback("完成"); + workDelayProcessLast.setStage("完成"); + workDelayProcessLast.setOperationName("完成"); + workDelayProcessLast.setOperator(loginUser.getNickname()); + workDelayProcessLast.setOperationTime(date2); + workDelayProcessMapper.insert(workDelayProcessLast); + }else { + throw new RuntimeException("延期申请不存在,无法审核!"); + } // TODO 根据 处理中(已延期) 去修改现在的超时时间 } // 记录操作历史记录表 @@ -918,9 +995,18 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Override public void dispatchOrder(WorkOrderInfoBo bo) { String handle = bo.getHandle(); + //运维单位 + String maintenanceUnit = bo.getMaintenanceUnit(); LoginUser loginUser = LoginHelper.getLoginUser(); String workOrderId = bo.getId(); if (handle.equals("事件派遣")) { + // 修改运维单位信息 + LambdaUpdateWrapper uw = new LambdaUpdateWrapper<>(); + uw.eq(WorkOrderInfo::getId, workOrderId) + .set(WorkOrderInfo::getMaintenanceUnit, maintenanceUnit); + baseMapper.update(null, uw); + + // 创建流程信息 WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); workOrderProcess.setWorkOrderId(workOrderId); workOrderProcess.setOperator(loginUser.getNickname());