李林
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
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
package com.chinaztt.mes.production.service.impl;
 
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.chinaztt.mes.basic.entity.Workstation;
import com.chinaztt.mes.basic.mapper.WorkstationMapper;
import com.chinaztt.mes.production.dto.OperationTaskDTO;
import com.chinaztt.mes.production.dto.PersonBoardDTO;
import com.chinaztt.mes.production.dto.WorkstationDTO;
import com.chinaztt.mes.production.entity.JoinPersonHandyman;
import com.chinaztt.mes.production.entity.PersonBoard;
import com.chinaztt.mes.production.mapper.HandymanTableMapper;
import com.chinaztt.mes.production.mapper.JoinPersonHandymanMapper;
import com.chinaztt.mes.production.mapper.OperationTaskMapper;
import com.chinaztt.mes.production.mapper.PersonBoardMapper;
import com.chinaztt.mes.production.service.PersonBoardService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * 人员上机
 *
 * @author cxf
 * @date 2020-11-04 15:36:55
 */
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class PersonBoardServiceImpl extends ServiceImpl<PersonBoardMapper, PersonBoard> implements PersonBoardService {
    private WorkstationMapper workstationMapper;
    private OperationTaskMapper operationTaskMapper;
    private HandymanTableMapper handymanTableMapper;
    private JoinPersonHandymanMapper joinPersonHandymanMapper;
 
    @Override
    public JSONObject selectByWorkstationId(Long workstationId) {
        JSONObject jsonObject = new JSONObject();
        // 1.查上机人员
        jsonObject.putOpt("personBoardList", baseMapper.selectDtoByParam(null, workstationId, null));
        // 2.查杂工
        jsonObject.putOpt("handymanTableList", handymanTableMapper.selectByWorkstationId(workstationId));
        return jsonObject;
    }
 
    @Override
    public boolean deleteByIds(List<Long> ids) {
        ids.forEach(id -> {
            // 删除要判断一下,是否已经登记了杂工
            if (CollectionUtil.isNotEmpty(joinPersonHandymanMapper.selectList(Wrappers.<JoinPersonHandyman>query().lambda().eq(JoinPersonHandyman::getPersonBoardId, id)))) {
                throw new RuntimeException("请先删除对应登记杂工再删除上机人员:" + baseMapper.selectDtoById(id).getStaffName());
            }
        });
        return SqlHelper.retBool(baseMapper.deleteBatchIds(ids));
    }
 
    @Override
    public void checkRepeatWork(PersonBoard personBoard) {
        List<PersonBoardDTO> result = baseMapper.selectDtoByParam(personBoard.getId(), personBoard.getWorkstationId(), personBoard.getStaffId());
        if (CollectionUtil.isNotEmpty(result)) {
            throw new RuntimeException("上班人员重复:" + result.get(0).getStaffName());
        }
        if (personBoard.getWorkTime() == null) {
            personBoard.setWorkTime(LocalDateTime.now());
        }
    }
 
    @Override
    public boolean closingByIds(List<Long> ids) {
        PersonBoard personBoard = new PersonBoard();
        personBoard.setClosingTime(LocalDateTime.now());
        personBoard.setStatus("02closing");
        return SqlHelper.retBool(baseMapper.update(personBoard, Wrappers.<PersonBoard>query().lambda().in(PersonBoard::getId, ids)));
    }
 
    @Override
    public PersonBoardDTO getDtoById(Long id) {
        PersonBoardDTO personBoardDTO = baseMapper.selectDtoById(id);
        if (personBoardDTO == null) {
            throw new RuntimeException("人员上机记录不存在");
        }
        return personBoardDTO;
    }
 
    @Override
    public List<WorkstationDTO> workstationList() {
        List<Workstation> workstations = workstationMapper.selectList(null);
        List<WorkstationDTO> list = new ArrayList<>();
        if (CollectionUtil.isNotEmpty(workstations)) {
            for (Workstation ws : workstations) {
                WorkstationDTO dto = new WorkstationDTO();
                dto.setId(ws.getId());
                dto.setName(ws.getName());
                dto.setNumber(ws.getWorkstationNo());
 
                List<PersonBoardDTO> staffList = baseMapper.selectDtoByParam(null, ws.getId(), null);
                dto.setStaffCount(staffList == null ? 0 : staffList.size());
 
                List<OperationTaskDTO> taskList = operationTaskMapper.getListByWorkstationId(ws.getId());
                dto.setTaskList(taskList);
 
                list.add(dto);
            }
        }
        return list;
    }
 
    @Override
    public PersonBoardDTO updateDutyTimeById(PersonBoardDTO personBoardDTO) {
        baseMapper.updateById(personBoardDTO);
        return baseMapper.getPersonDtoById(personBoardDTO.getId());
    }
 
    @Override
    public List<Long> saveList(List<PersonBoard> personBoardList) {
        List<Long> ids = new ArrayList<Long>();
        for (PersonBoard personBoard : personBoardList) {
            baseMapper.insert(personBoard);
            ids.add(personBoard.getId());
        }
        return ids;
    }
 
 
    @Override
    public String checkPersonHaveToWork(List<PersonBoard> personBoardList) {
        String msg = "";
        for (PersonBoard personBoard : personBoardList) {
            List<PersonBoardDTO> list = baseMapper.checkPersonHaveToWork(personBoard);
            if (CollectionUtil.isNotEmpty(list)) {
                for (PersonBoardDTO personBoardDTO : list) {
                    msg += personBoardDTO.getStaffName() + ":" + personBoardDTO.getNowDutyDate() + "/" + personBoardDTO.getWorkstationName() + "已出勤,";
                }
            }
        }
        return msg;
    }
 
    @Override
    public List<Long> batchSave(List<PersonBoard> personBoardList) {
        List<PersonBoard> boards = new ArrayList<>();
        // 找出工作站
        Workstation workstation = workstationMapper.selectById(personBoardList.get(0).getWorkstationId());
        // 找出该工作站的工作重心关联的所有工作站
        List<Workstation> workstationList = workstationMapper.selectList(Wrappers.<Workstation>query().lambda().eq(Workstation::getWorkCenter, workstation.getWorkCenter()));
 
        for (Workstation station : workstationList) {
            // 循环生成所有工作站人员上机记录
            for (PersonBoard personBoard : personBoardList) {
                PersonBoard newBoard = new PersonBoard();
                BeanUtils.copyProperties(personBoard, newBoard);
                newBoard.setWorkstationId(station.getId());
                newBoard.setDutyRecordId(station.getDutyRecordId());
                int count = this.count(Wrappers.<PersonBoard>lambdaQuery()
                        .eq(PersonBoard::getDutyRecordId, newBoard.getDutyRecordId())
                        .eq(PersonBoard::getStaffId, newBoard.getStaffId())
                        .eq(PersonBoard::getWorkstationId, newBoard.getWorkstationId()));
                if (count == 0) {
                    boards.add(newBoard);
                }
            }
        }
        this.saveBatch(boards);
        return boards.stream().map(PersonBoard::getId).collect(Collectors.toList());
    }
}