package com.yeshi.fanli.util; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.yeshi.utils.CMQUtil; import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import com.qcloud.cmq.Message; import com.yeshi.fanli.entity.bus.user.AlipayTransferResultInfo; import com.yeshi.fanli.entity.bus.user.Extract; import com.yeshi.fanli.entity.bus.user.HongBao; import com.yeshi.fanli.entity.bus.user.HongBaoV2; import com.yeshi.fanli.entity.common.AdminUser; import com.yeshi.fanli.entity.push.PushQueueRecord; import com.yeshi.fanli.entity.taobao.TaoBaoOrder; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder; import net.sf.json.JSONObject; public class CMQManager { private static String secretId = "AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25"; private static String secretKey = "xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo"; private static CMQManager cmqManager; private static CMQUtil cmqUtil; // TODO 订单处理队列 public static String QUEUENAME_ORDER = "fanli-orders"; // 提现结果处理队列 public static String EXTRACT_RESULT = "extract-result"; // TODO IOS推送队列 public static String PUSH_IOS = "push-ios"; // TODO 返利队列 public static String FANLI_ORDER = "fanli-order"; // TODO 返利队列 public static String FANLI_ORDER_NEW = "fanli-order-new"; // TODO 提成订单 public static String FANLI_TICHENG_ORDER = "fanli-ticheng-order"; // TODO 维权订单 public static String ORDER_WEIQUAN = "weiquan-order"; public static String GOODS_UPDATE = "goods_update_queue"; static { if (Constant.IS_TEST) { QUEUENAME_ORDER = "test-" + QUEUENAME_ORDER; EXTRACT_RESULT = "test-" + EXTRACT_RESULT; PUSH_IOS = "test-" + PUSH_IOS; FANLI_ORDER = "test-" + FANLI_ORDER; FANLI_ORDER_NEW = "test-" + FANLI_ORDER_NEW; FANLI_TICHENG_ORDER = "test-" + FANLI_TICHENG_ORDER; ORDER_WEIQUAN = "test-" + ORDER_WEIQUAN; } QUEUENAME_ORDER += "-" + Constant.systemCommonConfig.getProjectName(); EXTRACT_RESULT += "-" + Constant.systemCommonConfig.getProjectName(); PUSH_IOS += "-" + Constant.systemCommonConfig.getProjectName(); FANLI_ORDER += "-" + Constant.systemCommonConfig.getProjectName(); FANLI_ORDER_NEW += "-" + Constant.systemCommonConfig.getProjectName(); FANLI_TICHENG_ORDER += "-" + Constant.systemCommonConfig.getProjectName(); ORDER_WEIQUAN += "-" + Constant.systemCommonConfig.getProjectName(); cmqUtil = CMQUtil.getInstance(secretId, secretKey); // 最大消息为1M cmqUtil.createQueue(QUEUENAME_ORDER, 1024 * 1024); cmqUtil.createQueue(EXTRACT_RESULT); cmqUtil.createQueue(PUSH_IOS); cmqUtil.createQueue(FANLI_ORDER); cmqUtil.createQueue(FANLI_ORDER_NEW); cmqUtil.createQueue(FANLI_TICHENG_ORDER); cmqUtil.createQueue(ORDER_WEIQUAN); cmqUtil.createQueue(GOODS_UPDATE); } public static CMQManager getInstance() { if (cmqManager == null) cmqManager = new CMQManager(); return cmqManager; } /** * 发送订单消息 * * @param orderMap */ public void addTaoBaoOrderMsg(String orderId, List orderList) { if (!StringUtil.isNullOrEmpty(orderId) && orderList != null && orderList.size() > 0) { JSONObject item = new JSONObject(); item.put(orderId, new GsonBuilder().create().toJson(orderList)); cmqUtil.sendMsg(QUEUENAME_ORDER, item.toString()); } } /** * 消费淘宝订单消息 * * @param count */ @SuppressWarnings("unchecked") public Map> consumeTaoBaoOrderMsg(int count) { List list = cmqUtil.recieveMsg(count, QUEUENAME_ORDER); Map> map = new HashMap<>(); if (list != null) for (Message msg : list) { String result = msg.msgBody; JSONObject data = JSONObject.fromObject(result); Iterator its = data.keySet().iterator(); if (its.hasNext()) { String orderId = its.next(); Type type = new TypeToken>() { }.getType(); List orderList = new Gson().fromJson(data.optJSONArray(orderId).toString(), type); map.put(orderId, orderList); } // 删除消息 cmqUtil.deleteMsg(QUEUENAME_ORDER, msg.receiptHandle); } return map; } /** * 删除淘宝订单消息 * * @param receiptHandle */ public void deleteTaoBaoOrderMsg(String receiptHandle) { cmqUtil.deleteMsg(EXTRACT_RESULT, receiptHandle); } /** * 添加提现结果消息 * * @param extract * @param response */ public void addExtractResultMsg(Extract extract, AlipayFundTransToaccountTransferResponse response, AdminUser adminUser) { String content = new Gson().toJson(new AlipayTransferResultInfo(extract, response, adminUser)); cmqUtil.sendMsg(EXTRACT_RESULT, content); } /** * 消费提现结果消息 * * @param count * @return */ public Map consumeExtractResultMsg(int count) { List list = cmqUtil.recieveMsg(count, EXTRACT_RESULT); Map map = new HashMap<>(); if (list != null) for (Message msg : list) { String result = msg.msgBody; if (!StringUtil.isNullOrEmpty(result)) { AlipayTransferResultInfo alipayTransferResultInfo = new Gson().fromJson(result, AlipayTransferResultInfo.class); map.put(msg.receiptHandle, alipayTransferResultInfo); } } return map; } /** * 删除提现结果消息 * * @param receiptHandle */ public void deleteExtractResultMsg(String receiptHandle) { cmqUtil.deleteMsg(EXTRACT_RESULT, receiptHandle); } // 订单返利 public void addFanLiMsg(HongBao hongBao) { String content = new Gson().toJson(hongBao); cmqUtil.sendMsg(FANLI_ORDER, content); } // 新版订单返利 public void addFanLiMsgNew(HongBaoV2 hongBao) { String content = new Gson().toJson(hongBao); cmqUtil.sendMsg(FANLI_ORDER_NEW, content); } public Map consumeFanLiMsg(int count) { List list = cmqUtil.recieveMsg(count, FANLI_ORDER); Map map = new HashMap<>(); if (list != null) for (Message msg : list) { String result = msg.msgBody; if (!StringUtil.isNullOrEmpty(result)) { HongBao hongBao = new Gson().fromJson(result, HongBao.class); map.put(msg.receiptHandle, hongBao); } } return map; } public Map consumeFanLiMsgNew(int count) { List list = cmqUtil.recieveMsg(count, FANLI_ORDER_NEW); Map map = new HashMap<>(); if (list != null) for (Message msg : list) { String result = msg.msgBody; if (!StringUtil.isNullOrEmpty(result)) { HongBaoV2 hongBao = new Gson().fromJson(result, HongBaoV2.class); map.put(msg.receiptHandle, hongBao); } } return map; } public void deleteFanLiMsg(String receiptHandle) { cmqUtil.deleteMsg(FANLI_ORDER, receiptHandle); } public void deleteFanLiMsgNew(String receiptHandle) { cmqUtil.deleteMsg(FANLI_ORDER_NEW, receiptHandle); } // 提成返利 public void addFanLiTiChengMsg(Long uid) { cmqUtil.sendMsg(FANLI_TICHENG_ORDER, uid + ""); } public Map consumeFanLiTiChengMsg(int count) { List list = cmqUtil.recieveMsg(count, FANLI_TICHENG_ORDER); Map map = new HashMap<>(); if (list != null) for (Message msg : list) { String result = msg.msgBody; if (!StringUtil.isNullOrEmpty(result)) { map.put(msg.receiptHandle, Long.parseLong(result)); } } return map; } public void deleteFanLiTiChengMsg(String receiptHandle) { cmqUtil.deleteMsg(FANLI_TICHENG_ORDER, receiptHandle); } // 维权订单 public void addWeiQuanOrderMsg(TaoBaoWeiQuanOrder order) { cmqUtil.sendMsg(ORDER_WEIQUAN, new Gson().toJson(order)); } public Map consumeWeiQuanOrderMsg(int count) { List list = cmqUtil.recieveMsg(count, ORDER_WEIQUAN); Map map = new HashMap<>(); Gson gson = new Gson(); if (list != null) for (Message msg : list) { String result = msg.msgBody; if (!StringUtil.isNullOrEmpty(result)) { map.put(msg.receiptHandle, gson.fromJson(result, TaoBaoWeiQuanOrder.class)); } } return map; } public void deleteWeiQuanOrderMsg(String receiptHandle) { cmqUtil.deleteMsg(ORDER_WEIQUAN, receiptHandle); } /** * 添加IOS推送消息 * * @param count */ public void addIOSPushMsg(PushQueueRecord pushQueueRecord) { String content = new GsonBuilder().create().toJson(pushQueueRecord); cmqUtil.sendMsg(PUSH_IOS, content); } /** * IOS推送 * * @param count */ public Map consumeIOSPushMsg(int count) { List list = cmqUtil.recieveMsg(count, PUSH_IOS); if (list == null) { return null; } Map map = new HashMap<>(); for (Message msg : list) { String result = msg.msgBody; if (!StringUtil.isNullOrEmpty(result)) { PushQueueRecord pushQueueRecord = new Gson().fromJson(result, PushQueueRecord.class); map.put(msg.receiptHandle, pushQueueRecord); } } return map; } /** * 删除IOSPush消息 * * @param receiptHandle */ public void deleteIOSPushMsg(String receiptHandle) { cmqUtil.deleteMsg(PUSH_IOS, receiptHandle); } /** * 添加需要更新的商品ID * * @param count */ public void addNeedUpdateTaoBaoGoodsId(Long goodsId) { cmqUtil.sendMsg(GOODS_UPDATE, goodsId + ""); } /** * 消费消息需要更新的商品消息 * * @param count */ public Map consumeNeedUpdateTaoBaoGoodsIdMsg(int count) { List list = cmqUtil.recieveMsg(count, GOODS_UPDATE); if (list == null) { return null; } Map map = new HashMap<>(); for (Message msg : list) { String result = msg.msgBody; if (!StringUtil.isNullOrEmpty(result)) { map.put(msg.receiptHandle, Long.parseLong(result)); } } return map; } /** * 删除IOSPush消息 * * @param receiptHandle */ public void deleteNeedUpdateTaoBaoGoodsIdMsg(String receiptHandle) { cmqUtil.deleteMsg(GOODS_UPDATE, receiptHandle); } }