Last active
August 29, 2015 14:09
-
-
Save gitbricho/7cfd50a5121de2e4e333 to your computer and use it in GitHub Desktop.
healthcare: com.itrane.healthcare.controller.VodListController
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* バイタルに関する処理をコントロールする. | |
*/ | |
@Controller | |
public class VodController { | |
final static private Logger log = LoggerFactory.getLogger(VodController.class); | |
final static private int DISP_PERIOD = 7; | |
final static private String DATE_FORMAT = "yyyy/MM/dd"; | |
final static private String NAVIBTN_ENABLE = "可"; | |
final static private String NAVIBTN_DISABLE = "不可"; | |
final static private String CMD_KEY = "vodListCmd"; | |
@Autowired | |
private VodRepository vodRepo; | |
@Autowired | |
private VodService vodService; | |
@Autowired | |
private VitalMstRepository vmRepo; | |
//バイタルマスター をリクエスト時に Modelにセット | |
@ModelAttribute("vms") | |
private List<VitalMst> getVitalMst() { | |
List<VitalMst> vms = vmRepo.findAll(); | |
return vms; | |
} | |
/** | |
* 過去一週間のバイタル一覧を表示する. | |
* | |
* @return | |
*/ | |
@RequestMapping(value="/vodList", method = RequestMethod.GET) | |
public String getVodList(Model model, WebRequest request) { | |
DateTime dtEnd = DateTime.now(); | |
DateTime dtStart = dtEnd.minusDays(DISP_PERIOD-1); | |
List<Vod> vods = vodService.findBySokuteiBiBetween( | |
dtStart.toString(DATE_FORMAT), dtEnd.toString(DATE_FORMAT)); | |
List<VitalMst> vms = vmRepo.findAll(); | |
String prev = checkPrev(dtStart, vods); | |
String next = NAVIBTN_DISABLE; | |
VodListCmd cmd = new VodListCmd(prev, next, vms, vods, dtStart); | |
request.setAttribute(CMD_KEY, cmd, RequestAttributes.SCOPE_SESSION); | |
model.addAttribute(CMD_KEY, cmd); | |
return "/vod/vodList"; | |
} | |
@RequestMapping(value = "/prevWeek", method = RequestMethod.GET) | |
public String prevWeek(Model model, WebRequest request) { | |
VodListCmd cmd = (VodListCmd)request.getAttribute(CMD_KEY, | |
RequestAttributes.SCOPE_SESSION); | |
if (cmd.getPrev().equals(NAVIBTN_ENABLE)) { | |
DateTime dtStart = cmd.getStartDt(); | |
DateTime dtPrevStart = dtStart.minusDays(DISP_PERIOD); | |
DateTime dtPrevEnd = dtPrevStart.plusDays(DISP_PERIOD-1); | |
List<Vod> vods = vodService.findBySokuteiBiBetween( | |
dtPrevStart.toString(DATE_FORMAT), dtPrevEnd.toString(DATE_FORMAT)); | |
cmd.setVods(vods); | |
cmd.setPrev(checkPrev(dtPrevStart, vods)); | |
cmd.setNext(NAVIBTN_ENABLE); | |
cmd.setStartDt(dtPrevStart); | |
} | |
model.addAttribute(CMD_KEY, cmd); | |
return "/vod/vodList"; | |
} | |
@RequestMapping(value = "/nextWeek", method = RequestMethod.GET) | |
public String nextWeek(Model model, WebRequest request) { | |
VodListCmd cmd = (VodListCmd)request.getAttribute(CMD_KEY, | |
RequestAttributes.SCOPE_SESSION); | |
if (cmd.getNext().equals(NAVIBTN_ENABLE)) { | |
DateTime dtStart = cmd.getStartDt(); | |
DateTime dtNextStart = dtStart.plusDays(DISP_PERIOD); | |
DateTime dtNextEnd = dtNextStart.plusDays(DISP_PERIOD-1); | |
List<Vod> vods = vodService.findBySokuteiBiBetween( | |
dtNextStart.toString(DATE_FORMAT), dtNextEnd.toString(DATE_FORMAT)); | |
cmd.setVods(vods); | |
cmd.setPrev(NAVIBTN_ENABLE); | |
cmd.setNext(checkNext(dtNextStart)); | |
cmd.setStartDt(dtNextStart); | |
} | |
model.addAttribute(CMD_KEY, cmd); | |
return "/vod/vodList"; | |
} | |
// 前週を表示可能か判定する | |
private String checkPrev(DateTime dtPrevStart, List<Vod> vods) { | |
if (vods.size() < DISP_PERIOD) { | |
return NAVIBTN_DISABLE; | |
} else { | |
List<Vod> prevVods = vodRepo.findBySokuteiBi( | |
dtPrevStart.minusDays(1).toString(DATE_FORMAT)); | |
if (prevVods.size()==0) { | |
return NAVIBTN_DISABLE; | |
} | |
} | |
return NAVIBTN_ENABLE; | |
} | |
// 次週を表示可能か判定する | |
private String checkNext(DateTime startDt) { | |
if (startDt.plusDays(8).isAfter(DateTime.now())) { | |
return NAVIBTN_DISABLE; | |
} | |
return NAVIBTN_ENABLE; | |
} | |
//=========== | |
// チャート | |
//=========== | |
/** | |
* 血糖値のチャート. | |
* @return チャートデータ | |
*/ | |
@SuppressWarnings("unchecked") | |
@RequestMapping(value = "showBsChart", method = RequestMethod.POST) | |
@ResponseBody | |
public Object[][] showBsChart(WebRequest request) { | |
VodListCmd cmd = (VodListCmd)request.getAttribute(CMD_KEY, | |
RequestAttributes.SCOPE_SESSION); | |
DateTime dtStart = cmd.getStartDt(); | |
DateTime dtEnd = dtStart.plusDays(DISP_PERIOD-1); | |
List<Vod> vods = vodService.findBySokuteiBiBetween( | |
dtStart.toString(DATE_FORMAT), dtEnd.toString(DATE_FORMAT)); | |
int rows = vods.size() + 1; //ヘッダ分を追加 | |
int cols = 6; | |
Object[][] result = new Object[rows][cols]; | |
int row=0, col=0; | |
result[row][col++] = "日付"; | |
result[row][col++] = "空腹時"; | |
result[row][col++] = "朝食後"; | |
result[row][col++] = "昼食後"; | |
result[row][col++] = "夕食後"; | |
result[row][col++] = "平均値"; | |
row++; | |
col = 0; | |
for (Vod vod: vods) { | |
result[row][col++] = vod.getSokuteiBi(); | |
double sum = 0; | |
for(Vital vt: vod.getVitals()) { | |
if (vt.getName().endsWith("血糖")) { | |
result[row][col++] = new Double(vt.getSokuteiTi()); | |
sum = sum + Double.parseDouble(vt.getSokuteiTi()); | |
} | |
} | |
result[row][col++] = new Double(sum/4); | |
row++; | |
col=0; | |
} | |
return result; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment