package com.insoul.ti.controller; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import javax.annotation.Resource; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import com.insoul.copartner.constant.GlobalProperties; import com.insoul.copartner.constant.ResponseCode; import com.insoul.copartner.constant.UserStatus; import com.insoul.copartner.dao.IIndustryDomainDao; import com.insoul.copartner.dao.ILocationDao; import com.insoul.copartner.dao.IStartupRoleDao; import com.insoul.copartner.dao.IStartupStatusDao; import com.insoul.copartner.dao.IUserDao; import com.insoul.copartner.dao.criteria.TutorCriteria; import com.insoul.copartner.domain.IndustryDomain; import com.insoul.copartner.domain.Location; import com.insoul.copartner.domain.StartupRole; import com.insoul.copartner.domain.StartupStatus; import com.insoul.copartner.domain.User; import com.insoul.copartner.exception.CException; import com.insoul.copartner.exception.CExceptionFactory; import com.insoul.copartner.util.CDNUtil; import com.insoul.copartner.util.FileUtil; import com.insoul.copartner.util.PasswordUtil; import com.insoul.ti.WebBase; import com.insoul.ti.req.PageQuery; import com.insoul.ti.req.TutorAddRequest; import com.insoul.ti.req.TutorListRequest; import com.insoul.ti.req.ViewRequest; import com.insoul.ti.shiro.Permission; import com.insoul.ti.vo.TutorListVO; @Controller @RequestMapping("/tutor") @Permission("authc") public class TutorController extends WebBase { @Resource private IUserDao userDao; @Resource private IIndustryDomainDao industryDomainDao; @Resource private ILocationDao locationDao; @Resource private IStartupRoleDao startupRoleDao; @Resource private IStartupStatusDao startupStatusDao; @RequestMapping("/list") public ModelAndView list(TutorListRequest requestData) { ModelAndView mv = createModelView("tutor_list", requestData); PageQuery query = requestData.init().getQuery(); List<TutorListVO> tutorVOs = new ArrayList<TutorListVO>(); TutorCriteria criteria = new TutorCriteria(); criteria.setStatus(new String[] { "active" }); criteria.setLimit(query.getPage_size()); criteria.setOffset(Long.valueOf(query.getIndex()).intValue()); List<User> users = userDao.queryTutor(criteria); for (User user : users) { TutorListVO tutorVO = new TutorListVO(); tutorVO.setTutorId(user.getId()); tutorVO.setName(user.getName()); tutorVO.setMobile(user.getMobile()); tutorVO.setTitle(user.getTitle()); tutorVO.setAvatar(CDNUtil.getFullPath(user.getAvatar())); tutorVO.setManagementExp(user.getManagementExp()); tutorVO.setStartupExp(user.getStartupExp()); Long professionId = user.getProfessionId(); if (professionId == 1) { tutorVO.setProfessionName("学术型"); } else if (professionId == 2) { tutorVO.setProfessionName("实业型"); } if (StringUtils.isNotBlank(user.getDomains())) { String domainIds[] = user.getDomains().split(","); IndustryDomain industryDomain = industryDomainDao.get(Long.valueOf(domainIds[0])); if (null != industryDomain) { tutorVO.setDomain(industryDomain.getName()); } } tutorVOs.add(tutorVO); } Long count = userDao.countTutor(criteria); query.setCount((count == null || count <= 0L) ? 0 : count.intValue()); mv.addObject("query", query); mv.addObject("tutors", tutorVOs); mv.addObject("success", CollectionUtils.isNotEmpty(tutorVOs)); mv.addObject("req", request); mv.addObject("viewname", "tutor_list"); return mv; } @RequestMapping("/add") public ModelAndView add(ViewRequest req) { ModelAndView mv = createModelView("tutor_add", req); mv.addObject("viewname", "tutor_list"); return mv; } @RequestMapping("/edit/{tutorId}") public ModelAndView edit(@PathVariable Long tutorId, ViewRequest req) { ModelAndView mv = createModelView("tutor_edit", req); User tutor = userDao.get(tutorId); mv.addObject("tutor", tutor); mv.addObject("viewname", "tutor_list"); return mv; } @RequestMapping("/save") @Transactional(value = "transactionManager", rollbackFor = Throwable.class) public ModelAndView save(TutorAddRequest request) throws CException { String mobile = request.getMobile(); if (null != userDao.getUserByMobile(mobile)) { throw CExceptionFactory.getException(CException.class, ResponseCode.MOBILE_REGISTERED); } Date now = new Date(); MultipartFile image = request.getAvatar(); String path = StringUtils.EMPTY; if (image != null) { String fileType = FileUtil.getFileType(image.getOriginalFilename()); if (StringUtils.isNotBlank(fileType)) { String fileName = new StringBuilder().append(UUID.randomUUID()).append(".").append(fileType).toString(); try { path = CDNUtil.uploadFile(image.getInputStream(), fileName); } catch (Exception e) { log.error("UploadFile Error.", e); } } } User tutor = new User(); tutor.setRoleId(3L); tutor.setName(request.getName()); tutor.setMobile(mobile); tutor.setAvatar(path); tutor.setIntroduction(request.getIntroduction()); tutor.setTitle(request.getTitle()); tutor.setStartupExp(request.getStartupExp()); tutor.setManagementExp(request.getManagementExp()); tutor.setDomains(request.getDomains()); tutor.setTopic(request.getTopic()); tutor.setCreated(now); String salt = PasswordUtil.genSalt(); tutor.setSalt(salt); String password = mobile.substring(mobile.length() - 6, mobile.length()); tutor.setPassword(PasswordUtil.encodePassword(password, salt)); setDefaultValue(tutor); tutor.setClientIp(0L); userDao.save(tutor); return new ModelAndView("redirect:/tutor/list"); } @RequestMapping("/update/{tutorId}") @Transactional(value = "transactionManager", rollbackFor = Throwable.class) public ModelAndView update(@PathVariable Long tutorId, TutorAddRequest request) throws CException { User tutor = userDao.get(tutorId); if (null == tutor) { return new ModelAndView("redirect:/tutor/list"); } String mobile = request.getMobile(); User existedUser = userDao.getUserByMobile(mobile); if (null != existedUser && !existedUser.getId().equals(tutorId)) { throw CExceptionFactory.getException(CException.class, ResponseCode.MOBILE_REGISTERED); } MultipartFile image = request.getAvatar(); if (image != null) { String fileType = FileUtil.getFileType(image.getOriginalFilename()); if (StringUtils.isNotBlank(fileType)) { String fileName = new StringBuilder().append(UUID.randomUUID()).append(".").append(fileType).toString(); try { String path = CDNUtil.uploadFile(image.getInputStream(), fileName); tutor.setAvatar(path); } catch (Exception e) { log.error("UploadFile Error.", e); } } } tutor.setName(request.getName()); tutor.setMobile(mobile); tutor.setIntroduction(request.getIntroduction()); tutor.setTitle(request.getTitle()); tutor.setStartupExp(request.getStartupExp()); tutor.setManagementExp(request.getManagementExp()); tutor.setDomains(request.getDomains()); tutor.setTopic(request.getTopic()); tutor.setUpdated(new Date()); return new ModelAndView("redirect:/tutor/list"); } private void setDefaultValue(User user) { user.setStatus(UserStatus.ACTIVE.getValue()); List<StartupRole> roles = startupRoleDao.findAll(); if (null != roles && roles.size() > 0) { user.setStartupRoleId(roles.get(0).getId()); } List<StartupStatus> statuses = startupStatusDao.findAll(); if (null != statuses && statuses.size() > 0) { user.setStartupStatusId(statuses.get(0).getId()); } Long locationId = GlobalProperties.DEFAULT_LOCATION_ID.longValue(); if (0 != locationId) { Location location = locationDao.get(locationId); if (null != location) { user.setLocationId(locationId); // 缓存地区全名 StringBuilder fullLocation = new StringBuilder(); fullLocation.append(location.getName()); Location parentLocation = locationDao.get(location.getParentId()); if (null != parentLocation) { fullLocation.append("|").append(parentLocation.getName()); } user.setFullLocation(fullLocation.toString()); } } } }