package com.cabletech.business.desktop.service.impl; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.cabletech.baseinfo.business.Service.BaseInfoProvider; import com.cabletech.baseinfo.business.entity.UserInfo; import com.cabletech.business.desktop.dao.ContractorResEquipDao; import com.cabletech.business.desktop.dao.DesktopDao; import com.cabletech.business.desktop.service.DesktopService; import com.cabletech.business.notice.model.Notice; import com.cabletech.business.notice.service.NoticeService; import com.cabletech.business.workflow.fault.service.FaultStatisticService; import com.cabletech.business.workflow.workorder.service.WorkOrderStatisticService; import com.cabletech.common.base.BaseDao; import com.cabletech.common.base.BaseServiceImpl; import com.cabletech.common.base.SysConstant; /** * 首页桌面业务服务处理接口实现 * * @author 杨隽 2011-11-28 * @author 杨隽 2011-11-30 添加信息类型常量与获取信息类型常量Map的方法 * @author 杨隽 2011-12-13 添加代维单位人员图表显示方法 * @author 杨隽 2012-04-27 添加资源专业类型KEY常量 * */ @Service @SuppressWarnings("rawtypes") public class DesktopServiceImpl extends BaseServiceImpl implements DesktopService { // 资源专业类型KEY public static final String BUSINESS_TYPE = "business_type"; // 资源专业类型名称KEY public static final String BUSINESS_TYPE_NAME = "business_type_name"; // 待办数量KEY public static final String WAIT_HANDLED_NUMBER = "wait_handled_number"; // 待办访问地址KEY public static final String URL_KEY = "url"; // 工作流定义KEY public static final String WORKFLOW_KEY = "workflow_key"; // 工作流名称KEY public static final String WORKFLOW_NAME = "workflow_name"; // 当前登录用户信息 private UserInfo userInfo; // 桌面服务Dao @Resource(name = "desktopDao") private DesktopDao desktopDao; // 公告信息管理业务处理 @Resource(name = "noticeServiceImpl") private NoticeService noticeBo; // 代维资源配备统计 @Resource(name = "contractorResEquipDao") private ContractorResEquipDao contractorResEquipDao; @Resource(name = "workOrderStatisticServiceImpl") private WorkOrderStatisticService workOrderStatisticService; @Resource(name = "faultStatisticServiceImpl") private FaultStatisticService faultStatisticService; @Override protected BaseDao getBaseDao() { // TODO Auto-generated method stub return null; } /** * 设置登录用户信息 * * @param user * 用户 */ @Override public void setUserInfo(UserInfo user) { // TODO Auto-generated method stub userInfo = user; } /** * 列举所有发布给当前用户查看的最近信息列表 * * @param noticeType * 公告类型 * @param count * 最近公告数量 */ @Override @Transactional public List<Map<String, Object>> getLatestNoticeList(String noticeType, String count) { // TODO Auto-generated method stub String condition = getNoticeCondition(noticeType, count); List<Map<String, Object>> list = noticeBo .getLatestNoticeList(condition); List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>(); for (int i = 0; i < list.size(); i++) { if (MapUtils.isEmpty(list.get(i))) { String url = ""; list.get(i).put(URL_KEY, url); } else { String url = NoticeService.ACCESS_URL; url += list.get(i).get("id"); list.get(i).put(URL_KEY, url); } resultList.add(list.get(i)); } return resultList; } /** * 获取当月会议日期字串列表 * * @return */ @Transactional(readOnly = true) public List<String> getMeetDateList() { Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH) + 1; int date = c.get(Calendar.DATE); StringBuffer conditionBuffer = new StringBuffer(""); conditionBuffer.append(" and ( "); conditionBuffer.append(" type='"); conditionBuffer.append(Notice.MEET_TYPE); conditionBuffer.append("' and s.person_id='"); conditionBuffer.append(userInfo.getPersonId()); conditionBuffer.append("') "); conditionBuffer.append(" and meet_time>=to_date('"); conditionBuffer.append(year); conditionBuffer.append("-"); conditionBuffer.append(month); conditionBuffer.append("-"); conditionBuffer.append(date); conditionBuffer.append("','yyyy-mm-dd') "); conditionBuffer.append(" and meet_time<add_months(to_date('"); conditionBuffer.append(year); conditionBuffer.append("-"); conditionBuffer.append(month); conditionBuffer.append("-01','yyyy-mm-dd'),1) "); List<Map<String, Object>> list = noticeBo .getLatestNoticeList(conditionBuffer.toString()); List<String> dateList = new ArrayList<String>(); for (int i = 0; list != null && i < list.size(); i++) { Map<String, Object> map = list.get(i); String monthStr = (String) map.get("month"); if (dateList.contains(monthStr)) { continue; } dateList.add(monthStr); } return dateList; } /** * 获取当天会议数量 * * @return */ @Transactional(readOnly = true) public int getTodayMeetNumber() { Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH) + 1; int date = c.get(Calendar.DATE); StringBuffer conditionBuffer = new StringBuffer(""); conditionBuffer.append(" and ( "); conditionBuffer.append(" type='"); conditionBuffer.append(Notice.MEET_TYPE); conditionBuffer.append("' and s.person_id='"); conditionBuffer.append(userInfo.getPersonId()); conditionBuffer.append("') "); conditionBuffer.append(" and meet_time>=to_date('"); conditionBuffer.append(year); conditionBuffer.append("-"); conditionBuffer.append(month); conditionBuffer.append("-"); conditionBuffer.append(date); conditionBuffer.append("','yyyy-mm-dd') "); conditionBuffer.append(" and meet_time<to_date('"); conditionBuffer.append(year); conditionBuffer.append("-"); conditionBuffer.append(month); conditionBuffer.append("-"); conditionBuffer.append(date); conditionBuffer.append("','yyyy-mm-dd')+1 "); conditionBuffer.append(" and exists(select regionid from view_region r where r.regionid=a.regionid start with r.regionid='" + userInfo.getRegionId() + "' connect by prior r.parentid=r.regionid)"); List<Map<String, Object>> list = noticeBo .getLatestNoticeList(conditionBuffer.toString()); if (CollectionUtils.isEmpty(list)) { return 0; } return list.size(); } /** * 获取信息类型 * * @return */ @Transactional public List<Map<String, Object>> getInformationTypeList() { // 获取信息类型 List<Map<String, Object>> informationTypeList = desktopDao .getDictionaryList(SysConstant.SYSDICTIONARY_TYPE_INFORMATION); return informationTypeList; } /** * 根据信息类型和当前用户组织信息查询条件 * * @param noticeType * String * @param count * String * @return String */ @Transactional private String getNoticeCondition(String noticeType, String count) { // TODO Auto-generated method stub StringBuffer buf = new StringBuffer(""); if (StringUtils.isNotBlank(noticeType)) { buf.append(" and type='"); buf.append(noticeType); buf.append("' "); } // 取最近条数 if (StringUtils.isNotBlank(count)) { buf.append(" and rowindex<='"); buf.append(count); buf.append("' "); } buf.append(" and ( "); buf.append(" (type='"); buf.append(Notice.NEWS_TYPE); buf.append("' ) "); buf.append(" or (type='"); buf.append(Notice.BULLETIN_TYPE); buf.append("' and s.person_id='"); buf.append(userInfo.getPersonId()); buf.append("'"); buf.append(" ) "); buf.append(" ) "); buf.append(" and exists(select regionid from view_region r where r.regionid=a.regionid start with r.regionid='" + userInfo.getRegionId() + "' connect by prior r.parentid=r.regionid)"); return buf.toString(); } /** * 代维资源配备 -- 统计列表 * * @param loginUser * 登录用户 * @return list */ @Transactional public List<Map<String, Object>> getContractorResEquipList( UserInfo loginUser) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); if (loginUser.isProvinceMobile()) {// 省移动用户 list = contractorResEquipDao .getContractorResEquipListByRegion(loginUser.getRegionId()); } else if (loginUser.isCityMobile()) {// 市移动用户 list = contractorResEquipDao.getContractorResEquipListByOrg( loginUser.getRegionId(), ""); } else if (loginUser.isContractor()) {// 代维用户 list = contractorResEquipDao.getContractorResEquipListByOrg( loginUser.getRegionId(), loginUser.getOrgId()); } else {// 其它用户 list = contractorResEquipDao.getContractorResEquipListByOrg( loginUser.getRegionId(), ""); } return list; } /** * 代维人员 -- 统计列表 * * @param loginUser * 登录用户 * @return list */ private List<Map<String, Object>> getContractorPersonList(UserInfo loginUser) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); if (loginUser.isProvinceMobile()) {// 省移动用户 list = contractorResEquipDao .getContractorPersonListByRegion(loginUser.getRegionId()); } else if (loginUser.isCityMobile()) {// 市移动用户 list = contractorResEquipDao.getContractorPersonListByOrg(loginUser .getRegionId()); } else if (loginUser.isContractor()) {// 代维用户 list = contractorResEquipDao.getContractorPersonListByPatrol( loginUser.getRegionId(), loginUser.getOrgId()); } else {// 其它用户 list = contractorResEquipDao.getContractorPersonListByOrg(loginUser .getRegionId()); } return list; } /** * 获取袋为单位人员显示图需要的数据 * * @param loginUser * UserInfo * @return String */ @Transactional public String getContractorPersonChartData(UserInfo loginUser) { List<Map<String, Object>> list = getContractorPersonList(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("PERSONNUM")); sb.append("]"); sb.append(","); } } if (sb.length() > 0) { jsonStr = sb.substring(0, sb.length() - 1); } else { jsonStr = "[]"; } return "[" + jsonStr + "]"; } /** * 超时故障派单 * * @param userInfo * UserInfo */ @Transactional public Map<String, Map<String, Object>> getOvertimeWorkOrderAndFaultNumberList( UserInfo userInfo) { Map<String, Map<String, Object>> map = new HashMap<String, Map<String, Object>>(); List<Map<String, Object>> overtimeWorkOrderNumList = workOrderStatisticService .getOvertimeWorkOrderStatisticResultList(userInfo); List<Map<String, Object>> overtimeFaultNumList = faultStatisticService .getOvertimeWorkOrderStatisticResultList(userInfo); for (int i = 0; overtimeWorkOrderNumList != null && i < overtimeWorkOrderNumList.size(); i++) { Map<String, Object> workOrderNumMap = overtimeWorkOrderNumList .get(i); String gid = (String) workOrderNumMap.get("gid"); workOrderNumMap.put("overtime_f_num", "0"); map.put(gid, workOrderNumMap); } for (int i = 0; overtimeFaultNumList != null && i < overtimeFaultNumList.size(); i++) { Map<String, Object> faultNumMap = overtimeFaultNumList.get(i); String gid = (String) faultNumMap.get("gid"); Map<String, Object> numMap = new HashMap<String, Object>(); if (map.containsKey(gid)) { numMap = map.get(gid); numMap.put("overtime_f_num", faultNumMap.get("overtime_f_num")); } else { numMap = faultNumMap; numMap.put("overtime_w_num", "0"); } map.put(gid, numMap); } return map; } }