您的位置:首页 > 其它

impl

2016-05-12 00:00 204 查看
package com.paic.icss.gcc.inbound.pnc.monitor.biz.service.impl;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.paic.icss.common.util.DateUtil;
import com.paic.icss.common.util.LogUtil;
import com.paic.icss.gcc.inbound.pnc.monitor.biz.service.IntelligentSchedulingMonitorService;
import com.paic.icss.gcc.inbound.pnc.monitor.dto.IDispathMonitorSurveyScheduleDTO;
import com.paic.icss.gcc.inbound.pnc.monitor.dto.MonitorDispatchAreaDTO;
import com.paic.icss.gcc.inbound.pnc.monitor.dto.SurveyorLocateDTO;
import com.paic.icss.gcc.inbound.pnc.monitor.dto.WorkNumDTO;
import com.paic.icss.gcc.inbound.pnc.monitor.integration.dao.IntelligentSchedulingMonitorDAO;
import com.paic.pafa.app.biz.service.BaseService;
import com.paic.pafa.app.biz.service.BusinessServiceException;
import com.paic.pafa.app.integration.dao.PafaDAOException;

public class IntelligentSchedulingMonitorServiceImpl extends BaseService implements IntelligentSchedulingMonitorService{
//现场查勘
private final String LOCAL_SURVEY = "1";
//标的车损
private final String TARGET_CAR_ASSESSOR = "2";
//标的物损
private final String TARGET_OBJ_ASSESSOR = "4";
//三者车损
private final String THREE_CAR_ASSESSOR = "3";
//三者物损
private final String THREE_OBJ_ASSESSOR = "5";

private IntelligentSchedulingMonitorDAO intelligentSchedulingMonitorDAO ;

public IntelligentSchedulingMonitorDAO getIntelligentSchedulingMonitorDAO() {
return intelligentSchedulingMonitorDAO;
}

public void setIntelligentSchedulingMonitorDAO(
IntelligentSchedulingMonitorDAO intelligentSchedulingMonitorDAO) {
this.intelligentSchedulingMonitorDAO = intelligentSchedulingMonitorDAO;
}

public List querySurveyorDispathInfos(String regionSeq, String areaType){
List<IDispathMonitorSurveyScheduleDTO> schuleList =null;
try {
/*
* 表:T_AUTO_MONITOR_SURVEY_SCHEDULE
* 获取当天当前网格的所有查勘员值班信息
*/
List<IDispathMonitorSurveyScheduleDTO> schuleBashInfoList = intelligentSchedulingMonitorDAO.querySurveyorScheduleInfoListByRegionSeq(regionSeq, areaType);

//过滤,去除非值班时间内的UM,(1)唯一UM,(2)合并值班时间,(3)设置时间格式
schuleList = initCurrentTimeAndRegionSchuleList(schuleBashInfoList);
//clm_e_survey_locate表中获取120分钟内最新的查勘员坐标
List<SurveyorLocateDTO> surveyorLocateList = getCurrentLocate(schuleList);
//SOS_TASK_HANDLE_PROCESS表中查询工量,并根据DateAccept判断是否是当前值班时间内的工量
List<WorkNumDTO> workNumList = getWorkNum(schuleList);
//生成值班调度信息
genCurrentDispath(schuleList,surveyorLocateList,workNumList);
LogUtil.info(getClass(), "genCurrentDispath查询工量入参:schuleList"+schuleList+",surveyorLocateList:"+surveyorLocateList+",workNumList:"+workNumList+",出参schuleList:"+schuleList);
} catch (Exception e) {
LogUtil.printErrorInfo(getClass(), "querySurveyorDispathInfos查询网格内小车展示信息失败,入参regionSeq:"+regionSeq, e);
}
return schuleList;
}

private void genCurrentDispath(List<IDispathMonitorSurveyScheduleDTO> schuleList, List<SurveyorLocateDTO> surveyorLocateList,
List<WorkNumDTO> workNumList) {
for (IDispathMonitorSurveyScheduleDTO schule : schuleList) {
for (WorkNumDTO workNum : workNumList) {
if (schule.getUm().equalsIgnoreCase(workNum.getUm())) {
schule.setLocalSurveyFinishWorkNum(workNum.getLocalSurveyFinishWorkNum());
schule.setLocalSurveyUnFinishWorkNum(workNum.getLocalSurveyUnFinishWorkNum());
schule.setTargetCarAssessorFinishWorkNum(workNum.getTargetCarAssessorFinishWorkNum());
schule.setTargetCarAssessorUnFinishWorkNum(workNum.getTargetCarAssessorUnFinishWorkNum());
schule.setTargetObjAssessorFinishWorkNum(workNum.getTargetObjAssessorFinishWorkNum());
schule.setTargetObjAssessorUnFinishWorkNum(workNum.getTargetObjAssessorUnFinishWorkNum());
schule.setThreeCarAssessorFinishWorkNum(workNum.getThreeCarAssessorFinishWorkNum());
schule.setThreeCarAssessorUnFinishWorkNum(workNum.getThreeCarAssessorUnFinishWorkNum());
schule.setThreeObjAssessorFinishWorkNum(workNum.getThreeObjAssessorFinishWorkNum());
schule.setThreeObjAssessorUnFinishWorkNum(workNum.getThreeObjAssessorUnFinishWorkNum());
break;
}
}
for (SurveyorLocateDTO locate : surveyorLocateList) {
if (schule.getUm().equalsIgnoreCase(locate.getUm())) {
schule.setGpsX(locate.getGpsX());
schule.setGpsY(locate.getGpsY());
schule.setLastCoordinateTime(locate.getDateCreated());
break;
}
}
}
}

private List<WorkNumDTO> getWorkNum(List<IDispathMonitorSurveyScheduleDTO> schuleList) throws PafaDAOException {
if(schuleList == null ||schuleList.size()==0){
return null;
}
List<WorkNumDTO> afterFilterWorkNumList = null;
try {
//参照老版本,添加regionId
List<WorkNumDTO> workNumBashInfoList = intelligentSchedulingMonitorDAO.querySurveyorWorkNums(schuleList);
afterFilterWorkNumList = filterWorkNum(schuleList,workNumBashInfoList);
LogUtil.info(getClass(), "getWorkNum查询工量入参:schuleList"+schuleList+",出参workNumList:"+afterFilterWorkNumList);
} catch (Exception e) {
LogUtil.printErrorInfo(getClass(), "getWorkNum查询工量失败,入参schuleList:"+schuleList, e);
throw new PafaDAOException(e);
}

return afterFilterWorkNumList;
}

public List<WorkNumDTO> filterWorkNum(List<IDispathMonitorSurveyScheduleDTO> schuleList, List<WorkNumDTO> workNumList) {
List<WorkNumDTO> workNumDTOList = new ArrayList<WorkNumDTO>();

for (IDispathMonitorSurveyScheduleDTO schule : schuleList) {
if(workNumList == null || workNumList.size() ==0){
WorkNumDTO workNum = new WorkNumDTO();
workNum.setUm(schule.getUm());
workNumDTOList.add(workNum);
continue;
}

int localSurveyFinishWorkNum = 0;
int targetCarAssessorFinishWorkNum = 0;
int targetObjAssessorFinishWorkNum = 0;
int threeCarAssessorFinishWorkNum = 0;
int threeObjAssessorFinishWorkNum = 0;
int localSurveyUnFinishWorkNum = 0;
int targetCarAssessorUnFinishWorkNum = 0;
int targetObjAssessorUnFinishWorkNum = 0;
int threeCarAssessorUnFinishWorkNum = 0;
int threeObjAssessorUnFinishWorkNum = 0;

Date startTime = DateUtil.parseDate(schule.getStartTime(), "yyyy-MM-dd HH:mm:ss");
Date endTime = DateUtil.parseDate(schule.getEndTime(), "yyyy-MM-dd HH:mm:ss");
for (WorkNumDTO workNumDTO : workNumList) {
if(!schule.getUm().equalsIgnoreCase(workNumDTO.getUm())){
continue;
}
//sos_task_handle_process 派工区码是否是当前值班区域
if(!schule.getRegionId().equalsIgnoreCase(workNumDTO.getRegionId())){
continue;
}
Date acceptDate = DateUtil.parseDate(workNumDTO.getAcceptDate(), "yyyy-MM-dd HH:mm:ss");
if(!DateUtil.isBetweenStartTimeAndEndTime(acceptDate, startTime, endTime)){
continue;
}
if (workNumDTO.getStatus().equals("3")&&workNumDTO.getTaskAttribute().equals(TARGET_CAR_ASSESSOR)) {
targetCarAssessorFinishWorkNum++;
}
if (workNumDTO.getStatus().equals("3")&&workNumDTO.getTaskAttribute().equals(LOCAL_SURVEY)) {
localSurveyFinishWorkNum++;
}
if (workNumDTO.getStatus().equals("3")&&workNumDTO.getTaskAttribute().equals(TARGET_OBJ_ASSESSOR)) {
targetObjAssessorFinishWorkNum++;
}
if (workNumDTO.getStatus().equals("3")&&workNumDTO.getTaskAttribute().equals(THREE_CAR_ASSESSOR)) {
threeCarAssessorFinishWorkNum++;
}
if (workNumDTO.getStatus().equals("3")&&workNumDTO.getTaskAttribute().equals(THREE_OBJ_ASSESSOR)) {
threeObjAssessorFinishWorkNum++;
}

if ((workNumDTO.getStatus().equals("0")
||workNumDTO.getStatus().equals("1")
||workNumDTO.getStatus().equals("2"))
&&workNumDTO.getTaskAttribute().equals(TARGET_CAR_ASSESSOR)) {
targetCarAssessorUnFinishWorkNum++;
}
if ((workNumDTO.getStatus().equals("0")
||workNumDTO.getStatus().equals("1")
||workNumDTO.getStatus().equals("2"))
&&workNumDTO.getTaskAttribute().equals(LOCAL_SURVEY)) {
localSurveyUnFinishWorkNum++;
}
if ((workNumDTO.getStatus().equals("0")
||workNumDTO.getStatus().equals("1")
||workNumDTO.getStatus().equals("2"))
&&workNumDTO.getTaskAttribute().equals(TARGET_OBJ_ASSESSOR)) {
targetObjAssessorUnFinishWorkNum++;
}
if ((workNumDTO.getStatus().equals("0")
||workNumDTO.getStatus().equals("1")
||workNumDTO.getStatus().equals("2"))
&&workNumDTO.getTaskAttribute().equals(THREE_OBJ_ASSESSOR)) {
threeObjAssessorUnFinishWorkNum++;
}
if ((workNumDTO.getStatus().equals("0")
||workNumDTO.getStatus().equals("1")
||workNumDTO.getStatus().equals("2"))
&&workNumDTO.getTaskAttribute().equals(THREE_CAR_ASSESSOR)) {
threeCarAssessorUnFinishWorkNum++;
}
}
WorkNumDTO workNum = new WorkNumDTO();
workNum.setUm(schule.getUm());
workNum.setRegionId(schule.getRegionId());
workNum.setLocalSurveyFinishWorkNum(localSurveyFinishWorkNum);
workNum.setLocalSurveyUnFinishWorkNum(localSurveyUnFinishWorkNum);
workNum.setTargetCarAssessorFinishWorkNum(targetCarAssessorFinishWorkNum);
workNum.setTargetCarAssessorUnFinishWorkNum(targetCarAssessorUnFinishWorkNum);
workNum.setTargetObjAssessorFinishWorkNum(targetObjAssessorFinishWorkNum);
workNum.setTargetObjAssessorUnFinishWorkNum(targetObjAssessorUnFinishWorkNum);
workNum.setThreeCarAssessorFinishWorkNum(threeCarAssessorFinishWorkNum);
workNum.setThreeCarAssessorUnFinishWorkNum(threeCarAssessorUnFinishWorkNum);
workNum.setThreeObjAssessorFinishWorkNum(threeObjAssessorFinishWorkNum);
workNum.setThreeObjAssessorUnFinishWorkNum(threeObjAssessorUnFinishWorkNum);
workNumDTOList.add(workNum);
}
return workNumDTOList;
}

//查询位置
/*
* 场景1:
* 120分钟坐标唯一一条
* 场景2:
* 120分钟内没有坐标信息
* 场景3:
* 120分钟内有多条坐标信息
*/
private List<SurveyorLocateDTO> getCurrentLocate(List<IDispathMonitorSurveyScheduleDTO> schuleList) throws PafaDAOException {
List<SurveyorLocateDTO> locateList = null;
if(schuleList==null||schuleList.size()==0){
return null;
}
try {
//查询120分钟内查勘员的所有坐标
List<SurveyorLocateDTO> allLocate = intelligentSchedulingMonitorDAO.querySurveyorLocateList(schuleList);
//120分钟内最新坐标
locateList = filterLocate(allLocate);
LogUtil.info(getClass(), "getCurrentLocate获取120分钟内最新的查勘员坐标入参:schuleList"+schuleList+",出参locateList:"+locateList);
} catch (Exception e) {
LogUtil.printErrorInfo(getClass(), "getCurrentLocate获取120分钟内最新的查勘员坐标失败入参:schuleList"+schuleList, e);
throw new PafaDAOException(e);
}
return locateList;
}

public List<SurveyorLocateDTO> filterLocate(List<SurveyorLocateDTO> allLocate) {
List<SurveyorLocateDTO> locateList = new ArrayList<SurveyorLocateDTO>();
Set<String> umSet = new HashSet<String>();
//过滤出最新的坐标
for (SurveyorLocateDTO locateTemp : allLocate) {
if(umSet.contains(locateTemp.getUm())){
continue;
}
umSet.add(locateTemp.getUm());
SurveyorLocateDTO locate =new SurveyorLocateDTO();
locate.setUm(locateTemp.getUm());
locate.setGpsX(locateTemp.getGpsX());
locate.setGpsY(locateTemp.getGpsY());
locate.setDateCreated(locateTemp.getDateCreated());
locateList.add(locate);
}
return locateList;
}

/**
* 过滤有效数据、合并有效数据
* 1、时间格式化
* 2、过滤
* 过滤出当前网格处于值班状态的UM
* 3、合并
* 相同UM的多条值班信息合并
* @param schuleBashInfoList
* @return
* @throws Exception
*/
public List<IDispathMonitorSurveyScheduleDTO> initCurrentTimeAndRegionSchuleList(List<IDispathMonitorSurveyScheduleDTO> schuleBashInfoList) throws Exception {
List<IDispathMonitorSurveyScheduleDTO> schuleInfoList = new ArrayList<IDispathMonitorSurveyScheduleDTO>();
/*将开始时间、结束时间格式化为固定的日期格式
* 场景1:
* 开始时间小于结束时间
* 值班日期:2016.5.1,当前时间9:00,开始时间8:00,结束时间16:00
* 转换后
* 开始时间2016.5.1 8:00,结束时间:2016.5.1 16:00
* 场景2:
* 开始时间小于结束时间
* 值班日期:2016.5.1,当前时间19:00,开始时间18:00结束时间8:00,
* 转换后时间
* 开始时间2016.5.1 18:00,结束时间:2016.5.2 8:00
* 场景3:
* 开始时间小于结束时间
* 值班日期:2016.5.1,当前时间7:00,开始时间18:00结束时间8:00,
* 转换后时间
* 开始时间2016.4.30 18:00,结束时间:2016.5.1 8:00
*/
formatScheduleStartTimeAndEndTime(schuleBashInfoList);
//过滤值班列表
List<IDispathMonitorSurveyScheduleDTO> afterFilterSchuleList = filterScheduleInfo(schuleBashInfoList);
/*
* 将同一查勘员的当前区域的当前值班的多条值班信息合并
* 场景1:只有一条值班信息
* 元数据:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 合并后:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 场景2:两条数据 包含关系
* 元数据:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 值班信息2:startTime 2016.5.1 8:00,endTime:2016.5.1 18:00
* 合并后:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 18:00
*场景3:两条数据 相交关系
* 元数据:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 值班信息2:startTime 2016.5.1 10:00,endTime:2016.5.1 18:00
* 合并后:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 18:00
*/
schuleInfoList = mergeScheduleInfo(afterFilterSchuleList);
return schuleInfoList;
}

/**
* 将同一查勘员的当前区域的当前值班的多条值班信息合并
* 场景1:只有一条值班信息
* 元数据:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 合并后:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 场景2:两条数据 包含关系
* 元数据:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 值班信息2:startTime 2016.5.1 8:00,endTime:2016.5.1 18:00
* 合并后:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 18:00
*场景3:两条数据 相交关系
* 元数据:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 16:00
* 值班信息2:startTime 2016.5.1 10:00,endTime:2016.5.1 18:00
* 合并后:
* 查勘员A,网格region1
* 值班信息1:startTime 2016.5.1 8:00,endTime:2016.5.1 18:00
*/
public List<IDispathMonitorSurveyScheduleDTO> mergeScheduleInfo(List<IDispathMonitorSurveyScheduleDTO> afterFilterSchuleList) {
List<IDispathMonitorSurveyScheduleDTO> surveyScheduleList = new ArrayList<IDispathMonitorSurveyScheduleDTO>();
Set<String> umSet = new HashSet<String>();
if(afterFilterSchuleList == null || afterFilterSchuleList.size()==0){
return null;
}
for (IDispathMonitorSurveyScheduleDTO scheduleDTO1 : afterFilterSchuleList) {
if(umSet.contains(scheduleDTO1.getUm())){
continue;
}
umSet.add(scheduleDTO1.getUm());
IDispathMonitorSurveyScheduleDTO surveyScheduleDTO = new IDispathMonitorSurveyScheduleDTO();
surveyScheduleDTO.setUm(scheduleDTO1.getUm());
surveyScheduleDTO.setContactPhone(scheduleDTO1.getContactPhone());
surveyScheduleDTO.setRealName(scheduleDTO1.getRealName());
surveyScheduleDTO.setRegionName(scheduleDTO1.getRegionName());
surveyScheduleDTO.setStartTime(scheduleDTO1.getStartTime());
surveyScheduleDTO.setEndTime(scheduleDTO1.getEndTime());
surveyScheduleDTO.setRegionId(scheduleDTO1.getRegionId());
surveyScheduleDTO.setRegionSeq(scheduleDTO1.getRegionSeq());

for (IDispathMonitorSurveyScheduleDTO scheduleDTO2 : afterFilterSchuleList) {
if (scheduleDTO1.getUm().equals(scheduleDTO2.getUm())) {
String info = surveyScheduleDTO.getScheduleInfo() == null?"":surveyScheduleDTO.getScheduleInfo();
info += "<br>"+scheduleDTO2.getStartTime()+"至"+scheduleDTO2.getEndTime()+"负责"+scheduleDTO2.getRegionName();
surveyScheduleDTO.setScheduleInfo(info);

Date startTime1 = DateUtil.parseDate(surveyScheduleDTO.getStartTime(), "yyyy-MM-dd HH:mm:ss");
Date endTime1 = DateUtil.parseDate(surveyScheduleDTO.getEndTime(), "yyyy-MM-dd HH:mm:ss");
Date startTime2 = DateUtil.parseDate(scheduleDTO2.getStartTime(), "yyyy-MM-dd HH:mm:ss");
Date endTime2 = DateUtil.parseDate(scheduleDTO2.getEndTime(), "yyyy-MM-dd HH:mm:ss");

if (startTime1.compareTo(startTime2)>0) {
surveyScheduleDTO.setStartTime(DateUtil.parseDate(startTime2, "yyyy-MM-dd HH:mm:ss"));
}
if (endTime1.compareTo(endTime2)<0) {
surveyScheduleDTO.setEndTime(DateUtil.parseDate(endTime2, "yyyy-MM-dd HH:mm:ss"));
}

}
}
surveyScheduleList.add(surveyScheduleDTO);
}

return surveyScheduleList;
}

/**
* 过滤值班列表
* 场景1:
* 当前时间处于值班A的startTime和endTime之间,保留
* 场景2:
* 当前时间处于值班A的startTime和endTime之外,去除
* @param afterFormatTimeSchuleList
* @return
* @throws Exception
*/
public List<IDispathMonitorSurveyScheduleDTO> filterScheduleInfo(List<IDispathMonitorSurveyScheduleDTO> afterFormatTimeSchuleList) throws Exception {
List<IDispathMonitorSurveyScheduleDTO> scheduleList = new ArrayList<IDispathMonitorSurveyScheduleDTO>();
if(afterFormatTimeSchuleList == null || afterFormatTimeSchuleList.size()==0){
return null;
}
for (IDispathMonitorSurveyScheduleDTO schuleInfo : afterFormatTimeSchuleList) {
Date nowDate = new Date();
Date startDate = DateUtil.getDateTime(schuleInfo.getStartTime());
Date endDate = DateUtil.getDateTime(schuleInfo.getEndTime());
if(DateUtil.isBetweenStartTimeAndEndTime(nowDate, startDate, endDate)){
scheduleList.add(schuleInfo);
}
}
return scheduleList;
}

public void formatScheduleStartTimeAndEndTime(List<IDispathMonitorSurveyScheduleDTO> schuleBashInfoList) throws ParseException {
if(schuleBashInfoList == null || schuleBashInfoList.size()==0){
return ;
}
for (IDispathMonitorSurveyScheduleDTO iDispathMonitorSurveyScheduleDTO : schuleBashInfoList) {
String nowTime = DateUtil.parseDate(new Date(), "yyyy-MM-dd HH:mm:ss");
formatTime(iDispathMonitorSurveyScheduleDTO,nowTime);
}
}

/**
* 将开始时间、结束时间格式化为固定的日期格式
* 场景1:
* 开始时间小于结束时间
* 值班日期:2016.5.1,当前时间9:00,开始时间8:00,结束时间16:00
* 转换后
* 开始时间2016.5.1 8:00,结束时间:2016.5.1 16:00
* 场景2:
* 开始时间小于结束时间
* 值班日期:2016.5.1,当前时间19:00,开始时间18:00结束时间8:00,
* 转换后时间
* 开始时间2016.5.1 18:00,结束时间:2016.5.2 8:00
* 场景3:
* 开始时间小于结束时间
* 值班日期:2016.5.1,当前时间7:00,开始时间18:00结束时间8:00,
* 转换后时间
* 开始时间2016.4.30 18:00,结束时间:2016.5.1 8:00
* @param schuleBashInfoList
* @return
* @throws ParseException
*/
public void formatTime(IDispathMonitorSurveyScheduleDTO iDispathMonitorSurveyScheduleDTO,String nowTime) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
Date time = DateUtil.parseDate(nowTime, "yyyy-MM-dd HH:mm:ss");
String nowDate = DateUtil.parseDate(time, "yyyy-MM-dd");

String startTimeStr = iDispathMonitorSurveyScheduleDTO.getStartTime();
String endTimeStr = iDispathMonitorSurveyScheduleDTO.getEndTime();
Date startTime = sdf.parse(nowDate + " " + startTimeStr + ":00");
Date endTime = sdf.parse(nowDate + " " + endTimeStr + ":00");

if (startTime.compareTo(endTime) <= 0) {//开始时间<=结束时间
if (startTime.compareTo(time) <= 0 && time.compareTo(endTime) < 0) {
}
} else {//开始时间>结束时间
if (time.compareTo(startTime) >= 0) {
calendar.setTime(endTime);
calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1);
endTime = calendar.getTime();
} else {
calendar.setTime(startTime);
calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1);
startTime = calendar.getTime();
}
}
iDispathMonitorSurveyScheduleDTO.setStartTime(sdf.format(startTime));
iDispathMonitorSurveyScheduleDTO.setEndTime(sdf.format(endTime));
}

