| | |
| | | package com.yuanchu.mom.service.impl; |
| | | |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUnit; |
| | | 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.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.yuanchu.mom.mapper.DeviceMapper; |
| | | import com.yuanchu.mom.mapper.ManualTechnologyMapper; |
| | | import com.yuanchu.mom.mapper.ManufactureOrderMapper; |
| | | import com.yuanchu.mom.pojo.ManualTechnology; |
| | | import com.yuanchu.mom.pojo.ManufactureOrder; |
| | | import com.yuanchu.mom.pojo.Technology; |
| | | import com.yuanchu.mom.pojo.*; |
| | | import com.yuanchu.mom.pojo.dto.ManualTechnologyDto; |
| | | import com.yuanchu.mom.pojo.dto.ManualTechnologyDto1; |
| | | import com.yuanchu.mom.service.ManualTechnologyService; |
| | | import com.yuanchu.mom.service.ManufactureOrderProcessService; |
| | | import com.yuanchu.mom.service.ManufactureSchedulingService; |
| | | import com.yuanchu.mom.service.TechnologyService; |
| | | import com.yuanchu.mom.utils.MyUtil; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Autowired |
| | | private TechnologyService technologyService; |
| | | |
| | | @Autowired |
| | | private ManufactureSchedulingService manufactureSchedulingService; |
| | | |
| | | @Autowired |
| | | private ManufactureOrderProcessService manufactureOrderProcessService; |
| | | |
| | | //排产-->查看 |
| | | @Override |
| | | public List<Map<String, Object>> seleDatil(Integer manOrdId) { |
| | | |
| | | return manualTechnologyMapper.seleDatil(manOrdId); |
| | | } |
| | | |
| | | //排产-->更新 |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void output(String date, Integer manufactureOrderId, Integer schedulingNumber, List<ManualTechnologyDto> manualTechnologyDtoList) throws ParseException { |
| | | // 查询工艺,用于匹配每个订单的工序周期 |
| | | LambdaQueryWrapper<Technology> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.select(Technology::getId, Technology::getProductionQuota); |
| | | List<Technology> technologies = technologyService.list(wrapper); |
| | | public void output(ManualTechnologyDto manualTechnologyDto) throws ParseException { |
| | | |
| | | // 根据排产数量计算工艺周期 |
| | | List<ManufactureOrderProcess> manufactureOrderProcessesPeriod = matchingCycle( |
| | | manualTechnologyDto.getSchedulingNumber(), |
| | | manualTechnologyDto.getManOrdId(), |
| | | manualTechnologyDto.getOrderProcess()); |
| | | |
| | | |
| | | // 根据工序生产定额匹配时间 |
| | | List<ManufactureOrderProcess> manufactureOrderProcessesDate = datePeriodCalculate( |
| | | manualTechnologyDto.getDate(), |
| | | manufactureOrderProcessesPeriod); |
| | | |
| | | |
| | | // 添加一条排产记录到manufacture_scheduling表格,返回主键Id |
| | | Date endTime = manufactureOrderProcessesDate.get(manufactureOrderProcessesDate.size() - 1).getEndTime(); |
| | | ManufactureScheduling manufactureScheduling = new ManufactureScheduling() |
| | | .setScheduled(manualTechnologyDto.getSchedulingNumber()) |
| | | .setStartTime(DateUtil.parse(manualTechnologyDto.getDate())) |
| | | .setEndTime(endTime) |
| | | .setManufactureOrderId(manualTechnologyDto.getManOrdId()) |
| | | .setGoState(0); // 0 表示待下达 |
| | | manufactureSchedulingService.save(manufactureScheduling); |
| | | |
| | | |
| | | // 将排表Id插入到manufactureOrderProcessesDate中, 开始批量插入manufactureOrderProcesses表格 |
| | | manufactureOrderProcessesDate.forEach(i -> i.setManufactureSchedulingId(manufactureScheduling.getId())); |
| | | manufactureOrderProcessService.batchInsert(manufactureOrderProcessesDate); |
| | | |
| | | |
| | | // 更新订单的已排产数量 |
| | | manufactureOrderMapper.updateManufacture(manualTechnologyDto.getManOrdId(), manualTechnologyDto.getSchedulingNumber()); |
| | | } |
| | | |
| | | @Override |
| | | public Integer updateTime(Integer technologyId, String startTime) { |
| | | // // Hutool 工具类计算间隔小时 |
| | | // DateTime startTime1 = DateUtil.parse(startTime); |
| | | // DateTime endTime1 = DateUtil.parse(endTime); |
| | | // long between = DateUtil.between(startTime1, endTime1, DateUnit.HOUR); |
| | | // // 更新 |
| | | // LambdaUpdateWrapper<ManualTechnology> updateWrapper = Wrappers.<ManualTechnology>lambdaUpdate() |
| | | // .eq(ManualTechnology::getId, technologyId); |
| | | // return manualTechnologyMapper.update(new ManualTechnology(), updateWrapper); |
| | | return null; |
| | | } |
| | | |
| | | // 根据排产数量计算工艺周期 |
| | | private List<ManufactureOrderProcess> matchingCycle(Integer schedulingNumber, Integer manOrdId, List<ManualTechnologyDto1> manualTechnologyDtoList){ |
| | | // 查询编制工艺,用于匹配每个订单的工序周期 |
| | | LambdaQueryWrapper<ManualTechnology> queryWrapper = Wrappers.<ManualTechnology>lambdaQuery() |
| | | .eq(ManualTechnology::getManufactureOrderId, manOrdId); |
| | | List<ManualTechnology> technologies = manualTechnologyMapper.selectList(queryWrapper); |
| | | |
| | | //匹配每个订单的工序周期 |
| | | List<ManualTechnology> manualTechnologies = manualTechnologyDtoList.stream().map(manualTechnologyDto -> { |
| | | ManualTechnology manualTechnology = new ManualTechnology(); |
| | | BeanUtils.copyProperties(manualTechnologyDto, manualTechnology); |
| | | List<ManufactureOrderProcess> manufactureOrderProcessList = manualTechnologyDtoList.stream().map(manualTechnologyDto1 -> { |
| | | ManufactureOrderProcess manufactureOrderProcess = new ManufactureOrderProcess(); |
| | | BeanUtils.copyProperties(manualTechnologyDto1, manufactureOrderProcess); |
| | | technologies.forEach(i -> { |
| | | if (Objects.equals(manualTechnology.getTechnologyId(), i.getId())){ |
| | | manualTechnology.setPeriod((int) Math.ceil((double)schedulingNumber/i.getProductionQuota())); |
| | | if (Objects.equals(manufactureOrderProcess.getManualTechnologyId(), i.getId())){ |
| | | manufactureOrderProcess.setPeriod((int) Math.ceil((double)schedulingNumber/i.getProductionQuota())); |
| | | } |
| | | }); |
| | | return manualTechnology; |
| | | return manufactureOrderProcess; |
| | | }).collect(Collectors.toList()); |
| | | return manufactureOrderProcessList; |
| | | } |
| | | |
| | | |
| | | // 根据工序生产定额匹配时间 |
| | | private List<ManufactureOrderProcess> datePeriodCalculate(String date, List<ManufactureOrderProcess> manualTechnologies) throws ParseException { |
| | | // 计算工序的开始日期以及结束日期 |
| | | DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Date parse = dateFormat.parse(date); |
| | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(parse); |
| | | //第一个工序 |
| | | ManualTechnology manualTechnology = manualTechnologies.get(0); |
| | | ManufactureOrderProcess manualTechnology = manualTechnologies.get(0); |
| | | calendar.add(Calendar.DATE, manualTechnology.getPeriod()); |
| | | |
| | | |
| | | manualTechnology.setStartTime(parse).setEndTime(calendar.getTime()); |
| | | //循环赋值时间 |
| | | for (int i = 0; i < manualTechnologies.size()-1 ; i++) { |
| | | Calendar calendar1 = Calendar.getInstance(); |
| | | calendar1.setTime(manualTechnologies.get(i).getEndTime()); |
| | | ManualTechnology technology = manualTechnologies.get(i + 1); |
| | | ManufactureOrderProcess technology = manualTechnologies.get(i + 1); |
| | | calendar1.add(Calendar.DATE,1); |
| | | technology.setStartTime(calendar1.getTime()); |
| | | calendar1.add(Calendar.DATE,technology.getPeriod()); |
| | | technology.setEndTime(calendar1.getTime()); |
| | | } |
| | | |
| | | |
| | | // 数据处理完成开始批量更新Mysql |
| | | manualTechnologyMapper.updateBatchManualTechnology(schedulingNumber, manualTechnologies); |
| | | |
| | | |
| | | // 工序更新完毕,更新订单的状态,将其更新为已排产:1,还有待下达:0 |
| | | manufactureOrderMapper.updateManufacture(manufactureOrderId, schedulingNumber); |
| | | return manualTechnologies; |
| | | } |
| | | } |
| | | |