2024-11-04 15:07:18 +08:00
<?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= "cn.iocoder.yudao.module.inspection.mapper.InspectionWorkNodeMapper" >
2024-11-14 17:50:14 +08:00
<update id= "cancelAnOrder" >
UPDATE inspection_work_node
SET status = '0', deal_user_id = null, deal_user_name = null, deal_images = null, remark = null
WHERE id = #{id} AND inspection_info_id = #{inspectionInfoId}
</update>
2024-11-15 17:46:37 +08:00
<update id= "recheck" >
UPDATE inspection_work_node
2024-12-11 15:18:50 +08:00
SET status = #{status}, deal_user_id = null, deal_user_name = null, deal_images = null, remark = null,type = null
2024-11-15 17:46:37 +08:00
WHERE id in (
<foreach collection= "list" item= "item" separator= "," >
#{item.id}
</foreach>
)
</update>
2024-11-04 15:07:18 +08:00
<select id= "getWeorkNodesById" resultType= "cn.iocoder.yudao.module.inspection.entity.InspectionWorkNode"
parameterType="java.lang.Integer">
SELECT wn.*,ip.project_name AS projectName
FROM inspection_work_node wn
LEFT JOIN inspection_project ip ON ip.id = wn.project_id
WHERE wn.inspection_info_id = #{inspectionId}
2024-11-05 18:04:02 +08:00
ORDER BY wn.order_num ASC
2024-11-04 15:07:18 +08:00
</select>
2024-11-08 13:28:58 +08:00
<select id= "getRoyaltyList" resultType= "java.util.Map" >
SELECT
node.id AS node_id,
node.project_id,
proj.project_name AS projectName, -- Assuming there's a project name in the inspection project table
node.deal_user_name AS handlerName,
IFNULL(royalty.royalty_amount, 0) / 100 AS royaltyAmount,
2024-11-08 17:35:17 +08:00
node.update_time AS node_create_time,
node.update_time AS royalty_create_time
2024-11-08 13:28:58 +08:00
FROM
inspection_work_node AS node
LEFT JOIN
system_users AS users
ON node.deal_user_id = users.id
LEFT JOIN
inspection_project AS proj -- Assuming this is the table for project details
ON node.project_id = proj.id
LEFT JOIN
inspection_info AS info
ON node.inspection_info_id = info.id
2024-11-08 17:35:17 +08:00
LEFT JOIN
order_info orders
ON info.inspection_order_id = orders.id
LEFT JOIN
inspection_project_royalty AS royalty
ON node.project_id = royalty.project_id and orders.goods_id = royalty.goods_id
2024-11-08 13:28:58 +08:00
<where >
node.status = '2' AND info.status = '1'
<if test= "inspectionWorkNode.createTime != null" >
AND node.create_time = #{inspectionWorkNode.createTime}
</if>
<if test= "inspectionWorkNode.projectId != null" >
AND node.project_id = #{inspectionWorkNode.projectId}
</if>
<if test= "inspectionWorkNode.dealUserId != null" >
AND node.deal_user_id = #{inspectionWorkNode.dealUserId}
</if>
<if test= "inspectionWorkNode.dealUserName != null" >
AND node.deal_user_name LIKE CONCAT('%', #{inspectionWorkNode.dealUserName} , '%')
</if>
<if test= "inspectionWorkNode.rescueStartMonth != null" >
2024-11-25 16:46:51 +08:00
AND DATE_FORMAT(node.create_time, '%Y-%m') = #{inspectionWorkNode.rescueStartMonth}
2024-11-08 13:28:58 +08:00
</if>
<if test= "inspectionWorkNode.rescueStart != null and inspectionWorkNode.rescueEnd != null" >
2024-11-25 16:46:51 +08:00
AND node.create_time BETWEEN #{inspectionWorkNode.rescueStart} AND #{inspectionWorkNode.rescueEnd}
2024-11-08 13:28:58 +08:00
</if>
</where>
ORDER BY
2024-11-25 16:46:51 +08:00
node.create_time DESC;
2024-11-08 13:28:58 +08:00
</select>
<select id= "getRoyaltySum" resultType= "java.util.Map" >
SELECT
IFNULL(SUM(IFNULL(royalty.royalty_amount, 0) / 100 ),0)AS royaltyAmountSum
FROM
inspection_work_node AS node
LEFT JOIN
system_users AS users
ON node.deal_user_id = users.id
LEFT JOIN
inspection_project AS proj -- Assuming this is the table for project details
ON node.project_id = proj.id
LEFT JOIN
inspection_info AS info
ON node.inspection_info_id = info.id
2024-11-08 17:35:17 +08:00
LEFT JOIN
order_info orders
ON info.inspection_order_id = orders.id
LEFT JOIN
inspection_project_royalty AS royalty
ON node.project_id = royalty.project_id and orders.goods_id = royalty.goods_id
2024-11-08 13:28:58 +08:00
<where >
2025-02-15 18:01:18 +08:00
node.status = '2' AND info.status = '1' and node.deleted = 0
2024-11-08 13:28:58 +08:00
<if test= "inspectionWorkNode.createTime != null" >
AND node.create_time = #{inspectionWorkNode.createTime}
</if>
<if test= "inspectionWorkNode.projectId != null" >
AND node.project_id = #{inspectionWorkNode.projectId}
</if>
<if test= "inspectionWorkNode.dealUserId != null" >
AND node.deal_user_id = #{inspectionWorkNode.dealUserId}
</if>
<if test= "inspectionWorkNode.dealUserName != null" >
AND node.deal_user_name LIKE CONCAT('%', #{inspectionWorkNode.dealUserName} , '%')
</if>
<if test= "inspectionWorkNode.rescueStartMonth != null" >
2024-11-25 16:46:51 +08:00
AND DATE_FORMAT(node.create_time, '%Y-%m') = #{inspectionWorkNode.rescueStartMonth}
2024-11-08 13:28:58 +08:00
</if>
<if test= "inspectionWorkNode.rescueStart != null and inspectionWorkNode.rescueEnd != null" >
2024-11-25 16:46:51 +08:00
AND node.create_time BETWEEN #{inspectionWorkNode.rescueStart} AND #{inspectionWorkNode.rescueEnd}
2024-11-08 13:28:58 +08:00
</if>
</where>
ORDER BY
node.create_time DESC;
</select>
2025-04-12 16:39:51 +08:00
<!-- <select id="getStaffCount" resultType="java.util.Map" -->
<!-- parameterType="cn.iocoder.yudao.module.inspection.entity.DlInspectionProject"> -->
<!-- SELECT -->
<!-- su.id AS deal_user_id, -- 处理人员ID -->
<!-- su.nickname, -- 处理人员名称 -->
<!-- su.avatar, -- 处理人员头像 -->
<!-- COUNT(DISTINCT iwn.id) AS orderCount, -- 统计每个员工的唯一订单数量 -->
<!-- SUM(IFNULL(royalty.royalty_amount, 0)) / 100 AS royaltyAmount, -- 计算每个员工的总佣金 -->
<!-- su.mobile, -- 处理人员手机号 -->
<!-- COALESCE(proj_stats.waijianCount, 0) AS waijianCount, -- 包含“外检”的订单数量 -->
<!-- COALESCE(proj_stats.anjianCount, 0) AS anjianCount, -- 包含“安检”的订单数量 -->
<!-- COALESCE(proj_stats.otherCount, 0) AS otherCount -- 其他订单数量(排除“外检”和“安检”) -->
<!-- FROM system_users su -->
<!-- LEFT JOIN system_user_role sr -->
<!-- ON su.id = sr.user_id -->
<!-- LEFT JOIN system_role sr2 -->
<!-- ON sr.role_id = sr2.id -->
<!-- LEFT JOIN inspection_work_node iwn -->
<!-- ON su.id = iwn.deal_user_id -->
<!-- LEFT JOIN inspection_info info -->
<!-- ON iwn.inspection_info_id = info.id -->
<!-- LEFT JOIN order_info orders -->
<!-- ON info.inspection_order_id = orders.id -->
<!-- LEFT JOIN inspection_project_royalty royalty -->
<!-- ON iwn.project_id = royalty.project_id -->
<!-- AND orders.goods_id = royalty.goods_id -->
<!-- LEFT JOIN ( -->
<!-- SELECT -->
<!-- iwn.deal_user_id, -->
<!-- SUM(CASE WHEN proj.project_name LIKE '%外检%' THEN 1 ELSE 0 END) AS waijianCount, -->
<!-- SUM(CASE WHEN proj.project_name LIKE '%安检%' THEN 1 ELSE 0 END) AS anjianCount, -->
<!-- SUM(CASE -->
<!-- WHEN proj.project_name NOT LIKE '%外检%' -->
<!-- AND proj.project_name NOT LIKE '%安检%' -->
<!-- THEN 1 ELSE 0 -->
<!-- END) AS otherCount -- 统计不包含“外检”和“安检”的订单 -->
<!-- FROM inspection_work_node iwn -->
<!-- LEFT JOIN inspection_project proj -->
<!-- ON iwn.project_id = proj.id -->
<!-- LEFT JOIN inspection_info info -->
<!-- ON iwn.inspection_info_id = info.id -->
<!-- WHERE -->
<!-- iwn.deleted = 0 -- 排除已删除的数据 -->
<!-- AND iwn.deal_user_id IS NOT NULL -- 排除 deal_user_id 为空的记录 -->
<!-- AND iwn.status = 2 -->
<!-- AND info.status = 1 -->
<!-- GROUP BY iwn.deal_user_id -->
<!-- ) proj_stats -->
<!-- ON su.id = proj_stats.deal_user_id -- 获取“外检”和“安检”的统计 -->
<!-- WHERE -->
<!-- sr2.service_package_id = 'jiance' -- 角色条件 -->
<!-- AND sr2.code != 'jcyh' -- 排除特定角色 -->
<!-- AND (iwn.deleted = 0 OR iwn.deleted IS NULL) -- 允许 iwn 为空 -->
<!-- AND (iwn.deal_user_id IS NOT NULL OR iwn.deal_user_id IS NULL) -- 允许没有工单的用户 -->
<!-- # AND (iwn.status = 2 OR iwn.status IS NULL) -- 允许 iwn 为空 -->
<!-- AND (iwn.status = 2) -- 允许 iwn 为空 -->
<!-- AND (info.status = 1 OR info.status IS NULL) -->
<!-- <if test="id != null and id != ''"> -->
<!-- AND iwn.project_id = #{id} -- 只在这里加上id过滤 -->
<!-- </if> -->
<!-- GROUP BY su.id -- 根据处理人员ID进行分组 -->
<!-- ORDER BY orderCount DESC; -- 根据接单数量进行降序排序 -->
<!-- </select> -->
2025-04-30 13:18:46 +08:00
<!-- <select id="getStaffCount" resultType="java.util.Map" -->
<!-- parameterType="cn.iocoder.yudao.module.inspection.entity.DlInspectionProject"> -->
<!-- SELECT -->
<!-- iwn.deal_user_id, -- 处理人员ID -->
<!-- su.nickname, -- 处理人员名称 -->
<!-- su.avatar, -- 处理人员头像 -->
<!-- COUNT(DISTINCT iwn.id) AS orderCount, -- 统计每个员工的唯一订单数量 -->
<!-- SUM(IFNULL(royalty.royalty_amount, 0) / 100) AS royaltyAmount, -- 计算每个员工的总佣金 -->
<!-- su.mobile, -- 处理人员手机号 -->
<!-- COALESCE(waijianCount, 0) AS waijianCount, -- 包含“外检”的订单数量 -->
<!-- COALESCE(anjianCount, 0) AS anjianCount, -- 包含“安检”的订单数量 -->
<!-- COALESCE(proj_stats.otherCount, 0) AS otherCount -- 其他订单数量(排除“外检”和“安检”) -->
<!-- FROM -->
<!-- inspection_work_node iwn -->
<!-- LEFT JOIN system_users su ON su.id = iwn.deal_user_id -- 处理人员信息 -->
<!-- LEFT JOIN inspection_info AS info ON iwn.inspection_info_id = info.id -->
<!-- LEFT JOIN order_info orders ON info.inspection_order_id = orders.id -->
<!-- LEFT JOIN inspection_project_royalty AS royalty -->
<!-- ON iwn.project_id = royalty.project_id -->
<!-- AND orders.goods_id = royalty.goods_id -->
<!-- LEFT JOIN ( -->
<!-- SELECT -->
<!-- iwn.deal_user_id, -->
<!-- SUM(CASE WHEN proj.project_name LIKE '环检外检%' THEN 1 ELSE 0 END) AS waijianCount, -->
<!-- SUM(CASE WHEN proj.project_name LIKE '安检%' THEN 1 ELSE 0 END) AS anjianCount, -->
<!-- SUM( -->
<!-- CASE -->
<!-- WHEN proj.project_name NOT LIKE '环检外检%' -->
<!-- AND proj.project_name NOT LIKE '安检%' -->
<!-- THEN 1 ELSE 0 -->
<!-- END -->
<!-- ) AS otherCount -- 统计不包含“外检”和“安检”的订单 -->
<!-- FROM -->
<!-- inspection_work_node iwn -->
<!-- LEFT JOIN inspection_project AS proj ON iwn.project_id = proj.id -->
<!-- LEFT JOIN inspection_info AS info ON iwn.inspection_info_id = info.id -->
<!-- WHERE iwn.deleted = 0 -- 排除已删除的数据 -->
<!-- AND iwn.deal_user_id IS NOT NULL -- 排除 deal_user_id 为 NULL 的记录 -->
<!-- AND iwn.status = 2 -->
<!-- AND info.status = 1 -->
<!-- GROUP BY -->
<!-- iwn.deal_user_id -->
<!-- ) proj_stats ON iwn.deal_user_id = proj_stats.deal_user_id -- 获取“外检”和“安检”的统计 -->
<!-- <where> -->
<!-- iwn.deleted = 0 -- 排除已删除的数据 -->
<!-- AND iwn.deal_user_id IS NOT NULL -- 排除 deal_user_id 为 NULL 的记录 -->
<!-- AND iwn.status = 2 -->
<!-- AND info.status = 1 -->
<!-- <if test="id != null and id != ''"> -->
<!-- AND iwn.project_id = #{id} -- 只在这里加上id过滤 -->
<!-- </if> -->
<!-- </where> -->
<!-- GROUP BY -->
<!-- iwn.deal_user_id -- 根据处理人员ID进行分组 -->
<!-- ORDER BY -->
<!-- orderCount DESC; -- 根据接单数量进行降序排序 -->
<!-- </select> -->
<select id= "getStaffCount" resultType= "cn.iocoder.yudao.module.inspection.vo.StaffProjectCountVO"
2025-02-15 18:01:18 +08:00
parameterType="cn.iocoder.yudao.module.inspection.entity.DlInspectionProject">
2025-05-30 16:23:02 +08:00
SELECT
2025-06-18 14:58:27 +08:00
staff.user_id,
iwn.id,
ip.project_name,
ip.id AS project_id,
GROUP_CONCAT(iwn.inspection_info_id) AS inspectionInfoIds,
su.nickname,
SUM(IF(iwn.node_count = 0,1,iwn.node_count)) count
FROM
inspection_staff staff
LEFT JOIN inspection_work_node iwn ON iwn.deal_user_id = staff.user_id
2025-06-23 17:38:35 +08:00
<if test= "datetimeRange != null" >
AND iwn.create_time BETWEEN concat(#{datetimeRange[0]}, ' 00:00:00') AND concat(#{datetimeRange[1]}, ' 23:59:59')
</if>
2025-06-18 14:58:27 +08:00
LEFT JOIN inspection_project ip ON ip.id = iwn.project_id
2025-07-21 15:42:08 +08:00
LEFT JOIN (
SELECT DISTINCT sur.user_id
FROM system_user_role sur
JOIN system_role sr ON sur.role_id = sr.id
WHERE sr.service_package_id = 'jiance'
AND sr.CODE NOT IN ('jcyh', 'jcywjl')
) valid_roles ON staff.user_id = valid_roles.user_id
2025-06-18 14:58:27 +08:00
LEFT JOIN system_users su ON su.id = staff.user_id
<where >
2025-06-27 17:19:09 +08:00
staff.deleted = 0 AND su.deleted = 0
2025-07-21 15:42:08 +08:00
AND (valid_roles.user_id IS NOT NULL) -- 只保留有合格角色的用户
2025-08-05 14:40:25 +08:00
<if test= "userId != null and userId != ''" >
AND staff.user_id = #{userId}
</if>
2025-06-23 17:38:35 +08:00
2025-06-18 14:58:27 +08:00
</where>
GROUP BY staff.user_id ,ip.id
<!-- SELECT
2025-05-30 16:23:02 +08:00
ip.id AS project_id,
ip.project_name,
is2.user_id,
su.nickname,
2025-06-18 14:58:27 +08:00
iwn.inspection_info_id,
2025-06-16 17:00:56 +08:00
COUNT(iwn.id) AS count,
SUM(iwn.node_count) AS nodeCount
2025-05-30 16:23:02 +08:00
FROM inspection_staff is2
CROSS JOIN inspection_project ip
LEFT JOIN system_users su ON su.id = is2.user_id
2025-06-16 17:00:56 +08:00
left join system_user_role sr on su.id = sr.user_id
left join system_role sr2 on sr.role_id = sr2.id
2025-06-18 14:58:27 +08:00
INNER JOIN inspection_work_node iwn ON
2025-05-30 16:23:02 +08:00
iwn.deal_user_id = is2.user_id
AND iwn.project_id = ip.id
<if test= "datetimeRange != null" >
AND iwn.create_time BETWEEN #{datetimeRange[0]} AND #{datetimeRange[1]}
</if>
WHERE
is2.deleted = 0
2025-06-16 17:00:56 +08:00
AND su.deleted = 0 and sr2.service_package_id = 'jiance' and sr2.code != 'jcyh' and sr2.code != 'jcywjl'
2025-06-18 14:58:27 +08:00
GROUP BY is2.user_id, ip.id-->
2025-02-15 18:01:18 +08:00
</select>
2025-05-30 16:23:02 +08:00
2025-04-28 15:21:05 +08:00
<select id= "selectExceptionNodesByInspectionIds" resultType= "java.util.Map" >
SELECT
w.inspection_info_id AS inspectionInfoId,
w.id AS nodeId,
p.project_name AS projectName
FROM inspection_work_node w
INNER JOIN inspection_project p
ON p.id = w.project_id
WHERE w.inspection_info_id IN
<foreach collection= "ids" item= "id" open= "(" separator= "," close= ")" >
#{id}
</foreach>
AND w.status < > '2' <!-- 未完成 -->
AND EXISTS ( <!-- 同时“制证”节点已完成 -->
SELECT 1
FROM inspection_work_node w2
INNER JOIN inspection_project p2
ON p2.id = w2.project_id
WHERE w2.inspection_info_id = w.inspection_info_id
AND p2.project_name LIKE '%制证%'
AND w2.status = '2'
AND w2.type = 1
)
ORDER BY w.order_num
</select>
2025-05-10 17:50:41 +08:00
<select id= "selectStaffProjectByUserId" resultType= "java.util.Map" >
SELECT
2025-06-03 15:58:45 +08:00
ii.id AS inspectionInfoId,
ii.user_id AS userId,
ii.user_name AS userName,
ii.buy_name AS buyName,
ii.buy_phone AS buyPhone,
ii.car_num AS carNum,
ii.car_model AS carModel,
ii.car_status AS carStatus,
ii.start_time AS startTime,
ii.end_time AS endTime,
ii.unit_name AS unitName,
ii.partner_id,
ii.work_id AS workId,
ii.worker_name AS workerName,
ii.worker_phone AS workerPhone,
ii.worker_avatar AS workerAvatar,
2025-06-23 17:38:35 +08:00
oi.sku_name AS skuName,
2025-06-03 15:58:45 +08:00
CASE
2025-07-09 13:14:27 +08:00
WHEN ii.is_pass = '0' THEN '不合格'
WHEN ii.is_pass = '1' THEN '合格'
2025-06-03 15:58:45 +08:00
WHEN ii.is_pass IS NULL THEN '进行中'
ELSE '未知'
END AS status,
GROUP_CONCAT(ip.project_name ORDER BY iwn.order_num SEPARATOR ',') AS projectName
2025-05-10 17:50:41 +08:00
FROM inspection_work_node iwn
2025-06-03 15:58:45 +08:00
LEFT JOIN inspection_info ii ON iwn.inspection_info_id = ii.id
LEFT JOIN inspection_project ip ON ip.id = iwn.project_id
2025-06-23 17:38:35 +08:00
LEFT JOIN order_info oi ON oi.id = ii.inspection_order_id
2025-06-03 15:58:45 +08:00
<where >
<if test= "query.userId != null" >
AND iwn.deal_user_id = #{query.userId}
</if>
<if test= "query.customerSource != null" >
AND ii.customer_source = #{query.customerSource}
</if>
2025-06-06 10:47:57 +08:00
<if test= "query.datetimeRange != null" >
2025-07-21 15:42:08 +08:00
AND ii.create_time BETWEEN CONCAT(#{query.datetimeRange[0]}, ' 00:00:00') AND CONCAT(#{query.datetimeRange[1]}, ' 23:59:59')
2025-06-06 10:47:57 +08:00
</if>
2025-10-10 18:05:01 +08:00
<if test= "query.type != null and query.type == 1" >
AND (oi.pay_type = 'sz' OR oi.cashier_confirm != '1' OR oi.pay_money IS NULL)
2025-06-06 10:47:57 +08:00
</if>
<if test= "query.bussiness != null" >
AND ii.business_channel = #{query.bussiness}
</if>
<if test= "query.projectId != null" >
AND ip.id = #{query.projectId}
</if>
2025-10-10 18:05:01 +08:00
<if test= "query.type != 1" >
AND iwn.status = '2'
</if>
2025-06-03 15:58:45 +08:00
AND iwn.deleted = b'0'
</where>
2025-05-10 17:50:41 +08:00
GROUP BY ii.id
ORDER BY ii.start_time DESC;
</select>
2025-08-05 14:40:25 +08:00
<select id= "queryStaffCountGroupByGoods" resultType= "java.util.Map" >
2025-09-11 13:23:28 +08:00
WITH goods_totals AS (
2025-08-05 14:40:25 +08:00
SELECT
2025-09-11 13:23:28 +08:00
oi.goods_title,
ii.tenant_id,
COUNT(DISTINCT ii.id) AS total_goods_count
2025-08-05 14:40:25 +08:00
FROM
2025-09-11 13:23:28 +08:00
inspection_work_node iwn
JOIN
inspection_info ii ON iwn.inspection_info_id = ii.id
JOIN
order_info oi ON ii.inspection_order_id = oi.id
2025-08-05 14:40:25 +08:00
WHERE
2025-09-11 13:23:28 +08:00
iwn.deleted = b'0'
2025-08-05 14:40:25 +08:00
<if test= "datetimeRange != null and datetimeRange.size() == 2" >
AND ii.create_time BETWEEN CONCAT(#{datetimeRange[0]}, ' 00:00:00') AND CONCAT(#{datetimeRange[1]}, ' 23:59:59')
</if>
2025-09-11 13:23:28 +08:00
AND iwn.status = '2'
AND ii.deleted = 0
AND oi.deleted = 0
2025-08-05 14:40:25 +08:00
GROUP BY
2025-09-11 13:23:28 +08:00
oi.goods_title
)
SELECT
oi.goods_title AS goodsTitle,
COUNT(DISTINCT ii.id) AS totalCount,
gt.total_goods_count AS goodsTotalCount,
ROUND(COUNT(DISTINCT ii.id) * 100.0 / gt.total_goods_count, 2) AS percentage
FROM
inspection_work_node iwn
JOIN
inspection_info ii ON iwn.inspection_info_id = ii.id
JOIN
order_info oi ON ii.inspection_order_id = oi.id
JOIN
goods_totals gt ON oi.goods_title = gt.goods_title
WHERE
iwn.deal_user_id = #{userId}
AND iwn.deleted = b'0'
<if test= "datetimeRange != null and datetimeRange.size() == 2" >
AND ii.create_time BETWEEN CONCAT(#{datetimeRange[0]}, ' 00:00:00') AND CONCAT(#{datetimeRange[1]}, ' 23:59:59')
</if>
AND iwn.status = '2'
AND ii.deleted = 0
AND oi.deleted = 0
GROUP BY
oi.goods_title, gt.total_goods_count
ORDER BY
totalCount DESC;
2025-08-05 14:40:25 +08:00
</select>
<select id= "queryStaffInspectionCount" resultType= "java.util.Map" >
SELECT
COUNT(*) AS initialCheckCount,
COALESCE(SUM(CASE
WHEN node_count > 1 THEN node_count - 1
ELSE 0
END), 0) AS recheckCount
FROM inspection_work_node
WHERE deleted = b'0'
AND deal_user_id = #{userId}
AND status = '2'
<if test= "datetimeRange != null and datetimeRange.size() == 2" >
AND create_time BETWEEN CONCAT(#{datetimeRange[0]}, ' 00:00:00') AND CONCAT(#{datetimeRange[1]}, ' 23:59:59')
</if>
</select>
<select id= "getStaffCountByUserId" resultType= "cn.iocoder.yudao.module.inspection.vo.StaffProjectCountVO" >
SELECT
staff.user_id,
iwn.id,
ip.project_name,
ip.id AS project_id,
GROUP_CONCAT(iwn.inspection_info_id) AS inspectionInfoIds,
su.nickname,
SUM(IF(iwn.node_count = 0, 1, iwn.node_count)) AS count
FROM
inspection_staff staff
LEFT JOIN inspection_work_node iwn ON iwn.deal_user_id = staff.user_id
<if test= "datetimeRange != null" >
AND iwn.create_time BETWEEN concat(#{datetimeRange[0]}, ' 00:00:00') AND concat(#{datetimeRange[1]}, ' 23:59:59')
</if>
-- ✅ 新增两个表连接
LEFT JOIN inspection_info ii ON iwn.inspection_info_id = ii.id
LEFT JOIN order_info oi ON ii.inspection_order_id = oi.id
-- ✅ 项目表不变
LEFT JOIN inspection_project ip ON ip.id = iwn.project_id
LEFT JOIN (
SELECT DISTINCT sur.user_id
FROM system_user_role sur
JOIN system_role sr ON sur.role_id = sr.id
WHERE sr.service_package_id = 'jiance'
AND sr.CODE NOT IN ('jcyh', 'jcywjl')
) valid_roles ON staff.user_id = valid_roles.user_id
LEFT JOIN system_users su ON su.id = staff.user_id
<where >
staff.deleted = 0 AND su.deleted = 0
AND valid_roles.user_id IS NOT NULL -- 只保留有合格角色的用户
<if test= "userId != null and userId != ''" >
AND staff.user_id = #{userId}
</if>
<!-- ✅ 根据 goodsTitle 条件过滤 -->
<if test= "goodsTitle != null and goodsTitle != ''" >
AND oi.goods_title LIKE CONCAT('%', #{goodsTitle}, '%')
</if>
</where>
GROUP BY staff.user_id, ip.id;
</select>
2025-10-09 17:01:03 +08:00
<select id= "queryOutputMoneyStatistics" resultType= "java.util.Map" >
SELECT
iw.deal_user_id,
-- 初检公示产值: 流程次数为1的订单公示价格
COALESCE(SUM(CASE WHEN iw.node_count = 1 THEN oi.goods_price ELSE 0 END) / 100, 0) AS initialInspectionOutputValue,
-- 复检公示产值: 流程次数大于1的订单公示价格总和
COALESCE(SUM(CASE WHEN iw.node_count > 1 THEN oi.goods_price ELSE 0 END) / 100, 0) AS recheckInspectionOutputValue,
-- 初检合格产值: 流程次数为1且status=2且type='1'的订单公示价格
COALESCE(SUM(CASE WHEN iw.node_count = 1 AND iw.status = '2' AND iw.type = '1' THEN oi.goods_price ELSE 0 END) / 100, 0) AS initialInspectionPassOutputValue,
-- 复检合格产值: 流程次数大于1且status=2且type='1'的订单公示价格总和
COALESCE(SUM(CASE WHEN iw.node_count > 1 AND iw.status = '2' AND iw.type = '1' THEN oi.goods_price ELSE 0 END) / 100, 0) AS recheckInspectionPassOutputValue
FROM
inspection_work_node iw
JOIN
inspection_info ii ON iw.inspection_info_id = ii.id
JOIN
order_info oi ON ii.inspection_order_id = oi.id
WHERE
iw.deal_user_id = #{userId} -- 替换为所需的处理人ID
AND iw.deleted = 0 -- 确保流程未被删除
AND ii.deleted = 0 -- 确保检测信息未被删除
<if test= "datetimeRange != null and datetimeRange.size() == 2" >
AND iw.create_time BETWEEN CONCAT(#{datetimeRange[0]}, ' 00:00:00') AND CONCAT(#{datetimeRange[1]}, ' 23:59:59')
</if>
GROUP BY
iw.deal_user_id;
</select>
2024-11-04 15:07:18 +08:00
</mapper>