From ec1bf4658e36a17f971a54007920a44c5378b7dc Mon Sep 17 00:00:00 2001 From: cuijian <cuijian@xalxzn.com> Date: 星期一, 16 六月 2025 10:41:39 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolSharpeningController.java | 40 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsToDncController.java | 138 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java | 167 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java | 129 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaBladeMapper.java | 6 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java | 20 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java | 16 lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java | 18 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaHoleToolsMapper.xml | 1 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/ext/NcTxtFilePathInfo.java | 12 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ProcessTraceChain.java | 86 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java | 85 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java | 4 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaHoleToolsServiceImpl.java | 31 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java | 69 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaHoleToolsMapper.java | 3 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java | 22 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaTurningToolsMapper.xml | 1 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java | 98 + lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml | 6 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/CompressionUtils.java | 35 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java | 455 ++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java | 26 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java | 18 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java | 2 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaThreadingToolService.java | 5 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaBladeMapper.xml | 39 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepPackageStrategy.java | 43 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/JsonUtils.java | 48 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java | 49 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessSpecVersionMapper.java | 6 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessStreamMapper.java | 4 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java | 5 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java | 4 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java | 143 + lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java | 0 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/constant/DncPassLogPassType.java | 39 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java | 52 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataPackageService.java | 36 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java | 63 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java | 125 + lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java | 6 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaThreadingToolServiceImpl.java | 34 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessionDepartmentServiceImpl.java | 5 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/ToolQueryParamDto.java | 104 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java | 9 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaMillToolMapper.java | 4 lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java | 8 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java | 108 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaBladeService.java | 5 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java | 9 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PartsInfoMapper.java | 6 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml | 14 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsStocktakingBoundController.java | 48 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaThreadingToolMapper.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml | 16 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java | 19 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsStocktakingBoundDetail.java | 5 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java | 53 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml | 39 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchRateController.java | 81 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java | 6 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaBladeServiceImpl.java | 36 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductMixService.java | 18 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java | 20 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java | 20 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/WorkStepMapper.java | 9 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java | 7 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java | 236 +++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java | 44 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/TransferPackage.java | 32 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml | 19 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java | 17 lxzn-module-dnc/pom.xml | 6 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java | 10 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductInfoMapper.java | 6 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductMixMapper.java | 22 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java | 3 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml | 91 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaThreadingToolMapper.xml | 45 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java | 2 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml | 6 lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml | 2 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java | 12 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java | 254 +++ lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java | 6 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java | 13 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java | 81 + lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/DataPackageStrategy.java | 13 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaTurningToolsServiceImpl.java | 43 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java | 4 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessPackageStrategy.java | 42 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ComponentHierarchy.java | 28 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/SecurityService.java | 48 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolsStocktakingBoundDetailMapper.xml | 13 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml | 22 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml | 19 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml | 27 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java | 18 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java | 19 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java | 104 + lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaMillToolServiceImpl.java | 35 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml | 12 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java | 6 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductInfoService.java | 2 /dev/null | 62 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaTurningToolsMapper.java | 4 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java | 5 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaMillToolMapper.xml | 3 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java | 4 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ComponentInfoMapper.java | 10 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java | 14 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java | 22 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java | 18 125 files changed, 3,908 insertions(+), 479 deletions(-) diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java b/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java index 1fb1a97..3bb8a8c 100644 --- a/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java +++ b/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java @@ -178,6 +178,24 @@ .groupName("eam"); } + @Bean(value = "defaultApiBoard") + public Docket activitiApiBoard() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗� + .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.board")) + //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。 + .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + .paths(PathSelectors.any()) + .build() + .securitySchemes(Collections.singletonList(securityScheme())) + .securityContexts(securityContexts()) + .globalOperationParameters(setHeaderToken()) + .groupName("鏁板瓧瀛敓鐪嬫澘"); + } + /*** * oauth2閰嶇疆 * 闇�瑕佸鍔爏wagger鎺堟潈鍥炶皟鍦板潃 diff --git a/lxzn-module-dnc/pom.xml b/lxzn-module-dnc/pom.xml index 2c815f4..47f1a8f 100644 --- a/lxzn-module-dnc/pom.xml +++ b/lxzn-module-dnc/pom.xml @@ -58,6 +58,12 @@ <artifactId>fastutil</artifactId> <version>8.5.6</version> </dependency> + <dependency> + <groupId>org.jeecgframework.boot</groupId> + <artifactId>lxzn-module-tms</artifactId> + <version>3.4.3</version> + <scope>compile</scope> + </dependency> </dependencies> </project> diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/constant/DncPassLogPassType.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/constant/DncPassLogPassType.java new file mode 100644 index 0000000..bbc9d2a --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/constant/DncPassLogPassType.java @@ -0,0 +1,39 @@ +package org.jeecg.modules.dnc.constant; + +public enum DncPassLogPassType { + //NC鏂囦欢 + DOCUMENT("01", "nc鏂囦欢"), + //nc鏂囦欢 + NCFILE("02", "NC鏂囦欢"), + //浜у搧缁撴瀯鏍� + PRODUCTSTRUCTURE("03", "浜у搧缁撴瀯鏍�"), + //绋嬪簭鍔犲伐纭琛� + PROGRAMPROCESSING("04", "绋嬪簭鍔犲伐纭琛�"); + + private String code; + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + DncPassLogPassType() { + } + + DncPassLogPassType(String code, String name) { + this.code = code; + this.name = name; + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java index 3d85d1a..0c59cb5 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java @@ -110,4 +110,17 @@ return service.extractAndSaveFromContent(docId,attributionId,attributionType); } + /** + * 鍙戦�佸垁鍏风郴缁� + * @param docId 鏂囨。Id + * @return + */ + @AutoLog(value = "鍒�鍏蜂俊鎭�-鍙戦�佸垁鍏风郴缁�") + @ApiOperation(value = "鍒�鍏蜂俊鎭�-鍙戦�佸垁鍏风郴缁�", notes = "鍒�鍏蜂俊鎭�-鍙戦�佸垁鍏风郴缁�") + @GetMapping("/sendCutterInfo/{docId}/{attributionType}/{attributionId}") + public Result<?> sendCutterInfo(@PathVariable("docId") String docId + ,@PathVariable("attributionType") Integer attributionType + ,@PathVariable("attributionId") String attributionId) { + return service.sendToCutterSystem(docId,attributionId,attributionType); + } } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ComponentHierarchy.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ComponentHierarchy.java new file mode 100644 index 0000000..d00ff7e --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ComponentHierarchy.java @@ -0,0 +1,28 @@ +package org.jeecg.modules.dnc.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import org.jeecg.modules.dnc.entity.ComponentInfo; +import org.jeecg.modules.dnc.entity.ProductInfo; + +import java.util.ArrayList; +import java.util.List; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ComponentHierarchy { + private ProductInfo rootProduct; + private final List<ComponentInfo> components = new ArrayList<>(); // 浠庢牴閮ㄤ欢鍒板簳灞傞儴浠剁殑椤哄簭 + + public void addComponentToTop(ComponentInfo component) { + components.add(0, component); + } + + public List<ComponentInfo> getComponentsFromTop() { + return new ArrayList<>(components); + } + + public ComponentInfo getLeafComponent() { + return components.isEmpty() ? null : components.get(components.size() - 1); + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ProcessTraceChain.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ProcessTraceChain.java new file mode 100644 index 0000000..c61acc2 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/ProcessTraceChain.java @@ -0,0 +1,86 @@ +package org.jeecg.modules.dnc.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; +import org.jeecg.modules.dnc.entity.*; + +import java.util.List; +/** + * @Description: 娑夊瘑缃戝悓姝ュ伐鎺х綉闇�瑕佺殑鏁版嵁 + * @Author: lyh + * @Date: 2025-06-13 + * @Version: V1.0 + * @remark: 鍚庣画闇�瑕佸鍔狅紝娣诲姞瀵瑰簲鍙傛暟涓庣粨鏋勬暟鎹紝閲囩敤JSON搴忓垪鍖栦笌鍙嶅簭鍒楀寲杩涜浼犺緭锛屾柟渚夸紶杈擄紙鍔犲瘑鎿嶄綔锛岄伩鍏嶆暟鎹薄鏌擄級 + */ +@Data +@Builder +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProcessTraceChain { + /**绋嬪簭鍔犲伐纭琛�*/ + private GuideCardBatch guideCardBatch; + /**鍒�鍏峰垪琛�*/ + private List<Cutter> cutterList; + /**鏂囦欢*/ + private DocFile docFile; + /**璁惧鏂囨。瀵瑰簲鍏崇郴*/ + private DocRelative docRelative; + /**鏂囨。*/ + private DocInfo docInfo; + /**璁惧绫�*/ + private DeviceType deviceType; + /**璁惧绫诲搴斿叧绯�*/ + private DeviceManagement deviceManagement; + /**宸ユ*/ + private WorkStep workStep; + /**宸ュ簭*/ + private ProcessStream process; + /**宸ヨ壓瑙勭▼鐗堟湰*/ + private ProcessSpecVersion processSpec; + /**闆朵欢*/ + private PartsInfo parts; + /**閮ㄤ欢*/ + private ComponentHierarchy componentHierarchy; + /**浜у搧*/ + private ProductInfo product; + /**浜у搧鏍戣矾寰�*/ + private List<ProductMix> treePath; + /**鏉冮檺琛�*/ + private List<PermissionStreamNew> permissionStreamNewList; + @JsonCreator + public ProcessTraceChain( + @JsonProperty("guideCardBatch") GuideCardBatch guideCardBatch, + @JsonProperty("cutterList") List<Cutter> cutterList, + @JsonProperty("docFile") DocFile docFile, + @JsonProperty("docRelative") DocRelative docRelative, + @JsonProperty("docInfo") DocInfo docInfo, + @JsonProperty("deviceType") DeviceType deviceType, + @JsonProperty("deviceManagement") DeviceManagement deviceManagement, + @JsonProperty("workStep") WorkStep workStep, + @JsonProperty("process") ProcessStream process, + @JsonProperty("processSpec") ProcessSpecVersion processSpec, + @JsonProperty("parts") PartsInfo parts, + @JsonProperty("componentHierarchy") ComponentHierarchy componentHierarchy, + @JsonProperty("product") ProductInfo product, + @JsonProperty("treePath") List<ProductMix> treePath, + @JsonProperty("permissionStreamNewList") List<PermissionStreamNew> permissionStreamNewList + ) { + this.guideCardBatch = guideCardBatch; + this.cutterList = cutterList; + this.docFile = docFile; + this.docRelative = docRelative; + this.docInfo = docInfo; + this.deviceType = deviceType; + this.deviceManagement = deviceManagement; + this.workStep = workStep; + this.process = process; + this.processSpec = processSpec; + this.parts = parts; + this.componentHierarchy = componentHierarchy; + this.product = product; + this.treePath = treePath; + this.permissionStreamNewList = permissionStreamNewList; + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/TransferPackage.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/TransferPackage.java new file mode 100644 index 0000000..15bd6b1 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/dto/TransferPackage.java @@ -0,0 +1,32 @@ +package org.jeecg.modules.dnc.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; +import org.jeecg.modules.dnc.entity.DocRelative; + +@Data +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class TransferPackage { + public enum DataType { PROCESS, WORKSTEP } + + private final DataType dataType; + private final DocRelative docRelative; + private final ProcessTraceChain traceChain; + + @JsonCreator + public TransferPackage( + @JsonProperty("dataType") DataType dataType, + @JsonProperty("docRelative") DocRelative docRelative, + @JsonProperty("traceChain") ProcessTraceChain traceChain + ) { + this.dataType = dataType; + this.docRelative = docRelative; + this.traceChain = traceChain; + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java index 9e3df96..92c381e 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java @@ -82,6 +82,9 @@ //鎵�灞炶妭鐐逛唬鍙� @TableField(exist = false) private String nodeCode; + //鎵�灞炶妭鐐筰d + @TableField(exist = false) + private String nodeId; //璁惧绫诲悕绉� @TableField(exist = false) private String deviceName; diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java index 81e49a1..879114e 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/ProductMix.java @@ -6,7 +6,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; -import lombok.Getter; import lombok.NoArgsConstructor; import java.io.Serializable; @@ -14,7 +13,6 @@ import java.util.Date; import java.util.List; -@Getter @Data @NoArgsConstructor @TableName(value = "nc_product_mix") @@ -29,13 +27,13 @@ private Long parentId; // 鍚嶇О @TableField(value = "tree_name") - private String name; + private String treeName; // code @TableField(value = "tree_code") - private String code; + private String treeCode; // 绫诲瀷 @TableField(value = "tree_type") - private Integer type; + private Integer treeType; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") @TableField(value = "create_time") private Date createTime; @@ -43,17 +41,20 @@ //灞曠ず鍚嶇О private transient String label; + //绫诲瀷鏂逛究鍓嶇灞曠ず + private transient Integer type; + private transient List<ProductMix> children = new ArrayList<>(); - public ProductMix(Long id, Long parentId, String name, String code, Integer type, Date createTime) { + public ProductMix(Long id, Long parentId, String treeName, String treeCode, Integer type, Date createTime) { this.id = id; this.parentId = parentId; - this.name = name; - this.code = code; + this.treeName = treeName; + this.treeCode = treeCode; this.type = type; this.children = new ArrayList<>(); - this.label="["+code+"]"+name; + this.label="["+treeCode+"]"+treeName; this.createTime = createTime; } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/ext/NcTxtFilePathInfo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/ext/NcTxtFilePathInfo.java index 1d81bc4..21e2c1c 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/ext/NcTxtFilePathInfo.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/ext/NcTxtFilePathInfo.java @@ -24,6 +24,18 @@ private Integer fileAddOrDelete; /*鏂囦欢澶у皬*/ private String fileSize; + /*浜у搧娣诲姞鎵ц璇彞*/ + private String productAddSql; + /*閮ㄤ欢娣诲姞鎵ц璇彞*/ + private String componentAddSql; + /*闆朵欢娣诲姞鎵ц璇彞*/ + private String partAddSql; + /*宸ヨ壓瑙勭▼鐗堟湰娣诲姞鎵ц璇彞*/ + private String processVersionAddSql; + /*宸ュ簭鐗堟湰娣诲姞鎵ц璇彞*/ + private String processAddSql; + /*宸ユ鐗堟湰娣诲姞鎵ц璇彞*/ + private String processStepAddSql; @Override public String toString() { diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java index 59eb0af..d7d6b1f 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java @@ -1,14 +1,13 @@ package org.jeecg.modules.dnc.listener; + import org.apache.commons.io.monitor.FileAlterationListener; import org.apache.commons.io.monitor.FileAlterationObserver; import org.jeecg.common.util.FileUtil; import org.jeecg.modules.dnc.service.IDocInfoService; import org.jeecg.modules.dnc.utils.file.FileUtilS; -import org.jeecg.modules.message.enums.DeployEnum; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.File; @@ -17,16 +16,12 @@ @Component public class FileListener implements FileAlterationListener { private static final Logger log = LoggerFactory.getLogger(FileListener.class); - - @Value("${deploy.deployType}") - private String deployType; //宸ユ帶缃�/娑夊瘑缃戦儴缃� 0涓哄伐鎺х綉 1涓烘秹瀵嗙綉 - @Autowired private IDocInfoService docInfoService; // 鏂囨。鏈嶅姟 @Override public void onStart(FileAlterationObserver observer) { - log.info("寮�濮嬬洃鍚洰褰�: {}", observer.getDirectory().getAbsolutePath()); +// log.info("寮�濮嬬洃鍚洰褰�: {}", observer.getDirectory().getAbsolutePath()); } @Override @@ -48,17 +43,6 @@ public void onFileCreate(File file) { String filePath = file.getAbsolutePath(); log.info("[鏂板缓]: {}", filePath); - if (DeployEnum.GW.getCode().equals(deployType)) { - //宸ユ帶缃戣В鏋愭秹瀵嗙綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽 - if (filePath.startsWith("D:\\hy_test\\ncFile")) { - handleIndustrialDocFile(file); - } - }else { - //娑夊瘑缃戣В鏋愬伐鎺х綉浼犺繃鏉ョ殑NC鏂囦欢涓巒c鏂囦欢杩涜瑙f瀽锛堢▼搴忓洖浼狅級 - if (filePath.startsWith("D:\\hy_test\\ncFile")) { - handleSecretDocFile(file); - } - } } @Override public void onFileChange(File file) { @@ -72,7 +56,7 @@ @Override public void onStop(FileAlterationObserver observer) { - log.info("缁撴潫鐩戝惉鐩綍: {}", observer.getDirectory().getAbsolutePath()); +// log.info("缁撴潫鐩戝惉鐩綍: {}", observer.getDirectory().getAbsolutePath()); } /** diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ComponentInfoMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ComponentInfoMapper.java index 482ab76..02a288b 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ComponentInfoMapper.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ComponentInfoMapper.java @@ -1,9 +1,9 @@ package org.jeecg.modules.dnc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -import org.jeecg.modules.dnc.dto.ComponentExt; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.jeecg.modules.dnc.dto.ComponentExt; import org.jeecg.modules.dnc.entity.ComponentInfo; import java.util.List; @@ -38,4 +38,10 @@ */ List<ComponentExt> getByParentIdAndUserPerms(@Param("parentId") String parentId, @Param("userId") String userId); + @Select("SELECT * FROM nc_component_info WHERE component_id = #{componentId}") + ComponentInfo selectById(@Param("componentId") String componentId); + + // 閫掑綊鏌ヨ閮ㄤ欢灞傜骇缁撴瀯 + List<ComponentInfo> findComponentHierarchy(@Param("componentId") String componentId); + } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PartsInfoMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PartsInfoMapper.java index 63ade13..c1bbb4f 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PartsInfoMapper.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/PartsInfoMapper.java @@ -1,8 +1,9 @@ package org.jeecg.modules.dnc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.jeecg.modules.dnc.entity.PartsInfo; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.jeecg.modules.dnc.entity.PartsInfo; import java.util.List; @@ -14,4 +15,7 @@ * @return */ List<PartsInfo> getByUserPerms(@Param("userId") String userId); + + @Select("SELECT * FROM nc_parts_info WHERE parts_id = #{partsId}") + PartsInfo selectById(@Param("partsId") String partsId); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessSpecVersionMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessSpecVersionMapper.java index e0fc8ae..780d6fa 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessSpecVersionMapper.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessSpecVersionMapper.java @@ -1,8 +1,9 @@ package org.jeecg.modules.dnc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.lettuce.core.dynamic.annotation.Param; +import org.apache.ibatis.annotations.Select; import org.jeecg.modules.dnc.entity.ProcessSpecVersion; -import org.jeecg.modules.dnc.entity.WorkStep; import java.util.List; @@ -14,4 +15,7 @@ * @return */ List<ProcessSpecVersion> getByUserPerms(String userId); + + @Select("SELECT * FROM nc_process_spec_version WHERE id = #{id}") + ProcessSpecVersion selectById(@Param("id") String id); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessStreamMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessStreamMapper.java index c1ece69..4e4813e 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessStreamMapper.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProcessStreamMapper.java @@ -1,6 +1,8 @@ package org.jeecg.modules.dnc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.lettuce.core.dynamic.annotation.Param; +import org.apache.ibatis.annotations.Select; import org.jeecg.modules.dnc.entity.ProcessStream; import java.util.List; @@ -22,4 +24,6 @@ */ List<ProcessStream> findByPartsAndComponents(String productId, List<String> componentIds, List<String> partsIds); + @Select("SELECT * FROM nc_process_stream WHERE process_id = #{processId}") + ProcessStream selectById(@Param("processId") String processId); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductInfoMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductInfoMapper.java index d7e1d6b..680f30d 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductInfoMapper.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductInfoMapper.java @@ -1,8 +1,9 @@ package org.jeecg.modules.dnc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.jeecg.modules.dnc.entity.ProductInfo; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.jeecg.modules.dnc.entity.ProductInfo; import java.util.List; @@ -13,4 +14,7 @@ * @return */ List<ProductInfo> getByUserPerms(@Param("userId") String userId); + + @Select("SELECT * FROM nc_product_info WHERE product_id = #{productId}") + ProductInfo selectById(@Param("productId") String productId); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductMixMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductMixMapper.java index b0c0b32..aaa74b5 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductMixMapper.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/ProductMixMapper.java @@ -1,7 +1,29 @@ package org.jeecg.modules.dnc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.lettuce.core.dynamic.annotation.Param; +import org.apache.ibatis.annotations.Select; import org.jeecg.modules.dnc.entity.ProductMix; public interface ProductMixMapper extends BaseMapper<ProductMix> { + + @Select("SELECT * FROM nc_product_mix WHERE id = #{productId} AND tree_type = 1") + ProductMix findByProductId(@Param("productId") String productId); + + @Select("SELECT * FROM nc_product_mix WHERE id = #{componentId} AND tree_type = 2") + ProductMix findByComponentId(@Param("componentId") String componentId); + + @Select("SELECT * FROM nc_product_mix WHERE id = #{partsId} AND tree_type = 3") + ProductMix findByPartsId(@Param("partsId") String partsId); + + @Select("SELECT * FROM nc_product_mix WHERE id = #{operationId} AND tree_type = 4") + ProductMix findByOperationId(@Param("operationId") String operationId); + + @Select("SELECT * FROM nc_product_mix WHERE id = #{processId} AND tree_type = 5") + ProductMix findByProcessId(@Param("operationId") String processId); + + @Select("SELECT * FROM nc_product_mix WHERE id = #{worksiteId} AND tree_type = 6") + ProductMix findByWorksiteId(@Param("operationId") String worksiteId); + + } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/WorkStepMapper.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/WorkStepMapper.java index 06ba661..dffe68b 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/WorkStepMapper.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/WorkStepMapper.java @@ -1,7 +1,8 @@ package org.jeecg.modules.dnc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.jeecg.modules.dnc.entity.SynchronizedFlag; +import io.lettuce.core.dynamic.annotation.Param; +import org.apache.ibatis.annotations.Select; import org.jeecg.modules.dnc.entity.WorkStep; import java.util.List; @@ -13,4 +14,10 @@ * @return */ List<WorkStep> getByUserPerms(String userId); + + @Select("SELECT * FROM nc_work_step WHERE id = #{workStepId}") + WorkStep selectById(@Param("workStepId") String workStepId); + + @Select("SELECT * FROM nc_work_step WHERE process_id = #{processId}") + List<WorkStep> selectByProcessId(@Param("processId") String processId); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml index b09355a..5d51485 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/ComponentInfoMapper.xml @@ -158,4 +158,26 @@ on comp.component_id=s.component_id where delete_flag = 0 and parent_id=#{parentId} </select> + <select id="findComponentHierarchy" resultType="org.jeecg.modules.dnc.entity.ComponentInfo"> + WITH component_tree AS ( + SELECT + *, + 0 AS LEVEL + FROM + nc_component_info + WHERE + component_id = #{componentId} UNION ALL + SELECT + c.*, + ct.level + 1 + FROM + nc_component_info c + INNER JOIN component_tree ct ON c.component_id = ct.parent_id + ) SELECT + * + FROM + component_tree + ORDER BY + LEVEL ASC + </select> </mapper> diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml index 76f6228..6ebebfa 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/PermissionStreamNewMapper.xml @@ -4,8 +4,8 @@ <select id="loadProductMix" resultType="org.jeecg.modules.dnc.entity.ProductMix"> SELECT DISTINCT mix.id, - mix.tree_code 'code', - mix.tree_name 'name', + mix.tree_code, + mix.tree_name, mix.parent_id, mix.tree_type AS 'type', mix.extend, @@ -31,8 +31,8 @@ </select> <select id="loadProductMixAll" resultType="org.jeecg.modules.dnc.entity.ProductMix"> SELECT DISTINCT mix.id, - mix.tree_code 'code', - mix.tree_name 'name', + mix.tree_code, + mix.tree_name , mix.parent_id, mix.tree_type AS 'type', mix.extend, @@ -92,8 +92,8 @@ ) SELECT DISTINCT mix.id, - mix.tree_code 'code', - mix.tree_name 'name', + mix.tree_code, + mix.tree_name, mix.parent_id, mix.tree_type AS 'type', mix.extend, diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/DataPackageStrategy.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/DataPackageStrategy.java new file mode 100644 index 0000000..b736527 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/DataPackageStrategy.java @@ -0,0 +1,13 @@ +package org.jeecg.modules.dnc.service; + +import org.jeecg.modules.dnc.dto.TransferPackage; + +// 鏁版嵁灏佽绛栫暐鎺ュ彛 +public interface DataPackageStrategy { + /** + * 灏佽涓氬姟鏁版嵁涓轰紶杈撳寘 + * @param id 涓氬姟瀹炰綋ID锛堝伐搴廔D鎴栧伐姝D锛� + * @return 灏佽濂界殑浼犺緭鍖� + */ + TransferPackage packageData(String id); +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java index ad99cbf..45cb630 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java @@ -40,5 +40,9 @@ */ Result<?> extractAndSaveFromContent(String docId,String attributionId,Integer attributionType); - + /** + * 鍙戦�佸垁鍏峰垪琛ㄥ埌鍒�鍏风郴缁� + * @param docId + */ + Result<?> sendToCutterSystem(String docId,String attributionId,Integer attributionType); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductInfoService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductInfoService.java index 34f769f..8b2ee7f 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductInfoService.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductInfoService.java @@ -221,7 +221,7 @@ /** * 鑾峰彇鍏蜂綋灞傜骇瀹炰綋 - * @param id,type + * @param id,treeType * @return */ Result<?> getTreeById(String id, Integer type); diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductMixService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductMixService.java index d6d8a13..dafd539 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductMixService.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductMixService.java @@ -1,8 +1,6 @@ package org.jeecg.modules.dnc.service; -import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; -import org.jeecg.common.api.vo.Result; import org.jeecg.modules.dnc.entity.ProductMix; import java.util.List; @@ -10,8 +8,20 @@ public interface IProductMixService extends IService<ProductMix> { //鑾峰彇灏佽浜у搧缁撴瀯鏍� - public List<ProductMix> getTree(); + List<ProductMix> getTree(); - //妯℃嫙鐢熸垚浜у搧缁撴瀯鏍� + /** + * 鏌ヨ瀵瑰簲id鐨勬墍鏈夌埗绾�(鏉冮檺鍒嗛厤浣跨敤) + * @param id + * @return + */ + List<ProductMix> getParentList(String id); + + /** + * 鏌ヨ瀵瑰簲id鐨勬墍鏈夊瓙鑺傜偣(鏉冮檺鍒嗛厤浣跨敤) + * @param id + * @return + */ + List<ProductMix> getChildrenList(String id); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java index 34f9f77..91e9992 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java @@ -189,8 +189,8 @@ boolean b = super.updateById(componentInfo); //鍚屾淇敼缁撴瀯鏍� ProductMix productMix = productMixService.getById(Long.parseLong(id)); - productMix.setName(componentInfo.getComponentName()); - productMix.setCode(componentInfo.getComponentCode()); + productMix.setTreeName(componentInfo.getComponentName()); + productMix.setTreeCode(componentInfo.getComponentCode()); productMixService.updateById(productMix); if(!b) return false; diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java index 2d1c271..9dbdaec 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java @@ -10,15 +10,19 @@ import org.jeecg.modules.dnc.entity.Cutter; import org.jeecg.modules.dnc.entity.DocFile; import org.jeecg.modules.dnc.entity.DocInfo; +import org.jeecg.modules.dnc.entity.GuideCardBatch; import org.jeecg.modules.dnc.exception.ExceptionCast; import org.jeecg.modules.dnc.mapper.CutterMapper; import org.jeecg.modules.dnc.response.CommonCode; import org.jeecg.modules.dnc.service.ICutterService; import org.jeecg.modules.dnc.service.IDocFileService; import org.jeecg.modules.dnc.service.IDocInfoService; +import org.jeecg.modules.dnc.service.IGuideCardBatchService; import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.dnc.utils.file.FileUtilS; -import org.jeecg.modules.system.service.ISysDictService; +import org.jeecg.modules.tms.entity.PreparationOrderDetail; +import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto; +import org.jeecg.modules.tms.service.IPreparationOrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -40,8 +44,10 @@ private IDocFileService docFileService; @Autowired - private ISysDictService sysDictService; + private IGuideCardBatchService guideCardBatchService; + @Autowired + private IPreparationOrderService preparationOrderService; /** * 鏂板鍒�鍏蜂俊鎭� * @param cutter @@ -194,13 +200,54 @@ return Result.error("鏈彂鐜板垁鍏风殑鍙傛暟淇℃伅娉ㄩ噴锛屾棤娉曟彁鍙栧垁鍏蜂俊鎭�"); } this.saveBatch(newCutterList); - //TODO鍙戦�佸垁鍏风鐞嗘暟鎹� return Result.OK("鎻愬彇鍒�鍏蜂俊鎭垚鍔�"); }else { return Result.error("鏈彂鐜板垁鍏风殑鍙傛暟淇℃伅娉ㄩ噴锛屾棤娉曟彁鍙栧垁鍏蜂俊鎭�"); } } + @Override + public Result<?> sendToCutterSystem(String docId,String attributionId,Integer attributionType){ + List<Cutter> cutterList = this.list(new QueryWrapper<Cutter>() + .eq("doc_id", docId) + .eq(StrUtil.isNotEmpty(attributionId),"attribution_id",attributionId) + .eq("attribution_type",attributionType)); + if (cutterList == null || cutterList.isEmpty()) { + return Result.error("鏈彂鐜板垁鍏蜂俊鎭紝鏃犳硶鍙戦�佸埌鍒�鍏风郴缁�"); + } + if (cutterList.stream().anyMatch(item -> item.getCutterCode() == null)) { + return Result.error("鏈彂鐜板垁鍏风紪鍙蜂俊鎭紝鏃犳硶鍙戦�佸埌鍒�鍏风郴缁�"); + } + //鑾峰彇鏈�鏂版暟鎺х▼搴忓姞宸ョ‘璁よ〃 + List<GuideCardBatch> guideCardBatchList = guideCardBatchService.list(new QueryWrapper<GuideCardBatch>() + .eq("doc_id", docId) + .isNotNull("serial_number") + .orderByDesc("SUBSTRING(serial_number, LEN(serial_number)-3, 4)")); + if (guideCardBatchList == null || guideCardBatchList.isEmpty()) { + return Result.error("鏈彂鐜扮▼搴忓姞宸ョ‘璁よ〃淇℃伅锛屾棤娉曞彂閫佸埌鍒�鍏风郴缁�"); + } + GuideCardBatch guideCardBatch = guideCardBatchList.get(0); + PreparationOrderAndDetailDto dto = new PreparationOrderAndDetailDto(); + dto.setPartDrawingNo(guideCardBatch.getPartsCode()); + dto.setPartName(guideCardBatch.getPartsName()); + dto.setPartMaterial(guideCardBatch.getMaterielDesp()); + dto.setProductionProcessesNo(guideCardBatch.getProcessWorkCode()); + dto.setBatchCode(guideCardBatch.getProcessingBatch()); + dto.setMachiningCount(guideCardBatch.getProcessingQuantity()); + dto.setEquipmentCode(guideCardBatch.getProcessingEquipment()); + dto.setNcName(guideCardBatch.getDocName()); + List<PreparationOrderDetail> detailList = new ArrayList<>(); + cutterList.forEach(item -> { + PreparationOrderDetail detail = new PreparationOrderDetail(); + detail.setToolCode(item.getCutterCode()); + detail.setToolId(item.getToolsId()); + detailList.add(detail); + }); + dto.setPreparationOrderDetailList(detailList); + preparationOrderService.addPreparationOrderFromDnc(dto); + return Result.OK("鍙戦�佸埌鍒�鍏风郴缁熸垚鍔�"); + } + public List<Cutter> extractToolAfterM6(DocInfo docInfo, List<String> ncLines) { List<Cutter> cutterList = new ArrayList<>(); String currentToolCode = null; // 鐢ㄤ簬杩借釜褰撳墠鎹㈠垁鎸囦护鐨勫垁鍏峰彿 diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java new file mode 100644 index 0000000..b8649bd --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataImportService.java @@ -0,0 +1,455 @@ +package org.jeecg.modules.dnc.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.jeecg.weibo.exception.BusinessException; +import org.jeecg.modules.dnc.dto.ComponentHierarchy; +import org.jeecg.modules.dnc.dto.TransferPackage; +import org.jeecg.modules.dnc.entity.*; +import org.jeecg.modules.dnc.mapper.*; +import org.jeecg.modules.dnc.service.*; +import org.jeecg.modules.system.service.IMdcProductionService; +import org.jeecg.modules.system.service.ISysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class DataImportService { + private static final Logger logger = LoggerFactory.getLogger(DataImportService.class); + + @Autowired + private ProductInfoMapper productMapper; + + @Autowired + private ComponentInfoMapper componentMapper; + + @Autowired + private PartsInfoMapper partsMapper; + + @Autowired + private ProcessSpecVersionMapper psvMapper; + + @Autowired + private ProcessStreamMapper processMapper; + + @Autowired + private WorkStepMapper workStepMapper; + + @Autowired + private ProductMixMapper productMixMapper; + + @Autowired + private PermissionStreamNewMapper permissionStreamNewMapper; + + @Autowired + private DeviceManagementMapper deviceManagementMapper; + + @Autowired + private DeviceTypeMapper deviceTypeMapper; + + @Autowired + private DocInfoMapper docInfoMapper; + + @Autowired + private DocFileMapper docFileMapper; + + @Autowired + private DocRelativeMapper docRelativeMapper; + + @Autowired + private CutterMapper cutterMapper; + + @Autowired + private GuideCardBatchMapper guideCardBatchMapper; + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private IMdcProductionService mdcProductionService; + + @Autowired + private IProductPermissionService productPermissionService; + + @Autowired + private IProductDepartmentService productDepartmentService; + + @Autowired + private IComponentPermissionService componentPermissionService; + + @Autowired + private IComponentDepartmentService componentDepartmentService; + + @Autowired + private IPartsPermissionService partsPermissionService; + + @Autowired + private IPartsDepartmentService partsDepartmentService; + + @Autowired + private IProcessSpecVersionPermissionService processSpecVersionPermissionService; + + @Autowired + private IProcessSpecVersionDepartmentService processSpecVersionDepartmentService; + + @Autowired + private IProcessStreamPermissionService processStreamPermissionService; + + @Autowired + private IProcessionDepartmentService processionDepartmentService; + + @Autowired + private IWorkStepPermissionService workStepPermissionService; + + @Autowired + private IWorkStepDepartmentService workStepDepartmentService; + + @Transactional(rollbackFor = Exception.class) + public void importTransferPackage(TransferPackage transferPackage) { + try { + logger.info("寮�濮嬪鍏ヤ紶杈撳寘鏁版嵁, 绫诲瀷: {}", transferPackage.getDataType()); + + // 淇濆瓨浜у搧 + if (transferPackage.getTraceChain() != null && + transferPackage.getTraceChain().getProduct() != null) { + saveProduct(transferPackage.getTraceChain().getProduct()); + } + + // 淇濆瓨閮ㄤ欢灞傜骇 + if (transferPackage.getTraceChain() != null && + transferPackage.getTraceChain().getComponentHierarchy() != null) { + saveComponentHierarchy(transferPackage.getTraceChain().getComponentHierarchy()); + } + + // 淇濆瓨闆朵欢 + if (transferPackage.getTraceChain() != null && + transferPackage.getTraceChain().getParts() != null) { + saveParts(transferPackage.getTraceChain().getParts()); + } + + // 淇濆瓨宸ヨ壓瑙勭▼ + if (transferPackage.getTraceChain() != null && + transferPackage.getTraceChain().getProcessSpec() != null) { + saveProcessSpec(transferPackage.getTraceChain().getProcessSpec()); + } + + // 淇濆瓨宸ュ簭 + if (transferPackage.getTraceChain() != null&& + transferPackage.getTraceChain().getProcess() != null) { + saveProcess(transferPackage.getTraceChain().getProcess()); + } + + // 淇濆瓨宸ユ + if (transferPackage.getTraceChain() != null&& + transferPackage.getTraceChain().getWorkStep() != null) { + saveWorkSteps(transferPackage.getTraceChain().getWorkStep()); + } + + // 淇濆瓨缁撴瀯鏍� + if (transferPackage.getTraceChain() != null&& + transferPackage.getTraceChain().getTreePath() != null) { + saveTreePath(transferPackage.getTraceChain().getTreePath()); + } + + //淇濆瓨鏉冮檺 + if (transferPackage.getTraceChain() != null&& + transferPackage.getTraceChain().getPermissionStreamNewList() != null) { + savePermissionStreamNewList(transferPackage.getTraceChain().getPermissionStreamNewList()); + } + + // 淇濆瓨璁惧绫� + if (transferPackage.getTraceChain() != null&& + transferPackage.getTraceChain().getDeviceManagement() != null) { + saveDeviceManagement(transferPackage.getTraceChain().getDeviceManagement()); + } + + // 淇濆瓨璁惧绫诲搴斾俊鎭� + if (transferPackage.getTraceChain() != null&& + transferPackage.getTraceChain().getDeviceType() != null) { + saveDeviceType(transferPackage.getTraceChain().getDeviceType()); + } + + // 淇濆瓨鏂囨。 + if (transferPackage.getTraceChain() != null&& + transferPackage.getTraceChain().getDocInfo() != null) { + saveDocInfo(transferPackage.getTraceChain().getDocInfo()); + } + + // 淇濆瓨鏂囦欢 + if (transferPackage.getTraceChain() !=null&& + transferPackage.getTraceChain().getDocFile() != null) { + saveDocFile(transferPackage.getTraceChain().getDocFile()); + } + + // 淇濆瓨鏂囨。鏂囦欢瀵瑰簲鍏崇郴 + if (transferPackage.getDocRelative() !=null){ + saveDocRelative(transferPackage.getDocRelative()); + } + + // 淇濆瓨鍒�鍏风郴缁� + if (transferPackage.getTraceChain() !=null&& + transferPackage.getTraceChain().getCutterList() != null) { + saveCutterList(transferPackage.getTraceChain().getCutterList()); + } + + //淇濆瓨鏁版帶绋嬪簭鍔犲伐纭琛� + if (transferPackage.getTraceChain() !=null&& + transferPackage.getTraceChain().getGuideCardBatch() != null) { + saveGuideCardBatch(transferPackage.getTraceChain().getGuideCardBatch()); + } + + logger.info("鏁版嵁瀵煎叆鎴愬姛"); + } catch (DuplicateKeyException e) { + logger.warn("涓婚敭鍐茬獊: {}", e.getMessage()); + throw new BusinessException("鏁版嵁宸插瓨鍦紝鏃犳硶閲嶅瀵煎叆"); + } catch (DataIntegrityViolationException e) { + logger.error("鏁版嵁瀹屾暣鎬ц繚鍙�: {}", e.getMessage()); + throw new BusinessException("鏁版嵁涓嶅畬鏁达紝璇锋鏌ュ繀濉瓧娈�"); + } catch (Exception e) { + logger.error("鏁版嵁瀵煎叆澶辫触: {}", e.getMessage(), e); + throw new BusinessException("鏁版嵁瀵煎叆澶辫触: " + e.getMessage()); + } + } + + private void saveProduct(ProductInfo product) { + if (productMapper.selectById(product.getProductId()) == null) { + productMapper.insert(product); + logger.debug("浜у搧宸蹭繚瀛�: {}", product.getProductId()); + } else { + logger.debug("浜у搧宸插瓨鍦�: {}", product.getProductId()); + } + } + + private void saveComponentHierarchy(ComponentHierarchy hierarchy) { + for (ComponentInfo component : hierarchy.getComponents()) { + if (componentMapper.selectById(component.getComponentId()) == null) { + componentMapper.insert(component); + logger.debug("閮ㄤ欢宸蹭繚瀛�: {}", component.getComponentId()); + } else { + logger.debug("閮ㄤ欢宸插瓨鍦�: {}", component.getComponentId()); + } + } + } + + private void saveParts(PartsInfo parts) { + if (partsMapper.selectById(parts.getPartsId()) == null) { + partsMapper.insert(parts); + logger.debug("闆朵欢宸蹭繚瀛�: {}", parts.getPartsId()); + } else { + logger.debug("闆朵欢宸插瓨鍦�: {}", parts.getPartsId()); + } + } + + private void saveProcessSpec(ProcessSpecVersion processSpec) { + if (psvMapper.selectById(processSpec.getId()) == null) { + psvMapper.insert(processSpec); + logger.debug("宸ヨ壓瑙勭▼宸蹭繚瀛�: {}", processSpec.getId()); + } else { + logger.debug("宸ヨ壓瑙勭▼宸插瓨鍦�: {}", processSpec.getId()); + } + } + + private void saveProcess(ProcessStream process) { + if (processMapper.selectById(process.getProcessId()) == null) { + processMapper.insert(process); + logger.debug("宸ュ簭宸蹭繚瀛�: {}", process.getProcessId()); + } else { + logger.debug("宸ュ簭宸插瓨鍦�: {}", process.getProcessId()); + } + } + + private void saveWorkSteps(WorkStep workStep) { + if (workStepMapper.selectById(workStep.getId()) == null) { + workStepMapper.insert(workStep); + logger.debug("宸ユ宸蹭繚瀛�: {}", workStep.getId()); + } else { + logger.debug("宸ユ宸插瓨鍦�: {}", workStep.getId()); + } + } + + private void saveTreePath(List<ProductMix> productMixList){ + for (ProductMix productMix : productMixList) { + if (productMixMapper.selectById(productMix.getId()) == null) { + productMixMapper.insert(productMix); + logger.debug("浜у搧缁勫悎宸蹭繚瀛�: {}", productMix.getId()); + } else { + logger.debug("浜у搧缁勫悎宸插瓨鍦�: {}", productMix.getId()); + } + } + } + + private void savePermissionStreamNewList(List<PermissionStreamNew> permissionStreamNewList) { + for (PermissionStreamNew permissionStreamNew : permissionStreamNewList) { + if (permissionStreamNew.getUserId() != null) { + String id=sysUserService.getUserByName(permissionStreamNew.getUserId()).getId(); + if (id!=null){ + permissionStreamNew.setUserId(id); + } + } + if (permissionStreamNew.getDepartId() != null) { + String id=mdcProductionService.findByOrgCode(permissionStreamNew.getDepartId()).getId(); + if (id!=null){ + permissionStreamNew.setDepartId(id); + } + } + permissionStreamNewMapper.insert(permissionStreamNew); + logger.debug("鏉冮檺宸蹭繚瀛�: {}", permissionStreamNew.getId()); + } + //鍒嗘壒娣诲姞浜у搧銆侀儴浠躲�侀浂浠躲�佸伐鑹鸿绋嬨�佸伐搴忋�佸伐姝ユ潈闄� + permissionStreamNewList.forEach(item -> { + switch (item.getBusinessType()){ + case "1": + if (StrUtil.isNotEmpty(item.getUserId())){ + ProductPermission productPermission = new ProductPermission(); + productPermission.setProductId(item.getBusinessId()); + productPermission.setUserId(item.getUserId()); + productPermissionService.save(productPermission); + }else { + ProductDepartment productDepartment = new ProductDepartment(); + productDepartment.setProductId(item.getBusinessId()); + productDepartment.setDepartId(item.getDepartId()); + productDepartmentService.save(productDepartment); + } + break; + case "2": + + if (StrUtil.isNotEmpty(item.getUserId())){ + ComponentPermission componentPermission = new ComponentPermission(); + componentPermission.setComponentId(item.getBusinessId()); + componentPermission.setUserId(item.getUserId()); + componentPermissionService.save(componentPermission); + }else { + ComponentDepartment componentDepartment = new ComponentDepartment(); + componentDepartment.setComponentId(item.getBusinessId()); + componentDepartment.setDepartId(item.getDepartId()); + componentDepartmentService.save(componentDepartment); + } + break; + case "3": + if (StrUtil.isNotEmpty(item.getUserId())){ + PartsPermission partsPermission = new PartsPermission(); + partsPermission.setPartsId(item.getBusinessId()); + partsPermission.setUserId(item.getUserId()); + partsPermissionService.save(partsPermission); + }else { + PartsDepartment partsDepartment = new PartsDepartment(); + partsDepartment.setPartsId(item.getBusinessId()); + partsDepartment.setDepartId(item.getDepartId()); + partsDepartmentService.save(partsDepartment); + } + break; + case "4": + if (StrUtil.isNotEmpty(item.getUserId())){ + ProcessSpecVersionPermission processSpecVersionPermission = new ProcessSpecVersionPermission(); + processSpecVersionPermission.setPsvId(item.getBusinessId()); + processSpecVersionPermission.setUserId(item.getUserId()); + processSpecVersionPermissionService.save(processSpecVersionPermission); + }else { + ProcessSpecVersionDepartment processSpecVersionDepartment = new ProcessSpecVersionDepartment(); + processSpecVersionDepartment.setPsvId(item.getBusinessId()); + processSpecVersionDepartment.setDepartId(item.getDepartId()); + processSpecVersionDepartmentService.save(processSpecVersionDepartment); + } + break; + case "5": + if (StrUtil.isNotEmpty(item.getUserId())){ + ProcessionPermission processionPermission = new ProcessionPermission(); + processionPermission.setProcessId(item.getBusinessId()); + processionPermission.setUserId(item.getUserId()); + processStreamPermissionService.save(processionPermission); + }else { + ProcessionDepartment processionDepartment = new ProcessionDepartment(); + processionDepartment.setProcessId(item.getBusinessId()); + processionDepartment.setDepartId(item.getDepartId()); + processionDepartmentService.save(processionDepartment); + } + break; + case "6": + if (StrUtil.isNotEmpty(item.getUserId())){ + WorkStepPermission workStepPermission = new WorkStepPermission(); + workStepPermission.setStepId(item.getBusinessId()); + workStepPermission.setUserId(item.getUserId()); + workStepPermissionService.save(workStepPermission); + }else { + WorkStepDepartment workStepDepartment = new WorkStepDepartment(); + workStepDepartment.setStepId(item.getBusinessId()); + workStepDepartment.setDepartId(item.getDepartId()); + workStepDepartmentService.save(workStepDepartment); + } + break; + default: + } + }); + } + + private void saveDeviceManagement(DeviceManagement deviceManagement) { + if (deviceManagementMapper.selectById(deviceManagement.getId()) == null) { + deviceManagementMapper.insert(deviceManagement); + logger.debug("璁惧绫讳俊鎭凡淇濆瓨: {}", deviceManagement.getId()); + } else { + logger.debug("璁惧绫讳俊鎭凡瀛樺湪: {}", deviceManagement.getId()); + } + } + + private void saveDeviceType(DeviceType deviceType) { + if (deviceTypeMapper.selectById(deviceType.getId()) == null) { + deviceTypeMapper.insert(deviceType); + logger.debug("璁惧绫诲凡淇濆瓨: {}", deviceType.getId()); + } else { + logger.debug("璁惧绫诲凡瀛樺湪: {}", deviceType.getId()); + } + } + + private void saveDocInfo(DocInfo docInfo) { + if (docInfoMapper.selectById(docInfo.getDocId()) == null) { + docInfoMapper.insert(docInfo); + logger.debug("鏂囨。宸蹭繚瀛�: {}", docInfo.getDocId()); + } else { + logger.debug("鏂囨。宸插瓨鍦�: {}", docInfo.getDocId()); + } + } + + private void saveDocFile(DocFile docFile) { + if (docFileMapper.selectById(docFile.getFileId()) == null) { + docFileMapper.insert(docFile); + logger.debug("鏂囨。鏂囦欢宸蹭繚瀛�: {}", docFile.getFileId()); + } else { + logger.debug("鏂囨。鏂囦欢宸插瓨鍦�: {}", docFile.getFileId()); + } + } + + private void saveDocRelative(DocRelative docRelative) { + if (docRelativeMapper.selectById(docRelative.getId()) == null) { + docRelativeMapper.insert(docRelative); + logger.debug("鏂囨。瀵瑰簲鍏崇郴宸蹭繚瀛�: {}", docRelative.getId()); + } else { + logger.debug("鏂囨。瀵瑰簲鍏崇郴宸插瓨鍦�: {}", docRelative.getId()); + } + } + + private void saveCutterList(List<Cutter> cutterList) { + for (Cutter cutter : cutterList) { + if (cutterMapper.selectById(cutter.getId()) == null) { + cutterMapper.insert(cutter); + logger.debug("鍒�鍏峰凡淇濆瓨: {}", cutter.getId()); + } else { + cutterMapper.updateById(cutter); + } + } + } + + private void saveGuideCardBatch(GuideCardBatch guideCardBatch) { + if (guideCardBatchMapper.selectById(guideCardBatch.getId()) == null) { + guideCardBatchMapper.insert(guideCardBatch); + logger.debug("鍒�鐗囨壒娆″凡淇濆瓨: {}", guideCardBatch.getId()); + } else { + logger.debug("鍒�鐗囨壒娆″凡瀛樺湪: {}", guideCardBatch.getId()); + } + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataPackageService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataPackageService.java new file mode 100644 index 0000000..46cfe99 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DataPackageService.java @@ -0,0 +1,36 @@ +package org.jeecg.modules.dnc.service.impl; + +import org.jeecg.modules.dnc.dto.TransferPackage; +import org.jeecg.modules.dnc.service.DataPackageStrategy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.EnumMap; +import java.util.List; +import java.util.Map; + +@Service +public class DataPackageService { + + private final Map<TransferPackage.DataType, DataPackageStrategy> strategies; + + @Autowired + public DataPackageService(List<DataPackageStrategy> strategyList) { + strategies = new EnumMap<>(TransferPackage.DataType.class); + strategyList.forEach(strategy -> { + if (strategy instanceof ProcessPackageStrategy) { + strategies.put(TransferPackage.DataType.PROCESS, strategy); + } else if (strategy instanceof WorkStepPackageStrategy) { + strategies.put(TransferPackage.DataType.WORKSTEP, strategy); + } + }); + } + + public TransferPackage packageData(TransferPackage.DataType type, String id) { + DataPackageStrategy strategy = strategies.get(type); + if (strategy == null) { + throw new IllegalArgumentException("涓嶆敮鎸佺殑鏁版嵁绫诲瀷: " + type); + } + return strategy.packageData(id); + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java index 28816b1..2704bd2 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DevicePermissionServiceImpl.java @@ -196,9 +196,9 @@ populateEquipmentNodes(treeList, equipmentMap, userRealNameMap); } -/** - * 鑾峰彇鎺堟潈璁惧ID闆嗗悎 - */ + /** + * 鑾峰彇鎺堟潈璁惧ID闆嗗悎 + */ private Set<String> getAuthorizedDeviceIds(String userId) { return super.list(new QueryWrapper<DevicePermission>().select("device_id").eq("user_id", userId)) .stream() diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java index a32370c..dc6ef58 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java @@ -342,10 +342,20 @@ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoAnalysisSmwNcService(String pathFile,File fileRec){ - //todo 绋嬪簭鍥炰紶 + //纭瑙f瀽鐩綍 return true; } + /** + * 鏂囨。瑙f瀽 + * todo 淇敼鍒涘缓鏂囦欢鍏宠仈鍏崇郴锛屾敼鎴愬浐瀹歞ocId锛屽幓闄ゅ垱寤篋ocInfo + * @param equipmentId + * @param fileRec + * @param fileNameSuffix + * @param fileNameNew + * @param filePath + * @return + */ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoRecService(String equipmentId,File fileRec,String fileNameSuffix,String fileNameNew,String filePath ) { diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java new file mode 100644 index 0000000..419c241 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FileFerryService.java @@ -0,0 +1,254 @@ +package org.jeecg.modules.dnc.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.modules.dnc.dto.ComponentHierarchy; +import org.jeecg.modules.dnc.dto.TransferPackage; +import org.jeecg.modules.dnc.entity.*; +import org.jeecg.modules.dnc.exception.ExceptionCast; +import org.jeecg.modules.dnc.response.ActivitiCode; +import org.jeecg.modules.dnc.response.DocumentCode; +import org.jeecg.modules.dnc.service.IDocClassificationService; +import org.jeecg.modules.dnc.service.IDocInfoService; +import org.jeecg.modules.dnc.service.IDocRelativeService; +import org.jeecg.modules.dnc.utils.JsonUtils; +import org.jeecg.modules.dnc.utils.file.FileUtilS; +import org.jeecg.modules.mdc.entity.MdcEquipment; +import org.jeecg.modules.mdc.mapper.MdcEquipmentMapper; +import org.jeecg.modules.system.service.IMdcProductionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.List; + +@Service +public class FileFerryService { + + private final DataPackageService dataPackageService; + private final SecurityService securityService; + + private static final Logger logger = LoggerFactory.getLogger(FileFerryService.class); + + @Value("${deploy.secretFolder}") + private String ferryPath; + + @Value("${fileHomePath}") + private String fileHomePath; + + @Autowired + private MdcEquipmentMapper mdcEquipmentMapper; + + @Autowired + private IMdcProductionService mdcProductionService; + + @Autowired + private IDocClassificationService classificationService; + + @Autowired + private IDocRelativeService docRelativeService; + + @Autowired + private IDocInfoService docInfoService; + + @Autowired + public FileFerryService(DataPackageService dataPackageService, SecurityService securityService) { + this.dataPackageService = dataPackageService; + this.securityService = securityService; + } + + public String exportData(TransferPackage.DataType type, String id,String fileName) { + // 1. 鑾峰彇灏佽鏁版嵁 + TransferPackage transferPackage = dataPackageService.packageData(type, id); + + // 2. 鍘嬬缉灞傜骇缁撴瀯 + compressHierarchy(transferPackage); + + // 3. JSON搴忓垪鍖� + String json = JsonUtils.toJson(transferPackage); + +// // 4. 鍘嬬缉鍔犲瘑 +// byte[] compressed = CompressionUtils.gzipCompress(json.getBytes(StandardCharsets.UTF_8)); +// byte[] encrypted = securityService.encrypt(compressed); + //鏆傛椂涓嶅姞瀵� + byte[] compressed = json.getBytes(StandardCharsets.UTF_8); + + // 5. 鐢熸垚鏂囦欢 + Path filePath = Paths.get(ferryPath,fileName); + try { + Files.createDirectories(filePath.getParent()); + Files.write(filePath, compressed); + return filePath.toString(); + } catch (IOException e) { + throw new RuntimeException("鏂囦欢鍐欏叆澶辫触", e); + } + } + + public TransferPackage importData(String filePath) { + try { + // 1. 璇诲彇鏂囦欢 + Path path = Paths.get(filePath); + String fileName = path.getFileName().toString(); + byte[] encrypted = Files.readAllBytes(path); + logger.debug("璇诲彇鏂囦欢瀹屾垚, 澶у皬: {} 瀛楄妭", encrypted.length); + + // 2. 瑙e瘑 (褰撳墠宸叉敞閲�) + // byte[] compressed = securityService.decrypt(encrypted); + + // 3. 瑙e帇缂� +// byte[] jsonBytes = CompressionUtils.gzipDecompress(encrypted); + String json = new String(encrypted, StandardCharsets.UTF_8); + logger.debug("瑙e帇缂╁畬鎴�, JSON闀垮害: {} 瀛楃", json.length()); + + // 璁板綍JSON鍐呭鐢ㄤ簬璋冭瘯 + logger.trace("鍘熷JSON鍐呭:\n{}", json); + + // 4. JSON鍙嶅簭鍒楀寲 + logger.debug("寮�濮嬪弽搴忓垪鍖�..."); + TransferPackage pkg = JsonUtils.fromJson(json, TransferPackage.class); + + // 5. 澶勭悊鏂囦欢鍚� - 绀轰緥: 10A20250614000026_3102038 + String[] split = fileName.split("_"); + if (split.length < 2) { + throw new IllegalArgumentException("鏃犳晥鐨勬枃浠跺悕鏍煎紡: " + fileName); + } + + String id = split[0]; + String equipmentId = split[1].split("\\.")[0]; + + // 鎻愬彇鍓嶇紑鍜屾暟瀛楅儴鍒� + int aIndex = id.indexOf("A"); + if (aIndex == -1 || aIndex == id.length() - 1) { + throw new IllegalArgumentException("鏃犳晥鐨処D鏍煎紡: " + id); + } + + String prefix = id.substring(0, aIndex + 1); + String numericPart = id.substring(aIndex + 1); + + // 璁$畻鍓嶄竴涓枃浠跺悕 + long number = Long.parseLong(numericPart); + number--; // 鑾峰彇鍓嶄竴涓簭鍒楀彿 + + // 淇濇寔鐩稿悓浣嶆暟鏍煎紡 + String newNumeric = String.format("%0" + numericPart.length() + "d", number); + String ncFileName = prefix + newNumeric + "_" + equipmentId+".NC"; + String ncFilePath = path.getParent().resolve(ncFileName).toString(); + + // 6. 鑾峰彇鏂囦欢澶嶅埗鐩爣璺緞 + DocFile docFile = pkg.getTraceChain().getDocFile(); + DocInfo docInfo = pkg.getTraceChain().getDocInfo(); + if (docFile == null) { + throw new IllegalStateException("浼犺緭鍖呬腑缂哄皯鏂囨。鏂囦欢淇℃伅"); + } + + // 鏋勫缓鐩爣璺緞 + String targetDirectory = fileHomePath + docFile.getFilePath(); + String targetPath = Paths.get(targetDirectory, docFile.getFileEncodeName()).toString(); + + // 纭繚鐩爣鐩綍瀛樺湪 + File targetDir = new File(targetDirectory); + if (!targetDir.exists() && !targetDir.mkdirs()) { + throw new IOException("鏃犳硶鍒涘缓鐩爣鐩綍: " + targetDirectory); + } + + // 7. 澶嶅埗鏂囦欢骞堕噸鍛藉悕 + logger.info("澶嶅埗鏂囦欢: {} 鈫� {}", ncFilePath, targetPath); + Path source = Paths.get(ncFilePath); + Files.copy(source, Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING); + + // 8. 鏌ヨ璁惧id + MdcEquipment mdcEquipment=mdcEquipmentMapper.selectOne(new QueryWrapper<MdcEquipment>().eq("equipment_id",equipmentId)); + if (mdcEquipment == null) { + throw new IllegalArgumentException("鏃犳晥鐨勮澶嘔D: " + equipmentId); + } + + // 9.浼犺緭鏂囦欢鍒拌澶囦笅 + List<String> strings = mdcProductionService.findListParentTreeAll(mdcEquipment.getId()); + if (strings != null && !strings.isEmpty()) { + DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(docInfo.getDocId(), 7, mdcEquipment.getId()); + if (deviceDoc == null) { + DocClassification classification = classificationService.getByCode("send"); + if(classification == null) + ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); + DocRelative docRelative = new DocRelative(); + docRelative.setDocId(docInfo.getDocId()); + docRelative.setClassificationId(classification.getClassificationId()); + docRelative.setAttributionType(7); + docRelative.setAttributionId(mdcEquipment.getId()); + docRelativeService.save(docRelative); + } + String sendPath = StringUtils.join(strings.toArray(), "/"); + boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(), sendPath + "/" + mdcEquipment.getEquipmentId(), + docFile.getFileEncodeName(), + docFile.getFileName(), docFile.getFileSuffix()); + if (!copyFileNc) { + ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); + } else { + FileUtilS.deleteZipFromToSend(sendPath + "/" + mdcEquipment.getEquipmentId(), + docFile.getFileName(), docFile.getFileSuffix()); + } + } else { + throw new RuntimeException("鏂囦欢浼犺緭璺緞鑾峰彇澶辫触"); + } + + // 10.鍒犻櫎涓存椂NC鏂囦欢涓巎son鏂囦欢 + logger.info("鍒犻櫎涓存椂鏂囦欢: {}", ncFilePath); + Files.delete(source); + Files.delete(path); + + return JsonUtils.fromJson(json, TransferPackage.class); + + } catch (NumberFormatException e) { + throw new RuntimeException("鏂囦欢鍚嶄腑鐨勬暟瀛楁牸寮忔棤鏁�: " + e.getMessage(), e); + } catch (IOException e) { + throw new RuntimeException("鏂囦欢鎿嶄綔澶辫触: " + e.getMessage(), e); + } catch (Exception e) { + logger.error("鏂囦欢瀵煎叆澶辫触 [璺緞: {}]", filePath, e); + throw new RuntimeException("鏂囦欢瀵煎叆澶辫触: " + e.getMessage(), e); + } + } + + private void compressHierarchy(TransferPackage pkg) { + if (pkg.getTraceChain() == null || + pkg.getTraceChain().getComponentHierarchy() == null || + pkg.getTraceChain().getComponentHierarchy().getComponents().size() < 4) { + return; + } + + ComponentHierarchy hierarchy = pkg.getTraceChain().getComponentHierarchy(); + List<ComponentInfo> compressed = new ArrayList<>(); + + // 淇濈暀鏍归儴浠� + compressed.add(hierarchy.getComponents().get(0)); + + // 淇濈暀鍏抽敭涓棿鑺傜偣 + int step = Math.max(1, hierarchy.getComponents().size() / 3); + for (int i = step; i < hierarchy.getComponents().size() - 1; i += step) { + compressed.add(hierarchy.getComponents().get(i)); + } + + // 淇濈暀鍙跺瓙閮ㄤ欢 + compressed.add(hierarchy.getLeafComponent()); + + // 鏇存柊灞傜骇 + hierarchy.getComponents().clear(); + hierarchy.getComponents().addAll(compressed); + } + + private String generateFilename(TransferPackage.DataType type, String id) { + return String.format("%s_%s_%d.ferry", + type.name().toLowerCase(), + id, + System.currentTimeMillis()); + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java new file mode 100644 index 0000000..38ca508 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/FullHierarchyTraceService.java @@ -0,0 +1,236 @@ +package org.jeecg.modules.dnc.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum; +import org.jeecg.modules.dnc.dto.ComponentHierarchy; +import org.jeecg.modules.dnc.dto.ProcessTraceChain; +import org.jeecg.modules.dnc.entity.*; +import org.jeecg.modules.dnc.mapper.*; +import org.jeecg.modules.dnc.service.IPermissionStreamNewService; +import org.jeecg.modules.system.service.IMdcProductionService; +import org.jeecg.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +public class FullHierarchyTraceService { + @Autowired + private ProductMixMapper productMixMapper; + @Autowired + private ProductInfoMapper productMapper; + @Autowired + private ComponentInfoMapper componentMapper; + @Autowired + private PartsInfoMapper partsMapper; + @Autowired + private ProcessSpecVersionMapper psvMapper; + @Autowired + private ProcessStreamMapper processMapper; + @Autowired + private WorkStepMapper workStepMapper; + @Autowired + private DeviceTypeMapper deviceTypeMapper; + @Autowired + private DeviceManagementMapper deviceManagementMapper; + @Autowired + private DocInfoMapper docInfoMapper; + @Autowired + private DocFileMapper docFileMapper; + @Autowired + private CutterMapper cutterMapper; + @Autowired + private GuideCardBatchMapper guideCardBatchMapper; + @Autowired + private IPermissionStreamNewService permissionStreamNewService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private IMdcProductionService mdcProductionService; + + public ProcessTraceChain traceFromProcess(DocRelative docRelative) { + ProcessTraceChain chain = initChainWithDocInfo(docRelative); + DeviceType deviceType = deviceTypeMapper.selectById(docRelative.getAttributionId()); + chain.setDeviceType(deviceType); + + if (isProcessType(deviceType)) { + chain.setDeviceManagement(deviceManagementMapper.selectById(deviceType.getDeviceManagementId())); + traceProcessChain(chain, deviceType.getAttributionId()); + } + + completeChainWithProductInfo(chain); + List<ProductMix> productMixList=buildFullTreePath(chain); + chain.setTreePath(productMixList); + chain.setPermissionStreamNewList(buildFullTreePathPermission(productMixList)); + return chain; + } + + public ProcessTraceChain traceFromWorkStep(DocRelative docRelative) { + ProcessTraceChain chain = initChainWithDocInfo(docRelative); + DeviceType deviceType = deviceTypeMapper.selectById(docRelative.getAttributionId()); + chain.setDeviceType(deviceType); + + if (isWorkSiteType(deviceType)) { + chain.setDeviceManagement(deviceManagementMapper.selectById(deviceType.getDeviceManagementId())); + traceWorkStepChain(chain, deviceType.getAttributionId()); + } + + completeChainWithProductInfo(chain); + List<ProductMix> productMixList=buildFullTreePath(chain); + chain.setTreePath(productMixList); + chain.setPermissionStreamNewList(buildFullTreePathPermission(productMixList)); + return chain; + } + + private ProcessTraceChain initChainWithDocInfo(DocRelative docRelative) { + ProcessTraceChain chain = ProcessTraceChain.builder().docRelative(docRelative).build(); + Optional.ofNullable(docInfoMapper.selectById(docRelative.getDocId())) + .ifPresent(doc -> { + chain.setDocInfo(doc); + chain.setDocFile(docFileMapper.selectById(doc.getPublishFileId())); + chain.setCutterList(getCuttersByDocId(doc.getDocId())); + getLatestGuideCardBatch(doc.getDocId()).ifPresent(chain::setGuideCardBatch); + }); + return chain; + } + + private List<Cutter> getCuttersByDocId(String docId) { + return cutterMapper.selectList(new QueryWrapper<Cutter>().eq("doc_id", docId)); + } + + private Optional<GuideCardBatch> getLatestGuideCardBatch(String docId) { + List<GuideCardBatch> batches = guideCardBatchMapper.selectList( + new QueryWrapper<GuideCardBatch>() + .eq("doc_id", docId) + .orderByDesc("SUBSTRING(serial_number, LEN(serial_number)-3, 4)")); + return CollectionUtils.isEmpty(batches) ? Optional.empty() : Optional.of(batches.get(0)); + } + + private boolean isProcessType(DeviceType deviceType) { + return deviceType != null && + Objects.equals(deviceType.getAttributionType(), DocAttributionTypeEnum.PROCESS.getCode()); + } + + private boolean isWorkSiteType(DeviceType deviceType) { + return deviceType != null && + Objects.equals(deviceType.getAttributionType(), DocAttributionTypeEnum.WORKSITE.getCode()); + } + + private void traceProcessChain(ProcessTraceChain chain, String processId) { + ProcessStream process = processMapper.selectById(processId); + if (process == null) return; + + chain.setProcess(process); + if (process.getPsvId() != null) { + ProcessSpecVersion psv = psvMapper.selectById(process.getPsvId()); + chain.setProcessSpec(psv); + if (psv != null && psv.getPartsId() != null) { + PartsInfo parts = partsMapper.selectById(psv.getPartsId()); + chain.setParts(parts); + if (parts != null && parts.getComponentId() != null) { + chain.setComponentHierarchy(traceComponentHierarchy(parts.getComponentId())); + } + } + } else if (process.getComponentId() != null) { + chain.setComponentHierarchy(traceComponentHierarchy(process.getComponentId())); + } + } + + private void traceWorkStepChain(ProcessTraceChain chain, String workStepId) { + WorkStep workStep = workStepMapper.selectById(workStepId); + if (workStep == null) return; + + chain.setWorkStep(workStep); + traceProcessChain(chain, workStep.getProcessId()); + } + + private ComponentHierarchy traceComponentHierarchy(String componentId) { + ComponentHierarchy hierarchy = new ComponentHierarchy(); + ComponentInfo current = componentMapper.selectById(componentId); + + while (current != null) { + hierarchy.addComponentToTop(current); + + if (current.getParentId() == null || current.getParentId().isEmpty()) { + Optional.ofNullable(current.getProductId()) + .map(productMapper::selectById) + .ifPresent(hierarchy::setRootProduct); + break; + } + + current = componentMapper.selectById(current.getParentId()); + } + + return hierarchy; + } + + private void completeChainWithProductInfo(ProcessTraceChain chain) { + Optional.ofNullable(chain.getComponentHierarchy()) + .map(ComponentHierarchy::getComponents) + .filter(components -> !components.isEmpty()) + .map(components -> components.get(0)) + .map(ComponentInfo::getProductId) + .map(productMapper::selectById) + .ifPresent(chain::setProduct); + } + + private List<ProductMix> buildFullTreePath(ProcessTraceChain chain) { + List<ProductMix> path = new ArrayList<>(); + + Optional.ofNullable(chain.getProduct()) + .map(ProductInfo::getProductId) + .map(productMixMapper::findByProductId) + .ifPresent(path::add); + + Optional.ofNullable(chain.getComponentHierarchy()) + .map(ComponentHierarchy::getComponentsFromTop) + .ifPresent(components -> components.stream() + .map(ComponentInfo::getComponentId) + .map(productMixMapper::findByComponentId) + .filter(Objects::nonNull) + .forEach(path::add)); + + Optional.ofNullable(chain.getParts()) + .map(PartsInfo::getPartsId) + .map(productMixMapper::findByPartsId) + .ifPresent(path::add); + + Optional.ofNullable(chain.getProcessSpec()) + .map(ProcessSpecVersion::getId) + .map(productMixMapper::findByOperationId) + .ifPresent(path::add); + + Optional.ofNullable(chain.getProcess()) + .map(ProcessStream::getProcessId) + .map(productMixMapper::findByProcessId) + .ifPresent(path::add); + + Optional.ofNullable(chain.getWorkStep()) + .map(WorkStep::getId) + .map(productMixMapper::findByWorksiteId) + .ifPresent(path::add); + + return path; + } + + private List<PermissionStreamNew> buildFullTreePathPermission(List<ProductMix> productMixList) { + List<Long> ids=productMixList.stream().map(ProductMix::getId).collect(Collectors.toList()); + List<PermissionStreamNew> path = permissionStreamNewService + .list(new QueryWrapper<PermissionStreamNew>().in("business_id",ids) + .eq("delete_flag",0)); + path.forEach(item->{ + if (item.getDepartId()!=null){ + item.setDepartId(mdcProductionService.getById(item.getDepartId()).getOrgCode()); + } + if (item.getUserId()!=null){ + item.setUserId(sysUserService.getById(item.getUserId()).getUsername()); + } + }); + return path; + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java index bbc8d9a..931166f 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java @@ -151,8 +151,8 @@ boolean b = super.updateById(partsInfo); //鍚屾淇敼缁撴瀯鏍� ProductMix productMix = productMixService.getById(Long.parseLong(id)); - productMix.setName(partsInfo.getPartsName()); - productMix.setCode(partsInfo.getPartsCode()); + productMix.setTreeName(partsInfo.getPartsName()); + productMix.setTreeCode(partsInfo.getPartsCode()); productMixService.updateById(productMix); if(!b) return false; diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessPackageStrategy.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessPackageStrategy.java new file mode 100644 index 0000000..b6cdfd5 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessPackageStrategy.java @@ -0,0 +1,42 @@ +package org.jeecg.modules.dnc.service.impl; + +import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum; +import org.jeecg.modules.dnc.dto.TransferPackage; +import org.jeecg.modules.dnc.entity.DeviceType; +import org.jeecg.modules.dnc.entity.DocRelative; +import org.jeecg.modules.dnc.entity.ProcessStream; +import org.jeecg.modules.dnc.mapper.DeviceTypeMapper; +import org.jeecg.modules.dnc.mapper.DocRelativeMapper; +import org.jeecg.modules.dnc.mapper.ProcessStreamMapper; +import org.jeecg.modules.dnc.service.DataPackageStrategy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ProcessPackageStrategy implements DataPackageStrategy { + @Autowired + private ProcessStreamMapper processMapper; + @Autowired + private DeviceTypeMapper deviceTypeMapper; + @Autowired + private FullHierarchyTraceService traceService; + @Autowired + private DocRelativeMapper docRelativeMapper; + + @Override + public TransferPackage packageData(String relativeId) { + DocRelative docRelative=docRelativeMapper.selectById(relativeId); + DeviceType deviceType=deviceTypeMapper.selectById(docRelative.getAttributionId()); + if (deviceType!=null&&deviceType.getAttributionType().equals(DocAttributionTypeEnum.PROCESS.getCode())) { + ProcessStream process = processMapper.selectById(deviceType.getAttributionId()); + if (process == null) { + throw new IllegalArgumentException("璁惧绫诲搴旂殑宸ュ簭涓嶅瓨鍦�: " + deviceType.getDeviceManagementId()); + } + } + return TransferPackage.builder() + .dataType(TransferPackage.DataType.PROCESS) + .docRelative(docRelative) + .traceChain(traceService.traceFromProcess(docRelative)) + .build(); + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java index 6ec4525..d0ce204 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java @@ -205,8 +205,8 @@ boolean b = super.updateById(processSpecVersion); //鍚屾淇敼缁撴瀯鏍� ProductMix productMix = productMixService.getById(Long.parseLong(id)); - productMix.setName(processSpecVersion.getProcessSpecVersionName()); - productMix.setCode(processSpecVersion.getProcessSpecVersionCode()); + productMix.setTreeName(processSpecVersion.getProcessSpecVersionName()); + productMix.setTreeCode(processSpecVersion.getProcessSpecVersionCode()); productMixService.updateById(productMix); if(!b) return false; diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java index 82587b2..8b1fc58 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java @@ -61,7 +61,6 @@ private IDocInfoService docInfoService; @Autowired private IDeviceTypeService deviceTypeService; - @Override @Transactional(rollbackFor = {Exception.class}) public boolean addProcessStream(ProcessStream stream) { @@ -177,8 +176,8 @@ boolean b = super.updateById(stream); //鍚屾淇敼缁撴瀯鏍� ProductMix productMix = productMixService.getById(Long.parseLong(id)); - productMix.setName(stream.getProcessName()); - productMix.setCode(stream.getProcessCode()); + productMix.setTreeName(stream.getProcessName()); + productMix.setTreeCode(stream.getProcessCode()); productMixService.updateById(productMix); if(!b) ExceptionCast.cast(CommonCode.FAIL); diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessionDepartmentService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessionDepartmentServiceImpl.java similarity index 93% rename from lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessionDepartmentService.java rename to lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessionDepartmentServiceImpl.java index 02ec1f9..208ecf1 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessionDepartmentService.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessionDepartmentServiceImpl.java @@ -10,10 +10,11 @@ import org.jeecg.modules.system.entity.MdcProduction; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.ArrayList; +import java.util.List; @Service -public class ProcessionDepartmentService extends ServiceImpl<ProcessionDepartmentMapper, ProcessionDepartment> implements IProcessionDepartmentService { +public class ProcessionDepartmentServiceImpl extends ServiceImpl<ProcessionDepartmentMapper, ProcessionDepartment> implements IProcessionDepartmentService { @Override public boolean deleteByProcessId(String processId) { diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java index 0562ada..6a6c10f 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java @@ -164,8 +164,8 @@ boolean b = super.updateById(productInfo); //鍚屾淇敼缁撴瀯鏍� ProductMix productMix = productMixService.getById(Long.parseLong(id)); - productMix.setName(productInfo.getProductName()); - productMix.setCode(productInfo.getProductNo()); + productMix.setTreeName(productInfo.getProductName()); + productMix.setTreeCode(productInfo.getProductNo()); productMixService.updateById(productMix); if (!b) return false; @@ -422,6 +422,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param userIds 娣诲姞鐢ㄦ埛ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -457,6 +458,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param departmentIds 娣诲姞閮ㄩ棬ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -492,6 +494,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param userIds 绉婚櫎鐢ㄦ埛ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -526,6 +529,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param departmentIds 绉婚櫎閮ㄩ棬ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -1179,31 +1183,37 @@ ProductInfo productInfo=this.getById(docInfo.getAttributionId()); docInfo.setNodeName(productInfo.getProductName()); docInfo.setNodeCode(productInfo.getProductNo()); + docInfo.setNodeId(productInfo.getProductId()); break; case 2: ComponentInfo componentInfo=componentInfoService.getById(docInfo.getAttributionId()); docInfo.setNodeName(componentInfo.getComponentName()); docInfo.setNodeCode(componentInfo.getComponentCode()); + docInfo.setNodeId(componentInfo.getComponentId()); break; case 3: PartsInfo partsInfo=partsInfoService.getById(docInfo.getAttributionId()); docInfo.setNodeCode(partsInfo.getPartsCode()); docInfo.setNodeName(partsInfo.getPartsName()); + docInfo.setNodeId(partsInfo.getPartsId()); break; case 4: ProcessSpecVersion processSpecVersion=processSpecVersionService.getById(docInfo.getAttributionId()); docInfo.setNodeName(processSpecVersion.getProcessSpecVersionName()); docInfo.setNodeCode(processSpecVersion.getProcessSpecVersionCode()); + docInfo.setNodeId(processSpecVersion.getId()); break; case 5: ProcessStream processStream=processStreamService.getById(docInfo.getAttributionId()); docInfo.setNodeName(processStream.getProcessName()); docInfo.setNodeCode(processStream.getProcessCode()); + docInfo.setNodeId(processStream.getProcessId()); break; case 6: WorkStep workStep=workStepService.getById(docInfo.getAttributionId()); docInfo.setNodeName(workStep.getStepName()); docInfo.setNodeCode(workStep.getStepName()); + docInfo.setNodeId(workStep.getId()); break; } }); @@ -1225,11 +1235,13 @@ ProcessStream processStream=processStreamService.getById(deviceType.getAttributionId()); docInfo.setNodeName(processStream.getProcessName()); docInfo.setNodeCode(processStream.getProcessCode()); + docInfo.setNodeId(processStream.getProcessId()); }else { //宸ユ涓嬬殑璁惧绫� WorkStep workStep=workStepService.getById(deviceType.getAttributionId()); docInfo.setNodeName(workStep.getStepName()); docInfo.setNodeCode(workStep.getStepName()); + docInfo.setNodeId(workStep.getId()); } }); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java index 2d4824d..699b3a6 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductMixServiceImpl.java @@ -48,4 +48,67 @@ result.sort(Comparator.comparing(ProductMix::getCreateTime, Comparator.nullsLast(Date::compareTo))); return result; } + + @Override + public List<ProductMix> getParentList(String id) { + List<ProductMix> parentList = new ArrayList<>(); + // 1. 鏍规嵁ID鏌ヨ褰撳墠鑺傜偣 + ProductMix current = this.getById(id); + if (current == null) { + return parentList; // 鑺傜偣涓嶅瓨鍦ㄦ椂杩斿洖绌哄垪琛� + } + // 2. 浠庡綋鍓嶈妭鐐瑰紑濮嬪悜涓婃煡鎵剧埗鑺傜偣 + Long parentId = current.getParentId(); + while ( parentId != 0L) { + ProductMix parent = this.getById(parentId.toString()); + if (parent == null) { + break; + } + parentList.add(parent); + parentId = parent.getParentId(); + } + + return parentList; + } + + @Override + public List<ProductMix> getChildrenList(String id) { + List<ProductMix> childrenList = new ArrayList<>(); + ProductMix current = this.getById(id); + if (current == null) { + return childrenList; + } + + // 浣跨敤闃熷垪杩涜BFS + Queue<ProductMix> queue = new LinkedList<>(); + queue.add(current); // 鍔犲叆褰撳墠鑺傜偣浣滀负璧风偣 + + // 璁板綍宸茶闂妭鐐圭殑ID锛岄伩鍏嶅惊鐜紩鐢� + Set<String> visited = new HashSet<>(); + visited.add(id); // 璧峰鑺傜偣宸茶闂� + + while (!queue.isEmpty()) { + ProductMix node = queue.poll(); + // 璺宠繃璧峰鑺傜偣锛堝嵆浼犲叆鐨勮妭鐐癸級锛屼笉鍔犲叆缁撴灉鍒楄〃 + if (!node.getId().toString().equals(id)) { + childrenList.add(node); + } + + // 鏌ヨ褰撳墠鑺傜偣鐨勭洿鎺ュ瓙鑺傜偣 + List<ProductMix> directChildren = this.lambdaQuery().eq(ProductMix::getParentId, node.getId()).list(); + if (directChildren != null && !directChildren.isEmpty()) { + for (ProductMix child : directChildren) { + String childId = child.getId().toString(); + // 濡傛灉璇ュ瓙鑺傜偣杩樻湭璁块棶杩� + if (!visited.contains(childId)) { + visited.add(childId); + queue.add(child); + } + // 鍚﹀垯蹇界暐锛岄伩鍏嶅惊鐜紩鐢ㄥ鑷寸殑姝诲惊鐜� + } + } + } + return childrenList; + } + } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java index e799e3a..add7b3d 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductPermissionServiceImpl.java @@ -143,7 +143,7 @@ break; default: // 澶勭悊鏈煡绫诲瀷 - throw new IllegalArgumentException("Unknown permission type: " + type); + throw new IllegalArgumentException("Unknown permission treeType: " + type); } } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/SecurityService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/SecurityService.java new file mode 100644 index 0000000..d43c5cb --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/SecurityService.java @@ -0,0 +1,48 @@ +package org.jeecg.modules.dnc.service.impl; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.Security; + +@Service +public class SecurityService { + private static final String ALGORITHM = "SM4/ECB/PKCS5Padding"; + private final String secretKey; + + static { + Security.addProvider(new BouncyCastleProvider()); + } + + @Autowired + public SecurityService(@Value("${security.encryption-key}") String secretKey) { + this.secretKey = secretKey; + } + + public byte[] encrypt(byte[] data) { + try { + Cipher cipher = Cipher.getInstance(ALGORITHM, "BC"); + SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "SM4"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec); + return cipher.doFinal(data); + } catch (Exception e) { + throw new RuntimeException("鍔犲瘑澶辫触", e); + } + } + + public byte[] decrypt(byte[] encryptedData) { + try { + Cipher cipher = Cipher.getInstance(ALGORITHM, "BC"); + SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "SM4"); + cipher.init(Cipher.DECRYPT_MODE, keySpec); + return cipher.doFinal(encryptedData); + } catch (Exception e) { + throw new RuntimeException("瑙e瘑澶辫触", e); + } + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepPackageStrategy.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepPackageStrategy.java new file mode 100644 index 0000000..8c9c1b8 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepPackageStrategy.java @@ -0,0 +1,43 @@ +package org.jeecg.modules.dnc.service.impl; + +import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum; +import org.jeecg.modules.dnc.dto.TransferPackage; +import org.jeecg.modules.dnc.entity.DeviceType; +import org.jeecg.modules.dnc.entity.DocRelative; +import org.jeecg.modules.dnc.entity.WorkStep; +import org.jeecg.modules.dnc.mapper.DeviceTypeMapper; +import org.jeecg.modules.dnc.mapper.DocRelativeMapper; +import org.jeecg.modules.dnc.mapper.WorkStepMapper; +import org.jeecg.modules.dnc.service.DataPackageStrategy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class WorkStepPackageStrategy implements DataPackageStrategy { + @Autowired + private WorkStepMapper workStepMapper; + @Autowired + private FullHierarchyTraceService traceService; + @Autowired + private DeviceTypeMapper deviceTypeMapper; + @Autowired + private DocRelativeMapper docRelativeMapper; + + @Override + public TransferPackage packageData(String relativeId) { + DocRelative docRelative=docRelativeMapper.selectById(relativeId); + DeviceType deviceType=deviceTypeMapper.selectById(docRelative.getAttributionId()); + if (deviceType!=null&&deviceType.getAttributionType().equals(DocAttributionTypeEnum.WORKSITE.getCode())) { + WorkStep workStep = workStepMapper.selectById(deviceType.getAttributionId()); + if (workStep == null) { + throw new IllegalArgumentException("璁惧绫诲搴旂殑宸ユ涓嶅瓨鍦�: " + deviceType.getDeviceManagementId()); + } + } + return TransferPackage.builder() + .dataType(TransferPackage.DataType.WORKSTEP) + .docRelative(docRelative) + .traceChain(traceService.traceFromWorkStep(docRelative)) + .build(); + } +} + diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java index d11f96c..37623aa 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/WorkStepServiceImpl.java @@ -175,8 +175,8 @@ ExceptionCast.cast(ProcessInfoCode.WORKSTEP_NOT_EXIST); //鍚屾淇敼缁撴瀯鏍� ProductMix productMix = productMixService.getById(Long.parseLong(id)); - productMix.setName(workStep.getStepName()); - productMix.setCode(workStep.getStepCode()); + productMix.setTreeName(workStep.getStepName()); + productMix.setTreeCode(workStep.getStepCode()); productMixService.updateById(productMix); return super.updateById(workStep); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/CompressionUtils.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/CompressionUtils.java new file mode 100644 index 0000000..1ce5f44 --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/CompressionUtils.java @@ -0,0 +1,35 @@ +package org.jeecg.modules.dnc.utils; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +public class CompressionUtils { + public static byte[] gzipCompress(byte[] data) { + try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); + GZIPOutputStream gzip = new GZIPOutputStream(bos)) { + gzip.write(data); + gzip.finish(); + return bos.toByteArray(); + } catch (IOException e) { + throw new RuntimeException("GZIP鍘嬬缉澶辫触", e); + } + } + + public static byte[] gzipDecompress(byte[] compressed) { + try (ByteArrayInputStream bis = new ByteArrayInputStream(compressed); + GZIPInputStream gzip = new GZIPInputStream(bis); + ByteArrayOutputStream bos = new ByteArrayOutputStream()) { + byte[] buffer = new byte[1024]; + int len; + while ((len = gzip.read(buffer)) > 0) { + bos.write(buffer, 0, len); + } + return bos.toByteArray(); + } catch (IOException e) { + throw new RuntimeException("GZIP瑙e帇澶辫触", e); + } + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/JsonUtils.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/JsonUtils.java new file mode 100644 index 0000000..74254cb --- /dev/null +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/JsonUtils.java @@ -0,0 +1,48 @@ +package org.jeecg.modules.dnc.utils; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import java.text.SimpleDateFormat; + +public class JsonUtils { + private static final ObjectMapper objectMapper = createObjectMapper(); + + private static ObjectMapper createObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + + // 閰嶇疆鏃ユ湡鏍煎紡 + mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); + mapper.registerModule(new JavaTimeModule()); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + + // 閰嶇疆搴忓垪鍖栭�夐」 + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + // 閰嶇疆鍙嶅簭鍒楀寲閫夐」 + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); + mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); + + return mapper; + } + + public static String toJson(Object object) { + try { + return objectMapper.writeValueAsString(object); + } catch (Exception e) { + throw new RuntimeException("JSON搴忓垪鍖栧け璐�: " + e.getMessage(), e); + } + } + + public static <T> T fromJson(String json, Class<T> valueType) { + try { + return objectMapper.readValue(json, valueType); + } catch (Exception e) { + throw new RuntimeException("JSON鍙嶅簭鍒楀寲澶辫触: " + e.getMessage() + "\nJSON鍐呭: " + json, e); + } + } +} diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java index 6a2c903..7397986 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/utils/TreeBuilder.java @@ -108,8 +108,8 @@ ProductMix newNode = new ProductMix( node.getId(), node.getParentId(), - node.getName(), - node.getCode(), + node.getTreeName(), + node.getTreeCode(), node.getType(), node.getCreateTime() ); diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java index dc0ef87..806a4a8 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.dnc.entity.DocFile; import org.jeecg.modules.dnc.response.QueryPageResponseResult; import org.jeecg.modules.dncFlow.entity.AssignFileStream; import org.jeecg.modules.dncFlow.ext.AssignFileStreamExt; @@ -9,6 +10,7 @@ import org.jeecg.modules.dncFlow.request.AssignFileRequest; import org.jeecg.modules.dncFlow.request.AssignFileStreamQueryRequest; import org.jeecg.modules.dncFlow.vo.AssignFlowTaskVo; +import org.jeecg.modules.mdc.entity.MdcEquipment; public interface IAssignFileStreamService extends IService<AssignFileStream> { /** @@ -41,9 +43,7 @@ /** * 瀹℃壒鏈嶅姟 - * @param taskId - * @param streamId - * @param stream + * @param assignFlowTaskVo * @return */ boolean approveAssignFile(AssignFlowTaskVo assignFlowTaskVo); @@ -84,4 +84,6 @@ * @return */ Boolean getFlowableEnable(); + + void handleFileTransfer(MdcEquipment mdcEquipment, DocFile docFile); } diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java index 70ab35e..036ac42 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java @@ -16,11 +16,14 @@ import org.flowable.task.api.Task; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.dnc.constant.DncPassLogPassType; +import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum; +import org.jeecg.modules.dnc.dto.TransferPackage; import org.jeecg.modules.dnc.entity.*; import org.jeecg.modules.dnc.exception.ExceptionCast; -import org.jeecg.modules.dnc.ext.NcTxtFilePathInfo; import org.jeecg.modules.dnc.response.*; import org.jeecg.modules.dnc.service.*; +import org.jeecg.modules.dnc.service.impl.FileFerryService; import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.dnc.utils.date.DateUtil; import org.jeecg.modules.dnc.utils.file.FileUtilS; @@ -42,7 +45,6 @@ import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.service.IMdcEquipmentService; -import org.jeecg.modules.message.enums.DeployEnum; import org.jeecg.modules.system.service.IMdcProductionService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -51,23 +53,17 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.io.IOException; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IAssignFileStreamService") public class AssignFileStreamServiceImpl extends ServiceImpl<AssignFileStreamMapper, AssignFileStream> implements IAssignFileStreamService , FlowCallBackServiceI { private static final String PROCESS_KEY = "assign_nc_to_device"; - private static final String APPLY_VARIABLE = "apply_user"; - private static final String APPROVE_VARIABLE = "approve_users"; private static final String SEND_CODE = "SEND"; - @Value("${flowable.enable}") private Boolean flowableEnable; - + @Value("${fileHomePath}") + private String fileHomePath; @Autowired private IDocInfoService docInfoService; @Autowired @@ -98,11 +94,10 @@ private PermissionService permissionService; @Autowired private IDncPassLogService dncPassLogService; - @Value("${deploy.deployType}") - private String deployType; //宸ユ帶缃�/娑夊瘑缃戦儴缃� 0涓哄伐鎺х綉 1涓烘秹瀵嗙綉 @Value("${deploy.secretFolder}") private String secretFolder; //娑夊瘑缃戜紶杈搉c鏂囦欢澶� - + @Autowired + private FileFerryService ferryService; @Override @Transactional(rollbackFor = {Exception.class}) public Result applyAssignFile(AssignFileStream stream) { @@ -253,11 +248,19 @@ } } - handleFileTransfer(mdcEquipment, docFile); - //娉ㄦ剰----鍖哄垎宸ユ帶缃戜笌娑夊瘑缃戯紒锛侊紒 娑夊瘑缃戣繘琛孨C鏂囦欢鐨勬嫹璐濓紝宸ユ帶缃戣礋璐h繘琛岃В鏋怤C鏂囦欢 - if (deployType.equals(DeployEnum.SMW.getCode())) { - handleFileProcessing(docFile, mdcEquipment, secretFolder); + List<DocRelative> docRelativeList=docRelativeService. + list(new QueryWrapper<DocRelative>() + .eq("attribution_type",stream.getAttributionType()) + .eq("attribution_id",stream.getAttributionId()) + .eq("doc_id",stream.getDocId())); + if (docRelativeList.isEmpty()){ + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); } + handleFileTransfer(mdcEquipment, docFile); + //NC鏂囦欢鐨勬嫹璐� + handleFileProcessing(docFile, mdcEquipment, secretFolder); + //瀵瑰簲浜у搧缁撴瀯鏍戞嫹璐� + handleProductTree(docInfo,docRelativeList.get(0),mdcEquipment.getEquipmentId()); synchronizedFlagService.updateFlag(2); return Result.OK("鎿嶄綔鎴愬姛"); } @@ -383,10 +386,20 @@ } } } - //娉ㄦ剰----鍖哄垎宸ユ帶缃戜笌娑夊瘑缃戯紒锛侊紒 娑夊瘑缃戣繘琛孨C鏂囦欢鐨勬嫹璐濓紝宸ユ帶缃戣礋璐h繘琛岃В鏋怤C鏂囦欢 - if (deployType.equals(DeployEnum.SMW.getCode())) { - handleFileProcessing(docFile, mdcEquipment, secretFolder); + List<DocRelative> docRelativeList=docRelativeService. + list(new QueryWrapper<DocRelative>() + .eq("attribution_type",en.getAttributionType()) + .eq("attribution_id",en.getAttributionId()) + .eq("doc_id",en.getDocId())); + if (docRelativeList.isEmpty()){ + ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); } + //娑夊瘑缃戣繘琛孨C鏂囦欢鐨勬嫹璐� + handleFileTransfer(mdcEquipment, docFile); + //NC鏂囦欢鐨勬嫹璐� + handleFileProcessing(docFile, mdcEquipment, secretFolder); + //瀵瑰簲浜у搧缁撴瀯鏍戞嫹璐� + handleProductTree(docInfo,docRelativeList.get(0),mdcEquipment.getEquipmentId()); return synchronizedFlagService.updateFlag(1); }else if(up.getStatus() == 3) { //鎷掔粷鎿嶄綔 浠�涔堜篃涓嶅仛 @@ -579,7 +592,8 @@ } //鎻掑叆鏂囦欢浼犺緭浠诲姟琛� - private void handleFileTransfer(MdcEquipment mdcEquipment, DocFile docFile) { + @Override + public void handleFileTransfer(MdcEquipment mdcEquipment, DocFile docFile) { List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); @@ -600,7 +614,6 @@ //灏佽澶勭悊鏂囦欢 private void handleFileProcessing(DocFile docFile, MdcEquipment mdcEquipment, String secretFolder) { if (!docFile.getFileSuffix().equals("zip") && !docFile.getFileSuffix().equals("rar")) { - String size = FileUtilS.fileSizeNC(docFile.getFilePath(), docFile.getFileEncodeName()); List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); if (strings != null && !strings.isEmpty()) { DncPassLog passInfoTxt = new DncPassLog(); @@ -611,23 +624,14 @@ /*鏌ヨ鏈�鍚庝竴鏉¤褰�*/ //浼戠湢 500姣 DncPassLog dncPassLog = dncPassLogService.findDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); - int fileTxt = 0, fileNc =0; + int fileNc =0; if (dncPassLog !=null) { - fileTxt = dncPassLog.getSequenceNumber() + 1; + fileNc = dncPassLog.getSequenceNumber() + 1; } else { - fileTxt = 1; + fileNc = 1; } - fileNc = fileTxt + 1; //澶勭悊鏂囦欢鍚嶇О 鏂囦欢璺緞 - String sequence = String.format("%06d",fileTxt); String sequenceNc = String.format("%06d",fileNc); - passInfoTxt.setSequenceNumber(fileTxt); - passInfoTxt.setSequenceOrder(sequence); - passInfoTxt.setCreateTime(dateFirst); - System.out.println(DateUtil.format(dateFirst,DateUtil.STR_DATE_TIME)); - passInfoTxt.setPassType("02"); - dncPassLogService.save(passInfoTxt); - DncPassLog passInfoNc = new DncPassLog(); passInfoNc.setSequenceNumber(fileNc); passInfoNc.setSequenceOrder(sequenceNc); @@ -642,41 +646,50 @@ } catch (InterruptedException e) { e.printStackTrace(); } - dncPassLogService.save(passInfoNc); - NcTxtFilePathInfo ncTxt = new NcTxtFilePathInfo(); - ncTxt.setEquipmentId(mdcEquipment.getEquipmentId()); - ncTxt.setFileNcName("10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc); - ncTxt.setFileTxtName("10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequence); - ncTxt.setFilePath(path + "/" + mdcEquipment.getEquipmentId() + "/"); - ncTxt.setOrigFileName(docFile.getFileName()); - ncTxt.setOrigFileSuffix(docFile.getFileSuffix()); - ncTxt.setFileAddOrDelete(1); - String loFilePath = secretFolder +"/"+ ncTxt.getFileTxtName() + ".nc"; - try { - String allList = ncTxt.getFileTxtName() + "\n" - + ncTxt.getFileNcName() + "\n" - + ncTxt.getOrigFileName() + "\n" - + ncTxt.getOrigFileSuffix() + "\n" - + ncTxt.getFilePath() + "\n" - + ncTxt.getEquipmentId() + "\n" - + ncTxt.getFileAddOrDelete().toString() + "\n" - + size + "\n"; - FileUtilS.fileWriterSql(loFilePath, allList); - boolean copyFileNc = FileUtilS.copyFileUpName(path + "/" + mdcEquipment.getEquipmentId() + "/send/" + - docFile.getFileName(), - secretFolder +"/"+ncTxt.getFileNcName(), - docFile.getFileSuffix(), "NC"); - if (!copyFileNc) { - FileUtilS.deleteNcFile(loFilePath); - } - } catch (IOException e) { - throw new RuntimeException("鏂囦欢澶勭悊澶辫触", e); - } + FileUtilS.copyFileUpName(path + "/" + mdcEquipment.getEquipmentId() + "/send/" + + docFile.getFileName(), + secretFolder +"/"+"10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc+"_"+mdcEquipment.getEquipmentId(), + docFile.getFileSuffix(), "NC"); } } } + /** + * 澶勭悊瀵瑰簲浜у搧缁撴瀯鏍戙�乶c鏂囦欢銆佸垁鍏峰垪琛ㄣ�佺▼搴忓姞宸ョ‘璁よ〃灏佽 + * @param docInfo + */ + private void handleProductTree(DocInfo docInfo,DocRelative docRelative,String equipmentId) { + /*鏌ヨ鏈�鍚庝竴鏉¤褰�*/ + //浼戠湢 500姣 + DncPassLog passInfoTxt = new DncPassLog(); + Date dateFirst = DateUtil.getNow(); + passInfoTxt.setDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); + DncPassLog dncPassLog = dncPassLogService.findDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)); + int fileTxt = 0, fileNc =0; + if (dncPassLog !=null) { + fileTxt = dncPassLog.getSequenceNumber() + 1; + } else { + fileTxt = 1; + } + String sequence = String.format("%06d",fileTxt); + passInfoTxt.setSequenceNumber(fileTxt); + passInfoTxt.setCreateTime(dateFirst); + passInfoTxt.setSequenceOrder(sequence); + System.out.println(DateUtil.format(dateFirst,DateUtil.STR_DATE_TIME)); + passInfoTxt.setPassType(DncPassLogPassType.PRODUCTSTRUCTURE.getCode()); + dncPassLogService.save(passInfoTxt); + String fileName="10A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY); + if (Objects.equals(docInfo.getAttributionType(), DocAttributionTypeEnum.PROCESS.getCode())){ + //宸ュ簭瀵瑰簲璁惧绫� + String filePath = ferryService.exportData(TransferPackage.DataType.PROCESS, docRelative.getId(),fileName+sequence+"_"+equipmentId+".ferry"); + System.out.println("宸ュ簭鏁版嵁宸插鍑�: " + filePath); + }else { + //宸ユ瀵瑰簲璁惧绫� + String filePath = ferryService.exportData(TransferPackage.DataType.WORKSTEP, docRelative.getId(),fileName+sequence+"_"+equipmentId+".ferry"); + System.out.println("宸ユ鏁版嵁宸插鍑�: " + filePath); + } + } @Override public void afterFlowHandle(FlowMyBusiness business) { business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣 diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java index e588f05..0cae0d9 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java @@ -100,8 +100,28 @@ } break; case SECOND_MAINTENANCE: + if (result instanceof EamSecondMaintenanceOrder) { + EamSecondMaintenanceOrder order = (EamSecondMaintenanceOrder) result; + if (SecondMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) { + log.setEquipmentId(order.getEquipmentId()); + log.setBusinessId(order.getId()); + log.setOperator(order.getOperator()); + log.setDescription(order.getConfirmComment()); + log.setCreateTime(order.getActualEndTime()); + } + } break; case THIRD_MAINTENANCE: + if (result instanceof EamThirdMaintenanceOrder) { + EamThirdMaintenanceOrder order = (EamThirdMaintenanceOrder) result; + if (ThirdMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) { + log.setEquipmentId(order.getEquipmentId()); + log.setBusinessId(order.getId()); + log.setOperator(order.getOperator()); + log.setDescription(order.getLeaderConfirmComment()); + log.setCreateTime(order.getActualEndTime()); + } + } break; case REPORT_REPAIR: if (result instanceof EamReportRepair) { diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java index f7873d5..b2e6977 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java +++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java @@ -164,6 +164,12 @@ @ApiModelProperty(value = "鏄惁MDC璁惧") private String deviceTypeMdc; + /** + * 璁惧鍥剧墖 + */ + @ApiModelProperty(value = "璁惧鍥剧墖") + private String equipmentImage; + /**閮ㄩ棬鍚嶇О*/ @Excel(name = "閮ㄩ棬鍚嶇О", width = 15) private transient String orgCodeTxt; diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml index 3d0755f..4e876b7 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml +++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml @@ -106,19 +106,34 @@ <!--鏌ヨ璁惧鐩戞帶淇℃伅--> <select id="checkStatusFromEquipmentIds" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentMonitor"> SELECT - t1.equipment_id, - t2.CollectTime, - t1.equipment_name, - t2.Oporation, - t1.id, - t1.equipment_status, - t1.equipment_type equipmentType, - t3.equipment_type_pictures + t1.equipment_id, + t2.CollectTime, + t1.equipment_name, + CASE + + WHEN repair.count > 0 THEN + '5' ELSE t2.Oporation + END AS Oporation, + t1.id, + t1.equipment_status, + t1.equipment_type equipmentType, + t1.equipment_image equipmentTypePictures + FROM - mdc_equipment t1 - LEFT JOIN Equipment t2 ON t1.equipment_id = t2.EquipmentID - LEFT JOIN mdc_equipment_type t3 ON t1.equipment_type = t3.equipment_type_name - WHERE equipment_id IN + mdc_equipment t1 + LEFT JOIN Equipment t2 ON t1.equipment_id = t2.EquipmentID + LEFT JOIN ( + SELECT + e1.equipment_code, + COUNT(1) COUNT + FROM + eam_report_repair r1 + INNER JOIN eam_equipment e1 ON e1.id = r1.equipment_id + WHERE + r1.report_status NOT IN ('COMPLETE', 'ABOLISH') + GROUP BY + e1.equipment_code) repair ON repair.equipment_code = t1.equipment_id + WHERE t1.equipment_id IN <foreach collection="equipmentIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java index c4d6284..49944e5 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java +++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java @@ -430,6 +430,9 @@ case 22: mdcEquipmentMonitor.setOporationDict("鎶ヨ"); break; + case 5: + mdcEquipmentMonitor.setOporationDict("鏁呴殰"); + break; default: mdcEquipmentMonitor.setOporationDict("鍏虫満"); break; @@ -1049,7 +1052,7 @@ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if (StringUtils.isNotEmpty(user.getEquipmentIds())) { - return this.baseMapper.selectList(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)))); + return this.baseMapper.selectList(new LambdaQueryWrapper<MdcEquipment>().in(MdcEquipment::getEquipmentId, Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)))); } //鑾峰彇鎵�鏈変骇绾挎暟鎹� List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder)); diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java index 909ed5c..61d23bc 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java @@ -85,11 +85,19 @@ return Result.OK(result); } -// @ApiOperation(value = "鏁板瓧瀛敓鐪嬫澘-璁惧鏁呴殰", notes = "鏁板瓧瀛敓鐪嬫澘-璁惧鏁呴殰") -// @GetMapping("/equAlarmList") -// public Result<?> equAlarmList(@ApiParam(value = "productionId", required = true) String productionId) { -// dtBoardService. -// } + @ApiOperation(value = "鏁板瓧瀛敓鐪嬫澘-璁惧鏁呴殰", notes = "鏁板瓧瀛敓鐪嬫澘-璁惧鏁呴殰") + @GetMapping("/equRepairList") + public Result<?> equRepairList(@ApiParam(value = "productionId", required = true) String productionId) { + List<EquRepair> result = dtBoardService.equRepairList(productionId); + return Result.OK(result); + } + + @ApiOperation(value = "鏁板瓧瀛敓鐪嬫澘-璁惧瀹夌伅淇℃伅", notes = "鏁板瓧瀛敓鐪嬫澘-璁惧瀹夌伅淇℃伅") + @GetMapping("/equAndonList") + public Result<?> equAndonList(@ApiParam(value = "productionId", required = true) String productionId) { + List<EquAndon> result = dtBoardService.equAndonList(productionId); + return Result.OK(result); + } } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java new file mode 100644 index 0000000..12e64b6 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.board.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.board.vo.EquRepair; + +import java.util.List; + +/** + * @Author: Lius + * @CreateTime: 2025-06-11 + * @Description: + */ +@Mapper +public interface DtBoardMapper { + List<EquRepair> equRepairList(@Param("equipmentIdList") List<String> equipmentIdList, @Param("date") String date); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml new file mode 100644 index 0000000..566cd4b --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.board.mapper.DtBoardMapper"> + + <select id="equRepairList" resultType="org.jeecg.modules.board.vo.EquRepair"> + SELECT + t3.equipment_code equipmentId, + COUNT(*) faultNum, + ROUND( + SUM(DATEDIFF(MINUTE, t2.fault_start_time, t1.actual_end_time)) / 60.0, + 2 + ) faultTime + FROM + eam_repair_order t1 + LEFT JOIN eam_report_repair t2 ON t1.report_id = t2.id + LEFT JOIN eam_equipment t3 ON t1.equipment_id = t3.id + WHERE + t1.repair_status = 'COMPLETE' + AND t2.fault_start_time > #{date} + AND t3.equipment_code IN + <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> + #{ id } + </foreach> + GROUP BY + t3.equipment_code + </select> +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java index 07069e7..8133429 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java @@ -27,4 +27,9 @@ List<EquDowntimeInfo> equDowntimeStatistics(String productionId); List<EquAlarm> equAlarmList(String productionId); + + List<EquRepair> equRepairList(String productionId); + + List<EquAndon> equAndonList(String productionId); + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java index bf79693..f6fc360 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java @@ -5,8 +5,10 @@ import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.DictModel; +import org.jeecg.modules.board.mapper.DtBoardMapper; import org.jeecg.modules.board.service.IDtBoardService; import org.jeecg.modules.board.vo.*; +import org.jeecg.modules.eam.service.IEamRepairOrderService; import org.jeecg.modules.mdc.constant.MdcConstant; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.service.*; @@ -14,12 +16,15 @@ import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysDictService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -63,6 +68,12 @@ @Resource private IMdcAlarmInfoService mdcAlarmInfoService; + + @Resource + private DtBoardMapper dtBoardMapper; + + @Resource + private IAndonOrderService andonOrderService; /** * 杞﹂棿淇℃伅 @@ -319,7 +330,7 @@ if (equipmentIdList == null || equipmentIdList.isEmpty()) { return null; } - List<EquipmentAlarm> equipmentAlarmList = equipmentAlarmService.list(new LambdaQueryWrapper<EquipmentAlarm>().in(EquipmentAlarm::getEquipmentid, equipmentIdList).orderByDesc(EquipmentAlarm::getCollecttime).isNotNull(EquipmentAlarm::getAlarmNo).last("TOP 15")); + List<EquipmentAlarm> equipmentAlarmList = equipmentAlarmService.equAlarmList(equipmentIdList); if (equipmentAlarmList == null || equipmentAlarmList.isEmpty()) { return null; } @@ -337,4 +348,40 @@ return result; } + /** + * 璁惧鏁呴殰 + */ + @Override + public List<EquRepair> equRepairList(String productionId) { + List<String> proIds = mdcProductionService.findChildByProId(productionId); + if (proIds == null || proIds.isEmpty()) { + return null; + } + List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); + if (equipmentIdList == null || equipmentIdList.isEmpty()) { + return null; + } + LocalDateTime currentDate = LocalDate.now().minusMonths(1).atStartOfDay(); + String format = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + List<EquRepair> result = dtBoardMapper.equRepairList(equipmentIdList, format); + return result; + } + + /** + * 璁惧瀹夌伅闂 + */ + @Override + public List<EquAndon> equAndonList(String productionId) { + List<String> proIds = mdcProductionService.findChildByProId(productionId); + if (proIds == null || proIds.isEmpty()) { + return null; + } + List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); + if (equipmentIdList == null || equipmentIdList.isEmpty()) { + return null; + } + List<EquAndon> result = andonOrderService.equAndonList(equipmentIdList); + return result; + } + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java new file mode 100644 index 0000000..78eb963 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.board.vo; + +import lombok.Data; + +/** + * @Author: Lius + * @CreateTime: 2025-06-12 + * @Description: 瀹夌伅淇℃伅 + */ +@Data +public class EquAndon { + /** + * 璁惧缂栧彿 + */ + private String equipmentId; + /** + * 瀹夌伅闂 + */ + private String andonInfo; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java new file mode 100644 index 0000000..8122dfc --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java @@ -0,0 +1,26 @@ +package org.jeecg.modules.board.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author: Lius + * @CreateTime: 2025-06-10 + * @Description: 璁惧鏁呴殰 + */ +@Data +public class EquRepair { + /** + * 璁惧缂栧彿 + */ + private String equipmentId; + /** + * 鏁呴殰娆℃暟 + */ + private BigDecimal faultNum; + /** + * 鏁呴殰鏃堕暱 + */ + private BigDecimal faultTime; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java new file mode 100644 index 0000000..a9a33ee --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java @@ -0,0 +1,44 @@ +package org.jeecg.modules.mdc.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.modules.mdc.entity.AndonOrder; +import org.jeecg.modules.mdc.service.IAndonOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + /** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +@Api(tags="andon_order") +@RestController +@RequestMapping("/AndonOrder/andonOrder") +@Slf4j +public class AndonOrderController extends JeecgController<AndonOrder, IAndonOrderService> { + @Autowired + private IAndonOrderService andonOrderService; + + /** + * 绋嬪簭鍛煎彨 + * + * @param andonOrder + * @return + */ + @AutoLog(value = "瀹夌伅宸ュ崟-绋嬪簭鍛煎彨") + @ApiOperation(value = "瀹夌伅宸ュ崟-绋嬪簭鍛煎彨", notes = "瀹夌伅宸ュ崟-绋嬪簭鍛煎彨") + @PostMapping(value = "/procedureCall") + public Result<?> procedureCall(@RequestBody AndonOrder andonOrder) { + andonOrderService.procedureCall(andonOrder); + return Result.OK("鍛煎彨鎴愬姛锛�"); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java index 482612f..f6aa15c 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java @@ -16,55 +16,56 @@ /** * @Description: mdc_equipment_punch * @Author: jeecg-boot - * @Date: 2025-06-09 + * @Date: 2025-06-09 * @Version: V1.0 */ -@Api(tags="涓婁笅鐝墦鍗¤褰曡〃") +@Api(tags = "涓婁笅鐝墦鍗¤褰曡〃") @RestController @RequestMapping("/mdcEquipmentPunch") @Slf4j public class MdcEquipmentPunchController extends JeecgController<MdcEquipmentPunch, IMdcEquipmentPunchService> { - @Autowired - private IMdcEquipmentPunchService mdcEquipmentPunchService; + @Autowired + private IMdcEquipmentPunchService mdcEquipmentPunchService; - private static final String msg = "鎵撳崱鎴愬姛锛�"; - - /** - * 鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌 - * - * @return - */ - @ApiOperation(value="鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌", notes="鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌") - @GetMapping(value = "/list") - public Result<List<MdcEquipmentPunch>> queryList() { - return Result.OK(mdcEquipmentPunchService.queryList()); - } + private static final String msg = "鎵撳崱鎴愬姛锛�"; - /** - * 涓婄彮鎵撳崱 - * - * @param mdcEquipmentPunch - * @return - */ - @AutoLog(value = "涓婄彮鎵撳崱") - @ApiOperation(value="涓婄彮鎵撳崱", notes="涓婄彮鎵撳崱") - @PostMapping(value = "/workUp") - public Result<String> workUp(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { - mdcEquipmentPunchService.workUp(mdcEquipmentPunch); - return Result.OK(msg); - } + /** + * 鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌 + * + * @return + */ + @ApiOperation(value = "鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌", notes = "鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌") + @GetMapping(value = "/list") + public Result<List<MdcEquipmentPunch>> queryList() { + return Result.OK(mdcEquipmentPunchService.queryList()); + } - /** - * 涓嬬彮鎵撳崱 - * - * @param mdcEquipmentPunch - * @return - */ - @AutoLog(value = "涓嬬彮鎵撳崱") - @ApiOperation(value="涓嬬彮鎵撳崱", notes="涓嬬彮鎵撳崱") - @PostMapping(value = "/workDown") - public Result<String> workDown(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { - mdcEquipmentPunchService.workDown(mdcEquipmentPunch); - return Result.OK(msg); - } + /** + * 涓婄彮鎵撳崱 + * + * @param mdcEquipmentPunch + * @return + */ + @AutoLog(value = "涓婄彮鎵撳崱") + @ApiOperation(value = "涓婄彮鎵撳崱", notes = "涓婄彮鎵撳崱") + @PostMapping(value = "/workUp") + public Result<String> workUp(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { + mdcEquipmentPunchService.workUp(mdcEquipmentPunch); + return Result.OK(msg); + } + + /** + * 涓嬬彮鎵撳崱 + * + * @param mdcEquipmentPunch + * @return + */ + @AutoLog(value = "涓嬬彮鎵撳崱") + @ApiOperation(value = "涓嬬彮鎵撳崱", notes = "涓嬬彮鎵撳崱") + @PostMapping(value = "/workDown") + public Result<String> workDown(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { + mdcEquipmentPunchService.workDown(mdcEquipmentPunch); + return Result.OK(msg); + } + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchRateController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchRateController.java new file mode 100644 index 0000000..ac98d6b --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchRateController.java @@ -0,0 +1,81 @@ +package org.jeecg.modules.mdc.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchRateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Description: mdc_equipment_punch_rate + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Api(tags = "璁惧鎵撳崱鐜囨姤琛�") +@RestController +@RequestMapping("/mdcEquipmentPunchRate") +@Slf4j +public class MdcEquipmentPunchRateController extends JeecgController<MdcEquipmentPunchRate, IMdcEquipmentPunchRateService> { + @Autowired + private IMdcEquipmentPunchRateService mdcEquipmentPunchService; + + + + + + + /** + * 鍒嗛〉鍒楄〃鏌ヨ + * + * @param mdEquipmentPunch 鏌ヨ鍙傛暟 + * @param pageNo 褰撳墠椤电爜 + * @param pageSize 姣忛〉鏉℃暟 + * @param req 璇锋眰瀵硅薄 + * @return + */ + @ApiOperation(value = "璁惧鎵撳崱鐜�-鍒嗛〉鍒楄〃鏌ヨ", notes = "璁惧鎵撳崱鐜�-鍒嗛〉鍒楄〃鏌ヨ") + @AutoLog(value = "璁惧鎵撳崱鐜�-鍒嗛〉鍒楄〃鏌ヨ") + @GetMapping(value = "/queryPageList") + public Result<IPage<MdcEquipmentPunchRate>> queryPageList(MdcEquipmentPunchRate mdEquipmentPunch, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + + QueryWrapper<MdcEquipmentPunchRate> queryWrapper = QueryGenerator.initQueryWrapper(mdEquipmentPunch, req.getParameterMap()); + Page<MdcEquipmentPunchRate> page = new Page<MdcEquipmentPunchRate>(pageNo, pageSize); + IPage<MdcEquipmentPunchRate> pageList = mdcEquipmentPunchService.page(page, queryWrapper); + return Result.OK(pageList); + } + + + /** + * 瀵煎嚭excel + * + * @param request + * @param mdcEquipmentPunchRate + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, MdcEquipmentPunchRate mdcEquipmentPunchRate) { + return super.exportXls(request, mdcEquipmentPunchRate, MdcEquipmentPunchRate.class, "璁惧鎵撳崱鐜囨姤琛�"); + } + + + + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java new file mode 100644 index 0000000..e86cad0 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java @@ -0,0 +1,98 @@ +package org.jeecg.modules.mdc.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecg.common.aspect.annotation.Dict; + +import java.math.BigDecimal; +import java.util.Date; +@Data +public class MdcEquipmentPunchExportDTO { + + + @ApiModelProperty(value = "璁惧缂栧彿") + private String equipmentId; + + + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "realname") + private String punchUser; + + + @ApiModelProperty(value = "涓婄彮鏃堕棿") + private Date checkInTime; + /** + * 涓嬬彮鏃堕棿 + */ + + @ApiModelProperty(value = "涓嬬彮鏃堕棿") + private Date checkOutTime; + /** + * 璁板綍鏃ユ湡 + */ + + @ApiModelProperty(value = "璁板綍鏃ユ湡") + private String recordDate; + + + @ApiModelProperty(value = "鐝") + @Dict(dicCode = "shift_schedule") + private Integer shiftSchedule; + + + @ApiModelProperty(value = "鏄惁缂哄崱") + private Integer isAbsent; + + + @ApiModelProperty(value = "鏄惁杩熷埌") + private Integer isLate; + + + @ApiModelProperty(value = "鏄惁鏃╅��") + private Integer isEarly; + + + /** + * 鏃╃彮涓婄彮鎵撳崱鐜� + */ + + + @ApiModelProperty(value = "鏃╃彮涓婄彮鎵撳崱鐜�") + private BigDecimal morningShiftInRate; + + /** + * 鏅氱彮涓婄彮鎵撳崱鐜� + */ + + @ApiModelProperty(value = "鏅氱彮涓婄彮鎵撳崱鐜�") + private BigDecimal eveningShiftInRate; + + + @ApiModelProperty(value = "鏃╃彮涓嬬彮鎵撳崱鐜�") + private BigDecimal morningShiftOutRate; + + + @ApiModelProperty(value = "鏅氱彮涓嬬彮鎵撳崱鐜�") + private BigDecimal eveningShiftOutRate; + + + @ApiModelProperty(value = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftInDeviceNum; + + + @ApiModelProperty(value = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftOutDeviceNum; + + + @ApiModelProperty(value = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftInDeviceNum; + + @ApiModelProperty(value = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftOutDeviceNum; + + @ApiModelProperty(value = "璁惧鎬绘暟") + private Integer deviceCountNum; + + private String punchUserRealName; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java new file mode 100644 index 0000000..84d58c3 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java @@ -0,0 +1,167 @@ +package org.jeecg.modules.mdc.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.jeecg.common.constant.CommonConstant; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +@Data +@TableName("andon_order") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "andon_order瀵硅薄", description = "andon_order") +public class AndonOrder implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "涓婚敭") + private String id; + /** + * 璁惧缂栧彿 + */ + @Excel(name = "璁惧缂栧彿", width = 15) + @ApiModelProperty(value = "璁惧缂栧彿") + private String equipmentId; + /** + * 鎵�灞炲巶鎴� + */ + @Excel(name = "鎵�灞炲巶鎴�", width = 15) + @ApiModelProperty(value = "鎵�灞炲巶鎴�") + private String plantName; + /** + * 瀹夌伅绫诲瀷 + */ + @Excel(name = "瀹夌伅绫诲瀷", width = 15) + @ApiModelProperty(value = "瀹夌伅绫诲瀷") + @Dict(dicCode = "andon_type") + private String andonType; + /** + * 瀹夌伅浜�(鍛煎彨浜�) + */ + @Excel(name = "瀹夌伅浜�", width = 15) + @ApiModelProperty(value = "瀹夌伅浜�") + private String operator; + /** + * 鍛煎彨鍘熷洜 + */ + @Excel(name = "鍛煎彨鍘熷洜", width = 15) + @ApiModelProperty(value = "鍛煎彨鍘熷洜") + private String callReason; + /** + * 瀹夌伅鏃堕棿 + */ + @Excel(name = "瀹夌伅鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "瀹夌伅鏃堕棿") + private Date operateTime; + /** + * 鍝嶅簲浜�(璐d换浜�) + */ + @Excel(name = "鍝嶅簲浜�", width = 15) + @ApiModelProperty(value = "鍝嶅簲浜�") + private String responder; + /** + * 鍝嶅簲鏃堕棿 + */ + @Excel(name = "鍝嶅簲鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鍝嶅簲鏃堕棿") + private Date responseTime; + /** + * 澶勭悊浜� + */ + @Excel(name = "澶勭悊浜�", width = 15) + @ApiModelProperty(value = "澶勭悊浜�") + private String processor; + /** + * 澶勭悊瀹屾垚鏃堕棿 + */ + @Excel(name = "澶勭悊瀹屾垚鏃堕棿", width = 15, format = DatePattern.NORM_DATETIME_PATTERN) + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "澶勭悊瀹屾垚鏃堕棿") + private Date processTime; + /** + * 瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚 + */ + @Excel(name = "瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚", width = 15) + @ApiModelProperty(value = "瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚") + @Dict(dicCode = "order_status") + private String orderStatus; + /** + * 闂鎻忚堪 + */ + @Excel(name = "闂鎻忚堪", width = 15) + @ApiModelProperty(value = "闂鎻忚堪") + private String problemDescreption; + /** + * 澶勭悊缁撴灉鎻忚堪 + */ + @Excel(name = "澶勭悊缁撴灉鎻忚堪", width = 15) + @ApiModelProperty(value = "澶勭悊缁撴灉鎻忚堪") + private String resolutionDescreption; + /** + * 澶勭悊缁撴灉鍥剧墖 + */ + @Excel(name = "澶勭悊缁撴灉鍥剧墖", width = 15) + @ApiModelProperty(value = "澶勭悊缁撴灉鍥剧墖") + private String imageFiles; + /** + * 鍒犻櫎鏍囪 + */ + @Excel(name = "鍒犻櫎鏍囪", width = 15) + @ApiModelProperty(value = "鍒犻櫎鏍囪") + @TableLogic + private Integer delFlag = CommonConstant.DEL_FLAG_0; + /** + * 鍒涘缓浜� + */ + @ApiModelProperty(value = "鍒涘缓浜�") + private String createBy; + /** + * 鍒涘缓鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + private Date createTime; + /** + * 鏇存柊浜� + */ + @ApiModelProperty(value = "鏇存柊浜�") + private String updateBy; + /** + * 鏇存柊鏃堕棿 + */ + @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) + @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) + @ApiModelProperty(value = "鏇存柊鏃堕棿") + private Date updateTime; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java index b64bcc4..9ae8010 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java @@ -1,22 +1,24 @@ package org.jeecg.modules.mdc.entity; -import java.io.Serializable; -import java.util.Date; - import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.jeecg.common.aspect.annotation.Dict; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecg.common.system.base.entity.JeecgEntity; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; /** * @Description: mdc_equipment_punch @@ -29,7 +31,7 @@ @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @ApiModel(value = "mdc_equipment_punch瀵硅薄", description = "mdc_equipment_punch") -public class MdcEquipmentPunch implements Serializable { +public class MdcEquipmentPunch extends JeecgEntity implements Serializable { private static final long serialVersionUID = 1L; /** @@ -49,18 +51,18 @@ */ @Excel(name = "鎵撳崱鐢ㄦ埛", width = 15) @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "realname") private String punchUser; /** * 鎵撳崱鐢ㄦ埛璐﹀彿 */ - @Excel(name = "鎵撳崱鐢ㄦ埛璐﹀彿", width = 15) + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛璐﹀彿") @TableField(exist = false) private String punchUserRealName; /** * 鎵撳崱鐢ㄦ埛鍚嶇О */ - @Excel(name = "鎵撳崱鐢ㄦ埛鍚嶇О", width = 15) @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛鍚嶇О") @TableField(exist = false) private String punchUserUserName; @@ -87,7 +89,7 @@ @ApiModelProperty(value = "璁板綍鏃ユ湡") private String recordDate; /** - * 鐝 + * 鐝 */ @Excel(name = "鐝", width = 15) @ApiModelProperty(value = "鐝") @@ -107,7 +109,7 @@ @ApiModelProperty(value = "鏄惁缂哄崱") private Integer isAbsent; /** - * 鏄惁杩熷埌 + * 鏄惁杩熷埌锛�0鏈棭閫�锛�1鏃╅��锛� */ @Excel(name = "鏄惁杩熷埌", width = 15) @ApiModelProperty(value = "鏄惁杩熷埌") @@ -118,28 +120,74 @@ @Excel(name = "鏄惁鏃╅��", width = 15) @ApiModelProperty(value = "鏄惁鏃╅��") private Integer isEarly; + /** - * 鍒涘缓浜� + * 鏃╃彮涓婄彮鎵撳崱鐜� */ - @ApiModelProperty(value = "鍒涘缓浜�") - private String createBy; + @TableField(exist = false) + @Excel(name = "鏃╃彮涓婄彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏃╃彮涓婄彮鎵撳崱鐜�") + private BigDecimal morningShiftInRate; + /** - * 鍒涘缓鏃堕棿 + * 鏅氱彮涓婄彮鎵撳崱鐜� */ - @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) - @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - @ApiModelProperty(value = "鍒涘缓鏃堕棿") - private Date createTime; + @TableField(exist = false) + @Excel(name = "鏅氱彮涓婄彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏅氱彮涓婄彮鎵撳崱鐜�") + private BigDecimal eveningShiftInRate; + /** - * 鏇存柊浜� + * 鏃╃彮涓嬬彮鎵撳崱鐜� */ - @ApiModelProperty(value = "鏇存柊浜�") - private String updateBy; + @TableField(exist = false) + @Excel(name = "鏃╃彮涓嬬彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏃╃彮涓嬬彮鎵撳崱鐜�") + private BigDecimal morningShiftOutRate; + /** - * 鏇存柊鏃堕棿 + * 鏅氱彮涓嬬彮鎵撳崱鐜� */ - @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) - @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - @ApiModelProperty(value = "鏇存柊鏃堕棿") - private Date updateTime; + @TableField(exist = false) + @Excel(name = "鏅氱彮涓嬬彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏅氱彮涓嬬彮鎵撳崱鐜�") + private BigDecimal eveningShiftOutRate; + + /** + * 鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftInDeviceNum; + + /** + * 鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftOutDeviceNum; + /** + * 澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftInDeviceNum; + /** + * 澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftOutDeviceNum; + /** + * 璁惧鎬绘暟 + */ + @TableField(exist = false) + @Excel(name = "璁惧鎬绘暟", width = 15) + @ApiModelProperty(value = "璁惧鎬绘暟") + private Integer deviceCountNum; + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java new file mode 100644 index 0000000..a77b65d --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java @@ -0,0 +1,129 @@ +package org.jeecg.modules.mdc.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecg.common.system.base.entity.JeecgEntity; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @Description: mdc_equipment_punch_rate + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Data +@TableName("mdc_equipment_punch_rate") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "mdc_equipment_punch_rate瀵硅薄", description = "mdc_equipment_punch_rate") +public class MdcEquipmentPunchRate extends JeecgEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private String id; + /** + * 璁惧缂栧彿 + */ + @Excel(name = "璁惧缂栧彿", width = 15) + @ApiModelProperty(value = "璁惧缂栧彿") + private String equipmentId; + + + /** + * 璁板綍鏃ユ湡 + */ + @Excel(name = "璁板綍鏃ユ湡", width = 15) + @ApiModelProperty(value = "璁板綍鏃ユ湡") + private String theDate; + /** + * 鐝 + */ + @Excel(name = "鐝", width = 15) + @ApiModelProperty(value = "鐝") + @Dict(dicCode = "shift_schedule") + private Integer shiftSchedule; + + /** + * 鏃╃彮涓婄彮鎵撳崱鐜� + */ + + @Excel(name = "鏃╃彮涓婄彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏃╃彮涓婄彮鎵撳崱鐜�") + private BigDecimal mornShiftInRate; + + /** + * 鏅氱彮涓婄彮鎵撳崱鐜� + */ + + @Excel(name = "鏅氱彮涓婄彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏅氱彮涓婄彮鎵撳崱鐜�") + private BigDecimal evenShiftInRate; + + /** + * 鏃╃彮涓嬬彮鎵撳崱鐜� + */ + + @Excel(name = "鏃╃彮涓嬬彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏃╃彮涓嬬彮鎵撳崱鐜�") + private BigDecimal mornShiftOutRate; + + /** + * 鏅氱彮涓嬬彮鎵撳崱鐜� + */ + + @Excel(name = "鏅氱彮涓嬬彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏅氱彮涓嬬彮鎵撳崱鐜�") + private BigDecimal evenShiftOutRate; + + /** + * 鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer mornShiftInNum; + + /** + * 鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer mornShiftOutNum; + /** + * 澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer evenShiftInNum; + /** + * 澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer evenShiftOutNum; + /** + * 璁惧鎬绘暟 + */ + + @Excel(name = "璁惧鎬绘暟", width = 15) + @ApiModelProperty(value = "璁惧鎬绘暟") + private Integer deviceCountNum; + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java new file mode 100644 index 0000000..cff7388 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java @@ -0,0 +1,108 @@ + +package org.jeecg.modules.mdc.job; + +import cn.hutool.core.date.DatePattern; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchRateService; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService; +import org.jeecg.modules.quartz.entity.QuartzJob; +import org.jeecg.modules.quartz.entity.SysQuartzLog; +import org.jeecg.modules.quartz.service.IQuartzJobService; +import org.jeecg.modules.quartz.service.ISysQuartzLogService; +import org.jeecg.modules.system.service.ISysAnnouncementService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.List; + +/** + * @Description: 姣忔棩鍑屾櫒瀹氭椂璁$畻鍓嶄竴澶╃殑璁惧鎵撳崱鐜囷紝骞跺叆搴� + * @Author: Lius + * @CreateTime: 2025-06-12 + */ +@Slf4j +public class DailyPunchRateJob implements Job { + + private String parameter; // 鍙�夊弬鏁帮細鎸囧畾鏃ユ湡锛堝 "2025-06-11"锛� + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + @Resource + private IQuartzJobService quartzJobService; + + @Resource + private ISysQuartzLogService sysQuartzLogService; + + @Resource + private ISysAnnouncementService sysAnnouncementService; + + @Resource + private IMdcEquipmentPunchService mdcEquipmentPunchService; + + + @Resource + private IMdcEquipmentPunchRateService mdcEquipmentPunchRateService; + + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + SysQuartzLog quartzLog = new SysQuartzLog(); + quartzLog.setCreateTime(new Date()); + + List<QuartzJob> jobList = this.quartzJobService.findByJobClassName(this.getClass().getName()); + if (jobList != null && !jobList.isEmpty()) { + quartzLog.setJobId(jobList.get(0).getId()); + } + + log.info("銆愬紑濮嬫墽琛屾瘡鏃ヨ澶囨墦鍗$巼缁熻浠诲姟銆�"); + + long startTime = System.currentTimeMillis(); + + try { + String yesterdayStr; + + + + if (parameter != null && !parameter.isEmpty()) { + yesterdayStr = parameter; // 鏀寔鎵嬪姩浼犲弬 + } else { + LocalDate yesterday = LocalDate.now().minusDays(1); + yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); // 鏍煎紡鍖栦负 "yyyy-MM-dd" + } + log.info("鉁� 鎴愬姛瀹屾垚姣忔棩璁惧鎵撳崱鐜囩粺璁℃暟鎹�", yesterdayStr); + // Step 1锛氳幏鍙栨槰鏃ユ墦鍗℃暟鎹� + List<MdcEquipmentPunch> punchRecords = mdcEquipmentPunchService.getYesterdayRecords(yesterdayStr); + log.info("鉁� 鎴愬姛瀹屾垚姣忔棩璁惧鎵撳崱鐜囩粺璁℃暟鎹�", punchRecords); + if (punchRecords == null || punchRecords.isEmpty()) { + log.warn("鈿狅笍 娌℃湁鎵惧埌鏄ㄦ棩璁惧鎵撳崱鏁版嵁"); + quartzLog.setIsSuccess(0); + return; + } + + // Step 2锛氫繚瀛樺埌鎵撳崱鐜囪〃 + mdcEquipmentPunchRateService.savePunchRates(yesterdayStr, punchRecords); + + quartzLog.setIsSuccess(0); + log.info("鉁� 鎴愬姛瀹屾垚姣忔棩璁惧鎵撳崱鐜囩粺璁★紝鍏卞鐞� {} 鏉¤褰曪紝鏃ユ湡锛歿}", punchRecords.size(), yesterdayStr); + } catch (Exception e) { + quartzLog.setIsSuccess(-1); + quartzLog.setExceptionDetail(e.getMessage()); + log.error("鉂� 璁惧鎵撳崱鐜囩粺璁′换鍔℃墽琛屽け璐�", e); + sysAnnouncementService.jobSendMessage("璁惧鎵撳崱鐜囩粺璁′换鍔�", e.getMessage()); + } + + // 璁板綍鎵ц鏃堕棿 + long endTime = System.currentTimeMillis(); + quartzLog.setExecutionTime((int)(endTime - startTime)); + sysQuartzLogService.save(quartzLog); + } + +} \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java new file mode 100644 index 0000000..6224509 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.mdc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.mdc.entity.AndonOrder; + +import java.util.List; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +public interface AndonOrderMapper extends BaseMapper<AndonOrder> { + + List<AndonOrder> equAndonList(@Param("equipmentIdList") List<String> equipmentIdList); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java index 4bbcd26..629c89b 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java @@ -1,11 +1,15 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.EquipmentAlarm; + +import java.util.List; /** * @author: LiuS * @create: 2023-04-12 16:39 */ public interface EquipmentAlarmMapper extends BaseMapper<EquipmentAlarm> { + List<EquipmentAlarm> equAlarmList(@Param("equipmentIdList") List<String> equipmentIdList); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java index 3b45151..16091a2 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java @@ -15,4 +15,22 @@ public interface MdcEquipmentPunchMapper extends BaseMapper<MdcEquipmentPunch> { List<MdcEquipmentPunch> list(@Param("equipmentIds") List<String> equipmentIds, @Param("date") String date); + + + // 鏌ヨ鏃╃彮涓婄彮鎵撳崱璁惧鏁� + int countMorningShiftIn(@Param("date") String date); + + // 鏌ヨ鏅氱彮涓婄彮鎵撳崱璁惧鏁� + int countEveningShiftIn(@Param("date") String date); + + // 鏌ヨ鏃╃彮涓嬬彮鎵撳崱璁惧鏁� + int countMorningShiftOut(@Param("date") String date); + + // 鏌ヨ鏅氱彮涓嬬彮鎵撳崱璁惧鏁� + int countEveningShiftOut(@Param("date") String date); + /** + * 鑾峰彇鎵�鏈夎澶囨暟 + */ + int getTotalDeviceCount(); + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java new file mode 100644 index 0000000..a80d853 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.mdc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; + +/** + * @Description: mdc_equipment_punch_rate + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface MdcEquipmentPunchRateMapper extends BaseMapper<MdcEquipmentPunchRate> { + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml new file mode 100644 index 0000000..36ecafa --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.mdc.mapper.AndonOrderMapper"> + + <select id="equAndonList" resultType="org.jeecg.modules.mdc.entity.AndonOrder"> + SELECT + * + FROM + andon_order + WHERE + CONVERT ( DATE, create_time ) = CONVERT ( DATE, GETDATE( ) ) + AND equipment_id IN + <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")"> + #{id} + </foreach> + ORDER BY + create_time + </select> +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml new file mode 100644 index 0000000..07a9412 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.mdc.mapper.EquipmentAlarmMapper"> + + <select id="equAlarmList" resultType="org.jeecg.modules.mdc.entity.EquipmentAlarm"> + SELECT TOP 15 * + FROM + EquipmentAlarm + WHERE EquipmentID IN + <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")"> + #{id} + </foreach> + AND alarmNo != '' + ORDER BY collecttime DESC + </select> +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml index 898cd96..0917a40 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml @@ -44,7 +44,7 @@ <select id="equDowntimeStatistics" resultType="org.jeecg.modules.board.vo.EquDowntimeInfo"> SELECT t2.downtime_description AS shutdown_info, - SUM ( DATEDIFF( SECOND, t1.start_date, t1.end_date ) ) / 3600.0 AS duration_hours + SUM ( DATEDIFF( SECOND, t1.start_date, t1.end_date ) ) / 3600.0 AS duration FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id @@ -57,7 +57,5 @@ </foreach> GROUP BY t2.downtime_description - ORDER BY - duration_hours DESC </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml index db58e0e..581970f 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml @@ -9,6 +9,6 @@ t2.downtime_description downtimeDescription FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id ${ew.customSqlSegment} - ORDER BY t1.create_time DESC + ORDER BY t1.equipment_id DESC, t1.start_date ASC </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml index 48cc0e8..8c27d52 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml @@ -4,31 +4,31 @@ <select id="list" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentPunch"> SELECT - p.id, - p.equipment_id, - p.punch_user, - p.check_in_time, - p.check_out_time, - p.record_date, - p.is_absent, - p.is_late, - p.is_early, - p.create_by, - p.create_time, - p.update_by, - p.update_time, - p.shift_schedule, - u.realname punchUserRealName, - u.username punchUserUserName, - d1.item_text shiftScheduleName + p.id, + p.equipment_id, + p.punch_user, + p.check_in_time, + p.check_out_time, + p.record_date, + p.is_absent, + p.is_late, + p.is_early, + p.create_by, + p.create_time, + p.update_by, + p.update_time, + p.shift_schedule, + u.realname punchUserRealName, + u.username punchUserUserName, + d1.item_text shiftScheduleName FROM - mdc_equipment_punch p - INNER JOIN sys_user u ON u.id = p.punch_user - INNER JOIN (SELECT i1.item_text, i1.item_value - FROM sys_dict_item i1 - LEFT JOIN sys_dict i2 ON i2.id = i1.dict_id - WHERE i2.dict_code = 'shift_schedule') d1 - ON d1.item_value = CAST (p.shift_schedule AS nvarchar) + mdc_equipment_punch p + INNER JOIN sys_user u ON u.id = p.punch_user + INNER JOIN (SELECT i1.item_text, i1.item_value + FROM sys_dict_item i1 + LEFT JOIN sys_dict i2 ON i2.id = i1.dict_id + WHERE i2.dict_code = 'shift_schedule') d1 + ON d1.item_value = CAST (p.shift_schedule AS nvarchar) where 1=1 AND p.equipment_id IN <foreach collection="equipmentIds" item="equipmentId" open="(" close=")" separator=","> @@ -39,4 +39,47 @@ </if> order by p.equipment_id desc, p.shift_schedule asc </select> + + <!--鏌ヨ鎵�鏈夎澶囨暟閲�--> + <select id="getTotalDeviceCount" resultType="int"> + SELECT COUNT(*) + FROM mdc_equipment + </select> + + <!-- 鏃╃彮 涓婄彮鎵撳崱 --> + <select id="countMorningShiftIn" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '1' + AND check_in_time IS NOT NULL + </select> + + <!-- 鏅氱彮 涓婄彮鎵撳崱 --> + <select id="countEveningShiftIn" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '2' + AND check_in_time IS NOT NULL + </select> + + <!-- 鏃╃彮 涓嬬彮鎵撳崱 --> + <select id="countMorningShiftOut" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '1' + AND check_out_time IS NOT NULL + </select> + + <!-- 鏅氱彮 涓嬬彮鎵撳崱 --> + <select id="countEveningShiftOut" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '2' + AND check_out_time IS NOT NULL + </select> + </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml new file mode 100644 index 0000000..e576a6c --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.jeecg.modules.mdc.mapper.MdcEquipmentPunchRateMapper"> + + +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml index e286929..b3a2f9a 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml @@ -9,8 +9,12 @@ a.EquipmentID equipmentId, me.equipment_name equipmentName, me.equipment_type equipmentType, - met.equipment_type_pictures equipmentImage, - a.Oporation equipmentStatus, + me.equipment_image equipmentImage, + CASE + + WHEN repair.count > 0 THEN + '5' ELSE a.Oporation + END AS equipmentStatus, mew.coordinate_left coordinateLeft, mew.coordinate_top coordinateTop, mew.vw vw, @@ -24,6 +28,17 @@ INNER JOIN mdc_equipment_type met ON me.equipment_type = met.equipment_type_name AND a.CollectTime= b.maxgdtime AND mew.workshop_id = #{ workshopId } + LEFT JOIN ( + SELECT + e1.equipment_code, + COUNT(1) COUNT + FROM + eam_report_repair r1 + INNER JOIN eam_equipment e1 ON e1.id = r1.equipment_id + WHERE + r1.report_status NOT IN ('COMPLETE', 'ABOLISH') + GROUP BY + e1.equipment_code) repair ON repair.equipment_code = me.equipment_id </select> <select id="listByUser" resultType="org.jeecg.modules.mdc.entity.MdcWorkshopInfo"> diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java new file mode 100644 index 0000000..d392a52 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.board.vo.EquAndon; +import org.jeecg.modules.mdc.entity.AndonOrder; + +import java.util.List; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +public interface IAndonOrderService extends IService<AndonOrder> { + + void procedureCall(AndonOrder andonOrder); + + List<EquAndon> equAndonList(List<String> equipmentIdList); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java index 1b072fe..56b6113 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java @@ -12,4 +12,6 @@ */ public interface IEquipmentAlarmService extends IService<EquipmentAlarm> { List<EquipmentAlarm> findEquipmentAlarmByDate(String equipmentId, Date startTime, Date endTime); + + List<EquipmentAlarm> equAlarmList(List<String> equipmentIdList); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java new file mode 100644 index 0000000..b1a371d --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface IMdcEquipmentPunchRateService extends IService<MdcEquipmentPunchRate> { + + + void savePunchRates(String targetDate, List<MdcEquipmentPunch> punchRecords); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java index 79be14a..a1e32d7 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java @@ -18,4 +18,10 @@ void workUp(MdcEquipmentPunch mdcEquipmentPunch); void workDown(MdcEquipmentPunch mdcEquipmentPunch); + void fillPunchRates(List<MdcEquipmentPunch> punchList); + + /** + * 鏌ヨ鎸囧畾鏃ユ湡鐨勮澶囨墦鍗℃暟鎹紙閫氬父鏄槰澶╋級 + */ + List<MdcEquipmentPunch> getYesterdayRecords(String targetDate); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java new file mode 100644 index 0000000..499e343 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java @@ -0,0 +1,125 @@ +package org.jeecg.modules.mdc.service.impl; + +import cn.hutool.core.date.DatePattern; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.Feature; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.constant.WebsocketConst; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.common.util.TranslateDictTextUtils; +import org.jeecg.modules.board.vo.EquAndon; +import org.jeecg.modules.mdc.dto.MdcEquProDto; +import org.jeecg.modules.mdc.entity.AndonOrder; +import org.jeecg.modules.mdc.mapper.AndonOrderMapper; +import org.jeecg.modules.mdc.service.IAndonOrderService; +import org.jeecg.modules.mdc.service.IMdcEquipmentService; +import org.jeecg.modules.mdc.util.DateUtils; +import org.jeecg.modules.mdc.vo.AndonOrderWebSocketVo; +import org.jeecg.modules.message.websocket.WebSocket; +import org.jeecg.modules.system.service.ISysDictService; +import org.jeecg.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: andon_order + * @Author: jeecg-boot + * @Date: 2025-06-11 + * @Version: V1.0 + */ +@Service +public class AndonOrderServiceImpl extends ServiceImpl<AndonOrderMapper, AndonOrder> implements IAndonOrderService { + + @Resource + private IMdcEquipmentService mdcEquipmentService; + @Resource + private WebSocket webSocket; + @Resource + private ISysUserService userService; + @Resource + private ISysDictService sysDictService; + + @Override + public void procedureCall(AndonOrder andonOrder) { + if (StringUtils.isBlank(andonOrder.getEquipmentId())) { + throw new JeecgBootException("璇烽�夋嫨璁惧锛�"); + } + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = user.getId(); + List<String> equipmentIds = Arrays.asList(andonOrder.getEquipmentId().split(StringPool.COMMA)); + + List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(equipmentIds); + Map<String, MdcEquProDto> equipmentIdToProductionIdMap = equipmentList.stream().collect(Collectors.toMap(MdcEquProDto::getEquipmentId, comRateDto -> comRateDto)); + List<AndonOrder> list = Lists.newArrayList(); + for (String equipmentId : equipmentIds) { + AndonOrder andonOrderInfo = new AndonOrder(); + andonOrderInfo.setEquipmentId(equipmentId); + andonOrderInfo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(equipmentId) ? equipmentIdToProductionIdMap.get(equipmentId).getId() : null); + andonOrderInfo.setAndonType(StringPool.ONE); + andonOrderInfo.setOrderStatus(StringPool.ONE); + andonOrderInfo.setOperator(andonOrder.getOperator()); + andonOrderInfo.setOperateTime(new Date()); + andonOrderInfo.setResponder(userId); + andonOrderInfo.setCallReason(andonOrder.getCallReason()); + list.add(andonOrderInfo); + } + + if (this.saveBatch(list)) { + List<AndonOrderWebSocketVo> andonOrderWebSocketVoList = Lists.newArrayList(); + //璁剧疆websocket璇锋眰娑堟伅鏁版嵁 + for (AndonOrder order : list) { + AndonOrderWebSocketVo andonOrderWebSocketVo = new AndonOrderWebSocketVo(); + andonOrderWebSocketVo.setEquipmentId(order.getEquipmentId()); + andonOrderWebSocketVo.setCallPersonnel(userService.getById(order.getOperator()).getRealname()); + andonOrderWebSocketVo.setCallTime(DateUtils.format(order.getOperateTime(), DatePattern.NORM_DATE_PATTERN)); + andonOrderWebSocketVo.setCallReason(order.getCallReason()); + andonOrderWebSocketVo.setAndonType("绋嬪簭鍛煎彨"); + andonOrderWebSocketVo.setPersonResponsible(user.getRealname()); + andonOrderWebSocketVo.setRepairTime(StringPool.EMPTY); + andonOrderWebSocketVo.setFaultInfo(StringPool.EMPTY); + andonOrderWebSocketVo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(order.getEquipmentId()) ? equipmentIdToProductionIdMap.get(order.getEquipmentId()).getProductionName() : null); + andonOrderWebSocketVoList.add(andonOrderWebSocketVo); + } + + //鍙戦�亀ebsocket璇锋眰 + JSONObject jsonObject = new JSONObject(); + jsonObject.put(WebsocketConst.MSG_CMD, "andon"); + jsonObject.put("data", andonOrderWebSocketVoList); + webSocket.sendMessage(jsonObject.toJSONString()); + } + } + + /** + * 瀹夌伅闂鍒楄〃 + */ + @Override + public List<EquAndon> equAndonList(List<String> equipmentIdList) { + List<EquAndon> result = new ArrayList<>(); + List<AndonOrder> andonOrderList = this.baseMapper.equAndonList(equipmentIdList); + if (andonOrderList != null && !andonOrderList.isEmpty()) { + andonOrderList.forEach(andonOrder -> { + EquAndon equAndon = new EquAndon(); + equAndon.setEquipmentId(andonOrder.getEquipmentId()); + StringBuilder infoBuilder = new StringBuilder(); + infoBuilder.append("瀹夌伅绫诲瀷: ").append(sysDictService.queryDictTextByKey("andon_type",andonOrder.getAndonType())).append("\n"); + infoBuilder.append("瀹夌伅浜�: ").append(sysDictService.queryTableDictTextByKey("sys_user", "realname", "id", andonOrder.getOperator())).append("\n"); + infoBuilder.append("瀹夌伅鏃堕棿: ").append(DateUtils.format(andonOrder.getOperateTime(), DateUtils.STR_DATE_TIME_SMALL)).append("\n"); + infoBuilder.append("瀹夌伅鐘舵��: ").append(sysDictService.queryDictTextByKey("order_status",andonOrder.getOrderStatus())).append("\n"); + equAndon.setAndonInfo(infoBuilder.toString()); + result.add(equAndon); + }); + } + return result; + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java index aa11e2d..b8a2565 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java @@ -7,6 +7,7 @@ import org.jeecg.modules.mdc.service.IEquipmentAlarmService; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -22,4 +23,9 @@ .ge(EquipmentAlarm::getCollecttime, startTime).le(EquipmentAlarm::getCollecttime, endTime) .eq(EquipmentAlarm::getEquipmentid, equipmentId).orderByDesc(EquipmentAlarm::getCollecttime)); } + + @Override + public List<EquipmentAlarm> equAlarmList(List<String> equipmentIdList) { + return this.baseMapper.equAlarmList(equipmentIdList); + } } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java new file mode 100644 index 0000000..00d9379 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java @@ -0,0 +1,81 @@ +package org.jeecg.modules.mdc.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; +import org.jeecg.modules.mdc.mapper.MdcEquipmentPunchMapper; +import org.jeecg.modules.mdc.mapper.MdcEquipmentPunchRateMapper; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchRateService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.UUID; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Service +public class MdcEquipmentPunchRateServiceImpl extends ServiceImpl<MdcEquipmentPunchRateMapper, MdcEquipmentPunchRate> implements IMdcEquipmentPunchRateService { + @Resource + private MdcEquipmentPunchRateMapper mdcEquipmentPunchRateMapper; + + @Resource + private MdcEquipmentPunchMapper mdcEquipmentPunchMapper; + @Override + public void savePunchRates(String targetDate, List<MdcEquipmentPunch> punchRecords) { + + int morningIn = mdcEquipmentPunchMapper.countMorningShiftIn(targetDate); + int eveningIn = mdcEquipmentPunchMapper.countEveningShiftIn(targetDate); + int morningOut = mdcEquipmentPunchMapper.countMorningShiftOut(targetDate); + int eveningOut = mdcEquipmentPunchMapper.countEveningShiftOut(targetDate); + for (MdcEquipmentPunch punch : punchRecords) { + MdcEquipmentPunchRate rate = new MdcEquipmentPunchRate(); + + rate.setId(UUID.randomUUID().toString()); // 鐢熸垚鍞竴ID + rate.setEquipmentId(punch.getEquipmentId()); + rate.setTheDate(targetDate); + rate.setShiftSchedule(punch.getShiftSchedule()); + + + + + // 璁剧疆璁惧鏁伴噺 + rate.setMornShiftInNum(morningIn); + rate.setMornShiftOutNum(eveningIn); + rate.setEvenShiftInNum(morningOut); + rate.setEvenShiftOutNum(eveningOut); + + + + // 鑾峰彇鎬昏澶囨暟 + int totalDevices = mdcEquipmentPunchMapper.getTotalDeviceCount(); + if (totalDevices == 0) return; + + + rate.setDeviceCountNum(totalDevices); + + // 璁$畻鎵撳崱鐜囷紙淇濈暀涓や綅灏忔暟锛� + rate.setMornShiftInRate(calculateRate(morningIn, totalDevices)); + rate.setMornShiftOutRate(calculateRate(eveningIn, totalDevices)); + rate.setEvenShiftInRate(calculateRate(morningOut, totalDevices)); + rate.setEvenShiftOutRate(calculateRate(eveningOut, totalDevices)); + + this.save(rate); + } + } + private BigDecimal calculateRate(int actual, int total) { + if (total == 0) return BigDecimal.ZERO; + return new BigDecimal(actual) + .divide(new BigDecimal(total), 4, RoundingMode.DOWN) + .multiply(BigDecimal.valueOf(100)) + .setScale(2, RoundingMode.DOWN); // 淇濈暀涓や綅灏忔暟锛屼笉杩涜鍥涜垗浜斿叆 + } + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java index 8b79829..31517e7 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java @@ -3,6 +3,7 @@ import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -19,6 +20,10 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -30,7 +35,8 @@ */ @Service public class MdcEquipmentPunchServiceImpl extends ServiceImpl<MdcEquipmentPunchMapper, MdcEquipmentPunch> implements IMdcEquipmentPunchService { - + @Resource + private MdcEquipmentPunchMapper mdcEquipmentPunchMapper; @Resource private IMdcEquipmentService mdcEquipmentService; @@ -136,13 +142,16 @@ MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); if (first.isPresent()) { equipmentPunch = first.get(); + //宸插瓨鍦ㄨ褰曡鏄庡凡鎵撲笅鐝崱锛屾晠灏嗘槸鍚︾己鍗$疆涓哄惁 + equipmentPunch.setIsAbsent(0); }else { equipmentPunch.setEquipmentId(equipment); equipmentPunch.setPunchUser(userId); equipmentPunch.setRecordDate(currentDate); equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule()); - equipmentPunch.setIsAbsent(0); equipmentPunch.setIsEarly(0); + //姝e父鎵撳崱鏃跺厛灏嗘槸鍚︾己鍗$疆涓衡�滄槸鈥濓紝闃叉鏈墦涓嬬彮鍗℃椂鏃犳硶璋冩暣鐘舵�� + equipmentPunch.setIsAbsent(1); } equipmentPunch.setCheckInTime(mdcEquipmentPunch.getCheckInTime()); //鎵撳崱鏃堕棿澶т簬8锛�30/17:00鏃朵负杩熷埌鎵撳崱 @@ -214,6 +223,7 @@ MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); if (mdcEquipmentPunchOptional.isPresent()) { equipmentPunch = mdcEquipmentPunchOptional.get(); + equipmentPunch.setIsAbsent(0); }else { equipmentPunch.setIsAbsent(1); equipmentPunch.setIsLate(0); @@ -231,4 +241,59 @@ this.saveOrUpdateBatch(list); } + + @Override + public void fillPunchRates(List<MdcEquipmentPunch> punchList) { + + // 鑾峰彇鏄ㄥぉ鏃ユ湡 + LocalDate yesterday = LocalDate.now().minusDays(1); + String yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); // 鏍煎紡鍖栦负 "yyyy-MM-dd" + + + // 鑾峰彇鎬昏澶囨暟 + int totalDevices = mdcEquipmentPunchMapper.getTotalDeviceCount(); + if (totalDevices == 0) return; + + // 缁熻鍚勭被鍨嬫墦鍗′汉鏁� + int morningIn = mdcEquipmentPunchMapper.countMorningShiftIn(yesterdayStr); + int eveningIn = mdcEquipmentPunchMapper.countEveningShiftIn(yesterdayStr); + int morningOut = mdcEquipmentPunchMapper.countMorningShiftOut(yesterdayStr); + int eveningOut = mdcEquipmentPunchMapper.countEveningShiftOut(yesterdayStr); + + + // 璁剧疆鎵撳崱鐜囧埌姣忎釜 DTO + for (MdcEquipmentPunch dto : punchList) { + dto.setMorningShiftInRate(calculateRate(morningIn, totalDevices)); + dto.setEveningShiftInRate(calculateRate(eveningIn, totalDevices)); + dto.setMorningShiftOutRate(calculateRate(morningOut, totalDevices)); + dto.setEveningShiftOutRate(calculateRate(eveningOut, totalDevices)); + + // 璁剧疆鎵撳崱璁惧鏁伴噺瀛楁 + dto.setMorningShiftInDeviceNum(morningIn); + dto.setMorningShiftOutDeviceNum(morningOut); + dto.setEveningShiftInDeviceNum(eveningIn); + dto.setEveningShiftOutDeviceNum(eveningOut); + dto.setDeviceCountNum(totalDevices); + } + } + + // 璁$畻鐧惧垎姣斿苟淇濈暀涓や綅灏忔暟 + private BigDecimal calculateRate(int actual, int total) { + if (total == 0) return BigDecimal.ZERO; + return new BigDecimal(actual) + .divide(new BigDecimal(total), 4, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)) + .setScale(2, RoundingMode.HALF_UP); // 淇濈暀涓や綅灏忔暟 + } + + @Override + public List<MdcEquipmentPunch> getYesterdayRecords(String targetDate) { + // 鏋勯�犳煡璇㈡潯浠讹細record_date = targetDate.toString() + QueryWrapper<MdcEquipmentPunch> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("record_date", targetDate); + + // 鎵ц鏌ヨ骞惰繑鍥炵粨鏋� + return baseMapper.selectList(queryWrapper); + } + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java new file mode 100644 index 0000000..411a4ec --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java @@ -0,0 +1,52 @@ +package org.jeecg.modules.mdc.vo; + +import lombok.Data; + +@Data +public class AndonOrderWebSocketVo { + + /** + * 璁惧缂栧彿 + */ + private String equipmentId; + + /** + * 鍛煎彨浜哄憳 + */ + private String callPersonnel; + + /** + * 瀹夌伅绫诲瀷 + */ + private String andonType; + + /** + * 鍛煎彨鏃堕棿 + */ + private String callTime; + + /** + * 鍛煎彨鍘熷洜 + */ + private String callReason; + + /** + * 璐d换浜� + */ + private String personResponsible; + + /** + * 鎶ヤ慨鏃堕棿 + */ + private String repairTime; + + /** + * 鏁呴殰鎻忚堪 + */ + private String faultInfo; + + /** + * 鎵�灞炲巶鎴� + */ + private String plantName; +} diff --git a/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java b/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java deleted file mode 100644 index a104726..0000000 --- a/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.jeecg.modules.msi.utils; - - -import org.apache.cxf.endpoint.Client; -import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; -import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; - - -public class WebServiceUtil { - /** - * 1.浠g悊绫诲伐鍘傜殑鏂瑰紡,闇�瑕佹嬁鍒板鏂圭殑鎺ュ彛鍦板潃, 鍚屾椂闇�瑕佸紩鍏ユ帴鍙� - */ - public static void invokeService_1(String address, Class<?> tClass){ - // 鎺ュ彛鍦板潃 - //String address = "http://localhost:8080/services/ws/api?wsdl"; - // 浠g悊宸ュ巶 - JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); - // 璁剧疆浠g悊鍦板潃 - jaxWsProxyFactoryBean.setAddress(address); - // 璁剧疆鎺ュ彛绫诲瀷 - jaxWsProxyFactoryBean.setServiceClass(tClass); - // 鍒涘缓涓�涓唬鐞嗘帴鍙e疄鐜� - Object us = jaxWsProxyFactoryBean.create(); - // 鏁版嵁鍑嗗 - String data = "hello world"; - // 璋冪敤浠g悊鎺ュ彛鐨勬柟娉曡皟鐢ㄥ苟杩斿洖缁撴灉 - //String result = us.emrService(data); - //System.out.println("杩斿洖缁撴灉:" + result); - } - - /** - * 3. 鍔ㄦ�佽皟鐢� - */ - public static String invokeService(String uri, String data, String method) - { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(uri); - Object[] objects = new Object[0]; - try { - objects = client.invoke(method, data); - } catch (Exception e) { - e.printStackTrace(); - } - return String.valueOf(objects[0]); - } - - /** - * 2. 鍔ㄦ�佽皟鐢� - */ - public static String invokeServiceObJect(String uri,Object[] datas, String method) - { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(uri); - Object[] objects = new Object[0]; - try { - objects = client.invoke(method, datas); - } catch (Exception e) { - e.printStackTrace(); - } - return String.valueOf(objects[0]); - } -} diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java index d5d6e64..04a7069 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java @@ -185,4 +185,11 @@ String findProName(String equipmentId); + + /** + * 鏍规嵁浜х嚎orgCode鏌ヨ浜х嚎 + * @param orgCode + * @return + */ + MdcProduction findByOrgCode(String orgCode); } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java index a3128e2..291d646 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java @@ -637,4 +637,9 @@ public String findProName(String equipmentId) { return this.baseMapper.findProName(equipmentId); } + + @Override + public MdcProduction findByOrgCode(String orgCode){ + return this.baseMapper.selectOne(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgCode, orgCode)); + } } diff --git a/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml b/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml index 5b27cd5..682766c 100644 --- a/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml +++ b/lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml @@ -309,9 +309,7 @@ #staticAccessPath: /api/ffile/** # 褰撳墠椤圭洰鐨勯潤鎬佽祫婧愯闂厤缃湪nginx涓� #宸ユ帶缃�/娑夊瘑缃戦儴缃茬浉鍏抽厤缃�------------閫氳繃鍏夌洏鎽嗘浮 deploy: - #宸ユ帶缃�/娑夊瘑缃戦儴缃� 0涓烘秹瀵嗙綉 1涓哄伐鎺х綉 - deployType: 0 - #娑夊瘑缃戜紶杈撳伐鎺х綉nc鏂囦欢澶�(鎸囨淳璁惧nc鏂囦欢) 宸ユ帶缃戜紶杈撴秹瀵嗙綉nc鏂囦欢澶�(瑙f瀽鍥炰紶鍚庣殑nc鏂囦欢) + #娑夊瘑缃戜紶杈撳伐鎺х綉nc鏂囦欢澶�(鎸囨淳璁惧nc鏂囦欢) secretFolder: D:\\test\\a file: monitor: @@ -321,3 +319,5 @@ - D:\\hy_test\\b - D:\\hy_test\\c interval: 10000 # 鐩戞帶闂撮殧(ms) +security: + encryption-key: 1234567890abcdef # 鍔犺В瀵嗙閽� diff --git a/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml b/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml index 424cb23..184a80a 100644 --- a/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml +++ b/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml @@ -291,4 +291,4 @@ client-id: ?? # appSecret client-secret: ?? - agent-id: ?? \ No newline at end of file + agent-id: ?? diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java index 0a84ad8..b4b0f7c 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java @@ -94,6 +94,15 @@ return Result.OK("娣诲姞鎴愬姛锛�"); } + @AutoLog(value = "鍒�鍏峰噯澶囧崟-浠嶥NC绯荤粺鍐欏叆鍒�鍏峰噯澶囧崟鍙婃槑缁�") + @ApiOperation(value="鍒�鍏峰噯澶囧崟-浠嶥NC绯荤粺鍐欏叆鍒�鍏峰噯澶囧崟鍙婃槑缁�", notes="鍒�鍏峰噯澶囧崟-浠嶥NC绯荤粺鍐欏叆鍒�鍏峰噯澶囧崟鍙婃槑缁�") + //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:add") + @PostMapping(value = "/addPreparationOrderFromDnc") + public Result<String> addPreparationOrderFromDnc(@RequestBody PreparationOrderAndDetailDto preparationOrderAndDetailDto) { + preparationOrderService.addPreparationOrderFromDnc(preparationOrderAndDetailDto); + return Result.OK("娣诲姞鎴愬姛锛�"); + } + /** * 缂栬緫 * @param preparationOrder diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolSharpeningController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolSharpeningController.java index beeaecb..2734032 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolSharpeningController.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolSharpeningController.java @@ -36,19 +36,7 @@ @Autowired private IToolsSharpeningService toolSharpeningService; - /** - * 鍒嗛〉鏌ヨ - */ -// @GetMapping("/list") -// @ApiOperation(value = "鍒嗛〉鏌ヨ", notes = "鍒嗛〉鏌ヨ") -// public Result<IPage<ToolSharpening>> queryPageList(ToolSharpening toolSharpening, -// @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, -// @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { -// Page<ToolSharpening> page = new Page<>(pageNo, pageSize); -// QueryWrapper<ToolSharpening> queryWrapper = new QueryWrapper<>(toolSharpening); -// IPage<ToolSharpening> iPage = toolSharpeningService.page(page, queryWrapper); -// return Result.OK(iPage); -// } + @ApiOperation(value="鎶ユ崯鐢宠鍗曟槑缁�-閫氳繃涓昏〃ID鏌ヨ", notes="鎶ユ崯鐢宠鍗曟槑缁�-閫氳繃涓昏〃ID鏌ヨ") @@ -93,17 +81,29 @@ toolSharpeningService.save(toolSharpening); return Result.OK("娣诲姞鎴愬姛锛�"); } +// /** +// * 淇敼 +// */ +// @PutMapping +// @ApiOperation(value = "淇敼", notes = "淇敼") +// public Result<ToolSharpening> edit(@RequestBody ToolSharpening toolSharpening) { +// toolSharpeningService.updateById(toolSharpening); +// return Result.OK(toolSharpening); +// } + /** - * 淇敼 + * 缂栬緫 + * + * @param toolSharpening + * @return */ - @PutMapping - @ApiOperation(value = "淇敼", notes = "淇敼") - public Result<ToolSharpening> edit(@RequestBody ToolSharpening toolSharpening) { + @AutoLog(value = "tms_tool_sharpening-缂栬緫") + @ApiOperation(value="tms_tool_sharpening-缂栬緫", notes="tms_tool_sharpening-缂栬緫") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result<String> edit(@RequestBody ToolSharpening toolSharpening) { toolSharpeningService.updateById(toolSharpening); - return Result.OK(toolSharpening); + return Result.OK("缂栬緫鎴愬姛!"); } - - /** diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsStocktakingBoundController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsStocktakingBoundController.java index b818afc..f671f4d 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsStocktakingBoundController.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsStocktakingBoundController.java @@ -1,5 +1,6 @@ package org.jeecg.modules.tms.controller; +import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -15,10 +16,7 @@ import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; -import org.jeecg.modules.tms.entity.BaseTools; -import org.jeecg.modules.tms.entity.ToolSharpening; -import org.jeecg.modules.tms.entity.ToolsStocktakingBound; -import org.jeecg.modules.tms.entity.ToolsStocktakingBoundDetail; +import org.jeecg.modules.tms.entity.*; import org.jeecg.modules.tms.entity.dto.LossBoundFlowDto; import org.jeecg.modules.tms.entity.dto.StocktakingBoundFlowDto; import org.jeecg.modules.tms.entity.vo.ToolsStocktakingVo; @@ -38,6 +36,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -172,27 +171,42 @@ @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) @Transactional(rollbackFor = {Exception.class}) public Result<String> edit(@RequestBody ToolsStocktakingBound toolsStocktakingBound) { - if (toolsStocktakingBound == null || StringUtils.isBlank(toolsStocktakingBound.getId())) { - return Result.error("鍙傛暟閿欒"); - } - toolsStocktakingBoundDetailService.remove(new LambdaQueryWrapper<ToolsStocktakingBoundDetail>() + toolsStocktakingBoundService.updateById(toolsStocktakingBound); + // 鍒犻櫎鐢宠鍗曟槑缁嗘暟鎹� + toolsStocktakingBoundDetailService.remove(new LambdaQueryWrapper<ToolsStocktakingBoundDetail>() .eq(ToolsStocktakingBoundDetail::getStocktakingBoundId, toolsStocktakingBound.getId())); - - ToolsStocktakingBound stocktakingBound = new ToolsStocktakingBound(); - BeanUtils.copyProperties(stocktakingBound, toolsStocktakingBound); - toolsStocktakingBoundMapper.updateById(stocktakingBound); - List<ToolsStocktakingBoundDetail> detailList = toolsStocktakingBound.getToolsStocktakingBoundDetailList(); if (CollectionUtils.isEmpty(detailList)) { return Result.error("鏄庣粏涓嶈兘涓虹┖"); } + for (ToolsStocktakingBoundDetail item : detailList) { + item.setStocktakingBoundId(toolsStocktakingBound.getId()); + item.setToolId(item.getToolId()); + item.setToolCode(item.getToolCode()); + item.setRemark(item.getRemark()); + item.setStocktakingDate(item.getStocktakingDate()); + item.setBookQuantity(item.getBookQuantity()); + item.setAvailableQuantity(item.getAvailableQuantity()); + item.setPracticalQuantity(item.getPracticalQuantity()); + item.setSurplusDeficit(item.getSurplusDeficit()); + item.setDifferenceValue(item.getDifferenceValue()); + item.setParamaTableName(item.getParamaTableName()); + item.setForeignLanguageName(item.getForeignLanguageName()); + item.setChineseName(item.getChineseName()); + item.setSupplierId(item.getSupplierId()); + item.setStorageLocation(item.getStorageLocation()); + item.setToolMaterial(item.getToolMaterial()); + item.setToolModel(item.getToolModel()); + item.setPositionCode(item.getPositionCode()); + item.setClassifyId(item.getClassifyId()); + item.setApplicationType(item.getApplicationType()); + toolsStocktakingBoundDetailService.saveOrUpdate(item); + } + toolsStocktakingBoundDetailService.saveOrUpdateBatch(detailList); + return Result.OK("鎿嶄綔鎴愬姛!"); - detailList.forEach(item -> item.setStocktakingBoundId(stocktakingBound.getId())); - toolsStocktakingBoundDetailService.saveBatch(detailList); - - return Result.OK("缂栬緫鎴愬姛"); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsToDncController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsToDncController.java index 9bc6c00..d5d3798 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsToDncController.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/ToolsToDncController.java @@ -1,15 +1,14 @@ package org.jeecg.modules.tms.controller; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.ApiOperation; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.modules.tms.entity.ToolsClassify; import org.jeecg.modules.tms.entity.dto.ToolQueryParamDto; -import org.jeecg.modules.tms.entity.vo.ParaHolesToolsVo; -import org.jeecg.modules.tms.entity.vo.ParaMillToolVo; -import org.jeecg.modules.tms.entity.vo.ParaTurningToolsVo; +import org.jeecg.modules.tms.entity.vo.*; import org.jeecg.modules.tms.enums.ToolParaType; import org.jeecg.modules.tms.service.*; import org.springframework.beans.factory.annotation.Autowired; @@ -18,9 +17,10 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.util.List; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; @RestController @RequestMapping("/tms/toolsToDnc") @@ -34,57 +34,125 @@ private IParaMillToolService paraMillToolService; @Autowired private IParaTurningToolsService paraTurningToolsService; + @Autowired + private IParaThreadingToolService paraThreadingToolService; + @Autowired + private IParaBladeService paraBladeService; + @ApiOperation(value = "閫氳繃宸ュ叿绠�绉版煡璇㈠伐鍏峰垎绫讳俊鎭紝閫夊垁椤甸潰宸ュ叿绫诲瀷涓嬫媺妗嗙敤", notes = "閫氳繃宸ュ叿绠�绉版煡璇㈠伐鍏峰垎绫讳俊鎭紝閫夊垁椤甸潰宸ュ叿绫诲瀷涓嬫媺妗嗙敤") + @GetMapping("/queryToolClassifyByParam") + public Result<?> queryToolClassifyByParam(@RequestParam("aliasLabel") String aliasLabel) { + List<ToolsClassify> classifyList = toolsClassifyService.list(new LambdaQueryWrapper<ToolsClassify>() + .eq(ToolsClassify::getAliasLabel, aliasLabel) + .eq(ToolsClassify::getStatus, CommonConstant.STATUS_1)); + List<Map<String, String>> list = classifyList.stream() + .map(classify -> new HashMap<String, String>() {{ + put("value", classify.getId()); + put("label", classify.getTypeName()); + }}) + .collect(Collectors.toList()); + return Result.ok(list); + } /** * 閫氳繃宸ュ叿绠�绉�/鐩村緞鍙傛暟鏌ヨ鍏蜂綋宸ュ叿鍙傛暟淇℃伅(缁橠NC鎻愪緵鎺ュ彛)锛屽弬鏁扮ず渚嬶細3E锛�3涓哄伐鍏风洿寰勫弬鏁般�丒涓哄姞宸ヤ腑蹇冨垁鍏风畝绉帮級 + * * @param queryParam * @return */ @ApiOperation(value = "閫氳繃宸ュ叿绠�绉�/鐩村緞鍙傛暟鏌ヨ鍏蜂綋宸ュ叿鍙傛暟淇℃伅(缁橠NC鎻愪緵鎺ュ彛)", notes = "閫氳繃宸ュ叿绠�绉�/鐩村緞鍙傛暟鏌ヨ鍏蜂綋宸ュ叿鍙傛暟淇℃伅(缁橠NC鎻愪緵鎺ュ彛)") @GetMapping("/queryToolByParam") - public Result<?> queryToolByParam(@RequestParam("param") ToolQueryParamDto queryParam){ - String param = queryParam.getParam(); - // 姝e垯琛ㄨ揪寮忥細鍓嶅崐閮ㄥ垎涓烘暟瀛楋紙鏀寔灏忔暟锛夛紝鍚庡崐閮ㄥ垎涓哄ぇ鍐欐垨灏忓啓瀛楁瘝 - String regex = "^([\\d.]+)([A-Za-z]+)$"; - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(param); - if (matcher.find()) { - String diameter = matcher.group(1); - String toolAliasName = matcher.group(2); + public Result<?> queryToolByParam(ToolQueryParamDto queryParam) { + String aliasLabel = queryParam.getAliasLabel(); + String diameter = queryParam.getDiameter(); + if (StrUtil.isBlank(aliasLabel)) { + return Result.error("缂哄皯蹇呰鍙傛暟"); + } + Result<Object> res = Result.OK(); + Map<String, Object> result = new HashMap<>(); + int pageNo = Objects.isNull(queryParam.getPageNo()) || queryParam.getPageNo() < 1 ? 1 : queryParam.getPageNo(); + int pageSize = Objects.isNull(queryParam.getPageSize()) || queryParam.getPageSize() < 1 ? 10 : queryParam.getPageSize(); + + List<Object> toolList = CollectionUtil.newArrayList(); + String classifyId = queryParam.getClassifyId(); + if (StrUtil.isNotBlank(classifyId)) { + //宸茬粡杩涘叆浜嗛�夊垁椤甸潰锛屽伐鍏峰垎绫诲凡缁忕‘瀹� + ToolsClassify toolsClassify = toolsClassifyService.getById(classifyId); + ToolParaType toolParaType = ToolParaType.fromValue(toolsClassify.getParaTypeFlag()); + matchTypeSelectTools(queryParam, toolList, toolParaType); + } else { + //绗竴娆¤繘鍏ラ�夊垁椤甸潰锛屾牴鎹垁鍏风畝绉板拰鐩村緞鍙傛暟鏌ヨ宸ュ叿鍒嗙被 List<ToolsClassify> classifyList = toolsClassifyService.list(new LambdaQueryWrapper<ToolsClassify>() - .eq(ToolsClassify::getAliasLabel, toolAliasName) + .eq(ToolsClassify::getAliasLabel, aliasLabel) .eq(ToolsClassify::getStatus, CommonConstant.STATUS_1)); if (CollectionUtil.isEmpty(classifyList)) { - return Result.error("鏈壘鍒板尮閰嶇殑宸ュ叿鍒嗙被"); + result.put("records", CollectionUtil.newArrayList()); + result.put("total", 0); + result.put("current", pageNo); + result.put("size", pageSize); + res.setResult(result); + return res; } - List<Object> toolList = CollectionUtil.newArrayList(); for (ToolsClassify classify : classifyList) { String paraTypeFlag = classify.getParaTypeFlag(); queryParam.setClassifyId(classify.getId()); queryParam.setDiameter(diameter); ToolParaType toolParaType = ToolParaType.fromValue(paraTypeFlag); - if (toolParaType != null) { - switch (toolParaType) { - case HOLE: - List<ParaHolesToolsVo> paraHoleToolsList = paraHoleToolsService.selectByClassifyAndDiameter(queryParam); - toolList.addAll(paraHoleToolsList); - break; - case MILL: - List<ParaMillToolVo> paraMillToolList = paraMillToolService.selectByClassifyAndDiameter(queryParam); - toolList.addAll(paraMillToolList); - break; - case TURNING: - List<ParaTurningToolsVo> paraTurningToolsList = paraTurningToolsService.selectByClassifyAndDiameter(queryParam); - toolList.addAll(paraTurningToolsList); - break; - default: - } - } + matchTypeSelectTools(queryParam, toolList, toolParaType); } - return Result.OK(toolList); + } + + // ====== 鍒嗛〉閫昏緫 start ====== + int total = toolList.size(); + int fromIndex = (pageNo - 1) * pageSize; + int toIndex = Math.min(fromIndex + pageSize, total); + + List<Object> pagedList; + if (fromIndex > total) { + pagedList = Collections.emptyList(); } else { - return Result.error("鍙傛暟鏍煎紡涓嶆纭�"); + pagedList = toolList.subList(fromIndex, toIndex); + } + + result.put("records", pagedList); + result.put("total", total); + result.put("current", pageNo); + result.put("size", pageSize); + res.setResult(result); + return res; + // ====== 鍒嗛〉閫昏緫 end ====== + } + + private void matchTypeSelectTools(ToolQueryParamDto queryParam, List<Object> toolList, ToolParaType toolParaType) { + if (toolParaType != null) { + String diameter = queryParam.getDiameter(); + switch (toolParaType) { + case HOLE: + List<ParaHolesToolsVo> paraHoleToolsList = paraHoleToolsService.selectByClassifyAndDiameter(queryParam); + toolList.addAll(paraHoleToolsList); + break; + case THREADING://铻虹汗鍒�鍏锋病鏈夌洿寰勫弬鏁帮紝濡傛灉浼犲叆鐩村緞锛岀洿鎺ョ暐杩� + if (StrUtil.isBlank(diameter)) { + List<ParaThreadingToolVo> paraThreadingToolList = paraThreadingToolService.selectByClassifyAndParam(queryParam); + toolList.addAll(paraThreadingToolList); + } + break; + case MILL: + List<ParaMillToolVo> paraMillToolList = paraMillToolService.selectByClassifyAndDiameter(queryParam); + toolList.addAll(paraMillToolList); + break; + case TURNING: + List<ParaTurningToolsVo> paraTurningToolsList = paraTurningToolsService.selectByClassifyAndDiameter(queryParam); + toolList.addAll(paraTurningToolsList); + break; + case BLADE://鍒�鐗囨病鏈夌洿寰勫弬鏁帮紝濡傛灉浼犲叆鐩村緞锛岀洿鎺ョ暐杩� + if (StrUtil.isBlank(diameter)) { + List<ParaBladeVo> paraBladeToolsList = paraBladeService.selectByClassifyAndParam(queryParam); + toolList.addAll(paraBladeToolsList); + } + break; + default: + } } } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java index 96d0f66..f369fd9 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/OutboundOrderConvert.java @@ -2,17 +2,25 @@ import org.jeecg.modules.tms.entity.OutboundOrder; import org.jeecg.modules.tms.entity.dto.OutboundOrderAndDetailDto; +import org.mapstruct.BeanMapping; import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; import org.mapstruct.factory.Mappers; /** * 浣跨敤 MapStruct 鏂瑰紡杩涜灞炴�у鍒� * 娉ㄦ剰涓嶈兘鏀惧湪 mybatis鎵弿鐨刴apper鍖呬笅闈紝鍚﹀垯浼氭姤閿� */ -@Mapper +@Mapper( + unmappedTargetPolicy = ReportingPolicy.IGNORE, // 蹇界暐鐩爣涓湭琚槧灏勭殑瀛楁 + componentModel = "spring" // 濡傛灉浣跨敤 Spring锛屽彲鐢熸垚 Spring 绠$悊鐨� Bean +) public interface OutboundOrderConvert { + OutboundOrderConvert INSTANCE = Mappers.getMapper(OutboundOrderConvert.class); + @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)// 蹇界暐 null 瀛楁 OutboundOrder convert(OutboundOrderAndDetailDto dto); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java index 561a4f2..8e88a03 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/convert/PreparationOrderConvert.java @@ -2,17 +2,24 @@ import org.jeecg.modules.tms.entity.PreparationOrder; import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto; +import org.mapstruct.BeanMapping; import org.mapstruct.Mapper; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.mapstruct.ReportingPolicy; import org.mapstruct.factory.Mappers; /** * 浣跨敤 MapStruct 鏂瑰紡杩涜灞炴�у鍒� * 娉ㄦ剰涓嶈兘鏀惧湪 mybatis鎵弿鐨刴apper鍖呬笅闈紝鍚﹀垯浼氭姤閿� */ -@Mapper +@Mapper( + unmappedTargetPolicy = ReportingPolicy.IGNORE, // 蹇界暐鐩爣涓湭琚槧灏勭殑瀛楁 + componentModel = "spring" // 濡傛灉浣跨敤 Spring锛屽彲鐢熸垚 Spring 绠$悊鐨� Bean +) public interface PreparationOrderConvert { PreparationOrderConvert INSTANCE = Mappers.getMapper(PreparationOrderConvert.class); + @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)// 蹇界暐 null 瀛楁 PreparationOrder convert(PreparationOrderAndDetailDto dto); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java index 99f9164..b8f107d 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; @@ -21,6 +22,7 @@ * @Version: V1.0 */ @Data +@Accessors(chain = true) @TableName("tms_preparation_order_detail") @ApiModel(value="tms_preparation_order_detail瀵硅薄", description="鍒�鍏峰噯澶囧崟鏄庣粏") public class PreparationOrderDetail implements Serializable { diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsStocktakingBoundDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsStocktakingBoundDetail.java index 9b22037..c1281d5 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsStocktakingBoundDetail.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsStocktakingBoundDetail.java @@ -131,6 +131,11 @@ @TableField(exist = false) private String classifyId; + @Dict(dicCode = "application_type") + @TableField(exist = false) + private String applicationType; + + diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/ToolQueryParamDto.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/ToolQueryParamDto.java index 77621b9..2305953 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/ToolQueryParamDto.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/ToolQueryParamDto.java @@ -9,13 +9,23 @@ */ @Data public class ToolQueryParamDto { - /**澶嶅悎鍙傛暟(宸ュ叿绠�绉�/鐩村緞鍙傛暟)锛屼緥濡傦細3E*/ - @ApiModelProperty(value = "澶嶅悎鍙傛暟(宸ュ叿绠�绉�/鐩村緞鍙傛暟)锛屼緥濡傦細3E") - private String param; + /**宸ュ叿绠�绉�*/ + @ApiModelProperty(value = "宸ュ叿绠�绉�") + private String aliasLabel; + /**鍒�鍏风洿寰�*/ + @ApiModelProperty(value = "鍒�鍏风洿寰�") + private String diameter; /**鍒�鍏峰垎绫籌D(涓嶇敤鍓嶇浼狅紝鍚庡彴璁板綍鍙傛暟鐢�)*/ private String classifyId; - /**鍒�鍏风洿寰�(涓嶇敤鍓嶇浼狅紝鍚庡彴璁板綍鍙傛暟鐢�)*/ - private String diameter; + /**宸ュ叿缂栫爜*/ + @ApiModelProperty(value = "宸ュ叿缂栫爜(tms_base_tool琛╰ool_code瀛楁)") + private String toolCode; + /**鍨嬪彿/鍥惧彿*/ + @ApiModelProperty(value = "鍨嬪彿/鍥惧彿") + private String toolModel; + /**涓枃鍚嶇О*/ + @ApiModelProperty(value = "涓枃鍚嶇О") + private String chineseName; /**鍒�鍏锋�婚暱*/ @ApiModelProperty(value = "鍒�鍏锋�婚暱") private String totalLength; @@ -23,7 +33,7 @@ @ApiModelProperty(value = "鍒�鍏锋潗鏂�") private String toolMaterial; /**鍒囧墛鍒冮暱*/ - @ApiModelProperty(value = "鍒囧墛鍒冮暱(瀛斿姞宸ュ垁鍏枫�侀摚鍓婂垁鍏�)") + @ApiModelProperty(value = "鍒囧墛鍒冮暱(瀛斿姞宸ュ垁鍏枫�侀摚鍓婂垁鍏枫�佽灪绾瑰垁鍏�)") private String edgeLength; /**鍒冩暟(瀛斿姞宸ュ垁鍏�)*/ @ApiModelProperty(value = "鍒冩暟(瀛斿姞宸ュ垁鍏�)") @@ -69,7 +79,7 @@ @ApiModelProperty(value = "鎮几闀垮害(閾e墛鍒�鍏�)") private String overhangingLength; /**铻鸿窛*/ - @ApiModelProperty(value = "铻鸿窛(閾e墛鍒�鍏�)") + @ApiModelProperty(value = "铻鸿窛(閾e墛鍒�鍏枫�佽灪绾瑰垁鍏枫�佸垁鐗�)") private String pitch; /**鏈�灏忓姞宸ョ洿寰�*/ @ApiModelProperty(value = "鏈�灏忓姞宸ョ洿寰�(閾e墛鍒�鍏�)") @@ -78,7 +88,7 @@ @ApiModelProperty(value = "閰嶅鍒�鐗囧彿(杞﹀墛鍒�鍏�)") private String matchingNumber; /**鍒囧墛鏂瑰悜*/ - @ApiModelProperty(value = "鍒囧墛鏂瑰悜(杞﹀墛鍒�鍏�)") + @ApiModelProperty(value = "鍒囧墛鏂瑰悜(杞﹀墛鍒�鍏枫�佸垁鐗�)") private String cuttingDirection; /**鍒�鐗囧昂瀵�*/ @ApiModelProperty(value = "鍒�鐗囧昂瀵�(杞﹀墛鍒�鍏�)") @@ -87,7 +97,7 @@ @ApiModelProperty(value = "闀楁潌鐩村緞(杞﹀墛鍒�鍏�)") private String boringBarDiameter; /**鍒�鏉嗛暱搴�*/ - @ApiModelProperty(value = "鍒�鏉嗛暱搴�(杞﹀墛鍒�鍏�)") + @ApiModelProperty(value = "鍒�鏉嗛暱搴�(杞﹀墛鍒�鍏枫�佸垁鐗�)") private String bladeLength; /**鍒�鏉嗘柟鍚�*/ @ApiModelProperty(value = "鍒�鏉嗘柟鍚�(杞﹀墛鍒�鍏�)") @@ -96,7 +106,7 @@ @ApiModelProperty(value = "鍒�鏉嗛珮搴�(杞﹀墛鍒�鍏�)") private String bladeHeight; /**鍒�鏉嗗搴�*/ - @ApiModelProperty(value = "鍒�鏉嗗搴�(杞﹀墛鍒�鍏�)") + @ApiModelProperty(value = "鍒�鏉嗗搴�(杞﹀墛鍒�鍏枫�佸垁鐗�)") private String bladeWide; /**鍒�鐗囨Ы瀹�*/ @ApiModelProperty(value = "鍒�鐗囨Ы瀹�(杞﹀墛鍒�鍏�)") @@ -108,9 +118,81 @@ @ApiModelProperty(value = "鏈�澶у垏妲芥繁搴�(杞﹀墛鍒�鍏�)") private String maxDepth; /**鍒�鏉垮帤搴�*/ - @ApiModelProperty(value = "鍒�鏉垮帤搴�(杞﹀墛鍒�鍏�)") + @ApiModelProperty(value = "鍒�鏉垮帤搴�(杞﹀墛鍒�鍏枫�佸垁鐗囧帤搴�)") private String bladeThickness; /**鏈�灏忓姞宸ョ洿寰�*/ @ApiModelProperty(value = "鏈�灏忓姞宸ョ洿寰�(杞﹀墛鍒�鍏�)") private String minDiameter; + /**铻虹汗浠e彿*/ + @ApiModelProperty(value = "铻虹汗浠e彿(铻虹汗鍒�鍏�)") + private String threadCode; + /**铻虹汗鏃嬪悜*/ + @ApiModelProperty(value = "铻虹汗鏃嬪悜(铻虹汗鍒�鍏�)") + private String rotationDirection; + /**铻虹汗鍏樊甯︿唬鍙�/绮惧害绛夌骇*/ + @ApiModelProperty(value = "铻虹汗鍏樊甯︿唬鍙�/绮惧害绛夌骇(铻虹汗鍒�鍏�)") + private String tolerancezoneLevel; + /**澶栧瀷灏哄*/ + @ApiModelProperty(value = "澶栧瀷灏哄(铻虹汗鍒�鍏�)") + private String externalDimensions; + /**鏌勯儴瑙勬牸*/ + @ApiModelProperty(value = "鏌勯儴瑙勬牸(铻虹汗鍒�鍏�)") + private String handleSpecifications; + /**铻哄瓟绫诲瀷*/ + @ApiModelProperty(value = "铻哄瓟绫诲瀷(铻虹汗鍒�鍏�)") + private String screwHoleType; + /**铻虹汗鏍囧噯*/ + @ApiModelProperty(value = "铻虹汗鏍囧噯(铻虹汗鍒�鍏枫�佸垁鐗�)") + private String threadStandard; + /**鎺掑睉妲藉瀷*/ + @ApiModelProperty(value = "鎺掑睉妲藉瀷(铻虹汗鍒�鍏�)") + private String fluteSoltType; + /**铻虹汗绫诲瀷*/ + @ApiModelProperty(value = "铻虹汗绫诲瀷(铻虹汗鍒�鍏�)") + private String threadType; + /**瀵煎悜灏哄*/ + @ApiModelProperty(value = "瀵煎悜灏哄(铻虹汗鍒�鍏�)") + private String guidingSize; + /**杩炴帴瀛斿緞*/ + @ApiModelProperty(value = "杩炴帴瀛斿緞(铻虹汗鍒�鍏�)") + private String connectionAperture; + /**杩炴帴閿Ы*/ + @ApiModelProperty(value = "杩炴帴閿Ы(铻虹汗鍒�鍏�)") + private String connectingKeyway; + /**鍒�鐗囧舰鐘�*/ + @ApiModelProperty(value = "鍒�鐗囧舰鐘�(鍒�鐗�)") + private String bladeShape; + /**鍒囧墛鍒冩暟*/ + @ApiModelProperty(value = "鍒囧墛鍒冩暟(鍒�鐗�)") + private String cuttingEdgeCount; + /**澶瑰浐鍨嬪紡*/ + @ApiModelProperty(value = "澶瑰浐鍨嬪紡(鍒�鐗�)") + private String clampingType; + /**鍒�灏朢*/ + @ApiModelProperty(value = "鍒�灏朢(鍒�鐗�)") + private String noseAngleR; + /**鍔犲伐鍒嗙被*/ + @ApiModelProperty(value = "鍔犲伐鍒嗙被(鍒�鐗�)") + private String processingClassify; + /**鍒�鐗囧悗瑙�*/ + @ApiModelProperty(value = "鍒�鐗囧悗瑙�(鍒�鐗�)") + private String bladePosterior; + /**鍒�鐗囧昂瀵�*/ + @ApiModelProperty(value = "鍒�鐗囧昂瀵�(鍒�鐗�)") + private String bladeSize; + /**鍐呭铻虹汗*/ + @ApiModelProperty(value = "鍐呭铻虹汗(鍒�鐗�)") + private String inOutThread; + /**鐗欏瀷瑙掑害*/ + @ApiModelProperty(value = "鐗欏瀷瑙掑害(鍒�鐗�)") + private String dentalAngle; + /**鏈�灏忓姞宸ュ唴铻虹汗鍏О鐩村緞*/ + @ApiModelProperty(value = "鏈�灏忓姞宸ュ唴铻虹汗鍏О鐩村緞(鍒�鐗�)") + private String minInternalThread; + + //鍒嗛〉鍙傛暟 + @ApiModelProperty(value = "椤电爜") + private Integer pageNo = 1; // 褰撳墠椤电爜锛岄粯璁ょ涓�椤� + @ApiModelProperty(value = "姣忛〉鏁伴噺") + private Integer pageSize = 10; // 姣忛〉鏁伴噺锛岄粯璁�10鏉� } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaBladeMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaBladeMapper.java index 9a186f5..85fdf83 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaBladeMapper.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaBladeMapper.java @@ -2,9 +2,14 @@ import java.util.List; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.commons.math3.analysis.function.Constant; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.tms.entity.ParaBlade; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.tms.entity.vo.ParaBladeVo; /** * @Description: tms_para_blade @@ -14,4 +19,5 @@ */ public interface ParaBladeMapper extends BaseMapper<ParaBlade> { + List<ParaBladeVo> selectByClassifyAndParam(@Param(Constants.WRAPPER) Wrapper<ParaBlade> queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaHoleToolsMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaHoleToolsMapper.java index d906762..d3f1199 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaHoleToolsMapper.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaHoleToolsMapper.java @@ -2,6 +2,7 @@ import java.util.List; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; @@ -18,5 +19,5 @@ public interface ParaHoleToolsMapper extends BaseMapper<ParaHoleTools> { List<ParaHolesToolsVo> selectByClassifyAndDiameter(@Param(Constants.WRAPPER) - LambdaQueryWrapper<ParaHolesToolsVo> queryWrapper); + Wrapper<ParaHoleTools> queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaMillToolMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaMillToolMapper.java index 3298150..775a9c5 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaMillToolMapper.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaMillToolMapper.java @@ -2,7 +2,7 @@ import java.util.List; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.tms.entity.ParaMillTool; @@ -18,5 +18,5 @@ public interface ParaMillToolMapper extends BaseMapper<ParaMillTool> { List<ParaMillToolVo> selectByClassifyAndDiameter(@Param(Constants.WRAPPER) - LambdaQueryWrapper<ParaMillTool> queryWrapper); + Wrapper<ParaMillTool> queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaThreadingToolMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaThreadingToolMapper.java index 9e6e997..7a64693 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaThreadingToolMapper.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaThreadingToolMapper.java @@ -2,9 +2,13 @@ import java.util.List; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.tms.entity.ParaThreadingTool; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.tms.entity.vo.ParaThreadingToolVo; /** * @Description: tms_para_threading_tool @@ -14,4 +18,5 @@ */ public interface ParaThreadingToolMapper extends BaseMapper<ParaThreadingTool> { + List<ParaThreadingToolVo> selectByClassifyAndParam(@Param(Constants.WRAPPER) Wrapper<ParaThreadingTool> queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaTurningToolsMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaTurningToolsMapper.java index ed9b386..4c78fee 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaTurningToolsMapper.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/ParaTurningToolsMapper.java @@ -2,7 +2,7 @@ import java.util.List; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.tms.entity.ParaTurningTools; @@ -18,5 +18,5 @@ public interface ParaTurningToolsMapper extends BaseMapper<ParaTurningTools> { List<ParaTurningToolsVo> selectByClassifyAndDiameter(@Param(Constants.WRAPPER) - LambdaQueryWrapper<ParaTurningTools> queryWrapper); + Wrapper<ParaTurningTools> queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml index c6df81e..c51a68b 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml @@ -366,20 +366,22 @@ <select id="pageWithLedgerAndConfig" resultType="org.jeecg.modules.tms.entity.vo.StocktakingPoundVo"> SELECT t.id, - t.tool_id AS toolId, - t1.classify_id AS classifyId, + t.create_time AS createTime, t.tool_code AS toolCode, t2.tool_model AS toolModel, t2.parama_table_name AS paramaTableName, - t1.total_count AS totalCount, - t1.available_count AS availableCount, + t.tool_id AS toolId, t3.position_code AS positionCode, t3.application_type AS applicationType, - t2.chinese_name AS chineseName, + t3.chinese_name AS chineseName, t3.supplier_id AS supplierId, t3.storage_location AS storageLocation, t3.main_unit AS mainUnit, - + t1.available_count AS availableCount, + t1.total_count AS totalCount, + t3.warehouse_id AS warehouseId, + t4.classify_id AS classifyId, + t3.province_city AS provinceCity, <!-- 鍔ㄦ�佸瓧娈甸�夋嫨锛屼娇鐢ㄨ〃鍒悕锛堥渶纭繚琛ㄥ凡鍏宠仈锛� --> <choose> <when test="ew.paramNameValuePairs.paramaTableName == '1'"> diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaBladeMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaBladeMapper.xml index edaca31..c50113c 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaBladeMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaBladeMapper.xml @@ -2,4 +2,43 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.tms.mapper.ParaBladeMapper"> + <select id="selectByClassifyAndParam" resultType="org.jeecg.modules.tms.entity.vo.ParaBladeVo"> + SELECT + t.id, + t.classify_id AS classifyId, + t2.classify_id AS classifyNum, + t2.type_name AS classifyName, + t1.id AS toolId, + t1.tool_code AS toolCode, + t1.parama_table_name AS paramaTableName, + t.sign_code AS signCode, + t.chinese_name AS chineseName, + t.foreign_language_name AS foreignLanguageName, + t.standard_level AS standardLevel, + t.standard_code AS standardCode, + t.position_code AS positionCode, + t.tool_model AS toolModel, + t.tool_material AS toolMaterial, + t.part_material AS partMaterial, + t.technical_conditions AS technicalConditions, + t.conditions_info AS conditionsInfo, + t.brand, + t.types, + <!-- 鍒�鐗囩壒鏈夊瓧娈� --> + t.blade_shape AS bladeShape, + t.cutting_edge_count AS cuttingEdgeCount, + t.clamping_type AS clampingType, + t.nose_angle_r AS noseAngleR, + t.processing_classify AS processingClassify, + t.blade_posterior AS bladePosterior, + t.blade_size AS bladeSize, + t.in_out_thread AS inOutThread, + t.dental_angle AS dentalAngle, + t.min_internal_thread AS minInternalThread, + t.thread_standard AS threadStandard + FROM tms_para_blade t + LEFT JOIN tms_base_tools t1 ON t.tool_code = t1.id + LEFT JOIN tms_tools_classify t2 ON t.classify_id = t2.id + ${ew.customSqlSegment} + </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaHoleToolsMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaHoleToolsMapper.xml index f5d2a9c..75bb798 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaHoleToolsMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaHoleToolsMapper.xml @@ -10,6 +10,7 @@ t2.type_name AS classifyName, t1.id AS toolId, t1.tool_code AS toolCode, + t1.parama_table_name AS paramaTableName, t.sign_code AS signCode, t.chinese_name AS chineseName, t.foreign_language_name AS foreignLanguageName, diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaMillToolMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaMillToolMapper.xml index 544f022..aee5ca4 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaMillToolMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaMillToolMapper.xml @@ -9,7 +9,8 @@ t2.classify_id AS classifyNum, t2.type_name AS classifyName, t1.id AS toolId, - t.tool_code AS toolCode, + t1.tool_code AS toolCode, + t1.parama_table_name AS paramaTableName, t.sign_code AS signCode, t.chinese_name AS chineseName, t.foreign_language_name AS foreignLanguageName, diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaThreadingToolMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaThreadingToolMapper.xml index 83456b7..2fdf9fc 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaThreadingToolMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaThreadingToolMapper.xml @@ -2,4 +2,49 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.tms.mapper.ParaThreadingToolMapper"> + <select id="selectByClassifyAndParam" resultType="org.jeecg.modules.tms.entity.vo.ParaThreadingToolVo"> + SELECT + t.id, + t.classify_id AS classifyId, + t2.classify_id AS classifyNum, + t2.type_name AS classifyName, + t1.id AS toolId, + t1.tool_code AS toolCode, + t1.parama_table_name AS paramaTableName, + t.sign_code AS signCode, + t.chinese_name AS chineseName, + t.foreign_language_name AS foreignLanguageName, + t.standard_level AS standardLevel, + t.standard_code AS standardCode, + t.position_code AS positionCode, + t.tool_model AS toolModel, + t.edge_length AS edgeLength, + t.total_length AS totalLength, + t.tool_material AS toolMaterial, + t.part_material AS partMaterial, + t.paintcoat_flag AS paintcoatFlag, + t.handle_specifications AS handleSpecifications, + t.cooling_method AS coolingMethod, + t.technical_conditions AS technicalConditions, + t.conditions_info AS conditionsInfo, + t.brand, + t.types, + <!-- 铻虹汗鍒�鍏风壒鏈夊瓧娈� --> + t.thread_code AS threadCode, + t.rotation_direction AS rotationDirection, + t.tolerancezone_level AS tolerancezoneLevel, + t.external_dimensions AS externalDimensions, + t.handle_specifications AS handleSpecifications, + t.screw_hole_type AS screwHoleType, + t.thread_standard AS threadStandard, + t.flute_solt_type AS fluteSoltType, + t.thread_type AS threadType, + t.guiding_size AS guidingSize, + t.connection_aperture AS connectionAperture, + t.connecting_keyway AS connectingKeyway + FROM tms_para_threading_tool t + LEFT JOIN tms_base_tools t1 ON t.tool_code = t1.id + LEFT JOIN tms_tools_classify t2 ON t.classify_id = t2.id + ${ew.customSqlSegment} + </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaTurningToolsMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaTurningToolsMapper.xml index 6b78110..1cf19ef 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaTurningToolsMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ParaTurningToolsMapper.xml @@ -10,6 +10,7 @@ t2.type_name AS classifyName, t1.id AS toolId, t1.tool_code AS toolCode, + t1.parama_table_name AS paramaTableName, t.sign_code AS signCode, t.chinese_name AS chineseName, t.foreign_language_name AS foreignLanguageName, diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolsStocktakingBoundDetailMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolsStocktakingBoundDetailMapper.xml index 0b5066b..fb9d1de 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolsStocktakingBoundDetailMapper.xml +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/ToolsStocktakingBoundDetailMapper.xml @@ -17,12 +17,12 @@ <select id="selectByMainId" resultType="org.jeecg.modules.tms.entity.ToolsStocktakingBoundDetail"> SELECT t.*, - t2.tool_code AS toolCode, <!-- 淇锛氬皢t1鏀逛负t2 --> t2.parama_table_name paramaTableName, - t2.classify_id AS classifyId, + t4.classify_id AS classifyId, t3.storage_location AS storageLocation, t3.chinese_name AS chineseName, t2.tool_model AS toolModel, + t3.application_type AS applicationType, t3.supplier_id AS supplierId, <choose> @@ -56,9 +56,14 @@ c.part_material AS partMaterial </otherwise> </choose> + FROM tms_stocktaking_bound_detail t - LEFT JOIN tms_base_tools t2 on t.tool_id = t2.id - LEFT JOIN tms_tools_config_property t3 on t3.tool_code = t2.id + left join tms_tool_ledger t1 ON t1.tool_id= t.tool_Code + left join tms_tool_ledger_detail t5 ON t5.tool_Code= t.tool_id + left join tms_tools_classify t4 on t4.id = t1.classify_id + left join tms_base_tools t2 on t2.id = t.tool_code + left join tms_tools_config_property t3 on t3.tool_code = t.tool_code + <choose> <when test="ew.paramNameValuePairs.paramaTableName == '1'"> diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaBladeService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaBladeService.java index e0ece86..832accf 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaBladeService.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaBladeService.java @@ -2,6 +2,10 @@ import org.jeecg.modules.tms.entity.ParaBlade; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.tms.entity.dto.ToolQueryParamDto; +import org.jeecg.modules.tms.entity.vo.ParaBladeVo; + +import java.util.List; /** * @Description: tms_para_blade @@ -11,4 +15,5 @@ */ public interface IParaBladeService extends IService<ParaBlade> { + List<ParaBladeVo> selectByClassifyAndParam(ToolQueryParamDto queryParam); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaThreadingToolService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaThreadingToolService.java index 625d9a3..1ee565e 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaThreadingToolService.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IParaThreadingToolService.java @@ -2,6 +2,10 @@ import org.jeecg.modules.tms.entity.ParaThreadingTool; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.tms.entity.dto.ToolQueryParamDto; +import org.jeecg.modules.tms.entity.vo.ParaThreadingToolVo; + +import java.util.List; /** * @Description: tms_para_threading_tool @@ -11,4 +15,5 @@ */ public interface IParaThreadingToolService extends IService<ParaThreadingTool> { + List<ParaThreadingToolVo> selectByClassifyAndParam(ToolQueryParamDto queryParam); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java index 3c2026c..9621ba9 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java @@ -40,4 +40,6 @@ List<String> convertToOutboundOrder(List<String> preparationOrderIds); IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap); + + void addPreparationOrderFromDnc(PreparationOrderAndDetailDto preparationOrderAndDetailDto); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java index 1a8fef7..2ef6f18 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java @@ -85,6 +85,8 @@ private OutboundOrderMapper outboundOrderMapper; @Autowired private OutboundDetailMapper outboundDetailMapper; + @Autowired + private OutboundOrderConvert outboundOrderConvert; @Override @Transactional(rollbackFor = Exception.class) @@ -105,7 +107,7 @@ @Override @Transactional(rollbackFor = Exception.class) public void addTotal(OutboundOrderAndDetailDto outboundOrder) { - OutboundOrder order = OutboundOrderConvert.INSTANCE.convert(outboundOrder); + OutboundOrder order = outboundOrderConvert.convert(outboundOrder); order.setHandler(Objects.requireNonNull(getCurrentUser()).getId()); order.setOutNum(businessCodeRuleService.generateBusinessCodeSeq("outBoundOrder")); order.setOrderStatus(OutBillStatus.DRAFT.getValue()); @@ -157,7 +159,7 @@ //鍒犻櫎鎵�鏈夋槑缁� outboundDetailService.remove(new LambdaQueryWrapper<OutboundDetail>() .eq(OutboundDetail::getOutStorehouseId, outboundOrder.getId())); - OutboundOrder outboundOrderUpdate = OutboundOrderConvert.INSTANCE.convert(outboundOrder); + OutboundOrder outboundOrderUpdate = outboundOrderConvert.convert(outboundOrder); outboundOrderMapper.updateById(outboundOrderUpdate); List<OutboundDetail> detailList = CollectionUtil.newArrayList(); outboundOrder.getOutboundDetailList().forEach(item->{ diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaBladeServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaBladeServiceImpl.java index c4cb7c3..f0fd1b8 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaBladeServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaBladeServiceImpl.java @@ -1,11 +1,19 @@ package org.jeecg.modules.tms.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.jeecg.modules.tms.entity.ParaBlade; +import org.jeecg.modules.tms.entity.dto.ToolQueryParamDto; +import org.jeecg.modules.tms.entity.vo.ParaBladeVo; import org.jeecg.modules.tms.mapper.ParaBladeMapper; import org.jeecg.modules.tms.service.IParaBladeService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.Collections; +import java.util.List; /** * @Description: tms_para_blade @@ -16,4 +24,32 @@ @Service public class ParaBladeServiceImpl extends ServiceImpl<ParaBladeMapper, ParaBlade> implements IParaBladeService { + @Override + public List<ParaBladeVo> selectByClassifyAndParam(ToolQueryParamDto paramDto) { + QueryWrapper<ParaBlade> queryWrapper = Wrappers.query(); + if (paramDto != null) { + // 鍒�鐗囩浉鍏冲弬鏁板瓧娈� + queryWrapper + .like(StrUtil.isNotBlank(paramDto.getToolCode()), "t1.tool_code", paramDto.getToolCode()) + .like(StrUtil.isNotBlank(paramDto.getToolModel()), "t.tool_model", paramDto.getToolModel()) + .like(StrUtil.isNotBlank(paramDto.getChineseName()), "t.chinese_name", paramDto.getChineseName()) + .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), "t.classify_id", paramDto.getClassifyId()) + .eq(StrUtil.isNotBlank(paramDto.getPitch()), "t.pitch", paramDto.getPitch()) + .eq(StrUtil.isNotBlank(paramDto.getCuttingDirection()), "t.cutting_direction", paramDto.getCuttingDirection()) + .eq(StrUtil.isNotBlank(paramDto.getBladeLength()), "t.blade_length", paramDto.getBladeLength()) + .eq(StrUtil.isNotBlank(paramDto.getBladeWide()), "t.blade_wide", paramDto.getBladeWide()) + .eq(StrUtil.isNotBlank(paramDto.getBladeShape()), "t.blade_shape", paramDto.getBladeShape()) + .eq(StrUtil.isNotBlank(paramDto.getCuttingEdgeCount()), "t.cutting_edge_count", paramDto.getCuttingEdgeCount()) + .eq(StrUtil.isNotBlank(paramDto.getClampingType()), "t.clamping_type", paramDto.getClampingType()) + .eq(StrUtil.isNotBlank(paramDto.getNoseAngleR()), "t.nose_angle_r", paramDto.getNoseAngleR()) + .eq(StrUtil.isNotBlank(paramDto.getProcessingClassify()), "t.processing_classify", paramDto.getProcessingClassify()) + .eq(StrUtil.isNotBlank(paramDto.getBladePosterior()), "t.blade_posterior", paramDto.getBladePosterior()) + .eq(StrUtil.isNotBlank(paramDto.getBladeSize()), "t.blade_size", paramDto.getBladeSize()) + .eq(StrUtil.isNotBlank(paramDto.getInOutThread()), "t.in_out_thread", paramDto.getInOutThread()) + .eq(StrUtil.isNotBlank(paramDto.getDentalAngle()), "t.dental_angle", paramDto.getDentalAngle()) + .eq(StrUtil.isNotBlank(paramDto.getMinInternalThread()), "t.min_internal_thread", paramDto.getMinInternalThread()) + .eq(StrUtil.isNotBlank(paramDto.getThreadStandard()), "t.thread_standard", paramDto.getThreadStandard()); + } + return this.baseMapper.selectByClassifyAndParam(queryWrapper); + } } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaHoleToolsServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaHoleToolsServiceImpl.java index 2de5809..660b368 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaHoleToolsServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaHoleToolsServiceImpl.java @@ -27,23 +27,26 @@ @Override public List<ParaHolesToolsVo> selectByClassifyAndDiameter(ToolQueryParamDto paramDto) { - LambdaQueryWrapper<ParaHolesToolsVo> queryWrapper = new LambdaQueryWrapper<>(); + QueryWrapper<ParaHoleTools> queryWrapper = Wrappers.query(); if (paramDto != null) { // 瀛斿姞宸ュ垁鍏风浉鍏冲弬鏁板瓧娈� queryWrapper - .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), ParaHolesToolsVo::getClassifyId, paramDto.getClassifyId()) - .eq(StrUtil.isNotBlank(paramDto.getDiameter()), ParaHolesToolsVo::getDiameter, paramDto.getDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getTotalLength()), ParaHolesToolsVo::getTotalLength, paramDto.getTotalLength()) - .eq(StrUtil.isNotBlank(paramDto.getToolMaterial()), ParaHolesToolsVo::getToolMaterial, paramDto.getToolMaterial()) - .eq(StrUtil.isNotBlank(paramDto.getEdgeLength()), ParaHolesToolsVo::getEdgeLength, paramDto.getEdgeLength()) - .eq(StrUtil.isNotBlank(paramDto.getBladeCount()), ParaHolesToolsVo::getBladeCount, paramDto.getBladeCount()) - .eq(StrUtil.isNotBlank(paramDto.getEffectiveLength()), ParaHolesToolsVo::getEffectiveLength, paramDto.getEffectiveLength()) - .eq(StrUtil.isNotBlank(paramDto.getLatestBoringDiameter()), ParaHolesToolsVo::getLatestBoringDiameter, paramDto.getLatestBoringDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getMaxBoringDiameter()), ParaHolesToolsVo::getMaxBoringDiameter, paramDto.getMaxBoringDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getKnifeDiameter()), ParaHolesToolsVo::getKnifeDiameter, paramDto.getKnifeDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getBoreDiameter()), ParaHolesToolsVo::getBoreDiameter, paramDto.getBoreDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getHeadsNumber()), ParaHolesToolsVo::getHeadsNumber, paramDto.getHeadsNumber()) - .eq(StrUtil.isNotBlank(paramDto.getSmallDiameter()), ParaHolesToolsVo::getSmallDiameter, paramDto.getSmallDiameter()); + .like(StrUtil.isNotBlank(paramDto.getToolCode()), "t1.tool_code", paramDto.getToolCode()) + .like(StrUtil.isNotBlank(paramDto.getToolModel()), "t.tool_model", paramDto.getToolModel()) + .like(StrUtil.isNotBlank(paramDto.getChineseName()), "t.chinese_name", paramDto.getChineseName()) + .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), "t.classify_id", paramDto.getClassifyId()) + .eq(StrUtil.isNotBlank(paramDto.getDiameter()), "t.diameter", paramDto.getDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getTotalLength()), "t.total_length", paramDto.getTotalLength()) + .eq(StrUtil.isNotBlank(paramDto.getToolMaterial()), "t.tool_material", paramDto.getToolMaterial()) + .eq(StrUtil.isNotBlank(paramDto.getEdgeLength()), "t.edge_length", paramDto.getEdgeLength()) + .eq(StrUtil.isNotBlank(paramDto.getBladeCount()), "t.blade_count", paramDto.getBladeCount()) + .eq(StrUtil.isNotBlank(paramDto.getEffectiveLength()), "t.effective_length", paramDto.getEffectiveLength()) + .eq(StrUtil.isNotBlank(paramDto.getLatestBoringDiameter()), "t.latest_boring_diameter", paramDto.getLatestBoringDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getMaxBoringDiameter()), "t.max_boring_diameter", paramDto.getMaxBoringDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getKnifeDiameter()), "t.knife_diameter", paramDto.getKnifeDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getBoreDiameter()), "t.bore_diameter", paramDto.getBoreDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getHeadsNumber()), "t.heads_number", paramDto.getHeadsNumber()) + .eq(StrUtil.isNotBlank(paramDto.getSmallDiameter()), "t.small_diameter", paramDto.getSmallDiameter()); } return this.baseMapper.selectByClassifyAndDiameter(queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaMillToolServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaMillToolServiceImpl.java index 35778ed..2943246 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaMillToolServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaMillToolServiceImpl.java @@ -2,6 +2,8 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.jeecg.modules.tms.entity.ParaMillTool; import org.jeecg.modules.tms.entity.dto.ToolQueryParamDto; import org.jeecg.modules.tms.entity.vo.ParaMillToolVo; @@ -25,24 +27,27 @@ @Override public List<ParaMillToolVo> selectByClassifyAndDiameter(ToolQueryParamDto paramDto) { - LambdaQueryWrapper<ParaMillTool> queryWrapper = new LambdaQueryWrapper<>(); + QueryWrapper<ParaMillTool> queryWrapper = Wrappers.query(); if (paramDto != null) { //閾e墛鍒�鍏风浉鍏冲弬鏁板瓧娈� queryWrapper - .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), ParaMillTool::getClassifyId, paramDto.getClassifyId()) - .eq(StrUtil.isNotBlank(paramDto.getDiameter()), ParaMillTool::getDiameter, paramDto.getDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getTotalLength()), ParaMillTool::getTotalLength, paramDto.getTotalLength()) - .eq(StrUtil.isNotBlank(paramDto.getToolMaterial()), ParaMillTool::getToolMaterial, paramDto.getToolMaterial()) - .eq(StrUtil.isNotBlank(paramDto.getEdgeLength()), ParaMillTool::getEdgeLength, paramDto.getEdgeLength()) - .eq(StrUtil.isNotBlank(paramDto.getNumberOfTeeth()), ParaMillTool::getNumberOfTeeth, paramDto.getNumberOfTeeth()) - .eq(StrUtil.isNotBlank(paramDto.getNeckDiameter()), ParaMillTool::getNeckDiameter, paramDto.getNeckDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getSmallDiameter()), ParaMillTool::getSmallDiameter, paramDto.getSmallDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getHandleLength()), ParaMillTool::getHandleLength, paramDto.getHandleLength()) - .eq(StrUtil.isNotBlank(paramDto.getDeepestDepth()), ParaMillTool::getDeepestDepth, paramDto.getDeepestDepth()) - .eq(StrUtil.isNotBlank(paramDto.getHandleNeckLength()), ParaMillTool::getHandleNeckLength, paramDto.getHandleNeckLength()) - .eq(StrUtil.isNotBlank(paramDto.getOverhangingLength()), ParaMillTool::getOverhangingLength, paramDto.getOverhangingLength()) - .eq(StrUtil.isNotBlank(paramDto.getPitch()), ParaMillTool::getPitch, paramDto.getPitch()) - .eq(StrUtil.isNotBlank(paramDto.getRecentlyDiameter()), ParaMillTool::getRecentlyDiameter, paramDto.getRecentlyDiameter()); + .like(StrUtil.isNotBlank(paramDto.getToolCode()), "t1.tool_code", paramDto.getToolCode()) + .like(StrUtil.isNotBlank(paramDto.getToolModel()), "t.tool_model", paramDto.getToolModel()) + .like(StrUtil.isNotBlank(paramDto.getChineseName()), "t.chinese_name", paramDto.getChineseName()) + .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), "t.classify_id", paramDto.getClassifyId()) + .eq(StrUtil.isNotBlank(paramDto.getDiameter()), "t.diameter", paramDto.getDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getTotalLength()), "t.total_length", paramDto.getTotalLength()) + .eq(StrUtil.isNotBlank(paramDto.getToolMaterial()), "t.tool_material", paramDto.getToolMaterial()) + .eq(StrUtil.isNotBlank(paramDto.getEdgeLength()), "t.edge_length", paramDto.getEdgeLength()) + .eq(StrUtil.isNotBlank(paramDto.getNumberOfTeeth()), "t.number_of_teeth", paramDto.getNumberOfTeeth()) + .eq(StrUtil.isNotBlank(paramDto.getNeckDiameter()), "t.neck_diameter", paramDto.getNeckDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getSmallDiameter()), "t.small_diameter", paramDto.getSmallDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getHandleLength()), "t.handle_length", paramDto.getHandleLength()) + .eq(StrUtil.isNotBlank(paramDto.getDeepestDepth()), "t.deepest_depth", paramDto.getDeepestDepth()) + .eq(StrUtil.isNotBlank(paramDto.getHandleNeckLength()), "t.handle_neck_length", paramDto.getHandleNeckLength()) + .eq(StrUtil.isNotBlank(paramDto.getOverhangingLength()), "t.overhanging_length", paramDto.getOverhangingLength()) + .eq(StrUtil.isNotBlank(paramDto.getPitch()), "t.pitch", paramDto.getPitch()) + .eq(StrUtil.isNotBlank(paramDto.getRecentlyDiameter()), "t.recently_diameter", paramDto.getRecentlyDiameter()); } return this.baseMapper.selectByClassifyAndDiameter(queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaThreadingToolServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaThreadingToolServiceImpl.java index 7ec1e9f..dffea5d 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaThreadingToolServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaThreadingToolServiceImpl.java @@ -1,11 +1,19 @@ package org.jeecg.modules.tms.service.impl; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.jeecg.modules.tms.entity.ParaThreadingTool; +import org.jeecg.modules.tms.entity.dto.ToolQueryParamDto; +import org.jeecg.modules.tms.entity.vo.ParaThreadingToolVo; import org.jeecg.modules.tms.mapper.ParaThreadingToolMapper; import org.jeecg.modules.tms.service.IParaThreadingToolService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.Collections; +import java.util.List; /** * @Description: tms_para_threading_tool @@ -16,4 +24,30 @@ @Service public class ParaThreadingToolServiceImpl extends ServiceImpl<ParaThreadingToolMapper, ParaThreadingTool> implements IParaThreadingToolService { + @Override + public List<ParaThreadingToolVo> selectByClassifyAndParam(ToolQueryParamDto paramDto) { + QueryWrapper<ParaThreadingTool> queryWrapper = Wrappers.query(); + if (paramDto != null) { + // 铻虹汗鍒�鍏风浉鍏冲弬鏁板瓧娈� + queryWrapper + .like(StrUtil.isNotBlank(paramDto.getToolCode()), "t1.tool_code", paramDto.getToolCode()) + .like(StrUtil.isNotBlank(paramDto.getToolModel()), "t.tool_model", paramDto.getToolModel()) + .like(StrUtil.isNotBlank(paramDto.getChineseName()), "t.chinese_name", paramDto.getChineseName()) + .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), "t.classify_id", paramDto.getClassifyId()) + .eq(StrUtil.isNotBlank(paramDto.getThreadCode()), "t.thread_code", paramDto.getThreadCode()) + .eq(StrUtil.isNotBlank(paramDto.getPitch()), "t.pitch", paramDto.getPitch()) + .eq(StrUtil.isNotBlank(paramDto.getRotationDirection()), "t.rotation_direction", paramDto.getRotationDirection()) + .eq(StrUtil.isNotBlank(paramDto.getTolerancezoneLevel()), "t.tolerancezone_level", paramDto.getTolerancezoneLevel()) + .eq(StrUtil.isNotBlank(paramDto.getExternalDimensions()), "t.external_dimensions", paramDto.getExternalDimensions()) + .eq(StrUtil.isNotBlank(paramDto.getHandleSpecifications()), "t.handle_specifications", paramDto.getHandleSpecifications()) + .eq(StrUtil.isNotBlank(paramDto.getScrewHoleType()), "t.screw_hole_type", paramDto.getScrewHoleType()) + .eq(StrUtil.isNotBlank(paramDto.getThreadStandard()), "t.thread_standard", paramDto.getThreadStandard()) + .eq(StrUtil.isNotBlank(paramDto.getFluteSoltType()), "t.flute_solt_type", paramDto.getFluteSoltType()) + .eq(StrUtil.isNotBlank(paramDto.getThreadType()), "t.thread_type", paramDto.getThreadType()) + .eq(StrUtil.isNotBlank(paramDto.getGuidingSize()), "t.guiding_size", paramDto.getGuidingSize()) + .eq(StrUtil.isNotBlank(paramDto.getConnectionAperture()), "t.connection_aperture", paramDto.getConnectionAperture()) + .eq(StrUtil.isNotBlank(paramDto.getConnectingKeyway()), "t.connecting_keyway", paramDto.getConnectingKeyway()); + } + return this.baseMapper.selectByClassifyAndParam(queryWrapper); + } } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaTurningToolsServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaTurningToolsServiceImpl.java index 739f410..e68f980 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaTurningToolsServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ParaTurningToolsServiceImpl.java @@ -2,6 +2,8 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.jeecg.modules.tms.entity.ParaTurningTools; import org.jeecg.modules.tms.entity.dto.ToolQueryParamDto; import org.jeecg.modules.tms.entity.vo.ParaTurningToolsVo; @@ -25,28 +27,31 @@ @Override public List<ParaTurningToolsVo> selectByClassifyAndDiameter(ToolQueryParamDto paramDto) { - LambdaQueryWrapper<ParaTurningTools> queryWrapper = new LambdaQueryWrapper<>(); + QueryWrapper<ParaTurningTools> queryWrapper = Wrappers.query(); if (paramDto != null) { //杞﹀墛鍒�鍏风浉鍏冲弬鏁板瓧娈� queryWrapper - .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), ParaTurningTools::getClassifyId, paramDto.getClassifyId()) - .eq(StrUtil.isNotBlank(paramDto.getDiameter()), ParaTurningTools::getToolDiameter, paramDto.getDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getTotalLength()), ParaTurningTools::getTotalLength, paramDto.getTotalLength()) - .eq(StrUtil.isNotBlank(paramDto.getToolMaterial()), ParaTurningTools::getToolMaterial, paramDto.getToolMaterial()) - .eq(StrUtil.isNotBlank(paramDto.getSmallDiameter()), ParaTurningTools::getSmallDiameter, paramDto.getSmallDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getCuttingDirection()), ParaTurningTools::getCuttingDirection, paramDto.getCuttingDirection()) - .eq(StrUtil.isNotBlank(paramDto.getKnifeSize()), ParaTurningTools::getKnifeSize, paramDto.getKnifeSize()) - .eq(StrUtil.isNotBlank(paramDto.getBoringBarDiameter()), ParaTurningTools::getBoringBarDiameter, paramDto.getBoringBarDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getBladeLength()), ParaTurningTools::getBladeLength, paramDto.getBladeLength()) - .eq(StrUtil.isNotBlank(paramDto.getBarDirection()), ParaTurningTools::getBarDirection, paramDto.getBarDirection()) - .eq(StrUtil.isNotBlank(paramDto.getBladeHeight()), ParaTurningTools::getBladeHeight, paramDto.getBladeHeight()) - .eq(StrUtil.isNotBlank(paramDto.getBladeWide()), ParaTurningTools::getBladeWide, paramDto.getBladeWide()) - .eq(StrUtil.isNotBlank(paramDto.getSlotWidth()), ParaTurningTools::getSlotWidth, paramDto.getSlotWidth()) - .eq(StrUtil.isNotBlank(paramDto.getMaxDiameter()), ParaTurningTools::getMaxDiameter, paramDto.getMaxDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getMaxDepth()), ParaTurningTools::getMaxDepth, paramDto.getMaxDepth()) - .eq(StrUtil.isNotBlank(paramDto.getBladeThickness()), ParaTurningTools::getBladeThickness, paramDto.getBladeThickness()) - .eq(StrUtil.isNotBlank(paramDto.getMinDiameter()), ParaTurningTools::getMinDiameter, paramDto.getMinDiameter()) - .eq(StrUtil.isNotBlank(paramDto.getMatchingNumber()), ParaTurningTools::getMatchingNumber, paramDto.getMatchingNumber()); + .like(StrUtil.isNotBlank(paramDto.getToolCode()), "t1.tool_code", paramDto.getToolCode()) + .like(StrUtil.isNotBlank(paramDto.getToolModel()), "t.tool_model", paramDto.getToolModel()) + .like(StrUtil.isNotBlank(paramDto.getChineseName()), "t.chinese_name", paramDto.getChineseName()) + .eq(StrUtil.isNotBlank(paramDto.getClassifyId()), "t.classify_id", paramDto.getClassifyId()) + .eq(StrUtil.isNotBlank(paramDto.getDiameter()), "t.tool_diameter", paramDto.getDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getTotalLength()), "t.total_length", paramDto.getTotalLength()) + .eq(StrUtil.isNotBlank(paramDto.getToolMaterial()), "t.tool_material", paramDto.getToolMaterial()) + .eq(StrUtil.isNotBlank(paramDto.getSmallDiameter()), "t.small_diameter", paramDto.getSmallDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getCuttingDirection()), "t.cutting_direction", paramDto.getCuttingDirection()) + .eq(StrUtil.isNotBlank(paramDto.getKnifeSize()), "t.knife_size", paramDto.getKnifeSize()) + .eq(StrUtil.isNotBlank(paramDto.getBoringBarDiameter()), "t.boring_bar_diameter", paramDto.getBoringBarDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getBladeLength()), "t.blade_length", paramDto.getBladeLength()) + .eq(StrUtil.isNotBlank(paramDto.getBarDirection()), "t.bar_direction", paramDto.getBarDirection()) + .eq(StrUtil.isNotBlank(paramDto.getBladeHeight()), "t.blade_height", paramDto.getBladeHeight()) + .eq(StrUtil.isNotBlank(paramDto.getBladeWide()), "t.blade_wide", paramDto.getBladeWide()) + .eq(StrUtil.isNotBlank(paramDto.getSlotWidth()), "t.slot_width", paramDto.getSlotWidth()) + .eq(StrUtil.isNotBlank(paramDto.getMaxDiameter()), "t.max_diameter", paramDto.getMaxDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getMaxDepth()), "t.max_depth", paramDto.getMaxDepth()) + .eq(StrUtil.isNotBlank(paramDto.getBladeThickness()), "t.blade_thickness", paramDto.getBladeThickness()) + .eq(StrUtil.isNotBlank(paramDto.getMinDiameter()), "t.min_diameter", paramDto.getMinDiameter()) + .eq(StrUtil.isNotBlank(paramDto.getMatchingNumber()), "t.matching_number", paramDto.getMatchingNumber()); } return this.baseMapper.selectByClassifyAndDiameter(queryWrapper); } diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java index 0fb2bcc..f696caf 100644 --- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java +++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java @@ -54,6 +54,8 @@ private ISysBusinessCodeRuleService businessCodeRuleService; @Autowired private IBaseToolsService baseToolsService; + @Autowired + private PreparationOrderConvert preparationOrderConvert; @Override @Transactional(rollbackFor = Exception.class) @@ -77,7 +79,7 @@ //鍏堝垹闄ゆ墍鏈夋槑缁� preparationOrderDetailMapper.delete(new LambdaQueryWrapper<PreparationOrderDetail>() .eq(PreparationOrderDetail::getPreparationOrderId, preparationOrderAndDetailDto.getId())); - PreparationOrder preparationOrder = PreparationOrderConvert.INSTANCE.convert(preparationOrderAndDetailDto); + PreparationOrder preparationOrder = preparationOrderConvert.convert(preparationOrderAndDetailDto); updateById(preparationOrder); List<PreparationOrderDetail> detailUpdateList = CollectionUtil.newArrayList(); preparationOrderAndDetailDto.getPreparationOrderDetailList().forEach(item->{ @@ -218,7 +220,23 @@ return this.baseMapper.queryPageList(page, queryWrapper); } - private LoginUser getCurrentUser() { + @Override + @Transactional(rollbackFor = Exception.class) + public void addPreparationOrderFromDnc(PreparationOrderAndDetailDto preparationOrderAndDetailDto) { + PreparationOrder preparationOrder = preparationOrderConvert.convert(preparationOrderAndDetailDto); + preparationOrder + .setId(null) + .setPreparationOrderNum(businessCodeRuleService.generateBusinessCodeSeq("ToolPreparationOrder")) + .setOrderStatus(PreparationOrderStatus.PENDING_AUDIT.getValue()); + save(preparationOrder); + List<PreparationOrderDetail> preparationOrderDetailList = preparationOrderAndDetailDto.getPreparationOrderDetailList(); + preparationOrderDetailList.forEach(item -> { + item.setId(null).setPreparationOrderId(preparationOrder.getId()); + }); + preparationOrderDetailService.saveBatch(preparationOrderDetailList); + } + + private LoginUser getCurrentUser() { // 鑾峰彇褰撳墠璁よ瘉鐨勭櫥褰曠敤鎴蜂俊鎭� Subject currentUser = SecurityUtils.getSubject(); if (currentUser != null && currentUser.isAuthenticated()) { -- Gitblit v1.9.3