严智鑫
2024-06-14 6977fb42d5067f6c938ef3de559a6ad19b542a0b
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
package com.mes.temperingglass.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.mes.bigstorage.entity.BigStorageCage;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
import com.mes.bigstorage.mapper.BigStorageCageMapper;
import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
import com.mes.glassinfo.mapper.GlassInfoMapper;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
 
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Slf4j
@Service
public class TemperingGlassInfoServiceImpl extends ServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService {
 
    @Resource
    private BigStorageCageDetailsMapper bigStorageCageDetailsMapper;
    @Resource
    private BigStorageCageMapper bigStorageCageMapper;
 
    @Override
    public void addOutTask(List<TemperingGlassInfo> temperingGlassInfoList) {
        double carWidth=5000;
        double gap=50;
        //写入任务到任务表
        for (TemperingGlassInfo temperingGlassInfo:temperingGlassInfoList
        ) {
            log.info("1、当出片车宽度大于玻璃宽度时");
            if((carWidth-temperingGlassInfo.getWidth())>0){
                carWidth-=temperingGlassInfo.getWidth()+gap;
                log.info("2、添加钢化小片表信息到任务表");
                temperingGlassInfo.setState(-1);
                baseMapper.updateById(temperingGlassInfo);
                log.info("3、修改钢化小片表任务状态");
                BigStorageCageOutTask bigStorageCageOutTask =new BigStorageCageOutTask();
                bigStorageCageOutTask.setId(temperingGlassInfo.getId());
            }else{
                break;
            }
        }
    }
 
    //调度
    @Override
    public void schedulingTask(){
        QueryWrapper<BigStorageCageDetails> detailsWrapper1 = Wrappers.query();
        detailsWrapper1.select("tempering_layout_id", "count(distinct slot)")
                .groupBy("tempering_layout_id");
        List<Map<String, Object>> temperingLayoutIdList = bigStorageCageDetailsMapper.selectMaps(detailsWrapper1);
 
        boolean key=false;
        for (Map<String, Object> row : temperingLayoutIdList) {
            for (Map.Entry<String, Object> entry : row.entrySet()) {
                String temperingId = entry.getKey();
                int temperingNo = Integer.parseInt(entry.getValue().toString());
                if(temperingNo>8){
                    QueryWrapper<BigStorageCageDetails> detailsWrapper2 = Wrappers.query();
                    detailsWrapper2.select("tempering_layout_id", "slot")
                            .select("max(tempering_feed_sequence) as max_sequence", "min(tempering_feed_sequence) as min_sequence")
                            .groupBy("tempering_layout_id", "slot")
                            .orderByAsc("tempering_layout_id")
                            .orderByDesc("min_sequence");
 
                    List<Map<String, Object>> result = bigStorageCageDetailsMapper.selectMaps(detailsWrapper2);
                    for (Map<String, Object> rows : result) {
                        // 获取每行的值
                        Object temperingLayoutId = rows.get("tempering_layout_id");
                        int slot = Integer.parseInt(rows.get("slot").toString());
                        int maxSequence = Integer.parseInt(rows.get("max_sequence").toString());
                        int minSequence = Integer.parseInt(rows.get("min_sequence").toString());
 
                        LambdaQueryWrapper<BigStorageCage> bigStorageCageWrapper=new LambdaQueryWrapper<>();
                        bigStorageCageWrapper.eq(BigStorageCage::getSlot,slot);
                        BigStorageCage bigStorageCage=bigStorageCageMapper.selectOne(bigStorageCageWrapper);
                        Integer remainWidth=5000-bigStorageCage.getRemainWidth();
 
                        BigStorageCage bigStorageCages=bigStorageCageMapper.selectJoinOne(BigStorageCage.class, new MPJLambdaWrapper<BigStorageCage>()
                                .selectAll(BigStorageCage.class)
                                .leftJoin(BigStorageCageDetails.class, on -> on
                                        .eq(BigStorageCage::getDeviceId, BigStorageCageDetails::getDeviceId)
                                        .eq(BigStorageCage::getSlot, BigStorageCageDetails::getSlot))
                                .gt(BigStorageCage::getRemainWidth,remainWidth)
                                .eq(BigStorageCageDetails::getTemperingLayoutId,temperingLayoutId)
                                .eq(BigStorageCageDetails::getTemperingFeedSequence,minSequence-1)
                        );
 
                        if(bigStorageCages.getSlot()!=null){
                            LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper=new LambdaQueryWrapper<>();
                            bigStorageCageDetailsWrapper
                                    .eq(BigStorageCageDetails::getSlot,slot)
                                    .orderByDesc(BigStorageCageDetails::getTemperingFeedSequence);
                            List<BigStorageCageDetails> bigStorageCageDetailsList=bigStorageCageDetailsMapper.selectList(bigStorageCageDetailsWrapper);
                            for (BigStorageCageDetails bigStorageCageDetails:bigStorageCageDetailsList
                                 ) {
                                BigStorageCageOutTask bigStorageCageOutTask=new BigStorageCageOutTask();
                                bigStorageCageOutTask.setTaskState(-3);
                                bigStorageCageOutTask.setStartSlot(slot);
                                bigStorageCageOutTask.setEndSlot(bigStorageCages.getSlot());
                            }
                            return;
                        }
                    }
                }
            }
        }
    }
}