buhuazhen
2 天以前 60e741a676ff88385fdf08ed8f506beb979fde54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?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.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper">
 
    <select id="listPage" resultType="com.ruoyi.production.dto.SalesLedgerProductionAccountingDto">
        SELECT
        t4.id,
        t4.finished_num * t4.work_hours as wages,
        t4.scheduling_user_id,
        t4.scheduling_user_name,
        t4.scheduling_date,
        t4.finished_num,
        t4.work_hours,
        t4.process,
        T1.sales_contract_no,
        T1.customer_contract_no,
        T1.project_name,
        T1.customer_name,
        t3.product_category,
        t3.specification_model,
        t3.unit
        FROM
        sales_ledger_production_accounting t4
        LEFT JOIN sales_ledger T1 ON T1.id = t4.sales_ledger_id
        left join sales_ledger_product t3 on t4.sales_ledger_product_id = t3.id and slp.type = 1
        <where>
            t3.type = 1
            <if test="salesLedgerDto.schedulingUserName != null and salesLedgerDto.schedulingUserName != '' ">
                AND  t4.scheduling_user_name LIKE CONCAT('%',#{salesLedgerDto.schedulingUserName},'%')
            </if>
            <if test="salesLedgerDto.customerName != null and salesLedgerDto.customerName != '' ">
                AND  T1.customer_name LIKE CONCAT('%',#{salesLedgerDto.customerName},'%')
            </if>
            <if test="salesLedgerDto.customerContractNo != null and salesLedgerDto.customerContractNo !='' ">
                AND  T1.customer_contract_no LIKE CONCAT('%',#{salesLedgerDto.customerContractNo},'%')
            </if>
            <if test="salesLedgerDto.salesContractNo != null and salesLedgerDto.salesContractNo != '' ">
                AND  T1.sales_contract_no LIKE CONCAT('%',#{salesLedgerDto.salesContractNo},'%')
            </if>
            <if test="salesLedgerDto.projectName != null and salesLedgerDto.projectName != '' ">
                AND T1.project_name LIKE CONCAT('%',#{salesLedgerDto.projectName},'%')
            </if>
            <if test="salesLedgerDto.entryDateStart != null and salesLedgerDto.entryDateStart != '' ">
                AND t4.scheduling_date &gt;= DATE_FORMAT(#{salesLedgerDto.entryDateStart},'%Y-%m-%d')
            </if>
            <if test="salesLedgerDto.entryDateEnd != null and salesLedgerDto.entryDateEnd != '' ">
                AND  t4.scheduling_date &lt;= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d')
            </if>
        </where>
        group by t4.id
        order by t4.scheduling_date desc
    </select>
    <select id="pageProductionAccounting"
            resultType="com.ruoyi.production.dto.SalesLedgerProductionAccountingDto">
 
        SELECT
        slpa.scheduling_user_id,
        MIN(slpa.scheduling_user_name) AS scheduling_user_name,
 
        SUM(ppout.quantity) AS output_num,
 
        SUM(slpa.finished_num * slpa.work_hours) AS wages,
 
        CONCAT(
        ROUND(
        CASE
        WHEN SUM(ppout.quantity) = 0 OR SUM(ppout.quantity) IS NULL THEN 0
        ELSE SUM(slpa.finished_num) * 100.0 / SUM(ppout.quantity)
        END, 2
        ),
        '%'
        ) AS output_rate,
        GROUP_CONCAT(
        CONCAT(
        IFNULL(
        TIMESTAMPDIFF(MINUTE, ppm.start_time, ppm.end_time),
        0
        ),
        '|$|',
        IFNULL(ppm.device_name, '未知机台')
        )
        ORDER BY ppm.start_time
        SEPARATOR '>>>'
        ) AS device_work_info
 
        FROM sales_ledger_production_accounting slpa
 
        LEFT JOIN production_product_main ppm
        ON slpa.product_main_id = ppm.id
 
        LEFT JOIN production_product_output ppout
        ON ppm.id = ppout.product_main_id
 
        <where>
            <if test="ew.schedulingUserName != null and ew.schedulingUserName !=''">
                and slpa.scheduling_user_name = #{ew.schedulingUserName}
            </if>
            <if test="ew.entryDate != null ">
                and slpa.scheduling_date >= #{ew.entryDate}
                and slpa.scheduling_date &lt; DATE_ADD(DATE(#{ew.entryDate}), INTERVAL 1 DAY)
            </if>
            <if test="ew.entryDateStart != null and ew.entryDateEnd != null">
                and slpa.scheduling_date >= #{ew.entryDateStart}
                and slpa.scheduling_date &lt; DATE_ADD(DATE(#{ew.entryDateEnd}), INTERVAL 1 DAY)
            </if>
 
        </where>
        GROUP BY slpa.scheduling_user_id
 
    </select>
 
    <select id="selectDailyWagesStats" resultType="java.util.Map">
        SELECT DATE(ppout.create_time)                                                         AS dateStr,
               SUM(ppout.quantity - IFNULL(ppout.scrap_qty, 0))                                AS numberOfCompleted,
               SUM((ppout.quantity - IFNULL(ppout.scrap_qty, 0)) * IFNULL(pp.salary_quota, 0)) AS amount,
               ROUND(
                       SUM(ppout.quantity - IFNULL(ppout.scrap_qty, 0)) * 100 / NULLIF(SUM(ppout.quantity), 0),
                       2
               )                                                                               AS passRate
        FROM production_product_output ppout
                 LEFT JOIN production_product_main ppm ON ppm.id = ppout.product_main_id
                 LEFT JOIN product_process_route_item ppri ON ppri.id = ppm.product_process_route_item_id
                 LEFT JOIN product_process pp ON pp.id = ppri.process_id
        WHERE ppout.create_time &gt;= #{startDate}
          AND ppout.create_time &lt; #{endDate}
        GROUP BY DATE(ppout.create_time)
        ORDER BY DATE(ppout.create_time);
    </select>
    <select id="getByUserId" resultType="com.ruoyi.production.dto.UserAccountDto">
        select
            slpa.scheduling_user_id as user_id,
            pp.type,
            sum(case when pp.type = 0 then slpa.work_hours else 0 end) as account,
            sum(case when pp.type = 1 then slpa.work_hours else 0 end) as accountBalance
        from sales_ledger_production_accounting slpa
                 left join product_process pp on pp.name = slpa.process
        where  slpa.scheduling_user_id = #{ew.userId}
          and slpa.scheduling_date like concat(#{ew.date}, '%')
        group by slpa.scheduling_user_id
 
    </select>
 
 
</mapper>