gongchunyi
昨天 5b334f63a33646b57a428c647bad9894cd3f3068
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
package com.ruoyi.production.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.production.dto.ProcessRouteItemDto;
import com.ruoyi.production.mapper.ProcessRouteItemMapper;
import com.ruoyi.production.mapper.ProcessRouteItemParamMapper;
import com.ruoyi.production.pojo.ProcessRouteItem;
import com.ruoyi.production.pojo.ProcessRouteItemParam;
import com.ruoyi.production.service.ProcessRouteItemService;
import com.ruoyi.production.service.ProductMaterialSkuService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.List;
 
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class ProcessRouteItemServiceImpl extends ServiceImpl<ProcessRouteItemMapper, ProcessRouteItem> implements ProcessRouteItemService {
 
    @Autowired
    private  ProcessRouteItemMapper processRouteItemMapper;
 
    @Autowired
    private ProcessRouteItemParamMapper processRouteItemParamMapper;
 
    @Autowired
    private ProductMaterialSkuService productMaterialSkuService;
 
    @Override
    public List<ProcessRouteItemDto> listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) {
        return processRouteItemMapper.listProcessRouteItemDto( processRouteItemDto);
    }
 
    //排序
    @Override
    public int sort(ProcessRouteItem processRouteItem) {
        //查询被改动的这条数据
        ProcessRouteItem oldProcessRouteItem = processRouteItemMapper.selectById(processRouteItem.getId());
        //查询该工艺路线的所有工序并按照顺序排序
        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery()
                .eq(ProcessRouteItem::getRouteId, oldProcessRouteItem.getRouteId())
                .orderByAsc(ProcessRouteItem::getDragSort));
        // 获取目标位置(移动到第几个之后)
        Integer targetPosition = processRouteItem.getDragSort();
        if (targetPosition != null && targetPosition >= 0) {
            // 移动元素到新的位置
            processRouteItems.remove(oldProcessRouteItem);
            processRouteItems.add(targetPosition-1, oldProcessRouteItem);
            // 更新所有受影响的排序字段
            for (int i = 0; i < processRouteItems.size(); i++) {
                ProcessRouteItem item = processRouteItems.get(i);
                if (!item.getId().equals(oldProcessRouteItem.getId())) {
                    // 检查是否需要更新排序值
                    if (item.getDragSort() != i+1) {
                        item.setDragSort(i+1);
                        processRouteItemMapper.updateById(item);
                    }
                } else {
                    // 更新原记录的新排序位置
                    oldProcessRouteItem.setDragSort(targetPosition);
                    processRouteItemMapper.updateById(oldProcessRouteItem);
                }
            }
            return 1;
        }
        return 0;
    }
 
    @Override
    public String batchDelete(Long id) {
        // 查询要删除的数据
        ProcessRouteItem deleteProcessRouteItem = processRouteItemMapper.selectById(id);
        if (deleteProcessRouteItem == null) {
            return "删除失败,未找到对应数据";
        }
        Long routeId = deleteProcessRouteItem.getRouteId();
        // 删除指定数据
        processRouteItemMapper.deleteById(id);
        //  删除对应的参数列表
        processRouteItemParamMapper.delete(new LambdaQueryWrapper<ProcessRouteItemParam>().eq(ProcessRouteItemParam::getRouteItemId,id));
 
        // 查询该工艺路线的所有工序并按照顺序排序
        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery()
                .eq(ProcessRouteItem::getRouteId, routeId)
                .orderByAsc(ProcessRouteItem::getDragSort));
        // 重新设置排序值,使序号连续
        for (int i = 0; i < processRouteItems.size(); i++) {
            ProcessRouteItem item = processRouteItems.get(i);
            if (!item.getDragSort().equals(i+1)) {
                item.setDragSort(i+1);
                processRouteItemMapper.updateById(item);
            }
        }
        return "删除成功";
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean saveOrUpdateProcess(ProcessRouteItem processRouteItem) {
        if (processRouteItem == null) {
            throw new ServiceException("数据不能为空");
        }
        if (processRouteItem.getProductModelId() != null) {
            Object product = productMaterialSkuService.getById(processRouteItem.getProductModelId());
            if (product == null) {
                throw new ServiceException("操作失败:关联的产品(ID:" + processRouteItem.getProductModelId() + ")不存在");
            }
        } else {
            throw new ServiceException("产品ID不能为空");
        }
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        processRouteItem.setTenantId(tenantId);
 
        boolean result;
        if (processRouteItem.getId() == null) {
            Long maxSort = processRouteItemMapper.selectCount(Wrappers.<ProcessRouteItem>lambdaQuery().eq(ProcessRouteItem::getRouteId, processRouteItem.getRouteId()));
            processRouteItem.setDragSort((int) (maxSort + 1));
 
            result = this.save(processRouteItem);
            processRouteItemParamMapper.insertFromProcessTemplate(processRouteItem.getId(), processRouteItem.getProcessId(), tenantId);
        } else {
            result = this.updateById(processRouteItem);
        }
 
        return result;
    }
}