package org.jeecg.modules.mes.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.modules.base.entity.Factory;
|
import org.jeecg.modules.base.entity.Shift;
|
import org.jeecg.modules.base.entity.ShiftGroup;
|
import org.jeecg.modules.base.service.IFactoryService;
|
import org.jeecg.modules.base.service.IShiftGroupService;
|
import org.jeecg.modules.base.service.IShiftService;
|
import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest;
|
import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
|
import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
|
import org.jeecg.modules.mes.mapper.MesProductionWorkOrderMapper;
|
import org.jeecg.modules.system.service.ISysDictService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDate;
|
import java.time.ZoneId;
|
import java.time.temporal.ChronoUnit;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
|
/**
|
* @Description: 排产工单
|
* @Author: jeecg-boot
|
* @Date: 2025-07-04
|
* @Version: V1.0
|
*/
|
@Service
|
public class MesProductionWorkOrderServiceImpl extends ServiceImpl<MesProductionWorkOrderMapper, MesProductionWorkOrder> implements IMesProductionWorkOrderService {
|
@Autowired
|
private IShiftService shiftService;
|
@Autowired
|
private IShiftGroupService shiftGroupService;
|
@Autowired
|
private IFactoryService factoryService;
|
|
@Override
|
public List<MesProductionWorkOrder> schedule(MesProductionWorkScheduleRequest request) {
|
//查询起止日期范围内的排产计划,先排除
|
//查询该产线下所有的班次
|
Map<String, ShiftGroup> shiftGroupMap = shiftGroupService.list(new LambdaQueryWrapper<ShiftGroup>()
|
.eq(ShiftGroup::getFactoryId, request.getFactoryId())
|
.eq(ShiftGroup::getDelFlag, CommonConstant.DEL_FLAG_0))
|
.stream().collect(Collectors.toMap(ShiftGroup::getShiftId, v1 -> v1, (v1, v2) -> v1));
|
Factory factory = factoryService.getById(request.getFactoryId());
|
Map<String, Shift> shiftNameMap = new HashMap<>();
|
List<Shift> shifts = shiftService.list(new LambdaQueryWrapper<Shift>()
|
.in(Shift::getId, shiftGroupMap.keySet()));
|
shifts.forEach(shift -> shiftNameMap.put(shift.getId(), shift));
|
|
LocalDate startDate = request.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
LocalDate endDate = request.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
// 使用日期范围进行遍历处理
|
List<LocalDate> dateRange = Stream.iterate(startDate, date -> date.plusDays(1))
|
.limit(ChronoUnit.DAYS.between(startDate, endDate) + 1)
|
.collect(Collectors.toList());
|
List<MesProductionWorkOrder> newProductionWorkOrderList = CollectionUtil.newArrayList();
|
|
for (LocalDate date : dateRange) {
|
for (String shiftId : shiftGroupMap.keySet()) {
|
Date workOrderDate = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
//查询该产线、班次在该日期下是否有排产计划
|
Optional<MesProductionWorkOrder> optional = list(new LambdaQueryWrapper<MesProductionWorkOrder>()
|
.eq(MesProductionWorkOrder::getWorkOrderDate, workOrderDate)
|
.eq(MesProductionWorkOrder::getFactoryId, request.getFactoryId())
|
.eq(MesProductionWorkOrder::getShiftId, shiftId))
|
.stream().findAny();
|
if (!optional.isPresent()) {
|
ShiftGroup shiftGroup = shiftGroupMap.get(shiftId);
|
//没有,生成新排产计划
|
MesProductionWorkOrder mesProductionWorkOrder = new MesProductionWorkOrder()
|
.setFactoryId(factory.getId())
|
.setFactoryCode(factory.getFactoryCode())
|
.setFactoryName(factory.getFactoryName())
|
.setShiftId(shiftId)
|
.setShiftCode(shiftNameMap.get(shiftId).getShiftCode())
|
.setShiftName(shiftNameMap.get(shiftId).getShiftName())
|
.setGroupId(shiftGroup.getId())
|
.setGroupName(shiftGroup.getGroupName())
|
.setWorkOrderDate(workOrderDate);
|
|
newProductionWorkOrderList.add(mesProductionWorkOrder);
|
}
|
}
|
}
|
//如果为空,默认给一条,用于手动新增时表格的初始化
|
if (newProductionWorkOrderList.isEmpty()) {
|
MesProductionWorkOrder mesProductionWorkOrder = new MesProductionWorkOrder()
|
.setFactoryId(factory.getId())
|
.setFactoryCode(factory.getFactoryCode())
|
.setFactoryName(factory.getFactoryName());
|
newProductionWorkOrderList.add(mesProductionWorkOrder);
|
}
|
return newProductionWorkOrderList;
|
}
|
|
@Override
|
public IPage<MesProductionWorkOrder> queryPageList(Page<MesProductionWorkOrder> page, Map<String, String[]> parameterMap) {
|
QueryWrapper<MesProductionWorkOrder> queryWrapper = Wrappers.query();
|
String[] factoryIds = parameterMap.get("factoryId");
|
if (factoryIds != null && factoryIds.length > 0) {
|
queryWrapper.eq("t1.factory_id", factoryIds[0]);
|
}
|
String[] startDates = parameterMap.get("startDate");
|
String[] endDates = parameterMap.get("endDate");
|
if (startDates != null && startDates.length > 0) {
|
queryWrapper.ge("t1.work_order_date", startDates[0]);
|
}
|
if (endDates != null && endDates.length > 0) {
|
queryWrapper.le("t1.work_order_date", endDates[0]);
|
}
|
String[] workOrderStatuses = parameterMap.get("workOrderStatus");
|
if (workOrderStatuses != null && workOrderStatuses.length > 0) {
|
queryWrapper.eq("t1.work_order_status", workOrderStatuses[0]);
|
}
|
queryWrapper.eq("t1.del_flag", CommonConstant.DEL_FLAG_0);
|
queryWrapper.orderByAsc("t1.work_order_date");
|
return this.baseMapper.queryPageList(page, queryWrapper);
|
}
|
}
|