原理也简单,把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;
}
}