2024-07-07 21:09:28 +08:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8" ?>
|
|
|
|
|
|
<!DOCTYPE mapper
|
2025-02-15 10:45:23 +08:00
|
|
|
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
|
|
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
2024-07-07 21:09:28 +08:00
|
|
|
|
<mapper namespace="com.ruoyi.oa.mapper.SysOaProjectMapper">
|
|
|
|
|
|
|
|
|
|
|
|
<resultMap type="com.ruoyi.oa.domain.SysOaProject" id="SysOaProjectResult">
|
|
|
|
|
|
<result property="projectId" column="project_id"/>
|
|
|
|
|
|
<result property="projectName" column="project_name"/>
|
|
|
|
|
|
<result property="projectNum" column="project_num"/>
|
|
|
|
|
|
<result property="projectType" column="project_type"/>
|
|
|
|
|
|
<result property="address" column="address"/>
|
|
|
|
|
|
<result property="funds" column="funds"/>
|
|
|
|
|
|
<result property="functionary" column="functionary"/>
|
|
|
|
|
|
<result property="beginTime" column="begin_time"/>
|
|
|
|
|
|
<result property="finishTime" column="finish_time"/>
|
|
|
|
|
|
<result property="delivery" column="delivery"/>
|
|
|
|
|
|
<result property="guarantee" column="guarantee"/>
|
|
|
|
|
|
<result property="introduction" column="introduction"/>
|
|
|
|
|
|
<result property="projectGrade" column="project_grade"/>
|
|
|
|
|
|
<result property="projectStatus" column="project_status"/>
|
|
|
|
|
|
<result property="contractId" column="contract_id"/>
|
|
|
|
|
|
<result property="invoiceName" column="invoice_name"/>
|
|
|
|
|
|
<result property="invoiceNumber" column="invoice_number"/>
|
|
|
|
|
|
<result property="invoiceAddress" column="invoice_address"/>
|
|
|
|
|
|
<result property="invoiceBank" column="invoice_bank"/>
|
|
|
|
|
|
<result property="accessory" column="accessory"/>
|
|
|
|
|
|
<result property="bail" column="bail"/>
|
|
|
|
|
|
<result property="remark" column="remark"/>
|
|
|
|
|
|
<result property="createBy" column="create_by"/>
|
|
|
|
|
|
<result property="createTime" column="create_time"/>
|
|
|
|
|
|
<result property="updateBy" column="update_by"/>
|
|
|
|
|
|
<result property="updateTime" column="update_time"/>
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
2024-11-16 20:08:00 +08:00
|
|
|
|
<resultMap type="com.ruoyi.oa.domain.vo.SysOaProjectVo" id="SysOaProjectVoResult">
|
|
|
|
|
|
<result property="projectId" column="project_id"/>
|
|
|
|
|
|
<result property="projectName" column="project_name"/>
|
|
|
|
|
|
<result property="projectNum" column="project_num"/>
|
|
|
|
|
|
<result property="projectType" column="project_type"/>
|
|
|
|
|
|
<result property="address" column="address"/>
|
|
|
|
|
|
<result property="funds" column="funds"/>
|
|
|
|
|
|
<result property="functionary" column="functionary"/>
|
|
|
|
|
|
<result property="beginTime" column="begin_time"/>
|
|
|
|
|
|
<result property="finishTime" column="finish_time"/>
|
|
|
|
|
|
<result property="delivery" column="delivery"/>
|
|
|
|
|
|
<result property="guarantee" column="guarantee"/>
|
|
|
|
|
|
<result property="introduction" column="introduction"/>
|
|
|
|
|
|
<result property="projectGrade" column="project_grade"/>
|
|
|
|
|
|
<result property="projectStatus" column="project_status"/>
|
|
|
|
|
|
<result property="contractId" column="contract_id"/>
|
|
|
|
|
|
<result property="invoiceName" column="invoice_name"/>
|
|
|
|
|
|
<result property="invoiceNumber" column="invoice_number"/>
|
|
|
|
|
|
<result property="invoiceAddress" column="invoice_address"/>
|
|
|
|
|
|
<result property="invoiceBank" column="invoice_bank"/>
|
|
|
|
|
|
<result property="accessory" column="accessory"/>
|
|
|
|
|
|
<result property="bail" column="bail"/>
|
|
|
|
|
|
<result property="remark" column="remark"/>
|
|
|
|
|
|
<result property="createBy" column="create_by"/>
|
|
|
|
|
|
<result property="createTime" column="create_time"/>
|
|
|
|
|
|
<result property="count" column="count"/>
|
2024-12-16 11:27:43 +08:00
|
|
|
|
<result property="laborCost" column="labor_cost"/>
|
2025-05-20 09:11:45 +08:00
|
|
|
|
<result property="projectCode" column="project_code"/>
|
2025-05-21 11:55:43 +08:00
|
|
|
|
|
2024-11-16 20:08:00 +08:00
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
2024-07-07 21:09:28 +08:00
|
|
|
|
|
2024-11-06 14:50:00 +08:00
|
|
|
|
<resultMap type="com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo" id="SysOaOutWarehouseListVoResult">
|
|
|
|
|
|
<result property="projectId" column="project_id"/>
|
|
|
|
|
|
<result property="projectName" column="project_name"/>
|
|
|
|
|
|
<result property="projectName" column="create_time"/>
|
|
|
|
|
|
<association property="outWarehouseVoList" javaType="java.util.List" resultMap="outWarehouseResult"/>
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-03-20 18:19:31 +08:00
|
|
|
|
<resultMap type="com.ruoyi.oa.domain.vo.SysOaWarehouseDetailVo" id="outWarehouseResult">
|
2024-11-06 14:50:00 +08:00
|
|
|
|
<result property="id" column="soow_id"/>
|
|
|
|
|
|
<result property="amount" column="amount"/>
|
|
|
|
|
|
<result property="warehouseId" column="warehouse_id"/>
|
|
|
|
|
|
<result property="warehouseName" column="name"/>
|
|
|
|
|
|
<result property="createTime" column="out_create_time"/>
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<select id="selectPageOutList" resultMap="SysOaOutWarehouseListVoResult">
|
2025-02-15 10:45:23 +08:00
|
|
|
|
select sop.project_id,
|
|
|
|
|
|
project_name,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
sop.project_code,
|
2025-02-15 10:45:23 +08:00
|
|
|
|
soow.warehouse_id,
|
|
|
|
|
|
soow.id as soow_id,
|
|
|
|
|
|
soow.amount,
|
|
|
|
|
|
soow.create_time as out_create_time,
|
|
|
|
|
|
sow.name
|
2024-11-06 14:50:00 +08:00
|
|
|
|
from sys_oa_project sop
|
2025-03-20 18:19:31 +08:00
|
|
|
|
left join sys_oa_warehouse_detail soow on soow.project_id = sop.project_id
|
2024-11-06 14:50:00 +08:00
|
|
|
|
left join sys_oa_warehouse sow on sow.id = soow.warehouse_id
|
|
|
|
|
|
${ew.getCustomSqlSegment}
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
2024-12-16 11:27:43 +08:00
|
|
|
|
<select id="getProjectDataByMonth" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
2025-04-01 17:22:34 +08:00
|
|
|
|
SELECT
|
|
|
|
|
|
p.project_id,
|
|
|
|
|
|
p.project_name,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
p.project_code,
|
2025-04-01 17:22:34 +08:00
|
|
|
|
p.color,
|
|
|
|
|
|
-- 子查询里已经聚合完 labor_cost
|
|
|
|
|
|
a.labor_cost,
|
|
|
|
|
|
-- 同理财务部分
|
|
|
|
|
|
f.total_price
|
|
|
|
|
|
FROM sys_oa_project AS p
|
|
|
|
|
|
LEFT JOIN (
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
project_id,
|
|
|
|
|
|
ROUND(SUM(day_length + hour / 9), 2) AS labor_cost
|
|
|
|
|
|
FROM sys_oa_attendance
|
|
|
|
|
|
WHERE create_time BETWEEN #{firstDay} AND #{lastDay}
|
|
|
|
|
|
AND del_flag = '0'
|
|
|
|
|
|
GROUP BY project_id
|
|
|
|
|
|
) AS a ON p.project_id = a.project_id
|
|
|
|
|
|
LEFT JOIN (
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
sof.project_id,
|
2025-03-22 18:22:09 +08:00
|
|
|
|
SUM(
|
2025-04-01 17:22:34 +08:00
|
|
|
|
CASE WHEN sof.finance_type = 0 THEN sod.price ELSE 0 END
|
2025-03-22 18:22:09 +08:00
|
|
|
|
) AS total_price
|
2025-04-01 17:22:34 +08:00
|
|
|
|
FROM sys_oa_finance sof
|
|
|
|
|
|
JOIN sys_oa_detail sod ON sof.finance_id = sod.finance_id
|
|
|
|
|
|
AND sod.create_time BETWEEN #{firstDay} AND #{lastDay}
|
|
|
|
|
|
WHERE sof.create_time BETWEEN #{firstDay} AND #{lastDay}
|
|
|
|
|
|
GROUP BY sof.project_id
|
|
|
|
|
|
) AS f ON p.project_id = f.project_id
|
|
|
|
|
|
|
|
|
|
|
|
-- 最后只要在这里加一个 WHERE 条件,过滤掉 labor_cost=0 或者为空
|
|
|
|
|
|
WHERE a.labor_cost > 0
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-16 11:27:43 +08:00
|
|
|
|
</select>
|
2024-11-16 20:08:00 +08:00
|
|
|
|
|
2024-12-30 16:44:53 +08:00
|
|
|
|
<select id="getProjectDataByMonthAndDate" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
2025-02-15 10:45:23 +08:00
|
|
|
|
select sum(soa.day_length + soa.hour / 8) as labor_cost,
|
|
|
|
|
|
color,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
sop.project_code,
|
2025-02-15 10:45:23 +08:00
|
|
|
|
sop.project_name,
|
|
|
|
|
|
date_format(soa.create_time, '%Y-%m-%d') as create_time
|
|
|
|
|
|
from sys_oa_project sop
|
|
|
|
|
|
left join sys_oa_attendance soa on sop.project_id = soa.project_id
|
2024-12-30 16:44:53 +08:00
|
|
|
|
where soa.create_time between #{firstDay} and #{lastDay}
|
|
|
|
|
|
and soa.del_flag = '0'
|
|
|
|
|
|
group by sop.project_id,create_time
|
|
|
|
|
|
</select>
|
2025-03-10 21:02:00 +08:00
|
|
|
|
<select id="selectListToCost" resultType="com.ruoyi.oa.domain.vo.SysOaCostAllVo">
|
|
|
|
|
|
SELECT
|
2025-03-19 21:37:54 +08:00
|
|
|
|
sop.project_name,sop.project_num,sop.project_id,sop.funds,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
sop.project_code,
|
2025-03-10 21:02:00 +08:00
|
|
|
|
|
|
|
|
|
|
(
|
|
|
|
|
|
SELECT COALESCE(SUM(soc.cost),0)
|
|
|
|
|
|
FROM sys_oa_claim soc
|
|
|
|
|
|
WHERE soc.project_id = sop.project_id
|
|
|
|
|
|
) AS claimCost,
|
|
|
|
|
|
|
|
|
|
|
|
(
|
2025-03-19 21:37:54 +08:00
|
|
|
|
SELECT COALESCE(SUM(sod.price), 0)
|
|
|
|
|
|
FROM sys_oa_finance sof
|
|
|
|
|
|
JOIN sys_oa_detail sod ON sof.finance_id = sod.finance_id
|
|
|
|
|
|
WHERE sof.project_id = sop.project_id
|
|
|
|
|
|
AND sof.finance_type = 0
|
2025-03-10 21:02:00 +08:00
|
|
|
|
) AS materialCost,
|
|
|
|
|
|
|
|
|
|
|
|
(
|
|
|
|
|
|
SELECT COALESCE(ROUND(SUM((soa.day_length * 9 + soa.hour) / 9),1), 0)
|
|
|
|
|
|
FROM sys_oa_attendance soa
|
|
|
|
|
|
WHERE soa.project_id = sop.project_id
|
|
|
|
|
|
) AS peopleDay,
|
|
|
|
|
|
|
|
|
|
|
|
(
|
|
|
|
|
|
SELECT COALESCE(SUM(ROUND((soa.day_length * 9 + soa.hour) / 9, 1) * su.labor_cost),0)
|
|
|
|
|
|
FROM sys_oa_attendance soa
|
|
|
|
|
|
JOIN sys_user su ON soa.user_id = su.user_id
|
|
|
|
|
|
WHERE soa.project_id = sop.project_id
|
|
|
|
|
|
) AS userCost
|
|
|
|
|
|
FROM sys_oa_project sop
|
|
|
|
|
|
${ew.getCustomSqlSegment}
|
|
|
|
|
|
|
|
|
|
|
|
</select>
|
2024-12-30 16:44:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-03-13 00:03:59 +08:00
|
|
|
|
<select id="selectProjectDetails" parameterType="Long" resultType="java.util.Map">
|
2025-03-19 21:37:54 +08:00
|
|
|
|
SELECT JSON_OBJECT(
|
|
|
|
|
|
'userCostList',
|
|
|
|
|
|
COALESCE(
|
2025-04-12 14:30:23 +08:00
|
|
|
|
(SELECT JSON_ARRAYAGG(
|
|
|
|
|
|
JSON_OBJECT(
|
|
|
|
|
|
'userId', CAST(uc.userId AS CHAR),
|
|
|
|
|
|
'nickName', COALESCE(uc.nickName, ''),
|
|
|
|
|
|
'laborCost', ROUND(COALESCE(uc.laborCost, 0), 1),
|
|
|
|
|
|
'attendenceNum', ROUND(COALESCE(uc.attendenceNum, 0), 1)
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
FROM (SELECT a.user_id AS userId,
|
|
|
|
|
|
u.nick_name AS nickName,
|
|
|
|
|
|
COALESCE(
|
|
|
|
|
|
SUM(
|
|
|
|
|
|
ROUND((a.day_length * 9 + a.hour) / 9, 1) * u.labor_cost
|
|
|
|
|
|
),
|
|
|
|
|
|
0
|
|
|
|
|
|
) AS laborCost,
|
|
|
|
|
|
COALESCE(
|
|
|
|
|
|
ROUND(
|
|
|
|
|
|
SUM((a.day_length * 9 + a.hour) / 9), 1
|
|
|
|
|
|
),
|
|
|
|
|
|
0
|
|
|
|
|
|
) AS attendenceNum
|
|
|
|
|
|
FROM sys_oa_attendance a
|
|
|
|
|
|
INNER JOIN sys_user u
|
|
|
|
|
|
ON a.user_id = u.user_id
|
|
|
|
|
|
WHERE a.project_id = #{projectId}
|
|
|
|
|
|
AND a.del_flag = 0
|
|
|
|
|
|
GROUP BY a.user_id) uc),
|
2025-03-19 21:37:54 +08:00
|
|
|
|
JSON_ARRAY()
|
|
|
|
|
|
),
|
|
|
|
|
|
'materialList',
|
|
|
|
|
|
COALESCE(
|
2025-04-12 14:30:23 +08:00
|
|
|
|
(SELECT JSON_ARRAYAGG(
|
|
|
|
|
|
JSON_OBJECT(
|
|
|
|
|
|
'detailId', CAST(d.detail_id AS CHAR),
|
|
|
|
|
|
'detailTitle', COALESCE(d.detail_title, ''),
|
|
|
|
|
|
'price', COALESCE(d.price, 0),
|
|
|
|
|
|
'financeParties', COALESCE(f.finance_parties, ''),
|
|
|
|
|
|
'remark', COALESCE(f.remark, '')
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
FROM sys_oa_finance f
|
|
|
|
|
|
INNER JOIN sys_oa_detail d
|
|
|
|
|
|
ON f.finance_id = d.finance_id
|
|
|
|
|
|
WHERE f.project_id = #{projectId}
|
|
|
|
|
|
AND f.finance_type = 0),
|
2025-03-19 21:37:54 +08:00
|
|
|
|
JSON_ARRAY()
|
|
|
|
|
|
),
|
|
|
|
|
|
'claimList',
|
|
|
|
|
|
COALESCE(
|
2025-04-12 14:30:23 +08:00
|
|
|
|
(SELECT JSON_ARRAYAGG(
|
|
|
|
|
|
JSON_OBJECT(
|
|
|
|
|
|
'claimId', CAST(cl.claimId AS CHAR),
|
|
|
|
|
|
'nickName', COALESCE(cl.nickName, ''),
|
|
|
|
|
|
'cost', COALESCE(cl.cost, 0),
|
|
|
|
|
|
'remark', COALESCE(cl.remark, '')
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
FROM (SELECT c.claim_id AS claimId,
|
|
|
|
|
|
COALESCE(u.nick_name, '') AS nickName,
|
|
|
|
|
|
COALESCE(c.cost, 0) AS cost,
|
|
|
|
|
|
COALESCE(c.remark, '') AS remark
|
|
|
|
|
|
FROM sys_oa_claim c
|
|
|
|
|
|
INNER JOIN sys_user u
|
|
|
|
|
|
ON c.user_id = u.user_id
|
|
|
|
|
|
WHERE c.project_id = #{projectId}
|
|
|
|
|
|
AND c.del_flag = 0) cl),
|
2025-03-19 21:37:54 +08:00
|
|
|
|
JSON_ARRAY()
|
|
|
|
|
|
)
|
|
|
|
|
|
) AS data
|
2025-03-13 00:03:59 +08:00
|
|
|
|
FROM sys_oa_project p
|
|
|
|
|
|
WHERE p.project_id = #{projectId}
|
2025-03-19 21:37:54 +08:00
|
|
|
|
|
2025-03-13 00:03:59 +08:00
|
|
|
|
</select>
|
2025-03-30 19:43:55 +08:00
|
|
|
|
<select id="selectVoPlus" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
|
|
|
|
|
SELECT
|
2025-05-08 20:42:58 +08:00
|
|
|
|
p.pre_pay,
|
|
|
|
|
|
p.trade_type,
|
2025-03-30 19:43:55 +08:00
|
|
|
|
p.project_id,
|
|
|
|
|
|
p.project_name,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
p.project_code,
|
2025-03-30 19:43:55 +08:00
|
|
|
|
p.project_num,
|
|
|
|
|
|
p.project_type,
|
|
|
|
|
|
p.address,
|
|
|
|
|
|
p.funds,
|
|
|
|
|
|
p.functionary,
|
|
|
|
|
|
p.begin_time,
|
|
|
|
|
|
p.finish_time,
|
|
|
|
|
|
p.delivery,
|
|
|
|
|
|
p.guarantee,
|
|
|
|
|
|
p.introduction,
|
|
|
|
|
|
p.project_grade,
|
|
|
|
|
|
p.project_status,
|
|
|
|
|
|
p.contract_id,
|
|
|
|
|
|
p.invoice_name,
|
|
|
|
|
|
p.invoice_number,
|
|
|
|
|
|
p.invoice_address,
|
|
|
|
|
|
p.invoice_bank,
|
|
|
|
|
|
p.accessory,
|
|
|
|
|
|
p.bail,
|
|
|
|
|
|
p.remark,
|
|
|
|
|
|
p.create_by,
|
|
|
|
|
|
p.create_time,
|
|
|
|
|
|
p.update_by,
|
|
|
|
|
|
p.update_time,
|
|
|
|
|
|
p.is_postpone,
|
|
|
|
|
|
p.postpone_reason,
|
|
|
|
|
|
p.postpone_time,
|
|
|
|
|
|
p.color,
|
|
|
|
|
|
TIMESTAMPDIFF(DAY, NOW(), p.postpone_time) AS remainTime
|
|
|
|
|
|
FROM sys_oa_project p
|
2025-04-17 16:46:47 +08:00
|
|
|
|
|
2025-03-30 19:43:55 +08:00
|
|
|
|
${ew.getCustomSqlSegment}
|
|
|
|
|
|
</select>
|
2025-03-13 00:03:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-04-12 14:30:23 +08:00
|
|
|
|
|
|
|
|
|
|
<!-- 最内层 TaskItem -->
|
|
|
|
|
|
<resultMap id="TaskItemResultMap" type="com.ruoyi.oa.domain.vo.SysOaTaskItemVo">
|
|
|
|
|
|
<id property="itemId" column="item_id"/>
|
|
|
|
|
|
<result property="files" column="file_urls"/>
|
|
|
|
|
|
<result property="nickName" column="nick_name"/>
|
|
|
|
|
|
<result property="signTime" column="sign_time"/>
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Task, 包含 List<TaskItem> -->
|
|
|
|
|
|
<resultMap id="TaskResultMap" type="com.ruoyi.oa.domain.vo.SysOaTaskVo">
|
|
|
|
|
|
<id property="taskId" column="task_id"/>
|
|
|
|
|
|
<result property="taskType" column="task_type"/>
|
|
|
|
|
|
<result property="status" column="task_status"/>
|
|
|
|
|
|
|
|
|
|
|
|
<collection property="taskItemVoList"
|
|
|
|
|
|
resultMap="TaskItemResultMap"
|
|
|
|
|
|
column="item_id"
|
|
|
|
|
|
javaType="ArrayList" />
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Project, 包含 List<Task> -->
|
|
|
|
|
|
<resultMap id="ProjectResultMap" type="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
|
|
|
|
|
<id property="projectId" column="p_id"/>
|
|
|
|
|
|
<result property="projectName" column="project_name"/>
|
|
|
|
|
|
<result property="updateTime" column="update_time"/>
|
|
|
|
|
|
|
|
|
|
|
|
<collection property="taskList"
|
|
|
|
|
|
resultMap="TaskResultMap"
|
|
|
|
|
|
column="task_id"
|
|
|
|
|
|
javaType="ArrayList" />
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<select id="selectFileVoList" resultMap="ProjectResultMap">
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
sop.project_id AS p_id,
|
|
|
|
|
|
sop.project_name AS project_name,
|
|
|
|
|
|
sop.update_time,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
sop.project_code,
|
2025-04-12 14:30:23 +08:00
|
|
|
|
t.task_id AS task_id,
|
|
|
|
|
|
t.task_type AS task_type,
|
|
|
|
|
|
t.status AS task_status,
|
|
|
|
|
|
|
|
|
|
|
|
CASE
|
|
|
|
|
|
WHEN t.status = 0 THEN u0.nick_name
|
|
|
|
|
|
WHEN t.status = 1 THEN u1.nick_name
|
|
|
|
|
|
ELSE ''
|
|
|
|
|
|
END AS nick_name,
|
|
|
|
|
|
|
|
|
|
|
|
ti.item_id AS item_id,
|
|
|
|
|
|
case
|
|
|
|
|
|
when ti.sign_time is not null then ti.sign_time
|
|
|
|
|
|
else t.finish_time
|
|
|
|
|
|
end AS sign_time,
|
|
|
|
|
|
|
|
|
|
|
|
GROUP_CONCAT(
|
2025-05-10 22:17:04 +08:00
|
|
|
|
so.url
|
2025-04-12 14:30:23 +08:00
|
|
|
|
SEPARATOR ','
|
|
|
|
|
|
) AS file_urls
|
|
|
|
|
|
|
|
|
|
|
|
FROM sys_oa_project sop
|
|
|
|
|
|
LEFT JOIN sys_oa_task t
|
|
|
|
|
|
ON sop.project_id = t.project_id
|
|
|
|
|
|
|
|
|
|
|
|
LEFT JOIN sys_user u0
|
|
|
|
|
|
ON t.create_user_id = u0.user_id
|
|
|
|
|
|
|
|
|
|
|
|
LEFT JOIN sys_user u1
|
|
|
|
|
|
ON t.worker_id = u1.user_id
|
|
|
|
|
|
|
|
|
|
|
|
LEFT JOIN sys_oa_task_item ti
|
|
|
|
|
|
ON t.task_id = ti.task_id
|
|
|
|
|
|
|
2025-05-10 22:17:04 +08:00
|
|
|
|
LEFT JOIN sys_oss so
|
2025-04-12 14:30:23 +08:00
|
|
|
|
ON (
|
2025-05-10 22:17:04 +08:00
|
|
|
|
(t.status = 0 AND FIND_IN_SET(CONCAT(so.oss_id, ''), t.files) > 0)
|
2025-04-12 14:30:23 +08:00
|
|
|
|
OR
|
2025-05-10 22:17:04 +08:00
|
|
|
|
(t.status = 1 AND FIND_IN_SET(CONCAT(so.oss_id, ''), ti.files) > 0)
|
2025-04-12 14:30:23 +08:00
|
|
|
|
)
|
|
|
|
|
|
${ew.getCustomSqlSegment}
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-04-17 16:46:47 +08:00
|
|
|
|
<!-- 项目与进度关联的结果映射 -->
|
|
|
|
|
|
<resultMap type="com.ruoyi.oa.domain.vo.SysOaProjectVo" id="ProjectProgressResult">
|
|
|
|
|
|
<id property="projectId" column="project_id"/>
|
|
|
|
|
|
<result property="projectName" column="project_name"/>
|
|
|
|
|
|
<result property="projectNum" column="project_num"/>
|
|
|
|
|
|
<result property="projectType" column="project_type"/>
|
2025-05-20 09:11:45 +08:00
|
|
|
|
<result property="projectCode" column="project_code,"/>
|
2025-04-17 16:46:47 +08:00
|
|
|
|
<result property="remainTime" column="remainTime"/>
|
|
|
|
|
|
<!-- 根据项目 ID 查询顶级进度(parent_id 为 0 或 NULL) -->
|
|
|
|
|
|
<collection property="progressList"
|
|
|
|
|
|
ofType="com.ruoyi.oa.domain.vo.OaProgressVo"
|
|
|
|
|
|
select="selectProgressByProjectId"
|
|
|
|
|
|
column="project_id"/>
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 进度项的结果映射 -->
|
|
|
|
|
|
<resultMap type="com.ruoyi.oa.domain.vo.OaProgressVo" id="OaProgressResult">
|
|
|
|
|
|
<id property="progressId" column="progress_id"/>
|
|
|
|
|
|
<result property="projectId" column="project_id"/>
|
|
|
|
|
|
<result property="type" column="type"/>
|
|
|
|
|
|
<result property="progressName" column="progress_name"/>
|
|
|
|
|
|
<result property="parentId" column="parent_id"/>
|
|
|
|
|
|
<result property="sort" column="sort"/>
|
|
|
|
|
|
<result property="remark" column="remark"/>
|
|
|
|
|
|
<result property="status" column="status"/>
|
|
|
|
|
|
<!-- 新增字段映射 -->
|
|
|
|
|
|
<result property="progressSize" column="progress_size"/>
|
|
|
|
|
|
<result property="finishCount" column="finish_count"/>
|
|
|
|
|
|
<result property="completionPercent" column="completionPercent"/>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 嵌套查询孩子节点(如果需要展示孩子节点明细,可保留) -->
|
|
|
|
|
|
<collection property="children"
|
|
|
|
|
|
ofType="com.ruoyi.oa.domain.vo.OaProgressVo"
|
|
|
|
|
|
select="selectChildProgress"
|
|
|
|
|
|
column="progress_id"/>
|
|
|
|
|
|
</resultMap>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 根据项目 ID 查询顶级进度 -->
|
|
|
|
|
|
<select id="selectProgressByProjectId" resultMap="OaProgressResult">
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
p.progress_id,
|
|
|
|
|
|
p.project_id,
|
|
|
|
|
|
p.type,
|
|
|
|
|
|
p.progress_name,
|
|
|
|
|
|
p.parent_id,
|
|
|
|
|
|
p.sort,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
|
2025-04-17 16:46:47 +08:00
|
|
|
|
p.remark,
|
|
|
|
|
|
p.status,
|
|
|
|
|
|
-- 孩子节点总数:如果没有匹配则返回 0
|
|
|
|
|
|
IFNULL(child.totalCount, 0) AS progress_size,
|
|
|
|
|
|
-- 孩子节点中 status 为1的数量
|
|
|
|
|
|
IFNULL(child.finishedCount, 0) AS finish_count,
|
|
|
|
|
|
-- 计算完成比例:避免除以0的情况
|
|
|
|
|
|
CASE WHEN child.totalCount > 0
|
|
|
|
|
|
THEN ROUND(child.finishedCount / child.totalCount, 2) *100
|
|
|
|
|
|
ELSE 0
|
|
|
|
|
|
END AS completionPercent
|
|
|
|
|
|
FROM oa_progress p
|
|
|
|
|
|
LEFT JOIN (
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
parent_id,
|
|
|
|
|
|
COUNT(*) AS totalCount,
|
|
|
|
|
|
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS finishedCount
|
|
|
|
|
|
FROM oa_progress
|
|
|
|
|
|
GROUP BY parent_id
|
|
|
|
|
|
) child ON p.progress_id = child.parent_id
|
|
|
|
|
|
WHERE p.project_id = #{projectId}
|
|
|
|
|
|
AND p.parent_id = 0
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 根据进度 ID 查询子进度 -->
|
|
|
|
|
|
<select id="selectChildProgress" resultMap="OaProgressResult">
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
progress_id,
|
|
|
|
|
|
project_id,
|
|
|
|
|
|
type,
|
|
|
|
|
|
progress_name,
|
|
|
|
|
|
parent_id,
|
|
|
|
|
|
sort,
|
|
|
|
|
|
remark,
|
|
|
|
|
|
status
|
|
|
|
|
|
FROM oa_progress
|
|
|
|
|
|
WHERE parent_id = #{progressId}
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 主项目查询,同时获取项目的一些计算字段 -->
|
|
|
|
|
|
<select id="selectVoAndProgress" resultMap="ProjectProgressResult">
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
p.project_id,
|
|
|
|
|
|
p.project_name,
|
|
|
|
|
|
p.project_num,
|
|
|
|
|
|
p.project_type,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
p.project_code,
|
2025-04-17 16:46:47 +08:00
|
|
|
|
p.funds,
|
|
|
|
|
|
TIMESTAMPDIFF(DAY, NOW(), p.postpone_time) AS remainTime
|
|
|
|
|
|
FROM sys_oa_project p
|
|
|
|
|
|
${ew.getCustomSqlSegment}
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
2025-05-13 20:21:02 +08:00
|
|
|
|
<select id="selectVoListPage" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
|
|
|
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
|
|
sop.project_id,
|
|
|
|
|
|
sop.project_name,
|
|
|
|
|
|
sop.project_num,
|
|
|
|
|
|
sop.begin_time,
|
|
|
|
|
|
sop.finish_time,
|
2025-05-20 09:11:45 +08:00
|
|
|
|
sop.project_code,
|
2025-05-13 20:21:02 +08:00
|
|
|
|
sop.functionary,
|
|
|
|
|
|
IFNULL(
|
|
|
|
|
|
SUM(CASE WHEN d.detail_status = 1 THEN 1 ELSE 0 END) * 100
|
|
|
|
|
|
/ NULLIF(COUNT(d.detail_id), 0)
|
|
|
|
|
|
, 0) AS progress
|
|
|
|
|
|
FROM sys_oa_project sop
|
|
|
|
|
|
LEFT JOIN oa_progress pr
|
|
|
|
|
|
ON pr.project_id = sop.project_id
|
|
|
|
|
|
AND pr.del_flag = 0
|
|
|
|
|
|
LEFT JOIN oa_progress_detail d
|
|
|
|
|
|
ON d.progress_id = pr.progress_id
|
|
|
|
|
|
AND d.del_flag = 0
|
|
|
|
|
|
${ ew.getCustomSqlSegment}
|
|
|
|
|
|
</select>
|
2025-05-20 09:11:45 +08:00
|
|
|
|
<select id="listWareProject" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
|
|
|
|
|
|
SELECT distinct sop.project_id,
|
|
|
|
|
|
project_name,
|
|
|
|
|
|
project_num,
|
|
|
|
|
|
project_type,
|
|
|
|
|
|
address,
|
|
|
|
|
|
funds,
|
|
|
|
|
|
functionary,
|
|
|
|
|
|
begin_time,
|
|
|
|
|
|
finish_time,
|
|
|
|
|
|
delivery,
|
|
|
|
|
|
guarantee,
|
|
|
|
|
|
introduction,
|
|
|
|
|
|
project_grade,
|
|
|
|
|
|
project_status,
|
|
|
|
|
|
contract_id,
|
|
|
|
|
|
invoice_name,
|
|
|
|
|
|
invoice_number,
|
|
|
|
|
|
invoice_address,
|
|
|
|
|
|
invoice_bank,
|
|
|
|
|
|
accessory,
|
|
|
|
|
|
bail,
|
|
|
|
|
|
is_postpone,
|
|
|
|
|
|
postpone_reason,
|
|
|
|
|
|
postpone_time,
|
|
|
|
|
|
color,
|
|
|
|
|
|
trade_type,
|
|
|
|
|
|
sop.project_code,
|
|
|
|
|
|
pre_pay
|
|
|
|
|
|
FROM sys_oa_project sop
|
|
|
|
|
|
INNER JOIN sys_oa_warehouse_master sown
|
|
|
|
|
|
ON sown.project_id = sop.project_id
|
|
|
|
|
|
${ ew.getCustomSqlSegment}
|
|
|
|
|
|
</select>
|
|
|
|
|
|
<select id="selectVoByIdPlus" resultMap="SysOaProjectVoResult">
|
|
|
|
|
|
select sop.project_id,
|
|
|
|
|
|
project_name,
|
|
|
|
|
|
project_num,
|
|
|
|
|
|
project_type,
|
|
|
|
|
|
address,
|
|
|
|
|
|
funds,
|
|
|
|
|
|
functionary,
|
|
|
|
|
|
begin_time,
|
|
|
|
|
|
finish_time,
|
|
|
|
|
|
delivery,
|
|
|
|
|
|
guarantee,
|
|
|
|
|
|
introduction,
|
|
|
|
|
|
project_grade,
|
|
|
|
|
|
project_status,
|
|
|
|
|
|
contract_id,
|
|
|
|
|
|
invoice_name,
|
|
|
|
|
|
invoice_number,
|
|
|
|
|
|
invoice_address,
|
|
|
|
|
|
invoice_bank,
|
|
|
|
|
|
bail,
|
|
|
|
|
|
remark,
|
|
|
|
|
|
accessory,
|
|
|
|
|
|
sop.create_by,
|
|
|
|
|
|
sop.create_time,
|
|
|
|
|
|
sop.update_by,
|
|
|
|
|
|
sop.update_time,
|
|
|
|
|
|
sop.project_code,
|
|
|
|
|
|
is_postpone,
|
|
|
|
|
|
postpone_reason,
|
|
|
|
|
|
postpone_time,
|
|
|
|
|
|
color,
|
|
|
|
|
|
trade_type,
|
2025-05-21 11:55:43 +08:00
|
|
|
|
pre_pay
|
|
|
|
|
|
|
2025-05-20 09:11:45 +08:00
|
|
|
|
from sys_oa_project sop
|
|
|
|
|
|
where sop.project_id = #{projectId}
|
|
|
|
|
|
</select>
|
2025-05-13 20:21:02 +08:00
|
|
|
|
|
2025-04-17 16:46:47 +08:00
|
|
|
|
|
2024-07-07 21:09:28 +08:00
|
|
|
|
</mapper>
|