Ver código fonte

ADS 工单列表、详情,工单处理

marxjaw 3 meses atrás
pai
commit
dc61ea4549

+ 1 - 1
yt-agent/agent-service/src/main/java/com/ytpm/controller/WorkorderController.java

@@ -35,7 +35,7 @@ public class WorkorderController {
     @ApiOperation("创建工单")
     @PostMapping("/create")
     public Result<String> createWorkorder(@RequestBody WorkorderParam param,@ApiIgnore @AuthenticationPrincipal AgentUserInfo user) {
-        param.setCreateUserId(user.getUserId());
+        param.setDefaultParam(user.getUserId());
         return workorderService.createWorkorder(param);
     }
 

+ 1 - 0
yt-common/src/main/java/com/ytpm/general/RepMessage.java

@@ -9,6 +9,7 @@ public class RepMessage {
     public static final String MODIFY_SUCCESS = "修改成功";
     public static final String ADD_SUCCESS = "增加成功";
     public static final String SAVE_SUCCESS = "保存成功";
+    public static final String PROCESS_SUCCESS = "处理成功";
     public static final String DELETE_SUCCESS = "删除成功";
     public static final String RELATIVE_SUCCESS = "关联成功";
     public static final String LOGOUT_SUCCESS = "已退出登录";

+ 16 - 0
yt-common/src/main/java/com/ytpm/middle/enums/AttachTargetEnum.java

@@ -0,0 +1,16 @@
+package com.ytpm.middle.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum AttachTargetEnum {
+    WORKORDER(1,"工单");
+
+    private int businessNode;
+    private String desc;
+
+    AttachTargetEnum(int businessNode, String desc) {
+        this.businessNode = businessNode;
+        this.desc = desc;
+    }
+}

+ 27 - 0
yt-common/src/main/java/com/ytpm/middle/param/WorkorderListParam.java

@@ -0,0 +1,27 @@
+package com.ytpm.middle.param;
+
+import com.ytpm.general.PageMeta;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Marx
+ * @date 2025/8/1 9:12
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("工单列表参数")
+public class WorkorderListParam extends PageMeta {
+    @ApiModelProperty("创建人名称")
+    private String creatorName;
+    @ApiModelProperty("处理人名称")
+    private String processorName;
+    @ApiModelProperty("标题")
+    private String title;
+}

+ 38 - 0
yt-common/src/main/java/com/ytpm/middle/view/AttachVO.java

@@ -0,0 +1,38 @@
+package com.ytpm.middle.view;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @author Marx
+ * @date 2025/8/1 9:10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("附件信息表单")
+public class AttachVO {
+    @ApiModelProperty("附件ID")
+    private String attachId;
+    @ApiModelProperty("附件名称")
+    private String attachName;
+    @ApiModelProperty("附加链接")
+    private String url;
+    @ApiModelProperty("附件大小(kb)")
+    private int size;
+    @ApiModelProperty("文件类型")
+    private int targetType;
+    @ApiModelProperty("文件所属业务ID")
+    private String targetId;
+    @ApiModelProperty("上传时间")
+    private Date uploadTime;
+    @ApiModelProperty("上传人")
+    private String uploadUserId;
+}

+ 44 - 0
yt-common/src/main/java/com/ytpm/middle/view/WorkorderVO.java

@@ -0,0 +1,44 @@
+package com.ytpm.middle.view;
+
+import com.ytpm.general.BaseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Marx
+ * @date 2025/8/1 9:00
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("工单信息")
+public class WorkorderVO extends BaseParam {
+    @ApiModelProperty("工单ID")
+    private String workorderId;
+    @ApiModelProperty("工单标题")
+    private String title;
+    @ApiModelProperty("工单内容")
+    private String content;
+    @ApiModelProperty("工单状态")
+    private int workorderStatus;
+    @ApiModelProperty("处理人")
+    private String processor;
+    @ApiModelProperty("处理人名称")
+    private String processorName;
+    @ApiModelProperty("备注")
+    private String remark;
+    @ApiModelProperty("完成时间")
+    private Date finishTime;
+    @ApiModelProperty("创建人昵称")
+    private String creatorName;
+    @ApiModelProperty("附件列表")
+    private List<AttachVO> attachList;
+}

+ 61 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/WorkorderController.java

@@ -0,0 +1,61 @@
+package com.ytpm.middle.controller;
+
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.WorkorderListParam;
+import com.ytpm.middle.service.WorkorderService;
+import com.ytpm.middle.view.MiddleUserInfo;
+import com.ytpm.middle.view.WorkorderVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.annotation.Resource;
+
+/**
+ * @author Marx
+ * @date 2025/8/1 8:57
+ */
+@Api(tags = "工单管理")
+@RestController
+@RequestMapping("/workorder")
+public class WorkorderController {
+
+    @Resource
+    private WorkorderService workorderService;
+
+
+    @ApiOperation("查询工单列表")
+    @PostMapping("/queryList")
+    public ResultTable<WorkorderVO> queryList(@RequestBody WorkorderListParam param) {
+        return workorderService.queryList(param);
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "workorderId",value = "工单ID",required = true),
+            @ApiImplicitParam(name = "remark",value = "工单处理备注",required = true),
+    })
+    @ApiOperation("处理工单")
+    @GetMapping("/process")
+    public Result<String> processWorkorder(@RequestParam("workorderId")String workorderId,
+                                           @RequestParam("remark")String remark,
+                                           @ApiIgnore @AuthenticationPrincipal MiddleUserInfo user) {
+        return workorderService.processWorkorder(workorderId,remark,user.getUserId());
+    }
+
+    @ApiImplicitParam(name = "workorderId",value = "工单ID",required = true)
+    @ApiOperation("查询工单详情")
+    @GetMapping("/view")
+    public Result<WorkorderVO> view(@RequestParam("workorderId")String workorderId) {
+        return workorderService.selectOne(workorderId);
+    }
+}

