huminmin
2026-07-15 422a5676c2d96dd37c1be62935a314d70fef79b5
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<?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.ProductionAccountMapper">
 
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionAccount">
        <id column="id" property="id" />
        <result column="sales_ledger_id" property="salesLedgerId" />
        <result column="sales_ledger_product_id" property="salesLedgerProductId" />
        <result column="production_product_main_id" property="productionProductMainId" />
        <result column="scheduling_user_id" property="schedulingUserId" />
        <result column="scheduling_user_name" property="schedulingUserName" />
        <result column="finished_num" property="finishedNum" />
        <result column="work_hours" property="workHours" />
        <result column="technology_operation_name" property="technologyOperationName" />
        <result column="adjust_amount" property="adjustAmount" />
        <result column="adjust_remark" property="adjustRemark" />
        <result column="adjust_user" property="adjustUser" />
        <result column="adjust_time" property="adjustTime" />
        <result column="accounting_batch_no" property="accountingBatchNo" />
        <result column="scheduling_date" property="schedulingDate" />
        <result column="create_user" property="createUser" />
        <result column="create_time" property="createTime" />
        <result column="update_user" property="updateUser" />
        <result column="update_time" property="updateTime" />
        <result column="dept_id" property="deptId" />
    </resultMap>
 
    <select id="listPage" resultType="com.ruoyi.production.bean.vo.ProductionAccountVo">
        select
        group_concat(distinct ppm.product_no order by ppm.product_no separator ',') as reportNo,
        case
            when sum(case when ppm.audit_status = 0 then 1 else 0 end) > 0 then '待审核'
            when sum(case when ppm.audit_status = 2 then 1 else 0 end) > 0 then '审核不通过'
            else '审核通过'
        end as auditStatusName,
        case
            when sum(case when ppm.report_type = 1 then 1 else 0 end) > 0 then '轻微返工'
            when sum(case when ppm.report_type = 2 then 1 else 0 end) > 0 then '严重返工'
            when sum(case when ppm.report_type = 3 then 1 else 0 end) > 0 then '报废'
            else '合格'
        end as reportTypeName,
        group_concat(distinct p_parent.product_name order by p_parent.product_name separator ',') as productCategory,
        group_concat(distinct pm.model order by pm.model separator ',') as specificationModel,
        group_concat(distinct pm.unit order by pm.unit separator ',') as unit,
        pa.scheduling_user_id as schedulingUserId,
        pa.scheduling_user_name as schedulingUserName,
        group_concat(distinct pot.work_order_no order by pot.work_order_no separator ',') as workOrderNo,
        cast(sum(
            case
                when pa.adjust_amount is not null then ifnull(pa.adjust_amount, 0)
                when poro.type = 0 then ifnull(pa.work_hours, 0) * (ifnull(ppm.work_hour, 0) + ifnull(ppm.repair_work_hour, 0))
                else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
                     case
                         when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
                         then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
                         else 1
                     end
            end
        ) as decimal(18,4)) as wages,
        cast(sum(ifnull(pa.finished_num, 0)) as decimal(18,4)) as finishedNum,
        cast(sum(ifnull(pa.work_hours, 0)) as decimal(18,4)) as workHours,
        cast(sum(ifnull(pa.adjust_amount, 0)) as decimal(18,4)) as adjustAmount,
        cast(sum(ifnull(ppm.work_hour, 0)) as decimal(18,4)) as workHour,
        case
            when sum(ifnull(ppo.quantity, 0) + ifnull(ppo.scrapQty, 0)) = 0 then '0%'
            else concat(
                cast(
                    round(
                        sum(ifnull(ppo.quantity, 0)) /
                        sum(ifnull(ppo.quantity, 0) + ifnull(ppo.scrapQty, 0)) * 100, 2
                    ) as char
                ),
                '%'
            )
        end as outputRate,
        group_concat(distinct pa.technology_operation_name order by pa.technology_operation_name separator ',') as process,
        group_concat(distinct pa.adjust_remark order by pa.adjust_time desc separator ',') as adjustRemark,
        case
            when count(distinct date(pa.scheduling_date)) = 1 then min(date(pa.scheduling_date))
            else null
        end as schedulingDate,
        case
            when count(distinct date_format(pa.scheduling_date, '%Y-%m')) = 1 then min(date_format(pa.scheduling_date, '%Y-%m'))
            else null
        end as schedulingMonth
        from production_account pa
        left join production_product_main ppm on ppm.id = pa.production_product_main_id
        left join production_operation_task pot on ppm.production_operation_task_id = pot.id
        left join production_order po on pot.production_order_id = po.id
        left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
        left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
        left join product p on pm.product_id = p.id
        left join product p_parent on p_parent.id = p.parent_id
        left join (
            select production_product_main_id,
                   cast(sum(ifnull(quantity, 0)) as decimal(18,4)) as quantity,
                   cast(sum(ifnull(scrap_qty, 0)) as decimal(18,4)) as scrapQty
            from production_product_output
            group by production_product_main_id
        ) ppo on ppo.production_product_main_id = ppm.id
        <where>
            and ppm.audit_status = 1
            and ppm.report_type in (0, 1)
            <if test="c != null">
                <if test="c.productCategory != null and c.productCategory != ''">
                    and p_parent.product_name like concat('%', #{c.productCategory}, '%')
                </if>
                <if test="c.specificationModel != null and c.specificationModel != ''">
                    and pm.model like concat('%', #{c.specificationModel}, '%')
                </if>
                <if test="c.schedulingUserId != null">
                    and pa.scheduling_user_id = #{c.schedulingUserId}
                </if>
                <if test="c.schedulingUserName != null and c.schedulingUserName != ''">
                    and pa.scheduling_user_name like concat('%', #{c.schedulingUserName}, '%')
                </if>
                <if test="c.process != null and c.process != ''">
                    and pa.technology_operation_name like concat('%', #{c.process}, '%')
                </if>
                <if test="c.entryDate != null">
                    and date(pa.scheduling_date) = #{c.entryDate}
                </if>
                <if test="c.entryDateStart != null">
                    and date(pa.scheduling_date) &gt;= #{c.entryDateStart}
                </if>
                <if test="c.entryDateEnd != null">
                    and date(pa.scheduling_date) &lt;= #{c.entryDateEnd}
                </if>
            </if>
        </where>
        group by pa.scheduling_user_id,
        pa.scheduling_user_name
        order by wages desc,
        pa.scheduling_user_id asc
    </select>
 
    <select id="selectUserAccount" resultType="com.ruoyi.production.bean.dto.UserAccountDto">
        select cast(ifnull(sum(
                   case
                       when pa.adjust_amount is not null then 0
                       when poro.type = 0 then 0
                       else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
                            case
                                when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
                                then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
                                else 1
                            end
                   end
               ), 0) as decimal(18,2)) as accountBalance,
               cast(ifnull(sum(
                   case
                       when pa.adjust_amount is not null then ifnull(pa.adjust_amount, 0)
                       when poro.type = 0 then ifnull(pa.work_hours, 0) * (ifnull(ppm.work_hour, 0) + ifnull(ppm.repair_work_hour, 0))
                       else 0
                   end
               ), 0) as decimal(18,2)) as account
        from production_account pa
                 left join production_product_main ppm on ppm.id = pa.production_product_main_id
                 left join production_operation_task pot on ppm.production_operation_task_id = pot.id
                 left join production_order po on pot.production_order_id = po.id
                 left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
                 left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
        where pa.scheduling_user_id = #{userId}
          and date_format(pa.scheduling_date, '%Y-%m') = #{date}
          and (
              pa.production_product_main_id is null
              or (
                  ppm.audit_status = 1
                  and ppm.report_type in (0, 1)
              )
          )
    </select>
 
    <select id="selectDailyWagesStats" resultType="java.util.Map">
        select date_format(scheduling_date, '%m-%d') as dateStr,
               cast(ifnull(sum(finished_num), 0) as decimal(18,2)) as numberOfCompleted,
               cast(ifnull(sum(work_hours), 0) as decimal(18,2)) as amount,
               cast(0 as decimal(18,2)) as passRate
        from production_account pa
                 inner join production_product_main ppm on ppm.id = pa.production_product_main_id
        where pa.scheduling_date &gt;= #{startDate}
          and pa.scheduling_date &lt;= #{endDate}
          and ppm.audit_status = 1
          and ppm.report_type in (0, 1)
        group by date_format(scheduling_date, '%m-%d')
        order by date_format(scheduling_date, '%m-%d')
    </select>
 
</mapper>