项目中用到的一些小组件(评论、点赞、统计、红点、关注)

原理也简单,把dao包装成一些方便调用的静态方法。把参数做成可以连点的方式。都是基于数据表实现了。适用用户较少的情况(比如胸怀大理想的某某产品,-,-)。实际开发的话做一些统一的接口。针对不同业务做不同的评论,统计等。可以节约不少时间
评论:

public class AppraiseHelper {

	private AppraiseDao appraiseDao;

	Appraise appraise = new Appraise();

	AppraiseQuery query = new AppraiseQuery();

	public AppraiseHelper() {
		appraiseDao = SpringUtils.getBean(AppraiseDao.class);
	}

	public static AppraiseHelper build() {
		return new AppraiseHelper();
	}

	public AppraiseHelper businessType(BusinessType bType) {
		query.setBusinessType(bType.getCode());
		appraise.setBusinessType(bType.getCode());
		return this;

	}

	public AppraiseHelper businessType(String bType) {
		query.setBusinessType(bType);
		appraise.setBusinessType(bType);
		return this;

	}

	public AppraiseHelper businessId(String businessId) {
		query.setBusinessId(businessId);
		appraise.setBusinessId(businessId);
		return this;
	}

	public AppraiseHelper businessId(List<String> businessIds) {
		query.setBusinessIds(businessIds);
		return this;
	}

	public AppraiseHelper id(String id) {
		appraise.setId(id);
		return this;
	}

	public AppraiseHelper parentId(String parentId) {
		appraise.setParentId(parentId);
		return this;
	}

	public AppraiseHelper content(String content) {
		appraise.setContent(content);
		return this;
	}

	public String save() {
		String nextKey = SnowFlake.nextKey();
		appraise.setId(nextKey);
		String parentId = appraise.getParentId();
		appraise.setParentId(isNull(parentId) ? "0" : parentId);
		appraise.setCreateDate(System.currentTimeMillis());
		appraise.setCommentUser(UserUtils.getLoginUserId());
		appraiseDao.addAppraise(appraise);
		return nextKey;
	}

	public void cancel(String id) {
		appraiseDao.cancelAppraise(id);
	}

	public List<AppraiseVo> findAppraises() {
		query.setLoginUserId(getLoginUserId());
		List<AppraiseVo> appraises = appraiseDao.findAppraises(query);
		return TreeUtils.toTree(appraises, a -> a);
	}

	public int count() {
		query.setLoginUserId(getLoginUserId());
		List<AppraiseVo> appraises = appraiseDao.findAppraises(query);
		return appraises.size();
	}
	
	public Map<String,Integer> countMap() {
		query.setLoginUserId(getLoginUserId());
		List<AppraiseVo> appraises = appraiseDao.findAppraises(query);
		return DrinListUtils.countField(appraises, AppraiseVo::getBusinessId);
	}

	public void del() {
		List<String> appraiseIds = Lists.newArrayList();
		appraiseIds.add(this.appraise.getId());
		// 先获取所有的评论
		List<AppraiseVo> appraises = appraiseDao.findAppraises(query);
		Map<String, List<AppraiseVo>> parentMap = new HashMap<>();
		if (CollectionUtils.isNotEmpty(appraises)) {
			parentMap = appraises.stream().collect(Collectors.groupingBy(AppraiseVo::getParentId));
			if (MapUtils.isNotEmpty(parentMap)) {
				List<AppraiseVo> appraiseVos = parentMap.get(this.appraise.getId());
				findAppreisesIds(appraiseVos, parentMap, appraiseIds);
			}
		}
		appraiseDao.delAppraiseByIds(appraiseIds);
	}

