diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetMainboardController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetMainboardController.java new file mode 100644 index 0000000..53ff261 --- /dev/null +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/cabinet/CabinetMainboardController.java @@ -0,0 +1,68 @@ +package com.agileboot.admin.controller.cabinet; + +import com.agileboot.admin.customize.aop.accessLog.AccessLog; +import com.agileboot.common.core.base.BaseController; +import com.agileboot.common.core.dto.ResponseDTO; +import com.agileboot.common.core.page.PageDTO; +import com.agileboot.common.enums.common.BusinessTypeEnum; +import com.agileboot.domain.common.command.BulkOperationCommand; +import com.agileboot.domain.cabinet.mainboard.CabinetMainboardApplicationService; +import com.agileboot.domain.cabinet.mainboard.command.AddCabinetMainboardCommand; +import com.agileboot.domain.cabinet.mainboard.command.UpdateCabinetMainboardCommand; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardEntity; +import com.agileboot.domain.cabinet.mainboard.dto.CabinetMainboardDTO; +import com.agileboot.domain.cabinet.mainboard.query.SearchCabinetMainboardQuery; +import io.swagger.v3.oas.annotations.Operation; +import java.util.List; +import javax.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/cabinet/mainboards") +@RequiredArgsConstructor +@Validated +public class CabinetMainboardController extends BaseController { + + private final CabinetMainboardApplicationService cabinetMainboardApplicationService; + + @Operation(summary = "主板列表") + @GetMapping + public ResponseDTO> list(SearchCabinetMainboardQuery query) { + PageDTO page = cabinetMainboardApplicationService.getMainboardList(query); + return ResponseDTO.ok(page); + } + + @Operation(summary = "新增主板") + @AccessLog(title = "主板管理", businessType = BusinessTypeEnum.ADD) + @PostMapping + public ResponseDTO add(@Validated @RequestBody AddCabinetMainboardCommand command) { + cabinetMainboardApplicationService.addMainboard(command); + return ResponseDTO.ok(); + } + + @Operation(summary = "修改主板") + @AccessLog(title = "主板管理", businessType = BusinessTypeEnum.MODIFY) + @PutMapping("/{id}") + public ResponseDTO edit(@PathVariable Long id, @Validated @RequestBody UpdateCabinetMainboardCommand command) { + command.setMainboardId(id); + cabinetMainboardApplicationService.updateMainboard(command); + return ResponseDTO.ok(); + } + + @Operation(summary = "删除主板") + @AccessLog(title = "主板管理", businessType = BusinessTypeEnum.DELETE) + @DeleteMapping("/{ids}") + public ResponseDTO remove(@PathVariable @NotNull List ids) { + cabinetMainboardApplicationService.deleteMainboard(new BulkOperationCommand<>(ids)); + return ResponseDTO.ok(); + } +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/api/Ab98ApiUtil.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/api/Ab98ApiUtil.java index 0b72cba..1cf19a7 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/api/Ab98ApiUtil.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/api/Ab98ApiUtil.java @@ -35,7 +35,7 @@ public class Ab98ApiUtil { put("tel", tel); put("nobind", "true"); put("for_login", "true"); - put("from", "jt"); + put("from", "ys"); }}; String response = HttpUtil.createPost(url) @@ -118,8 +118,8 @@ public class Ab98ApiUtil { * @return outputData.takeFace 是否需要人脸验证(true需要刷脸) */ public static TokenResponse getToken(String appName) { -// String url = BASE_URL + "?code=doGetToken&from=jt&app=" + appName; - String url = BASE_URL + "?code=doGetToken&from=jt"; +// String url = BASE_URL + "?code=doGetToken&from=ys&app=" + appName; + String url = BASE_URL + "?code=doGetToken&from=ys"; String response = HttpUtil.createGet(url) .header("noSign", "true") diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/CabinetMainboardApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/CabinetMainboardApplicationService.java new file mode 100644 index 0000000..5163fc0 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/CabinetMainboardApplicationService.java @@ -0,0 +1,65 @@ +package com.agileboot.domain.cabinet.mainboard; + +import com.agileboot.common.core.page.PageDTO; +import com.agileboot.domain.common.command.BulkOperationCommand; +import com.agileboot.domain.cabinet.mainboard.command.AddCabinetMainboardCommand; +import com.agileboot.domain.cabinet.mainboard.command.UpdateCabinetMainboardCommand; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardEntity; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardService; +import com.agileboot.domain.cabinet.mainboard.dto.CabinetMainboardDTO; +import com.agileboot.domain.cabinet.mainboard.model.CabinetMainboardModel; +import com.agileboot.domain.cabinet.mainboard.model.CabinetMainboardModelFactory; +import com.agileboot.domain.cabinet.mainboard.query.SearchCabinetMainboardQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.util.List; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +@RequiredArgsConstructor +public class CabinetMainboardApplicationService { + private final CabinetMainboardService cabinetMainboardService; + private final CabinetMainboardModelFactory cabinetMainboardModelFactory; + + public PageDTO getMainboardList(SearchCabinetMainboardQuery query) { + Page page = cabinetMainboardService.getMainboardList(query); + List dtoList = page.getRecords().stream() + .map(CabinetMainboardDTO::new) + .collect(Collectors.toList()); + return new PageDTO<>(dtoList, page.getTotal()); + } + + public void addMainboard(AddCabinetMainboardCommand command) { + CabinetMainboardModel model = cabinetMainboardModelFactory.create(); + model.loadAddCommand(command); + model.insert(); + } + + public void updateMainboard(UpdateCabinetMainboardCommand command) { + CabinetMainboardModel model = cabinetMainboardModelFactory.loadById(command.getMainboardId()); + model.loadUpdateCommand(command); + model.updateById(); + } + + public void deleteMainboard(BulkOperationCommand command) { + for (Long id : command.getIds()) { + CabinetMainboardModel model = cabinetMainboardModelFactory.loadById(id); + model.deleteById(); + } + } + + public CabinetMainboardEntity getLatestMainboard() { + return cabinetMainboardService.selectLatestMainboard(); + } + + public CabinetMainboardEntity getByCabinetId(Long cabinetId) { + return cabinetMainboardService.selectByCabinetId(cabinetId); + } + + public List getAllMainboards() { + return cabinetMainboardService.selectAll(); + } +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/command/AddCabinetMainboardCommand.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/command/AddCabinetMainboardCommand.java new file mode 100644 index 0000000..a0d3925 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/command/AddCabinetMainboardCommand.java @@ -0,0 +1,11 @@ +package com.agileboot.domain.cabinet.mainboard.command; + +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class AddCabinetMainboardCommand extends CabinetMainboardEntity { + +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/command/UpdateCabinetMainboardCommand.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/command/UpdateCabinetMainboardCommand.java new file mode 100644 index 0000000..dfc1e1c --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/command/UpdateCabinetMainboardCommand.java @@ -0,0 +1,16 @@ +package com.agileboot.domain.cabinet.mainboard.command; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.PositiveOrZero; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class UpdateCabinetMainboardCommand extends AddCabinetMainboardCommand { + + @NotNull + @PositiveOrZero + private Long mainboardId; + +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardEntity.java new file mode 100644 index 0000000..4e3ed9a --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardEntity.java @@ -0,0 +1,48 @@ +package com.agileboot.domain.cabinet.mainboard.db; + +import com.agileboot.common.core.base.BaseEntity; +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 java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 机柜主板信息表 + *

+ * + * @author valarchie + * @since 2025-05-15 + */ +@Getter +@Setter +@TableName("cabinet_mainboard") +@ApiModel(value = "CabinetMainboardEntity对象", description = "机柜主板信息表") +public class CabinetMainboardEntity extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主板唯一ID") + @TableId(value = "mainboard_id", type = IdType.AUTO) + private Long mainboardId; + + @ApiModelProperty("关联柜机ID") + @TableField("cabinet_id") + private Long cabinetId; + + @ApiModelProperty("锁控板序号") + @TableField("lock_control_no") + private Integer lockControlNo; + + + @Override + public Serializable pkVal() { + return this.mainboardId; + } + +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardMapper.java new file mode 100644 index 0000000..0fee7ca --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardMapper.java @@ -0,0 +1,41 @@ +package com.agileboot.domain.cabinet.mainboard.db; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.util.List; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +/** + *

+ * 机柜主板信息表 Mapper 接口 + *

+ * + * @author valarchie + * @since 2025-05-15 + */ +public interface CabinetMainboardMapper extends BaseMapper { + @Select("SELECT mainboard_id, cabinet_id, lock_control_no " + + "FROM cabinet_mainboard " + + "${ew.customSqlSegment}") + Page getMainboardList( + Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper + ); + + @Select("SELECT * " + + "FROM cabinet_mainboard " + + "ORDER BY create_time DESC " + + "LIMIT 1") + CabinetMainboardEntity selectLatestMainboard(); + + @Select("SELECT * " + + "FROM cabinet_mainboard " + + "ORDER BY create_time DESC") + List selectAll(); + + @Select("SELECT * FROM cabinet_mainboard WHERE cabinet_id = #{cabinetId} LIMIT 1") + CabinetMainboardEntity selectByCabinetId(Long cabinetId); +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardService.java new file mode 100644 index 0000000..e4ffebf --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardService.java @@ -0,0 +1,25 @@ +package com.agileboot.domain.cabinet.mainboard.db; + +import com.agileboot.common.core.page.AbstractPageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机柜主板信息表 服务类 + *

+ * + * @author valarchie + * @since 2025-05-15 + */ +public interface CabinetMainboardService extends IService { + Page getMainboardList(AbstractPageQuery query); + + List selectAll(); + + CabinetMainboardEntity selectLatestMainboard(); + + CabinetMainboardEntity selectByCabinetId(Long cabinetId); +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardServiceImpl.java new file mode 100644 index 0000000..6ba1c10 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/db/CabinetMainboardServiceImpl.java @@ -0,0 +1,39 @@ +package com.agileboot.domain.cabinet.mainboard.db; + +import com.agileboot.common.core.page.AbstractPageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + *

+ * 机柜主板信息表 服务实现类 + *

+ * + * @author valarchie + * @since 2025-05-15 + */ +@Service +public class CabinetMainboardServiceImpl extends ServiceImpl implements CabinetMainboardService { + + @Override + public Page getMainboardList(AbstractPageQuery query) { + return this.page(query.toPage(), query.toQueryWrapper()); + } + + @Override + public List selectAll() { + return baseMapper.selectAll(); + } + + @Override + public CabinetMainboardEntity selectLatestMainboard() { + return baseMapper.selectLatestMainboard(); + } + + @Override + public CabinetMainboardEntity selectByCabinetId(Long cabinetId) { + return baseMapper.selectByCabinetId(cabinetId); + } +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/dto/CabinetMainboardDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/dto/CabinetMainboardDTO.java new file mode 100644 index 0000000..0a64515 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/dto/CabinetMainboardDTO.java @@ -0,0 +1,39 @@ +package com.agileboot.domain.cabinet.mainboard.dto; + +import cn.hutool.core.bean.BeanUtil; +import com.agileboot.common.annotation.ExcelColumn; +import com.agileboot.common.annotation.ExcelSheet; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardEntity; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@ExcelSheet(name = "柜机主板表") +@Data +public class CabinetMainboardDTO { + + public CabinetMainboardDTO(CabinetMainboardEntity entity) { + if (entity != null) { + BeanUtil.copyProperties(entity, this); + } + } + + @ExcelColumn(name = "主板唯一ID") + private Long mainboardId; + + @ExcelColumn(name = "关联柜机ID") + private Long cabinetId; + + @ExcelColumn(name = "锁控板序号") + private Integer lockControlNo; + + @ExcelColumn(name = "创建时间") + private Date createTime; + + @ExcelColumn(name = "更新时间") + private Date updateTime; +} diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/model/CabinetMainboardModel.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/model/CabinetMainboardModel.java new file mode 100644 index 0000000..dabce97 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/model/CabinetMainboardModel.java @@ -0,0 +1,39 @@ +package com.agileboot.domain.cabinet.mainboard.model; + +import cn.hutool.core.bean.BeanUtil; +import com.agileboot.domain.cabinet.mainboard.command.AddCabinetMainboardCommand; +import com.agileboot.domain.cabinet.mainboard.command.UpdateCabinetMainboardCommand; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardEntity; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardService; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CabinetMainboardModel extends CabinetMainboardEntity { + + private CabinetMainboardService cabinetMainboardService; + + public CabinetMainboardModel(CabinetMainboardEntity entity, CabinetMainboardService cabinetMainboardService) { + this(cabinetMainboardService); + if (entity != null) { + BeanUtil.copyProperties(entity, this); + } + } + + public CabinetMainboardModel(CabinetMainboardService cabinetMainboardService) { + this.cabinetMainboardService = cabinetMainboardService; + } + + public void loadAddCommand(AddCabinetMainboardCommand command) { + if (command != null) { + BeanUtil.copyProperties(command, this, "mainboardId"); + } + } + + public void loadUpdateCommand(UpdateCabinetMainboardCommand command) { + if (command != null) { + loadAddCommand(command); + } + } +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/model/CabinetMainboardModelFactory.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/model/CabinetMainboardModelFactory.java new file mode 100644 index 0000000..1af054f --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/model/CabinetMainboardModelFactory.java @@ -0,0 +1,27 @@ +package com.agileboot.domain.cabinet.mainboard.model; + +import com.agileboot.common.exception.ApiException; +import com.agileboot.common.exception.error.ErrorCode; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardEntity; +import com.agileboot.domain.cabinet.mainboard.db.CabinetMainboardService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class CabinetMainboardModelFactory { + + private final CabinetMainboardService cabinetMainboardService; + + public CabinetMainboardModel loadById(Long mainboardId) { + CabinetMainboardEntity entity = cabinetMainboardService.getById(mainboardId); + if (entity == null) { + throw new ApiException(ErrorCode.Business.COMMON_OBJECT_NOT_FOUND, mainboardId, "机柜主板信息"); + } + return new CabinetMainboardModel(entity, cabinetMainboardService); + } + + public CabinetMainboardModel create() { + return new CabinetMainboardModel(cabinetMainboardService); + } +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/query/SearchCabinetMainboardQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/query/SearchCabinetMainboardQuery.java new file mode 100644 index 0000000..34cdd52 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/mainboard/query/SearchCabinetMainboardQuery.java @@ -0,0 +1,28 @@ +package com.agileboot.domain.cabinet.mainboard.query; + +import cn.hutool.core.util.StrUtil; +import com.agileboot.common.core.page.AbstractPageQuery; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class SearchCabinetMainboardQuery extends AbstractPageQuery { + + private Long cabinetId; + private Integer lockControlNo; + + @Override + public QueryWrapper addQueryCondition() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + queryWrapper + .eq(cabinetId != null, "cabinet_id", cabinetId) + .eq(lockControlNo != null, "lock_control_no", lockControlNo); + + this.timeRangeColumn = "create_time"; + + return queryWrapper; + } +} \ No newline at end of file diff --git a/agileboot-domain/src/main/resources/mapper/cabinet/CabinetMainboardMapper.xml b/agileboot-domain/src/main/resources/mapper/cabinet/CabinetMainboardMapper.xml new file mode 100644 index 0000000..e448c19 --- /dev/null +++ b/agileboot-domain/src/main/resources/mapper/cabinet/CabinetMainboardMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/agileboot-infrastructure/src/main/java/com/agileboot/infrastructure/mybatisplus/CodeGenerator.java b/agileboot-infrastructure/src/main/java/com/agileboot/infrastructure/mybatisplus/CodeGenerator.java index 21fe63f..9279a8a 100644 --- a/agileboot-infrastructure/src/main/java/com/agileboot/infrastructure/mybatisplus/CodeGenerator.java +++ b/agileboot-infrastructure/src/main/java/com/agileboot/infrastructure/mybatisplus/CodeGenerator.java @@ -61,7 +61,7 @@ public class CodeGenerator { //生成的类 放在orm子模块下的/target/generated-code目录底下 .module("/agileboot-orm/target/generated-code") .parentPackage("com.agileboot") - .tableName("ab98_user") + .tableName("cabinet_mainboard") // 决定是否继承基类 .isExtendsFromBaseEntity(true) .build(); diff --git a/sql/20250508_ab98_user.sql b/sql/20250508_ab98_user.sql index c7c5d1b..d8dcefe 100644 --- a/sql/20250508_ab98_user.sql +++ b/sql/20250508_ab98_user.sql @@ -27,4 +27,24 @@ CREATE TABLE `ab98_user` ( ALTER TABLE `smart_cabinet` ADD COLUMN `main_cabinet` BIGINT NULL COMMENT '归属主柜ID' -AFTER `cabinet_type`; \ No newline at end of file +AFTER `cabinet_type`; + +DROP TABLE IF EXISTS `cabinet_mainboard`; + +CREATE TABLE `cabinet_mainboard` ( + `mainboard_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主板唯一ID', + `cabinet_id` BIGINT NOT NULL COMMENT '关联柜机ID', + `lock_control_no` INT NOT NULL COMMENT '锁控板序号', + `creator_id` BIGINT NULL DEFAULT 0 COMMENT '创建者ID', + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater_id` BIGINT NULL DEFAULT 0 COMMENT '更新者ID', + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志(0存在 1删除)', + PRIMARY KEY (`mainboard_id`), + KEY `idx_cabinet` (`cabinet_id`), + CONSTRAINT `fk_mainboard_cabinet` FOREIGN KEY (`cabinet_id`) REFERENCES `smart_cabinet` (`cabinet_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='机柜主板信息表'; + +ALTER TABLE `cabinet_cell` +ADD COLUMN `mainboard_id` BIGINT NULL COMMENT '归属主板ID' +AFTER `cabinet_id`;