一、周任务
工作任务
- 分类Tab需求
- 首页管理
1、分类Tab需求
1)TAB新增版本灰度
新增首页Tab灰度,默认隐藏Tab图标
/**
* A版本(灰度版本):隐藏tab栏的图片
* */
public static final String HIDDEN_TABIMG = "AppTabText";
/**
* B版本(对照版本):正常显示tab栏的图片
* */
public static final String NORMAL_TABIMG = "AppTabIcon";
/**
* @Author
* @Date 2020/8/17-14:23
*/
public interface ITabImgABService {
/**
* tab栏去掉图标灰度
*
* @Author:
* @Date: 2020/8/17-14:23
*/
String queryTabImgAB(Integer consumerId);
}
/*
* 实现同一个接口,分别为A和B方案
*/
@Service
public class AppTabIconImpl implements ITabImgABService {
@ABMethod(defaultImpl = true)
@Override
public String queryTabImgAB(Integer consumerId) {
return ABConstant.NORMAL_TABIMG;
}
}
@Service
public class AppTabTextImpl implements ITabImgABService {
@ABMethod(defaultImpl = false)
@Override
public String queryTabImgAB(Integer consumerId) {
return ABConstant.HIDDEN_TABIMG;
}
}
/**
* 这里是调用模板,执行相应的方法
* 识别方法:通过定义的资源名称必须和方法的名称相同
* */
* @Resource(name = "queryTabImgAB")//这里的名称需要和实现类的方法名称一样,要不然无法识别资源对象
private ABService<String> queryTabImgAB;
String tabImgGrayScale = queryTabImgAB.execute(sid, 0).getModel();
result.put("tabImgGrayScale", tabImgGrayScale);
2)分类Tab排序
分类排序的实现
@Override
public List<ChannelTabVo> queryByChannelTab(ChannelTabReq req) {
String json = redisCache.get(Constants.TABSORT);
List<Integer> list = new ArrayList<>();
if (StringUtil.isNotEmpty(json)) {
String[] split = json.split(",");
//list存放用于置顶的tab
for (int i = 0; i < split.length; i++) {
if (!split[i].matches("^1[0,1][0-9]$")) {
continue;
}
list.add(Integer.parseInt(split[i]));
}
}
//list是人工后台排序,getRecTab()是调用大数据传过来的排序,
return queryByChannelTabNew(list, getRecTab(req.getConsumerId()), req.getStrVersion());
}
// 手动配置部分tab实现置顶操作
public List<ChannelTabVo> queryByChannelTabNew(List<Integer> tabIds, List<Integer> bigDataIds, int version) {
//默认排序(Diamond中的默认顺序),只是用来获取其顺序
List<Integer> tabList = new ArrayList<>();
String defaultTabList = ysDiamondInfo.getTabCollocation();
List<ChannelTabVo> channelTabVos = JSON.parseArray(defaultTabList, ChannelTabVo.class);
for (ChannelTabVo tab : channelTabVos) {
tabList.add(tab.getTabId());
}
//大数据传过来为空
if (CollectionUtils.isEmpty(bigDataIds)) {
bigDataIds = tabList;
}
//.....略
}
数据的来源有两块:
1)由后台配置的tab栏顺序;
2)大数据推送的排序
需求:如果后台配置平台配置了tab的顺序,则将其配置的进行置顶,如果后台没有配置则使用大数据推荐的顺序进行排列。
在解决这个需求的时候需要考虑数据来源为null的情况,如果传入为空,则使用Diamond默认的顺序。
3)分类文案
分类文案支持研发侧可配置:解决该功能主要是将tab的信息配置到后台,每次拿到这些tab的ID/名称都是从后台中读取的
//默认排序(Diamond中的默认顺序),只是用来获取其顺序
List<Integer> tabList = new ArrayList<>();
String defaultTabList = ysDiamondInfo.getTabCollocation();
List<ChannelTabVo> channelTabVos = JSON.parseArray(defaultTabList, ChannelTabVo.class);
for (ChannelTabVo tab : channelTabVos) {
tabList.add(tab.getTabId());
}
//如果配置的信息返回为空,则使用默认的顺序
public String getTabCollocation() {
if(StringUtils.isEmpty(tabCollocation)){
return "[{\"tabId\":0,\"tabName\":\"特卖\"},{\"tabId\":104,\"tabName\":\"美妆\"},{\"tabId\":106,\"tabName\":\"食品\"},{\"tabId\":102,\"tabName\":\"服饰\"},{\"tabId\":109,\"tabName\":\"数码家电\"},{\"tabId\":103,\"tabName\":\"母婴\"},{\"tabId\":105,\"tabName\":\"家居\"},{\"tabId\":110,\"tabName\":\"进口\"},{\"tabId\":108,\"tabName\":\"保健\"},{\"tabId\":101,\"tabName\":\"水果\"},{\"tabId\":107,\"tabName\":\"图书教育\"}]";
}
return tabCollocation;
}
2、首页管理
这个是用于手工配置排序,之前的功能是必须完整配好所有的排序才能进行提交操作,现在是任意个数的值都行(按照规则),实现的逻辑挺简单:只是将文本框中的值提交到后台,保存到Redis中,查询操作也是从Redis中取对应的key,难度相对于较低。
总结
在实现这期的需求时,我发现了很多问题
- 一部分是对于业务还不是很熟悉,所以在解决问题时不知道问题出现在哪里,不能很迅速的定位,容易在一个简单的问题上面一直深陷
- 在写代码的时候,思维很容易受到环境的影响,这一次我是真的发现,当我思路文在问题的时候,我越是急着去解决越是解决不了,所以导致自己的思路很僵,后来不去思考这个东西,放松一下,结果问题就解决了,所以这个过程也是在不停的发现才能知道。
- 还有一点,这周没有学习,定的目标都没有去完成,感觉自己很罪过!