Browse Source

配方移除冗余字段 增加连表分页查询

通道状态增加volume
增加蓝牙事件处理
修改系统配置类通道下拉选类型值
master
王梦远 5 days ago
parent
commit
d40f53888f
  1. 2
      src/main/java/com/iflytop/handacid/HandAcidApplication.java
  2. 21
      src/main/java/com/iflytop/handacid/app/controller/FormulationController.java
  3. 45
      src/main/java/com/iflytop/handacid/app/controller/SystemConfigController.java
  4. 18
      src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java
  5. 3
      src/main/java/com/iflytop/handacid/app/core/state/ChannelState.java
  6. 12
      src/main/java/com/iflytop/handacid/app/model/dto/ChannelSetDTO.java
  7. 41
      src/main/java/com/iflytop/handacid/app/websocket/client/BleGamepadDriverConfig.java
  8. 61
      src/main/java/com/iflytop/handacid/app/websocket/client/SocketClient.java
  9. 8
      src/main/java/com/iflytop/handacid/common/enums/SystemConfigType.java
  10. 7
      src/main/java/com/iflytop/handacid/common/mapper/FormulationMapper.java
  11. 30
      src/main/java/com/iflytop/handacid/common/mapper/FormulationMapper.xml
  12. 8
      src/main/java/com/iflytop/handacid/common/model/entity/Formulation.java
  13. 33
      src/main/java/com/iflytop/handacid/common/model/vo/FormulationVO.java
  14. 16
      src/main/java/com/iflytop/handacid/common/service/FormulationService.java
  15. 5
      src/main/resources/sql/init.sql

2
src/main/java/com/iflytop/handacid/HandAcidApplication.java

@ -1,11 +1,13 @@
package com.iflytop.handacid;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
@SpringBootApplication
@MapperScan("com.iflytop.handacid.common.mapper")
public class HandAcidApplication {
public static void main(String[] args) {

21
src/main/java/com/iflytop/handacid/app/controller/FormulationController.java

@ -1,12 +1,12 @@
package com.iflytop.handacid.app.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iflytop.handacid.common.base.BasePageQuery;
import com.iflytop.handacid.common.model.entity.Formulation;
import com.iflytop.handacid.common.model.vo.FormulationVO;
import com.iflytop.handacid.common.result.PageResult;
import com.iflytop.handacid.common.result.Result;
import com.iflytop.handacid.common.service.FormulationService;
import com.iflytop.handacid.common.service.SolutionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
@ -15,8 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* 配方
@ -29,19 +27,21 @@ import java.util.Objects;
public class FormulationController {
@Autowired
private FormulationService formulationService;
@Autowired
private SolutionService solutionService;
@PostMapping("/page")
@Operation(summary = "获取分页数据")
public PageResult<Formulation> getPage( BasePageQuery query) {
return PageResult.success(formulationService.page(new Page<>(query.getPageNum(), query.getPageSize())));
public PageResult<FormulationVO> getPage(BasePageQuery query) {
return PageResult.success(formulationService.selectPageVo(query));
}
@GetMapping("/list")
/* @GetMapping("/list")
@Operation(summary = "获取List数据")
public Result<List<Formulation>> getList( @RequestParam Integer solutionId, @RequestParam String concentration) {
List<Formulation> formulations=formulationService.list(new LambdaQueryWrapper<Formulation>().eq(Formulation::getSolutionId, solutionId).eq(Formulation::getConcentration,concentration));
return Result.success(formulations);
}
}*/
@GetMapping("/{id}")
@Operation(summary = "根据ID获取")
@ -62,6 +62,7 @@ public class FormulationController {
boolean flag = formulationService.saveOrUpdate(formulation);
return flag ? Result.success("修改成功") : Result.failed("修改失败");
}
@DeleteMapping("/{ids}")
@Operation(summary = "删除配方")
public Result<String> delete(@PathVariable String ids) {
@ -71,7 +72,7 @@ public class FormulationController {
return success ? Result.success("删除成功") : Result.failed("删除失败");
}
@GetMapping("/concentration/{id}")
/* @GetMapping("/concentration/{id}")
@Operation(summary = "根据ID获取浓度")
public Result<List<String>> getConcentration(@PathVariable Integer id) {
List<Formulation> formulations=formulationService.list(new LambdaQueryWrapper<Formulation>().eq(Formulation::getSolutionId, id));
@ -81,7 +82,7 @@ public class FormulationController {
.toList());
}
return null;
}
}*/
}

45
src/main/java/com/iflytop/handacid/app/controller/SystemConfigController.java

@ -1,7 +1,12 @@
package com.iflytop.handacid.app.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.iflytop.handacid.app.common.enums.ChannelStateCode;
import com.iflytop.handacid.app.model.dto.ChannelSetDTO;
import com.iflytop.handacid.common.base.BasePageQuery;
import com.iflytop.handacid.common.enums.SystemConfigType;
import com.iflytop.handacid.common.model.entity.SystemConfig;
import com.iflytop.handacid.common.result.PageResult;
import com.iflytop.handacid.common.result.Result;
@ -14,6 +19,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Tag(name = "\uD83D\uDEE0\uFE0F系统配置接口")
@RestController
@ -26,10 +34,45 @@ public class SystemConfigController {
@Operation(summary = "分页查询系统配置")
@PostMapping("/page")
public PageResult<SystemConfig> getList(@RequestBody BasePageQuery query) {
public PageResult<SystemConfig> getPage(@RequestBody BasePageQuery query) {
return PageResult.success(systemConfigService.page(new Page<>(query.getPageNum(), query.getPageSize())));
}
@Operation(summary = "查询溶液种类配置")
@GetMapping("/solutions")
public Result<List<String>> getSolutions() {
List<SystemConfig> systemConfigs = systemConfigService.list(new LambdaQueryWrapper<SystemConfig>().eq(SystemConfig::getKey, SystemConfigType.SOLUTION_TYPE));
List<String> solutionTypes = systemConfigs.stream().map(SystemConfig::getValue).toList();
return Result.success(solutionTypes);
}
@Operation(summary = "查询溶液种类配置")
@PutMapping("/solutions")
public Result<List<String>> setSolutions(@RequestBody List<String> solutions) {
String solutionTypes = String.join(",", solutions);
systemConfigService.update(new LambdaUpdateWrapper<SystemConfig>().eq(SystemConfig::getKey, SystemConfigType.SOLUTION_TYPE).set(SystemConfig::getValue, solutionTypes));
return Result.success();
}
@Operation(summary = "查询通道下拉选配置")
@GetMapping("/channels")
public Result<?> getChannels() {
Map<String,Object> maps=new HashMap<>();
ChannelStateCode[] values = ChannelStateCode.values();
Arrays.stream(values).forEach(channelStateCode -> {
maps.put(channelStateCode.name(),systemConfigService.list(new LambdaQueryWrapper<SystemConfig>().eq(SystemConfig::getKey, channelStateCode)));
});
return Result.success(maps);
}
@Operation(summary = "设置通道下拉选配置")
@PutMapping("/channels")
public Result<List<String>> setChannels(@RequestBody ChannelSetDTO dto) {
List<String> stringList = Arrays.stream(dto.getValues())
.mapToObj(String::valueOf)
.toList();
String volumeList = String.join(",", stringList);
systemConfigService.update(new LambdaUpdateWrapper<SystemConfig>().eq(SystemConfig::getKey, dto.getChannel()).set(SystemConfig::getValue, volumeList));
return Result.success();
}
@Operation(summary = "添加配置项")
@PostMapping("")
public Result<String> add(@Valid @RequestBody SystemConfig config) {

18
src/main/java/com/iflytop/handacid/hardware/service/BleGamepadService.java → src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java

@ -1,30 +1,24 @@
package com.iflytop.handacid.hardware.service;
package com.iflytop.handacid.app.core.listener;
import com.iflytop.handacid.hardware.comm.can.A8kCanBusService;
import com.iflytop.handacid.hardware.service.AppEventBusService;
import com.iflytop.handacid.hardware.type.A8kPacket;
import com.iflytop.handacid.hardware.type.CmdId;
import com.iflytop.handacid.hardware.type.appevent.A8kCanBusOnConnectEvent;
import com.iflytop.handacid.hardware.type.appevent.A8kHardwareReport;
import com.iflytop.handacid.hardware.type.appevent.AppEvent;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 蓝牙手柄服务管理
* 蓝牙手柄按钮事件监听
*
*/
@Component
@Slf4j
@RequiredArgsConstructor
public class BleGamepadService {
private final A8kCanBusService canBus;
public class BleGamepadEventListener {
private final AppEventBusService eventBus;
@PostConstruct
@ -32,7 +26,6 @@ public class BleGamepadService {
eventBus.regListener(this::onAppEvent);
}
/**
* 事件总线事件处理
* @param event e
@ -42,6 +35,7 @@ public class BleGamepadService {
A8kPacket packet = canPacket.getReportPacket();
CmdId cmdId = CmdId.valueOf(packet.getCmdId());
if (CmdId.event_ble_gamepad_liquid_acid.equals(cmdId)) {
//判断当前的设备状态
log.info("蓝牙手柄 加酸按钮 按下");
} else if (CmdId.event_ble_gamepad_liquid_acid_prefilling.equals(cmdId)) {
log.info("蓝牙手柄 预充按钮 按下");
@ -53,8 +47,6 @@ public class BleGamepadService {
log.info("蓝牙手柄 连接断开");
}
} else if (event instanceof A8kCanBusOnConnectEvent canPacket) {
log.info("a8k canbus connect sucess");
}
}

3
src/main/java/com/iflytop/handacid/app/core/state/ChannelState.java

@ -28,6 +28,9 @@ public class ChannelState {
@Schema(description = "剩余容量(单位:mL)")
private volatile Double remainingVolume;
@Schema(description = "加液量(单位:mL)")
private Double volume;
@Schema(description = "溶液id")
private volatile Long solutionId;

12
src/main/java/com/iflytop/handacid/app/model/dto/ChannelSetDTO.java

@ -0,0 +1,12 @@
package com.iflytop.handacid.app.model.dto;
import com.iflytop.handacid.app.common.enums.ChannelCode;
import lombok.Data;
@Data
public class ChannelSetDTO {
private int[] values;
private ChannelCode channel;
}

41
src/main/java/com/iflytop/handacid/app/websocket/client/BleGamepadDriverConfig.java

@ -1,41 +0,0 @@
package com.iflytop.handacid.app.websocket.client;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.URI;
@Slf4j
@Configuration
@RequiredArgsConstructor
public class BleGamepadDriverConfig {
@Value("${iflytophald.ip}")
String ip;
@Value("${iflytophald.datach.port}")
Integer port;
@Bean
SocketClient clientService() {
URI uri = URI.create(String.format("ws://%s:%d/%s", ip, port, "key"));
return new SocketClient(uri, s -> {
//蓝牙手柄 加酸按钮 按下
//蓝牙手柄 预充按钮 按下
//蓝牙手柄 连接成功
//蓝牙手柄 连接断开
if (s.get("event").equals("press")) {
} else if (s.get("event").equals("release")) {
log.info("解除急停{}", s);
}
});
}
}

61
src/main/java/com/iflytop/handacid/app/websocket/client/SocketClient.java

@ -1,61 +0,0 @@
package com.iflytop.handacid.app.websocket.client;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.enums.ReadyState;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.scheduling.annotation.Scheduled;
import java.net.URI;
import java.util.function.Consumer;
/**
* WebsocketClient
*/
@Slf4j
public class SocketClient extends WebSocketClient {
private Consumer<JSONObject> consumer;
public SocketClient(URI serverUri, Consumer<JSONObject> consumer) {
super(serverUri);
this.consumer = consumer;
}
@Override
public void onOpen(ServerHandshake handshakedata) {
log.info("device_status_listener_websocket connect success");
}
@Override
public void onMessage(String message) {
JSONObject jsonObject = JSONUtil.parseObj(message);
consumer.accept(jsonObject);
}
@Override
public void onClose(int code, String reason, boolean remote) {
log.info("device_status_listener_websocket lost connection...");
}
@Override
public void onError(Exception ex) {
log.info("device_status_listener_websocket on error");
}
//失去连接后重新连接 10s轮询
@Scheduled(fixedRate = 10000)
private void autoConnect() {
if (!isOpen()) {
if (getReadyState().equals(ReadyState.NOT_YET_CONNECTED)) {
try {
connect();
} catch (IllegalStateException ignored) {
}
} else if (getReadyState().equals(ReadyState.CLOSED)) {
reconnect();
}
}
}
}

8
src/main/java/com/iflytop/handacid/common/enums/SystemConfigType.java

@ -7,10 +7,10 @@ import lombok.Getter;
*/
public enum SystemConfigType {
SOLUTION_TYPE("溶液种类"),
CHANNEL_1_VOLUME("通道一溶液使用量"),
CHANNEL_2_VOLUME("通道二溶液使用量"),
CHANNEL_3_VOLUME("通道三溶液使用量"),
CHANNEL_4_VOLUME("通道四溶液使用量"),
CHANNEL_1("通道一溶液使用量"),
CHANNEL_2("通道二溶液使用量"),
CHANNEL_3("通道三溶液使用量"),
CHANNEL_4("通道四溶液使用量"),
;
/**

7
src/main/java/com/iflytop/handacid/common/mapper/FormulationMapper.java

@ -1,11 +1,16 @@
package com.iflytop.handacid.common.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iflytop.handacid.common.model.entity.Formulation;
import org.apache.ibatis.annotations.Mapper;
import com.iflytop.handacid.common.model.vo.FormulationVO;
import org.apache.ibatis.annotations.*;
/**
* 配方持久层接口
*/
@Mapper
public interface FormulationMapper extends BaseMapper<Formulation> {
IPage<FormulationVO> selectPageVo(IPage<Formulation> page);
}

30
src/main/java/com/iflytop/handacid/common/mapper/FormulationMapper.xml

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iflytop.handacid.common.mapper.FormulationMapper">
<!-- 结果映射定义 -->
<resultMap id="FormulationVoMap" type="com.iflytop.handacid.common.model.vo.FormulationVO">
<id column="id" property="id"/>
<result column="volume" property="volume"/>
<result column="revolutions" property="revolutions"/>
<result column="solution_id" property="solutionId"/>
<result column="solution_name" property="solutionName"/>
<result column="concentration" property="concentration"/>
<result column="scale" property="scale"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<!-- 其他字段映射... -->
</resultMap>
<!-- 分页查询 -->
<select id="selectPageVo" resultMap="FormulationVoMap">
SELECT f.*,
s.name AS solution_name,
s.concentration AS concentration,
s.scale AS scale
FROM formulation f
LEFT JOIN solution s ON f.solution_id = s.id
<!-- 自动分页由MyBatis-Plus插件处理 -->
</select>
</mapper>

8
src/main/java/com/iflytop/handacid/common/model/entity/Formulation.java

@ -18,15 +18,7 @@ public class Formulation extends BaseEntity {
@NotNull
@Schema(description = "酸液ID")
private Long solutionId;
@NotNull
@Schema(description = "酸液名称")
private String solutionName;
@NotNull
@Schema(description = "浓度")
private String concentration;
@Schema(description = "系数")
private Double scale;
@Schema(description = "转数")
private Double revolutions;
}

33
src/main/java/com/iflytop/handacid/common/model/vo/FormulationVO.java

@ -0,0 +1,33 @@
package com.iflytop.handacid.common.model.vo;
import com.baomidou.mybatisplus.annotation.TableName;
import com.iflytop.handacid.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
@TableName("formulation")
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "配方")
public class FormulationVO extends BaseEntity {
@NotNull
@Schema(description = "用量")
private Double volume;
@NotNull
@Schema(description = "酸液ID")
private Long solutionId;
@Schema(description = "转数")
private Double revolutions;
@Schema(description = "酸液名称")
private String solutionName;
@Schema(description = "浓度")
private String concentration;
@Schema(description = "系数")
private Double scale;
}

16
src/main/java/com/iflytop/handacid/common/service/FormulationService.java

@ -1,14 +1,30 @@
package com.iflytop.handacid.common.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iflytop.handacid.common.base.BasePageQuery;
import com.iflytop.handacid.common.mapper.FormulationMapper;
import com.iflytop.handacid.common.model.entity.Formulation;
import com.iflytop.handacid.common.model.vo.FormulationVO;
import com.iflytop.handacid.common.result.PageResult;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 配方接口服务
*/
@Service
@RequiredArgsConstructor
public class FormulationService extends ServiceImpl<FormulationMapper, Formulation> {
private final FormulationMapper formulationMapper;
public IPage<FormulationVO> selectPageVo(BasePageQuery query) {
IPage<Formulation> page = new Page<>();
page.setSize(query.getPageSize());
page.setCurrent(query.getPageNum());
return formulationMapper.selectPageVo(page);
}
}

5
src/main/resources/sql/init.sql

@ -43,13 +43,11 @@ INSERT OR IGNORE INTO channel (
-- ----------------------------
-- Table structure for formulation
-- ----------------------------
-- drop table IF EXISTS formulation;
CREATE TABLE IF NOT EXISTS formulation (
id INTEGER NOT NULL PRIMARY KEY,
volume DOUBLE,
solution_id INTEGER,
solution_name TEXT,
concentration TEXT,
scale DOUBLE,
revolutions DOUBLE,
create_time DATE DEFAULT CURRENT_TIMESTAMP,
update_time DATE DEFAULT CURRENT_TIMESTAMP
@ -76,6 +74,7 @@ CREATE TABLE IF NOT EXISTS receive_record (
-- ----------------------------
-- Table structure for solution
-- ----------------------------
-- drop table IF EXISTS solution;
CREATE TABLE IF NOT EXISTS solution (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,

Loading…
Cancel
Save