From c863ea73a0fecffb02a0f02171e5ad1bed32e0cd Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Tue, 29 Apr 2025 13:47:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=85=E9=9A=9C=E4=B8=8A=E6=8A=A5=20?= =?UTF-8?q?=E6=B4=BE=E9=81=A3=E6=B5=81=E7=A8=8B=E4=BF=AE=E6=94=B9,?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B7=A5=E5=8D=95=E6=B5=81=E7=A8=8B=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-modules/guoyan-platform/pom.xml | 4 + .../controller/WorkOrderInfoController.java | 7 + .../WorkOrderProcessController.java | 115 +++++++++++++ .../platform/domain/WorkOrderProcess.java | 82 ++++++++++ .../domain/bo/WorkOrderProcessBo.java | 84 ++++++++++ .../domain/vo/WorkOrderProcessVo.java | 91 +++++++++++ .../mapper/WorkOrderProcessMapper.java | 15 ++ .../service/IWorkOrderInfoService.java | 2 + .../service/IWorkOrderProcessService.java | 68 ++++++++ .../impl/WorkOrderInfoServiceImpl.java | 137 ++++++++++++++-- .../impl/WorkOrderProcessServiceImpl.java | 153 ++++++++++++++++++ 11 files changed, 743 insertions(+), 15 deletions(-) create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderProcessController.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderProcess.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderProcessBo.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderProcessVo.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/WorkOrderProcessMapper.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderProcessService.java create mode 100644 ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderProcessServiceImpl.java diff --git a/ruoyi-modules/guoyan-platform/pom.xml b/ruoyi-modules/guoyan-platform/pom.xml index 43fd835..87389a2 100644 --- a/ruoyi-modules/guoyan-platform/pom.xml +++ b/ruoyi-modules/guoyan-platform/pom.xml @@ -106,6 +106,10 @@ org.dromara ruoyi-system + + org.dromara + ruoyi-workflow + diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java index cf57a77..946535b 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderInfoController.java @@ -114,4 +114,11 @@ public class WorkOrderInfoController extends BaseController { List rs = workOrderInfoService.createOrders(inspectionPlanInfo); return R.ok(rs); } + + @SaCheckPermission("platform:workOrder:takeOrder") + @PostMapping("/takeOrder") + public R createOrders(String workOrderId ) { + workOrderInfoService.takeOrder(workOrderId); + return R.ok("接单成功!"); + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderProcessController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderProcessController.java new file mode 100644 index 0000000..24f20ae --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/WorkOrderProcessController.java @@ -0,0 +1,115 @@ +package org.dromara.platform.controller; + +import java.util.List; +import java.util.Map; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.platform.domain.vo.ContractSelectVo; +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.WorkOrderProcessVo; +import org.dromara.platform.domain.bo.WorkOrderProcessBo; +import org.dromara.platform.service.IWorkOrderProcessService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 工单流程信息 + * + * @author gejunhao + * @date 2025-04-28 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/platform/orderProcess") +public class WorkOrderProcessController extends BaseController { + + private final IWorkOrderProcessService workOrderProcessService; + + /** + * 查询工单流程信息列表 + */ + @SaCheckPermission("platform:orderProcess:list") + @GetMapping("/list") + public TableDataInfo list(WorkOrderProcessBo bo, PageQuery pageQuery) { + return workOrderProcessService.queryPageList(bo, pageQuery); + } + + /** + * 导出工单流程信息列表 + */ + @SaCheckPermission("platform:orderProcess:export") + @Log(title = "工单流程信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WorkOrderProcessBo bo, HttpServletResponse response) { + List list = workOrderProcessService.queryList(bo); + ExcelUtil.exportExcel(list, "工单流程信息", WorkOrderProcessVo.class, response); + } + + /** + * 获取工单流程信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("platform:orderProcess:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String id) { + return R.ok(workOrderProcessService.queryById(id)); + } + + /** + * 新增工单流程信息 + */ + @SaCheckPermission("platform:orderProcess:add") + @Log(title = "工单流程信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WorkOrderProcessBo bo) { + return toAjax(workOrderProcessService.insertByBo(bo)); + } + + /** + * 修改工单流程信息 + */ + @SaCheckPermission("platform:orderProcess:edit") + @Log(title = "工单流程信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WorkOrderProcessBo bo) { + return toAjax(workOrderProcessService.updateByBo(bo)); + } + + /** + * 删除工单流程信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("platform:orderProcess:remove") + @Log(title = "工单流程信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] ids) { + return toAjax(workOrderProcessService.deleteWithValidByIds(List.of(ids), true)); + } + + + @SaCheckPermission("platform:orderProcess:queryProcess") + @GetMapping("/queryProcess") + public R> queryProcess(WorkOrderProcessBo bo) { + List rs = workOrderProcessService.queryList(bo); + return R.ok(rs); + } +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderProcess.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderProcess.java new file mode 100644 index 0000000..a7a09e7 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderProcess.java @@ -0,0 +1,82 @@ +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_order_process + * + * @author gejunhao + * @date 2025-04-28 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("work_order_process") +public class WorkOrderProcess 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 duration; + + /** + * 环节 + */ + private String stage; + + /** + * 操作名称 + */ + private String operationName; + + /** + * 处理结果描述 + */ + private String feedback; + + /** + * 当前状态 + */ + private Long status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 操作描述 + */ + private String description; +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderProcessBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderProcessBo.java new file mode 100644 index 0000000..dfe1421 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderProcessBo.java @@ -0,0 +1,84 @@ +package org.dromara.platform.domain.bo; + +import org.dromara.platform.domain.WorkOrderProcess; +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_order_process + * + * @author gejunhao + * @date 2025-04-28 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WorkOrderProcess.class, reverseConvertGenerate = false) +public class WorkOrderProcessBo 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; + + /** + * 用时(单位:秒) + */ + //@NotNull(message = "用时(单位:秒)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String duration; + + /** + * 环节 + */ + @NotBlank(message = "环节不能为空", groups = { AddGroup.class, EditGroup.class }) + private String stage; + + /** + * 操作名称 + */ + @NotBlank(message = "操作名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String operationName; + + /** + * 处理结果描述 + */ + @NotBlank(message = "处理结果描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String feedback; + + /** + * 当前状态 + */ + @NotNull(message = "当前状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long status; + + /** + * 操作描述 + */ + private String description; + +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderProcessVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderProcessVo.java new file mode 100644 index 0000000..6a44a7d --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderProcessVo.java @@ -0,0 +1,91 @@ +package org.dromara.platform.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.platform.domain.WorkOrderProcess; +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_order_process + * + * @author gejunhao + * @date 2025-04-28 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WorkOrderProcess.class) +public class WorkOrderProcessVo 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; + + /** + * 操作时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @ExcelProperty(value = "操作时间") + private Date operationTime; + + /** + * 用时(单位:秒) + */ + private String duration; + + /** + * 环节 + */ + @ExcelProperty(value = "环节") + private String stage; + + /** + * 操作名称 + */ + @ExcelProperty(value = "操作名称") + private String operationName; + + /** + * 处理结果描述 + */ + @ExcelProperty(value = "处理结果描述") + private String feedback; + + /** + * 当前状态 + */ + @ExcelProperty(value = "当前状态") + private Long status; + + /** + * 操作描述 + */ + private String description; +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/WorkOrderProcessMapper.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/WorkOrderProcessMapper.java new file mode 100644 index 0000000..0683f95 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/WorkOrderProcessMapper.java @@ -0,0 +1,15 @@ +package org.dromara.platform.mapper; + +import org.dromara.platform.domain.WorkOrderProcess; +import org.dromara.platform.domain.vo.WorkOrderProcessVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 工单流程信息Mapper接口 + * + * @author gejunhao + * @date 2025-04-28 + */ +public interface WorkOrderProcessMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java index f04b2d5..f9126b0 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderInfoService.java @@ -69,4 +69,6 @@ public interface IWorkOrderInfoService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); List createOrders(InspectionPlanInfo inspectionPlanInfo); + + void takeOrder(String workOrderId); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderProcessService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderProcessService.java new file mode 100644 index 0000000..5db9e41 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IWorkOrderProcessService.java @@ -0,0 +1,68 @@ +package org.dromara.platform.service; + +import org.dromara.platform.domain.vo.WorkOrderProcessVo; +import org.dromara.platform.domain.bo.WorkOrderProcessBo; +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-04-28 + */ +public interface IWorkOrderProcessService { + + /** + * 查询工单流程信息 + * + * @param id 主键 + * @return 工单流程信息 + */ + WorkOrderProcessVo queryById(String id); + + /** + * 分页查询工单流程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工单流程信息分页列表 + */ + TableDataInfo queryPageList(WorkOrderProcessBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的工单流程信息列表 + * + * @param bo 查询条件 + * @return 工单流程信息列表 + */ + List queryList(WorkOrderProcessBo bo); + + /** + * 新增工单流程信息 + * + * @param bo 工单流程信息 + * @return 是否新增成功 + */ + Boolean insertByBo(WorkOrderProcessBo bo); + + /** + * 修改工单流程信息 + * + * @param bo 工单流程信息 + * @return 是否修改成功 + */ + Boolean updateByBo(WorkOrderProcessBo 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/WorkOrderInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java index 7508a79..bfa1306 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 @@ -1,9 +1,12 @@ package org.dromara.platform.service.impl; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Param; +import org.apache.poi.hssf.record.DVALRecord; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -14,17 +17,28 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.platform.domain.Attachment; -import org.dromara.platform.domain.AttachmentSerializer; -import org.dromara.platform.domain.InspectionPlanInfo; +import org.dromara.platform.domain.*; +import org.dromara.platform.domain.bo.WorkOrderProcessBo; import org.dromara.platform.service.IProjectInfoService; +import org.dromara.platform.service.IWorkOrderProcessService; +import org.dromara.workflow.domain.bo.StartProcessBo; +import org.dromara.workflow.domain.bo.TaskBo; +import org.dromara.workflow.domain.bo.TestLeaveBo; +import org.dromara.workflow.domain.vo.TaskVo; +import org.dromara.workflow.domain.vo.TestLeaveVo; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.platform.domain.bo.WorkOrderInfoBo; import org.dromara.platform.domain.vo.WorkOrderInfoVo; -import org.dromara.platform.domain.WorkOrderInfo; import org.dromara.platform.mapper.WorkOrderInfoMapper; import org.dromara.platform.service.IWorkOrderInfoService; +import org.dromara.workflow.service.IActTaskService; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.*; /** @@ -42,6 +56,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Resource private IProjectInfoService projectInfoService; + @Resource + private IWorkOrderProcessService workOrderProcessService; /** * 查询工单信息 * @@ -58,6 +74,12 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { List attachments = serializer.deserializeAttachments(attachment); workOrderInfoVo.setAttachments(attachments); } +// TaskBo taskBo = new TaskBo(); +// PageQuery pageQuery = new PageQuery(); +// pageQuery.setPageNum(1); +// pageQuery.setPageSize(10); +// TableDataInfo pageByAllTaskWait = actTaskService.getPageByAllTaskWait(taskBo, pageQuery); +// log.info("待办任务:{}", pageByAllTaskWait.getRows()); return workOrderInfoVo; } @@ -114,6 +136,35 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { return lqw; } + @Autowired + private IActTaskService actTaskService; + + @Autowired + private RuntimeService runtimeService; + public void startLeaveProcess(TestLeaveBo leaveBo) { + // 创建并保存请假记录 + //TestLeaveVo leaveVo = testLeaveService.insertByBo(leaveBo); + + // 启动流程参数 + StartProcessBo startProcessBo = new StartProcessBo(); + // 设置流程对应的业务表 + startProcessBo.setTableName("work_order_info"); + // 设置业务主键 + //startProcessBo.setBusinessKey(leaveVo.getId().toString()); + // 设置流程变量 +// Map variables = new HashMap<>(); +// variables.put("applyUserId", getUserId()); +// variables.put("leaveType", leaveBo.getLeaveType()); +// variables.put("startDate", leaveBo.getStartDate()); +// variables.put("endDate", leaveBo.getEndDate()); +// variables.put("leaveDays", leaveBo.getLeaveDays()); +// variables.put("reason", leaveBo.getRemark()); +// startProcessBo.setVariables(variables); + + // 启动流程实例 + Map result = actTaskService.startWorkFlow(startProcessBo); + + } /** * 新增工单信息 * @@ -139,23 +190,72 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { String partyB = projectInfoService.getContractPartyBNameByProjectName(contractName); add.setMaintenanceUnit(partyB); - //WorkOrderInfoBo 新增字段 bussinkey - //key = 唯一的值 表名+uuid uuid -// add.setBusinessKey(key); -// StartProcessBo startProcessBo = new StartProcessBo(); -// // 设置流程对应的业务表 -// startProcessBo.setTableName("leave_table"); -// // 设置业务主键 -// startProcessBo.setBusinessKey(key); -// // 启动流程实例 -// Map result = actTaskService.startWorkFlow(startProcessBo); boolean flag = baseMapper.insert(add) > 0; if (flag) { - bo.setId(add.getId()); + String generatedId = add.getId(); + bo.setId(generatedId); // 设置到bo对象中 + String isDispatched = bo.getIsDispatched(); + + WorkOrderProcessBo workOrderProcess1 = new WorkOrderProcessBo(); + workOrderProcess1.setWorkOrderId(generatedId); + workOrderProcess1.setOperator(loginUser.getNickname()); + workOrderProcess1.setStage("故障上报"); + workOrderProcess1.setOperationName("故障上报"); + workOrderProcess1.setDescription("在故障上报环节进行了窗口上报故障操作"); + // 设置操作时间 + LocalDateTime time1 = LocalDateTime.now(); + Date date1 = Date.from(time1.atZone(ZoneId.systemDefault()).toInstant()); + workOrderProcess1.setOperationTime(date1); + workOrderProcess1.setFeedback("故障以上报,等待派遣"); + + workOrderProcessService.insertByBo(workOrderProcess1); + //TODO 修改对应的工单的状态 :待派遣 + if (StringUtils.equals(isDispatched, "是")) { + //TODO 修改对应的工单的状态 待接单 + WorkOrderProcessBo workOrderProcess2 = new WorkOrderProcessBo(); + workOrderProcess2.setWorkOrderId(generatedId); + workOrderProcess2.setOperator(loginUser.getNickname()); + workOrderProcess2.setStage("故障派遣"); + workOrderProcess2.setOperationName("故障派遣"); + workOrderProcess2.setDescription("在故障派遣环节进行了故障派遣操作"); + + // 设置操作时间 + LocalDateTime time2 = LocalDateTime.now(); + Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); + workOrderProcess2.setOperationTime(date2); + workOrderProcess2.setFeedback(bo.getDispatchOpinion()); + + Duration duration = Duration.between(time1, time2); // 计算时间差 + // 将持续时间(以秒为单位)设置到对象中 + long durationInSeconds = duration.getSeconds(); + String formatDuration = formatDuration((int) durationInSeconds); + workOrderProcess2.setDuration(formatDuration); + workOrderProcessService.insertByBo(workOrderProcess2); + } } + return flag; } + public static String formatDuration(int seconds) { + int hours = seconds / 3600; + int minutes = (seconds % 3600) / 60; + seconds = seconds % 60; + + return String.format("%02d时%02d分%02d秒", hours, minutes, seconds); + } + + + public TableDataInfo getMyTodoTasks(TaskBo taskBo, PageQuery pageQuery) { + // 查询当前用户的待办任务 + return actTaskService.getPageByTaskWait(taskBo, pageQuery); + } + + public TableDataInfo getAllTodoTasks(TaskBo taskBo, PageQuery pageQuery) { + // 查询所有待办任务(管理员权限) + return actTaskService.getPageByAllTaskWait(taskBo, pageQuery); + } + /** * 修改工单信息 * @@ -220,4 +320,11 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { return workOrderInfos; } + + @Override + public void takeOrder(String workOrderId) { + LoginUser loginUser = LoginHelper.getLoginUser(); + String userNickname = loginUser.getNickname(); + + } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderProcessServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderProcessServiceImpl.java new file mode 100644 index 0000000..4094047 --- /dev/null +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderProcessServiceImpl.java @@ -0,0 +1,153 @@ +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.vo.DailyInspectionReportVo; +import org.springframework.stereotype.Service; +import org.dromara.platform.domain.bo.WorkOrderProcessBo; +import org.dromara.platform.domain.vo.WorkOrderProcessVo; +import org.dromara.platform.domain.WorkOrderProcess; +import org.dromara.platform.mapper.WorkOrderProcessMapper; +import org.dromara.platform.service.IWorkOrderProcessService; + +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-04-28 + */ +@RequiredArgsConstructor +@Service +public class WorkOrderProcessServiceImpl implements IWorkOrderProcessService { + + private final WorkOrderProcessMapper baseMapper; + + /** + * 查询工单流程信息 + * + * @param id 主键 + * @return 工单流程信息 + */ + @Override + public WorkOrderProcessVo queryById(String id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询工单流程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工单流程信息分页列表 + */ + @Override + public TableDataInfo queryPageList(WorkOrderProcessBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + List sortedRecords = records.stream() + //排序 + .sorted(Comparator.comparing(WorkOrderProcessVo::getOperationTime)) + .collect(Collectors.toList()); + result.setRecords(sortedRecords); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的工单流程信息列表 + * + * @param bo 查询条件 + * @return 工单流程信息列表 + */ + @Override + public List queryList(WorkOrderProcessBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List workOrderProcessVos = baseMapper.selectVoList(lqw); + // 按照操作时间排序 + List sortedRecords = workOrderProcessVos.stream() + .sorted(Comparator.comparing(WorkOrderProcessVo::getOperationTime)) + .collect(Collectors.toList()); + return sortedRecords; + } + + private LambdaQueryWrapper buildQueryWrapper(WorkOrderProcessBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getWorkOrderId()), WorkOrderProcess::getWorkOrderId, bo.getWorkOrderId()); + lqw.eq(StringUtils.isNotBlank(bo.getOperator()), WorkOrderProcess::getOperator, bo.getOperator()); + lqw.eq(bo.getOperationTime() != null, WorkOrderProcess::getOperationTime, bo.getOperationTime()); + lqw.eq(bo.getDuration() != null, WorkOrderProcess::getDuration, bo.getDuration()); + lqw.eq(StringUtils.isNotBlank(bo.getStage()), WorkOrderProcess::getStage, bo.getStage()); + lqw.like(StringUtils.isNotBlank(bo.getOperationName()), WorkOrderProcess::getOperationName, bo.getOperationName()); + lqw.eq(StringUtils.isNotBlank(bo.getFeedback()), WorkOrderProcess::getFeedback, bo.getFeedback()); + lqw.eq(bo.getStatus() != null, WorkOrderProcess::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增工单流程信息 + * + * @param bo 工单流程信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(WorkOrderProcessBo bo) { + WorkOrderProcess add = MapstructUtils.convert(bo, WorkOrderProcess.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改工单流程信息 + * + * @param bo 工单流程信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(WorkOrderProcessBo bo) { + WorkOrderProcess update = MapstructUtils.convert(bo, WorkOrderProcess.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WorkOrderProcess entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除工单流程信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + + +}