diff --git a/src/main/java/com/hivekion/DemoApplication.java b/src/main/java/com/hivekion/DemoApplication.java index fe9156f..47ad40b 100644 --- a/src/main/java/com/hivekion/DemoApplication.java +++ b/src/main/java/com/hivekion/DemoApplication.java @@ -1,5 +1,6 @@ package com.hivekion; +import cn.hutool.extra.spring.EnableSpringUtil; import org.mybatis.spring.annotation.MapperScan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,8 +14,9 @@ import java.time.LocalDate; import java.time.LocalTime; @SpringBootApplication +@EnableSpringUtil @MapperScan({"com.hivekion.**.mapper"}) -@ComponentScan(basePackages = { "com.hivekion.*"}) +@ComponentScan(basePackages = {"cn.hutool.extra.spring","com.hivekion.*"}) public class DemoApplication extends SpringBootServletInitializer { private static Logger log = LoggerFactory.getLogger(DemoApplication.class); diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 9902065..7b804d1 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -3,11 +3,8 @@ package com.hivekion.room.bean; import com.hivekion.room.RoomManager; import com.hivekion.room.func.TaskAction; import com.hivekion.scenario.entity.ScenarioTask; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; + +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import org.springframework.web.reactive.function.client.WebClient; @@ -75,6 +72,22 @@ public abstract class AbtParentTask implements TaskAction { public boolean getRoomStatus() { return RoomManager.isRunning(roomId); } + + public void createBattleTaskOnTimingHandle(BizTaskOnTiming bizTaskOnTiming){ + ScheduledExecutorService schedule = Executors.newScheduledThreadPool( + 1); + schedule.scheduleWithFixedDelay(() -> { + bizTaskOnTiming.execTask(); + }, 0, 10, TimeUnit.SECONDS); + //房间统一管理定时器;房间关闭后,定时器销毁 + addScheduledExecutorServiceRefenceToRoom(schedule); + } + +} + + interface BizTaskOnTiming{ + + public void execTask(); } // 自定义线程工厂 diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index 624b142..7170479 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -1,15 +1,25 @@ package com.hivekion.room.bean; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson2.JSONObject; import com.hivekion.Global; import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.common.redis.RedisUtil; +import com.hivekion.common.uuid.IdUtils; import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.statistic.bean.*; import com.hivekion.statistic.service.StatisticService; import com.hivekion.statistic.service.impl.StatisticServiceImpl; +import com.hivekion.supplier.entity.SupplierRequest; +import com.hivekion.supplier.service.ISupplierRequestService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.env.Environment; +import org.springframework.util.CollectionUtils; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -23,13 +33,16 @@ import java.util.concurrent.TimeUnit; * @author LiDongYU * @since 2025/7/22 */ +@Slf4j public class BattleRootTask extends AbtParentTask { private StatisticService statisticService = null; private RedisUtil redisUtil = null; + private ISupplierRequestService supplierRequestService; + private static final Double TEAM_SPREED = 1.2D; - private static final Integer PERSON_SPREED = 3; + private static final Double PERSON_SPREED = 3D; private static final Double AMMUNITION_SPREED = 2.6D; private static final Double FOOD_SPREED = 2.3D; private static final Double WATER_SPREED = 3.6D; @@ -44,66 +57,158 @@ public class BattleRootTask extends AbtParentTask { private void initBean(){ if(statisticService == null) { - statisticService = SpringUtil.getBean("statisticService"); + statisticService = SpringUtil.getBean(StatisticService.class); } if(redisUtil == null) { - redisUtil = SpringUtil.getBean("redisUtil"); + redisUtil = SpringUtil.getBean(RedisUtil.class); + } + if(supplierRequestService == null){ + supplierRequestService = SpringUtil.getBean(ISupplierRequestService.class); } } //执行一次 @Override public void doSomeThing() { + log.info("===============begin BattleRootTask=========={}==========",this.getRoomStatus()); this.initBean(); if(this.getRoomStatus()) { - long initduringTime = this.getDuringTime(); - StatisticBean statisticBean = statisticService.statistic(scenarioTask.getResourceId()); + long initDuringTime = this.getDuringTime(); + StatisticBean statisticBean = null; + try { + statisticBean = statisticService.statistic(scenarioTask.getResourceId()); + }catch (Exception ex){ + ex.printStackTrace(); + } + + HashMap battleParams = new HashMap<>(); + // statisticBean.getAmmunition().getCurrent() //初始化本次战斗任务各种资源数 - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"ammunition",statisticBean.getAmmunition().getCurrent()); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"food",statisticBean.getFood().getCurrent()); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"fuel",statisticBean.getFuel().getCurrent()); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"medical",statisticBean.getMedical().getCurrent()); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"water",statisticBean.getWater().getCurrent()); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"person",statisticBean.getPerson().getCurrent()); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"duringTime",initduringTime); + + battleParams.put("ammunition",Double.valueOf(statisticBean.getAmmunition().getCurrent()).toString()); + battleParams.put("food",Double.valueOf(statisticBean.getFood().getCurrent()).toString()); + battleParams.put("fuel",Double.valueOf(statisticBean.getFuel().getCurrent()).toString()); + battleParams.put("medical",Double.valueOf(statisticBean.getMedical().getCurrent()).toString()); + battleParams.put("water",Double.valueOf(statisticBean.getWater().getCurrent()).toString()); + battleParams.put("person",Double.valueOf(statisticBean.getPerson().getCurrent()).toString()); + battleParams.put("teamLat",statisticBean.getTeam().getLat().toString()); + battleParams.put("teamLng",statisticBean.getTeam().getLng().toString()); + battleParams.put("duringTime",Long.valueOf(initDuringTime).toString()); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(),battleParams); + log.info("===============================初始化本次战斗任务各种资源数===================================="); + double suppleAmount =statisticBean.getAmmunition().getTotal(); + double supplePerson =statisticBean.getPerson().getTotal(); + final Map suppleFlagMap = new HashMap<>(); + suppleFlagMap.put("ammunition",false); + suppleFlagMap.put("person",false); //定时检查统计各种资源消耗量 - ScheduledExecutorService schedule = Executors.newScheduledThreadPool( - 1); - schedule.scheduleWithFixedDelay(() -> { - long duringTime = getDuringTime(); - long lastDuringTime = (long) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"duringTime"); - long intervalDuringTime = duringTime - lastDuringTime; - double ammunition = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"ammunition"); - double food = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"food"); - double fuel = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"fuel"); - double medical = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"medical"); - double water = (double) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"water"); - int person = (int) redisUtil.hget(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"person"); + this.createBattleTaskOnTimingHandle(new BizTaskOnTiming() { + @Override + public void execTask() { + log.info("===============================定时检查统计各种资源消耗量 begin===================================="); - // - double teamConsume = intervalDuringTime * TEAM_SPREED; - long personConsume = intervalDuringTime* PERSON_SPREED ; - Double ammunitionConsume = intervalDuringTime * AMMUNITION_SPREED; - Double foodConsume = intervalDuringTime * FOOD_SPREED; - Double waterConsume = intervalDuringTime * WATER_SPREED; - Double fuelConsume = intervalDuringTime * FUEL_SPREED; - Double medicalConsume = intervalDuringTime * MEDICAL_SPREED; + Double personConsume = null; + Double ammunitionConsume = null; + Double foodConsume = null; + Double waterConsume = null; + Double fuelConsume = null; + Double medicalConsume = null; + String teamLat = null; + String teamLng = null; + JSONObject jsonObject = new JSONObject(); + try { + HashMap battleParams = (HashMap) redisUtil.hget(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId()); + long duringTime = getDuringTime(); + long lastDuringTime = Long.valueOf(battleParams.get("duringTime").toString()); + long intervalDuringTime = duringTime - lastDuringTime; + double ammunition = Double.valueOf(battleParams.get("ammunition").toString()); + double food = Double.valueOf(battleParams.get("food").toString()); + double fuel = Double.valueOf(battleParams.get("fuel").toString()); + double medical = Double.valueOf(battleParams.get("medical").toString()); + double water = Double.valueOf(battleParams.get("water").toString()); + double person = Double.valueOf(battleParams.get("person").toString()); + teamLat = battleParams.get( "teamLat").toString(); + teamLng = battleParams.get( "teamLng").toString(); + // + personConsume = intervalDuringTime * PERSON_SPREED; + ammunitionConsume = intervalDuringTime * AMMUNITION_SPREED; + foodConsume = intervalDuringTime * FOOD_SPREED; + waterConsume = intervalDuringTime * WATER_SPREED; + fuelConsume = intervalDuringTime * FUEL_SPREED; + medicalConsume = intervalDuringTime * MEDICAL_SPREED; - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"ammunition",ammunition-ammunitionConsume); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"food",food-foodConsume); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"fuel",fuel-foodConsume); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"medical",medical-medicalConsume); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"water",water-waterConsume); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"person",person-personConsume); - redisUtil.hset(scenarioTask.getScenarioId()+"-"+roomId+"-"+scenarioTask.getResourceId(),"duringTime",duringTime); - ResponseCmdInfo sendConsumeMsg = new ResponseCmdInfo<>(); - //推送消耗數據 - Global.sendCmdInfoQueue.add(sendConsumeMsg); + battleParams.put("ammunition",Double.valueOf(ammunition - ammunitionConsume).toString()); + battleParams.put("food",Double.valueOf(food - foodConsume).toString()); + battleParams.put("fuel",Double.valueOf(fuel - fuelConsume).toString()); + battleParams.put("medical",Double.valueOf(medical - medicalConsume).toString()); + battleParams.put("water",Double.valueOf(water - waterConsume).toString()); + battleParams.put("person",Double.valueOf(person - personConsume).toString()); + battleParams.put("duringTime",Long.valueOf(duringTime).toString()); + redisUtil.hset(scenarioTask.getScenarioId() + "-" + roomId + "-" + scenarioTask.getResourceId(), battleParams); + }catch (Exception ex){ + log.error("==============================设置消耗信息失败=============================================",ex.getMessage()); + } + try { + //推送消耗數據 + ResponseCmdInfo sendConsumeMsg = new ResponseCmdInfo<>(); + jsonObject.put("personConsume", personConsume); + jsonObject.put("ammunitionConsume", ammunitionConsume); + jsonObject.put("foodConsume", foodConsume); + jsonObject.put("waterConsume", waterConsume); + jsonObject.put("fuelConsume", fuelConsume); + jsonObject.put("medicalConsume", medicalConsume); + jsonObject.put("teamLat",teamLat); + jsonObject.put("teamLng",teamLng); + sendConsumeMsg.setData(jsonObject); + Global.sendCmdInfoQueue.add(sendConsumeMsg); + }catch (Exception ex){ + log.error("==================推送消耗數據 失败============================================",ex.getMessage()); + } + + try { + LocalDateTime currentDateTime = new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + String person = SpringUtil.getBean(Environment.class).getProperty("battle.person.warn"); + String ammunition = SpringUtil.getBean(Environment.class).getProperty("battle.ammunition.warn"); + log.info("===========person ammunition======={}====={}========",person,ammunition); +// String food = SpringUtil.getBean(Environment.class).getProperty("battle.food.warn"); +// String water = SpringUtil.getBean(Environment.class).getProperty("battle.water.warn"); +// String fuel = SpringUtil.getBean(Environment.class).getProperty("battle.fuel.warn"); +// String medical = SpringUtil.getBean(Environment.class).getProperty("battle.medical.warn"); + + if(Double.valueOf(battleParams.get("ammunition").toString()) <= Double.valueOf(ammunition) && suppleFlagMap.get("ammunition") == false){ + + SupplierRequest supplierRequest = new SupplierRequest(); + supplierRequest.setId(IdUtils.simpleUUID()); + supplierRequest.setFromResourceId(scenarioTask.getResourceId()); + supplierRequest.setSupplierNum(suppleAmount); + supplierRequest.setSupplierType("ammunition"); + supplierRequest.setGeneralTime(currentDateTime); + supplierRequest.setLat(jsonObject.get("teamLat").toString()); + supplierRequest.setLng(jsonObject.get("teamLng").toString()); + supplierRequestService.save(supplierRequest); + suppleFlagMap.put("ammunition",true) ; + } + if(Double.valueOf(battleParams.get("person").toString()) <= Double.valueOf(person) && suppleFlagMap.get("person") == false){ + SupplierRequest supplierRequest = new SupplierRequest(); + supplierRequest.setId(IdUtils.simpleUUID()); + supplierRequest.setFromResourceId(scenarioTask.getResourceId()); + supplierRequest.setSupplierNum(supplePerson); + supplierRequest.setSupplierType("person"); + supplierRequest.setGeneralTime(currentDateTime); + supplierRequest.setLat(jsonObject.get("teamLat").toString()); + supplierRequest.setLng(jsonObject.get("teamLng").toString()); + supplierRequestService.save(supplierRequest); + suppleFlagMap.put("person",true) ; + } + }catch (Exception ex){ + ex.printStackTrace(); + log.error("===========BattleRootTask supplierRequestService.saveBatch error====================",ex.getMessage()); + } + log.info("===============================定时检查统计各种资源消耗量 end===================================="); + } + }); - }, 0, 10, TimeUnit.SECONDS); - //房间统一管理定时器;房间关闭后,定时器销毁 - addScheduledExecutorServiceRefenceToRoom(schedule); } diff --git a/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java b/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java index 63373de..c84fa0f 100644 --- a/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java +++ b/src/main/java/com/hivekion/statistic/service/impl/StatisticServiceImpl.java @@ -1,5 +1,6 @@ package com.hivekion.statistic.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.hivekion.baseData.entity.Fightpowerstaff; import com.hivekion.baseData.entity.OrgSupplier; import com.hivekion.baseData.service.FightpowerstaffService; @@ -61,6 +62,9 @@ public class StatisticServiceImpl implements StatisticService { List orgPostList = scenarioOrgPostService.selectByCondition(post); List orgList = orgPostList.stream().map(ScenarioOrgPost::getOrgId) .collect(Collectors.toList()); + if(CollectionUtil.isEmpty(orgList)){ + return new StatisticBean(); + } //获取人员信息 if(!orgList.isEmpty()){ List staffList = fightpowerstaffService.queryByOrgIds(orgList); diff --git a/src/main/java/com/hivekion/supplier/controller/SupplierRequestController.java b/src/main/java/com/hivekion/supplier/controller/SupplierRequestController.java new file mode 100644 index 0000000..477a3b7 --- /dev/null +++ b/src/main/java/com/hivekion/supplier/controller/SupplierRequestController.java @@ -0,0 +1,18 @@ +package com.hivekion.supplier.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.stereotype.Controller; + +/** + *

+ * 前端控制器 + *

+ * + * @author liDongYu + * @since 2025-09-18 + */ +@Controller +@RequestMapping("/supplier/supplierRequest") +public class SupplierRequestController { + +} diff --git a/src/main/java/com/hivekion/supplier/entity/SupplierRequest.java b/src/main/java/com/hivekion/supplier/entity/SupplierRequest.java new file mode 100644 index 0000000..82f66da --- /dev/null +++ b/src/main/java/com/hivekion/supplier/entity/SupplierRequest.java @@ -0,0 +1,110 @@ +package com.hivekion.supplier.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDateTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + *

+ * + *

+ * + * @author liDongYu + * @since 2025-09-18 + */ +@TableName("TBL_SUPPLIER_REQUEST") +@ApiModel(value = "SupplierRequest对象", description = "") +public class SupplierRequest implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableField(value="ID") + private String id; + + @TableField(value="GENERAL_TIME") + private LocalDateTime generalTime; + + @TableField(value="FROM_RESOURCE_ID") + private String fromResourceId; + + @TableField(value="SUPPLIER_TYPE") + private String supplierType; + @TableField(value="SUPPLIER_NUM") + private Double supplierNum; + @TableField(value="LAT") + private String lat; + @TableField(value="LNG") + private String lng; + + 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 Double getSupplierNum() { + return supplierNum; + } + + public void setSupplierNum(Double 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{" + + "id = " + id + + ", generalTime = " + generalTime + + ", fromResourceId = " + fromResourceId + + ", supplierType = " + supplierType + + ", supplierNum = " + supplierNum + + ", lat = " + lat + + ", lng = " + lng + + "}"; + } +} diff --git a/src/main/java/com/hivekion/supplier/mapper/SupplierRequestMapper.java b/src/main/java/com/hivekion/supplier/mapper/SupplierRequestMapper.java new file mode 100644 index 0000000..9d11777 --- /dev/null +++ b/src/main/java/com/hivekion/supplier/mapper/SupplierRequestMapper.java @@ -0,0 +1,16 @@ +package com.hivekion.supplier.mapper; + +import com.hivekion.supplier.entity.SupplierRequest; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author liDongYu + * @since 2025-09-18 + */ +public interface SupplierRequestMapper extends BaseMapper { + +} diff --git a/src/main/java/com/hivekion/supplier/service/ISupplierRequestService.java b/src/main/java/com/hivekion/supplier/service/ISupplierRequestService.java new file mode 100644 index 0000000..15bfc36 --- /dev/null +++ b/src/main/java/com/hivekion/supplier/service/ISupplierRequestService.java @@ -0,0 +1,16 @@ +package com.hivekion.supplier.service; + +import com.hivekion.supplier.entity.SupplierRequest; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author liDongYu + * @since 2025-09-18 + */ +public interface ISupplierRequestService extends IService { + +} diff --git a/src/main/java/com/hivekion/supplier/service/impl/SupplierRequestServiceImpl.java b/src/main/java/com/hivekion/supplier/service/impl/SupplierRequestServiceImpl.java new file mode 100644 index 0000000..2340c89 --- /dev/null +++ b/src/main/java/com/hivekion/supplier/service/impl/SupplierRequestServiceImpl.java @@ -0,0 +1,20 @@ +package com.hivekion.supplier.service.impl; + +import com.hivekion.supplier.entity.SupplierRequest; +import com.hivekion.supplier.mapper.SupplierRequestMapper; +import com.hivekion.supplier.service.ISupplierRequestService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author liDongYu + * @since 2025-09-18 + */ +@Service +public class SupplierRequestServiceImpl extends ServiceImpl implements ISupplierRequestService { + +} diff --git a/src/main/java/com/hivekion/ws/WsServer.java b/src/main/java/com/hivekion/ws/WsServer.java index d8d1222..9e11408 100644 --- a/src/main/java/com/hivekion/ws/WsServer.java +++ b/src/main/java/com/hivekion/ws/WsServer.java @@ -32,7 +32,7 @@ public class WsServer { // key -> 当前key下所有会话 private static final Map>> SESSION_MAP = new ConcurrentHashMap<>(); - private final Object lock = new Object(); + private static final Object lock = new Object(); @OnOpen @@ -111,11 +111,11 @@ public class WsServer { } public static void sendMessage(Integer scenarioId, String room, String message) { + // log.info("send {},{},{}", message, scenarioId, room); - Object lock = lockMap.computeIfAbsent(scenarioId, k -> new Object()); synchronized (lock) { Map> roomMap = SESSION_MAP.get(String.valueOf(scenarioId)); - + // log.info("roomMap:{}", roomMap); if (roomMap != null) { if (roomMap.containsKey(room)) { Map singleRoomMap = roomMap.get(room); diff --git a/src/main/resources/application-rule.properties b/src/main/resources/application-rule.properties index e69de29..094db2a 100644 --- a/src/main/resources/application-rule.properties +++ b/src/main/resources/application-rule.properties @@ -0,0 +1,6 @@ +battle.person.warn = 2 +battle.ammunition.warn = 3 +battle.food.warn = 3 +battle.water.warn = 3 +battle.fuel.warn = 2 +battle.medical.warn = 1 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 196b48f..c02e11b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,2 @@ -spring.profiles.active=prod +spring.profiles.active=prod,rule #spring.profiles.active=dev \ No newline at end of file