Commit c38e6887 authored by 李驰骋's avatar 李驰骋

排产支持工单单独充置开始时间

parent 1f61dfc0
......@@ -96,6 +96,7 @@ public class MdWorkunitController extends BaseController {
/**
* 新增工作单元
*/
@ApiOperation(value = "修改工作单元")
@PreAuthorize("@ss.hasPermi('md:workunit:add')")
@Log(title = "工作单元", businessType = BusinessType.INSERT)
@PostMapping
......@@ -106,6 +107,7 @@ public class MdWorkunitController extends BaseController {
/**
* 修改工作单元
*/
@ApiOperation(value = "修改工作单元")
@PreAuthorize("@ss.hasPermi('md:workunit:edit')")
@Log(title = "工作单元", businessType = BusinessType.UPDATE)
@PutMapping
......
......@@ -73,7 +73,7 @@ public class MdWorkunit extends BaseEntity {
private Integer serial;
@ApiModelProperty("所属产线名")
private Integer lineName;
private String lineName;
/**
* 是否故障
......
......@@ -149,7 +149,7 @@ public interface MdItemMapper extends BaseMapper<MdItem> {
*
* @return
*/
@Select(value = "select line_name from md_item group by line_name")
@Select(value = "select line_name from md_item where line_name is not null group by line_name")
List<String> selectGroupLineName();
}
......@@ -126,7 +126,8 @@ public class ProWorkorderController extends BaseController {
query.in(StringUtils.isNotEmpty(proWorkorder.getStatusArr()), "t1.status",
proWorkorder.getStatusArr());
query.in("t1.status",
new String[]{WorkorderStatusEnum.PREPARE.getValue(), WorkorderStatusEnum.PUBLISHED.getValue()});
new String[]{WorkorderStatusEnum.PREPARE.getValue(), WorkorderStatusEnum.PUBLISHED.getValue(),
WorkorderStatusEnum.ISSUED.getValue()});
query.gt("t1.quantity-t1.quantity_scheduled", 0);
query.orderByDesc("request_date");
List<ProWorkorder> list = proWorkorderService.selectListByQw(query);
......
......@@ -26,7 +26,6 @@ import java.util.List;
public class ProTaskWorkunit extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableField
@TableId
@ApiModelProperty("生产任务ID")
private Long taskWorkunitId;
......
......@@ -44,6 +44,11 @@ public class Job {
*/
private LocalDateTime producedDeliveryDate;
/**
* 排产开始日期
*/
private LocalDateTime scheduleDate;
/*
* 开始时间限制线
*/
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.StopWatch;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ximai.common.exception.ServiceException;
import com.ximai.common.utils.MessageUtils;
import com.ximai.mes.cal.domain.CalPlanWorkunit;
......@@ -21,6 +22,7 @@ import com.ximai.mes.pro.service.productionSolution.IProProductionSolutionProces
import com.ximai.mes.pro.service.productionSolution.IProProductionSolutionService;
import com.ximai.mes.pro.service.productionSolution.IProProductionSolutionSpecificationSheetService;
import com.ximai.mes.pro.service.task.IProTaskWorkunitService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -98,7 +100,8 @@ public class AlgorithmDataSourceThXMImpl implements AlgorithmDataSource {
}
@Override
public List<Job> getJob(LocalDateTime schedulingStartedDate, List<WorkorderScheduleParams> workorderScheduleParams, List<Resource> resources) {
public List<Job> getJob(LocalDateTime scheduleStartedDate, List<WorkorderScheduleParams> workorderScheduleParams, List<Resource> resources) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
List<Job> algJobs = new ArrayList<Job>();
......@@ -117,9 +120,11 @@ public class AlgorithmDataSourceThXMImpl implements AlgorithmDataSource {
throw new ServiceException(MessageUtils.message("pro.workOrder.error.not.null.requestDate"));
}
LocalDateTime recentDate = list.stream().map(s -> DateUtil.toLocalDateTime(s.getRequestDate())).min(Comparator.comparing(LocalDateTime::toLocalDate)).get();
scheduleJobGroup.setQuantity(workorderScheduleParamsMap.get(workorder.getWorkorderId()).getScheduleQuantity());
WorkorderScheduleParams params = workorderScheduleParamsMap.get(workorder.getWorkorderId());
scheduleJobGroup.setQuantity(params.getScheduleQuantity());
scheduleJobGroup.setDemandDate(recentDate);
scheduleJobGroup.setWorkorderCode(workorder.getWorkorderCode());
scheduleJobGroup.setScheduleDate(params.getScheduleDate());
scheduleJobGroupList.add(scheduleJobGroup);
}
//按交期近,数量少排序
......@@ -138,16 +143,16 @@ public class AlgorithmDataSourceThXMImpl implements AlgorithmDataSource {
continue;
}
// 工序分组 生成Job及Task
Job job = new Job(scheduleJobGroup.getWorkorderCode(), Duration.between(schedulingStartedDate, DateUtil.date(scheduleJobGroup.getDemandDate()).toLocalDateTime())) {{
Job job = new Job(scheduleJobGroup.getWorkorderCode(), Duration.between(scheduleJobGroup.getScheduleDate(), DateUtil.date(scheduleJobGroup.getDemandDate()).toLocalDateTime())) {{
setFixed(false);
}};
JobExtent jobExtent = new JobExtent();
jobExtent.setWorkorderList(scheduleJobGroup.getWorkorderList());
job.setJobExtend(jobExtent);
job.getLmtStartedTime().addOptional(Duration.ZERO);
job.getLmtEndedTime().addOptional(Duration.between(schedulingStartedDate, DateUtil.date(scheduleJobGroup.getDemandDate()).toLocalDateTime()));
job.getLmtEndedTime().addOptional(Duration.between(scheduleJobGroup.getScheduleDate(), DateUtil.date(scheduleJobGroup.getDemandDate()).toLocalDateTime()));
job.setQuantity(scheduleJobGroup.getQuantity());
job.setScheduleDate(scheduleJobGroup.getScheduleDate());
for (ProWorkOrderProcess routingItem : productionOrderRoutings) {
Task task = new Task(i, job);
task.setStandardWorkingTime(Duration.ZERO);
......@@ -238,6 +243,8 @@ public class AlgorithmDataSourceThXMImpl implements AlgorithmDataSource {
List<ProWorkorder> workorderList;
//最近交期
LocalDateTime demandDate;
//排产开始日期
LocalDateTime scheduleDate;
//总数量
BigDecimal quantity;
//工单单号
......
......@@ -115,13 +115,13 @@ public class AlgorithmResultProcessImpl implements AlgorithmResultProcess {
List<Task> dispenseList = task.getSplitTask();
List<ProTaskWorkunit> workunitList = new ArrayList<>();
if (dispenseList == null) {
ProTaskWorkunit taskWorkunit = this.convertTaskWorkunit(scheduleStartDate, proTask, task);
ProTaskWorkunit taskWorkunit = this.convertTaskWorkunit(scheduleStartDate, proTask, job, task);
proTaskWorkunitService.insertProTaskWorkunit(taskWorkunit);
taskWorkunitIds.add(taskWorkunit.getTaskWorkunitId());
workunitList.add(taskWorkunit);
} else {
for (Task dispense : dispenseList) {
ProTaskWorkunit taskWorkunit = this.convertTaskWorkunit(scheduleStartDate, proTask, dispense);
ProTaskWorkunit taskWorkunit = this.convertTaskWorkunit(scheduleStartDate, proTask, job, dispense);
proTaskWorkunitService.insertProTaskWorkunit(taskWorkunit);
taskWorkunitIds.add(taskWorkunit.getWorkunitId());
workunitList.add(taskWorkunit);
......@@ -151,7 +151,7 @@ public class AlgorithmResultProcessImpl implements AlgorithmResultProcess {
return proTask;
}
private ProTaskWorkunit convertTaskWorkunit(LocalDateTime scheduleStartDate, ProTask proTask, Task task) {
private ProTaskWorkunit convertTaskWorkunit(LocalDateTime scheduleStartDate, ProTask proTask, Job job, Task task) {
ProTaskWorkunit taskWorkunit = new ProTaskWorkunit();
taskWorkunit.setTaskId(proTask.getTaskId());
taskWorkunit.setIdx(1L);
......@@ -167,8 +167,8 @@ public class AlgorithmResultProcessImpl implements AlgorithmResultProcess {
taskWorkunit.setUnitPrice(task.getUnitPrice());
taskWorkunit.setStdWorkingTime(task.getStdWorkingTime());
taskWorkunit.setStdWorkingTimeUom(task.getStdWorkingTimeUom());
LocalDateTime sdate = scheduleStartDate.plus(task.getScheduledStartedTime());
LocalDateTime edate = scheduleStartDate.plus(task.getScheduledEndedTime());
LocalDateTime sdate = job.getScheduleDate().plus(task.getScheduledStartedTime());
LocalDateTime edate = job.getScheduleDate().plus(task.getScheduledEndedTime());
Date sdate1 = Date.from(sdate.atZone(ZoneId.systemDefault()).toInstant());
Date edate1 = Date.from(edate.atZone(ZoneId.systemDefault()).toInstant());
taskWorkunit.setScheduleStartDate(sdate1);
......
......@@ -1308,13 +1308,8 @@ public class ProTaskServiceImpl implements IProTaskService {
add(scheduleSetupRuleAlgorithmData);
}
});
scheduleAlgorithmAdapter.schedule(LocalDateTime.now(), workorderScheduleParams);
StopWatch stopWatch = new StopWatch();
stopWatch.start();
stopWatch.stop();
logger.info(String.format("排产结果发送SAP耗时:%s", stopWatch.getTotalTimeSeconds()));
LocalDateTime minStartSchedule = workorderScheduleParams.stream().map(s->s.getScheduleDate()).sorted().findFirst().get();
scheduleAlgorithmAdapter.schedule(minStartSchedule, workorderScheduleParams);
}
@Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment