This commit is contained in:
wanglei 2025-09-18 13:33:37 +08:00
commit 6dc71feb6d
14 changed files with 187 additions and 93 deletions

View File

@ -28,12 +28,12 @@ public class CodeGenerator {
}) })
.packageConfig(builder -> { .packageConfig(builder -> {
builder.parent("com.hivekion") // 设置父包名 builder.parent("com.hivekion") // 设置父包名
.moduleName("scenario") // 设置模块名可选 .moduleName("basedata") // 设置模块名可选
.pathInfo(Collections.singletonMap(OutputFile.xml, .pathInfo(Collections.singletonMap(OutputFile.xml,
basePath + "/src/main/resources/mapper/tbl")); // 设置mapperXml生成路径 basePath + "/src/main/resources/mapper/tbl")); // 设置mapperXml生成路径
}) })
.strategyConfig(builder -> { .strategyConfig(builder -> {
builder.addInclude("TBL_ROOM_LOG".toLowerCase()) // 设置需要生成的表名多个用逗号分隔 builder.addInclude("IMG_VEHICLE_IMAGE".toLowerCase()) // 设置需要生成的表名多个用逗号分隔
.addTablePrefix("tbl_"); // 设置过滤表前缀 .addTablePrefix("tbl_"); // 设置过滤表前缀
}) })
.execute(); .execute();

View File

@ -0,0 +1,18 @@
package com.hivekion.basedata.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
/**
* <p>
* 前端控制器
* </p>
*
* @author liDongYu
* @since 2025-09-18
*/
@Controller
@RequestMapping("/basedata/imgVehicleImage")
public class ImgVehicleImageController {
}

View File

@ -19,6 +19,7 @@ import com.hivekion.baseData.domain.tblvehicleVo.ImgVehicleImageInfoVo;
import com.hivekion.baseData.domain.tblvehicleVo.VehicleAddInputVo; import com.hivekion.baseData.domain.tblvehicleVo.VehicleAddInputVo;
import com.hivekion.baseData.domain.tblvehicleVo.VehicleSearchVo; import com.hivekion.baseData.domain.tblvehicleVo.VehicleSearchVo;
import com.hivekion.baseData.domain.tblvehicleVo.VehicleViewVo; import com.hivekion.baseData.domain.tblvehicleVo.VehicleViewVo;
import com.hivekion.baseData.service.IImgAircraftImageService;
import com.hivekion.baseData.service.IImgVehicleImageService; import com.hivekion.baseData.service.IImgVehicleImageService;
import com.hivekion.common.annotation.AutoLog; import com.hivekion.common.annotation.AutoLog;
import com.hivekion.common.entity.PagedResultVo; import com.hivekion.common.entity.PagedResultVo;
@ -27,10 +28,13 @@ import com.hivekion.scenario.entity.Resource;
import com.hivekion.scenario.entity.Vehicle; import com.hivekion.scenario.entity.Vehicle;
import com.hivekion.scenario.service.IVehicleService; import com.hivekion.scenario.service.IVehicleService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
@ -47,6 +51,9 @@ public class TblVehicleController {
@Autowired @Autowired
private IImgVehicleImageService iImgVehicleImageService; private IImgVehicleImageService iImgVehicleImageService;
@Autowired
private IImgVehicleImageService imageService;
@PostMapping("/getList") @PostMapping("/getList")
@ApiOperation(value = "获取车辆列表", notes = "") @ApiOperation(value = "获取车辆列表", notes = "")
@AutoLog(value = "获取车辆列表", operationType = OperationTypeEnum.SELECT, module = "基础数据/车辆") @AutoLog(value = "获取车辆列表", operationType = OperationTypeEnum.SELECT, module = "基础数据/车辆")
@ -96,6 +103,19 @@ public class TblVehicleController {
return iImgVehicleImageService.getInfo(Id); return iImgVehicleImageService.getInfo(Id);
} }
@PostMapping("/addimg")
@ApiOperation(value = "新增车辆图片", notes = "")
@AutoLog(value = "新增车辆图片", operationType = OperationTypeEnum.INSERT, module = "基础数据/新增车辆图片")
@ApiImplicitParams({
@ApiImplicitParam(name = "id",
value = "id",
required = true
)
})
public boolean addImgList(@RequestPart("file") MultipartFile file, Integer id) throws IOException {
return imageService.add(file,id);
}
/** /**
* 生成新Id * 生成新Id
* *

View File

@ -12,10 +12,10 @@ public class VehicleViewVo implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@JsonProperty("ID") @JsonProperty("ID")
private Integer id; private Integer Id;
@ApiModelProperty("名称") @JsonProperty("Name")
private String vehicleName; private String Name;
@ApiModelProperty("速度") @ApiModelProperty("速度")
private String vehicleSpreed; private String vehicleSpreed;

View File

@ -0,0 +1,82 @@
package com.hivekion.basedata.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* <p>
*
* </p>
*
* @author liDongYu
* @since 2025-09-18
*/
@TableName("IMG_VEHICLE_IMAGE")
@ApiModel(value = "ImgVehicleImage对象", description = "")
public class ImgVehicleImage implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String guid;
private byte[] icon;
private byte[] image;
private String model3d;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGuid() {
return guid;
}
public void setGuid(String guid) {
this.guid = guid;
}
public byte[] getIcon() {
return icon;
}
public void setIcon(byte[] icon) {
this.icon = icon;
}
public byte[] getImage() {
return image;
}
public void setImage(byte[] image) {
this.image = image;
}
public String getModel3d() {
return model3d;
}
public void setModel3d(String model3d) {
this.model3d = model3d;
}
@Override
public String toString() {
return "ImgVehicleImage{" +
"id = " + id +
", guid = " + guid +
", icon = " + icon +
", image = " + image +
", model3d = " + model3d +
"}";
}
}

View File

@ -1,8 +1,8 @@
package com.hivekion.common; package com.hivekion.common;
import com.hivekion.common.exception.BusinessException; import com.hivekion.common.exception.BusinessException;
import com.sun.javafx.binding.StringFormatter;
import java.time.Duration;
import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
@ -10,6 +10,9 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import java.text.MessageFormat;
import java.time.Duration;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -17,6 +20,7 @@ import java.util.stream.Collectors;
* 一些公用的方法集 * 一些公用的方法集
*/ */
public class utils { public class utils {
/** /**
* 取差集 * 取差集
*/ */
@ -95,7 +99,7 @@ public class utils {
long hours = duration.toHours(); long hours = duration.toHours();
long minutes = duration.minusHours(hours).toMinutes(); long minutes = duration.minusHours(hours).toMinutes();
long seconds = duration.minusHours(hours).minusMinutes(minutes).getSeconds(); long seconds = duration.minusHours(hours).minusMinutes(minutes).getSeconds();
return StringFormatter.format("%d小时%d分钟%d秒\n", hours, minutes, seconds).get(); return MessageFormat.format("{0}小时{1}分钟{2}秒", hours, minutes, seconds);
} }
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -19,8 +19,8 @@ public class RoomManager {
private static final Map<String, Room> roomsMap = new ConcurrentHashMap<>(); private static final Map<String, Room> roomsMap = new ConcurrentHashMap<>();
public static void startRoom(String id, Scenario scenario,long time) { public static void startRoom(String id, Scenario scenario, long time) {
Room room = new Room(id,scenario); Room room = new Room(id, scenario);
roomsMap.put(id, room); roomsMap.put(id, room);
room.start(time); room.start(time);
} }
@ -52,4 +52,12 @@ public class RoomManager {
room.addAction(time, action); room.addAction(time, action);
} }
} }
public static long getRoomDuringTime(String id) {
Room room = roomsMap.get(id);
if (room != null) {
return room.getDuringTime();
}
return 0;
}
} }

