package com.norteksoft.wf.engine.service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
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.bs.rank.dao.RankUserDao;
import com.norteksoft.bs.rank.entity.Subordinate;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.api.entity.User;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.wf.base.enumeration.DataDictAllUsers;
import com.norteksoft.wf.base.enumeration.DataDictUseType;
import com.norteksoft.wf.base.enumeration.DataDictUserType;
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 DataDictionaryManager {
private Log log = LogFactory.getLog(DataDictionaryManager.class);
private DataDictionaryDao dataDictionaryDao;
private DataDictionaryTypeDao dataDictionaryTypeDao;
private DataDictionaryUserDao dataDictionaryUserDao;
private DataDictionaryProcessDao dataDictionaryProcessDao;
private RankUserDao rankUserDao;
@Autowired
public void setDataDictionaryUserDao(DataDictionaryUserDao dataDictionaryUserDao) {
this.dataDictionaryUserDao = dataDictionaryUserDao;
}
@Autowired
public void setDataDictionaryDao(DataDictionaryDao dataDictionaryDao) {
this.dataDictionaryDao = dataDictionaryDao;
}
@Autowired
public void setDataDictionaryProcessDao(
DataDictionaryProcessDao dataDictionaryProcessDao) {
this.dataDictionaryProcessDao = dataDictionaryProcessDao;
}
@Autowired
public void setRankUserDao(RankUserDao rankUserDao) {
this.rankUserDao = rankUserDao;
}
@Autowired
public void setDataDictionaryTypeDao(DataDictionaryTypeDao dataDictionaryTypeDao) {
this.dataDictionaryTypeDao = dataDictionaryTypeDao;
}
@Transactional(readOnly=false)
public void saveDataDict(DataDictionary dict, String[] users,String[] deptNames,String[] groupNames,String[] processes,String[] rankNames){
log.debug("***saveDataDict方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dict:").append(dict)
.append(", users:").append(users)
.append(", deptNames:").append(deptNames)
.append(", groupNames:").append(groupNames)
.append(", processes:").append(processes)
.append("]").toString());
dict.setCompanyId(getCompanyId());
dict.setSystemId(ContextUtils.getSystemId("wf"));
dataDictionaryDao.save(dict);
List<DataDictionaryUser> ddus = dataDictionaryUserDao.getDDUs(dict.getId(), getCompanyId());
for(DataDictionaryUser ddu : ddus){
dataDictionaryUserDao.delete(ddu);
}
List<DataDictionaryProcess> ddps = dataDictionaryProcessDao.getAllDictProcessesByDictId(dict.getId());
for(DataDictionaryProcess ddp : ddps){
dataDictionaryProcessDao.delete(ddp);
}
saveAllDictUser(dict.getId(),users,deptNames,groupNames,rankNames);
if(dict.getProcessType()==1){
if(processes!=null && processes.length>0){
saveProcesses(dict,processes);
}
}
log.debug("*** saveDataDict 方法结束");
}
@Transactional(readOnly=false)
private void saveAllDictUser(Long dictId,String[] users,String[] deptNames,String[] groupNames,String[] rankNames){
log.debug("***saveAllDictUser方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dictId:").append(dictId)
.append("]").toString());
if(users!=null && users.length>0){
saveDictUsers(dictId,users);
}
if(deptNames!=null && deptNames.length>0){
saveDictUsers(dictId,deptNames);
}
if(groupNames!=null && groupNames.length>0){
saveDictUsers(dictId,groupNames);
}
if(rankNames!=null && rankNames.length>0){
saveDictUsers(dictId,rankNames);
}
log.debug("***saveAllDictUser方法结束");
}
@Transactional(readOnly=false)
public void deleteDataDict(Long id){
log.debug("***deleteDataDict方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dictId:").append(id)
.append("]").toString());
List<DataDictionaryUser> ddus = dataDictionaryUserDao.getDDUs(id,getCompanyId());
for(DataDictionaryUser ddu:ddus){
dataDictionaryUserDao.delete(ddu);
}
List<DataDictionaryProcess> ddps = dataDictionaryProcessDao.getAllDictProcessesByDictId(id);
for(DataDictionaryProcess ddp : ddps){
dataDictionaryProcessDao.delete(ddp);
}
dataDictionaryDao.delete(id);
log.debug("***deleteDataDict方法结束");
}
@Transactional(readOnly=false)
public void deleteDataDict(String ids){
List<Long> dids=getList(ids);
for(int i=0;i<dids.size();i++){
List<DataDictionaryUser> ddus = dataDictionaryUserDao.getDDUs(dids.get(i),getCompanyId());
for(DataDictionaryUser ddu:ddus){
dataDictionaryUserDao.delete(ddu);
}
List<DataDictionaryProcess> ddps = dataDictionaryProcessDao.getAllDictProcessesByDictId(dids.get(i));
for(DataDictionaryProcess ddp : ddps){
dataDictionaryProcessDao.delete(ddp);
}
dataDictionaryDao.delete(dids.get(i));
}
}
public static List<Long> getList(String ids){
String[] dids=ids.split(",");
List<Long> id=new ArrayList<Long>();
for(int i=0;i<dids.length;i++){
id.add(Long.parseLong(dids[i]));
}
return id;
}
@Transactional(readOnly=false)
public void deleteDataDict(DataDictionary dict){
dataDictionaryDao.delete(dict);
}
public DataDictionary getDataDict(Long id){
if(id == null) throw new RuntimeException("没有给定查询数据字的查询条件: 数据字典的ID. ");
return dataDictionaryDao.get(id);
}
public Long getCompanyId(){
return ContextUtils.getCompanyId();
}
public Long getSystemId(){
return ContextUtils.getSystemId();
}
public void getDataDicts(Page<DataDictionary> dictPage,String typeNo,String typeName,String queryName){
log.debug("***getDataDicts方法开始");
log.debug(new StringBuilder("***")
.append("companyId:").append(getCompanyId()).toString());
if(StringUtils.isEmpty(typeNo) && StringUtils.isEmpty(typeName) && StringUtils.isEmpty(queryName)){
dataDictionaryDao.getDataDicts(dictPage,getCompanyId());
}else if(StringUtils.isEmpty(typeNo) && StringUtils.isNotEmpty(typeName)&& StringUtils.isEmpty(queryName)){
dataDictionaryDao.getDataDictsByTypeName(dictPage,getCompanyId(),typeName);
}else if(StringUtils.isNotEmpty(typeNo) && StringUtils.isEmpty(typeName)&& StringUtils.isEmpty(queryName) ){
dataDictionaryDao.getDataDictsByTypeNo(dictPage,getCompanyId(),typeNo);
}else if(StringUtils.isEmpty(typeNo) && StringUtils.isEmpty(typeName)&& StringUtils.isNotEmpty(queryName) ){
dataDictionaryDao.getDataDictsByInfo(dictPage,getCompanyId(),queryName);
}else if(!StringUtils.isEmpty(typeNo) && !StringUtils.isEmpty(typeName)&& StringUtils.isEmpty(queryName) ){
dataDictionaryDao.getDataDictsByTypeNoAndName(dictPage,getCompanyId(),typeNo,typeName);
}else if(StringUtils.isEmpty(typeNo) && StringUtils.isNotEmpty(typeName)&& StringUtils.isNotEmpty(queryName) ){
dataDictionaryDao.getDataDictsByInfoAndTypeName(dictPage,getCompanyId(),typeName,queryName);
}else if(StringUtils.isNotEmpty(typeNo) && StringUtils.isEmpty(typeName)&& StringUtils.isNotEmpty(queryName) ){
dataDictionaryDao.getDataDictsByInfoAndTypeNo(dictPage,getCompanyId(),typeNo,queryName);
}else{
dataDictionaryDao.getDataDictsByInfoAndTypeNoAndName(dictPage,getCompanyId(),typeNo,typeName,queryName);
}
log.debug("***getDataDicts方法结束");
}
public Object[] getDictProcessesByDictId(Long dictId){
log.debug("***getDictProcessesByDictId方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dictId:").append(dictId)
.append("]").toString());
Object[] result=new Object[2];
List<List<DataDictionaryProcess>> processResult=new ArrayList<List<DataDictionaryProcess>>();
List<DataDictionaryProcess> list = dataDictionaryProcessDao.getAllDictProcessesByDictId(dictId);
List<DataDictionaryProcess> processes=new ArrayList<DataDictionaryProcess>();
List<DataDictionaryProcess> processTaches=new ArrayList<DataDictionaryProcess>();
List<String[]> viewResult=new ArrayList<String[]>();
for(DataDictionaryProcess ddp:list){
String[] str=new String[2];
if(ddp.getTacheName()==null || "".equals(ddp.getTacheName())){
processes.add(ddp);
str[0]=ddp.getProcessDefinitionName();
str[1]=ddp.getProcessDefinitionId().toString();
}else{
processTaches.add(ddp);
str[0]=ddp.getProcessDefinitionName()+"["+ddp.getTacheName()+"]";
str[1]=ddp.getProcessDefinitionId().toString();
}
viewResult.add(str);
}
processResult.add(processes);
processResult.add(processTaches);
result[0]=processResult;
result[1]=viewResult;
log.debug(new StringBuilder("*** Result:[")
.append("processes:").append(processes)
.append("]").toString());
log.debug("***getDictProcessesByDictId方法结束");
return result;
}
/**
* 增加人员关联
* @param dictId
* @param users:userType;userName[loginName]/userType;deptName[deptId]/userType;workGroupName[workGroupId]
*/
@Transactional(readOnly=false)
public void saveDictUsers(Long dictId, String[] users){
log.debug("***saveDictUsers方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dictId:").append(dictId)
.append("users:").append(users)
.append("]").toString());
DataDictionaryUser ddu = null;
String name="";
String info="";//loginName/deptId,groupId
for(String user : users){
if(DataDictAllUsers.ALL_USERS.toString().equals(user)){
log.debug(new StringBuilder("*** “所有人员”保存")
.toString());
saveDictAllUsers(user,dictId);
}else{
log.debug(new StringBuilder("*** 非所有人员保存")
.toString());
ddu = new DataDictionaryUser();
ddu.setDictId(dictId);
Integer type=Integer.parseInt(user.substring(0,user.indexOf(";")));
name=user.substring(user.indexOf(";")+1,user.indexOf("["));
info=user.substring(user.indexOf("[")+1,user.indexOf("]"));
ddu.setType(getUserType(type));
if(type==0){//人员时
ddu.setLoginName(info);
}else{
ddu.setInfoId(Long.parseLong(info));
}
ddu.setInfoName(name);
ddu.setCompanyId(getCompanyId());
dataDictionaryUserDao.save(ddu);
log.debug(ddu);
}
}
log.debug("***saveDictUsers方法结束");
}
private DataDictUserType getUserType(Integer type){
if(type==0){
return DataDictUserType.USER;
}else if(type==1){
return DataDictUserType.DEPARTMENT;
}else if(type==2){
return DataDictUserType.WORKGROUP;
}else{
return DataDictUserType.RANK;
}
}
/**
* 当是“所有人员”时的保存操作
* */
@Transactional(readOnly=false)
private void saveDictAllUsers(String user,Long dictId){
log.debug("***saveDictAllUsers方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dictId:").append(dictId)
.append("user:").append(user)
.append("]").toString());
DataDictionaryUser ddu = null;
ddu = new DataDictionaryUser();
ddu.setDictId(dictId);
ddu.setType(DataDictUserType.USER);
ddu.setLoginName(DataDictAllUsers.ALL_USERS.toString());
ddu.setCompanyId(getCompanyId());
dataDictionaryUserDao.save(ddu);
log.debug(ddu);
log.debug("***saveDictAllUsers方法结束");
}
/**
* processes:processId;processName[tachName],....
* */
@Transactional(readOnly=false)
private void saveProcesses(DataDictionary dict,String[] processes){
log.debug("***saveProcesses方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dict:").append(dict)
.append("processes:").append(processes)
.append("]").toString());
DataDictionaryProcess ddp = null;
String processName="";
String tacheName="";
for(String processTache : processes){
ddp = new DataDictionaryProcess();
ddp.setDataDictionary(dict);
ddp.setProcessDefinitionId(Long.parseLong(processTache.substring(0, processTache.indexOf(";"))));
if(processTache.indexOf("[")<=0){
processName=processTache.substring(processTache.indexOf(";")+1,processTache.length());
ddp.setTacheName("");
}else{
processName=processTache.substring(processTache.indexOf(";")+1,processTache.indexOf("["));
tacheName=processTache.substring(processTache.indexOf("[")+1,processTache.indexOf("]"));
ddp.setTacheName(tacheName);
}
ddp.setProcessDefinitionName(processName);
dataDictionaryProcessDao.save(ddp);
log.debug(ddp);
}
log.debug("***saveProcesses方法结束");
}
/**
* 删除人员关联
* @param dictId
* @param users
*/
@Transactional(readOnly=false)
public void deleteDictUsers(Long dictId, String[] users){
for(String user : users){
dataDictionaryUserDao.deleteDdu(dictId, user, getCompanyId());
}
}
/**
* 根据类型查询所有关联的办理人信息:类型为:人员,部门,工作组
* @param dictId
* @param type:0:人员;1:部门;2:工作组
*/
public Object[] getDataDictUsers(Long dictId){
log.debug("***getDataDictUsersByType方法");
log.debug(new StringBuilder("*** Received parameter:[")
.append("dictId:").append(dictId)
.append("]").toString());
Object[] result = new Object[2];
List<List<DataDictionaryUser>> listResult=new ArrayList<List<DataDictionaryUser>>();
List<DataDictionaryUser> dduUsers=new ArrayList<DataDictionaryUser>();
List<DataDictionaryUser> depts=new ArrayList<DataDictionaryUser>();
List<DataDictionaryUser> workGroups=new ArrayList<DataDictionaryUser>();
List<DataDictionaryUser> dataRanks=new ArrayList<DataDictionaryUser>();
List<DataDictionaryUser> lists = dataDictionaryUserDao.getDDUs(dictId,getCompanyId());
StringBuffer sb=new StringBuffer();
String strResult="";
for(DataDictionaryUser ddu:lists){
if(ddu.getType()==DataDictUserType.USER){
dduUsers.add(ddu);
}else if(ddu.getType()==DataDictUserType.DEPARTMENT){
depts.add(ddu);
}else if(ddu.getType()==DataDictUserType.WORKGROUP){
workGroups.add(ddu);
}else{
dataRanks.add(ddu);
}
if(DataDictAllUsers.ALL_USERS.toString().equals(ddu.getLoginName())){
sb.append("所有人员");
}else{
sb.append(ddu.getInfoName());
}
sb.append(",");
}
if(lists!=null && lists.size()>0){
log.debug(new StringBuilder("*** Result:[")
.append("result:").append(sb.substring(0,sb.lastIndexOf(",")))
.append("]").toString());
log.debug("***getViewInfoByDictId方法结束");
strResult=sb.substring(0,sb.lastIndexOf(","));
}
listResult.add(dduUsers);
listResult.add(depts);
listResult.add(workGroups);
listResult.add(dataRanks);
result[0]=listResult;
result[1]=strResult;
return result;
}
/**
* 根据类别查询数据字典
* */
public List<DataDictionary> getDataDictsByTypeId(Long typeId,Long companyId){
return dataDictionaryDao.getDataDictsByTypeId(typeId,companyId);
}
/**
* 根据给定的条件查询数据字典
* @param condition
* @return
*/
public List<DataDictionary> queryDataDict(String condition, List<Object> values){
StringBuilder hql = new StringBuilder();
if(StringUtils.isEmpty(condition)){
hql.append("from DataDictionary dict where dict.companyId=? ");
}else{
hql.append("select dict from DataDictionary dict left join dict.dataDictionaryProcess process where dict.companyId=? ");
hql.append(condition);
}
Object[] objs = new Object[values.size()+1];
objs[0] = getCompanyId();
for(int i = 0; i < values.size(); i++){
objs[i+1] = values.get(i);
}
hql.append(" order by dict.displayIndex desc");
return dataDictionaryDao.find(hql.toString(), objs);
}
/**
* 根据数据字典查询人员
* @param dictIds
* @return
*/
public Set<String[]> getCandidate(List<Long> dictIds){
if(dictIds == null) throw new RuntimeException("没有给定查询数据字典办理人的查询条件: 数据字典的ID集合. ");
Set<String[]> loginNames = new HashSet<String[]>();
for(Long id : dictIds){
getCandidate(id, loginNames);
}
return loginNames;
}
public Set<String[]> getCandidate(Long dictId, Set<String[]> loginNames){
if(dictId == null) throw new RuntimeException("没有给定查询数据字典办理人的查询条件: 数据字典的ID. ");
List<DataDictionaryUser> users = dataDictionaryUserDao.find("from DataDictionaryUser u where u.companyId=? and u.dictId=?", getCompanyId(), dictId);
for(DataDictionaryUser user : users){
getCandidate(user, loginNames);
}
return loginNames;
}
private Set<String[]> getCandidate(DataDictionaryUser user, Set<String[]> loginNames){
switch (user.getType()){
//case PERSON : ;
case USER : loginNames.add(new String[]{user.getLoginName(), user.getInfoName()}); break;
//case DEPARTMENT : ;
case DEPARTMENT : getLoginNamesByDept(user.getInfoId(), loginNames); break;
//case WORKGROUP : ;
case WORKGROUP : getLoginNamesByWorkgroup(user.getInfoId(), loginNames); break;
//case RANK : ;
case RANK : getLoginNamesByRank(user.getInfoId(), loginNames); break;
}
return loginNames;
}
private void getLoginNamesByDept(Long deptId, Set<String[]> loginNames){
List<User> users = ApiFactory.getAcsService().getUsersByDepartmentId(deptId);
for(User user : users){
loginNames.add(new String[]{user.getLoginName(), user.getName()});
}
}
private void getLoginNamesByWorkgroup(Long wgId, Set<String[]> loginNames){
List<User> users = ApiFactory.getAcsService().getUsersByWorkgroupId(wgId);
for(User user : users){
loginNames.add(new String[]{user.getLoginName(), user.getName()});
}
}
private void getLoginNamesByRank(Long rankId, Set<String[]> loginNames){
List<Subordinate> ddrs = rankUserDao.getDataDictRankUsersByRankId(rankId);
for(Subordinate ddr : ddrs){
User user=ApiFactory.getAcsService().getUserById(ddr.getTargetId());
loginNames.add(new String[]{user.getLoginName(), user.getName()});
}
}
public List<DataDictionary> queryDataDict(String typeNo,DataDictUseType dataDictUseType){
if(StringUtils.isEmpty(typeNo)) throw new RuntimeException("没有给定查询数据字典集合的查询条件: 数据字典类型编号. ");
if(dataDictUseType ==null ) throw new RuntimeException("没有给定查询数据字典集合的查询条件: 用途[DataDictUseType]. ");
StringBuilder hql = new StringBuilder();
DataDictionaryType dictType=dataDictionaryTypeDao.getDictTypeByNo(typeNo, getCompanyId());
hql.append("from DataDictionary dict where dict.companyId=? ");
hql.append(" and (dict.typeNo=? ");
Object[] objs =null;
if(dictType.getTypeIds()!=null){
String[] ids=dictType.getTypeIds().split(",");
objs = new Object[ids.length+3];
for(int i=0;i<ids.length;i++){
dictType=dataDictionaryTypeDao.get(Long.parseLong(ids[i].trim()));
hql.append(" or dict.typeNo=? ");
objs[i+2] =dictType.getNo();
}
}else{
objs = new Object[3];
}
objs[0] = getCompanyId();
objs[1]=typeNo;
hql.append(") and dict.type=? ");
objs[objs.length-1] =dataDictUseType.getCode();
hql.append(" order by dict.typeNo, dict.displayIndex desc");
return dataDictionaryDao.find(hql.toString(), objs);
}
public List<String> getCandidate(String title){
if(StringUtils.isEmpty(title)) throw new RuntimeException("没有给定查询数据字典办理人登录名的查询条件: 数据字典标题. ");
//去掉重复人员
Set<String> sr=new HashSet<String>();
List<DataDictionaryUser> ddus=dataDictionaryDao.getCandidate(title);
for(DataDictionaryUser ddu:ddus){
if(ddu.getType().equals(0)){//人员时
sr.add(ddu.getLoginName());
}else if(ddu.getType().equals(1)){
List<User> list=ApiFactory.getAcsService().getUsersByDepartmentId(ddu.getInfoId());
for(User user:list){
sr.add(user.getLoginName());
}
}else{
List<User> list=ApiFactory.getAcsService().getUsersByWorkgroupId(ddu.getInfoId());
for(User user:list){
sr.add(user.getLoginName());
}
}
}
//根据权重排序
List<String> users=new ArrayList<String>();
users.addAll(sr);
//得到有序的登录名集合
List<String> resultUsers=new ArrayList<String>();
if(users.size()>0){
List<User> results=ApiFactory.getAcsService().getUsersByLoginNames(getCompanyId(),users);
Collections.sort(results, new Comparator<User>() {
public int compare(User user1, User user2) {
if(user1.getWeight()<user2.getWeight()){
return 1;
}
return 0;
}
});
for(User u:results){
resultUsers.add(u.getLoginName());
}
}
return resultUsers;
}
/**
* 根据数据字典查询人员和附加信息
* @param dictIds
* @return
*/
public List<String> getCandidateAddition(List<Long> dictIds) {
if(dictIds == null) throw new RuntimeException("没有给定查询数据字典及其备注的查询条件: 数据字典ID集合. ");
List<String> loginNames=new ArrayList<String>();
for(Long dictId:dictIds){
getCandidateAddition(dictId,loginNames);
}
return loginNames;
}
public List<String> getCandidateAddition(Long dictId, List<String> loginNames){
if(dictId == null) throw new RuntimeException("没有给定查询数据字典及其备注的查询条件: 数据字典ID. ");
if(loginNames == null) loginNames=new ArrayList<String>();
DataDictionary dd=dataDictionaryDao.get(dictId);
List<DataDictionaryUser> users = dataDictionaryUserDao.find("from DataDictionaryUser u where u.companyId=? and u.dictId=?", getCompanyId(), dictId);
for(DataDictionaryUser user : users){
getCandidateAddition(user, loginNames,dd.getRemark());
}
return loginNames;
}
private List<String> getCandidateAddition(DataDictionaryUser user, List<String> loginNames,String remark){
switch (user.getType()){
case USER : loginNames.add(user.getLoginName()+":"+remark); break;
case DEPARTMENT : getLoginNameAdditionsByDept(user.getInfoId(), loginNames,remark); break;
case WORKGROUP : getLoginNameAdditionsByWorkgroup(user.getInfoId(), loginNames,remark); break;
}
return loginNames;
}
private void getLoginNameAdditionsByDept(Long deptId,List<String> loginNames,String remark){
List<User> users = ApiFactory.getAcsService().getUsersByDepartmentId(deptId);
for(User user : users){
loginNames.add(user.getLoginName()+":"+remark);
}
}
private void getLoginNameAdditionsByWorkgroup(Long wgId,List<String> loginNames,String remark){
List<User> users = ApiFactory.getAcsService().getUsersByWorkgroupId(wgId);
for(User user : users){
loginNames.add(user.getLoginName()+":"+remark);
}
}
/**
* 根据数据字典查询人员
* @param dictIds
* @return HashMap
*/
public HashMap<String,String> getUserNames(List<Long> dictIds){
if(dictIds == null) throw new RuntimeException("没有给定查询数据字典办理人登陆名和办理人的查询条件: 数据字典的ID集合. ");
HashMap<String,String> loginNames = new HashMap<String,String>();
for(Long id : dictIds){
getUser(id, loginNames);
}
return loginNames;
}
public HashMap<String,String> getUser(Long dictId, HashMap<String,String> loginNames){
if(dictId == null) throw new RuntimeException("没有给定查询数据字典办理人登陆名和办理人的查询条件: 数据字典的ID. ");
if(loginNames == null) loginNames = new HashMap<String, String>();
List<DataDictionaryUser> users = dataDictionaryUserDao.find("from DataDictionaryUser u where u.companyId=? and u.dictId=?", getCompanyId(), dictId);
for(DataDictionaryUser user : users){
getUser(user, loginNames);
}
return loginNames;
}
private HashMap<String,String> getUser(DataDictionaryUser user, HashMap<String,String> loginNames){
switch (user.getType()){
//case PERSON : ;
case USER : loginNames.put(user.getLoginName(), user.getInfoName()); break;
//case DEPARTMENT : ;
case DEPARTMENT : getUserLoginNamesByDept(user.getInfoId(), loginNames); break;
//case WORKGROUP : ;
case WORKGROUP : getUserLoginNamesByWorkgroup(user.getInfoId(), loginNames); break;
//case RANK : ;
case RANK : getUserLoginNamesByRank(user.getInfoId(), loginNames); break;
}
return loginNames;
}
private void getUserLoginNamesByDept(Long deptId, HashMap<String,String> loginNames){
List<User> users = ApiFactory.getAcsService().getUsersByDepartmentId(deptId);
for(User user : users){
loginNames.put(user.getLoginName(), user.getName());
}
}
private void getUserLoginNamesByWorkgroup(Long wgId, HashMap<String,String> loginNames){
List<User> users = ApiFactory.getAcsService().getUsersByWorkgroupId(wgId);
for(User user : users){
loginNames.put(user.getLoginName(), user.getName());
}
}
private void getUserLoginNamesByRank(Long rankId, HashMap<String,String> loginNames){
List<Subordinate> ddrs = rankUserDao.getDataDictRankUsersByRankId(rankId);
for(Subordinate ddr : ddrs){
User user=ApiFactory.getAcsService().getUserById(ddr.getTargetId());
loginNames.put(user.getLoginName(), user.getName());
}
}
public List<DataDictionary> queryDataDicts(String loginName){
if(StringUtils.isEmpty(loginName)) throw new RuntimeException("没有给定查询数据字典的查询条件: 办理人登录名. ");
return dataDictionaryDao.getDataDicts(loginName, getCompanyId());
}
public List<DataDictionaryProcess> getAllDictProcessesByDictId(Long dictId,Long companyId){
return dataDictionaryProcessDao.getAllDictProcessesByDictId(dictId, companyId);
}
public List<DataDictionaryUser> getDDUs(Long dictId, Long companyId){
return dataDictionaryUserDao.getDDUs(dictId, companyId);
}
public DataDictionary getDataDictByTitle(String title){
return dataDictionaryDao.getDataDictByTitle(title);
}
@Transactional(readOnly=false)
public void saveDict(DataDictionary dict){
dataDictionaryDao.save(dict);
}
public DataDictionaryProcess getDictProcessByDef(Long defId,Long dictId,String tachName){
return dataDictionaryProcessDao.getDictProcessByDef(defId, dictId, tachName);
}
@Transactional(readOnly=false)
public void saveDictProcess(DataDictionaryProcess process){
dataDictionaryProcessDao.save(process);
}
public DataDictionaryUser getDictUserByType(Long dictId,DataDictUserType type,String loginName,Long infoId){
return dataDictionaryUserDao.getDictUserByType(dictId, type, loginName, infoId);
}
@Transactional(readOnly=false)
public void saveDictUser(DataDictionaryUser dictUser){
dataDictionaryUserDao.save(dictUser);
}
}