Explorar o código

最终下料完成后优先执行同订单同零件的上料任务

BSWYZ hai 13 horas
pai
achega
f6f675680d

+ 7 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/dao/TTaskMapper.java

@@ -58,6 +58,13 @@ public interface TTaskMapper extends SuperMapper<TTask> {
 
     List<Map> getStationTasks(Map<String, Object> map);
 
+    /**
+     * 清除当前上下料站原有的有效置顶标记,并置顶一条同订单、同零件的普通上料任务。
+     */
+    int prioritizeNextLoadingTask(@Param("resourceId") Long resourceId,
+                                  @Param("orderId") Long orderId,
+                                  @Param("bomId") Long bomId);
+
     int selectTotalMachineUseTime(Map params);
 
     List<Map> query3dResourceData(Map<String, String> data);

+ 16 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/TaskServiceImpl.java

@@ -1285,6 +1285,7 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
 
             String processType = map.get("processType").toString();
             String updateUser = map.get("updateUser").toString();
+            boolean priorityNextLoading = Boolean.parseBoolean(String.valueOf(map.get("priorityNextLoading")));
             // 判断当前工件是否存在夹具,没有夹具stock表插入夹具信息
 //            List<StockInfo> stockInfos = stockInfoService.list(Wraps.<StockInfo>lbQ().eq(StockInfo::getCompleteBatchNo, tTask.getCompleteBatchNo()));
 //
@@ -1421,6 +1422,21 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
                 }
             }
             msgUtil.redis_del(id);
+
+            // 仅最终下料页面直接点击“我已完成”时,置顶当前上下料站一条同订单、同零件的普通上料任务。
+            // 该附加排序失败不能影响原任务完成结果。
+            if (priorityNextLoading
+                    && "3".equals(processType)
+                    && "1".equals(tTask.getLastProcedureFlag())
+                    && StringUtils.contains(tTask.getProcedureName(), "下料")) {
+                try {
+                    int updated = baseMapper.prioritizeNextLoadingTask(
+                            tTask.getResourceId(), tTask.getOrderId(), tTask.getBomId());
+                    log.info("最终下料完成后更新上下料站关联上料任务排序,当前任务ID:{},影响行数:{}", tTask.getId(), updated);
+                } catch (Exception e) {
+                    log.error("最终下料完成后更新上下料站关联上料任务排序失败,当前任务ID:{}", tTask.getId(), e);
+                }
+            }
         }
 
         return  R.success();

+ 31 - 1
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/operationManagementCenter/TTaskMapper.xml

@@ -374,8 +374,38 @@
         AND imfc.id = ibbpt.tray_id
         AND imm.id = ibb.meterial_id
         AND itt.resource_id = #{resourceId}
-        ORDER BY ittn.exe_status DESC, funcType desc, ipp.prority desc, rclType asc, itt.procedure_order desc, ittn.complete_batch_sort, itt.expect_start_time LIMIT 0, 6
+        ORDER BY ittn.exe_status DESC, funcType desc, itt.load_sort_flag desc, ipp.prority desc, rclType asc, itt.procedure_order desc, ittn.complete_batch_sort, itt.expect_start_time LIMIT 0, 6
     </select>
+    <update id="prioritizeNextLoadingTask">
+        UPDATE imcs_t_task target
+        LEFT JOIN (
+            SELECT picked.id
+            FROM (
+                SELECT itt.id
+                FROM imcs_t_task itt
+                INNER JOIN imcs_p_plan ipp ON ipp.id = itt.plan_id
+                INNER JOIN imcs_t_task_node ittn ON ittn.task_id = itt.id
+                WHERE itt.resource_id = #{resourceId}
+                  AND itt.order_id = #{orderId}
+                  AND itt.bom_id = #{bomId}
+                  AND itt.procedure_name = '上料'
+                  AND itt.status = '2'
+                  AND ipp.produce_status = '2'
+                  AND ittn.exe_status = '2'
+                  AND ittn.interface_type = '04'
+                ORDER BY ipp.prority DESC,
+                         INSTR(ittn.node_name, '申请') ASC,
+                         itt.procedure_order DESC,
+                         ittn.complete_batch_sort,
+                         itt.expect_start_time
+                LIMIT 1
+            ) picked
+        ) prioritized ON prioritized.id = target.id
+        SET target.load_sort_flag = CASE WHEN prioritized.id IS NULL THEN 0 ELSE 1 END
+        WHERE target.resource_id = #{resourceId}
+          AND target.status IN ('1', '2')
+          AND (target.load_sort_flag = 1 OR prioritized.id IS NOT NULL)
+    </update>
     <select id="selectTotalMachineUseTime" resultType="java.lang.Integer">
         SELECT
           IFNULL(SUM(ibbp.rated_workHours),0)

+ 4 - 0
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/operationManagementCenter/entity/TTask.java

@@ -407,6 +407,10 @@ public class TTask extends Entity<Long> implements Serializable,Comparable<TTask
     @TableField(value = "procedure_order", condition = LIKE)
     private Integer procedureOrder;
 
+    @ApiModelProperty(value = "上下料站最终下料后关联上料任务置顶:0-正常,1-优先")
+    @TableField("load_sort_flag")
+    private Integer loadSortFlag;
+
     @ApiModelProperty(value = "是否加工设备调整")
     @TableField("is_reload")
     @Excel(name = "是否加工设备调整")