Browse Source

作业监控接口新增

车车 4 months ago
parent
commit
6b6492154b

+ 9 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/jobticket/JobTicketController.java

@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketSaveReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.MonitorTicketPageVO;
 import cn.iocoder.yudao.module.iscs.service.jobticket.JobTicketService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -83,4 +84,12 @@ public class JobTicketController {
     }
 
 
+    @GetMapping("/getMonitorJobTicketPage")
+    @Operation(summary = "获得作业执行分页")
+    @PreAuthorize("@ss.hasPermission('iscs:job-ticket:query')")
+    public CommonResult<PageResult<MonitorTicketPageVO>> getMonitorJobTicketPage(@Valid JobTicketPageReqVO pageReqVO) {
+        PageResult<MonitorTicketPageVO> pageResult = jobTicketService.getMonitorJobTicketPage(pageReqVO);
+        return success(pageResult);
+    }
+
 }

+ 52 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/jobticket/vo/MonitorTicketPageVO.java

@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 作业票对象 is_job_ticket
+ *
+ * @author cgj
+ * @date 2024-10-18
+ */
+@EqualsAndHashCode(callSuper = false)
+@Data
+public class MonitorTicketPageVO
+{
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description = "作业票ID")
+    private Long ticketId;
+
+    @Schema(description = "作业票编号")
+    private String ticketCode;
+
+    @Schema(description = "作业票名称")
+    private String ticketName;
+
+    @Schema(description = "上锁总数")
+    private Integer lockNum;
+
+    @Schema(description = "已上锁数")
+    private Integer lockedNum;
+
+    @Schema(description = "已完成(解锁)上锁数")
+    private Integer removeLockNum;
+
+    @Schema(description = "共锁总数")
+    private Integer colockNum;
+
+    @Schema(description = "已共锁数")
+    private Integer colockedNum;
+
+    @Schema(description = "已完成(解锁)共锁数")
+    private Integer removeColockNum;
+
+    @Schema(description = "所属区域ID")
+    private Long workareaId;
+
+    @Schema(description = "所属区域Name")
+    private String workareaName;
+
+}

+ 4 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/jobticket/JobTicketMapper.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iscs.dal.mysql.jobticket;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketRespVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.MonitorTicketPageVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.jobticket.JobTicketDO;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Delete;
@@ -33,4 +34,7 @@ public interface JobTicketMapper extends BaseMapperX<JobTicketDO> {
     })
     Boolean physicalDeleteByIds(@Param(value = "ids") List<Long> ids);
 
+    Page<MonitorTicketPageVO> getMonitorJobTicketPage(Page<JobTicketDO> page, @Param(value = "vo") JobTicketPageReqVO vo);
+
+
 }

+ 26 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/enums/JobStatusEnum.java

@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.iscs.enums;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum JobStatusEnum {
+    /**
+     * 上锁人包含0-5,共锁人包含0、4、5
+     */
+    NOT_STARTED(0, "未开始"),
+    ACQUIRE_LOCK(1, "取锁具"),
+    ACQUIRE_KEY(2, "取钥匙"),
+    READY_TO_LOCK(3, "待上锁"),
+    READY_TO_UNLOCK(4, "已上锁"),
+    UNLOCKED(5, "已解锁");
+
+    /**
+     * 状态编号
+     */
+    public final Integer status;
+
+    /**
+     * 描述
+     */
+    public final String desc;
+}

+ 3 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobticket/JobTicketService.java

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketPageReqVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketRespVO;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketSaveReqVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.MonitorTicketPageVO;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.jobticket.JobTicketDO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import jakarta.validation.Valid;
@@ -59,4 +60,6 @@ public interface JobTicketService extends IService<JobTicketDO> {
 
     String autoGenerateName(String name);
 
+    PageResult<MonitorTicketPageVO> getMonitorJobTicketPage(JobTicketPageReqVO pageReqVO);
+
 }

+ 60 - 1
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobticket/JobTicketServiceImpl.java

