• JAVA购物车实现 CarItemServiceImpl


    package com.bjsxt.service.impl;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.impl.CloudSolrServer;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.SolrDocument;
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.stereotype.Service;

    import redis.clients.jedis.JedisCluster;

    import com.xt.service.CarItemService;
    import com.xt.utils.ObjectUtils;
    import com.xt.vo.CarItem;
    import com.xt.vo.ProdcutVo;
    @Service
    public class CarItemServiceImpl implements CarItemService {

        //注入
        @Autowired
        private CloudSolrServer cloudSolrServer;
        @Autowired
        private JedisCluster jedis;
        public ProdcutVo loadProductByIdService(String id) {
            try{
                cloudSolrServer.setDefaultCollection("bjsxt");
                // TODO Auto-generated method stub
                SolrQuery solrQuery=new SolrQuery();
                //封装查询条件
                solrQuery.set("q","id:"+id);
                //设置需要查询的字段
                solrQuery.setFields("id","product_isbn","product_name","product_price","product_current_price");
                //获得查询响应
                QueryResponse response=cloudSolrServer.query(solrQuery);
                //获得查询结果
                SolrDocument doc=response.getResults().get(0);
                //创建vo对象
                ProdcutVo vo=new ProdcutVo();
                
                vo.setFlowerid(Integer.parseInt(String.valueOf(doc.get("id"))));
                vo.setFlowername(String.valueOf(doc.get("product_name")));
                vo.setFlowerisbn(String.valueOf(doc.get("product_isbn")));
                vo.setPrice(Double.parseDouble(String.valueOf(doc.get("product_price"))));
                vo.setCurrentprice(Double.parseDouble(String.valueOf(doc.get("product_current_price"))));
                
                return vo;
            }catch(Exception ex){
                ex.printStackTrace();
            }
            return null;
        }
        @Override
        public void addProductToCarService(String uid,ProdcutVo pvo) {
            // TODO Auto-generated method stub
            //声明购物车
            CarItem carItem=null;
            //声明map集合
            Map map=null;

            Integer flowerid=pvo.getFlowerid();//获得需要购买的商品的编号
            //将商品的编号转化为byte[]
            byte[] key = ObjectUtils.objectToByte(flowerid);
            //将用户id转化为byte[]
            byte[] id=ObjectUtils.objectToByte(uid);
            
            //判断该用户是否第一次买东西
            //获得该用户对应的购物车集合(map)
            map = jedis.hgetAll(id);
            if(map==null){
                //创建Map对象
                map= new HashMap();
            } 
            
            //判断该商品是否第一次购买
            if(map.containsKey(key)){//gaikey对应的商品已经购买过
                carItem=(CarItem) ObjectUtils.byteToObject(map.get(key));//获得该商品对应的购物车对象
                carItem.setCount(carItem.getCount()+1); //数量加一
                carItem.setPvo(pvo);
            }else{
                //创建购物车对象
                carItem=new CarItem();
                //封装需要购买的商品
                carItem.setPvo(pvo);
                carItem.setCount(1);
                
            }
            
            //将购物车放入map集合中
            map.put(key,ObjectUtils.objectToByte(carItem));
            
            //将购车集合保存到redis
            jedis.hmset(id, map);
            
            
         
            
            
        }
        @Override
        public List loadCarItemsService(String uid) {
            // TODO Auto-generated method stub
            //获得用户的购物车集合
            Map map=jedis.hgetAll(ObjectUtils.objectToByte(uid));
            List list = new ArrayList();
            //遍历Map集合
            for(byte[] b:map.values()){
                CarItem carItem = (CarItem) ObjectUtils.byteToObject(b);
                //System.out.println(carItem.getPvo().getFlowername()+"==============");
                list.add(carItem);
            }
            return list;
        }
        
        
        @Override
        public Map updateCountService(Integer id, Integer count,
                String uid) {
            
            System.out.println("id-----------------------"+id);
            // TODO Auto-generated method stub
            //通过用户id获得购物车集合
            Map map=jedis.hgetAll(ObjectUtils.objectToByte(uid));
            //获得商品对应的购物车对象
            CarItem carItem = (CarItem) ObjectUtils.byteToObject(map.get(ObjectUtils.objectToByte(id)));
            
            carItem.setCount(count);
            //carItem.setPvo(pvo);
            //将carItem对象进行序列化保存到map中
            map.put(ObjectUtils.objectToByte(id), ObjectUtils.objectToByte(carItem));
            
            //将map中的数据保存到redis中
            jedis.hmset(ObjectUtils.objectToByte(uid), map);
            
            //计算小计
            Double xj=count*carItem.getPvo().getCurrentprice();
            Double total=0.0;
            //计算总计
            for(byte[] b:map.values()){
                
                CarItem item = (CarItem) ObjectUtils.byteToObject(b);
                if(item.getPvo().getCurrentprice()!=null){
                    total=total+(item.getCount()*item.getPvo().getCurrentprice());
                }
                
            }
            
            //将小计和总计封装为map对象
            Map rmap=new HashMap();
            rmap.put("xj",xj);
            rmap.put("total", total);
            
            return rmap;
        }
        @Override
        public void delCarItemService(Integer id, String uid) {
            // TODO Auto-generated method stub
            //通过用户id获得购物车集
            jedis.hdel(ObjectUtils.objectToByte(uid),ObjectUtils.objectToByte(id));
             
        
        }
        
        
        @Test
        public void testLoad(){
            ApplicationContext ac= 
                    new ClassPathXmlApplicationContext("service_bean.xml");
            
            CarItemService cs = (CarItemService) ac.getBean("carItemServiceImpl");
            
            cs.delCarItemService(10005, "123233");
            
            /*cs.updateCountService(10003, 2, "123233");
            
            ProdcutVo pvo=cs.loadProductByIdService("10006");
            
            System.out.println(pvo.getFlowername());;
            
             List list=cs.loadCarItemsService("123233");
             for(CarItem c:list){
                 System.out.println(c.getPvo().getFlowername());
             }*/
            
        }

    }
     

  • 相关阅读:
    jsp旅行社管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
    镜像永久挂载
    网站被攻击怎么办
    大型医院容灾备份平台建设与应用实践
    【 Git 和 SVN 的区别】
    代码随想录算法训练营第三十四天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
    用中文编程工具编写的代码实现如图所示效果,请分享一下用你所学的编程语言写下这个代码,大家一起交流学习
    让深度神经网络绘画以了解它们是如何工作的
    Xshell连接不上创建的虚拟机
    多线程知识 汇总(1)
  • 原文地址:https://blog.csdn.net/xdpcxq/article/details/134281878