+ 12 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/AttachMapper.java

@@ -0,0 +1,12 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.middle.view.AttachVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface AttachMapper {
+    List<AttachVO> queryByTargetId(@Param("targetId") String targetId,@Param("targetType") Integer targetType);
+}

+ 27 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/WorkorderMapper.java

@@ -0,0 +1,27 @@
+package com.ytpm.middle.dao;
+
+import com.ytpm.agent.model.YtWorkorder;
+import com.ytpm.middle.param.WorkorderListParam;
+import com.ytpm.middle.view.WorkorderVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface WorkorderMapper {
+    /**
+     * 查询工单列表
+     */
+    List<WorkorderVO> queryList(WorkorderListParam param);
+
+    /**
+     * 主键查询工单
+     */
+    YtWorkorder selectByPrimary(@Param("workorderId") String workorderId);
+
+    /**
+     * 主键修改
+     */
+    void updateById(YtWorkorder workorder);
+}

+ 23 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/WorkorderService.java

@@ -0,0 +1,23 @@
+package com.ytpm.middle.service;
+
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.param.WorkorderListParam;
+import com.ytpm.middle.view.WorkorderVO;
+
+public interface WorkorderService {
+    /**
+     * 查询工单列表
+     */
+    ResultTable<WorkorderVO> queryList(WorkorderListParam param);
+
+    /**
+     * 处理工单
+     */
+    Result<String> processWorkorder(String workorderId, String remark, String userId);
+
+    /**
+     * 查询工单详情
+     */
+    Result<WorkorderVO> selectOne(String workorderId);
+}

+ 77 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/WorkorderServiceImpl.java

