package com.gustz.dove.api.dict.service.impl;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.sinovatech.fw.api.vo.Order;
import com.sinovatech.fw.dao.HqlDao;
import com.sinovatech.fw.query.util.QueryInfo;
import com.sinovatech.fw.query.util.QueryInfoBuilder;
import com.sinovatech.fw.service.impl.AbstractDataService;
import com.sinovatech.rd.wcsb.api.dict.service.DictGroupService;
import com.sinovatech.rd.wcsb.api.dict.service.DictService;
import com.sinovatech.rd.wcsb.api.dict.vo.DictGroupVo;
import com.sinovatech.rd.wcsb.repo.dict.dao.DictGroupDao;
import com.sinovatech.rd.wcsb.repo.dict.po.DictGroupPo;
/**
*
* TODO: 字典组别服务接口的实现
*
* @author ZHENFENG ZHANG
* @since [Jan 19, 2015]
*/
@Service
public class DictGroupServiceImpl extends AbstractDataService<DictGroupVo, DictGroupPo, String> implements DictGroupService {
@Autowired
private HqlDao hqlDao;
private DictGroupDao dao;
@Autowired
private DictService dictService;
@Autowired
public void needDao(DictGroupDao dao) {
super.setDao(dao);
this.dao = dao;
}
@Override
public String getId(DictGroupVo vo) {
return vo.getId();
}
/**
* 是否已存在该记录-组别编码
*
* @param id
* @param groupCode
* @return
*/
@Override
public boolean isExistGc(String id, String groupCode) {
if (StringUtils.isBlank(groupCode)) {
return false;
}
return this.isExistByKw(new DictGroupVo(id, groupCode));
}
/**
* 是否已存在该记录-组别名称
*
* @param id
* @param groupName
* @return
*/
@Override
public boolean isExistGname(String id, String groupName) {
if (StringUtils.isBlank(groupName)) {
return false;
}
return this.isExistByKw(new DictGroupVo(id, null, groupName));
}
/**
* 是否已存在该记录
*
* @param vo
* @return
*/
private boolean isExistByKw(DictGroupVo vo) {
String _id = vo.getId();
if (StringUtils.isNotBlank(_id)) { // update
DictGroupPo _oldPo = this.dao.get(_id);
String _gcode = vo.getGroupCode();
if (StringUtils.isNotBlank(_gcode) && _gcode.equals(_oldPo.getGroupCode())) {
return false; // 1.没有改变组编码
}
String _gname = vo.getGroupName();
if (StringUtils.isNotBlank(_gname) && _gname.equals(_oldPo.getGroupName())) {
return false; // 1.没有改变组名称
}
}
// 2. save/update
vo.setId(null);
return (this.ecCount(vo) > 0);
}
/**
* 分页查询
*
* @param search
* @param start
* @param limit
* @param orders
* @return
*/
@Override
public List<DictGroupVo> ecList(DictGroupVo search, int start, int limit, List<Order> orders) {
QueryInfo queryInfo = prepareQuery(search).order(orders).build();
List<DictGroupPo> _list = hqlDao.list(queryInfo.getSql(), start, limit, queryInfo.getParArr());
return this.po2Vo(_list);
}
/**
* 查询总记录数
*
* @param search
* @return
*/
@Override
public int ecCount(DictGroupVo search) {
QueryInfo queryInfo = prepareQuery(search).build();
return hqlDao.count(queryInfo.getCountSql(), queryInfo.getParArr());
}
private QueryInfoBuilder prepareQuery(DictGroupVo search) {
String hql = "from DictGroupPo Z where 1=1 ";
QueryInfoBuilder builder = QueryInfoBuilder.ins(hql) //
.andEq("Z.groupCode", search.getGroupCode()) //
.andContains("Z.groupCode", search.getGroupCodeLk()) //
//
.andContains("Z.groupName", search.getGroupName()) //
.andEq("Z.id", search.getId())
//
.orderDesc("Z.createTime");
return builder;
}
/**
* 批量删除字典组别
*
* @param ids
*/
@Override
public void batchDelete(Iterable<String> ids) {
DictGroupPo _po = null;
for (String _id : ids) {
_po = this.dao.get(_id);
if (this.dictService.isExistFkDict(_po.getGroupCode())) {
throw new IllegalStateException("Exist foreign key,delete object is fail!");
}
this.dao.delete(_id);
}
}
/**
* 保存字典组别
*
* @param vo
* @return
*/
@Override
public String save(DictGroupVo vo) {
DictGroupPo _po = this.vo2Po(vo);
_po.setCreateTime(new Date());
return this.dao.save(_po);
}
/**
* 更新字典组别
*
* @param vo
*/
@Override
public void update(DictGroupVo vo) {
DictGroupPo _newPo = this.vo2Po(vo); // 页面新值
DictGroupPo _oldPo = this.dao.get(vo.getId()); // 数据库旧值
//不能改变的值
_newPo.setCreateTime(_oldPo.getCreateTime());
this.dao.update(_newPo);
}
/**
* 按ID获取字典组别
*
* @param id
* @return
*/
@Override
public DictGroupVo get(String id) {
DictGroupVo _vo = this.po2Vo(this.dao.get(id));
return _vo;
}
}