/**
* 获取查勘员排班信息列表,将同一查勘员的多条值班信息归并为一条
* @param surveyorUmList
* @param scheduleInfoList
* @return
*/
private List getSurveyorScheduleInfoList(List surveyorUmList, List scheduleInfoList) {
List surveyorScheduleInfoList = new ArrayList();
for(int i =0;i< surveyorUmList.size();i++){
Map surveyorScheduleInfoMap = getSurveyorSchedulMap(scheduleInfoList, (String) surveyorUmList.get(i));
surveyorScheduleInfoList.add(surveyorScheduleInfoMap);
}
return surveyorScheduleInfoList;
}

/**
* 将同一个查勘员的多条值班信息合并为一条
* 场景: 将1、2、3三条数据合并为4一条数据
* 合并前:
* 1、查勘员A,startTime 10:30,endTime 13:30,region_name a区
* 2、查勘员A,startTime 13:30,endTime 14:30,region_name b区
* 3、查勘员A,startTime 14:30,endTime 15:30,region_name c区
* 合并后:
* 4、查勘员A,
* 在10:30至13:30负责a区
* 在13:30至14:30负责b区
* 在14:30至15:30负责c区
* @param scheduleInfoList
* @param surveyorUm
* @return
*/
private Map getSurveyorSchedulMap(List scheduleInfoList, String surveyorUm) {
Map surveyorScheduleInfoMap = null;
String scheduleInfo = "";
for(int j =0;j<scheduleInfoList.size();j++){
Map scheduleMap = (Map) scheduleInfoList.get(j);
if(surveyorUm.equals((String)scheduleMap.get("LOW_USER_NAME"))){
if(surveyorScheduleInfoMap == null){
surveyorScheduleInfoMap = new HashMap();
surveyorScheduleInfoMap.put("umId", surveyorUm);
surveyorScheduleInfoMap.put("realName", scheduleMap.get("REAL_NAME"));
surveyorScheduleInfoMap.put("telphone", scheduleMap.get("CONTACT_PHONE"));
}
}
scheduleInfo += "<br>"+scheduleMap.get("START_TIME")+"至"+scheduleMap.get("END_TIME")+"负责"+scheduleMap.get("REGION_NAME");
}
surveyorScheduleInfoMap.put("scheduleInfo", scheduleInfo);
return surveyorScheduleInfoMap;
}

public List querySuveyors(Map paramMap) throws BusinessServiceException{
try{
return intelligentSchedulingMonitorDAO.querySuveyors(paramMap);
}catch(PafaDAOException e){
LogUtil.printErrorInfo(this.getClass(), "根据城市编码查询查勘员发生错误!",e);
throw new BusinessServiceException(e);
}
}

@Override
public List querySuveyorDispatchArea(Map paraMap) throws BusinessServiceException {
List suveyorDispatchAreaList = new ArrayList();
try{
List dispatchAreaList = intelligentSchedulingMonitorDAO.querySuveyorDispatchArea(paraMap);
for(int i=0;i<dispatchAreaList.size();i++) {
MonitorDispatchAreaDTO mdad = (MonitorDispatchAreaDTO)dispatchAreaList.get(i);
Map dispatchAreaMap = new HashMap();
dispatchAreaMap.put("boundary",mdad.getBoundary());
dispatchAreaMap.put("description",mdad.getDescription());
dispatchAreaMap.put("cityCode",mdad.getCityCode());
dispatchAreaMap.put("lowUserName",mdad.getLowUserName());
suveyorDispatchAreaList.add(dispatchAreaMap);
}
}catch(PafaDAOException e){
LogUtil.printErrorInfo(this.getClass(), "根据查勘员和排班日期查询查勘区发生错误!",e);
throw new BusinessServiceException(e);
}
return suveyorDispatchAreaList;
}

