From 18cfe1dfbe035089d1f132850004a74641f253b5 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 16 四月 2026 15:17:48 +0800
Subject: [PATCH] feat: 部件已产品绑定
---
src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java | 150 ++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 122 insertions(+), 28 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
index 65e3392..5e26bdd 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -1,13 +1,20 @@
package com.ruoyi.production.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.service.IProductModelService;
+import com.ruoyi.basic.service.IProductService;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.dto.ProductProcessImportDto;
import com.ruoyi.production.enums.ProductProcessEnum;
import com.ruoyi.production.mapper.ProcessRouteItemMapper;
import com.ruoyi.production.mapper.ProductProcessMapper;
@@ -16,6 +23,9 @@
import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.pojo.ProductProcessRouteItem;
import com.ruoyi.production.service.ProductProcessService;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,11 +34,14 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
+import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
-public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService {
+public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess>
+ implements ProductProcessService {
@Autowired
private ProductProcessMapper productProcessMapper;
@@ -38,6 +51,15 @@
@Autowired
private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+
+ @Autowired
+ private IProductModelService productModelService;
+
+ @Autowired
+ private IProductService productService;
+
+ @Autowired
+ private SysUserMapper sysUserMapper;
@Override
public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
@@ -50,10 +72,6 @@
if (ObjectUtils.isEmpty(productProcessDto.getName())) {
throw new ServiceException("閮ㄤ欢鍚嶇О涓嶈兘涓虹┖");
}
- long count = this.count(Wrappers.<ProductProcess>lambdaQuery().eq(ProductProcess::getName, productProcessDto.getName()));
- if (count > 0) {
- throw new ServiceException("閮ㄤ欢鍚嶇О宸插瓨鍦紝涓嶈兘閲嶅");
- }
if (ObjectUtils.isNotEmpty(productProcessDto.getNo())) {
long noCount = this.count(Wrappers.<ProductProcess>lambdaQuery().eq(ProductProcess::getNo, productProcessDto.getNo()));
@@ -61,13 +79,28 @@
throw new ServiceException("宸ュ簭缂栧彿宸插瓨鍦紝涓嶈兘閲嶅");
}
}
+ // 鍒ゆ柇璁″垝宸ユ椂鏄惁涓虹┖
+ if (ObjectUtils.isEmpty(productProcessDto.getSalaryQuota())) {
+ throw new ServiceException("鏂板澶辫触,璁″垝宸ユ椂涓嶈兘涓虹┖");
+ }
+ // 鍒ゆ柇浜у搧鏄惁瀛樺湪
+ if (ObjectUtils.isEmpty(productProcessDto.getProductModelId())) {
+ throw new ServiceException("鏂板澶辫触,閮ㄤ欢涓嶈兘涓虹┖");
+ }
+ ProductModel productModel = productModelService.getById(productProcessDto.getProductModelId());
+ if (productModel == null) {
+ throw new ServiceException("鏂板澶辫触,璇ラ儴浠朵笉瀛樺湪");
+ }
ProductProcess productProcess = new ProductProcess();
BeanUtils.copyProperties(productProcessDto, productProcess);
+ productProcess.setProductModelId(productModel.getId());
+
+ validatePlanner(productProcessDto.getPlannerId(), productProcessDto.getPlannerName(), null);
+
boolean save = productProcessMapper.insert(productProcess) > 0;
if (save && ObjectUtils.isEmpty(productProcess.getNo())) {
String no = "GX" + String.format("%08d", productProcess.getId());
- // 娉ㄦ剰锛氳繖閲岀敱浜庢槸鑷姩鐢熸垚鐨� ID 琛ュ叏锛岄�氬父涓嶄細閲嶅锛屼絾寤鸿 set 涔嬪悗鏇存柊
productProcess.setNo(no);
productProcessMapper.updateById(productProcess);
}
@@ -79,13 +112,6 @@
if (ObjectUtils.isEmpty(productProcessDto.getName())) {
throw new ServiceException("閮ㄤ欢鍚嶇О涓嶈兘涓虹┖");
}
-
- long nameCount = this.count(Wrappers.<ProductProcess>lambdaQuery()
- .eq(ProductProcess::getName, productProcessDto.getName())
- .ne(ProductProcess::getId, productProcessDto.getId()));
- if (nameCount > 0) {
- throw new ServiceException("閮ㄤ欢鍚嶇О宸插瓨鍦紝涓嶈兘閲嶅");
- }
if (ObjectUtils.isNotEmpty(productProcessDto.getNo())) {
long noCount = this.count(Wrappers.<ProductProcess>lambdaQuery()
.eq(ProductProcess::getNo, productProcessDto.getNo())
@@ -94,6 +120,17 @@
throw new ServiceException("宸ュ簭缂栧彿宸插瓨鍦紝涓嶈兘閲嶅");
}
}
+
+ // 鍒ゆ柇鍏宠仈浜у搧鏄惁瀛樺湪
+ if (ObjectUtils.isNotEmpty(productProcessDto.getProductModelId())) {
+ ProductModel productModel = productModelService.getById(productProcessDto.getProductModelId());
+ if (productModel == null) {
+ throw new ServiceException("淇敼澶辫触锛屽叧鑱旈儴浠朵笉瀛樺湪");
+ }
+ }
+
+ // 鏍¢獙璁″垝浜哄憳
+ validatePlanner(productProcessDto.getPlannerId(), productProcessDto.getPlannerName(), null);
ProductProcess productProcess = new ProductProcess();
BeanUtils.copyProperties(productProcessDto, productProcess);
@@ -104,31 +141,66 @@
@Transactional(rollbackFor = Exception.class)
public void importData(MultipartFile file) {
try {
- ExcelUtil<ProductProcess> util = new ExcelUtil<>(ProductProcess.class);
- List<ProductProcess> productProcessList = util.importExcel(file.getInputStream());
- if (CollectionUtils.isEmpty(productProcessList)) {
+ ExcelUtil<ProductProcessImportDto> util = new ExcelUtil<>(ProductProcessImportDto.class);
+ List<ProductProcessImportDto> importList = util.importExcel(file.getInputStream());
+ if (CollectionUtils.isEmpty(importList)) {
throw new ServiceException("妯℃澘閿欒鎴栧鍏ユ暟鎹负绌�");
}
- for (int i = 0; i < productProcessList.size(); i++) {
- ProductProcess productProcess = productProcessList.get(i);
+ List<ProductProcess> productProcessList = new ArrayList<>();
+ for (int i = 0; i < importList.size(); i++) {
+ ProductProcessImportDto importDto = importList.get(i);
int rowNum = i + 2;
+ SysUser sysUser = null;
- if (ObjectUtils.isEmpty(productProcess)) {
+ if (ObjectUtils.isEmpty(importDto)) {
throw new ServiceException("绗�" + rowNum + "琛屾暟鎹负绌猴紝璇蜂娇鐢ㄦ纭殑妯℃澘杩涜瀵煎叆");
}
- if (ObjectUtils.isEmpty(productProcess.getName())) {
+ if (ObjectUtils.isEmpty(importDto.getName())) {
throw new ServiceException("绗�" + rowNum + "琛岋細閮ㄤ欢鍚嶇О涓嶈兘涓虹┖");
}
- if (ObjectUtils.isEmpty(productProcess.getProductProcessType())) {
- throw new ServiceException("绗�" + rowNum + "琛岋細閮ㄤ欢銆�" + productProcess.getName() + "銆戠殑绫诲瀷涓嶈兘涓虹┖");
+ if (ObjectUtils.isEmpty(importDto.getProductModel())) {
+ throw new ServiceException("绗�" + rowNum + "琛岋細閮ㄤ欢瑙勬牸涓嶈兘涓虹┖");
}
- ProductProcessEnum enumByInfo = ProductProcessEnum.getEnumByInfo(productProcess.getProductProcessType());
+ // 妫�楠屼骇鍝佷笌绫诲瀷鏄惁瀛樺湪
+ Product product = productService.getOne(new LambdaQueryWrapper<Product>().eq(Product::getProductName, importDto.getName()));
+ if (product == null) {
+ throw new ServiceException("绗�" + rowNum + "琛�: 閮ㄤ欢銆�" + importDto.getName() + "銆戜笉瀛樺湪");
+ }
+ ProductModel productModel = productModelService.getOne(new LambdaQueryWrapper<ProductModel>().eq(ProductModel::getProductId, product.getId()).eq(ProductModel::getModel, importDto.getProductModel()));
+ if (ObjectUtils.isEmpty(productModel)) {
+ throw new ServiceException("绗�" + rowNum + "琛岋細閮ㄤ欢瑙勬牸銆�" + importDto.getProductModel() + "銆戜笉瀛樺湪");
+ }
+
+ if (ObjectUtils.isEmpty(importDto.getProductProcessType())) {
+ throw new ServiceException("绗�" + rowNum + "琛岋細閮ㄤ欢銆�" + importDto.getName() + "銆戠殑绫诲瀷涓嶈兘涓虹┖");
+ }
+ ProductProcessEnum enumByInfo = ProductProcessEnum.getEnumByInfo(importDto.getProductProcessType());
if (ObjectUtils.isEmpty(enumByInfo)) {
- throw new ServiceException("绗�" + rowNum + "琛岋細閮ㄤ欢銆�" + productProcess.getName() + "銆戠殑绫诲瀷銆�" + productProcess.getProductProcessType() + "銆戜笉瀛樺湪锛岃濉啓姝g‘鐨勭被鍨嬶細鍔犲伐銆佸埉鏉垮喎鑺埗浣溿�佺璺粍瀵广�佺綈浣撹繛鎺ュ強璋冭瘯銆佹祴璇曟墦鍘嬨�佸叾浠�");
- }else {
- productProcess.setType(enumByInfo.getCode());
+ throw new ServiceException("绗�" + rowNum + "琛岋細閮ㄤ欢銆�" + importDto.getName() + "銆戠殑绫诲瀷銆�"
+ + importDto.getProductProcessType() + "銆戜笉瀛樺湪锛岃濉啓姝g‘鐨勭被鍨嬶細鍔犲伐銆佸埉鏉垮喎鑺埗浣溿�佺璺粍瀵广�佺綈浣撹繛鎺ュ強璋冭瘯銆佹祴璇曟墦鍘嬨�佸叾浠�");
}
+ // 妫�楠岃鍒掑伐鏃�
+ if (importDto.getSalaryQuota() == null || importDto.getSalaryQuota().compareTo(BigDecimal.ZERO) < 0) {
+ throw new ServiceException("绗�" + rowNum + "琛岋細璁″垝宸ユ椂涓嶈兘涓虹┖涓庤礋鏁�");
+ }
+ // 妫�楠岃鍒掍汉鍛�
+ if (StringUtils.isNotEmpty(importDto.getPlannerName())) {
+ sysUser = sysUserMapper.selectUserByNickName(importDto.getPlannerName());
+ if (ObjectUtils.isEmpty(sysUser)) {
+ throw new ServiceException("绗�" + rowNum + "琛岋細璁″垝浜哄憳銆�" + importDto.getPlannerName() + "銆戜笉瀛樺湪");
+ }
+ }
+
+ ProductProcess productProcess = new ProductProcess();
+ BeanUtils.copyProperties(importDto, productProcess);
+ productProcess.setProductModelId(productModel.getId());
+ productProcess.setType(enumByInfo.getCode());
+ if (sysUser != null) {
+ productProcess.setPlannerId(sysUser.getUserId());
+ productProcess.setPlannerName(sysUser.getUserName());
+ }
+ productProcessList.add(productProcess);
}
saveOrUpdateBatch(productProcessList);
@@ -140,12 +212,34 @@
}
}
+ /**
+ * 鏍¢獙璁″垝浜哄憳鏄惁瀛樺湪
+ *
+ * @param plannerId 璁″垝浜哄憳ID
+ * @param plannerName 璁″垝浜哄憳濮撳悕
+ * @param rowNum 琛屽彿
+ */
+ private void validatePlanner(Long plannerId, String plannerName, Integer rowNum) {
+ String prefix = rowNum != null ? "绗�" + rowNum + "琛岋細" : "";
+ if (plannerId != null) {
+ if (sysUserMapper.selectUserById(plannerId) == null) {
+ throw new ServiceException(prefix + "璁″垝浜哄憳ID銆�" + plannerId + "銆戜笉瀛樺湪");
+ }
+ } else if (ObjectUtils.isNotEmpty(plannerName)) {
+ if (sysUserMapper.selectUserByNickName(plannerName) == null) {
+ throw new ServiceException(prefix + "璁″垝浜哄憳濮撳悕銆�" + plannerName + "銆戜笉瀛樺湪");
+ }
+ }
+ }
+
@Override
@Transactional(rollbackFor = Exception.class)
public void batchDelete(List<Integer> ids) {
// 鏌ヨ鏄惁鐢熶骇涓凡缁忓紩鐢ㄤ簡杩欎簺宸ュ簭
- List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getProcessId, ids));
- List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids));
+ List<ProcessRouteItem> processRouteItems = processRouteItemMapper
+ .selectList(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getProcessId, ids));
+ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(
+ Wrappers.<ProductProcessRouteItem>lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids));
if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)) {
throw new ServiceException("璇ュ伐搴忓凡缁忚浣跨敤锛屾棤娉曞垹闄�");
}
--
Gitblit v1.9.3