	private List<String> findAppreisesIds(List<AppraiseVo> appraiseVos, Map<String, List<AppraiseVo>> parentMap,
			List<String> appraiseIds) {
		if (CollectionUtils.isNotEmpty(appraiseVos)) {
			for (AppraiseVo appraiseVo : appraiseVos) {
				appraiseIds.add(appraiseVo.getId());
				List<AppraiseVo> appraiseVoList = parentMap.get(appraiseVo.getId());
				if (CollectionUtils.isNotEmpty(appraiseVoList)) {
					findAppreisesIds(appraiseVoList, parentMap, appraiseIds);
				}
			}
		}
		return appraiseIds;
	}
}
//使用示例
AppraiseHelper.build().businessType(toType(businessType)).businessId(businessId).save();
AppraiseHelper.build().businessType(toType(businessType)).businessId(businessId).del();
AppraiseHelper.build().businessType(businessType).businessId(businessId).count();

点赞:

public class ClickPraiseHelper {

	private ClickPraiseDao clickPraiseDao;

	private ClickPraise clickPraise;

	public ClickPraiseHelper() {
		clickPraiseDao = SpringUtils.getBean(ClickPraiseDao.class);
		clickPraise = new ClickPraise();
	}

	public static ClickPraiseHelper build() {
		return new ClickPraiseHelper();
	}

	public ClickPraiseHelper businessType(BusinessType bType) {
		clickPraise.setBusinessType(bType.getCode());
		return this;
	}

	public ClickPraiseHelper businessType(String bType) {
		clickPraise.setBusinessType(bType);
		return this;
	}

	public ClickPraiseHelper businessId(String businessId) {
		clickPraise.setBusinessId(businessId);
		return this;
	}

	public ClickPraiseHelper businessIds(List<String> businessIds) {
		clickPraise.setBusinessIds(businessIds);
		return this;
	}

	public void cancel() {
		clickPraise.setClickUser(getLoginUserId());
		clickPraiseDao.cancelClickPraise(clickPraise);
	}

	public ClickPraiseHelper user() {
		clickPraise.setClickUser(getLoginUserId());
		return this;
	}

	public void save() {
		clickPraise.setClickUser(getLoginUserId());
		clickPraise.setCreateDate(System.currentTimeMillis());
		clickPraiseDao.addClickPraise(clickPraise);
	}

	public boolean exists() {
		Integer countClickPraise = clickPraiseDao.countClickPraise(clickPraise);
		return null != countClickPraise && countClickPraise > 0;
	}

	public int count() {
		return clickPraiseDao.countClickPraise(clickPraise);
	}

	public Map<String, Integer> countMap() {
		List<ClickPraise> findClicks = clickPraiseDao.findClicks(clickPraise);
		return DrinListUtils.countField(findClicks, ClickPraise::getBusinessId);
	}

	public boolean hasClick() {
		clickPraise.setClickUser(getLoginUserId());
		return count() > 0;
	}
}

//使用示例:
ClickPraiseHelper.build().businessType(businessType).businessId(businessId).save();
ClickPraiseHelper.build().businessType(businessType).businessId(businessId).cancel();
ClickPraiseHelper.build().businessType(businessType).businessId(businessId).count();

关注:

public class FocusHelper {

	private Focus focus;

	private FocusDao focusDao;

	public FocusHelper() {
		this.focus = new Focus();
		this.focusDao = SpringUtils.getBean(FocusDao.class);
	}

	public static FocusHelper build() {
		return new FocusHelper();
	}

	public FocusHelper focusUserId(String focusUserId) {
		focus.setFocusUserId(focusUserId);
		return this;
	}

	public FocusHelper focusType(String focusType) {
		focus.setFocusType(focusType);
		return this;
	}

	public FocusHelper userId(String userId) {
		focus.setUserId(userId);
		return this;
	}

	public void save() {
		focus.setUserId(getLoginUserId());
		focusDao.addFocus(focus);
	}

	public void consal() {
		focus.setUserId(getLoginUserId());
		focusDao.cancelFocus(focus);
	}

	public List<String> myFocus() {
		return focusDao.findMyFocus(focus);
	}

	public List<String> beFocus() {
		return focusDao.findUserBeFocus(focus);
	}

}

//使用示例:
FocusHelper.build().focusType(type).focusUserId(focusUserId).save();
FocusHelper.build().focusType(type).focusUserId(focusUserId).consal();

红点:

