From 92d8d06d8ae38c407715a5e9389691b446413e0a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 27 三月 2026 10:06:09 +0800
Subject: [PATCH] yys 1.生产逻辑修改
---
src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java | 5
src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java | 4
src/main/java/com/ruoyi/production/service/ProductStructureRecordService.java | 16 +
src/main/java/com/ruoyi/production/dto/ProductOrderDto.java | 4
src/main/java/com/ruoyi/production/service/ProductOrderService.java | 5
src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java | 2
src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java | 9
src/main/java/com/ruoyi/production/controller/ProductStructureController.java | 6
src/main/java/com/ruoyi/production/pojo/ProductStructureRecord.java | 61 +++
src/main/java/com/ruoyi/production/pojo/ProcessRoute.java | 11
src/main/java/com/ruoyi/dto/FileDto.java | 17 +
src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java | 3
src/main/resources/mapper/production/ProcessRouteMapper.xml | 14
src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java | 5
src/main/resources/mapper/basic/ProductModelMapper.xml | 7
src/main/resources/mapper/production/ProductOrderMapper.xml | 10
src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java | 9
src/main/resources/mapper/production/ProcessRouteItemMapper.xml | 3
src/main/java/com/ruoyi/production/service/ProcessRouteService.java | 2
src/main/java/com/ruoyi/basic/pojo/ProductModel.java | 3
src/main/java/com/ruoyi/production/controller/ProductProcessController.java | 21 +
src/main/java/com/ruoyi/basic/controller/ProductController.java | 3
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java | 111 +++++-
src/main/java/com/ruoyi/CodeGenerator.java | 2
src/main/java/com/ruoyi/common/enums/FileNameType.java | 4
src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java | 8
src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java | 26 +
src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java | 8
src/main/java/com/ruoyi/production/pojo/ProductOrder.java | 21 +
src/main/java/com/ruoyi/production/controller/ProductOrderController.java | 9
src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java | 4
src/main/java/com/ruoyi/production/controller/ProductStructureRecordController.java | 18 +
src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java | 31 +
src/main/java/com/ruoyi/production/dto/SysDeptAndUserDto.java | 58 +++
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java | 39 ++
src/main/resources/mapper/production/ProductWorkOrderMapper.xml | 2
src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java | 13
src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java | 4
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 2
src/main/java/com/ruoyi/production/controller/ProcessRouteController.java | 2
src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java | 71 ++++
src/main/java/com/ruoyi/basic/dto/ProductModelDto.java | 4
src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java | 11
src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java | 20 +
src/main/java/com/ruoyi/production/pojo/ProductProcess.java | 2
src/main/java/com/ruoyi/basic/service/IProductModelService.java | 3
src/main/resources/mapper/system/SysUserDeptMapper.xml | 3
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 18
src/main/resources/mapper/production/ProductBomMapper.xml | 7
src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java | 126 ++++---
src/main/java/com/ruoyi/production/mapper/ProductStructureRecordMapper.java | 18 +
src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java | 3
src/main/java/com/ruoyi/production/service/ProductStructureService.java | 1
src/main/resources/mapper/production/ProductStructureRecordMapper.xml | 19 +
src/main/resources/mapper/production/ProductStructureMapper.xml | 8
src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java | 11
src/main/resources/mapper/system/SysUserMapper.xml | 11
src/main/resources/mapper/system/SysDeptMapper.xml | 14
src/main/resources/mapper/production/ProductProcessRouteMapper.xml | 5
59 files changed, 796 insertions(+), 141 deletions(-)
diff --git a/src/main/java/com/ruoyi/CodeGenerator.java b/src/main/java/com/ruoyi/CodeGenerator.java
index f6c6d72..79f8799 100644
--- a/src/main/java/com/ruoyi/CodeGenerator.java
+++ b/src/main/java/com/ruoyi/CodeGenerator.java
@@ -23,7 +23,7 @@
public static String database_username = "root";
public static String database_password= "123456";
public static String author = "鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃";
- public static String model = "sales"; // 妯″潡
+ public static String model = "production"; // 妯″潡
public static String setParent = "com.ruoyi."+ model; // 鍖呰矾寰�
public static String tablePrefix = ""; // 璁剧疆杩囨护琛ㄥ墠缂�
public static void main(String[] args) {
diff --git a/src/main/java/com/ruoyi/basic/controller/ProductController.java b/src/main/java/com/ruoyi/basic/controller/ProductController.java
index 1bd2dbd..22dc714 100644
--- a/src/main/java/com/ruoyi/basic/controller/ProductController.java
+++ b/src/main/java/com/ruoyi/basic/controller/ProductController.java
@@ -26,6 +26,7 @@
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.util.List;
@RestController
@@ -76,7 +77,7 @@
*/
@Log(title = "浜у搧瑙勬牸鍨嬪彿", businessType = BusinessType.INSERT)
@PostMapping("/addOrEditProductModel")
- public AjaxResult addOrEditProductModel(@RequestBody ProductModelDto productModelDto) {
+ public AjaxResult addOrEditProductModel(@RequestBody ProductModelDto productModelDto) throws IOException {
return toAjax(productModelService.addOrEditProductModel(productModelDto));
}
diff --git a/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java b/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
index 8c1865f..91758cf 100644
--- a/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
+++ b/src/main/java/com/ruoyi/basic/dto/ProductAndModelDto.java
@@ -2,8 +2,11 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.sales.pojo.CommonFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+
+import java.util.List;
/**
* @author :yys
@@ -12,6 +15,12 @@
@Data
public class ProductAndModelDto {
+ private List<CommonFile> SalesLedgerFiles;
+
+ private Long routeId;
+
+ private String routeName;
+
/**
* 瑙勬牸id
*/
diff --git a/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java b/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
index ab4020e..67b25e1 100644
--- a/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
+++ b/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
@@ -2,6 +2,7 @@
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.sales.pojo.CommonFile;
import lombok.Data;
import java.util.List;
@@ -11,4 +12,7 @@
private List<ProductStructureDto> productStructureList;
private String productName;
+
+ private List<String> tempFileIds;
+ private List<CommonFile> SalesLedgerFiles;
}
diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
index 95669da..8b88d82 100644
--- a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -20,6 +20,9 @@
@TableId(type = IdType.AUTO)
private Long id;
+ @ApiModelProperty(value = "宸ヨ壓璺嚎id")
+ private Long routeId;
+
/**
* 鍏宠仈浜у搧id
*/
diff --git a/src/main/java/com/ruoyi/basic/service/IProductModelService.java b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
index f254612..1952821 100644
--- a/src/main/java/com/ruoyi/basic/service/IProductModelService.java
+++ b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
@@ -8,6 +8,7 @@
import com.ruoyi.basic.pojo.ProductModel;
import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.util.List;
@@ -19,7 +20,7 @@
*/
public interface IProductModelService extends IService<ProductModel> {
- int addOrEditProductModel(ProductModelDto productModelDto);
+ int addOrEditProductModel(ProductModelDto productModelDto) throws IOException;
int delProductModel(Long[] ids);
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index 26715f3..51437ec 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -16,14 +16,19 @@
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.other.mapper.TempFileMapper;
+import com.ruoyi.other.service.impl.TempFileServiceImpl;
+import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.AllArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.AbstractMap;
@@ -45,9 +50,12 @@
private final ProductMapper productMapper;
private final SalesLedgerProductMapper salesLedgerProductMapper;
private ProductModelMapper productModelMapper;
+ private final CommonFileServiceImpl commonFileService;
+
+ private final TempFileServiceImpl tempFileService;
@Override
- public int addOrEditProductModel(ProductModelDto productModelDto) {
+ public int addOrEditProductModel(ProductModelDto productModelDto) throws IOException {
if(StringUtils.isEmpty(productModelDto.getProductName())){
throw new RuntimeException("浜у搧鍚嶇О涓嶈兘涓虹┖");
}
@@ -63,16 +71,23 @@
ProductModel productModel = new ProductModel();
BeanUtils.copyProperties(productModelDto,productModel);
productModel.setProductId(product.getId());
- return productModelMapper.insert(productModel);
+ productModelMapper.insert(productModel);
+ if(CollectionUtils.isNotEmpty(productModelDto.getTempFileIds())){
+ commonFileService.migrateTempFilesToFormal(productModel.getId(), productModelDto.getTempFileIds());
+ }
+ return 1;
} else {
Product product1 = productMapper.selectById(productModelDto.getProductId());
if(product1 != null){
product1.setProductName(productModelDto.getProductName());
productMapper.updateById(product1);
}
-
+ if(CollectionUtils.isNotEmpty(productModelDto.getTempFileIds())){
+ commonFileService.migrateTempFilesToFormal(productModelDto.getId(), productModelDto.getTempFileIds());
+ }
return productModelMapper.updateById(productModelDto);
}
+
}
@@ -116,11 +131,6 @@
try {
ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class);
List<ProductModelExcelCopyDto> productModelList = productModelExcelUtil.importExcel(file.getInputStream());
-// List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>()
-// .isNull(Product::getParentId));
-// if(CollectionUtils.isEmpty(productList)) {
-// throw new RuntimeException("璇峰厛娣诲姞鐖剁骇浜у搧");
-// }
if(CollectionUtils.isNotEmpty(productModelList)){
// 2. 鎸変骇鍝佸悕绉�,鍥剧焊缂栧彿鍒嗙粍
Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber =
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
index cb737f3..2a2b9eb 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -12,14 +12,17 @@
import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.service.IProductService;
+import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.AllArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
+import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -32,6 +35,8 @@
private ProductMapper productMapper;
private ProductModelMapper productModelMapper;
+
+ private final CommonFileServiceImpl commonFileService;
@Override
public List<ProductTreeDto> selectProductList(ProductDto productDto) {
@@ -64,7 +69,11 @@
@Override
public AjaxResult listPage(Page page, ProductAndModelDto productDto) {
- return AjaxResult.success(productModelMapper.listPage(page, productDto));
+ IPage<ProductAndModelDto> productAndModelDtoIPage = productModelMapper.listPage(page, productDto);
+ productAndModelDtoIPage.getRecords().forEach(item -> {
+ item.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.PRODUCT_MODEL.getValue()));
+ });
+ return AjaxResult.success(productAndModelDtoIPage);
}
diff --git a/src/main/java/com/ruoyi/common/enums/FileNameType.java b/src/main/java/com/ruoyi/common/enums/FileNameType.java
index 7afc045..ea5acc1 100644
--- a/src/main/java/com/ruoyi/common/enums/FileNameType.java
+++ b/src/main/java/com/ruoyi/common/enums/FileNameType.java
@@ -14,7 +14,9 @@
SHIP(9),//鍙戣揣鍙拌处
INSPECTION_PRODUCTION_BEFORE(10),
INSPECTION_PRODUCTION_AFTER(11),
- INSPECTION(12);//宸℃ 鐢熶骇鍓�
+ INSPECTION(12),//宸℃ 鐢熶骇鍓�
+ PRODUCT_MODEL(13),// 浜у搧鍨嬪彿鍥剧焊
+ PRODUCT_ORDER(14); //鐢熶骇璁㈠崟
private final int value;
diff --git a/src/main/java/com/ruoyi/dto/FileDto.java b/src/main/java/com/ruoyi/dto/FileDto.java
new file mode 100644
index 0000000..376d1a2
--- /dev/null
+++ b/src/main/java/com/ruoyi/dto/FileDto.java
@@ -0,0 +1,17 @@
+package com.ruoyi.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.sales.pojo.CommonFile;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FileDto {
+
+ @TableField(exist = false)
+ private List<String> tempFileIds;
+ @TableField(exist = false)
+ private List<CommonFile> SalesLedgerFiles;
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
index 50ac4a8..9a96c3c 100644
--- a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
@@ -37,7 +37,7 @@
@ApiOperation("淇敼宸ヨ壓璺嚎")
@PutMapping ()
public R update(@RequestBody ProcessRoute processRoute) {
- return R.ok(processRouteService.updateById(processRoute));
+ return R.ok(processRouteService.updateProcessRoute(processRoute));
}
@ApiOperation("鍒犻櫎宸ヨ壓璺嚎")
@DeleteMapping("/{ids}")
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
index 9acc6b1..48f39e9 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -16,6 +16,7 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
@@ -32,6 +33,12 @@
@GetMapping("page")
public R page(ProductOrderDto productOrder, Page page) {
return R.ok(productOrderService.pageProductOrder(page, productOrder));
+ }
+
+ @ApiOperation("宸ュ崟寮�濮嬪拰鏆傚仠")
+ @PostMapping("/startOrPause")
+ public R startOrPause(@RequestBody ProductOrderDto productOrder) {
+ return R.ok(productOrderService.startOrPause(productOrder));
}
@ApiOperation("缁戝畾宸ヨ壓璺嚎")
@@ -89,7 +96,7 @@
@ApiOperation("鏂板鐢熶骇璁㈠崟")
@PostMapping("/addProductOrder")
- public R addProductOrder(@RequestBody ProductOrder productOrder) {
+ public R addProductOrder(@RequestBody ProductOrder productOrder) throws IOException {
return R.ok(productOrderService.addProductOrder(productOrder));
}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
index c25f2cc..d578d78 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
@@ -11,6 +11,7 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.oA.pojo.OaProject;
import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.dto.SysDeptAndUserDto;
import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.service.impl.ProductProcessServiceImpl;
import io.swagger.annotations.Api;
@@ -33,6 +34,26 @@
@Autowired
private ProductProcessServiceImpl productProcessService;
+ /**
+ * 鑾峰彇閮ㄩ棬鐢ㄦ埛鏍�
+ */
+ @GetMapping("/listDeptUserTree")
+ @ApiOperation("鑾峰彇閮ㄩ棬鐢ㄦ埛鏍�")
+ public AjaxResult listDeptUserTree() {
+ List<SysDeptAndUserDto> list = productProcessService.listDeptUserTree();
+ if (CollectionUtils.isEmpty(list)) {
+ return AjaxResult.warn("鏆傛棤鏁版嵁");
+ }
+ return AjaxResult.success(list);
+ }
+
+
+ /**
+ * 鍒嗛〉鏌ヨ宸ュ簭
+ * @param page
+ * @param productProcessDto
+ * @return
+ */
@GetMapping("/listPage")
@Log(title = "宸ュ簭-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
@ApiOperation("宸ュ簭-鍒嗛〉鏌ヨ")
diff --git a/src/main/java/com/ruoyi/production/controller/ProductStructureController.java b/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
index 89ead6d..c6bb3c4 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
@@ -26,6 +26,12 @@
private ProductStructureService productStructureService;
+ @ApiOperation("BOM瀛愰泦鍒楄〃(鏃犵埗绾�)")
+ @GetMapping("/listBybomIdIsParent/{bomId}")
+ public R listBybomIdIsParent(@PathVariable("bomId") Integer bomId){
+ return R.ok(productStructureService.listBybomIdIsParent(bomId));
+ }
+
@ApiOperation("鏂板BOM瀛愰泦")
@PostMapping()
public R addOrUpdate(@RequestBody ProductStructureDto productStructureDto){
diff --git a/src/main/java/com/ruoyi/production/controller/ProductStructureRecordController.java b/src/main/java/com/ruoyi/production/controller/ProductStructureRecordController.java
new file mode 100644
index 0000000..5aa17e4
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductStructureRecordController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟-鐗╂枡娓呭崟琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-26 10:34:23
+ */
+@RestController
+@RequestMapping("/productStructureRecord")
+public class ProductStructureRecordController {
+
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java b/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
index 62b9ad3..c1cdaf6 100644
--- a/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
@@ -17,4 +17,7 @@
private String drawingNumber;
private String bomNo;
+
+ @ApiModelProperty("宸ュ簭鍚嶇О")
+ private String processName;
}
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java b/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
index d30ba92..be36456 100644
--- a/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
@@ -28,6 +28,8 @@
private Long productId;
+ private String userPower;
+
private String model;
}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index 068f344..92eef03 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -1,6 +1,7 @@
package com.ruoyi.production.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.production.pojo.ProductOrder;
@@ -64,4 +65,7 @@
@ApiModelProperty(value = "搴撳瓨鏁伴噺")
@Excel(name = "搴撳瓨鏁伴噺")
private BigDecimal inventoryQuantity;
+
+ @ApiModelProperty(value = "鎿嶄綔 1-寮�濮� 2-鏆傚仠")
+ private Integer operation;
}
diff --git a/src/main/java/com/ruoyi/production/dto/SysDeptAndUserDto.java b/src/main/java/com/ruoyi/production/dto/SysDeptAndUserDto.java
new file mode 100644
index 0000000..7b9dbf4
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/SysDeptAndUserDto.java
@@ -0,0 +1,58 @@
+package com.ruoyi.production.dto;
+
+
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.domain.SysUser;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SysDeptAndUserDto{
+
+ /** 閮ㄩ棬ID */
+ private Long deptId;
+
+ /** 鐖堕儴闂↖D */
+ private Long parentId;
+
+ /** 绁栫骇鍒楄〃 */
+ private String ancestors;
+
+ /** 閮ㄩ棬鍚嶇О */
+ private String deptName;
+
+ /** 鏄剧ず椤哄簭 */
+ private Integer orderNum;
+
+ /** 璐熻矗浜� */
+ private String leader;
+
+ /** 鑱旂郴鐢佃瘽 */
+ private String phone;
+
+ /** 閭 */
+ private String email;
+
+ /** 閮ㄩ棬鐘舵��:0姝e父,1鍋滅敤 */
+ private String status;
+
+ /** 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� */
+ private String delFlag;
+
+ /** 鐖堕儴闂ㄥ悕绉� */
+ private String parentName;
+
+ /** 閮ㄩ棬缂栧彿 */
+ private String deptNick;
+
+ /** 鍛樺伐鏁伴噺 */
+ private Integer staffCount;
+
+ /** 閮ㄩ棬涓嬬殑鐢ㄦ埛鍒楄〃 */
+ private List<SysUser> userList;
+
+ /** 瀛愰儴闂ㄥ垪琛� */
+ private List<SysDeptAndUserDto> childrenList;
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
index 06ae748..832c2f7 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
@@ -6,6 +6,8 @@
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
/**
* <p>
* Mapper 鎺ュ彛
@@ -17,5 +19,5 @@
@Mapper
public interface ProductProcessRouteMapper extends BaseMapper<ProductProcessRoute> {
- ProcessRouteDto listMain(@Param("orderId") Long orderId);
+ List<ProcessRouteDto> listMain(@Param("orderId") Long orderId);
}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
index bd59242..c93b4b6 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
@@ -13,7 +13,13 @@
@Mapper
public interface ProductStructureMapper extends BaseMapper<ProductStructure> {
- List<ProductStructureDto> listBybomId(@Param("bomId") Integer bomId);
+ /**
+ * 鏌ヨBOM瀛愰泦
+ * @param bomId
+ * @param isParent 鏄惁闇�瑕佺埗绾� true 杩斿洖瀛愮骇 false 杩斿洖瀛愮埗绾�
+ * @return
+ */
+ List<ProductStructureDto> listBybomId(@Param("bomId") Integer bomId,@Param("isParent") boolean isParent);
List<ProductStructureDto> listBybomAndProcess(@Param("bomId") Integer bomId, @Param("processId") Long processId);
}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductStructureRecordMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductStructureRecordMapper.java
new file mode 100644
index 0000000..9d9ae23
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductStructureRecordMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.mapper;
+
+import com.ruoyi.production.pojo.ProductStructureRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟-鐗╂枡娓呭崟琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-26 10:34:23
+ */
+@Mapper
+public interface ProductStructureRecordMapper extends BaseMapper<ProductStructureRecord> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java b/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
index fe661b3..30f366e 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
@@ -8,11 +8,16 @@
import lombok.Data;
import java.time.LocalDateTime;
+import java.util.List;
@TableName("process_route")
@Data
@ApiModel(value = "processRoute", description = "宸ヨ壓璺嚎涓昏〃")
public class ProcessRoute {
+
+ @TableField(exist = false)
+ @ApiModelProperty(value = "宸ヨ壓璺嚎鏄庣粏")
+ private List<ProcessRouteItem> processRouteItems;
@ApiModelProperty(value = "搴忓彿")
private Long id;
@@ -23,6 +28,9 @@
@ApiModelProperty(value = "鎻忚堪")
private String description;
+
+ @ApiModelProperty(value = "鍒涘缓浜�")
+ private String createBy;
@ApiModelProperty(value = "绉熸埛ID")
@TableField(fill = FieldFill.INSERT)
@@ -39,6 +47,9 @@
@ApiModelProperty(value = "宸ヨ壓璺嚎缂栫爜")
private String processRouteCode;
+ @ApiModelProperty(value = "宸ヨ壓璺嚎鍚嶇О")
+ private String processRouteName;
+
@ApiModelProperty(value = "BOM鐨処D")
private Integer bomId;
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index 5286cd3..e6739fa 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.dto.FileDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
@@ -10,11 +11,21 @@
import java.io.Serializable;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.List;
@Data
@TableName("product_order")
-public class ProductOrder implements Serializable {
+public class ProductOrder extends FileDto implements Serializable {
+
+ @TableField(exist = false)
+ @ApiModelProperty(value = "鐢熶骇浠诲姟")
+ private List<ProductProcessRouteItem> processRouteItems;
+
+ @TableField(exist = false)
+ @ApiModelProperty(value = "鐗╂枡娓呭崟")
+ private List<ProductStructureRecord> productStructureRecords;
private static final long serialVersionUID = 1L;
@@ -101,6 +112,14 @@
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
+ @ApiModelProperty("浜や粯鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd",shape = JsonFormat.Shape.STRING,timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "浜や粯鏃ユ湡")
+ private LocalDate deliveryDate;
+ @ApiModelProperty("鐘舵�� 寰呯敓浜� 鐢熶骇涓� 宸插畬鎴�")
+ @Excel(name = "鐘舵��")
+ private String status;
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
index 1462c49..4c70400 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
@@ -42,6 +42,8 @@
@Excel(name = "澶囨敞")
private String remark;
+ @Excel(name = "鐢ㄦ埛鏉冮檺(,闅斿紑)")
+ private String userPower;
/**
* 宸ヨ祫瀹氶
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
index 5d7ab56..7a221bf 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
@@ -7,12 +7,15 @@
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
+import java.time.LocalDate;
import java.time.LocalDateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
/**
* <p>
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
index d84a7ce..6e585c0 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -1,9 +1,12 @@
package com.ruoyi.production.pojo;
import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@@ -12,6 +15,22 @@
@TableId(type = IdType.AUTO)
private Long id;
+
+ /**
+ * 璁″垝寮�濮嬫椂闂�
+ */
+ @ApiModelProperty(value = "璁″垝寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate planStartTime;
+
+ /**
+ * 璁″垝缁撴潫鏃堕棿
+ */
+ @ApiModelProperty(value = "璁″垝缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate planEndTime;
@ApiModelProperty(value = "鐢熶骇璁㈠崟id(product_order_id)")
private Long productOrderId;
@@ -39,6 +58,16 @@
private Integer dragSort;
@ApiModelProperty(value ="鏄惁璐ㄦ")
- private Boolean isQuality;
+ private Boolean isQuality = false;
+
+ /**
+ * 鐢ㄦ埛鏉冮檺
+ */
+ @ApiModelProperty(value = "鐢ㄦ埛鎶ュ伐鏉冮檺")
+ private String userPower;
+
+ @ApiModelProperty(value = "璁″垝鏁�")
+ private Integer planNum;
+
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductStructureRecord.java b/src/main/java/com/ruoyi/production/pojo/ProductStructureRecord.java
new file mode 100644
index 0000000..c585866
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductStructureRecord.java
@@ -0,0 +1,61 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟-鐗╂枡娓呭崟琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-26 10:34:23
+ */
+@Getter
+@Setter
+@TableName("product_structure_record")
+@ApiModel(value = "ProductStructureRecord瀵硅薄", description = "鐢熶骇璁㈠崟-鐗╂枡娓呭崟琛�")
+public class ProductStructureRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("鐖惰妭鐐笽D")
+ private Long parentId;
+
+ @ApiModelProperty("浜у搧id")
+ private Long productModelId;
+
+ @ApiModelProperty("鐢熶骇璁㈠崟id")
+ private Long productOrderId;
+
+ @ApiModelProperty("宸ュ簭id")
+ private Long processId;
+
+ @ApiModelProperty("鍗曚綅浜у嚭闇�瑕佹暟閲�")
+ private BigDecimal unitQuantity;
+
+ @ApiModelProperty("闇�姹傛暟閲�")
+ private BigDecimal demandedQuantity;
+
+ @ApiModelProperty("鍗曚綅")
+ private String unit;
+
+ @ApiModelProperty("绉熸埛id")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+ @ApiModelProperty("bom鐨刬d")
+ private Long bomId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
index 4efc694..c666bfe 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -65,9 +65,9 @@
private String workOrderNo;
/**
- * 鐘舵�� 1 寰呯‘璁� 2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�
+ * 鐘舵�� 1 寰呯‘璁� 2 寰呯敓浜� 3鐢熶骇涓�
*/
- @ApiModelProperty(value = "鐘舵�� 1 寰呯‘璁� 2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�")
+ @ApiModelProperty(value = "鐘舵�� 1 寰呯‘璁� 2 寰呯敓浜� 3宸插畬鎴�")
private Integer status;
/**
@@ -121,5 +121,14 @@
@ApiModelProperty(value = "瀹屾垚鏁伴噺")
private BigDecimal completeQuantity;
+ /**
+ * 鐢ㄦ埛鏉冮檺
+ */
+ @ApiModelProperty(value = "鐢ㄦ埛鎶ュ伐鏉冮檺")
+ private String userPower;
+
+ @ApiModelProperty(value = "璁″垝鏁�")
+ private Integer planNum;
+
}
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
index 6b408cf..6bb9723 100644
--- a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
+++ b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
@@ -16,4 +16,6 @@
Integer saveProcessRoute(ProcessRoute processRoute);
int batchDelete(List<Long> ids);
+
+ int updateProcessRoute(ProcessRoute processRoute);
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductOrderService.java b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
index 5a714a6..cc722d2 100644
--- a/src/main/java/com/ruoyi/production/service/ProductOrderService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -9,6 +9,7 @@
import com.ruoyi.production.pojo.ProcessRoute;
import com.ruoyi.production.pojo.ProductOrder;
+import java.io.IOException;
import java.util.List;
@@ -22,7 +23,9 @@
List<ProductStructureDto> listProcessBom(Long orderId);
- Boolean addProductOrder(ProductOrder productOrder);
+ Boolean addProductOrder(ProductOrder productOrder) throws IOException;
Boolean delete(Long[] id);
+
+ Object startOrPause(ProductOrderDto productOrder);
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
index 238aa1e..44d3ced 100644
--- a/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
@@ -4,6 +4,8 @@
import com.ruoyi.production.pojo.ProductProcessRoute;
import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
/**
* <p>
* 鏈嶅姟绫�
@@ -14,5 +16,5 @@
*/
public interface ProductProcessRouteService extends IService<ProductProcessRoute> {
- ProcessRouteDto listMain(Long orderId);
+ List<ProcessRouteDto> listMain(Long orderId);
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductStructureRecordService.java b/src/main/java/com/ruoyi/production/service/ProductStructureRecordService.java
new file mode 100644
index 0000000..a03737e
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductStructureRecordService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.production.service;
+
+import com.ruoyi.production.pojo.ProductStructureRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟-鐗╂枡娓呭崟琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-26 10:34:23
+ */
+public interface ProductStructureRecordService extends IService<ProductStructureRecord> {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductStructureService.java b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
index ebdddb1..2fa2056 100644
--- a/src/main/java/com/ruoyi/production/service/ProductStructureService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
@@ -14,4 +14,5 @@
List<ProductStructureDto> listBybomId(Integer bomId);
+ List<ProductStructureDto> listBybomIdIsParent(Integer bomId);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
index b3beded..7a6b54b 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -1,9 +1,12 @@
package com.ruoyi.production.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
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.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.production.dto.ProcessRouteDto;
import com.ruoyi.production.mapper.ProcessRouteItemMapper;
import com.ruoyi.production.mapper.ProcessRouteMapper;
@@ -47,12 +50,23 @@
@Override
public Integer saveProcessRoute(ProcessRoute processRoute) {
+ String nickName = SecurityUtils.getLoginUser().getNickName();
+ processRoute.setCreateBy(nickName);
this.save(processRoute);
- String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- String idStr = String.format("%06d", processRoute.getId());
- String newProductCode = "GYLX" + dateStr + idStr;
- // 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
- processRoute.setProcessRouteCode(newProductCode);
+ // 鏂板瀛愯〃鏁版嵁
+ if(CollectionUtils.isNotEmpty(processRoute.getProcessRouteItems())){
+ for (ProcessRouteItem processRouteItem : processRoute.getProcessRouteItems()) {
+ processRouteItem.setRouteId(processRoute.getId());
+ processRouteItemMapper.insert(processRouteItem);
+ }
+ }
+ if(StringUtils.isEmpty(processRoute.getProcessRouteCode())){
+ String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+ String idStr = String.format("%06d", processRoute.getId());
+ String newProductCode = "GYLX" + dateStr + idStr;
+ // 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
+ processRoute.setProcessRouteCode(newProductCode);
+ }
return processRouteMapper.updateById(processRoute);
}
@@ -60,11 +74,24 @@
public int batchDelete(List<Long> ids) {
//鍏堝垽鏂槸鍚﹀凡缁忓紩鐢ㄤ簡
List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids));
- if (productOrders.size()>0){
+ if (CollectionUtils.isNotEmpty(productOrders)){
throw new RuntimeException("璇ュ伐鑹鸿矾绾跨敓浜у凡寮曠敤锛屼笉鑳藉垹闄�");
}
//鍒犻櫎宸ヨ壓璺嚎璇︽儏
processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids));
return processRouteMapper.deleteBatchIds(ids);
}
+
+ @Override
+ public int updateProcessRoute(ProcessRoute processRoute) {
+ this.updateById(processRoute);
+ processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+ if(CollectionUtils.isNotEmpty(processRoute.getProcessRouteItems())){
+ for (ProcessRouteItem processRouteItem : processRoute.getProcessRouteItems()) {
+ processRouteItem.setRouteId(processRoute.getId());
+ processRouteItemMapper.insert(processRouteItem);
+ }
+ }
+ return 1;
+ }
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
index 2554b5e..982b0c2 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.pojo.Product;
@@ -97,6 +98,53 @@
return AjaxResult.error();
}
+ /**
+ * 閫掑綊淇濆瓨 BOM锛氬厛淇濆瓨鐖堕」 鈫� 淇濆瓨瀛愰」 鈫� 寤虹珛鍏崇郴 鈫� 閫掑綊瀛愰」鐨勫瓙椤�
+ * @param children 褰撳墠鐖堕」鐨勫瓙椤瑰垪琛�
+ * @return 淇濆瓨鍚庣殑鐖堕」浜у搧ID
+ */
+ private void saveBomRecursive(List<BomImportDto> children,ProductBom bom,ProductModel rootModel,Map<String, Long> processMap) {
+ // 1. 鑾峰彇children涓瓙椤逛骇鍝佺紪鍙蜂负绌虹殑鏁版嵁
+ List<BomImportDto> parentChildren = children
+ .stream()
+ .filter(child -> StringUtils.isEmpty(child.getChildCode()))
+ .collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(parentChildren)){
+ throw new ServiceException("璇烽�夋嫨鐖堕」浜у搧缂栧彿");
+ }
+ BomImportDto parentId = parentChildren.get(0); // 鐖剁骇鏁版嵁
+ ProductStructure rootNode = new ProductStructure();
+ rootNode.setBomId(bom.getId());
+ rootNode.setParentId(null); // 椤跺眰娌℃湁鐖惰妭鐐�
+ rootNode.setProductModelId(rootModel.getId());
+ rootNode.setUnitQuantity(BigDecimal.ONE);
+ rootNode.setUnit(rootModel.getUnit());
+ productStructureService.save(rootNode);
+
+ // 2. 閬嶅巻瀛愰」锛岄�愪釜澶勭悊
+ for (BomImportDto child : children) {
+ // 璺宠繃娌℃湁瀛愰」鐨勭埗椤�
+ if(StringUtils.isEmpty(child.getChildCode())){
+ continue;
+ }
+ // 鑾峰彇瀛愰」妯″瀷淇℃伅
+ ProductModel childModel = findModel(child.getChildName(), child.getChildSpec());
+
+ // 鎻掑叆缁撴瀯琛�
+ ProductStructure node = new ProductStructure();
+ node.setBomId(bom.getId());
+ node.setParentId(rootNode.getId()); // 鐖惰妭鐐笽D
+ node.setProductModelId(childModel.getId());
+ node.setUnitQuantity(child.getUnitQty());
+ node.setUnit(childModel.getUnit());
+ if (processMap.containsKey(child.getProcess())) {
+ node.setProcessId(processMap.get(child.getProcess()));
+ }
+ productStructureService.save(node);
+ }
+ }
+
+
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult uploadBom(MultipartFile file) {
@@ -120,67 +168,25 @@
handleProcess(list);
Map<String, Long> processMap = productProcessService.list().stream()
.collect(Collectors.toMap(ProductProcess::getName, ProductProcess::getId, (k1, k2) -> k1));
-
- // 鍒涘缓 BOM 鏁版嵁
- BomImportDto first = list.get(0);
- ProductModel rootModel = findModel(first.getParentName(), first.getParentSpec());
- ProductBom bom = new ProductBom();
- bom.setProductModelId(rootModel.getId());
- bom.setVersion("1.0");
- productBomMapper.insert(bom);
- bom.setBomNo("BM." + String.format("%05d", bom.getId()));
- productBomMapper.updateById(bom);
-
- // 璁板綍宸茬粡鎻掑叆缁撴瀯鐨勮妭鐐癸細Key = "鍚嶇О+瑙勬牸", Value = structure_id
- Map<String, Long> treePathMap = new HashMap<>();
-
- for (int i = 0; i < list.size(); i++) {
- BomImportDto dto = list.get(i);
- String parentKey = dto.getParentName() + "|" + dto.getParentSpec();
- String childKey = dto.getChildName() + "|" + dto.getChildSpec();
-
- //澶勭悊鏍硅妭鐐�,绗竴琛屼笖瀛愰」涓虹┖
- if (i == 0 && StringUtils.isBlank(dto.getChildName())) {
- ProductStructure rootNode = new ProductStructure();
- rootNode.setBomId(bom.getId());
- rootNode.setParentId(null); // 椤跺眰娌℃湁鐖惰妭鐐�
- rootNode.setProductModelId(rootModel.getId());
- rootNode.setUnitQuantity(BigDecimal.ONE);
- rootNode.setUnit(rootModel.getUnit());
- productStructureService.save(rootNode);
-
- treePathMap.put(parentKey, rootNode.getId());
- continue;
- }
-
- // 澶勭悊瀛愬眰绾ц妭鐐�
- // 鎵惧埌鐖惰妭鐐瑰湪鏁版嵁搴撻噷鐨� ID
- Long parentStructureId = treePathMap.get(parentKey);
- if (parentStructureId == null) {
- // 濡傛灉 Map 閲屾壘涓嶅埌锛岃鏄� Excel 椤哄簭涔变簡鎴栬�呮暟鎹湁璇�
- throw new ServiceException("瀵煎叆澶辫触: 鐖堕」[" + dto.getParentName() + "]蹇呴』鍦ㄥ叾瀛愰」涔嬪墠瀹氫箟");
- }
-
- // 鑾峰彇瀛愰」妯″瀷淇℃伅
- ProductModel childModel = findModel(dto.getChildName(), dto.getChildSpec());
-
- // 鎻掑叆缁撴瀯琛�
- ProductStructure node = new ProductStructure();
- node.setBomId(bom.getId());
- node.setParentId(parentStructureId); // 鐖惰妭鐐笽D
- node.setProductModelId(childModel.getId());
- node.setUnitQuantity(dto.getUnitQty());
- node.setUnit(childModel.getUnit());
- if (processMap.containsKey(dto.getProcess())) {
- node.setProcessId(processMap.get(dto.getProcess()));
- }
- productStructureService.save(node);
-
- // 鎶婂綋鍓嶅瓙椤硅褰曞埌 Map,浣滀负浠ュ悗鏇存繁灞傜骇鐨勭埗椤规煡鎵句緷鎹�
- // 鍚屼竴鐖堕」涓嬬殑鍚屽悕瀛愰」涓嶉渶瑕侀噸澶嶈褰�
- treePathMap.put(childKey, node.getId());
+ // 1. 鎸夌埗椤圭紪鐮佸垎缁�
+ Map<String, List<BomImportDto>> parentMap = list.stream()
+ .filter(bom -> StringUtils.isNotBlank(bom.getParentCode()))
+ .collect(Collectors.groupingBy(BomImportDto::getParentCode));
+ // 2. 閬嶅巻鎵�鏈夌埗椤癸紝閫掑綊淇濆瓨
+ for (Map.Entry<String, List<BomImportDto>> entry : parentMap.entrySet()) {
+ // 鍒涘缓 BOM 鏁版嵁
+ BomImportDto first = entry.getValue().get(0);
+ ProductModel rootModel = findModel(first.getParentName(), first.getParentSpec());
+ ProductBom bom = new ProductBom();
+ bom.setProductModelId(rootModel.getId());
+ bom.setVersion("1.0");
+ productBomMapper.insert(bom);
+ bom.setBomNo("BM." + String.format("%05d", bom.getId()));
+ productBomMapper.updateById(bom);
+ // 澶勭悊bom瀛愯〃鏁版嵁
+ List<BomImportDto> children = entry.getValue();
+ saveBomRecursive(children,bom,rootModel,processMap);
}
-
return AjaxResult.success("BOM瀵煎叆鎴愬姛");
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 6d46f7c..fe78782 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -3,11 +3,15 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.dto.ProductOrderDto;
import com.ruoyi.production.dto.ProductStructureDto;
@@ -16,14 +20,20 @@
import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.service.impl.StockInventoryServiceImpl;
+import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.File;
+import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -38,6 +48,9 @@
@Autowired
private ProductProcessRouteMapper productProcessRouteMapper;
+
+ @Autowired
+ private ProductStructureRecordMapper productStructureRecordMapper;
@Autowired
private ProcessRouteItemMapper processRouteItemMapper;
@@ -69,6 +82,9 @@
@Autowired
private StockInventoryServiceImpl stockInventoryService;
+ @Autowired
+ private CommonFileServiceImpl commonFileService;
+
@Override
public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
IPage<ProductOrderDto> productOrderDtoIPage = productOrderMapper.pageProductOrder(page, productOrder);
@@ -82,6 +98,9 @@
if(stockInventoryDtoIPage.getTotal() > 0){
productOrderDto.setInventoryQuantity(stockInventoryDtoIPage.getRecords().get(0).getQualitity());
}
+ // 闄勪欢
+ productOrderDto.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(productOrderDto.getId()
+ , FileNameType.PRODUCT_ORDER.getValue()));
});
return productOrderDtoIPage;
}
@@ -96,46 +115,58 @@
productProcessRoute.setProductOrderId(productOrder.getId());
productProcessRoute.setBomId(processRoute.getBomId());
productProcessRouteMapper.insert(productProcessRoute);
+ // 缁戝畾鐢熶骇bom娓呭崟
+ List<ProductStructureRecord> productStructureDtos = productOrder.getProductStructureRecords();
+ productStructureDtos.forEach(item ->{
+ item.setProductOrderId(productOrder.getId());
+ productStructureRecordMapper.insert(item);
+ });
//鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
- List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+ List<ProductProcessRouteItem> processRouteItems = productOrder.getProcessRouteItems();
// 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- for (ProcessRouteItem processRouteItem : processRouteItems) {
- ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
- productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
- productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+ for (ProductProcessRouteItem productProcessRouteItem : processRouteItems) {
+ productProcessRouteItem.setProductModelId(productOrder.getProductModelId());
productProcessRouteItem.setProductOrderId(productOrder.getId());
productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
- productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
if (insert > 0) {
// 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
- int sequenceNumber = 1; // 榛樿搴忓彿
- if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
- String lastNo = lastWorkOrder.getWorkOrderNo().toString();
- if (lastNo.startsWith(datePrefix)) {
- String seqStr = lastNo.substring(datePrefix.length());
- try {
- sequenceNumber = Integer.parseInt(seqStr) + 1;
- } catch (NumberFormatException e) {
- sequenceNumber = 1;
- }
- }
- }
- // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
- String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
+ String workOrderNoStr = getWorkOrderNoStr(lastWorkOrder, datePrefix); // 宸ュ崟鍙�
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
ProductOrder order = productOrderMapper.selectById(productOrder.getId());
productWorkOrder.setPlanQuantity(order.getQuantity());
productWorkOrder.setWorkOrderNo(workOrderNoStr);
+ productWorkOrder.setPlanStartTime(productProcessRouteItem.getPlanStartTime());
+ productWorkOrder.setPlanEndTime(productProcessRouteItem.getPlanEndTime());
productWorkOrder.setStatus(1);
+ productWorkOrder.setUserPower(productProcessRouteItem.getUserPower());
productWorkOrderMapper.insert(productWorkOrder);
}
}
return productOrderMapper.updateById(productOrder);
+ }
+
+ @NotNull
+ private static String getWorkOrderNoStr(ProductWorkOrder lastWorkOrder, String datePrefix) {
+ int sequenceNumber = 1; // 榛樿搴忓彿
+ if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+ String lastNo = lastWorkOrder.getWorkOrderNo();
+ if (lastNo.startsWith(datePrefix)) {
+ String seqStr = lastNo.substring(datePrefix.length());
+ try {
+ sequenceNumber = Integer.parseInt(seqStr) + 1;
+ } catch (NumberFormatException e) {
+ sequenceNumber = 1;
+ }
+ }
+ }
+ // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+ String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
+ return workOrderNoStr;
}
@Override
@@ -149,20 +180,24 @@
}
@Override
- public Boolean addProductOrder(ProductOrder productOrder) {
+ public Boolean addProductOrder(ProductOrder productOrder) throws IOException {
String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
productOrder.setNpsNo(string);
productOrder.setCompleteQuantity(BigDecimal.ZERO);
+ productOrder.setStatus("寰呯敓浜�");
this.save(productOrder);
if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
this.bindingRoute(productOrder);
+ }
+ if(CollectionUtils.isNotEmpty(productOrder.getTempFileIds())){
+ commonFileService.migrateTempFilesToFormal(productOrder.getId(), productOrder.getTempFileIds());
}
return true;
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean delete(Long[] ids) {
-
//鎵归噺鏌ヨproductOrder
List<ProductOrder> productOrders = productOrderMapper.selectList(
new LambdaQueryWrapper<ProductOrder>()
@@ -247,10 +282,42 @@
// 鎵归噺鍒犻櫎productOrder
productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
.in(ProductOrder::getId, ids));
+ // 鍒犻櫎闄勪欢
+ commonFileService.deleteByBusinessIds(Arrays.asList(ids), FileNameType.PRODUCT_ORDER.getValue());
+ // 鍒犻櫎鐢熶骇璁㈠崟-鐗╂枡娓呭崟
+ productStructureRecordMapper.delete(new LambdaQueryWrapper<ProductStructureRecord>()
+ .in(ProductStructureRecord::getProductOrderId, ids));
}
+
return true;
}
+ @Override
+ public Object startOrPause(ProductOrderDto item) {
+ ProductOrder productOrder = productOrderMapper.selectById(item.getId());
+ if(productOrder == null){
+ throw new ServiceException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
+ }
+ int i;
+ if(item.getOperation().equals(1)){
+ i = 2;
+ } else {
+ i = 1;
+ }
+ productOrder.setStatus(item.getOperation() == 1 ? "鐢熶骇涓�" : "寰呯敓浜�");
+ productOrderMapper.updateById(productOrder);
+ List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(new LambdaQueryWrapper<ProductWorkOrder>()
+ .eq(ProductWorkOrder::getProductOrderId, productOrder.getId()));
+ if(CollectionUtils.isNotEmpty(productWorkOrders)){
+
+ productWorkOrders.forEach(productWorkOrder -> {
+ productWorkOrder.setStatus(i);
+ productWorkOrderMapper.updateById(productWorkOrder);
+ });
+ }
+ return "鎿嶄綔鎴愬姛";
+ }
+
//鑾峰彇褰撳墠鐢熶骇璁㈠崟鍙�
public String getMaxOrderNoByDate(String datePrefix) {
QueryWrapper<ProductOrder> queryWrapper = new QueryWrapper<>();
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
index f5b2e92..ebcf896 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
@@ -8,6 +8,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.util.List;
+
/**
* <p>
* 鏈嶅姟瀹炵幇绫�
@@ -23,7 +25,7 @@
private ProductProcessRouteMapper productProcessRouteMapper;
@Override
- public ProcessRouteDto listMain(Long orderId) {
+ public List<ProcessRouteDto> listMain(Long orderId) {
return productProcessRouteMapper.listMain(orderId);
}
}
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 3be9086..4aa7cdb 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -9,6 +9,7 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.dto.SysDeptAndUserDto;
import com.ruoyi.production.mapper.ProcessRouteItemMapper;
import com.ruoyi.production.mapper.ProductProcessMapper;
import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
@@ -16,12 +17,18 @@
import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.pojo.ProductProcessRouteItem;
import com.ruoyi.production.service.ProductProcessService;
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysDeptMapper;
+import com.ruoyi.project.system.mapper.SysUserDeptMapper;
+import com.ruoyi.project.system.mapper.SysUserMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
+import java.util.ArrayList;
import java.util.List;
@Service
@@ -32,6 +39,13 @@
private ProcessRouteItemMapper processRouteItemMapper;
@Autowired
private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+
+ @Autowired
+ private SysDeptMapper sysDeptMapper;
+ @Autowired
+ private SysUserDeptMapper sysUserDeptMapper;
+ @Autowired
+ private SysUserMapper sysUserMapper;
@Override
public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
@@ -89,4 +103,61 @@
productProcessMapper.deleteBatchIds(ids);
return null;
}
+
+ public List<SysDeptAndUserDto> listDeptUserTree() {
+ return buildDeptUserTree();
+ }
+
+
+ /**
+ * 鏋勫缓瀹屾暣鐨勯儴闂�-鐢ㄦ埛鏍戝舰缁撴瀯
+ */
+ public List<SysDeptAndUserDto> buildDeptUserTree() {
+ // 1. 鏌ヨ鎵�鏈夋牴閮ㄩ棬锛坧arent_id = 0锛�
+ List<SysDeptAndUserDto> rootDeptList = sysDeptMapper.selectChildrenDeptByParentId(0L);
+
+ // 2. 閫掑綊鏋勫缓姣忎釜鏍归儴闂ㄧ殑瀛愯妭鐐癸紝骞舵寕杞界敤鎴�
+ for (SysDeptAndUserDto rootDept : rootDeptList) {
+ buildChildrenDept(rootDept);
+ loadDeptUser(rootDept);
+ }
+
+ return rootDeptList;
+ }
+
+ /**
+ * 閫掑綊鏋勫缓瀛愰儴闂�
+ */
+ private void buildChildrenDept(SysDeptAndUserDto parentDept) {
+ // 鏌ヨ褰撳墠閮ㄩ棬鐨勫瓙閮ㄩ棬
+ List<SysDeptAndUserDto> childrenDept = sysDeptMapper.selectChildrenDeptByParentId(parentDept.getDeptId());
+ if (childrenDept == null || childrenDept.isEmpty()) {
+ parentDept.setChildrenList(new ArrayList<>());
+ return;
+ }
+
+ // 涓烘瘡涓瓙閮ㄩ棬閫掑綊鏋勫缓涓嬬骇锛屽苟鎸傝浇鐢ㄦ埛
+ for (SysDeptAndUserDto childDept : childrenDept) {
+ buildChildrenDept(childDept);
+ loadDeptUser(childDept);
+ }
+
+ parentDept.setChildrenList(childrenDept);
+ }
+
+ /**
+ * 涓洪儴闂ㄥ姞杞藉叧鑱旂殑鐢ㄦ埛
+ */
+ private void loadDeptUser(SysDeptAndUserDto dept) {
+ // 鏌ヨ閮ㄩ棬鍏宠仈鐨勭敤鎴稩D
+ List<Long> userIdList = sysUserDeptMapper.selectUserIdByDeptId(dept.getDeptId());
+ if (userIdList == null || userIdList.isEmpty()) {
+ dept.setUserList(new ArrayList<>());
+ return;
+ }
+
+ // 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛淇℃伅
+ List<SysUser> userList = sysUserMapper.selectUserListByIds(userIdList);
+ dept.setUserList(userList);
+ }
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java
new file mode 100644
index 0000000..59f4b6f
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.production.service.impl;
+
+import com.ruoyi.production.pojo.ProductStructureRecord;
+import com.ruoyi.production.mapper.ProductStructureRecordMapper;
+import com.ruoyi.production.service.ProductStructureRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鐢熶骇璁㈠崟-鐗╂枡娓呭崟琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-26 10:34:23
+ */
+@Service
+public class ProductStructureRecordServiceImpl extends ServiceImpl<ProductStructureRecordMapper, ProductStructureRecord> implements ProductStructureRecordService {
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
index 381b642..703bbe4 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -129,9 +129,11 @@
}
+
+
@Override
public List<ProductStructureDto> listBybomId(Integer bomId) {
- List<ProductStructureDto> list = productStructureMapper.listBybomId(bomId);
+ List<ProductStructureDto> list = productStructureMapper.listBybomId(bomId,false);
Map<Long, ProductStructureDto> map = new HashMap<>();
for (ProductStructureDto node : list) {
@@ -154,4 +156,9 @@
return tree;
}
+ @Override
+ public List<ProductStructureDto> listBybomIdIsParent(Integer bomId) {
+ return productStructureMapper.listBybomId(bomId,true);
+ }
+
}
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 e24045c..301db75 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -97,6 +98,13 @@
if (productProcessRouteItem == null) {
throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
}
+ // 鑾峰彇璁㈠崟鐨勫凡瀹屾垚宸ュ崟
+ List<ProductWorkOrder> productWorkOrderList = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery()
+ .eq(ProductWorkOrder::getProductOrderId, productProcessRouteItem.getProductOrderId())
+ .eq(ProductWorkOrder::getStatus, 3));
+ if(CollectionUtils.isEmpty(productWorkOrderList)){
+ productWorkOrderList = new ArrayList<>();
+ }
//褰撳墠鍏蜂綋宸ュ簭
ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
//宸ヨ壓璺嚎涓綋鍓嶅伐搴忓搴旂殑浜у嚭瑙勬牸鍨嬪彿
@@ -150,7 +158,7 @@
ProductionProductInput productionProductInput = new ProductionProductInput();
productionProductInput.setProductModelId(productStructureDto.getProductModelId());
- productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
+ productionProductInput.setQuantity(dto.getQuantity());
productionProductInput.setProductMainId(productionProductMain.getId());
productionProductInputMapper.insert(productionProductInput);
stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId());
@@ -173,7 +181,7 @@
//瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
int inspectType = 1;
String process = productProcess.getName();//宸ュ簭
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+ if (productWorkOrderList.size() == productProcessRouteItems.size() - 1) {
//鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
inspectType = 2;
process = null;
@@ -214,21 +222,25 @@
productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
+ productWorkOrder.setStatus(2);
}
if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
+ productWorkOrder.setStatus(3);
}
productWorkOrderMapper.updateById(productWorkOrder);
//鐢熶骇璁㈠崟
ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
if (ObjectUtils.isNull(productOrder.getStartTime())) {
productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
+ productOrder.setStatus("鐢熶骇涓�");
}
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+ if (productWorkOrderList.size() == productProcessRouteItems.size() - 1) {
//濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
+ productOrder.setStatus("宸插畬鎴�");
}
}
productOrderMapper.updateById(productOrder);
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
index 942a700..6691511 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
@@ -2,6 +2,7 @@
import java.util.List;
+import com.ruoyi.production.dto.SysDeptAndUserDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.project.system.domain.SysDept;
@@ -125,4 +126,14 @@
* @return
*/
Long maxLevelDeptId(Long deptId);
+
+ /**
+ * 鏌ヨ鎵�鏈夋湁鏁堥儴闂紙鏈垹闄ゃ�佺姸鎬佹甯革級
+ */
+ List<SysDeptAndUserDto> selectAllDept();
+
+ /**
+ * 鏍规嵁閮ㄩ棬ID鏌ヨ瀛愰儴闂�
+ */
+ List<SysDeptAndUserDto> selectChildrenDeptByParentId(@Param("parentId") Long parentId);
}
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java
index d6bed98..7db2e41 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserDeptMapper.java
@@ -12,4 +12,9 @@
public interface SysUserDeptMapper extends BaseMapper<SysUserDept> {
List<SysUserDeptVo> userLoginFacotryList(@Param("userDeptVo") SysUserDeptVo userDeptVo);
+
+ /**
+ * 鏍规嵁閮ㄩ棬ID鏌ヨ鍏宠仈鐨勭敤鎴稩D鍒楄〃
+ */
+ List<Long> selectUserIdByDeptId(@Param("deptId") Long deptId);
}
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
index 5507b3f..c99371f 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -156,4 +156,9 @@
List<Long> getUserByRole(@Param("role") String role);
List<Long> getUserByPerms(@Param("perms") List<String> perms);
+
+ /**
+ * 鏍规嵁鐢ㄦ埛ID鍒楄〃鏌ヨ鐢ㄦ埛淇℃伅
+ */
+ List<SysUser> selectUserListByIds(@Param("userIds") List<Long> userIds);
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
index f3aac49..aa01361 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.sales.mapper.CommonFileMapper;
@@ -138,13 +139,6 @@
Path formalFilePath = formalDirPath.resolve(formalFilename);
try {
- // 鎵ц鏂囦欢杩佺Щ锛堜娇鐢ㄥ師瀛愭搷浣滅‘淇濆畨鍏ㄦ�э級
-// Files.move(
-// Paths.get(tempFile.getTempPath()),
-// formalFilePath,
-// StandardCopyOption.REPLACE_EXISTING,
-// StandardCopyOption.ATOMIC_MOVE
-// );
// 鍘熷瓙绉诲姩澶辫触锛屼娇鐢ㄥ鍒�+鍒犻櫎
Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING);
Files.deleteIfExists(Paths.get(tempFile.getTempPath()));
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index ade3d09..5f8a9a0 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -499,7 +499,7 @@
if (processRoute == null) {
return R.fail("璇峰厛璁剧疆宸ヨ壓璺嚎");
}
- List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId());
+ List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomId(processRoute.getBomId(),false);
if (productStructureDtos.isEmpty()) {
return R.fail("璇峰厛璁剧疆浜у搧缁撴瀯");
}
diff --git a/src/main/resources/mapper/basic/ProductModelMapper.xml b/src/main/resources/mapper/basic/ProductModelMapper.xml
index 9768e8f..89954e5 100644
--- a/src/main/resources/mapper/basic/ProductModelMapper.xml
+++ b/src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -113,9 +113,12 @@
pm.model as model,
pm.unit as unit,
pm.drawing_number as drawingNumber,
- pm.product_type as productType
+ pm.product_type as productType,
+ pr.id as routeId,
+ pr.process_route_name as routeName
from product_model pm
- left join product p on p.id = pm.product_id
+ left join product p on p.id = pm.product_id
+ left join process_route pr on pr.id = pm.route_id
<where>
<if test="req.productName != null and req.productName != ''">
and p.product_name like concat('%',#{req.productName},'%')
diff --git a/src/main/resources/mapper/production/ProcessRouteItemMapper.xml b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
index 7e43b07..ce5016d 100644
--- a/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
+++ b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
@@ -22,7 +22,8 @@
pm.model,
p.product_name,
pm.unit,
- pm.drawing_number
+ pm.drawing_number,
+ pp.user_power
from
process_route_item pri
left join product_model pm on pri.product_model_id = pm.id
diff --git a/src/main/resources/mapper/production/ProcessRouteMapper.xml b/src/main/resources/mapper/production/ProcessRouteMapper.xml
index 40a5b7f..e06ce32 100644
--- a/src/main/resources/mapper/production/ProcessRouteMapper.xml
+++ b/src/main/resources/mapper/production/ProcessRouteMapper.xml
@@ -13,8 +13,10 @@
</resultMap>
<select id="pageProcessRouteDto" resultType="com.ruoyi.production.dto.ProcessRouteDto">
- select ps.*, p.product_name,pm.product_id,pm.model,pb.bom_no,pm.drawing_number
+ select ps.*, p.product_name,pm.product_id,pm.model,pb.bom_no,pm.drawing_number,group_concat(pp.name) as processName
from process_route ps
+ left join process_route_item ppi on ps.id = ppi.route_id
+ left join product_process pp on ppi.process_id = pp.id
left join product_bom pb on ps.bom_id = pb.id
left join product_model pm on ps.product_model_id = pm.id
left join product p on pm.product_id = p.id
@@ -22,7 +24,17 @@
<if test="c.model != null and c.model != ''">
and pm.model like concat('%',#{c.model},'%')
</if>
+ <if test="c.processRouteCode != null and c.processRouteCode != ''">
+ and ps.process_route_code like concat('%',#{c.processRouteCode},'%')
+ </if>
+ <if test="c.processRouteName != null and c.processRouteName != ''">
+ and ps.process_route_name like concat('%',#{c.processRouteName},'%')
+ </if>
+ <if test="c.processName != null and c.processName != ''">
+ and pp.name like concat('%',#{c.processName},'%')
+ </if>
</where>
+ group by ps.id
order by ps.id asc
</select>
</mapper>
diff --git a/src/main/resources/mapper/production/ProductBomMapper.xml b/src/main/resources/mapper/production/ProductBomMapper.xml
index 0f2c27d..4bb8f1e 100644
--- a/src/main/resources/mapper/production/ProductBomMapper.xml
+++ b/src/main/resources/mapper/production/ProductBomMapper.xml
@@ -25,10 +25,13 @@
left join product p on pm.product_id = p.id)A
where 1=1
<if test="c.productModelName != null">
- and productModelName = #{c.productModelName}
+ and product_model_name = #{c.productModelName}
+ </if>
+ <if test="c.productModelId != null">
+ and product_model_id = #{c.productModelId}
</if>
<if test="c.productName != null">
- and productName = #{c.productName}
+ and product_name = #{c.productName}
</if>
<if test="c.bomNo != null">
and bom_no = #{c.bomNo}
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index ab4e290..0bf376b 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -77,23 +77,21 @@
ps.product_model_id,
ps.process_id,
ps.unit_quantity,
- ps.unit_quantity * po.quantity as demandedQuantity,
+ ps.demanded_quantity as demandedQuantity,
ps.unit,
p.product_name,
pm.drawing_number,
pp.name as process_name,
pm.product_id,
- pm.model,
- pb.bom_no
+ pm.model
from
- product_structure ps
+ product_structure_record ps
left join product_model pm on ps.product_model_id = pm.id
left join product p on pm.product_id = p.id
left join product_process pp on ps.process_id = pp.id
- left join product_bom pb on ps.bom_id = pb.id
left join product_process_route ppr on ps.bom_id = ppr.bom_id
left join product_order po on po.id = ppr.product_order_id
- where ppr.product_order_id = #{orderId}
+ where ps.product_order_id = #{orderId}
order by ps.id
</select>
diff --git a/src/main/resources/mapper/production/ProductProcessRouteMapper.xml b/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
index fe47270..5d0f63a 100644
--- a/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
+++ b/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
@@ -15,12 +15,15 @@
<result column="product_order_id" property="productOrderId"/>
</resultMap>
<select id="listMain" resultType="com.ruoyi.production.dto.ProcessRouteDto">
- select ppr.*, p.product_name, pm.product_id, pm.model, pb.bom_no,pm.drawing_number
+ select ppr.*, p.product_name, pm.product_id, pm.model, pb.bom_no,pm.drawing_number,pp.name as processName
from product_process_route ppr
+ left join product_process_route_item ppri on ppr.id = ppri.product_route_id
+ left join product_process pp on pp.id = ppri.process_id
left join product_bom pb on ppr.bom_id = pb.id
left join product_model pm on ppr.product_model_id = pm.id
left join product p on pm.product_id = p.id
where ppr.product_order_id = #{orderId}
+ group by ppri.id
</select>
</mapper>
diff --git a/src/main/resources/mapper/production/ProductStructureMapper.xml b/src/main/resources/mapper/production/ProductStructureMapper.xml
index aae9668..edabbfa 100644
--- a/src/main/resources/mapper/production/ProductStructureMapper.xml
+++ b/src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -26,6 +26,9 @@
left join product_bom pb on ps.bom_id = pb.id
left join product_process pp on ps.process_id = pp.id
where ps.bom_id = #{bomId}
+ <if test="isParent">
+ and ps.parent_id is not null
+ </if>
order by ps.id
</select>
<select id="listBybomAndProcess" resultType="com.ruoyi.production.dto.ProductStructureDto">
@@ -36,12 +39,11 @@
pm.model,
pm.drawing_number
from
- product_structure ps
+ product_structure_record ps
left join product_model pm on ps.product_model_id = pm.id
left join product p on pm.product_id = p.id
left join product_process pp on ps.process_id = pp.id
- where ps.bom_id = #{bomId}
- and ps.process_id=#{processId}
+ where ps.process_id=#{processId}
order by ps.id
</select>
</mapper>
diff --git a/src/main/resources/mapper/production/ProductStructureRecordMapper.xml b/src/main/resources/mapper/production/ProductStructureRecordMapper.xml
new file mode 100644
index 0000000..254518a
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductStructureRecordMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.production.mapper.ProductStructureRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductStructureRecord">
+ <id column="id" property="id" />
+ <result column="parent_id" property="parentId" />
+ <result column="product_model_id" property="productModelId" />
+ <result column="product_order_id" property="productOrderId" />
+ <result column="process_id" property="processId" />
+ <result column="unit_quantity" property="unitQuantity" />
+ <result column="demanded_quantity" property="demandedQuantity" />
+ <result column="unit" property="unit" />
+ <result column="tenant_id" property="tenantId" />
+ <result column="bom_id" property="bomId" />
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index b35349b..39c429a 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -39,7 +39,7 @@
LEFT JOIN product_process pp ON pp.id = ppri.process_id
LEFT JOIN product_model pm ON pm.id = ppri.product_model_id
LEFT JOIN product p ON p.id = pm.product_id
- where 1=1
+ where pwo.status != 1
<if test="c.workOrderNo != null and c.workOrderNo != ''">
and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
</if>
diff --git a/src/main/resources/mapper/system/SysDeptMapper.xml b/src/main/resources/mapper/system/SysDeptMapper.xml
index afc1130..d202f4b 100644
--- a/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -183,5 +183,19 @@
FROM DepartmentHierarchy
WHERE parent_id = 100;
</select>
+ <select id="selectAllDept" resultType="com.ruoyi.production.dto.SysDeptAndUserDto">
+ SELECT dept_id, parent_id, ancestors, dept_name, order_num, leader, phone, email,
+ status, del_flag, create_by, create_time, update_by, update_time, dept_nick
+ FROM sys_dept
+ WHERE del_flag = '0' AND status = '0'
+ ORDER BY order_num ASC
+ </select>
+ <select id="selectChildrenDeptByParentId" resultType="com.ruoyi.production.dto.SysDeptAndUserDto">
+ SELECT dept_id, parent_id, ancestors, dept_name, order_num, leader, phone, email,
+ status, del_flag, create_by, create_time, update_by, update_time, dept_nick
+ FROM sys_dept
+ WHERE parent_id = #{parentId} AND del_flag = '0' AND status = '0'
+ ORDER BY order_num ASC
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/system/SysUserDeptMapper.xml b/src/main/resources/mapper/system/SysUserDeptMapper.xml
index 7caa57e..8097988 100644
--- a/src/main/resources/mapper/system/SysUserDeptMapper.xml
+++ b/src/main/resources/mapper/system/SysUserDeptMapper.xml
@@ -24,4 +24,7 @@
</if>
</where>
</select>
+ <select id="selectUserIdByDeptId" resultType="java.lang.Long">
+ SELECT user_id FROM sys_user_dept WHERE dept_id = #{deptId}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index d837b7e..5a87de1 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -297,5 +297,16 @@
)
</if>
</select>
+ <select id="selectUserListByIds" resultType="com.ruoyi.project.system.domain.SysUser">
+ SELECT user_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar,
+ password, status, del_flag, login_ip, login_date, create_by, create_time,
+ update_by, update_time, remark, tenant_id
+ FROM sys_user
+ WHERE user_id IN
+ <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+ #{userId}
+ </foreach>
+ AND del_flag = '0' AND status = '0'
+ </select>
</mapper>
--
Gitblit v1.9.3