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 dtoList = ruleParam.getWeaponModelDTOList(); List databaseWeapons = ruleParam.getDatabaseWeapons(); List resultWeapons = new ArrayList<>(); //TODO获取所有组件以及count Iterator iterator = dtoList.iterator(); while (iterator.hasNext()) { WeaponModelDTO dto = iterator.next(); if(PlatformAndModuleConstants.RED_NEBO_M_1.equals(dto.getName())){ List components = dto.getComponents(); List 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); } }