Files
baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingPickTaskMapper.java
T
2026-08-12 17:45:45 +08:00

109 lines
6.0 KiB
Java

package com.baiyue.firstleg.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baiyue.firstleg.entity.LoadingPickTaskEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
@Mapper
public interface LoadingPickTaskMapper extends BaseMapper<LoadingPickTaskEntity> {
@Select("SELECT * FROM fl_loading_pick_task WHERE id=#{taskId} FOR UPDATE")
LoadingPickTaskEntity selectForUpdate(@Param("taskId") long taskId);
@Update("UPDATE fl_loading_pick_task SET version=version+1 WHERE id=#{taskId} "
+ "AND task_status='LOADING' AND version=#{expectedVersion}")
int touch(@Param("taskId") long taskId, @Param("expectedVersion") int expectedVersion);
@Select("""
SELECT DISTINCT task.*
FROM fl_loading_pick_task task
JOIN fl_loading_pick_item pick_item ON pick_item.pick_task_id = task.id
JOIN fl_loading_plan plan ON plan.id = task.loading_plan_id
JOIN fl_container_booking booking ON booking.id = plan.container_booking_id
WHERE booking.container_no = #{containerNo} AND task.task_status = 'LOADING'
AND booking.warehouse_id = #{warehouseId}
LIMIT 1
""")
LoadingPickTaskEntity selectLoadingByContainerAndAccount(@Param("containerNo") String containerNo,
@Param("warehouseId") long warehouseId);
@Select("""
<script>
SELECT task.id AS taskId, task.loading_plan_id AS loadingPlanId,
task.container_booking_id AS containerBookingId, task.cabinet_no AS cabinetNo,
booking.container_no AS containerNo, booking.warehouse_id AS warehouseId,
booking.warehouse_name AS warehouseName, task.task_status AS taskStatus,
CASE WHEN assignment.pick_task_id IS NULL THEN 'UNASSIGNED' ELSE 'IN_PROGRESS' END AS workflowStatus,
task.version AS version, COALESCE(assignment.version, 0) AS assignmentVersion,
COUNT(pick_item.id) AS itemCount,
SUM(CASE WHEN pick_item.item_status IN ('PENDING', 'PICKING') THEN 1 ELSE 0 END) AS pendingItemCount
FROM fl_loading_pick_task task
JOIN fl_loading_plan plan ON plan.id = task.loading_plan_id
JOIN fl_container_booking booking ON booking.id = plan.container_booking_id
JOIN fl_loading_pick_item pick_item ON pick_item.pick_task_id = task.id
LEFT JOIN fl_loading_pick_assignment assignment ON assignment.pick_task_id = task.id
WHERE task.task_status = 'LOADING'
AND (assignment.pick_task_id IS NULL OR assignment.assignee_id = #{operatorId})
<if test="keyword != null and keyword != ''">
AND (booking.container_no LIKE CONCAT('%', #{keyword}, '%')
OR booking.warehouse_name LIKE CONCAT('%', #{keyword}, '%'))
</if>
GROUP BY task.id, task.loading_plan_id, task.container_booking_id, task.cabinet_no,
booking.container_no, booking.warehouse_id,
booking.warehouse_name, task.task_status, task.version,
assignment.pick_task_id, assignment.version
ORDER BY task.id DESC
LIMIT 100
</script>
""")
List<PendingTaskRow> selectPendingForOperator(@Param("operatorId") long operatorId,
@Param("keyword") String keyword);
class PendingTaskRow {
private Long taskId;
private Long loadingPlanId;
private String containerNo;
private Long containerBookingId;
private String cabinetNo;
private Long warehouseId;
private String warehouseName;
private String taskStatus;
private String workflowStatus;
private Integer version;
private Integer assignmentVersion;
private Integer itemCount;
private Integer pendingItemCount;
public Long getTaskId() { return taskId; }
public void setTaskId(Long taskId) { this.taskId = taskId; }
public Long getLoadingPlanId() { return loadingPlanId; }
public void setLoadingPlanId(Long loadingPlanId) { this.loadingPlanId = loadingPlanId; }
public String getContainerNo() { return containerNo; }
public void setContainerNo(String containerNo) { this.containerNo = containerNo; }
public Long getContainerBookingId() { return containerBookingId; }
public void setContainerBookingId(Long value) { this.containerBookingId = value; }
public String getCabinetNo() { return cabinetNo; }
public void setCabinetNo(String value) { this.cabinetNo = value; }
public Long getWarehouseId() { return warehouseId; }
public void setWarehouseId(Long warehouseId) { this.warehouseId = warehouseId; }
public String getWarehouseName() { return warehouseName; }
public void setWarehouseName(String warehouseName) { this.warehouseName = warehouseName; }
public String getTaskStatus() { return taskStatus; }
public void setTaskStatus(String taskStatus) { this.taskStatus = taskStatus; }
public String getWorkflowStatus() { return workflowStatus; }
public void setWorkflowStatus(String workflowStatus) { this.workflowStatus = workflowStatus; }
public Integer getVersion() { return version; }
public void setVersion(Integer version) { this.version = version; }
public Integer getAssignmentVersion() { return assignmentVersion; }
public void setAssignmentVersion(Integer assignmentVersion) { this.assignmentVersion = assignmentVersion; }
public Integer getItemCount() { return itemCount; }
public void setItemCount(Integer itemCount) { this.itemCount = itemCount; }
public Integer getPendingItemCount() { return pendingItemCount; }
public void setPendingItemCount(Integer pendingItemCount) { this.pendingItemCount = pendingItemCount; }
}
}