package com.norteksoft.wf.engine.service;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.wf.engine.dao.DataDictionaryDao;
import com.norteksoft.wf.engine.dao.DataDictionaryProcessDao;
import com.norteksoft.wf.engine.dao.DataDictionaryTypeDao;
import com.norteksoft.wf.engine.dao.DataDictionaryUserDao;
import com.norteksoft.wf.engine.entity.DataDictionary;
import com.norteksoft.wf.engine.entity.DataDictionaryProcess;
import com.norteksoft.wf.engine.entity.DataDictionaryType;
import com.norteksoft.wf.engine.entity.DataDictionaryUser;
@Service
@Transactional
public class DataDictionaryTypeManager {
private DataDictionaryDao dataDictionaryDao;
private DataDictionaryTypeDao dataDictionaryTypeDao;
private DataDictionaryUserDao dataDictionaryUserDao;
private DataDictionaryProcessDao dataDictionaryProcessDao;
private Log log = LogFactory.getLog(DataDictionaryTypeManager.class);
@Autowired
public void setDataDictionaryDao(DataDictionaryDao dataDictionaryDao) {
this.dataDictionaryDao = dataDictionaryDao;
}
@Autowired
public void setDataDictionaryTypeDao(DataDictionaryTypeDao dataDictionaryTypeDao) {
this.dataDictionaryTypeDao = dataDictionaryTypeDao;
}
@Autowired
public void setDataDictionaryUserDao(DataDictionaryUserDao dataDictionaryUserDao) {
this.dataDictionaryUserDao = dataDictionaryUserDao;
}
@Autowired
public void setDataDictionaryProcessDao(
DataDictionaryProcessDao dataDictionaryProcessDao) {
this.dataDictionaryProcessDao = dataDictionaryProcessDao;
}
public Long getSystemId(){
return ContextUtils.getSystemId();
}
public Long getCompanyId(){
return ContextUtils.getCompanyId();
}
public void getDataDictTypesPage(Page<DataDictionaryType> dictPage){
dataDictionaryTypeDao.getDataDictTypesPage(dictPage,getCompanyId());
}
public List<DataDictionaryType> getAllDictTypes(){
return dataDictionaryTypeDao.getAllDictTypes(getCompanyId(),getSystemId());
}
public List<DataDictionaryType> getAllDictTypes(Long typeId){
return dataDictionaryTypeDao.getAllDictTypes(getCompanyId(),typeId);
}
@Transactional(readOnly=false)
public void saveDictType(DataDictionaryType dataDictionaryType){
log.debug("***saveDictType方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append(dataDictionaryType)
.append("]").toString());
dataDictionaryType.setSystemId(ContextUtils.getSystemId("wf"));
dataDictionaryTypeDao.save(dataDictionaryType);
List<DataDictionary> list = dataDictionaryDao.getDataDictsByTypeId(dataDictionaryType.getId(),dataDictionaryType.getCompanyId());
for(DataDictionary dd:list){
dd.setTypeName(dataDictionaryType.getName());
dataDictionaryDao.save(dd);
}
log.debug("***saveDictType方法开始");
}
public DataDictionaryType getDictTypeById(Long id){
log.debug("***getDictTypeById方法");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dictTypeId:").append(id)
.append("]").toString());
return dataDictionaryTypeDao.getDictTypeById(id);
}
@Transactional(readOnly=false)
public void deleteDictType(String ids){
log.debug("***deleteDictType方法");
log.debug(new StringBuilder("*** Received parameter:[")
.append(ids)
.append("]").toString());
String[] typeIds=ids.split(",");
for(String typeId:typeIds){
DataDictionaryType dataDictionaryType=dataDictionaryTypeDao.get(Long.parseLong(typeId));
List<DataDictionary> list = dataDictionaryDao.getDataDictsByTypeId(dataDictionaryType.getId(),dataDictionaryType.getCompanyId());
for(DataDictionary dd:list){
List<DataDictionaryUser> ddus = dataDictionaryUserDao.getDDUs(dd.getId(),getCompanyId());
for(DataDictionaryUser ddu:ddus){
dataDictionaryUserDao.delete(ddu);
}
List<DataDictionaryProcess> ddps = dataDictionaryProcessDao.getAllDictProcessesByDictId(dd.getId());
for(DataDictionaryProcess ddp : ddps){
dataDictionaryProcessDao.delete(ddp);
}
dataDictionaryDao.delete(dd.getId());
}
dataDictionaryTypeDao.delete(dataDictionaryType);
}
log.debug("***deleteDictType方法开始");
}
//类型名称是否存在
public Boolean isTypeNoExist(String no){
DataDictionaryType dictType=dataDictionaryTypeDao.getDictTypeByNo(no,getCompanyId());
if(dictType!=null){
return true;
}else{
return false;
}
}
/**
* 根据类型id集合获得类型编码的集合
* @param typeIds
* @param companyId
* @return
*/
public List<String> getDictTypeCodesByIds(String typeIds,Long companyId){
return dataDictionaryTypeDao.getDictTypeCodesByIds(typeIds, companyId);
}
public List<DataDictionaryType> getAllDictTypesByCompany(Long companyId){
return dataDictionaryTypeDao.getAllDictTypes(companyId);
}
public DataDictionaryType getDictTypeByNo(String code){
DataDictionaryType dataDictionaryType = dataDictionaryTypeDao.getDictTypeByNo(code,getCompanyId());
return dataDictionaryType;
}
public List<String> getDictTypeIdsByCodes(String typeNos){
return dataDictionaryTypeDao.getDictTypeIdsByCodes(typeNos);
}
}