Authored by mingdan.ge

cps4期达人排行

@@ -14,7 +14,9 @@ public enum ShareOrdersKeyEnum { @@ -14,7 +14,9 @@ public enum ShareOrdersKeyEnum {
14 SETTLEMENT_LIST("yh:union:share:settlementList:","key:{}:page:{}:limit:{}",600,"提现列表"), 14 SETTLEMENT_LIST("yh:union:share:settlementList:","key:{}:page:{}:limit:{}",600,"提现列表"),
15 UNION_TYPE("yh:union:share:unionType:","key:{}",600,"用户登录时获取对应的渠道号"), 15 UNION_TYPE("yh:union:share:unionType:","key:{}",600,"用户登录时获取对应的渠道号"),
16 RECENTLY_ORDER_LIMIT_TEN("yh:union:share:recentlyOrderLimitTen:","key:{}",600,"用户前台获取个人推广近期订单(10个)"), 16 RECENTLY_ORDER_LIMIT_TEN("yh:union:share:recentlyOrderLimitTen:","key:{}",600,"用户前台获取个人推广近期订单(10个)"),
17 - ORDER_STATISTICS_INFO("yh:union:share:statisticsInfo:","uid:{}:queryTimeType:{}",600,"统计数据"); 17 + ORDER_STATISTICS_INFO("yh:union:share:statisticsInfo:","uid:{}:queryTimeType:{}",600,"统计数据"),
  18 + RANK_LIST("yh:union:share:ranklist:","type:{}:start:{}:limit:{}",600,"达人排行榜"),
  19 + RANK_INFO("yh:union:share:rank:","uid:{}type:{}:",600,"个人排行");
18 20
19 21
20 private String preKey; 22 private String preKey;
@@ -118,6 +118,33 @@ public class RedisHashCache { @@ -118,6 +118,33 @@ public class RedisHashCache {
118 } 118 }
119 return null; 119 return null;
120 } 120 }
  121 +
  122 +
  123 + /**
  124 + * 根据key获取hash数据size
  125 + *
  126 + * @param cacheKey key前缀
  127 + * @param obj key后缀
  128 + * @return size
  129 + */
  130 + public int size(String cacheKey,Object obj) {
  131 + try {
  132 + if (StringUtils.isEmpty(cacheKey)) {
  133 + return 0;
  134 + }
  135 + logger.info("RedisHashCache get size,cacheKey is: {},obj is: {}", cacheKey,obj);
  136 + RedisKeyBuilder redisKeyBuilder = RedisKeyBuilder.newInstance().appendFixed(cacheKey).appendVar(obj);
  137 + Long size = this.hashOperations.size(redisKeyBuilder);
  138 + if (size == null||size<0) {
  139 + return 0;
  140 + }
  141 + return size.intValue();
  142 + } catch (Exception e) {
  143 + logger.warn("RedisHashCache get size failed!!! cacheKey is: {},obj is: {},e is {}", cacheKey,obj,e);
  144 + }
  145 + return 0;
  146 + }
  147 +
121 // 148 //
122 // /** 149 // /**
123 // * 根据key和hashkey获取数据 150 // * 根据key和hashkey获取数据
@@ -3,6 +3,7 @@ package com.yoho.unions.dal; @@ -3,6 +3,7 @@ package com.yoho.unions.dal;
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
4 import java.util.List; 4 import java.util.List;
5 5
  6 +import com.yoho.service.model.union.bo.UninoShareIncomeBo;
