package com.qianwen.smartman.modules.workinghour.service; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qianwen.core.excel.util.ExcelUtil; import com.qianwen.core.mp.base.BaseServiceImpl; import com.qianwen.core.oss.model.BladeFile; import com.qianwen.core.tool.utils.DateUtil; import com.qianwen.smartman.common.enums.DefaultWcsEnum; import com.qianwen.smartman.common.utils.DurationUtil; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import com.qianwen.smartman.modules.smis.entity.Workstation; import com.qianwen.smartman.modules.smis.mapper.WorkstationMapper; import com.qianwen.smartman.modules.workinghour.entity.PartWorkingHour; import com.qianwen.smartman.modules.workinghour.entity.PartWorkingProcess; import com.qianwen.smartman.modules.workinghour.excel.PartWorkingHourExcel; import com.qianwen.smartman.modules.workinghour.excel.PartWorkingProcessExcel; import com.qianwen.smartman.modules.workinghour.mapper.PartWorkingHourMapper; import com.qianwen.smartman.modules.workinghour.vo.PartWorkingHourVO; import cn.hutool.core.date.LocalDateTimeUtil; @Service public class PartWorkingHourService extends BaseServiceImpl{ @Autowired private PartWorkingHourMapper partWorkingHourMapper; @Autowired private WorkstationMapper workstationMapper; @Autowired private OssBuilder ossBuilder; @Transactional(readOnly=true) public IPage listPage(IPage workstationVOIPage, String partNo, String workstationName, LocalDate startDate, LocalDate endDate) { List workstationVOS = this.partWorkingHourMapper.listPage(workstationVOIPage, partNo, workstationName, startDate, endDate); return workstationVOIPage.setRecords(workstationVOS); } @Transactional(readOnly=true) public List listVOByIds(List ids) { return partWorkingHourMapper.listVOByIds(ids); } /** * 导出一条数据 * @param id * @return */ @Transactional(readOnly=true) public BladeFile export(long id) { //QueryWrapper wrapper = new QueryWrapper<>(); //wrapper.lambda().eq(PartWorkingProcess::getWorkinghourId, id); //xx工件在x机床 PartWorkingHour partWorkingHour = partWorkingHourMapper.selectById(id); Workstation ws = workstationMapper.selectById(partWorkingHour.getWorkstationId()); String fileName = String.format("零件%s的工时数据-%s.xlsx", partWorkingHour.getPartNo(), DateUtil.time()); PartWorkingHourExcel excelObj = new PartWorkingHourExcel(); excelObj.setPartNo(partWorkingHour.getPartNo()); excelObj.setAmount(partWorkingHour.getAmount()); LocalDateTime start = LocalDateTime.now(); LocalDateTime end; Duration duration; if(partWorkingHour.getClampingSecs() !=null) { end = start.plusSeconds(partWorkingHour.getClampingSecs()); duration = Duration.between(start, end); excelObj.setClampingSecs(DurationUtil.toChineseDuration(duration)); } final String format = "yyyy-MM-dd:hh:mm:ss"; if(partWorkingHour.getEndTime() !=null) { excelObj.setEndTime(LocalDateTimeUtil.format(partWorkingHour.getEndTime(),format)); } if(partWorkingHour.getFirstMeasureSecs() !=null) { end = start.plusSeconds(partWorkingHour.getFirstMeasureSecs()); duration = Duration.between(start, end); excelObj.setFirstMeasureSecs(DurationUtil.toChineseDuration(duration)); } if(partWorkingHour.getFirstWorkingSecs() !=null) { end = start.plusSeconds(partWorkingHour.getFirstWorkingSecs()); duration = Duration.between(start, end); excelObj.setFirstWorkingSecs(DurationUtil.toChineseDuration(duration)); } if(partWorkingHour.getLastRemoveSecs() !=null) { end = start.plusSeconds(partWorkingHour.getLastRemoveSecs()); duration = Duration.between(start, end); excelObj.setLastRemoveSecs(DurationUtil.toChineseDuration(duration)); } if(partWorkingHour.getOccupancySecs() !=null) { end = start.plusSeconds(partWorkingHour.getOccupancySecs()); duration = Duration.between(start, end); excelObj.setOccupancySecs(DurationUtil.toChineseDuration(duration)); } excelObj.setPartNo(partWorkingHour.getPartNo()); if(partWorkingHour.getPrepareSecs() !=null) { end = start.plusSeconds(partWorkingHour.getPrepareSecs()); duration = Duration.between(start, end); excelObj.setPrepareSecs(DurationUtil.toChineseDuration(duration)); } if(partWorkingHour.getProcessingSecs() !=null) { end = start.plusSeconds(partWorkingHour.getProcessingSecs()); duration = Duration.between(start, end); excelObj.setProcessingSecs(DurationUtil.toChineseDuration(duration)); } excelObj.setProcessNo(partWorkingHour.getProcessNo()); if(partWorkingHour.getSingleProcessSecs() !=null) { end = start.plusSeconds(partWorkingHour.getSingleProcessSecs()); duration = Duration.between(start, end); excelObj.setSingleProcessSecs(DurationUtil.toChineseDuration(duration)); } excelObj.setStartTime(LocalDateTimeUtil.format(partWorkingHour.getStartTime(),format)); excelObj.setWorkstationName(ws.getName()); excelObj.setVersion(partWorkingHour.getVersion()); MultipartFile multipartFile = ExcelUtil.exportToMultipartFile(fileName, "零件工时", Arrays.asList(excelObj), PartWorkingHourExcel.class); BladeFile bladeFile = this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile); return bladeFile; } }