<?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.ruoyi.system.mapper.SysTaskMapper">
|
|
<resultMap type="SysTask" id="SysTaskResult">
|
<result property="taskId" column="task_id" />
|
<result property="taskCode" column="task_code" />
|
<result property="taskType" column="task_type" />
|
<result property="taskStatus" column="task_status" />
|
<result property="taskDescription" column="task_description" />
|
<result property="departureAddress" column="departure_address" />
|
<result property="destinationAddress" column="destination_address" />
|
<result property="departureLongitude" column="departure_longitude" />
|
<result property="departureLatitude" column="departure_latitude" />
|
<result property="destinationLongitude" column="destination_longitude" />
|
<result property="destinationLatitude" column="destination_latitude" />
|
<result property="estimatedDistance" column="estimated_distance" />
|
<result property="plannedStartTime" column="planned_start_time" />
|
<result property="plannedEndTime" column="planned_end_time" />
|
<result property="actualStartTime" column="actual_start_time" />
|
<result property="actualEndTime" column="actual_end_time" />
|
<result property="creatorId" column="creator_id" />
|
<result property="assigneeId" column="assignee_id" />
|
<result property="deptId" column="dept_id" />
|
<result property="createTime" column="create_time" />
|
<result property="updateTime" column="update_time" />
|
<result property="createBy" column="create_by" />
|
<result property="updateBy" column="update_by" />
|
<result property="remark" column="remark" />
|
<result property="delFlag" column="del_flag" />
|
<result property="legacySynced" column="legacy_synced" />
|
<result property="creatorName" column="creator_name" />
|
<result property="assigneeName" column="assignee_name" />
|
<result property="deptName" column="dept_name" />
|
<collection property="assignedVehicles" ofType="SysTaskVehicle">
|
<result property="id" column="tv_id" />
|
<result property="taskId" column="tv_task_id" />
|
<result property="vehicleId" column="tv_vehicle_id" />
|
<result property="vehicleNo" column="tv_vehicle_no" />
|
<result property="vehicleType" column="tv_vehicle_type" />
|
<result property="vehicleBrand" column="tv_vehicle_brand" />
|
<result property="vehicleModel" column="tv_vehicle_model" />
|
<result property="assignTime" column="tv_assign_time" />
|
<result property="assignBy" column="tv_assign_by" />
|
<result property="status" column="tv_status" />
|
<result property="remark" column="tv_remark" />
|
</collection>
|
</resultMap>
|
|
<sql id="selectSysTaskVo">
|
select t.task_id, t.task_code, t.task_type, t.task_status, t.task_description,
|
t.departure_address, t.destination_address, t.departure_longitude, t.departure_latitude,
|
t.destination_longitude, t.destination_latitude, t.estimated_distance,
|
t.planned_start_time, t.planned_end_time,
|
t.actual_start_time, t.actual_end_time, t.creator_id, t.assignee_id, t.dept_id,
|
t.create_time, t.update_time, t.create_by, t.update_by, t.remark, t.del_flag, t.legacy_synced,
|
u1.nick_name as creator_name, u2.nick_name as assignee_name, d.dept_name,
|
tv.id as tv_id, tv.task_id as tv_task_id, tv.vehicle_id as tv_vehicle_id,
|
v.vehicle_no as tv_vehicle_no, v.vehicle_type as tv_vehicle_type,
|
v.vehicle_brand as tv_vehicle_brand, v.vehicle_model as tv_vehicle_model,
|
tv.assign_time as tv_assign_time, tv.assign_by as tv_assign_by,
|
tv.status as tv_status, tv.remark as tv_remark
|
from sys_task t
|
left join sys_user u1 on t.creator_id = u1.user_id
|
left join sys_user u2 on t.assignee_id = u2.user_id
|
left join sys_dept d on t.dept_id = d.dept_id
|
left join sys_task_vehicle tv on t.task_id = tv.task_id
|
left join tb_vehicle_info v on tv.vehicle_id = v.vehicle_id
|
</sql>
|
|
<select id="selectSysTaskList" parameterType="TaskQueryVO" resultMap="SysTaskResult">
|
<include refid="selectSysTaskVo"/>
|
<where>
|
t.del_flag = '0'
|
<if test="taskCode != null and taskCode != ''"> and t.task_code like concat('%', #{taskCode}, '%')</if>
|
<if test="taskType != null and taskType != ''"> and t.task_type = #{taskType}</if>
|
<if test="taskStatus != null and taskStatus != ''"> and t.task_status = #{taskStatus}</if>
|
<!-- 综合查询:当前用户所在机构 OR 当前用户创建 OR 分配给当前用户 -->
|
<if test="(creatorId != null and creatorId != 0) or (assigneeId != null and assigneeId != 0) or (deptId != null and deptId != 0)">
|
and (
|
<if test="deptId != null and deptId != 0">t.dept_id = #{deptId}</if>
|
<if test="creatorId != null and creatorId != 0">
|
<if test="deptId != null and deptId != 0"> or </if>
|
t.creator_id = #{creatorId}
|
</if>
|
<if test="assigneeId != null and assigneeId != 0">
|
<if test="(deptId != null and deptId != 0) or (creatorId != null and creatorId != 0)"> or </if>
|
t.assignee_id = #{assigneeId}
|
</if>
|
)
|
</if>
|
<if test="plannedStartTimeBegin != null "> and t.planned_start_time >= #{plannedStartTimeBegin}</if>
|
<if test="plannedStartTimeEnd != null "> and t.planned_start_time <= #{plannedStartTimeEnd}</if>
|
<if test="plannedEndTimeBegin != null "> and t.planned_end_time >= #{plannedEndTimeBegin}</if>
|
<if test="plannedEndTimeEnd != null "> and t.planned_end_time <= #{plannedEndTimeEnd}</if>
|
<if test="overdue != null and overdue == true"> and t.planned_end_time < now() and t.task_status != 'COMPLETED'</if>
|
</where>
|
order by
|
CASE t.task_status
|
WHEN 'PENDING' THEN 1
|
WHEN 'DEPARTING' THEN 2
|
WHEN 'ARRIVED' THEN 3
|
WHEN 'RETURNING' THEN 4
|
WHEN 'IN_PROGRESS' THEN 5
|
WHEN 'COMPLETED' THEN 6
|
WHEN 'CANCELLED' THEN 7
|
ELSE 8
|
END,
|
t.create_time desc
|
</select>
|
|
<select id="selectSysTaskByTaskId" parameterType="Long" resultMap="SysTaskResult">
|
<include refid="selectSysTaskVo"/>
|
where t.task_id = #{taskId} and t.del_flag = '0'
|
</select>
|
|
<select id="selectSysTaskByTaskCode" parameterType="String" resultMap="SysTaskResult">
|
<include refid="selectSysTaskVo"/>
|
where t.task_code = #{taskCode} and t.del_flag = '0'
|
</select>
|
|
<select id="selectMaxTaskCodeByDatePrefix" parameterType="String" resultType="String">
|
select max(task_code)
|
from sys_task
|
where task_code like concat(#{datePrefix}, '%')
|
</select>
|
|
<select id="selectOverdueTasks" resultMap="SysTaskResult">
|
<include refid="selectSysTaskVo"/>
|
where t.del_flag = '0' and t.planned_end_time < now() and t.task_status != 'COMPLETED'
|
order by t.planned_end_time asc
|
</select>
|
|
<select id="selectMyTasks" parameterType="Long" resultMap="SysTaskResult">
|
<include refid="selectSysTaskVo"/>
|
where t.del_flag = '0' and (t.creator_id = #{userId} or t.assignee_id = #{userId})
|
order by
|
CASE t.task_status
|
WHEN 'PENDING' THEN 1
|
WHEN 'DEPARTING' THEN 2
|
WHEN 'ARRIVED' THEN 3
|
WHEN 'RETURNING' THEN 4
|
WHEN 'IN_PROGRESS' THEN 5
|
WHEN 'COMPLETED' THEN 6
|
WHEN 'CANCELLED' THEN 7
|
ELSE 8
|
END,
|
t.update_time desc,
|
t.create_time desc
|
</select>
|
|
<select id="selectTaskStatistics" resultType="TaskStatisticsVO">
|
select
|
count(*) as totalTasks,
|
sum(case when task_status = 'PENDING' then 1 else 0 end) as pendingTasks,
|
sum(case when task_status = 'IN_PROGRESS' then 1 else 0 end) as inProgressTasks,
|
sum(case when task_status = 'COMPLETED' then 1 else 0 end) as completedTasks,
|
sum(case when task_status = 'CANCELLED' then 1 else 0 end) as cancelledTasks,
|
sum(case when date(create_time) = curdate() then 1 else 0 end) as todayTasks,
|
sum(case when planned_end_time < now() and task_status != 'COMPLETED' then 1 else 0 end) as overdueTasks,
|
round(sum(case when task_status = 'IN_PROGRESS' then 1 else 0 end) * 100.0 / count(*), 2) as vehicleUtilization
|
from sys_task
|
where del_flag = '0'
|
</select>
|
|
<insert id="insertSysTask" parameterType="SysTask" useGeneratedKeys="true" keyProperty="taskId">
|
insert into sys_task
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
<if test="taskCode != null and taskCode != ''">task_code,</if>
|
<if test="taskType != null and taskType != ''">task_type,</if>
|
<if test="taskStatus != null and taskStatus != ''">task_status,</if>
|
<if test="taskDescription != null">task_description,</if>
|
<if test="departureAddress != null">departure_address,</if>
|
<if test="destinationAddress != null">destination_address,</if>
|
<if test="departureLongitude != null">departure_longitude,</if>
|
<if test="departureLatitude != null">departure_latitude,</if>
|
<if test="destinationLongitude != null">destination_longitude,</if>
|
<if test="destinationLatitude != null">destination_latitude,</if>
|
<if test="estimatedDistance != null">estimated_distance,</if>
|
<if test="plannedStartTime != null">planned_start_time,</if>
|
<if test="plannedEndTime != null">planned_end_time,</if>
|
<if test="actualStartTime != null">actual_start_time,</if>
|
<if test="actualEndTime != null">actual_end_time,</if>
|
<if test="creatorId != null">creator_id,</if>
|
<if test="assigneeId != null">assignee_id,</if>
|
<if test="deptId != null">dept_id,</if>
|
<if test="createTime != null">create_time,</if>
|
update_time,
|
<if test="createBy != null">create_by,</if>
|
<if test="updateBy != null">update_by,</if>
|
<if test="remark != null">remark,</if>
|
<if test="delFlag != null">del_flag,</if>
|
</trim>
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<if test="taskCode != null and taskCode != ''">#{taskCode},</if>
|
<if test="taskType != null and taskType != ''">#{taskType},</if>
|
<if test="taskStatus != null and taskStatus != ''">#{taskStatus},</if>
|
<if test="taskDescription != null">#{taskDescription},</if>
|
<if test="departureAddress != null">#{departureAddress},</if>
|
<if test="destinationAddress != null">#{destinationAddress},</if>
|
<if test="departureLongitude != null">#{departureLongitude},</if>
|
<if test="departureLatitude != null">#{departureLatitude},</if>
|
<if test="destinationLongitude != null">#{destinationLongitude},</if>
|
<if test="destinationLatitude != null">#{destinationLatitude},</if>
|
<if test="estimatedDistance != null">#{estimatedDistance},</if>
|
<if test="plannedStartTime != null">#{plannedStartTime},</if>
|
<if test="plannedEndTime != null">#{plannedEndTime},</if>
|
<if test="actualStartTime != null">#{actualStartTime},</if>
|
<if test="actualEndTime != null">#{actualEndTime},</if>
|
<if test="creatorId != null">#{creatorId},</if>
|
<if test="assigneeId != null">#{assigneeId},</if>
|
<if test="deptId != null">#{deptId},</if>
|
<if test="createTime != null">#{createTime},</if>
|
now(),
|
<if test="createBy != null">#{createBy},</if>
|
<if test="updateBy != null">#{updateBy},</if>
|
<if test="remark != null">#{remark},</if>
|
<if test="delFlag != null">#{delFlag},</if>
|
</trim>
|
</insert>
|
|
<update id="updateSysTask" parameterType="SysTask">
|
update sys_task
|
<trim prefix="SET" suffixOverrides=",">
|
<if test="taskCode != null and taskCode != ''">task_code = #{taskCode},</if>
|
<if test="taskType != null and taskType != ''">task_type = #{taskType},</if>
|
<if test="taskStatus != null and taskStatus != ''">task_status = #{taskStatus},</if>
|
<if test="taskDescription != null">task_description = #{taskDescription},</if>
|
<if test="departureAddress != null">departure_address = #{departureAddress},</if>
|
<if test="destinationAddress != null">destination_address = #{destinationAddress},</if>
|
<if test="departureLongitude != null">departure_longitude = #{departureLongitude},</if>
|
<if test="departureLatitude != null">departure_latitude = #{departureLatitude},</if>
|
<if test="destinationLongitude != null">destination_longitude = #{destinationLongitude},</if>
|
<if test="destinationLatitude != null">destination_latitude = #{destinationLatitude},</if>
|
<if test="estimatedDistance != null">estimated_distance = #{estimatedDistance},</if>
|
<if test="plannedStartTime != null">planned_start_time = #{plannedStartTime},</if>
|
<if test="plannedEndTime != null">planned_end_time = #{plannedEndTime},</if>
|
<if test="actualStartTime != null">actual_start_time = #{actualStartTime},</if>
|
<if test="actualEndTime != null">actual_end_time = #{actualEndTime},</if>
|
<if test="creatorId != null">creator_id = #{creatorId},</if>
|
<if test="assigneeId != null">assignee_id = #{assigneeId},</if>
|
<if test="deptId != null">dept_id = #{deptId},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
<if test="updateBy != null">update_by = #{updateBy},</if>
|
<if test="remark != null">remark = #{remark},</if>
|
<if test="delFlag != null">del_flag = #{delFlag},</if>
|
</trim>
|
where task_id = #{taskId}
|
</update>
|
|
<update id="updateTaskStatus" parameterType="SysTask">
|
update sys_task set
|
task_status = #{taskStatus},
|
<if test="actualStartTime != null">actual_start_time = #{actualStartTime},</if>
|
<if test="actualEndTime != null">actual_end_time = #{actualEndTime},</if>
|
update_time = #{updateTime},
|
update_by = #{updateBy}
|
where task_id = #{taskId}
|
</update>
|
|
<update id="assignTask" parameterType="SysTask">
|
update sys_task set
|
assignee_id = #{assigneeId},
|
update_time = #{updateTime},
|
update_by = #{updateBy}
|
where task_id = #{taskId}
|
</update>
|
|
<select id="selectActiveTasksByVehicleId" parameterType="Long" resultMap="SysTaskResult">
|
select t.task_id, t.task_code, t.task_type, t.task_status, t.task_description,
|
t.departure_address, t.destination_address,
|
t.planned_start_time, t.actual_start_time,
|
t.create_time, t.update_time
|
from sys_task t
|
inner join sys_task_vehicle tv on t.task_id = tv.task_id
|
where tv.vehicle_id = #{vehicleId}
|
and t.del_flag = '0'
|
and t.task_status not in ('PENDING', 'COMPLETED', 'CANCELLED')
|
order by t.create_time desc
|
</select>
|
|
<delete id="deleteSysTaskByTaskId" parameterType="Long">
|
update sys_task set del_flag = '2', update_time = now() where task_id = #{taskId}
|
</delete>
|
|
<delete id="deleteSysTaskByTaskIds" parameterType="String">
|
update sys_task set del_flag = '2', update_time = now() where task_id in
|
<foreach item="taskId" collection="array" open="(" separator="," close=")">
|
#{taskId}
|
</foreach>
|
</delete>
|
</mapper>
|