View File

@ -27,16 +27,16 @@ import org.springframework.web.reactive.function.client.WebClient;
public abstract class AbtParentTask implements TaskAction { public abstract class AbtParentTask implements TaskAction {
protected final AtomicLong duringTime = new AtomicLong(0);
protected final ScheduledExecutorService schedule = Executors.newScheduledThreadPool(
1);
protected ScheduledFuture<?> scheduledFuture;
//任务数据 //任务数据
protected final ScenarioTask scenarioTask; protected final ScenarioTask scenarioTask;
//房间ID
protected final String roomId; protected final String roomId;
//http请求
protected WebClient webClient = WebClient.create(); protected WebClient webClient = WebClient.create();
ThreadPoolExecutor executor = new ThreadPoolExecutor( //线程池
protected ThreadPoolExecutor executor = new ThreadPoolExecutor(
5, // 核心线程数 5, // 核心线程数
10, // 最大线程数 10, // 最大线程数
60L, // 空闲线程存活时间 60L, // 空闲线程存活时间
@ -52,23 +52,10 @@ public abstract class AbtParentTask implements TaskAction {
} }
protected void start() {
scheduledFuture = schedule.scheduleAtFixedRate(() -> {
ScenarioWsParam scenarioWsParam = Global.roomParamMap.get(
scenarioTask.getScenarioId() + "_" + roomId);
if (scenarioWsParam == null) {
duringTime.getAndSet(1);
} else {
duringTime.getAndSet(scenarioWsParam.getMag());
}
}, 0, 1, TimeUnit.SECONDS);
}
protected abstract void finished();
protected abstract void setMag(int mag);
@Override @Override
public void doSomeThing() { public void doSomeThing() {
@ -85,13 +72,9 @@ public abstract class AbtParentTask implements TaskAction {
return scenarioTask.getTaskType(); return scenarioTask.getTaskType();
} }
public void cancelAllTask() {
if (scheduledFuture != null) {
scheduledFuture.cancel(true);
}
}
protected abstract void business();
} }
// 自定义线程工厂 // 自定义线程工厂

View File

@ -23,23 +23,9 @@ public class BattleRootTask extends AbtParentTask {
public void doSomeThing() { public void doSomeThing() {
//会知道想定ID, resourceId; //会知道想定ID, resourceId;
} }
//固定间隔执行
@Override
protected void business() {
// Global.roomParamMap.get(scenarioTask.getScenarioId() + "," + this.roomId); 可以获取当前想定的步长
//战斗需要消耗弹药 按时间消耗30秒
//人员消耗
//可能会产生需求保障需求
}
@Override
protected void finished() {
}
@Override
protected void setMag(int mag) {
}
} }

View File

@ -11,6 +11,9 @@ import com.hivekion.room.func.TaskAction;
import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.scenario.entity.ScenarioTask;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
@ -26,7 +29,9 @@ import org.springframework.core.env.Environment;
@Slf4j @Slf4j
public class MoveRootTask extends AbtParentTask implements TaskAction { public class MoveRootTask extends AbtParentTask implements TaskAction {
protected final ScheduledExecutorService schedule = Executors.newScheduledThreadPool(
1);
protected ScheduledFuture<?> scheduledFuture;
private final double SPEED = 170; private final double SPEED = 170;
private double accumulatedDistance = 0; private double accumulatedDistance = 0;
@ -84,21 +89,10 @@ public class MoveRootTask extends AbtParentTask implements TaskAction {
} }
@Override
protected void business() {
}
@Override
protected void finished() {
}
@Override
protected void setMag(int mag) {
}
} }

