fanli/src/main/java/com/yeshi/fanli/dao/dynamic/WXMPDynamicInfoDao.java
New file @@ -0,0 +1,82 @@ package com.yeshi.fanli.dao.dynamic; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; import com.yeshi.fanli.dao.MongodbBaseDao; import com.yeshi.fanli.entity.dynamic.WXMPDynamicInfo; @Repository public class WXMPDynamicInfoDao extends MongodbBaseDao<WXMPDynamicInfo> { @Resource private MongoTemplate mongoTemplate; /** * * @Title: list * @Description: 列表查询 * @param start * @param count * @return * List<WXMPDynamicInfo> 返回类型 * @throws */ public List<WXMPDynamicInfo> list(int start, int count) { Query query = new Query(); List<Order> orders = new ArrayList<>(); orders.add(new Order(Direction.DESC, "createTime")); query.with(new Sort(orders)); query.skip(start); query.limit(count); return mongoTemplate.find(query, WXMPDynamicInfo.class); } /** * * @Title: count * @Description: 数量查询 * @return * long 返回类型 * @throws */ public long count() { Query query = new Query(); return mongoTemplate.count(query, WXMPDynamicInfo.class); } /** * * @Title: addShareCount * @Description: 添加分享次数 * @param id * void 返回类型 * @throws */ public void addShareCount(String id) { WXMPDynamicInfo info = get(id); if (info == null) { return; } Query query = new Query(); query.addCriteria(Criteria.where("id").is(id)); Update update = new Update(); if (info.getShareCount() != null) update.set("shareCount", info.getShareCount() + 1); else update.set("shareCount", 1); mongoTemplate.updateFirst(query, update, WXMPDynamicInfo.class); } } fanli/src/main/java/com/yeshi/fanli/dao/goods/jd/NYouHuiGoodsDao.java
@@ -16,6 +16,15 @@ @Repository public class NYouHuiGoodsDao extends MongodbBaseDao<NYouHuiGoods> { /** * * @Title: selectByName * @Description: 根据名字查询 * @param name * @return * NYouHuiGoods 返回类型 * @throws */ public NYouHuiGoods selectByName(String name) { Query query = new Query(); query.addCriteria(Criteria.where("name").is(name)); @@ -26,4 +35,37 @@ return mongoTemplate.findOne(query, NYouHuiGoods.class); } /** * * @Title: list * @Description: 查询列表 * @param start * @param count * @return * List<NYouHuiGoods> 返回类型 * @throws */ public List<NYouHuiGoods> list(int start, int count) { Query query = new Query(); List<Order> orders = new ArrayList<>(); orders.add(new Order(Direction.DESC, "updateTime")); query.with(new Sort(orders)); query.skip(start); query.limit(count); return mongoTemplate.find(query, NYouHuiGoods.class); } /** * * @Title: count * @Description: 查询数量 * @return * long 返回类型 * @throws */ public long count() { Query query = new Query(); return mongoTemplate.count(query, NYouHuiGoods.class); } } fanli/src/main/java/com/yeshi/fanli/entity/dynamic/WXMPDynamicInfo.java
New file @@ -0,0 +1,126 @@ package com.yeshi.fanli.entity.dynamic; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java.util.List; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; import com.google.gson.annotations.Expose; import com.yeshi.fanli.entity.bus.activity.ActivityUser; @Document(collection = "wxmpDynamicInfo") public class WXMPDynamicInfo implements Serializable { public final static int SOURCE_NYH = 11;// 内优惠 public final static int SOURCE_OWN = 20;// 自有编辑 /** * */ private static final long serialVersionUID = 1L; @Id @Expose @Field("id") private String id; // 发布用户 @Expose @Field("user") private ActivityUser user; // 图片内容 @Expose @Field("imgs") private List<GoodsPicture> imgs; // 文案 @Expose @Field("content") private String content; // 来源 @Field("source") private Integer source; // 分享次数 @Field("shareCount") private Integer shareCount; // 分享赚的资金 @Field("shareMoney") private BigDecimal shareMoney; // 创建时间 @Expose @Field("createTime") private Date createTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public ActivityUser getUser() { return user; } public void setUser(ActivityUser user) { this.user = user; } public List<GoodsPicture> getImgs() { return imgs; } public void setImgs(List<GoodsPicture> imgs) { this.imgs = imgs; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Integer getSource() { return source; } public void setSource(Integer source) { this.source = source; } public Integer getShareCount() { return shareCount; } public void setShareCount(Integer shareCount) { this.shareCount = shareCount; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public BigDecimal getShareMoney() { return shareMoney; } public void setShareMoney(BigDecimal shareMoney) { this.shareMoney = shareMoney; } } fanli/src/main/java/com/yeshi/fanli/entity/goods/jd/NYouHuiGoods.java
@@ -6,6 +6,9 @@ import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; import org.yeshi.utils.StringUtil; import com.google.gson.Gson; @Document(collection = "jdGoodsNYouHui") public class NYouHuiGoods { @@ -99,4 +102,19 @@ public void setSourceUrl(String sourceUrl) { this.sourceUrl = sourceUrl; } /** * * @Title: toId * @Description: 转化唯一主键ID * @return * String 返回类型 * @throws */ public String toId() { String idStr = this.name; idStr += "#"; idStr += new Gson().toJson(this.skuList); return StringUtil.Md5(idStr); } } fanli/src/main/java/com/yeshi/fanli/exception/dynamic/WXMPDynamicInfoException.java
New file @@ -0,0 +1,16 @@ package com.yeshi.fanli.exception.dynamic; import com.yeshi.fanli.exception.BaseException; public class WXMPDynamicInfoException extends BaseException { private static final long serialVersionUID = 1L; public WXMPDynamicInfoException(int code, String msg) { super(code, msg); } public WXMPDynamicInfoException() { super(); } } fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java
@@ -1,5 +1,7 @@ package com.yeshi.fanli.job; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -9,12 +11,28 @@ import org.springframework.stereotype.Component; import org.yeshi.utils.DateUtil; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.yeshi.fanli.dto.ConfigParamsDTO; import com.yeshi.fanli.entity.bus.activity.RecommendActivity; import com.yeshi.fanli.entity.bus.activity.RecommendActivityInviteInfo; import com.yeshi.fanli.entity.dynamic.GoodsPicture; import com.yeshi.fanli.entity.dynamic.WXMPDynamicInfo; import com.yeshi.fanli.entity.goods.jd.NYouHuiGoods; import com.yeshi.fanli.entity.jd.JDGoods; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.activity.ActivityService; import com.yeshi.fanli.service.inter.activity.ActivityUserService; import com.yeshi.fanli.service.inter.common.JumpDetailV2Service; import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService; import com.yeshi.fanli.service.inter.dynamic.WXMPDynamicInfoService; import com.yeshi.fanli.service.inter.goods.jd.NYouHuiService; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; import com.yeshi.fanli.service.manger.goods.ConvertLinkManager; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory; import com.yeshi.fanli.util.jd.JDApiUtil; import com.yeshi.fanli.util.jd.JDUtil; @Component public class DynamicInfoJob { @@ -25,6 +43,23 @@ @Resource private ActivityService activityService; @Resource private NYouHuiService nyouHuiService; @Resource private ActivityUserService activityUserService; @Resource private WXMPDynamicInfoService wxmpDynamicInfoService; @Resource private ConvertLinkManager convertLinkManager; @Resource private HongBaoManageService hongBaoManageService; @Resource private JumpDetailV2Service jumpDetailV2Service; /** * 每10分钟 晚上00:00~06:00不下发任何一个商品 @@ -46,7 +81,6 @@ } } try { dynamicInfoService.insertTimeRecommend(); } catch (Exception e) { @@ -57,7 +91,6 @@ } } } /** * 早上6,7,15,16,21,22,23点更新1次 @@ -101,7 +134,6 @@ } } /** * 早上11:00~14:00每半个小时更新 */ @@ -123,7 +155,6 @@ } } /** * 下午17:00~20:00每半个小时更新 */ @@ -144,7 +175,6 @@ } } } /** * 每天零点删除3天之前数据 @@ -168,7 +198,6 @@ } } /** * 后台编辑动态: 每3分钟检索 */ @@ -185,7 +214,6 @@ return; } for (RecommendActivity activity : list) { Integer type = activity.getType(); if (RecommendActivity.TYPE_SHARE_GOODS == type) { @@ -197,7 +225,8 @@ } else if (RecommendActivity.TYPE_INVITE == type) { // 邀请素材 RecommendActivityInviteInfo inviteInfo = activityService.getRecommendActivityInviteInfoByActivityId(activity.getId()); RecommendActivityInviteInfo inviteInfo = activityService .getRecommendActivityInviteInfoByActivityId(activity.getId()); activity.setInviteInfo(inviteInfo); dynamicInfoService.insertInviteActivity(activity); @@ -215,7 +244,6 @@ } } } /** * 每天6点天更新邀请素材 @@ -238,5 +266,91 @@ } } /** * * @Title: demoJobHandler * @Description: 更新小程序动态商品 * @param param * @return * @throws Exception * ReturnT<String> 返回类型 * @throws */ @XxlJob("dynamic-updateWXMPDynamicInfo") public ReturnT<String> updateWXMPDynamicInfoHandler(String param) throws Exception { addJDNYHInfo(); return ReturnT.SUCCESS; } /** * 添加内优惠相关商品 * @Title: addJDNYHInfo * @Description: * void 返回类型 * @throws */ private void addJDNYHInfo() throws Exception { List<NYouHuiGoods> list = nyouHuiService.list(1, 1); if (list != null && list.size() > 0) { NYouHuiGoods goods = list.get(0); String id = goods.toId(); WXMPDynamicInfo info = new WXMPDynamicInfo(); info.setId(WXMPDynamicInfo.SOURCE_NYH + "#" + id); String desc = goods.getDesc(); info.setSource(WXMPDynamicInfo.SOURCE_NYH); info.setUser(activityUserService.getRandomHaoHuo()); // 做链接转换 for (String link : goods.getLinkList()) { desc = desc.replaceFirst("\\[链接\\]", link); } desc = convertLinkManager.convertJDLinkFromText(desc, 0L, true); info.setContent(desc); List<JDGoods> goodsList = JDApiUtil.queryGoodsDetail(goods.getSkuList()); List<GoodsPicture> imgs = new ArrayList<>(); BigDecimal totalMoney = new BigDecimal(0); List<String> lastPicture = new ArrayList<>(); for (JDGoods jdGoods : goodsList) { GoodsPicture picture = new GoodsPicture(); BigDecimal money = JDUtil.getGoodsFanLiMoney(jdGoods, hongBaoManageService.getShareRate()); totalMoney = totalMoney.add(money); picture.setGoodsVO( GoodsDetailVOFactory.convertJDGoods(jdGoods, new ConfigParamsDTO(hongBaoManageService.getFanLiRate(), hongBaoManageService.getShareRate(), null, hongBaoManageService.getVIPFanLiRate()))); picture.setGoodState(0); picture.setJumpDetail(jumpDetailV2Service.getByTypeCache("goodsdetail")); picture.setParams(null); picture.setUrl(jdGoods.getPicUrl()); imgs.add(picture); if (jdGoods.getImageList() != null) if (jdGoods.getImageList().size() > 4) lastPicture.addAll(jdGoods.getImageList().subList(1, 4)); else if (jdGoods.getImageList().size() > 1) lastPicture.addAll(jdGoods.getImageList().subList(1, jdGoods.getImageList().size())); } int count = 0; while (imgs.size() < 4 && count < 4) { count++; String picurl = lastPicture.get((int) (lastPicture.size() * Math.random())); if (picurl != null) { lastPicture.remove(picurl); GoodsPicture picture = new GoodsPicture(); picture.setUrl(picurl); imgs.add(picture); } } info.setImgs(imgs); wxmpDynamicInfoService.addWXMPDynamicInfo(info); } } } fanli/src/main/java/com/yeshi/fanli/job/TestJob.java
File was deleted fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java
New file @@ -0,0 +1,75 @@ package com.yeshi.fanli.service.impl.dynamic; import java.util.Date; import java.util.List; import java.util.UUID; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.yeshi.utils.StringUtil; import com.yeshi.fanli.dao.dynamic.WXMPDynamicInfoDao; import com.yeshi.fanli.entity.dynamic.WXMPDynamicInfo; import com.yeshi.fanli.exception.dynamic.WXMPDynamicInfoException; import com.yeshi.fanli.service.inter.dynamic.WXMPDynamicInfoService; import com.yeshi.fanli.service.manger.goods.ConvertLinkManager; @Service public class WXMPDynamicInfoServiceImpl implements WXMPDynamicInfoService { @Resource private WXMPDynamicInfoDao wxmpDynamicInfoDao; @Resource private ConvertLinkManager convertLinkManager; @Override public void addWXMPDynamicInfo(WXMPDynamicInfo info) throws WXMPDynamicInfoException { if (StringUtil.isNullOrEmpty(info.getContent())) throw new WXMPDynamicInfoException(1, "无文案"); if (info.getSource() == null) throw new WXMPDynamicInfoException(1, "无来源"); if (info.getUser() == null) throw new WXMPDynamicInfoException(1, "无发布用户"); if (info.getId() == null) info.setId(StringUtil.Md5(UUID.randomUUID().toString())); if (info.getCreateTime() == null) info.setCreateTime(new Date()); info.setShareCount(0); if (wxmpDynamicInfoDao.get(info.getId()) != null) throw new WXMPDynamicInfoException(2, "动态已存在"); wxmpDynamicInfoDao.save(info); } @Override public List<WXMPDynamicInfo> listDynamicInfo(int page, int pageSize) { return wxmpDynamicInfoDao.list((page - 1) * pageSize, pageSize); } @Override public Long countDynamicInfo() { return wxmpDynamicInfoDao.count(); } @Override public String copyContent(String id, Long uid) throws WXMPDynamicInfoException { // 转链 WXMPDynamicInfo info = wxmpDynamicInfoDao.get(id); if (info == null) throw new WXMPDynamicInfoException(1, "信息不存在"); // 转链 String convertContent = null; try { convertContent = convertLinkManager.convertLinkFromText(info.getContent(), uid, true); } catch (Exception e) { throw new WXMPDynamicInfoException(2, e.getMessage()); } wxmpDynamicInfoDao.addShareCount(id); return convertContent; } } fanli/src/main/java/com/yeshi/fanli/service/impl/goods/jd/NYouHuiServiceImpl.java
@@ -1,6 +1,7 @@ package com.yeshi.fanli.service.impl.goods.jd; import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -34,4 +35,14 @@ return nyouHuiGoodsDao.selectByName(name); } @Override public List<NYouHuiGoods> list(int page, int pageSize) { return nyouHuiGoodsDao.list((page - 1) * pageSize, pageSize); } @Override public long count() { return nyouHuiGoodsDao.count(); } } fanli/src/main/java/com/yeshi/fanli/service/inter/dynamic/WXMPDynamicInfoService.java
New file @@ -0,0 +1,59 @@ package com.yeshi.fanli.service.inter.dynamic; import java.util.List; import com.yeshi.fanli.entity.dynamic.WXMPDynamicInfo; import com.yeshi.fanli.exception.dynamic.WXMPDynamicInfoException; /** * 微信小程序动态商品服务 * @author Administrator * */ public interface WXMPDynamicInfoService { /** * * @Title: addWXMPDynamicInfo * @Description: 添加微信小程序动态信息 * @param info * @throws WXMPDynamicInfoException * void 返回类型 * @throws */ public void addWXMPDynamicInfo(WXMPDynamicInfo info) throws WXMPDynamicInfoException; /** * * @Title: listDynamicInfo * @Description: 动态列表 * @param page * @param pageSize * @return * List<WXMPDynamicInfo> 返回类型 * @throws */ public List<WXMPDynamicInfo> listDynamicInfo(int page, int pageSize); /** * * @Title: countDynamicInfo * @Description: 动态总数量 * @return * Long 返回类型 * @throws */ public Long countDynamicInfo(); /** * * @Title: copyContent * @Description: 复制动态文案 * @param id * @return * String 返回类型 * @throws */ public String copyContent(String id,Long uid) throws WXMPDynamicInfoException; } fanli/src/main/java/com/yeshi/fanli/service/inter/goods/jd/NYouHuiService.java
@@ -1,5 +1,7 @@ package com.yeshi.fanli.service.inter.goods.jd; import java.util.List; import com.yeshi.fanli.entity.goods.jd.NYouHuiGoods; public interface NYouHuiService { @@ -19,4 +21,26 @@ */ public NYouHuiGoods selectByName(String name); /** * * @Title: list * @Description: 查询列表 * @param page * @param pageSize * @return * List<NYouHuiGoods> 返回类型 * @throws */ public List<NYouHuiGoods> list(int page, int pageSize); /** * * @Title: count * @Description: 计算所有的数量 * @return * long 返回类型 * @throws */ public long count(); } fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
@@ -49,7 +49,7 @@ * @throws */ private String convertJDLinkFromText(String text, Long uid, boolean share) throws Exception { public String convertJDLinkFromText(String text, Long uid, boolean share) throws Exception { StringBuilder builder = new StringBuilder(text); String newText = builder.toString(); fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
@@ -190,6 +190,20 @@ return null; } public static List<JDGoods> queryGoodsDetail(List<Long> skuIdList) { JDFilter filter = new JDFilter(); filter.setPageIndex(1); filter.setPageSize(20); filter.setListId(skuIdList); JDSearchResult searchResult = queryByKey(filter); if (searchResult != null) { List<JDGoods> list = searchResult.getGoodsList(); if (list != null && list.size() > 0) return list; } return null; } /** * 通过商品搜索接口批量获取详情 *