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<PartWorkingHourMapper, PartWorkingHour>{
|
|
@Autowired
|
private PartWorkingHourMapper partWorkingHourMapper;
|
@Autowired
|
private WorkstationMapper workstationMapper;
|
@Autowired
|
private OssBuilder ossBuilder;
|
|
@Transactional(readOnly=true)
|
public IPage<PartWorkingHourVO> listPage(IPage<PartWorkingHourVO> workstationVOIPage, String partNo, String workstationName, LocalDate startDate, LocalDate endDate) {
|
|
List<PartWorkingHourVO> workstationVOS = this.partWorkingHourMapper.listPage(workstationVOIPage, partNo, workstationName, startDate, endDate);
|
|
return workstationVOIPage.setRecords(workstationVOS);
|
}
|
|
|
@Transactional(readOnly=true)
|
public List<PartWorkingHourVO> listVOByIds(List<Long> ids) {
|
return partWorkingHourMapper.listVOByIds(ids);
|
}
|
|
/**
|
* 导出一条数据
|
* @param id
|
* @return
|
*/
|
@Transactional(readOnly=true)
|
public BladeFile export(long id) {
|
//QueryWrapper<PartWorkingProcess> 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;
|
}
|
}
|