From f8dfc6add4658bec89ef48c2bc091cfdbd7f65c8 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期四, 19 三月 2026 16:35:28 +0800
Subject: [PATCH] feat(production): 实现生产报工审核功能
---
src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java | 2
src/main/java/com/ruoyi/production/service/ProductionProductMainService.java | 7 +
src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java | 30 +++++
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 174 +++++++++++++++++++++++-----
src/main/java/com/ruoyi/common/enums/AuditEnum.java | 25 ++++
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 17 --
src/main/resources/mapper/production/ProductionProductMainMapper.xml | 3
src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java | 13 +
src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java | 14 -
src/main/java/com/ruoyi/RuoYiApplication.java | 2
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java | 4
src/main/java/com/ruoyi/production/vo/ProductAuditVo.java | 28 ++++
12 files changed, 257 insertions(+), 62 deletions(-)
diff --git a/src/main/java/com/ruoyi/RuoYiApplication.java b/src/main/java/com/ruoyi/RuoYiApplication.java
index 97efe32..cc60723 100644
--- a/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -3,6 +3,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
@@ -12,6 +13,7 @@
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@EnableScheduling
+@EnableAspectJAutoProxy(exposeProxy = true)
public class RuoYiApplication
{
public static void main(String[] args)
diff --git a/src/main/java/com/ruoyi/common/enums/AuditEnum.java b/src/main/java/com/ruoyi/common/enums/AuditEnum.java
new file mode 100644
index 0000000..9ba5f36
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/enums/AuditEnum.java
@@ -0,0 +1,25 @@
+package com.ruoyi.common.enums;
+
+import lombok.Getter;
+
+/**
+ * @author buhuazhen
+ * @date 2026/3/19
+ * @email 3038525872@qq.com
+ */
+@Getter
+public enum AuditEnum implements BaseEnum<Integer> {
+
+ NO_AUDIT(0, "鏈鏍�"),
+ AUDIT_SUCCESS(1, "瀹℃牳閫氳繃"),
+ AUDIT_FAIL(2, "瀹℃牳澶辫触");
+
+
+ private final Integer code;
+ private final String value;
+
+ AuditEnum(Integer code, String value) {
+ this.code = code;
+ this.value = value;
+ }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
index 2d5231d..7e16d45 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -19,6 +19,8 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
index e4a0813..39768b6 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -3,18 +3,16 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.production.dto.ProductProcessRouteItemDto;
import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
import com.ruoyi.production.service.ProductionProductMainService;
+import com.ruoyi.production.vo.ProductAuditVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
-import java.util.Arrays;
+import javax.validation.Valid;
import java.util.List;
@RequestMapping("productionProductMain")
@@ -63,4 +61,11 @@
ExcelUtil<ProductionProductMainDto> util = new ExcelUtil<ProductionProductMainDto>(ProductionProductMainDto.class);
util.exportExcel(response, list, "鐢熶骇鎶ュ伐鏁版嵁");
}
+
+
+ @PostMapping("/productAudit")
+ public R productAudit(@RequestBody @Valid ProductAuditVo vo) {
+ productionProductMainService.auditProductMain(vo);
+ return R.ok();
+ }
}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
index 9e5e121..c9cbaa1 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -2,6 +2,7 @@
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.enums.AuditEnum;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.production.pojo.ProductionProductMain;
import io.swagger.annotations.ApiModelProperty;
@@ -61,5 +62,6 @@
private BigDecimal workHours;
private BigDecimal wages;
-
+ private Long auditUserId;
+ private String auditUserName;
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
index 2064e04..d3164f1 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -51,4 +51,34 @@
@ApiModelProperty(value = "绉熸埛ID")
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
+
+ @ApiModelProperty(value = "瀹℃牳鐘舵��")
+ @TableField(value = "audit_status")
+ private Integer auditStatus;
+
+ @ApiModelProperty(value = "瀹℃牳浜篿d")
+ @TableField(value = "audit_user_id")
+ private Long auditUserId;
+
+ @ApiModelProperty(value = "瀹℃牳浜�")
+ @TableField(value = "audit_user_name")
+ private String auditUserName;
+
+ @ApiModelProperty(value = "琚鏍镐汉id")
+ @TableField(value = "sure_audit_user_id")
+ private Long sureAuditUserId;
+
+ @ApiModelProperty(value = "琚鏍镐汉")
+ @TableField(value = "sure_audit_user_name")
+ private String sureAuditUserName;
+
+ @ApiModelProperty(value = "瀹℃牳鏃堕棿")
+ @TableField(value = "audit_time")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime auditTime;
+
+ @ApiModelProperty(value = "瀹℃牳鎰忚")
+ @TableField(value = "audit_opinion")
+ private String auditOpinion;
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
index 72d868c..e09893d 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -5,7 +5,10 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.production.dto.ProductionProductMainDto;
import com.ruoyi.production.pojo.ProductionProductMain;
+import com.ruoyi.production.pojo.ProductionProductOutput;
+import com.ruoyi.production.vo.ProductAuditVo;
+import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
@@ -14,7 +17,11 @@
Boolean addProductMain(ProductionProductMainDto productionProductMainDto);
+ void auditProductMain(@NotNull ProductAuditVo productAuditVo);
+
Boolean removeProductMain(Long id);
+ void nextAddProductMain(@NotNull ProductionProductOutput productionProductOutput);
+
ArrayList<Long> listMain(List<Long> idList);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
index c5fbac0..19f5f61 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -18,6 +18,7 @@
import lombok.AllArgsConstructor;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -36,17 +37,13 @@
@AllArgsConstructor
public class ProductProcessRouteItemServiceImpl extends ServiceImpl<ProductProcessRouteItemMapper, ProductProcessRouteItem> implements ProductProcessRouteItemService {
-
+ @Autowired
+ @Lazy
private ProductionProductMainService productionProductMainService;
+
private ProductProcessRouteItemMapper productProcessRouteItemMapper;
private ProductionProductMainMapper productionProductMainMapper;
-
- private ProductionProductInputMapper productionProductInputMapper;
-
- private ProductionProductOutputMapper productionProductOutputMapper;
-
- private QualityInspectMapper qualityInspectMapper;
private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
@@ -54,9 +51,6 @@
private ProductOrderMapper productOrderMapper;
- private ProductProcessRouteMapper productProcessRouteMapper;
-
- private SalesLedgerProductMapper salesLedgerProductMapper;
@Override
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 fa34114..36a02b7 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -1,5 +1,7 @@
package com.ruoyi.production.service.impl;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,10 +13,12 @@
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.common.enums.AuditEnum;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.dto.ProductStructureDto;
@@ -22,16 +26,21 @@
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductionProductMainService;
+import com.ruoyi.production.vo.ProductAuditVo;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.*;
import com.ruoyi.quality.service.IQualityInspectService;
import lombok.AllArgsConstructor;
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -39,6 +48,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.stream.Collectors;
@Service
@@ -91,6 +101,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean addProductMain(ProductionProductMainDto dto) {
SysUser user = userMapper.selectUserById(dto.getUserId());
ProductionProductMain productionProductMain = new ProductionProductMain();
@@ -137,11 +148,13 @@
productionProductMain.setUserName(dto.getUserName());
productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId());
productionProductMain.setWorkOrderId(dto.getWorkOrderId());
+ productionProductMain.setAuditUserId(dto.getAuditUserId());
+ productionProductMain.setAuditUserName(dto.getAuditUserName());
productionProductMain.setStatus(0);
productionProductMainMapper.insert(productionProductMain);
/*鏂板鎶ュ伐鎶曞叆琛�*/
List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
- if (productStructureDtos.size() == 0) {
+ if (productStructureDtos.isEmpty()) {
//濡傛灉璇ュ伐搴忔病鏈変骇鍝佺粨鏋勭殑鎶曞叆鍝�,閭h繖涓姇鍏ュ搧鍜屼骇鍑哄搧鏄悓涓�涓�
ProductStructureDto productStructureDto = new ProductStructureDto();
productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId());
@@ -169,6 +182,130 @@
BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
//鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
if (productQty.compareTo(BigDecimal.ZERO) > 0) {
+ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
+ /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
+ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
+ productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
+ if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
+ productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
+ }
+ if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
+ productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
+ }
+ productWorkOrderMapper.updateById(productWorkOrder);
+ //鐢熶骇璁㈠崟
+ ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+ if (ObjectUtils.isNull(productOrder.getStartTime())) {
+ productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
+ }
+ if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+ //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
+ productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
+ if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
+ productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
+ }
+ }
+ productOrderMapper.updateById(productOrder);
+ }
+ //濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
+ if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
+ if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
+ stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
+ }
+ }
+ //nextAddProductMain(productionProductOutput) // 鐢变簬闇�瑕佸鏍革紝鎵�浠ラ渶瑕佹媶灏佷笅鏉�
+ return true;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void auditProductMain(ProductAuditVo productAuditVo) {
+ ProductionProductMain productionProductMain = productionProductMainMapper.selectById(productAuditVo.getId());
+
+ // 褰撳墠瀹℃壒浜� 瑕佷笌褰撳墠鐧诲綍浜轰负鍚屼竴浜�
+ Assert.isTrue(SecurityUtils.getUserId().equals(productionProductMain.getAuditUserId()), "褰撳墠鐧诲綍鐢ㄦ埛涓嶆槸褰撳墠瀹℃壒浜�");
+
+
+ // 鐘舵�佸繀椤讳负寰呭鏍哥姸鎬�
+ if (!Objects.equals(productionProductMain.getAuditStatus(), AuditEnum.NO_AUDIT.getCode())) {
+ throw new ServiceException("褰撳墠鐘舵�佸凡瀹℃牳,涓嶈兘閲嶅瀹℃牳");
+ }
+
+ LambdaQueryWrapper<ProductionProductOutput> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ProductionProductOutput::getProductMainId, productionProductMain.getId());
+ queryWrapper.last("limit 1");
+ ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectOne(queryWrapper);
+ ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
+
+
+ switch (productAuditVo.getAuditStatus()) {
+ case NO_AUDIT:
+ throw new ServiceException("淇敼瀹℃牳鐘舵�佸け璐ワ紝涓嶈兘涓烘湭瀹℃牳鐘舵��");
+ case AUDIT_SUCCESS:
+
+ Assert.isTrue(productionProductOutput != null, "娌℃湁鎵惧埌瀵瑰簲鐨勬姤宸ヤ骇鍑鸿褰�");
+ ((ProductionProductMainService) AopContext.currentProxy()).nextAddProductMain(productionProductOutput);
+ break;
+ case AUDIT_FAIL:
+ // 鍑忓皯 鏇存柊宸ュ崟鍜岀敓浜ц鍗�
+ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
+ ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+
+ productWorkOrder.setCompleteQuantity(
+ productWorkOrder.getCompleteQuantity()
+ .subtract(productionProductOutput.getQuantity())
+ .max(BigDecimal.ZERO)
+ );
+ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
+
+
+ if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+ //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗� 闇�瑕佹墸闄�
+ productOrder.setCompleteQuantity(
+ productOrder.getCompleteQuantity()
+ .subtract(productionProductOutput.getQuantity())
+ .max(BigDecimal.ZERO)
+ );
+ if (productOrder.getCompleteQuantity().compareTo(productionProductOutput.getQuantity()) > 0) {
+ productOrder.setEndTime(null);
+ }
+ productOrderMapper.updateById(productOrder);
+ }
+
+ if (productWorkOrder.getCompleteQuantity().compareTo(productionProductOutput.getQuantity()) > 0) {
+ productWorkOrder.setActualEndTime(null);
+ }
+
+ productWorkOrderMapper.updateById(productWorkOrder);
+
+ break;
+ }
+
+ // 淇敼鐘舵��
+ ProductionProductMain updateDate = new ProductionProductMain();
+ updateDate.setId(productionProductMain.getId());
+ updateDate.setAuditStatus(productAuditVo.getAuditStatus().getCode());
+ updateDate.setSureAuditUserId(SecurityUtils.getUserId());
+ updateDate.setSureAuditUserName(SecurityUtils.getUsername());
+ updateDate.setAuditTime(LocalDateTime.now());
+ updateDate.setAuditOpinion(productAuditVo.getAuditOpinion());
+ productionProductMainMapper.updateById(updateDate);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void nextAddProductMain(@NotNull ProductionProductOutput productionProductOutput){
+ //鍚堟牸鏁伴噺=鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺
+ ProductionProductMain productionProductMain = productionProductMainMapper.selectById(productionProductOutput.getProductMainId());
+ BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
+ ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
+ ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
+ //宸ヨ壓璺嚎涓綋鍓嶅伐搴忓搴旂殑浜у嚭瑙勬牸鍨嬪彿
+ ProductModel productModel = productModelMapper.selectById(productProcessRouteItem.getProductModelId());
+ SysUser user = userMapper.selectUserById(SecurityUtils.getUserId());
+
+ //鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
+ if (productQty.compareTo(BigDecimal.ZERO) > 0) {
/*鏂板璐ㄦ*/
List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
if (productProcessRouteItem.getIsQuality()) {
@@ -194,7 +331,7 @@
qualityInspect.setProductModelId(productModel.getId());
qualityInspectMapper.insert(qualityInspect);
List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
- if (qualityTestStandard.size() > 0) {
+ if (!qualityTestStandard.isEmpty()) {
qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
qualityInspectMapper.updateById(qualityInspect);
qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
@@ -211,29 +348,7 @@
//鐩存帴鍏ュ簱
stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
}
- /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
- ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
- productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
- if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
- productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
- }
- if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
- productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
- }
- productWorkOrderMapper.updateById(productWorkOrder);
- //鐢熶骇璁㈠崟
- ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
- if (ObjectUtils.isNull(productOrder.getStartTime())) {
- productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
- }
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
- //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
- productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
- if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
- productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
- }
- }
- productOrderMapper.updateById(productOrder);
+
/*娣诲姞鐢熶骇鏍哥畻 鍖哄垎宸ュ簭鏄浠惰繕鏄鏃�*/
BigDecimal workHours = (productProcess.getType() == 1)
? productProcess.getSalaryQuota().multiply(productQty)
@@ -247,17 +362,10 @@
.workHours(workHours)
.process(productProcess.getName())
.schedulingDate(LocalDate.now())
- .tenantId(dto.getTenantId())
+ .tenantId(productionProductOutput.getTenantId())
.build();
salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
}
- //濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
- if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
- if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
- stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
- }
- }
- return true;
}
@Override
diff --git a/src/main/java/com/ruoyi/production/vo/ProductAuditVo.java b/src/main/java/com/ruoyi/production/vo/ProductAuditVo.java
new file mode 100644
index 0000000..27ae500
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/vo/ProductAuditVo.java
@@ -0,0 +1,28 @@
+package com.ruoyi.production.vo;
+
+import com.ruoyi.common.enums.AuditEnum;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author buhuazhen
+ * @date 2026/3/19
+ * @email 3038525872@qq.com
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProductAuditVo implements Serializable {
+ @NotNull(message = "id涓嶈兘涓虹┖")
+ private Long id;
+
+ @NotNull(message = "瀹℃牳鐘舵�佷笉鑳戒负绌�")
+ private AuditEnum auditStatus;
+
+ // 瀹℃牳鎰忚
+ private String auditOpinion;
+}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 0e9f52f..2326c13 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -52,6 +52,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.stereotype.Service;
@@ -107,21 +108,8 @@
private final CommonFileServiceImpl commonFileService;
private final ShippingInfoMapper shippingInfoMapper;
private final InvoiceLedgerMapper invoiceLedgerMapper;
- private final SalesLedgerSchedulingMapper salesLedgerSchedulingMapper;
- private final SalesLedgerWorkMapper salesLedgerWorkMapper;
- private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
private final InvoiceRegistrationMapper invoiceRegistrationMapper;
- private final ProductOrderMapper productOrderMapper;
- private final ProcessRouteMapper processRouteMapper;
- private final ProductProcessRouteMapper productProcessRouteMapper;
- private final ProcessRouteItemMapper processRouteItemMapper;
- private final ProductProcessRouteItemMapper productProcessRouteItemMapper;
- private final ProductWorkOrderMapper productWorkOrderMapper;
- private final ProductionProductMainMapper productionProductMainMapper;
- private final ProductionProductOutputMapper productionProductOutputMapper;
- private final ProductionProductInputMapper productionProductInputMapper;
- private final QualityInspectMapper qualityInspectMapper;
private final RedisTemplate<String, String> redisTemplate;
@Autowired
private SysDeptMapper sysDeptMapper;
@@ -135,8 +123,9 @@
@Autowired
private ProductStructureMapper productStructureMapper;
@Autowired
+ @Lazy
private ProductionProductMainService productionProductMainService;
- ;
+
@Autowired
private SysUserMapper sysUserMapper;
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index a122e90..5b3f845 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -48,6 +48,9 @@
<if test="c.status != null and c.status != ''">
and ppm.status = #{c.status}
</if>
+ <if test="c.auditStatus != null">
+ and ppm.audit_status = #{c.auditStatus.code}
+ </if>
</where>
order by ppm.id
--
Gitblit v1.9.3