public class RedPointHelper {

	private RedPointDao redPointDao;

	private String dataType;

	private String dataId;

	private String userId;

	public RedPointHelper() {
		this.redPointDao = SpringUtils.getBean(RedPointDao.class);
		this.userId = getLoginUserId();
	}

	public static RedPointHelper build() {
		return new RedPointHelper();
	}

	public <T extends RedPointModel> List<String> redByIds(List<String> ids) {
		if (isNull(this.dataType)) {
			throw new LocalException("请设置红点类型");
		}
		if (ids.size() == 0) {
			return new ArrayList<String>();
		}
		// 已读的业务ids
		List<String> hasReadIds = redPointDao.findRedPointDataIds(userId, dataType);
		// 不存在已读的,全部为未读
		if (null != hasReadIds && hasReadIds.size() > 0) {
			ids.removeIf(bId -> hasReadIds.contains(bId));
		}
		return ids;
	}

	public <T extends RedPointModel> List<String> redIds(List<T> ts) {
		return redByIds(collectField(ts, T::getBusinessId));
	}

	public void sign() {
		if (isNull(this.dataType)) {
			return;
		}
		if (isNull(this.dataId)) {
			return;
		}

		RedPoint redPoint = new RedPoint();
		redPoint.setId(SnowFlake.nextKey());
		redPoint.setDataType(this.dataType);
		redPoint.setDataId(this.dataId);
		redPoint.setUserId(userId);
		redPointDao.addRedPointRecord(redPoint);
	}

	public RedPointHelper dataType(String dataType) {
		this.dataType = dataType;
		return this;
	}

	public RedPointHelper dataId(String dataId) {
		this.dataId = dataId;
		return this;
	}

}

计数统计(用户做了某件事情记数,比如浏览次数,阅读次数等等):

public class CounterHelper {

	private CounterDao counterDao;

	Counter counter = new Counter();

	private Integer pageNo;
	private Integer pageSize;

	public CounterHelper() {
		this.counterDao = SpringUtils.getBean(CounterDao.class);
	}

	public CounterHelper dataId(String dataId) {
		counter.setDataId(dataId);
		return this;
	}

	public CounterHelper countType(CounterType countType) {
		counter.setCountType(countType.getCode());
		return this;
	}
	
	public CounterHelper countType(String countType) {
		counter.setCountType(countType);
		return this;
	}
	
	public CounterHelper userId() {
		counter.setUserId(getLoginUserId());
		return this;
	}

	public CounterHelper time(Long startTime, Long endTime) {
		DrinDateUtils.setQueryTime(startTime, endTime, s -> counter.setStartTime(s), e -> counter.setEndTime(e));
		return this;
	}

	public CounterHelper page(Integer pageNo, Integer pageSize) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		return this;
	}

	public static CounterHelper build() {
		return new CounterHelper();
	}

	public void save() {
		counter.setId(SnowFlake.nextKey());
		counter.setAreaId(getLoginAreaId());
		counter.setCreateDate(System.currentTimeMillis());
		counter.setUserId(UserUtils.getLoginUserId());
		counterDao.addCounter(counter);
	}

	public List<CounterVo> list() {
		counter.setAreaId(getLoginAreaId());
		List<Counter> counters = counterDao.findCounter(counter);
		List<CounterVo> vos = toVos(counters);
		vos.sort((v1, v2) -> v2.getAmount().compareTo(v1.getAmount()));
		if (isNotNull(pageNo, pageSize)) {
			vos = DrinListUtils.page(vos, pageNo, pageSize);
		}
		return vos;

	}

	private List<CounterVo> toVos(List<Counter> counters) {
		List<CounterVo> vos = new ArrayList<>();
		if (null != counters && counters.size() > 0) {
			Map<String, List<Counter>> counterMap = groupList(counters, Counter::getDataId);
			counterMap.forEach((dataId, list) -> {
				CounterVo vo = new CounterVo();
				vo.setDataId(dataId);
				vo.setAmount(list.size());
				vos.add(vo);
			});
		}
		return vos;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值