发送短信接口

package com.j1.mai.action;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.j1.base.dto.ServiceMessage;
import com.j1.base.type.MsgStatus;
import com.j1.kernal.cache.CacheProxy;
import com.j1.mai.common.Const;
import com.j1.mai.common.Regex;
import com.j1.mai.model.common.SoaApiBaseAction;
import com.j1.mai.util.MD5Utils;
import com.j1.mai.util.NumericUtil;
import com.j1.mai.util.RandomUtil;
import com.j1.mai.util.StringUtil;
import com.j1.member.model.Member;
import com.j1.soa.common.RandomUtils;
import com.j1.soa.common.ResultMsg;
import com.j1.soa.resource.member.api.MemberService;
import com.j1.soa.resource.member.api.StoreConsumptionService;

/**
 * 
 * 会员录入
 *
 */
@Controller
@Scope("request")
@RequestMapping("/storeConsumptionAdd")
public class StoreAddAcrion extends SoaApiBaseAction {

    @Autowired
    private CacheProxy cacheProxy;
    @Autowired
    private StoreConsumptionService storeConsumptionService;
    @Autowired
    private MemberService memberService;
    static Logger LOG = Logger.getLogger(StoreAddAcrion.class);
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 注册日期
    /**
     * 手机每天发送次数 (次数_今天)
     */
    private static Map<String, String> sendCount = new HashMap<String, String>();
    @RequestMapping("/addStore")
    public void addStoreConsumption(
            HttpServletRequest request,
            HttpServletResponse response,
            @RequestParam(value = "mobile", required = true) String mobile, // 手机号码
            @RequestParam(value = "realName", required = true) String realName,// 姓名
            @RequestParam(value = "mobileActiveCode", required = true) String mobileActiveCode, // 验证码
            @RequestParam(value = "sex", required = false) String sex, // 性别
            @RequestParam(value = "email", required = false) String email, // 邮箱
            @RequestParam(value = "birthday", required = false) String birthday, // 生日
            @RequestParam(value = "provinceId", required = false) String provinceId, // 省份
            @RequestParam(value = "cityId", required = false) String cityId, //
            @RequestParam(value = "areaId", required = false) String areaId, //
            @RequestParam(value = "fullAddress", required = false) String fullAddress,// 详细地址
            @RequestParam(value = "identifyCard", required = false) String identifyCard,// 身份证
            @RequestParam(value = "hospitalCard", required = false) String hospitalCard,// 医保卡卡号
            @RequestParam(value = "notes", required = false) String notes// 会员备注
        
            
    ) {

        try {

            // 从缓存中取出门店操作人员,门店名称
            Object empNameAdd = cacheProxy.get("empNameAdd");
            Object deptNameAdd = cacheProxy.get("deptNameAdd");
            Member member = new Member();
            // 门店名称
            member.setDeptNameAdd(deptNameAdd.toString());
            // 操作人
            member.setEmpNameAdd(empNameAdd.toString());
            // 用户输入的手机号
            member.setMobile(mobile);
            member.setRealName(realName);
            /**
             * 录入之前先去验证用户输入的验证码是否正确 短信通知格式: 
             * [健一网]code+手机验证码,如有疑问请拔致电4007-800-800
             */
            if (!cacheProxy.get("verifyCode").equals(mobileActiveCode)) {
                setResultInfo("-1001", "您输入的验证码错误,请重新输入").write(request, response);
                return;
                
            }
            member.setMobileActiveCode(mobileActiveCode);
            member.setSex(sex);
            member.setEmail(email);
            member.setMobile(mobile);
            /**
             * 录入地址专用
             */
            member.setProvinceId(NumericUtil.parseInt(provinceId, 0));
            member.setCityId(NumericUtil.parseInt(cityId, 0));
            member.setAreaId(NumericUtil.parseInt(areaId, 0));
            member.setNotes(notes);
            member.setHospitalCard(hospitalCard);
            member.setIdentifyCard(identifyCard);
            member.setMemberRole("健一网门店会员");
            // 可用积分,录入时积分为0
            member.setCurrentPoints(0);
            member.setRegTime(df.format(new Date()));
            // 调用soa接口,注册会员

//            ServiceMessage<Member> result = storeConsumptionService
//                    .addStoreConsumption(m);
            ServiceMessage<Member> result = storeConsumptionService
                    .addStoreConsumption(member);

            if (result.getStatus() != MsgStatus.NORMAL) {
                this.setResultInfo(result.getStatus().getCode(),
                        result.getMessage());
                return;
            } else {
                _result.setStatus(result.getStatus().getCode());
                _result.setMsg(result.getMessage());
                // 录入成功以后,给用户发送短信
                memberService.sendCode(mobile, ResultMsg.StoreSendMsg.MESSAGE_SEND);
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        } finally {
            write(request, response);
        }
    }

    

    /**
     * 发送短信的验证码
     */

    @RequestMapping("/storeRegisterSend")
    public void registerSend(HttpServletRequest request,
            HttpServletResponse response,
            @RequestParam(value = "mobile", required = false) String mobile) {

        // 判断账号是否手机
        if (!Regex.match(mobile, Const.Regex.MOBILE)) {
            this.setResultInfo(MsgStatus.PARAMS_ERROR.getCode(),
                    ResultMsg.Common.MOBILE_PATTERN_ERROR).write(request,
                    response);
            return;
        }

        ServiceMessage<Member> sendResult = null;
        JSONObject resultObj = new JSONObject();
        /**
         * 手机验证的次数 一个手机用户在同一天最多只能验证5次
         */
        boolean flag = sendMsgCount(mobile);
        if (!flag) {
            setResultInfo("-1", "该手机今天短信发送次数已达到5次,请明天再试哦").write(request,
                    response);
            return;
        }
        // 手机号可以注册
        String verifyCode = RandomUtil.randomCode(6);
        String msgContent = verifyCode + "手机验证码,如有疑问请拔致电4007-800-800";
        // 发送验证码
        try {
            sendResult = memberService.sendCode(mobile, msgContent);
            if (sendResult == null
                    || !sendResult.getStatus().equals(MsgStatus.NORMAL)) {
                setResultInfo(MsgStatus.NO_RESULT.getCode(), "发送失败").write(
                        request, response);
            } else {
                // 发送成功以后将验证码放到Cache中
                cacheProxy.put("verifyCode", verifyCode, 5);
                _result.setObjData(sendResult.getResult());
                setResultInfo(MsgStatus.NORMAL.getCode(),
                        sendResult.getMessage()).write(request, response);
            }
        } catch (Exception e) {
            LOG.error(e.getMessage(), e);
            setResultInfo(MsgStatus.EXCEPTION.getCode(),
                    "调用memberService.sendCode接口失败!").write(request, response);
        }
    }

    /**
     * 限制相同手机验证短信发送次数
     * 
     * @param mobile
     * @return
     */
    private boolean sendMsgCount(String mobile) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String nowDay = df.format(new Date());
        boolean flag = true;
        String str = sendCount.get(mobile);
        if (null == str || str.length() == 0) {
            sendCount.put(mobile, 1 + "_" + nowDay);
        } else {
            String[] arrs = str.split("_");
            logger.info(arrs[0]);
            if (!nowDay.equals(arrs[1])) {
                sendCount.put(mobile, 1 + "_" + nowDay);
            } else {
                if (Integer.parseInt(arrs[0]) >= 5) {
                    flag = false;
                } else {
                    sendCount.put(mobile, (Integer.parseInt(arrs[0]) + 1) + "_"
                            + nowDay);
                }
            }
        }
        return flag;
    }
}
 public ServiceMessage sendCode(final String phoneNum, String msgContent) {
        Member returnMember = new Member();
        // 判断账号是否手机
        Pattern patternMobile = Pattern.compile("(13|15|18|14|17)[0-9]{9}");
        Matcher matcherMobile = patternMobile.matcher(phoneNum);
        if (!matcherMobile.matches()) {
            return super.returnParamsError("手机号格式不正确");
        }
        // try {
        // if (msgContent.getBytes("UTF-8").length > 6
        // || msgContent.getBytes("UTF-8").length < 1) {
        // return super.returnParamsError("发送内容长度为6,一个汉字代表3");
        // }
        // } catch (UnsupportedEncodingException e1) {
        // logger.debug(e1.getMessage(), e1);
        // }

        final long time = new Date().getTime();
        String check = MD5Utils.MD5(time + "www.j1.com").toLowerCase();
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("t", time);
        params.put("mobile", phoneNum);
        try {
            params.put("msg", URLEncoder.encode(msgContent, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            logger.error(e.getMessage(), e);
        }

        params.put("check", check);
        HttpResponse response = HttpUtils.httpPost("http://adm.j1.com/ec-dec/page/sms/sendSmsForEach/code", params);
        // http 返回状态码不为 200
        if (response.getStatusCode() != HttpStatus.SC_OK) {
            return super.returnNoResult("发送失败");
        }
        try {
            JSONObject resultObj = JSONObject.fromObject(response.getContent());
            if ("0".equals(resultObj.getString("code"))) {
                return super.returnCorrectResult(resultObj.getString("msg"));
            }
            return super.returnNoResult(resultObj.getString("msg"));
        } catch (Exception e) {
            return super.returnException("发送失败!");
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值