package project.c2c.data.loadcache; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; import kernel.bo.RecordObjectMapper; import kernel.util.StringUtils; import project.RedisKeys; import project.c2c.C2cAdvert; import project.c2c.C2cAppeal; import project.c2c.C2cOrder; import project.c2c.C2cPaymentMethod; import project.c2c.C2cPaymentMethodConfig; import project.c2c.C2cTranslate; import project.c2c.C2cTranslateService; import project.c2c.C2cUser; import project.c2c.C2cUserParamBaseSet; import project.redis.RedisHandler; public class C2cLoadCacheService { private static final Logger logger = LoggerFactory.getLogger(C2cLoadCacheService.class); private RedisHandler redisHandler; private JdbcTemplate jdbcTemplate; private C2cTranslateService c2cTranslateService; public void loadcache() { loadC2cPaymentMethodConfig(); loadC2cTranslate(); loadC2cPaymentMethod(); loadC2cUser(); loadC2cUserParamBaseSet(); loadC2cAdvert(); loadC2cOrder(); loadC2cAppeal(); logger.info("完成C2C数据加载redis"); } /* * 加载 C2C支付方式模板 */ public void loadC2cPaymentMethodConfig() { Map map = new ConcurrentHashMap(); String sql = "SELECT * FROM T_C2C_PAYMENT_METHOD_CONFIG"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cPaymentMethodConfig.class)); for (int i = 0; i < list.size(); i++) { C2cPaymentMethodConfig entity = list.get(i); if (null != entity) { this.redisHandler.setSync(RedisKeys.C2C_PAYMENT_METHOD_CONFIG_ID + entity.getId().toString(), entity); map.put(entity.getId().toString(), String.valueOf(entity.getMethodType())); } } this.redisHandler.setSync(RedisKeys.C2C_PAYMENT_METHOD_CONFIG_ID_TYPE, map); } /* * 加载 C2C翻译 */ public void loadC2cTranslate() { // 所有的要翻译内容集合 Set contentSet = new HashSet(); // 支付方式类型名称列表 List nameList = this.c2cTranslateService.getAllPaymentMethodTypeName(); for (int i = 0; i < nameList.size(); i++) { String name = nameList.get(i); if (null != name) { contentSet.add(name); } } // 获取所有的支付方式模板 String sql = "SELECT * FROM T_C2C_PAYMENT_METHOD_CONFIG"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cPaymentMethodConfig.class)); for (int i = 0; i < list.size(); i++) { C2cPaymentMethodConfig config = list.get(i); if (null != config) { if (StringUtils.isNotEmpty(config.getMethodName())) { contentSet.add(config.getMethodName()); } if (StringUtils.isNotEmpty(config.getParamName1())) { contentSet.add(config.getParamName1()); } if (StringUtils.isNotEmpty(config.getParamName2())) { contentSet.add(config.getParamName2()); } if (StringUtils.isNotEmpty(config.getParamName3())) { contentSet.add(config.getParamName3()); } if (StringUtils.isNotEmpty(config.getParamName4())) { contentSet.add(config.getParamName4()); } if (StringUtils.isNotEmpty(config.getParamName5())) { contentSet.add(config.getParamName5()); } if (StringUtils.isNotEmpty(config.getParamName6())) { contentSet.add(config.getParamName6()); } if (StringUtils.isNotEmpty(config.getParamName7())) { contentSet.add(config.getParamName7()); } if (StringUtils.isNotEmpty(config.getParamName8())) { contentSet.add(config.getParamName8()); } if (StringUtils.isNotEmpty(config.getParamName9())) { contentSet.add(config.getParamName9()); } if (StringUtils.isNotEmpty(config.getParamName10())) { contentSet.add(config.getParamName10()); } if (StringUtils.isNotEmpty(config.getParamName11())) { contentSet.add(config.getParamName11()); } if (StringUtils.isNotEmpty(config.getParamName12())) { contentSet.add(config.getParamName12()); } if (StringUtils.isNotEmpty(config.getParamName13())) { contentSet.add(config.getParamName13()); } if (StringUtils.isNotEmpty(config.getParamName14())) { contentSet.add(config.getParamName14()); } if (StringUtils.isNotEmpty(config.getParamName15())) { contentSet.add(config.getParamName15()); } } } // 获取 所有的支付方式模板 翻译 String sql1 = "SELECT * FROM T_C2C_TRANSLATE"; List list1 = jdbcTemplate.query(sql1, RecordObjectMapper.newInstance(C2cTranslate.class)); for (int i = 0; i < list1.size(); i++) { C2cTranslate entity = list1.get(i); if (null != entity) { if (contentSet.contains(entity.getContent())) { this.redisHandler.setSync(RedisKeys.C2C_TRANSLATE_CONTENT_LANGUAGE + StringUtils.stringToUnicode(entity.getContent()) + entity.getLanguage(), entity); } else { // 不需要的翻译删除 this.c2cTranslateService.delete(entity.getContent(), entity.getLanguage()); } } } } /* * 加载 C2C支付方式 */ public void loadC2cPaymentMethod() { Map> map = new ConcurrentHashMap>(); Map map1 = new ConcurrentHashMap(); String sql = "SELECT * FROM T_C2C_PAYMENT_METHOD"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cPaymentMethod.class)); for (int i = 0; i < list.size(); i++) { C2cPaymentMethod entity = list.get(i); if (null != entity) { this.redisHandler.setSync(RedisKeys.C2C_PAYMENT_METHOD_ID + entity.getId().toString(), entity); map1.put(entity.getId().toString(), String.valueOf(entity.getMethodType())); } List methodList = map.get(entity.getPartyId().toString()); if (null == methodList) { methodList = new ArrayList(); } methodList.add(entity); map.put(entity.getPartyId().toString(), methodList); } this.redisHandler.setSync(RedisKeys.C2C_PAYMENT_METHOD_ID_TYPE, map1); for (String key : map.keySet()) { List ml = map.get(key); if (null != ml) { Map mm = new ConcurrentHashMap(); for (int i = 0; i < ml.size(); i++) { C2cPaymentMethod method = ml.get(i); if (null != method) { mm.put(method.getId().toString(), method); } } this.redisHandler.setSync(RedisKeys.C2C_PAYMENT_METHOD_PARTY_ID + key, mm); } } } /* * 加载 C2C承兑商信息 */ public void loadC2cUser() { String sql = "SELECT * FROM T_C2C_USER"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cUser.class)); for (int i = 0; i < list.size(); i++) { C2cUser entity = list.get(i); if (null != entity) { this.redisHandler.setSync(RedisKeys.C2C_USER_ID + entity.getId().toString(), entity); this.redisHandler.setSync(RedisKeys.C2C_USER_PARTY_ID + entity.getC2cUserPartyId(), entity); } } } /* * 加载 C2C承兑商参数基础设置信息 */ public void loadC2cUserParamBaseSet() { String sql = "SELECT * FROM T_C2C_USER_PARAM_BASE_SET"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cUserParamBaseSet.class)); for (int i = 0; i < list.size(); i++) { C2cUserParamBaseSet entity = list.get(i); if (null != entity) { this.redisHandler.setSync(RedisKeys.C2C_USER_PARAM_BASE_SET_PARTY_ID + entity.getC2cUserPartyId(), entity); } } } /* * 加载 C2C广告信息 */ public void loadC2cAdvert() { Map> map = new ConcurrentHashMap>(); Map> mapPrice = new ConcurrentHashMap>(); String sql = "SELECT * FROM T_C2C_ADVERT"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cAdvert.class)); for (int i = 0; i < list.size(); i++) { C2cAdvert entity = list.get(i); if (null != entity) { this.redisHandler.setSync(RedisKeys.C2C_ADVERT_ID + entity.getId().toString(), entity); } List advertList = map.get(entity.getC2cUserId()); if (null == advertList) { advertList = new ArrayList(); } advertList.add(entity); map.put(entity.getC2cUserId(), advertList); List advertList1 = mapPrice.get(entity.getCurrency() + entity.getSymbol() + entity.getDirection()); if (null == advertList1) { advertList1 = new ArrayList(); } advertList1.add(entity); mapPrice.put(entity.getCurrency() + entity.getSymbol() + entity.getDirection(), advertList1); } for (String key : map.keySet()) { List al = map.get(key); if (null != al) { Map am = new ConcurrentHashMap(); for (int i = 0; i < al.size(); i++) { C2cAdvert advert = al.get(i); if (null != advert) { am.put(advert.getId().toString(), advert); } } this.redisHandler.setSync(RedisKeys.C2C_ADVERT_C2C_USER_ID + key, am); } } for (String key : mapPrice.keySet()) { List al = mapPrice.get(key); if (null != al) { Map am = new ConcurrentHashMap(); for (int i = 0; i < al.size(); i++) { C2cAdvert advert = al.get(i); if (null != advert) { am.put(advert.getId().toString(), advert.getSymbolValue()); } } this.redisHandler.setSync(RedisKeys.C2C_ADVERT_CURRENCY_SYMBOL_DIRECTION + key, am); } } } /* * 加载 C2C订单 */ public void loadC2cOrder() { Map map = new ConcurrentHashMap(); Map ocMap = new ConcurrentHashMap(); String sql = "SELECT * FROM T_C2C_ORDER"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cOrder.class)); for (int i = 0; i < list.size(); i++) { C2cOrder entity = list.get(i); if (null != entity && Arrays.asList("0", "1").contains(entity.getState())) { // 只有未付款和已付款的订单存入redis this.redisHandler.setSync(RedisKeys.C2C_ORDER_NO + entity.getOrderNo(), entity); // 订单自动取消时间和确认收款超时时间(0未付款/1已付款) if (Arrays.asList("0").contains(entity.getState())) { map.put(entity.getOrderNo() + "_auto_cancel", entity.getCreateTime().getTime() + entity.getExpireTime() * 60 * 1000); map.put(entity.getOrderNo() + "_expire", entity.getCreateTime().getTime() + entity.getExpireTime() * 60 * 1000 * 2); } else if (Arrays.asList("1").contains(entity.getState())) { map.put(entity.getOrderNo() + "_auto_cancel", entity.getCreateTime().getTime() + entity.getExpireTime() * 60 * 1000); map.put(entity.getOrderNo() + "_expire", entity.getPayTime().getTime() + entity.getExpireTime() * 60 * 1000); } } // 用户未结束订单数量(0未付款/1已付款/2申诉中/5已超时) if (!Arrays.asList("3", "4").contains(entity.getState())) { Long count = ocMap.get(entity.getPartyId()); if (null == count) { ocMap.put(entity.getPartyId(), 1L); } else { ocMap.put(entity.getPartyId(), count + 1); } } } this.redisHandler.setSync(RedisKeys.C2C_ORDER_NO_EXPIRE_TIME, map); this.redisHandler.setSync(RedisKeys.C2C_NOFINISH_ORDER_COUNT, ocMap); } /* * 加载 C2C申诉 */ public void loadC2cAppeal() { String sql = "SELECT * FROM T_C2C_APPEAL"; List list = jdbcTemplate.query(sql, RecordObjectMapper.newInstance(C2cAppeal.class)); for (int i = 0; i < list.size(); i++) { C2cAppeal entity = list.get(i); if (null != entity && Arrays.asList("0").contains(entity.getState())) { // 只有已提交的申诉存入redis this.redisHandler.setSync(RedisKeys.C2C_APPEAL_ORDER_NO + entity.getOrderNo(), entity); } } } public void setRedisHandler(RedisHandler redisHandler) { this.redisHandler = redisHandler; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void setC2cTranslateService(C2cTranslateService c2cTranslateService) { this.c2cTranslateService = c2cTranslateService; } }