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 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 ids) { ids.forEach(id -> { // 删除要判断一下,是否已经登记了杂工 if (CollectionUtil.isNotEmpty(joinPersonHandymanMapper.selectList(Wrappers.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 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 ids) { PersonBoard personBoard = new PersonBoard(); personBoard.setClosingTime(LocalDateTime.now()); personBoard.setStatus("02closing"); return SqlHelper.retBool(baseMapper.update(personBoard, Wrappers.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 workstationList() { List workstations = workstationMapper.selectList(null); List 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 staffList = baseMapper.selectDtoByParam(null, ws.getId(), null); dto.setStaffCount(staffList == null ? 0 : staffList.size()); List 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 saveList(List personBoardList) { List ids = new ArrayList(); for (PersonBoard personBoard : personBoardList) { baseMapper.insert(personBoard); ids.add(personBoard.getId()); } return ids; } @Override public String checkPersonHaveToWork(List personBoardList) { String msg = ""; for (PersonBoard personBoard : personBoardList) { List list = baseMapper.checkPersonHaveToWork(personBoard); if (CollectionUtil.isNotEmpty(list)) { for (PersonBoardDTO personBoardDTO : list) { msg += personBoardDTO.getStaffName() + ":" + personBoardDTO.getNowDutyDate() + "/" + personBoardDTO.getWorkstationName() + "已出勤,"; } } } return msg; } @Override public List batchSave(List personBoardList) { List boards = new ArrayList<>(); // 找出工作站 Workstation workstation = workstationMapper.selectById(personBoardList.get(0).getWorkstationId()); // 找出该工作站的工作重心关联的所有工作站 List workstationList = workstationMapper.selectList(Wrappers.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.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()); } }