admin
2020-04-13 dd5b15229cb15459fa7c31ccea77dac28cbfafbd
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/RecommendBannerServiceImpl.java
@@ -1,227 +1,34 @@
package com.yeshi.fanli.service.impl.goods;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.goods.RecommendBannerDao;
import com.yeshi.fanli.entity.admin.RecommendBannerAdmin;
import com.yeshi.fanli.dao.mybatis.homemodule.RecommendBannerMapper;
import com.yeshi.fanli.entity.bus.recommend.RecommendBanner;
import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendBanner;
import com.yeshi.fanli.entity.system.System;
import com.yeshi.fanli.service.inter.config.SystemService;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.service.inter.goods.RecommendBannerService;
import com.yeshi.fanli.service.inter.goods.SuperRecommendBannerService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.Utils;
@Service
public class RecommendBannerServiceImpl implements RecommendBannerService {
   @Resource
   private RecommendBannerDao recommendBannerDao;
   private RecommendBannerMapper recommendBannerMapper;
   @Resource
   private SuperRecommendBannerService superRecommendBannerService;
   @Resource
   private SystemService systemService;
   private BusinessSystemService businessSystemService;
   public List<RecommendBanner> getRecommendBanners() {
      return recommendBannerDao.list("from RecommendBanner rb order by rb.orderby");
   }
   public void addRecommendBanner(RecommendBanner banner) {
      banner.setCreatetime(java.lang.System.currentTimeMillis());
      recommendBannerDao.create(banner);
   }
   @SuppressWarnings("unchecked")
   public List<RecommendBannerAdmin> getRecommendBanners(int pageIndex,
         String platform, String packages, String key) {
      final int strat = pageIndex * Constant.PAGE_SIZE;
      platform = Utils.getMap().get(platform);
      com.yeshi.fanli.entity.system.System system = systemService.getSystem(platform, packages);
      List<RecommendBanner> recommendBannerList=null;
      List<SuperRecommendBanner> superRecommendBannerList=null;
      Map<Long,RecommendBannerAdmin> recommendBannerAdminMap=new HashMap<Long, RecommendBannerAdmin>();
      List<RecommendBannerAdmin> recommendBannerAdmin=new ArrayList<RecommendBannerAdmin>();
      if(system == null){
         if("".equals(key.trim())){
            recommendBannerList = (List<RecommendBanner>) recommendBannerDao.excute(new HibernateCallback<List<RecommendBanner>>(){
                  public List<RecommendBanner> doInHibernate(Session session)
                        throws HibernateException {
                     Query query = session.createQuery(" from RecommendBanner rb order by rb.orderby ");
                     query.setFirstResult(strat);
                     query.setMaxResults(Constant.PAGE_SIZE);
                     return query.list();
                  }
            });
         }else{
            final String likekey = "%"+key+"%";
            recommendBannerList= (List<RecommendBanner>) recommendBannerDao.excute(new HibernateCallback<List<RecommendBanner>>(){
                     public List<RecommendBanner> doInHibernate(Session session)
                           throws HibernateException {
                        Query query = session.createQuery(" from RecommendBanner rs where rs.name like ? order by rs.orderby ");
                        query.setFirstResult(strat);
                        query.setMaxResults(Constant.PAGE_SIZE);
                        query.setParameter(0, likekey);
                        return query.list();
                     }
            });
         }
         List<Long> rsIdList = new ArrayList<Long>();
         for (RecommendBanner rs : recommendBannerList) {
            rsIdList.add(rs.getId());
         }
         superRecommendBannerList = superRecommendBannerService.getSuperRecommendBannersByBanners(rsIdList);
         Map<Long,List<System>> superMap = new HashMap<Long, List<System>>();
         Long rsId=null;
         List<System> systemList=null;
         for (SuperRecommendBanner srs : superRecommendBannerList) {
            rsId = srs.getRecommendBanner().getId();
            systemList = superMap.get(rsId);
            if(systemList==null){
               systemList=new ArrayList<System>();
            }
            systemList.add(srs.getSystem());
            superMap.put(rsId,systemList);
         }
         RecommendBannerAdmin rsa=null;
         for (RecommendBanner recommendBanner : recommendBannerList) {
            long id = recommendBanner.getId();
            rsa = recommendBannerAdminMap.get(id);
            if(rsa==null){
               rsa=new RecommendBannerAdmin();
            }
            List<System> list = superMap.get(id);
            if(list != null){
               rsa.getSystemList().addAll(superMap.get(id));
            }
            rsa.setRecommendBanner(recommendBanner);
            recommendBannerAdminMap.put(id, rsa);
         }
      }else if(system != null){
         if("".equals(key.trim())){
            superRecommendBannerList = superRecommendBannerService.getSuperRecommendBannerBySystemId(system.getId(),strat, Constant.PAGE_SIZE);
         }else{
            String likekey = "%"+key+"%";
            superRecommendBannerList = superRecommendBannerService.getSuperRecommendBannerBySystemId(system.getId(),strat, Constant.PAGE_SIZE,likekey);
         }
         List<Long> rsIdList =new ArrayList<Long>();
         for (SuperRecommendBanner superRecommendBanner : superRecommendBannerList) {
            RecommendBanner recommendBanner = superRecommendBanner.getRecommendBanner();
            rsIdList.add(recommendBanner.getId());
         }
         superRecommendBannerList = superRecommendBannerService.getSuperRecommendBannersByBanners(rsIdList);
         RecommendBannerAdmin rsa=null;
         for (SuperRecommendBanner superRecommendBanner : superRecommendBannerList) {
            RecommendBanner recommendBanner = superRecommendBanner.getRecommendBanner();
            rsa = recommendBannerAdminMap.get(recommendBanner.getId());
            if(rsa==null){
               rsa=new RecommendBannerAdmin(recommendBanner);
            }
            rsa.getSystemList().add(superRecommendBanner.getSystem());
            recommendBannerAdminMap.put(recommendBanner.getId(), rsa);
         }
      }
      Map<Long, RecommendBannerAdmin> obMap = (LinkedHashMap<Long, RecommendBannerAdmin>) Utils.orderBy(recommendBannerAdminMap);
      Collection<RecommendBannerAdmin> values = obMap.values();
      recommendBannerAdmin.addAll(values);
      return recommendBannerAdmin;
   }
   public long getCount() {
      return recommendBannerDao
            .getCount("select count(*) from RecommendBanner");
   }
   @Transactional
   public void deleteBanners(final long[] rbids) {
      superRecommendBannerService.deleteSuperRecommendBanners(rbids);
      recommendBannerDao.excute(new HibernateCallback() {
         public Object doInHibernate(Session session)
               throws HibernateException {
             StringBuffer sb = new
//             StringBuffer("delete b,j from yeshi_ec_recommend_banner b left join yeshi_ec_action_jumpdetail j on b.jumpid=j.id ");
             StringBuffer("delete b from yeshi_ec_recommend_banner b ");
             for (int i = 0; i < rbids.length; i++) {
             if(i==0){
             sb.append(" where b.id=? ");
             }else{
             sb.append(" or b.id=?");
             }
             }
             Query query = session.createSQLQuery(sb.toString());
             for (int i = 0; i < rbids.length; i++) {
             query.setLong(i, rbids[i]);
             }
             query.executeUpdate();
            return null;
         }
      });
   }
   public RecommendBanner getRecommendBanner(long id) {
      RecommendBanner banner = recommendBannerDao.find(RecommendBanner.class, id);
      return banner;
      return recommendBannerMapper.listAllOrderByOrderby();
   }
   public void updateBanner(RecommendBanner banner) {
      recommendBannerDao.update(banner);
   }
   public int getCount(String platform, String packages, final String key) {
      platform = Utils.getMap().get(platform);
      final System system = systemService.getSystem(platform, packages);
      return (Integer) recommendBannerDao.excute(new HibernateCallback<Integer>() {
         public Integer doInHibernate(Session session)
               throws HibernateException {
            String k = "%"+key+"%";
            Query query;
            if(system==null){
//               query = session.createSQLQuery("select count(a.name) from (select name from yeshi_ec_recommend_banner where `name` like ?) a");
               query=session.createQuery("select count(rb.id) from RecommendBanner rb where rb.name like ? ");
               query.setParameter(0, k);
            }else{
//               query =session.createSQLQuery("select count(a.name) from (select hs.name from yeshi_ec_super_recommendbanner shs left  join yeshi_ec_recommend_banner hs on shs.recommendbanner_id=hs.id where shs.system_id=? and hs.name like ?) a");
               query=session.createQuery("select count(srb.id) from SuperRecommendBanner srb where srb.system.id = ? and srb.recommendBanner.name like ?");
               query.setParameter(0, system.getId());
               query.setParameter(1, k);
            }
               Long result = (Long) query.uniqueResult();
               int intValue = result.intValue();
               return intValue;
         }
      });
   }
   public void updateBannerJumpDetail(final long id) {
      recommendBannerDao.excute(new HibernateCallback() {
         public Object doInHibernate(Session session)
               throws HibernateException {
            Query query = session.createQuery("update RecommendBanner rb set rb.jumpDetail.id = NULL where  rb.jumpDetail.id = ?");
            query.setParameter(0, id);
            return query.executeUpdate();
         }
      });
      recommendBannerMapper.updateByPrimaryKeySelective(banner);
   }
}