Commit 3741d13b authored by chicheng's avatar chicheng

外协末尾道工序更新工单、推送ERP逻辑添加

parent a044f4b2
...@@ -8,7 +8,9 @@ import com.ximai.common.utils.SecurityUtils; ...@@ -8,7 +8,9 @@ import com.ximai.common.utils.SecurityUtils;
import com.ximai.common.utils.data.DataUtil; import com.ximai.common.utils.data.DataUtil;
import com.ximai.common.utils.data.ExceptionUtil; import com.ximai.common.utils.data.ExceptionUtil;
import com.ximai.common.utils.data.StringUtils; import com.ximai.common.utils.data.StringUtils;
import com.ximai.mes.constant.*; import com.ximai.mes.constant.TaskStatusEnum;
import com.ximai.mes.constant.TaskWorkunitStatusEnum;
import com.ximai.mes.constant.WorkorderStatusEnum;
import com.ximai.mes.pro.domain.ProFeedback; import com.ximai.mes.pro.domain.ProFeedback;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkOrderProcess; import com.ximai.mes.pro.domain.proWorkOrder.ProWorkOrderProcess;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder; import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
...@@ -40,10 +42,13 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -40,10 +42,13 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.ximai.mes.constant.TaskWorkunitStatusEnum.BEGINNING; import static com.ximai.mes.constant.TaskWorkunitStatusEnum.BEGINNING;
...@@ -298,24 +303,23 @@ public class ProTaskAssistProcessServiceImpl implements IProTaskAssistProcessSer ...@@ -298,24 +303,23 @@ public class ProTaskAssistProcessServiceImpl implements IProTaskAssistProcessSer
ExceptionUtil.checkTrueThrowException(quantityFeedbackDouble > taskQuantityWait.longValue() ExceptionUtil.checkTrueThrowException(quantityFeedbackDouble > taskQuantityWait.longValue()
|| quantityFeedbackDouble > taskQuantityDouble, MessageUtils.message("pro.feedback.error.quantity.lack")); || quantityFeedbackDouble > taskQuantityDouble, MessageUtils.message("pro.feedback.error.quantity.lack"));
BigDecimal quantityWait = taskQuantityWait.subtract(quantityQualify); BigDecimal quantityWait = taskQuantityWait.subtract(quantityFeedback);
task.setQuantityWait(quantityWait); task.setQuantityWait(quantityWait);
task.setQuantityQualify(task.getQuantityQualify().add(quantityQualify)); task.setQuantityQualify(task.getQuantityQualify().add(quantityQualify));
task.setQuantityUnqualify(task.getQuantityUnqualify().add(quantityUnQualify)); task.setQuantityUnqualify(task.getQuantityUnqualify().add(quantityUnQualify));
task.setQuantityProduced(task.getQuantityProduced().add(quantityQualify)); task.setQuantityProduced(task.getQuantityProduced().add(quantityFeedback));
taskWorkunit.setQuantityQualify(taskWorkunit.getQuantityQualify().add(quantityQualify)); taskWorkunit.setQuantityQualify(taskWorkunit.getQuantityQualify().add(quantityQualify));
taskWorkunit.setQuantityUnqualify(taskWorkunit.getQuantityUnqualify().add(quantityUnQualify)); taskWorkunit.setQuantityUnqualify(taskWorkunit.getQuantityUnqualify().add(quantityUnQualify));
taskWorkunit.setQuantityProduced(taskWorkunit.getQuantityProduced().add(quantityQualify)); taskWorkunit.setQuantityProduced(taskWorkunit.getQuantityProduced().add(quantityFeedback));
if (feedback.getCloseType() == 1 || taskWorkunit.getQuantity().compareTo(taskWorkunit.getQuantityProduced()) <= 0) { if (feedback.getCloseType() == 1 || taskWorkunit.getQuantity().compareTo(taskWorkunit.getQuantityProduced()) <= 0) {
taskWorkunit.setStatus(TaskWorkunitStatusEnum.FINISHED.getStatus()); taskWorkunit.setStatus(TaskWorkunitStatusEnum.FINISHED.getStatus());
taskWorkunit.setActualEndDate(Calendar.getInstance().getTime()); taskWorkunit.setActualEndDate(Calendar.getInstance().getTime());
proTaskWorkunitService.updateProTaskWorkunit(taskWorkunit);
} }
//按派工表保存报工记录 //按派工表保存报工记录
feedback.setFeedbackType("SELF"); feedback.setFeedbackType("OUTSOURCE");
feedback.setNickName(sysUserMapper.selectUserById(SecurityUtils.getUserId()).getNickName()); feedback.setNickName(sysUserMapper.selectUserById(SecurityUtils.getUserId()).getNickName());
proFeedbackService.insertProFeedback(feedback); proFeedbackService.insertProFeedback(feedback);
...@@ -339,9 +343,50 @@ public class ProTaskAssistProcessServiceImpl implements IProTaskAssistProcessSer ...@@ -339,9 +343,50 @@ public class ProTaskAssistProcessServiceImpl implements IProTaskAssistProcessSer
proTaskService.updateProTask(task); proTaskService.updateProTask(task);
proTaskWorkunitService.updateProTaskWorkunit(taskWorkunit); proTaskWorkunitService.updateProTaskWorkunit(taskWorkunit);
// 末道工序:与普通报工 doFeedBack 一致,回写工单并触发 ERP 完工入库(reportUpdateProWorkorder)
if (nextTask == null && quantityQualify.compareTo(BigDecimal.ZERO) > 0) {
if (workorder != null) {
proWorkorderService.reportUpdateProWorkorder(workorder, quantityQualify, quantityUnQualify);
}
tryFinishWorkorderOnLastProcessComplete(task);
}
return 1; return 1;
} }
/**
* 外协末道工序全部派工完工后,将关联工单置为已完成(对齐 changeStatus 末道逻辑,仅外协报工使用)
*/
private void tryFinishWorkorderOnLastProcessComplete(ProTask task) {
if (task == null || task.getIsLastProcess() == null || task.getIsLastProcess() != 1) {
return;
}
if (proTaskService.getNextTaskByTaskId(task.getTaskId()) != null) {
return;
}
QueryWrapper<ProTaskWorkunit> taskWorkunitQuery = new QueryWrapper<>();
taskWorkunitQuery.eq("task_id", task.getTaskId());
taskWorkunitQuery.notIn("status", TaskStatusEnum.FINISHED.getStatus());
if (CollectionUtil.isNotEmpty(proTaskWorkunitService.selectListByQw(taskWorkunitQuery))) {
return;
}
ProWorkorder workorderQuery = new ProWorkorder();
workorderQuery.setTaskId(task.getTaskId());
List<ProWorkorder> workorders = proWorkorderService.selectProWorkorderByTaskId(workorderQuery);
if (CollectionUtil.isEmpty(workorders)) {
return;
}
Set<String> terminalStatuses = new HashSet<>(Arrays.asList(
WorkorderStatusEnum.FINISHED.getValue(),
WorkorderStatusEnum.CLOSE.getValue(),
WorkorderStatusEnum.CANCEL.getValue(),
WorkorderStatusEnum.CANCELED.getValue()));
for (ProWorkorder wo : workorders) {
if (!terminalStatuses.contains(wo.getStatus())) {
proWorkorderService.updateWorkorderState(wo, WorkorderStatusEnum.FINISHED);
}
}
}
@Transactional @Transactional
@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