You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

596 lines
28 KiB

<?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="cc.hiver.mall.dao.mapper.MallDeliveryOrderMapper">
<resultMap id="deliveryMap" type="cc.hiver.mall.entity.MallDeliveryOrder">
<id column="id" property="id"/>
<result column="order_id" property="orderId"/>
<result column="group_id" property="groupId"/>
<result column="worker_id" property="workerId"/>
<result column="shop_id" property="shopId"/>
<result column="get_area_id" property="getAreaId"/>
<result column="put_area_id" property="putAreaId"/>
<result column="delivery_fee" property="deliveryFee"/>
<result column="delivery_fee_marketplace" property="deliveryFeeMarketplace"/>
<result column="status" property="status"/>
<result column="receiver_name" property="receiverName"/>
<result column="receiver_phone" property="receiverPhone"/>
<result column="receiver_address" property="receiverAddress"/>
<result column="shop_name" property="shopName"/>
<result column="shop_phone" property="shopPhone"/>
<result column="shop_address" property="shopAddress"/>
<result column="create_time" property="createTime"/>
<result column="accept_time" property="acceptTime"/>
<result column="get_time" property="getTime"/>
<result column="must_finish_time" property="mustFinishTime"/>
<result column="appointment_delivery" property="appointmentDelivery"/>
<result column="finish_time" property="finishTime"/>
<result column="delivery_type" property="deliveryType"/>
<result column="number_code" property="numberCode"/>
<result column="region_id" property="regionId"/>
<result column="remark" property="remark"/>
<result column="all_count" property="allCount"/>
<result column="phone_number" property="phoneNumber"/>
<result column="get_codes" property="getCodes"/>
<result column="get_pictures" property="getPictures"/>
<result column="is_big" property="isBig"/>
<result column="is_return" property="isReturn"/>
<result column="worker_name" property="workerName"/>
<result column="arrive_time" property="arriveTime"/>
<result column="arrive_time" property="arriveTime"/>
<result column="new_worker" property="newWorker"/>
<result column="worker_phone" property="workerPhone"/>
<result column="transfer_delivery" property="transferDelivery"/>
<result column="transfer_address_id" property="transferAddressId"/>
<result column="transfer_address_name" property="transferAddressName"/>
<result column="transfer_arrive_time" property="transferArriveTime"/>
<result column="transfer_arrive_image" property="transferArriveImage"/>
<result column="transfer_pickup_code" property="transferPickupCode"/>
</resultMap>
<!-- 分页查询配送单,支持多条件过滤(抢单大厅:hallOnly=true时只查workerId为空的) -->
<select id="selectPageVO" resultMap="deliveryMap">
SELECT
d.id, d.order_id, d.group_id, d.worker_id, d.shop_id,
d.get_area_id, d.put_area_id, d.delivery_fee, d.delivery_fee_marketplace,
d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.appointment_delivery, d.finish_time,
d.receiver_name, d.receiver_phone, d.receiver_address,
d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code,
d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures, d.is_big,
d.is_return,d.worker_name, d.arrive_time,d.new_worker,d.worker_phone,
d.transfer_delivery,d.transfer_address_id,d.transfer_address_name,
d.transfer_arrive_time,d.transfer_arrive_image,d.transfer_pickup_code
FROM mall_delivery_order d
<where>
<if test="q.regionId != null and q.regionId != ''">
AND d.region_id = #{q.regionId}
</if>
<if test="q.workerId != null and q.workerId != ''">
AND d.worker_id = #{q.workerId}
</if>
<if test="q.newWorker != null and q.newWorker != ''">
AND d.new_worker = #{q.newWorker}
</if>
<if test="q.shopId != null and q.shopId != ''">
AND d.shop_id = #{q.shopId}
</if>
<if test="q.shopName != null and q.shopName != ''">
and (
d.shop_name like concat('%',#{q.shopName},'%')
)
</if>
<if test="q.status != null">
AND d.status = #{q.status}
</if>
<if test="q.getAreaId != null and q.getAreaId != ''">
AND d.get_area_id = #{q.getAreaId}
</if>
<if test="q.putAreaId != null and q.putAreaId != ''">
AND d.put_area_id = #{q.putAreaId}
</if>
<if test="q.hallOnly != null and q.hallOnly == true">
AND (d.worker_id IS NULL OR d.worker_id = '')
AND d.status = 0
</if>
<if test="q.startDate != null and q.startDate != ''">
AND DATE(d.create_time) &gt;= #{q.startDate}
</if>
<if test="q.endDate != null and q.endDate != ''">
AND DATE(d.create_time) &lt;= #{q.endDate}
</if>
<if test="q.deliveryType != null">
AND d.delivery_type = #{q.deliveryType}
</if>
<if test="q.shopDelivery != null">
AND EXISTS (
SELECT 1 FROM mall_order mo
WHERE mo.id = d.order_id
AND mo.shop_delivery = #{q.shopDelivery}
)
</if>
<if test="q.transferDelivery != null">
AND d.transfer_delivery = #{q.transferDelivery}
</if>
<if test="q.transferArriveEmpty != null and q.transferArriveEmpty == true">
AND d.transfer_arrive_time IS NULL
</if>
<if test="q.transferArriveEmpty != null and q.transferArriveEmpty == false">
AND d.transfer_arrive_time IS NOT NULL
</if>
</where>
ORDER BY
<choose>
<when test="q.transferDelivery != null and q.transferDelivery == 1 and q.order != null and q.order == 'transferDelivery'">
(CASE WHEN d.transfer_arrive_time IS NULL THEN 0 ELSE 1 END) ASC,
d.create_time DESC
</when>
<otherwise>
<if test="q.order != null and q.order == 'deliveryFee'">
d.delivery_fee DESC,
</if>
<if test="(q.waimaiData != null and q.waimaiData.size() > 0) or (q.kuaidiData != null and q.kuaidiData.size() > 0)">
(CASE
<if test="q.waimaiData != null and q.waimaiData.size() > 0">
<foreach collection="q.waimaiData" item="rule">
WHEN d.get_area_id = #{rule.getAreaId} AND d.put_area_id = #{rule.putAreaId} AND d.delivery_type = 1 THEN 1
</foreach>
</if>
<if test="q.kuaidiData != null and q.kuaidiData.size() > 0">
<foreach collection="q.kuaidiData" item="rule">
WHEN d.get_area_id = #{rule.getAreaId} AND d.put_area_id = #{rule.putAreaId} AND d.delivery_type = 2 THEN 1
</foreach>
</if>
ELSE 0
END) DESC,
</if>
(CASE WHEN d.must_finish_time IS NULL THEN 1 ELSE 0 END) ASC,
d.must_finish_time ASC,d.delivery_fee DESC
</otherwise>
</choose>
</select>
<select id="selectAdminHallPageVO" resultMap="deliveryMap">
SELECT
d.id, d.order_id, d.group_id, d.worker_id, d.shop_id,
d.get_area_id, d.put_area_id, d.delivery_fee, d.delivery_fee_marketplace,
d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.appointment_delivery, d.finish_time,
d.receiver_name, d.receiver_phone, d.receiver_address,
d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code,
d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures, d.is_big,
d.is_return,d.worker_name, d.arrive_time,d.new_worker,d.worker_phone,
d.transfer_delivery,d.transfer_address_id,d.transfer_address_name,
d.transfer_arrive_time,d.transfer_arrive_image,d.transfer_pickup_code
FROM mall_delivery_order d
LEFT JOIN (
SELECT delivery_order_id, MAX(reassign_time) AS latest_reassign_time
FROM mall_delivery_order_reassign_record
GROUP BY delivery_order_id
) rr ON rr.delivery_order_id = d.id
<where>
AND d.status = 0
<if test="q.regionId != null and q.regionId != ''">
AND d.region_id = #{q.regionId}
</if>
<choose>
<when test="q.deliveryType != null and q.deliveryType == 4">
AND d.worker_id IS NOT NULL AND d.worker_id != ''
<if test="q.workerId != null and q.workerId != ''">
AND d.worker_id = #{q.workerId}
</if>
</when>
<otherwise>
AND (d.worker_id IS NULL OR d.worker_id = '')
<if test="q.deliveryType != null">
AND d.delivery_type = #{q.deliveryType}
</if>
</otherwise>
</choose>
<if test="q.shopId != null and q.shopId != ''">
AND d.shop_id = #{q.shopId}
</if>
<if test="q.shopName != null and q.shopName != ''">
AND d.shop_name like concat('%',#{q.shopName},'%')
</if>
<if test="q.getAreaId != null and q.getAreaId != ''">
AND d.get_area_id = #{q.getAreaId}
</if>
<if test="q.putAreaId != null and q.putAreaId != ''">
AND d.put_area_id = #{q.putAreaId}
</if>
<if test="q.startDate != null and q.startDate != ''">
AND DATE(d.create_time) &gt;= #{q.startDate}
</if>
<if test="q.endDate != null and q.endDate != ''">
AND DATE(d.create_time) &lt;= #{q.endDate}
</if>
</where>
ORDER BY
(CASE WHEN d.must_finish_time IS NOT NULL AND d.must_finish_time &lt; NOW() THEN 0 ELSE 1 END) ASC,
(CASE WHEN rr.latest_reassign_time IS NULL THEN 1 ELSE 0 END) ASC,
rr.latest_reassign_time DESC,
<if test="q.order != null and q.order == 'deliveryFee'">
d.delivery_fee DESC,
</if>
(CASE WHEN d.must_finish_time IS NULL THEN 1 ELSE 0 END) ASC,
d.must_finish_time ASC,d.delivery_fee DESC
</select>
<select id="selectPageVOByStatus" resultMap="deliveryMap">
SELECT
d.id, d.order_id, d.group_id, d.worker_id, d.shop_id,
d.get_area_id, d.put_area_id, d.delivery_fee, d.delivery_fee_marketplace,
d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.appointment_delivery, d.finish_time,
d.receiver_name, d.receiver_phone, d.receiver_address,
d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code,
d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures,
d.is_big,d.is_return,d.worker_name,d.arrive_time,d.new_worker,d.worker_phone,
d.transfer_delivery,d.transfer_address_id,d.transfer_address_name,
d.transfer_arrive_time,d.transfer_arrive_image,d.transfer_pickup_code
FROM mall_delivery_order d
<where>
d.status not in (-1,4)
<if test="q.regionId != null and q.regionId != ''">
AND d.region_id = #{q.regionId}
</if>
<if test="q.workerId != null and q.workerId != ''">
AND d.worker_id = #{q.workerId}
</if>
<if test="q.newWorker != null and q.newWorker != ''">
AND d.new_worker = #{q.newWorker}
</if>
<if test="q.shopId != null and q.shopId != ''">
AND d.shop_id = #{q.shopId}
</if>
<if test="q.status != null">
AND d.status = #{q.status}
</if>
<if test="q.getAreaId != null and q.getAreaId != ''">
AND d.get_area_id = #{q.getAreaId}
</if>
<if test="q.putAreaId != null and q.putAreaId != ''">
AND d.put_area_id = #{q.putAreaId}
</if>
<if test="q.hallOnly != null and q.hallOnly == true">
AND (d.worker_id IS NULL OR d.worker_id = '')
AND d.status = 0
</if>
<if test="q.startDate != null and q.startDate != ''">
AND DATE(d.create_time) &gt;= #{q.startDate}
</if>
<if test="q.endDate != null and q.endDate != ''">
AND DATE(d.create_time) &lt;= #{q.endDate}
</if>
<if test="q.deliveryType != null and (q.workerId == null or q.workerId == '')">
AND d.delivery_type = #{q.deliveryType}
</if>
<if test="q.shopDelivery != null">
AND EXISTS (
SELECT 1 FROM mall_order mo
WHERE mo.id = d.order_id
AND mo.shop_delivery = #{q.shopDelivery}
)
</if>
<if test="q.transferDelivery != null">
AND d.transfer_delivery = #{q.transferDelivery}
</if>
<if test="q.transferArriveEmpty != null and q.transferArriveEmpty == true">
AND d.transfer_arrive_time IS NULL
</if>
</where>
ORDER BY
<if test="q.returnOrderLast != null">
(CASE WHEN d.is_return = 1 THEN 1 ELSE 0 END) ASC,
</if>
<if test="q.deliveryType != null and q.workerId != null and q.workerId != ''">
(CASE WHEN d.delivery_type = #{q.deliveryType} THEN 0 ELSE 1 END) ASC,
</if>
(CASE WHEN d.must_finish_time IS NULL THEN 1 ELSE 0 END) ASC,
d.must_finish_time ASC,d.delivery_fee DESC
</select>
<select id="selectAdminPageVOByStatus" resultMap="deliveryMap">
SELECT
d.id, d.order_id, d.group_id, d.worker_id, d.shop_id,
d.get_area_id, d.put_area_id, d.delivery_fee, d.delivery_fee_marketplace,
d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.appointment_delivery, d.finish_time,
d.receiver_name, d.receiver_phone, d.receiver_address,
d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code,
d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures,
d.is_big,d.is_return,d.worker_name,d.arrive_time,d.new_worker,d.worker_phone,
d.transfer_delivery,d.transfer_address_id,d.transfer_address_name,
d.transfer_arrive_time,d.transfer_arrive_image,d.transfer_pickup_code
FROM mall_delivery_order d
LEFT JOIN mall_order o ON o.id = d.order_id
LEFT JOIN (
SELECT delivery_order_id, MAX(reassign_time) AS latest_reassign_time
FROM mall_delivery_order_reassign_record
GROUP BY delivery_order_id
) rr ON rr.delivery_order_id = d.id
<where>
d.status not in (-1,4)
<if test="q.regionId != null and q.regionId != ''">
AND d.region_id = #{q.regionId}
</if>
<if test="q.workerId != null and q.workerId != ''">
AND d.worker_id = #{q.workerId}
</if>
<if test="q.workerName != null and q.workerName != ''">
AND d.worker_name LIKE CONCAT('%', #{q.workerName}, '%')
</if>
<if test="q.newWorker != null and q.newWorker != ''">
AND d.new_worker = #{q.newWorker}
</if>
<if test="q.shopId != null and q.shopId != ''">
AND d.shop_id = #{q.shopId}
</if>
<if test="q.shopName != null and q.shopName != ''">
AND d.shop_name like concat('%',#{q.shopName},'%')
</if>
<if test="q.status != null">
AND d.status = #{q.status}
</if>
<if test="q.getAreaId != null and q.getAreaId != ''">
AND d.get_area_id = #{q.getAreaId}
</if>
<if test="q.putAreaId != null and q.putAreaId != ''">
AND d.put_area_id = #{q.putAreaId}
</if>
<if test="q.startDate != null and q.startDate != ''">
AND DATE(d.create_time) &gt;= #{q.startDate}
</if>
<if test="q.endDate != null and q.endDate != ''">
AND DATE(d.create_time) &lt;= #{q.endDate}
</if>
<if test="q.deliveryType != null">
AND d.delivery_type = #{q.deliveryType}
</if>
<if test="q.shopDelivery != null">
AND EXISTS (
SELECT 1 FROM mall_order mo
WHERE mo.id = d.order_id
AND mo.shop_delivery = #{q.shopDelivery}
)
</if>
<if test="q.transferDelivery != null">
AND d.transfer_delivery = #{q.transferDelivery}
</if>
<if test="q.transferArriveEmpty != null and q.transferArriveEmpty == true">
AND d.transfer_arrive_time IS NULL
</if>
</where>
ORDER BY (CASE WHEN o.shop_make_time IS NULL THEN 1 ELSE 0 END) ASC,
o.shop_make_time ASC,
(CASE WHEN d.must_finish_time IS NOT NULL AND d.must_finish_time &lt; NOW() THEN 0 ELSE 1 END) ASC,
(CASE WHEN rr.latest_reassign_time IS NULL THEN 1 ELSE 0 END) ASC,
rr.latest_reassign_time DESC,
(CASE WHEN d.must_finish_time IS NULL THEN 1 ELSE 0 END) ASC,
d.must_finish_time ASC,d.delivery_fee DESC
</select>
<select id="selectPageVOByStatusHis" resultMap="deliveryMap">
SELECT
d.id, d.order_id, d.group_id, d.worker_id, d.shop_id,
d.get_area_id, d.put_area_id, d.delivery_fee, d.delivery_fee_marketplace,
d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.appointment_delivery, d.finish_time,
d.receiver_name, d.receiver_phone, d.receiver_address,
d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code,
d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures,
d.is_big,d.is_return,d.worker_name,d.arrive_time,d.new_worker,d.worker_phone,
d.transfer_delivery,d.transfer_address_id,d.transfer_address_name,
d.transfer_arrive_time,d.transfer_arrive_image,d.transfer_pickup_code
FROM mall_delivery_order d
<where>
d.status not in (-1,4)
<if test="q.regionId != null and q.regionId != ''">
AND d.region_id = #{q.regionId}
</if>
<if test="q.workerId != null and q.workerId != ''">
AND d.worker_id = #{q.workerId}
</if>
<if test="q.newWorker != null and q.newWorker != ''">
AND d.new_worker = #{q.newWorker}
</if>
<if test="q.shopId != null and q.shopId != ''">
AND d.shop_id = #{q.shopId}
</if>
<if test="q.status != null">
AND d.status = #{q.status}
</if>
<if test="q.getAreaId != null and q.getAreaId != ''">
AND d.get_area_id = #{q.getAreaId}
</if>
<if test="q.putAreaId != null and q.putAreaId != ''">
AND d.put_area_id = #{q.putAreaId}
</if>
<if test="q.hallOnly != null and q.hallOnly == true">
AND (d.worker_id IS NULL OR d.worker_id = '')
AND d.status = 0
</if>
<if test="q.startDate != null and q.startDate != ''">
AND DATE(d.finish_time) &gt;= #{q.startDate}
</if>
<if test="q.endDate != null and q.endDate != ''">
AND DATE(d.finish_time) &lt;= #{q.endDate}
</if>
<if test="q.deliveryType != null">
AND d.delivery_type = #{q.deliveryType}
</if>
<if test="q.shopDelivery != null">
AND EXISTS (
SELECT 1 FROM mall_order mo
WHERE mo.id = d.order_id
AND mo.shop_delivery = #{q.shopDelivery}
)
</if>
<if test="q.transferDelivery != null">
AND d.transfer_delivery = #{q.transferDelivery}
</if>
<if test="q.transferArriveEmpty != null and q.transferArriveEmpty == true">
AND d.transfer_arrive_time IS NULL
</if>
</where>
ORDER BY d.finish_time desc
</select>
<select id="selectByGroupId" resultMap="deliveryMap">
SELECT
d.id, d.order_id, d.group_id, d.worker_id, d.shop_id,
d.get_area_id, d.put_area_id, d.delivery_fee, d.delivery_fee_marketplace,
d.status, d.create_time, d.accept_time, d.get_time, d.must_finish_time, d.appointment_delivery, d.finish_time,
d.receiver_name, d.receiver_phone, d.receiver_address,
d.shop_name, d.shop_phone, d.shop_address, d.delivery_type, d.number_code,
d.region_id,d.remark, d.all_count, d.phone_number, d.get_codes, d.get_pictures,
d.is_big,d.is_return,d.worker_name,d.arrive_time,d.new_worker,d.worker_phone,
d.transfer_delivery,d.transfer_address_id,d.transfer_address_name,
d.transfer_arrive_time,d.transfer_arrive_image,d.transfer_pickup_code
FROM mall_delivery_order d
where d.group_id = (select id from mall_order_group where 1 = 1
<if test='orderId != null and orderId.trim() neq ""'>
AND group_order_ids like concat('%',#{orderId},'%')
</if>
)
</select>
<!--
统计配送员当前活跃单量
返回:waitPickup(待取货数)、delivering(配送中数)
-->
<select id="countActiveOrdersByWorker" resultType="map">
SELECT
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS waitPickup,
SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS delivering
FROM mall_delivery_order
WHERE worker_id = #{workerId}
AND status IN (1, 2)
</select>
<select id="countOrdersByType" resultType="map">
SELECT delivery_type as deliveryType,count(*) as orderCount
FROM mall_delivery_order
WHERE region_id = #{regionId} and worker_id is null and status = 0 group by delivery_type
</select>
<select id="countOrdersByTypeAdmin" resultType="map">
SELECT delivery_type as deliveryType,count(*) as orderCount
FROM mall_delivery_order d
<where>
AND (d.worker_id IS NULL OR d.worker_id = '')
AND d.status = 0
<if test="q.regionId != null and q.regionId != ''">
AND d.region_id = #{q.regionId}
</if>
<if test="q.shopId != null and q.shopId != ''">
AND d.shop_id = #{q.shopId}
</if>
<if test="q.shopName != null and q.shopName != ''">
AND d.shop_name like concat('%',#{q.shopName},'%')
</if>
<if test="q.getAreaId != null and q.getAreaId != ''">
AND d.get_area_id = #{q.getAreaId}
</if>
<if test="q.putAreaId != null and q.putAreaId != ''">
AND d.put_area_id = #{q.putAreaId}
</if>
<if test="q.startDate != null and q.startDate != ''">
AND DATE(d.create_time) &gt;= #{q.startDate}
</if>
<if test="q.endDate != null and q.endDate != ''">
AND DATE(d.create_time) &lt;= #{q.endDate}
</if>
</where>
GROUP BY delivery_type
</select>
<select id="countAssignedWaitOrdersAdmin" resultType="long">
SELECT count(*)
FROM mall_delivery_order d
<where>
AND d.worker_id IS NOT NULL AND d.worker_id != ''
AND d.status = 0
<if test="q.workerId != null and q.workerId != ''">
AND d.worker_id = #{q.workerId}
</if>
<if test="q.regionId != null and q.regionId != ''">
AND d.region_id = #{q.regionId}
</if>
<if test="q.shopId != null and q.shopId != ''">
AND d.shop_id = #{q.shopId}
</if>
<if test="q.shopName != null and q.shopName != ''">
AND d.shop_name like concat('%',#{q.shopName},'%')
</if>
<if test="q.getAreaId != null and q.getAreaId != ''">
AND d.get_area_id = #{q.getAreaId}
</if>
<if test="q.putAreaId != null and q.putAreaId != ''">
AND d.put_area_id = #{q.putAreaId}
</if>
<if test="q.startDate != null and q.startDate != ''">
AND DATE(d.create_time) &gt;= #{q.startDate}
</if>
<if test="q.endDate != null and q.endDate != ''">
AND DATE(d.create_time) &lt;= #{q.endDate}
</if>
</where>
</select>
<select id="countOrdersLimit" resultType="cc.hiver.core.entity.Worker">
SELECT
t.orderCount,
tt.worker_name AS workerName,
t.worker_id AS workerId
FROM (
-- 子查询:先在主表中完成过滤和聚合,减少数据量
SELECT
COUNT(id) AS orderCount,
worker_id
FROM mall_delivery_order
WHERE `status` = 3
AND region_id = #{regionId}
AND finish_time >= CURDATE()
GROUP BY worker_id
ORDER BY orderCount DESC
LIMIT 20
) t
LEFT JOIN t_worker tt ON t.worker_id = tt.worker_id
ORDER BY t.orderCount DESC;
</select>
<select id="countOrdersWorkerIndex" resultType="java.util.Map">
SELECT
COUNT(id) AS orderCount,
SUM(delivery_fee + delivery_fee_marketplace) as amount
FROM mall_delivery_order
WHERE `status` = 3 and worker_id = #{workerId}
AND finish_time >= CURDATE()
</select>
<select id="selectByOrderIds" resultMap="deliveryMap">
-- 第一部分:直接查 order_id
SELECT * FROM mall_delivery_order WHERE order_id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
UNION -- 使用 UNION 自动去重
-- 第二部分:通过 group_id 关联查询
SELECT * FROM mall_delivery_order
WHERE group_id IN (
SELECT id FROM mall_order_group
WHERE
<foreach collection="ids" item="id" open="(" separator=" OR " close=")">
FIND_IN_SET(#{id}, group_order_ids)
</foreach>
)
</select>
<select id="countOrdersByStatus" resultType="map">
SELECT status ,count(*) as orderCount FROM `mall_delivery_order` where `status` in (0,1,2)
and worker_id = #{workerId} GROUP BY status
</select>
</mapper>