@Override
public List querySuveyorLocation(Map paraMap) throws BusinessServiceException {
try{
return intelligentSchedulingMonitorDAO.querySuveyorLocation(paraMap);
}catch(PafaDAOException e){
LogUtil.printErrorInfo(this.getClass(), "根据查勘员和排班日期查询当天查勘员位置坐标发生错误!",e);
throw new BusinessServiceException(e);
}
}

@Override
public List querySurveyLossArea(Map paraMap) throws BusinessServiceException {
List surveyLossAreaList = new ArrayList();
try{
List AreaList = intelligentSchedulingMonitorDAO.querySurveyLossArea(paraMap);
for(int i=0;i<AreaList.size();i++) {
MonitorDispatchAreaDTO mdad = (MonitorDispatchAreaDTO)AreaList.get(i);
Map dispatchAreaMap = new HashMap();
dispatchAreaMap.put("boundary",mdad.getBoundary());
dispatchAreaMap.put("description",mdad.getDescription());
dispatchAreaMap.put("cityCode",mdad.getCityCode());
dispatchAreaMap.put("cityName",mdad.getCityName());
dispatchAreaMap.put("regionId",mdad.getRegionId());
dispatchAreaMap.put("regionSeq",mdad.getRegionSeq());
dispatchAreaMap.put("scheduleType",mdad.getScheduleType());
dispatchAreaMap.put("areaCode",mdad.getAreaCode());
dispatchAreaMap.put("districtX", mdad.getDistrictX());
dispatchAreaMap.put("districtY", mdad.getDistrictY());
surveyLossAreaList.add(dispatchAreaMap);
}
}catch(PafaDAOException e){
LogUtil.printErrorInfo(this.getClass(), "根据区域码查询查勘区和定损区失败!",e);
throw new BusinessServiceException(e);
}
return surveyLossAreaList;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: