Browse Source

1.资产业务统计报表统计评估人员接单量统计规则修改为完成勘察定价节点后

GouGengquan 3 tháng trước cách đây
mục cha
commit
59e46adbaf

+ 185 - 8
dao/src/main/resources/mapper/AssetsStatisticalStatementMapper.xml

@@ -411,9 +411,75 @@
     <select id="getAssetsEvaluateDepEfficiencyVO" resultType="com.dayou.vo.AssetsEvaluateEfficiencyVO">
         SELECT department.id AS departmentId,
                department.name AS departmentName,
-               (SELECT COUNT(assets.id) FROM assets LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND assets.created BETWEEN #{dto.startTime} AND #{dto.endTime} AND department_id = department.id) AS currentPeriodOrderVolume,
-               (SELECT COUNT(assets.id) FROM assets LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND assets.created BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL 1 YEAR) AND DATE_SUB(#{dto.endTime}, INTERVAL 1 YEAR) AND department_id = department.id) AS YoYOrderVolume,
-               (SELECT COUNT(assets.id) FROM assets LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND assets.created BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND DATE_SUB(#{dto.endTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND department_id = department.id) AS QoQOrderVolume,
+               (SELECT COUNT(assets.id) FROM assets
+                INNER JOIN (
+                SELECT
+                assets.id,
+                node.`code`,
+                instance.created,
+                record.finish_time
+                FROM
+                work_node AS node,
+                work_flow_node_instance AS instance,
+                work_task_record AS record,
+                assets
+                WHERE
+                node.id = instance.node_id
+                AND instance.business_id = assets.id
+                AND instance.id = record.instance_id
+                AND record.deleted = 0
+                AND instance.deleted = 0
+                AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+                AND business_type = 'ASSET_BUSINESS'
+                AND instance.state = 'FINISHED'
+                ) AS end ON end.id = assets.id
+                LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND end.finish_time BETWEEN #{dto.startTime} AND #{dto.endTime} AND department_id = department.id) AS currentPeriodOrderVolume,
+               (SELECT COUNT(assets.id) FROM assets
+                INNER JOIN (
+                SELECT
+                assets.id,
+                node.`code`,
+                instance.created,
+                record.finish_time
+                FROM
+                work_node AS node,
+                work_flow_node_instance AS instance,
+                work_task_record AS record,
+                assets
+                WHERE
+                node.id = instance.node_id
+                AND instance.business_id = assets.id
+                AND instance.id = record.instance_id
+                AND record.deleted = 0
+                AND instance.deleted = 0
+                AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+                AND business_type = 'ASSET_BUSINESS'
+                AND instance.state = 'FINISHED'
+                ) AS end ON end.id = assets.id
+                LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND end.finish_time BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL 1 YEAR) AND DATE_SUB(#{dto.endTime}, INTERVAL 1 YEAR) AND department_id = department.id) AS YoYOrderVolume,
+               (SELECT COUNT(assets.id) FROM assets
+                INNER JOIN (
+                SELECT
+                assets.id,
+                node.`code`,
+                instance.created,
+                record.finish_time
+                FROM
+                work_node AS node,
+                work_flow_node_instance AS instance,
+                work_task_record AS record,
+                assets
+                WHERE
+                node.id = instance.node_id
+                AND instance.business_id = assets.id
+                AND instance.id = record.instance_id
+                AND record.deleted = 0
+                AND instance.deleted = 0
+                AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+                AND business_type = 'ASSET_BUSINESS'
+                AND instance.state = 'FINISHED'
+                ) AS end ON end.id = assets.id
+                LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND end.finish_time BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND DATE_SUB(#{dto.endTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND department_id = department.id) AS QoQOrderVolume,
                (SELECT COUNT(production.id) FROM assets,assets_production AS production WHERE assets.deleted = 0 AND assets.id = production.business_id AND production_type = 'STATEMENT' AND production.deleted = 0 AND production.create_production_date BETWEEN #{dto.startTime} AND #{dto.endTime} AND department_id = department.id) AS currentPeriodStatementVolume,
                (SELECT COUNT(production.id) FROM assets,assets_production AS production WHERE assets.deleted = 0 AND assets.id = production.business_id AND production_type = 'STATEMENT' AND production.deleted = 0 AND production.create_production_date BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL 1 YEAR) AND DATE_SUB(#{dto.endTime}, INTERVAL 1 YEAR) AND department_id = department.id) AS YoYStatementVolume,
                (SELECT COUNT(production.id) FROM assets,assets_production AS production WHERE assets.deleted = 0 AND assets.id = production.business_id AND production_type = 'STATEMENT' AND production.deleted = 0 AND production.create_production_date BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND DATE_SUB(#{dto.endTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND department_id = department.id) AS QoQStatementVolume,
@@ -453,9 +519,75 @@
                user.userName AS userName,
                user.departmentId AS departmentId,
                user.departmentName AS departmentName,
-               (SELECT COUNT(assets.id) FROM assets LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND assets.created BETWEEN #{dto.startTime} AND #{dto.endTime} AND principal_id = user.id) AS currentPeriodOrderVolume,
-               (SELECT COUNT(assets.id) FROM assets LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND assets.created BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL 1 YEAR) AND DATE_SUB(#{dto.endTime}, INTERVAL 1 YEAR) AND principal_id = user.id) AS YoYOrderVolume,
-               (SELECT COUNT(assets.id) FROM assets LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND assets.created BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND DATE_SUB(#{dto.endTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND principal_id = user.id) AS QoQOrderVolume,
+               (SELECT COUNT(assets.id) FROM assets
+                INNER JOIN (
+                SELECT
+                assets.id,
+                node.`code`,
+                instance.created,
+                record.finish_time
+                FROM
+                work_node AS node,
+                work_flow_node_instance AS instance,
+                work_task_record AS record,
+                assets
+                WHERE
+                node.id = instance.node_id
+                AND instance.business_id = assets.id
+                AND instance.id = record.instance_id
+                AND record.deleted = 0
+                AND instance.deleted = 0
+                AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+                AND business_type = 'ASSET_BUSINESS'
+                AND instance.state = 'FINISHED'
+                ) AS end ON end.id = assets.id
+                LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND end.finish_time BETWEEN #{dto.startTime} AND #{dto.endTime} AND principal_id = user.id) AS currentPeriodOrderVolume,
+               (SELECT COUNT(assets.id) FROM assets
+                INNER JOIN (
+                SELECT
+                assets.id,
+                node.`code`,
+                instance.created,
+                record.finish_time
+                FROM
+                work_node AS node,
+                work_flow_node_instance AS instance,
+                work_task_record AS record,
+                assets
+                WHERE
+                node.id = instance.node_id
+                AND instance.business_id = assets.id
+                AND instance.id = record.instance_id
+                AND record.deleted = 0
+                AND instance.deleted = 0
+                AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+                AND business_type = 'ASSET_BUSINESS'
+                AND instance.state = 'FINISHED'
+                ) AS end ON end.id = assets.id
+                LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND end.finish_time BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL 1 YEAR) AND DATE_SUB(#{dto.endTime}, INTERVAL 1 YEAR) AND principal_id = user.id) AS YoYOrderVolume,
+               (SELECT COUNT(assets.id) FROM assets
+                INNER JOIN (
+                SELECT
+                assets.id,
+                node.`code`,
+                instance.created,
+                record.finish_time
+                FROM
+                work_node AS node,
+                work_flow_node_instance AS instance,
+                work_task_record AS record,
+                assets
+                WHERE
+                node.id = instance.node_id
+                AND instance.business_id = assets.id
+                AND instance.id = record.instance_id
+                AND record.deleted = 0
+                AND instance.deleted = 0
+                AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+                AND business_type = 'ASSET_BUSINESS'
+                AND instance.state = 'FINISHED'
+                ) AS end ON end.id = assets.id
+                LEFT JOIN assets_production AS pro ON pro.business_id = assets.id AND production_type != 'STATEMENT' AND pro.deleted = 0 WHERE assets.deleted = 0 AND end.finish_time BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND DATE_SUB(#{dto.endTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND principal_id = user.id) AS QoQOrderVolume,
                (SELECT COUNT(production.id) FROM assets,assets_production AS production WHERE assets.deleted = 0 AND assets.id = production.business_id AND production_type = 'STATEMENT' AND production.deleted = 0 AND production.create_production_date BETWEEN #{dto.startTime} AND #{dto.endTime} AND principal_id = user.id) AS currentPeriodStatementVolume,
                (SELECT COUNT(production.id) FROM assets,assets_production AS production WHERE assets.deleted = 0 AND assets.id = production.business_id AND production_type = 'STATEMENT' AND production.deleted = 0 AND production.create_production_date BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL 1 YEAR) AND DATE_SUB(#{dto.endTime}, INTERVAL 1 YEAR) AND principal_id = user.id) AS YoYStatementVolume,
                (SELECT COUNT(production.id) FROM assets,assets_production AS production WHERE assets.deleted = 0 AND assets.id = production.business_id AND production_type = 'STATEMENT' AND production.deleted = 0 AND production.create_production_date BETWEEN DATE_SUB(#{dto.startTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND DATE_SUB(#{dto.endTime}, INTERVAL DATEDIFF(#{dto.endTime},#{dto.startTime}) DAY) AND principal_id = user.id) AS QoQStatementVolume,
@@ -499,7 +631,6 @@
     <sql id="assetsEvaEffDetailQuery">
         SELECT
         assets.order_id AS orderId,
-        assets.name AS projectName,
         customer.name AS customerName,
         (SELECT customer_company.name FROM customer_company WHERE customer_company.id = clientele_sub_id) AS customerSubName,
         (SELECT name FROM customer_linkman WHERE id = assets.clientele_contact_id) AS linkmanName,
@@ -508,17 +639,59 @@
         members,
         (SELECT name FROM user WHERE id = assets.client_manager_id) AS clientManagerName,
         <if test="dto != null and dto.efficiencyType == 'statement'">
+            IF(statement.assets_name IS NULL, assets.name, statement.assets_name) AS projectName,
             statement.production_no AS statementNo,
             statement.create_production_date AS writeStatementDate,
         </if>
         <if test="dto != null and dto.efficiencyType != 'statement'">
+            IF(report.assets_name IS NULL, assets.name, report.assets_name) AS projectName,
             report.production_no AS reportNo,
             report.create_production_date AS writeReportDate,
             (SELECT SUM(check_value) FROM assets_evaluation_target WHERE report_no = report.production_no AND deleted = 0) AS checkValueSum,
         </if>
         order_fund.should_amount AS shouldAmount,
-        order_fund.real_amount AS realAmount
+        order_fund.real_amount AS realAmount,
+        (SELECT
+        record.finish_time
+        FROM
+        work_node AS node,
+        work_flow_node_instance AS instance,
+        work_task_record AS record
+        WHERE
+        node.id = instance.node_id
+        AND instance.business_id = assets.id
+        AND instance.id = record.instance_id
+        AND record.deleted = 0
+        AND instance.deleted = 0
+        AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+        AND business_type = 'ASSET_BUSINESS'
+        AND instance.state = 'FINISHED'
+        AND instance.business_id = assets.id) AS reconnaissanceDate
         FROM assets
+        <if test="dto != null and dto.efficiencyType == 'order'">
+            # 看了现场才算接单,完成勘察定价节点
+            INNER JOIN (
+            SELECT
+            assets.id,
+            node.`code`,
+            instance.created,
+            record.finish_time
+            FROM
+            work_node AS node,
+            work_flow_node_instance AS instance,
+            work_task_record AS record,
+            assets
+            WHERE
+            node.id = instance.node_id
+            AND instance.business_id = assets.id
+            AND instance.id = record.instance_id
+            AND record.deleted = 0
+            AND instance.deleted = 0
+            AND node.`code` = 'SPOT_RECONNAISSANCE_DETERMINE_PRICE'
+            AND business_type = 'ASSET_BUSINESS'
+            AND instance.state = 'FINISHED'
+            ) AS end ON end.id = assets.id
+        </if>
         LEFT JOIN user ON user.id = assets.principal_id
         LEFT JOIN customer_company AS customer ON customer.id = assets.clientele_id
         <if test="dto != null and dto.efficiencyType == 'statement'">
@@ -548,6 +721,10 @@
             AND assets.client_manager_id = #{dto.clientManagerId}
         </if>
         <if test="dto != null and dto.efficiencyType == 'order'">
+            # 看了现场才算接单,完成勘察定价节点
+            AND end.finish_time BETWEEN #{dto.startTime} AND #{dto.endTime}
+        </if>
+        <if test="dto != null and dto.efficiencyType == 'marketOrder'">
             AND assets.created BETWEEN #{dto.startTime} AND #{dto.endTime}
         </if>
         <if test="dto != null and dto.efficiencyType == 'statement'">