26-03-13-14:36:火力规则简单实现

This commit is contained in:
MHW
2026-03-13 14:36:31 +08:00
parent 8b3fe9b548
commit 99c100f2ac
31 changed files with 997 additions and 4 deletions

View File

@@ -0,0 +1,80 @@
package com.solution.rule.handler;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.solution.common.constant.ExceptionConstants;
import com.solution.common.constant.PlatformAndModuleConstants;
import com.solution.rule.domain.PlatformComponent;
import com.solution.rule.domain.RuleParam;
import com.solution.rule.domain.dto.WeaponModelDTO;
import com.solution.rule.domain.vo.ComponentCountVO;
import com.solution.rule.domain.vo.PlatformWeaponAggregateVO;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 战斗机处理链
* 规则:针对 F22 平台后端返回的组件数量比前端传递的大1
* 如果数据库中 F22 平台所有组件总数小于前端数量+1则返回该总数。
*/
@Component
public class WarplaneHandler extends AbstractRuleChainHandler {
// 组件数量增量常量
private static final long COMPONENT_COUNT_INCREMENT = 1;
@Override
public RuleParam doHandler(RuleParam ruleParam) {
// 1. 参数校验
if (ObjectUtil.isEmpty(ruleParam) || CollUtil.isEmpty(ruleParam.getWeaponModelDTOList())) {
throw new RuntimeException(ExceptionConstants.PARAMETER_EXCEPTION);
}
List<WeaponModelDTO> dtoList = ruleParam.getWeaponModelDTOList();
List<ComponentCountVO> databaseWeapons = ruleParam.getDatabaseWeapons();
List<PlatformWeaponAggregateVO> resultWeapons = new ArrayList<>();
//TODO获取所有组件以及count
Iterator<WeaponModelDTO> iterator = dtoList.iterator();
while (iterator.hasNext()) {
WeaponModelDTO dto = iterator.next();
if(PlatformAndModuleConstants.RED_NEBO_M_1.equals(dto.getName())){
List<PlatformComponent> components = dto.getComponents();
List<PlatformComponent> componentList = new ArrayList<>();
//遍历前端数据的组件
for (PlatformComponent component : components) {
//遍历数据库数据
for (ComponentCountVO databaseWeapon : databaseWeapons) {
if(component.getName().equals(databaseWeapon.getComponentName())){
PlatformComponent component1 = new PlatformComponent();
component1.setName(databaseWeapon.getComponentName());
if(databaseWeapon.getCount() > component.getNum()){
component1.setNum(component.getNum() + COMPONENT_COUNT_INCREMENT);
}else {
component1.setNum(databaseWeapon.getCount());
}
//TODO 补充基本信息 暂未完成
componentList.add(component1);
}
}
}
PlatformWeaponAggregateVO platformVO = new PlatformWeaponAggregateVO();
platformVO.setPlatformName(dto.getName());
platformVO.setComponents(componentList);
resultWeapons.add(platformVO);
iterator.remove();
}
}
ruleParam.setResultWeapons(resultWeapons);
return ruleParam;
// return super.doNextHandler(ruleParam);
}
}