package com.mossle.workcal.web; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import com.mossle.api.tenant.TenantHolder; import com.mossle.core.mapper.JsonMapper; import com.mossle.workcal.persistence.domain.WorkcalRule; import com.mossle.workcal.persistence.manager.WorkcalPartManager; import com.mossle.workcal.persistence.manager.WorkcalRuleManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("workcal") public class WorkcalController { private static Logger logger = LoggerFactory .getLogger(WorkcalController.class); public static final int STATUS_WEEK = 0; public static final int STATUS_HOLIDAY = 1; public static final int STATUS_HOLIDAY_TO_WORKDAY = 2; public static final int STATUS_WORKDAY_TO_HOLIDAY = 3; private WorkcalPartManager workcalPartManager; private WorkcalRuleManager workcalRuleManager; private JsonMapper jsonMapper = new JsonMapper(); private TenantHolder tenantHolder; @RequestMapping("workcal-view") public String list( @RequestParam(value = "year", required = false) Integer year, Model model) { String tenantId = tenantHolder.getTenantId(); if (year == null) { year = Calendar.getInstance().get(Calendar.YEAR); } // 每周的工作规则 List<WorkcalRule> workcalRules = workcalRuleManager.find( "from WorkcalRule where year=? and status=? and tenantId=?", year, STATUS_WEEK, tenantId); Set<Integer> weeks = new HashSet<Integer>(); for (WorkcalRule workcalRule : workcalRules) { weeks.add(Integer.valueOf(workcalRule.getWeek() - 1)); } try { model.addAttribute("weeks", jsonMapper.toJson(weeks)); } catch (IOException ex) { logger.error(ex.getMessage(), ex); } DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); // 特殊日期 List<WorkcalRule> extraWorkcalRules = workcalRuleManager.find( "from WorkcalRule where year=? and status<>?", year, STATUS_WEEK); List<Map<String, String>> holidays = new ArrayList<Map<String, String>>(); List<Map<String, String>> workdays = new ArrayList<Map<String, String>>(); List<Map<String, String>> extrdays = new ArrayList<Map<String, String>>(); for (WorkcalRule workcalRule : extraWorkcalRules) { Map<String, String> day = new HashMap<String, String>(); day.put("date", dateFormat.format(workcalRule.getWorkDate())); day.put("name", workcalRule.getName()); if (workcalRule.getStatus() == STATUS_HOLIDAY) { holidays.add(day); } else if (workcalRule.getStatus() == STATUS_HOLIDAY_TO_WORKDAY) { workdays.add(day); } else { extrdays.add(day); } } try { model.addAttribute("holidays", jsonMapper.toJson(holidays)); } catch (IOException ex) { logger.error(ex.getMessage(), ex); } try { model.addAttribute("workdays", jsonMapper.toJson(workdays)); } catch (IOException ex) { logger.error(ex.getMessage(), ex); } try { model.addAttribute("extrdays", jsonMapper.toJson(extrdays)); } catch (IOException ex) { logger.error(ex.getMessage(), ex); } return "workcal/workcal-view"; } // ~ ====================================================================== @Resource public void setWorkcalPartManager(WorkcalPartManager workcalPartManager) { this.workcalPartManager = workcalPartManager; } @Resource public void setWorkcalRuleManager(WorkcalRuleManager workcalRuleManager) { this.workcalRuleManager = workcalRuleManager; } @Resource public void setTenantHolder(TenantHolder tenantHolder) { this.tenantHolder = tenantHolder; } }