Jelajahi Sumber

添加节目时自动生成推荐记录,新增点击时自动计算推荐得分,可以重置推荐积分

yaobo 7 tahun lalu
induk
melakukan
caf48e6bb7

+ 7 - 0
src/main/java/cn/efunbox/controller/ClickController.java

@@ -17,8 +17,10 @@ import org.springframework.web.servlet.view.json.MappingJacksonJsonView;
 
 import cn.efunbox.model.Click;
 import cn.efunbox.model.Film;
+import cn.efunbox.model.Recommend;
 import cn.efunbox.service.IClickService;
 import cn.efunbox.service.IFilmService;
+import cn.efunbox.service.IRecommendService;
 
 @SuppressWarnings("deprecation")
 @Controller
@@ -30,6 +32,8 @@ public class ClickController {
 	
 	@Autowired
 	private IFilmService filmService;
+	@Autowired
+	private IRecommendService recmdService;
 	
     private IClickService clickService;
     
@@ -124,6 +128,9 @@ public class ClickController {
 		
 		int ret = clickService.insert(click);
 		
+		Recommend recmd = recmdService.get(Integer.valueOf(age), Integer.valueOf(sex), Integer.valueOf(type), film_code);
+		recmdService.updateScore(recmd.getId(), recmd.getScore()+10, curTime);
+		
 		map.put("code", 200);
         map.put("rows", ret);
         return map;

+ 41 - 1
src/main/java/cn/efunbox/controller/FilmController.java

@@ -16,7 +16,9 @@ import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.view.json.MappingJacksonJsonView;
 
 import cn.efunbox.model.Film;
-import cn.efunbox.service.IFilmService;;
+import cn.efunbox.model.Recommend;
+import cn.efunbox.service.IFilmService;
+import cn.efunbox.service.IRecommendService;
 
 @SuppressWarnings("deprecation")
 @Controller
@@ -27,6 +29,8 @@ public class FilmController {
 	private  HttpServletRequest request;
 	
     private IFilmService filmService;
+    @Autowired
+    private IRecommendService recmdService;
     
     public IFilmService getFilmService() {
         return filmService;
@@ -108,9 +112,45 @@ public class FilmController {
 		
 		int ret = filmService.insert(film);
 		
+		for(int age=0;age<20;age++){
+			int score = initScore(film, age);
+			Recommend recmd = new Recommend();
+			recmd.setAge(age);
+			recmd.setCreated(curTime);
+			recmd.setFilm_code(film_code);
+			recmd.setScore(score);
+			recmd.setSex(1);
+			recmd.setType(Integer.valueOf(type));
+			recmdService.insert(recmd);
+			
+			recmd.setSex(2);
+			recmdService.insert(recmd);
+		}
+		
 		map.put("code", 200);
         map.put("rows", ret);
         return map;
     }
     
+    private int initScore(Film film, int age){
+    	int curTime = (int)(System.currentTimeMillis()/1000);
+    	int score = 0;
+    	score += film.getMark_type()==1?5:0;				//最多5分
+		score += film.getFilm_type()==1?5:0;				//5
+		score += film.getIs_vip()==1?5:0;					//5
+		score += 3 * Math.ceil(Float.valueOf(film.getFilm_grade()));//15
+		score += 2 * Math.ceil(Float.valueOf(film.getFilm_star()));	//10
+		int ageDis =  age - film.getAge_group();
+		if(ageDis==0)
+			ageDis = 1;
+		score += Math.ceil(30/ageDis);						//30
+		score += Math.max(0, 15-2*Math.max(0, (curTime-film.getPublish_date())/(3600*24*365)));//15
+		score += Math.max(0, 15-2*Math.max(0, (curTime-film.getOnline_date())/(3600*24*365)));//15
+		if(score<0)
+			score = 0;
+		else if(score>100)
+			score = 100;
+		
+    	return score;
+    }
 }

+ 10 - 0
src/main/java/cn/efunbox/controller/RecommendController.java

@@ -46,6 +46,16 @@ public class RecommendController {
         return map;
     }
 
+    @RequestMapping("/reset")
+    @ResponseBody
+    public Map<String,Object> reset(){
+       	int ret = recmdService.updateScoreAll();
+        Map<String, Object> map = new HashMap<String, Object>(2);
+        map.put("code", 200);
+        map.put("rows", ret);
+        return map;
+    }
+
     @RequestMapping("/search")
     @ResponseBody
     public Map<String,Object> search(){

+ 1 - 1
src/main/java/cn/efunbox/dao/FilmMapper.java

@@ -32,5 +32,5 @@ public interface FilmMapper {
      * @param film_code
      */
     Film get(@Param("film_code") String film_code, @Param("type") int type);
-   
+
 }

+ 1 - 1
src/main/java/cn/efunbox/dao/PersonMapper.java

@@ -9,7 +9,7 @@ public interface PersonMapper {
      * 插入一条记录
      * @param person
      */
-    void insert(Person person);
+	int insert(Person person);
     
     /**
      * 查询所有

+ 21 - 1
src/main/java/cn/efunbox/dao/RecommendMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import org.apache.ibatis.annotations.Param;
 
+import cn.efunbox.model.Film;
 import cn.efunbox.model.Recommend;
 
 public interface RecommendMapper {
@@ -11,7 +12,7 @@ public interface RecommendMapper {
      * 插入一条记录
      * @param person
      */
-    void insert(Recommend recmd);
+    int insert(Recommend recmd);
     
     /**
      * 查询所有
@@ -24,4 +25,23 @@ public interface RecommendMapper {
      * @return
      */
 	List<Recommend> search(@Param("age") int age, @Param("sex") int sex, @Param("type") int type, @Param("limit") int limit, @Param("offset") int offset);
+
+    /**
+     * 搜索单个
+     * @return
+     */
+	Recommend get(@Param("age") int age, @Param("sex") int sex, @Param("type") int type, @Param("film_code") String film_code);
+	
+    /**
+     * 更新一条记录的排序积分
+     * @param 
+     */
+	int updateScore(@Param("id") int id, @Param("score") int score, @Param("updated") int updated);
+
+    /**
+     * 减半重置记录的排序积分
+     * @param 
+     */
+    int updateScoreAll(@Param("reseted") int reseted);
+    
 }

+ 1 - 1
src/main/java/cn/efunbox/mapping/ClickMapper.xml

@@ -2,7 +2,7 @@
  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.efunbox.dao.ClickMapper">
     <!-- 查询所有结果 -->  
-     <insert id="insert" parameterType="Click">
+     <insert id="insert">
 		insert into film_click(type,age,sex,film_code,film_type,mark_type,is_vip,film_grade,film_star,age_group,series_count,publish_date,online_date,area,movie_type,target_people,language,duration,created) 
 		values(#{type},#{age},#{sex},#{film_code},#{film_type},#{mark_type},#{is_vip},#{film_grade},#{film_star},#{age_group},#{series_count},#{publish_date},#{online_date},#{area},#{movie_type},#{target_people},#{language},#{duration},#{created}) 
 	</insert>

+ 3 - 3
src/main/java/cn/efunbox/mapping/FilmMapper.xml

@@ -2,7 +2,7 @@
  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.efunbox.dao.FilmMapper">
     <!-- 新增 -->  
-     <insert id="insert" parameterType="Film">
+     <insert id="insert">
 		insert into film_info(type,film_code,film_type,mark_type,is_vip,film_grade,film_star,age_group,series_count,publish_date,online_date,area,movie_type,target_people,language,duration,created) 
 		values(#{type},#{film_code},#{film_type},#{mark_type},#{is_vip},#{film_grade},#{film_star},#{age_group},#{series_count},#{publish_date},#{online_date},#{area},#{movie_type},#{target_people},#{language},#{duration},#{created}) 
 	</insert>
@@ -13,11 +13,11 @@
     </select>
     
     <!-- 删除 -->  
-    <select id="delete" resultType="int" >  
+    <select id="delete">  
         delete from film_info where film_code=#{film_code} and type=#{type} limit 1 
     </select>
     
-    <!-- 删除 -->  
+    <!-- 搜索 -->  
     <select id="get" resultType="Film" >  
         select * from film_info where film_code=#{film_code} and type=#{type} limit 1 
     </select>

+ 23 - 0
src/main/java/cn/efunbox/mapping/RecommendMapper.xml

@@ -1,6 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.efunbox.dao.RecommendMapper">
+	<!-- 新增 -->  
+     <insert id="insert">
+		insert into film_recmd(type,age,sex,film_code,score,created) 
+		values(#{type},#{age},#{sex},#{film_code},#{score},#{created}) 
+	</insert>
+   
     <!-- 查询所有结果 -->  
     <select id="queryAll" resultType="Recommend" >  
         select * from film_recmd  
@@ -12,4 +18,21 @@
         where age=#{age} and sex=#{sex} and type=#{type}
 		order by score desc limit #{limit} offset #{offset}
     </select>
+    
+    <!-- 搜索 -->  
+    <select id="get" resultType="Recommend" >  
+        select * from film_recmd 
+        where age=#{age} and sex=#{sex} and type=#{type} and film_code=#{film_code} limit 1
+    </select>
+    
+    <!-- 更新一条记录的排序积分 -->  
+    <update id="updateScore">  
+       	update film_recmd set score=#{score},updated=#{updated} where id=#{id} limit 1
+    </update>
+    
+    <!-- 减半重置记录的排序积分 -->  
+    <update id="updateScoreAll">  
+       	update film_recmd set score=round(score/2),reseted=#{reseted}
+    </update>
+    
 </mapper>

+ 27 - 1
src/main/java/cn/efunbox/service/IRecommendService.java

@@ -2,10 +2,17 @@ package cn.efunbox.service;
 
 import java.util.List;
 
+import org.apache.ibatis.annotations.Param;
+
 import cn.efunbox.model.Recommend;;
 
 public interface IRecommendService {
-	
+	/** 
+     * 插入一条记录
+     * @param person
+     */
+    int insert(Recommend recmd);
+    
     /**
      * 加载全部
      * @return
@@ -17,4 +24,23 @@ public interface IRecommendService {
      * @return
      */
     List<Recommend> search(int age, int sex, int type, int limit, int offset);
+
+    /**
+     * 搜索单个推荐节目
+     * @return
+     */
+    Recommend get(int age, int sex, int type, String film_code);
+
+    /**
+     * 更新一条记录的排序积分
+     * @param 
+     */
+    int updateScore(int id, int score, int updated);
+
+    /**
+     * 减半重置记录的排序积分
+     * @param 
+     */
+    int updateScoreAll();
+    
 }

+ 29 - 2
src/main/java/cn/efunbox/service/impl/RecommendServiceImpl.java

@@ -16,15 +16,20 @@ public class RecommendServiceImpl implements IRecommendService {
     	
     private RecommendMapper recmdMapper;
 
-    public RecommendMapper getPersonMapper() {
+    public RecommendMapper getRecommendMapper() {
         return recmdMapper;
     }
     
     @Autowired
-    public void setPersonMapper(RecommendMapper recmdMapper) {
+    public void setRecommendMapper(RecommendMapper recmdMapper) {
         this.recmdMapper = recmdMapper;
     }
 
+	public int insert(Recommend recmd) {
+		// TODO Auto-generated method stub
+		return recmdMapper.insert(recmd);
+	}
+    
 	public List<Recommend> loadAll() {
 		// TODO Auto-generated method stub
 		return recmdMapper.queryAll();
@@ -35,4 +40,26 @@ public class RecommendServiceImpl implements IRecommendService {
 		return recmdMapper.search(age, sex, type, limit, offset);
 	}
 
+	public Recommend get(int age, int sex, int type, String film_code) {
+		// TODO Auto-generated method stub
+		return recmdMapper.get(age, sex, type, film_code);
+	}
+
+    /**
+     * 更新一条记录的排序积分
+     * @param 
+     */
+	public int updateScore(int id, int score, int updated){
+		return recmdMapper.updateScore(id, score, updated);
+	}
+
+    /**
+     * 减半重置记录的排序积分
+     * @param 
+     */
+	public int updateScoreAll(){
+		int curTime = (int)(System.currentTimeMillis()/1000);
+		return recmdMapper.updateScoreAll(curTime);
+	}
+
 }