From ccb139cf1ca04bfc3a3bfa3425dba32cc39eed69 Mon Sep 17 00:00:00 2001 From: liweidong-hj Date: Tue, 17 Mar 2026 14:37:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E8=89=BA=E5=90=8C=E6=AD=A5=E8=80=81me?= =?UTF-8?q?s=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/LauncherConstant.java | 4 +- .../dashboard/pojo/entity/DsCraftEntity.java | 6 + .../pojo/entity/DsPartBasicsEntity.java | 61 + .../dashboard/pojo/entity/DsPartEntity.java | 7 + .../desk/dashboard/pojo/entity/DsPartSub.java | 121 ++ .../desk/dashboard/pojo/vo/DsPartBomVO.java | 6 + .../desk/dashboard/pojo/vo/DsTaskingVO.java | 8 +- .../pojo/entity/ProcessSetEntity.java | 2 +- .../desk/basic/mapper/CraftAbilityMapper.java | 4 + .../desk/basic/mapper/CraftAbilityMapper.xml | 7 + .../basic/service/ICraftAbilityService.java | 13 + .../service/impl/CraftAbilityServiceImpl.java | 10 + .../controller/DsTaskingController.java | 36 +- .../dashboard/mapper/BsProcessSetMapper.java | 3 + .../desk/dashboard/mapper/CraftMapper.xml | 4 + .../desk/dashboard/mapper/DsCraftMapper.java | 2 + .../dashboard/mapper/DsPartBasicsMapper.java | 42 + .../desk/dashboard/mapper/DsPartMapper.java | 5 +- .../dashboard/mapper/DsProcessMapper.java | 2 + .../dashboard/mapper/DsTaskingMapper.java | 24 + .../dashboard/mapper/PartBasicsMapper.xml | 10 + .../desk/dashboard/mapper/PartMapper.xml | 10 +- .../dashboard/mapper/PartRelationMapper.xml | 3 +- .../desk/dashboard/mapper/ProcessMapper.xml | 4 + .../dashboard/mapper/ProcessSetMapper.xml | 5 + .../desk/dashboard/mapper/TaskingMapper.xml | 13 + .../service/IBsProcessSetService.java | 8 + .../dashboard/service/IDsCraftService.java | 7 + .../service/IDsPartBasicsService.java | 45 + .../dashboard/service/IDsPartService.java | 12 +- .../dashboard/service/IDsProcessService.java | 7 + .../dashboard/service/IDsTaskingService.java | 14 +- .../service/impl/BsProcessSetServiceImpl.java | 6 + .../service/impl/DsCraftServiceImpl.java | 6 + .../service/impl/DsPartBasicsServiceImpl.java | 52 + .../service/impl/DsPartServiceImpl.java | 12 +- .../service/impl/DsProcessServiceImpl.java | 5 + .../service/impl/DsTaskingServiceImpl.java | 1130 ++++++++++++++--- .../dashboard/utils/IncrementNumberUtil.java | 36 + .../impl/PlateGoodsRecordServiceImpl.java | 10 +- 40 files changed, 1567 insertions(+), 195 deletions(-) create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartBasicsEntity.java create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartSub.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartBasicsMapper.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartBasicsMapper.xml create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartBasicsService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartBasicsServiceImpl.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/IncrementNumberUtil.java diff --git a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java index be4404d7..2f1548cd 100644 --- a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java +++ b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java @@ -31,8 +31,8 @@ public interface LauncherConstant { /** * nacos dev 地址 */ - String NACOS_DEV_ADDR = "192.168.249.27:8848"; -// String NACOS_DEV_ADDR = "127.0.0.1:8848"; +// String NACOS_DEV_ADDR = "192.168.249.27:8848"; + String NACOS_DEV_ADDR = "127.0.0.1:8848"; /** * nacos prod 地址 diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java index 76838246..b15e86a2 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsCraftEntity.java @@ -107,5 +107,11 @@ public class DsCraftEntity extends BaseEntity { @Schema(description = "返工单号") private String reworkOrder; + /** + * 零件号 + */ + @Schema(description = "零件号") + private String partCode; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartBasicsEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartBasicsEntity.java new file mode 100644 index 00000000..60485648 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartBasicsEntity.java @@ -0,0 +1,61 @@ +package org.springblade.desk.dashboard.pojo.entity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; +import java.io.Serial; + +/** + * 零件基础信息实体类 + * + * @author + * @since + */ +@Data +@TableName("DS_PART_BASICS") +@Schema(description = "DsPartBasics对象") +@EqualsAndHashCode(callSuper = true) +public class DsPartBasicsEntity extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 零件号 + */ + @Schema(description = "零件号") + private String partCode; + + /** + * 零件名称 + */ + @Schema(description = "零件名称") + private String partName; + + /** + * 产品型号 + */ + @Schema(description = "产品型号") + private String productType; + + /** + * 是否烧结产品 + */ + @Schema(description = "是否烧结产品") + private String isSintering; + + /** + * 是否玻璃饼 + */ + @Schema(description = "是否玻璃饼") + private String isClassCake; + + /** + * 备注 + */ + @Schema(description = "备注") + private String remarks; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java index 4d11ccc6..90662a8a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java @@ -318,4 +318,11 @@ public class DsPartEntity extends BaseEntity { @Schema(description = "是否电镀") private String isElectroplating; + /** + * 子件类型 + * A代表组合件,M代表零件,R代表原材料,B代表外购件,P代表虚拟件,G代表产品 + */ + @Schema(description = "子件类型") + private String subType; + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartSub.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartSub.java new file mode 100644 index 00000000..8bb6bf24 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartSub.java @@ -0,0 +1,121 @@ +package org.springblade.desk.dashboard.pojo.entity; + +import lombok.Data; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * @author: 没有这张表 只是查询用于接收 + * @create: 2026-03-14 + */ +@Data +public class DsPartSub { + + /** + * 插针 + */ + public static Short SIN_TER_TYPE_CZ = 1; + /** + * 壳体 + */ + public static Short SIN_TER_TYPE_KT = 2; + /** + * 自制玻璃饼 + */ + public static Short SIN_TER_TYPE_BLB = 3; + /** + * 其他 + */ + public static Short SIN_TER_TYPE_QT = 4; + /** + * 石墨模 + */ + public static Short SIN_TER_TYPE_SMM = 5; + public static Map subTypeMap = new HashMap<>(6); + public static Map sinTerTypeMap = new HashMap<>(6); + + static { + subTypeMap.put("A", "组合件"); + subTypeMap.put("M", "零件"); + subTypeMap.put("R", "原材料"); + subTypeMap.put("B", "外购件"); + subTypeMap.put("P", "虚拟件"); + subTypeMap.put("G", "产品"); + + sinTerTypeMap.put(SIN_TER_TYPE_CZ, "插针"); + sinTerTypeMap.put(SIN_TER_TYPE_KT, "壳体"); + sinTerTypeMap.put(SIN_TER_TYPE_BLB, "自制玻璃饼"); + sinTerTypeMap.put(SIN_TER_TYPE_QT, "其他"); + sinTerTypeMap.put(SIN_TER_TYPE_SMM, "石墨模"); + } + + /** + * 流水号 + */ + private Long psId; + /** + * 零件号 + */ + private String partCode; + /** + * 子件号 + */ + private String subCode; + /** + * 子件名称 + */ + private String subName; + /** + * 定额 + */ + private Double quota; + /** + * 子件类型 + * A代表组合件,M代表零件,R代表原材料,B代表外购件,P代表虚拟件,G代表产品 + */ + private String subType; + /** + * 烧结子件种类 + * 1插针,2壳体,3自制玻璃饼,4其它,5石墨模 + */ + private Integer sinTerType; + /** + * 材料 + */ + private String material; + /** + * 面积 + */ + private Double area; + /** + * 镀种 + */ + private String plate; + /** + * 产品系列 + */ + private String productType; + /** + * 镀层代号 + */ + private String plateCode; + /** + * 镀层厚度 + */ + private String plateThickness; + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 配置码 + */ + private String configNo; + /** + * 备注 + */ + private String memo; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java index eecf8668..fd192609 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartBomVO.java @@ -76,4 +76,10 @@ public class DsPartBomVO { */ @Schema(description = "子件PDM图纸链接") private String zDocLink; + + /** + * 定额 + */ + @Schema(description = "定额") + private Double quota; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java index 0ca4335b..235d61f8 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsTaskingVO.java @@ -45,11 +45,17 @@ public class DsTaskingVO extends DsTaskingEntity { @Serial private static final long serialVersionUID = 1L; +// /** +// * 子件信息 +// */ +// @Schema(description = "子件信息") +// private List children; + /** * 子件信息 */ @Schema(description = "子件信息") - private List children; + private List children; /** * 任务状态 diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/ProcessSetEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/ProcessSetEntity.java index ed5fe9bd..8d04926a 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/ProcessSetEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/ProcessSetEntity.java @@ -87,7 +87,7 @@ public class ProcessSetEntity extends BaseEntity { @Schema(description = "标准周期") private BigDecimal cycle; /** - * 是否主工序 + * 是否主工序 0否 1是 */ @Schema(description = "是否主工序") private String isMain; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.java index 3889e6b8..5f273966 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.java @@ -62,4 +62,8 @@ public interface CraftAbilityMapper extends BaseMapper { */ List export(@Param("ew") Wrapper queryWrapper); + + CraftAbilityEntity selectOldMesCraftAbilityByOldCaId(@Param("caId") Long caId); + + CraftAbilityEntity selectByCaCode(@Param("caCode") String caCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.xml index ebae4858..e485b0aa 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/CraftAbilityMapper.xml @@ -27,5 +27,12 @@ + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/ICraftAbilityService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/ICraftAbilityService.java index 5f1b59c5..7b102a4a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/ICraftAbilityService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/ICraftAbilityService.java @@ -60,4 +60,17 @@ public interface ICraftAbilityService extends BaseService { */ List export(Wrapper queryWrapper); + /** + * 根据老mes工艺能力ID查询 + * @param caId + * @return + */ + CraftAbilityEntity selectOldMesCraftAbilityByOldCaId(Long caId); + + /** + * 根据工艺能力编码查询 + * @param caCode + * @return + */ + CraftAbilityEntity selectByCaCode(String caCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/CraftAbilityServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/CraftAbilityServiceImpl.java index 0aad84f2..df55718b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/CraftAbilityServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/CraftAbilityServiceImpl.java @@ -62,4 +62,14 @@ public class CraftAbilityServiceImpl extends BaseServiceImpl partDetail(@RequestParam Long taskId,@RequestParam String version) { - DsPartSynthesisVO detail = dsTaskingService.getPartDetail(taskId,version); + public R partDetail(@RequestParam(required = false) Long taskId, + @RequestParam(required = false) String partCode, + @RequestParam String version) { + boolean hasTask = taskId != null; + boolean hasPart = partCode != null && !partCode.trim().isEmpty(); + + if (hasTask == hasPart) { + throw new IllegalArgumentException("taskId 和 partCode 必须且只能有一个有值"); + } + + DsPartSynthesisVO detail = dsTaskingService.getPartDetail(taskId,version,partCode); return R.data(detail); } @@ -241,11 +251,19 @@ public class DsTaskingController extends BladeController { @GetMapping("/processAuthorized") @ApiOperationSupport(order = 1) @Operation(summary = "工艺编制", description = "传入dsCraft") - public R processAuthorized(@RequestParam Long taskId, + public R processAuthorized(@RequestParam(required = false) Long taskId, + @RequestParam(required = false) String partCode, @RequestParam(required = false) String rank, @RequestParam String version) { - DsPartAuthorizedVO detail = dsTaskingService.processAuthorized(taskId,rank,version); + boolean hasTask = taskId != null; + boolean hasPart = partCode != null && !partCode.trim().isEmpty(); + + if (hasTask == hasPart) { + throw new IllegalArgumentException("taskId 和 partCode 必须且只能有一个有值"); + } + + DsPartAuthorizedVO detail = dsTaskingService.processAuthorized(taskId,partCode,rank,version); return R.data(detail); } @@ -383,4 +401,14 @@ public class DsTaskingController extends BladeController { } + /** + * 零件信息表 详情-工艺详情 + */ + @GetMapping("/syncTasking") + public R craftDetail() { + boolean b = dsTaskingService.syncTasking(); + return R.data(b); + } + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java index cc752b81..82bad3e4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java @@ -32,6 +32,7 @@ import org.apache.ibatis.annotations.Param; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.vo.BsProcessSetVO; import org.springblade.desk.dashboard.excel.BsProcessSetExcel; +import org.springblade.scheduling.pojo.entity.ProcessSetEntity; import java.util.List; @@ -64,4 +65,6 @@ public interface BsProcessSetMapper extends BaseMapper { BsProcessSetEntity selectBsProcessSetByProcessCode(@Param("processCode")String processCode); List selectAll(); + + BsProcessSetEntity selectOldMesProcessSetByOldPpsId(@Param("oldPpsId") Long oldPpsId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml index f80740cf..24b85bbe 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftMapper.xml @@ -82,5 +82,9 @@ + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java index 8498ebb8..23edd3eb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsCraftMapper.java @@ -81,4 +81,6 @@ public interface DsCraftMapper extends BaseMapper { * @return */ DsCraftEntity selectDsCraftByPartCodeAndVersion(@Param("partCode")Long partCode,@Param("partVersion")String partVersion); + + List selectOldMesCraftByOldMesPartId(@Param("oldMesPartId") Long oldMesPartId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartBasicsMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartBasicsMapper.java new file mode 100644 index 00000000..d0572f6d --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartBasicsMapper.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.desk.dashboard.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.springblade.desk.dashboard.pojo.entity.DsPartBasicsEntity; + +/** + * 零件基础信息表 Mapper 接口 + * + * @author BladeX + * @since 2025-11-12 + */ +public interface DsPartBasicsMapper extends BaseMapper { + + + DsPartBasicsEntity selectPartCode(@Param("partCode") String partCode); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartMapper.java index 2614a79a..2ff60108 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsPartMapper.java @@ -26,6 +26,7 @@ package org.springblade.desk.dashboard.mapper; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartSub; import org.springblade.desk.dashboard.pojo.vo.*; import org.springblade.desk.dashboard.excel.DsPartExcel; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -76,7 +77,7 @@ public interface DsPartMapper extends BaseMapper { * @param partCode * @return */ - DsPartEntity selectDsPartByPatCode(@Param("partCode")String partCode); + List selectDsPartByPatCode(@Param("partCode")String partCode); /** * 零件过期时间区间查询 @@ -148,4 +149,6 @@ public interface DsPartMapper extends BaseMapper { List selectDsPartVersionByIds(@Param("ids") List idList); List selectPartByDate(@Param("startDate") Date startDate,@Param("endDate") Date endDate); + + List selectDsPartSub(@Param("partCode") String partCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsProcessMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsProcessMapper.java index dd02582a..0d359039 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsProcessMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsProcessMapper.java @@ -73,4 +73,6 @@ public interface DsProcessMapper extends BaseMapper { * @return */ List selectDsProcessByIds(@Param("processIds")List processIds); + + List selectOldMesProcessByOldMesCraftId(@Param("oldMesCraftId") Long oldMesCraftId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java index 5744db14..9b953202 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsTaskingMapper.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.mapper; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsTaskingEntity; import org.springblade.desk.dashboard.pojo.vo.DsTaskingVO; import org.springblade.desk.dashboard.excel.DsTaskingExcel; @@ -32,6 +33,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; + +import java.util.Date; import java.util.List; /** @@ -105,4 +108,25 @@ public interface DsTaskingMapper extends BaseMapper { @Param("reworkOrder")String reworkOrder, @Param("batchNo")String batchNo); + + /** + * 获取最近的同步时间 + * @return + */ + DsTaskingEntity getMaxSyncTime(); + + /** + * 查询老mes + * @param startTime + * @param endTime + * @return + */ + List selectOldMesTasking(@Param("startTime") Date startTime,@Param("endTime") Date endTime); + + /** + * 获取老mes的零件 + * @param partCode + * @return + */ + DsPartEntity getOldMesPartByPartCode(@Param("partCode") String partCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartBasicsMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartBasicsMapper.xml new file mode 100644 index 00000000..ed740816 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartBasicsMapper.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartMapper.xml index 438b0647..d0385381 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartMapper.xml @@ -343,7 +343,8 @@ p.DOC_LINK as bDocLink, c.PART_CODE as zPartCode, c.PART_NAME as zPartName, - c.DOC_LINK as zDocLink + c.DOC_LINK as zDocLink, + c.QUOTA as quota FROM DS_PART_RELATION r LEFT JOIN DS_PART p ON r.PART_ID = p.ID LEFT JOIN DS_PART c ON r.CHILD_PART_ID = c.ID @@ -380,6 +381,13 @@ WHERE update_time BETWEEN TO_DATE(#{startDate}, 'yyyy-mm-dd hh24:mi:ss') AND TO_DATE(#{endDate}, 'yyyy-mm-dd hh24:mi:ss'); + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartRelationMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartRelationMapper.xml index b979f296..50977c24 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartRelationMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/PartRelationMapper.xml @@ -41,7 +41,8 @@ p.DOC_LINK as bDocLink, c.PART_CODE as zPartCode, c.PART_NAME as zPartName, - c.DOC_LINK as zDocLink + c.DOC_LINK as zDocLink, + c.QUOTA as quota FROM DS_PART_RELATION r LEFT JOIN DS_PART p ON r.PART_ID = p.ID LEFT JOIN DS_PART c ON r.CHILD_PART_ID = c.ID diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessMapper.xml index 1bbf67e6..3cfe562b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessMapper.xml @@ -48,5 +48,9 @@ #{id} + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml index d303d1fd..d27ef025 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml @@ -47,5 +47,10 @@ + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml index 2c70e397..1524f020 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml @@ -123,5 +123,18 @@ and BATCH_NO = #{batchNo} and REWORK_ORDER = #{reworkOrder} + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java index 0f3f7e5e..079c37ad 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java @@ -31,6 +31,7 @@ import org.springblade.core.mp.base.BaseService; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.vo.BsProcessSetVO; import org.springblade.desk.dashboard.excel.BsProcessSetExcel; +import org.springblade.scheduling.pojo.entity.ProcessSetEntity; import java.util.List; /** @@ -86,4 +87,11 @@ public interface IBsProcessSetService extends BaseService { * @return */ List getProcessSetList(); + + /** + * 根据老mes的工序设置ID 查询 + * @param oldPpsId + * @return + */ + BsProcessSetEntity selectOldMesProcessSetByOldPpsId(Long oldPpsId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java index 8103fd94..acc10646 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsCraftService.java @@ -184,4 +184,11 @@ public interface IDsCraftService extends BaseService { * @return */ DsCraftEntity selectDsCraftByPartCodeAndVersion(Long partCode,String partVersion); + + /** + * 根据老mes partId查询老mes工艺 + * @param oldMesPartId + * @return + */ + List selectOldMesCraftByOldMesPartId(Long oldMesPartId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartBasicsService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartBasicsService.java new file mode 100644 index 00000000..255d1289 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartBasicsService.java @@ -0,0 +1,45 @@ +/** + * 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.desk.dashboard.service; + +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.dashboard.pojo.entity.DsPartBasicsEntity; + +/** + * 零件基础信息表 服务类 + * + * @author BladeX + * @since 2025-11-12 + */ +public interface IDsPartBasicsService extends BaseService { + + /** + * 根据零件号查询 + * @param partCode + * @return + */ + DsPartBasicsEntity selectByPartCode(String partCode); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java index f7c92c51..8ec92025 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsPartService.java @@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.dashboard.excel.DsPartExcel; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartSub; import org.springblade.desk.dashboard.pojo.entity.DsProcessProjectEntity; import org.springblade.desk.dashboard.pojo.vo.*; @@ -219,7 +220,7 @@ public interface IDsPartService extends BaseService { * @param partCode * @return */ - DsPartEntity selectDsPartByPatCode(String partCode); + List selectDsPartByPatCode(String partCode); /** * 根据零件号、工序ID、版本号、工艺级别查询对应的检验项目 @@ -230,4 +231,13 @@ public interface IDsPartService extends BaseService { * @return 检验项目列表 */ List selectDsProcessProjectByPartNoAndPpsId(String partCode, String orders, String partVersion, String rank); + + /** + * 查询老mes的子件信息 + * @param partCode + * @return + */ + List selectDsPartSub(String partCode); + + List selectDsPartVersionByIds(List idList); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProcessService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProcessService.java index 7b82a4a2..4f727183 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProcessService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsProcessService.java @@ -90,4 +90,11 @@ public interface IDsProcessService extends BaseService { * @return */ boolean addOrEdit(DsCraftEntity craft, List processList, List processDeleteIds, List projectDeleteIds); + + /** + * 根据老mes的工艺id查询老mes的工序 + * @param oldMesCraftId + * @return + */ + List selectOldMesProcessByOldMesCraftId(Long oldMesCraftId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java index 1471874e..7189cec2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java @@ -136,17 +136,19 @@ public interface IDsTaskingService extends BaseService { * 零件 子件 详情 * @param taskId 零件工艺信息ID * @param version 版本号 + * @param partCode 零件号 * @return 零件详细信息 */ - DsPartSynthesisVO getPartDetail(Long taskId, String version); + DsPartSynthesisVO getPartDetail(Long taskId, String version, String partCode); /** * 工艺编制 * @param taskId 任务ID + * @param partCode 零件号 * @param rank 工艺等级 * @return version 版本号 */ - DsPartAuthorizedVO processAuthorized(Long taskId, String rank,String version); + DsPartAuthorizedVO processAuthorized(Long taskId, String partCode, String rank, String version); /** @@ -220,4 +222,12 @@ public interface IDsTaskingService extends BaseService { * @return */ boolean authorizedPart(DsPartEntity dsPart, List zPartList); + + + /** + * 同步任务 + * @return + */ + boolean syncTasking(); + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java index 96854756..1e503f50 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java @@ -36,6 +36,7 @@ import org.springblade.desk.dashboard.mapper.BsProcessSetMapper; import org.springblade.desk.dashboard.service.IBsProcessSetService; import org.springblade.desk.dashboard.service.IBsProcessTeamService; import org.springblade.desk.dashboard.service.IBsTeamSetService; +import org.springblade.scheduling.pojo.entity.ProcessSetEntity; import org.springblade.system.feign.IUserClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -171,4 +172,9 @@ public class BsProcessSetServiceImpl extends BaseServiceImpl selectOldMesCraftByOldMesPartId(Long oldMesPartId) { + + return craftMapper.selectOldMesCraftByOldMesPartId(oldMesPartId); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartBasicsServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartBasicsServiceImpl.java new file mode 100644 index 00000000..e53a4eef --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartBasicsServiceImpl.java @@ -0,0 +1,52 @@ +/** + * 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.desk.dashboard.service.impl; + +import org.checkerframework.checker.units.qual.A; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.dashboard.mapper.DsPartBasicsMapper; +import org.springblade.desk.dashboard.pojo.entity.DsPartBasicsEntity; +import org.springblade.desk.dashboard.service.IDsPartBasicsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 零件基础信息 服务实现类 + * + * @author BladeX + * @since 2025-11-12 + */ +@Service +public class DsPartBasicsServiceImpl extends BaseServiceImpl implements IDsPartBasicsService { + + @Autowired + DsPartBasicsMapper partBasicsMapper; + + @Override + public DsPartBasicsEntity selectByPartCode(String partCode) { + return partBasicsMapper.selectPartCode(partCode); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java index 1fe82342..9a981690 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsPartServiceImpl.java @@ -506,7 +506,7 @@ public class DsPartServiceImpl extends BaseServiceImpl selectDsPartByPatCode(String partCode) { return dsPartMapper.selectDsPartByPatCode(partCode); } @@ -530,4 +530,14 @@ public class DsPartServiceImpl extends BaseServiceImpl selectDsPartSub(String partCode) { + return dsPartMapper.selectDsPartSub(partCode); + } + + @Override + public List selectDsPartVersionByIds(List idList) { + return dsPartMapper.selectDsPartVersionByIds(idList); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProcessServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProcessServiceImpl.java index 7c717f55..37ca2a90 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProcessServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsProcessServiceImpl.java @@ -160,4 +160,9 @@ public class DsProcessServiceImpl extends BaseServiceImpl selectOldMesProcessByOldMesCraftId(Long oldMesCraftId) { + return processMapper.selectOldMesProcessByOldMesCraftId(oldMesCraftId); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java index 5a642911..0e497aaa 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java @@ -32,6 +32,7 @@ import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.SpringUtil; +import org.springblade.desk.basic.service.ICraftAbilityService; import org.springblade.desk.dashboard.constant.*; import org.springblade.desk.dashboard.pojo.dto.DsTaskingDTO; import org.springblade.desk.dashboard.pojo.entity.*; @@ -39,10 +40,16 @@ import org.springblade.desk.dashboard.pojo.vo.*; import org.springblade.desk.dashboard.excel.DsTaskingExcel; import org.springblade.desk.dashboard.mapper.DsTaskingMapper; import org.springblade.desk.dashboard.service.*; +import org.springblade.desk.order.pojo.entity.MoldApply; +import org.springblade.desk.order.pojo.entity.MoldDemand; import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.order.service.IMoldApplyService; +import org.springblade.desk.order.service.IMoldDemandService; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.service.IWorkOrderService; import org.springblade.desk.produce.service.IWorkPlanService; +import org.springblade.desk.quality.pojo.request.ReviewSheetErpSearch; +import org.springblade.desk.quality.service.IReviewSheetService; import org.springblade.erpdata.feign.IErpDataReworkTaskClient; import org.springblade.scheduling.pojo.entity.WorkOrderEntity; import org.springblade.scheduling.pojo.entity.WorkPlanEntity; @@ -55,6 +62,8 @@ 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 org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -63,6 +72,7 @@ import java.sql.SQLException; import java.util.*; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -136,6 +146,14 @@ public class DsTaskingServiceImpl extends BaseServiceImpl partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); - //获取所有子件ID - List idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(idList)){ - continue; - } - //获取版本号 根据子件ID - List partVersionList = partVersionService.selectByPartIds(idList); - List list = new ArrayList<>(); - for (DsPartVersionEntity dsPartVersionEntity : partVersionList) { - //根据零件编码 和 版本号查询数据 - List taskStatusList = new ArrayList<>(Arrays.asList( - TaskingConstant.TASK_STATUS_WAIT, - TaskingConstant.TASK_STATUS_ALREADY, - TaskingConstant.TASK_STATUS_UNDERWAY - )); - List dsTaskingEntityList = taskingMapper.selectDsTaskingByPartCodeAndVersion(dsPartVersionEntity.getPartCode(), dsPartVersionEntity.getPartVersion(), taskStatusList); - - List collect = dsTaskingEntityList.stream() - .map(entity -> { - DsTaskingIsCompletedVO vo = new DsTaskingIsCompletedVO(); - BeanUtils.copyProperties(entity, vo); - return vo; - }) - .collect(Collectors.toList()); - - list.addAll(collect); - } +// if(TaskingConstant.IS_SINTERING.equals(partEntity.getIsSintering())){ +// //查询子件信息 +// List partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); +// //获取所有子件ID +// List idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); +// if(CollectionUtils.isEmpty(idList)){ +// continue; +// } +// //获取版本号 根据子件ID +// List partVersionList = partVersionService.selectByPartIds(idList); +// List list = new ArrayList<>(); +// for (DsPartVersionEntity dsPartVersionEntity : partVersionList) { +// //根据零件编码 和 版本号查询数据 +// List taskStatusList = new ArrayList<>(Arrays.asList( +// TaskingConstant.TASK_STATUS_WAIT, +// TaskingConstant.TASK_STATUS_ALREADY, +// TaskingConstant.TASK_STATUS_UNDERWAY +// )); +// List dsTaskingEntityList = taskingMapper.selectDsTaskingByPartCodeAndVersion(dsPartVersionEntity.getPartCode(), dsPartVersionEntity.getPartVersion(), taskStatusList); +// +// List collect = dsTaskingEntityList.stream() +// .map(entity -> { +// DsTaskingIsCompletedVO vo = new DsTaskingIsCompletedVO(); +// BeanUtils.copyProperties(entity, vo); +// return vo; +// }) +// .collect(Collectors.toList()); +// +// list.addAll(collect); +// } +// +// if(!CollectionUtils.isEmpty(list)){ +// dsTaskingVO.setChildren(list); +// } +// } - if(!CollectionUtils.isEmpty(list)){ - dsTaskingVO.setChildren(list); - } + //查询子件信息 + List partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); + //获取所有子件ID + List idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(idList)) { + List dsPartEntityList = partService.selectDsPartVersionByIds(idList); +// for (DsPartVersionVO dsPartVersionVO : dsPartEntityList) { +// dsPartVersionVO.setUpdateUserStr(userClient.userInfo(Func.toLong(dsPartVersionVO.getUpdateUser())).getData().getUser().getName()); +// } + dsTaskingVO.setChildren(dsPartEntityList); } } } @@ -306,7 +336,7 @@ public class DsTaskingServiceImpl extends BaseServiceImpl processEntities = processService.selectDsProcessByCraftId(craft.getId()); if(CollectionUtils.isEmpty(processEntities)){ - throw new ServiceException("【零件号】工艺未编制工序"); + throw new ServiceException("【零件号】"+partEntity.getPartCode()+"工艺未编制工序"); } //判断工序下的检验项目 for (DsProcessEntity processEntity : processEntities) { @@ -328,33 +358,51 @@ public class DsTaskingServiceImpl extends BaseServiceImpl zProcessEntities = processService.selectDsProcessByCraftId(zCraft.getId()); + if(CollectionUtils.isEmpty(zProcessEntities)){ + throw new ServiceException("【子件号】工艺未编制工序"); + } - DsCraftEntity zCraft = craftService.getPartCraft(zPartEntity.getId(),rank); - if(null == zCraft){ - throw new ServiceException("子件工艺缺失"); - } - List zProcessEntities = processService.selectDsProcessByCraftId(zCraft.getId()); - if(CollectionUtils.isEmpty(zProcessEntities)){ - throw new ServiceException("【子件号】工艺未编制工序"); - } + //判断工序下的检验项目 +// for (DsProcessEntity zProcessEntity : zProcessEntities) { +// BsProcessSetEntity processSet = processSetService.selectBsProcessSetByProcessCode(zProcessEntity.getProcessCode()); +// if(TaskingConstant.IS_CHECKOUT.equals(processSet.getIsCheckout()) ){ +// List processProjectEntities = processProjectService.selectDsProcessProjectByProcessId(zProcessEntity.getId()); +// if(CollectionUtils.isEmpty(processProjectEntities)){ +// throw new ServiceException("子件"+zProcessEntity.getProcessName()+":未编制检验项目"); +// } +// } +// } - //判断工序下的检验项目 - for (DsProcessEntity zProcessEntity : zProcessEntities) { - BsProcessSetEntity processSet = processSetService.selectBsProcessSetByProcessCode(zProcessEntity.getProcessCode()); - if(TaskingConstant.IS_CHECKOUT.equals(processSet.getIsCheckout()) ){ - List processProjectEntities = processProjectService.selectDsProcessProjectByProcessId(zProcessEntity.getId()); - if(CollectionUtils.isEmpty(processProjectEntities)){ - throw new ServiceException("子件"+zProcessEntity.getProcessName()+":未编制检验项目"); + zCraft.setCraftStatus(TaskingConstant.IN_USE); + craftService.updateById(zCraft); + + DsPartVersionEntity partVersionEntity = partVersionService.selectByPartId(zPartEntity.getId()); + // 5新图任务 - 磨具计划下发 对接坤哥 + if(TaskingConstant.NEW_MAP_TASKS.equals(dsTaskingEntity.getTaskType()) + && DsPartConst.SIN_TER_TYPE_SMM.equals(zPartEntity.getSinTerType()) + && "1".equals(partVersionEntity.getPartVersion())){ + + List moldDemandList = new ArrayList<>(); + MoldDemand moldDemand = new MoldDemand(); + moldDemand.setPartCode(zPartEntity.getPartCode()); + moldDemand.setPartName(zPartEntity.getPartName()); + moldDemand.setMemo("工艺同步新图零件"); + moldDemandList.add(moldDemand); + boolean moldDemandSve = moldDemandService.save(moldDemandList); + if(!moldDemandSve){ + throw new ServiceException("磨具计划下发新增失败"); } } } - - - zCraft.setCraftStatus(TaskingConstant.IN_USE); - craftService.updateById(zCraft); } //3.工艺任务状态变更为已完成 @@ -366,8 +414,6 @@ public class DsTaskingServiceImpl extends BaseServiceImpl partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); - //获取所有子件ID - List idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(idList)){ - continue; - } - //获取版本号 根据子件ID - List partVersionList = partVersionService.selectByPartIds(idList); - List list = new ArrayList<>(); - for (DsPartVersionEntity dsPartVersionEntity : partVersionList) { - //根据零件编码 和 版本号查询数据 - List taskStatusList = new ArrayList<>(Arrays.asList( - TaskingConstant.TASK_STATUS_WAIT, - TaskingConstant.TASK_STATUS_ALREADY, - TaskingConstant.TASK_STATUS_UNDERWAY - )); - List dsTaskingEntityList = taskingMapper.selectDsTaskingByPartCodeAndVersion(dsPartVersionEntity.getPartCode(), dsPartVersionEntity.getPartVersion(), taskStatusList); - - List collect = dsTaskingEntityList.stream() - .filter(entity -> entity.getCraftMan() != null) - .map(entity -> { - DsTaskingIsCompletedVO vo = new DsTaskingIsCompletedVO(); - BeanUtils.copyProperties(entity, vo); - return vo; - }) - .collect(Collectors.toList()); - - list.addAll(collect); - } - - if(!CollectionUtils.isEmpty(list)){ - dsTaskingVO.setChildren(list); - } +// if(TaskingConstant.IS_SINTERING.equals(partEntity.getIsSintering())){ +// //查询子件信息 +// List partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); +// //获取所有子件ID +// List idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); +// if(CollectionUtils.isEmpty(idList)){ +// continue; +// } +// //获取版本号 根据子件ID +// List partVersionList = partVersionService.selectByPartIds(idList); +// List list = new ArrayList<>(); +// for (DsPartVersionEntity dsPartVersionEntity : partVersionList) { +// //根据零件编码 和 版本号查询数据 +// List taskStatusList = new ArrayList<>(Arrays.asList( +// TaskingConstant.TASK_STATUS_WAIT, +// TaskingConstant.TASK_STATUS_ALREADY, +// TaskingConstant.TASK_STATUS_UNDERWAY +// )); +// List dsTaskingEntityList = taskingMapper.selectDsTaskingByPartCodeAndVersion(dsPartVersionEntity.getPartCode(), dsPartVersionEntity.getPartVersion(), taskStatusList); +// +// List collect = dsTaskingEntityList.stream() +// .filter(entity -> entity.getCraftMan() != null) +// .map(entity -> { +// DsTaskingIsCompletedVO vo = new DsTaskingIsCompletedVO(); +// BeanUtils.copyProperties(entity, vo); +// return vo; +// }) +// .collect(Collectors.toList()); +// +// list.addAll(collect); +// } +// +//// if(!CollectionUtils.isEmpty(list)){ +//// dsTaskingVO.setChildren(list); +//// } +// } + List partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); + //获取所有子件ID + List idList = partRelationEntityList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(idList)) { + List dsPartEntityList = partService.selectDsPartVersionByIds(idList); +// for (DsPartVersionVO dsPartVersionVO : dsPartEntityList) { +// dsPartVersionVO.setUpdateUserStr(userClient.userInfo(Func.toLong(dsPartVersionVO.getUpdateUser())).getData().getUser().getName()); +// } + dsTaskingVO.setChildren(dsPartEntityList); } } } @@ -564,44 +620,50 @@ public class DsTaskingServiceImpl extends BaseServiceImpl partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); - List idList = partRelationEntityList.stream() - .map(DsPartRelationEntity::getChildPartId) +// if(TaskingConstant.IS_SINTERING.equals(partEntity.getIsSintering())){ +// +// } + List partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId()); + List idList = partRelationEntityList.stream() + .map(DsPartRelationEntity::getChildPartId) + .collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(idList)){ + List dsPartEntityList = partService.selectDsPartByIds(idList); + + List dsPartVOList = dsPartEntityList.stream() + .map(entity -> { + DsPartVO vo = new DsPartVO(); + BeanUtils.copyProperties(entity, vo); + + if (vo.getUpdateUser() != null) { + String userName = userClient.userInfo(Func.toLong(vo.getUpdateUser())) + .getData() + .getUser() + .getName(); + vo.setUpdateUserStr(userName); + } + return vo; + }) .collect(Collectors.toList()); - if(!CollectionUtils.isEmpty(idList)){ - List dsPartEntityList = partService.selectDsPartByIds(idList); - - List dsPartVOList = dsPartEntityList.stream() - .map(entity -> { - DsPartVO vo = new DsPartVO(); - BeanUtils.copyProperties(entity, vo); - - if (vo.getUpdateUser() != null) { - String userName = userClient.userInfo(Func.toLong(vo.getUpdateUser())) - .getData() - .getUser() - .getName(); - vo.setUpdateUserStr(userName); - } - return vo; - }) - .collect(Collectors.toList()); - dsPartSynthesisVO.setDsPartVOList(dsPartVOList); - } + dsPartSynthesisVO.setDsPartVOList(dsPartVOList); } dsPartSynthesisVO.setDsPartEntity(partEntity); @@ -613,18 +675,23 @@ public class DsTaskingServiceImpl extends BaseServiceImpl()); - result.getCraftList().add(craftTree); +// craft = new DsCraftEntity(); +// craft.setReworkOrder(dsTaskingEntity.getReworkOrder()); +// craft.setPartId(partEntity.getId()); +// craft.setPartVersions(dsTaskingEntity.getVersion()); +// // 创建工艺节点并设置craftInfo +// craftTree.setCraftInfo(JSONObject.from(craft)); +// craftTree.setProcessList(new ArrayList<>()); +// result.getCraftList().add(craftTree); + + // 查询零件工艺信息 + List dsCraftVOList = craftService.selectDsCraftByPartId(partEntity.getId(), "2"); + if(CollectionUtils.isEmpty(dsCraftVOList)){ + throw new ServiceException("零件工艺信息有误 请检查该零件是否有工艺信息"); + } -// // 查询零件工艺信息 -// List dsCraftVOList = craftService.selectDsCraftByPartId(partEntity.getId(), "2"); -// if(CollectionUtils.isEmpty(dsCraftVOList)){ -// throw new ServiceException("零件工艺信息有误 请检查该零件是否有工艺信息"); -// } -// -// if (!CollectionUtils.isEmpty(dsCraftVOList)) { -// for (DsCraftVO craftVO : dsCraftVOList) { -// -// craftVO.setReworkOrder(dsTaskingEntity.getReworkOrder()); -// craftVO.setPartId(partEntity.getId()); -// craftVO.setPartVersions(dsTaskingEntity.getVersion()); -// -// // 查询工序信息 -// List processEntities = processService.selectDsProcessByCraftId(craftVO.getId()); -// -// if (!CollectionUtils.isEmpty(processEntities)) { -// List processIds = processEntities.stream() -// .map(DsProcessEntity::getId) -// .collect(Collectors.toList()); -// -// // 批量查询关联数据 -// List processProjectEntityList = processProjectService.selectDsProcessProjectByProcessIds(processIds); -// List processMeasuringToolEntityList = processMeasuringToolService.selectDsProcessMeasuringToolByProcessIds(processIds); -// List processMoldToolEntityList = processMoldToolService.selectDsProcessMoldToolByProcessIds(processIds); -// -// // 构建工序树 -// List processTree = buildProcessTree(processEntities, processProjectEntityList, -// processMeasuringToolEntityList, processMoldToolEntityList); -// craftTree.setProcessList(processTree); -// } -// -// result.getCraftList().add(craftTree); -// } -// } + if (!CollectionUtils.isEmpty(dsCraftVOList)) { + for (DsCraftVO craftVO : dsCraftVOList) { + + craftVO.setReworkOrder(dsTaskingEntity.getReworkOrder()); + craftVO.setPartId(partEntity.getId()); + craftVO.setPartVersions(dsTaskingEntity.getVersion()); + + // 查询工序信息 + List processEntities = processService.selectDsProcessByCraftId(craftVO.getId()); + + if (!CollectionUtils.isEmpty(processEntities)) { + List processIds = processEntities.stream() + .map(DsProcessEntity::getId) + .collect(Collectors.toList()); + + // 批量查询关联数据 + List processProjectEntityList = processProjectService.selectDsProcessProjectByProcessIds(processIds); + List processMeasuringToolEntityList = processMeasuringToolService.selectDsProcessMeasuringToolByProcessIds(processIds); + List processMoldToolEntityList = processMoldToolService.selectDsProcessMoldToolByProcessIds(processIds); + + // 构建工序树 + List processTree = buildProcessTree(processEntities, processProjectEntityList, + processMeasuringToolEntityList, processMoldToolEntityList); + craftTree.setProcessList(processTree); + } + + result.getCraftList().add(craftTree); + } + } } return result; @@ -915,6 +982,7 @@ public class DsTaskingServiceImpl extends BaseServiceImpl taskingList = taskingMapper.selectOldMesTasking(startTime,endTime); +// +// if (CollectionUtils.isEmpty(taskingList)) { +// log.info("未读取到任务信息"); +// return true; +// } +// +// log.info("共读取到{}条返工任务待处理", taskingList.size()); +// +// int successCount = 0; +// int skipCount = 0; +// int failCount = 0; +// +// for (DsTaskingEntity dsTasking : taskingList) { +// try { +// boolean result = processTask(dsTasking); +// if (result) { +// successCount++; +// } else { +// skipCount++; +// } +// } catch (Exception e) { +// failCount++; +// log.error("处理任务失败,零件号:{},错误信息:{}", +// dsTasking.getPartCode(), +// e.getMessage(), e); +// //继续处理下一条任务 +// continue; +// } +// } +// +// log.info("任务同步完成:成功{}条,跳过{}条,失败{}条", successCount, skipCount, failCount); +// +// return failCount == 0; +// +// } +// +// /** +// * 处理单个任务 +// * 对应: loop 循环内的处理逻辑 +// */ +// private boolean processTask(DsTaskingEntity dsTasking) { +// +// DsPartEntity oldMesPart = taskingMapper.getOldMesPartByPartCode(dsTasking.getPartCode()); +// if(null == oldMesPart){ +// log.error("老MES零件数据不存在:{}",dsTasking.getPartCode()); +// return false; +// } +// Long oldMesPartId = oldMesPart.getId(); +// +// //1.添加零件基础信息 +// //查询零件基础数据是否存在 +// DsPartBasicsEntity partBasicsEntity = partBasicsService.selectByPartCode(dsTasking.getPartCode()); +// if(null == partBasicsEntity){ +// //新增基础数据 +// partBasicsEntity = new DsPartBasicsEntity(); +// partBasicsEntity.setPartCode(oldMesPart.getPartCode()); +// partBasicsEntity.setPartName(oldMesPart.getPartName()); +// partBasicsEntity.setProductType(oldMesPart.getProductType()); +// partBasicsEntity.setIsSintering(oldMesPart.getIsSintering()); +// partBasicsEntity.setIsClassCake(oldMesPart.getIsClassCake()); +// if (oldMesPart.getRemarks() == null || oldMesPart.getRemarks().trim().isEmpty()) { +// partBasicsEntity.setRemarks(oldMesPart.getRemarks()); +// } +// boolean partBasicsSave = partBasicsService.save(partBasicsEntity); +// if(!partBasicsSave){ +// log.error("零件基础数据添加失败:{}",dsTasking.getPartCode()); +// return false; +// } +// } +// +// //2.添加零件信息 +// //查询零件是否有版本号 +// // 查询零件版本列表 +// List partVersionList = partVersionService.selectByPartCode(dsTasking.getPartCode()); +// +// // 取最大版本号(按数字大小排序,推荐写法) +// Optional latestVersion = partVersionList.stream() +// .map(DsPartVersionEntity::getPartVersion) +// .filter(Objects::nonNull) +// .max(Comparator.comparingInt(Integer::parseInt)); +// +// // 处理版本号递增 +// String newVersion; +// if (latestVersion.isPresent()) { +// log.info("最新版本号:{}", latestVersion.get()); +// newVersion = IncrementNumberUtil.convertNumber(latestVersion.get()); +// } else { +// // 无历史版本号,初始为1 +// newVersion = "1"; +// } +// log.info("新生成的版本号:{}", newVersion); +// +// //新增零件 +// //重置零件id 防止该零件重复添加 ID出错 +// oldMesPart.setId(null); +// boolean newPartSave = partService.save(oldMesPart); +// if(!newPartSave){ +// log.error("任务同步零件添加失败"); +// return false; +// } +// //查询一下新零件 方便后面使用 +// DsPartEntity newPart = partService.getById(oldMesPart.getId()); +// Long newPartId = newPart.getId(); +// String newPartCode = newPart.getPartCode(); +// +// //新增版本号信息 +// DsPartVersionEntity newPartVersion = new DsPartVersionEntity(); +// newPartVersion.setPartId(newPartId); +// newPartVersion.setPartCode(newPartCode); +// newPartVersion.setPartVersion(newVersion); +// boolean partVersionSave = partVersionService.save(newPartVersion); +// if(!partVersionSave){ +// log.error("零件版本号新增失败"); +// return false; +// } +// +// //3.新增子件 +// // 查询子件 +// List dsPartSubList = partService.selectDsPartSub(oldMesPart.getPartCode()); +// for (DsPartSub dsPartSub : dsPartSubList) { +// DsPartEntity partEntity = new DsPartEntity(); +// partEntity.setPartCode(dsPartSub.getSubCode()); +// partEntity.setPartName(dsPartSub.getSubName()); +// partEntity.setQuota(dsPartSub.getQuota()); +// partEntity.setSubType(dsPartSub.getSubType()); +// partEntity.setProductType(dsPartSub.getProductType()); +// partEntity.setArea(dsPartSub.getArea()); +// partEntity.setConfigCode(dsPartSub.getConfigNo()); +// partEntity.setPlate(dsPartSub.getPlate()); +// partEntity.setMaterial(dsPartSub.getMaterial()); +// partEntity.setPlateCode(dsPartSub.getPlateCode()); +// partEntity.setSinTerType(dsPartSub.getSinTerType()); +// boolean partSubSave = partService.save(partEntity); +// if(!partSubSave){ +// log.error("子件新增失败,子件编码{}",dsPartSub.getSubCode()); +// return false; +// } +// +// //添加零件 子件关系表 +// DsPartRelationEntity dsPartRelationEntity = new DsPartRelationEntity(); +// dsPartRelationEntity.setPartId(newPartId); +// dsPartRelationEntity.setPartCode(newPartCode); +// dsPartRelationEntity.setChildPartId(partEntity.getId()); +// dsPartRelationEntity.setChildPartCode(partEntity.getPartCode()); +// boolean partRelationSave = partRelationService.save(dsPartRelationEntity); +// if(!partRelationSave){ +// log.error("部件子件关联关系添加失败partcode{},partSubCode{}",dsPartSub.getPartCode(),dsPartSub.getSubCode()); +// return false; +// } +// } +// +// //新增工艺 +// //查询老mes +// List dsCraftEntityList = craftService.selectOldMesCraftByOldMesPartId(oldMesPartId); +// +// if(CollectionUtils.isEmpty(dsCraftEntityList)){ +// log.error("工艺不存在无法新增"); +// return false; +// } +// for (DsCraftEntity craft : dsCraftEntityList) { +// //留存工艺ID 查询老工序是会使用 +// Long oldCraftId = craft.getId(); +// //重置工艺ID 不使用老mesID +// craft.setId(null); +// craft.setPartId(newPartId); +// craft.setPartVersions(newVersion); +// craft.setCraftStatus(TaskingConstant.UNDER_MAINTENANCE); +// boolean craftSaveBatch = craftService.save(craft); +// if(!craftSaveBatch){ +// log.error("工艺新增失败"); +// return false; +// } +// +//// //新增工序 工序设置 工艺能力 +//// //查询工序 +//// List oldMesProcessList = processService.selectOldMesProcessByOldMesCraftId(oldCraftId); +//// if(CollectionUtils.isEmpty(oldMesProcessList)){ +//// log.error("工序查询失败工艺ID:{}",oldCraftId); +//// return false; +//// } +//// for (DsProcessEntity oldProcess : oldMesProcessList) { +//// //验证工序设置 是否存在 不存在则新增工序 +//// if(null != oldProcess.getPpsId()){ +//// //查询老mes工序设置 +//// BsProcessSetEntity oldProcessSet = processSetService.selectOldMesProcessSetByOldPpsId(oldProcess.getPpsId()); +//// if(null == oldProcessSet){ +//// log.error("工序设置查询失败工序ID:{}",oldProcess.getPpsId()); +//// return false; +//// } +//// //验证新mes是否有该工序 +//// BsProcessSetEntity newProcessSet = processSetService.selectBsProcessSetByProcessCode(oldProcessSet.getCode()); +//// if(null == newProcessSet){ +//// //新增工序设置 +//// boolean processSetSave = processSetService.save(oldProcessSet); +//// if(!processSetSave){ +//// log.error("工序设置新增失败"); +//// return false; +//// } +//// } +//// } +//// +//// // 工艺能力 +//// if(null != oldProcess.getCaId()){ +//// //查询老mes工艺能力 +//// CraftAbilityEntity oldMesCraftAbility = craftAbilityService.selectOldMesCraftAbilityByOldCaId(oldProcess.getCaId()); +//// if(null == oldMesCraftAbility){ +//// log.error("工艺能力查询失败能力ID:{}",oldProcess.getCaId()); +//// return false; +//// } +//// //验证新mes是否有该工艺能力 +//// CraftAbilityEntity newMesCraftAbility = craftAbilityService.selectByCaCode(oldMesCraftAbility.getCaCode()); +//// if(null == newMesCraftAbility){ +//// //新增工艺能力 +//// boolean craftAbilitySave = craftAbilityService.save(newMesCraftAbility); +//// if(!craftAbilitySave){ +//// log.error("工艺能力新增失败"); +//// return false; +//// } +//// } +//// } +//// +//// //添加工序 +//// Long oldProcessId = oldProcess.getId(); +//// oldProcess.setId(null); +//// boolean processSave = processService.save(oldProcess); +//// if(!processSave){ +//// log.error("工序新增失败"); +//// return false; +//// } +//// } +// } +// +// return true; +// +// } + + /** + * ------------ + */ + + + @Override + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) + public boolean syncTasking() { + log.info("========== 开始同步任务 =========="); + + // 1. 获取上次同步的最大时间 + DsTaskingEntity dsTaskingEntity = taskingMapper.getMaxSyncTime(); + Date startTime = dsTaskingEntity != null ? dsTaskingEntity.getSyncTime() : null; + Date endTime = new Date(); + + // 处理首次同步的情况 + if (startTime == null) { + log.info("首次同步,同步所有历史任务"); + } else { + log.info("同步时间范围:{} - {}", startTime, endTime); + } + + // 2. 查询待同步的任务列表 + List taskingList = taskingMapper.selectOldMesTasking(startTime, endTime); + + if (CollectionUtils.isEmpty(taskingList)) { + log.info("未读取到任务信息"); + // 更新同步时间,避免下次重复查询 + return true; + } + + log.info("共读取到 {} 条返工任务待处理", taskingList.size()); + + // 3. 初始化统计计数器 + AtomicInteger successCount = new AtomicInteger(0); + AtomicInteger skipCount = new AtomicInteger(0); + AtomicInteger failCount = new AtomicInteger(0); + List failedPartCodes = new ArrayList<>(); + + // 4. 逐个处理任务(每个任务独立事务,避免一个失败全部回滚) + for (DsTaskingEntity dsTasking : taskingList) { + try { + // 每个任务独立事务处理 + boolean result = processSingleTaskWithTransaction(dsTasking); + if (result) { + successCount.incrementAndGet(); + log.info("任务处理成功 ({}/{}): {}", + successCount.get() + skipCount.get() + failCount.get(), + taskingList.size(), dsTasking.getPartCode()); + } else { + skipCount.incrementAndGet(); + log.warn("任务跳过 ({}/{}): {}", + successCount.get() + skipCount.get() + failCount.get(), + taskingList.size(), dsTasking.getPartCode()); + } + } catch (Exception e) { + failCount.incrementAndGet(); + failedPartCodes.add(dsTasking.getPartCode()); + log.error("处理任务失败,零件号:{},错误信息:{}", + dsTasking.getPartCode(), e.getMessage(), e); + } + } + + + // 6. 输出统计信息 + log.info("========== 任务同步完成 =========="); + log.info("成功:{} 条", successCount.get()); + log.info("跳过:{} 条", skipCount.get()); + log.info("失败:{} 条", failCount.get()); + + if (!failedPartCodes.isEmpty()) { + log.info("失败的零件号:{}", String.join(", ", failedPartCodes)); + } + + // 失败数为0则返回true,否则返回false + return failCount.get() == 0; + } + + /** + * 单个任务独立事务处理 + */ + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) + public boolean processSingleTaskWithTransaction(DsTaskingEntity dsTasking) { + String partCode = dsTasking.getPartCode(); + log.info("开始处理任务,零件号:{}", partCode); + + try { + // 1. 查询老MES零件数据 + DsPartEntity oldMesPart = getOldMesPart(partCode); + if (oldMesPart == null) { + log.error("老MES零件数据不存在:{}", partCode); + return false; + } + + // 2. 递归处理零件及其子件 + DsPartEntity newPart = processPartRecursively(oldMesPart); + if (newPart == null) { + log.error("零件处理失败:{}", partCode); + return false; + } + + // 3. 处理成功后新增任务记录 + DsPartVersionEntity partVersionEntity = partVersionService.selectByPartId(newPart.getId()); + //修改状态 + if(dsTasking.getTaskStatus().equals(1)){ + dsTasking.setTaskStatus(2); + } + dsTasking.setVersion(partVersionEntity.getPartVersion()); + int taskingInsert = taskingMapper.insert(dsTasking); + if (taskingInsert <= 0) { + log.error("任务记录新增失败:{}", partCode); + // 抛出异常触发事务回滚 + throw new RuntimeException("任务记录新增失败:" + partCode); + } + + log.info("任务处理成功:{},新零件ID:{}", partCode, newPart.getId()); + return true; + + } catch (Exception e) { + log.error("处理任务异常:{}", partCode, e); + throw e; + } + } + + /** + * 获取老MES零件数据 + */ + private DsPartEntity getOldMesPart(String partCode) { + return taskingMapper.getOldMesPartByPartCode(partCode); + } + + /** + * 递归处理零件及其子件 + * 核心逻辑:处理基础信息 -> 生成版本号 -> 创建新零件 -> 创建版本记录 -> 同步工艺 -> 处理子件 + */ + // 同时补充修正 processPartRecursively 中对空数据的兼容逻辑 + private DsPartEntity processPartRecursively(DsPartEntity oldMesPart) { + String partCode = oldMesPart.getPartCode(); + Long oldMesPartId = oldMesPart.getId(); + log.info("递归处理零件:{}", partCode); + + try { + // 1. 处理零件基础信息(兼容空数据) + if (!handlePartBasics(oldMesPart)) { + log.error("零件基础信息处理失败:{}", partCode); + return null; + } + + // 2. 生成新版本号(线程安全) + String newVersion = generateNewVersion(partCode); + log.info("零件 {} 生成新版本号:{}", partCode, newVersion); + + // 3. 创建新零件(兼容空数据) + DsPartEntity newPart = createNewPart(oldMesPart, newVersion); + if (newPart == null) { + return null; + } + + // 4. 创建版本号记录 + if (!createPartVersion(newPart.getId(), partCode, newVersion)) { + log.error("版本号记录创建失败:{}", partCode); + return null; + } + + // 5. 同步工艺(兼容空数据,无工艺则跳过) + syncCrafts(oldMesPartId, newPart, newVersion); + + // 6. 处理子件(递归)- 子件处理失败不影响父件,仅记录日志 + processSubPartsRecursively(partCode, newPart); + + log.info("零件 {} 递归处理完成,新ID:{},版本号:{}", + partCode, newPart.getId(), newVersion); + return newPart; + + } catch (Exception e) { + log.error("递归处理零件异常:{}", partCode, e); + return null; + } + } + + /** + * 递归处理子件(子件处理失败仅记录日志,不中断父件处理) + * 关键修正:oldMesSubPart == null 仅代表该子件无更深层级的子件,仍需处理当前子件自身的核心逻辑 + */ + private void processSubPartsRecursively(String parentPartCode, DsPartEntity parentNewPart) { + List subPartList = partService.selectDsPartSub(parentPartCode); + + if (CollectionUtils.isEmpty(subPartList)) { + log.info("零件 {} 没有子件(无子件层级)", parentPartCode); + return; + } + + log.info("零件 {} 有 {} 个子件需要递归处理", parentPartCode, subPartList.size()); + + for (DsPartSub subPartInfo : subPartList) { + String subCode = subPartInfo.getSubCode(); + log.info("开始处理子件:{}", subCode); + + try { + // 1. 查询子件老MES数据(null仅代表无该子件的详细数据,不代表跳过) + DsPartEntity oldMesSubPart = getOldMesPart(subCode); + + if (oldMesSubPart == null) { + // 子件无老MES详细数据,创建空的基础对象(保证核心逻辑能执行) + log.warn("子件 {} 无老MES详细数据,创建基础空对象处理", subCode); + oldMesSubPart = new DsPartEntity(); + if(!StringUtils.isEmpty(subPartInfo.getSubName())){ + oldMesSubPart.setPartName(subPartInfo.getSubName()); + } + oldMesSubPart.setPartCode(subPartInfo.getSubCode()); + oldMesSubPart.setQuota(subPartInfo.getQuota()); + oldMesSubPart.setSubType(subPartInfo.getSubType()); + oldMesSubPart.setProductType(subPartInfo.getProductType()); + oldMesSubPart.setArea(subPartInfo.getArea()); + oldMesSubPart.setConfigCode(subPartInfo.getConfigNo()); + oldMesSubPart.setPlate(subPartInfo.getPlate()); + oldMesSubPart.setMaterial(subPartInfo.getMaterial()); + oldMesSubPart.setPlateCode(subPartInfo.getPlateCode()); + oldMesSubPart.setSinTerType(subPartInfo.getSinTerType()); + + } + + // 2. 递归处理当前子件自身(生成版本号、创建零件、同步工艺等核心逻辑) + DsPartEntity newSubPart = processPartRecursively(oldMesSubPart); + if (newSubPart == null) { + log.error("子件 {} 自身处理失败,跳过该子件", subCode); + continue; + } + + // 3. 建立父子关联关系 + if (!createPartRelation(parentNewPart.getId(), parentNewPart.getPartCode(), + newSubPart.getId(), newSubPart.getPartCode())) { + log.error("建立父子关联关系失败:父{},子{},跳过该子件关联", parentNewPart.getPartCode(), subCode); + continue; + } + + // 4. 保存子件关联的额外信息 + saveSubPartRelationInfo(parentNewPart.getId(), newSubPart.getId(), subPartInfo); + + log.info("子件 {} 处理完成,新ID:{}", subCode, newSubPart.getId()); + + } catch (Exception e) { + log.error("处理子件 {} 异常,跳过该子件", subCode, e); + } + } + } + + /** + * 同步工艺 + */ + private boolean syncCrafts(Long oldMesPartId, DsPartEntity newPart, String newVersion) { + try { + // 兼容空老MES ID的情况(无工艺数据) + if (oldMesPartId == null || oldMesPartId <= 0) { + log.info("零件 {} 无老MES工艺ID,跳过工艺同步", newPart.getPartCode()); + return true; + } + + // 查询老MES的工艺列表 + List oldCraftList = craftService.selectOldMesCraftByOldMesPartId(oldMesPartId); + + if (CollectionUtils.isEmpty(oldCraftList)) { + log.info("零件 {} 没有工艺数据", newPart.getPartCode()); + return true; + } + + log.info("零件 {} 有 {} 个工艺待同步", newPart.getPartCode(), oldCraftList.size()); + + for (DsCraftEntity oldCraft : oldCraftList) { + // 重置工艺ID 不使用老mesID + oldCraft.setId(null); + oldCraft.setPartId(newPart.getId()); + oldCraft.setPartCode(newPart.getPartCode()); + oldCraft.setPartVersions(newVersion); + oldCraft.setCraftStatus(TaskingConstant.UNDER_MAINTENANCE); + + boolean saved = craftService.save(oldCraft); + if (!saved) { + log.error("工艺同步失败,oldCraftId:{}", oldCraft.getId()); + // 继续处理下一个工艺,不中断 + continue; + } + + log.info("工艺同步成功,oldCraftId:{} -> newCraftId:{}", oldMesPartId, oldCraft.getId()); + } + + return true; + } catch (Exception e) { + log.error("同步工艺异常:{}", newPart.getPartCode(), e); + return false; + } + } + + /** + * 生成新版本号(线程安全,使用数据库锁或乐观锁保证唯一性) + */ + private String generateNewVersion(String partCode) { + // 加锁查询版本号,避免多线程重复 + synchronized (this.getClass().getName().concat(partCode).intern()) { + List partVersionList = partVersionService.selectByPartCode(partCode); + + if (CollectionUtils.isEmpty(partVersionList)) { + return "1"; + } + + Optional maxVersion = partVersionList.stream() + .map(DsPartVersionEntity::getPartVersion) + .filter(Objects::nonNull) + .map(v -> { + try { + return Integer.parseInt(v); + } catch (NumberFormatException e) { + log.warn("版本号格式异常:{},视为0", v); + return 0; + } + }) + .max(Integer::compareTo); + + return String.valueOf(maxVersion.orElse(0) + 1); + } + } + + /** + * 创建新零件 + */ + private DsPartEntity createNewPart(DsPartEntity oldMesPart, String newVersion) { + try { + Long oldId = oldMesPart.getId(); + oldMesPart.setId(null); + boolean saved = partService.save(oldMesPart); + if (!saved) { + log.error("零件新增失败:{}", oldMesPart.getPartCode()); + return null; + } + + DsPartEntity newPart = partService.getById(oldMesPart.getId()); + log.info("零件新增成功,oldId:{} -> newId:{}", oldId, newPart.getId()); + + return newPart; + } catch (Exception e) { + log.error("创建新零件异常:{}", oldMesPart.getPartCode(), e); + return null; + } + } + + /** + * 创建版本号记录 + */ + private boolean createPartVersion(Long partId, String partCode, String version) { + try { + DsPartVersionEntity partVersion = new DsPartVersionEntity(); + partVersion.setPartId(partId); + partVersion.setPartCode(partCode); + partVersion.setPartVersion(version); + + boolean saved = partVersionService.save(partVersion); + if (saved) { + log.info("版本号记录创建成功:{} -> 版本{}", partCode, version); + } else { + log.error("版本号记录创建失败:{} -> 版本{}", partCode, version); + } + return saved; + } catch (Exception e) { + log.error("创建版本号记录异常:{}", partCode, e); + return false; + } + } + + /** + * 创建零件-子件关联关系 + */ + private boolean createPartRelation(Long partId, String partCode, Long childPartId, String childPartCode) { + try { + DsPartRelationEntity relation = new DsPartRelationEntity(); + relation.setPartId(partId); + relation.setPartCode(partCode); + relation.setChildPartId(childPartId); + relation.setChildPartCode(childPartCode); + relation.setCreateTime(new Date()); + relation.setStatus(1); + relation.setIsDeleted(0); + + boolean saved = partRelationService.save(relation); + if (saved) { + log.debug("部件子件关联关系添加成功:{} -> {}", partCode, childPartCode); + } else { + log.error("部件子件关联关系添加失败:{} -> {}", partCode, childPartCode); + } + return saved; + } catch (Exception e) { + log.error("创建零件关联关系异常:父{},子{}", partCode, childPartCode, e); + return false; + } + } + + /** + * 保存子件关联的额外信息 + */ + private void saveSubPartRelationInfo(Long parentId, Long childId, DsPartSub subPartInfo) { + try { + // 这里可以根据实际需求实现保存逻辑,比如保存到子件关联信息表 + log.info("子件关联信息:父ID={},子ID={},子件号={},定额={},类型={},配置码={},镀种={},材料={},镀层代号={},烧结类型={}", + parentId, + childId, + subPartInfo.getSubCode(), + subPartInfo.getQuota(), + subPartInfo.getSubType(), + subPartInfo.getConfigNo(), + subPartInfo.getPlate(), + subPartInfo.getMaterial(), + subPartInfo.getPlateCode(), + subPartInfo.getSinTerType()); + } catch (Exception e) { + log.error("保存子件关联信息异常", e); + } + } + + /** + * 处理零件基础信息(有则跳过,无则新增) + */ + private boolean handlePartBasics(DsPartEntity oldMesPart) { + try { + String partCode = oldMesPart.getPartCode(); + DsPartBasicsEntity partBasics = partBasicsService.selectByPartCode(partCode); + + if (partBasics == null) { + partBasics = new DsPartBasicsEntity(); + partBasics.setPartCode(partCode); + partBasics.setPartName(oldMesPart.getPartName()); + partBasics.setProductType(oldMesPart.getProductType()); + partBasics.setIsSintering(oldMesPart.getIsSintering()); + partBasics.setIsClassCake(oldMesPart.getIsClassCake()); + partBasics.setCreateTime(new Date()); + partBasics.setUpdateTime(new Date()); + partBasics.setStatus(1); + partBasics.setIsDeleted(0); + + if (oldMesPart.getRemarks() != null && !oldMesPart.getRemarks().trim().isEmpty()) { + partBasics.setRemarks(oldMesPart.getRemarks()); + } + + boolean saved = partBasicsService.save(partBasics); + if (!saved) { + log.error("零件基础信息新增失败:{}", partCode); + return false; + } + log.info("零件基础信息新增成功:{}", partCode); + } else { + log.info("零件基础信息已存在:{}", partCode); + } + + return true; + } catch (Exception e) { + log.error("处理零件基础信息异常:{}", oldMesPart.getPartCode(), e); + return false; + } + } + + + /** + * -------------- + */ + /** * 处理单个返工任务 * 对应: loop 循环内的处理逻辑 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/IncrementNumberUtil.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/IncrementNumberUtil.java new file mode 100644 index 00000000..4f217383 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/IncrementNumberUtil.java @@ -0,0 +1,36 @@ +package org.springblade.desk.dashboard.utils; + +/** + * @author: liweidong + * @create: 2026-03-14 + */ +public class IncrementNumberUtil { + /** + * 字符串数值递增转换核心方法 + * @param input 输入的字符串(可为 null/空/非数字/数字) + * @return 转换后的字符串结果 + */ + public static String convertNumber(String input) { + // 1. 处理空值/空字符串:直接返回 "1" + if (input == null || input.trim().isEmpty()) { + return "1"; + } + + try { + // 2. 将字符串转为整数(处理首尾空格) + int num = Integer.parseInt(input.trim()); + + // 3. 处理负数:返回 "1" + if (num < 0) { + return "1"; + } + + // 4. 正常逻辑:非负整数 +1 后转回字符串 + return String.valueOf(num + 1); + + } catch (NumberFormatException e) { + // 5. 处理非数字字符串(如"abc"、"12a"):返回 "1" + return "1"; + } + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java index 0662ef8c..9402eccd 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java @@ -17,10 +17,7 @@ import org.springblade.desk.dashboard.pojo.entity.BsPlatingEntity; import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity; -import org.springblade.desk.dashboard.service.IBsPlatingService; -import org.springblade.desk.dashboard.service.IDsCraftService; -import org.springblade.desk.dashboard.service.IDsPartService; -import org.springblade.desk.dashboard.service.IDsProcessService; +import org.springblade.desk.dashboard.service.*; import org.springblade.desk.order.constant.PlateGoodsConst; import org.springblade.desk.order.mapper.PlateGoodsRecordMapper; import org.springblade.desk.order.pojo.entity.PlateGoodsRecord; @@ -56,6 +53,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl selectPage(IPage page, PlateGoodsRecord entity) { List dataList = baseMapper.selectPage(page, entity); @@ -176,7 +174,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl