diff --git a/src/main/java/com/hivekion/CodeGenerator.java b/src/main/java/com/hivekion/CodeGenerator.java index ef2ea8a..76df43b 100644 --- a/src/main/java/com/hivekion/CodeGenerator.java +++ b/src/main/java/com/hivekion/CodeGenerator.java @@ -28,12 +28,12 @@ public class CodeGenerator { }) .packageConfig(builder -> { builder.parent("com.hivekion") // 设置父包名 - .moduleName("basedata") // 设置模块名(可选) + .moduleName("supplier") // 设置模块名(可选) .pathInfo(Collections.singletonMap(OutputFile.xml, basePath + "/src/main/resources/mapper/tbl")); // 设置mapperXml生成路径 }) .strategyConfig(builder -> { - builder.addInclude("IMG_VEHICLE_IMAGE".toLowerCase()) // 设置需要生成的表名(多个用逗号分隔) + builder.addInclude("TBL_BATTLE_SUPPLIER".toLowerCase()) // 设置需要生成的表名(多个用逗号分隔) .addTablePrefix("tbl_"); // 设置过滤表前缀 }) .execute(); diff --git a/src/main/java/com/hivekion/room/bean/MoveRootTask.java b/src/main/java/com/hivekion/room/bean/MoveRootTask.java index f6d7b45..ce09eb9 100644 --- a/src/main/java/com/hivekion/room/bean/MoveRootTask.java +++ b/src/main/java/com/hivekion/room/bean/MoveRootTask.java @@ -1,33 +1,24 @@ package com.hivekion.room.bean; import cn.hutool.extra.spring.SpringUtil; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; -import com.hivekion.Global; -import com.hivekion.baseData.entity.Scenario; -import com.hivekion.baseData.service.ScenarioService; -import com.hivekion.common.MultiPointGeoPosition; -import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; -import com.hivekion.enums.WsCmdTypeEnum; +import com.hivekion.common.uuid.IdUtils; +import com.hivekion.room.RoomManager; import com.hivekion.room.func.TaskAction; +import com.hivekion.scenario.entity.ScenarioResource; import com.hivekion.scenario.entity.ScenarioTask; +import com.hivekion.scenario.service.impl.BattleSupplierServiceImpl; +import com.hivekion.scenario.service.impl.ScenarioTaskServiceImpl; import com.hivekion.statistic.bean.StatisticBean; import com.hivekion.statistic.service.impl.StatisticServiceImpl; -import java.time.Duration; -import java.util.ArrayList; -import java.util.HashMap; +import com.hivekion.supplier.entity.SupplierRequest; +import com.hivekion.supplier.service.impl.SupplierRequestServiceImpl; +import java.time.LocalDateTime; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.NavigableMap; -import java.util.TreeMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; -import lombok.Data; +import java.util.concurrent.atomic.AtomicBoolean; import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; @@ -47,7 +38,10 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { * 速度 换算为100Km/小时 */ private final double SPEED = 27; - + /** + * 需求产生标志 + */ + private final AtomicBoolean requestFlag = new AtomicBoolean(false); /** * 油料消耗速率 */ @@ -75,7 +69,7 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { initEnv(); //初始化环境 initPath(); //初始化路径 - updatePath(SPEED,null); //更新路径 + updatePath(SPEED, null); //更新路径 fuelConsumption();//油品消耗 } @@ -84,21 +78,17 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { */ private void initEnv() { - //获取油品消耗规则 String fuelConsumptionStr = SpringUtil.getBean(Environment.class) .getProperty("fuel_spreed"); fuelConsumption = Double.parseDouble(fuelConsumptionStr == null ? "0" : fuelConsumptionStr); fuelThreshold = Double.parseDouble(SpringUtil.getBean(Environment.class) - .getProperty("fuel.warn ","0")); + .getProperty("fuel.warn ", "0")); statisticBean = SpringUtil.getBean(StatisticServiceImpl.class) .statistic(scenarioTask.getResourceId()); } - - - private void fuelConsumption() { ScheduledExecutorService schedule = Executors.newScheduledThreadPool( @@ -107,28 +97,29 @@ public class MoveRootTask extends AbtParentTask implements TaskAction { if (getRoomStatus()) { double currentUseUp = consumptionTaskInterval * SPEED / 1000 * fuelConsumption; - - //更新redis中油品的消耗 Object currentFuelObj = redis.hget( scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuelConsume"); + "fuel"); if (currentFuelObj != null) { double fuel = Double.parseDouble(currentFuelObj.toString()); - fuel = fuel + currentUseUp; - //更新值 - redis.hset( - scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), - "fuelConsume", fuel); + fuel = fuel - currentUseUp; + redis.hset( + scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "fuelConsume", fuel); + + double totalFuel = statisticBean.getFuel().getTotal(); + if (fuel * 100 / totalFuel < fuelThreshold && !requestFlag.get()) { + requestFlag.set(true); + //需要产生需求 + produceFuelRequest(); + //产生任务 + produceTask(); - double totalFuel = statisticBean.getFuel().getTotal(); - if(fuel*100/totalFuel resourceList = SpringUtil.getBean(BattleSupplierServiceImpl.class) + .selectSupplierResource(scenarioTask.getResourceId()); + if (!resourceList.isEmpty()) { + ScenarioTask task = new ScenarioTask(); + task.setId(IdUtils.simpleUUID()); + task.setScenarioId(scenarioTask.getScenarioId()); + task.setResourceId(scenarioTask.getResourceId()); + task.setTaskType("6"); + task.setSupplierNum(statisticBean.getFuel().getTotal()); + task.setToLat(scenarioTask.getToLat()); + task.setToLng(scenarioTask.getToLng()); + task.setStartTime(LocalDateTime.now()); + task.setFromLat(resourceList.get(0).getLat()); + task.setFromLng(resourceList.get(0).getLng()); + task.setFromSource("general"); + SpringUtil.getBean(ScenarioTaskServiceImpl.class).save(task); + //增加到房间任务 + SupplierTask supplierTask = new SupplierTask(task, roomId); + //立即执行 + RoomManager.addAction(roomId, 0, supplierTask); + } + } } diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 5ac43d9..6929061 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -119,9 +119,7 @@ public class Room implements AutoCloseable { return duringTime.get(); } - public long getTotalTime() { - return totalTime.get(); - } + // 启动定时任务 private void startTask() { diff --git a/src/main/java/com/hivekion/room/bean/SupplierTask.java b/src/main/java/com/hivekion/room/bean/SupplierTask.java index e4f0c34..9cf2f79 100644 --- a/src/main/java/com/hivekion/room/bean/SupplierTask.java +++ b/src/main/java/com/hivekion/room/bean/SupplierTask.java @@ -1,7 +1,11 @@ package com.hivekion.room.bean; +import cn.hutool.extra.spring.SpringUtil; +import com.hivekion.common.redis.RedisUtil; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; +import com.hivekion.statistic.bean.StatisticBean; +import com.hivekion.statistic.service.StatisticService; /** * [类的简要说明] @@ -21,9 +25,87 @@ public class SupplierTask extends AbtParentTask implements TaskAction { @Override public void doSomeThing() { + StatisticBean statistic = SpringUtil.getBean(StatisticService.class) + .statistic(scenarioTask.getResourceId()); + initPath(); //初始化路径 + updatePath(30, new TaskAction() { + + @Override + public void doSomeThing() { + //达到终点点后,给目标补充物资 + switch (scenarioTask.getTaskType()) { + case "4": + supplierAmmunition(statistic); + break; + case "5": + supplierWater(statistic); + break; + case "6": + supplierFuel(statistic); + break; + case "7": + supplierFood(statistic); + break; + case "8": + supplierMedical(statistic); + break; + } + //推送最新状态信息 + + } + + @Override + public String getId() { + return ""; + } + + @Override + public String getType() { + return ""; + } + }); + } + + private void supplierMedical(StatisticBean statistic) { + + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "medical", statistic.getMedical().getTotal()); + + + } + + private void supplierFuel(StatisticBean statistic) { + + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "fuel", statistic.getFuel().getTotal()); + + } + + private void supplierAmmunition(StatisticBean statistic) { + + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "ammunition", statistic.getAmmunition().getTotal()); + + } + + private void supplierWater(StatisticBean statistic) { + + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "water", statistic.getWater().getTotal()); + + } + + private void supplierFood(StatisticBean statistic) { + + SpringUtil.getBean(RedisUtil.class) + .hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), + "food", statistic.getFood().getTotal()); } - } diff --git a/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java b/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java index faae520..63ec65c 100644 --- a/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java +++ b/src/main/java/com/hivekion/scenario/entity/ScenarioTask.java @@ -64,5 +64,6 @@ public class ScenarioTask implements Serializable { private String supplierResourceId; @TableField(value = "supplier_num") private double supplierNum; - + @TableField(value="from_source") + private String fromSource; } diff --git a/src/main/java/com/hivekion/scenario/mapper/BattleSupplierMapper.java b/src/main/java/com/hivekion/scenario/mapper/BattleSupplierMapper.java index 0426a64..08c0708 100644 --- a/src/main/java/com/hivekion/scenario/mapper/BattleSupplierMapper.java +++ b/src/main/java/com/hivekion/scenario/mapper/BattleSupplierMapper.java @@ -2,6 +2,8 @@ package com.hivekion.scenario.mapper; import com.hivekion.scenario.entity.BattleSupplier; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hivekion.scenario.entity.ScenarioResource; +import java.util.List; /** *

@@ -12,5 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2025-09-15 */ public interface BattleSupplierMapper extends BaseMapper { - + List selectSupplierResource(String battleResourceId); } diff --git a/src/main/java/com/hivekion/scenario/service/IBattleSupplierService.java b/src/main/java/com/hivekion/scenario/service/IBattleSupplierService.java index ee247d7..494ab14 100644 --- a/src/main/java/com/hivekion/scenario/service/IBattleSupplierService.java +++ b/src/main/java/com/hivekion/scenario/service/IBattleSupplierService.java @@ -2,6 +2,7 @@ package com.hivekion.scenario.service; import com.hivekion.scenario.entity.BattleSupplier; import com.baomidou.mybatisplus.extension.service.IService; +import com.hivekion.scenario.entity.ScenarioResource; import java.util.List; import java.util.Set; @@ -16,4 +17,5 @@ import java.util.Set; public interface IBattleSupplierService extends IService { public Set getBattleResourceBySupplierId(String id); public Set getSupplierIdByBattleId(String id); + List selectSupplierResource(String battleResourceId); } diff --git a/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java index d11c8a6..b78608f 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/BattleSupplierServiceImpl.java @@ -1,11 +1,11 @@ package com.hivekion.scenario.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hivekion.scenario.entity.BattleSupplier; +import com.hivekion.scenario.entity.ScenarioResource; import com.hivekion.scenario.mapper.BattleSupplierMapper; import com.hivekion.scenario.service.IBattleSupplierService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -13,19 +13,20 @@ import org.springframework.stereotype.Service; /** *

- * 服务实现类 + * 服务实现类 *

* * @author liDongYu * @since 2025-09-15 */ @Service -public class BattleSupplierServiceImpl extends ServiceImpl implements IBattleSupplierService { +public class BattleSupplierServiceImpl extends + ServiceImpl implements IBattleSupplierService { @Override public Set getBattleResourceBySupplierId(String id) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("supplier_resource_id",id); + queryWrapper.eq("supplier_resource_id", id); List list = this.list(queryWrapper); return list.stream().map(BattleSupplier::getBattleResourceId).collect(Collectors.toSet()); } @@ -33,9 +34,14 @@ public class BattleSupplierServiceImpl extends ServiceImpl getSupplierIdByBattleId(String id) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("battle_resource_id",id); + queryWrapper.eq("battle_resource_id", id); List list = this.list(queryWrapper); return list.stream().map(BattleSupplier::getSupplierResourceId).collect(Collectors.toSet()); } + + @Override + public List selectSupplierResource(String battleResourceId) { + return this.baseMapper.selectSupplierResource(battleResourceId); + } } diff --git a/src/main/java/com/hivekion/supplier/entity/SupplierRequest.java b/src/main/java/com/hivekion/supplier/entity/SupplierRequest.java index aef5424..e026a20 100644 --- a/src/main/java/com/hivekion/supplier/entity/SupplierRequest.java +++ b/src/main/java/com/hivekion/supplier/entity/SupplierRequest.java @@ -2,102 +2,54 @@ package com.hivekion.supplier.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; import java.io.Serializable; import java.time.LocalDateTime; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; +import lombok.Data; /** *

- * + * *

* * @author liDongYu * @since 2025-09-18 */ +@Data @TableName("TBL_SUPPLIER_REQUEST") @ApiModel(value = "SupplierRequest对象", description = "") public class SupplierRequest implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @TableField(value="ID") - private String id; + @TableField(value = "ID") + private String id; - @TableField(value="GENERAL_TIME") - private LocalDateTime generalTime; + @TableField(value = "GENERAL_TIME") + private LocalDateTime generalTime; - @TableField(value="FROM_RESOURCE_ID") - private String fromResourceId; + @TableField(value = "FROM_RESOURCE_ID") + private String fromResourceId; - @TableField(value="SUPPLIER_TYPE") - private String supplierType; - @TableField(value="SUPPLIER_NUM") - private String supplierNum; - @TableField(value="LAT") - private String lat; - @TableField(value="LNG") - private String lng; + @TableField(value = "SUPPLIER_TYPE") + private String supplierType; + @TableField(value = "SUPPLIER_NUM") + private String supplierNum; + @TableField(value = "LAT") + private String lat; + @TableField(value = "LNG") + private String lng; + /** + * 0 未处理 ;1 处理 + */ + @TableField(value = "handle_flag") + private int handleFlag; - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public LocalDateTime getGeneralTime() { - return generalTime; - } - - public void setGeneralTime(LocalDateTime generalTime) { - this.generalTime = generalTime; - } - - public String getFromResourceId() { - return fromResourceId; - } - - public void setFromResourceId(String fromResourceId) { - this.fromResourceId = fromResourceId; - } - - public String getSupplierType() { - return supplierType; - } - - public void setSupplierType(String supplierType) { - this.supplierType = supplierType; - } - - public String getSupplierNum() { - return supplierNum; - } - - public void setSupplierNum(String supplierNum) { - this.supplierNum = supplierNum; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - @Override - public String toString() { - return "SupplierRequest{" + + @Override + public String toString() { + return "SupplierRequest{" + "id = " + id + ", generalTime = " + generalTime + ", fromResourceId = " + fromResourceId + @@ -106,5 +58,5 @@ public class SupplierRequest implements Serializable { ", lat = " + lat + ", lng = " + lng + "}"; - } + } } diff --git a/src/main/java/com/hivekion/system/controller/UserLoginController.java b/src/main/java/com/hivekion/system/controller/UserLoginController.java index ccd66a1..964a9cb 100644 --- a/src/main/java/com/hivekion/system/controller/UserLoginController.java +++ b/src/main/java/com/hivekion/system/controller/UserLoginController.java @@ -30,6 +30,7 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -49,6 +50,7 @@ import org.springframework.web.bind.annotation.RestController; @Validated @RestController @Api(value = "登录管理", tags = {"认证管理-登录"}) +@Slf4j public class UserLoginController { @Autowired @@ -161,6 +163,7 @@ public class UserLoginController { throw new BusinessException(500, "客户端编码为空"); } String capText = captchaProducer.createText(); + log.info("capText::{}",capText); try { Object o = redisUtil.get(clientCode); if (o != null) { diff --git a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml index 8b15571..0de6659 100644 --- a/src/main/resources/mapper/tbl/BattleSupplierMapper.xml +++ b/src/main/resources/mapper/tbl/BattleSupplierMapper.xml @@ -1,5 +1,11 @@ - + - +