|
|
|
|
@ -8,8 +8,13 @@ import org.springblade.common.exception.BusinessException; |
|
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
|
import org.springblade.core.tool.utils.DateUtil; |
|
|
|
|
import org.springblade.desk.basic.mapper.OemMapper; |
|
|
|
|
import org.springblade.desk.basic.mapper.TeamSetMapper; |
|
|
|
|
import org.springblade.desk.basic.pojo.entity.Oem; |
|
|
|
|
import org.springblade.desk.basic.pojo.entity.TeamSet; |
|
|
|
|
import org.springblade.desk.dashboard.mapper.BsProcessSetMapper; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; |
|
|
|
|
import org.springblade.desk.dashboard.utils.DateUtils; |
|
|
|
|
import org.springblade.desk.oem.pojo.request.OemApproval; |
|
|
|
|
import org.springblade.desk.oem.pojo.request.OemApprovalQuery; |
|
|
|
|
@ -19,9 +24,11 @@ import org.springblade.desk.oem.pojo.vo.OemApprovalVO; |
|
|
|
|
import org.springblade.desk.oem.pojo.vo.OemOrderVO; |
|
|
|
|
import org.springblade.desk.order.mapper.YieldOrderMapper; |
|
|
|
|
import org.springblade.desk.order.pojo.entity.YieldOrder; |
|
|
|
|
import org.springblade.desk.order.pojo.enums.YieldOrderEnum; |
|
|
|
|
import org.springblade.desk.produce.mapper.*; |
|
|
|
|
import org.springblade.desk.produce.pojo.entity.*; |
|
|
|
|
import org.springblade.desk.produce.service.IWorkOrderRunService; |
|
|
|
|
import org.springblade.scheduling.pojo.entity.YieldOrderEntity; |
|
|
|
|
import org.springblade.system.cache.UserCache; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
@ -66,6 +73,12 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
@Resource |
|
|
|
|
private OemMapper oemMapper; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private BsProcessSetMapper processSetMapper; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private TeamSetMapper teamSetMapper; |
|
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
@Override |
|
|
|
|
public R oemTakeBack(OemTakeBack oemTakeBack) { |
|
|
|
|
@ -97,222 +110,254 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
return R.fail("未找到相关外协订单"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
@Override |
|
|
|
|
public R approval(OemApproval oemApproval) { |
|
|
|
|
// WorkOrderRun workOrderRun = workOrderRunMapper.selectById(oemApproval.getWorkOrderRunId());
|
|
|
|
|
// WorkOrder wo = workOrderMapper.selectById(workOrderRun.getWoId());
|
|
|
|
|
// YieldOrder yo = yieldOrderMapper.selectById(wo.getYoId());
|
|
|
|
|
// workOrderRun.setApprovalMan(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1);
|
|
|
|
|
// workOrderRun.setApprovalTime(new Date());
|
|
|
|
|
// workOrderRun.setApprovalMemo(oemApproval.getApprovalMemo());
|
|
|
|
|
// WorkPlan wp;
|
|
|
|
|
//
|
|
|
|
|
// if (WorkOrder.APPROVAL_STATUS_VIA.equals(oemApproval.getApprovalStatus())) {
|
|
|
|
|
//
|
|
|
|
|
// //记录订单号和供应商,用于退货时使用
|
|
|
|
|
// String wxCode = workOrderRun.getWoCode();
|
|
|
|
|
// Oem oldOemCustomer = oemMapper.selectById(workOrderRun.getInCustomer());
|
|
|
|
|
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED);
|
|
|
|
|
// wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
|
|
|
|
|
// .eq(WorkPlan::getWoId, wo.getId()));
|
|
|
|
|
// wo.setCollaborate(workOrderRun.getCollaborate());
|
|
|
|
|
//
|
|
|
|
|
// // 若当前序小于等于已接收
|
|
|
|
|
// if (wp.getStatus() <= WorkPlan.STATUS_START) {
|
|
|
|
|
// // 修改本序
|
|
|
|
|
// wp.setFactStartTime(null);
|
|
|
|
|
// wp.setUnqualifiedQty(0);
|
|
|
|
|
// wp.setStatus(WorkPlan.STATUS_NO_START);
|
|
|
|
|
// workPlanMapper.updateById(wp);
|
|
|
|
|
// WorkPlan frontWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>()
|
|
|
|
|
// .eq(WorkPlan::getFrontWpId, wp.getId()));
|
|
|
|
|
// if (frontWorkPlan != null) {
|
|
|
|
|
// // 还原上序
|
|
|
|
|
// frontWorkPlan.setStatus(WorkPlan.STATUS_WORK_OK);
|
|
|
|
|
// frontWorkPlan.setFactEndTime(null);
|
|
|
|
|
// frontWorkPlan.setReceiveMan(null);
|
|
|
|
|
// workPlanMapper.updateById(frontWorkPlan);
|
|
|
|
|
//
|
|
|
|
|
// // 增加入库记录
|
|
|
|
|
// PlateAround prPlateAround = new PlateAround();
|
|
|
|
|
// prPlateAround.setPaType(PlateAround.BEFORE_PLAT_IN);
|
|
|
|
|
// prPlateAround.setWpId(frontWorkPlan.getId());
|
|
|
|
|
// prPlateAround.setQuantity(frontWorkPlan.getQualifiedQty());
|
|
|
|
|
// prPlateAround.setCreateUser(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1);
|
|
|
|
|
// prPlateAround.setCreateTime(new Date());
|
|
|
|
|
// plateAroundMapper.insert(prPlateAround);
|
|
|
|
|
// // 修改订单的当前序
|
|
|
|
|
// wo.setWpId(frontWorkPlan.getId());
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// //转外协或者转厂内审批是,更改车间订单的审批状态为正常
|
|
|
|
|
// if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) || WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) {
|
|
|
|
|
// wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_NORMAL);
|
|
|
|
|
// List<WorkPlanRun> wprList = workPlanRunMapper.selectList(new LambdaQueryWrapper<WorkPlanRun>()
|
|
|
|
|
// .eq(WorkPlanRun::getWorId, workOrderRun.getId()));
|
|
|
|
|
// List<WorkPlan> wpList = new ArrayList<>();
|
|
|
|
|
// //转外协业务处理
|
|
|
|
|
// if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) {
|
|
|
|
|
// for (WorkPlanRun wpr : wprList) {
|
|
|
|
|
// wp = workPlanMapper.selectById(wpr.getWpId());
|
|
|
|
|
// //如果不是勾选工序不处理
|
|
|
|
|
// if (!wpr.getHandle()) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// wp.setMakeTeam(null);
|
|
|
|
|
// wp.setSubsidiaryTeam(null);
|
|
|
|
|
// wp.setStartTime(LocalDateTime.ofInstant(
|
|
|
|
|
// wpr.getStartTime().toInstant(),
|
|
|
|
|
// ZoneId.systemDefault()
|
|
|
|
|
// ));
|
|
|
|
|
// wp.setEndTime(LocalDateTime.ofInstant(
|
|
|
|
|
// wpr.getEndTime().toInstant(),
|
|
|
|
|
// ZoneId.systemDefault()
|
|
|
|
|
// ));
|
|
|
|
|
// wp.setOem("1");
|
|
|
|
|
// wp.setCaId(wpr.getCaId());
|
|
|
|
|
// wpList.add(wp);
|
|
|
|
|
// }
|
|
|
|
|
// wo.setWorId(workOrderRun.getId());
|
|
|
|
|
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
|
|
|
|
|
//
|
|
|
|
|
// //调用转外协自动分派处理
|
|
|
|
|
// if (wpList != null && wpList.size() > 0) {
|
|
|
|
|
// //判断工序是否存在外协商,如果存在不进行二次分派
|
|
|
|
|
// WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId());
|
|
|
|
|
// if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) {
|
|
|
|
|
// //todo 自动分派后续补充
|
|
|
|
|
//// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// int days = 0;
|
|
|
|
|
// wo.setOemOut("0");
|
|
|
|
|
// if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) {
|
|
|
|
|
// wo.setOemType(WorkOrder.OEM_TYPE_SINGLE);
|
|
|
|
|
// days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HELP, BsBusConfig.BC_NAME_CYCLE_HELP).getBcValue());
|
|
|
|
|
// } else {
|
|
|
|
|
// wo.setOemType(WorkOrder.OEM_TYPE_WHOLE);
|
|
|
|
|
// days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_OEM, BsBusConfig.BC_NAME_CYCLE_OEM).getBcValue());
|
|
|
|
|
// BsOemAbility oa = null;
|
|
|
|
|
// if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
|
|
|
|
|
// oa = bsOemAbilityService.findBsOemAbility(wo.getNextBsOemCustomer().getOcId(),
|
|
|
|
|
// wo.getWorkPlan().getNextWorkPlan().getBsCraftAbility().getCaId());
|
|
|
|
|
// } else {
|
|
|
|
|
// oa = bsOemAbilityService.findBsOemAbility(wo.getWorkPlan().getOemCustomer().getOcId(),
|
|
|
|
|
// wo.getWorkPlan().getBsCraftAbility().getCaId());
|
|
|
|
|
// }
|
|
|
|
|
// prWorkOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true);
|
|
|
|
|
// }
|
|
|
|
|
// wo.setPlanEndDate(DateTools.dateAdd(wo.getSendDownTime(), 5, days));
|
|
|
|
|
//
|
|
|
|
|
// //如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前
|
|
|
|
|
// if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) {
|
|
|
|
|
// workOrderRun.setInCustomer(wo.getNextBsOemCustomer());
|
|
|
|
|
// } else {
|
|
|
|
|
// workOrderRun.setInCustomer(wo.getWorkPlan().getOemCustomer());
|
|
|
|
|
// }
|
|
|
|
|
// //更新车间订单主责任单位
|
|
|
|
|
// prWorkOrderService.updateHostWorkUnit(wo.getWoId());
|
|
|
|
|
//
|
|
|
|
|
// //转厂内业务
|
|
|
|
|
// } else {
|
|
|
|
|
//
|
|
|
|
|
// WorkPlan nextWorkPlan;
|
|
|
|
|
// BsTeamSet teamSet = null;
|
|
|
|
|
// for (WorkPlanRun wpr : wprList) {
|
|
|
|
|
// wp = wpr.getWorkPlan();
|
|
|
|
|
// //如果不是勾选工序不处理
|
|
|
|
|
// if (!wpr.getHandle()) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// nextWorkPlan = wp.getNextWorkPlan();
|
|
|
|
|
// if (nextWorkPlan.getMakeTeam() != null && !nextWorkPlan.getProcedureSet().getAssist()) {
|
|
|
|
|
// teamSet = nextWorkPlan.getMakeTeam();
|
|
|
|
|
// }
|
|
|
|
|
// wp.setMakeTeam(teamSet);
|
|
|
|
|
// wp.setOemCustomer(null);
|
|
|
|
|
// wp.setStartTime(null);
|
|
|
|
|
// wp.setUnqualifiedQty(0d);
|
|
|
|
|
// wp.setWorkQty(0d);
|
|
|
|
|
// wp.setEndTime(null);
|
|
|
|
|
// wp.setSubsidiaryTeam(null);
|
|
|
|
|
// wp.setOem(Boolean.FALSE);
|
|
|
|
|
// wp.setBsCraftAbility(wpr.getBsCraftAbility());
|
|
|
|
|
// wpList.add(wp);
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// if (wpList == null || wpList.size() == 0) {
|
|
|
|
|
// throw new BusinessException("product.notTurnBackProcess", null);
|
|
|
|
|
// }
|
|
|
|
|
// wo.setWorkOrderRun(workOrderRun);
|
|
|
|
|
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED);
|
|
|
|
|
// //调用转厂内自动分派处理
|
|
|
|
|
// if (teamSet == null) {
|
|
|
|
|
// //调用转外协自动分派处理
|
|
|
|
|
// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null);
|
|
|
|
|
// //周新昊 20241015 增加调用下方方法
|
|
|
|
|
// //处理包装工序 并且工艺能力包含 包装 并且加工单位为空的
|
|
|
|
|
// pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo);
|
|
|
|
|
// } else {
|
|
|
|
|
// PlateAround prPlateAround = new PlateAround(wo.getWorkPlan(), wo.getBsOemCustomer(), PlateAround.BEFORE_PLAT_IN, wo.getMakeQty());
|
|
|
|
|
// prPlateAroundService.createPlateAround(workOrderRun.getCreateMan(), prPlateAround, PlateAround.BEFORE_PLAT_IN, 1, true);
|
|
|
|
|
// }
|
|
|
|
|
// // 如果主工序班组为空后者外协
|
|
|
|
|
// if (wo.getBsOemCustomer() != null || wo.getMakeTeam() == null) {
|
|
|
|
|
// wo.setBsOemCustomer(null);
|
|
|
|
|
// wo.setMakeTeam(wpList.get(0).getMakeTeam());
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// workOrderRun.setInTeam(wo.getMakeTeam());
|
|
|
|
|
// if (workOrderRun.getInTeam() == null) {
|
|
|
|
|
// workOrderRun.setInTeam(wo.getNextMakeTeam());
|
|
|
|
|
// wo.setMakeTeam(wo.getNextMakeTeam());
|
|
|
|
|
// }
|
|
|
|
|
// wo.setOemType(Short.valueOf("-1"));
|
|
|
|
|
// int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue());
|
|
|
|
|
// wo.setPlanEndDate(DateTools.dateAdd(wo.getSendDownTime(), 5, days));
|
|
|
|
|
// prWorkOrderService.update(wo);
|
|
|
|
|
//
|
|
|
|
|
// wo = prWorkOrderService.getByKey(wo.getWoId());
|
|
|
|
|
//
|
|
|
|
|
// prWorkOrderService.maintainOrder(wo, wo.getMakeTeam().getPlanner(), wo.getMakeTeam().getDispatcher(), workOrderRun, false);
|
|
|
|
|
// //更新车间订单主责任单位
|
|
|
|
|
// prWorkOrderService.updateHostWorkUnit(wo.getWoId());
|
|
|
|
|
//
|
|
|
|
|
// //关闭erp外协订单
|
|
|
|
|
// if (!yo.getManualIncrease()) {
|
|
|
|
|
// prWorkOrderRunDao.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
|
|
|
|
|
// }
|
|
|
|
|
// Boolean flag = prWorkPlanService.isExistOemProcess(wo.getWoId());
|
|
|
|
|
// if (!flag) {
|
|
|
|
|
// wo.setCollaborate(Boolean.FALSE);
|
|
|
|
|
// }
|
|
|
|
|
// // 修改订单业务中心
|
|
|
|
|
// if (wp.getNextWorkPlan() != null && wp.getNextWorkPlan().getMakeTeam() != null) {
|
|
|
|
|
// if (PjYieldOrder.YIELD_TYPE_1.equals(wo.getPjYieldOrder().getYieldType())) {
|
|
|
|
|
// wo.getPjYieldOrder().setBusinessType(PjYieldOrder.BUSINESS_TYPE_RB);
|
|
|
|
|
// } else {
|
|
|
|
|
// wo.getPjYieldOrder().setBusinessType(PjYieldOrder.BUSINESS_TYPE_SJ);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// } else if (WorkOrderRun.RUN_TYPE_3.equals(workOrderRun.getRunType())) {
|
|
|
|
|
// //验证同工单下的车间订单
|
|
|
|
|
// this.validateSameYield(yo.getYoId());
|
|
|
|
|
// //处理同订单
|
|
|
|
|
// this.withYield(yo.getYoId());
|
|
|
|
|
// //生产订单接收
|
|
|
|
|
// yo.setCurStatus(PjYieldOrder.CUR_STATUS_NORMAL);
|
|
|
|
|
// //关闭erp外协订单
|
|
|
|
|
// if (!yo.getManualIncrease() && oldOemCustomer != null) {
|
|
|
|
|
// prWorkOrderRunDao.closeErpOrder(wxCode, workOrderRun.getApprovalMemo());
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
// wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_FAIL);
|
|
|
|
|
// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL);
|
|
|
|
|
// }
|
|
|
|
|
public R approval(OemApproval oemApproval) throws Exception { |
|
|
|
|
/*WorkOrderRun workOrderRun = workOrderRunMapper.selectById(oemApproval.getWorkOrderRunId()); |
|
|
|
|
WorkOrder wo = workOrderMapper.selectById(workOrderRun.getWoId()); |
|
|
|
|
YieldOrder yo = yieldOrderMapper.selectById(wo.getYoId()); |
|
|
|
|
workOrderRun.setApprovalMan(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1); |
|
|
|
|
workOrderRun.setApprovalTime(new Date()); |
|
|
|
|
workOrderRun.setApprovalMemo(oemApproval.getApprovalMemo()); |
|
|
|
|
WorkPlan wp; |
|
|
|
|
|
|
|
|
|
if (WorkOrder.APPROVAL_STATUS_VIA.equals(oemApproval.getApprovalStatus())) { |
|
|
|
|
|
|
|
|
|
//记录订单号和供应商,用于退货时使用
|
|
|
|
|
String wxCode = workOrderRun.getWoCode(); |
|
|
|
|
Oem oldOemCustomer = oemMapper.selectById(workOrderRun.getInCustomer()); |
|
|
|
|
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED); |
|
|
|
|
wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getWoId, wo.getId())); |
|
|
|
|
wo.setCollaborate(workOrderRun.getCollaborate()); |
|
|
|
|
|
|
|
|
|
// 若当前序小于等于已接收
|
|
|
|
|
if (wp.getStatus() <= WorkPlan.STATUS_START) { |
|
|
|
|
// 修改本序
|
|
|
|
|
wp.setFactStartTime(null); |
|
|
|
|
wp.setUnqualifiedQty(0); |
|
|
|
|
wp.setStatus(WorkPlan.STATUS_NO_START); |
|
|
|
|
workPlanMapper.updateById(wp); |
|
|
|
|
WorkPlan frontWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getFrontWpId, wp.getId())); |
|
|
|
|
if (frontWorkPlan != null) { |
|
|
|
|
// 还原上序
|
|
|
|
|
frontWorkPlan.setStatus(WorkPlan.STATUS_WORK_OK); |
|
|
|
|
frontWorkPlan.setFactEndTime(null); |
|
|
|
|
frontWorkPlan.setReceiveMan(null); |
|
|
|
|
workPlanMapper.updateById(frontWorkPlan); |
|
|
|
|
|
|
|
|
|
// 增加入库记录
|
|
|
|
|
PlateAround prPlateAround = new PlateAround(); |
|
|
|
|
prPlateAround.setPaType(PlateAround.BEFORE_PLAT_IN); |
|
|
|
|
prPlateAround.setWpId(frontWorkPlan.getId()); |
|
|
|
|
prPlateAround.setQuantity(frontWorkPlan.getQualifiedQty()); |
|
|
|
|
prPlateAround.setCreateUser(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1); |
|
|
|
|
prPlateAround.setCreateTime(new Date()); |
|
|
|
|
plateAroundMapper.insert(prPlateAround); |
|
|
|
|
// 修改订单的当前序
|
|
|
|
|
wo.setWpId(frontWorkPlan.getId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//转外协或者转厂内审批是,更改车间订单的审批状态为正常
|
|
|
|
|
if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) || WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) { |
|
|
|
|
wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_NORMAL); |
|
|
|
|
List<WorkPlanRun> wprList = workPlanRunMapper.selectList(new LambdaQueryWrapper<WorkPlanRun>() |
|
|
|
|
.eq(WorkPlanRun::getWorId, workOrderRun.getId())); |
|
|
|
|
List<WorkPlan> wpList = new ArrayList<>(); |
|
|
|
|
//转外协业务处理
|
|
|
|
|
if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) { |
|
|
|
|
for (WorkPlanRun wpr : wprList) { |
|
|
|
|
WorkPlan wp1 = workPlanMapper.selectById(wpr.getWpId()); |
|
|
|
|
//如果不是勾选工序不处理
|
|
|
|
|
if (!wpr.getHandle()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
wp1.setMakeTeam(null); |
|
|
|
|
wp1.setSubsidiaryTeam(null); |
|
|
|
|
wp1.setStartTime(LocalDateTime.ofInstant( |
|
|
|
|
wpr.getStartTime().toInstant(), |
|
|
|
|
ZoneId.systemDefault() |
|
|
|
|
)); |
|
|
|
|
wp1.setEndTime(LocalDateTime.ofInstant( |
|
|
|
|
wpr.getEndTime().toInstant(), |
|
|
|
|
ZoneId.systemDefault() |
|
|
|
|
)); |
|
|
|
|
wp1.setOem("1"); |
|
|
|
|
wp1.setCaId(wpr.getCaId()); |
|
|
|
|
wpList.add(wp1); |
|
|
|
|
} |
|
|
|
|
wo.setWorId(workOrderRun.getId()); |
|
|
|
|
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); |
|
|
|
|
|
|
|
|
|
//调用转外协自动分派处理
|
|
|
|
|
if (wpList != null && wpList.size() > 0) { |
|
|
|
|
//判断工序是否存在外协商,如果存在不进行二次分派
|
|
|
|
|
WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId()); |
|
|
|
|
if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) { |
|
|
|
|
//todo 自动分派后续补充
|
|
|
|
|
pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
int days = 0; |
|
|
|
|
wo.setOemOut("0"); |
|
|
|
|
if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) { |
|
|
|
|
wo.setOemType(WorkOrder.OEM_TYPE_SINGLE); |
|
|
|
|
//todo 加工周期(协作)+
|
|
|
|
|
days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HELP, BsBusConfig.BC_NAME_CYCLE_HELP).getBcValue()); |
|
|
|
|
} else { |
|
|
|
|
wo.setOemType(WorkOrder.OEM_TYPE_WHOLE); |
|
|
|
|
//todo 加工周期(外协)+
|
|
|
|
|
days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_OEM, BsBusConfig.BC_NAME_CYCLE_OEM).getBcValue()); |
|
|
|
|
//todo 缺少外协工艺表
|
|
|
|
|
OemAbility oa = null; |
|
|
|
|
if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) { |
|
|
|
|
oa = bsOemAbilityService.findBsOemAbility(wo.getNextBsOemCustomer().getOcId(), |
|
|
|
|
wo.getWorkPlan().getNextWorkPlan().getBsCraftAbility().getCaId()); |
|
|
|
|
} else { |
|
|
|
|
oa = bsOemAbilityService.findBsOemAbility(wo.getWorkPlan().getOemCustomer().getOcId(), |
|
|
|
|
wo.getWorkPlan().getBsCraftAbility().getCaId()); |
|
|
|
|
} |
|
|
|
|
//todo 缺少业务配置表
|
|
|
|
|
prWorkOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true); |
|
|
|
|
} |
|
|
|
|
Date date = DateUtil.plusDays(wo.getSendDownTime(), days); |
|
|
|
|
wo.setPlanEndDate(DateUtil.format(date,DateUtil.PATTERN_DATETIME)); |
|
|
|
|
|
|
|
|
|
//如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前
|
|
|
|
|
if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) { |
|
|
|
|
oemMapper.selectById(wp.getNextWpId()); |
|
|
|
|
WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getId, wp.getNextWpId())); |
|
|
|
|
workOrderRun.setInCustomer(nextWp.getOcId()); |
|
|
|
|
} else { |
|
|
|
|
workOrderRun.setInCustomer(wp.getOcId()); |
|
|
|
|
} |
|
|
|
|
//todo 缺少外协工艺表 更新车间订单主责任单位
|
|
|
|
|
prWorkOrderService.updateHostWorkUnit(wo.getId()); |
|
|
|
|
|
|
|
|
|
//转厂内业务
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
WorkPlan nextWorkPlan; |
|
|
|
|
TeamSet teamSet = null; |
|
|
|
|
for (WorkPlanRun wpr : wprList) { |
|
|
|
|
wp = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getId, wpr.getWpId())); |
|
|
|
|
//如果不是勾选工序不处理
|
|
|
|
|
if (!wpr.getHandle()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getId, wp.getNextWpId())); |
|
|
|
|
BsProcessSetEntity bsProcessSetEntity = processSetMapper.selectOne(new LambdaQueryWrapper<BsProcessSetEntity>() |
|
|
|
|
.eq(BsProcessSetEntity::getId, nextWorkPlan.getPpsId())); |
|
|
|
|
if (nextWorkPlan.getMakeTeam() != null && !"1".equalsIgnoreCase(bsProcessSetEntity.getIsDispatch())) { |
|
|
|
|
teamSet = teamSetMapper.selectOne(new LambdaQueryWrapper<TeamSet>() |
|
|
|
|
.eq(TeamSet::getId, nextWorkPlan.getMakeTeam())); |
|
|
|
|
} |
|
|
|
|
wp.setMakeTeam(teamSet.getId()); |
|
|
|
|
wp.setOem(null); |
|
|
|
|
wp.setStartTime(null); |
|
|
|
|
wp.setUnqualifiedQty(0); |
|
|
|
|
wp.setWorkQty(0d); |
|
|
|
|
wp.setEndTime(null); |
|
|
|
|
wp.setSubsidiaryTeam(null); |
|
|
|
|
wp.setOem("0"); |
|
|
|
|
wp.setCaId(wpr.getCaId()); |
|
|
|
|
wpList.add(wp); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (wpList == null || wpList.size() == 0) { |
|
|
|
|
throw new BusinessException("product.notTurnBackProcess", null); |
|
|
|
|
} |
|
|
|
|
wo.setWorId(workOrderRun.getId()); |
|
|
|
|
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); |
|
|
|
|
//调用转厂内自动分派处理
|
|
|
|
|
if (teamSet == null) { |
|
|
|
|
//调用转外协自动分派处理
|
|
|
|
|
//todo 自动分派后续补充
|
|
|
|
|
pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null); |
|
|
|
|
//周新昊 20241015 增加调用下方方法
|
|
|
|
|
//处理包装工序 并且工艺能力包含 包装 并且加工单位为空的
|
|
|
|
|
//todo 手持移动端数据查询接口类未实现
|
|
|
|
|
pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo); |
|
|
|
|
} else { |
|
|
|
|
PlateAround prPlateAround = new PlateAround(); |
|
|
|
|
prPlateAround.setWpId(wo.getWpId()); |
|
|
|
|
prPlateAround.setOcId(wo.getOcId()); |
|
|
|
|
prPlateAround.setCurStatus(PlateAround.BEFORE_PLAT_IN); |
|
|
|
|
prPlateAround.setQuantity(wo.getMakeQty()); |
|
|
|
|
//todo 创建更新镀前镀后对象班组和供应商未实现
|
|
|
|
|
prPlateAroundService.createPlateAround(workOrderRun.getCreateUser(), prPlateAround, PlateAround.BEFORE_PLAT_IN, 1, true); |
|
|
|
|
} |
|
|
|
|
// 如果主工序班组为空后者外协
|
|
|
|
|
if (wo.getOcId() != null || wo.getTsId() == null) { |
|
|
|
|
wo.setOcId(null); |
|
|
|
|
wo.setTsId(wpList.get(0).getMakeTeam()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
workOrderRun.setInTeam(wo.getTsId()); |
|
|
|
|
if (workOrderRun.getInTeam() == null) { |
|
|
|
|
nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getId, wp.getNextWpId())); |
|
|
|
|
workOrderRun.setInTeam(nextWorkPlan.getMakeTeam()); |
|
|
|
|
wo.setTsId(nextWorkPlan.getMakeTeam()); |
|
|
|
|
} |
|
|
|
|
wo.setOemType(Integer.valueOf("-1")); |
|
|
|
|
//todo 加工周期(热表)+
|
|
|
|
|
int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue()); |
|
|
|
|
Date date = DateUtil.plusDays(wo.getSendDownTime(), days); |
|
|
|
|
wo.setPlanEndDate(DateUtil.format(date,DateUtil.PATTERN_DATETIME)); |
|
|
|
|
workOrderMapper.updateById(wo); |
|
|
|
|
|
|
|
|
|
wo = workOrderMapper.selectById(wo.getId()); |
|
|
|
|
|
|
|
|
|
//todo 缺少业务配置表
|
|
|
|
|
prWorkOrderService.maintainOrder(wo, wo.getMakeTeam().getPlanner(), wo.getMakeTeam().getDispatcher(), workOrderRun, false); |
|
|
|
|
//更新车间订单主责任单位
|
|
|
|
|
//todo 缺少外协工艺表 更新车间订单主责任单位
|
|
|
|
|
prWorkOrderService.updateHostWorkUnit(wo.getId()); |
|
|
|
|
|
|
|
|
|
//todo 关闭erp外协订单,程序调用存储过程
|
|
|
|
|
if (!yo.getManualIncrease()) { |
|
|
|
|
workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo()); |
|
|
|
|
} |
|
|
|
|
//是否存在外协工序
|
|
|
|
|
List<WorkPlan> workPlans = workPlanMapper.selectList(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getOem, "1") |
|
|
|
|
.eq(WorkPlan::getWoId, wo.getId())); |
|
|
|
|
if (null == workPlans || workPlans.size() < 1) { |
|
|
|
|
wo.setCollaborate("0"); |
|
|
|
|
} |
|
|
|
|
// 修改订单业务中心
|
|
|
|
|
nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper<WorkPlan>() |
|
|
|
|
.eq(WorkPlan::getId, wp.getNextWpId())); |
|
|
|
|
if (nextWorkPlan != null && nextWorkPlan.getMakeTeam() != null) { |
|
|
|
|
if (Integer.valueOf(YieldOrderEnum.YIELD_TYPE_1.getCode()).equals(yo.getYieldType())) { |
|
|
|
|
yo.setBusinessType(YieldOrderEnum.BUSINESS_TYPE_RB.getCode()); |
|
|
|
|
} else { |
|
|
|
|
yo.setBusinessType(YieldOrderEnum.BUSINESS_TYPE_SJ.getCode()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (WorkOrderRun.RUN_TYPE_3.equals(workOrderRun.getRunType())) { |
|
|
|
|
//验证同工单下的车间订单
|
|
|
|
|
this.validateSameYield(yo.getId()); |
|
|
|
|
//处理同订单
|
|
|
|
|
this.withYield(yo.getId()); |
|
|
|
|
//生产订单接收
|
|
|
|
|
yo.setReceiveStatus(YieldOrder.CUR_STATUS_NORMAL); |
|
|
|
|
////todo 关闭erp外协订单,程序调用存储过程
|
|
|
|
|
if (!yo.getManualIncrease() && oldOemCustomer != null) { |
|
|
|
|
workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_FAIL); |
|
|
|
|
workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL); |
|
|
|
|
}*/ |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -461,4 +506,22 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl<WorkOrderRunMapper, |
|
|
|
|
// 生成序列号逻辑
|
|
|
|
|
return "FE-" + dateStr + "0001"; // 简化实现
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*protected void validateSameYield(Long yoId) throws BusinessException { |
|
|
|
|
List<WorkOrder> woList = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>() |
|
|
|
|
.eq(WorkOrder::getYoId, yoId)); |
|
|
|
|
for (WorkOrder wo : woList) { |
|
|
|
|
if (WorkOrder.RUN_STATUS_RECEIVE < wo.getRunStatus()) { |
|
|
|
|
throw new BusinessException("product.validateSameYield", new String[]{wo.getWoCode()}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
|
|
|
|
|
/*protected void withYield(Long yoId) { |
|
|
|
|
List<WorkOrder> woList = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>() |
|
|
|
|
.eq(WorkOrder::getYoId, yoId)); |
|
|
|
|
for (WorkOrder wo : woList) { |
|
|
|
|
wo.setRunStatus(WorkOrder.RUN_STATUS_VOIDED); |
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
} |
|
|
|
|
|