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 implements ArtificialInformationService { private HandymanTypeMapper handymanTypeMapper; @Override public List saveList(List artificialInformationList) { List ids = new ArrayList(); for (ArtificialInformation artificialInformation : artificialInformationList) { baseMapper.insert(artificialInformation); ids.add(artificialInformation.getId()); } return ids; } @Override public List getArtificialInformationByDutyRecordId(List dutyRecordIdList) { List resultList = new ArrayList(); List list = baseMapper.getArtificialInformationByDutyRecordId(dutyRecordIdList); if (CollectionUtil.isNotEmpty(list)) { Long id = 0L; // 按人工类型分组 Map> map = list.stream().collect(Collectors.groupingBy(ArtificialInformationDTO::getHandymanTypeId, LinkedHashMap::new, Collectors.toList())); for (Map.Entry> entry : map.entrySet()) { List 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 getComputationArtificialInformation(ArtificialInformation artificialInformation) { return baseMapper.getComputationArtificialInformation(artificialInformation); } @Override public List getComputationArtificialInformationByList(List dutyRecordIdList, Long handymanTypeId) { return baseMapper.getComputationArtificialInformationByList(dutyRecordIdList,handymanTypeId); } @Override public List getHandymanTypeByDutyRecordId(List 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 artificialInformationList) { String msg = ""; if (CollectionUtil.isNotEmpty(artificialInformationList)) { for (ArtificialInformation information : artificialInformationList) { msg += checkPersonDutyTimeById(information); } } return msg; } }