net.groupbuy.controller.admin.MemberController.java Source code

Java tutorial

Introduction

Here is the source code for net.groupbuy.controller.admin.MemberController.java

Source

/*
 * Copyright 2005-2013 shopxx.net. All rights reserved.
 * Support: http://www.shopxx.net
 * License: http://www.shopxx.net/license
 */
package net.groupbuy.controller.admin;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import net.groupbuy.CommonAttributes;
import net.groupbuy.Message;
import net.groupbuy.Pageable;
import net.groupbuy.Setting;
import net.groupbuy.entity.Area;
import net.groupbuy.entity.Member;
import net.groupbuy.entity.MemberAttribute;
import net.groupbuy.entity.BaseEntity.Save;
import net.groupbuy.entity.Member.Gender;
import net.groupbuy.entity.MemberAttribute.Type;
import net.groupbuy.service.AdminService;
import net.groupbuy.service.AreaService;
import net.groupbuy.service.MemberAttributeService;
import net.groupbuy.service.MemberRankService;
import net.groupbuy.service.MemberService;
import net.groupbuy.util.SettingUtils;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.BeanUtils;
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.servlet.mvc.support.RedirectAttributes;

/**
 * Controller - 
 * 
 * @author SHOP++ Team
 * @version 3.0
 */
@Controller("adminMemberController")
@RequestMapping("/admin/member")
public class MemberController extends BaseController {

    @Resource(name = "memberServiceImpl")
    private MemberService memberService;
    @Resource(name = "memberRankServiceImpl")
    private MemberRankService memberRankService;
    @Resource(name = "memberAttributeServiceImpl")
    private MemberAttributeService memberAttributeService;
    @Resource(name = "areaServiceImpl")
    private AreaService areaService;
    @Resource(name = "adminServiceImpl")
    private AdminService adminService;