View File

@ -12,7 +12,6 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.NavigableMap; import java.util.NavigableMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@ -110,7 +109,12 @@ public class Room implements AutoCloseable {
startTask(); startTask();
} }
public long getDuringTime() {
return duringTime.get();
}
public long getTotalTime() {
return totalTime.get();
}
// 启动定时任务 // 启动定时任务
private void startTask() { private void startTask() {
@ -125,16 +129,15 @@ public class Room implements AutoCloseable {
sendRemainTime((totalTime.get() - curTime)); sendRemainTime((totalTime.get() - curTime));
Map<String, TaskAction> actions = actionMap.ceilingEntry(curTime); NavigableMap<Long, Map<String, TaskAction>> actions = actionMap.headMap(curTime, true);
if (actions != null && !actions.isEmpty()) { if (!actions.isEmpty() ) {
actions.forEach((key, action) -> {
action.forEach((taskAction, task) -> {
actionExecutor.submit(task::doSomeThing);
});
});
for (Map.Entry<String, TaskAction> entry : actions.entrySet()) {
actionExecutor.submit(entry.getValue()::doSomeThing);
}
// 全部执行后再清空
actions.clear(); actions.clear();
actionMap.remove(curTime);
} }
}, 0, 1, TimeUnit.SECONDS); }, 0, 1, TimeUnit.SECONDS);
} }

View File

@ -18,24 +18,15 @@ public class SupplierTask extends AbtParentTask implements TaskAction {
super(scenarioTask,roomId); super(scenarioTask,roomId);
} }
@Override
protected void finished() {
}
@Override @Override
public void doSomeThing() { public void doSomeThing() {
} }
@Override
protected void business() {
}
@Override
protected void setMag(int mag) {
}
} }

View File

@ -21,12 +21,12 @@ public class Vehicle implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("物理主键id") @ApiModelProperty("物理主键id")
@TableField(value = "id") @TableField(value = "ID")
private Integer id; private Integer Id;
@ApiModelProperty("名称") @ApiModelProperty("名称")
@TableField(value="vehicle_name") @TableField(value="NAME")
private String vehicleName; private String Name;
@ApiModelProperty("速度") @ApiModelProperty("速度")
@TableField(value = "vehicle_spreed") @TableField(value = "vehicle_spreed")
@ -93,19 +93,19 @@ public class Vehicle implements Serializable {
} }
public Integer getId() { public Integer getId() {
return id; return Id;
} }
public void setId(Integer id) { public void setId(Integer id) {
this.id = id; Id = id;
} }
public String getVehicleName() { public String getName() {
return vehicleName; return Name;
} }
public void setVehicleName(String vehicleName) { public void setName(String name) {
this.vehicleName = vehicleName; Name = name;
} }
public String getVehicleSpreed() { public String getVehicleSpreed() {
@ -207,8 +207,8 @@ public class Vehicle implements Serializable {
@Override @Override
public String toString() { public String toString() {
return "Vehicle{" + return "Vehicle{" +
"id=" + id + "id=" + Id +
", vehicleName='" + vehicleName + '\'' + ", vehicleName='" + Name + '\'' +
", vehicleSpreed='" + vehicleSpreed + '\'' + ", vehicleSpreed='" + vehicleSpreed + '\'' +
", vehicleType='" + vehicleType + '\'' + ", vehicleType='" + vehicleType + '\'' +
", fuelAbility=" + fuelAbility + ", fuelAbility=" + fuelAbility +

View File

@ -0,0 +1,5 @@
<?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.hivekion.baseData.mapper.ImgVehicleImageMapper">
</mapper>