Lius
2024-08-23 7c7463d2f5012c27ac50f1d2ac39fa09616fc813
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
155
156
157
158
159
160
161
162
package org.jeecg.modules.screen.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.mdc.dto.MdcEfficiencyDto;
import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoService;
import org.jeecg.modules.mdcJc.entity.MdcProductDayschedule;
import org.jeecg.modules.mdcJc.service.IMdcProductDayScheduleService;
import org.jeecg.modules.screen.dto.*;
import org.jeecg.modules.screen.mapper.MdcLargeScreenMapper;
import org.jeecg.modules.screen.service.MdcLargeScreenService;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @author Lius
 * @date 2024/8/20 11:36
 */
@Service
public class MdcLargeScreenServiceImpl implements MdcLargeScreenService {
 
    @Resource
    private IMdcProductDayScheduleService mdcProductDayScheduleService;
 
    @Resource
    private MdcLargeScreenMapper mdcLargeScreenMapper;
 
    private final String yesterday = LocalDate.now().plusDays(-1).toString().replaceAll("-", "");
 
    private final String today = LocalDate.now().toString();
 
    @Resource
    private IMdcProductionService mdcProductionService;
 
 
    /**
     * 昨日概况(产品合格率 设备利用率 计划完成率)
     *
     * @return
     */
    @Override
    public YesterdayOverviewDto yesterdayOverview() {
        YesterdayOverviewDto yesterdayOverviewDto = new YesterdayOverviewDto();
        MdcProductDayschedule mdcProductDayschedule = mdcProductDayScheduleService.findYesterdayData();
        if (mdcProductDayschedule != null) {
            // 产品合格率
            yesterdayOverviewDto.setPassRate(new BigDecimal(mdcProductDayschedule.getQualifiedCount()).divide(new BigDecimal(mdcProductDayschedule.getCompletionCount()), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
            // 计划完成率
            yesterdayOverviewDto.setPlanCompleteRate(new BigDecimal(mdcProductDayschedule.getCompletionCount()).divide(new BigDecimal(mdcProductDayschedule.getPlanCount()), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
        }
        // 设备利用率
//        String date = LocalDate.now().plusDays(-1).toString().replaceAll("-", "");
        BigDecimal equipmentCount = mdcLargeScreenMapper.findEquipmentCount(yesterday);
        BigDecimal processCount = mdcLargeScreenMapper.findYesterdayProcessCount(yesterday);
        BigDecimal utilizationRate = BigDecimal.ZERO;
        if (equipmentCount != null && processCount != null) {
            utilizationRate = processCount.divide(new BigDecimal("86400").multiply(equipmentCount), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP);
        }
        yesterdayOverviewDto.setUtilizationRate(utilizationRate);
        return yesterdayOverviewDto;
    }
 
    /**
     * 今日生产进度
     *
     * @return
     */
    @Override
    public List<TodayProductionDto> todayProductionSchedule() {
        return mdcLargeScreenMapper.todayProductionSchedule(today);
    }
 
    /**
     * 今日产品合格率
     *
     * @return
     */
    @Override
    public List<TodayProductionPassRateDto> todayProductionPassRate() {
        List<MdcProductDayschedule> list = mdcLargeScreenMapper.todayProductionPassRate(today);
        List<TodayProductionPassRateDto> result = new ArrayList<>();
        if (list != null && !list.isEmpty()) {
            for (MdcProductDayschedule mdcProductDayschedule : list) {
                TodayProductionPassRateDto todayProductionPassRateDto = new TodayProductionPassRateDto();
                todayProductionPassRateDto.setProductionName(mdcProductDayschedule.getProductName());
                if (mdcProductDayschedule.getCompletionCount() != 0) {
                    todayProductionPassRateDto.setPassRate(new BigDecimal(mdcProductDayschedule.getQualifiedCount()).divide(new BigDecimal(mdcProductDayschedule.getCompletionCount()), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
                }
                result.add(todayProductionPassRateDto);
            }
        }
        return result;
    }
 
    /**
     * 今日班组完成量
     *
     * @return
     */
    @Override
    public List<ClazzCompletionCountDto> todayClazzCompletionCount() {
        return mdcLargeScreenMapper.todayClazzCompletionCount(today);
    }
 
    /**
     * 今日设备运行效率
     *
     * @return
     */
    @Override
    public List<EquipmentRateDto> todayEquipmentRate() {
        List<EquipmentRateDto> result = new ArrayList<>();
        List<MdcEfficiencyDto> mdcEfficiencyDtoList = mdcLargeScreenMapper.efficiencyList(yesterday);
        if (mdcEfficiencyDtoList != null && !mdcEfficiencyDtoList.isEmpty()) {
            for (MdcEfficiencyDto mdcEfficiencyDto : mdcEfficiencyDtoList) {
                EquipmentRateDto equipmentRateDto = new EquipmentRateDto();
                equipmentRateDto.setEquipmentId(mdcEfficiencyDto.getEquipmentId());
                equipmentRateDto.setEquipmentName(mdcEfficiencyDto.getEquipmentName());
                equipmentRateDto.setOpenRate(mdcEfficiencyDto.getOpenRate());
                equipmentRateDto.setUtilizationRate(mdcEfficiencyDto.getUtilizationRate());
                result.add(equipmentRateDto);
            }
        }
        return result;
    }
 
    /**
     * 月利用率
     *
     * @return
     */
    @Override
    public List<MonthEquipmentUtilizationRateDto> monthEquipmentUtilizationRate() {
        List<MonthEquipmentUtilizationRateDto> result = new ArrayList<>();
        String startDate = LocalDate.now().plusDays(-32).toString().replaceAll("-", "");
        List<MdcEfficiencyDto> mdcEfficiencyDtoList = mdcLargeScreenMapper.efficiency(startDate, yesterday);
        if (mdcEfficiencyDtoList != null && !mdcEfficiencyDtoList.isEmpty()) {
            for (MdcEfficiencyDto mdcEfficiencyDto : mdcEfficiencyDtoList) {
                MonthEquipmentUtilizationRateDto meu = new MonthEquipmentUtilizationRateDto();
                meu.setDate(new StringBuilder(mdcEfficiencyDto.getTheDate().substring(4, 8)).insert(2, "-").toString());
                BigDecimal equipmentCount = mdcLargeScreenMapper.findEquipmentCount(yesterday);
                meu.setUtilizationRate(mdcEfficiencyDto.getProcessLong().divide(equipmentCount.multiply(new BigDecimal("86400")), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
                result.add(meu);
            }
        }
        return result;
    }
 
    @Override
    public List<MdcProduction> productionList() {
        return mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgType, "3").eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder));
    }
 
}