@@ -9,8 +9,10 @@ import cn.iocoder.yudao.module.iscs.dal.dataobject.jobticket.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workflow.WorkflowModeDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.jobticket.JobTicketMapper;
+import cn.iocoder.yudao.module.iscs.enums.JobStatusEnum;
 import cn.iocoder.yudao.module.iscs.service.sop.*;
 import cn.iocoder.yudao.module.iscs.service.workflow.WorkflowModeService;
+import cn.iocoder.yudao.module.system.service.attribute.AttributeService;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -22,6 +24,7 @@ import org.springframework.validation.annotation.Validated;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 作业票 Service 实现类
@@ -58,7 +61,8 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
     private JobTicketStepService jobTicketStepService;
     @Resource
     private WorkflowModeService workflowModeService;
-
+    @Resource
+    private AttributeService attributeService;
 
     @Transactional
     @Override
@@ -371,4 +375,59 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
         return name;
     }
 
+    @Override
+    public PageResult<MonitorTicketPageVO> getMonitorJobTicketPage(JobTicketPageReqVO pageReqVO) {
+        Page<JobTicketDO> page = new Page<JobTicketDO>().setCurrent(pageReqVO.getPageNo()).setSize(pageReqVO.getPageSize());
+        Page<MonitorTicketPageVO> monitorJobTicketPage = jobTicketMapper.getMonitorJobTicketPage(page, pageReqVO);
+        // 获取所有的人员信息
+        List<JobTicketUserDO> allUserList = null;
+        if (!monitorJobTicketPage.getRecords().isEmpty()) {
+            List<Long> ticketIds = monitorJobTicketPage.getRecords().stream().map(MonitorTicketPageVO::getTicketId).collect(Collectors.toList());
+            // 相关人员信息
+            allUserList = jobTicketUserService.list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                    .in(JobTicketUserDO::getTicketId, ticketIds));
+
+        }
+
+        for (MonitorTicketPageVO record : monitorJobTicketPage.getRecords()) {
+            // 初始值
+            record.setLockNum(0);
+            record.setLockedNum(0);
+            record.setRemoveLockNum(0);
+            record.setColockNum(0);
+            record.setColockedNum(0);
+            record.setRemoveColockNum(0);
+            if (allUserList != null) {
+                // 1.获取关联的上锁人信息
+                List<JobTicketUserDO> jtlockerList = allUserList.stream().filter(o -> o.getTicketId().equals(record.getTicketId()) && o.getUserRole().equals(attributeService.getAttributeByKey("role.jtlocker").getSysAttrValue())).toList();
+                if (!jtlockerList.isEmpty()) {
+                    // 上锁总数
+                    record.setLockNum(jtlockerList.size());
+                    // 已上锁数
+                    int lockedNum = (int) jtlockerList.stream().filter(o -> o.getJobStatus() != null && o.getJobStatus().equals(String.valueOf(JobStatusEnum.READY_TO_UNLOCK.status))).count();
+                    record.setLockedNum(lockedNum);
+                    // 已完成(解锁)上锁数
+                    int removeLockNum = (int) jtlockerList.stream().filter(o -> o.getJobStatus() != null && o.getJobStatus().equals(String.valueOf(JobStatusEnum.UNLOCKED.status))).count();
+                    record.setRemoveLockNum(removeLockNum);
+                }
+                //2.获取关联的共锁人信息
+                List<JobTicketUserDO> jtcolockerList = allUserList.stream().filter(o -> o.getTicketId().equals(record.getTicketId()) && o.getUserRole().equals(attributeService.getAttributeByKey("role.jtcolocker").getSysAttrValue())).toList();
+                if (!jtcolockerList.isEmpty()) {
+                    // 上锁总数
+                    record.setColockNum(jtcolockerList.size());
+                    // 已上锁数
+                    int colockedNum = (int) jtcolockerList.stream().filter(o -> o.getJobStatus() != null && o.getJobStatus().equals(String.valueOf(JobStatusEnum.READY_TO_UNLOCK.status))).count();
+                    record.setColockedNum(colockedNum);
+                    // 已完成(解锁)上锁数
+                    int removeColockNum = (int) jtcolockerList.stream().filter(o -> o.getJobStatus() != null && o.getJobStatus().equals(String.valueOf(JobStatusEnum.UNLOCKED.status))).count();
+                    record.setRemoveColockNum(removeColockNum);
+                }
+            }
+        }
+        PageResult<MonitorTicketPageVO> respVOPageResult = new PageResult<>();
+        respVOPageResult.setList(monitorJobTicketPage.getRecords());
+        respVOPageResult.setTotal(monitorJobTicketPage.getTotal());
+        return respVOPageResult;
+    }
+
 }

