package com.cabletech.business.desktop.service.impl;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import com.cabletech.baseinfo.business.entity.UserInfo;
import com.cabletech.business.desktop.dao.BaseWorkDao;
import com.cabletech.business.desktop.service.BaseWorkService;
import com.cabletech.common.base.BaseDao;
import com.cabletech.common.base.BaseServiceImpl;
import com.cabletech.common.base.SysConstant;
/**
* 基础模块服务
*
* @author zhaobi
* @author 杨隽 2012-05-17 去除无用的导入、局部变量和类成员
*
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Service
public class BaseWorkServiceImpl extends BaseServiceImpl implements
BaseWorkService {
@Resource(name = "baseWorkDao")
private BaseWorkDao baseWorkDao;
@Override
protected BaseDao getBaseDao() {
// TODO Auto-generated method stub
return baseWorkDao;
}
/**
* 到期资质 证书
*
* @param loginUser
* 登录用户
* @return list
*/
@Transactional
public List<Map<String, Object>> getValidperiodedCertificatesList(
UserInfo loginUser) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if (loginUser.isMobile()) {// 移动用户
list = baseWorkDao.getValidperiodedCertificatesList(
loginUser.getRegionId(), "");
} else {// 其它用户
list = baseWorkDao.getValidperiodedCertificatesList(
loginUser.getRegionId(), loginUser.getOrgId());
}
logger.debug(" getValidperiodedCertificatesList : " + list);
return list;
}
/**
* 维护持有终端数
*
* @param loginUser
* 登录用户
* @return list
*
*/
@Transactional
private List<Map<String, Object>> getContractorTerminalList(
UserInfo loginUser) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if (loginUser.isProvinceMobile()) {// 省移动用户
list = baseWorkDao.getContractorTerminalListByRegion(loginUser
.getRegionId());
} else if (loginUser.isCityMobile()) {// 市移动用户
list = baseWorkDao.getContractorTerminalListByOrg(loginUser
.getRegionId());
} else if (loginUser.isContractor()) {// 代维用户
list = baseWorkDao.getContractorTerminalListByPatrol(
loginUser.getRegionId(), loginUser.getOrgId());
} else {// 其它用户
list = baseWorkDao.getContractorTerminalListByOrg(loginUser
.getRegionId());
}
logger.debug(" getContractorPersonList : " + list);
return list;
}
/**
* 资源数量
*
* @param loginUser
* 登录用户
* @param bzType
* 专业类型
* @return List
*/
private List<Map<String, Object>> getResCountByUser(UserInfo loginUser,
String bzType) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if (loginUser.isProvinceMobile()) {// 省移动用户
list = baseWorkDao.getResCountListByRegion(loginUser.getRegionId(),
bzType);
} else if (loginUser.isCityMobile()) {// 市移动用户
list = baseWorkDao.getResCountListByOrg(loginUser.getRegionId(),
bzType);
} else if (loginUser.isContractor()) {// 代维用户
list = baseWorkDao.getResCountListByPatrol(loginUser.getRegionId(),
loginUser.getOrgId(), bzType);
} else {// 其它用户
list = baseWorkDao.getResCountListByOrg(loginUser.getRegionId(),
bzType);
}
logger.debug(" getContractorPersonList : " + list);
return list;
}
/**
* 线路公里数
*
* @param loginUser
* 登录用户
* @return List
*/
private List<Map<String, Object>> getLineCountbyUser(UserInfo loginUser) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if (loginUser.isProvinceMobile()) {// 省移动用户
list = baseWorkDao
.getLineCountListByRegion(loginUser.getRegionId());
} else if (loginUser.isCityMobile()) {// 市移动用户
list = baseWorkDao.getLineCountListByOrg(loginUser.getRegionId());
} else if (loginUser.isContractor()) {// 代维用户
list = baseWorkDao.getLineCountListByPatrol(
loginUser.getRegionId(), loginUser.getOrgId());
} else {// 其它用户
list = baseWorkDao.getLineCountListByOrg(loginUser.getRegionId());
}
logger.debug(" getLineCountbyUser : " + list);
return list;
}
/**
* 资源数量
*
* @param loginUser
* 登录用户
* @return List
*/
@Transactional
public Map<String, Object> getResLineCountList(UserInfo loginUser) {
List<Map<String, Object>> bzTypesList = loginUser.getBusinessTypes();
List namelist = new ArrayList();
// chart最后数据
Map<String, Object> chartdate = new HashMap<String, Object>();
if (null != bzTypesList && bzTypesList.size() > 0) {
// 图表中呈现数据
List series = new ArrayList();
for (int i = 0; i < bzTypesList.size(); i++) {
String bustypstr = bzTypesList.get(i).get("CODEVALUE")
.toString();
Map<String, Object> map = new HashMap<String, Object>();
if (SysConstant.usebtypeList().contains(bustypstr)) {
List<Map<String, Object>> resnum = null;
// 专业为线路取线路数据
if (SysConstant.DICTIONARY_FORMITEM_BUSINESSTYPE_C30
.equals(bustypstr)) {
resnum = getLineCountbyUser(loginUser);
} else {
// 其它取无线数据
String resType = SysConstant
.getResourceBusinessTypeMap().get(bustypstr);
resnum = getResCountByUser(loginUser, resType);
}
if (null != resnum && resnum.size() > 0) {
List reslist = new ArrayList();
for (int j = 0; j < resnum.size(); j++) {
if (!namelist.contains(resnum.get(j).get("NAME"))) {
namelist.add(resnum.get(j).get("NAME"));
}
reslist.add(Float.valueOf(resnum.get(j).get("NUM")
.toString()));
}
map.put("name", bzTypesList.get(i).get("LABLE")
.toString());
map.put("data", reslist);
series.add(map);
}
}
}
chartdate.put("xcategories", namelist);
chartdate.put("series", series);
return chartdate;
}
return null;
}
/*
* 获取终端图表需要的数据
*/
@Override
@Transactional
public String getTerminalChartData(UserInfo loginUser) {
List<Map<String, Object>> list = getContractorTerminalList(loginUser);
String jsonStr = "";
StringBuffer sb = new StringBuffer();
if (null != list && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map<String, Object> temp = list.get(i);
sb.append("[");
sb.append("'" + temp.get("NAME") + "'");
sb.append(",");
sb.append(temp.get("TERMINALNUM"));
sb.append("]");
sb.append(",");
}
}
if (sb.length() > 0) {
jsonStr = sb.substring(0, sb.length() - 1);
} else {
jsonStr = "[]";
}
return "[" + jsonStr + "]";
}
/**
* 根据当前用户信息进行首页离职率统计
*
* @param userInfo
* UserInfo 当前用户信息
* @return Map<String, List<String>> 首页离职率统计结果列表
*/
@Override
@Transactional(readOnly = true)
public List getLeavePersonStatisticResult(UserInfo userInfo) {
List data = new ArrayList();
// TODO Auto-generated method stub
Map<String, List<Float>> map = new HashMap<String, List<Float>>();
getLeavePersonNumMap(userInfo, map);
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map mapdata = new HashMap<String, Object>();
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
mapdata.put("name", key);
Object val = entry.getValue();
mapdata.put("data", val);
data.add(mapdata);
}
return data;
}
/**
* 获取离职人员数量MAP
*
* @param userInfo
* UserInfo
* @param map
* Map<String, List<Float>>
*/
private void getLeavePersonNumMap(UserInfo userInfo,
Map<String, List<Float>> map) {
Calendar c = Calendar.getInstance();
for (int month = 0; month < 12; month++) {
String yearMonth = c.get(Calendar.YEAR) + "-" + (month + 1);
List<Map<String, Object>> allNumList = getAllNumList(userInfo,
yearMonth);
List<Map<String, Object>> leaveNumList = getLeaveNumList(userInfo,
yearMonth);
for (int i = 0; allNumList != null && i < allNumList.size(); i++) {
Map<String, Object> allNumMap = allNumList.get(i);
if (MapUtils.isEmpty(allNumMap)) {
continue;
}
int allNum = Integer.parseInt((String) allNumMap.get("all_num"));
if (allNum == 0) {
continue;
}
String name = (String) allNumMap.get("gname");
if (StringUtils.isBlank(name)) {
continue;
}
putLeavePersonResultToMap(leaveNumList, allNum, name, map,month);
}
}
}
/**
* 离职人员结果
*
* @param leaveNumList
* leaveNumList
* @param allNum
* allNum
* @param name
* name
* @param map
* map
* @param month
* month
*/
private void putLeavePersonResultToMap(
List<Map<String, Object>> leaveNumList, int allNum, String name,
Map<String, List<Float>> map, int month) {
List<Float> numList = new ArrayList<Float>();
if (map.containsKey(name)) {
numList = map.get(name);
}
for (int i = numList.size(); i < month; i++) {
numList.add(0f);
}
for (int j = 0; leaveNumList != null && j < leaveNumList.size(); j++) {
Map<String, Object> leaveNumMap = leaveNumList.get(j);
if (MapUtils.isNotEmpty(leaveNumMap)) {
if (name.equals(leaveNumMap.get("gname"))) {
int leaveNum = Integer.parseInt((String) leaveNumMap.get("leave_num"));
double rate = 100.0d * leaveNum / allNum;
numList.add(new Float(rate));
}
} else {
numList.add(0f);
}
}
if (CollectionUtils.isEmpty(leaveNumList)) {
numList.add(0f);
}
map.put(name, numList);
}
/**
* 获取离职人数
*
* @param userInfo
* UserInfo
* @param yearMonth
* String
* @return
*/
private List<Map<String, Object>> getLeaveNumList(UserInfo userInfo,
String yearMonth) {
List<Map<String, Object>> leaveNumList;
if (userInfo.isProvinceMobile()) {
leaveNumList = baseWorkDao.getLeavePersonNumberByRegion(userInfo,
yearMonth);
} else {
leaveNumList = baseWorkDao.getLeavePersonNumberByOrg(userInfo,
yearMonth);
}
return leaveNumList;
}
/**
* 获取所有离职人员数据
*
* @param userInfo
* UserInfo
* @param yearMonth
* String
* @return
*/
private List<Map<String, Object>> getAllNumList(UserInfo userInfo,
String yearMonth) {
List<Map<String, Object>> allNumList;
if (userInfo.isProvinceMobile()) {
allNumList = baseWorkDao.getAllPersonNumberGroupByRegion(userInfo,
yearMonth);
} else {
allNumList = baseWorkDao.getAllPersonNumberGroupByOrg(userInfo,
yearMonth);
}
return allNumList;
}
}