/**
   * @author liushuaic
   * @throws ParseException
   * @date 2015/09/17 18:58 添加某一天的工作时间 1.判断这天是否可以 提交 2.删除之前的数据 根据 时间,UserId 3.添加新的数据 修改
   *     serviceSchedule 中的 isCanSelected 为1是已经做了选中 判断serviceSchedule 是否存在,存在修改,不存在添加
   *     4.添加serviceScheduleDetail *
   */
  public Map<String, Object> insertServiceScheduleDetail(Map<String, Object> paramData)
      throws ParseException {

    Map<String, Object> rtnMap = new HashMap<String, Object>();

    if (null != paramData.get("serviceDate") && null != paramData.get("timeQuantumIds")) {

      String userId = paramData.get("userId").toString();
      String serviceDate = paramData.get("serviceDate").toString();

      List timeQuantumIds = (ArrayList) paramData.get("timeQuantumIds");

      paramData.put("serviceUserId", userId);

      Calendar cl = Calendar.getInstance();
      Long currentDateTime = cl.getTimeInMillis();

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      Date submitDate = sdf.parse(serviceDate);
      Calendar ca = Calendar.getInstance();
      ca.setTime(submitDate);

      ServiceSchedule serviceSchedule = serviceScheduleManager.getServiceSchedule(paramData);
      if (null != serviceSchedule) {
        serviceScheduleManager.updateServiceScheduleIsCanSelected1(
            serviceSchedule.getServiceScheduleId());
      } else {
        serviceSchedule = new ServiceSchedule();
        serviceSchedule.setCreateTime(currentDateTime);
        serviceSchedule.setUpdateTime(currentDateTime);
        serviceSchedule.setIsCanSelected(Byte.valueOf("1"));
        serviceSchedule.setCreateUserId(Long.valueOf(userId));
        serviceSchedule.setServiceUserId(Long.valueOf(userId));
        serviceSchedule.setServiceYear(ca.get(Calendar.YEAR));
        serviceSchedule.setServiceMonth(ca.get(Calendar.MONTH) + 1);
        serviceSchedule.setServcieDay(ca.get(Calendar.DAY_OF_MONTH));
        serviceSchedule.setServiceDate(sdf.parse(serviceDate));
        serviceScheduleManager.insertServiceSchduleSelective(serviceSchedule);
      }
      ServiceScheduleDetail serviceScheduleDetail = new ServiceScheduleDetail();
      serviceScheduleDetail.setCreateTime(currentDateTime);
      serviceScheduleDetail.setUpdateTime(currentDateTime);
      serviceScheduleDetail.setServiceScheduleId(serviceSchedule.getServiceScheduleId());
      serviceScheduleDetail.setCreateUserId(Long.valueOf(userId));
      for (int i = 0; i < timeQuantumIds.size(); i++) {
        serviceScheduleDetail.setTimeQuantumId(Long.valueOf(timeQuantumIds.get(i).toString()));
        serviceScheduleManager.insertServiceScheduleDetail(serviceScheduleDetail);
      }

      rtnMap.put("status", ExceptionConstants.responseSuccess.responseSuccess.code);
      rtnMap.put("message", ExceptionConstants.responseSuccess.responseSuccess.message);
    } else {
      rtnMap.put("status", ExceptionConstants.parameterException.parameterException.errorCode);
      rtnMap.put("message", ExceptionConstants.parameterException.parameterException.errorMessage);
    }

    return rtnMap;
  }
  /**
   * @author liushuaic
   * @date 2015/09/17 15:50 查询某一个月的所有日期 1.查询出某一个月内的,所有的记录 2.没有记录的,自动进行补全,可以添加记录
   *     3.在用户点进入第二个页面时,如果那天没有 id 就需要,在方法中返回所有的 时间段,并设置没有选中
   *     <p>*
   */
  public Map<String, Object> getScheduleListByMonth(Map<String, Object> param) {

    Map<String, Object> rtnMap = new HashMap<String, Object>();

    if (null != param.get("year") && null != param.get("month")) {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

      String year = param.get("year").toString();
      String month = param.get("month").toString();
      String userId = param.get("userId").toString();

      Integer yearInt = Integer.valueOf(year);
      Integer monthInt = Integer.valueOf(month);
      Long userIdLon = Long.valueOf(userId);

      List<ServiceSchedule> scheduleList =
          serviceScheduleManager.getDayListByMonth(yearInt, monthInt, userIdLon);
      Calendar cl = Calendar.getInstance();
      cl.set(Calendar.YEAR, yearInt);
      cl.set(Calendar.MONTH, monthInt - 1);
      int d = cl.getActualMaximum(Calendar.DAY_OF_MONTH);

      List<ServiceSchedule> serviceSchedules = new ArrayList<ServiceSchedule>();

      for (int i = 1; i <= d; i++) {
        ServiceSchedule serviceSchedule = null;
        // 查找出,那天的对象,跳出并在集合中移除,以减少循环次数
        for (int j = 0; j < scheduleList.size(); j++) {
          int serviceDay = scheduleList.get(j).getServcieDay();
          if (i == serviceDay) {
            serviceSchedule = scheduleList.get(j);
            serviceSchedule.setIsCanSelected(Byte.valueOf("1"));
            serviceSchedule.setServiceDateStr(sdf.format(serviceSchedule.getServiceDate()));
            scheduleList.remove(j);
            break;
          }
        }
        if (null == serviceSchedule) {
          serviceSchedule = new ServiceSchedule();
          cl.set(Calendar.DATE, i);
          serviceSchedule.setServiceDate(cl.getTime());
          serviceSchedule.setServiceDateStr(sdf.format(cl.getTime()));
          serviceSchedule.setServcieDay(i);
          serviceSchedule.setServiceMonth(monthInt);
          serviceSchedule.setServiceYear(yearInt);
          // 0 表示是可以选择的
          serviceSchedule.setIsCanSelected((byte) isCanSubmit(cl.getTime()));
        }
        serviceSchedules.add(serviceSchedule);
      }
      rtnMap.put("data", serviceSchedules);
      rtnMap.put("status", ExceptionConstants.responseSuccess.responseSuccess.code);
      rtnMap.put("message", ExceptionConstants.responseSuccess.responseSuccess.message);
    } else {
      rtnMap.put("status", ExceptionConstants.parameterException.parameterException.errorCode);
      rtnMap.put("message", ExceptionConstants.parameterException.parameterException.errorMessage);
    }

    return rtnMap;
  }
  /**
   * @author liushuaic
   * @throws ParseException
   * @date 2015/09/17 18:49 获取某一天的具体工作内容 *
   */
  public Map<String, Object> getServiceScheduleDetail(Map<String, Object> paramData)
      throws ParseException {
    Map<String, Object> rtnMap = new HashMap<String, Object>();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    System.out.println("接收到请求的时间:" + sdf2.format(new Date()));
    if (null != paramData.get("serviceDate")) {
      String userId = paramData.get("userId").toString();
      String serviceDate = paramData.get("serviceDate").toString();

      Map<String, Object> queryParam = new HashMap<String, Object>();

      queryParam.put("userId", userId);
      queryParam.put("serviceDate", serviceDate);

      Map<String, Object> rtnData = new HashMap<String, Object>();
      List<Map<String, Object>> data =
          serviceScheduleManager.getServiceScheduleDetailByUserIdAndSelectDate(queryParam);

      rtnData.put("data", data);

      // TODO 业务方法判断是否可以提交
      boolean haveDetail = false;
      for (Map<String, Object> detail : data) {
        if (detail.containsKey("serviceScheduleDetailId")) {
          haveDetail = true;
          break;
        }
      }
      if (haveDetail) {
        rtnData.put("isCanSubmit", 1);
      } else {
        rtnData.put("isCanSubmit", isCanSubmitForDetail(sdf.parse(serviceDate)));
      }

      rtnMap.put("data", rtnData);
      rtnMap.put("status", ExceptionConstants.responseSuccess.responseSuccess.code);
      rtnMap.put("message", ExceptionConstants.responseSuccess.responseSuccess.message);
    } else {
      rtnMap.put("status", ExceptionConstants.parameterException.parameterException.errorCode);
      rtnMap.put("message", ExceptionConstants.parameterException.parameterException.errorMessage);
    }

    System.out.println("查询并返回结果的时间的时间:" + sdf2.format(new Date()));
    return rtnMap;
  }