+ 41 - 1
yudao-module-iscs/src/main/resources/mapper/JobTicketMapper.xml

@@ -22,7 +22,7 @@
         LEFT JOIN isc_machinery m ON m.id = j.machinery_id
         LEFT JOIN isc_job_ticket_points p ON p.ticket_id = j.id
         <if test="vo.userId != null and vo.userId.trim != ''">
-            LEFT JOIN is_job_ticket_user u ON u.ticket_id = j.ticket_id
+            LEFT JOIN is_job_ticket_user u ON u.ticket_id = j.id
         </if>
         <where>
             <if test="vo.ticketCode != null and vo.ticketCode.trim != ''">
@@ -56,4 +56,44 @@
         GROUP BY j.id
         ORDER BY j.id DESC
     </select>
+    <select id="getMonitorJobTicketPage"
+            resultType="cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.MonitorTicketPageVO">
+        SELECT
+        j.*,
+        j.id as ticket_id,
+        w.workstation_name,
+        m.machinery_name
+        FROM
+        isc_job_ticket j
+        left join isc_workstation w on w.id = j.workstation_id
+        left join isc_machinery m ON m.id = j.machinery_id
+        <where>
+            (j.ticket_status &lt; 5 OR ( j.ticket_end_time > CURDATE() AND j.ticket_status = 5 ))
+            <if test="vo.ticketCode != null and vo.ticketCode.trim != ''">
+                and j.ticket_code like concat('%',#{vo.ticketCode},'%')
+            </if>
+            <if test="vo.ticketName != null and vo.ticketName.trim != ''">
+                and j.ticket_name like concat('%',#{vo.ticketName},'%')
+            </if>
+            <if test="vo.ticketStatus != null and vo.ticketStatus.trim != ''">
+                and j.ticket_status = #{vo.ticketStatus}
+            </if>
+            <if test="vo.workstationId != null">
+                and j.workstation_id = #{vo.workstationId}
+            </if>
+            <if test="vo.machineryId != null">
+                and j.machinery_id = #{vo.machineryId}
+            </if>
+            <if test="vo.ticketType != null and vo.ticketType.trim != ''">
+                and j.ticket_type = #{vo.ticketType}
+            </if>
+            <if test="vo.startTime != null and vo.startTime.trim != ''">
+                and j.create_time &gt;= #{vo.startTime}
+            </if>
+            <if test="vo.endTime != null and vo.endTime.trim != ''">
+                and j.create_time &lt;= #{vo.endTime}
+            </if>
+        </where>
+        order by j.id desc
+    </select>
 </mapper>

+ 2 - 2
yudao-module-iscs/src/main/resources/mapper/StatisticsMapper.xml

@@ -251,7 +251,7 @@
     </select>
     <select id="getOngoingJobList" resultType="cn.iocoder.yudao.module.iscs.controller.admin.statistics.vo.OngoingJobVO">
         SELECT
-            j.ticket_id,
+            j.id as ticket_id,
             j.ticket_name,
             j.workstation_id,
             w.workstation_name,
@@ -263,7 +263,7 @@
             isc_job_ticket j
                 LEFT JOIN isc_workstation w ON w.id = j.workstation_id
                 LEFT JOIN isc_machinery ma ON ma.id = j.machinery_id
-        ORDER BY j.ticket_id DESC
+        ORDER BY j.id DESC
     </select>
     <select id="getLoanList" resultType="cn.iocoder.yudao.module.iscs.controller.admin.statistics.vo.HomePageLoanVO">
         select DATE_FORMAT(a.date, '%m/%d') as day,