package com.itcast.core.message;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.apache.activemq.command.ActiveMQTextMessage;
import org.springframework.beans.factory.annotation.Autowired;
import com.itcast.core.pojo.Product;
import com.itcast.core.pojo.SuperPojo;
import com.itcast.core.service.ProductService;
import com.itcast.core.service.StaticPageService;
import freemarker.template.TemplateException;
/**
* 自定义消息监听类
*
* @author 程军
*
*/
public class MyMessageListener implements MessageListener {
@Autowired
private StaticPageService staticPageService;
@Autowired
private ProductService productService;
/**
* 当监听到消息后,会自动调用此方法
*/
@Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
ActiveMQTextMessage amessage = (ActiveMQTextMessage) message;
try {
String ids = amessage.getText();
System.out.println("cms消费方接收到的消息:" + ids);
// 从ids中遍历出id
String[] split = ids.split(",");
for (String id : split) {
Long productId = Long.parseLong(id);
SuperPojo superPojo = productService.findById(productId);
Product product = (Product) superPojo.get("product");
List skus = (List) superPojo.get("skus");
System.out.println("商品名称:" + product.getName());
System.out.println("库存数量:" + skus.size());
// 去除颜色重复 将原有的map变成能够支持Freemarker
Set<SuperPojo> colors = new HashSet<SuperPojo>();
for (Object object : skus) {
SuperPojo sku = (SuperPojo) object;
// 定义颜色对象
SuperPojo color = new SuperPojo();
color.setProperty("id", sku.get("color_id"));
color.setProperty("name", sku.get("name"));
// 将颜色对象添加到hm集合中,利用hm集合来去除重复
colors.add(color);
}
// 反正万能实体对象要被传递,将非重复的颜色对象也通过superPojo顺便传递到页面
superPojo.setProperty("colors", colors);
HashMap hashMap = new HashMap();
hashMap.put("superPojo", superPojo);
// 开始静态化
staticPageService.staticProductPage(hashMap, id);
}
} catch (JMSException | IOException | TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.apache.activemq.command.ActiveMQTextMessage;
import org.springframework.beans.factory.annotation.Autowired;
import com.itcast.core.pojo.Product;
import com.itcast.core.pojo.SuperPojo;
import com.itcast.core.service.ProductService;
import com.itcast.core.service.StaticPageService;
import freemarker.template.TemplateException;
/**
* 自定义消息监听类
*
* @author 程军
*
*/
public class MyMessageListener implements MessageListener {
@Autowired
private StaticPageService staticPageService;
@Autowired
private ProductService productService;
/**
* 当监听到消息后,会自动调用此方法
*/
@Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
ActiveMQTextMessage amessage = (ActiveMQTextMessage) message;
try {
String ids = amessage.getText();
System.out.println("cms消费方接收到的消息:" + ids);
// 从ids中遍历出id
String[] split = ids.split(",");
for (String id : split) {
Long productId = Long.parseLong(id);
SuperPojo superPojo = productService.findById(productId);
Product product = (Product) superPojo.get("product");
List skus = (List) superPojo.get("skus");
System.out.println("商品名称:" + product.getName());
System.out.println("库存数量:" + skus.size());
// 去除颜色重复 将原有的map变成能够支持Freemarker
Set<SuperPojo> colors = new HashSet<SuperPojo>();
for (Object object : skus) {
SuperPojo sku = (SuperPojo) object;
// 定义颜色对象
SuperPojo color = new SuperPojo();
color.setProperty("id", sku.get("color_id"));
color.setProperty("name", sku.get("name"));
// 将颜色对象添加到hm集合中,利用hm集合来去除重复
colors.add(color);
}
// 反正万能实体对象要被传递,将非重复的颜色对象也通过superPojo顺便传递到页面
superPojo.setProperty("colors", colors);
HashMap hashMap = new HashMap();
hashMap.put("superPojo", superPojo);
// 开始静态化
staticPageService.staticProductPage(hashMap, id);
}
} catch (JMSException | IOException | TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这里的superPojo是一个map集合,具体的实现用到的是treemap,因为存储是有顺序的,所以更方便查找
但是存储在superPojo里面的实体类,却只是披着实体类的外衣,本质上一张表.
在新建实体类的时候,一般都是和数据库中表的字段一一对应的.可是取名字还是有些区别,比如说color_id 这个是数据库中的字段名称,colorId 这个是实体类中的字段名称.
在数据回显到页面的时候,一般的是类名.字段名称,例如 库存sku 里面颜色字段color 那回显就是sku.color
一定一定记住,存储到superPojo里面的实体类不是真的实体类,而是一张表 所以用于回显的写法是 sku.color_id
因为这个原因一直犯错,其实根本原因没有理解到superPojo里面存储的是一张表,和实体类的字段没有任何关系了.