package com.yuanchu.mom.service.impl; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.yuanchu.mom.pojo.ManufactureOrderProcess; import com.yuanchu.mom.mapper.ManufactureOrderProcessMapper; import com.yuanchu.mom.pojo.ManufactureScheduling; import com.yuanchu.mom.service.ManufactureOrderProcessService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.service.ManufactureSchedulingService; import com.yuanchu.mom.utils.MyUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Objects; /** *

* 排产对应工序 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2023-08-31 02:46:48 */ @Service public class ManufactureOrderProcessServiceImpl extends ServiceImpl implements ManufactureOrderProcessService { @Resource private ManufactureOrderProcessMapper manufactureOrderProcessMapper; @Autowired private ManufactureSchedulingService manufactureSchedulingService; @Override public void batchInsert(List manufactureOrderProcessesDate) { manufactureOrderProcessMapper.insertBatchSomeColumn(manufactureOrderProcessesDate); } @Override public void updateTime(Integer technologyId, Integer schedulingId, String startTime, Integer period) { // 先更新周期 LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate() .eq(ManufactureOrderProcess::getId, technologyId) .set(ManufactureOrderProcess::getPeriod, period); manufactureOrderProcessMapper.update(new ManufactureOrderProcess(), updateWrapper); // 如果周期更新完成,根据排产Id查询所有的工序Id与每道工序周期,经过处理然后批量更新开始时间与结束时间 // Hutool 工具类计算间隔小时 Date startTime1 = DateUtil.parse(startTime); // 根据排产Id查询所有对应的工序数据 LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() .eq(ManufactureOrderProcess::getManufactureSchedulingId, schedulingId) .select(ManufactureOrderProcess::getId, ManufactureOrderProcess::getPeriod); List list = manufactureOrderProcessMapper.selectList(queryWrapper); // 开始处理日期 for (int i = 0; i < list.size(); i++) { if (Objects.equals(list.get(i).getId(), technologyId)){ list.get(i).setStartTime(startTime1); list.get(i).setEndTime(DateUtil.offsetDay(startTime1, list.get(i).getPeriod())); for (int j = i + 1; j < list.size(); j++) { // 获取上一个工序的结束时间,并且在此基础上加一天 list.get(j).setStartTime(DateUtil.offsetDay(list.get(j - 1).getEndTime(), 1)); // 获取第j个位置的周期,周期与开始时间相加 list.get(j).setEndTime(DateUtil.offsetDay(list.get(j).getStartTime(), list.get(j).getPeriod())); } break; } } manufactureOrderProcessMapper.updateTime(list); // 如果批量更新时间成功,开始更新排产表中的开始时间与结束时间 // 获取工艺的计划开始时间 Date startDate = manufactureOrderProcessMapper.selectSchedulingStartTime(schedulingId); // 获取工艺的最晚完成时间 Date endDate = list.get(list.size() - 1).getEndTime(); LambdaUpdateWrapper updateWrapper1 = Wrappers.lambdaUpdate() .eq(ManufactureScheduling::getId, schedulingId) .set(ManufactureScheduling::getStartTime, startDate) .set(ManufactureScheduling::getEndTime, endDate); manufactureSchedulingService.update(new ManufactureScheduling(), updateWrapper1); } }