buhuazhen
4 天以前 cf3482e6a4d40713cc09d107f11092c8db2e245a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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.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;
import com.ruoyi.production.mapper.ProductProcessMapper;
import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
import com.ruoyi.production.pojo.ProcessRouteItem;
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 {
    @Autowired
    private ProductProcessMapper productProcessMapper;
    @Autowired
    private ProcessRouteItemMapper processRouteItemMapper;
    @Autowired
    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
    @Autowired
    private DeviceLedgerMapper deviceLedgerMapper;
 
    @Autowired
    private SysUserMapper userMapper;
 
    @Override
    public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto 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);
        productProcess.setUserIds(idStr);
        boolean save = productProcessMapper.insert(productProcess) > 0;
        if (save && ObjectUtils.isNull(productProcessDto.getNo())) {
            // 根据id生成no字段:GX + 8位数字(不足8位前面补0)
            String no = "GX" + String.format("%08d", productProcess.getId());
            productProcess.setNo(no);
 
            productProcessMapper.updateById(productProcess);
            return AjaxResult.success();
        }
        return AjaxResult.success();
    }
 
    @Override
    public AjaxResult importData(MultipartFile file) {
        try {
            ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class);
            List<ProductProcess> productProcessList = util.importExcel(file.getInputStream());
            if (CollectionUtils.isEmpty(productProcessList)) {
                return AjaxResult.warn("模板错误或导入数据为空");
            }
            productProcessList.forEach(productProcess -> {
                if (ObjectUtils.isEmpty(productProcess)) {
                    throw new RuntimeException("使用模板进行导入");
                }
                if (ObjectUtils.isEmpty(productProcess.getName())) {
                    throw new RuntimeException("工序名称不能为空");
                }
                if (ObjectUtils.isEmpty(productProcess.getDeviceName())) {
                    throw new RuntimeException("工序机台不能为空");
                }
            });
            // 通过机台名称查询机台信息
            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) {
            e.printStackTrace();
            return AjaxResult.error(e.getMessage());
        }
    }
 
    @Override
    public String 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));
        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 "";
    }
}