| | |
| | | import com.stylefeng.guns.modular.system.model.*; |
| | | import com.stylefeng.guns.modular.system.service.*; |
| | | import com.stylefeng.guns.modular.system.util.*; |
| | | import com.stylefeng.guns.modular.system.util.httpClinet.HttpClientUtil; |
| | | import com.stylefeng.guns.modular.system.warpper.LoginWarpper; |
| | | import com.stylefeng.guns.modular.taxi.model.PaymentRecord; |
| | | import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService; |
| | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.math.BigDecimal; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | |
| | |
| | | |
| | | private String salt = "&a.s"; |
| | | |
| | | private Map<String, Long> loginTime = new HashMap<>();//登录时间 |
| | | |
| | | private Map<String, Integer> loginFailures = new HashMap<>();//登录失败次数 |
| | | |
| | | |
| | | /** |
| | | * 获取短信验证码 |
| | |
| | | templateCode = "SMS_154775431";//修改密码 |
| | | break; |
| | | } |
| | | String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}"); |
| | | String sData = aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + authCode + "\"}"); |
| | | JSONObject jsonObject = JSON.parseObject(sData); |
| | | String message = jsonObject.getString("Message"); |
| | | if(!"OK".equals(message)){ |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil<LoginWarpper> captchaLogin(String phone, String code, String registIp, String registAreaCode,String loginType) throws Exception { |
| | | phone = AESUtil.decrypt(phone);//对电话号码进行解密 |
| | | |
| | | Integer frequency = loginFailures.get(phone); |
| | | Long time = loginTime.get(phone); |
| | | if(null != time && System.currentTimeMillis() < (time + 1800000) && null != frequency && frequency >= 5){ |
| | | return ResultUtil.error("暂时无法登录,请30分钟后重试!"); |
| | | } |
| | | if(null != time && System.currentTimeMillis() >= (time + 1800000)){ |
| | | frequency = 0; |
| | | loginFailures.put(phone, frequency); |
| | | } |
| | | boolean b = this.checkCaptcha(phone, code); |
| | | if(!b){ |
| | | frequency = (null == frequency ? 0 : frequency) + 1; |
| | | loginFailures.put(phone, frequency); |
| | | if(frequency == 1){ |
| | | loginTime.put(phone, System.currentTimeMillis()); |
| | | } |
| | | return ResultUtil.error("验证码无效"); |
| | | } |
| | | |
| | | UserInfo userInfo = userInfoMapper.queryByPhone(phone); |
| | | String encrypt = AESUtil.encrypt(phone);//对电话号码进行加密 |
| | | |
| | | UserInfo userInfo = userInfoMapper.queryByPhone(encrypt); |
| | | if(null == userInfo){ |
| | | userInfo = new UserInfo(); |
| | | userInfo.setPhone(phone); |
| | | userInfo.setPhone(encrypt); |
| | | userInfo.setPassWord(ShiroKit.md5("", salt)); |
| | | userInfo.setNickName(this.getDefaultName()); |
| | | userInfo.setRegistIp(registIp); |
| | |
| | | loginWarpper.setAppid(UUIDUtil.getRandomCode()); |
| | | loginWarpper.setEmergencyContact(userInfo.getEmergencyContact()); |
| | | loginWarpper.setEmergencyContactNumber(userInfo.getEmergencyContactNumber()); |
| | | loginWarpper.setPhone(2); |
| | | |
| | | smsrecordService.saveData(1, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"); |
| | | return ResultUtil.success(loginWarpper); |
| | |
| | | } |
| | | System.out.println( response); |
| | | JSONObject json = JSONObject.parseObject(response); |
| | | if(!json.getBoolean("success")){ |
| | | if(null == json || !json.getBoolean("success")){ |
| | | return ResultUtil.error("登录失败"); |
| | | } |
| | | String phone = json.getJSONObject("data").getString("mobile"); |
| | | UserInfo userInfo = userInfoMapper.queryByPhone(phone); |
| | | |
| | | String encrypt = AESUtil.encrypt(phone);//对电话号码进行加密 |
| | | |
| | | UserInfo userInfo = userInfoMapper.queryByPhone(encrypt); |
| | | if(null == userInfo){ |
| | | userInfo = new UserInfo(); |
| | | userInfo.setPhone(phone); |
| | | userInfo.setPhone(encrypt); |
| | | userInfo.setPassWord(ShiroKit.md5("", salt)); |
| | | userInfo.setNickName(this.getDefaultName()); |
| | | userInfo.setRegistIp(registIp); |
| | |
| | | incomeService.saveData(2, driver.getId(), 1, Integer.valueOf(String.valueOf(map.get("id"))), null, Double.valueOf(String.valueOf(map.get("money")))); |
| | | } |
| | | } |
| | | driver.setActivityMoney(bigDecimal.add(new BigDecimal(null == driver.getActivityMoney() ? 0 : driver.getActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setLaveActivityMoney(bigDecimal.add(new BigDecimal(null == driver.getLaveActivityMoney() ? 0 : driver.getLaveActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setBalance(bigDecimal.add(new BigDecimal(null == driver.getBalance() ? 0 : driver.getBalance())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setActivityMoney(bigDecimal.add(new BigDecimal(driver.getActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setLaveActivityMoney(bigDecimal.add(new BigDecimal(driver.getLaveActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driver.setBalance(bigDecimal.add(new BigDecimal(driver.getBalance())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | driverMapper.updateById(driver); |
| | | |
| | | Map<String, Date> date = dateUtil.getStartAndEndDate(new Date()); |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil<LoginWarpper> userLogin(String phone, String password,String loginType) throws Exception { |
| | | UserInfo userInfo = this.queryByPhone(phone); |
| | | Integer frequency = loginFailures.get(phone); |
| | | Long time = loginTime.get(phone); |
| | | if(null != time && System.currentTimeMillis() < (time + 1800000) && null != frequency && frequency >= 5){ |
| | | return ResultUtil.error("暂时无法登录,请30分钟后重试!"); |
| | | } |
| | | if(null != time && System.currentTimeMillis() >= (time + 1800000)){ |
| | | frequency = 0; |
| | | loginFailures.put(phone, frequency); |
| | | } |
| | | |
| | | String encrypt = AESUtil.encrypt(phone);//对电话号码进行加密 |
| | | |
| | | UserInfo userInfo = this.queryByPhone(encrypt); |
| | | if(null == userInfo){ |
| | | return ResultUtil.error("账号无效"); |
| | | } |
| | |
| | | return ResultUtil.error("账号被冻结"); |
| | | } |
| | | if(!ShiroKit.md5(password, salt).equals(userInfo.getPassWord())){ |
| | | frequency = (null == frequency ? 0 : frequency) + 1; |
| | | loginFailures.put(phone, frequency); |
| | | if(frequency == 1){ |
| | | loginTime.put(phone, System.currentTimeMillis()); |
| | | } |
| | | return ResultUtil.error("密码错误"); |
| | | } |
| | | |
| | |
| | | @Override |
| | | public ResultUtil<LoginWarpper> wxLogin(Integer type, String openid, String unionid, String jscode, String registIp, |
| | | String registAreaCode, Integer sex, String nickName, String avatar,String loginType) throws Exception { |
| | | |
| | | UserInfo userInfo = null; |
| | | if(type == 2){//小程序 |
| | | if(ToolUtil.isEmpty(jscode)){ |
| | |
| | | if(userInfo.getState() == 2){ |
| | | return ResultUtil.error("账号被冻结"); |
| | | } |
| | | |
| | | Integer frequency = loginFailures.get(userInfo.getPhone()); |
| | | Long time = loginTime.get(userInfo.getPhone()); |
| | | if(null != time && System.currentTimeMillis() < (time + 1800000) && null != frequency && frequency >= 5){ |
| | | return ResultUtil.error("暂时无法登录,请30分钟后重试!"); |
| | | } |
| | | if(null != time && System.currentTimeMillis() >= (time + 1800000)){ |
| | | frequency = 0; |
| | | loginFailures.put(userInfo.getPhone(), frequency); |
| | | } |
| | | if(type == 2){//小程序登录 |
| | | String value = redisUtil.getValue("appletOpenId"); |
| | | JSONObject jsonObject = null; |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil forgetPassword(String phone, String code, String password) throws Exception { |
| | | phone = AESUtil.decrypt(phone);//对电话号码进行解密 |
| | | |
| | | boolean b = this.checkCaptcha(phone, code); |
| | | if(!b){ |
| | | return ResultUtil.error("验证码无效"); |
| | | } |
| | | UserInfo userInfo = this.queryByPhone(phone); |
| | | |
| | | String encrypt = AESUtil.encrypt(phone);//对电话号码进行加密 |
| | | |
| | | UserInfo userInfo = this.queryByPhone(encrypt); |
| | | if(null == userInfo){ |
| | | return ResultUtil.error("手机号码未注册"); |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil bindingPhone(Integer uid, String phone, String code,String loginType) throws Exception { |
| | | if(ToolUtil.isEmpty(phone)){ |
| | | return ResultUtil.error("手机号不能为空"); |
| | | } |
| | | phone = AESUtil.decrypt(phone);//对电话号码进行解密 |
| | | |
| | | boolean b = this.checkCaptcha(phone, code); |
| | | if(!b){ |
| | | return ResultUtil.error("验证码无效"); |
| | | } |
| | | UserInfo userInfo = this.selectById(uid); |
| | | UserInfo userInfo1 = userInfoMapper.queryByPhone(phone); |
| | | |
| | | String encrypt = AESUtil.encrypt(phone);//对电话号码进行加密 |
| | | |
| | | UserInfo userInfo1 = userInfoMapper.queryByPhone(encrypt); |
| | | if(null != userInfo1){ |
| | | userInfo1.setOpenId(userInfo.getOpenId()); |
| | | userInfo1.setUnionid(userInfo.getUnionid()); |
| | |
| | | userInfo1.setNickName(userInfo.getNickName()); |
| | | this.updateById(userInfo1); |
| | | |
| | | if(ToolUtil.isNotEmpty(loginType) && loginType.equals("Applets")){//小程序登录后绑定手机号码 |
| | | if(loginType.equals("Applets")){//小程序登录后绑定手机号码 |
| | | String value = redisUtil.getValue("appletOpenId"); |
| | | JSONObject jsonObject = null; |
| | | if(ToolUtil.isNotEmpty(value)){ |
| | |
| | | return ResultUtil.success(loginWarpper); |
| | | } |
| | | |
| | | userInfo.setPhone(phone); |
| | | userInfo.setPhone(encrypt); |
| | | userInfo.setUpdateTime(new Date()); |
| | | userInfo.setUpdateUser(userInfo.getId()); |
| | | this.updateById(userInfo); |
| | |
| | | */ |
| | | @Override |
| | | public Map<String, Object> queryUserInfo(Integer uid) throws Exception { |
| | | return userInfoMapper.queryUserInfo(uid, null); |
| | | Map<String, Object> map = userInfoMapper.queryUserInfo(uid, null); |
| | | return map; |
| | | } |
| | | |
| | | |
| | |
| | | if(money.compareTo(0D) <= 0){ |
| | | return ResultUtil.error("支付金额必须大于0元"); |
| | | } |
| | | if(payType == 1){//微信支付 |
| | | String value = redisUtil.getValue("appletOpenId"); |
| | | String appletsOpenId = null; |
| | | if(ToolUtil.isNotEmpty(value)){ |
| | | JSONObject jsonObject = JSON.parseObject(value); |
| | | appletsOpenId = jsonObject.getString(uid.toString()); |
| | | }else{ |
| | | appletsOpenId = userInfo.getAppletsOpenId(); |
| | | } |
| | | Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 1, money, "", 1);//添加预支付数据 |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | return payMoneyUtil.weixinpay("余额充值", uid.toString(), integer.toString(), money.toString(), "/base/wxCancelUserBalance", app, userInfo.getAppletsOpenId()); |
| | | |
| | | // Map<String, String> map = icbcPayUtil.placeAnOrder(integer.toString(), 9, 5, uid.toString(), "余额充值", money, callbackPath + "/base/wxCancelUserBalance", uid.toString(), type, appletsOpenId); |
| | | // if(map.get("code").equals("200")){ |
| | | // PaymentRecord paymentRecord = paymentRecordService.selectById(integer); |
| | | // paymentRecord.setCode(map.get("order_id")); |
| | | // paymentRecordService.updateById(paymentRecord); |
| | | // return ResultUtil.success(map.get("data")); |
| | | // }else{ |
| | | // return ResultUtil.error(map.get("msg"), ""); |
| | | // } |
| | | Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, payType, money, "", 1);//添加预支付数据 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | String out_trade_no = sdf.format(new Date()) + integer; |
| | | if(payType == 1){//微信支付 |
| | | String appletsOpenId = ""; |
| | | String tradeType = "APP"; |
| | | if(type == 3){ |
| | | appletsOpenId = userInfo.getAppletsOpenId(); |
| | | tradeType = "JSAPI"; |
| | | if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){ |
| | | return ResultUtil.error("支付异常,请重新授权登录小程序"); |
| | | } |
| | | } |
| | | return payMoneyUtil.weixinpay("余额充值", uid.toString(), out_trade_no, money.toString(), callbackPath + "/base/wxCancelUserBalance", tradeType, appletsOpenId); |
| | | } |
| | | if(payType == 2){//支付宝支付 |
| | | Integer integer = paymentRecordService.saveData(2, uid, 1, null, null, 2, money, "", 1);//添加预支付数据 |
| | | |
| | | return payMoneyUtil.alipay("余额充值", "余额充值", uid.toString(), integer.toString(), money.toString(), "/base/aliCancelUserBalance"); |
| | | |
| | | // Map<String, String> map = icbcPayUtil.placeAnOrder(integer.toString(), 10, 5, uid.toString(), "余额充值", money, callbackPath + "/base/aliCancelUserBalance", uid.toString(), type, null); |
| | | // if(map.get("code").equals("200")){ |
| | | // PaymentRecord paymentRecord = paymentRecordService.selectById(integer); |
| | | // paymentRecord.setCode(map.get("order_id")); |
| | | // paymentRecordService.updateById(paymentRecord); |
| | | // return ResultUtil.success(map.get("data")); |
| | | // }else{ |
| | | // return ResultUtil.error(map.get("msg"), ""); |
| | | // } |
| | | return payMoneyUtil.alipay("完成订单", uid.toString(), out_trade_no, money.toString(), callbackPath + "/base/aliCancelUserBalance"); |
| | | } |
| | | return ResultUtil.success(); |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil updatePhone(String code, String phone, Integer uid) throws Exception { |
| | | phone = AESUtil.decrypt(phone);//解密 |
| | | boolean b = this.checkCaptcha(phone, code); |
| | | if(!b){ |
| | | return ResultUtil.error("验证码无效"); |
| | | } |
| | | UserInfo userInfo = this.selectById(uid); |
| | | UserInfo userInfo1 = userInfoMapper.queryByPhone(phone); |
| | | |
| | | String encrypt = AESUtil.encrypt(phone);//对手机号进行加密 |
| | | |
| | | UserInfo userInfo1 = userInfoMapper.queryByPhone(encrypt); |
| | | if(null != userInfo1){ |
| | | return ResultUtil.error("手机号已被注册"); |
| | | } |
| | | userInfo.setPhone(phone); |
| | | userInfo.setPhone(encrypt); |
| | | this.updateById(userInfo); |
| | | |
| | | // smsrecordService.saveData(2, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"); |
| | |
| | | // map.put("clientSecret", "JZrYSBvtVlIRbnsnoJuaqheRWAEHcEJVgeAeIHAUojwUwZIAVzSpAWxgozhfPbcq"); |
| | | map.put("grantType", "authorization_code"); |
| | | map.put("authCode", authCode); |
| | | String get = httpClientUtil.pushHttpRequset("GET", path + "/api/oauth/accessToken", map, null, ""); |
| | | String get = httpClientUtil.pushHttpRequset("GET", path + "/api/oauth/accessToken", map, null, "").getData(); |
| | | System.err.print("获取accessToken:" + get); |
| | | JSONObject jsonObject = JSON.parseObject(get); |
| | | Boolean success = jsonObject.getBoolean("success"); |
| | |
| | | if(null == userInfo){ |
| | | return ResultUtil.error("获取用户信息失败"); |
| | | } |
| | | return this.captchaLogin(userInfo.get("phone"), "1234", null, registAreaCode, loginType); |
| | | return this.captchaLogin(AESUtil.encrypt(userInfo.get("phone")), "1234", null, registAreaCode, loginType); |
| | | }else{ |
| | | return ResultUtil.error(jsonObject.getString("msg")); |
| | | } |
| | |
| | | // String path = "https://open.test.brightcns.cn";//测试环境 |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("accessToken", accessToken); |
| | | String get = httpClientUtil.pushHttpRequset("GET", path + "/api/userinfo", map, null, ""); |
| | | String get = null; |
| | | try { |
| | | get = httpClientUtil.pushHttpRequset("GET", path + "/api/userinfo", map, null, "").getData(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | System.err.print("获取用户信息:" + get); |
| | | JSONObject jsonObject = JSON.parseObject(get); |
| | | Boolean success = jsonObject.getBoolean("success"); |
| | |
| | | */ |
| | | public String getDefaultName(){ |
| | | int num = this.selectCount(new EntityWrapper<UserInfo>().ne("flag", 3)) + 1000001; |
| | | return "JYX" + String.valueOf(num).substring(1); |
| | | return "OK" + String.valueOf(num).substring(1); |
| | | } |
| | | |
| | | |
| | |
| | | private String getToken(UserInfo userInfo, String password,String type) throws Exception{ |
| | | if(ToolUtil.isEmpty(type))type="APP"; |
| | | //封装请求账号密码为shiro可验证的token |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(userInfo.getPhone(), password.toCharArray()); |
| | | String credentials = userInfo.getPassWord(); |
| | | if(ToolUtil.isEmpty(password)){ |
| | | password = "123456"; |
| | | credentials = ShiroKit.md5(password, salt); |
| | | } |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(userInfo.getPhone(), password.toCharArray()); |
| | | ByteSource credentialsSalt = new Md5Hash(salt); |
| | | SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( |
| | | new ShiroUser(), credentials, credentialsSalt, ""); |
| | |
| | | * @param userInfo |
| | | * @throws Exception |
| | | */ |
| | | private synchronized void addCoupon(UserInfo userInfo) throws Exception{ |
| | | public synchronized void addCoupon(UserInfo userInfo) throws Exception{ |
| | | //添加优惠券 |
| | | List<Map<String, Object>> list = userActivityRegisteredService.query(userInfo.getCompanyId()); |
| | | int num = 0; |