Browse Source

1、mybatis-plus xml和注解共用处理;

2、设备二维码工具类;
3、设备台账管理;
dev
mh 4 months ago
parent
commit
49c76070b2
  1. 24
      mh-admin/pom.xml
  2. 3
      mh-admin/src/main/java/com/mh/MHApplication.java
  3. 88
      mh-admin/src/main/java/com/mh/web/controller/device/DeviceLedgerController.java
  4. 4
      mh-admin/src/main/java/com/mh/web/controller/device/DeviceQrManageController.java
  5. 14
      mh-admin/src/main/resources/application.yml
  6. 33
      mh-admin/src/test/java/com/mh/MHApplicationTest.java
  7. 16
      mh-common/pom.xml
  8. 56
      mh-common/src/main/java/com/mh/common/core/domain/entity/CommunicationParams.java
  9. 46
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceInOutManage.java
  10. 254
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java
  11. 45
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceQrManage.java
  12. 22
      mh-common/src/main/java/com/mh/common/core/domain/entity/GatewayManage.java
  13. 45
      mh-common/src/main/java/com/mh/common/core/domain/entity/MaintainInfo.java
  14. 1
      mh-common/src/main/java/com/mh/common/core/domain/entity/SparePartsManage.java
  15. 140
      mh-common/src/main/java/com/mh/common/utils/qrcode/QrCodeUtil.java
  16. 264
      mh-framework/src/main/java/com/mh/framework/config/MyBatisConfig.java
  17. 134
      mh-framework/src/main/java/com/mh/framework/config/MyBatisPlusConfig.java
  18. 16
      mh-system/src/main/java/com/mh/system/mapper/device/DeviceLedgerMapper.java
  19. 24
      mh-system/src/main/java/com/mh/system/service/device/IDeviceLedgerService.java
  20. 2
      mh-system/src/main/java/com/mh/system/service/device/IDeviceQrManageService.java
  21. 76
      mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java
  22. 20
      mh-system/src/main/java/com/mh/system/service/device/impl/DeviceQrManageServiceImpl.java
  23. 6
      mh-system/src/main/java/com/mh/system/service/device/impl/MaintainInfoServiceImpl.java
  24. 53
      pom.xml
  25. 6
      sql/表结构设计.sql

24
mh-admin/pom.xml

@ -23,6 +23,10 @@
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- spring-doc -->
<dependency>
@ -30,17 +34,17 @@
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>
<!-- Mysql驱动包 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- &lt;!&ndash; Mysql驱动包 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.mysql</groupId>-->
<!-- <artifactId>mysql-connector-j</artifactId>-->
<!-- </dependency>-->
<!-- sqlserver驱动包 -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<!-- &lt;!&ndash; sqlserver驱动包 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.microsoft.sqlserver</groupId>-->
<!-- <artifactId>mssql-jdbc</artifactId>-->
<!-- </dependency>-->
<!-- pg驱动包 -->
<dependency>

3
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 })

88
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<DeviceLedger> 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));
}
}

4
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()));
}

14
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:

33
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");
}
}

16
mh-common/pom.xml

@ -121,16 +121,24 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.5.9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
</dependency>
</dependencies>

56
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<String, Object> 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<String, Object> getParams() {
return params;
}
@Override
public void setParams(Map<String, Object> 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();
}
}

46
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<String, Object> 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<String, Object> getParams() {
return params;
}
@Override
public void setParams(Map<String, Object> params) {
this.params = params;
}
public String getId() {
return id;
}

254
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;
/**
* 是否是需要采集01不采集
*/
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<String, Object> 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<String, Object> getParams() {
return params;
}
@Override
public void setParams(Map<String, Object> 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();
}
}

45
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<String, Object> params;
@Override
public String getRemark() {
return remark;
}
@Override
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public Map<String, Object> getParams() {
return params;
}
@Override
public void setParams(Map<String, Object> params) {
this.params = params;
}
@Override
public String getSearchValue() {
return searchValue;
}
@Override
public void setSearchValue(String searchValue) {
this.searchValue = searchValue;
}
public Integer getStatus() {
return status;
}

22
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<String, Object> 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;
}

45
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<String, Object> 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<String, Object> getParams() {
return params;
}
@Override
public void setParams(Map<String, Object> params) {
this.params = params;
}
public String getId() {
return id;
}

1
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

140
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<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
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<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, UNICODE);
result = new MultiFormatReader().decode(bitmap, hints);
return result.getText();
}
}

264
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<String> allResult = new ArrayList<String>();
try
{
for (String aliasesPackage : typeAliasesPackage.split(","))
{
List<String> result = new ArrayList<String>();
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<String> hashResult = new HashSet<String>(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<Resource> resources = new ArrayList<Resource>();
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();
}
}
//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<String> allResult = new ArrayList<String>();
// try
// {
// for (String aliasesPackage : typeAliasesPackage.split(","))
// {
// List<String> result = new ArrayList<String>();
// 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<String> hashResult = new HashSet<String>(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<Resource> resources = new ArrayList<Resource>();
// 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();
// }
//}

134
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<String> allResult = new ArrayList<String>();
try
{
for (String aliasesPackage : typeAliasesPackage.split(","))
{
List<String> result = new ArrayList<String>();
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<String> hashResult = new HashSet<String>(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<Resource> resources = new ArrayList<Resource>();
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();
}
}

16
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<DeviceLedger> {
}

24
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<DeviceLedger> selectDeviceLedgerList(DeviceLedger ledgerInfo);
DeviceLedger selectDeviceLedgerById(String ledgerId);
int insertDeviceLedger(DeviceLedger gatewayManage);
int updateDeviceLedger(DeviceLedger gatewayManage);
int deleteDeviceLedgerByIds(String[] ledgerIds);
}

2
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;
}

76
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<DeviceLedger> selectDeviceLedgerList(DeviceLedger ledgerInfo) {
if (ledgerInfo == null) {
return List.of();
}
QueryWrapper<DeviceLedger> 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;
}
}

20
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;
}
}

6
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<MaintainInfo> 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);
}

53
pom.xml

@ -35,6 +35,7 @@
<jaxb-api.version>2.3.1</jaxb-api.version>
<jakarta.version>6.0.0</jakarta.version>
<springdoc.version>2.6.0</springdoc.version>
<qrcode.version>3.5.3</qrcode.version>
</properties>
<!-- 依赖声明 -->
@ -49,6 +50,13 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.3.5</version>
<scope>test</scope>
</dependency>
<!-- 阿里数据库连接池 -->
<dependency>
@ -71,11 +79,26 @@
<version>${pagehelper.boot.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>${mybatis-spring-boot.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
@ -96,12 +119,6 @@
<version>${pgsql.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
@ -205,6 +222,20 @@
<version>${mh.version}</version>
</dependency>
<!--二维码生成qrcode begin-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${qrcode.version}</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>${qrcode.version}</version>
</dependency>
<!--qrcode end-->
</dependencies>
</dependencyManagement>

6
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

Loading…
Cancel
Save