6 import com.yoho.service.model.union.request.UnionShareOrdersMonthReqBO; 7 import com.yoho.service.model.union.request.UnionShareOrdersMonthReqBO;
7 import com.yoho.unions.dal.model.UnionShareOrdersMonth; 8 import com.yoho.unions.dal.model.UnionShareOrdersMonth;
8 import org.apache.ibatis.annotations.Param; 9 import org.apache.ibatis.annotations.Param;
@@ -17,6 +18,8 @@ public interface UnionShareOrdersMonthMapper { @@ -17,6 +18,8 @@ public interface UnionShareOrdersMonthMapper {
17 UnionShareOrdersMonth selectByPrimaryKey(Integer id); 18 UnionShareOrdersMonth selectByPrimaryKey(Integer id);
18 19
19 List<UnionShareOrdersMonth> selectMonthData(@Param("date") int date, @Param("promoteUid") Integer promoteUid, @Param("type") Integer type); 20 List<UnionShareOrdersMonth> selectMonthData(@Param("date") int date, @Param("promoteUid") Integer promoteUid, @Param("type") Integer type);
  21 + List<UninoShareIncomeBo> selectMonthRankList(@Param("date") int date, @Param("start") Integer start, @Param("size") Integer size);
  22 + List<UninoShareIncomeBo> selectTotalRankList(@Param("start") Integer start, @Param("size") Integer size);
20 23
21 BigDecimal selectAmountByUid(@Param("date") Integer date, @Param("promoteUid") Integer promoteUid, @Param("type") Integer type); 24 BigDecimal selectAmountByUid(@Param("date") Integer date, @Param("promoteUid") Integer promoteUid, @Param("type") Integer type);
22 25
@@ -32,6 +32,20 @@ @@ -32,6 +32,20 @@
32 where uid = #{promoteUid,jdbcType=INTEGER} and date=#{date,jdbcType=INTEGER} and type=#{type,jdbcType=INTEGER} 32 where uid = #{promoteUid,jdbcType=INTEGER} and date=#{date,jdbcType=INTEGER} and type=#{type,jdbcType=INTEGER}
33 order by id desc 33 order by id desc
34 </select> 34 </select>
  35 + <select id="selectMonthRankList" resultType="com.yoho.service.model.union.bo.UninoShareIncomeBo" >
  36 + select amount ,uid,nickname,image,order_num as orderNum
  37 + from union_share_orders_month
  38 + where date=#{date,jdbcType=INTEGER}
  39 + order by amount desc
  40 + limit #{start},#{size}
  41 + </select>
  42 + <select id="selectTotalRankList" resultType="com.yoho.service.model.union.bo.UninoShareIncomeBo" >
  43 + select sum(amount) as amount ,uid,nickname,image,order_num as orderNum
  44 + from union_share_orders_month
  45 + group by uid
  46 + order by sum(amount) desc
  47 + limit #{start},#{size}
  48 + </select>
35 <select id="selectAmountByUid" resultType="java.math.BigDecimal" > 49 <select id="selectAmountByUid" resultType="java.math.BigDecimal" >
36 select sum(amount) 50 select sum(amount)
37 from union_share_orders_month 51 from union_share_orders_month
@@ -4,6 +4,8 @@ import com.yoho.core.common.utils.DateUtil; @@ -4,6 +4,8 @@ import com.yoho.core.common.utils.DateUtil;
4 import com.yoho.core.common.utils.JsonUtil; 4 import com.yoho.core.common.utils.JsonUtil;
5 import com.yoho.core.rabbitmq.YhConsumer; 5 import com.yoho.core.rabbitmq.YhConsumer;
6 import com.yoho.service.model.union.bo.ShareOrderBo; 6 import com.yoho.service.model.union.bo.ShareOrderBo;
  7 +import com.yoho.unions.common.enums.ShareOrdersKeyEnum;
  8 +import com.yoho.unions.common.redis.RedisHashCache;
7 import com.yoho.unions.server.service.IUnionShareService; 9 import com.yoho.unions.server.service.IUnionShareService;
8 import org.slf4j.Logger; 10 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
@@ -23,6 +25,9 @@ public class UnionShareOrderConsumer implements YhConsumer { @@ -23,6 +25,9 @@ public class UnionShareOrderConsumer implements YhConsumer {
23 @Autowired 25 @Autowired
24 private IUnionShareService unionShareService; 26 private IUnionShareService unionShareService;
25 27
  28 + @Autowired
  29 + private RedisHashCache redisHashCache;
  30 +
26 @Override 31 @Override
27 public void handleMessage(Object o) throws Exception{ 32 public void handleMessage(Object o) throws Exception{
28 logger.info("UnionShareOrderConsumer,handleMessage {}", o); 33 logger.info("UnionShareOrderConsumer,handleMessage {}", o);
@@ -59,6 +64,10 @@ public class UnionShareOrderConsumer implements YhConsumer { @@ -59,6 +64,10 @@ public class UnionShareOrderConsumer implements YhConsumer {
59 } 64 }
60 }); 65 });
61 logger.info("UnionShareOrderConsumer,updateMonthData end,uids is {},o is {}",uids, o); 66 logger.info("UnionShareOrderConsumer,updateMonthData end,uids is {},o is {}",uids, o);
  67 + //清达人相关redis
  68 + int date = Integer.valueOf(com.yoho.unions.common.utils.DateUtil.getToday("yyyyMMdd"));
  69 + redisHashCache.delete(ShareOrdersKeyEnum.RANK_LIST.getPreKey(),date);
  70 + redisHashCache.delete(ShareOrdersKeyEnum.RANK_INFO.getPreKey(),date);
62 } catch (Exception e) { 71 } catch (Exception e) {
63 logger.warn("UnionShareOrderConsumer,handleMessage fail! obj is {}, e {}",o,e.getMessage()); 72 logger.warn("UnionShareOrderConsumer,handleMessage fail! obj is {}, e {}",o,e.getMessage());
64 } 73 }
@@ -4,14 +4,7 @@ import java.math.BigDecimal; @@ -4,14 +4,7 @@ import java.math.BigDecimal;
4 import java.text.DecimalFormat; 4 import java.text.DecimalFormat;
5 import java.text.ParseException; 5 import java.text.ParseException;
6 import java.text.SimpleDateFormat; 6 import java.text.SimpleDateFormat;
7 -import java.util.ArrayList;  
8 -import java.util.Arrays;  
9 -import java.util.Calendar;  
10 -import java.util.HashMap;  
11 -import java.util.HashSet;  
12 -import java.util.List;  
13 -import java.util.Map;  
14 -import java.util.Set; 7 +import java.util.*;
15 import java.util.concurrent.TimeUnit; 8 import java.util.concurrent.TimeUnit;
16 import java.util.concurrent.atomic.AtomicInteger; 9 import java.util.concurrent.atomic.AtomicInteger;
17 import java.util.stream.Collectors; 10 import java.util.stream.Collectors;
@@ -172,6 +165,10 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport @@ -172,6 +165,10 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport
172 private String UNION_SHAREID = "union.shareId"; 165 private String UNION_SHAREID = "union.shareId";
173 private String UNION_CPS_IMAGEURL = "union.cps.ImageUrl"; 166 private String UNION_CPS_IMAGEURL = "union.cps.ImageUrl";
174 private String UNION_CPS_APPLY_IMAGEURL = "union.cps.applyImageUrl"; 167 private String UNION_CPS_APPLY_IMAGEURL = "union.cps.applyImageUrl";
  168 + private String UNION_CPS_RANK_LIST_SWITCH = "union.cps.rankList.switch";
  169 + private String UNION_CPS_RANK_INFO_SWITCH = "union.cps.rankInfo.switch";
  170 + private String UNION_CPS_RANK_MONTHDAY = "union.cps.rank.monthday";
  171 + private String UNION_CPS_RANK_HOUR = "union.cps.rank.hour";
