欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

协作过滤算法|电影推荐系统|基于用户偏好的电影推荐系统的设计与开发

最编程 2024-03-29 12:58:59
...
package com.sys.controller.admin; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.sys.controller.MyController; import com.sys.controller.suanfa.Aprioti; import com.sys.controller.suanfa.Itemset; import com.sys.controller.xietong.XietongUtil; import com.sxl.util.RandomValidateCode; import com.sxl.util.StringHelper; @Controller("frontController") @RequestMapping(value = "/front") public class FrontController extends MyController { /** * 使用协同过滤算法进行相关推荐 * @param model * @param request * @return * @throws Exception */ @RequestMapping(value = "/index") public String frame(Model model, HttpServletRequest request) throws Exception { String sql = ""; sql = "select * from t_lbt"; List list3 = db.queryForList(sql); request.setAttribute("list3", list3); sql = "select a.* from t_product a where typesId=1 order by id desc limit 3"; List listb = db.queryForList(sql); request.setAttribute("listb", listb); //查询电影类型 sql = "select * from t_types"; model.addAttribute("typesList", db.queryForList(sql)); //协同过滤推荐算法 if(getCustomer(request)!=null){ //如果该用户登录了,身份确定了, 则可以用协同过滤推荐 List<Map> customerList = db.queryForList("select * from t_customer"); List<Map> dataList = db.queryForList("select distinct productId, customerId from t_productclick where productId is not null and customerId is not null "); int usersize = customerList.size(); String customerId = getCustomer(request).get("id").toString(); /** * 输入用户-->物品条目 一个用户对应多个物品 * 用户ID 物品ID集合 * A a b d * B a c * C b e * D c d e */ String[] userdata = new String[customerList.size()]; for (int i = 0; i < customerList.size(); i++) { String customerid = customerList.get(i).get("id").toString(); String aa="A"+customerid+""; for (int j = 0; j < dataList.size(); j++) { if(customerid.equals(dataList.get(j).get("customerId").toString())){ aa+="@"+dataList.get(j).get("productId").toString(); } } userdata[i]= aa+="@0"; System.out.println("******"+aa); } String out = XietongUtil.xietongjob(usersize, userdata, "A"+customerId); String sqlall="select a.* from t_product a where typesId=1 "; sql=sqlall; if(out!=null&&!"".equals(out)){ sql+=" and id in ("+out.substring(1,out.length())+")"; } sql+=" order by rand() limit 8 "; //以上推荐算法最总结果在根据随机安排推荐 //注!为了应对一开始人员访问数据量不够推荐算法使用的情况,就进行了数据补足,这个业务逻辑就非常完美了。 List tuijianList = db.queryForList(sql); int a = 8; int b = 0; if(tuijianList==null||tuijianList.size()<8){ if(tuijianList!=null){ b = 8-tuijianList.size(); } List list2 = db.queryForList(sqlall+" order by rand() limit "+b); tuijianList.addAll(list2); }else{ } request.setAttribute("tuijianList", tuijianList); }else{ //也就是说,如果网站用户未登录,则不能身份确认,所以用aprio算法 //aprio推荐算法 tuijiansuanfa(request); } return "/front/index"; } /** * 专门有个算法包 * 然后算法的逻辑也在这里, * 而且把算法之外额逻辑也加了 * 注!为了应对一开始人员访问数据量不够推荐算法使用的情况,就进行了数据补足,这个业务逻辑就非常完美了。 * * java推荐算法 * @param request */ public void tuijiansuanfa(HttpServletRequest request){ Itemset originalItem = new Itemset(); List<Map> lista = db.queryForList("select * from t_customer"); for (int i = 0; i < lista.size(); i++) { TreeSet<String> itemset = new TreeSet<String>(); List<Map> listb = db.queryForList("select * from t_productclick where customerId=?",new Object[]{lista.get(i).get("id")}); for (int j = 0; j < listb.size(); j++) { itemset.add(listb.get(j).get("productId")+""); } originalItem.itemset.add(itemset); } Aprioti.originalItem=originalItem; List<Long> outList = Aprioti.aprioriProcess(); String in =""; if(outList!=null&&outList.size()>0){ for (int i = 0; i < outList.size(); i++) { in+=","+outList.get(i); } } String sqlall="select a.* from t_product a where 1=1 "; String sql=sqlall; if(in!=null&&!"".equals(in)){ sql+=" and id in ("+in.substring(1,in.length())+")"; } sql+=" order by rand() limit 8 "; //以上推荐算法最总结果在根据随机安排推荐 //注!为了应对一开始人员访问数据量不够推荐算法使用的情况,就进行了数据补足,这个业务逻辑就非常完美了。 List tuijianList = db.queryForList(sql); int a = 8; int b = 0; if(tuijianList==null||tuijianList.size()<8){ if(tuijianList!=null){ b = 8-tuijianList.size(); } List list2 = db.queryForList(sqlall+" order by rand() limit "+b); tuijianList.addAll(list2); }else{ } request.setAttribute("tuijianList", tuijianList); } @RequestMapping(value = "/baidu1") public String baidu1(Model model, HttpServletRequest request) throws Exception { return "/front/baidu1"; } @RequestMapping(value = "/baidu2") public String baidu2(Model model, HttpServletRequest request) throws Exception { return "/front/baidu2"; } @RequestMapping(value = "/daohang1") public String daohang1(Model model, HttpServletRequest request,String id) throws Exception { Map map = db.queryForMap("select * from t_product where id="+id); model.addAttribute("map", map); return "/front/daohang1"; } public String getjwd(HttpServletRequest request){ Object jwdd= request.getSession().getAttribute("yhjwd"); if(jwdd!=null){ return jwdd.toString(); }else{ return "116.438189,39.9125"; } } @RequestMapping(value = "/daohang2") public String daohang2(Model model, HttpServletRequest request,String id) throws Exception { Map map = db.queryForMap("select *from t_zx where id="+id); map = new HashMap(); map.put("jwd", "116.661256,39.975119"); model.addAttribute("map", map); String jwd = getjwd(request); System.out.println(jwd); System.out.println(map.get("jwd")); model.addAttribute("jwd", jwd); return "/front/daohang2"; } @RequestMapping(value = "/login") public String login(Model model, HttpServletRequest request) throws Exception { return "/front/login"; } public void saveClick(HttpServletRequest request,Long id){ String sql="insert into t_productclick(productId,customerId,insertDate) values(?,?,now())"; Map customer = getCustomer(request); if(customer!=null&&customer.size()>0){ db.update(sql, new Object[]{id,getCustomer(request).get("id")}); } } /** * 查询信息 * @param model * @param request * @param typesId * @param productName * @param px * @return * @throws Exception */ @RequestMapping(value = "/all") public String all(Model model, HttpServletRequest request,Long typesId,String productName,String px,Integer bqid) throws Exception { String sql="select a.* from t_types a where 1=1"; sql+=" order by id desc"; List typesList = db.queryForList(sql); request.setAttribute("typesList", typesList); sql="select a.*,(select typesName from t_types b where a.typesId=b.id) typesName from t_product a where 1=1"; if(typesId!=null&&!"".equals(typesId)){ sql+=" and a.typesId="+typesId; } if(productName!=null&&!"".equals(productName)){ sql+=" and a.productName like '%"+productName+"%' "; } if(bqid!=null){ sql+=" and bqid="+bqid; } if("1".equals(px)){ sql+=" order by id desc"; }else if("2".equals(px)){ sql+=" order by price asc"; }else if("3".equals(px)){ sql+=" order by price desc"; }else if("4".equals(px)){ sql+=" order by djl desc"; } List list = db.queryForList(sql); request.setAttribute("list", list); return "/front/all"; } @RequestMapping(value = "/jfdh") public String jfdh(Model model, HttpServletRequest request) throws Exception { String sql="select a.* from t_jfdh a where 1=1"; sql+=" order by id desc"; List list = db.queryForList(sql); request.setAttribute("list", list); return "/front/jfdh"; } @RequestMapping(value = "/dhjfSave") public ResponseEntity<String> dhjfSave(Model model, HttpServletRequest request,Long id) throws Exception { Map map = db.queryForMap("select * from t_jfdh where id="+id); String jf = map.get("jfCost").toString(); String jfName = map.get("jfName").toString(); //订单 String sql = "insert into t_order(orderNum,customerId,productDetail,allPrice,status,insertDate) values(?,?,?,?,?,now())"; int result = db.update(sql, new Object[] { System.currentTimeMillis()+"", getCustomer(request).get("id").toString(), jfName+"积分兑换["+jf+"]", 0+"", "兑换完成" }); sql="update t_customer set jf = jf-"+jf+" where id="+getCustomer(request).get("id"); db.update(sql); //积分减少 return renderData(true, "操作成功", null); } @RequestMapping(value = "/register") public String register(Model model, HttpServletRequest request) throws Exception { System.out.println("112312312"); return "/front/register"; } @RequestMapping(value = "/detail") public String detail(Model model, HttpServletRequest request, Long id) throws Exception { //保存点击 saveClick(request, id); String sql = "select a.*,(select typesName from t_types b where a.typesId=b.id) typesName " + " from t_product a where id=" + id; Map map = db.queryForMap(sql); request.setAttribute("map", map); String sql2="select a.*,(select max(customerName) from t_customer b where a.customerId=b.id) customerName from t_pinglun_product a where productId=? order by id desc"; List<Map> list = db.queryForList(sql2,new Object[]{id}); model.addAttribute("list", list); db.update("update t_product set djl=djl+1 where id="+id); int scNum = db.queryForInt("select count(1) from t_sc where productId="+id); model.addAttribute("scNum", scNum); return "/front/detail"; } @RequestMapping(value = "/myOrder") public String myOrder(Model model, HttpServletRequest request) throws Exception { String sql = "select a.*,(select max(customerName) from t_customer b where a.customerId=b.id) customerName from t_order a where 1=1 "; if (1 == 1) { sql += "and customerId=" + getCustomer(request).get("id") + " "; } sql += " order by id desc"; List list = db.queryForList(sql); request.setAttribute("orderList", list); return "/front/myOrder"; } @RequestMapping(value = "/deleteOneOrder") public ResponseEntity<String> deleteOneOrder(Model model, HttpServletRequest request,Long id) throws Exception { String sql="delete from t_order where id="+id; db.update(sql); return renderData(true, "操作成功", null); } @RequestMapping(value = "/pjSave") public ResponseEntity<String> pjSave(Model model, HttpServletRequest request,Long id,String pj) throws Exception { String sql="update t_order set pj='"+pj+"' where id="+id; db.update(sql); return renderData(true, "操作成功", null); } @RequestMapping(value = "/deletesc") public ResponseEntity<String> deletesc(Model model, HttpServletRequest request,Long id) throws Exception { String sql="delete from t_sc where id="+id; db.update(sql); return renderData(true, "操作成功", null); } @RequestMapping(value = "/deletexiaoxi") public ResponseEntity<String> deletexiaoxi(Model model, HttpServletRequest request,Long id) throws Exception { String sql="delete from t_xiaoxi where id="+id; db.update(sql); return renderData(true, "操作成功", null); } @RequestMapping(value = "/addShopcar") public ResponseEntity<String> addShopcar(Model model, HttpServletRequest request, Long id, Integer num) throws Exception { int result = 0; db.update("delete from t_shopcar where customerId="+getCustomer(request).get("id")); String sql = "insert into t_shopcar(productId,num,customerId) values(?,?,?)"; result = db.update(sql, new Object[] { id, 1, getCustomer(request).get("id").toString() }); return renderData(true, "操作成功", null); } @RequestMapping(value = "/pay3")

上一篇: HTML5 + WebGL,无需插件即可创建纯网络 3D 机房(第三季度新增资产容量管理、动态环路监控等功能)

下一篇: VR悬疑游戏盘点丨密室逃脱,悬疑解谜 ......已安排