From 49c76070b21e4b21a22fcd787bf36a7a515f67b9 Mon Sep 17 00:00:00 2001 From: mh Date: Fri, 10 Jan 2025 18:03:16 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81mybatis-plus=20xml=E5=92=8C=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E5=85=B1=E7=94=A8=E5=A4=84=E7=90=86=EF=BC=9B=202?= =?UTF-8?q?=E3=80=81=E8=AE=BE=E5=A4=87=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=EF=BC=9B=203=E3=80=81=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E7=AE=A1=E7=90=86=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mh-admin/pom.xml | 24 +- .../src/main/java/com/mh/MHApplication.java | 3 +- .../device/DeviceLedgerController.java | 88 ++++++ .../device/DeviceQrManageController.java | 4 +- mh-admin/src/main/resources/application.yml | 14 +- .../test/java/com/mh/MHApplicationTest.java | 33 +++ mh-common/pom.xml | 16 +- .../domain/entity/CommunicationParams.java | 56 +++- .../core/domain/entity/DeviceInOutManage.java | 46 +++ .../core/domain/entity/DeviceLedger.java | 254 +++++++++++++++++ .../core/domain/entity/DeviceQrManage.java | 45 +++ .../core/domain/entity/GatewayManage.java | 22 +- .../core/domain/entity/MaintainInfo.java | 45 +++ .../core/domain/entity/SparePartsManage.java | 1 - .../mh/common/utils/qrcode/QrCodeUtil.java | 140 ++++++++++ .../mh/framework/config/MyBatisConfig.java | 264 +++++++++--------- .../framework/config/MyBatisPlusConfig.java | 134 +++++++++ .../mapper/device/DeviceLedgerMapper.java | 16 ++ .../service/device/IDeviceLedgerService.java | 24 ++ .../device/IDeviceQrManageService.java | 2 +- .../device/impl/DeviceLedgerServiceImpl.java | 76 +++++ .../impl/DeviceQrManageServiceImpl.java | 20 +- .../device/impl/MaintainInfoServiceImpl.java | 6 + pom.xml | 53 +++- sql/表结构设计.sql | 6 + 25 files changed, 1199 insertions(+), 193 deletions(-) create mode 100644 mh-admin/src/main/java/com/mh/web/controller/device/DeviceLedgerController.java create mode 100644 mh-admin/src/test/java/com/mh/MHApplicationTest.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java create mode 100644 mh-common/src/main/java/com/mh/common/utils/qrcode/QrCodeUtil.java create mode 100644 mh-framework/src/main/java/com/mh/framework/config/MyBatisPlusConfig.java create mode 100644 mh-system/src/main/java/com/mh/system/mapper/device/DeviceLedgerMapper.java create mode 100644 mh-system/src/main/java/com/mh/system/service/device/IDeviceLedgerService.java create mode 100644 mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java diff --git a/mh-admin/pom.xml b/mh-admin/pom.xml index 0de51ee..9b63aa2 100644 --- a/mh-admin/pom.xml +++ b/mh-admin/pom.xml @@ -23,6 +23,10 @@ spring-boot-devtools true + + org.springframework.boot + spring-boot-starter-test + @@ -30,17 +34,17 @@ springdoc-openapi-starter-webmvc-ui - - - com.mysql - mysql-connector-j - + + + + + - - - com.microsoft.sqlserver - mssql-jdbc - + + + + + diff --git a/mh-admin/src/main/java/com/mh/MHApplication.java b/mh-admin/src/main/java/com/mh/MHApplication.java index 6a0d2e7..a733d29 100644 --- a/mh-admin/src/main/java/com/mh/MHApplication.java +++ b/mh-admin/src/main/java/com/mh/MHApplication.java @@ -4,9 +4,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + /** * 启动程序 - * + * * @author mh */ @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) diff --git a/mh-admin/src/main/java/com/mh/web/controller/device/DeviceLedgerController.java b/mh-admin/src/main/java/com/mh/web/controller/device/DeviceLedgerController.java new file mode 100644 index 0000000..5d1b4bd --- /dev/null +++ b/mh-admin/src/main/java/com/mh/web/controller/device/DeviceLedgerController.java @@ -0,0 +1,88 @@ +package com.mh.web.controller.device; + +import com.mh.common.annotation.Log; +import com.mh.common.core.controller.BaseController; +import com.mh.common.core.domain.AjaxResult; +import com.mh.common.core.domain.entity.DeviceLedger; +import com.mh.common.core.page.TableDataInfo; +import com.mh.common.enums.BusinessType; +import com.mh.system.service.device.IDeviceLedgerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 设备台账管理 + * @date 2025-01-10 16:38:04 + */ +@RestController +@RequestMapping("/device/ledger") +public class DeviceLedgerController extends BaseController { + + @Autowired + private IDeviceLedgerService deviceLedgerService; + + /** + * 获取设备台账列表内容数据 + */ + @PreAuthorize("@ss.hasPermi('system:ledger:list')") + @GetMapping("/list") + public TableDataInfo list(DeviceLedger ledgerInfo) + { + startPage(); + List list = deviceLedgerService.selectDeviceLedgerList(ledgerInfo); + return getDataTable(list); + } + + /** + * 根据设备台账id获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:ledger:query')") + @GetMapping(value = "/{ledgerId}") + public AjaxResult getInfo(@PathVariable String ledgerId) + { + return success(deviceLedgerService.selectDeviceLedgerById(ledgerId)); + } + + /** + * 新增设备台账 + */ + @PreAuthorize("@ss.hasPermi('system:ledger:add')") + @Log(title = "设备台账管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody DeviceLedger deviceLedger) + { + deviceLedger.setCreateBy(getUsername()); + return toAjax(deviceLedgerService.insertDeviceLedger(deviceLedger)); + } + + /** + * 修改设备台账信息 + */ + @PreAuthorize("@ss.hasPermi('system:ledger:edit')") + @Log(title = "设备台账管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody DeviceLedger deviceLedger) + { + deviceLedger.setUpdateBy(getUsername()); + return toAjax(deviceLedgerService.updateDeviceLedger(deviceLedger)); + } + + /** + * 删除设备台账管理 + */ + @PreAuthorize("@ss.hasPermi('system:ledger:remove')") + @Log(title = "设备台账管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ledgerIds}") + public AjaxResult remove(@PathVariable String[] ledgerIds) + { + return toAjax(deviceLedgerService.deleteDeviceLedgerByIds(ledgerIds)); + } + +} diff --git a/mh-admin/src/main/java/com/mh/web/controller/device/DeviceQrManageController.java b/mh-admin/src/main/java/com/mh/web/controller/device/DeviceQrManageController.java index a0bdc4b..47067e9 100644 --- a/mh-admin/src/main/java/com/mh/web/controller/device/DeviceQrManageController.java +++ b/mh-admin/src/main/java/com/mh/web/controller/device/DeviceQrManageController.java @@ -30,8 +30,8 @@ public class DeviceQrManageController extends BaseController { @PreAuthorize("@ss.hasPermi('system:qr:create')") @GetMapping("/create") - public AjaxResult create(@RequestParam String qrNum) { - return success(deviceQrManageService.createQrCode(qrNum)); + public AjaxResult create(@RequestParam Integer qrNum) throws Exception { + return success(deviceQrManageService.createQrCode(qrNum, getUsername())); } diff --git a/mh-admin/src/main/resources/application.yml b/mh-admin/src/main/resources/application.yml index 5ccb02f..35ee359 100644 --- a/mh-admin/src/main/resources/application.yml +++ b/mh-admin/src/main/resources/application.yml @@ -99,20 +99,22 @@ token: expireTime: 30 # MyBatis配置 -mybatis: +mybatis-plus: # 搜索指定包别名 - typeAliasesPackage: com.mh.**.domain + type-aliases-package: com.mh.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 - mapperLocations: classpath*:mapper/**/*Mapper.xml + mapper-locations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 - configLocation: classpath:mybatis/mybatis-config.xml + config-location: classpath:mybatis/mybatis-config.xml + configuration: + map-underscore-to-camel-case: true # PageHelper分页插件 pagehelper: - helperDialect: postgresql reasonable: true - supportMethodsArguments: true params: count=countSql + support-methods-arguments: true + helper-dialect: postgresql # Springdoc配置 springdoc: diff --git a/mh-admin/src/test/java/com/mh/MHApplicationTest.java b/mh-admin/src/test/java/com/mh/MHApplicationTest.java new file mode 100644 index 0000000..02d694a --- /dev/null +++ b/mh-admin/src/test/java/com/mh/MHApplicationTest.java @@ -0,0 +1,33 @@ +package com.mh; + +import com.mh.common.core.domain.entity.SysUser; +import com.mh.system.service.ISysUserService; +import com.mh.system.service.device.IDeviceQrManageService; +import org.checkerframework.checker.units.qual.A; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 测试类 + * @date 2025-01-10 11:28:36 + */ +@SpringBootTest +public class MHApplicationTest { + + @Autowired + private IDeviceQrManageService deviceQrManageService; + + @Autowired + private ISysUserService sysUserService; + + @Test + public void test() throws Exception { + SysUser sysUser = sysUserService.selectUserById(1L); + System.out.println(sysUser); + deviceQrManageService.createQrCode(10, "admin"); + } +} diff --git a/mh-common/pom.xml b/mh-common/pom.xml index d9f74a9..8eb1725 100644 --- a/mh-common/pom.xml +++ b/mh-common/pom.xml @@ -121,16 +121,24 @@ com.baomidou mybatis-plus-annotation - 3.5.9 - compile com.baomidou mybatis-plus-core - 3.5.9 - compile + + + com.baomidou + mybatis-plus-spring + + com.google.zxing + javase + + + com.google.zxing + core + diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/CommunicationParams.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/CommunicationParams.java index 012b656..ed30e50 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/CommunicationParams.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/CommunicationParams.java @@ -1,11 +1,15 @@ package com.mh.common.core.domain.entity; 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 com.fasterxml.jackson.annotation.JsonInclude; import com.mh.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; +import java.util.Map; + /** * @author LJF * @version 1.0 @@ -47,11 +51,48 @@ public class CommunicationParams extends BaseEntity { */ private String parity; - /** - * 备注 - */ + @TableField(exist = false) + private String searchValue; + + /** 备注 */ + @TableField(exist = false) private String remark; + /** 请求参数 */ + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + @Override + public String getSearchValue() { + return searchValue; + } + + @Override + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + @Override + public String getRemark() { + return remark; + } + + @Override + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public Map getParams() { + return params; + } + + @Override + public void setParams(Map params) { + this.params = params; + } + public String getId() { return id; } @@ -100,14 +141,6 @@ public class CommunicationParams extends BaseEntity { this.parity = parity; } - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - @Override public String toString() { return new ToStringBuilder(this) @@ -117,7 +150,6 @@ public class CommunicationParams extends BaseEntity { .append("dataBit", dataBit) .append("stopBit", stopBit) .append("parity", parity) - .append("remark", remark) .toString(); } } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceInOutManage.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceInOutManage.java index 04191e2..1e39c62 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceInOutManage.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceInOutManage.java @@ -1,11 +1,15 @@ package com.mh.common.core.domain.entity; 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 com.fasterxml.jackson.annotation.JsonInclude; import com.mh.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; +import java.util.Map; + /** * @author LJF * @version 1.0 @@ -44,6 +48,48 @@ public class DeviceInOutManage extends BaseEntity { */ private Integer inventoryLevels; + @TableField(exist = false) + private String searchValue; + + /** 备注 */ + @TableField(exist = false) + private String remark; + + /** 请求参数 */ + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + @Override + public String getSearchValue() { + return searchValue; + } + + @Override + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + @Override + public String getRemark() { + return remark; + } + + @Override + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public Map getParams() { + return params; + } + + @Override + public void setParams(Map params) { + this.params = params; + } + public String getId() { return id; } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java new file mode 100644 index 0000000..7c6fb67 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java @@ -0,0 +1,254 @@ +package com.mh.common.core.domain.entity; + +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 com.fasterxml.jackson.annotation.JsonInclude; +import com.mh.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.Date; +import java.util.Map; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 设备二维码维护管理 + * @date 2025-01-09 16:42:51 + */ +@TableName("device_ledger") +public class DeviceLedger extends BaseEntity { + + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 设备规格型号 + */ + private String modelSpecs; + + /** + * 设备资产编号 + */ + private String assetNum; + + /** + * 设备二维码id + */ + private String qrCodeId; + + /** + * 设备的预计使用寿命 + */ + private String serviceLife; + + /** + * 设备所属类型(字典值获取) + */ + private String deviceType; + + /** + * 设备的技术参数描述 + */ + private String techParams; + + /** + * 设备相关的技术文档链接或文件名 + */ + private String techDoc; + + /** + * 设备的安装日期和时间 + */ + private Date installTime; + + /** + * 二维码状态:0:已绑定,1:未绑定 + */ + private Integer status; + + /** + * 是否是需要采集(0:是,1:不采集) + */ + private Integer isCollection; + + /** + * 是否计算能效(0:计算,1不计算) + */ + private Integer isCalcEnergy; + + @TableField(exist = false) + private String searchValue; + + /** 备注 */ + @TableField(exist = false) + private String remark; + + /** 请求参数 */ + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getModelSpecs() { + return modelSpecs; + } + + public void setModelSpecs(String modelSpecs) { + this.modelSpecs = modelSpecs; + } + + public String getAssetNum() { + return assetNum; + } + + public void setAssetNum(String assetNum) { + this.assetNum = assetNum; + } + + public String getQrCodeId() { + return qrCodeId; + } + + public void setQrCodeId(String qrCodeId) { + this.qrCodeId = qrCodeId; + } + + public String getServiceLife() { + return serviceLife; + } + + public void setServiceLife(String serviceLife) { + this.serviceLife = serviceLife; + } + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String getTechParams() { + return techParams; + } + + public void setTechParams(String techParams) { + this.techParams = techParams; + } + + public String getTechDoc() { + return techDoc; + } + + public void setTechDoc(String techDoc) { + this.techDoc = techDoc; + } + + public Date getInstallTime() { + return installTime; + } + + public void setInstallTime(Date installTime) { + this.installTime = installTime; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public Integer getIsCollection() { + return isCollection; + } + + public void setIsCollection(Integer isCollection) { + this.isCollection = isCollection; + } + + public Integer getIsCalcEnergy() { + return isCalcEnergy; + } + + public void setIsCalcEnergy(Integer isCalcEnergy) { + this.isCalcEnergy = isCalcEnergy; + } + + @Override + public String getSearchValue() { + return searchValue; + } + + @Override + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + @Override + public String getRemark() { + return remark; + } + + @Override + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public Map getParams() { + return params; + } + + @Override + public void setParams(Map params) { + this.params = params; + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("id", id) + .append("deviceName", deviceName) + .append("modelSpecs", modelSpecs) + .append("assetNum", assetNum) + .append("qrCodeId", qrCodeId) + .append("serviceLife", serviceLife) + .append("deviceType", deviceType) + .append("techParams", techParams) + .append("techDoc", techDoc) + .append("installTime", installTime) + .append("status", status) + .append("isCollection", isCollection) + .append("isCalcEnergy", isCalcEnergy) + .append("searchValue", searchValue) + .append("remark", remark) + .append("params", params) + .toString(); + } +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceQrManage.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceQrManage.java index 719433f..082bfa5 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceQrManage.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceQrManage.java @@ -1,12 +1,15 @@ package com.mh.common.core.domain.entity; 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 com.fasterxml.jackson.annotation.JsonInclude; import com.mh.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import java.util.Date; +import java.util.Map; /** * @author LJF @@ -51,6 +54,48 @@ public class DeviceQrManage extends BaseEntity { */ private Integer status; + @TableField(exist = false) + private String searchValue; + + /** 备注 */ + @TableField(exist = false) + private String remark; + + /** 请求参数 */ + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + @Override + public String getRemark() { + return remark; + } + + @Override + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public Map getParams() { + return params; + } + + @Override + public void setParams(Map params) { + this.params = params; + } + + @Override + public String getSearchValue() { + return searchValue; + } + + @Override + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + public Integer getStatus() { return status; } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/GatewayManage.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/GatewayManage.java index 2a54c13..02cda48 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/GatewayManage.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/GatewayManage.java @@ -1,12 +1,15 @@ package com.mh.common.core.domain.entity; 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 com.fasterxml.jackson.annotation.JsonInclude; import com.mh.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import java.util.Date; +import java.util.Map; /** * @author ljf @@ -29,10 +32,17 @@ public class GatewayManage extends BaseEntity { private String internetCard; // 物联网卡号 private int operatorType; // 0:中国移动 1:中国联通 2:中国电信 private int communicationType; // 通讯类型 - private String remark; // 备注 private int grade; // 标志位(连接状态) 0:正常;1:不在线;2:异常 private Integer status; // (连接状态) 0:正常;1:不在线;2:异常 + @TableField(exist = false) + private String searchValue; + + /** 请求参数 */ + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + public Integer getStatus() { return status; } @@ -121,16 +131,6 @@ public class GatewayManage extends BaseEntity { this.communicationType = communicationType; } - @Override - public String getRemark() { - return remark; - } - - @Override - public void setRemark(String remark) { - this.remark = remark; - } - public int getGrade() { return grade; } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainInfo.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainInfo.java index ec08b82..2ba418a 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainInfo.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainInfo.java @@ -2,13 +2,16 @@ package com.mh.common.core.domain.entity; 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 com.fasterxml.jackson.annotation.JsonInclude; import com.mh.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import java.math.BigDecimal; import java.util.Date; +import java.util.Map; @TableName("maintain_info") public class MaintainInfo extends BaseEntity { @@ -25,6 +28,48 @@ public class MaintainInfo extends BaseEntity { private Date execTime; // 执行时间 private Integer spendTime; // 花费时间 + @TableField(exist = false) + private String searchValue; + + /** 备注 */ + @TableField(exist = false) + private String remark; + + /** 请求参数 */ + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + @Override + public String getSearchValue() { + return searchValue; + } + + @Override + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + @Override + public String getRemark() { + return remark; + } + + @Override + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public Map getParams() { + return params; + } + + @Override + public void setParams(Map params) { + this.params = params; + } + public String getId() { return id; } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/SparePartsManage.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/SparePartsManage.java index ec42d80..7f01d01 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/SparePartsManage.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/SparePartsManage.java @@ -7,7 +7,6 @@ import com.mh.common.core.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import java.math.BigDecimal; -import java.util.Date; /** * @author LJF diff --git a/mh-common/src/main/java/com/mh/common/utils/qrcode/QrCodeUtil.java b/mh-common/src/main/java/com/mh/common/utils/qrcode/QrCodeUtil.java new file mode 100644 index 0000000..fe083b5 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/utils/qrcode/QrCodeUtil.java @@ -0,0 +1,140 @@ +package com.mh.common.utils.qrcode; + +import com.google.zxing.*; +import com.google.zxing.client.j2se.BufferedImageLuminanceSource; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.common.HybridBinarizer; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.OutputStream; +import java.util.Hashtable; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 二维码工具类 + * @date 2025-01-10 11:01:32 + */ +public class QrCodeUtil { + //编码格式,采用utf-8 + private static final String UNICODE = "utf-8"; + //图片格式 + private static final String FORMAT = "JPG"; + //二维码宽度像素pixels数量 + private static final int QRCODE_WIDTH = 300; + //二维码高度像素pixels数量 + private static final int QRCODE_HEIGHT = 300; + //LOGO宽度像素pixels数量 + private static final int LOGO_WIDTH = 100; + //LOGO高度像素pixels数量 + private static final int LOGO_HEIGHT = 100; + + //生成二维码图片 + //content 二维码内容 + //logoPath logo图片地址 + private static BufferedImage createImage(String content, String logoPath) throws Exception { + Hashtable hints = new Hashtable(); + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + hints.put(EncodeHintType.CHARACTER_SET, UNICODE); + hints.put(EncodeHintType.MARGIN, 1); + BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_WIDTH, QRCODE_HEIGHT, + hints); + int width = bitMatrix.getWidth(); + int height = bitMatrix.getHeight(); + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); + } + } + if (logoPath == null || "".equals(logoPath)) { + return image; + } + // 插入图片 + QrCodeUtil.insertImage(image, logoPath); + return image; + } + + //在图片上插入LOGO + //source 二维码图片内容 + //logoPath LOGO图片地址 + private static void insertImage(BufferedImage source, String logoPath) throws Exception { + File file = new File(logoPath); + if (!file.exists()) { + throw new Exception("logo file not found."); + } + Image src = ImageIO.read(new File(logoPath)); + int width = src.getWidth(null); + int height = src.getHeight(null); + if (width > LOGO_WIDTH) { + width = LOGO_WIDTH; + } + if (height > LOGO_HEIGHT) { + height = LOGO_HEIGHT; + } + Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH); + BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + Graphics g = tag.getGraphics(); + g.drawImage(image, 0, 0, null); // 绘制缩小后的图 + g.dispose(); + src = image; + // 插入LOGO + Graphics2D graph = source.createGraphics(); + int x = (QRCODE_WIDTH - width) / 2; + int y = (QRCODE_HEIGHT - height) / 2; + graph.drawImage(src, x, y, width, height, null); + Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6); + graph.setStroke(new BasicStroke(3f)); + graph.draw(shape); + graph.dispose(); + } + + //生成带logo的二维码图片,保存到指定的路径 + // content 二维码内容 + // logoPath logo图片地址 + // destPath 生成图片的存储路径 + public static String save(String content, String logoPath, String destPath) throws Exception { + BufferedImage image = QrCodeUtil.createImage(content, logoPath); + File file = new File(destPath); + String path = file.getAbsolutePath(); + File filePath = new File(path); + if (!filePath.exists() && !filePath.isDirectory()) { + filePath.mkdirs(); + } + String fileName = file.getName(); + fileName = fileName.substring(0, fileName.indexOf(".")>0?fileName.indexOf("."):fileName.length()) + + "." + FORMAT.toLowerCase(); + System.out.println("destPath:"+destPath); + ImageIO.write(image, FORMAT, new File(destPath)); + return fileName; + } + + //生成二维码图片,直接输出到OutputStream + public static void encode(String content, String logoPath, OutputStream output) + throws Exception { + BufferedImage image = QrCodeUtil.createImage(content, logoPath); + ImageIO.write(image, FORMAT, output); + } + + //解析二维码图片,得到包含的内容 + public static String decode(String path) throws Exception { + File file = new File(path); + BufferedImage image = ImageIO.read(file); + if (image == null) { + return null; + } + BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image); + BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); + Result result; + Hashtable hints = new Hashtable(); + hints.put(DecodeHintType.CHARACTER_SET, UNICODE); + result = new MultiFormatReader().decode(bitmap, hints); + return result.getText(); + } +} diff --git a/mh-framework/src/main/java/com/mh/framework/config/MyBatisConfig.java b/mh-framework/src/main/java/com/mh/framework/config/MyBatisConfig.java index 223d3e9..fe3fc9f 100644 --- a/mh-framework/src/main/java/com/mh/framework/config/MyBatisConfig.java +++ b/mh-framework/src/main/java/com/mh/framework/config/MyBatisConfig.java @@ -1,132 +1,132 @@ -package com.mh.framework.config; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import javax.sql.DataSource; -import org.apache.ibatis.io.VFS; -import org.apache.ibatis.session.SqlSessionFactory; -import org.mybatis.spring.SqlSessionFactoryBean; -import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; -import org.springframework.core.io.DefaultResourceLoader; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.core.type.classreading.CachingMetadataReaderFactory; -import org.springframework.core.type.classreading.MetadataReader; -import org.springframework.core.type.classreading.MetadataReaderFactory; -import org.springframework.util.ClassUtils; -import com.mh.common.utils.StringUtils; - -/** - * Mybatis支持*匹配扫描包 - * - * @author mh - */ -@Configuration -public class MyBatisConfig -{ - @Autowired - private Environment env; - - static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; - - public static String setTypeAliasesPackage(String typeAliasesPackage) - { - ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); - MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); - List allResult = new ArrayList(); - try - { - for (String aliasesPackage : typeAliasesPackage.split(",")) - { - List result = new ArrayList(); - aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX - + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; - Resource[] resources = resolver.getResources(aliasesPackage); - if (resources != null && resources.length > 0) - { - MetadataReader metadataReader = null; - for (Resource resource : resources) - { - if (resource.isReadable()) - { - metadataReader = metadataReaderFactory.getMetadataReader(resource); - try - { - result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); - } - catch (ClassNotFoundException e) - { - e.printStackTrace(); - } - } - } - } - if (result.size() > 0) - { - HashSet hashResult = new HashSet(result); - allResult.addAll(hashResult); - } - } - if (allResult.size() > 0) - { - typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); - } - else - { - throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); - } - } - catch (IOException e) - { - e.printStackTrace(); - } - return typeAliasesPackage; - } - - public Resource[] resolveMapperLocations(String[] mapperLocations) - { - ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); - List resources = new ArrayList(); - if (mapperLocations != null) - { - for (String mapperLocation : mapperLocations) - { - try - { - Resource[] mappers = resourceResolver.getResources(mapperLocation); - resources.addAll(Arrays.asList(mappers)); - } - catch (IOException e) - { - // ignore - } - } - } - return resources.toArray(new Resource[resources.size()]); - } - - @Bean - public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception - { - String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); - String mapperLocations = env.getProperty("mybatis.mapperLocations"); - String configLocation = env.getProperty("mybatis.configLocation"); - typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); - VFS.addImplClass(SpringBootVFS.class); - - final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); - sessionFactory.setDataSource(dataSource); - sessionFactory.setTypeAliasesPackage(typeAliasesPackage); - sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); - sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); - return sessionFactory.getObject(); - } -} \ No newline at end of file +//package com.mh.framework.config; +// +//import java.io.IOException; +//import java.util.ArrayList; +//import java.util.Arrays; +//import java.util.HashSet; +//import java.util.List; +//import javax.sql.DataSource; +//import org.apache.ibatis.io.VFS; +//import org.apache.ibatis.session.SqlSessionFactory; +//import org.mybatis.spring.SqlSessionFactoryBean; +//import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.core.env.Environment; +//import org.springframework.core.io.DefaultResourceLoader; +//import org.springframework.core.io.Resource; +//import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +//import org.springframework.core.io.support.ResourcePatternResolver; +//import org.springframework.core.type.classreading.CachingMetadataReaderFactory; +//import org.springframework.core.type.classreading.MetadataReader; +//import org.springframework.core.type.classreading.MetadataReaderFactory; +//import org.springframework.util.ClassUtils; +//import com.mh.common.utils.StringUtils; +// +///** +// * Mybatis支持*匹配扫描包 +// * +// * @author mh +// */ +//@Configuration +//public class MyBatisConfig +//{ +// @Autowired +// private Environment env; +// +// static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; +// +// public static String setTypeAliasesPackage(String typeAliasesPackage) +// { +// ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); +// MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); +// List allResult = new ArrayList(); +// try +// { +// for (String aliasesPackage : typeAliasesPackage.split(",")) +// { +// List result = new ArrayList(); +// aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +// + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; +// Resource[] resources = resolver.getResources(aliasesPackage); +// if (resources != null && resources.length > 0) +// { +// MetadataReader metadataReader = null; +// for (Resource resource : resources) +// { +// if (resource.isReadable()) +// { +// metadataReader = metadataReaderFactory.getMetadataReader(resource); +// try +// { +// result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); +// } +// catch (ClassNotFoundException e) +// { +// e.printStackTrace(); +// } +// } +// } +// } +// if (result.size() > 0) +// { +// HashSet hashResult = new HashSet(result); +// allResult.addAll(hashResult); +// } +// } +// if (allResult.size() > 0) +// { +// typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); +// } +// else +// { +// throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); +// } +// } +// catch (IOException e) +// { +// e.printStackTrace(); +// } +// return typeAliasesPackage; +// } +// +// public Resource[] resolveMapperLocations(String[] mapperLocations) +// { +// ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); +// List resources = new ArrayList(); +// if (mapperLocations != null) +// { +// for (String mapperLocation : mapperLocations) +// { +// try +// { +// Resource[] mappers = resourceResolver.getResources(mapperLocation); +// resources.addAll(Arrays.asList(mappers)); +// } +// catch (IOException e) +// { +// // ignore +// } +// } +// } +// return resources.toArray(new Resource[resources.size()]); +// } +// +// @Bean +// public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception +// { +// String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); +// String mapperLocations = env.getProperty("mybatis.mapperLocations"); +// String configLocation = env.getProperty("mybatis.configLocation"); +// typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); +// VFS.addImplClass(SpringBootVFS.class); +// +// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); +// sessionFactory.setDataSource(dataSource); +// sessionFactory.setTypeAliasesPackage(typeAliasesPackage); +// sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); +// sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); +// return sessionFactory.getObject(); +// } +//} \ No newline at end of file diff --git a/mh-framework/src/main/java/com/mh/framework/config/MyBatisPlusConfig.java b/mh-framework/src/main/java/com/mh/framework/config/MyBatisPlusConfig.java new file mode 100644 index 0000000..e6e682a --- /dev/null +++ b/mh-framework/src/main/java/com/mh/framework/config/MyBatisPlusConfig.java @@ -0,0 +1,134 @@ +package com.mh.framework.config; + +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.mh.common.utils.StringUtils; +import org.apache.ibatis.io.VFS; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.type.classreading.CachingMetadataReaderFactory; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.util.ClassUtils; + +import javax.sql.DataSource; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +/** + * Mybatis支持*匹配扫描包 + * + * @author mh + */ +@Configuration +public class MyBatisPlusConfig +{ + @Autowired + private Environment env; + + static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; + + public static String setTypeAliasesPackage(String typeAliasesPackage) + { + ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); + MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); + List allResult = new ArrayList(); + try + { + for (String aliasesPackage : typeAliasesPackage.split(",")) + { + List result = new ArrayList(); + aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; + Resource[] resources = resolver.getResources(aliasesPackage); + if (resources != null && resources.length > 0) + { + MetadataReader metadataReader = null; + for (Resource resource : resources) + { + if (resource.isReadable()) + { + metadataReader = metadataReaderFactory.getMetadataReader(resource); + try + { + result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + } + } + } + if (result.size() > 0) + { + HashSet hashResult = new HashSet(result); + allResult.addAll(hashResult); + } + } + if (allResult.size() > 0) + { + typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); + } + else + { + throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + return typeAliasesPackage; + } + + public Resource[] resolveMapperLocations(String[] mapperLocations) + { + ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); + List resources = new ArrayList(); + if (mapperLocations != null) + { + for (String mapperLocation : mapperLocations) + { + try + { + Resource[] mappers = resourceResolver.getResources(mapperLocation); + resources.addAll(Arrays.asList(mappers)); + } + catch (IOException e) + { + // ignore + } + } + } + return resources.toArray(new Resource[resources.size()]); + } + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception + { + String typeAliasesPackage = env.getProperty("mybatis-plus.type-aliases-package"); + String mapperLocations = env.getProperty("mybatis-plus.mapper-locations"); + String configLocation = env.getProperty("mybatis-plus.config-location"); + typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); + VFS.addImplClass(SpringBootVFS.class); + + // 如果想使用mybatis-plus自带方法,需要改成使用 MybatisSqlSessionFactoryBean,不然会报 Invalid bound statement (not found) + final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); + sessionFactory.setDataSource(dataSource); + sessionFactory.setTypeAliasesPackage(typeAliasesPackage); + sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); + sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + return sessionFactory.getObject(); + } +} \ No newline at end of file diff --git a/mh-system/src/main/java/com/mh/system/mapper/device/DeviceLedgerMapper.java b/mh-system/src/main/java/com/mh/system/mapper/device/DeviceLedgerMapper.java new file mode 100644 index 0000000..18d2c61 --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/mapper/device/DeviceLedgerMapper.java @@ -0,0 +1,16 @@ +package com.mh.system.mapper.device; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mh.common.core.domain.entity.DeviceLedger; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 设备台账管理 + * @date 2025-01-10 16:59:47 + */ +@Mapper +public interface DeviceLedgerMapper extends BaseMapper { +} diff --git a/mh-system/src/main/java/com/mh/system/service/device/IDeviceLedgerService.java b/mh-system/src/main/java/com/mh/system/service/device/IDeviceLedgerService.java new file mode 100644 index 0000000..d79a87b --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/device/IDeviceLedgerService.java @@ -0,0 +1,24 @@ +package com.mh.system.service.device; + +import com.mh.common.core.domain.entity.DeviceLedger; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 设备台账管理 + * @date 2025-01-10 16:54:29 + */ +public interface IDeviceLedgerService { + List selectDeviceLedgerList(DeviceLedger ledgerInfo); + + DeviceLedger selectDeviceLedgerById(String ledgerId); + + int insertDeviceLedger(DeviceLedger gatewayManage); + + int updateDeviceLedger(DeviceLedger gatewayManage); + + int deleteDeviceLedgerByIds(String[] ledgerIds); +} diff --git a/mh-system/src/main/java/com/mh/system/service/device/IDeviceQrManageService.java b/mh-system/src/main/java/com/mh/system/service/device/IDeviceQrManageService.java index e1b3dae..7a01180 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/IDeviceQrManageService.java +++ b/mh-system/src/main/java/com/mh/system/service/device/IDeviceQrManageService.java @@ -23,5 +23,5 @@ public interface IDeviceQrManageService { int deleteDeviceQrManageByIds(String[] qrIds); - int createQrCode(String qrNum); + int createQrCode(Integer qrNum, String createBy) throws Exception; } diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java new file mode 100644 index 0000000..ecf9aaa --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java @@ -0,0 +1,76 @@ +package com.mh.system.service.device.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mh.common.core.domain.entity.DeviceLedger; +import com.mh.common.utils.StringUtils; +import com.mh.system.mapper.device.DeviceLedgerMapper; +import com.mh.system.service.device.IDeviceLedgerService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 设备台账管理 + * @date 2025-01-10 16:55:28 + */ +@Service +public class DeviceLedgerServiceImpl implements IDeviceLedgerService { + + @Resource + private DeviceLedgerMapper deviceLedgerMapper; + + @Override + public List selectDeviceLedgerList(DeviceLedger ledgerInfo) { + if (ledgerInfo == null) { + return List.of(); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + // 设备名称 + if (!StringUtils.isEmpty(ledgerInfo.getDeviceName())) { + queryWrapper.like("device_name", ledgerInfo.getDeviceName()); + } + // 资产编号 + if (!StringUtils.isEmpty(ledgerInfo.getAssetNum())) { + queryWrapper.like("asset_num", ledgerInfo.getAssetNum()); + } + // 设备类型 + if (!StringUtils.isEmpty(ledgerInfo.getDeviceType())) { + queryWrapper.like("device_type", ledgerInfo.getDeviceType()); + } + // 出入库时间范围 + if (!ledgerInfo.getParams().isEmpty()) { + queryWrapper.between("create_time", ledgerInfo.getParams().get("beginTime"), ledgerInfo.getParams().get("endTime")); + } + return deviceLedgerMapper.selectList(queryWrapper); + } + + @Override + public DeviceLedger selectDeviceLedgerById(String ledgerId) { + return deviceLedgerMapper.selectById(ledgerId); + } + + @Override + public int insertDeviceLedger(DeviceLedger deviceLedger) { + return deviceLedgerMapper.insert(deviceLedger); + } + + @Override + public int updateDeviceLedger(DeviceLedger deviceLedger) { + return deviceLedgerMapper.updateById(deviceLedger); + } + + @Override + public int deleteDeviceLedgerByIds(String[] ledgerIds) { + if (ledgerIds != null && ledgerIds.length > 0) { + for (String cmpId : ledgerIds) { + deviceLedgerMapper.deleteById(cmpId); + } + return ledgerIds.length; + } + return 0; + } +} diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceQrManageServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceQrManageServiceImpl.java index c585b1d..4fdf042 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceQrManageServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceQrManageServiceImpl.java @@ -2,13 +2,16 @@ package com.mh.system.service.device.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mh.common.core.domain.entity.DeviceQrManage; +import com.mh.common.utils.qrcode.QrCodeUtil; import com.mh.system.mapper.device.DeviceQrManageMapper; import com.mh.system.service.device.IDeviceQrManageService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.List; +import java.util.UUID; /** * @author LJF @@ -63,9 +66,22 @@ public class DeviceQrManageServiceImpl implements IDeviceQrManageService { return 0; } + @Transactional @Override - public int createQrCode(String qrNum) { - + public int createQrCode(Integer qrNum, String createBy) throws Exception { + // 生成动态文字 + for (int i = 0; i < qrNum; i++) { + String qrCode = UUID.randomUUID().toString().replaceAll("-", ""); + DeviceQrManage deviceQrManage = new DeviceQrManage(); + String serialNum = "mh_" + qrCode; + deviceQrManage.setSerialNum(serialNum); + deviceQrManage.setStatus(1); + deviceQrManage.setPicContent(serialNum + ".png"); + deviceQrManage.setCreateTime(new Date()); + deviceQrManage.setCreateBy(createBy); + QrCodeUtil.save(serialNum, null, "D:\\mh_code\\EEMCS\\images\\"+serialNum+".png"); + deviceQrManageMapper.insert(deviceQrManage); + } return 0; } } diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/MaintainInfoServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/MaintainInfoServiceImpl.java index c6228d4..88b2864 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/MaintainInfoServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/MaintainInfoServiceImpl.java @@ -29,12 +29,18 @@ public class MaintainInfoServiceImpl implements IMaintainInfoService { return List.of(); } QueryWrapper queryWrapper = new QueryWrapper<>(); + // 维保类型 if (maintainInfo.getMaintainType() != null) { queryWrapper.eq("maintain_type", maintainInfo.getMaintainType()); } + // 维保人员 if (!StringUtils.isEmpty(maintainInfo.getMaintainPeople())) { queryWrapper.like("maintain_people", maintainInfo.getMaintainPeople()); } + // 设备id + if (!StringUtils.isEmpty(maintainInfo.getDeviceId())) { + queryWrapper.eq("device_id", maintainInfo.getDeviceId()); + } queryWrapper.orderByDesc("create_time"); return maintainInfoMapper.selectList(queryWrapper); } diff --git a/pom.xml b/pom.xml index 83a80cd..3ecfb7c 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ 2.3.1 6.0.0 2.6.0 + 3.5.3 @@ -49,6 +50,13 @@ pom import + + org.springframework.boot + spring-boot-starter-test + 3.3.5 + test + + @@ -71,11 +79,26 @@ ${pagehelper.boot.version} - - - - - + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis.version} + + + com.baomidou + mybatis-plus-annotation + ${mybatis.version} + + + com.baomidou + mybatis-plus-core + ${mybatis.version} + + + com.baomidou + mybatis-plus-spring + ${mybatis.version} + com.mysql @@ -96,12 +119,6 @@ ${pgsql.version} - - com.baomidou - mybatis-plus-spring-boot3-starter - ${mybatis.version} - - javax.xml.bind jaxb-api @@ -205,6 +222,20 @@ ${mh.version} + + + com.google.zxing + core + ${qrcode.version} + + + + com.google.zxing + javase + ${qrcode.version} + + + diff --git a/sql/表结构设计.sql b/sql/表结构设计.sql index 425436f..a5050de 100644 --- a/sql/表结构设计.sql +++ b/sql/表结构设计.sql @@ -44,6 +44,8 @@ CREATE INDEX idx_device_ledger_device_ledger_id ON device_ledger (device_type); -- 为 device_ledger 表的 create_time 字段添加索引(倒序) CREATE INDEX idx_device_ledger_create_time_desc ON device_ledger (create_time DESC); +ALTER TABLE public.device_ledger ADD update_by varchar(100) NULL; +COMMENT ON COLUMN public.device_ledger.update_by IS '更新者'; --2、创建二维码管理 device_qr_manage 表 CREATE TABLE device_qr_manage ( @@ -316,6 +318,10 @@ ALTER TABLE public.communication_params ADD create_by varchar(100) NULL; COMMENT ON COLUMN public.communication_params.create_by IS '创建者'; ALTER TABLE public.communication_params ADD update_by varchar(100) NULL; COMMENT ON COLUMN public.communication_params.update_by IS '更新者'; +ALTER TABLE public.communication_params ADD create_time TIMESTAMP NULL; +COMMENT ON COLUMN public.communication_params.create_time IS '创建时间'; +ALTER TABLE public.communication_params ADD update_time TIMESTAMP NULL; +COMMENT ON COLUMN public.communication_params.update_time IS '更新时间'; -- 8、维保管理 CREATE TABLE maintain_info