175 172
176 //USER_SETTLEMENT下hashkey 173 //USER_SETTLEMENT下hashkey
177 private String USER_SETTLEMENT_SETTLEAMOUNT = "settleAmount"; 174 private String USER_SETTLEMENT_SETTLEAMOUNT = "settleAmount";
@@ -185,6 +182,8 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport @@ -185,6 +182,8 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport
185 182
186 private static final byte STATISTICS_QUERY_TIME_LAST_MONTH = 3; 183 private static final byte STATISTICS_QUERY_TIME_LAST_MONTH = 3;
187 184
  185 + private static final int RANK_LIST_MAX_NUM = 100;
  186 +
188 /** 187 /**
189 * 获取用户可提现金额、已提现金额、是否可以提现 188 * 获取用户可提现金额、已提现金额、是否可以提现
190 * */ 189 * */
@@ -1105,39 +1104,130 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport @@ -1105,39 +1104,130 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport
1105 @Override 1104 @Override
1106 public UninoShareIncomeRankBo queryRank(UninoShareIncomeRankReqBo req){ 1105 public UninoShareIncomeRankBo queryRank(UninoShareIncomeRankReqBo req){
1107 UninoShareIncomeRankBo result = new UninoShareIncomeRankBo(); 1106 UninoShareIncomeRankBo result = new UninoShareIncomeRankBo();
1108 - //todo 查询排行榜  
1109 - PageResponseBO<UninoShareIncomeBo> rankList = getRankList(req);  
1110 - result.setRankList(rankList); 1107 + //每月一号0-8点排行榜关闭
  1108 + Calendar now = Calendar.getInstance();
  1109 +// int monthday=configReader.getInt(UNION_CPS_RANK_MONTHDAY,1);
  1110 +// int hour=configReader.getInt(UNION_CPS_RANK_HOUR,8);
  1111 + if (now.get(Calendar.DAY_OF_MONTH) == 1 && now.get(Calendar.HOUR_OF_DAY) < 8) {
  1112 + return result;
  1113 + }
  1114 + //查询排行榜
  1115 + int date = Integer.valueOf(DateUtil.getToday("yyyyMMdd"));
  1116 +
1111 if (req.getUid() != null) { 1117 if (req.getUid() != null) {
1112 - //todo 需要查询用户的数据  
1113 - if (req.getDate() != null) {  
1114 - BigDecimal amount = unionShareOrdersMonthMapper.selectAmountByUid(Integer.valueOf(req.getDate()), req.getUid(), 1);  
1115 - if (amount == null) {  
1116 - amount = new BigDecimal(0);  
1117 - }  
1118 - result.setAmount(amount);  
1119 - DecimalFormat df = new DecimalFormat("0.00");  
1120 - result.setAmountStr("¥"+df.format(result.getAmount()));  
1121 -//todo result.setRankNum();  
1122 - UserInfoRspBO userInfoRspBO = userServiceHelper.getUserInfoFromUic(req.getUid());  
1123 - if (userInfoRspBO != null) {  
1124 - result.setImage(userInfoRspBO.getHeadIco());  
1125 - result.setNickname(userInfoRspBO.getNickname());  
1126 - } 1118 + //查询用户的数据
  1119 + UninoShareIncomeBo rankInfo=getRankInfo(req.getUid(), date, req.getType());
  1120 + if (rankInfo == null) {
  1121 + //可能是zk开关关闭
  1122 + return result;
1127 } 1123 }
  1124 + BeanUtils.copyProperties(rankInfo,result);
  1125 + }
  1126 + UninoShareIncomeRankBo rankList = queryRankList(date, req.getType(), req.getPage(), req.getSize());
  1127 + if (rankList != null && rankList.getRankList() != null && CollectionUtils.isNotEmpty(rankList.getRankList().getList())) {
  1128 + result.setRankList(rankList.getRankList());
1128 } 1129 }
1129 return result; 1130 return result;
1130 } 1131 }
1131 1132
1132 - //todo 获取排行榜数据  
1133 - private PageResponseBO<UninoShareIncomeBo> getRankList(UninoShareIncomeRankReqBo req) {  
1134 - List<UninoShareIncomeBo> all = new ArrayList<>();  
1135 - PageResponseBO<UninoShareIncomeBo> result = new PageResponseBO<>();  
1136 - result.setPage(req.getPage());  
1137 - result.setTotal(all.size());  
1138 - result.setSize(req.getSize());  
1139 - result.setList(result.getPage()>1?all.subList((result.getPage()-1)*result.getSize()+1,result.getPage()*result.getSize()):null);  
1140 - return result; 1133 + // 获取排行榜数据
  1134 + private UninoShareIncomeRankBo queryRankList(int date,Integer type,int page,int size){
  1135 + //查询zk中cps达人排行开关
  1136 + if (!configReader.getBoolean(UNION_CPS_RANK_LIST_SWITCH, true)) {
  1137 + return null;
  1138 + }
  1139 + //date 具体到日:20180814
  1140 + int start = page > 1 ? (page - 1) * size : 0;
  1141 + UninoShareIncomeRankBo cacheRank=getFromRedis(ShareOrdersKeyEnum.RANK_LIST, date, UninoShareIncomeRankBo.class, type.toString(), "" + start, "" + size);
  1142 + if (cacheRank != null && CollectionUtils.isNotEmpty(cacheRank.getRankList().getList())) {
  1143 + return cacheRank;
  1144 + }
  1145 + PageResponseBO<UninoShareIncomeBo> pagelist = new PageResponseBO<>();
  1146 + if(start>0||size<RANK_LIST_MAX_NUM){
  1147 + cacheRank = getFromRedis(ShareOrdersKeyEnum.RANK_LIST, date, UninoShareIncomeRankBo.class, "" + type, "" + 0, "" + RANK_LIST_MAX_NUM);
  1148 + }
  1149 + PageResponseBO<UninoShareIncomeBo> ranklist = new PageResponseBO<>();
  1150 + if (cacheRank == null||CollectionUtils.isEmpty(cacheRank.getRankList().getList())) {
  1151 + ranklist = queryRankListFromSql(date, type, RANK_LIST_MAX_NUM);
  1152 + }
  1153 + if (ranklist == null||CollectionUtils.isEmpty(ranklist.getList())) {
  1154 + return null;
  1155 + }
  1156 + pagelist = new PageResponseBO<>();
  1157 + int toIndex = start + size - 1;
  1158 + if (toIndex > ranklist.getList().size()) {
  1159 + toIndex = ranklist.getList().size();
  1160 + }
  1161 + pagelist.setList(ranklist.getList().subList(start, toIndex));
  1162 + pagelist.setPage(page > 1 ?page:1);
  1163 + pagelist.setSize(size);
  1164 + pagelist.setTotal(pagelist.getList().size());
  1165 + UninoShareIncomeRankBo uninoShareIncomeRankBo = new UninoShareIncomeRankBo(pagelist);
  1166 + addToRedis(ShareOrdersKeyEnum.RANK_LIST,date,uninoShareIncomeRankBo,""+type,""+start,""+size);
  1167 + return uninoShareIncomeRankBo;
  1168 + }
  1169 +
  1170 + //获取用户达人排行个人信息
  1171 + private UninoShareIncomeBo getRankInfo(Integer uid,int date,Integer type) {
  1172 + //查询zk中cps达人排行个人信息开关
  1173 + if (!configReader.getBoolean(UNION_CPS_RANK_INFO_SWITCH, true)) {
  1174 + return null;
  1175 + }
  1176 +
  1177 + UninoShareIncomeBo rankInfo = getFromRedis(ShareOrdersKeyEnum.RANK_INFO,date,UninoShareIncomeBo.class,uid.toString(), type.toString());
  1178 + if (rankInfo != null) {
  1179 + return rankInfo;
  1180 + }
  1181 + //
  1182 + UninoShareIncomeRankBo rankList=queryRankList(date,type,0, RANK_LIST_MAX_NUM);
  1183 + if (rankList != null && rankList.getRankList() != null && CollectionUtils.isNotEmpty(rankList.getRankList().getList())) {
  1184 + for (UninoShareIncomeBo bo : rankList.getRankList().getList()) {
  1185 + if (bo.getUid() == uid) {
  1186 + return bo;
  1187 + }
  1188 + }
  1189 + }
  1190 + rankInfo = new UninoShareIncomeBo();
  1191 + BigDecimal amount = unionShareOrdersMonthMapper.selectAmountByUid(date/100, uid, 1);//类型:1-联盟用户,2-马甲用户
  1192 + if (amount == null) {
  1193 + amount = new BigDecimal(0);
  1194 + }
  1195 + rankInfo.setAmount(amount);
  1196 + DecimalFormat df = new DecimalFormat("0.00");
  1197 + rankInfo.setAmountStr("¥"+df.format(rankInfo.getAmount()));
  1198 + UserInfoRspBO userInfoRspBO = userServiceHelper.getUserInfoFromUic(uid);
  1199 + if (userInfoRspBO != null) {
  1200 + rankInfo.setImage(userInfoRspBO.getHeadIco());
  1201 + rankInfo.setNickname(userInfoRspBO.getNickname());
  1202 + }
  1203 + addToRedis(ShareOrdersKeyEnum.RANK_INFO,date,rankInfo,uid.toString(), type.toString());
  1204 + return rankInfo;
  1205 + }
  1206 +
  1207 + private PageResponseBO<UninoShareIncomeBo> queryRankListFromSql(int date,int type,int maxSize) {
  1208 + List<UninoShareIncomeBo> list;
  1209 + int monthDate = date / 100;//date 具体到日:20180814
  1210 + if (type==1) {//1-本月,2-全部
  1211 + list = unionShareOrdersMonthMapper.selectMonthRankList(monthDate, 0, maxSize);
  1212 + }else {
  1213 + list = unionShareOrdersMonthMapper.selectTotalRankList(0, maxSize);
  1214 + }
  1215 + if (CollectionUtils.isEmpty(list)) {
  1216 + return null;
  1217 + }
  1218 + DecimalFormat df = new DecimalFormat("0.00");
  1219 + for (int i = 0; i < list.size(); i++) {
  1220 + UninoShareIncomeBo uninoShareIncomeBo = list.get(i);
  1221 + uninoShareIncomeBo.setRankNum(i+1);
  1222 + uninoShareIncomeBo.setAmountStr("¥"+df.format(uninoShareIncomeBo.getAmount()));
  1223 + }
  1224 + PageResponseBO<UninoShareIncomeBo> pageList = new PageResponseBO<>();
  1225 + pageList.setList(list);
  1226 + pageList.setPage(0);
  1227 + pageList.setSize(list.size());
  1228 + pageList.setTotal(list.size());
  1229 + addToRedis(ShareOrdersKeyEnum.RANK_LIST,date,new UninoShareIncomeRankBo(pageList),""+type,"0",""+RANK_LIST_MAX_NUM);
  1230 + return pageList;
1141 } 1231 }
1142 1232
1143 1233
@@ -1879,13 +1969,13 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport @@ -1879,13 +1969,13 @@ public class UnionShareServiceImpl implements IUnionShareService,IBusinessExport
1879 } 1969 }
1880 1970
1881 //存入redis,注意param的顺序 1971 //存入redis,注意param的顺序
1882 - public void addToRedis(ShareOrdersKeyEnum se, int uid,Object value, String... param) {  
1883 - redisHashCache.put(se.getPreKey(),uid,se.getHashKey(param),value,se.getCacheTime(), TimeUnit.SECONDS); 1972 + public void addToRedis(ShareOrdersKeyEnum se, int key,Object value, String... param) {
  1973 + redisHashCache.put(se.getPreKey(),key,se.getHashKey(param),value,se.getCacheTime(), TimeUnit.SECONDS);
1884 } 1974 }
1885 1975
1886 //从redis取数据 1976 //从redis取数据
1887 - public <T> T getFromRedis(ShareOrdersKeyEnum se, int uid,Class<T> clazz, String... param) {  
1888 - return redisHashCache.get(se.getPreKey(), uid, se.getHashKey(param), clazz); 1977 + public <T> T getFromRedis(ShareOrdersKeyEnum se, int key,Class<T> clazz, String... param) {
  1978 + return redisHashCache.get(se.getPreKey(), key, se.getHashKey(param), clazz);
1889 } 1979 }
1890 1980
1891 public void clearShareOrderRedis(int uid) { 1981 public void clearShareOrderRedis(int uid) {
@@ -2,4 +2,8 @@ union.newUserRebatesRatio=10 @@ -2,4 +2,8 @@ union.newUserRebatesRatio=10
2 union.oldUserRebatesRatio=3 2 union.oldUserRebatesRatio=3
3 union.shareId = 4649 3 union.shareId = 4649
4 union.cps.ImageUrl = http://img12.static.yhbimg.com/article/2018/05/29/20/02044ae38a825a2faee5fcbd84eeab20a5.jpg 4 union.cps.ImageUrl = http://img12.static.yhbimg.com/article/2018/05/29/20/02044ae38a825a2faee5fcbd84eeab20a5.jpg
5 -union.cps.applyImageUrl = http://img10.static.yhbimg.com/article/2018/05/23/16/017c0037ac8304c204686f5045c5eb9769.jpeg  
  5 +union.cps.applyImageUrl = http://img10.static.yhbimg.com/article/2018/05/23/16/017c0037ac8304c204686f5045c5eb9769.jpeg
  6 +union.cps.rank.hour=8
  7 +union.cps.rank.monthday=1
  8 +union.cps.rankInfo.switch=true
  9 +union.cps.rankList.switch=true