package com.aps.core.service.impl; import java.time.*; import java.util.Date; import java.util.List; import java.util.Map; import com.aps.common.core.utils.uuid.IdUtils; import com.aps.common.security.utils.SecurityUtils; import org.apache.commons.lang3.SystemUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aps.core.mapper.ApsPlateProcessStatMapper; import com.aps.core.domain.ApsPlateProcessStat; import com.aps.core.service.IApsPlateProcessStatService; import org.springframework.transaction.annotation.Transactional; import static java.util.stream.Collectors.groupingBy; /** * 钣金统计Service业务层处理 * * @author zhl * @date 2025-04-15 */ @Service public class ApsPlateProcessStatServiceImpl implements IApsPlateProcessStatService { @Autowired private ApsPlateProcessStatMapper apsPlateProcessStatMapper; /** * 查询钣金统计 * * @param id 钣金统计主键 * @return 钣金统计 */ @Override public ApsPlateProcessStat selectApsPlateProcessStatById(String id) { return apsPlateProcessStatMapper.selectApsPlateProcessStatById(id); } /** * 查询钣金统计列表 * * @param apsPlateProcessStat 钣金统计 * @return 钣金统计 */ @Override public List selectApsPlateProcessStatList(ApsPlateProcessStat apsPlateProcessStat) { return apsPlateProcessStatMapper.selectApsPlateProcessStatList(apsPlateProcessStat); } /** * 新增钣金统计 * * @param apsPlateProcessStat 钣金统计 * @return 结果 */ @Override public int insertApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat) { return apsPlateProcessStatMapper.insertApsPlateProcessStat(apsPlateProcessStat); } /** * 修改钣金统计 * * @param apsPlateProcessStat 钣金统计 * @return 结果 */ @Override public int updateApsPlateProcessStat(ApsPlateProcessStat apsPlateProcessStat) { return apsPlateProcessStatMapper.updateApsPlateProcessStat(apsPlateProcessStat); } /** * 批量删除钣金统计 * * @param ids 需要删除的钣金统计主键 * @return 结果 */ @Override public int deleteApsPlateProcessStatByIds(String[] ids) { return apsPlateProcessStatMapper.deleteApsPlateProcessStatByIds(ids); } /** * 删除钣金统计信息 * * @param id 钣金统计主键 * @return 结果 */ @Override public int deleteApsPlateProcessStatById(String id) { return apsPlateProcessStatMapper.deleteApsPlateProcessStatById(id); } /** * 保存钣金统计数据 */ @Transactional @Override public void savePlateProcessStat() { String batchNum = IdUtils.fastSimpleUUID(); List tempList = apsPlateProcessStatMapper.queryTempStat(); Map> groupByOrderNo = tempList.stream().collect(groupingBy(ApsPlateProcessStat::getWorkOrderNo)); for (Map.Entry> entry : groupByOrderNo.entrySet()) { List statPerOrder = entry.getValue(); /*num 为根据完工时间排序出的序号,按此排序,可保证是按完工时间倒叙排列*/ statPerOrder.sort((a, b)->a.getNum().compareTo(b.getNum())); ApsPlateProcessStat last=null; for (int i = 0; i 工单当前工序时,代表是未来的工序,才进行计划开工日 和计划完工日的计算*/ if( stat.getRouteProcessNumber().compareTo(stat.getCurrentProcessNumber())>0){ /*&计划开工日 和 计划完成日 ,同时大于当前日期时执行计算*/ LocalDateTime currentEndDay = transLocalDateTime(stat.getProcessPlanEndDay()); LocalDateTime currentStartDay = transLocalDateTime(stat.getProcessPlanStartDay()); if(currentEndDay.isAfter(LocalDateTime.now()) && currentStartDay.isAfter(LocalDateTime.now())){ if(last!=null){ /*未开工工序的计划开工日=上一道工序的计划开工日+上一道工序的工序总工时。*/ stat.setProcessPlanEndDay(last.getProcessPlanStartDay()); stat.setProcessPlanStartDay(transDate(transLocalDateTime(last.getProcessPlanStartDay()).minusHours(stat.getProcessTotalTime()) )); } } } last = stat; apsPlateProcessStatMapper.insertApsPlateProcessStat(stat); } } apsPlateProcessStatMapper.removeOtherStat(batchNum); } private Date transDate(LocalDateTime localDateTime){ return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); } private LocalDateTime transLocalDateTime(Date date){ return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); } }