From 1b2f1eb44d9f0de6b9238cfe314988a95c87344a Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 02 四月 2026 13:37:15 +0800
Subject: [PATCH] 绩效管理:工时汇总对接MES数据&人员考勤调整
---
performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java | 94 ++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 85 insertions(+), 9 deletions(-)
diff --git a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java
index 490b042..9aef08d 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/service/impl/AuxiliaryOriginalHoursServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,9 +12,16 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.enums.ContractType;
+import com.ruoyi.common.enums.StaffSkillLevelType;
import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.api.mes.MesApiUtils;
+import com.ruoyi.common.utils.api.mes.model.WorkingHoursRecordSumVO;
+import com.ruoyi.common.utils.api.mes.model.WorkingHoursRecordTotalVO;
+import com.ruoyi.common.utils.excel.EasyExcelUtils;
+import com.ruoyi.common.utils.excel.FullCustomAutoWidthHandler;
+import com.ruoyi.common.utils.excel.HeaderContentRowHeightHandler;
import com.ruoyi.performance.dto.AuxiliaryAllDto;
-import com.ruoyi.performance.dto.AuxiliaryCorrectionHoursDto;
import com.ruoyi.performance.dto.AuxiliaryOriginalHoursDto;
import com.ruoyi.performance.dto.AuxiliaryOriginalHoursLookDto;
import com.ruoyi.performance.mapper.AuxiliaryCorrectionHoursMapper;
@@ -23,8 +31,10 @@
import com.ruoyi.performance.pojo.AuxiliaryCorrectionHours;
import com.ruoyi.performance.service.AuxiliaryOriginalHoursService;
import com.ruoyi.system.mapper.UserMapper;
-import org.apache.commons.math3.analysis.function.Power;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.IndexedColors;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -33,11 +43,14 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
+@Slf4j
@Service
public class AuxiliaryOriginalHoursServiceImpl implements AuxiliaryOriginalHoursService {
@@ -56,9 +69,12 @@
@Resource
AuxiliaryCorrectionHoursMapper auxiliaryCorrectionHoursMapper;
+ @Autowired
+ private MesApiUtils mesApiUtils;
+
@Override
public IPage<AuxiliaryOriginalHoursDto> selectAuxiliaryOriginalHours(Page page, AuxiliaryOriginalHoursLookDto auxiliaryOriginalHoursLookDto) {
- List<Long> ids = new ArrayList<>();
+ List<Integer> ids = new ArrayList<>();
String departLims = auxiliaryOriginalHoursLookDto.getDepartLims();
auxiliaryOriginalHoursLookDto.setDepartLims(null);
String name = auxiliaryOriginalHoursLookDto.getName();
@@ -207,7 +223,7 @@
if (StringUtils.isBlank(dto.getMonth())) {
throw new BaseException("缂哄皯鏈堜唤");
}
- List<Long> userIds = new ArrayList<>();
+ List<Integer> userIds = new ArrayList<>();
String name = dto.getName();
if (ObjectUtils.isNotEmpty(name)) {
@@ -226,12 +242,23 @@
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String beginDate = previousMonth26th.atStartOfDay().format(outputFormatter);
String endDate = currentMonth25th.atStartOfDay().format(outputFormatter);
-// dto.setBeginDate(beginDate + " 00:00:00");
-// dto.setEndDate(endDate + " 23:59:59");
- dto.setBeginDate(beginDate);
- dto.setEndDate(endDate);
+ dto.setBeginDate(beginDate + " 00:00:00");
+ dto.setEndDate(endDate + " 23:59:59");
+ dto.setAssistBeginDate(beginDate);
+ dto.setAssistEndDate(endDate);
-
+ //鏌ヨKJNS鍜孼TNS鍩熺殑MES缁╂晥鏁版嵁
+ Map<String, Object> params = new HashMap<>();
+ params.put("year",date.getYear());
+ params.put("month",date.getMonthValue());
+ List<WorkingHoursRecordTotalVO> hoursRecordSumByNS = new ArrayList<>();
+ List<WorkingHoursRecordTotalVO> hoursRecordSumByKJ = new ArrayList<>();
+ try {
+ hoursRecordSumByNS = mesApiUtils.getCheckWorkingHoursRecordSum(ContractType.ZTNS.getValue(), params);
+ hoursRecordSumByKJ = mesApiUtils.getCheckWorkingHoursRecordSum(ContractType.KJNS.getValue(), params);
+ }catch (Exception e){
+ log.error("宸ユ椂姹囨�绘煡璇㈠紓甯革細{}",e.getMessage());
+ }
// 鏌ヨ浜ч噺宸ユ椂
List<AuxiliaryAllDto> auxiliaryAllDtos = auxiliaryOutputWorkingHoursMapper.selectAuxiliaryAllByMonth(dto, userIds);
@@ -257,11 +284,60 @@
BigDecimal total = (auxiliaryAllDto.getYieldHour() != null ? auxiliaryAllDto.getYieldHour() : BigDecimal.ZERO)
.add(auxiliaryAllDto.getSubsidiaryHour() != null ? auxiliaryAllDto.getSubsidiaryHour() : BigDecimal.ZERO);
auxiliaryAllDto.setTotalHour(total);
+ if(!hoursRecordSumByNS.isEmpty()){
+ WorkingHoursRecordTotalVO totalVOByNS = hoursRecordSumByNS.stream().filter(f -> StringUtils.equals(f.getChecker(), auxiliaryAllDto.getUserName())).findFirst().orElse(null);
+ if(ObjectUtils.isNotNull(totalVOByNS)){
+ auxiliaryAllDto.setHandymanWageByNS(totalVOByNS.getHandymanWage());
+ auxiliaryAllDto.setOnsiteInspWageByNS(totalVOByNS.getOnsiteInspWage());
+ auxiliaryAllDto.setOperationPerformanceByNS(totalVOByNS.getOperationPerformance());
+ auxiliaryAllDto.setProductPerformanceByNS(totalVOByNS.getProductPerformance());
+ }
+ }
+ if(!hoursRecordSumByKJ.isEmpty()){
+ WorkingHoursRecordTotalVO totalVOByKJ = hoursRecordSumByKJ.stream().filter(f -> StringUtils.equals(f.getChecker(), auxiliaryAllDto.getUserName())).findFirst().orElse(null);
+ if(ObjectUtils.isNotNull(totalVOByKJ)){
+ auxiliaryAllDto.setHandymanWageByKJ(totalVOByKJ.getHandymanWage());
+ auxiliaryAllDto.setOnsiteInspWageByKJ(totalVOByKJ.getOnsiteInspWage());
+ auxiliaryAllDto.setOperationPerformanceByKJ(totalVOByKJ.getOperationPerformance());
+ auxiliaryAllDto.setProductPerformanceByKJ(totalVOByKJ.getProductPerformance());
+ }
+ }
}
return auxiliaryAllDtos;
}
+ @Override
+ public void exportWorkHoursTotal(HttpServletResponse response, AuxiliaryOriginalHoursLookDto dto) {
+ response.reset();
+ try {
+ //1.缁勮鏁版嵁
+ AtomicInteger excelIndex = new AtomicInteger(1);
+ List<AuxiliaryAllDto> auxiliaryAllDtos = selectAuxiliaryAllByMonth(dto);
+ auxiliaryAllDtos.forEach(a->{
+ a.setExcelIndex(excelIndex.getAndIncrement());
+ a.setOperationPerformance(a.getOperationPerformanceByKJ().add(a.getOperationPerformanceByNS()));//宸ュ簭缁╂晥姹囨��
+ a.setOnsiteInspWage(a.getOnsiteInspWageByKJ().add(a.getOnsiteInspWageByNS()));//宸℃缁╂晥姹囨��
+ a.setProductPerformance(a.getProductPerformanceByKJ().add(a.getProductPerformanceByNS()));//鎴愬搧缁╂晥姹囨��
+ a.setHandymanWage(a.getHandymanWageByKJ().add(a.getHandymanWageByNS()));//鏉傚伐宸ヨ祫
+ });
+ //2.瀵煎嚭
+ String fileName = "涓ぉ鑰愪笣璐ㄩ噺閮ㄥ伐鏃舵眹鎬�"+ ExcelTypeEnum.XLSX;
+ fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
+ response.setContentType("application/vnd.ms-excel");
+ response.setHeader("Cache-Control", "no-cache");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+ EasyExcel.write(response.getOutputStream())
+ .head(AuxiliaryAllDto.class)
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+ .sheet("Sheet 1")
+ .doWrite(auxiliaryAllDtos);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
private Map<String, AuxiliaryOriginalHoursDto> getData(List<Map<String, Object>> objectMaps, String type) {
Map<String, AuxiliaryOriginalHoursDto> dtoMap = new HashMap<>();
for (Map<String, Object> objectMap : objectMaps) {
--
Gitblit v1.9.3