yuan
4 小时以前 2ade8a95ed3a9a870a620369bda58a35d37f0508
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
153
154
package com.ruoyi.production.service.impl;
 
import com.alibaba.fastjson2.JSON;
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.StringUtils;
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 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.Collections;
import java.util.List;
 
@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;
 
    @Override
    public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
        return productProcessMapper.listPage(page, productProcessDto);
    }
 
    @Override
    public AjaxResult add(ProductProcessDto productProcessDto) {
        ProductProcess productProcess = new ProductProcess();
        BeanUtils.copyProperties(productProcessDto,productProcess);
        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("工序名称不能为空");
                }
            });
            this.saveOrUpdateBatch(productProcessList);
            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 AjaxResult bindDevices(Long processId, List<Long> deviceIds) {
        ProductProcess productProcess = productProcessMapper.selectById(processId);
        if (productProcess == null) {
            return AjaxResult.error("工序不存在");
        }
        String deviceIdsJson = productProcess.getDeviceIds();
        // 获取已有的设备ID列表
        List<Long> existingDeviceIds = Collections.emptyList();
        if (StringUtils.isNotEmpty(deviceIdsJson)) {
            existingDeviceIds = JSON.parseArray(deviceIdsJson, Long.class);
        }
        // 合并设备ID(去重)
        List<Long> mergedDeviceIds = new ArrayList<>(existingDeviceIds);
        for (Long deviceId : deviceIds) {
            if (!mergedDeviceIds.contains(deviceId)) {
                mergedDeviceIds.add(deviceId);
            }
        }
        deviceIdsJson = JSON.toJSONString(mergedDeviceIds);
        productProcess.setDeviceIds(deviceIdsJson);
        productProcessMapper.updateById(productProcess);
        return AjaxResult.success();
    }
 
    @Override
    public AjaxResult unbindDevice(Long processId, Long deviceId) {
        ProductProcess productProcess = productProcessMapper.selectById(processId);
        if (productProcess == null) {
            return AjaxResult.error("工序不存在");
        }
        if (productProcess.getDeviceIds() == null || productProcess.getDeviceIds().isEmpty()) {
            return AjaxResult.success();
        }
        List<Long> existingDeviceIds = JSON.parseArray(productProcess.getDeviceIds(), Long.class);
        existingDeviceIds.remove(deviceId);
        String deviceIdsJson = JSON.toJSONString(existingDeviceIds);
        productProcess.setDeviceIds(deviceIdsJson);
        productProcessMapper.updateById(productProcess);
        return AjaxResult.success();
    }
 
    @Override
    public List<DeviceLedger> getBindDevices(Long processId) {
        ProductProcess productProcess = productProcessMapper.selectById(processId);
        if (productProcess == null || productProcess.getDeviceIds() == null) {
            return Collections.emptyList();
        }
        List<Long> deviceIdList = JSON.parseArray(productProcess.getDeviceIds(), Long.class);
        if (CollectionUtils.isEmpty(deviceIdList)) {
            return Collections.emptyList();
        }
        return deviceLedgerMapper.selectBatchIds(deviceIdList);
    }
}