From 97b03a8495eaa99d5ebe273b28a9382e0ebb5e49 Mon Sep 17 00:00:00 2001 From: gong <1157756119@qq.com> Date: Mon, 24 Nov 2025 14:21:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=93=8D=E4=BD=9C=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/SysDeviceController.java | 63 ++++++++++++++ .../com/czg/system/dto/SysDevicesDTO.java | 82 ++++++++++++++++++ .../com/czg/system/dto/SysDevicesPageDTO.java | 43 ++++++++++ .../com/czg/system/entity/SysDevices.java | 74 ++++++++++++++++ .../czg/system/service/SysDevicesService.java | 24 ++++++ .../src/main/java/com/czg/Main.java | 6 +- .../system/mapper/SysDevicesMapper.java | 14 +++ .../service/impl/SysDevicesServiceImpl.java | 85 +++++++++++++++++++ .../resources/mapper/SysDevicesMapper.xml | 7 ++ 9 files changed, 395 insertions(+), 3 deletions(-) create mode 100644 cash-api/system-server/src/main/java/com/czg/controller/admin/SysDeviceController.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesPageDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/system/entity/SysDevices.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/system/service/SysDevicesService.java create mode 100644 cash-service/system-service/src/main/java/com/czg/service/system/mapper/SysDevicesMapper.java create mode 100644 cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SysDevicesServiceImpl.java create mode 100644 cash-service/system-service/src/main/resources/mapper/SysDevicesMapper.xml diff --git a/cash-api/system-server/src/main/java/com/czg/controller/admin/SysDeviceController.java b/cash-api/system-server/src/main/java/com/czg/controller/admin/SysDeviceController.java new file mode 100644 index 000000000..4392c4a27 --- /dev/null +++ b/cash-api/system-server/src/main/java/com/czg/controller/admin/SysDeviceController.java @@ -0,0 +1,63 @@ +package com.czg.controller.admin; + +import com.czg.annotation.SaAdminCheckPermission; +import com.czg.resp.CzgResult; +import com.czg.system.dto.SysDevicesDTO; +import com.czg.system.dto.SysDevicesPageDTO; +import com.czg.system.service.SysDevicesService; +import com.czg.validator.group.InsertGroup; +import com.czg.validator.group.UpdateGroup; +import com.mybatisflex.core.paginate.Page; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 设备管理 + * + * @author yjjie + * @date 2025/11/24 14:02 + */ +@RestController +@RequestMapping("/admin/devices") +public class SysDeviceController { + + @Resource + private SysDevicesService sysDevicesService; + + /** + * 新增设备 + */ + @PostMapping + @SaAdminCheckPermission(value = "devices:add", name = "新增设备") + public CzgResult addDevice(@RequestBody @Validated(InsertGroup.class) SysDevicesDTO param) { + return CzgResult.success(sysDevicesService.addDevice(param)); + } + + /** + * 修改设备 + */ + @PutMapping + @SaAdminCheckPermission(value = "devices:update", name = "修改设备") + public CzgResult updateDevice(@RequestBody @Validated(UpdateGroup.class) SysDevicesDTO param) { + return CzgResult.success(sysDevicesService.updateDevice(param)); + } + + /** + * 删除设备 + */ + @DeleteMapping("/{id}") + @SaAdminCheckPermission(value = "devices:delete", name = "删除设备") + public CzgResult deleteDevice(@PathVariable Long id) { + return CzgResult.success(sysDevicesService.deleteDevice(id)); + } + + /** + * 查询设备分页 + */ + @GetMapping("page") + @SaAdminCheckPermission(value = "devices:page", name = "查询设备分页") + public CzgResult> queryDevice(SysDevicesPageDTO param) { + return CzgResult.success(sysDevicesService.queryDevice(param)); + } +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesDTO.java new file mode 100644 index 000000000..de11b2535 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesDTO.java @@ -0,0 +1,82 @@ + +package com.czg.system.dto; + +import java.io.Serializable; +import java.time.LocalDateTime; +import com.alibaba.fastjson2.annotation.JSONField; +import com.czg.validator.group.InsertGroup; +import com.czg.validator.group.UpdateGroup; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import lombok.experimental.Accessors; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 设备管理 实体类。 + * + * @author ww + * @since 2025-11-24 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class SysDevicesDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @NotNull(message = "id不能为空", groups = {UpdateGroup.class}) + private Long id; + + /** + * 设备 sn,收银机用 Mac 地址 + */ + @NotBlank(message = "设备sn不能为空", groups = {UpdateGroup.class, InsertGroup.class}) + private String deviceSn; + + /** + * 设备类型:scanBox 扫码盒子,cashMachine 收银机,printer 打印机 + */ + @NotBlank(message = "设备类型不能为空", groups = {UpdateGroup.class, InsertGroup.class}) + @Pattern(regexp = "^(scanBox|cashMachine|printer)$", message = "设备类型格式错误") + private String deviceType; + + /** + * 连接类型:usb,4g,wifi + */ + @NotBlank(message = "连接类型不能为空", groups = {UpdateGroup.class, InsertGroup.class}) + @Pattern(regexp = "^(usb|4g|wifi)$", message = "连接类型格式错误") + private String connType; + + /** + * 在线状态:0 离线,1 在线 + */ + private Integer unlineStatus; + + /** + * 最后上线时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime lastUnlineTime; + + /** + * 离线时间 + */ + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime offlineTime; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @JSONField(format = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesPageDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesPageDTO.java new file mode 100644 index 000000000..820024a71 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/system/dto/SysDevicesPageDTO.java @@ -0,0 +1,43 @@ +package com.czg.system.dto; + +import lombok.Data; + +/** + * 设备管理 分页参数 + * + * @author yjjie + * @date 2025/11/24 14:17 + */ +@Data +public class SysDevicesPageDTO { + + /** + * 设备 sn + */ + private String deviceSn; + + /** + * 设备类型 + */ + private String deviceType; + + /** + * 连接类型:usb,4g,wifi + */ + private String connType; + + /** + * 在线状态:0 离线,1 在线 + */ + private Integer unlineStatus; + + /** + * 页码 + */ + private Integer page; + + /** + * 页大小 + */ + private Integer size; +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/system/entity/SysDevices.java b/cash-common/cash-common-service/src/main/java/com/czg/system/entity/SysDevices.java new file mode 100644 index 000000000..1ca25ed49 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/system/entity/SysDevices.java @@ -0,0 +1,74 @@ +package com.czg.system.entity; + +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.time.LocalDateTime; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 设备管理 实体类。 + * + * @author ww + * @since 2025-11-24 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("sys_devices") +public class SysDevices implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + private Long id; + + /** + * 设备 sn,收银机用 Mac 地址 + */ + private String deviceSn; + + /** + * 设备类型:scanBox 扫码盒子,cashMachine 收银机,printer 打印机 + */ + private String deviceType; + + /** + * 连接类型:usb,4g,wifi + */ + private String connType; + + /** + * 在线状态:0 离线,1 在线 + */ + private Integer unlineStatus; + + /** + * 最后上线时间 + */ + private LocalDateTime lastUnlineTime; + + /** + * 离线时间 + */ + private LocalDateTime offlineTime; + + @Column(onInsertValue = "now()") + private LocalDateTime createTime; + + @Column(onInsertValue = "now()", onUpdateValue = "now()") + private LocalDateTime updateTime; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/system/service/SysDevicesService.java b/cash-common/cash-common-service/src/main/java/com/czg/system/service/SysDevicesService.java new file mode 100644 index 000000000..ef3fc179d --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/system/service/SysDevicesService.java @@ -0,0 +1,24 @@ +package com.czg.system.service; + +import com.czg.system.dto.SysDevicesDTO; +import com.czg.system.dto.SysDevicesPageDTO; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.service.IService; +import com.czg.system.entity.SysDevices; + +/** + * 设备管理 服务层。 + * + * @author ww + * @since 2025-11-24 + */ +public interface SysDevicesService extends IService { + + Long addDevice(SysDevicesDTO reqDTO); + + Long updateDevice(SysDevicesDTO reqDTO); + + Long deleteDevice(Long id); + + Page queryDevice(SysDevicesPageDTO reqDTO); +} diff --git a/cash-service/code-generator/src/main/java/com/czg/Main.java b/cash-service/code-generator/src/main/java/com/czg/Main.java index 0d59af7e3..2c2e58900 100644 --- a/cash-service/code-generator/src/main/java/com/czg/Main.java +++ b/cash-service/code-generator/src/main/java/com/czg/Main.java @@ -29,12 +29,12 @@ public class Main { // orSqlTest(); -// String packageName = "system"; + String packageName = "system"; // String packageName = "account"; // String packageName = "product"; - String packageName = "market"; +// String packageName = "market"; // tableName 指定需要生成的表 - String tableName = "mk_distribution_withdraw_flow"; + String tableName = "sys_devices"; String author = "ww"; //是否生成DTO实体 默认生成 boolean isGenerateDto = true; diff --git a/cash-service/system-service/src/main/java/com/czg/service/system/mapper/SysDevicesMapper.java b/cash-service/system-service/src/main/java/com/czg/service/system/mapper/SysDevicesMapper.java new file mode 100644 index 000000000..d2140a14f --- /dev/null +++ b/cash-service/system-service/src/main/java/com/czg/service/system/mapper/SysDevicesMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.system.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.system.entity.SysDevices; + +/** + * 设备管理 映射层。 + * + * @author ww + * @since 2025-11-24 + */ +public interface SysDevicesMapper extends BaseMapper { + +} diff --git a/cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SysDevicesServiceImpl.java b/cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SysDevicesServiceImpl.java new file mode 100644 index 000000000..99b363078 --- /dev/null +++ b/cash-service/system-service/src/main/java/com/czg/service/system/service/impl/SysDevicesServiceImpl.java @@ -0,0 +1,85 @@ +package com.czg.service.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.czg.exception.CzgException; +import com.czg.service.system.mapper.SysDevicesMapper; +import com.czg.system.dto.SysDevicesDTO; +import com.czg.system.dto.SysDevicesPageDTO; +import com.czg.system.entity.SysDevices; +import com.czg.system.service.SysDevicesService; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 设备管理 服务层实现。 + * + * @author ww + * @since 2025-11-24 + */ +@Service +public class SysDevicesServiceImpl extends ServiceImpl implements SysDevicesService { + + @Override + public Long addDevice(SysDevicesDTO reqDTO) { + // 检查 sn 是否存在 + if (exists(query().eq(SysDevices::getDeviceSn, reqDTO.getDeviceSn()))) { + throw new CzgException("设备sn已存在"); + } + + SysDevices devices = BeanUtil.toBean(reqDTO, SysDevices.class); + + save(devices); + return devices.getId(); + } + + @Override + public Long updateDevice(SysDevicesDTO reqDTO) { + // 检查 sn 存在 + if (exists(query().ne(SysDevices::getId, reqDTO.getId()).eq(SysDevices::getDeviceSn, reqDTO.getDeviceSn()))) { + throw new CzgException("设备sn已存在"); + } + + SysDevices devices = getById(reqDTO.getId()); + if (devices == null) { + throw new CzgException("设备不存在"); + } + + devices.setDeviceSn(reqDTO.getDeviceSn()); + devices.setDeviceType(reqDTO.getDeviceType()); + devices.setConnType(reqDTO.getConnType()); + devices.setUnlineStatus(reqDTO.getUnlineStatus()); + + updateById(devices); + return devices.getId(); + } + + @Override + public Long deleteDevice(Long id) { + SysDevices devices = getById(id); + if (devices == null) { + throw new CzgException("设备不存在"); + } + + removeById(id); + return id; + } + + @Override + public Page queryDevice(SysDevicesPageDTO reqDTO) { + QueryWrapper wrapper = new QueryWrapper(); + if (StrUtil.isNotBlank(reqDTO.getDeviceSn())) { + wrapper.like(SysDevices::getDeviceSn, reqDTO.getDeviceSn()); + } + if (StrUtil.isNotBlank(reqDTO.getDeviceType())) { + wrapper.eq(SysDevices::getDeviceType, reqDTO.getDeviceType()); + } + if (StrUtil.isNotBlank(reqDTO.getConnType())) { + wrapper.eq(SysDevices::getConnType, reqDTO.getConnType()); + } + + return page(Page.of(reqDTO.getPage(), reqDTO.getSize()), wrapper).map(devices -> BeanUtil.toBean(devices, SysDevicesDTO.class)); + } +} diff --git a/cash-service/system-service/src/main/resources/mapper/SysDevicesMapper.xml b/cash-service/system-service/src/main/resources/mapper/SysDevicesMapper.xml new file mode 100644 index 000000000..422b77dbb --- /dev/null +++ b/cash-service/system-service/src/main/resources/mapper/SysDevicesMapper.xml @@ -0,0 +1,7 @@ + + + + +