package com.fzzy.api.service; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.Expose; import com.fzzy.api.Constant; import com.fzzy.api.data.PushProtocol; import com.fzzy.api.data.SyncProtocol; import com.fzzy.api.entity.ApiTrigger; import com.fzzy.api.utils.RedisConst; import com.fzzy.api.utils.RedisUtil; import com.fzzy.api.view.repository.ApiTriggerRep; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 公共接口服务-字典表 */ @Component public class ApiTriggerService { /** * 用于存放字典与对接系统的编码映射 */ public static Map> contextMap = new HashMap<>(); private String DEFAULT_MAP_KEY = "DEFAULT"; @Autowired private RedisUtil redisUtil; @Autowired private ApiTriggerRep apiTriggerRep; /** * apiTriggerService#flushCache * 刷新缓存 */ @Expose public void flushCache() { List listParent = apiTriggerRep.findParent(); if (null == listParent || listParent.isEmpty()) return; List nodes; for (ApiTrigger trigger : listParent) { nodes = apiTriggerRep.findByParent(trigger.getCode(), Constant.YN_Y); trigger.setNodes(nodes); add2Cache(trigger); } } private void add2Cache(ApiTrigger trigger) { String key = RedisConst.buildKey(RedisConst.KYE_LIST_TRIGGER, trigger.getCode()); redisUtil.set(key, trigger.getNodes()); //添加映射 Map parentMap = contextMap.get(trigger.getCode()); if (null == parentMap) { parentMap = new HashMap<>(); } //如果没有子节点直接设置一个空MAP if (null == trigger.getNodes() || trigger.getNodes().isEmpty()) { contextMap.put(trigger.getCode(), parentMap); return; } //如果有子节点,则添加映射 for (ApiTrigger item : trigger.getNodes()) { //添加默认值 if (Constant.YN_Y.equals(item.getDefaultTag())) { parentMap.put(DEFAULT_MAP_KEY, item.getCode()); } if (StringUtils.isEmpty(item.getBizCode())) continue; parentMap.put(item.getBizCode(), item.getCode()); } contextMap.put(trigger.getCode(), parentMap); } @SuppressWarnings("unchecked") public List getTriggerByCache(String parentCode) { String key = RedisConst.buildKey(RedisConst.KYE_LIST_TRIGGER, parentCode); return (List) redisUtil.get(key); } /** * 根据字典表配置父编码和对接系统中的编码获取接口中的标准编码 * * @param parentCode 字典父编码 * @param bizCode 对接的到接口系统中的系统中配置编码 * @return 标准国标编码 */ public String getMappingCode(String parentCode, String bizCode) { String result = null; Map parentMap = contextMap.get(parentCode); if (null == parentMap || parentMap.isEmpty()) { if(StringUtils.isEmpty(bizCode)){ return bizCode; } if(Constant.TRIGGER_P_LSPZ.equals(parentCode)){ result = Integer.valueOf(bizCode)*1000000 + ""; result = result.substring(0,7); }else if(Constant.TRIGGER_P_LSXZ.equals(parentCode)){ result = Integer.valueOf(bizCode)*100 + ""; result = result.substring(0,3); }else { result = bizCode; } return result; } result = parentMap.get(bizCode); if (null == result) { result = parentMap.get(DEFAULT_MAP_KEY); } if (null == result) { if(StringUtils.isEmpty(bizCode)){ return bizCode; } if(Constant.TRIGGER_P_LSPZ.equals(parentCode)){ result = Integer.valueOf(bizCode)*1000000 + ""; result = result.substring(0,7); }else if(Constant.TRIGGER_P_LSXZ.equals(parentCode)){ result = Integer.valueOf(bizCode)*100 + ""; result = result.substring(0,3); }else { result = bizCode; } } return result; } /** * 页面下拉框使用,根据父编码获取,父编码的定注意在 @See Constant *

* ${dorado.getDataProvider("apiTriggerService#trigger").getResult("PARENT_CODE")} * * @return */ @DataProvider public List trigger(String parentCode) { return getTriggerByCache(parentCode); } /** * ${dorado.getDataProvider("apiTriggerService#triggerPushProtocol").getResult()} * 推送省平台协议列表 * * @return */ @DataProvider public List triggerPushProtocol() { List list = new ArrayList<>(); list.add(new ApiTrigger(PushProtocol.GB_DEFAULT.getCode(), PushProtocol.GB_DEFAULT.getName())); list.add(new ApiTrigger(PushProtocol.GB_2022.getCode(), PushProtocol.GB_2022.getName())); list.add(new ApiTrigger(PushProtocol.SB_SH_2021.getCode(), PushProtocol.SB_SH_2021.getName())); list.add(new ApiTrigger(PushProtocol.SB_SC_2021.getCode(), PushProtocol.SB_SC_2021.getName())); list.add(new ApiTrigger(PushProtocol.SB_GD_2022.getCode(), PushProtocol.SB_GD_2022.getName())); list.add(new ApiTrigger(PushProtocol.SB_GD_2020.getCode(), PushProtocol.SB_GD_2020.getName())); list.add(new ApiTrigger(PushProtocol.HB_FZZY_JG_2022.getCode(), PushProtocol.HB_FZZY_JG_2022.getName())); return list; } /** * ${dorado.getDataProvider("apiTriggerService#triggerSyncProtocol").getResult()} * 推送省平台协议列表 * * @return */ @DataProvider public List triggerSyncProtocol() { List list = new ArrayList<>(); list.add(new ApiTrigger(SyncProtocol.GB_DEFAULT.getCode(), SyncProtocol.GB_DEFAULT.getName())); list.add(new ApiTrigger(SyncProtocol.FZZY_V30_GB.getCode(), SyncProtocol.FZZY_V30_GB.getName())); list.add(new ApiTrigger(SyncProtocol.FZZY_V35_GB.getCode(), SyncProtocol.FZZY_V35_GB.getName())); list.add(new ApiTrigger(SyncProtocol.FZZY_V35_SHYZ.getCode(), SyncProtocol.FZZY_V35_SHYZ.getName())); return list; } }