109 lines
6.0 KiB
Java
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; }
|
|
}
|
|
}
|