package com.yeshi.fanli.controller.client; import java.io.IOException; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.taobao.TbImgUtil; import org.yeshi.utils.tencentcloud.COSManager; import com.taobao.api.ApiException; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.recommend.DynamicRecommend; import com.yeshi.fanli.entity.bus.recommend.RecommendDetails; import com.yeshi.fanli.entity.bus.recommend.RecommendReply; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.taobao.RelateGoods; import com.yeshi.fanli.entity.taobao.SearchFilter; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; import com.yeshi.fanli.service.MaskKeyService; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.goods.RecommendDetailsService; import com.yeshi.fanli.service.inter.goods.RecommendReplyService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.user.DynamicRecommendService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.GsonUtil; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.Utils; import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import net.sf.json.JSONObject; @Controller @RequestMapping("api/v1/dynamic") public class DynamicRecommendController { @Resource private HongBaoManageService hongBaoManageService; @Resource private DynamicRecommendService dynamicRecommendService; @Resource private RecommendDetailsService recommendDetailsService; @Resource private RecommendReplyService recommendReplyService; @Resource private UserInfoService userInfoService; @Resource private MaskKeyService maskKeyService; @Resource private ConfigService configService; @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; /** * 获取商品信息 * * @param acceptData * @param url * 商品链接 * @param out */ @RequestMapping(value = "getGoodsInfo", method = RequestMethod.POST) public void getGoodsInfo(AcceptData acceptData, String url, PrintWriter out) { TaoBaoGoodsBrief tb = null; String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?"; Pattern p = Pattern.compile(URL_REGEX); Matcher matcher = p.matcher(url); if (!matcher.find()) {// 不包含链接 out.print(JsonUtil.loadFalseResult("暂不支持该类型!")); return; } url = matcher.group(); if (url.contains("ju.taobao.com") || url.contains(".juhuasuan.com")) {// 聚划算 int index = url.indexOf("item_id"); if (index < 0) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } url = url.substring(index); int last = url.indexOf("&"); String id = ""; if (last > 0) id = url.substring(url.indexOf("=") + 1, url.indexOf("&")); else { id = url.substring(url.indexOf("=" + 1)); } tb = TaoBaoUtil.isAlimama(id); if (tb == null) { tb = TaoBaoUtil.parsePhoneTmAndTb(id); } } else if (url.contains("http://zmnxbc.com")) { // 手机端天猫APP分享 tb = TaoBaoUtil.parsePhoneShareUrlByTM(url); } /* * else if(url.contains("c.b1yt.com") || url.contains("m.qtilg.com") * || url.contains("z.icyad.com")){ //手机端淘宝和一淘APP分享 * tb=TaoBaoUtil.parsePhoneShareUrlByTB(url); } */else if (url.contains("h5.m.taobao") || url.contains("detail.m.tmall") || url.contains("item.taobao") || url.contains("detail.tmall")) { // 手机页面和电脑页面 Map map = Utils.parseURL(url); String id = ""; id = map.get("id").replace("}", ""); tb = TaoBaoUtil.isAlimama(id); if (tb == null) { tb = TaoBaoUtil.parsePhoneTmAndTb(id); } } else { tb = TaoBaoUtil.parsePhoneShareUrlByTB(url); } if (tb == null) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } JSONObject data = new JSONObject(); JSONObject taoBaoGoodsJSON = new JSONObject(); taoBaoGoodsJSON.put("title", tb.getTitle()); taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice()); taoBaoGoodsJSON.put("auctionId", tb.getAuctionId()); taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId()); data.put("taoBaoGoodsBrief", taoBaoGoodsJSON); data.put("tbImgs", tb.getImgList()); out.print(JsonUtil.loadTrueResult(data)); } /** * 粘贴板信息推荐 * * @param acceptData * @param url * 商品链接 * @param out */ @RequestMapping(value = "getNewGoodsInfo", method = RequestMethod.POST) public void getNewGoodsInfo(AcceptData acceptData, String text, PrintWriter out) { if (StringUtil.isNullOrEmpty(text)) { out.print(JsonUtil.loadFalseResult("值为空")); return; } if (text.length() > 256) { out.print(JsonUtil.loadFalseResult("值过长")); return; } TaoBaoGoodsBrief tb = null; String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?"; Pattern p = Pattern.compile(URL_REGEX); Matcher matcher = p.matcher(text); if (!matcher.find()) {// 不包含链接 // 商品详情 // 发现 // 没有链接,标题过长也不处理 if (text.length() > 50) { out.print(JsonUtil.loadFalseResult("值过长")); return; } SearchFilter sf = new SearchFilter(); sf.setKey(text); JSONObject root = new JSONObject(); TaoBaoSearchResult result = TaoBaoUtil.search(sf); if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0) for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs()) { // 是属于淘宝联盟商品 if (goods.getTitle().equalsIgnoreCase(text)) { root.put("type", 2); JSONObject data = new JSONObject(); data.put("title", goods.getTitle()); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); return; } } out.print(JsonUtil.loadFalseResult("暂不支持该类型!")); return; } text = matcher.group(); if (text.contains("ju.taobao.com") || text.contains(".juhuasuan.com")) {// 聚划算 int index = text.indexOf("item_id"); if (index < 0) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } text = text.substring(index); int last = text.indexOf("&"); String id = ""; if (last > 0) id = text.substring(text.indexOf("=") + 1, text.indexOf("&")); else { id = text.substring(text.indexOf("=" + 1)); } tb = TaoBaoUtil.isAlimama(id); if (tb == null) { tb = TaoBaoUtil.parsePhoneTmAndTb(id); } } else if (text.contains("http://zmnxbc.com")) { // 手机端天猫APP分享 tb = TaoBaoUtil.parsePhoneShareUrlByTM(text); } else if (text.contains("h5.m.taobao") || text.contains("detail.m.tmall") || text.contains("item.taobao") || text.contains("detail.tmall")) { // 手机页面和电脑页面 Map map = Utils.parseURL(text); String id = ""; id = map.get("id").replace("}", ""); tb = TaoBaoUtil.isAlimama(id); if (tb == null) { tb = TaoBaoUtil.parsePhoneTmAndTb(id); } } else { tb = TaoBaoUtil.parsePhoneShareUrlByTB(text); } if (tb == null) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } JSONObject data = new JSONObject(); JSONObject taoBaoGoodsJSON = new JSONObject(); taoBaoGoodsJSON.put("title", tb.getTitle()); taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice()); taoBaoGoodsJSON.put("auctionId", tb.getAuctionId()); taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId()); data.put("taoBaoGoodsBrief", taoBaoGoodsJSON); if (!StringUtil.isNullOrEmpty(tb.getPictUrl())) { if (tb.getImgList() == null) tb.setImgList(new ArrayList<>()); tb.getImgList().add(0, TbImgUtil.getTBSize220Img(tb.getPictUrl())); } data.put("tbImgs", tb.getImgList()); JSONObject root = new JSONObject(); root.put("type", 1); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); } /** * 发布我的推荐 * * @param acceptData * @param dynamicRecommend * 推荐信息 * @param files * 上传的图片 * @param out */ @RequestMapping(value = "makePublic", method = RequestMethod.POST) public void makePublic(AcceptData acceptData, DynamicRecommend dynamicRecommend, String order, @RequestParam(value = "files", required = false) CommonsMultipartFile[] files, PrintWriter out) { if (dynamicRecommend == null) { out.print(JsonUtil.loadFalseResult("dynamicRecommend不能为空")); return; } if (dynamicRecommend.getUserInfo() == null) { out.print(JsonUtil.loadFalseResult("uid不能为空")); return; } if (dynamicRecommend.getReason() == null || "".equals(dynamicRecommend.getReason().trim())) { out.print(JsonUtil.loadFalseResult("推荐理由不能为空")); return; } if (dynamicRecommend.getUrl() == null || "".equals(dynamicRecommend.getUrl().trim())) { out.print(JsonUtil.loadFalseResult("url不能为空")); return; } if (dynamicRecommend.getAuctionId() == null) { out.print(JsonUtil.loadFalseResult("商品ID不能为空")); return; } if ((dynamicRecommend.getuPicUrl() == null || "".equals(dynamicRecommend.getuPicUrl().trim())) && files == null) { out.print(JsonUtil.loadFalseResult("请选择一张图片")); return; } String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?"; Pattern p = Pattern.compile(URL_REGEX); Matcher matcher = p.matcher(dynamicRecommend.getUrl()); if (!matcher.find()) { out.print(JsonUtil.loadFalseResult("暂不支持该类型!")); return; } String url = matcher.group(); dynamicRecommend.setUrl(url); if (files != null) { COSManager cosManager = COSManager.getInstance(); String paths = ""; for (CommonsMultipartFile file : files) { try { String filename = file.getOriginalFilename(); int index = filename.lastIndexOf("."); String type = filename.substring(index); String filePath = cosManager .uploadFile(file.getInputStream(), UUID.randomUUID().toString().replace("-", "") + type) .getUrl(); paths += "," + filePath; } catch (IOException e) { e.printStackTrace(); out.println(JsonUtil.loadFalseResult("上传图片失败")); return; } } paths = paths.replaceFirst(",", ""); String getuPicUrl = dynamicRecommend.getuPicUrl(); if (getuPicUrl != null) { getuPicUrl = getuPicUrl.replaceAll(",", ""); } if (getuPicUrl == null || "".equals(getuPicUrl.trim())) { dynamicRecommend.setuPicUrl(paths); } else { // int i = getuPicUrl.lastIndexOf(","); String[] split = paths.split(","); int orderBy = 1; if (!StringUtil.isNullOrEmpty(order)) { orderBy = Integer.parseInt(order); } List list = new ArrayList(); for (String pic : split) { if (!"".equals(pic.trim())) list.add(pic); } list.add(orderBy - 1, getuPicUrl); String pics = ""; int ii = 0; for (String pic : list) { if (ii == 0) { pics = pic; } else { pics += "," + pic; } ii++; } dynamicRecommend.setuPicUrl(pics); // if(i==-1 || (i>0 && i==getuPicUrl.length()-1)){ // }else{ // dynamicRecommend.setuPicUrl(getuPicUrl+","+paths); // } } } else { String uPicUrl = dynamicRecommend.getuPicUrl(); int lastIndex = uPicUrl.lastIndexOf(","); if (lastIndex > 0) { uPicUrl = uPicUrl.substring(0, lastIndex); dynamicRecommend.setuPicUrl(uPicUrl); } } TaoBaoGoodsBrief taoBaoGoodsBrief = null; taoBaoGoodsBrief = TaoBaoUtil.isAlimama(dynamicRecommend.getAuctionId()); if (taoBaoGoodsBrief == null) { taoBaoGoodsBrief = TaoBaoUtil.parsePhoneTmAndTb(dynamicRecommend.getAuctionId()); dynamicRecommend.setHongbao(new BigDecimal(0)); } else { SearchFilter filter = new SearchFilter(); filter.setKey(String.format(TaoBaoUtil.TB_URL, dynamicRecommend.getAuctionId())); TaoBaoSearchResult search = TaoBaoUtil.search(filter); List taoBaoGoodsBriefs = search.getTaoBaoGoodsBriefs(); if (taoBaoGoodsBriefs.size() == 0) { out.println(JsonUtil.loadFalseResult("发布失败,商品已下架")); return; } taoBaoGoodsBrief = taoBaoGoodsBriefs.get(0); BigDecimal proportion = hongBaoManageService.getFanLiRate(); BigDecimal tkRate = taoBaoGoodsBrief.getTkRate(); BigDecimal zkPrice = taoBaoGoodsBrief.getZkPrice(); BigDecimal tkp = proportion.divide(BigDecimal.valueOf(100)) .multiply(tkRate.divide(BigDecimal.valueOf(100))); BigDecimal hongbao = MoneyBigDecimalUtil.mul(zkPrice, tkp); dynamicRecommend.setHongbao(hongbao); } String title = taoBaoGoodsBrief.getTitle(); int type = taoBaoGoodsBrief.getUserType(); dynamicRecommend.setGname(title); dynamicRecommend.setZkPrice(taoBaoGoodsBrief.getZkPrice()); dynamicRecommend.setgPicUrl(taoBaoGoodsBrief.getPictUrl()); dynamicRecommend.setType(0); dynamicRecommend.setCreatetime(System.currentTimeMillis()); if (type == 0) { // tb dynamicRecommend.setGoodsType(1); // tb } else { dynamicRecommend.setGoodsType(2); // 天猫 } String reason = dynamicRecommend.getReason(); reason = maskKeyService.maskAction(reason); dynamicRecommend.setReason(reason); long makePublic = dynamicRecommendService.makePublic(dynamicRecommend); if (makePublic > 0) { JSONObject data = new JSONObject(); data.put("auctionId", makePublic); out.println(JsonUtil.loadTrueResult(data)); } else { out.println(JsonUtil.loadFalseResult("发布失败")); } } /** * 获取推荐商品列表 * * @param page * @param out */ @RequestMapping(value = "getDynamicRecommendList", method = RequestMethod.POST) public void getDynamicRecommendList(AcceptData acceptData, int page, long uid, PrintWriter out) { if (page <= 0) { page = 1; } List list = dynamicRecommendService.getDynamicRecommendList(uid, page); int count = dynamicRecommendService.getCount(); int fcount = 0; for (DynamicRecommend dynamicRecommend : list) { fcount = recommendReplyService.getCount(dynamicRecommend.getId()); dynamicRecommend.setReplyCount(fcount); } JSONObject data = new JSONObject(); data.put("list", GsonUtil.toJsonByUserAp(list)); data.put("count", count); out.print(JsonUtil.loadTrueResult(data)); } /** * 获取我的推荐 * * @param page * @param uid * @param out */ @RequestMapping(value = "getMyDynamicRecommendList", method = RequestMethod.POST) public void getMyDynamicRecommendList(AcceptData acceptData, int page, long uid, PrintWriter out) { if (page <= 0) { page = 1; } List list = dynamicRecommendService.getMyDynamicRecommendList(uid, page); int count = dynamicRecommendService.getCount(uid); JSONObject data = new JSONObject(); data.put("list", GsonUtil.toJsonByUserAp(list)); data.put("count", count); out.print(JsonUtil.loadTrueResult(data)); } /** * 获取推荐商品详情 * * @param drid * @param uid * @param out */ @RequestMapping(value = "recommendDetails", method = RequestMethod.POST) public void recommendDetails(AcceptData acceptData, long drid, long uid, PrintWriter out) { DynamicRecommend recommend = dynamicRecommendService.getDynamicRecommend(drid, uid); if (recommend == null) { out.print(JsonUtil.loadFalseResult("不存在")); return; } RecommendDetails recommendDetails = recommendDetailsService.getRecommendDetails(drid, uid); if (recommendDetails == null) { out.print(JsonUtil.loadFalseResult("不存在")); return; } // int count = recommendReplyService.getCount(drid); JSONObject data = new JSONObject(); // data.put("rcount", count); recommendDetails.setDynamicRecommend(recommend); data.put("recommendDetails", GsonUtil.toJsonByUserAp(recommendDetails)); List list = new ArrayList(); try { list = TaoKeApiUtil.getRelateGoodsList(Long.parseLong(recommend.getAuctionId())); List tbImg = TaoBaoUtil.getTbImg(recommend.getAuctionId()); data.put("tbImgs", tbImg); } catch (NumberFormatException e) { e.printStackTrace(); } catch (ApiException e) { e.printStackTrace(); } data.put("relateGoodsList", list); String url = configService.get("recommend_details"); url = url + "?drid=" + drid; data.put("shareUrl", url); String uPicUrls = recommend.getuPicUrl(); String sharePic = uPicUrls.split(",")[0]; data.put("sharePic", sharePic); out.print(JsonUtil.loadTrueResult(data)); } /** * 获取推荐商品全部评价 * * @param drid * 推荐id * @param uid * 用户id * @param page * 页数 * @param out */ @RequestMapping(value = "recommendReplys", method = RequestMethod.POST) public void recommendReplys(AcceptData acceptData, long drid, int page, PrintWriter out) { int uid = 0; List recommendReplys = recommendReplyService.getRecommendReplys(drid, uid, page); int count = recommendReplyService.getCount(drid); JSONObject data = new JSONObject(); data.put("count", count); data.put("recommendReplys", GsonUtil.toJsonByUserAp(recommendReplys)); out.print(JsonUtil.loadTrueResult(data)); } /** * 评价 * * @param drid * 推荐id * @param uid * 用户id * @param content * 评价内容 * @param out */ @RequestMapping(value = "replys", method = RequestMethod.POST) public void replys(AcceptData acceptData, long drid, long uid, String content, PrintWriter out) { if (uid == 0) { out.print(JsonUtil.loadFalseResult("不存在该用户")); return; } List userList = userInfoService.getUserListByUid(uid); if (userList.size() == 0) { out.print(JsonUtil.loadFalseResult("不存在该用户")); return; } UserInfo userInfo = userList.get(0); content = maskKeyService.maskAction(content); int state = recommendReplyService.replys(drid, userInfo, content); if (state == 0) { JSONObject data = new JSONObject(); data.put("user", JsonUtil.getApiCommonGson().toJson(userInfo)); out.print(JsonUtil.loadTrueResult(data)); } else if (state == 1) { out.print(JsonUtil.loadFalseResult("不存在该用户")); return; } else if (state == 2) { out.print(JsonUtil.loadFalseResult("不存在该推荐")); return; } } /** * 对商品进行的投票,值与不值 * * @param drid * 推荐id * @param uid * 用户id * @param type * 0:值 1.不值 * @param out * */ @RequestMapping(value = "voteGoods", method = RequestMethod.POST) public void voteGoods(AcceptData acceptData, long drid, long uid, int type, PrintWriter out) { int state = recommendDetailsService.vote(drid, uid, type); if (state == 0) { out.print(JsonUtil.loadTrueResult("")); } else if (state == 1) { out.print(JsonUtil.loadFalseResult("不存在该推荐")); return; } else if (state == 2) { out.print(JsonUtil.loadFalseResult("不存在该用户")); return; } } @RequestMapping(value = "deleteDynamicRecommend", method = RequestMethod.POST) public void deleteDynamicRecommend(AcceptData acceptData, String ids, PrintWriter out) { if (ids == null) { out.print(JsonUtil.loadFalseResult("id不能为空")); return; } String[] idArr = ids.split(","); for (String id : idArr) { dynamicRecommendService.delete(Long.parseLong(id)); } out.print(JsonUtil.loadTrueResult("")); } @RequestMapping(value = "islike", method = RequestMethod.POST) public void islike(AcceptData acceptData, long drid, long uid, int type, PrintWriter out) { if (type == 0) { dynamicRecommendService.addlike(drid, uid); } else { dynamicRecommendService.removelike(drid, uid); } out.print(JsonUtil.loadTrueResult("")); } @RequestMapping(value = "getMyLikes", method = RequestMethod.POST) public void getMyLikes(AcceptData acceptData, long uid, int page, PrintWriter out) { List list = dynamicRecommendService.getMyLikeRecommends(uid, page); JSONObject data = new JSONObject(); data.put("list", GsonUtil.toJsonByUserAp(list)); out.print(JsonUtil.loadTrueResult(data)); } }