| | |
| | | <?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"> |
| | | <?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.ProductionProductMainMapper"> |
| | | |
| | | <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductMain"> |
| | | <id property="id" column="id"/> |
| | | <result property="productNo" column="product_no"/> |
| | | <result property="userId" column="user_id"/> |
| | | <result property="workOrderId" column="work_order_id"/> |
| | | <result property="tenantId" column="tenant_id"/> |
| | | <result property="createTime" column="create_time"/> |
| | | <result property="status" column="status"/> |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductMain"> |
| | | <id column="id" property="id" /> |
| | | <result column="product_no" property="productNo" /> |
| | | <result column="production_operation_task_id" property="productionOperationTaskId" /> |
| | | <result column="dept_id" property="deptId" /> |
| | | <result column="update_time" property="updateTime" /> |
| | | <result column="create_user" property="createUser" /> |
| | | <result column="create_time" property="createTime" /> |
| | | <result column="update_user" property="updateUser" /> |
| | | </resultMap> |
| | | |
| | | <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto"> |
| | | <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.bean.dto.ProductionProductMainDto"> |
| | | select ppm.*, |
| | | pwo.work_order_no as workOrderNo, |
| | | pwo.status as workOrderStatus, |
| | | u.nick_name as nickName, |
| | | p.product_name as productName, |
| | | pm.model as productModelName, |
| | | ppo.quantity, |
| | | ppo.scrap_qty, |
| | | pm.unit, |
| | | sl.sales_contract_no salesContractNo |
| | | from |
| | | production_product_main ppm |
| | | left join product_work_order pwo on pwo.id = ppm.work_order_id |
| | | left join product_order po on po.id = pwo.product_order_id |
| | | left join production_product_output ppo on ppm.id = ppo.product_main_id |
| | | left join product_model pm on pm.id = ppo.product_model_id |
| | | left join product p on p.id = pm.product_id |
| | | left join sales_ledger sl on sl.id = po.sales_ledger_id |
| | | left join sys_user u on u.user_id = ppm.user_id |
| | | pot.work_order_no as workOrderNo, |
| | | case pot.status |
| | | when 1 then '待确认' |
| | | when 2 then '待生产' |
| | | when 3 then '生产中' |
| | | when 4 then '已生产' |
| | | else '未知' |
| | | end as workOrderStatus, |
| | | su.nick_name as nickName, |
| | | ifnull(ppo.quantity, 0) as quantity, |
| | | ifnull(ppo.scrap_qty, 0) as scrapQty, |
| | | p.product_name as productName, |
| | | pm.model as productModelName, |
| | | pm.unit, |
| | | po_sales.salesContractNo, |
| | | date(ppm.create_time) as schedulingDate, |
| | | su.nick_name as schedulingUserName, |
| | | po_sales.customerName, |
| | | poro.operation_name as process |
| | | from production_product_main ppm |
| | | 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 ( |
| | | select po2.id as orderId, |
| | | group_concat(distinct sl2.sales_contract_no order by sl2.sales_contract_no separator ',') as salesContractNo, |
| | | group_concat(distinct sl2.customer_name order by sl2.customer_name separator ',') as customerName |
| | | from production_order po2 |
| | | left join production_plan pp2 |
| | | on find_in_set(pp2.id, replace(replace(replace(po2.production_plan_ids, '[', ''), ']', ''), ' ', '')) > 0 |
| | | left join sales_ledger sl2 on sl2.id = pp2.sales_ledger_id |
| | | group by po2.id |
| | | ) po_sales on po_sales.orderId = po.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 sys_user su on ppm.create_user = su.user_id |
| | | left join production_product_output ppo on ppo.production_product_main_id = ppm.id |
| | | <where> |
| | | <if test="c.nickName != null and c.nickName != ''"> |
| | | and u.nick_name like concat('%',#{c.nickName},'%') |
| | | <if test="c.productNo != null and c.productNo != ''"> |
| | | and ppm.product_no like concat('%', #{c.productNo}, '%') |
| | | </if> |
| | | <if test="c.workOrderNo != null and c.workOrderNo != ''"> |
| | | and pwo.work_order_no like concat('%',#{c.workOrderNo},'%') |
| | | and pot.work_order_no like concat('%', #{c.workOrderNo}, '%') |
| | | </if> |
| | | <if test="c.workOrderStatus != null and c.workOrderStatus != ''"> |
| | | and pwo.status = #{c.workOrderStatus} |
| | | <if test="c.salesContractNo != null and c.salesContractNo != ''"> |
| | | and po_sales.salesContractNo like concat('%', #{c.salesContractNo}, '%') |
| | | </if> |
| | | <if test="c.status != null and c.status != ''"> |
| | | and ppm.status = #{c.status} |
| | | <if test="c.customerName != null and c.customerName != ''"> |
| | | and po_sales.customerName like concat('%', #{c.customerName}, '%') |
| | | </if> |
| | | <if test="c.productName != null and c.productName != ''"> |
| | | and p.product_name like concat('%', #{c.productName}, '%') |
| | | </if> |
| | | <if test="c.productModelName != null and c.productModelName != ''"> |
| | | and pm.model like concat('%', #{c.productModelName}, '%') |
| | | </if> |
| | | <if test="c.process != null and c.process != ''"> |
| | | and poro.operation_name like concat('%', #{c.process}, '%') |
| | | </if> |
| | | <if test="c.schedulingDate != null"> |
| | | and date(ppm.create_time) = #{c.schedulingDate} |
| | | </if> |
| | | <if test="c.productMainId != null"> |
| | | and ppm.id = #{c.productMainId} |
| | | </if> |
| | | <if test="c.deviceId != null"> |
| | | and ppm.device_id = #{c.deviceId} |
| | | </if> |
| | | <if test="c.deviceName != null and c.deviceName != ''"> |
| | | and ppm.device_name like concat('%', #{c.deviceName}, '%') |
| | | </if> |
| | | </where> |
| | | order by ppm.id |
| | | order by pot.work_order_no desc, poro.drag_sort, ppm.product_no desc |
| | | </select> |
| | | |
| | | </select> |
| | | <select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductOrder"> |
| | | select po.* |
| | | from product_order po |
| | | left join product_work_order pwo on po.id = pwo.product_order_id |
| | | left join production_product_main pm on work_order_id = pwo.id |
| | | where pm.id = #{productMainId} |
| | | </select> |
| | | <select id="listProductionDetails" resultType="com.ruoyi.production.dto.ProductionProductMainDto"> |
| | | SELECT |
| | | slpa.scheduling_date, |
| | | slpa.scheduling_user_name, |
| | | sl.sales_contract_no, |
| | | sl.customer_name, |
| | | p.product_name, |
| | | pm.model, |
| | | pm.unit, |
| | | slpa.process, |
| | | ppo.quantity, |
| | | slpa.work_hours, |
| | | slpa.work_hours * slpa.finished_num AS wages |
| | | FROM |
| | | production_product_main ppm |
| | | LEFT JOIN sales_ledger_production_accounting slpa ON slpa.sales_ledger_work_id = ppm.id |
| | | LEFT JOIN production_product_output ppo ON ppm.id = ppo.product_main_id |
| | | LEFT JOIN product_work_order pwo ON pwo.id = ppm.work_order_id |
| | | LEFT JOIN product_order po ON po.id = pwo.product_order_id |
| | | LEFT JOIN process_route pr ON pr.id = po.route_id |
| | | LEFT JOIN product_model pm ON po.product_model_id = pm.id |
| | | LEFT JOIN product p ON p.id = pm.product_id |
| | | LEFT JOIN sales_ledger sl ON po.sales_ledger_id = sl.id |
| | | <select id="wageSummary" resultType="com.ruoyi.production.bean.vo.PieceWageSummaryVo"> |
| | | select pa.scheduling_user_id as userId, |
| | | pa.scheduling_user_name as userName, |
| | | count(distinct pa.production_product_main_id) as workCount, |
| | | sum(ifnull(pa.finished_num, 0)) as quantity, |
| | | sum(ifnull(ppm.work_hour, 0)) as workHour, |
| | | sum(cast(ifnull(prc.unit_price, 0) * ifnull(pa.finished_num, 0) as decimal(18, 2))) as pieceWage, |
| | | sum( |
| | | case |
| | | when prc.unit_price is not null |
| | | then cast(ifnull(pa.finished_num, 0) * prc.unit_price as decimal(18, 2)) |
| | | when poro.type = 0 |
| | | then cast(ifnull(pa.work_hours, 0) * ifnull(ppm.work_hour, 0) as decimal(18, 2)) |
| | | else cast(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 as decimal(18, 2)) |
| | | end |
| | | ) as wages |
| | | from production_account pa |
| | | 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 piece_rate_config prc on prc.product_model_id = pm.id |
| | | and prc.operation_name = pa.technology_operation_name |
| | | and prc.status = 1 |
| | | <where> |
| | | <if test="ew.schedulingUserName != null and ew.schedulingUserName !=''"> |
| | | and slpa.scheduling_user_name = #{ew.schedulingUserName} |
| | | </if> |
| | | <if test="startDate != null">and date(pa.scheduling_date) >= #{startDate}</if> |
| | | <if test="endDate != null">and date(pa.scheduling_date) <= #{endDate}</if> |
| | | <if test="userName != null and userName != ''">and pa.scheduling_user_name like concat('%', #{userName}, '%')</if> |
| | | </where> |
| | | group by pa.scheduling_user_id, pa.scheduling_user_name |
| | | order by wages desc |
| | | </select> |
| | | |
| | | <delete id="deleteByWorkOrderIds" parameterType="java.util.List"> |
| | | DELETE FROM production_product_main |
| | | WHERE work_order_id IN |
| | | <foreach collection="workOrderIds" item="id" open="(" separator="," close=")"> |
| | | <!-- 工时/报废是报工单级标量,一单多工序时直接 sum 会被行数放大,故用 rn=1 只在其首道工序行计入 --> |
| | | <select id="outputStat" resultType="com.ruoyi.production.bean.vo.DeviceOutputStatVo"> |
| | | select |
| | | t.groupName, |
| | | <if test="dimension == 'device'">t.groupId,</if> |
| | | count(distinct t.ppmId) as workCount, |
| | | sum(ifnull(t.finishedNum, 0)) as quantity, |
| | | sum(case when t.rn = 1 then ifnull(t.scrapQty, 0) else 0 end) as scrapQty, |
| | | sum(case when t.rn = 1 then ifnull(t.workHour, 0) else 0 end) as workHour |
| | | from ( |
| | | select |
| | | <choose> |
| | | <when test="dimension == 'operation'">pa.technology_operation_name</when> |
| | | <when test="dimension == 'product'">concat(ifnull(p.product_name, ''), '/', ifnull(pm.model, ''))</when> |
| | | <otherwise>ifnull(ppm.device_name, '未指定设备')</otherwise> |
| | | </choose> |
| | | as groupName, |
| | | ppm.device_id as groupId, |
| | | ppm.id as ppmId, |
| | | pa.finished_num as finishedNum, |
| | | ppm.work_hour as workHour, |
| | | ppo.scrap_qty as scrapQty, |
| | | row_number() over (partition by ppm.id order by pa.id) as rn |
| | | from production_account pa |
| | | 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 ( |
| | | select production_product_main_id, sum(ifnull(scrap_qty, 0)) as scrap_qty |
| | | from production_product_output |
| | | group by production_product_main_id |
| | | ) ppo on ppo.production_product_main_id = ppm.id |
| | | <where> |
| | | <if test="startDate != null">and date(pa.scheduling_date) >= #{startDate}</if> |
| | | <if test="endDate != null">and date(pa.scheduling_date) <= #{endDate}</if> |
| | | <if test="deviceId != null">and ppm.device_id = #{deviceId}</if> |
| | | </where> |
| | | ) t |
| | | group by t.groupName |
| | | <if test="dimension == 'device'">, t.groupId</if> |
| | | order by quantity desc |
| | | </select> |
| | | |
| | | <select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductionOrder"> |
| | | select null |
| | | </select> |
| | | |
| | | <select id="listProductionDetails" resultType="com.ruoyi.production.bean.dto.ProductionProductMainDto"> |
| | | select ppm.*, |
| | | pot.work_order_no as workOrderNo, |
| | | p.product_name as productName, |
| | | pm.model as productModelName, |
| | | pm.unit, |
| | | pa.technology_operation_name as process, |
| | | ifnull(ppo.quantity, 0) as quantity, |
| | | ifnull(ppo.scrap_qty, 0) as scrapQty, |
| | | date(pa.scheduling_date) as schedulingDate, |
| | | pa.scheduling_user_name as schedulingUserName, |
| | | cast(ifnull(ppm.work_hour, 0) as decimal(18,4)) as workHour, |
| | | cast(ifnull(pa.work_hours, 0) as decimal(18,4)) as workHours, |
| | | cast( |
| | | case |
| | | when prc.unit_price is not null then ifnull(pa.finished_num, 0) * prc.unit_price |
| | | when poro.type = 0 then ifnull(pa.work_hours, 0) * ifnull(ppm.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, |
| | | case when prc.unit_price is not null then '计件' else '计时' end as wageMode, |
| | | ppm.device_id as deviceId, |
| | | ppm.device_name as deviceName |
| | | 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 production_product_output ppo on ppo.production_product_main_id = ppm.id |
| | | left join piece_rate_config prc on prc.product_model_id = pm.id |
| | | and prc.operation_name = pa.technology_operation_name |
| | | and prc.status = 1 |
| | | <where> |
| | | <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) >= #{c.entryDateStart} |
| | | </if> |
| | | <if test="c.entryDateEnd != null"> |
| | | and date(pa.scheduling_date) <= #{c.entryDateEnd} |
| | | </if> |
| | | </if> |
| | | </where> |
| | | order by pa.scheduling_date desc, pa.id desc |
| | | </select> |
| | | |
| | | <select id="listMain" resultType="java.lang.Long"> |
| | | select id |
| | | from production_product_main |
| | | where production_operation_task_id in |
| | | <foreach collection="list" item="id" open="(" separator="," close=")"> |
| | | #{id} |
| | | </foreach> |
| | | </delete> |
| | | </select> |
| | | |
| | | </mapper> |