李林
2023-10-07 658d4927d468c47208fd012d9128b09249c07eff
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
package com.chinaztt.mes.production.service.impl;
 
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chinaztt.mes.production.dto.ArtificialInformationDTO;
import com.chinaztt.mes.production.dto.HandymanTypeDTO;
import com.chinaztt.mes.production.entity.ArtificialInformation;
import com.chinaztt.mes.production.entity.DutyRecord;
import com.chinaztt.mes.production.mapper.ArtificialInformationMapper;
import com.chinaztt.mes.production.mapper.DutyRecordMapper;
import com.chinaztt.mes.production.mapper.HandymanTypeMapper;
import com.chinaztt.mes.production.service.ArtificialInformationService;
import com.chinaztt.ztt.common.core.util.R;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
/**
 * 杂工明细
 *
 * @author cxf
 * @date 2021-01-21 13:22:22
 */
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class ArtificialInformationServiceImpl extends ServiceImpl<ArtificialInformationMapper, ArtificialInformation> implements ArtificialInformationService {
    private HandymanTypeMapper handymanTypeMapper;
 
    @Override
    public List<Long> saveList(List<ArtificialInformation> artificialInformationList) {
        List<Long> ids = new ArrayList<Long>();
        for (ArtificialInformation artificialInformation : artificialInformationList) {
            baseMapper.insert(artificialInformation);
            ids.add(artificialInformation.getId());
        }
        return ids;
    }
 
    @Override
    public List<ArtificialInformationDTO> getArtificialInformationByDutyRecordId(List<Long> dutyRecordIdList) {
        List<ArtificialInformationDTO> resultList = new ArrayList<ArtificialInformationDTO>();
        List<ArtificialInformationDTO> list = baseMapper.getArtificialInformationByDutyRecordId(dutyRecordIdList);
        if (CollectionUtil.isNotEmpty(list)) {
            Long id = 0L;
            // 按人工类型分组
            Map<Long, List<ArtificialInformationDTO>> map = list.stream().collect(Collectors.groupingBy(ArtificialInformationDTO::getHandymanTypeId, LinkedHashMap::new, Collectors.toList()));
            for (Map.Entry<Long, List<ArtificialInformationDTO>> entry : map.entrySet()) {
                List<ArtificialInformationDTO> children = entry.getValue();
                if (CollectionUtil.isNotEmpty(children)) {
                    ArtificialInformationDTO artificialInformationDTO = new ArtificialInformationDTO();
                    id = id - 1L;
                    artificialInformationDTO.setId(id);
                    artificialInformationDTO.setHandymanName(children.get(0).getHandymanName());
                    artificialInformationDTO.setHandymanTypeId(children.get(0).getHandymanTypeId());
                    artificialInformationDTO.setChildren(children);
                    resultList.add(artificialInformationDTO);
                    // 增加序号index
                    for (int i = 0; i < children.size(); i++) {
                        children.get(i).setIndex(i + 1);
                    }
                }
            }
        }
        return resultList;
    }
 
    @Override
    public List<ArtificialInformationDTO> getComputationArtificialInformation(ArtificialInformation artificialInformation) {
        return baseMapper.getComputationArtificialInformation(artificialInformation);
    }
 
    @Override
    public List<ArtificialInformationDTO> getComputationArtificialInformationByList(List<Long> dutyRecordIdList, Long handymanTypeId) {
        return baseMapper.getComputationArtificialInformationByList(dutyRecordIdList,handymanTypeId);
    }
 
    @Override
    public List<HandymanTypeDTO> getHandymanTypeByDutyRecordId(List<Long> dutyRecordIdList) {
        return handymanTypeMapper.getHandymanTypeByDutyRecordId(dutyRecordIdList);
    }
 
    @Override
    public String checkPersonDutyTimeById(ArtificialInformation artificialInformation) {
        String msg = "";
        ArtificialInformationDTO originalArtificialInformation = baseMapper.selectDtoById(artificialInformation.getId());
        BigDecimal dutyTime = originalArtificialInformation.getDutyTime();
        // 校验个人工时是否超过当前班次的时间
        BigDecimal totalWorkingHours = baseMapper.selectTotalWorkTime(originalArtificialInformation);
        if (artificialInformation.getWorkingHours() != null) {
            totalWorkingHours = totalWorkingHours.add(artificialInformation.getWorkingHours());
        }
        if (totalWorkingHours.compareTo(dutyTime) == 1) {
            msg += originalArtificialInformation.getStaffName() + "工时超过当前班次时间:" + totalWorkingHours.stripTrailingZeros().toPlainString() + ",";
        }
        // 当日个人工时是否超过12小时
        BigDecimal totalDayWorkingHours = baseMapper.selectTotalDayWorkTime(originalArtificialInformation);
        if (artificialInformation.getWorkingHours() != null) {
            totalDayWorkingHours = totalDayWorkingHours.add(artificialInformation.getWorkingHours());
        }
        if (totalDayWorkingHours.compareTo(ComputationServiceImpl.TWELVE) == 1) {
            msg += originalArtificialInformation.getStaffName() + "今日工时超过12小时:" + totalDayWorkingHours.stripTrailingZeros().toPlainString() + ",";
        }
        return msg;
    }
 
    @Override
    public String checkPersonDutyTime(List<ArtificialInformation> artificialInformationList) {
        String msg = "";
        if (CollectionUtil.isNotEmpty(artificialInformationList)) {
            for (ArtificialInformation information : artificialInformationList) {
                msg += checkPersonDutyTimeById(information);
            }
        }
        return msg;
    }
}