From 433a21440c0c9b22a11921224954839edb776c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B6=9B?= Date: Tue, 10 Mar 2026 20:24:37 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=9B=91=E6=8E=A7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/entity/BsTeamSetEntity.java | 4 +- .../desk/order/pojo/entity/YieldOrder.java | 3 + .../service/IOemCraftAbilityService.java | 9 +- .../impl/OemCraftAbilityServiceImpl.java | 10 + .../dashboard/service/IDsPartService.java | 10 + .../service/impl/DsPartServiceImpl.java | 21 ++ .../produce/controller/PdaLoadController.java | 9 + .../controller/ProduceMonitorController.java | 7 + .../desk/produce/mapper/MacToolUseMapper.xml | 2 +- .../desk/produce/mapper/WorkOrderMapper.java | 4 + .../desk/produce/mapper/WorkOrderMapper.xml | 6 + .../desk/produce/mapper/WorkPlanMapper.java | 5 +- .../desk/produce/mapper/WorkPlanMapper.xml | 68 ++++-- .../desk/produce/service/IPdaLoadService.java | 3 + .../produce/service/IWorkOrderService.java | 16 ++ .../produce/service/IWorkPlanService.java | 2 + .../service/impl/MakeRecServiceImpl.java | 19 +- .../service/impl/PdaLoadServiceImpl.java | 46 ++-- .../service/impl/WorkOrderServiceImpl.java | 199 ++++++++++++++++++ .../service/impl/WorkPlanServiceImpl.java | 5 + .../produce/wrapper/WorkOrderWrapper.java | 2 +- 21 files changed, 397 insertions(+), 53 deletions(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java index 51bf2328..ca7975c1 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java @@ -69,12 +69,12 @@ public class BsTeamSetEntity extends BaseEntity { * 计划员(外键-人员) */ @Schema(description = "计划员(外键-人员)") - private BigDecimal planner; + private Long planner; /** * 调度员(外键-人员) */ @Schema(description = "调度员(外键-人员)") - private BigDecimal dispatcher; + private Long dispatcher; /** * 班组成员 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java index d8b3aa89..6a1261db 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/YieldOrder.java @@ -164,6 +164,9 @@ public class YieldOrder extends BaseEntity { @TableField(value = "PART_VERSION") private String partVersion; + @Schema(description = "工艺级别") + private String rank; + /** * 名称 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IOemCraftAbilityService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IOemCraftAbilityService.java index 7af416a4..10981cb1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IOemCraftAbilityService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IOemCraftAbilityService.java @@ -43,5 +43,12 @@ import java.util.List; */ public interface IOemCraftAbilityService extends BaseService { - + /** + * 根据工艺能力、外协商获取关联信息 + * + * @param ocId 外协商ID + * @param caId 工艺能力ID + * @return + */ + OemCraftAbilityEntity findBsOemAbility(Long ocId, Long caId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/OemCraftAbilityServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/OemCraftAbilityServiceImpl.java index 9954e08a..79db2a78 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/OemCraftAbilityServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/OemCraftAbilityServiceImpl.java @@ -27,6 +27,8 @@ package org.springblade.desk.basic.service.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.desk.basic.excel.CraftAbilityExcel; import org.springblade.desk.basic.mapper.CraftAbilityMapper; @@ -50,4 +52,12 @@ import java.util.List; public class OemCraftAbilityServiceImpl extends BaseServiceImpl implements IOemCraftAbilityService { + @Override + public OemCraftAbilityEntity findBsOemAbility(Long ocId, Long caId) { + List entities = this.list(Wrappers.lambdaQuery(OemCraftAbilityEntity.class).eq(OemCraftAbilityEntity::getOtherId, ocId).eq(OemCraftAbilityEntity::getCraftAbilityId, caId)); + if (CollectionUtils.isNotEmpty(entities)) { + return entities.get(0); + } + return null; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java index bfc67620..f7c92c51 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java @@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.dashboard.excel.DsPartExcel; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity; import org.springblade.desk.dashboard.pojo.vo.*; import java.util.List; @@ -220,4 +221,13 @@ public interface IDsPartService extends BaseService { */ DsPartEntity selectDsPartByPatCode(String partCode); + /** + * 根据零件号、工序ID、版本号、工艺级别查询对应的检验项目 + * @param partCode 零件号 + * @param orders 工序编号 + * @param partVersion 版本号 + * @param rank 工艺级别 + * @return 检验项目列表 + */ + List selectDsProcessProjectByPartNoAndPpsId(String partCode, String orders, String partVersion, String rank); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java index b3daff09..1fe82342 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java @@ -509,4 +509,25 @@ public class DsPartServiceImpl extends BaseServiceImpl selectDsProcessProjectByPartNoAndPpsId(String partCode, String orders, String partVersion, String rank) { + // 根据零件号、版本号查询零件版本信息信息 + DsPartVersionEntity partVersionEntity = partVersionService.selectByPartCodeAndPartVersion(partCode, partVersion); + if (partVersionEntity == null) { + return List.of(); + } + // 根据零件ID、工艺等级查询工艺信息 + DsCraftEntity partCraft = craftService.getPartCraft(partVersionEntity.getPartId(), rank); + if (partCraft == null) { + return List.of(); + } + // 根据工艺ID查询工序信息 + List list = processService.list(Wrappers.lambdaQuery(DsProcessEntity.class).eq(DsProcessEntity::getCraftId, partCraft.getId()).eq(DsProcessEntity::getProcessNo, orders)); + if (CollectionUtils.isEmpty(list)) { + return List.of(); + } + // 根据工序ID查询项目信息 + return processProjectService.selectDsProcessProjectByProcessId(list.get(0).getId()); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java index fe6e2990..a7b29947 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PdaLoadController.java @@ -12,6 +12,7 @@ import org.springblade.desk.device.pojo.vo.RackSetVO; import org.springblade.desk.device.wrapper.RackSetWrapper; import org.springblade.desk.produce.pojo.dto.TurnTypeDTO; import org.springblade.desk.produce.service.IPdaLoadService; +import org.springblade.desk.quality.pojo.entity.InspectionTask; import org.springframework.web.bind.annotation.*; /** @@ -80,4 +81,12 @@ public class PdaLoadController { pdaLoadService.deletedProduceRun(mtnCode); return R.success(); } + + @PostMapping(value = "/saveProCheck") + @ApiOperationSupport(order = 9) + @Operation(summary = "工艺检验保存", description = "") + public R saveProCheck(@RequestBody InspectionTask inspectionTask) { + return R.status(pdaLoadService.saveProCheck(inspectionTask)); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ProduceMonitorController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ProduceMonitorController.java index b2fb535b..c6ba20c8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ProduceMonitorController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/ProduceMonitorController.java @@ -55,4 +55,11 @@ public class ProduceMonitorController extends BladeController { return R.data(workOrderService.generateWorkOrder(id)); } + @PostMapping("/workPlanReceive") + @ApiOperationSupport(order = 5) + @Operation(summary = "工序接收") + public R workPlanReceive(@RequestParam Long wpId) { + return R.data(workOrderService.workPlanReceive(wpId)); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml index 013bfa67..d634b9f1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml @@ -32,7 +32,7 @@ + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java index 97e14134..b044cdbe 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.java @@ -20,7 +20,6 @@ import java.util.List; */ public interface WorkPlanMapper extends BaseMapper { - List selectByWoId(@Param("woId") Long woId); IPage queryWorkPlan(IPage page, String cardNo, List tsIds); @@ -30,4 +29,8 @@ public interface WorkPlanMapper extends BaseMapper { List getProduceMonitorWorkPlanList(Long woId); List loadNotReceived(List tsIds, Long id); + + WorkPlan findMaxHostWorkUnitByWoId(Long id, int i); + + List afterPlaReceive(String cardNo); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml index c1cced3c..68077afa 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanMapper.xml @@ -46,20 +46,24 @@ - + SELECT mwp.ID, + mwp.ORDERS, + mwp.STATUS, + bpe.NAME AS ppsName, + bpe.IS_MAIN AS mainProcess, + bte.TS_NAME AS makeTeam, + bo.OC_NAME AS oemCustomer, + mwp.RECEIVE_MAN AS receiveMan, + mmr.WORKER AS workMan, + mwp.WORK_QTY AS workQty, + mwp.HOUR_QUOTA AS hourQuota, + mwp.PLAN_START_TIME AS planStartTime, + mwp.PLAN_END_TIME AS planEndTime, + mwp.FACT_START_TIME AS factStartTime, + mwp.FACT_END_TIME AS factEndTime FROM MES_WORK_PLAN mwp LEFT JOIN BS_PROCESS_SET bpe ON mwp.PPS_ID = bpe.ID LEFT JOIN BS_TEAM_SET bte ON mwp.MAKE_TEAM = bte.ID @@ -145,5 +149,23 @@ ) AND c.run_status >= 2 AND c.run_status < 15 AND c.id = #{id} + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java index 4597c67a..ad5b9dc9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java @@ -8,6 +8,7 @@ import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkPlan; import org.springblade.desk.produce.pojo.vo.LoadSubOrderVO; import org.springblade.desk.produce.pojo.vo.PdaProRelevantVO; +import org.springblade.desk.quality.pojo.entity.InspectionTask; import java.util.List; @@ -61,4 +62,6 @@ public interface IPdaLoadService extends BaseService { void deletedProduceRun(String mtnCode); public WorkOrder checkPrWorkOrder(String cardNo); + + boolean saveProCheck(InspectionTask inspectionTask); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index 05a69120..0a2580c5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -174,4 +174,20 @@ public interface IWorkOrderService extends BaseService { * @param workPlan 工单计划 */ void getProcessByWp(ProduceMonitorPlanDataVO planDataVO, WorkPlan workPlan); + + /** + *

方法名: workPlanReceive

+ *

方法描述: 工序接收

+ * + * @param wpId 工序id + */ + boolean workPlanReceive(Long wpId); + + /** + *

方法名: updateHostWorkUnit

+ *

方法描述: 更新订单所属部门

+ * + * @param workOrder 订单 + */ + void updateHostWorkUnit(WorkOrder workOrder); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java index 88efd7bb..01f54560 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanService.java @@ -39,4 +39,6 @@ public interface IWorkPlanService extends BaseService { IPage queryWorkPlan(IPage page, String cardNo); List getProduceMonitorWorkPlanList(Long woId); + + WorkPlan findMaxHostWorkUnitByWoId(Long id, int i); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java index 09f41511..7d2ac91d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MakeRecServiceImpl.java @@ -84,22 +84,22 @@ public class MakeRecServiceImpl extends BaseServiceImpl public WorkPlanDto loadCurrentWp(String cardNo) { WorkOrder wo = workOrderMapper.getWorkOrderByCardNo(cardNo, (short) 0); if (wo == null) { - throw new ServiceException("pda.prWorkOrder.absent"); + throw new ServiceException("车间订单不存在!"); } if (!WorkOrder.RUN_STATUS_RECEIVE.equals(wo.getRunStatus())) { - throw new ServiceException("pda.prWorkOrder.runStatus" + wo.getRunStatus()); + throw new ServiceException("车间订单状态为" + wo.getRunStatus()); } //验证当前当前登陆人是否可以填写加工记录 WorkPlan wp = workPlanMapper.selectById(wo.getWpId()); if (!WorkPlan.STATUS_START.equals(wp.getStatus())) { - throw new ServiceException("product.prWorkPlan.workOk"); + throw new ServiceException("当前工序已报工完成!"); } - //this.checkTeamWorkPlan(wp, prWorkPlanService.getTeamId(userInfo.getUserId())); - Boolean isBinging = false; +// this.checkTeamWorkPlan(wp, prWorkPlanService.getTeamId(userInfo.getUserId())); + boolean isBinging = false; // 查询当前工序是否绑定了挂次号 - MacToolUse prMacToolUse = macToolUseService.getOne(Wrappers.lambdaQuery().eq(MacToolUse::getWpId, wp.getId())); - if (prMacToolUse != null && prMacToolUse.getMtnCode() != null) { + long count = macToolUseService.count(Wrappers.lambdaQuery().eq(MacToolUse::getWpId, wp.getId()).isNotNull(MacToolUse::getHangNum)); + if (count > 0) { isBinging = true; } YieldOrder yieldOrder = yieldOrderService.getById(wo.getYoId()); @@ -311,9 +311,8 @@ public class MakeRecServiceImpl extends BaseServiceImpl @Override public List afterPlaReceive(String cardNo) { WorkOrder wo = workOrderMapper.getWorkOrderByCardNo(cardNo, (short) 0); - List wpList = workPlanMapper.selectList(Wrappers.lambdaQuery() - .eq(WorkPlan::getWoId, wo.getId())); - return wpList; + Optional.ofNullable(wo).orElseThrow(() -> new ServiceException("车间订单不存在!")); + return workPlanMapper.afterPlaReceive(wo.getCardNo()); } @Override diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java index cdd47a9c..21040ee8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java @@ -11,6 +11,7 @@ import org.springblade.common.exception.BusinessException; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.desk.basic.pojo.entity.RelTeamSetUser; import org.springblade.desk.basic.service.IRelTeamSetUserService; import org.springblade.desk.dashboard.pojo.entity.*; @@ -36,6 +37,7 @@ import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -52,7 +54,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class PdaLoadServiceImpl extends BaseServiceImpl implements IPdaLoadService { - private final IBsProcedureTeamService bsProcedureTeamService; + private final IBsTeamSetService bsTeamSetService; private final IBsProcessSetService bsProcessSetService; @@ -125,7 +127,7 @@ public class PdaLoadServiceImpl extends BaseServiceImpl processSets = bsProcessSetService.listByIds(List.of(prWorkPlan.getPpsId(), frontWorkPlan.getPpsId())); + // 将processSets根据主键ID转换为Map + Map processSetMap = processSets.stream().collect(Collectors.toMap(BsProcessSetEntity::getId, processSet -> processSet)); + BsTeamSetEntity teamSet = bsTeamSetService.getById(prWorkPlan.getSubsidiaryTeam() != null ? prWorkPlan.getSubsidiaryTeam() : prWorkPlan.getMakeTeam()); + PdaProRelevantVO jsonObj = PdaProRelevantVO.builder() .cardNo(cardNo) .woCode(prWorkOrder.getWoCode()) .batchNo(prWorkOrder.getBatchNo()) .partCode(prWorkOrder.getPartCode()) .partName(part.getPartName()) - .frontOrders(prWorkPlan.getOrders()) - .frontPpsName(part.getCraftWay()) - .wpId(prWorkPlan.getId()).build(); + .frontOrders(frontWorkPlan.getOrders()) + .frontPpsName(processSetMap.get(frontWorkPlan.getPpsId()).getName()) + .wpId(prWorkPlan.getId()) + .makeQty(prWorkOrder.getMakeQty()) + .orders(prWorkPlan.getOrders()) + .ppsName(processSetMap.get(prWorkPlan.getPpsId()).getName()) + .makeTeam(teamSet.getTsName()).build(); return jsonObj; } @@ -179,7 +187,7 @@ public class PdaLoadServiceImpl extends BaseServiceImpl qcProduceRunList = mesQcProduceRunService.list(Wrappers.lambdaQuery(MesQcProduceRunEntity.class) .eq(MesQcProduceRunEntity::getMtnCode, mtnCode)); if (qcProduceRunList != null && qcProduceRunList.size() > 0) { - List< Long> qcProduceRunIds = qcProduceRunList.stream().map(MesQcProduceRunEntity::getId).collect(Collectors.toList()); + List qcProduceRunIds = qcProduceRunList.stream().map(MesQcProduceRunEntity::getId).collect(Collectors.toList()); mesQcProduceRunService.deleteLogic(qcProduceRunIds); } // 删除绑定记录 @@ -241,15 +249,25 @@ public class PdaLoadServiceImpl extends BaseServiceImpl WorkOrder.RUN_STATUS_RECEIVE) { - throw new ServiceException("pda.prWorkOrder.runStatus"+prWorkOrder.getRunStatus()); + throw new ServiceException("车间订单不存在!" + prWorkOrder.getRunStatus()); } return prWorkOrder; } + @Override + public boolean saveProCheck(InspectionTask inspectionTask) { + inspectionTask.setReviewStatus((short) 0); + if (inspectionTask.getId() == null) { + inspectionTask.setCheckUserId(AuthUtil.getUserId()); + inspectionTask.setCheckDate(LocalDateTime.now()); + } + return inspectionTaskService.saveOrUpdate(inspectionTask); + } + private WorkOrder checkWo(String cardNo) { WorkOrder prWorkOrder = workOrderService.getOne(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getCardNo, cardNo)); if (prWorkOrder == null) { - throw new ServiceException("pda.prWorkOrder.absent"+null); + throw new ServiceException("pda.prWorkOrder.absent" + null); } return prWorkOrder; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index 8ae16016..631a2ff5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -19,14 +19,18 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.StringUtil; import org.springblade.desk.basic.constant.FlowConst; +import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity; +import org.springblade.desk.basic.service.IOemCraftAbilityService; import org.springblade.desk.basic.service.IOemService; import org.springblade.desk.basic.service.IProcessAbilityService; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity; import org.springblade.desk.dashboard.service.IBsProcessSetService; import org.springblade.desk.dashboard.service.IBsTeamSetService; import org.springblade.desk.dashboard.service.IDsPartService; +import org.springblade.desk.dashboard.service.IDsProcessProjectService; import org.springblade.desk.device.pojo.entity.EquipmentEntity; import org.springblade.desk.device.pojo.entity.FeiBaSetEntity; import org.springblade.desk.device.pojo.entity.RackSetEntity; @@ -50,6 +54,7 @@ import org.springblade.desk.produce.pojo.vo.*; import org.springblade.desk.produce.service.*; import org.springblade.desk.quality.pojo.entity.*; import org.springblade.desk.quality.service.*; +import org.springblade.desk.util.date.DateUtils; import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.erpdata.feign.IErpDataProduceClient; import org.springblade.system.cache.DictCache; @@ -136,6 +141,10 @@ public class WorkOrderServiceImpl extends BaseServiceImpl selectWorkOrderPage(IPage page, WorkOrderDTO workOrder) { return page.setRecords(baseMapper.selectWorkOrderPage(page, workOrder)); @@ -1449,6 +1458,196 @@ public class WorkOrderServiceImpl extends BaseServiceImpl rsLst = reviewSheetService.getNoCompleteByWcId(checkByWpId.getId()); + if (CollectionUtils.isNotEmpty(rsLst)) { + throw new ServiceException("存在未完成审理单,请处理后再进行接收"); + } + } + // 验证车间订单状态 + if (!WorkOrder.RUN_STATUS_RECEIVE.equals(workOrder.getRunStatus())) { + throw new ServiceException("存在未完成审理单,请处理后再进行接收"); + } + } + + Date newDate = new Date(); + // 完成上序 + this.workPlanEnd(frontWorkPlan, newDate, workOrder.getMakeQty()); + + // 开始本序 + this.workPlanStart(workPlan, newDate, AuthUtil.getUserId(), workOrder); + + return true; + } + + private void workPlanStart(WorkPlan workPlan, Date startDate, Long userId, WorkOrder workOrder) { + if (workPlan == null) { + return; + } + // 开始本序 + workPlan.setFactStartTime(startDate); + workPlan.setStatus(WorkPlan.STATUS_START); + if ("1".equals(workPlan.getOem())) { + workPlan.setStatus(WorkPlan.STATUS_WORK_OK); + } + workPlan.setQualifiedQty(workOrder.getMakeQty()); + workPlan.setReceiveMan(userId); + workPlanService.updateById(workPlan); + + // 修改车间订单当前加工工序 + workOrder.setWpId(workPlan.getId()); + workOrder.setOemType(-1); + + //第一道工序更改车间状态 + log.info("工序接收,当前工序ID:{}", workPlan.getId()); + if (workPlan.getFrontWpId() == null) { + log.info("第一道工序更改车间状态为加工中,车间订单ID:{}", workOrder.getId()); + // 快速将Long转换为List + this.updateStatus(List.of(workPlan.getId()), WorkOrder.RUN_STATUS_RECEIVE, userId, null); + // 如果是返工回来的不验证子件 + if (StringUtils.isBlank(workOrder.getReworkCode())) { +// yieldOrderService.verifyYield(workOrder.getYoId()); + } + } + + YieldOrder yieldOrder = yieldOrderService.getById(workOrder.getYoId()); + + // 根据零件号、工序ID、版本号、工艺级别查询对应的检验项目 + List projects = dsPartService.selectDsProcessProjectByPartNoAndPpsId(workOrder.getPartCode(), workPlan.getOrders(), yieldOrder.getPartVersion(), yieldOrder.getRank()); + if (CollectionUtils.isNotEmpty(projects)) { + // 保存检验任务 + InspectionTask inspectionTask = new InspectionTask(); + inspectionTask.setWpId(workPlan.getId()); + inspectionTaskService.saveOrEdit(inspectionTask, userId); + + // 保存检验项目 + List workPlanItems = new ArrayList<>(); + WorkPlanItem workPlanItem; + for (DsProcessProjectEntity project : projects) { + workPlanItem = new WorkPlanItem(); + workPlanItem.setWpId(workPlan.getId()); + workPlanItem.setItemCode(project.getProjectCode()); + workPlanItem.setItemName(project.getProjectName()); + workPlanItem.setStandardId(Long.valueOf(project.getProjectStandard())); + workPlanItem.setStandardName(project.getProjectStandardName()); + workPlanItem.setHourQuota(project.getProHours()); + workPlanItem.setHourPrepare(project.getPrepareHours()); + workPlanItem.setTaskId(inspectionTask.getId()); + workPlanItem.setItemId(project.getId()); + workPlanItems.add(workPlanItem); + } + workPlanItemService.saveBatch(workPlanItems); + // 修改车间订单为检验中 + workOrder.setRunStatus(WorkOrder.RUN_STATUS_CHECK); + } else { + // 更新调度员 + this.updateHostWorkUnit(workOrder); + } + this.updateById(workOrder); + + if (yieldOrder.getFatherYoId() != null) { + List prWorkOrderList = baseMapper.listByYoId(yieldOrder.getFatherYoId()); + if (CollectionUtils.isNotEmpty(prWorkOrderList)) { + for (WorkOrder order : prWorkOrderList) { + if (StringUtils.isBlank(order.getMesCardNo())) { + String code = this.cardNextCode(); + //验证此编码是否重复 + if (this.getMaxByMesCard(code)) { + code = this.cardNextCode(); + } + order.setMesCardNo(code); + } + } + this.updateBatchById(prWorkOrderList); + } + } + } + + private boolean getMaxByMesCard(String code) { + WorkOrder workOrder = baseMapper.getMaxByMesCard(code); + if (workOrder != null) { + return true; + } + return false; + } + + @Override + public void updateHostWorkUnit(WorkOrder wo) { + Long caId = null; + if (wo != null) { + //查到了代表存在主工序标识,反之则默认当前工序的作业单位 + WorkPlan wp = workPlanService.findMaxHostWorkUnitByWoId(wo.getId(), 1); + if (wp != null) { + wo.setTsId(wp.getMakeTeam()); + wo.setOcId(wp.getOcId()); + } else { + wp = workPlanService.findMaxHostWorkUnitByWoId(wo.getId(), 0); + if (wp != null) { + wo.setTsId(wp.getMakeTeam()); + wo.setOcId(wp.getOcId()); + } + } + //根据规则拿到主工序,如果没有主工序或者主工序没有加工单位,则默认获取当前工序 + if (wp == null || (wp.getMakeTeam() == null && wp.getOcId() == null)) { + wp = workPlanService.getById(wo.getWpId()); + //如果当前工序已经报工完成,则默认获取下道工序的加工单位,反之则获取当前工序的加工作单位 + if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) { + WorkPlan nextWorkPlan = workPlanService.getById(wp.getNextWpId()); + wo.setTsId(nextWorkPlan.getMakeTeam()); + wo.setOcId(nextWorkPlan.getOcId()); + caId = nextWorkPlan.getCaId(); + } else { + wo.setTsId(wp.getMakeTeam()); + wo.setOcId(wp.getOcId()); + caId = wp.getCaId(); + } + } else { + caId = wp.getCaId(); + } + + //如果当前订单的主作业单位不为空,重新赋值一下调度员和计划员 + if (wo.getTsId() != null) { + BsTeamSetEntity bsTeamSet = teamSetService.getById(wo.getTsId()); + if (bsTeamSet != null) { + wo.setPlanner(bsTeamSet.getPlanner()); + wo.setDispatcher(bsTeamSet.getDispatcher()); + } + wo.setTsId(null); + } else if (wo.getOcId() != null) { + OemCraftAbilityEntity oa = oemCraftAbilityService.findBsOemAbility(wo.getOcId(), caId); + if (oa == null) { + throw new ServiceException("外协商【" + wo.getOcId() + "】没有配置对应的工艺能力!!!"); + } + wo.setPlanner(oa.getPlanner()); + wo.setDispatcher(oa.getDispatcher()); + wo.setTsId(null); + } + } + } + + private void workPlanEnd(WorkPlan workPlan, Date newDate, Double makeQty) { + if (workPlan == null) { + return; + } + workPlan.setStatus(WorkPlan.STATUS_COMPLETE); + workPlan.setFactEndTime(newDate); + if (workPlan.getWorkQty() < 1) { + workPlan.setWorkQty(makeQty); + } + workPlan.setHours(BigDecimal.valueOf(DateUtils.differentDaysByMin(workPlan.getFactStartTime(), newDate))); + workPlanService.updateById(workPlan); + } + private void setRbFilePreserveData(List preserveSlotList, List qcProduceRunsList, WorkPlan workPlan, List dsRbFilePreserveSlotList, MacToolUse prMacToolUse) { List dsRbFilePreserveDetailList = null; ProduceMonitorFileSlotVO newDsRbFilePreserveSlot = null; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java index da783499..904285bd 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanServiceImpl.java @@ -244,4 +244,9 @@ public class WorkPlanServiceImpl extends BaseServiceImpl getProduceMonitorWorkPlanList(Long woId) { return baseMapper.getProduceMonitorWorkPlanList(woId); } + + @Override + public WorkPlan findMaxHostWorkUnitByWoId(Long id, int i) { + return baseMapper.findMaxHostWorkUnitByWoId(id, i); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/WorkOrderWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/WorkOrderWrapper.java index 485b2bca..aeaf5fae 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/WorkOrderWrapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/WorkOrderWrapper.java @@ -38,7 +38,7 @@ public class WorkOrderWrapper extends BaseEntityWrapper List workOrderVos = pages.getRecords(); for (WorkOrderVO workOrderVo : workOrderVos) { User user = UserCache.getUser(workOrderVo.getDispatcher()); - workOrderVo.setDispatcherName(user.getRealName()); + workOrderVo.setDispatcherName(user != null ? user.getRealName() : ""); workOrderVo.setRunStatusName(WorkOrderEnum.getName(workOrderVo.getRunStatus())); workOrderVo.setPriorityName(WorkOrder.priorityMap.get(workOrderVo.getPriority())); }