buhuazhen
2026-05-12 15999f1d20063dec73abeeea435d6e0d5a55c491
src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -1,12 +1,14 @@
package com.ruoyi.production.service.impl;
import cn.hutool.core.util.StrUtil;
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.Customer;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.ProductProcessDto;
import com.ruoyi.production.mapper.ProcessRouteItemMapper;
@@ -16,13 +18,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.SysUser;
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.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService {
@@ -32,16 +39,36 @@
    private ProcessRouteItemMapper processRouteItemMapper;
    @Autowired
    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
    @Autowired
    private DeviceLedgerMapper deviceLedgerMapper;
    @Autowired
    private SysUserMapper userMapper;
    @Override
    public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
        return productProcessMapper.listPage(page, productProcessDto);
        IPage<ProductProcessDto> productProcessDtoIPage = productProcessMapper.listPage(page, productProcessDto);
        productProcessDtoIPage.getRecords().forEach(item -> {
            if (ObjectUtils.isNotEmpty(item.getUserIds())) {
                List<Long> userIds = Arrays.stream(item.getUserIds().split(","))
                        .filter(s -> !s.trim().isEmpty() && !"null".equals(s))
                        .map(Long::parseLong)
                        .collect(Collectors.toList());
                item.setIds(userIds);
                if (!userIds.isEmpty()) {
                    List<SysUser> sysUsers = userMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, userIds));
                    item.setUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
                }
            }
        });
        return productProcessDtoIPage;
    }
    @Override
    public AjaxResult add(ProductProcessDto productProcessDto) {
        String idStr = String.join(",", productProcessDto.getUserIds());
        ProductProcess productProcess = new ProductProcess();
        BeanUtils.copyProperties(productProcessDto,productProcess);
        BeanUtils.copyProperties(productProcessDto, productProcess);
        productProcess.setUserIds(idStr);
        boolean save = productProcessMapper.insert(productProcess) > 0;
        if (save && ObjectUtils.isNull(productProcessDto.getNo())) {
            // 根据id生成no字段:GX + 8位数字(不足8位前面补0)
@@ -59,7 +86,7 @@
        try {
            ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class);
            List<ProductProcess> productProcessList = util.importExcel(file.getInputStream());
            if(CollectionUtils.isEmpty(productProcessList)){
            if (CollectionUtils.isEmpty(productProcessList)) {
                return AjaxResult.warn("模板错误或导入数据为空");
            }
            productProcessList.forEach(productProcess -> {
@@ -69,10 +96,31 @@
                if (ObjectUtils.isEmpty(productProcess.getName())) {
                    throw new RuntimeException("工序名称不能为空");
                }
                if (ObjectUtils.isEmpty(productProcess.getDeviceName())) {
                    throw new RuntimeException("工序机台不能为空");
                }
            });
            this.saveOrUpdateBatch(productProcessList);
            // 通过机台名称查询机台信息
            List<String> deviceNames = productProcessList.stream().map(ProductProcess::getDeviceName).collect(Collectors.toList());
            List<DeviceLedger> deviceLedgerList = deviceLedgerMapper.selectList(Wrappers.<DeviceLedger>lambdaQuery().in(DeviceLedger::getDeviceName, deviceNames));
            if (CollectionUtils.isEmpty(deviceLedgerList)) {
                throw new RuntimeException("未能查询到该机台信息,请检查机台名称是否正确");
            }
            Map<String, DeviceLedger> deviceNameMap = deviceLedgerList.stream().collect(Collectors.toMap(DeviceLedger::getDeviceName, deviceLedger -> deviceLedger));
            productProcessList.forEach(productProcess -> {
                DeviceLedger deviceLedger = deviceNameMap.get(productProcess.getDeviceName());
                productProcess.setDeviceLeaderId(deviceLedger.getId());
                this.save(productProcess);
                if (StrUtil.isEmpty(productProcess.getNo())) {
                    String no = "GX" + String.format("%08d", productProcess.getId());
                    productProcess.setNo(no);
                    productProcessMapper.updateById(productProcess);
                }
            });
            return AjaxResult.success(true);
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error(e.getMessage());
        }
@@ -83,10 +131,22 @@
        //查询是否生产中已经引用了这些工序
        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)){
        if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)) {
            throw new RuntimeException("该工序已经被使用,无法删除");
        }
        productProcessMapper.deleteBatchIds(ids);
        return null;
    }
    @Override
    public String updateProcess(ProductProcessDto productProcess) {
        if (ObjectUtils.isEmpty(productProcess.getIds())) {
            throw new RuntimeException("报工用户不能为空");
        }
        productProcess.setUserIds(productProcess.getIds().stream()
                .map(String::valueOf)
                .collect(Collectors.joining(",")));
        productProcessMapper.updateById(productProcess);
        return "";
    }
}