From 60e741a676ff88385fdf08ed8f506beb979fde54 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 08 四月 2026 15:51:14 +0800
Subject: [PATCH] feat(production): 新增报工主表实体及实现报工主表相关服务逻辑
---
src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java | 21 ++++++++++
src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java | 6 +++
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 4 ++
src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml | 39 +++++++++++++++----
src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java | 9 +++-
src/main/resources/mapper/production/ProductionProductMainMapper.xml | 11 ++++-
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java | 4 ++
7 files changed, 79 insertions(+), 15 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
index 608a5f1..b2f33b8 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -65,4 +65,8 @@
private Long auditUserId;
private String auditUserName;
+ private Long deviceId;
+ private String deviceName;
+ private String workMinutes;
+
}
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java
index 8cb4d91..7870189 100644
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java
+++ b/src/main/java/com/ruoyi/production/dto/SalesLedgerProductionAccountingDto.java
@@ -7,9 +7,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
-
+import org.apache.commons.lang3.tuple.Pair;
import java.math.BigDecimal;
import java.time.LocalDate;
+import java.util.List;
/**
* @author :yys
@@ -18,7 +19,7 @@
@Data
@ApiModel
@ExcelIgnoreUnannotated
-public class SalesLedgerProductionAccountingDto extends SalesLedgerProductDto{
+public class SalesLedgerProductionAccountingDto extends SalesLedgerProductDto {
/**
* 鐢熶骇浜篿d
@@ -88,5 +89,9 @@
private String dateType;
+ private String deviceWorkInfo;
+
+ private List<Pair<String,Integer>> deviceWorkInfoPairList;
+
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
index 1ae57eb..cd9f280 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -92,4 +92,10 @@
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "end_time")
private LocalDateTime endTime;
+
+ @TableField(value = "device_id")
+ private Long deviceId;
+
+ @TableField(value = "device_name")
+ private String deviceName;
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index a41e537..62d1fc4 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -151,6 +151,10 @@
productionProductMain.setAuditUserId(dto.getAuditUserId());
productionProductMain.setAuditUserName(dto.getAuditUserName());
productionProductMain.setStatus(0);
+ productionProductMain.setStartTime(dto.getStartTime());
+ productionProductMain.setEndTime(dto.getEndTime());
+ productionProductMain.setDeviceId(productProcess.getDeviceId());
+ productionProductMain.setDeviceName(productProcess.getDeviceName());
productionProductMainMapper.insert(productionProductMain);
/*鏂板鎶ュ伐鎶曞叆琛�*/
List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
index 7e5f58b..a1e9c9c 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.production.service.impl;
+import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,9 +15,13 @@
import com.ruoyi.production.service.SalesLedgerProductionAccountingService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.tuple.Pair;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
/**
* @author :yys
@@ -56,7 +61,21 @@
salesLedgerProductionAccountingDto.setEntryDateStart(null);
salesLedgerProductionAccountingDto.setEntryDateEnd(null);
}
- return salesLedgerProductionAccountingMapper.pageProductionAccounting(page, salesLedgerProductionAccountingDto);
+ IPage<SalesLedgerProductionAccountingDto> salesLedgerProductionAccountingDtoIPage = salesLedgerProductionAccountingMapper.pageProductionAccounting(page, salesLedgerProductionAccountingDto);
+ salesLedgerProductionAccountingDtoIPage.getRecords().forEach(it->{
+ // 鎷垮埌鏈哄彴缁熻 鍒嗛挓-鏈哄彴, 杩欐牱鎺掑垪
+ String deviceWorkInfo = it.getDeviceWorkInfo();
+ List<String> str = StrUtil.split(deviceWorkInfo, ">>>");
+ List<Pair<String,Integer>> collect = str.stream().map(n1 -> {
+ List<String> strPair = StrUtil.split(n1, "|$|");
+ if (strPair.size() == 2) {
+ return Pair.of(strPair.get(1),Integer.parseInt(strPair.get(0)));
+ }
+ return null;
+ }).filter(Objects::nonNull).collect(Collectors.toList());
+ it.setDeviceWorkInfoPairList(collect);
+ });
+ return salesLedgerProductionAccountingDtoIPage;
}
@Override
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 90c9fcc..13be81d 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -74,7 +74,13 @@
slpa.process,
ppo.quantity,
slpa.work_hours,
- slpa.work_hours * slpa.finished_num AS wages
+ slpa.work_hours * slpa.finished_num AS wages,
+ ppm.device_name,
+ ppm.device_id,
+ IFNULL(
+ TIMESTAMPDIFF(MINUTE, ppm.start_time, ppm.end_time),
+ 0
+ ) AS work_minutes
FROM
production_product_main ppm
LEFT JOIN sales_ledger_production_accounting slpa ON slpa.product_main_id = ppm.id
@@ -85,7 +91,7 @@
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
- <where>
+ where ppm.audit_status = 1
<if test="ew.schedulingUserName != null and ew.schedulingUserName !=''">
and slpa.scheduling_user_name = #{ew.schedulingUserName}
</if>
@@ -97,7 +103,6 @@
and slpa.scheduling_date >= #{ew.entryDateStart}
and slpa.scheduling_date < date_add(#{ew.entryDateEnd}, INTERVAL 1 DAY)
</if>
- </where>
</select>
<select id="listMain" resultType="java.lang.Long">
SELECT ppm.id FROM production_product_main ppm
diff --git a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
index d9ddde7..b7339b0 100644
--- a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
@@ -52,24 +52,45 @@
</select>
<select id="pageProductionAccounting"
resultType="com.ruoyi.production.dto.SalesLedgerProductionAccountingDto">
+
SELECT
slpa.scheduling_user_id,
- slpa.scheduling_user_name,
- sum(ppout.quantity) as output_num,
- sum(slpa.finished_num * work_hours) as wages,
+ 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
+ END, 2
),
'%'
- ) as output_rate
+ ) 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
+
+ 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}
@@ -84,7 +105,7 @@
</if>
</where>
- GROUP BY slpa.scheduling_user_name
+ GROUP BY slpa.scheduling_user_id
</select>
--
Gitblit v1.9.3