basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardProductListServiceImpl.java
@@ -139,7 +139,7 @@ } return true; }).peek(standardProductList -> { // todo: 夿æ¯å¦æ¯åæä¸å, éè¦åæé¢è²ç»å®å°è¯æ ·é¢è²çè¦æ±å¼ä¸ //夿æ¯å¦æ¯åæä¸å, éè¦åæé¢è²ç»å®å°è¯æ ·é¢è²çè¦æ±å¼ä¸ if (StringUtils.isNotBlank(insSample.getPartNo())) { // 夿æ¯å¦æè¿ä¸ªåæ®µä¸æ¯ææ¬ç±»å if (StringUtils.isNotBlank(standardProductList.getInspectionItem()) cnas-device/pom.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>ruoyi</artifactId> <groupId>com.ruoyi</groupId> <version>3.8.9</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cnas-device</artifactId> <dependencies> <!--ä¸å¡æ¨¡å--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>inspect-server</artifactId> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project> cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,205 @@ package com.ruoyi.device.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.Result; import com.ruoyi.device.dto.DataConfigDto; import com.ruoyi.device.dto.DeviceCollectionDto; import com.ruoyi.device.dto.DeviceDto; import com.ruoyi.device.pojo.DataConfig; import com.ruoyi.device.pojo.Device; import com.ruoyi.device.service.DataConfigService; import com.ruoyi.device.service.DeviceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 设å¤(DeviceController)表æ§å¶å± */ @Api(tags = "设å¤") @RestController @RequestMapping("/deviceScope") public class DeviceController { @Resource private DeviceService deviceService; @Value("${file.path}") private String filePath; @Value("${wordUrl}") private String wordUrl; @Autowired private DataConfigService dataConfigService; @ApiOperation(value = "æ¥ç设å¤äºç»´ç æé®") @GetMapping("/showDeviceQrCodeButton") public void showDeviceQrCodeButton() { } //设å¤å·¥å ·æç» @ApiOperation(value = "æ¥è¯¢è®¾å¤è¯¦æ å表") @GetMapping("/selectDeviceParameter") public Result selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull){ return Result.success(deviceService.selectDeviceParameter(page, itemParameter, laboratoryNameIsNull)); } @ApiOperation(value = "æ·»å 设å¤è¯¦æ åæ°") @PostMapping("/addDeviceParameter") public Result addDeviceParameter(@RequestBody Device itemParameter) { return Result.success(deviceService.addDeviceParameter(itemParameter)); } @ApiOperation(value = "å é¤è®¾å¤è¯¦æ åæ°") @DeleteMapping("/delDeviceParameter") public Result<?> delDeviceParameter(Integer id) { return Result.success(deviceService.delDeviceParameter(id)); } @ApiOperation(value = "ä¿®æ¹è®¾å¤è¯¦æ åæ°") @PostMapping("/upDeviceParameter") public Result<?> upDeviceParameter(@RequestBody Device itemParameter) { return Result.success(deviceService.upDeviceParameter(itemParameter)); } @ApiOperation(value = "è·åè®¾å¤æ»è§") @GetMapping("/selectEquipmentOverview") public Result selectEquipmentOverview() { return Result.success(deviceService.selectEquipmentOverview()); } @ApiOperation(value = "è·å被ææäºº") @GetMapping("/authorizedPerson") public Result authorizedPerson() { return Result.success(deviceService.authorizedPerson()); } @ApiOperation(value = "æç´¢") @GetMapping("/search") public Result search(Integer status, String deviceName, String specificationModel, String largeCategory) { return Result.success(deviceService.search(status, deviceName, specificationModel, largeCategory)); } //å¾çä¸ä¼ @ApiOperation(value = "è®¾å¤æä»¶ä¸ä¼ ") @PostMapping("/uploadFile") public Result uploadFile(MultipartFile file) { String urlString; String pathName; String filename = file.getOriginalFilename(); String path; try { String contentType = file.getContentType(); if (contentType != null && contentType.startsWith("image/")) { // æ¯å¾ç path = filePath; } else { // æ¯æä»¶ path = wordUrl; } File realpath = new File(path); if (!realpath.exists()) { realpath.mkdirs(); } pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "-" + file.getOriginalFilename(); urlString = realpath + "/" + pathName; file.transferTo(new File(urlString)); HashMap<String, String> map = new HashMap<>(); map.put("name", filename); map.put("url", pathName); return Result.success(map); } catch (Exception e) { e.printStackTrace(); System.err.println("æä»¶ä¸ä¼ é误"); return null; } } @ApiOperation(value = "è·å设å¤è´è´£äºº") @GetMapping("/selectDevicePrincipal") public Result selectDevicePrincipal() { return Result.success(deviceService.selectDevicePrincipal()); } @ApiOperation(value = "éè¿é¡¹ç®è·å设å¤å表") @GetMapping("/selectDeviceByCategory") public Result selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String laboratory) { return Result.success(deviceService.selectDeviceByCategory(inspectionItem, inspectionItemSubclass,laboratory)); } @ApiOperation(value = "éè¿è®¾å¤ç¼å·è·å设å¤å表") @GetMapping("/selectDeviceByCode") public Result<DeviceDto> selectDeviceByCode(Integer id) { return Result.success(deviceService.selectDeviceByCode(id)); } @ApiOperation("/æ°é-æ°æ®éé") @PostMapping("/dataCollection") public Result<?> dataAcquisition(HttpServletRequest request,@RequestBody DeviceCollectionDto dto) { return deviceService.dataAcquisition(request, dto); } @ApiOperation(value = "ç»´æ¤æ°éé ç½®") @PostMapping("/saveDataAcquisitionConfiguration") public Result<?> saveDataAcquisitionConfiguration(@RequestParam(value = "deviceId") Integer deviceId, @RequestBody DataConfigDto dataConfigList) { dataConfigService.saveDataAcquisitionConfiguration(deviceId, dataConfigList); return Result.success(); } @ApiOperation(value = "æ¥è¯¢æ°éé ç½®") @GetMapping("/queryDataAcquisitionConfiguration") public Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig) { return dataConfigService.queryDataAcquisitionConfiguration(dataConfig); } @ApiOperation(value = "å 餿°éé ç½®") @DeleteMapping("/deleteDataAcquisitionConfiguration") public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) { List<String> split = Arrays.asList(ids.split(",")); List<String> collect = split.stream().distinct().collect(Collectors.toList()); dataConfigService.removeBatchByIds(collect); return Result.success(); } @ApiOperation(value = "å·¦ä¾§è®¾å¤æ å½¢æ ") @GetMapping("/treeDevice") public Result treeDevice(String deviceName) { return Result.success(deviceService.treeDevice(deviceName)); } @ApiOperation(value = "è®¾å¤æ¡£æ¡å¯¼åº") @GetMapping("/exportDeviceFile") public void exportDeviceFile(@RequestParam Integer deviceId, HttpServletResponse response) throws Exception { deviceService.exportDeviceFile(deviceId,response); } @ApiOperation(value = "仪å¨è®¾å¤ä¸è§è¡¨å¯¼åº") @GetMapping("/exportEquipmentDetails") public void exportEquipmentDetails(HttpServletResponse response) throws Exception { deviceService.exportEquipmentDetails(response); } } cnas-device/src/main/java/com/ruoyi/device/dto/DataConfigDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package com.ruoyi.device.dto; import com.ruoyi.device.pojo.DataConfig; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class DataConfigDto { private List<DataConfig> dataConfigList; private Boolean isDevice; @ApiModelProperty("æä»¶åç¼") private String fileType; @ApiModelProperty("ééå°å") private String collectUrl; @ApiModelProperty("åå¨å°å") private String storageUrl; @ApiModelProperty("设å¤IP") private String ip; @ApiModelProperty("æ°é-å§æåæ®µ") private String entrustCode; @ApiModelProperty("æ°é-æ ·ååæ®µ") private String sampleCode; @ApiModelProperty("æ°é-dbï¼mdbæä»¶åç§°") private String dbFileName; } cnas-device/src/main/java/com/ruoyi/device/dto/DeviceCollectionDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package com.ruoyi.device.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * 设å¤éé对象 * * @Author zhuo * @Date 2024/12/3 */ @Data public class DeviceCollectionDto { @ApiModelProperty(value = "æ ·åid") private Integer id; @ApiModelProperty(value = "订åç¼å·") private String entrustCode; @ApiModelProperty(value = "æ ·åç¼å·") private String sampleCode; @ApiModelProperty(value = "ééçæ£éªé¡¹id") private List<Integer> itemIds; } cnas-device/src/main/java/com/ruoyi/device/dto/DeviceConfigDtoPage.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,77 @@ package com.ruoyi.device.dto; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class DeviceConfigDtoPage{ @ApiModelProperty(value = "设å¤åç§°") private String deviceName; @ApiModelProperty(value = "åå»ºç¨æ·") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty(value = "æä»¶åç¼") private String fileType; @ApiModelProperty(value = "ééå°å") private String collectUrl; @ApiModelProperty(value = "åå¨å°å") private String storageUrl; @ApiModelProperty(value = "IPå°å") private String ip; @ApiModelProperty(value = "æ£éªé¡¹åç±»") private String inspectionItemClass; @ApiModelProperty(value = "æ£éªé¡¹") private String inspectionItem; @ApiModelProperty(value = "æ£éªé¡¹å项") private String inspectionItemSubclass; @ApiModelProperty(value = "å ¬å¼") private String formula; @ApiModelProperty(value = "åç §X") private String referx; @ApiModelProperty(value = "X") private String x; @ApiModelProperty(value = "åç §Y") private String refery; @ApiModelProperty(value = "Y") private String y; @ApiModelProperty(value = "å«å") private String anotherName; @ApiModelProperty(value = "å¹é åç§°") private String matchingName; private Integer id; @ApiModelProperty(value = "æ£éªå¯¹è±¡") private String sample; @ApiModelProperty(value = "æ£éªé¡¹ç®id") private Integer structureItemParameterId; @ApiModelProperty("æ°é-å§æåæ®µ") private String entrustCode; @ApiModelProperty("æ°é-æ ·ååæ®µ") private String sampleCode; @ApiModelProperty("æ°é-dbï¼mdbæä»¶åç§°") private String dbFileName; } cnas-device/src/main/java/com/ruoyi/device/dto/DeviceDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.ruoyi.device.dto; import com.fasterxml.jackson.annotation.JsonInclude; import com.ruoyi.device.pojo.Device; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Data @AllArgsConstructor @NoArgsConstructor public class DeviceDto extends Device { @ApiModelProperty(value = "管ç人") private String equipmentManagerUser; @ApiModelProperty(value = "æå±é¨é¨") @JsonInclude(JsonInclude.Include.NON_NULL) private String laboratoryName; @ApiModelProperty(value = "æ£éªé¡¹ç®") private String insProductItem; @ApiModelProperty(value = "管ç人å§å") private String equipmentManagerName; @ApiModelProperty(value = "被ææäººå§å") private String authorizedPersonName; @ApiModelProperty(value = "æ ¸åè¯ä¹¦ç¼å·") private String calibrateNo; @ApiModelProperty(value = "æè¿æ ¡åæ¥æ") private LocalDateTime lastCalibrationDateTwo; @ApiModelProperty(value = "䏿¬¡æ ¡åæ¥æ") private LocalDateTime nextCalibrationDateTwo; } cnas-device/src/main/java/com/ruoyi/device/dto/DeviceExport.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.device.dto; import com.ruoyi.device.pojo.Device; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Author: yuan * Date: 2024-12-10 ææäº 15:55:29 * Description: */ @Data public class DeviceExport extends Device { @ApiModelProperty("管ç人") private String equipmentManagerName; @ApiModelProperty("åºå·") private Integer index; } cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordAndMaintenanceDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.ruoyi.device.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Author: yuan * Date: 2024-12-13 ææäº 10:43:06 * Description: 仪å¨è®¾å¤æ¡£æ¡å¡ä¸æ¾ç¤ºçè®¾å¤æ ¡åè®°å½åç»´æ¤è®°å½çå表对象 */ @Data public class DeviceMetricRecordAndMaintenanceDto { @ApiModelProperty("åºå·") private Integer index; // æ ¡å表ä¸çæ°æ® @ApiModelProperty("æ ¡åæ¥æ") private String calibrationDateString; @ApiModelProperty("è¯ä¹¦æ å·") private String certificateNumber; @ApiModelProperty("æ ¡åæææ¥æ") private String validityDateString; @ApiModelProperty("å¤å®") private String judgement; // 维修记å½è¡¨ä¸çæ°æ® @ApiModelProperty("ç»´ä¿®æ¥æ") private String maintenanceDateString; @ApiModelProperty("å¤çæ¹å¼") private String handlingMethod; @ApiModelProperty("夿³¨") private String comments; } cnas-device/src/main/java/com/ruoyi/device/dto/DocumentExportWordDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.device.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Author: yuan * Date: 2024-12-13 ææäº 8:45:34 * Description: ç¨äºä»ªå¨è®¾å¤æ¡£æ¡å¡çå¯¼åº */ @Data public class DocumentExportWordDto { // è®¾å¤æ¡£æ¡å·¦å表 @ApiModelProperty("åºå·") private Integer index1; @ApiModelProperty("æ¡£æ¡åç§°") private String name1; @ApiModelProperty("份æ°") private Integer quantity1; @ApiModelProperty("页ç ") private Integer pageCount1; @ApiModelProperty("彿¡£æ¥æ") private String archiveDateString1; // è®¾å¤æ¡£æ¡å³å表 @ApiModelProperty("åºå·") private Integer index2; @ApiModelProperty("æ¡£æ¡åç§°") private String name2; @ApiModelProperty("份æ°") private Integer quantity2; @ApiModelProperty("页ç ") private Integer pageCount2; @ApiModelProperty("彿¡£æ¥æ") private String archiveDateString2; } cnas-device/src/main/java/com/ruoyi/device/excel/DeviceMaintenanceExport.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.device.excel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import lombok.Data; @Data public class DeviceMaintenanceExport { @ColumnWidth(20) @ExcelProperty("设å¤åç§°") private String deviceName; @ColumnWidth(20) @ExcelProperty("æµç¨ç¼å·") private String deviceNumber; @ColumnWidth(20) @ExcelProperty("管çç¼å·") private String managementNumber; @ColumnWidth(50) @ExcelProperty("ç»´æ¤å 容") private String content; @ColumnWidth(20) @ExcelProperty("ç»´æ¤æ¶é´") private String date; @ColumnWidth(20) @ExcelProperty("䏿¬¡ç»´æ¤æ¶é´") private String nextDate; @ColumnWidth(20) @ExcelProperty("ç»´æ¤ç±»å") private String maintenanceType; @ColumnWidth(20) @ExcelProperty("ç»´æ¤äºº") private String name; @ColumnWidth(50) @ExcelProperty("夿³¨") private String comments; } cnas-device/src/main/java/com/ruoyi/device/mapper/CollectBridgeMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.device.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.device.pojo.CollectBridge; /** * æ°åçµæ¡¥éé * * @author zhuo * @since 2025-02-19 */ public interface CollectBridgeMapper extends BaseMapper<CollectBridge> { } cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.device.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.device.dto.DeviceConfigDtoPage; import com.ruoyi.device.pojo.DataConfig; import java.util.List; /** * <p> * Mapper æ¥å£ * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2024-07-13 12:23:00 */ public interface DataConfigMapper extends BaseMapper<DataConfig> { List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId); List<Integer> deleteDataConfig(); } cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.device.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.device.excel.DeviceMaintenanceExport; import com.ruoyi.device.pojo.DeviceMaintenance; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * 设å¤ç»´æ¤ä¿å » */ @Mapper public interface DeviceMaintenanceMapper extends BaseMapper<DeviceMaintenance> { List<DeviceMaintenance> getDeviceMaintenanceParam(); List<DeviceMaintenanceExport> deviceMaintenanceExport(Integer deviceId); } cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.ruoyi.device.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.device.dto.DeviceDto; import com.ruoyi.device.pojo.Device; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; /** * 设å¤(Device)è¡¨æ°æ®åºè®¿é®å± */ public interface DeviceMapper extends BaseMapper<Device> { IPage<Device> selectDeviceParameter(Page page, QueryWrapper<Device> ew); List<Device> selectEquipmentOverview(Page page, QueryWrapper<Device> ew); //è·å被ææäºº List<Device> authorizedPerson(); //æ¥è¯¢ List<Device> search(@Param(value = "status") Integer status, @Param(value = "deviceName") String deviceName, @Param(value = "specificationModel") String specificationModel, @Param(value = "largeCategory") String largeCategory); //è·åå¾çæ°æ® void selectDeviceImage(@Param(value = "name") String name ,@Param(value = "id") Integer id); //æ¥è¯¢è®¾å¤è´è´£äºº List<Device> selectDevicePrincipal(); IPage<DeviceDto> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceDto> queryWrappers, @Param("laboratoryNameIsNull") Boolean laboratoryNameIsNull); List<Map<String, Object>> getInspectionItemSubclass(@Param("id") Integer id); List<Map<String, Object>> treeDevice(@Param("deviceName") String deviceName); DeviceDto selectDeviceByCode(Integer id); } cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.device.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.device.pojo.DeviceMetricRecord; /** * <p> * è®¾å¤æ ¡å - æ ¡åè®°å½ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-09-27 10:20:01 */ public interface DeviceMetricRecordMapper extends BaseMapper<DeviceMetricRecord> { } cnas-device/src/main/java/com/ruoyi/device/mapper/DocumentMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.ruoyi.device.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.device.pojo.Document; import org.apache.ibatis.annotations.Mapper; /** * è®¾å¤æ¡£æ¡ */ @Mapper public interface DocumentMapper extends BaseMapper<Document> { } cnas-device/src/main/java/com/ruoyi/device/pojo/CollectBridge.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.ruoyi.device.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; /** * æ°åçµæ¡¥éé * * @author zhuo * @since 2025-02-19 */ @Data @TableName("collect_bridge") public class CollectBridge { @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("å§æç¼å·") private String entrustCode; @ApiModelProperty("ééå¼") private String collectValue; @ApiModelProperty("æ¶é´") private LocalDateTime collectDate; } cnas-device/src/main/java/com/ruoyi/device/pojo/DataConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ package com.ruoyi.device.pojo; 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 io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * <p> * * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2024-07-13 12:23:00 */ @Data @NoArgsConstructor @AllArgsConstructor @TableName("device_data_config") @ApiModel(value = "DataConfig对象", description = "") public class DataConfig implements Serializable { @ApiModelProperty("主é®id") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("å ¬å¼") private String formula; @ApiModelProperty("åç §X") private String referx; @ApiModelProperty("åç §Y") private String refery; @ApiModelProperty("x") private String x; @ApiModelProperty("y") private String y; @ApiModelProperty("设å¤id") private Integer deviceId; @ApiModelProperty("æ£éªé¡¹åç±»") private String inspectionItemClass; @ApiModelProperty("æ£éªé¡¹ç®") private String inspectionItem; @ApiModelProperty("æ£éªé¡¹å项") private String inspectionItemSubclass; @TableField(exist = false) @ApiModelProperty("æ£éªé¡¹å项") private String insProductItem; @ApiModelProperty("æ£éªé¡¹id") private Integer structureItemParameterId; @ApiModelProperty("åºå·") private String serialNumber; @ApiModelProperty("å«å") private String anotherName; @ApiModelProperty("å¹é åç§°") private String matchingName; @TableField(select = false, exist = false) private Boolean isDevice; } cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,138 @@ package com.ruoyi.device.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** * 设å¤(Device)表对象 */ @TableName(value = "device") @Data public class Device implements Serializable { @ApiModelProperty(value = "主é®") @TableId(type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "设å¤åç§°") private String deviceName; @ApiModelProperty(value = "en设å¤åç§°") private String enDeviceName; @ApiModelProperty(value = "è§æ ¼åå·") private String specificationModel; @ApiModelProperty(value = "ç产åå®¶") private String manufacturer; @ApiModelProperty(value = "åºåç¼å·") private String factoryNo; @ApiModelProperty(value = "管çç¼å·") private String managementNumber; @ApiModelProperty(value = "ææ¯ææ ") private String technicalIndicators; @ApiModelProperty(value = "è´ç½®æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime acquisitionDate; @ApiModelProperty(value = "æ ¡åæææ¥æ") private LocalDateTime activationDate; @ApiModelProperty(value = "管ç人Id") private Integer equipmentManager; @ApiModelProperty(value = "åæ¾ç¹") private String storagePoint; @ApiModelProperty(value = "æå±é¨é¨Id") private Integer subordinateDepartmentsId; @ApiModelProperty(value = "æ£éªé¡¹ç®Id") private String insProductIds; @ApiModelProperty(value = "æ ¡åæå¡æºæ") private String calibrationServices; @ApiModelProperty(value = "æè¿æ ¡åæ¥æ") private LocalDateTime lastCalibrationDate; @ApiModelProperty(value = "䏿¬¡æ ¡åæ¥æ") private LocalDateTime nextCalibrationDate; @ApiModelProperty(value = "设å¤ç±»å") private String largeCategory; @ApiModelProperty(value = "åä»·") private BigDecimal unitPrice; @ApiModelProperty(value = "设å¤ç¶æ") private Integer deviceStatus; @ApiModelProperty(value = "æ ¡å卿(æ)") private String calibrationDate; @ApiModelProperty(value = "å¾çä¸ä¼ ") private String imageUpload; @ApiModelProperty(value = "å¾ç夿³¨") private String imageName; @ApiModelProperty(value = "å建人id") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty(value = "æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty("æ°é-æä»¶åç¼") private String fileType; @ApiModelProperty("æ°é-ééå°å") private String collectUrl; @ApiModelProperty("æ°é-åå¨å°å") private String storageUrl; @ApiModelProperty("æ°é-设å¤IP") private String ip; @ApiModelProperty("æ°é-æ¯å¦ä¸ºæ°é设å¤") @TableField(exist = false) private Boolean isItADataAcquisitionDevice; @ApiModelProperty("æ°é-å§æåæ®µ") private String entrustCode; @ApiModelProperty("æ°é-æ ·ååæ®µ") private String sampleCode; @ApiModelProperty("æ°é-dbï¼mdbæä»¶åç§°") private String dbFileName; @ApiModelProperty("被ææäºº") private String authorizedPerson; @ApiModelProperty("èµäº§ç¼ç ") private String assetCode; @ApiModelProperty("产å°") private String origin; } cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ package com.ruoyi.device.pojo; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; /** * 设å¤ç»´æ¤ä¿å » */ @Data @EqualsAndHashCode(callSuper = false) @TableName("device_maintenance") public class DeviceMaintenance { //设å¤id @TableId(type = IdType.AUTO) private Integer id; private Integer deviceId; private String deviceName; //ç¼å· private String deviceNumber; //ç»ä¸ç¼å· private String managementNumber; //ç»´æ¤å 容 private String content; //ç»´æ¤æ¥æ @TableField(fill = FieldFill.INSERT) @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate date; //䏿¬¡ç»´æ¤æ¥æ @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate nextDate; //ç»´æ¤ç±»å private Integer maintenanceType; //ç»´æ¤äººå private String name; //夿³¨ private String comments; } cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,89 @@ package com.ruoyi.device.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDateTime; import java.util.Date; /** * <p> * è®¾å¤æ ¡å - æ ¡åè®°å½ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-09-27 10:20:01 */ @Getter @Setter @TableName("device_metric_record") @ApiModel(value = "DeviceMetricRecord对象", description = "è®¾å¤æ ¡å - æ ¡åè®°å½") public class DeviceMetricRecord implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("主é®id") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("è®°å½ç¼å·") private String processNumber; @ApiModelProperty("计éåä½") private String unitOfMeasure; @ApiModelProperty("æ ¡åæ¥æ") private Date calibrationDate; @ApiModelProperty("䏿¬¡æ ¡åæ¥æ") private Date nextCalibrationDate; @ApiModelProperty("计ç®å¨å ·") private String calculatingApparatus; @ApiModelProperty("è®¡ç®æ åéç¨") private String standardRange; @ApiModelProperty("è®¡éæ åä¸ç¡®å®åº¦") private String calibrationStandardUncertainty; @ApiModelProperty("便®æä»¶") private String byDocument; @ApiModelProperty("è¯ä¹¦ç¼å·") private String certificateSerialNumber; @ApiModelProperty("ç¶æ") private String status; @ApiModelProperty("åæä»¶åç§°") private String fileName; @ApiModelProperty("ç³»ç»çææä»¶åç§°") private String systemFileName; @ApiModelProperty("夿³¨") private String remark; @ApiModelProperty("设å¤id") private Integer deviceId; @ApiModelProperty("å建æ¶é´ / ç»è®°æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty("ç»è®°äºº") private String createUser; @ApiModelProperty("calibrateï¼æ ¡åï¼examineï¼æ ¸æ¥") private String type; @ApiModelProperty("确认æ¶é´") private Date confirmDate; } cnas-device/src/main/java/com/ruoyi/device/pojo/Document.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,94 @@ package com.ruoyi.device.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; /** * è®¾å¤æ¡£æ¡ */ @Data @TableName(value = "device_documents") public class Document implements Serializable { private static final long serialVersionUID = 1L; /** * 主é®ID */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * ææ¡£ç±»åï¼æä¸¾ï¼ */ private String documentType; /** * åç§° */ private String name; /** * çæ¬å· */ private String version; /** * æ°é */ private Integer quantity; /** * é¡µæ° */ private Integer pageCount; /** * æä¾å */ private String provider; /** * æä¾æ¥æ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime provideDate; /** * 夿³¨ */ private String comments; /** * å建æ¶é´ */ @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime createdAt; /** * æ´æ°æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updatedAt; private int deviceId; @ApiModelProperty("èµäº§ç¼å·") private String number; @ApiModelProperty("åå§æä»¶åç§°") private String systemFileName; @ApiModelProperty("ç³»ç»çææä»¶åç§°") private String fileName; } cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.device.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.Result; import com.ruoyi.device.dto.DataConfigDto; import com.ruoyi.device.pojo.DataConfig; /** * <p> * æå¡ç±» * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2024-07-13 12:23:00 */ public interface DataConfigService extends IService<DataConfig> { void deleteDataConfig(); void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList); Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig); } cnas-device/src/main/java/com/ruoyi/device/service/DeviceService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ package com.ruoyi.device.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.device.dto.DeviceCollectionDto; import com.ruoyi.device.dto.DeviceDto; import com.ruoyi.device.pojo.Device; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; /** * 设å¤(Device)表æå¡æ¥å£ */ public interface DeviceService extends IService<Device> { IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull); int addDeviceParameter(Device itemParameter); int delDeviceParameter(Integer id); int upDeviceParameter(Device itemParameter); List<Device> selectEquipmentOverview(); List<Device> authorizedPerson(); List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory); List<Device> selectDevicePrincipal(); List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String laboratory); DeviceDto selectDeviceByCode(Integer id); Result<?> dataAcquisition(HttpServletRequest request, DeviceCollectionDto dto); List<Map<String, Object>> treeDevice(String deviceName); /** * 导åºè®¾å¤å表 * @param deviceId * @param response */ void exportDeviceFile(Integer deviceId, HttpServletResponse response); /** * 导åºè®¾å¤å·¥å ·æç» * @param response */ void exportEquipmentDetails(HttpServletResponse response); } cnas-device/src/main/java/com/ruoyi/device/service/DocumentService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ package com.ruoyi.device.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.device.pojo.Document; /** * è®¾å¤æ¡£æ¡ */ public interface DocumentService extends IService<Document> { } cnas-device/src/main/java/com/ruoyi/device/service/QrShowService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package com.ruoyi.device.service; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.device.pojo.DeviceMetricRecord; import org.springframework.ui.Model; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Objects; import java.util.Optional; public interface QrShowService { /** * 计ç®å¯ç¨æ¶é¿ * @param activationDate * @return */ double calcUsedYears(LocalDateTime activationDate); /** * 计ç®è·ç¦»ä¸æ¬¡æ ¡åæ¥æç天æ°ç¾åæ¯ * @param startDate * @param endDate * @return */ double calcDeviceNextCheckRatio(Date startDate, Date endDate); /** * æ¥è¯¢è®¾å¤æ ¡å/æ ¸æ¥è®°å½ * @param deviceId * @param type * @return */ DeviceMetricRecord getDeviceMetricRecord(int deviceId, String type); /** * æ ¼å¼åæ¥æ * @return */ String formatDate(Date date,String formatter); /** * æ ¼å¼åæ¥æ * @return */ String formatDate(LocalDate date, String formatter); } cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,75 @@ package com.ruoyi.device.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.Result; import com.ruoyi.device.dto.DataConfigDto; import com.ruoyi.device.mapper.DataConfigMapper; import com.ruoyi.device.mapper.DeviceMapper; import com.ruoyi.device.pojo.DataConfig; import com.ruoyi.device.pojo.Device; import com.ruoyi.device.service.DataConfigService; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.List; /** * <p> * æå¡å®ç°ç±» * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2024-07-13 12:23:00 */ @Service @AllArgsConstructor public class DataConfigServiceImpl extends ServiceImpl<DataConfigMapper, DataConfig> implements DataConfigService { private DeviceMapper deviceMapper; private DataConfigMapper dataConfigMapper; @Override public void deleteDataConfig() { List<Integer> integers = dataConfigMapper.deleteDataConfig(); if (!integers.isEmpty()) { dataConfigMapper.deleteBatchIds(integers); } } @Override public void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList) { if (dataConfigList.getIsDevice()) { Device device = new Device(); BeanUtils.copyProperties(dataConfigList, device); device.setId(deviceId); deviceMapper.updateById(device); } else { this.saveOrUpdateBatch(dataConfigList.getDataConfigList()); } } @Override public Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig) { if (dataConfig.getIsDevice()) { LambdaQueryWrapper<DataConfig> wrapper = Wrappers.<DataConfig>lambdaQuery() .eq(DataConfig::getDeviceId, dataConfig.getDeviceId()) .eq(DataConfig::getInspectionItem, dataConfig.getInspectionItem()) .eq(DataConfig::getInspectionItemSubclass, dataConfig.getInspectionItemSubclass()); if (StringUtils.isNotBlank(dataConfig.getInspectionItemClass())) { wrapper.eq(DataConfig::getInspectionItemClass, dataConfig.getInspectionItemClass()); } if (dataConfig.getStructureItemParameterId() != null) { wrapper.eq(DataConfig::getStructureItemParameterId, dataConfig.getStructureItemParameterId()); } List<DataConfig> list = baseMapper.selectList(wrapper); return Result.success(list); } else { return Result.success(dataConfigMapper.selectDataConfigList(dataConfig.getDeviceId())); } } } cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,492 @@ package com.ruoyi.device.service.impl; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.basic.mapper.StructureItemParameterMapper; import com.ruoyi.basic.pojo.StructureItemParameter; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.utils.QueryWrappers; import com.ruoyi.device.dto.*; import com.ruoyi.device.mapper.CollectBridgeMapper; import com.ruoyi.device.mapper.DeviceMaintenanceMapper; import com.ruoyi.device.mapper.DeviceMapper; import com.ruoyi.device.mapper.DeviceMetricRecordMapper; import com.ruoyi.device.pojo.*; import com.ruoyi.device.service.DataConfigService; import com.ruoyi.device.service.DeviceService; import com.ruoyi.device.service.DocumentService; import com.ruoyi.device.utils.DataAcquisition; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.mapper.InsSampleMapper; import com.ruoyi.inspect.pojo.InsProduct; import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; import com.ruoyi.system.mapper.UserMapper; import lombok.AllArgsConstructor; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** * 设å¤(Device)表æå¡å®ç°ç±» */ @Service @AllArgsConstructor public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService { private DeviceMapper deviceMapper; private UserMapper userMapper; private StructureItemParameterMapper structureItemParameterMapper; private DataConfigService dataConfigService; private QrShowServiceImpl qrShowService; private InsSampleMapper insSampleMapper; private DocumentService documentService; private DeviceMetricRecordMapper deviceMetricRecordMapper; private DeviceMaintenanceMapper deviceMaintenanceMapper; private CollectBridgeMapper collectBridgeMapper; @Override public IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) { IPage<DeviceDto> iPage = deviceMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(itemParameter), laboratoryNameIsNull); return iPage; } @Override public int addDeviceParameter(Device itemParameter) { return deviceMapper.insert(itemParameter); } @Override public int delDeviceParameter(Integer id) { return deviceMapper.deleteById(id); } @Transactional(rollbackFor = Exception.class) @Override public int upDeviceParameter(Device itemParameter) { // å 餿°ééé ç½®æ°æ® dataConfigService.deleteDataConfig(); // éè¦åæ¶æ´æ¹ device表 return deviceMapper.updateById(itemParameter); } @Override public List<Device> selectEquipmentOverview() { return deviceMapper.selectEquipmentOverview(new Page(1, 10), QueryWrappers.queryWrappers(new Device())); } @Override public List<Device> authorizedPerson() { return deviceMapper.authorizedPerson(); } @Override public List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory) { return deviceMapper.search(status, deviceName, specificationModel, largeCategory); } @Override public List<Device> selectDevicePrincipal() { return deviceMapper.selectDevicePrincipal(); } @Override public List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass, String laboratory) { List<Integer> id; try { id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery() .eq(StructureItemParameter::getInspectionItem, inspectionItem) .eq(ObjectUtils.isNotEmpty(inspectionItemSubclass), StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass) .eq(ObjectUtils.isNotEmpty(laboratory), StructureItemParameter::getLaboratory, laboratory) .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList()); } catch (Exception e) { return null; } List<Device> devices = deviceMapper.selectList(Wrappers.<Device>lambdaQuery() .eq(Device::getDeviceStatus, 0) .isNotNull(Device::getInsProductIds)); List<Device> devices2 = new ArrayList<>(); for (Device device : devices) { String[] ids = device.getInsProductIds().split(","); for (String i : ids) { if (ObjectUtils.isNotEmpty(i)) { if (id.contains(Integer.parseInt(i))) { devices2.add(device); break; } } } } return devices2; } @Override public DeviceDto selectDeviceByCode(Integer id) { DeviceDto deviceDto = deviceMapper.selectDeviceByCode(id); List<Integer> ids = new ArrayList<>(); if (Strings.isNotEmpty(deviceDto.getAuthorizedPerson())) { if (deviceDto.getAuthorizedPerson().equals("null")) { deviceDto.setAuthorizedPerson("[]"); } ids = JSON.parseArray(deviceDto.getAuthorizedPerson(), Integer.class); } String name = ""; if (!ids.isEmpty()) { name = userMapper.selectBatchIds(ids).stream().map(User::getName).collect(Collectors.joining(",")); } deviceDto.setAuthorizedPersonName(name); //æ¥è¯¢è®¾å¤æ ¡åä¿¡æ¯ DeviceMetricRecord calibrate = qrShowService.getDeviceMetricRecord(id, "calibrate"); deviceDto.setCalibrateNo(calibrate.getCertificateSerialNumber()); // å°äºåç¨æ¥æï¼èªå¨å°ç¶ææ¹ä¸ºåç¨ if (deviceDto.getNextCalibrationDate() != null) { if (LocalDateTime.now().isAfter(deviceDto.getNextCalibrationDate())) { // todo: 设å¤è¿è¡ç¶æåå ¸ // List<Enums> enums = enumService.selectEnumByCategory("设å¤ç¶æ"); // List<Enums> status = enums.stream().filter(item -> item.getLabel().equals("åç¨")).collect(Collectors.toList()); // deviceDto.setDeviceStatus(Integer.parseInt(status.get(0).getValue())); deviceMapper.updateById(deviceDto); } } return deviceDto; } @Override public Result<?> dataAcquisition(HttpServletRequest request, DeviceCollectionDto dto) { // æ¥è¯¢æ£éªé¡¹ List<Integer> itemIds = dto.getItemIds(); if (CollectionUtils.isEmpty(itemIds)) { throw new ErrorException("没æéè¦æ°éçæ£éªé¡¹"); } List<InsProduct> insProducts = insSampleMapper.selectProductResult(itemIds); // æ¥è¯¢æ£éªé¡¹ç»å®çid List<Integer> itemParameterIds = insProducts.stream().map(InsProduct::getStructureItemParameterId).collect(Collectors.toList()); Set<String> deviceCodeSet = new LinkedHashSet<>(); for (InsProduct product : insProducts) { // æ¥è¯¢è®¾å¤ // æ·»å 设å¤ç¼å· if (product.getInsProductResult() != null) { List<JSONObject> jsonObjects = JSON.parseArray(product.getInsProductResult().getEquipValue(), JSONObject.class); for (JSONObject jsonObject : jsonObjects) { if (!"".equals(jsonObject.get("v") + "")) { List<String> v = StrUtil.split(jsonObject.get("v") + "", "ï¼"); deviceCodeSet.addAll(v); } } } } if (CollectionUtils.isEmpty(deviceCodeSet)) { throw new ErrorException("æªéæ©è®¾å¤ä¿¡æ¯"); } // è·å设å¤éå List<Device> deviceList = baseMapper.selectList(Wrappers.<Device>lambdaQuery() .in(Device::getManagementNumber, deviceCodeSet) .isNotNull(Device::getIp) .ne(Device::getIp, "")); if (CollectionUtils.isEmpty(deviceList)) { throw new ErrorException("æ 设å¤é ç½®ééç»å®ä¿¡æ¯"); } // æ°éè¿åä¿¡æ¯ Map<String, Object> map = new HashMap<>(); for (Device device : deviceList) { String ip = device.getIp(); // æ ¹æ®æ£éªé¡¹è·åconfig List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery() .in(DataConfig::getStructureItemParameterId, itemParameterIds) .eq(DataConfig::getDeviceId, device.getId())); // è·å设å¤é 置类 // å¤æè®¾å¤æ¯å¦æ¯æ°åç´æ¡¥ if (device.getManagementNumber().equals("JCZX-ZB-ER02022")) { map.putAll(dataCollectBridge(list, device, dto.getEntrustCode())); } else { map.putAll(DataAcquisition.dataAcquisitionEntrance(list, device, dto.getEntrustCode(), dto.getEntrustCode(), ip, insProducts.get(0).getCableTag())); } } // 4ãé å¾ªç¯æ¬¡æ°ï¼åä¸å ¬å¼è®¡ç® if (ObjectUtils.isNotEmpty(map)) { Map<String, Object> frequency = DataAcquisition.createFrequency(dto.getEntrustCode(), dto.getEntrustCode(), map); return Result.success(frequency); } else { return Result.success(null); } } /** * è·åæ°åç´æ¡¥æ£æµä¿¡æ¯ * @return */ public Map<String, ?> dataCollectBridge(List<DataConfig> dataConfig, Device device, String entrustCode) { // æ¼æ¥åå Map<String, List<DataConfig>> userMap = dataConfig.stream() .peek(i -> { String itemName = i.getInspectionItem(); if (StringUtils.isNotBlank(i.getInspectionItemClass())) { itemName += "@" + i.getInspectionItemClass(); } String name = i.getInspectionItem().equals(i.getInspectionItemSubclass()) ? itemName + "," : itemName + "," + i.getInspectionItemSubclass(); // æ·»å æ£éªé¡¹åç§° i.setInsProductItem(name); }) .collect(Collectors.groupingBy(DataConfig::getInsProductItem)); Map<String, Object> map = new HashMap<>(); userMap.forEach((k, v) -> { List<String> resultValue = new ArrayList<>(); // æ¥è¯¢ç´æ¡¥çµæµçµé»æ°éå¼ List<CollectBridge> collectBridges = collectBridgeMapper.selectList(Wrappers.<CollectBridge>lambdaQuery() .like(CollectBridge::getEntrustCode, entrustCode) .orderByAsc(CollectBridge::getCollectDate)); resultValue = collectBridges.stream().map(CollectBridge::getCollectValue).collect(Collectors.toList()); Map<String, Object> hashMap = new HashMap<>(); hashMap.put("equipName", device.getDeviceName()); hashMap.put("equipValue", device.getManagementNumber()); hashMap.put("result", resultValue); map.put(k, hashMap); }); return map; } @Override public List<Map<String, Object>> treeDevice(String deviceName) { List<Map<String, Object>> listMap = deviceMapper.treeDevice(deviceName); return listMap; } @Override public void exportDeviceFile(Integer deviceId, HttpServletResponse response) { // 设å¤ä¿¡æ¯ Device device = baseMapper.selectById(deviceId); // è®¾å¤æ¡£æ¡ List<Document> documentList = documentService.list(Wrappers.<Document>lambdaQuery().eq(Document::getDeviceId, deviceId)); // è®¾å¤æ ¡å表 List<DeviceMetricRecord> deviceMetricRecordList = deviceMetricRecordMapper.selectList(Wrappers.<DeviceMetricRecord>lambdaQuery().eq(DeviceMetricRecord::getDeviceId, deviceId)); // 设å¤ç»´ä¿®è¡¨ List<DeviceMaintenance> deviceMaintenanceList = deviceMaintenanceMapper.selectList(Wrappers.<DeviceMaintenance>lambdaQuery().eq(DeviceMaintenance::getDeviceId, deviceId)); // è¿åç»wordçæ°æ®å表 å为左å³ä¸¤åæ°æ® List<DocumentExportWordDto> documentExportWordDtoList = new ArrayList<>(); // ç»æ¡£æ¡å åºå· å¹¶å·¦å³å为左å³ä¸¤åå¨word䏿¾ç¤º extracted(documentList, documentExportWordDtoList); // å°æ ¡å表å维修表æ¾å ¥ä¸ä¸ªå¯¹è±¡ä¸æ¹ä¾¿wordè¡¨æ ¼ä¸æ¾ç¤º List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = getDeviceMetricRecordAndMaintenanceDtoList(deviceMetricRecordList, deviceMaintenanceList); // è·åè·¯å¾ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-document.docx"); Configure configure = Configure.builder() .bind("document", new HackLoopTableRenderPolicy()) .bind("deviceMetricRecordAndMaintenanceDtoList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("device", device); put("document", documentExportWordDtoList); // æ¡£æ¡ put("deviceMetricRecordAndMaintenanceDtoList", deviceMetricRecordAndMaintenanceDtoList); // æ ¡å表 å 维修表 }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( device.getDeviceName() + "æ¡£æ¡", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } } private List<DeviceMetricRecordAndMaintenanceDto> getDeviceMetricRecordAndMaintenanceDtoList(List<DeviceMetricRecord> deviceMetricRecordList, List<DeviceMaintenance> deviceMaintenanceList) { // è®¾å¤æ ¡å表å设å¤ç»´ä¿®è¡¨çéå List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = new ArrayList<>(); // è®¾å¤æ ¡å表å设å¤ç»´ä¿®è¡¨çé¿åº¦å¯è½ä¸ä¸æ · åæå¤§å¼ ä¸å¤çç¨ç©ºæ°æ®å¡«å int metricRecordSize = deviceMetricRecordList.size(); int maintenanceSize = deviceMaintenanceList.size(); int size = Math.max(metricRecordSize, maintenanceSize); // ç» æ ¡éªå维修对象 èµå¼ for (int i = 0; i < size; i++) { // æ ¡éªå维修对象 DeviceMetricRecordAndMaintenanceDto deviceMetricRecordAndMaintenanceDto = new DeviceMetricRecordAndMaintenanceDto(); // 设置åºå· deviceMetricRecordAndMaintenanceDto.setIndex(i + 1); // æ ¡åè¡¨æ°æ® if (metricRecordSize > i) { // è®¾ç½®æ¥ææ ¼å¼ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // è·åè®¾å¤æ ¡åè¡¨æ°æ® DeviceMetricRecord deviceMetricRecord = deviceMetricRecordList.get(i); // è®¾ç½®æ ¡åæ¥æ deviceMetricRecordAndMaintenanceDto.setCalibrationDateString(sdf.format(deviceMetricRecord.getCalibrationDate())); // 设置è¯ä¹¦ç¼å· deviceMetricRecordAndMaintenanceDto.setCertificateNumber(deviceMetricRecord.getCertificateSerialNumber()); // è®¾ç½®æææ deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getNextCalibrationDate())); // è®¾ç½®æ ¡åæææ¥æ deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getConfirmDate())); // 设置æ£éªç»æ deviceMetricRecordAndMaintenanceDto.setJudgement(deviceMetricRecord.getStatus()); } // ç»´ä¿®è¡¨æ°æ® if (maintenanceSize > i) { // è·å设å¤ç»´ä¿®è¡¨æ°æ® DeviceMaintenance deviceMaintenance = deviceMaintenanceList.get(i); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // ç»´ä¿®æ¥æ deviceMetricRecordAndMaintenanceDto.setMaintenanceDateString(deviceMaintenance.getDate().format(dateTimeFormatter)); // å¤çæ¹æ³ deviceMetricRecordAndMaintenanceDto.setHandlingMethod(deviceMaintenance.getContent()); // 夿³¨ deviceMetricRecordAndMaintenanceDto.setComments(deviceMaintenance.getComments()); } deviceMetricRecordAndMaintenanceDtoList.add(deviceMetricRecordAndMaintenanceDto); } return deviceMetricRecordAndMaintenanceDtoList; } /** * ç»æ¡£æ¡å åºå· å¹¶å·¦å³å为左å³ä¸¤åå¨word䏿¾ç¤º * * @param documentList æ¡£æ¡å表 * @param documentExportWordDtoList è¿åç»wordçæ°æ®å表 */ private static void extracted(List<Document> documentList, List<DocumentExportWordDto> documentExportWordDtoList) { // ç»æ¡£æ¡å åºå· å¹¶ä¸å为左å³ä¸¤ä¸ªå表å¨word䏿¾ç¤º for (int i = 0; i < documentList.size(); i++) { // å建wordè¡¨æ ¼ä¸ä¸è¡çæ°æ®å¯¹è±¡ DocumentExportWordDto documentExportWordDto = new DocumentExportWordDto(); // è·åæ¡£æ¡ä¿¡æ¯ Document document = documentList.get(i); // æ ¼å¼åæ¥æ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // æ ¹æ®åºå· åå«å å ¥ä¸¤ä¸ªå表 if (i % 2 == 0) { // 奿°å¨å·¦å documentExportWordDto.setIndex1(i + 1); documentExportWordDto.setName1(document.getName()); documentExportWordDto.setQuantity1(document.getQuantity()); documentExportWordDto.setPageCount1(document.getPageCount()); documentExportWordDto.setArchiveDateString1(document.getProvideDate().format(dateTimeFormatter)); } else { // å¶æ°å¨å³å documentExportWordDto.setIndex2(i + 1); documentExportWordDto.setName2(document.getName()); documentExportWordDto.setQuantity2(document.getQuantity()); documentExportWordDto.setPageCount2(document.getPageCount()); documentExportWordDto.setArchiveDateString2(document.getProvideDate().format(dateTimeFormatter)); } // æä¸è¡æ°æ®å¯¹è±¡å å ¥å表 documentExportWordDtoList.add(documentExportWordDto); } } @Override public void exportEquipmentDetails(HttpServletResponse response) { List<Device> deviceList = baseMapper.selectList(null); List<DeviceExport> deviceExportList = new ArrayList<>(); int index = 1; for (Device device : deviceList) { Integer equipmentManager = device.getEquipmentManager(); String equipmentManagerName = null; if (equipmentManager != null) { User user = userMapper.selectById(equipmentManager); if (user != null) { equipmentManagerName = user.getName(); } } DeviceExport deviceExport = new DeviceExport(); BeanUtils.copyProperties(device, deviceExport); deviceExport.setIndex(index); deviceExport.setEquipmentManagerName(equipmentManagerName); deviceExportList.add(deviceExport); index++; } // è·åè·¯å¾ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/quipment-details.docx"); Configure configure = Configure.builder() .bind("deviceList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("deviceList", deviceExportList); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( "仪å¨è®¾å¤ä¸è§è¡¨", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } } } cnas-device/src/main/java/com/ruoyi/device/service/impl/DocumentServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.device.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.device.mapper.DocumentMapper; import com.ruoyi.device.pojo.Document; import com.ruoyi.device.service.DocumentService; import org.springframework.stereotype.Service; /** * è®¾å¤æ¡£æ¡ */ @Service public class DocumentServiceImpl extends ServiceImpl<DocumentMapper, Document> implements DocumentService { } cnas-device/src/main/java/com/ruoyi/device/service/impl/QrShowServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,115 @@ package com.ruoyi.device.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.basic.mapper.StructureItemParameterMapper; import com.ruoyi.basic.service.ProductService; import com.ruoyi.device.mapper.DeviceMapper; import com.ruoyi.device.mapper.DeviceMetricRecordMapper; import com.ruoyi.device.pojo.DeviceMetricRecord; import com.ruoyi.device.service.QrShowService; import com.ruoyi.inspect.mapper.InsOrderMapper; import com.ruoyi.inspect.service.InsOrderService; import com.ruoyi.system.service.CustomService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Objects; import java.util.Optional; @Service public class QrShowServiceImpl implements QrShowService { @Autowired private DeviceMetricRecordMapper deviceMetricRecordMapper; /** * 计ç®å¯ç¨æ¶é¿ * @param activationDate * @return */ public double calcUsedYears(LocalDateTime activationDate) { if(Objects.isNull(activationDate)){ return 0; } BigDecimal defDays = BigDecimal.valueOf(365); BigDecimal usedDays = BigDecimal.valueOf(Duration.between(activationDate,LocalDateTime.now()).toDays()); return usedDays.divide(defDays,2,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP).doubleValue(); } /** * 计ç®è·ç¦»ä¸æ¬¡æ ¡åæ¥æç天æ°ç¾åæ¯ * @param startDate * @param endDate * @return */ public double calcDeviceNextCheckRatio(Date startDate, Date endDate){ if(Objects.isNull(startDate) || Objects.isNull(endDate)){ return 0; } LocalDateTime startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); LocalDateTime endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); long totalDays = Duration.between(startLocalDate, endLocalDate).toDays(); long usedDays = Duration.between(startLocalDate, LocalDateTime.now()).toDays(); BigDecimal calcVal = BigDecimal.valueOf(usedDays).divide(BigDecimal.valueOf(totalDays),2,RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP); if(calcVal.compareTo(BigDecimal.ZERO)<0){ calcVal = BigDecimal.ZERO; }else if(calcVal.compareTo(BigDecimal.valueOf(100))>0){ calcVal = BigDecimal.valueOf(100); } return calcVal.doubleValue(); } /** * æ¥è¯¢è®¾å¤æ ¡å/æ ¸æ¥è®°å½ * @param deviceId * @param type * @return */ public DeviceMetricRecord getDeviceMetricRecord(int deviceId, String type){ return Optional.ofNullable( deviceMetricRecordMapper.selectOne(Wrappers.<DeviceMetricRecord>lambdaQuery() .eq(DeviceMetricRecord::getDeviceId, deviceId) .eq(DeviceMetricRecord::getType, type) .orderByDesc(DeviceMetricRecord::getCreateTime) .last("limit 1"))).orElse(new DeviceMetricRecord()); } /** * æ ¼å¼åæ¥æ * @return */ public String formatDate(Date date,String formatter){ if(Objects.isNull(date)){ return ""; } LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); return localDateTime.format(DateTimeFormatter.ofPattern(formatter)); } /** * æ ¼å¼åæ¥æ * @return */ public String formatDate(LocalDate date,String formatter){ if(Objects.isNull(date)){ return ""; } return date.format(DateTimeFormatter.ofPattern(formatter)); } } cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,861 @@ package com.ruoyi.device.utils; import cn.hutool.core.io.IORuntimeException; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.ruoyi.device.pojo.DataConfig; import com.ruoyi.device.pojo.Device; import com.ruoyi.framework.exception.ErrorException; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; public class DataAcquisition { private static final String HTTP = "http://"; private static final String GETFILE = ":9527/lims/getFile"; // è·åæä»¶æ¥å£ private static final String MOVEFILE = ":9527/lims/moveFile"; // æä»¶ç§»å¨å°å private static final String splitIdentifier = "@-@"; // èªå®ä¹å¯ä¸æ è¯åå²ç¬¦ public static final String frequency = "frequency"; /** * æ°éå ¥å£ * * @param dataConfig * @param device * @return */ public static Map<String, Object> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip, String cableTag) { // 夿æ¯å¦æ¯å½±åæµé仪 if (device.getManagementNumber().equals("JCZX-ZB-OP07001")) { if (device.getFileType().equals(".xlsx")) { String url = device.getCollectUrl() + "\\" + sampleCode.replace("/", ""); if (StringUtils.isNotBlank(dataConfig.get(0).getAnotherName())) { url += dataConfig.get(0).getAnotherName() ; } url += ".xlsx"; device.setCollectUrl(url); } } // 夿æ¯å¦æ¯çµç¼çç§çå¯åº¦æµéç³»ç» if (device.getManagementNumber().equals("JCZX-ZB-ZT03002")) { if (device.getFileType().equals(".txt")) { device.setCollectUrl(device.getCollectUrl() + "\\-" + sampleCode.replace("/", "")); } } /** * filePath æä»¶ééè·¯å¾ * fileExtension æä»¶åç¼ * entrustCode å§æç¼å· * sampleCode æ ·åç¼å· * mdbEntrustCode mdbæä»¶éè¦ï¼å§æç¼å·å段 为ä»ä¹æ²¡æå»è¿ä¸ªmdbåç¼å¢ï¼å 为已ç»ç»å®¢æ·çé¨åçµèä¸å®è£ äºééå¨ï¼èç¨æ·ä¸æ¥åéæ°å®è£ ééå¨ï¼æä»¥å°±æ²¡æå»é¤ * mdbSampleCode mdbæä»¶éè¦ï¼æ ·åç¼å·å段 */ String http = HTTP + ip + GETFILE + "?filePath=" + device.getCollectUrl() + "&fileExtension=" + device.getFileType() + "&entrustCode=" + entrustCode + "&sampleCode=" + sampleCode + "&mdbEntrustCode=" + device.getEntrustCode() + "&mdbSampleCode=" + device.getSampleCode() + "&dbFileName=" + device.getDbFileName(); String result = null; try { result = HttpUtil.get(http); } catch (IORuntimeException e) { e.printStackTrace(); throw new ErrorException("æå¨çµèæªå®è£ ææªå¯å¨ï¼LIMSæä»¶ééå¨ï¼"); } JSONObject jsonObject = JSON.parseObject(result); if (Objects.equals(jsonObject.get("code"), 1)) { if (ObjectUtils.isEmpty(jsonObject.get("msg"))) { throw new ErrorException("æªæ¥è¯¢å°æä»¶ï¼å¯è½è¯¥è·¯å¾ï¼" + device.getCollectUrl() + "ï¼ä¸å¹¶æ²¡ææé(" + device.getFileType() +")æä»¶ï¼"); } else { throw new ErrorException(jsonObject.get("msg") + ""); } } else { String data = jsonObject.get("data") + ""; // èèå°ä¸ä¸ªæ£æµé¡¹å¯è½ä¼åå¨å¤ä¸ªæ°éé ç½®ï¼æä»¥éè¦è¿è¡åç» Map<String, List<DataConfig>> userMap = dataConfig.stream() .peek(i -> { String itemName = i.getInspectionItem(); if (StringUtils.isNotBlank(i.getInspectionItemClass())) { itemName += "@" + i.getInspectionItemClass(); } String name = i.getInspectionItem().equals(i.getInspectionItemSubclass()) ? itemName + "," : itemName + "," + i.getInspectionItemSubclass(); // æ·»å æ£éªé¡¹åç§° i.setInsProductItem(name); }) .collect(Collectors.groupingBy(DataConfig::getInsProductItem)); Map<String, Object> map; switch (device.getFileType()) { case ".docx": map = analysisString(data, userMap, device, entrustCode, sampleCode); break; case ".xlsx": map = analysisList(data, userMap, device, entrustCode, sampleCode); break; case ".txt": map = analysisTxt(data, userMap, device, entrustCode, sampleCode); break; case ".csv": map = analysisList(data, userMap, device, entrustCode, sampleCode); break; case ".mdb": // 夿æ¯å¦æ¯æåæº if (device.getManagementNumber().equals("JCZX-ZB-FF01014")) { map = analysisMdbByPull(data, userMap, device, cableTag); } else { map = analysisMdb(data, userMap, device); } break; case ".db": map = analysisDb(data, userMap, device); break; case ".png": map = readPngString(data, userMap, device); break; default: map = null; break; } // 妿åå¨åå¨å°åï¼åç§»å¨å°å if (ObjectUtils.isNotEmpty(device.getStorageUrl())) { String s = HTTP + ip + MOVEFILE + "?startFilePath=" + device.getCollectUrl() + "&endFilePath=" + device.getStorageUrl() + "&fileType=" + device.getFileType(); HttpUtil.get(s); } return map; } } public static Map<String, Object> createFrequency(String entrustCode, String sampleCode, Map<String, Object> map) { Set<String> set = new LinkedHashSet<>(); map.forEach((key, value) -> { String[] split = key.split(","); String inspectionItem = split[0]; // åªè¦æä¸ä¸ªä¸ä¸ºç©ºå°±setè¿å» if (ObjectUtils.isNotEmpty(value)) { set.add(inspectionItem); } }); Map<String, Object> result = new HashMap<>(); for (String inspectionItemKey : set) { Map<String, Object> hashMap = new HashMap<>(); map.forEach((key, value) -> { String[] split = key.split(","); String inspectionItem = split[0]; if (inspectionItemKey.equals(inspectionItem)) { if (split.length > 1) { hashMap.put(split[1], value); } else { hashMap.put("", value); } } }); String frequency = createKey(entrustCode, sampleCode, inspectionItemKey); hashMap.put("frequency", frequency); result.put(inspectionItemKey, hashMap); } return result; } public static String createKey(String entrustCode, String sampleCode, String inspectionItemKey) { return "1"; } /** * éè¦éè¿X,Yè½´å®ä½ * * @param data * @param dataConfig * @return */ private static Map<String, Object> analysisDb(String data, Map<String, List<DataConfig>> dataConfig, Device device) { JSONObject jsonObject = JSON.parseObject(data); Map<String, Object> map = new HashMap<>(); if (jsonObject.isEmpty()) { return map; } JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString()); dataConfig.forEach((k, v) -> { AtomicInteger numberOfDataEntries = new AtomicInteger(); List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String refery = getRefer(v.get(config).getRefery()); for (int i = 0; i < dataList.size(); i++) { JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString()); Object o = jsonObject1.get(refery); if (ObjectUtils.isNotEmpty(o)) { numberOfDataEntries.addAndGet(1); list.add(o); } } } // æ¼æ¥æ°éé ç½® List<Object> result = new ArrayList<>(); for (int i = 0; i < numberOfDataEntries.get(); i++) { String aggregate = ""; for (int j = 0; j < v.size(); j++) { int index; if (j == 0) { index = i; } else { index = numberOfDataEntries.get() + i; } aggregate += list.get(index).toString() + ","; } int lastIndex = aggregate.lastIndexOf(","); String substring = aggregate.substring(0, lastIndex); result.add(substring); } // è¿è¡å ¬å¼è®¡ç® Object resultValue = calculationFormula(result, v.get(0), k, device); map.put(k, resultValue); }); return map; } /** * @param data * @param dataConfig * @return */ private static Map<String, Object> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig, Device device) { JSONObject jsonObject = JSON.parseObject(data); Map<String, Object> map = new HashMap<>(); if (jsonObject.isEmpty()) { return map; } JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString()); dataConfig.forEach((k, v) -> { DataConfig configVo = v.get(0); AtomicInteger numberOfDataEntries = new AtomicInteger(); List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String refery = getRefer(v.get(config).getRefery()); for (int i = 0; i < dataList.size(); i++) { JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString()); Object o = jsonObject1.get(refery); if (ObjectUtils.isNotEmpty(o)) { numberOfDataEntries.addAndGet(1); list.add(o); } } } // æ¼æ¥æ°éé ç½® List<Object> result = new ArrayList<>(); for (int i = 0; i < numberOfDataEntries.get(); i++) { String aggregate = ""; for (int j = 0; j < v.size(); j++) { int index; if (j == 0) { index = i; } else { index = numberOfDataEntries.get() + i; } aggregate += list.get(index).toString() + ","; } int lastIndex = aggregate.lastIndexOf(","); String substring = aggregate.substring(0, lastIndex); result.add(substring); } // è¿è¡å ¬å¼è®¡ç® Object resultValue = calculationFormula(result, v.get(0), k, device); map.put(k, resultValue); }); return map; } /** * æåæºæ°é * * @param data * @param dataConfig * @return */ private static Map<String, Object> analysisMdbByPull(String data, Map<String, List<DataConfig>> dataConfig, Device device, String cableTag) { JSONObject jsonObject = JSON.parseObject(data); Map<String, Object> map = new HashMap<>(); if (jsonObject.isEmpty()) { return map; } JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString()); dataConfig.forEach((k, v) -> { List<Map<String, String>> resultValue = new ArrayList<>(); DataConfig configVo = v.get(0); for (int i = 0; i < dataList.size(); i++) { JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString()); // è·åæ¶é´ String dDate = jsonObject1.getString("dDate"); String dTime = jsonObject1.getString("dTime"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS"); // è§£æç¬¬ä¸ä¸ªæ¥ææ¶é´å符串 LocalDateTime dateTime1 = LocalDateTime.parse(dDate, formatter); // è·åå¹´ææ¥ String yearMonthDay = dateTime1.toLocalDate().toString(); // è§£æç¬¬äºä¸ªæ¥ææ¶é´å符串 LocalDateTime dateTime2 = LocalDateTime.parse(dTime, formatter); // è·åæ¶å String hourMinute = dateTime2.toLocalTime().toString(); // æ¼æ¥å¹´ææ¥åæ¶å String mergedDateTime = yearMonthDay + " " + hourMinute; // è·åå度 String report = jsonObject1.getString("Report"); String thickness = extractValue(report, "å度:\\s*(\\S*?)~"); // è·åæä¼¸å¼ºåº¦ä¼¸é¿ç String result = ""; if (StringUtils.isNotBlank(configVo.getMatchingName()) && configVo.getMatchingName().contains("æä¼¸å¼ºåº¦")) { result = extractValue(report, "æä¼¸å¼ºåº¦:\\s*(\\S*?)~"); } //夿æ£éªå项æ¯å¦æ¯æä¼¸å¼ºåº¦ if (StringUtils.isNotBlank(configVo.getMatchingName()) && configVo.getMatchingName().contains("伸é¿ç")) { result = extractValue(report, "伸é¿ç:\\s*(\\S*?)~"); } Map<String, String> reportMap = new HashMap<>(); reportMap.put("mergedDateTime", mergedDateTime); reportMap.put("thickness", thickness); reportMap.put("result", result); resultValue.add(reportMap); } Map<String, Object> hashMap = new HashMap<>(); hashMap.put("equipName", device.getDeviceName()); hashMap.put("equipValue", device.getManagementNumber()); hashMap.put("result", resultValue); map.put(k, hashMap); }); return map; } private static String extractValue(String input, String regex) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); return matcher.find() ? matcher.group(1) : null; } private static Pattern SPATTERN = Pattern.compile("([-+])?\\d+(\\.\\d+)?"); /** * åªéXè½´ * * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ private static Map<String, Object> readPngString(String data, Map<String, List<DataConfig>> dataConfig, Device device) { Map<String, Object> map = new HashMap<>(); dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String referx = getRefer(v.get(config).getReferx()); String result = null; // éè¿\nå°å符串åå²ä¸ºè¡ String[] aColumnY = data.split("\n"); List<String> list1 = new ArrayList<>(); // 该循ç¯å¾åºç¨æ·é ç½®çyè½´ for (int i = 0; i < aColumnY.length; i++) { String addDataWithSpaces = referx.replaceAll("", " "); int x = getXOrY(v.get(config).getX(), k, "X"); if (aColumnY[i].contains(addDataWithSpaces)) { Matcher matcher = SPATTERN.matcher(aColumnY[i]); while (matcher.find()) { String group = matcher.group(); list1.add(group); } } if (ObjectUtils.isNotEmpty(list1)) { result = list1.get(x); } } if (ObjectUtils.isNotEmpty(result)) { list.add(result); } } // è¿è¡å ¬å¼è®¡ç® Object resultValue = calculationFormula(list, v.get(0), k, device); map.put(k, resultValue); }); return map; } /** * 仿件䏿ååºæ¥çæåï¼å¦ææå ¬å¼ï¼è¿è¡å ¬å¼è®¡ç®ï¼å¦ååå表第ä¸ä¸ªå¼ * * @param list æååºçæ°å * @param dataConfig åå¨å ¬å¼ç对象 * @return */ private static Object calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem, Device device) { if (list.size() == 0) { Map<String, Object> hashMap = new HashMap<>(); hashMap.put("equipName", device.getDeviceName()); hashMap.put("equipValue", device.getManagementNumber()); hashMap.put("result", null); return hashMap; } ArrayList<Object> listResult = new ArrayList<>(); Map<String, Object> hashMap = new HashMap<>(); // 妿ä¸ä¸ºç©ºï¼è¿è¡å ¬å¼è®¡ç® if (ObjectUtils.isNotEmpty(dataConfig.getFormula())) { // å¦åï¼æ²¡æå ¬å¼ä»£è¡¨ä¸éè¦è®¡ç®ï¼ç´æ¥æåListéé¢çæ°æ® if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { String s = calculationFormulaList(list, dataConfig.getFormula()); listResult.add(s); } else { list.forEach(i -> { List<Object> strings = Arrays.asList(i.toString().split(",")); String s = calculationFormulaList(strings, dataConfig.getFormula()); listResult.add(s); }); } } else { listResult.addAll(list); } // 为äºç»åç«¯åæ°æ®åºå if (listResult.size() > 1) { hashMap.put("result", listResult); } else { hashMap.put("result", listResult.get(0).toString()); } hashMap.put("equipName", device.getDeviceName()); hashMap.put("equipValue", device.getManagementNumber()); return hashMap; } /** * è§£æStringæ°æ® * * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ private static Map<String, Object> analysisTxt(String data, Map<String, List<DataConfig>> dataConfig, Device device, String entrustCode, String sampleCode) { Map<String, Object> map = new HashMap<>(); dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); // å§æç¼å·ä¸æ ·åç¼å·ä¸åå¨ï¼å®ï¼1ãYå®èå´ï¼X宿¨ªåæ ï¼2ãåªåå¨Yï¼3ãåªåå¨X if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { // 夿æ¯å¦æ¯çå¯åº¦ if (device.getManagementNumber().equals("JCZX-ZB-ZT03002")) { // æè¡å岿°æ® String[] lines = data.split("\n"); // æåæåä¸è¡ç第ä¸ä¸ªæ°å String lastLine = lines[lines.length - 1]; String firstNumber = lastLine.split("\t")[0]; list.add(firstNumber); } else { list = analyzeData(data, v, k, ","); } // å§æç¼å·ä¸æ ·åç¼å·åå¨ } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) { list = analyzeDataEntrustCodAndSampleCode(data, v, k, ",", device, entrustCode, sampleCode); } // è¿è¡å ¬å¼è®¡ç® Object resultValue = calculationFormula(list, v.get(0), k, device); map.put(k, resultValue); }); return map; } /** * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ private static Map<String, Object> analysisString(String data, Map<String, List<DataConfig>> dataConfig, Device device, String entrustCode, String sampleCode) { String processingDataAfterSpaces = data .replaceAll(" +", splitIdentifier) .replaceAll("\r", "") .replaceAll(" ", ""); Map<String, Object> map = new HashMap<>(); dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); // å§æç¼å·ä¸æ ·åç¼å·ä¸åå¨ï¼å®ï¼1ãYå®èå´ï¼X宿¨ªåæ ï¼2ãåªåå¨Yï¼3ãåªåå¨X if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { list = analyzeData(processingDataAfterSpaces, v, k, splitIdentifier); // å§æç¼å·ä¸æ ·åç¼å·åå¨ } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) { list = analyzeDataEntrustCodAndSampleCode(processingDataAfterSpaces, v, k, splitIdentifier, device, entrustCode, sampleCode); } // è¿è¡å ¬å¼è®¡ç® Object resultValue = calculationFormula(list, v.get(0), k, device); map.put(k, resultValue); }); return map; } /** * åXï¼Y两个å®ä½ * * @param data ééå°çæä»¶å符串 * @param dataConfig ç¨æ·é 置好çx,yè½´å®ä½æ°æ®ä¸åç §ç© * @return */ public static Map<String, Object> analysisList(String data, Map<String, List<DataConfig>> dataConfig, Device device, String entrustCode, String sampleCode) { Map<String, Object> map = new HashMap<>(); dataConfig.forEach((k, v) -> { List<Object> list = new ArrayList<>(); // å§æç¼å·ä¸æ ·åç¼å·ä¸åå¨ï¼å®ï¼1ãYå®èå´ï¼X宿¨ªåæ ï¼2ãåªåå¨Yï¼3ãåªåå¨X if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { list = analyzeData(data, v, k, splitIdentifier); // å§æç¼å·ä¸æ ·åç¼å·åå¨ } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) { list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode); } // è¿è¡å ¬å¼è®¡ç® Object resultValue = calculationFormula(list, v.get(0), k, device); map.put(k, resultValue); }); return map; } private static List<Object> analyzeDataEntrustCodAndSampleCode(String data, List<DataConfig> v, String k, String splitIdentifier, Device device, String entrustCodeValue, String sampleCodeValue) { entrustCodeValue = entrustCodeValue.replaceAll(" ", ""); sampleCodeValue = sampleCodeValue.replaceAll(" ", ""); // æç»ç»æ List<Object> list = new ArrayList<>(); int numberOfDataEntries = 0; // åentrustCodeä¸sampleCodeæå¨ä½ for (int config = 0; config < v.size(); config++) { numberOfDataEntries = 0; Integer entrustCodeY = null; Integer sampleCodeY = null; Integer referYCoordinate = null; String refery = getRefer(v.get(config).getRefery()); String entrustCode = getRefer(device.getEntrustCode()); // å§æç¼å·å段 String sampleCode = getRefer(device.getSampleCode()); // æ ·åç¼å·å段 if (ObjectUtils.isEmpty(refery)) { continue; } // å»é¤ææçç©ºæ ¼ï¼éè¿\nå°å符串åå²ä¸ºè¡ String[] aColumnY = data.replaceAll(" ", "").split("\n"); for (int i = 0; i < aColumnY.length; i++) { // 妿éè¿å¤æï¼å®ä½å°Yè½´ if (aColumnY[i].contains(entrustCode) && aColumnY[i].contains(sampleCode)) { String[] aLine = aColumnY[i].split(splitIdentifier); for (int j = 0; j < aLine.length; j++) { if (aLine[j].contains(entrustCode)) { entrustCodeY = j; } if (aLine[j].contains(sampleCode) ) { sampleCodeY = j; } if (aLine[j].contains(refery)) { referYCoordinate = j; } } } if (ObjectUtils.isNotEmpty(entrustCodeY) && ObjectUtils.isNotEmpty(sampleCodeY) && ObjectUtils.isNotEmpty(referYCoordinate)) { String[] aLine = aColumnY[i].split(splitIdentifier); try { if (aLine[entrustCodeY].contains(entrustCodeValue) && aLine[sampleCodeY].contains(sampleCodeValue)) { String result = aLine[referYCoordinate]; // 鲿¢è®¡ç®å ¬å¼çæ¶ååºç°ï¼[null] è¿ç§æ°æ® if (ObjectUtils.isNotEmpty(result)) { numberOfDataEntries += 1; list.add(result); } } } catch (Exception e) {} } } } // æ¼æ¥æ°éé ç½® List<Object> result = new ArrayList<>(); for (int i = 0; i < numberOfDataEntries; i++) { String aggregate = ""; for (int j = 0; j < v.size(); j++) { int index; if (j == 0) { index = i; } else { index = numberOfDataEntries + i; } aggregate += list.get(index).toString() + ","; } int lastIndex = aggregate.lastIndexOf(","); String substring = aggregate.substring(0, lastIndex); result.add(substring); } return result; } // ç±äºå¨æ¹æ³ä¸ä¼å¤§éçå¤æï¼æä»¥åä¸ä¸ªæ¹æ³ private static int getXOrY(String value, String k, String tips) { try { return Integer.parseInt(value); } catch (NumberFormatException e) { throw new ErrorException(k + "ï¼æªé ç½®" + tips + "åæ è½´çå¼ï¼"); } } // 鲿¢åç §ç©ä¸ºç©ºæ¥éï¼è¿è¡å¤æå¦æä¸ºç©ºèµå¼ç©ºå符 private static String getRefer(String refer) { return ObjectUtils.isNotEmpty(refer) ? refer.replaceAll(" ", "") : ""; } /** * å§æç¼å·ä¸æ ·åç¼å·é½ä¸ºç©ºæ§è¡ * * @param data * @param v * @param k * @param split * @return */ public static List<Object> analyzeData(String data, List<DataConfig> v, String k, String split) { List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { // åä¸¤ä¸ªç¨æ·é ç½®çåç §ç© String referx = getRefer(v.get(config).getReferx()); String refery = getRefer(v.get(config).getRefery()); if (ObjectUtils.isEmpty(refery) && ObjectUtils.isEmpty(referx)) { continue; } // æç»ç»æ List<Object> result = new ArrayList<>(); // éè¿\nå°å符串åå²ä¸ºè¡ String[] aColumnY = data.replaceAll(" ", "").split("\n"); Integer end = null; // ééæ°æ®ï¼Yè½´ for (int i = 0; i < aColumnY.length; i++) { // 妿Yåç §ä¸ä¸ºç©ºä¸Xåç §ä¸ºç©ºåæ§è¡ï¼åæ¶è¯¥è¡å å«Yåç § if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isEmpty(referx) && aColumnY[i].contains(refery)) { // åYåæ å¼ int y = getXOrY(v.get(config).getY(), k, "Y"); String[] aLineX = aColumnY[i].split(split); for (int j = 0; j < aLineX.length; j++) { if (aLineX[j].contains(refery)) { String[] split1 = new String[0]; try { split1 = aColumnY[i + y].split(split); } catch (Exception e) { throw new ErrorException(k + "ï¼Yè½´å®ä½è¶ åºï¼"); } try { result.add(split1[j]); } catch (Exception e) { throw new ErrorException(k + "ï¼Xè½´å®ä½è¶ åºï¼"); } } } // 妿Yåç §ä¸ä¸ºç©ºä¸Xåç §ä¸ä¸ºç©ºåæ§è¡,æ¤å¤Yå®åºå } else if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isNotEmpty(referx)) { // åxçå¼ï¼é²æ¢æ¥é int x = getXOrY(v.get(config).getX(), k, "X"); // åYåæ å¼ int y = getXOrY(v.get(config).getY(), k, "Y"); // ç¼åYçç»æå¼ if (ObjectUtils.isEmpty(end) && aColumnY[i].contains(refery)) { end = i + y; } // 夿æ¯å¦å¨åç §ç©ä¸ºèµ·å°ï¼Yåæ å¼ä¸ºæç»èå´ if (ObjectUtils.isNotEmpty(end) && i <= end) { String[] aLineX = aColumnY[i].split(split); for (int j = 0; j < aLineX.length; j++) { if (aLineX[j].contains(referx)) { try { result.add(aLineX[j + x]); } catch (Exception e) { throw new ErrorException(k + "ï¼Xè½´å®ä½è¶ åºï¼"); } break; } } } // 妿Xåç §ä¸ä¸ºç©ºåæ¶è¯¥è¡å å«Xåç §ï¼åæ§è¡ä¸é¢ç代ç } else if (aColumnY[i].contains(referx) && ObjectUtils.isEmpty(refery)) { String[] aLineX = aColumnY[i].split(split); // åxçå¼ï¼é²æ¢æ¥é int x = getXOrY(v.get(config).getX(), k, "X"); for (int j = 0; j < aLineX.length; j++) { if (aLineX[j].contains(referx)) { try { result.add(aLineX[j + x]); } catch (Exception e) { throw new ErrorException(k + "ï¼Xè½´å®ä½è¶ åºï¼"); } } } } } // 鲿¢è®¡ç®å ¬å¼çæ¶ååºç°ï¼[null] è¿ç§æ°æ® if (ObjectUtils.isNotEmpty(result)) { // String formatProcessing = getFormatProcessing(result); list.addAll(result); } } return list; } public static String getFormatProcessing(String value) { value = value.replaceAll("%", ""); if (value.contains("=")) { String[] split = value.split("="); return split[split.length - 1]; } else if (value.contains(":")) { String[] split = value.split(":"); return split[split.length - 1]; } else { return value; } } public static String getIp(HttpServletRequest request) { String ipAddress = request.getRemoteAddr(); // 鲿¢åç¯å°åå为IPv6 return ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress; } public static String calculationFormulaList(List<Object> list, String formula) { //é¦å å°list转æ¢ä¸ºbigdecmic List<BigDecimal> bigDecimalList = list.stream() .map(obj -> { return new BigDecimal((obj).toString()); }).collect(Collectors.toList()); //å°ä¸æç(转æ¢è±æç()) formula = formula.replace("ï¼", "(") .replace("ï¼", ")") .replace("ï¼", ","); //ç¶åæåå ¬å¼ String strs = formula.substring(0, formula.indexOf("(")); String upperStr = strs.toUpperCase(); if (upperStr.matches(".*\\d.*")) { upperStr = ""; } //ç¶åè·åæå¤é¢æ¬å·éé¢çå¼,åæ ¹æ®","åå² int start = formula.indexOf("("); int end = -1; int a = 0; for (int i = start; i < formula.length(); i++) { char c = formula.charAt(i); if (c == '(') { a++; } else if (c == ')') { a--; if (a == 0) { end = i; } } } if (start == -1 || end == -1) { throw new ErrorException("å ¬å¼æ¬å·ä¸å¹é : " + formula); } String argumentsStr = formula.substring(start + 1, end); List<String> arguments = new ArrayList<>(); int bracketCount = 0; StringBuilder currentArgument = new StringBuilder(); for (char c : argumentsStr.toCharArray()) { if (c == ',' && bracketCount == 0) { arguments.add(currentArgument.toString()); currentArgument.setLength(0); } else { if (c == '(') bracketCount++; if (c == ')') bracketCount--; currentArgument.append(c); } } arguments.add(currentArgument.toString()); String[] bracketStrs = arguments.toArray(new String[0]); List<BigDecimal> results = new ArrayList<>(); for (String expr : bracketStrs) { Pattern pattern = Pattern.compile("([A-Z])(\\d+)"); Matcher matcher = pattern.matcher(expr); StringBuffer sb = new StringBuffer(); while (matcher.find()) { String letter = matcher.group(1); int index = Integer.parseInt(matcher.group(2)) - 1; // å°1-based转为0-based if (index < bigDecimalList.size()) { matcher.appendReplacement(sb, bigDecimalList.get(index).toString()); } else { throw new RuntimeException("å ¬å¼ä¸ç䏿 " + index + " è¶ åºèå´"); } } matcher.appendTail(sb); // 计ç®è¡¨è¾¾å¼ ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); try { Object result = engine.eval(sb.toString()); results.add(new BigDecimal(result.toString())); } catch (Exception e) { throw new IllegalArgumentException("æ æ³è®¡ç®å ¬å¼: " + sb, e); } } // æ ¹æ®å½æ°åç§°è¿è¡ç¸åºè®¡ç® BigDecimal finalResult; if (upperStr.equals("") || upperStr == null) { finalResult = results.get(0); } else { switch (upperStr) { case "MAX": finalResult = results.stream().max(BigDecimal::compareTo) .orElseThrow(() -> new IllegalArgumentException("æ æ³è®¡ç®MAXå¼")); break; case "MIN": finalResult = results.stream().min(BigDecimal::compareTo) .orElseThrow(() -> new IllegalArgumentException("æ æ³è®¡ç®MINå¼")); break; case "SUM": finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::add); break; case "ABS": finalResult = results.stream().map(BigDecimal::abs).reduce(BigDecimal.ZERO, BigDecimal::add); break; case "AVERAGE": finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::divide) .divide(BigDecimal.valueOf(results.size()), 2, BigDecimal.ROUND_HALF_UP); break; case "MEDIAN": int size = results.size(); if (size % 2 == 1) { finalResult = results.get(size / 2); } else { BigDecimal sum = results.get(size / 2 - 1).add(results.get(size / 2)); finalResult = sum.divide(BigDecimal.valueOf(2), 2, BigDecimal.ROUND_HALF_UP); } break; default: throw new UnsupportedOperationException("æä¸æ¯æå½æ°: " + upperStr); } } return finalResult.toString(); // å¦åï¼æ²¡æå ¬å¼ä»£è¡¨ä¸éè¦è®¡ç®ï¼ç´æ¥æåListéé¢çæ°æ® } } cnas-device/src/main/resources/mapper/DataConfigMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,50 @@ <?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="com.ruoyi.device.mapper.DataConfigMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.device.pojo.DataConfig"> <id column="id" property="id" /> <result column="formula" property="formula" /> <result column="referx" property="referx" /> <result column="refery" property="refery" /> <result column="x" property="x" /> <result column="y" property="y" /> </resultMap> <select id="selectDataConfigList" resultType="com.ruoyi.device.dto.DeviceConfigDtoPage"> SELECT d.device_name, d.file_type, d.collect_url, d.storage_url, d.ip, d.entrust_code, d.sample_code, d.db_file_name, ip.inspection_item, ip.inspection_item_class, if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '', ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass, ip.sample, ddc.formula, ddc.referx, ddc.refery, ddc.x, ddc.y, ddc.another_name, ddc.matching_name, ddc.id, ip.id structureItemParameterId FROM device d left join structure_item_parameter ip on FIND_IN_SET(ip.id, d.ins_product_ids) left join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id where d.id = #{deviceId} </select> <select id="deleteDataConfig" resultType="integer"> SELECT ddc.id FROM device d left join structure_item_parameter ip on not FIND_IN_SET(ip.id, d.ins_product_ids) inner join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id </select> </mapper> cnas-device/src/main/resources/mapper/DeviceMaintenanceMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ <?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="com.ruoyi.device.mapper.DeviceMaintenanceMapper"> <select id="getDeviceMaintenanceParam" resultType="com.ruoyi.device.pojo.DeviceMaintenance"> select id,device_id,device_name, device_number,management_number,content,name ,date from device_maintenance </select> <select id="deviceMaintenanceExport" resultType="com.ruoyi.device.excel.DeviceMaintenanceExport"> select id, device_id, device_name, device_number, management_number, content, date, if(maintenance_type = 1, '计åä¸ç»´æ¤', '使ç¨ååç»´æ¤'), next_date, name, comments from device_maintenance dm where dm.device_id = #{deviceId} </select> </mapper> cnas-device/src/main/resources/mapper/DeviceMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,189 @@ <?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="com.ruoyi.device.mapper.DeviceMapper"> <select id="selectDeviceParameter" resultType="com.ruoyi.device.pojo.Device"> select * from( select id, large_category, date_production, equipment_manager, authorized_person, device_name, internal_code, asset_code, calibration_date, scrap_time, acceptance_records, subclass, factory_no, acquisition_date, accurate_measurement, specification_model, device_status, storage_point, activation_date, latest_traceability, down_time, maintenance_records, manufacturer, detection_type, _costs, calibration_certicate, create_user, create_time, update_user, update_time, status from device ) a <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> ${ew.customSqlSegment} </if> </select> <select id="selectEquipmentOverview" resultType="com.ruoyi.device.pojo.Device"> select * from( select id, device_name, specification_model, device_status, create_user, status, update_time from device ) a <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> ${ew.customSqlSegment} </if> </select> <select id="authorizedPerson" resultType="com.ruoyi.device.pojo.Device"> select id, authorized_person from device </select> <select id="search" resultType="com.ruoyi.device.pojo.Device"> select * from device <where> <if test="deviceName!=null and deviceName!=''"> and device_name like concat('%',#{deviceName},'%') </if> <if test="status!=null and status!=''"> and device_status = status </if> <if test="specificationModel!=null and specificationModel!= ''"> and specification_model = #{specificationModel} </if> <if test="largeCategory!=null"> and large_category = #{largeCategory} </if> <if test="largeCategory == 'null'"> and (large_category = '' or large_category is null) </if> </where> </select> <select id="selectDeviceImage" resultType="com.ruoyi.device.pojo.Device"> select (image_upload, create_user, create_time) values (#{image_upload} , #{createUser} , #{createTime}) </select> <select id="selectDevicePrincipal" resultType="com.ruoyi.device.pojo.Device"> select id, equipment_manager from device </select> <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.Device"> select * from( SELECT d.*, cmr.calibration_date as last_calibration_date_two, cmr.next_calibration_date as next_calibration_date_two, GROUP_CONCAT(distinct inspection_item SEPARATOR ';') AS insProductItem, u.name , l.laboratory_name FROM device d LEFT JOIN `user` u ON u.id = d.equipment_manager LEFT JOIN laboratory l ON l.id = d.subordinate_departments_id LEFT JOIN device_metric_record cmr ON d.id = cmr.device_id LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids) <where> <if test="laboratoryNameIsNull != null and laboratoryNameIsNull == true"> l.laboratory_name is null </if> AND cmr.type = 'calibrate' or cmr.type is null or cmr.type = '' </where> GROUP BY d.id, u.name, l.laboratory_name ) a <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> ${ew.customSqlSegment} </if> </select> <select id="getInspectionItemSubclass" resultType="map"> SELECT ip.inspection_item, if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '', ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass FROM ins_product ip where ip.ins_sample_id = #{id} </select> <resultMap id="treeDeviceDto" type="map"> <result property="label" column="laboratory_name"/> <result property="value" column="value" /> <collection property="children" resultMap="storagePointMap" javaType="List"/> </resultMap> <resultMap id="storagePointMap" type="map"> <result property="value" column="value"/> <result property="label" column="storage_point"/> <collection property="children" resultMap="deviceNameMap" javaType="List"/> </resultMap> <resultMap id="deviceNameMap" type="map"> <result property="value" column="id"/> <result property="label" column="device_name"/> <result property="managementNumber" column="management_number"/> </resultMap> <select id="treeDevice" resultMap="treeDeviceDto"> select d.id, case when l.laboratory_name is null || l.laboratory_name ='' then 'å ¶ä»' else l.laboratory_name end as laboratory_name, case when d.storage_point is null || d.storage_point ='' then 'å ¶ä»' else d.storage_point end as storage_point, d.device_name, d.management_number, null as value from device d LEFT JOIN laboratory l ON l.id = d.subordinate_departments_id <where> <if test="deviceName!=null and deviceName!=''"> and device_name like concat('%',#{deviceName},'%') </if> </where> order by l.laboratory_name desc, d.storage_point desc </select> <select id="selectDeviceByCode" resultType="com.ruoyi.device.dto.DeviceDto"> SELECT d.*, GROUP_CONCAT(DISTINCT inspection_item SEPARATOR ';') AS ins_product_item, l.laboratory_name, u1.name equipmentManager_name, u2.name authorized_person_name FROM device d LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids) LEFT JOIN laboratory l ON d.subordinate_departments_id = l.id LEFT JOIN user u1 ON u1.id = d.equipment_manager LEFT JOIN user u2 ON u2.id = d.authorized_person WHERE d.id = #{id} GROUP BY d.id, l.laboratory_name, u1.name, u2.name </select> </mapper> inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
@@ -211,11 +211,6 @@ return Result.success(); } @Scheduled(fixedDelay = 1200000) public void getIfsOrderTiming() { insOrderService.getIfsOrder(); } @ApiOperation(value = "ä¿®æ¹è®¢ååå·") @PostMapping("/updateEntrustCode") inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -35,10 +35,7 @@ import com.ruoyi.common.core.domain.entity.InformationNotification; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.utils.DateImageUtil; import com.ruoyi.common.utils.QueryWrappers; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.WxCpUtils; import com.ruoyi.common.utils.*; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.dto.*; import com.ruoyi.inspect.mapper.*; @@ -634,10 +631,7 @@ } String thing = null; if (product.getTemplateId() != null && set.add(product.getTemplateId())) { long begin = System.currentTimeMillis(); thing = standardTemplateService.getStandTempThingById(product.getTemplateId()); long end = System.currentTimeMillis(); System.out.println("=========æ¶é´====" + (end - begin)); } if (StrUtil.isNotEmpty(thing)) { JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0))); @@ -648,10 +642,7 @@ style.put("columnlen", config.get("columnlen")); product.setTemplate(cellData); product.setStyle(style); long begin = System.currentTimeMillis(); product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId())); long end = System.currentTimeMillis(); System.out.println("=========æ¶é´22222====" + (end - begin)); } } } @@ -1527,7 +1518,7 @@ standardMethod2.append("ã").append(s); } standardMethod2.replace(0, 1, ""); // todo: æ£æµç±»å // todo: æ¥è¯¢åå ¸æ£æµç±»å // List<SysDictData> sysDictData = iSysDictTypeService.selectDictDataByName(""); String orderType = null; @@ -2289,6 +2280,7 @@ String finalModelStr = modelStr; // todo: æ¥è¯¢åå ¸ // List<SysDictData> sysDictData = iSysDictTypeService.selectDictDataByName(""); String orderType = null; String formType = null; inspect-server/src/main/java/com/ruoyi/inspect/task/RawMaterIalSchedule.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.ruoyi.inspect.task; import com.ruoyi.inspect.service.InsOrderService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @Author zhuo * @Date 2025/2/20 */ @Component public class RawMaterIalSchedule { @Resource private InsOrderService insOrderService; /** * 宿¶ä»»å¡è·åéè´è®¢å */ @Scheduled(fixedDelay = 1200000) public void getIfsOrderTiming() { insOrderService.getIfsOrder(); } } pom.xml
@@ -264,6 +264,13 @@ <version>${ruoyi.version}</version> </dependency> <!--cnas设å¤ç®¡ç--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>cnas-device</artifactId> <version>${ruoyi.version}</version> </dependency> <!-- minio --> <dependency> <groupId>io.minio</groupId> @@ -376,6 +383,7 @@ <module>performance-server</module> <module>cnas-require</module> <module>cnas-manage</module> <module>cnas-device</module> </modules> <packaging>pom</packaging> ruoyi-admin/pom.xml
@@ -91,6 +91,13 @@ <artifactId>cnas-manage</artifactId> </dependency> <!--cnas设å¤ç®¡ç--> <dependency> <groupId>com.ruoyi</groupId> <artifactId>cnas-device</artifactId> </dependency> </dependencies> <build>