Java tutorial
/* * Copyright 2012-2014 sammyun.com.cn. All rights reserved. * Support: http://www.sammyun.com.cn * License: http://www.sammyun.com.cn/license */ package com.sammyun.controller.console; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import com.fasterxml.jackson.databind.node.ObjectNode; import com.sammyun.FileInfo.FileType; import com.sammyun.Filter; import com.sammyun.Filter.Operator; import com.sammyun.Message; import com.sammyun.Pageable; import com.sammyun.Setting; import com.sammyun.entity.Admin; import com.sammyun.entity.Area; import com.sammyun.entity.BaseEntity.Save; import com.sammyun.entity.ExcelMessage; import com.sammyun.entity.Member; import com.sammyun.entity.Member.Gender; import com.sammyun.entity.Member.MemberType; import com.sammyun.entity.dict.DictSchool; import com.sammyun.huanxin.EasemobIMUsers; import com.sammyun.service.AdminService; import com.sammyun.service.AreaService; import com.sammyun.service.ExcelService; import com.sammyun.service.MemberAttributeService; import com.sammyun.service.MemberService; import com.sammyun.service.dict.DictStudentService; import com.sammyun.util.EduUtil; import com.sammyun.util.ExcelImportUtil; import com.sammyun.util.JsonUtils; import com.sammyun.util.SettingUtils; /** * Controller - * * @author Sencloud Team * @version 3.0 */ @Controller("adminMemberController") @RequestMapping("/console/member") public class MemberController extends BaseController { @Resource(name = "memberServiceImpl") private MemberService memberService; @Resource(name = "memberAttributeServiceImpl") private MemberAttributeService memberAttributeService; @Resource(name = "areaServiceImpl") private AreaService areaService; @Resource(name = "adminServiceImpl") private AdminService adminService; @Resource(name = "dictStudentServiceImpl") private DictStudentService dictStudentService; @Resource(name = "excelServiceImpl") private ExcelService excelService; @Resource(name = "easemobIMUsers") private EasemobIMUsers easemobIMUsers; /** * ???? */ @RequestMapping(value = "/check_username", method = RequestMethod.GET) public @ResponseBody boolean checkUsername(String username) { if (StringUtils.isEmpty(username)) { return false; } if (memberService.usernameDisabled(username) || memberService.usernameExists(username)) { return false; } else { return true; } } /** * E-mail? */ @RequestMapping(value = "/check_email", method = RequestMethod.GET) public @ResponseBody boolean checkEmail(String previousEmail, String email) { if (StringUtils.equalsIgnoreCase(previousEmail, email)) { return true; } if (memberService.emailExists(email)) { return false; } else { return true; } } /** * E-mail? ? */ @RequestMapping(value = "/add_check_email", method = RequestMethod.GET) public @ResponseBody boolean addCheckEmail(String email) { if (StringUtils.isEmpty(email)) { return false; } List<Member> members = memberService.findAll(); for (int i = 0; i < members.size(); i++) { Member member = members.get(i); String getEmail = member.getEmail(); if (memberService.emailUnique(getEmail, email)) { return false; } } return true; } /** * ?? */ @RequestMapping(value = "/check_mobile", method = RequestMethod.GET) public @ResponseBody boolean checkMobile(String previousMobile, String mobile) { if (StringUtils.equalsIgnoreCase(previousMobile, mobile)) { return true; } if (memberService.mobileUnique(previousMobile, mobile)) { return false; } else { return true; } } /** * ?? ? */ @RequestMapping(value = "/add_check_mobileNumber", method = RequestMethod.GET) public @ResponseBody boolean addCheckMobile(String mobile) { if (StringUtils.isEmpty(mobile)) { return false; } List<Member> members = memberService.findAll(); for (int i = 0; i < members.size(); i++) { Member member = members.get(i); String getMobile = member.getMobile(); if (memberService.emailUnique(getMobile, mobile)) { return false; } } if (memberService.usernameDisabled(mobile) || memberService.usernameExists(mobile)) { return false; } return true; } /** * ?? */ @RequestMapping(value = "/check_vipCode", method = RequestMethod.GET) public @ResponseBody boolean checkVipCode(String previousVipCode, String vipCode) { if (StringUtils.isEmpty(vipCode)) { return true; } if (memberService.vipCodeUnique(previousVipCode, vipCode)) { return false; } else { return true; } } /** * ?? */ @RequestMapping(value = "/add_check_idCard", method = RequestMethod.GET) public @ResponseBody boolean addCheckIdCard(String idCard) { if (StringUtils.isEmpty(idCard)) { return true; } if (memberService.idCardUnique(idCard)) { return false; } else { return true; } } /** * ?? */ @RequestMapping(value = "/check_idCard", method = RequestMethod.GET) public @ResponseBody boolean checkIdCard(String previousIdCard, String idCard) { if (StringUtils.equalsIgnoreCase(previousIdCard, idCard)) { return true; } if (memberService.idCardUnique(idCard)) { return false; } else { return true; } } /** * */ @RequestMapping(value = "/view", method = RequestMethod.GET) public String view(Long id, ModelMap model) { model.addAttribute("genders", Gender.values()); model.addAttribute("memberAttributes", memberAttributeService.findList()); model.addAttribute("member", memberService.find(id)); model.addAttribute("menuId", Member.class.getSimpleName()); return "/console/member/view"; } /** * */ @RequestMapping(value = "/list", method = RequestMethod.GET) public String list(Pageable pageable, MemberType memberType, String mobile, String searchName, ModelMap model, HttpServletRequest request) { String meunId = Member.class.getSimpleName(); if (null == memberType) { memberType = MemberType.patriarch; meunId = Member.class.getSimpleName(); } if (memberType.equals(MemberType.teacher)) { meunId = Member.class.getSimpleName(); } else if (memberType.equals(MemberType.patriarch)) { meunId = "MemberPatriarch"; } else { meunId = Member.class.getSimpleName(); } if (mobile != null) { Filter filter = new Filter("mobile", Operator.like, "%" + mobile + "%"); pageable.addFilters(filter); model.addAttribute("mobile", mobile); } if (searchName != null) { Filter realNameFilter = new Filter("realName", Operator.like, "%" + searchName + "%"); pageable.addFilters(realNameFilter); model.addAttribute("searchName", searchName); } DictSchool dictSchool = adminService.getCurrentDictSchool(); Filter dictSchoolFilter = new Filter("dictSchool", Operator.eq, dictSchool); Filter memberTypeFilter = new Filter("memberType", Operator.eq, memberType); pageable.addFilters(dictSchoolFilter); pageable.addFilters(memberTypeFilter); model.addAttribute("page", memberService.findPage(pageable)); model.addAttribute("menuId", meunId); model.addAttribute("memberType", memberType); return "/console/member/list"; } /** * */ @RequestMapping(value = "/add", method = RequestMethod.GET) public String add(ModelMap model, MemberType memberType, HttpServletRequest request) { String meunId = Member.class.getSimpleName(); if (null == memberType) { memberType = MemberType.teacher; meunId = Member.class.getSimpleName(); } if (memberType.equals(MemberType.teacher)) { meunId = Member.class.getSimpleName(); } else if (memberType.equals(MemberType.patriarch)) { meunId = "MemberPatriarch"; } else { meunId = Member.class.getSimpleName(); } Setting setting = SettingUtils.get(); model.addAttribute("setting", setting); model.addAttribute("menuId", meunId); model.addAttribute("memberType", memberType); return "/console/member/add"; } /** * ? ? */ @RequestMapping(value = "/add_save", method = RequestMethod.POST) public String addSave(Member member, HttpServletRequest request, long areaId, RedirectAttributes redirectAttributes, ModelMap model) { Admin admin = adminService.getCurrent(); DictSchool dictSchool = admin.getDictSchool(); member.setDictSchool(dictSchool); member.setUsername(member.getMobile()); if (!isValid(member, Save.class)) { return ERROR_VIEW; } Setting setting = SettingUtils.get(); if (member.getUsername().length() < setting.getUsernameMinLength() || member.getUsername().length() > setting.getUsernameMaxLength()) { return ERROR_VIEW; } if (member.getPassword().length() < setting.getPasswordMinLength() || member.getPassword().length() > setting.getPasswordMaxLength()) { return ERROR_VIEW; } if (memberService.usernameDisabled(member.getUsername()) || memberService.usernameExists(member.getUsername())) { return ERROR_VIEW; } if (!setting.getIsDuplicateEmail() && memberService.emailExists(member.getEmail())) { return ERROR_VIEW; } Area area = areaService.find(areaId); member.setArea(area); member.setIsLocked(false); member.setLoginFailureCount(0); member.setRegisterIp(EduUtil.getAddr(request));// ?IP member.setSignature("");// ?? member.setCreateDate(new Date()); member.setModifyDate(new Date()); member.setPassword(DigestUtils.md5Hex(member.getPassword()));// ? member.setValidateCodeNumber(0); // member.setIsUpdate(true); member.setIsAcceptLeaveInfo(true); memberService.save(member); /** * IM[?] */ ObjectNode createNewIMUserSingleNode = easemobIMUsers.createUserSingle(member.getUsername(), member.getPassword().toLowerCase()); if (null != createNewIMUserSingleNode) { if (createNewIMUserSingleNode.get("statusCode").asText().equalsIgnoreCase("200")) { model.addAttribute("menuId", Member.class.getSimpleName()); addFlashMessage(redirectAttributes, SUCCESS_MESSAGE); return "redirect:list.ct"; } else { memberService.delete(member); return ERROR_VIEW; } } else { memberService.delete(member); return ERROR_VIEW; } } /** * ? */ @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(Member member, Long memberRankId, HttpServletRequest request, RedirectAttributes redirectAttributes, ModelMap model) { if (!isValid(member, Save.class)) { return ERROR_VIEW; } Setting setting = SettingUtils.get(); if (member.getUsername().length() < setting.getUsernameMinLength() || member.getUsername().length() > setting.getUsernameMaxLength()) { return ERROR_VIEW; } if (member.getPassword().length() < setting.getPasswordMinLength() || member.getPassword().length() > setting.getPasswordMaxLength()) { return ERROR_VIEW; } if (memberService.usernameDisabled(member.getUsername()) || memberService.usernameExists(member.getUsername())) { return ERROR_VIEW; } if (!setting.getIsDuplicateEmail() && memberService.emailExists(member.getEmail())) { return ERROR_VIEW; } member.setUsername(member.getUsername().toLowerCase()); member.setPassword(DigestUtils.md5Hex(member.getPassword())); member.setIsLocked(false); member.setLoginFailureCount(0); member.setLockedDate(null); member.setRegisterIp(EduUtil.getAddr(request)); member.setLoginIp(null); member.setLoginDate(null); member.setSafeKey(null); member.setPayments(null); // member.setIsUpdate(true); member.setIsAcceptLeaveInfo(true); memberService.save(member, adminService.getCurrent()); model.addAttribute("menuId", Member.class.getSimpleName()); addFlashMessage(redirectAttributes, SUCCESS_MESSAGE); return "redirect:list.ct"; } /** * */ @RequestMapping(value = "/edit", method = RequestMethod.GET) public String edit(Long id, ModelMap model, MemberType memberType, HttpServletRequest request) { String meunId = Member.class.getSimpleName(); if (null == memberType) { memberType = MemberType.teacher; meunId = Member.class.getSimpleName(); } if (memberType.equals(MemberType.teacher)) { meunId = Member.class.getSimpleName(); } else if (memberType.equals(MemberType.patriarch)) { meunId = "MemberPatriarch"; } else { meunId = Member.class.getSimpleName(); } Setting setting = SettingUtils.get(); model.addAttribute("setting", setting); model.addAttribute("member", memberService.find(id)); model.addAttribute("menuId", meunId); model.addAttribute("memberType", memberType); return "/console/member/edit"; } /** * */ @RequestMapping(value = "/update", method = RequestMethod.POST) public String update(Member member, HttpServletRequest request, RedirectAttributes redirectAttributes, long areaId, ModelMap model) { Member preMember = memberService.find(member.getId()); if (preMember == null) { addFlashMessage(redirectAttributes, ERROR_MESSAGE); return ERROR_VIEW; } preMember.setRealName(member.getRealName()); preMember.setEmail(member.getEmail()); preMember.setGender(member.getGender()); preMember.setBirth(member.getBirth()); Area newArea = areaService.find(areaId); preMember.setArea(newArea); preMember.setAddress(member.getAddress()); preMember.setZipCode(member.getZipCode()); preMember.setIsEnabled(member.getIsEnabled()); preMember.setIconPhoto(member.getIconPhoto()); preMember.setIsEnabled(member.getIsEnabled()); // preMember.setIsUpdate(true); // DigestUtils.md5Hex(member.getPassword()) if (preMember.getMobile().equals(member.getMobile())) { // ????? if ((member.getPassword() != null) && (!member.getPassword().equals(""))) { String md5Password = DigestUtils.md5Hex(member.getPassword()); ObjectNode modifyIMUserPasswordWithAdminTokenNode = easemobIMUsers .modifyUserPassword(preMember.getUsername(), md5Password.toLowerCase()); if ((null != modifyIMUserPasswordWithAdminTokenNode) && (modifyIMUserPasswordWithAdminTokenNode .get("statusCode").asText().equalsIgnoreCase("200"))) { preMember.setPassword(md5Password); memberService.update(preMember); model.addAttribute("menuId", Member.class.getSimpleName()); addFlashMessage(redirectAttributes, SUCCESS_MESSAGE); return "redirect:list.ct"; } else { model.addAttribute("menuId", Member.class.getSimpleName()); addFlashMessage(redirectAttributes, ERROR_MESSAGE); return ERROR_VIEW; } } else { memberService.update(preMember); addFlashMessage(redirectAttributes, SUCCESS_MESSAGE); model.addAttribute("menuId", Member.class.getSimpleName()); return "redirect:list.ct"; } } // ???? else { String preUserName = preMember.getUsername(); String password = preMember.getPassword(); preMember.setMobile(member.getMobile()); preMember.setUsername(member.getMobile()); if (member.getPassword() != null) { preMember.setPassword(DigestUtils.md5Hex(member.getPassword())); password = DigestUtils.md5Hex(member.getPassword()); } // // ???? // ObjectNode friendNode = EasemobIMUsers.getFriends(preUserName); // List<String> friendList = new ArrayList<String>(); // JsonNode arrNode = friendNode.get("data"); // if (arrNode.isArray()) // { // for (final JsonNode objNode : arrNode) // { // friendList.add(objNode.asText()); // } // } // im easemobIMUsers.deleteUserByUserPrimaryKey(preUserName); // easemobIMUsers.createUserSingle(preMember.getUsername(), password.toLowerCase()); memberService.update(preMember); // // ???? // if (friendList.size() > 0) // { // for (String friend : friendList) // { // easemobIMUsers.addFriend(preMember.getUsername(), friend); // } // } model.addAttribute("menuId", Member.class.getSimpleName()); addFlashMessage(redirectAttributes, SUCCESS_MESSAGE); return "redirect:list.ct"; } } /** * */ @RequestMapping(value = "/delete", method = RequestMethod.POST) public @ResponseBody Message delete(Long[] ids) { if (ids != null) { List<Member> members = memberService.findList(ids); if (members == null || members.size() == 0) { return ERROR_MESSAGE; } for (Member member : members) { easemobIMUsers.deleteUserByUserPrimaryKey(member.getUsername()); memberService.delete(member); } } return SUCCESS_MESSAGE; } /** * ???? * * @throws Exception * @throws IOException */ @RequestMapping(value = "/batchSaveMember", method = RequestMethod.POST, produces = "text/html; charset=UTF-8") public void batchSaveMember(FileType fileType, MultipartFile file, HttpServletResponse response, ModelMap model, MemberType memberType, Pageable pageable, HttpServletRequest request) throws Exception { DictSchool dictSchool = adminService.getCurrentDictSchool(); if (null == memberType) { memberType = MemberType.teacher; } ExcelMessage excelMessage = new ExcelMessage(); Map<String, Object> data = new HashMap<String, Object>(); if (file == null) { data.put("message", Message.warn("??")); } InputStream inputStream = ExcelImportUtil.getInputStream(file); if (inputStream == null) { data.put("message", Message.warn("???")); } List<Member> members = excelService.getMembers(inputStream, dictSchool, memberType, request); excelMessage = excelService.validateMembers(members); if (excelMessage.getStatus().toString().equals("success")) { List<String> usernames = new LinkedList<String>(); for (Member member : members) { usernames.add(member.getUsername()); } Setting setting = SettingUtils.get(); String initPassword = setting.getInitPassword(); easemobIMUsers.createUserBatch(usernames, DigestUtils.md5Hex(initPassword)); try { memberService.batchUpdate(members); data.put("message", Message.success("??")); } catch (Exception e) { data.put("message", Message.warn("??")); } } else { data.put("message", Message.warn(excelMessage.getError())); } try { // System.out.println("?" + (endDate.getTime() - // startDate.getTime())); response.setContentType("text/html; charset=UTF-8"); JsonUtils.writeValue(response.getWriter(), data); } catch (IOException e) { e.printStackTrace(); } } }