diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/WorkPlanPreserveDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/WorkPlanPreserveDTO.java new file mode 100644 index 00000000..d5d5ec39 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/WorkPlanPreserveDTO.java @@ -0,0 +1,14 @@ +package org.springblade.desk.produce.pojo.dto; + +import lombok.Data; + +/** + * @author litao + */ +@Data +public class WorkPlanPreserveDTO { + + private String memo; + + private Long wpId; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanPreserve.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanPreserve.java new file mode 100644 index 00000000..728013af --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlanPreserve.java @@ -0,0 +1,44 @@ +package org.springblade.desk.produce.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +import java.util.Date; + +/** + * 车间作业计划回退记录 实体类 + * @author litao + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("MES_WORK_PLAN_PRESERVE") +public class WorkPlanPreserve extends BaseEntity { + + @Schema(description = "流程卡号") + private String cardNo; + + @Schema(description = "车间订单号") + private String woCode; + + @Schema(description = "零件号") + private String partCode; + + @Schema(description = "批次号") + private String batchNo; + + @Schema(description = "回退工序") + private String ppsName; + + @Schema(description = "回退工序号") + private String orders; + + @Schema(description = "备注") + private String memo; + + @Schema(description = "修改人") + private String updateName; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/AllWorkPlanVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/AllWorkPlanVO.java new file mode 100644 index 00000000..86b88809 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/AllWorkPlanVO.java @@ -0,0 +1,37 @@ +package org.springblade.desk.produce.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 订单工序试图 视图实体类 + * @author litao + */ +@Data +public class AllWorkPlanVO { + + @Schema(description = "wpId") + private Long wpId; + + @Schema(description = "流程卡号") + private String cardNo; + + @Schema(description = "车间订单号") + private String woCode; + + @Schema(description = "零件号") + private String partCode; + + @Schema(description = "批次号") + private String batchNo; + + @Schema(description = "工序名称") + private String ppsName; + + @Schema(description = "工序号") + private String orders; + + @Schema(description = "提交备注") + private String memo; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java index 0aa584db..94530620 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java @@ -15,14 +15,9 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; -import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO; -import org.springblade.desk.produce.pojo.dto.TaskCompleteDTO; -import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; -import org.springblade.desk.produce.pojo.dto.UploadPlanDto; +import org.springblade.desk.produce.pojo.dto.*; import org.springblade.desk.produce.pojo.entity.*; -import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; -import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; -import org.springblade.desk.produce.pojo.vo.WorkOrderAdjustVO; +import org.springblade.desk.produce.pojo.vo.*; import org.springblade.desk.produce.service.IDisTaskingService; import org.springblade.desk.produce.service.IPdaSaveService; import org.springblade.desk.produce.service.IWorkOrderAdjustService; @@ -176,4 +171,25 @@ public class DisTaskingController extends BladeController { return R.status(workOrderAdjustService.markComplete(Func.toLongList(ids))); } + @GetMapping("/getByCardNoByPlanAll") + @ApiOperationSupport(order = 13) + @Operation(summary = "根据流程卡查询车间作业计划数据(所有)", description = "根据流程卡查询车间作业计划数据(所有)") + public R> getByCardNoByPlanAll(String cardNo) { + return R.data(disTaskingService.getByCardNoByPlanAll(cardNo)); + } + + @PostMapping("/returnThisProcess") + @ApiOperationSupport(order = 14) + @Operation(summary = "订单回退至此工序") + public R returnThisProcess(@RequestBody WorkPlanPreserveDTO workPlanPreserveDTO) { + return R.status(disTaskingService.returnThisProcess(workPlanPreserveDTO)); + } + + @GetMapping("/getWorkPlanPreserve") + @ApiOperationSupport(order = 15) + @Operation(summary = "获取回退记录") + public R> getWorkPlanPreserve(String cardNo) { + return R.data(disTaskingService.getWorkPlanPreserve(cardNo)); + } + } 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 fdc84f3e..7f54f19f 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 @@ -93,4 +93,6 @@ public interface WorkPlanMapper extends BaseMapper { List getWorkOrderProcess(String cardNo); List selectBsSalaryCalculationPage(IPage page, BsSalaryCalculationDTO bsSalaryCalculation); + + List getByCardNoByPlanAll(Long id); } 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 6d2101c6..c74743d0 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 @@ -555,5 +555,21 @@ + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanPreserveMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanPreserveMapper.java new file mode 100644 index 00000000..21aaafa5 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkPlanPreserveMapper.java @@ -0,0 +1,14 @@ +package org.springblade.desk.produce.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.desk.produce.pojo.entity.WorkPlanPreserve; + +/** + * 车间作业计划回退记录 Mapper 接口 + * + * @author BladeX + */ +public interface WorkPlanPreserveMapper extends BaseMapper { + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java index cbb7ec64..99d13b02 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java @@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.produce.pojo.dto.TaskCompleteDTO; import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; +import org.springblade.desk.produce.pojo.dto.WorkPlanPreserveDTO; import org.springblade.desk.produce.pojo.entity.DisTasking; import org.springblade.desk.produce.pojo.entity.MakeRec; +import org.springblade.desk.produce.pojo.entity.WorkPlanPreserve; +import org.springblade.desk.produce.pojo.vo.AllWorkPlanVO; import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; @@ -29,4 +32,10 @@ public interface IDisTaskingService extends BaseService { boolean disTechnician(TaskCompleteDTO taskCompleteDTO); boolean syncDisTasking(boolean isAll); + + List getByCardNoByPlanAll(String cardNo); + + boolean returnThisProcess(WorkPlanPreserveDTO workPlanPreserveDTO); + + List getWorkPlanPreserve(String cardNo); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java index 7257032a..acf68d64 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IHandoverRecordService.java @@ -24,4 +24,6 @@ public interface IHandoverRecordService extends BaseService { String nextCode(String codePattern); boolean rbTransferOrder(); + + void returnHandoverRecord(String hrCode, String partCode, String batchNo); } 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 023c77a8..dc5a06d8 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 @@ -282,4 +282,8 @@ public interface IWorkOrderService extends BaseService { * @return 分配信息 */ Map queryAllocationStatistics(AllocationMessPageDTO dto); + + WorkOrder getWorkOrderByCardNoAll(String cardNo); + + void returnOemErpByWxno(String wxNo); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanPreserveService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanPreserveService.java new file mode 100644 index 00000000..63d3d1aa --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkPlanPreserveService.java @@ -0,0 +1,13 @@ +package org.springblade.desk.produce.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.produce.pojo.entity.WorkPlanPreserve; + +/** + * 车间作业计划回退记录 服务类 + * + * @author BladeX + */ +public interface IWorkPlanPreserveService extends BaseService { + +} 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 045b4957..1ab96b5f 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 @@ -9,6 +9,7 @@ import org.springblade.desk.efficiency.pojo.dto.BsSalaryCalculationDTO; import org.springblade.desk.efficiency.pojo.vo.BsSalaryCalculationVO; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.pojo.vo.AllWorkPlanVO; import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO; import org.springblade.desk.produce.pojo.vo.WorkPlanProVO; import org.springblade.desk.quality.pojo.entity.WorkPlanItem; @@ -61,4 +62,6 @@ public interface IWorkPlanService extends BaseService { List getWorkOrderProcess(String cardNo); IPage selectBsSalaryCalculationPage(IPage page, BsSalaryCalculationDTO bsSalaryCalculation); + + List getByCardNoByPlanAll(Long id); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java index 73bdf54d..f55ad069 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java @@ -1,6 +1,7 @@ package org.springblade.desk.produce.service.impl; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; @@ -10,20 +11,28 @@ import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.desk.dashboard.mapper.BsProcessSetMapper; +import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.entity.DsTaskingEntity; import org.springblade.desk.dashboard.service.IDsTaskingService; +import org.springblade.desk.logistics.pojo.entity.PrWorkOrder; +import org.springblade.desk.order.mapper.YieldOrderMapper; +import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.produce.mapper.DisTaskingMapper; import org.springblade.desk.produce.pojo.dto.TaskCompleteDTO; import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; +import org.springblade.desk.produce.pojo.dto.WorkPlanPreserveDTO; import org.springblade.desk.produce.pojo.entity.*; +import org.springblade.desk.produce.pojo.vo.AllWorkPlanVO; import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; import org.springblade.desk.produce.pojo.vo.WorkInProcessVO; -import org.springblade.desk.produce.service.IDisTaskingService; -import org.springblade.desk.produce.service.IWorkOrderRunService; -import org.springblade.desk.produce.service.IWorkOrderService; -import org.springblade.desk.produce.service.IWorkPlanService; +import org.springblade.desk.produce.service.*; +import org.springblade.desk.quality.pojo.entity.InspectionTask; +import org.springblade.desk.quality.pojo.entity.ReviewSheet; import org.springblade.desk.quality.pojo.entity.WorkPlanItem; +import org.springblade.desk.quality.service.IInspectionTaskService; +import org.springblade.desk.quality.service.IReviewSheetService; import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springblade.system.cache.UserCache; import org.springblade.system.pojo.entity.User; @@ -55,6 +64,22 @@ public class DisTaskingServiceImpl extends BaseServiceImpl disTaskHandle(IPage page, TaskCompleteDTO taskCompleteDTO) { IPage iPage = page.setRecords(baseMapper.disTaskHandle(page, taskCompleteDTO)); @@ -76,9 +101,7 @@ public class DisTaskingServiceImpl extends BaseServiceImpl list = workPlanItemService.list(Wrappers.lambdaQuery(WorkPlanItem.class) - .eq(WorkPlanItem::getWpId, wp.getId()).eq(WorkPlanItem::getCheckResult, 0)); + List list = workPlanItemService.list(Wrappers.lambdaQuery(WorkPlanItem.class).eq(WorkPlanItem::getWpId, wp.getId()).eq(WorkPlanItem::getCheckResult, 0)); if (list != null && !list.isEmpty()) { prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_CHECK); } @@ -159,16 +181,13 @@ public class DisTaskingServiceImpl extends BaseServiceImpl dsTaskingEntities; if (isAll) { // 全量同步 - dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class) - .eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用")); + dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class).eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用")); } else { // 获取上一个小时的开始结束时间 Date startTime = Date.from(getLastHourStart().atZone(ZoneId.systemDefault()).toInstant()); Date endTime = Date.from(getLastHourEnd().atZone(ZoneId.systemDefault()).toInstant()); // 获取30分钟之前到现在的工艺任务分派数据 - dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class) - .eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用") - .between(DsTaskingEntity::getSyncTime, startTime, endTime)); + dsTaskingEntities = dsTaskingService.list(Wrappers.lambdaQuery(DsTaskingEntity.class).eq(DsTaskingEntity::getInProduction, "1").ne(DsTaskingEntity::getWipTake, "继续使用").between(DsTaskingEntity::getSyncTime, startTime, endTime)); } if (CollectionUtils.isEmpty(dsTaskingEntities)) { @@ -176,10 +195,7 @@ public class DisTaskingServiceImpl extends BaseServiceImpl partCodes = dsTaskingEntities.stream() - .map(DsTaskingEntity::getPartCode) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); + Set partCodes = dsTaskingEntities.stream().map(DsTaskingEntity::getPartCode).filter(Objects::nonNull).collect(Collectors.toSet()); if (partCodes.isEmpty()) { return false; @@ -246,13 +262,179 @@ public class DisTaskingServiceImpl extends BaseServiceImpl getByCardNoByPlanAll(String cardNo) { + WorkOrder wo = workOrderService.getWorkOrderByCardNoAll(cardNo); + if (wo == null) { + throw new ServiceException("车间订单不存在!"); + } + return workPlanService.getByCardNoByPlanAll(wo.getId()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean returnThisProcess(WorkPlanPreserveDTO workPlanPreserveDTO) { + WorkPlan prWorkPlan = workPlanService.getById(workPlanPreserveDTO.getWpId()); + List prWorkPlanList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class) + .eq(WorkPlan::getWoId, prWorkPlan.getWoId()).ge(WorkPlan::getOrders, prWorkPlan.getOrders()) + .gt(WorkPlan::getStatus, WorkPlan.STATUS_NO_START).orderByDesc(WorkPlan::getOrders)); + + // 构建操作记录 + WorkPlanPreserve workPlanPreserve = new WorkPlanPreserve(); + workPlanPreserve.setMemo(workPlanPreserveDTO.getMemo()); + workPlanPreserve.setOrders(prWorkPlan.getOrders()); + BsProcessSetEntity processSet = bsProcessSetMapper.selectById(prWorkPlan.getPpsId()); + workPlanPreserve.setPpsName(processSet != null ? processSet.getName() : ""); + if (prWorkPlanList != null && !prWorkPlanList.isEmpty()) { + for (WorkPlan workPlan : prWorkPlanList) { + // 删除本序对应的数据 + this.returnThisProcessSon(workPlan); + // 如果本序是外协需要删除erp外协订单、加工单位、是否外协类型、 并判断上序是否是外协 + this.oemProcess(workPlan); + } + + //修改prWorkOrder + //拿到车间订单 + WorkOrder prWorkOrder = workOrderService.getById(prWorkPlan.getWoId()); + //拿到车间订单的当前工序 + WorkPlan workPlan = workPlanService.getById(prWorkOrder.getWpId()); + //车间订单的入库数清零 + prWorkOrder.setInventoryQty(0d); + // 2025-07-23 线上迁移修改if判断条件 + //如果回退工序的前道工序不为空,将车间订单执行状态改为3,车间订单加工数量改为前工序完成数 + if (prWorkPlan.getFrontWpId() != null) { + WorkPlan frontWp = workPlanService.getById(prWorkPlan.getFrontWpId()); + prWorkOrder.setMakeQty(frontWp.getWorkQty()); + prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_RECEIVE); + } + //如果回退工序的前道工序为空,代表回退至首工序,将车间订单执行状态改为2,车间订单加工数量改为需求数量 + else { + prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_ISSUED); + YieldOrder yieldOrder = yieldOrderMapper.selectById(prWorkOrder.getYoId()); + prWorkOrder.setMakeQty(yieldOrder.getYpQty()); + } + + List prWorkPlanListSmall = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class) + .eq(WorkPlan::getWoId, prWorkPlan.getWoId()).le(WorkPlan::getOrders, workPlan.getOrders()) + .gt(WorkPlan::getStatus, WorkPlan.STATUS_NO_START).orderByDesc(WorkPlan::getOrders)); + double sumScrapQtySmall = 0d; + double sumTestQtySmall = 0; + double sumLossQtySmall = 0; + if (prWorkPlanListSmall != null && !prWorkPlanListSmall.isEmpty()) { + for (WorkPlan workPlanSmall : prWorkPlanListSmall) { + sumScrapQtySmall = sumScrapQtySmall + workPlanSmall.getScrapQty(); + sumTestQtySmall = sumTestQtySmall + workPlanSmall.getTestQty(); + sumLossQtySmall = sumLossQtySmall + workPlanSmall.getLossQty(); + } + } + prWorkOrder.setScrapQty(sumScrapQtySmall); + prWorkOrder.setTestQty(sumTestQtySmall); + prWorkOrder.setLossQty(sumLossQtySmall); + prWorkOrder.setOemType(-1); + workOrderService.updateById(prWorkOrder); + workPlanPreserve.setCardNo(prWorkOrder.getCardNo()); + workPlanPreserve.setWoCode(prWorkOrder.getWoCode()); + workPlanPreserve.setPartCode(prWorkOrder.getPartCode()); + workPlanPreserve.setBatchNo(prWorkOrder.getBatchNo()); + workPlanPreserve.setUpdateName(AuthUtil.getUserName()); +// WorkPlan workPlan1 = workPlanService.getById(prWorkOrder.getWpId()); +// if (workPlan1.getFrontWpId() == null) { +// if (workPlan1.getOcId() == null && workPlan1.getMakeTeam() == null) { +// //调用自动分派处理类 +// pjAutomaticDispatchService.beforePlatingAutomatic(prWorkOrder.getCardNo(), curUserInfo); +// } +// } + } + return workPlanPreserveService.save(workPlanPreserve); + } + + @Override + public List getWorkPlanPreserve(String cardNo) { + return workPlanPreserveService.list(Wrappers.lambdaQuery(WorkPlanPreserve.class).like(WorkPlanPreserve::getCardNo, cardNo).orderByDesc(WorkPlanPreserve::getCreateTime)); + } + + private void oemProcess(WorkPlan workPlan) { + if (workPlan.getOcId() != null) { + workPlan.setOem("1"); + workPlan.setOcId(null); + workPlan.setPlanStartTime(null); + workPlan.setPlanEndTime(null); + workPlanService.updateById(workPlan); + + WorkOrder workOrder = workOrderService.getById(workPlan.getWoId()); + WorkOrderRun workOrderRun = workOrderRunService.getById(workOrder.getWorId()); + workOrderRun.setWoCode(workOrder.getWoCode()); + workOrderRunService.updateById(workOrderRun); + + if (StringUtils.isNotBlank(workPlan.getWxNo())) { + workOrderService.returnOemErpByWxno(workPlan.getWxNo()); + } + //删除前工序镀前镀后出入库记录 + WorkPlan frontWorkPlan1 = workPlanService.getById(workPlan.getFrontWpId()); + if (frontWorkPlan1 != null) { + plateAroundService.remove(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, frontWorkPlan1.getId())); + } + + if (frontWorkPlan1 != null && frontWorkPlan1.getOcId() != null) { + this.returnThisProcessSon(frontWorkPlan1); + // 调用自己 + this.oemProcess(frontWorkPlan1); + } + } + } + + private void returnThisProcessSon(WorkPlan workPlan) { + List handoverRecords = handoverRecordService.list(Wrappers.lambdaQuery(HandoverRecord.class).eq(HandoverRecord::getWoId, workPlan.getWoId())); + if (CollectionUtils.isEmpty(handoverRecords)) { + for (HandoverRecord handoverRecord : handoverRecords) { + if (handoverRecord.getStatus().equals(HandoverRecord.RUN_STATUS_COMPLETE)) { + handoverRecordService.returnHandoverRecord(handoverRecord.getHrCode(), handoverRecord.getPartCode(), handoverRecord.getBatchNo()); + } + } + handoverRecordService.removeBatchByIds(handoverRecords); + } + //删除prPlateAround + plateAroundService.remove(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getWpId, workPlan.getId())); + //清除prWorkPLanItem记录 + workPlanItemService.remove(Wrappers.lambdaQuery(WorkPlanItem.class).eq(WorkPlanItem::getWpId, workPlan.getId())); + //删除qcReviewSheet + reviewSheetService.remove(Wrappers.lambdaQuery(ReviewSheet.class).eq(ReviewSheet::getWpId, workPlan.getId())); + //删除prWorkCheck + inspectionTaskService.remove(Wrappers.lambdaQuery(InspectionTask.class).eq(InspectionTask::getWpId, workPlan.getId())); + //删除prMakeRec + makeRecService.remove(Wrappers.lambdaQuery(MakeRec.class).eq(MakeRec::getWpId, workPlan.getId())); + //修改prworkplan + workPlan.setFactStartTime(null); + workPlan.setFactEndTime(null); + workPlan.setStatus(1); + WorkPlan frontWorkPlan = workPlanService.getById(workPlan.getFrontWpId()); + WorkOrder workOrder = workOrderService.getById(workPlan.getWoId()); + if (frontWorkPlan != null) { + frontWorkPlan.setStatus(3); + frontWorkPlan.setFactEndTime(null); + workOrder.setWpId(frontWorkPlan.getId()); + workPlanService.updateById(frontWorkPlan); + } else { + workOrder.setWpId(workPlan.getId()); + } + workOrderService.updateById(workOrder); + + workPlan.setTestQty(0d); + workPlan.setLossQty(0d); + workPlan.setQualifiedQty(0d); + workPlan.setScrapQty(0d); + workPlan.setUnqualifiedQty(0d); + workPlan.setWorkQty(0d); + workPlan.setReceiveMan(null); + workPlanService.updateById(workPlan); + } + /** * 获取上一小时的开始时间 * 例:当前是 2025-12-29 15:34:22 → 返回 2025-12-29 14:00:00 */ private static LocalDateTime getLastHourStart() { - return LocalDateTime.now() - .minusHours(1) // 减1小时 + return LocalDateTime.now().minusHours(1) // 减1小时 .withMinute(0) // 分归零 .withSecond(0) // 秒归零 .withNano(0); // 纳秒归零 @@ -263,10 +445,6 @@ public class DisTaskingServiceImpl extends BaseServiceImpl byPartCode = erpDataProduceClient.getCustodianByRecDept(partCode, recDept); return byPartCode.getData(); 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 212dc136..f30fd80d 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 @@ -2703,6 +2703,25 @@ public class WorkOrderServiceImpl extends BaseServiceImpl orders = this.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getCardNo, cardNo).le(WorkOrder::getRunStatus, WorkOrder.RUN_STATUS_HANDOVER)); + if (CollectionUtils.isEmpty(orders)) { + String newCardNo = yieldOrderService.getNewCardNo(cardNo); + orders = this.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getCardNo, newCardNo).le(WorkOrder::getRunStatus, WorkOrder.RUN_STATUS_HANDOVER)); + } + if (CollectionUtils.isNotEmpty(orders)) { + workOrder = orders.get(0); + } + return workOrder; + } + + @Override + public void returnOemErpByWxno(String wxNo) { + // todo 外协订单调用接口回退(调用erp) + } + @Override public void launchTest(Map data, BladeUser user) throws Exception { // 提取参数 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanPreserveServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanPreserveServiceImpl.java new file mode 100644 index 00000000..2d3b3b05 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkPlanPreserveServiceImpl.java @@ -0,0 +1,24 @@ +package org.springblade.desk.produce.service.impl; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.produce.mapper.PlateAroundDelLogMapper; +import org.springblade.desk.produce.mapper.WorkPlanPreserveMapper; +import org.springblade.desk.produce.pojo.entity.PlateAroundDelLog; +import org.springblade.desk.produce.pojo.entity.WorkPlanPreserve; +import org.springblade.desk.produce.service.IPlateAroundDelLogService; +import org.springblade.desk.produce.service.IWorkPlanPreserveService; +import org.springframework.stereotype.Service; + +/** + * 车间作业计划回退记录 服务实现类 + * + * @author BladeX + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class WorkPlanPreserveServiceImpl extends BaseServiceImpl implements IWorkPlanPreserveService { + +} 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 f2307cdd..c3ea133b 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 @@ -28,6 +28,7 @@ import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.mapper.PlateAroundMapper; import org.springblade.desk.produce.mapper.WorkPlanMapper; import org.springblade.desk.produce.pojo.entity.*; +import org.springblade.desk.produce.pojo.vo.AllWorkPlanVO; import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO; import org.springblade.desk.produce.pojo.vo.WorkPlanProVO; import org.springblade.desk.produce.pojo.vo.WorkPlanVO; @@ -327,4 +328,9 @@ public class WorkPlanServiceImpl extends BaseServiceImpl selectBsSalaryCalculationPage(IPage page, BsSalaryCalculationDTO bsSalaryCalculation) { return page.setRecords(baseMapper.selectBsSalaryCalculationPage(page, bsSalaryCalculation)); } + + @Override + public List getByCardNoByPlanAll(Long id) { + return baseMapper.getByCardNoByPlanAll(id); + } }