From 4124aa2ed35cc89ef969c1bcc0e21daca125fa6a Mon Sep 17 00:00:00 2001 From: qinyulong Date: Mon, 5 Jan 2026 10:46:24 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8F=E5=85=B7=E4=BD=BF=E7=94=A8=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=9F=A5=E8=AF=A2=E7=AC=AC=E4=B8=89=E6=96=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/request/MeasuringUsageQuery.java | 37 ++++++ .../controller/MeasuringUsageController.java | 62 +++++++++ .../service/IMeasuringUsageService.java | 33 +++++ .../impl/IMeasuringUsageServiceImpl.java | 121 ++++++++++++++++++ .../src/main/resources/application-dev.yml | 10 +- 5 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/request/MeasuringUsageQuery.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasuringUsageController.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasuringUsageService.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasuringUsageServiceImpl.java diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/request/MeasuringUsageQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/request/MeasuringUsageQuery.java new file mode 100644 index 00000000..79b1dd1f --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/request/MeasuringUsageQuery.java @@ -0,0 +1,37 @@ +package org.springblade.desk.device.pojo.request; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; + +/** + * 量具使用记录查询条件封装类 + * + * @author qyl + * @since 2026-01-04 + */ +@Data +public class MeasuringUsageQuery { + + /** + * 设备编码 + */ + @Schema(description = "处理状态") + private String toolStatus; + /** + * 设备名称 + */ + @Schema(description = "工具规格") + private String toolSpec; + /** + * 类别名称 + */ + @Schema(description = "类别名称") + private String typeName; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasuringUsageController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasuringUsageController.java new file mode 100644 index 00000000..9146c5f6 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/controller/MeasuringUsageController.java @@ -0,0 +1,62 @@ +package org.springblade.desk.device.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.desk.device.pojo.request.MeasuringUsageQuery; +import org.springblade.desk.device.service.IMeasuringUsageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + + +/** + * 量具使用记录 控制器 + * + * @author qyl + * @since 2026年1月4日 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/measuringUsage") +@Tag(name = "量具使用记录", description = "量具使用记录接口") +public class MeasuringUsageController extends BladeController { + @Autowired + IMeasuringUsageService iMeasuringUsageService; + + /** + * 量具使用记录 自定义分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 3) + @Operation(summary = "分页", description = "") + public R> page(MeasuringUsageQuery measuringUsageQuery, Query query) { + IPage pages = iMeasuringUsageService.selectMeasuringUsagePage(Condition.getPage(query), measuringUsageQuery); + return R.data(pages); + } + + + /** + * 导出数据 + */ +// @IsAdmin +// @GetMapping("/export-equipment") +// @ApiOperationSupport(order = 9) +// @Operation(summary = "导出数据", description = "传入equipment") +// public void exportEquipment(@Parameter(hidden = true) @RequestParam Map equipment, BladeUser bladeUser, HttpServletResponse response) { +// QueryWrapper queryWrapper = Condition.getQueryWrapper(equipment, EquipmentEntity.class); +// //if (!AuthUtil.isAdministrator()) { +// // queryWrapper.lambda().eq(Equipment::getTenantId, bladeUser.getTenantId()); +// //} +// //queryWrapper.lambda().eq(EquipmentEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED); +// List list = measuringUsageService.exportEquipment(queryWrapper); +// ExcelUtil.export(response, "设备信息表数据" + DateUtil.time(), "设备信息表数据表", list, EquipmentExcel.class); +// } + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasuringUsageService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasuringUsageService.java new file mode 100644 index 00000000..5b942191 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/IMeasuringUsageService.java @@ -0,0 +1,33 @@ +package org.springblade.desk.device.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.desk.device.pojo.request.MeasuringUsageQuery; +import org.springframework.stereotype.Service; + +/** + * 量具使用记录 服务类 + * + * @author qyl + * @since 2026年1月4日 + */ + +public interface IMeasuringUsageService { + /** + * 自定义分页 + * + * @param page 分页参数 + * @param measuringUsageQuery 查询参数 + * @return IPage + */ + IPage selectMeasuringUsagePage(IPage page, MeasuringUsageQuery measuringUsageQuery); + + +// /** +// * 导出数据 +// * +// * @param queryWrapper 查询条件 +// * @return List +// */ +// List exportEquipment(Wrapper queryWrapper); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasuringUsageServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasuringUsageServiceImpl.java new file mode 100644 index 00000000..8ffb236b --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/device/service/impl/IMeasuringUsageServiceImpl.java @@ -0,0 +1,121 @@ +package org.springblade.desk.device.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import jodd.util.StringUtil; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.device.pojo.request.MeasuringUsageQuery; +import org.springblade.desk.device.service.IMeasuringUsageService; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.List; + +@Slf4j +@Service +public class IMeasuringUsageServiceImpl implements IMeasuringUsageService { + // 使用JDK 17内置的HttpClient(线程安全,可复用) + private final HttpClient httpClient = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(30)) + .version(HttpClient.Version.HTTP_2) + .build(); + + @Value("${request.measuringTool.url}") + private String measuringTool; + + @Override + public IPage selectMeasuringUsagePage(IPage page, MeasuringUsageQuery measuringUsageQuery) { + + // 构建请求体JSON + JSONObject requestBody = buildRequestBody(page, measuringUsageQuery); + + // 创建HTTP请求 + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(measuringTool + "/server/external/getTool")) + .header("Content-Type", "application/json") + .header("Accept", "application/json") + .POST(HttpRequest.BodyPublishers.ofString(requestBody.toJSONString())) + .timeout(Duration.ofSeconds(60)) + .build(); + + try { + // 发送同步请求 + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + + // 处理响应 + return processResponse(response, page); + + } catch (Exception e) { + log.error("获取量具库存记录数据接口调用失败: {}", e.getMessage(), e); + return page.setRecords(List.of()); // 返回空列表而不是null + } + } + + /** + * 构建请求体 + */ + private JSONObject buildRequestBody(IPage page, MeasuringUsageQuery measuringUsageQuery) { + JSONObject requestBody = new JSONObject(); + requestBody.put("currPage", page.getCurrent()); + requestBody.put("pageSize", page.getSize()); + + if (measuringUsageQuery != null) { + if (StringUtil.isNotEmpty(measuringUsageQuery.getToolStatus())) { + requestBody.put("toolStatus", measuringUsageQuery.getToolStatus()); + } + if (StringUtil.isNotEmpty(measuringUsageQuery.getToolSpec())) { + requestBody.put("toolSpec", measuringUsageQuery.getToolSpec()); + } + if (StringUtil.isNotEmpty(measuringUsageQuery.getTypeName())) { + requestBody.put("typeName", measuringUsageQuery.getTypeName()); + } + } + + log.debug("请求参数: {}", requestBody.toJSONString()); + return requestBody; + } + + /** + * 处理HTTP响应 + */ + private IPage processResponse(HttpResponse response, IPage page) { + if (response.statusCode() != 200) { + log.error("HTTP请求失败,状态码: {}", response.statusCode()); + throw new RuntimeException("HTTP请求失败,状态码: " + response.statusCode()); + } + + String responseBody = response.body(); + if (responseBody == null || responseBody.trim().isEmpty()) { + log.error("响应体为空"); + return page.setRecords(List.of()); + } + + try { + JSONObject result = JSONObject.parseObject(responseBody); + if (result != null && result.getInteger("code") != null && result.getInteger("code").equals(200)) { + JSONObject data = result.getJSONObject("data"); + if (data != null) { + List records = JSONArray.parseArray(data.toJSONString(), JSONObject.class); + log.info("成功获取{}条量具库存记录", records != null ? records.size() : 0); + return page.setRecords(records != null ? records : List.of()); + } + } else { + String errorMsg = result != null ? result.getString("message") : "未知错误"; + log.error("接口返回错误: {}", errorMsg); + throw new RuntimeException("接口返回错误: " + errorMsg); + } + } catch (Exception e) { + log.error("响应数据解析失败: {}", e.getMessage(), e); + throw new RuntimeException("响应数据解析失败: " + e.getMessage(), e); + } + + return page.setRecords(List.of()); + } + +} diff --git a/blade-service/blade-desk/src/main/resources/application-dev.yml b/blade-service/blade-desk/src/main/resources/application-dev.yml index 29104d04..7d9bcedc 100644 --- a/blade-service/blade-desk/src/main/resources/application-dev.yml +++ b/blade-service/blade-desk/src/main/resources/application-dev.yml @@ -25,4 +25,12 @@ role-config: # 49 tencent cloud #process-engineer-id: "2004331529923555330" #工艺员角色alias - process-engineer-alias: "process_engineer" \ No newline at end of file + process-engineer-alias: "process_engineer" + +request: + measuringTool: + #量具使用记录 + url: "http://203.15.10.153:80300" + lims: + #计量记录 + url: "http://192.168.169.50:30000" \ No newline at end of file