@@ -0,0 +1,77 @@
+package com.ytpm.middle.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ytpm.agent.model.YtWorkorder;
+import com.ytpm.general.RepMessage;
+import com.ytpm.general.Result;
+import com.ytpm.general.ResultTable;
+import com.ytpm.middle.dao.AttachMapper;
+import com.ytpm.middle.dao.WorkorderMapper;
+import com.ytpm.middle.enums.AttachTargetEnum;
+import com.ytpm.middle.param.WorkorderListParam;
+import com.ytpm.middle.service.WorkorderService;
+import com.ytpm.middle.view.WorkorderVO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * @author Marx
+ * @date 2025/8/1 9:11
+ */
+@Service
+public class WorkorderServiceImpl implements WorkorderService {
+
+    @Resource
+    private WorkorderMapper workorderMapper;
+    @Resource
+    private AttachMapper attachMapper;
+
+    /**
+     * 查询工单列表
+     */
+    @Override
+    public ResultTable<WorkorderVO> queryList(WorkorderListParam param) {
+        PageHelper.startPage(param.getPage(), param.getLimit());
+        return ResultTable.resultTableOk(new PageInfo<WorkorderVO>(workorderMapper.queryList(param)));
+    }
+
+    /**
+     * 处理工单
+     */
+    @Override
+    public Result<String> processWorkorder(String workorderId, String remark, String userId) {
+        YtWorkorder old = workorderMapper.selectByPrimary(workorderId);
+        if(Objects.isNull(old)){
+            return Result.resultErr(RepMessage.OBJECT_NOT_EXIST);
+        }
+        YtWorkorder workorder = new YtWorkorder();
+        workorder.setWorkorderId(workorderId);
+        workorder.setRemark(remark);
+        workorder.setWorkorderStatus(1);
+        workorder.setProcessor(userId);
+        workorder.setFinishTime(new Date());
+        workorder.setUpdateParam(userId);
+        workorderMapper.updateById(workorder);
+        return Result.resultOk(RepMessage.PROCESS_SUCCESS);
+    }
+
+    /**
+     * 查询工单详情
+     */
+    @Override
+    public Result<WorkorderVO> selectOne(String workorderId) {
+        YtWorkorder old = workorderMapper.selectByPrimary(workorderId);
+        if(Objects.isNull(old)){
+            return Result.resultErr(RepMessage.OBJECT_NOT_EXIST);
+        }
+        WorkorderVO vo = new WorkorderVO();
+        BeanUtils.copyProperties(old, vo);
+        vo.setAttachList(attachMapper.queryByTargetId(old.getWorkorderId(), AttachTargetEnum.WORKORDER.getBusinessNode()));
+        return Result.resultObjOk(vo);
+    }
+}

+ 11 - 0
yt-middle/middle-platform/src/main/resources/mapper/AttachMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.AttachMapper">
+
+    <select id="queryByTargetId" resultType="com.ytpm.middle.view.AttachVO">
+        select
+            attach_id, attach_name, url, size, target_type, target_id, upload_time, upload_user_id
+        from yt_platform_attach
+        where target_type = #{targetType} and target_id = #{targetId}
+    </select>
+</mapper>

+ 74 - 0
yt-middle/middle-platform/src/main/resources/mapper/WorkorderMapper.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.middle.dao.WorkorderMapper">
+    <update id="updateById">
+        update yt_work_order
+        <set>
+            <if test="title != null">
+                title = #{title},
+            </if>
+            <if test="content != null">
+                content = #{content},
+            </if>
+            <if test="workorderStatus != null">
+                workorder_status = #{workorderStatus},
+            </if>
+            <if test="remark != null">
+                remark = #{remark},
+            </if>
+            <if test="processor != null">
+                processor = #{processor},
+            </if>
+            <if test="finishTime != null">
+                finish_time = #{finishTime},
+            </if>
+            <if test="updateUserId != null">
+                update_user_id = #{updateUserId},
+            </if>
+            <if test="updateTime != null">
+                update_time = #{updateTime},
+            </if>
+            <if test="available != null">
+                available = #{available}
+            </if>
+        </set>
+        where workorder_id = #{workorderId}
+    </update>
+
+    <select id="queryList" resultType="com.ytpm.middle.view.WorkorderVO">
+        select
+            wo.workorder_id,
+            wo.title,
+            wo.content,
+            wo.workorder_status,
+            wo.remark,
+            wo.processor,
+            wo.finish_time,
+            wo.create_user_id,
+            wo.create_time,
+            wo.update_user_id,
+            wo.update_time,
+            wo.available,
+            pu.nick_name creatorName,
+            pu1.nick_name processorName
+        from yt_work_order wo
+        left join yt_platform_user pu on wo.create_user_id = pu.user_id
+        left join yt_platform_user pu1 on wo.processor = pu1.user_id
+        where wo.available = 1
+        <if test=" creatorName!=null and != creatorName''">
+            and pu.nick_name like concat('%',#{creatorName},'%')
+        </if>
+        <if test=" processorName!=null and processorName!= ''">
+            and pu1.nick_name like concat('%',#{processorName},'%')
+        </if>
+        <if test="title!=null and title!= ''">
+            and wo.title like concat('%', #{title}, '%')
+        </if>
+    </select>
+    <select id="selectByPrimary" resultType="com.ytpm.agent.model.YtWorkorder">
+        select
+            workorder_id, title, content, workorder_status, remark, processor, finish_time, create_user_id, create_time, update_user_id, update_time, available
+        from yt_work_order
+        where workorder_id = #{workorderId}
+    </select>
+</mapper>