    /**
     * ????
     */
    @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.isEmpty(email)) {
            return false;
        }
        if (memberService.emailUnique(previousEmail, email)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 
     */
    @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));
        return "/admin/member/view";
    }

    /**
     * 
     */
    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public String add(ModelMap model) {
        model.addAttribute("genders", Gender.values());
        model.addAttribute("memberRanks", memberRankService.findAll());
        model.addAttribute("memberAttributes", memberAttributeService.findList());
        return "/admin/member/add";
    }

    /**
     * ?
     */
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public String save(Member member, Long memberRankId, HttpServletRequest request,
            RedirectAttributes redirectAttributes) {
        member.setMemberRank(memberRankService.find(memberRankId));
        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.removeAttributeValue();
        for (MemberAttribute memberAttribute : memberAttributeService.findList()) {
            String parameter = request.getParameter("memberAttribute_" + memberAttribute.getId());
            if (memberAttribute.getType() == Type.name || memberAttribute.getType() == Type.address
                    || memberAttribute.getType() == Type.zipCode || memberAttribute.getType() == Type.phone
                    || memberAttribute.getType() == Type.mobile || memberAttribute.getType() == Type.text
                    || memberAttribute.getType() == Type.select) {
                if (memberAttribute.getIsRequired() && StringUtils.isEmpty(parameter)) {
                    return ERROR_VIEW;
                }
                member.setAttributeValue(memberAttribute, parameter);
            } else if (memberAttribute.getType() == Type.gender) {
                Gender gender = StringUtils.isNotEmpty(parameter) ? Gender.valueOf(parameter) : null;
                if (memberAttribute.getIsRequired() && gender == null) {
                    return ERROR_VIEW;
                }
                member.setGender(gender);
            } else if (memberAttribute.getType() == Type.birth) {
                try {
                    Date birth = StringUtils.isNotEmpty(parameter)
                            ? DateUtils.parseDate(parameter, CommonAttributes.DATE_PATTERNS)
                            : null;
                    if (memberAttribute.getIsRequired() && birth == null) {
                        return ERROR_VIEW;
                    }
                    member.setBirth(birth);
                } catch (ParseException e) {
                    return ERROR_VIEW;
                }
            } else if (memberAttribute.getType() == Type.area) {
                Area area = StringUtils.isNotEmpty(parameter) ? areaService.find(Long.valueOf(parameter)) : null;
                if (area != null) {
                    member.setArea(area);
                } else if (memberAttribute.getIsRequired()) {
                    return ERROR_VIEW;
                }
            } else if (memberAttribute.getType() == Type.checkbox) {
                String[] parameterValues = request.getParameterValues("memberAttribute_" + memberAttribute.getId());
                List<String> options = parameterValues != null ? Arrays.asList(parameterValues) : null;
                if (memberAttribute.getIsRequired() && (options == null || options.isEmpty())) {
                    return ERROR_VIEW;
                }
                member.setAttributeValue(memberAttribute, options);
            }
        }
        member.setUsername(member.getUsername().toLowerCase());
        member.setPassword(DigestUtils.md5Hex(member.getPassword()));
        member.setAmount(new BigDecimal(0));
        member.setIsLocked(false);
        member.setLoginFailureCount(0);
        member.setLockedDate(null);
        member.setRegisterIp(request.getRemoteAddr());
        member.setLoginIp(null);
        member.setLoginDate(null);
        member.setSafeKey(null);
        member.setCart(null);
        member.setOrders(null);
        member.setDeposits(null);
        member.setPayments(null);
        member.setCouponCodes(null);
        member.setReceivers(null);
        member.setReviews(null);
        member.setConsultations(null);
        member.setFavoriteProducts(null);
        member.setProductNotifies(null);
        member.setInMessages(null);
        member.setOutMessages(null);
        memberService.save(member, adminService.getCurrent());
        addFlashMessage(redirectAttributes, SUCCESS_MESSAGE);
        return "redirect:list.jhtml";
    }

    /**
     * 
     */
    @RequestMapping(value = "/edit", method = RequestMethod.GET)
    public String edit(Long id, ModelMap model) {
        model.addAttribute("genders", Gender.values());
        model.addAttribute("memberRanks", memberRankService.findAll());
        model.addAttribute("memberAttributes", memberAttributeService.findList());
        model.addAttribute("member", memberService.find(id));
        return "/admin/member/edit";
    }

    /**
     * 
     */
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String update(Member member, Long memberRankId, Integer modifyPoint, BigDecimal modifyBalance,
            String depositMemo, HttpServletRequest request, RedirectAttributes redirectAttributes) {
        member.setMemberRank(memberRankService.find(memberRankId));
        if (!isValid(member)) {
            return ERROR_VIEW;
        }
        Setting setting = SettingUtils.get();
        if (member.getPassword() != null && (member.getPassword().length() < setting.getPasswordMinLength()
                || member.getPassword().length() > setting.getPasswordMaxLength())) {
            return ERROR_VIEW;
        }
        Member pMember = memberService.find(member.getId());
        if (pMember == null) {
            return ERROR_VIEW;
        }
        if (!setting.getIsDuplicateEmail() && !memberService.emailUnique(pMember.getEmail(), member.getEmail())) {
            return ERROR_VIEW;
        }
        member.removeAttributeValue();
        for (MemberAttribute memberAttribute : memberAttributeService.findList()) {
            String parameter = request.getParameter("memberAttribute_" + memberAttribute.getId());
            if (memberAttribute.getType() == Type.name || memberAttribute.getType() == Type.address
                    || memberAttribute.getType() == Type.zipCode || memberAttribute.getType() == Type.phone
                    || memberAttribute.getType() == Type.mobile || memberAttribute.getType() == Type.text
                    || memberAttribute.getType() == Type.select) {
                if (memberAttribute.getIsRequired() && StringUtils.isEmpty(parameter)) {
                    return ERROR_VIEW;
                }
                member.setAttributeValue(memberAttribute, parameter);
            } else if (memberAttribute.getType() == Type.gender) {
                Gender gender = StringUtils.isNotEmpty(parameter) ? Gender.valueOf(parameter) : null;
                if (memberAttribute.getIsRequired() && gender == null) {
                    return ERROR_VIEW;
                }
                member.setGender(gender);
            } else if (memberAttribute.getType() == Type.birth) {
                try {
                    Date birth = StringUtils.isNotEmpty(parameter)
                            ? DateUtils.parseDate(parameter, CommonAttributes.DATE_PATTERNS)
                            : null;
                    if (memberAttribute.getIsRequired() && birth == null) {
                        return ERROR_VIEW;
                    }
                    member.setBirth(birth);
                } catch (ParseException e) {
                    return ERROR_VIEW;
                }
            } else if (memberAttribute.getType() == Type.area) {
                Area area = StringUtils.isNotEmpty(parameter) ? areaService.find(Long.valueOf(parameter)) : null;
                if (area != null) {
                    member.setArea(area);
                } else if (memberAttribute.getIsRequired()) {
                    return ERROR_VIEW;
                }
            } else if (memberAttribute.getType() == Type.checkbox) {
                String[] parameterValues = request.getParameterValues("memberAttribute_" + memberAttribute.getId());
                List<String> options = parameterValues != null ? Arrays.asList(parameterValues) : null;
                if (memberAttribute.getIsRequired() && (options == null || options.isEmpty())) {
                    return ERROR_VIEW;
                }
                member.setAttributeValue(memberAttribute, options);
            }
        }
        if (StringUtils.isEmpty(member.getPassword())) {
            member.setPassword(pMember.getPassword());
        } else {
            member.setPassword(DigestUtils.md5Hex(member.getPassword()));
        }
        if (pMember.getIsLocked() && !member.getIsLocked()) {
            member.setLoginFailureCount(0);
            member.setLockedDate(null);
        } else {
            member.setIsLocked(pMember.getIsLocked());
            member.setLoginFailureCount(pMember.getLoginFailureCount());
            member.setLockedDate(pMember.getLockedDate());
        }

        BeanUtils.copyProperties(member, pMember,
                new String[] { "username", "point", "amount", "balance", "registerIp", "loginIp", "loginDate",
                        "safeKey", "cart", "orders", "deposits", "payments", "couponCodes", "receivers", "reviews",
                        "consultations", "favoriteProducts", "productNotifies", "inMessages", "outMessages" });
        memberService.update(pMember, modifyPoint, modifyBalance, depositMemo, adminService.getCurrent());
        addFlashMessage(redirectAttributes, SUCCESS_MESSAGE);
        return "redirect:list.jhtml";
    }

    /**
     * 
     */
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String list(Pageable pageable, ModelMap model) {
        model.addAttribute("memberRanks", memberRankService.findAll());
        model.addAttribute("memberAttributes", memberAttributeService.findAll());
        model.addAttribute("page", memberService.findPage(pageable));
        return "/admin/member/list";
    }

    /**
     * 
     */
    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    public @ResponseBody Message delete(Long[] ids) {
        if (ids != null) {
            for (Long id : ids) {
                Member member = memberService.find(id);
                if (member != null && member.getBalance().compareTo(new BigDecimal(0)) > 0) {
                    return Message.error("admin.member.deleteExistDepositNotAllowed", member.getUsername());
                }
            }
            memberService.delete(ids);
        }
        return SUCCESS_MESSAGE;
    }

}