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("发送失败!"); } }