diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index bcf0461..8751358 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -74,4 +74,10 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation(value = "BTO工单看板") List orderBoard(MesWorkOrderBoardReqModel workOrderBoardReqModel); + @ApiOperation(value = "根据工单状态改变--生成拉动单") + void doCreateKittingOrder(List workOrderListNew,MesPartPull mesPartPull,MesWorkCenter mesWorkCenter); + + @ApiOperation(value = "根据工单状态改变--关闭拉动但") + void doCloseKittingOrder(MesWorkOrder mesWorkOrder,String userName); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 4bae17e..34011a5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -297,6 +297,9 @@ public class MesWorkOrderService extends BaseMesService implements result.setWorkOrderStatus(bean.getWorkOrderStatus()); //非排序关闭订单 需要关闭kitting doCloseKittingOrder(bean,bean.getModifyUser()); + List list = new ArrayList<>(); + list.add(bean); + doCreateKitting(list,bean.getOrganizeCode()); } @@ -311,7 +314,7 @@ public class MesWorkOrderService extends BaseMesService implements return result; } - private void doCloseKittingOrder(MesWorkOrder mesWorkOrder,String userName){ + public void doCloseKittingOrder(MesWorkOrder mesWorkOrder,String userName){ String organizeCode = mesWorkOrder.getOrganizeCode(); DdlPackBean pullOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkOrderNo(),"workOrderNo",pullOrderPackBean); @@ -782,7 +785,6 @@ public class MesWorkOrderService extends BaseMesService implements } private void doCreateKitting(List mesWorkOrderList,String organizeCode) { - //todo 在工单点击发布时,也需要重新触发拉动单,工单关闭时,也需要关闭拉动单 //1.拉动组获取 -- 根据拉动组类型获取kitting,需要判断是否生成是否生成拉动单开关 DdlPackBean partPullPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_PULL_ORDER_TYPE.KITTING_PULL.getValue(),"pullOrderType", partPullPackBean); @@ -808,10 +810,22 @@ public class MesWorkOrderService extends BaseMesService implements if (CollectionUtils.isEmpty(workOrderList) || CollectionUtils.isEmpty(mesWorkCenters)) { continue; } + //判断当前产线是否需要生成拉动单 + MesWorkCenter mesWorkCenter = mesWorkCenters.get(0); + Integer generateStatus = mesWorkCenter.getGenerateStatus(); + if (generateStatus == null){ + generateStatus = MesExtEnumUtil.GENERATE_STATUS.GENERATE_STATUS_20.getValue(); + } Map> orderMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo)); for (String producePartNoAndTime : orderMap.keySet()) { List workOrderListNew = orderMap.get(producePartNoAndTime); - doCreateKittingOrder(workOrderListNew,mesPartPull,mesWorkCenters.get(0)); + Integer finalGenerateStatus = generateStatus; + //过滤掉不生成拉动单的工单 + workOrderListNew = workOrderListNew.stream().filter(item -> item.getWorkOrderStatus().equals(finalGenerateStatus)).collect(Collectors.toList()); + if (!workOrderListNew.isEmpty()) { + doCreateKittingOrder(workOrderListNew,mesPartPull,mesWorkCenter); + } + } //按成套圆整 } else if (mesPartPull.getRoundMethod() == MesExtEnumUtil.PART_PULL_ROUND_METHOD.ROUND_DOOR_PANELS_NUMBER.getValue()) { @@ -914,7 +928,7 @@ public class MesWorkOrderService extends BaseMesService implements } } - private void doCreateKittingOrder(List workOrderListNew,MesPartPull mesPartPull,MesWorkCenter mesWorkCenter) { + public void doCreateKittingOrder(List workOrderListNew,MesPartPull mesPartPull,MesWorkCenter mesWorkCenter) { String organizeCode = mesWorkCenter.getOrganizeCode(); //1.查询拉动组详情 DdlPackBean pullPartDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -980,6 +994,13 @@ public class MesWorkOrderService extends BaseMesService implements } private void insertPullOrderInfo(MesWorkOrder mesWorkOrder,List bomPullList,MesPartPull mesPartPull,List mesPartPullDetailList,String organizeCode,int i, int roundPackQty){ + //校验当前工单是否已经生成过拉动单,如果已经生成过则不在生成 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkOrderNo(),"workOrderNo", ddlPackBean); + int count = mesPullingOrderInfoRao.findByHqlWhereCount(ddlPackBean); + if (count >0){ + return; + } // 计算所有拉动单的数量,生成拉动单 Map> pullDetailMap = mesPartPullDetailList.stream().filter(item->!StringUtils.isEmpty(item.getPullPartNo())).collect(Collectors.groupingBy(MesPartPullDetail::getPullPartNo)); List pullDetailPartList = mesPartPullDetailList.stream().map(MesPartPullDetail::getPullPartNo).collect(Collectors.toList()); @@ -1323,6 +1344,8 @@ public class MesWorkOrderService extends BaseMesService implements @Override public void doProductReport(MesWorkOrder mesWorkOrder) { + //初始的工单状态 + Integer workOrderStatusInit = mesWorkOrder.getWorkOrderStatus(); MesWorkOrder mesWorkOrderDb = getMesWorkOrder(mesWorkOrder.getWorkOrderNo(),mesWorkOrder.getOrganizeCode()); mesWorkOrderDb.setDescription(mesWorkOrder.getDescription()); //查询物料信息 @@ -1372,6 +1395,14 @@ public class MesWorkOrderService extends BaseMesService implements mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); //更新工单 updateMesWorkOrder(mesWorkOrderDb,(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) ? MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT : MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum()); + + //2025/2/19 状态改变了需要校验是否生成拉动单,是否关闭拉动单 + if (!Objects.equals(mesWorkOrderDb.getWorkOrderStatus(), workOrderStatusInit)){ + doCloseKittingOrder(mesWorkOrderDb,mesWorkOrderDb.getModifyUser()); + List list = new ArrayList<>(); + list.add(mesWorkOrderDb); + doCreateKitting(list,mesWorkOrderDb.getOrganizeCode()); + } //试制单不报工 if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ String sn = getStringList(mesWorkOrder.getOrganizeCode(), AuthUtilExt.getUserName()); @@ -1570,6 +1601,17 @@ public class MesWorkOrderService extends BaseMesService implements //关闭工单 baseRDao.updateByProperties(new String[]{MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME, MesExtConstWords.WORK_ORDER_STATUS, MesExtConstWords.SYSTEM_SYNC_STATUS}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}, ddlPackBean); + + //关闭工单后校验是否生成拉动单,是否关闭拉动单 + List mesWorkOrderListNew = new ArrayList<>(); + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { + MesWorkOrder mesWorkOrderNew = new MesWorkOrder(); + BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderNew); + mesWorkOrderNew.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + mesWorkOrderListNew.add(mesWorkOrderNew); + doCloseKittingOrder(mesWorkOrderNew,userName); + } + doCreateKitting(mesWorkOrderListNew,organizeCode); }