|
|
@@ -0,0 +1,274 @@
|
|
|
+<?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.ylx.order.mapper.AdminOrderMapper">
|
|
|
+
|
|
|
+ <select id="selectAdminOrderPage" resultType="com.ylx.order.domain.vo.AdminOrderPageVO">
|
|
|
+ SELECT
|
|
|
+ o.id AS id,
|
|
|
+ o.order_no AS orderNo,
|
|
|
+ o.create_time AS orderTime,
|
|
|
+ COALESCE(p.title, o.project_name) AS projectName,
|
|
|
+ o.project_duration AS projectDuration,
|
|
|
+ o.appointment_start_time AS appointmentStartTime,
|
|
|
+ COALESCE(p.price, o.base_price) AS unitPrice,
|
|
|
+ 1 AS quantity,
|
|
|
+ p.unit_type AS unitType,
|
|
|
+ o.final_amount AS orderAmount,
|
|
|
+ o.traffic_fee AS trafficFee,
|
|
|
+ o.payment_method AS paymentMethod,
|
|
|
+ u.c_nick_name AS userNickName,
|
|
|
+ o.contact_person_name AS contactPersonName,
|
|
|
+ o.contact_phone_number AS contactPhoneNumber,
|
|
|
+ o.contact_address_info AS contactAddressInfo,
|
|
|
+ o.status AS status,
|
|
|
+ o.exec_status AS execStatus,
|
|
|
+ COALESCE(mt.te_nick_name, o.merchant_nick_name) AS merchantNickName,
|
|
|
+ mt.te_phone AS merchantPhone,
|
|
|
+ p.category_id AS categoryId,
|
|
|
+ sc.name AS categoryName
|
|
|
+ FROM t_order o
|
|
|
+ LEFT JOIN t_wx_user u ON u.id = CAST(o.user_id AS CHAR) AND u.is_delete = 0
|
|
|
+ LEFT JOIN ma_technician mt ON mt.id = o.merchant_id AND mt.is_delete = 0
|
|
|
+ LEFT JOIN project p ON p.id = o.project_id AND p.is_delete = 0
|
|
|
+ LEFT JOIN service_category sc ON sc.id = p.category_id AND sc.is_delete = 0
|
|
|
+ <where>
|
|
|
+ o.is_delete = 0
|
|
|
+ <if test="dto.orderNo != null and dto.orderNo != ''">
|
|
|
+ AND o.order_no LIKE CONCAT('%', #{dto.orderNo}, '%')
|
|
|
+ </if>
|
|
|
+ <if test="dto.queryStartTime != null">
|
|
|
+ AND o.create_time >= #{dto.queryStartTime}
|
|
|
+ </if>
|
|
|
+ <if test="dto.queryEndTime != null">
|
|
|
+ AND o.create_time <= #{dto.queryEndTime}
|
|
|
+ </if>
|
|
|
+ <if test="dto.userKeyword != null and dto.userKeyword != ''">
|
|
|
+ <choose>
|
|
|
+ <when test="dto.userSearchType == 'nickName'">
|
|
|
+ AND u.c_nick_name LIKE CONCAT('%', #{dto.userKeyword}, '%')
|
|
|
+ </when>
|
|
|
+ <when test="dto.userSearchType == 'name'">
|
|
|
+ AND o.contact_person_name LIKE CONCAT('%', #{dto.userKeyword}, '%')
|
|
|
+ </when>
|
|
|
+ <otherwise>
|
|
|
+ AND u.c_phone LIKE CONCAT('%', #{dto.userKeyword}, '%')
|
|
|
+ </otherwise>
|
|
|
+ </choose>
|
|
|
+ </if>
|
|
|
+ <if test="dto.categoryId != null">
|
|
|
+ AND p.category_id = #{dto.categoryId}
|
|
|
+ </if>
|
|
|
+ <if test="dto.projectName != null and dto.projectName != ''">
|
|
|
+ AND o.project_name LIKE CONCAT('%', #{dto.projectName}, '%')
|
|
|
+ </if>
|
|
|
+ <if test="dto.merchantKeyword != null and dto.merchantKeyword != ''">
|
|
|
+ <choose>
|
|
|
+ <when test="dto.merchantSearchType == 'phone'">
|
|
|
+ AND mt.te_phone LIKE CONCAT('%', #{dto.merchantKeyword}, '%')
|
|
|
+ </when>
|
|
|
+ <otherwise>
|
|
|
+ AND o.merchant_nick_name LIKE CONCAT('%', #{dto.merchantKeyword}, '%')
|
|
|
+ </otherwise>
|
|
|
+ </choose>
|
|
|
+ </if>
|
|
|
+ <if test="dto.paymentMethod != null">
|
|
|
+ AND o.payment_method = #{dto.paymentMethod}
|
|
|
+ </if>
|
|
|
+ <choose>
|
|
|
+ <when test="dto.abnormalOrder != null and dto.abnormalOrder">
|
|
|
+ AND o.status IN (7, 8, 9)
|
|
|
+ </when>
|
|
|
+ <when test="dto.status != null">
|
|
|
+ AND o.status = #{dto.status}
|
|
|
+ </when>
|
|
|
+ </choose>
|
|
|
+ <if test="dto.merchantType != null">
|
|
|
+ AND o.merchant_type = #{dto.merchantType}
|
|
|
+ </if>
|
|
|
+ </where>
|
|
|
+ ORDER BY o.create_time DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询服务分类选项 -->
|
|
|
+ <select id="selectServiceCategoryOptions" resultType="com.ylx.order.domain.vo.AdminOrderServiceCategoryVO">
|
|
|
+ SELECT
|
|
|
+ id,
|
|
|
+ service_tag AS serviceTag,
|
|
|
+ name
|
|
|
+ FROM service_category
|
|
|
+ WHERE is_delete = 0
|
|
|
+ ORDER BY sort ASC, id ASC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 根据订单ID逻辑删除服务订单 -->
|
|
|
+ <update id="logicDeleteById">
|
|
|
+ UPDATE t_order
|
|
|
+ SET is_delete = 1,
|
|
|
+ deleted_time = NOW(),
|
|
|
+ update_time = NOW()
|
|
|
+ WHERE id = #{id}
|
|
|
+ AND is_delete = 0
|
|
|
+ </update>
|
|
|
+
|
|
|
+ <select id="selectRefundApplicationOrderById" resultType="com.ylx.massage.domain.CancelOrderApplication">
|
|
|
+ SELECT
|
|
|
+ o.order_no AS orderNo,
|
|
|
+ COALESCE(u.c_openid, CAST(o.user_id AS CHAR)) AS openId,
|
|
|
+ COALESCE(o.contact_person_name, u.c_nick_name) AS userName,
|
|
|
+ COALESCE(o.contact_phone_number, u.c_phone) AS userPhone,
|
|
|
+ CAST(o.merchant_id AS CHAR) AS techId,
|
|
|
+ mt.te_name AS techName,
|
|
|
+ COALESCE(mt.te_nick_name, o.merchant_nick_name) AS techNickName,
|
|
|
+ mt.te_phone AS techPhone,
|
|
|
+ COALESCE(p.title, o.project_name) AS projectName,
|
|
|
+ CAST(o.project_duration AS CHAR) AS projectDuration,
|
|
|
+ CAST(o.project_duration AS CHAR) AS serviceDuration,
|
|
|
+ COALESCE(o.final_amount, 0) AS orderAmount,
|
|
|
+ COALESCE(o.final_amount, 0) AS refundAmount,
|
|
|
+ o.status AS orderStatus
|
|
|
+ FROM t_order o
|
|
|
+ LEFT JOIN t_wx_user u ON u.id = CAST(o.user_id AS CHAR) AND u.is_delete = 0
|
|
|
+ LEFT JOIN ma_technician mt ON mt.id = o.merchant_id AND mt.is_delete = 0
|
|
|
+ LEFT JOIN project p ON p.id = o.project_id AND p.is_delete = 0
|
|
|
+ WHERE o.id = #{id}
|
|
|
+ AND o.is_delete = 0
|
|
|
+ LIMIT 1
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <select id="countPendingRefundApplicationByOrderNo" resultType="java.lang.Integer">
|
|
|
+ SELECT COUNT(1)
|
|
|
+ FROM t_cancel_order_application
|
|
|
+ WHERE order_no = #{orderNo}
|
|
|
+ AND audit_status = 0
|
|
|
+ AND is_delete = 0
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <insert id="insertRefundApplication">
|
|
|
+ INSERT INTO t_cancel_order_application (
|
|
|
+ id,
|
|
|
+ order_no,
|
|
|
+ open_id,
|
|
|
+ user_name,
|
|
|
+ user_phone,
|
|
|
+ tech_id,
|
|
|
+ tech_name,
|
|
|
+ tech_nick_name,
|
|
|
+ tech_phone,
|
|
|
+ project_name,
|
|
|
+ project_duration,
|
|
|
+ service_duration,
|
|
|
+ order_amount,
|
|
|
+ refund_amount,
|
|
|
+ order_status,
|
|
|
+ audit_status,
|
|
|
+ application_time,
|
|
|
+ cancel_order_reason,
|
|
|
+ create_time,
|
|
|
+ update_time,
|
|
|
+ is_delete
|
|
|
+ ) VALUES (
|
|
|
+ #{application.id},
|
|
|
+ #{application.orderNo},
|
|
|
+ #{application.openId},
|
|
|
+ #{application.userName},
|
|
|
+ #{application.userPhone},
|
|
|
+ #{application.techId},
|
|
|
+ #{application.techName},
|
|
|
+ #{application.techNickName},
|
|
|
+ #{application.techPhone},
|
|
|
+ #{application.projectName},
|
|
|
+ #{application.projectDuration},
|
|
|
+ #{application.serviceDuration},
|
|
|
+ #{application.orderAmount},
|
|
|
+ #{application.refundAmount},
|
|
|
+ #{application.orderStatus},
|
|
|
+ #{application.auditStatus},
|
|
|
+ #{application.applicationTime},
|
|
|
+ #{application.cancelOrderReason},
|
|
|
+ #{application.createTime},
|
|
|
+ #{application.updateTime},
|
|
|
+ #{application.isDelete}
|
|
|
+ )
|
|
|
+ </insert>
|
|
|
+
|
|
|
+ <select id="selectOrderDetailInfoById" resultType="com.ylx.order.domain.vo.AdminOrderDetailVO$OrderInfoVO">
|
|
|
+ SELECT
|
|
|
+ o.id,
|
|
|
+ o.order_no AS orderNo,
|
|
|
+ o.status,
|
|
|
+ u.c_nick_name AS userNickName,
|
|
|
+ o.contact_person_name AS contactPersonName,
|
|
|
+ o.contact_phone_number AS contactPhoneNumber,
|
|
|
+ o.contact_address_info AS contactAddressInfo,
|
|
|
+ COALESCE(mt.te_nick_name, o.merchant_nick_name) AS merchantNickName,
|
|
|
+ mt.te_phone AS merchantPhone,
|
|
|
+ DATE_FORMAT(o.appointment_start_time, '%Y-%m-%d %H:%i:%s') AS appointmentStartTime,
|
|
|
+ DATE_FORMAT(o.start_time, '%Y-%m-%d %H:%i:%s') AS startTime,
|
|
|
+ DATE_FORMAT(o.completed_time, '%Y-%m-%d %H:%i:%s') AS completedTime,
|
|
|
+ DATE_FORMAT(o.create_time, '%Y-%m-%d %H:%i:%s') AS createTime,
|
|
|
+ DATE_FORMAT(o.paid_time, '%Y-%m-%d %H:%i:%s') AS paidTime,
|
|
|
+ o.payment_method AS paymentMethod,
|
|
|
+ o.project_duration AS projectDuration,
|
|
|
+ o.user_latitude AS userLatitude,
|
|
|
+ o.user_longitude AS userLongitude,
|
|
|
+ o.merchant_latitude AS merchantLatitude,
|
|
|
+ o.merchant_longitude AS merchantLongitude,
|
|
|
+ o.virtual_latitude AS virtualLatitude,
|
|
|
+ o.virtual_longitude AS virtualLongitude,
|
|
|
+ o.start_photo AS startPhoto,
|
|
|
+ ass.id AS afterSalesServiceId,
|
|
|
+ ass.status AS afterSalesServiceStatus
|
|
|
+ FROM t_order o
|
|
|
+ LEFT JOIN t_wx_user u ON u.id = CAST(o.user_id AS CHAR) AND u.is_delete = 0
|
|
|
+ LEFT JOIN ma_technician mt ON mt.id = o.merchant_id AND mt.is_delete = 0
|
|
|
+ LEFT JOIN after_sales_service ass ON ass.id = (
|
|
|
+ SELECT ass_inner.id
|
|
|
+ FROM after_sales_service ass_inner
|
|
|
+ WHERE ass_inner.order_id = o.id
|
|
|
+ AND ass_inner.is_delete = 0
|
|
|
+ ORDER BY ass_inner.create_time DESC, ass_inner.id DESC
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ WHERE o.id = #{id}
|
|
|
+ AND o.is_delete = 0
|
|
|
+ LIMIT 1
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <select id="selectOrderProjectDetailById" resultType="com.ylx.order.domain.vo.AdminOrderDetailVO$ProjectInfoVO">
|
|
|
+ SELECT
|
|
|
+ COALESCE(p.title, o.project_name) AS projectName,
|
|
|
+ COALESCE(p.cover, o.project_cover) AS projectCover,
|
|
|
+ p.unit_type AS unitType,
|
|
|
+ COALESCE(p.price, o.base_price) AS unitPrice,
|
|
|
+ p.merchant_share_ratio AS merchantCommission,
|
|
|
+ o.final_amount AS finalAmount,
|
|
|
+ o.base_price AS basePrice,
|
|
|
+ o.traffic_fee AS trafficFee,
|
|
|
+ o.coupon_discount AS couponDiscount,
|
|
|
+ ass.id AS afterSalesServiceId,
|
|
|
+ ass.status AS afterSalesServiceStatus
|
|
|
+ FROM t_order o
|
|
|
+ LEFT JOIN project p ON p.id = o.project_id AND p.is_delete = 0
|
|
|
+ LEFT JOIN after_sales_service ass ON ass.id = (
|
|
|
+ SELECT ass_inner.id
|
|
|
+ FROM after_sales_service ass_inner
|
|
|
+ WHERE ass_inner.order_id = o.id
|
|
|
+ AND ass_inner.is_delete = 0
|
|
|
+ ORDER BY ass_inner.create_time DESC, ass_inner.id DESC
|
|
|
+ LIMIT 1
|
|
|
+ )
|
|
|
+ WHERE o.id = #{id}
|
|
|
+ AND o.is_delete = 0
|
|
|
+ LIMIT 1
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <select id="selectOrderOperationLogs" resultType="com.ylx.order.domain.vo.AdminOrderDetailVO$OperationLogVO">
|
|
|
+ SELECT
|
|
|
+ COALESCE(osf.create_by, '系统') AS operator,
|
|
|
+ DATE_FORMAT(osf.create_time, '%Y-%m-%d %H:%i:%s') AS operationTime,
|
|
|
+ osf.status
|
|
|
+ FROM t_order_status_flow osf
|
|
|
+ WHERE osf.order_id = #{id}
|
|
|
+ ORDER BY osf.create_time ASC
|
|
|
+ </select>
|
|
|
+</mapper>
|