From 0c099b877624664f9533173c44a9c2fe74d09ce8 Mon Sep 17 00:00:00 2001 From: pangyang <475446853@qq.com> Date: Wed, 18 Mar 2026 16:28:04 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=83=A7=E7=BB=93=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=9C=AA=E5=AE=8C=E6=88=90001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../produce/pojo/dto/PrintChildCheck.java | 157 +++++ .../pojo/dto/PrintChildCheckChild.java | 91 +++ .../produce/pojo/entity/DsRbFilePreserve.java | 56 ++ .../desk/produce/pojo/entity/WorkPlan.java | 7 + .../produce/pojo/vo/DsRbFilePreserveVO.java | 18 + .../desk/quality/pojo/entity/RaiseHand.java | 6 + .../pojo/entity/WorkPlanItemDetail.java | 30 + .../quality/pojo/vo/InspectionTaskListVO.java | 2 + .../DsRbFilePreserveController.java | 58 ++ .../mapper/DsRbFilePreserveMapper.java | 19 + .../produce/mapper/DsRbFilePreserveMapper.xml | 11 + .../desk/produce/mapper/WorkPlanMapper.java | 39 +- .../desk/produce/mapper/WorkPlanMapper.xml | 123 +++- .../service/IDsRbFilePreserveService.java | 22 + .../impl/DsRbFilePreserveServiceImpl.java | 40 ++ .../wrapper/DsRbFilePreserveWrapper.java | 37 ++ .../controller/InspectionTaskController.java | 18 + .../quality/mapper/InspectionTaskMapper.xml | 1 + .../service/IInspectionTaskService.java | 3 + .../impl/InspectionTaskServiceImpl.java | 600 +++++++++++++++--- 20 files changed, 1218 insertions(+), 120 deletions(-) create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheck.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheckChild.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/DsRbFilePreserve.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/DsRbFilePreserveVO.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DsRbFilePreserveController.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.xml create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDsRbFilePreserveService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DsRbFilePreserveServiceImpl.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/produce/wrapper/DsRbFilePreserveWrapper.java diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheck.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheck.java new file mode 100644 index 000000000..25c0e10f7 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheck.java @@ -0,0 +1,157 @@ +package org.springblade.desk.produce.pojo.dto; + +import java.util.List; + +public class PrintChildCheck implements java.io.Serializable { + + /** + * @return 序号 + * @Author dxl + * @CreateTime 2022/11/7 10:24 + */ + private String testOrders; + /** + * @return 检验细项 + * @Author dxl + * @CreateTime 2022/11/8 16:22 + */ + private List cccList; + + /** + * @return 抽样数 + * @Author dxl + * @CreateTime 2022/11/7 9:25 + */ + private String checkQty; + /** + * @return 合格,不合格,NA + * @Author dxl + * @CreateTime 2022/11/7 9:25 + */ + private String checkResult; + /** + * @return 姓名 + * @Author dxl + * @CreateTime 2022/11/7 9:25 + */ + private String checkName; + /** + * @return 检验日期 + * @Author dxl + * @CreateTime 2022/11/7 9:25 + */ + private String checkDate; + + /** + * 试验数量 + */ + private String testQty; + /** + * @return 检测项目名称 + */ + private String testName; + /** + * @return 检测项目实验标准 + */ + private String trialStandard; + + /** + * @return 设备编码 + */ + private String deviceCode; + + /** + * @return 检验印章URL + */ + private String imgUrl; + public String getTestOrders() { + return testOrders; + } + + public void setTestOrders(String testOrders) { + this.testOrders = testOrders; + } + + public String getCheckQty() { + return checkQty; + } + + public void setCheckQty(String checkQty) { + this.checkQty = checkQty; + } + + public String getCheckName() { + return checkName; + } + + public void setCheckName(String checkName) { + this.checkName = checkName; + } + + public String getCheckDate() { + return checkDate; + } + + public void setCheckDate(String checkDate) { + this.checkDate = checkDate; + } + + public String getCheckResult() { + return checkResult; + } + + public void setCheckResult(String checkResult) { + this.checkResult = checkResult; + } + + public List getCccList() { + return cccList; + } + + public void setCccList(List cccList) { + this.cccList = cccList; + } + + public String getTestQty() { + return testQty; + } + + public void setTestQty(String testQty) { + this.testQty = testQty; + } + + public String getTestName() { + return testName; + } + + public void setTestName(String testName) { + this.testName = testName; + } + + public String getTrialStandard() { + return trialStandard; + } + + public void setTrialStandard(String trialStandard) { + this.trialStandard = trialStandard; + } + + public String getDeviceCode() { + return deviceCode; + } + + public void setDeviceCode(String deviceCode) { + this.deviceCode = deviceCode; + } + + public PrintChildCheck() { + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheckChild.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheckChild.java new file mode 100644 index 000000000..0b9e15483 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/PrintChildCheckChild.java @@ -0,0 +1,91 @@ +package org.springblade.desk.produce.pojo.dto; + +/** + * @version V1.0 + * @Title: PrintChildCheckChild + * @Author: dxl + * @CreateTime: 2022/11/8 16:18 + */ +public class PrintChildCheckChild implements java.io.Serializable { + + /** + * @return 名称 + * @Author dxl + * @CreateTime 2022/11/7 10:24 + */ + private String testName; + /** + * @return 实验标准 + * @Author dxl + * @CreateTime 2022/11/7 10:34 + */ + private String trialStandard; + /** + * @return 检验值 + * @Author dxl + * @CreateTime 2022/11/7 10:34 + */ + private String checkValue; + /** + * @return 设备量具 + * @Author dxl + * @CreateTime 2022/11/7 10:24 + */ + private String emTools; + /** + * @return 检验项Id + * @Author dxl + * @CreateTime 2022/11/8 17:09 + */ + private Long wpiId; + + public String getTestName() { + return testName; + } + + public void setTestName(String testName) { + this.testName = testName; + } + + public String getEmTools() { + return emTools; + } + + public void setEmTools(String emTools) { + this.emTools = emTools; + } + + public String getTrialStandard() { + return trialStandard; + } + + public void setTrialStandard(String trialStandard) { + this.trialStandard = trialStandard; + } + + public String getCheckValue() { + return checkValue; + } + + public void setCheckValue(String checkValue) { + this.checkValue = checkValue; + } + + public Long getWpiId() { + return wpiId; + } + + public void setWpiId(Long wpiId) { + this.wpiId = wpiId; + } + + public PrintChildCheckChild(String testName, String trialStandard, String checkValue, Long wpiId) { + this.testName = testName; + this.trialStandard = trialStandard; + this.checkValue = checkValue; + this.wpiId = wpiId; + } + + public PrintChildCheckChild() { + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/DsRbFilePreserve.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/DsRbFilePreserve.java new file mode 100644 index 000000000..f0f88c04c --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/DsRbFilePreserve.java @@ -0,0 +1,56 @@ +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.io.Serial; +import java.time.LocalDate; +import java.util.Date; + +/** + * + * @author litao + */ +@Data +@TableName("DS_RB_FILE_PRESERVE") +@Schema(description = "DsRbFilePreserve对象") +@EqualsAndHashCode(callSuper = true) +public class DsRbFilePreserve extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "作业中心") + private Long wcId; + + @Schema(description = "工序") + private Long ppsId; + + @Schema(description = "线上线下") + private String line; + + @Schema(description = "维护时间") + private LocalDate keepTime; + + @Schema(description = "维护人") + private Long keepMan; + + @Schema(description = "名称") + private String name; + + + @Schema(description = "审批状态") + private Short approvalStatus = -1; + + @Schema(description = "状态") + private Short rfpStatus = 1; + + @Schema(description = "升版ID") + private String versionId; + + + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java index 1357d5cff..cdda06f12 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkPlan.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; +import org.springblade.desk.produce.pojo.dto.PrintChildCheck; import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; import org.springblade.desk.quality.pojo.entity.InspectionTask; import org.springblade.desk.quality.pojo.entity.WorkPlanItem; @@ -327,5 +328,11 @@ public class WorkPlan extends BaseEntity { private List qcProduceRunsList; @TableField(exist = false) private Integer totalPreserve = 0; + @TableField(exist = false) + private MesBsAdditionalMessEntity bsAdditionalMess; + @TableField(exist = false) + private List dsRbFilePreserveSlotList; + @TableField(exist = false) + private List printChildCheck; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/DsRbFilePreserveVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/DsRbFilePreserveVO.java new file mode 100644 index 000000000..de4816af0 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/DsRbFilePreserveVO.java @@ -0,0 +1,18 @@ +package org.springblade.desk.produce.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springblade.desk.produce.pojo.entity.DsRbFilePreserve; + +import java.util.Date; + +/** + * 加工记录 视图实体类 + * + * @author BladeX + * @since 2026-02-04 + */ +@Data +public class DsRbFilePreserveVO extends DsRbFilePreserve { + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java index 2b877e52b..42e51c4b4 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java @@ -71,5 +71,11 @@ public class RaiseHand extends BaseEntity { @Schema(description = "免责金额") private BigDecimal amount; + /** + * raisHand文件 + */ + @Schema(description = "文件路径") + private String fileUrl; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/WorkPlanItemDetail.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/WorkPlanItemDetail.java index f692cc79a..de41be207 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/WorkPlanItemDetail.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/WorkPlanItemDetail.java @@ -3,10 +3,12 @@ */ package org.springblade.desk.quality.pojo.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.mp.base.BaseEntity; import java.io.Serial; @@ -149,4 +151,32 @@ public class WorkPlanItemDetail extends BaseEntity { */ @Schema(description = "实际[量具]id") private Long actMtId; + + + @TableField(exist = false) + private String trialItem; + @TableField(exist = false) + private String trialStandard; + @TableField(exist = false) + private Long wpiId; + + + public String getGaugeValueNotNUll() { + StringBuffer sb = new StringBuffer(); + + if(StringUtils.isNotBlank(this.gaugeValue2) && this.gaugeValue6 != "/"){ + sb.append(this.gaugeValue1+"/"+this.gaugeValue2+"/"); + + } + + if(StringUtils.isNotBlank(this.gaugeValue4) && this.gaugeValue4 != "/"){ + sb.append(this.gaugeValue3+"/"+this.gaugeValue4+"/"); + + } + if(StringUtils.isNotBlank(this.gaugeValue6) && this.gaugeValue6 != "/"){ + sb.append(this.gaugeValue5+"/"+this.gaugeValue6+"/"); + + } + return sb.toString(); + } } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskListVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskListVO.java index 3db55df92..ff1795f4d 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskListVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/InspectionTaskListVO.java @@ -123,4 +123,6 @@ public class InspectionTaskListVO extends InspectionTask { private String ppsName; + private Integer yieldType; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DsRbFilePreserveController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DsRbFilePreserveController.java new file mode 100644 index 000000000..8cfb68a54 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DsRbFilePreserveController.java @@ -0,0 +1,58 @@ +package org.springblade.desk.produce.controller; + +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springblade.common.utils.CommonUtil; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; +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.entity.*; +import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; +import org.springblade.desk.produce.pojo.vo.DsRbFilePreserveVO; +import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; +import org.springblade.desk.produce.service.IDisTaskingService; +import org.springblade.desk.produce.service.IDsRbFilePreserveService; +import org.springblade.desk.produce.service.IPdaSaveService; +import org.springblade.desk.produce.service.IWorkPlanLogService; +import org.springblade.system.cache.UserCache; +import org.springblade.system.pojo.entity.User; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * + * + * @author litao + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/DisTaskingController") +public class DsRbFilePreserveController extends BladeController { + + private final IDsRbFilePreserveService dsRbFilePreserveService; + + + + @GetMapping("/page") + @ApiOperationSupport(order = 1) + @Operation(summary = "调度任务分派", description = "传入taskCompleteDTO") + public R> disTaskHandle(DsRbFilePreserve taskCompleteDTO, Query query) { + return R.data(null); + } + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.java new file mode 100644 index 000000000..9be78d253 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.java @@ -0,0 +1,19 @@ +package org.springblade.desk.produce.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.desk.produce.pojo.entity.DsRbFilePreserve; +import org.springblade.desk.produce.pojo.entity.MacToolUse; +import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity; +import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; + +import java.util.List; + +/** + * + * @author BladeX + */ +public interface DsRbFilePreserveMapper extends BaseMapper { + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.xml new file mode 100644 index 000000000..8e3fe10de --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/DsRbFilePreserveMapper.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + 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 a1b2c26b4..e0e6e6327 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 @@ -2,14 +2,16 @@ package org.springblade.desk.produce.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import org.springblade.desk.dashboard.pojo.entity.DsPartRelationEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartSub; import org.springblade.desk.produce.pojo.dto.MesRbFilePreserveDetailDTO; -import org.springblade.desk.produce.pojo.entity.MacToolUse; -import org.springblade.desk.produce.pojo.entity.MakeRec; -import org.springblade.desk.produce.pojo.entity.MesQcProduceRunEntity; -import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.vo.ProduceMonitorSlotListVO; import org.springblade.desk.produce.pojo.vo.ProduceMonitorWorkPlanVO; import org.springblade.desk.produce.pojo.vo.WorkPlanLoadVO; +import org.springblade.desk.quality.pojo.entity.ReviewSheet; +import org.springblade.desk.quality.pojo.entity.WorkPlanItem; +import org.springblade.desk.quality.pojo.entity.WorkPlanItemDetail; import org.springblade.scheduling.pojo.entity.WorkPlanEntity; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.desk.produce.pojo.vo.WorkPlanVO; @@ -44,15 +46,38 @@ public interface WorkPlanMapper extends BaseMapper { MesQcProduceRunEntity getBoxInfo(Long wpId); List listSlotInfoGr (Long wpId, Boolean aTrue); - List listSlotInfo (Long wpId,Boolean aTrue); + List listSlotInfoList (Long wpId,Boolean aTrue); List listMacToolUse(Long wpId,Boolean aTrue); MakeRec getByWpId(Long wpId); - Object[] getConcatMrByWpId(Long wpId); +// Object[] getConcatMrByWpId(Long wpId); + WorkPlan getConcatMrByWpId(Long wpId); List listPrByWpIdIndex(Long wpId, Integer index,boolean aTrue); List getDataByWpIdAndIndexList(Long wpId, String indexNum); List listPrByWpIdIndexAndMtnCode(Long wpId, Integer indexNum,String mtnCode); - List getBoxInfoByWpIdMtnCode(Long wpId); + List getBoxInfoByWpIdMtnCodeList(Long wpId); List getByRfpsId(Long rfpsId); MacToolUse getHangNumIsNull(Long wpId); + MacToolUse getDataByWpIdAndIndex(Long wpId, String numberIndex); + List getDataByWcIdAndPpsId(Long wcId, Long ppsId,boolean aTrue); + List getByRfpId(Long rfpId); +// MesQcProduceRunEntity getBoxInfoByWpIdMtnCode(Long wpId); + + MesBsAdditionalMessEntity getDataByOneData(String mtnCode,Short indexNum); + + List findFatherByYoIdMes(Long yoId); + + List listByWoIdAllMes(Long woId); + + List listSjSlotInfoMes(Long wpId, Boolean aTrue); + List listByWpIdMes(Long wpId); + List findCubByYoIdMes(Long yoId); + List listByPartCodeNew(String partCode, Short indexNum); + List findByPartCodeAndMemoMes(String partCode, String memo); + DsPartSub getByPartCodeAndSubCodeMes(String partCode, String subCode); + String getCheckManByNewErpMes(String userName); + + List listByWpiIdMes(Long wpiId); + + List getQcReviewSheetListMes(String partCode,String batchNo); } 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 e97988a1a..c9d36bb85 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 @@ -97,7 +97,7 @@ - select a.PART_CODE, a.BATCH_NO, a.WORK_QTY, a.area, a.sumArea, a.MTN_CODE, a.prod_ident,a.wo_code,a.material,a.yield_type from ( select d.PART_CODE, c.BATCH_NO, b.WORK_QTY, b.WORK_QTY*d.PO_AREA as area, @@ -122,7 +122,7 @@ select * from MES_MAKE_REC a - where a.wpId= #{wpId} + where a.wp_id= #{wpId} order by a.ID desc - + select * from MES_WORK_ORDER a left join MES_YIELD_ORDER b on a.YO_ID = b.ID where b.FATHER_YO_ID = #{yoId} + + + + + + + + + + + + + + + + + @@ -147,7 +187,7 @@ and b.work_slot != '烘箱' - order by mtn_code, b.pr_id + order by mtn_code, b.id - + select a.PART_CODE, a.BATCH_NO, a.WORK_QTY as qua, a.area, a.sumArea as totalArea,a.MTN_CODE, a.prod_ident,a.wo_code,a.material,a.yield_type + from ( + select d.PART_CODE, c.BATCH_NO, b.WORK_QTY, b.WORK_QTY*d.PO_AREA as area, + sum(b.WORK_QTY*d.PO_AREA) over() as sumArea, + a.MTN_CODE, d.prod_ident,c.wo_code,f.material,d.yield_type from MES_MAC_TOOL_USE a + inner join MES_WORK_PLAN b on a.WP_ID = b.WP_ID + inner join MES_WORK_ORDER c on b.WO_ID = c.ID + inner join MES_YIELD_ORDER d on c.YO_ID = d.ID + inner join ds_part f on d.part_code = f.part_code + where a.MTN_CODE in( + select a.MTN_CODE from MES_MAC_TOOL_USE a + left join DE_EQUIPMENT_CARD b on a.EQUIPMENT_CARD = b.ID + where a.WP_ID = #{wpId} + + and b.CATEGORYS = '产线设备' + + + and (b.CATEGORYS not like '%烘箱%' or b.CATEGORYS is null ) + + ) and a.mtu_index = '2' + )a group by a.PART_CODE, a.BATCH_NO, a.WORK_QTY, a.area, a.sumArea, + a.MTN_CODE, a.prod_ident,a.wo_code,a.material,a.yield_type + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartVersionMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartVersionMapper.java new file mode 100644 index 000000000..34bae5bd6 --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartVersionMapper.java @@ -0,0 +1,41 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.scheduling.scheduling.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity; + +/** + * 零件信息表 Mapper 接口 + * + * @author BladeX + * @since 2025-11-12 + */ +public interface PartVersionMapper extends BaseMapper { + + + +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartVersionMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartVersionMapper.xml new file mode 100644 index 000000000..b8011b87b --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartVersionMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPartService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPartService.java index 8905fe6eb..2a71a106c 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPartService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPartService.java @@ -28,6 +28,7 @@ package org.springblade.scheduling.scheduling.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity; import org.springblade.scheduling.pojo.entity.PartEntity; import org.springblade.scheduling.scheduling.excel.PartExcel; import org.springblade.scheduling.scheduling.vo.PartVO; @@ -59,6 +60,6 @@ public interface IPartService extends BaseService { */ List export(Wrapper queryWrapper); - List selectChildPart(PartEntity part); + List selectChildPart(DsPartVersionEntity partVersion); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPartVersionService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPartVersionService.java new file mode 100644 index 000000000..b7451cc60 --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPartVersionService.java @@ -0,0 +1,42 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.scheduling.scheduling.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity; + +import java.util.List; + +/** + * 零件版本信息表 服务类 + * + * @author BladeX + * @since 2025-11-12 + */ +public interface IPartVersionService extends BaseService { + + +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java index 74d77890c..a67d27efd 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java @@ -30,21 +30,25 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.fasterxml.jackson.core.type.TypeReference; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.scheduling.pojo.entity.EquipAbilityEntity; import org.springblade.scheduling.pojo.entity.EquipResourceEntity; import org.springblade.scheduling.scheduling.excel.EquipResourceExcel; import org.springblade.scheduling.scheduling.mapper.EquipResourceMapper; import org.springblade.scheduling.scheduling.service.IEquipAbilityService; import org.springblade.scheduling.scheduling.service.IEquipResourceService; +import org.springblade.scheduling.scheduling.vo.EquipAbilityVO; import org.springblade.scheduling.scheduling.vo.EquipResourceVO; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -92,6 +96,9 @@ public class EquipResourceServiceImpl extends BaseServiceImpl list = this.list(wrapper); if(CollectionUtils.isEmpty(list)){ generateData(today,equipAbility); @@ -129,17 +136,24 @@ public class EquipResourceServiceImpl extends BaseServiceImpl equipAbilityList = equipAbilityService.list(wrapper); if(CollectionUtils.isNotEmpty(equipAbilityList)){ if(equipAbility.getWorkCenterId() != null && equipAbility.getCraftId() != null && StringUtils.isNotBlank(equipAbility.getEquipCode())){ - List list = this.list(Wrappers.lambdaQuery() - .eq(EquipResourceEntity::getWorkCenterId,equipAbility.getWorkCenterId()) + LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); + wrapper2.eq(EquipResourceEntity::getWorkCenterId,equipAbility.getWorkCenterId()) .eq(EquipResourceEntity::getCraftId,equipAbility.getCraftId()) .eq(EquipResourceEntity::getEquipCode,equipAbility.getEquipCode()) - .eq(EquipResourceEntity::getDateTime,day)); + .eq(EquipResourceEntity::getDateTime,day); + if(equipAbility.getProcessId() != null){ + wrapper2.eq(EquipResourceEntity::getProcessId,equipAbility.getProcessId()); + } + List list = this.list(wrapper2); if(CollectionUtils.isNotEmpty(list)){ list.forEach(item -> baseMapper.deleteById(item.getId())); } @@ -151,61 +165,57 @@ public class EquipResourceServiceImpl extends BaseServiceImpl> teamIdList = baseMapper.selectTeamByWorkCenter(equipAbility.getWorkCenterId()); - //0-产线设备 1-普通设备 - if("0".equals(equipAbility.getEquipType())){ - //产线设备根据轮询间隔生成数据,根据轮询间隔判断一天要分成多少段 - int interval = equipAbility.getInterval() == null ? 60 : Integer.parseInt(equipAbility.getInterval().toString()); // 默认60分钟 - int totalMinutes = 24 * 60; // 一天总分钟数 - int totalCount = totalMinutes / interval; // 生成条数 - List resourceList = new ArrayList<>(); - for (int i = 0; i < totalCount; i++) { - LocalDateTime startTime = startOfDay.plusMinutes(i * interval); - LocalDateTime endTime = startTime.plusMinutes(interval); - EquipResourceEntity equipResource = new EquipResourceEntity(); - equipResource.setDateTime(day); - equipResource.setEquipCode(equipAbility.getEquipCode()); - equipResource.setEquipName(equipAbility.getEquipName()); - equipResource.setCraftId(equipAbility.getCraftId().toString()); - equipResource.setCraftName(equipAbility.getCraftName()); - equipResource.setPeriod(startTime.format(timeFormatter) + "-" + endTime.format(timeFormatter)); - equipResource.setTotalCapacity(equipAbility.getStandardProcessAbility()); - equipResource.setRestCapacity(equipAbility.getStandardProcessAbility()); - equipResource.setStartTime(startTime); - equipResource.setEndTime(endTime); - equipResource.setEquipOrder(equipAbility.getEquipOrder()); - equipResource.setStandardTime(equipAbility.getStandardTime()); - equipResource.setIsUsed("0"); - equipResource.setEquipType(equipAbility.getEquipType()); - equipResource.setWorkCenterId(equipAbility.getWorkCenterId()); + int interval = equipAbility.getInterval() == null ? 60 : Integer.parseInt(equipAbility.getInterval().toString()); // 默认60分钟 + int totalMinutes = 24 * 60; // 一天总分钟数 + int totalCount = totalMinutes / interval; // 生成条数 + List resourceList = new ArrayList<>(); + for (int i = 0; i < totalCount; i++) { + if(equipAbility.getPartType() != 0){ + List voList = JsonUtil.readValue(equipAbility.getStandardProcessAbility(), new TypeReference>() {}); + for(EquipAbilityVO vo : voList){ + LocalDateTime startTime = startOfDay.plusMinutes(i * interval); + //0-产线设备 1-普通设备 + LocalDateTime endTime = startTime.plusMinutes("0".equals(equipAbility.getEquipType()) ? interval : equipAbility.getStandardTime().longValue()); + EquipResourceEntity equipResource = new EquipResourceEntity(); + equipResource.setDateTime(day); + equipResource.setEquipCode(equipAbility.getEquipCode()); + equipResource.setEquipName(equipAbility.getEquipName()); + equipResource.setCraftId(equipAbility.getCraftId().toString()); + equipResource.setCraftName(equipAbility.getCraftName()); + equipResource.setPeriod(startTime.format(timeFormatter) + "-" + endTime.format(timeFormatter)); + equipResource.setTotalCapacity(BigDecimal.valueOf(Integer.parseInt(vo.getStandardProcessAbility()))); + equipResource.setRestCapacity(BigDecimal.valueOf(Integer.parseInt(vo.getStandardProcessAbility()))); + equipResource.setStartTime(startTime); + equipResource.setEndTime(endTime); + equipResource.setEquipOrder(equipAbility.getEquipOrder()); + equipResource.setStandardTime(equipAbility.getStandardTime()); + equipResource.setIsUsed("0"); + equipResource.setEquipType(equipAbility.getEquipType()); + equipResource.setWorkCenterId(equipAbility.getWorkCenterId()); + equipResource.setProcessId(equipAbility.getProcessId()); + equipResource.setProcessName(equipAbility.getProcessName()); + equipResource.setStartNum(vo.getStartNum()); + equipResource.setEndNum(vo.getEndNum()); - Long teamId = null; - for(Map map : teamIdList){ + Long teamId = null; + for(Map map : teamIdList){ - LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); - LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); + LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); + LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); + + if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ + teamId = Long.parseLong(map.get("teamId").toString()); + } - if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ - teamId = Long.parseLong(map.get("teamId").toString()); } + equipResource.setTeamId(teamId); + resourceList.add(equipResource); } - equipResource.setTeamId(teamId); - resourceList.add(equipResource); - - } - if(CollectionUtils.isNotEmpty(resourceList)){ - this.saveBatch(resourceList); - } - }else{ - //普通设备每30分钟间隔生成数据 - int interval = equipAbility.getInterval() == null ? 60 : Integer.parseInt(equipAbility.getInterval().toString()); - int totalMinutes = 24 * 60; // 一天总分钟数 - int totalCount = totalMinutes / interval; // 生成条数 - List resourceList = new ArrayList<>(); - for (int i = 0; i < totalCount; i++) { + }else{ LocalDateTime startTime = startOfDay.plusMinutes(i * interval); - LocalDateTime endTime = startTime.plusMinutes(equipAbility.getStandardTime().longValue()); + LocalDateTime endTime = startTime.plusMinutes(interval); EquipResourceEntity equipResource = new EquipResourceEntity(); equipResource.setDateTime(day); equipResource.setEquipCode(equipAbility.getEquipCode()); @@ -213,8 +223,8 @@ public class EquipResourceServiceImpl extends BaseServiceImpl map : teamIdList){ - - LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ teamId = Long.parseLong(map.get("teamId").toString()); } + } equipResource.setTeamId(teamId); resourceList.add(equipResource); - - } - if(CollectionUtils.isNotEmpty(resourceList)){ - this.saveBatch(resourceList); } + + + } + if(CollectionUtils.isNotEmpty(resourceList)){ + this.saveBatch(resourceList); } } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PartServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PartServiceImpl.java index 782efe476..8ac150f7b 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PartServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PartServiceImpl.java @@ -25,15 +25,17 @@ */ package org.springblade.scheduling.scheduling.service.impl; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity; import org.springblade.scheduling.pojo.entity.PartEntity; import org.springblade.scheduling.scheduling.excel.PartExcel; import org.springblade.scheduling.scheduling.mapper.PartMapper; import org.springblade.scheduling.scheduling.service.IPartService; import org.springblade.scheduling.scheduling.vo.PartVO; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.mp.base.BaseServiceImpl; + import java.util.List; /** @@ -61,8 +63,8 @@ public class PartServiceImpl extends BaseServiceImpl imp } @Override - public List selectChildPart(PartEntity part) { - return baseMapper.selectChildPart(part); + public List selectChildPart(DsPartVersionEntity partVersion) { + return baseMapper.selectChildPart(partVersion); } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PartsVersionServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PartsVersionServiceImpl.java new file mode 100644 index 000000000..512ece103 --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PartsVersionServiceImpl.java @@ -0,0 +1,47 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.scheduling.scheduling.service.impl; + +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity; +import org.springblade.scheduling.scheduling.mapper.PartVersionMapper; +import org.springblade.scheduling.scheduling.service.IPartVersionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 相似零件表 服务实现类 + * + * @author BladeX + * @since 2025-11-21 + */ +@Service +public class PartsVersionServiceImpl extends BaseServiceImpl implements IPartVersionService { + + @Autowired + PartVersionMapper partVersionMapper; + +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java index b7547a405..fb41bdc94 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java @@ -47,7 +47,10 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; /** * 工艺能力表 服务实现类 @@ -84,7 +87,7 @@ public class PersonResourceServiceImpl extends BaseServiceImpl> teamIdList = baseMapper.selectTeamByWorkCenter(personAbility.getWorkCenterId()); List resourceList = new ArrayList<>(); - //普通设备每30分钟间隔生成数据 - /*int interval = 30; - int totalMinutes = 24 * 60; // 一天总分钟数 - int totalCount = totalMinutes / interval; // 生成条数 - - for (int i = 0; i < totalCount; i++) { - LocalDateTime startTime = startOfDay.plusMinutes(i * interval); - LocalDateTime endTime = startTime.plusMinutes(30); - PersonResourceEntity personResource = new PersonResourceEntity(); - personResource.setDateTime(day); - personResource.setCraftId(personAbility.getCraftId()); - personResource.setCraftName(personAbility.getCraftName()); - personResource.setPeriod(startTime.format(timeFormatter) + "-" + endTime.format(timeFormatter)); - personResource.setStartTime(startTime); - personResource.setEndTime(endTime); - personResource.setIsUsed("0"); - - Long teamId = null; - for(Map map : teamIdList){ - - - LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); - LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); - - if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ - teamId = Long.parseLong(map.get("teamId").toString()); - } - } - personResource.setTeamId(teamId); - resourceList.add(personResource); - }*/ for(Map map : teamIdList){ LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 40792205f..2e9335b64 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -28,10 +28,12 @@ package org.springblade.scheduling.scheduling.service.impl; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.fasterxml.jackson.core.type.TypeReference; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -39,16 +41,21 @@ import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.desk.dashboard.constant.DsPartConstant; +import org.springblade.desk.dashboard.pojo.entity.DsPartVersionEntity; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.scheduling.pojo.entity.*; +import org.springblade.scheduling.pojo.enums.WorkOrderEnum; +import org.springblade.scheduling.pojo.vo.WorkOrderVO; import org.springblade.scheduling.scheduling.dto.WorkOrderDto; import org.springblade.scheduling.scheduling.excel.SchedulingBoardExcel; import org.springblade.scheduling.scheduling.excel.WorkOrderExcel; import org.springblade.scheduling.scheduling.mapper.WorkOrderMapper; import org.springblade.scheduling.scheduling.service.*; +import org.springblade.scheduling.scheduling.vo.PersonAbilityVO; import org.springblade.scheduling.scheduling.vo.SameTroughVO; -import org.springblade.scheduling.pojo.vo.WorkOrderVO; import org.springblade.scheduling.scheduling.vo.WorkPlanVO; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -94,6 +101,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list = yieldOrderService.list(Wrappers.lambdaQuery() - .in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode()) + .in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode(),YieldOrderEnum.STATUS_OUTSOURCING_WAITING.getCode()) .isNotNull(YieldOrderEntity::getWorkCenterId) .isNotNull(YieldOrderEntity::getReleaseDate) .isNotNull(YieldOrderEntity::getDemandDate)); @@ -164,12 +173,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpllambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); + list = yieldOrderService.list(Wrappers.lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode(),YieldOrderEnum.STATUS_OUTSOURCING_WAITING.getCode()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); //初始化人员能力 List personAbilityEntityList = personAbilityService.list(Wrappers.lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId)); Map personAbilityMap = new HashMap<>(); personAbilityEntityList.forEach(personAbility -> { - personAbilityMap.put(personAbility.getWorkCenterId() + "-" + personAbility.getProcessId() + "-" + personAbility.getCraftId(), personAbility); + personAbilityMap.put(personAbility.getWorkCenterId() + "-" + personAbility.getCraftId() + "-" + personAbility.getProcessId(), personAbility); }); //初始化主生产者 List mainProducerList = mainProducerService.list(Wrappers.lambdaQuery().isNotNull(MainProducerEntity::getProcessId)); @@ -400,13 +409,30 @@ public class WorkOrderServiceImpl extends BaseServiceImpl workCenterMap, Map craftAbilityMap) { List workOrderList = new ArrayList<>(); + list = mergeYieldOrderList(list); + LocalDateTime localDateTime = LocalDateTime.now(); for (YieldOrderEntity order : list) { try { + DsPartVersionEntity partVersion = partVersionService.getOne(Wrappers.lambdaQuery().eq(DsPartVersionEntity::getPartCode,order.getPartCode()).eq(DsPartVersionEntity::getPartVersion,order.getPartVersion())); + if(partVersion == null){ + order.setErrorInfo("订单:"+order.getYoCode()+"未查询到零件号:" + order.getPartCode() +"的版本号:"+order.getPartVersion()+"的对应信息"); + order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); + yieldOrderService.updateById(order); + continue; + } + PartEntity part = partService.getById(partVersion.getPartId()); //是否可以排产 Boolean isSchecuding = true; List workPlanList = new ArrayList<>(); //查询所有工序 List craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId, 27).orderByAsc(YieldOrderCraftEntity::getProcessNo)); + //如果是外协回来的订单 + if(order.getStatus() == YieldOrderEnum.STATUS_OUTSOURCING_WAITING.getCode()){ + WorkOrderEntity oldWorkOrder = this.getOne(Wrappers.lambdaQuery().eq(WorkOrderEntity::getYoId,order.getId())); + List oldWorkPlanList = workPlanService.list(Wrappers.lambdaQuery().eq(WorkPlanEntity::getWoId,oldWorkOrder.getId())); + List ppsIds = oldWorkPlanList.stream().map(WorkPlanEntity::getPpsId).collect(Collectors.toList()); + craftList = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraftEntity::getYoId, order.getId()).ne(YieldOrderCraftEntity::getCaId, 27).notIn(YieldOrderCraftEntity::getPpsId,ppsIds).orderByAsc(YieldOrderCraftEntity::getProcessNo)); + } //过滤非外协工序 List craftList1 = craftList.stream().filter(item -> item.getIsOutsource() == false).collect(Collectors.toList()); List workCenterList = craftList1.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); @@ -430,30 +456,19 @@ public class WorkOrderServiceImpl extends BaseServiceImpl 0 ? prevProcessEnd : workPlanList.get(workPlanList.size() - 1).getPlanEndTime(); } - //处理外协工序,外协可能多个工序连续的,共享开始结束时间 - Map> outSourceMap = craftList.stream().filter(item -> item.getIsOutsource() == true).collect(Collectors.groupingBy(YieldOrderCraftEntity::getOcId)); - Map ppsIdMap = new HashMap<>(); - for (Map.Entry> entry : outSourceMap.entrySet()) { - String ppsIdStr = entry.getValue().stream() - .map(entity -> String.valueOf(entity.getPpsId())) // long → String - // 等价写法:.map(entity -> Long.toString(entity.getPpsId())) - .collect(Collectors.joining(",")); // 逗号分隔拼接 - ppsIdMap.put(entry.getKey(), ppsIdStr); - } + for (int i = 0; i < craftList.size(); i++) { YieldOrderCraftEntity craft = craftList.get(i); //如果是外协的话,去查询外协工序时间,若未查询到先默认3天,跳过该工序的排产 if (craft.getIsOutsource()) { - String ppsIdStr = ppsIdMap.get(craft.getOcId()); - OutsourceProcessEntity outsourceProcess = outsourceProcessService.getOne(Wrappers.lambdaQuery().eq(OutsourceProcessEntity::getProcessId, ppsIdStr)); - BigDecimal totalTime = new BigDecimal(0); + OutsourceProcessEntity outsourceProcess = outsourceProcessService.getOne(Wrappers.lambdaQuery().eq(OutsourceProcessEntity::getProcessId, craft.getPpsId())); + Double totalTime = 0.0; if (outsourceProcess != null) { - //外协多工序需要把时间平分,方便处理 - prevProcessEnd = prevProcessEnd.plusMinutes((long) ((double) outsourceProcess.getDays() / ppsIdStr.split(",").length * 24 * 60)); - totalTime = totalTime.add(BigDecimal.valueOf((long) ((double) outsourceProcess.getDays() / ppsIdStr.split(",").length * 24 * 60))); + prevProcessEnd = prevProcessEnd.plusDays(outsourceProcess.getDays()); + totalTime = totalTime + outsourceProcess.getDays() * 24 *60; } else { prevProcessEnd = prevProcessEnd.plusDays(3); - totalTime = totalTime.add(BigDecimal.valueOf(3 * 24 * 60)); + totalTime = totalTime + 3 * 24 * 60; } WorkPlanEntity workPlan = new WorkPlanEntity(); workPlan.setWoId(order.getId()); @@ -470,27 +485,42 @@ public class WorkOrderServiceImpl extends BaseServiceImpl sameFurnaceMap = new HashMap<>(); - //烧结同炉 - if (sintMap.containsKey(craft.getPpsId())) { - sameFurnaceMap = sameFurnace(order, craft, workPlanList, prevProcessEnd, glassCodeStr, sintMap); - //同炉的话就不用走下面的匹配了,直接下一工序 - if (sameFurnaceMap.get("isSameFurnace").toString() == "true") { + //同炉同槽 + if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ + //热表同槽 + Boolean isSameTrough = sameTrough(order, craft, prevProcessEnd, workPlanList); + //同槽就不需要继续匹配了 + if (isSameTrough) { continue; } + }else{ + //烧结同炉 + if (sintMap.containsKey(craft.getPpsId())) { + sameFurnaceMap = sameFurnace(order, craft, workPlanList, localDateTime, glassCodeStr, sintMap, part, processMap, prevProcessEnd); + //同炉的话就不用走下面的匹配了,直接下一工序 + if (sameFurnaceMap.get("isSameFurnace").toString() == "true") { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"); + prevProcessEnd = LocalDateTime.parse(sameFurnaceMap.get("prevProcessEnd").toString(), formatter); + continue; + } + } } //根据作业中心查询所有设备 - List equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId())); + List equipAbilityList = new ArrayList<>(); + if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ + equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId())); + }else{ + equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId()).eq(EquipAbilityEntity::getProcessId,craft.getPpsId())); + } if (CollectionUtils.isEmpty(equipAbilityList)) { order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力"); order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); @@ -505,12 +535,39 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> entry : equipAbilityMap.entrySet()) { //根据时间点获取所有设备资源 - List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() - .eq(EquipResourceEntity::getCraftId, craft.getCaId()) - .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) - .ge(EquipResourceEntity::getStartTime, dateTime) - .eq(EquipResourceEntity::getIsUsed, 0) - .in(EquipResourceEntity::getEquipOrder, entry.getKey())); + List equipResourceList = new ArrayList<>(); + if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_1.getCode()){ + equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() + .eq(EquipResourceEntity::getCraftId, craft.getCaId()) + .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) + .ge(EquipResourceEntity::getStartTime, dateTime) + .eq(EquipResourceEntity::getIsUsed, 0) + .in(EquipResourceEntity::getEquipOrder, entry.getKey())); + }else{ + if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){ + equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() + .eq(EquipResourceEntity::getCraftId, craft.getCaId()) + .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) + .eq(EquipResourceEntity::getProcessId,craft.getPpsId()) + .ge(EquipResourceEntity::getStartTime, dateTime) + .eq(EquipResourceEntity::getIsUsed, 0) + .in(EquipResourceEntity::getEquipOrder, entry.getKey()) + .lt(EquipResourceEntity::getStartNum,part.getBlbDiameter()) + .ge(EquipResourceEntity::getEndNum,part.getBlbDiameter())); + }else{ + equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() + .eq(EquipResourceEntity::getCraftId, craft.getCaId()) + .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) + .eq(EquipResourceEntity::getProcessId,craft.getPpsId()) + .ge(EquipResourceEntity::getStartTime, dateTime) + .eq(EquipResourceEntity::getIsUsed, 0) + .in(EquipResourceEntity::getEquipOrder, entry.getKey()) + .lt(EquipResourceEntity::getStartNum,part.getExternalDiameter()) + .ge(EquipResourceEntity::getEndNum,part.getExternalDiameter())); + } + + } + if (CollectionUtils.isEmpty(equipResourceList)) { order.setStatus(YieldOrderEnum.STATUS_APS.getCode()); order.setErrorInfo("工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备资源"); @@ -537,7 +594,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacityList = capacitySplit(equipResourceMap, sumCapacity); for (BigDecimal capacity : capacityList) { @@ -545,6 +602,19 @@ public class WorkOrderServiceImpl extends BaseServiceImpl resourceList = entry1.getValue(); for (EquipResourceEntity equipResource : resourceList) { + //烧结订单需判断零件类型 + if(order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode()){ + //玻璃饼订单查询玻璃饼直径 + if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){ + if(part.getBlbDiameter() equipResource.getEndNum()){ + continue; + } + }else{//其他类型订单查询壳体最大外径 + if(part.getExternalDiameter() < equipResource.getStartNum() || part.getExternalDiameter() > equipResource.getEndNum()){ + continue; + } + } + } //如果产能最大的设备都不满足,后面的设备就不需要判断了 if (equipResource.getRestCapacity().compareTo(capacity) < 0) { break; @@ -553,10 +623,22 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipWrapper = new LambdaUpdateWrapper<>(); + LambdaQueryWrapper equipWrapper = new LambdaQueryWrapper<>(); equipWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); equipWrapper.eq(EquipResourceEntity::getDateTime, equipResource.getDateTime()); equipWrapper.eq(EquipResourceEntity::getPeriod, equipResource.getPeriod()); - equipWrapper.eq(EquipResourceEntity::getStartTime, equipResource.getStartTime()); - equipWrapper.eq(EquipResourceEntity::getEndTime, equipResource.getEndTime()); - equipResourceService.update(equipResource, equipWrapper); + equipWrapper.ne(BaseEntity::getId,equipResource.getId()); + List otherResourceList = equipResourceService.list(equipWrapper); + BigDecimal rate = equipResource.getRestCapacity().divide(equipResource.getTotalCapacity(), 2, RoundingMode.HALF_UP); + for(EquipResourceEntity otherResource : otherResourceList){ + otherResource.setRestCapacity(otherResource.getTotalCapacity().multiply(rate).setScale(0, RoundingMode.FLOOR)); + otherResource.setIsUsed("1"); + if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode() && sameFurnaceMap.get("glassCode") != null) { + otherResource.setGlassCode(sameFurnaceMap.get("glassCode").toString()); + } + equipResourceService.updateById(otherResource); + } //该设备后续所有开始时间小于当前结束时间的时间段都变为不可用 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); updateWrapper.lt(EquipResourceEntity::getStartTime, equipResource.getEndTime()); @@ -619,13 +709,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personResourceList = personResourceService.list(Wrappers.lambdaQuery() @@ -664,7 +774,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl { - workPlanEntity.setWoId(workOrder.getId()); - workPlanService.save(workPlanEntity); - }); + this.save(workOrder); + }else if(order.getStatus() == YieldOrderEnum.STATUS_OUTSOURCING_WAITING.getCode()){ + workOrder = this.getOne(Wrappers.lambdaQuery().eq(WorkOrderEntity::getYoId,order.getId())); + workOrder.setPlanEndDate(workPlanList.get(workPlanList.size() - 1).getPlanEndTime() == null ? null : workPlanList.get(workPlanList.size() - 1).getPlanEndTime().truncatedTo(ChronoUnit.DAYS).toString().substring(0, 10)); + workOrder.setPlanEndTime(workPlanList.get(workPlanList.size() - 1).getPlanEndTime() == null ? null : workPlanList.get(workPlanList.size() - 1).getPlanEndTime()); + this.updateById(workOrder); + } + for(WorkPlanEntity workPlan : workPlanList){ + workPlan.setWoId(workOrder.getId()); + workPlanService.save(workPlan); + } + for (int i = 0; i < workPlanList.size(); i++) { WorkPlanEntity workPlan = workPlanList.get(i); if (i != 0) { @@ -849,12 +967,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl capacitySplit(Map> map, BigDecimal sumCapacity) { List equipResourceList1 = map.values().stream().flatMap(List::stream).collect(Collectors.toList()); BigDecimal maxRestCapacity = equipResourceList1.stream().filter(entity -> entity.getRestCapacity().compareTo(BigDecimal.ZERO) >= 0).map(EquipResourceEntity::getRestCapacity).max(BigDecimal::compareTo).orElseThrow(() -> new IllegalArgumentException("列表中无有效的 restCapacity 数值")); - ; List capacityList = new ArrayList<>(); if (sumCapacity.compareTo(maxRestCapacity) > 0) { // 计算商(fullCount)和余数(remainder):divideAndRemainder返回[商, 余数] @@ -994,7 +1111,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); updateWrapper.eq(EquipResourceEntity::getDateTime, equipResource.getDateTime()); @@ -1094,7 +1211,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpllambdaQuery().eq(EquipAbilityEntity::getCraftId, 27)); - BigDecimal standardProcessAbility = equipAbility.getStandardProcessAbility(); + BigDecimal standardProcessAbility = BigDecimal.valueOf(Integer.parseInt(equipAbility.getStandardProcessAbility())); //获取所有空闲的公共工序资源 List equipResourceList = equipResourceService.selectCommonCraftList(); for (YieldOrderEntity order : commonCraftOrderList) { @@ -1117,7 +1234,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); updateWrapper.eq(EquipResourceEntity::getDateTime, equipResource.getDateTime()); @@ -1311,7 +1428,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl sameFurnace(YieldOrderEntity order, YieldOrderCraftEntity craft, List workPlanList, LocalDateTime prevProcessEnd, String glassCodeStr, Map> sintMap) { + public Map sameFurnace(YieldOrderEntity order, + YieldOrderCraftEntity craft, + List workPlanList, + LocalDateTime localDateTime, + String glassCodeStr, + Map> sintMap, + PartEntity part, + Map processMap, + LocalDateTime prevProcessEnd) { Map map = new HashMap<>(); Boolean isSameFurnace = false; - if (order.getYieldType() == YieldOrderEnum.YIELD_TYPE_2.getCode() || order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()) {//烧结订单 + if (order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode()) {//烧结订单 //获取当前工序的所有温度曲线 List sintList = sintMap.get(craft.getPpsId()); List> sintMaterialList = new ArrayList<>(); sintList.stream().map(SintTempCurveEntity::getGlassCode).collect(Collectors.toList()).forEach(item -> sintMaterialList.add(Arrays.asList(item.split(",")))); //根据零件号获取子件信息 - PartEntity part = new PartEntity(); - part.setPartCode(order.getPartCode()); - List childPartList = partService.selectChildPart(part); + List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); + List childIds = partRelationList.stream().map(PartRelationEntity::getChildPartId).collect(Collectors.toList()); + List childPartList = partService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,childIds)); if (CollectionUtils.isNotEmpty(childPartList)) { //获取子件的所有玻璃粉牌号 List materialList = childPartList.stream().filter(item -> StringUtils.isNotEmpty(item.getMaterial())).map(PartEntity::getMaterial).collect(Collectors.toList()); @@ -1380,14 +1505,31 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() - .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) - .eq(EquipResourceEntity::getCraftId, craft.getCaId()) - .ge(EquipResourceEntity::getStartTime, prevProcessEnd) - .eq(EquipResourceEntity::getGlassCode, glassCodeStr)); + //玻璃饼订单查玻璃饼直接,其他订单查 + List equipResourceList = new ArrayList<>(); + if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){ + equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() + .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) + .eq(EquipResourceEntity::getCraftId, craft.getCaId()) + .eq(EquipResourceEntity::getProcessId,craft.getPpsId()) + .ge(EquipResourceEntity::getStartTime, localDateTime) + .eq(EquipResourceEntity::getGlassCode, glassCodeStr) + .lt(EquipResourceEntity::getStartNum,part.getBlbDiameter()) + .ge(EquipResourceEntity::getEndNum,part.getBlbDiameter())); + }else{ + equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() + .eq(EquipResourceEntity::getWorkCenterId, craft.getWorkCenterId()) + .eq(EquipResourceEntity::getCraftId, craft.getCaId()) + .eq(EquipResourceEntity::getProcessId,craft.getPpsId()) + .ge(EquipResourceEntity::getStartTime, localDateTime) + .eq(EquipResourceEntity::getGlassCode, glassCodeStr) + .lt(EquipResourceEntity::getStartNum,part.getExternalDiameter()) + .ge(EquipResourceEntity::getEndNum,part.getExternalDiameter())); + } + if (CollectionUtils.isNotEmpty(equipResourceList)) { //计算生产所需产能,需将m2换算成dm2 - BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); + BigDecimal sumCapacity = BigDecimal.valueOf(order.getYpQty()); for (EquipResourceEntity equipResource : equipResourceList) { if (equipResource.getRestCapacity().compareTo(sumCapacity) > 0) { @@ -1395,10 +1537,19 @@ public class WorkOrderServiceImpl extends BaseServiceImpl equipWrapper = new LambdaQueryWrapper<>(); + equipWrapper.eq(EquipResourceEntity::getEquipCode, equipResource.getEquipCode()); + equipWrapper.eq(EquipResourceEntity::getDateTime, equipResource.getDateTime()); + equipWrapper.eq(EquipResourceEntity::getPeriod, equipResource.getPeriod()); + equipWrapper.ne(BaseEntity::getId,equipResource.getId()); + List otherResourceList = equipResourceService.list(equipWrapper); + BigDecimal rate = equipResource.getRestCapacity().divide(equipResource.getTotalCapacity(), 2, RoundingMode.HALF_UP); + for(EquipResourceEntity otherResource : otherResourceList){ + otherResource.setRestCapacity(otherResource.getTotalCapacity().multiply(rate).setScale(0, RoundingMode.FLOOR)); + equipResourceService.updateById(otherResource); + } isSameFurnace = true; + prevProcessEnd = workPlan.getPlanEndTime(); } break; } @@ -1428,6 +1592,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personAbilityList = personAbilityService.list(Wrappers.lambdaQuery() + .eq(PersonAbilityEntity::getWorkCenterId,craft.getWorkCenterId()) + .eq(PersonAbilityEntity::getCraftId,craft.getCaId()) + .eq(PersonAbilityEntity::getProcessId,craft.getPpsId())); + if(CollectionUtils.isNotEmpty(personAbilityList)){ + int partType = personAbilityList.get(0).getPartType(); + if(partType == WorkOrderEnum.STATUS_PART_TYPE_1.getCode()){ + for(PersonAbilityEntity personAbility : personAbilityList){ + List voList = JsonUtil.readValue(personAbility.getStandardTime(), new TypeReference>() {}); + for(PersonAbilityVO vo : voList){ + if(part.getExternalDiameter() > vo.getStartNum() && part.getExternalDiameter() <= vo.getEndNum()){ + personTime = Double.parseDouble(vo.getStandardTime()) * order.getYpQty() + personAbility.getPrepareTime().doubleValue(); + break; + } + } + + } + + }else if(partType == WorkOrderEnum.STATUS_PART_TYPE_2.getCode()){ + + for(PersonAbilityEntity personAbility : personAbilityList){ + List voList = JsonUtil.readValue(personAbility.getStandardTime(), new TypeReference>() {}); + for(PersonAbilityVO vo : voList){ + if(part.getBlbDiameter() >vo.getStartNum() && part.getBlbDiameter() <= vo.getEndNum()){ + personTime = Double.parseDouble(vo.getStandardTime()) * order.getYpQty() + personAbility.getPrepareTime().doubleValue(); + break; + } + } + + } + + }else if(partType == WorkOrderEnum.STATUS_PART_TYPE_3.getCode()){ + //芯数为子件插针数量 + List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); + if(CollectionUtils.isNotEmpty(partRelationList)){ + Double quota = 0.0; + for(PartRelationEntity partRelation : partRelationList){ + PartEntity childPart = partService.getById(partRelation.getChildPartId()); + if(DsPartConstant.SIN_TER_TYPE_CZ.equals(childPart.getSinTerType())){ + //双面印字芯数需乘以2 + quota = "3".equals(childPart.getIsPrint()) ? childPart.getQuota()*2 : childPart.getQuota(); + break; + } + } + for(PersonAbilityEntity personAbility : personAbilityList){ + List voList = JsonUtil.readValue(personAbility.getStandardTime(), new TypeReference>() {}); + for(PersonAbilityVO vo : voList){ + if(quota > vo.getStartNum() && quota <= vo.getEndNum()){ + personTime = Double.parseDouble(vo.getStandardTime()) * order.getYpQty() + personAbility.getPrepareTime().doubleValue(); + break; + } + } + + } + } + + }else{ + PersonAbilityEntity personAbility = personAbilityService.getOne(Wrappers.lambdaQuery() + .eq(PersonAbilityEntity::getWorkCenterId,craft.getWorkCenterId()) + .eq(PersonAbilityEntity::getCraftId,craft.getCaId()) + .eq(PersonAbilityEntity::getProcessId,craft.getPpsId())); + personTime = Double.parseDouble(personAbility.getStandardTime()) * order.getYpQty() + personAbility.getPrepareTime().doubleValue(); + } + } + return Math.ceil(personTime); + } + + + //玻璃封接组装 + public Double calPersonHoursByBlfjzz(YieldOrderEntity order,PartEntity part){ + Double result = 0.0; + if (part != null && part.getId() != null) { + List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); + List childIds = partRelationList.stream().map(PartRelationEntity::getChildPartId).collect(Collectors.toList()); + List childPartList = partService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,childIds)); + List partCz = childPartList.stream().filter(item -> DsPartConstant.SIN_TER_TYPE_CZ.equals(item.getSinTerType())).collect(Collectors.toList()); + List partBlb = childPartList.stream().filter(item -> DsPartConstant.SIN_TER_TYPE_BLB.equals(item.getSinTerType())).collect(Collectors.toList()); + boolean hb = false; + for (PartEntity part1 : partCz) { + hb = part1.getPartName().contains("焊杯"); + } + + double sumOfQuota = partCz.stream() + .mapToDouble(PartEntity::getQuota) // 调用 getQuota() 方法 + .sum(); + int x = partCz.size(); + int y = partBlb.size(); + if (sumOfQuota <= 5) { + result = (5.5 * sumOfQuota + 20) / 60 + 0.8; + } + if (sumOfQuota <= 20 && sumOfQuota > 5) { + result = (5.8 * sumOfQuota + 20) / 60 + 0.8; + if (y > 2) { + result = 1.5 * result; + } + if (hb) { + result = result + 0.5 * sumOfQuota / 60 + 0.2; + } + if (x > 3) { + result = 1.2 * result + 3; + } + } + if (sumOfQuota <= 30 && sumOfQuota > 20) { + result = (6 * sumOfQuota + 20) / 60 + 0.8; + if (y > 2) { + result = 1.6 * result; + } + if (hb) { + result = result + (1 * sumOfQuota) / 60 + 0.2; + } + if (x > 3) { + result = 1.5 * result + 5; + } + } + if (sumOfQuota <= 50 && sumOfQuota > 30) { + result = (6.2 * sumOfQuota + 25) / 60 + 1.3; + if (y > 2) { + result = 1.8 * result; + } + if (hb) { + result = result + (2 * sumOfQuota) / 60 + 0.3; + } + if (x > 3) { + result = 1.8 * result + 6; + } + } + if (sumOfQuota <= 80 && sumOfQuota > 50) { + result = (6.4 * sumOfQuota + 25) / 60 + 1.5; + if (y > 2) { + result = 2 * result; + } + if (hb) { + result = result + (3 * sumOfQuota) / 60 + 0.5; + } + if (x > 3) { + result = 2.2 * result + 9; + } + } + if (sumOfQuota <= 100 && sumOfQuota > 80) { + result = (6.5 * sumOfQuota + 25) / 60 + 1.8; + if (y > 2) { + result = 2 * result; + } + if (hb) { + result = result + (3.5 * sumOfQuota) / 60 + 0.7; + } + if (x > 3) { + result = 2.5 * result + 12; + } + } + if (sumOfQuota > 100) { + result = (6.6 * sumOfQuota + 60) / 60 + 2.1; + if (y > 2) { + result = 2 * result; + } + if (hb) { + result = result + (4 * sumOfQuota) / 60 + 1; + } + if (x > 3) { + result = 2.5 * result + 15; + } + } + + } + return Math.ceil(result * order.getYpQty()); + } + + //箱式排腊玻化工序 + public Double calPersonHoursByXsplbh(YieldOrderEntity order,PartEntity part){ + Double result = 0.0; + if (part != null && part.getId() != null && part.getBlbDiameter() != null) { + Double n = part.getBlbDiameter(); + double y = 0.0; + if (n <= 10) { + y = 1.0; + } + if (n <= 20 && n > 10) { + y = 2.0; + } + if (n <= 30 && n > 20) { + y = 3.0; + } + if (n <= 40 && n > 30) { + y = 4.0; + } + if (n <= 50 && n > 40) { + y = 5.0; + } + if (n <= 60 && n > 50) { + y = 6.0; + } + result = 0.6 + 0.6 * Math.pow(1.2, y); + } + return Math.ceil(result * order.getYpQty() + 19); + } + //玻璃封接卸模 + public Double calPersonHoursByBlfjxm(YieldOrderEntity order,PartEntity part){ + Double result = 0.0; + if (part != null && part.getId() != null) { + List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); + List childIds = partRelationList.stream().map(PartRelationEntity::getChildPartId).collect(Collectors.toList()); + List childPartList = partService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,childIds)); + if (childPartList != null && childPartList.size() > 0) { + double n = 0; + boolean pzm = false; + for (PartEntity childPart : childPartList) { + if (childPart.getPartCode().contains("21E8-716")) { + n = n + childPart.getQuota(); + } + pzm = childPart.getSinTerType().equals(DsPartConstant.SIN_TER_TYPE_KT) && childPart.getConfigCode().equals("M4"); + } + if (n <= 2) { + List partCz = childPartList.stream().filter(item -> DsPartConstant.SIN_TER_TYPE_CZ.equals(item.getSinTerType())).collect(Collectors.toList()); + if (partCz != null && partCz.size() > 0) { + double sumOfQuota = partCz.stream() + .mapToDouble(PartEntity::getQuota) // 调用 getQuota() 方法 + .sum(); + double y = 0; + if (sumOfQuota <= 5) { + y = 0; + } + if (sumOfQuota > 5 && sumOfQuota <= 20) { + y = 1.0; + } + if (sumOfQuota > 20 && sumOfQuota <= 30) { + y = 2.0; + } + if (sumOfQuota > 30 && sumOfQuota <= 50) { + y = 3.0; + } + if (sumOfQuota > 50 && sumOfQuota <= 80) { + y = 4.0; + } + if (sumOfQuota > 80) { + y = 5.0; + } + result = 2 + Math.pow(1.2, y); + } + } + if (n > 2) { + List partCz = childPartList.stream().filter(item -> DsPartConstant.SIN_TER_TYPE_CZ.equals(item.getSinTerType())).collect(Collectors.toList()); + if (partCz != null && partCz.size() > 0) { + double sumOfQuota = partCz.stream() + .mapToDouble(PartEntity::getQuota) // 调用 getQuota() 方法 + .sum(); + double y = 0; + if (sumOfQuota <= 5) { + y = 0; + } + if (sumOfQuota > 5 && sumOfQuota <= 20) { + y = 1.0; + } + if (sumOfQuota > 20 && sumOfQuota <= 30) { + y = 2.0; + } + if (sumOfQuota > 30 && sumOfQuota <= 50) { + y = 3.0; + } + if (sumOfQuota > 50 && sumOfQuota <= 80) { + y = 4.0; + } + if (sumOfQuota > 80 && sumOfQuota <= 100) { + y = 5.0; + } + if (sumOfQuota > 100) { + y = 6.0; + } + if (pzm) { + result = 1.5 * (5.3 + Math.pow(2.2, y)); + } else { + result = 5.3 + Math.pow(2.2, y); + } + } + } + } + } + return Math.ceil(result * order.getYpQty() + 3); + } + + //玻璃封接灌胶 + public Double calPersonHoursByBlfjgj(YieldOrderEntity order,PartEntity part){ + Double result = 0.0; + if (part != null && part.getId() != null&&part.getExternalDiameter() != null) { + Double n = part.getExternalDiameter(); + if (part.getKeyInfo().contains("聚矽硅烷")) { + if(n<=20){ + result=2.0; + } + if(n<=40&&n>20){ + result=2.5; + } + if(n<=60&&n>40){ + result=3.0; + } + if(n<=80&&n>60){ + result=4.0; + } + if(n>80){ + result=5.0; + } + } + if (part.getKeyInfo().contains("绝缘清漆")||part.getKeyInfo().contains("陶瓷保护剂")) { + if(n<=20){ + result=1.0; + } + if(n<=40&&n>20){ + result=1.3; + } + if(n<=60&&n>40){ + result=1.5; + } + if(n<=80&&n>60){ + result=2.0; + } + if(n>80){ + result=2.3; + } + } + } + return Math.ceil(result * order.getYpQty() + 4); + } + + //真空炉灌胶 + public Double calPersonHoursByZklgj(YieldOrderEntity order,PartEntity part){ + Double result = 0.0; + if (part != null && part.getId() != null && part.getExternalDiameter() != null) { + List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); + List childIds = partRelationList.stream().map(PartRelationEntity::getChildPartId).collect(Collectors.toList()); + List partCz = partService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,childIds).eq(PartEntity::getSinTerType,DsPartConstant.SIN_TER_TYPE_CZ)); + boolean hb = false; + for (PartEntity childPart : partCz) { + hb = childPart.getPartName().contains("双头"); + } + Double n = part.getExternalDiameter(); + double sumOfQuota = partCz.stream() + .mapToDouble(PartEntity::getQuota) // 调用 getQuota() 方法 + .sum(); + if (!hb) { + if (n <= 15) { + result = 6.6 + 1.5 * sumOfQuota; + } + if (n <= 30 && n > 15) { + result = 8.6 + 1.5 * sumOfQuota; + } + if (n <= 50 && n > 30) { + result = 11.6 + 1.5 * sumOfQuota; + } + if (n <= 80 && n > 50) { + result = 13.6 + 1.5 * sumOfQuota; + } + if (n > 80) { + result = 15.6 + 1.5 * sumOfQuota; + } + result = result * order.getYpQty() + 7; + } else { + if (n <= 15) { + result = 6.6 + 3.5 * sumOfQuota; + } + if (n <= 30 && n > 15) { + result = 8.6 + 3.5 * sumOfQuota; + } + if (n <= 50 && n > 30) { + result = 11.6 + 3.5 * sumOfQuota; + } + if (n <= 80 && n > 50) { + result = 13.6 + 3.5 * sumOfQuota; + } + if (n > 80) { + result = 15.6 + 3.5 * sumOfQuota; + } + result = result * order.getYpQty() + 10; + } + } + return Math.ceil(result); + } + //单侧折针、双侧折针 + public Double calPersonHoursByZz(YieldOrderEntity order,PartEntity part,String processName){ + Double result = 0.0; + if (part != null && part.getId() != null) { + List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); + List childIds = partRelationList.stream().map(PartRelationEntity::getChildPartId).collect(Collectors.toList()); + List partCz = partService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,childIds).eq(PartEntity::getSinTerType,DsPartConstant.SIN_TER_TYPE_CZ)); + if (partCz != null && partCz.size() > 0) { + double n = 0; + for (PartEntity childPart : partCz) { + if (childPart.getPartCode().contains("21ET8")) { + n = n + childPart.getQuota(); + } + } + if (processName.equals("单侧折针")) { + result = (130 + 20 * n) / 60; + } else { + result = (130 + 35 * 2 * n) / 60; + } + } + } + return Math.ceil(result * order.getYpQty() + 2); + } + + public static List mergeYieldOrderList(List originalList) { + // 空值校验 + if (originalList == null || originalList.isEmpty()) { + return new ArrayList<>(); + } + + // 用于临时存储合并后的对象,key为partCode+prodIdent + Map mergeMap = new HashMap<>(); + + for (YieldOrderEntity entity : originalList) { + // 空对象跳过 + if (entity == null) { + continue; + } + + // 生成唯一key(partCode和prodIdent组合) + String key = entity.getPartCode() + "_" + entity.getProductIdent(); + + if (mergeMap.containsKey(key)) { + // key已存在,累加ypQty + YieldOrderEntity existEntity = mergeMap.get(key); + Integer newQty = existEntity.getYpQty() + entity.getYpQty(); + existEntity.setYpQty(newQty); + } else { + // key不存在,直接放入Map + mergeMap.put(key, entity); + } + } + + // 将Map的值转换为List返回 + return new ArrayList<>(mergeMap.values()); + } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/EquipAbilityVO.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/EquipAbilityVO.java index 0f86560c1..8d18bde9a 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/EquipAbilityVO.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/EquipAbilityVO.java @@ -43,4 +43,8 @@ public class EquipAbilityVO extends EquipAbilityEntity { @Serial private static final long serialVersionUID = 1L; + private Integer startNum; + + private Integer endNum; + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/PersonAbilityVO.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/PersonAbilityVO.java index 2887f1270..d298c5600 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/PersonAbilityVO.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/vo/PersonAbilityVO.java @@ -43,4 +43,8 @@ public class PersonAbilityVO extends PersonAbilityEntity { @Serial private static final long serialVersionUID = 1L; + private Integer startNum; + + private Integer endNum; + } From 81535de8c8fc0651060c3feb27d8cee8bc77f186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B6=9B?= Date: Wed, 18 Mar 2026 17:16:12 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/produce/pojo/vo/UnBingVo.java | 4 ++ .../service/impl/DsTaskingServiceImpl.java | 2 +- .../order/service/IYieldOrderService.java | 3 +- .../service/impl/YieldOrderServiceImpl.java | 4 +- .../desk/produce/mapper/WorkOrderMapper.java | 2 +- .../desk/produce/mapper/WorkOrderMapper.xml | 7 ++- .../service/impl/MacToolUseServiceImpl.java | 25 ++++++--- .../service/impl/PdaSaveServiceImpl.java | 51 +++++++++---------- 8 files changed, 59 insertions(+), 39 deletions(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingVo.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingVo.java index 804836aeb..74e176df8 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingVo.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/vo/UnBingVo.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; @@ -7,8 +8,11 @@ import java.util.List; @Data public class UnBingVo { + @Schema(description = "挂具编号") private String rsCode; + @Schema(description = "飞靶编号") private String fsCode; + @Schema(description = "设备编号") private String deviceCode; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java index d9c583dad..5aa5ac630 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java @@ -975,7 +975,7 @@ public class DsTaskingServiceImpl extends BaseServiceImpl { /** * 根据 零件号 和 批次号查询 + * * @param partCode * @param batchNo * @return */ - YieldOrder selectByPartCOdeAndBatchNo(String partCode, String batchNo); + YieldOrder selectByPartCOdeAndBatchNo(String partCode, String batchNo, String reworkOrder); /** *

方法名: getNewCardNo

diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index d6890d39c..a990f6aad 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -716,8 +716,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl { List queryByReadStatusPage(IPage page, QueryByReadStatusDTO query); - YieldOrder selectByPartCOdeAndBatchNo(@Param("partCode") String partCode,@Param("batchNo") String batchNo); + YieldOrder selectByPartCOdeAndBatchNo(@Param("partCode") String partCode, @Param("batchNo") String batchNo, @Param("reworkOrder") String reworkOrder); WorkOrderEntity selectByYoId(@Param("yoId") Long yoId); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml index 549142177..ea47b6d78 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml @@ -185,7 +185,12 @@ ORDER BY a.CREATE_TIME DESC