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

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

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