package com.tale.service.impl;
import com.blade.ioc.annotation.Inject;
import com.blade.ioc.annotation.Service;
import com.blade.jdbc.ActiveRecord;
import com.blade.jdbc.core.Take;
import com.blade.kit.StringKit;
import com.tale.dto.MetaDto;
import com.tale.dto.Types;
import com.tale.exception.TipException;
import com.tale.model.Contents;
import com.tale.model.Metas;
import com.tale.model.Relationships;
import com.tale.service.MetasService;
import java.util.List;
@Service
public class MetasServiceImpl implements MetasService {
@Inject
private ActiveRecord activeRecord;
@Override
public List<Metas> getMetas(String types) {
if (StringKit.isNotBlank(types)) {
return activeRecord.list(new Take(Metas.class).eq("type", types).orderby("sort desc, mid desc"));
}
return null;
}
@Override
public MetaDto getMeta(String type, String name) {
if (StringKit.isNotBlank(type) && StringKit.isNotBlank(name)) {
String sql = "select a.*, count(b.cid) as count from t_metas a left join `t_relationships` b on a.mid = b.mid " +
"where a.type = ? and a.name = ? group by a.mid";
return activeRecord.one(MetaDto.class, sql, type, name);
}
return null;
}
@Override
public void saveMetas(Integer cid, String names, String type) {
if (null == cid) {
throw new TipException("项目关联id不能为空");
}
if (StringKit.isNotBlank(names) && StringKit.isNotBlank(type)) {
String[] nameArr = StringKit.split(names, ",");
for (String name : nameArr) {
this.saveOrUpdate(cid, name, type);
}
}
}
private void saveOrUpdate(Integer cid, String name, String type) {
Metas metas = activeRecord.one(new Take(Metas.class).eq("name", name).eq("type", type));
int mid = 0;
if (null != metas) {
// Metas temp = new Metas();
// temp.setMid(metas.getMid());
// activeRecord.update(temp);
mid = metas.getMid();
} else {
metas = new Metas();
metas.setSlug(name);
metas.setName(name);
metas.setType(type);
mid = activeRecord.insert(metas);
}
if (mid != 0) {
int count = activeRecord.count(new Take(Relationships.class).eq("cid", cid).eq("mid", mid));
if (count == 0) {
Relationships relationships = new Relationships();
relationships.setCid(cid);
relationships.setMid(mid);
activeRecord.insert(relationships);
}
}
}
@Override
public void delete(int mid) {
Metas metas = activeRecord.byId(Metas.class, mid);
if (null != metas) {
String type = metas.getType();
String name = metas.getName();
activeRecord.delete(Metas.class, mid);
List<Relationships> rlist = activeRecord.list(new Take(Relationships.class).eq("mid", mid));
if (null != rlist) {
for (Relationships r : rlist) {
Contents contents = activeRecord.byId(Contents.class, r.getCid());
if (null != contents) {
boolean isUpdate = false;
Contents temp = new Contents();
temp.setCid(r.getCid());
if (type.equals(Types.CATEGORY)) {
temp.setCategories(reMeta(name, contents.getCategories()));
isUpdate = true;
}
if (type.equals(Types.TAG)) {
temp.setTags(reMeta(name, contents.getTags()));
isUpdate = true;
}
if(isUpdate){
activeRecord.update(temp);
}
}
}
}
activeRecord.delete(new Take(Relationships.class).eq("mid", mid));
}
}
@Override
public void saveMeta(String type, String name, Integer mid) {
if (StringKit.isNotBlank(type) && StringKit.isNotBlank(name)) {
Metas metas = activeRecord.one(new Take(Metas.class).eq("type", type).eq("name", name));
if (null != metas) {
throw new TipException("已经存在该项");
} else {
if (null != mid) {
metas = new Metas();
metas.setMid(mid);
metas.setName(name);
activeRecord.update(metas);
} else {
metas = new Metas();
metas.setType(type);
metas.setName(name);
activeRecord.insert(metas);
}
}
}
}
@Override
public void saveMeta(Metas metas) {
if (null != metas) {
activeRecord.insert(metas);
}
}
@Override
public void update(Metas metas) {
if (null != metas && null != metas.getMid()) {
activeRecord.update(metas);
}
}
private String reMeta(String name, String metas) {
String[] ms = StringKit.split(metas, ",");
StringBuffer sbuf = new StringBuffer();
for (String m : ms) {
if (!name.equals(m)) {
sbuf.append(",").append(m);
}
}
if (sbuf.length() > 0) {
return sbuf.substring(1);
}
return "";
}
}