diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java similarity index 100% rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java similarity index 100% rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/DsCraftConstant.java diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsPartConst.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/DsPartConstant.java similarity index 92% rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsPartConst.java rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/DsPartConstant.java index deed7ce6..b36baa61 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/DsPartConst.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/DsPartConstant.java @@ -4,7 +4,7 @@ package org.springblade.desk.dashboard.constant; * @author lqk * @date 2025-12-05 16:51 */ -public interface DsPartConst { +public interface DsPartConstant { //region 烧结子件种类 /** * 插针 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java similarity index 100% rename from blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java rename to blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/YieldOrderEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/YieldOrderEnum.java index ffe363c9..6337edcf 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/YieldOrderEnum.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/enums/YieldOrderEnum.java @@ -29,6 +29,7 @@ public enum YieldOrderEnum { STATUS_PROCESSING("加工中", 10005), STATUS_PROCESS_ERROR("排产异常", 10006), STATUS_RECOVER("数据恢复", 10007), + STATUS_OUTSOURCING_WAITING("外协后待排产", 10008), STATUS_COMPLETED("已完工", 10015), STATUS_CLOSED("已关闭", 10021), diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java index a293b7d8..9c1f22b2 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java @@ -28,7 +28,6 @@ package org.springblade.scheduling.pojo.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.NullSerializer; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -99,8 +98,7 @@ public class EquipAbilityEntity extends BaseEntity { * 额定加工能力 */ @Schema(description = "额定加工能力") - @JsonSerialize(nullsUsing = NullSerializer.class) - private BigDecimal standardProcessAbility; + private String standardProcessAbility; /** * 额定工时(分钟) @@ -141,4 +139,22 @@ public class EquipAbilityEntity extends BaseEntity { @Schema(description = "备注") private String remarks; + /** + * 工序编码 + */ + @Schema(description = "工序编码") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Long processId; + + /** + * 工序名称 + */ + @Schema(description = "工序名称") + private String processName; + + /** + * 零件类型 + */ + private Integer partType; + } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipResourceEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipResourceEntity.java index 48e23277..ff7a7a6a 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipResourceEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipResourceEntity.java @@ -27,6 +27,8 @@ package org.springblade.scheduling.pojo.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -159,7 +161,28 @@ public class EquipResourceEntity extends BaseEntity { private Integer isDeleted; + /** + * 工序编码 + */ + @Schema(description = "工序编码") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Long processId; + + /** + * 工序名称 + */ + @Schema(description = "工序名称") + private String processName; + /** + * 开始值 + */ + private Integer startNum; + + /** + * 结束值 + */ + private Integer endNum; } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartEntity.java index e805892f..5f423f43 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartEntity.java @@ -25,15 +25,15 @@ */ package org.springblade.scheduling.pojo.entity; -import lombok.Data; -import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; -import java.util.Date; -import java.math.BigDecimal; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; -import org.springblade.core.tenant.mp.TenantEntity; + import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; /** * 零件信息表 实体类 @@ -291,4 +291,14 @@ public class PartEntity extends BaseEntity { @Schema(description = "审核人") private String reviewUser; + + @Schema(name = "玻璃饼直径") + private Double blbDiameter; + + @Schema(name = "壳体最大外径") + private Double externalDiameter; + + @Schema(name = "定额") + private Double quota; + } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartRelationEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartRelationEntity.java index a82584fd..d702b844 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartRelationEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PartRelationEntity.java @@ -25,14 +25,12 @@ */ package org.springblade.scheduling.pojo.entity; -import lombok.Data; -import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; -import java.math.BigDecimal; -import java.util.Date; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; -import org.springblade.core.tenant.mp.TenantEntity; + import java.io.Serial; /** @@ -54,7 +52,7 @@ public class PartRelationEntity extends BaseEntity { * 部件ID */ @Schema(description = "部件ID") - private BigDecimal partId; + private Long partId; /** * 部件号 */ @@ -64,7 +62,7 @@ public class PartRelationEntity extends BaseEntity { * 子件ID */ @Schema(description = "子件ID") - private BigDecimal childPartId; + private Long childPartId; /** * 子件号 */ diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java index d532c5bd..311efef0 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java @@ -94,7 +94,7 @@ public class PersonAbilityEntity extends BaseEntity { * 额定工时(分钟/每人每个) */ @Schema(description = "额定工时(分钟/每人每个)") - private BigDecimal standardTime; + private String standardTime; /** * 准备工时(分钟) @@ -123,4 +123,7 @@ public class PersonAbilityEntity extends BaseEntity { */ private String productIdent; + private Integer partType; + + } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java index 0bd714cf..aadb1f49 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java @@ -34,7 +34,6 @@ import org.springblade.core.mp.base.BaseEntity; import java.io.Serial; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.Date; /** * 车间作业计划 实体类 @@ -97,7 +96,7 @@ public class WorkPlanEntity extends BaseEntity { * 工时定额 */ @Schema(description = "工时定额") - private BigDecimal hourQuota; + private Double hourQuota; /** * 计划开始 */ diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java index 9cfd44be..9a8e70d9 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/YieldOrderEntity.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.tenant.mp.TenantEntity; import org.springblade.core.tool.utils.DateUtil; import org.springframework.format.annotation.DateTimeFormat; @@ -61,6 +60,12 @@ public class YieldOrderEntity extends TenantEntity { @TableField(value = "PART_NAME") private String partName; + /** + * 零件号版本号 + */ + @TableField(value = "PART_VERSION") + private String partVersion; + /** * 镀种 */ diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/enums/WorkOrderEnum.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/enums/WorkOrderEnum.java index c8e7438c..022a2438 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/enums/WorkOrderEnum.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/enums/WorkOrderEnum.java @@ -27,10 +27,17 @@ public enum WorkOrderEnum { STATUS_COMPLETED("已完工", 4), STATUS_ADJUDICATING("审理中", 5), STATUS_SCRAP("已报废", 6), - STATUS_REWORK("已返工", 7) + STATUS_REWORK("已返工", 7), + + /** + * 烧结订单人工工时统计类型 + */ + STATUS_PART_TYPE_1("壳体最大外径", 1), + STATUS_PART_TYPE_2("玻璃饼直径", 2), + STATUS_PART_TYPE_3("芯数", 3), ; final String name; - final int category; + final int code; /** * 匹配枚举值 @@ -54,7 +61,7 @@ public enum WorkOrderEnum { */ public static String getName(int category) { WorkOrderEnum item = Arrays.stream(WorkOrderEnum.values()) - .filter(enumItem -> enumItem.getCategory() == category) + .filter(enumItem -> enumItem.getCode() == category) .findFirst() .orElse(null); return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName(); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java index 718c60ba..2f626867 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java @@ -28,18 +28,15 @@ package org.springblade.desk.dashboard.service.impl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.Func; import org.springblade.desk.dashboard.constant.BatchConstant; -import org.springblade.desk.dashboard.constant.TaskingConstant; import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreservePlanEntity; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreserveTaskEntity; -import org.springblade.desk.dashboard.pojo.entity.DsBatchWorkCenterSetEntity; import org.springblade.desk.dashboard.pojo.vo.DsBatchPreserveTaskVO; import org.springblade.desk.dashboard.excel.DsBatchPreserveTaskExcel; import org.springblade.desk.dashboard.mapper.DsBatchPreserveTaskMapper; import org.springblade.desk.dashboard.service.IBsWorkCenterService; import org.springblade.desk.dashboard.service.IDsBatchPreservePlanService; import org.springblade.desk.dashboard.service.IDsBatchPreserveTaskService; -import org.springblade.desk.dashboard.service.IDsBatchWorkCenterSetService; import org.springblade.system.feign.IUserClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -49,7 +46,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.util.CollectionUtils; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; 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 1e9cef1c..d6890d39 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 @@ -22,7 +22,7 @@ import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.ObjectUtil; import org.springblade.core.tool.utils.StringPool; import org.springblade.desk.dashboard.constant.DsCraftConstant; -import org.springblade.desk.dashboard.constant.DsPartConst; +import org.springblade.desk.dashboard.constant.DsPartConstant; import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity; @@ -406,13 +406,13 @@ public class YieldOrderServiceImpl extends BaseServiceImpl subList = new ArrayList<>(); - subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConst.SIN_TER_TYPE_SMM, "石墨模")); - subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConst.SIN_TER_TYPE_KT, "壳体")); - subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConst.SIN_TER_TYPE_CZ, "插针")); + subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_SMM, "石墨模")); + subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_KT, "壳体")); + subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_CZ, "插针")); if (subList.size() == 0) { throw new BusinessException("未找到烧结前处理子件信息,请联系工艺编制!"); } @@ -806,9 +806,9 @@ public class YieldOrderServiceImpl extends BaseServiceImpl glassCakePartList = dsPartService.selectDsPartByPatCode(yieldPlan.getPartCode(), DsPartConst.SIN_TER_TYPE_BLB); + List glassCakePartList = dsPartService.selectDsPartByPatCode(yieldPlan.getPartCode(), DsPartConstant.SIN_TER_TYPE_BLB); if (glassCakePartList != null && glassCakePartList.size() > 0) { for (DsPartEntity dsPart : glassCakePartList) { //不包含玻璃字样的代表维护错误,跳过 diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CertificateTypeController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CertificateTypeController.java index 61f50a6d..9f35d270 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CertificateTypeController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CertificateTypeController.java @@ -11,6 +11,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -69,6 +70,7 @@ public class CertificateTypeController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入certificateType") + @ApiLog public R save(@Valid @RequestBody CertificateTypeEntity certificateType) { return R.status(certificateTypeService.save(certificateType)); } @@ -79,6 +81,7 @@ public class CertificateTypeController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入certificateType") + @ApiLog public R update(@Valid @RequestBody CertificateTypeEntity certificateType) { return R.status(certificateTypeService.updateById(certificateType)); } @@ -99,6 +102,7 @@ public class CertificateTypeController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(certificateTypeService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CraftAbilityController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CraftAbilityController.java index 45e65cac..1918a5d3 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CraftAbilityController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/CraftAbilityController.java @@ -25,25 +25,27 @@ */ package org.springblade.scheduling.scheduling.controller; -import io.swagger.v3.oas.annotations.tags.Tag; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import lombok.AllArgsConstructor; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; - -import org.springblade.core.secure.BladeUser; -import org.springblade.core.secure.annotation.IsAdmin; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; -import org.springblade.desk.basic.pojo.entity.CoatingThickness; -import org.springblade.desk.basic.pojo.entity.PlatingSmall; -import org.springblade.desk.basic.pojo.entity.TeamSet; import org.springblade.desk.basic.pojo.entity.WorkCenter; -import org.springblade.desk.basic.pojo.vo.PlatingSmallVO; import org.springblade.desk.basic.pojo.vo.WorkCenterVO; import org.springblade.desk.feign.INoticeClient; import org.springblade.scheduling.pojo.entity.CraftAbilityEntity; @@ -53,20 +55,13 @@ import org.springblade.scheduling.scheduling.vo.CraftAbilityVO; import org.springblade.scheduling.scheduling.wrapper.CraftAbilityWrapper; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.boot.ctrl.BladeController; -import org.springblade.core.tool.utils.DateUtil; -import org.springblade.core.excel.util.ExcelUtil; +import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; -import java.util.Map; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.web.multipart.MultipartFile; - /** * 工艺能力 控制器 * @@ -158,6 +153,7 @@ public class CraftAbilityController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入CraftAbility") + @ApiLog public R save(@Valid @RequestBody CraftAbilityEntity craftAbility) { return R.status(craftAbilityService.save(craftAbility)); } @@ -168,6 +164,7 @@ public class CraftAbilityController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入CraftAbility") + @ApiLog public R update(@Valid @RequestBody CraftAbilityEntity craftAbility) { return R.status(craftAbilityService.updateById(craftAbility)); } @@ -188,6 +185,7 @@ public class CraftAbilityController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(craftAbilityService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java index 6257e3fa..38d1278e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java @@ -25,10 +25,10 @@ */ package org.springblade.scheduling.scheduling.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -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.Parameter; @@ -38,7 +38,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; -import org.springblade.core.mp.base.BaseEntity; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -56,6 +56,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; /** * 设备能力表 控制器 @@ -110,14 +111,35 @@ public class EquipAbilityController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入mesEquipAbility") - public R save(@Valid @RequestBody EquipAbilityEntity entity) { - List list = equipAbilityService.list(Wrappers.lambdaQuery().eq(EquipAbilityEntity::getWorkCenterId,entity.getWorkCenterId()).eq(EquipAbilityEntity::getEquipCode,entity.getEquipCode()).eq(EquipAbilityEntity::getEquipType,entity.getEquipType()).eq(EquipAbilityEntity::getCraftId,entity.getCraftId()).eq(BaseEntity::getIsDeleted,0)); - if(CollectionUtils.isNotEmpty(list)){ - return R.status(false,"该设备能力已存在!"); + public R save(@Valid @RequestBody List list) { + //校验唯一性 + for(EquipAbilityEntity entity : list){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); + wrapper.eq(EquipAbilityEntity::getWorkCenterId,entity.getWorkCenterId()) + .eq(EquipAbilityEntity::getEquipCode,entity.getEquipCode()) + .eq(EquipAbilityEntity::getEquipType,entity.getEquipType()) + .eq(EquipAbilityEntity::getCraftId,entity.getCraftId()); + if(entity.getProcessId() != null){ + wrapper.eq(EquipAbilityEntity::getProcessId,entity.getProcessId()); + } + List oldList = equipAbilityService.list(wrapper); + if(CollectionUtils.isNotEmpty(oldList)){ + return R.status(false,"设备能力["+entity.getWorkCenterName()+"-"+entity.getCraftName()+"-"+entity.getProcessName()+"]已存在!"); + } + + } + //保存 + for(EquipAbilityEntity entity : list){ + boolean flag = equipAbilityService.save(entity); + if(flag){ + //异步执行 + CompletableFuture future = CompletableFuture.runAsync(() -> { + //初始化设备资源 + equipResourceService.initSingleEquipResource(entity); + }); + } } - equipAbilityService.save(entity); - //初始化设备资源 - equipResourceService.initSingleEquipResource(entity); + return R.status(true); } @@ -127,10 +149,13 @@ public class EquipAbilityController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入mesEquipAbility") - public R update(@Valid @RequestBody EquipAbilityEntity entity) { - equipAbilityService.updateById(entity); - //初始化设备资源 - equipResourceService.initSingleEquipResource(entity); + @ApiLog + public R update(@Valid @RequestBody List list) { + for(EquipAbilityEntity entity : list){ + equipAbilityService.updateById(entity); + //初始化设备资源 + equipResourceService.initSingleEquipResource(entity); + } return R.status(true); } @@ -150,6 +175,7 @@ public class EquipAbilityController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(equipAbilityService.deleteLogic(Func.toLongList(ids))); } @@ -168,4 +194,6 @@ public class EquipAbilityController extends BladeController { ExcelUtil.export(response, "设备能力表数据" + DateUtil.time(), "设备能力表数据表", list, EquipAbilityExcel.class); } + + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipmentController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipmentController.java index 4b538ade..3661948f 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipmentController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipmentController.java @@ -36,6 +36,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.BladeUser; @@ -105,6 +106,7 @@ public class EquipmentController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入Equipment") + @ApiLog public R save(@Valid @RequestBody EquipmentEntity equipment) { return R.status(equipmentService.save(equipment)); } @@ -115,6 +117,7 @@ public class EquipmentController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入Equipment") + @ApiLog public R update(@Valid @RequestBody EquipmentEntity equipment) { return R.status(equipmentService.updateById(equipment)); } @@ -135,6 +138,7 @@ public class EquipmentController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(equipmentService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/MainProducerController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/MainProducerController.java index e9a509fe..f2a17d0e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/MainProducerController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/MainProducerController.java @@ -38,6 +38,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; @@ -108,6 +109,7 @@ public class MainProducerController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入mainProducer") + @ApiLog public R save(@Valid @RequestBody MainProducerEntity entity) { List list = mainProducerService.list(Wrappers.lambdaQuery().eq(MainProducerEntity::getProcessId,entity.getProcessId()).eq(MainProducerEntity::getMainProducer,entity.getMainProducer()).eq(BaseEntity::getIsDeleted,0)); if(CollectionUtils.isNotEmpty(list)){ @@ -122,6 +124,7 @@ public class MainProducerController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入mainProducer") + @ApiLog public R update(@Valid @RequestBody MainProducerEntity entity) { return R.status(mainProducerService.updateById(entity)); } @@ -142,6 +145,7 @@ public class MainProducerController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(mainProducerService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/OutsourceProcessController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/OutsourceProcessController.java index 65edd56c..0dff3e76 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/OutsourceProcessController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/OutsourceProcessController.java @@ -25,18 +25,24 @@ */ package org.springblade.scheduling.scheduling.controller; -import io.swagger.v3.oas.annotations.tags.Tag; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import lombok.AllArgsConstructor; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; - -import org.springblade.core.secure.BladeUser; -import org.springblade.core.secure.annotation.IsAdmin; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.scheduling.pojo.entity.OutsourceProcessEntity; import org.springblade.scheduling.scheduling.excel.OutsourceProcessExcel; @@ -44,15 +50,9 @@ import org.springblade.scheduling.scheduling.service.IOutsourceProcessService; import org.springblade.scheduling.scheduling.vo.OutsourceProcessVO; import org.springblade.scheduling.scheduling.wrapper.OutsourceProcessWrapper; import org.springframework.web.bind.annotation.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.boot.ctrl.BladeController; -import org.springblade.core.tool.utils.DateUtil; -import org.springblade.core.excel.util.ExcelUtil; -import java.util.Map; import java.util.List; -import jakarta.servlet.http.HttpServletResponse; +import java.util.Map; /** * 外协工序表 控制器 @@ -106,6 +106,7 @@ public class OutsourceProcessController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入OutsourceProcess") + @ApiLog public R save(@Valid @RequestBody OutsourceProcessEntity OutsourceProcess) { return R.status(outsourceProcessService.save(OutsourceProcess)); } @@ -116,6 +117,7 @@ public class OutsourceProcessController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入OutsourceProcess") + @ApiLog public R update(@Valid @RequestBody OutsourceProcessEntity OutsourceProcess) { return R.status(outsourceProcessService.updateById(OutsourceProcess)); } @@ -136,6 +138,7 @@ public class OutsourceProcessController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(outsourceProcessService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java index bd09de1b..393183c4 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java @@ -38,6 +38,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; @@ -109,6 +110,7 @@ public class PersonAbilityController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入personAbility") + @ApiLog public R save(@Valid @RequestBody PersonAbilityEntity entity) { List list = personAbilityService.list(Wrappers.lambdaQuery().eq(PersonAbilityEntity::getWorkCenterId,entity.getWorkCenterId()).eq(PersonAbilityEntity::getProcessId,entity.getProcessId()).eq(PersonAbilityEntity::getCraftId,entity.getCraftId()).eq(BaseEntity::getIsDeleted,0)); if(CollectionUtils.isNotEmpty(list)){ @@ -123,6 +125,7 @@ public class PersonAbilityController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入personAbility") + @ApiLog public R update(@Valid @RequestBody PersonAbilityEntity entity) { return R.status(personAbilityService.updateById(entity)); } @@ -143,6 +146,7 @@ public class PersonAbilityController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(personAbilityService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SameTroughController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SameTroughController.java index 46d1c364..ffdd7dbd 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SameTroughController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SameTroughController.java @@ -25,18 +25,24 @@ */ package org.springblade.scheduling.scheduling.controller; -import io.swagger.v3.oas.annotations.tags.Tag; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import lombok.AllArgsConstructor; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; - -import org.springblade.core.secure.BladeUser; -import org.springblade.core.secure.annotation.IsAdmin; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.scheduling.pojo.entity.SameTroughEntity; import org.springblade.scheduling.scheduling.excel.SameTroughExcel; @@ -44,15 +50,9 @@ import org.springblade.scheduling.scheduling.service.ISameTroughService; import org.springblade.scheduling.scheduling.vo.SameTroughVO; import org.springblade.scheduling.scheduling.wrapper.SameTroughWrapper; import org.springframework.web.bind.annotation.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.boot.ctrl.BladeController; -import org.springblade.core.tool.utils.DateUtil; -import org.springblade.core.excel.util.ExcelUtil; -import java.util.Map; import java.util.List; -import jakarta.servlet.http.HttpServletResponse; +import java.util.Map; /** * 非同槽因素表 控制器 @@ -106,6 +106,7 @@ public class SameTroughController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入SameTrough") + @ApiLog public R save(@Valid @RequestBody SameTroughEntity sameTrough) { return R.status(sameTroughService.save(sameTrough)); } @@ -116,6 +117,7 @@ public class SameTroughController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入SameTrough") + @ApiLog public R update(@Valid @RequestBody SameTroughEntity sameTrough) { return R.status(sameTroughService.updateById(sameTrough)); } @@ -136,6 +138,7 @@ public class SameTroughController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(sameTroughService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SintTempCurveController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SintTempCurveController.java index 5cd335c8..f12a5dc4 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SintTempCurveController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/SintTempCurveController.java @@ -25,18 +25,24 @@ */ package org.springblade.scheduling.scheduling.controller; -import io.swagger.v3.oas.annotations.tags.Tag; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; -import lombok.AllArgsConstructor; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; - -import org.springblade.core.secure.BladeUser; -import org.springblade.core.secure.annotation.IsAdmin; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.scheduling.pojo.entity.SintTempCurveEntity; import org.springblade.scheduling.scheduling.excel.SintTempCurveExcel; @@ -44,15 +50,9 @@ import org.springblade.scheduling.scheduling.service.ISintTempCurveService; import org.springblade.scheduling.scheduling.vo.SintTempCurveVO; import org.springblade.scheduling.scheduling.wrapper.SintTempCurveWrapper; import org.springframework.web.bind.annotation.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.boot.ctrl.BladeController; -import org.springblade.core.tool.utils.DateUtil; -import org.springblade.core.excel.util.ExcelUtil; -import java.util.Map; import java.util.List; -import jakarta.servlet.http.HttpServletResponse; +import java.util.Map; /** * 烧结温度曲线表 控制器 @@ -106,6 +106,7 @@ public class SintTempCurveController extends BladeController { @PostMapping("/save") @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入SintTempCurve") + @ApiLog public R save(@Valid @RequestBody SintTempCurveEntity sintTempCurve) { return R.status(sintTempCurveService.save(sintTempCurve)); } @@ -116,6 +117,7 @@ public class SintTempCurveController extends BladeController { @PostMapping("/update") @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入SintTempCurve") + @ApiLog public R update(@Valid @RequestBody SintTempCurveEntity sintTempCurve) { return R.status(sintTempCurveService.updateById(sintTempCurve)); } @@ -136,6 +138,7 @@ public class SintTempCurveController extends BladeController { @PostMapping("/remove") @ApiOperationSupport(order = 7) @Operation(summary = "逻辑删除", description = "传入ids") + @ApiLog public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(sintTempCurveService.deleteLogic(Func.toLongList(ids))); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.java index ca8684c3..fbf9f10e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.java @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +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; @@ -62,6 +63,6 @@ public interface PartMapper extends BaseMapper { List export(@Param("ew") Wrapper queryWrapper); - List selectChildPart(PartEntity part); + List selectChildPart(DsPartVersionEntity partVersion); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.xml index 40c865a5..a47ccc46 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PartMapper.xml @@ -77,10 +77,12 @@ c.* FROM DS_PART a - LEFT JOIN DS_PART_RELATION b ON a.id = b.PART_ID - LEFT JOIN DS_PART c ON b.CHILD_PART_ID = c.id + LEFT JOIN DS_PART_VERSION b ON a.id = b.part_id + LEFT JOIN DS_PART_RELATION c ON a.id = c.PART_ID + LEFT JOIN DS_PART d ON c.CHILD_PART_ID = d.id WHERE - a.PART_CODE = #{partCode} + b.PART_CODE = #{partCode} + and b.PART_VERSION = #{partVersion} 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 00000000..34bae5bd --- /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 00000000..b8011b87 --- /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 8905fe6e..2a71a106 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 00000000..b7451cc6 --- /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 74d77890..a67d27ef 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 782efe47..8ac150f7 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 00000000..512ece10 --- /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 b7547a40..fb41bdc9 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 40792205..2e9335b6 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 0f86560c..8d18bde9 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 2887f127..d298c560 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; + }