From 2ee9e158e3129070f6b1fd953da1540f05d4f2b0 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 10 七月 2026 18:04:50 +0800
Subject: [PATCH] 修改报工
---
src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java | 135 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 134 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
index c35c757..cd9e476 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
@@ -1,19 +1,39 @@
package com.ruoyi.production.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.production.bean.dto.ProductionAccountDto;
import com.ruoyi.production.bean.dto.ProductionProductMainDto;
import com.ruoyi.production.bean.vo.ProductionAccountVo;
import com.ruoyi.production.mapper.ProductionAccountMapper;
+import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
+import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.mapper.ProductionProductOutputMapper;
import com.ruoyi.production.pojo.ProductionAccount;
+import com.ruoyi.production.pojo.ProductionOperationTask;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
+import com.ruoyi.production.pojo.ProductionProductMain;
+import com.ruoyi.production.pojo.ProductionProductOutput;
+import com.ruoyi.technology.mapper.TechnologyOperationMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
+import com.ruoyi.technology.pojo.TechnologyOperation;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.production.service.ProductionAccountService;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.exception.ServiceException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
@Service
@RequiredArgsConstructor
@@ -21,6 +41,12 @@
private final ProductionProductMainMapper productionProductMainMapper;
+ private final ProductionProductOutputMapper productionProductOutputMapper;
+ private final ProductionOperationTaskMapper productionOperationTaskMapper;
+ private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
+ private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
+ private final TechnologyOperationMapper technologyOperationMapper;
+ private final SysUserMapper sysUserMapper;
@Override
public IPage<ProductionAccountVo> listPage(Page<ProductionAccountDto> page, ProductionAccountDto dto) {
@@ -32,7 +58,114 @@
@Override
public IPage<ProductionProductMainDto> listProductionDetails(ProductionAccountDto dto, Page page) {
// 鏌ヨ鐢熶骇鏍哥畻鏄庣粏
- return productionProductMainMapper.listProductionDetails(normalizeDateQuery(dto), page);
+ ProductionAccountDto queryDto = normalizeDateQuery(dto);
+ if (queryDto.getAuditStatus() == null) {
+ queryDto.setAuditStatus(1);
+ }
+ if (queryDto.getReportType() == null) {
+ queryDto.setReportType(0);
+ }
+ return productionProductMainMapper.listProductionDetails(queryDto, page);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean batchAccounting(ProductionAccountDto dto) {
+ ProductionAccountDto queryDto = normalizeDateQuery(dto);
+ LambdaQueryWrapper<ProductionProductMain> queryWrapper = Wrappers.<ProductionProductMain>lambdaQuery()
+ .eq(ProductionProductMain::getAuditStatus, 1)
+ .eq(ProductionProductMain::getReportType, 0);
+ if (queryDto.getSchedulingUserId() != null) {
+ queryWrapper.eq(ProductionProductMain::getUserId, queryDto.getSchedulingUserId());
+ }
+ if (queryDto.getSchedulingUserName() != null && !queryDto.getSchedulingUserName().isEmpty()) {
+ queryWrapper.like(ProductionProductMain::getUserName, queryDto.getSchedulingUserName());
+ }
+ if (queryDto.getEntryDate() != null) {
+ queryWrapper.apply("date(create_time) = {0}", queryDto.getEntryDate());
+ }
+ if (queryDto.getEntryDateStart() != null) {
+ queryWrapper.ge(ProductionProductMain::getCreateTime, queryDto.getEntryDateStart().atStartOfDay());
+ }
+ if (queryDto.getEntryDateEnd() != null) {
+ queryWrapper.le(ProductionProductMain::getCreateTime, queryDto.getEntryDateEnd().atTime(23, 59, 59));
+ }
+ List<ProductionProductMain> reportList = productionProductMainMapper.selectList(queryWrapper);
+ for (ProductionProductMain report : reportList) {
+ rebuildAccount(report);
+ }
+ return Boolean.TRUE;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean singleAdjust(ProductionAccountDto dto) {
+ if (dto == null || dto.getSchedulingUserId() == null) {
+ throw new ServiceException("璇烽�夋嫨闇�瑕佷慨姝g殑浜哄憳");
+ }
+ BigDecimal adjustAmount = dto.getAdjustAmount();
+ if (adjustAmount == null || adjustAmount.compareTo(BigDecimal.ZERO) == 0) {
+ throw new ServiceException("淇閲戦涓嶈兘涓虹┖");
+ }
+ ProductionAccount account = new ProductionAccount();
+ account.setSchedulingUserId(dto.getSchedulingUserId());
+ account.setSchedulingUserName(dto.getSchedulingUserName());
+ account.setTechnologyOperationName("宸ヨ祫淇");
+ account.setAdjustAmount(adjustAmount);
+ account.setAdjustRemark(dto.getAdjustRemark());
+ account.setAdjustUser(dto.getAdjustUser());
+ account.setAdjustTime(LocalDateTime.now());
+ account.setSchedulingDate(LocalDateTime.now());
+ account.setWorkHours(BigDecimal.ZERO);
+ account.setFinishedNum(BigDecimal.ZERO);
+ account.setAccountingBatchNo("ADJ-" + LocalDate.now());
+ baseMapper.insert(account);
+ return Boolean.TRUE;
+ }
+
+ private void rebuildAccount(ProductionProductMain productionProductMain) {
+ if (productionProductMain == null || productionProductMain.getId() == null) {
+ return;
+ }
+ productionAccountDelete(productionProductMain.getId());
+ ProductionProductOutput output = productionProductOutputMapper.selectOne(
+ Wrappers.<ProductionProductOutput>lambdaQuery()
+ .eq(ProductionProductOutput::getProductionProductMainId, productionProductMain.getId())
+ .last("limit 1"));
+ if (output == null || output.getQuantity() == null || output.getQuantity().compareTo(BigDecimal.ZERO) <= 0) {
+ return;
+ }
+ ProductionOperationTask task = productionOperationTaskMapper.selectById(productionProductMain.getProductionOperationTaskId());
+ if (task == null) {
+ return;
+ }
+ ProductionOrderRoutingOperation routingOperation = productionOrderRoutingOperationMapper.selectById(task.getProductionOrderRoutingOperationId());
+ if (routingOperation == null) {
+ return;
+ }
+ TechnologyRoutingOperation technologyRoutingOperation = technologyRoutingOperationMapper.selectById(routingOperation.getTechnologyRoutingOperationId());
+ TechnologyOperation technologyOperation = technologyRoutingOperation == null ? null
+ : technologyOperationMapper.selectById(technologyRoutingOperation.getTechnologyOperationId());
+ SysUser user = sysUserMapper.selectUserById(productionProductMain.getUserId());
+
+ ProductionAccount account = new ProductionAccount();
+ account.setProductionProductMainId(productionProductMain.getId());
+ account.setSchedulingUserId(user == null ? productionProductMain.getUserId() : user.getUserId());
+ account.setSchedulingUserName(user == null ? productionProductMain.getUserName() : user.getNickName());
+ account.setFinishedNum(output.getQuantity());
+ account.setWorkHours(technologyOperation == null ? null : technologyOperation.getSalaryQuota());
+ account.setTechnologyOperationName(technologyOperation == null ? null : technologyOperation.getName());
+ account.setSchedulingDate(LocalDateTime.now());
+ account.setAccountingBatchNo("BATCH-" + LocalDate.now());
+ baseMapper.insert(account);
+ }
+
+ private void productionAccountDelete(Long productionProductMainId) {
+ if (productionProductMainId == null) {
+ return;
+ }
+ baseMapper.delete(new LambdaQueryWrapper<ProductionAccount>()
+ .eq(ProductionAccount::getProductionProductMainId, productionProductMainId));
}
private ProductionAccountDto normalizeDateQuery(ProductionAccountDto dto) {
--
Gitblit v1.9.3