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;
|
|
/**
|
* <p>
|
* 排产对应工序 服务实现类
|
* </p>
|
*
|
* @author 江苏鵷雏网络科技有限公司
|
* @since 2023-08-31 02:46:48
|
*/
|
@Service
|
public class ManufactureOrderProcessServiceImpl extends ServiceImpl<ManufactureOrderProcessMapper, ManufactureOrderProcess> implements ManufactureOrderProcessService {
|
|
@Resource
|
private ManufactureOrderProcessMapper manufactureOrderProcessMapper;
|
|
@Autowired
|
private ManufactureSchedulingService manufactureSchedulingService;
|
|
@Override
|
public void batchInsert(List<ManufactureOrderProcess> manufactureOrderProcessesDate) {
|
manufactureOrderProcessMapper.insertBatchSomeColumn(manufactureOrderProcessesDate);
|
}
|
|
@Override
|
public void updateTime(Integer technologyId, Integer schedulingId, String startTime, Integer period) {
|
// 先更新周期
|
LambdaUpdateWrapper<ManufactureOrderProcess> updateWrapper = Wrappers.<ManufactureOrderProcess>lambdaUpdate()
|
.eq(ManufactureOrderProcess::getId, technologyId)
|
.set(ManufactureOrderProcess::getPeriod, period);
|
manufactureOrderProcessMapper.update(new ManufactureOrderProcess(), updateWrapper);
|
|
|
// 如果周期更新完成,根据排产Id查询所有的工序Id与每道工序周期,经过处理然后批量更新开始时间与结束时间
|
// Hutool 工具类计算间隔小时
|
Date startTime1 = DateUtil.parse(startTime);
|
// 根据排产Id查询所有对应的工序数据
|
LambdaQueryWrapper<ManufactureOrderProcess> queryWrapper = Wrappers.<ManufactureOrderProcess>lambdaQuery()
|
.eq(ManufactureOrderProcess::getManufactureSchedulingId, schedulingId)
|
.select(ManufactureOrderProcess::getId, ManufactureOrderProcess::getPeriod);
|
List<ManufactureOrderProcess> 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<ManufactureScheduling> updateWrapper1 = Wrappers.<ManufactureScheduling>lambdaUpdate()
|
.eq(ManufactureScheduling::getId, schedulingId)
|
.set(ManufactureScheduling::getStartTime, startDate)
|
.set(ManufactureScheduling::getEndTime, endDate);
|
manufactureSchedulingService.update(new ManufactureScheduling(), updateWrapper1);
|
}
|
}
|