package com.gear.customer.swx.rabbitmq; import com.gear.common.core.redis.RedisCache; import com.gear.customer.swx.config.DelayQueueRabbitConfig; import com.gear.customer.swx.vo.response.SwxUserInfoVo; import com.gear.swx.domain.SwxMarket; import com.gear.swx.domain.SwxOptionsOrder; import com.gear.swx.domain.SwxUser; import com.gear.swx.service.ISwxMarketService; import com.gear.swx.service.ISwxOptionsOrderService; import com.gear.swx.service.ISwxUserService; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @Component @RabbitListener(queues = DelayQueueRabbitConfig.DLX_QUEUE) public class DirectReceiver { @Autowired RabbitTemplate rabbitTemplate; @Autowired private ISwxOptionsOrderService swxOptionsOrderService; @Autowired private RedisCache redisCache; @Autowired private ISwxMarketService swxMarketService; @Autowired private ISwxUserService swxUserService; @RabbitHandler public void process(Map messageMap) { System.out.println("消息体内容为:"+messageMap); System.out.println("接收消息时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); String id = (String)messageMap.get("id"); Integer type = (Integer) messageMap.get("istrue"); String userId = (String)messageMap.get("userId"); if (type == 1){ try{ SwxOptionsOrder swxOptionsOrder = swxOptionsOrderService.getById(id); SwxMarket swxMarket = swxMarketService.getById(swxOptionsOrder.getMarketId()); System.out.println("当前对象:"+swxOptionsOrder); swxOptionsOrder.setStatus(1); swxOptionsOrder.setEndPriceTrue(new BigDecimal(redisCache.getCacheObject(swxMarket.getCode()+"CurrPrice")+"")); if (swxOptionsOrder.getResultType() == 2){ swxOptionsOrder.setIncome(BigDecimal.ZERO.subtract(swxOptionsOrder.getAmount())); } swxOptionsOrderService.update(swxOptionsOrder); SwxUser swxUser = swxUserService.getById(swxOptionsOrder.getUserId()); if (swxUser != null){ BigDecimal amount = null; //判断如果赢了的话,修改用户余额 if(swxOptionsOrder.getResultType() == 1){ BigDecimal money = swxOptionsOrder.getAmount().add(swxOptionsOrder.getIncome()); amount = swxUser.getAmount().add(money); } BigDecimal profit = swxUser.getProfit().add(swxOptionsOrder.getIncome()); swxUserService.updateMoney(swxUser.getId(),amount,profit); } System.out.println("后续处理成功!"); }catch (Exception e){ System.out.println("消息监听处理失败。。。"); System.out.println(e.getMessage()); } }else{ try { SwxOptionsOrder swxOptionsOrder = swxOptionsOrderService.getById(id); SwxMarket swxMarket = swxMarketService.getById(swxOptionsOrder.getMarketId()); System.out.println("当前对象:"+swxOptionsOrder); swxOptionsOrder.setStatus(1); swxOptionsOrder.setEndPriceTrue(redisCache.getCacheObject(swxMarket.getCode()+"CurrPrice")== null ? BigDecimal.ZERO : new BigDecimal(redisCache.getCacheObject(swxMarket.getCode()+"CurrPrice")+"")); if (swxOptionsOrder.getResultType() == 2){ swxOptionsOrder.setIncome(BigDecimal.ZERO.subtract(swxOptionsOrder.getAmount())); } swxOptionsOrderService.update(swxOptionsOrder); //判断如果赢了的话,修改用户余额 if(swxOptionsOrder.getResultType() == 1){ BigDecimal money = swxOptionsOrder.getAmount().add(swxOptionsOrder.getIncome()); SwxUserInfoVo infoVo = redisCache.getCacheObject("SWX-CUSTOMER-VERTURAL-"+userId); if (infoVo != null){ Long userExprie = redisCache.getExpire("SWX-CUSTOMER-VERTURAL-"+userId); infoVo.setVirtuallyAmount(infoVo.getVirtuallyAmount().add(money)); redisCache.setCacheObject("SWX-CUSTOMER-VERTURAL-"+userId,infoVo,userExprie,TimeUnit.SECONDS); } } System.out.println("后续处理成功!"); }catch (Exception e){ System.out.println("消息监听处理失败。。。"); System.out.println( e.toString()); } } } }