记得上下班打卡 | git大法好,push需谨慎

Commit 6b743bbd authored by 张国柄's avatar 张国柄

fix:会员兑换码生成重复校验处理;

+会员黑名单配置过滤[BY UID];
调整注册+sql:user_info.add操作;
发送验证码+锁;
+admin会员卡列表、同步;
修复admin会员卡价格修改;
parent 8b2b4faa
...@@ -48,6 +48,7 @@ public class AdamMemberPriceVo implements Serializable { ...@@ -48,6 +48,7 @@ public class AdamMemberPriceVo implements Serializable {
} }
public AdamMemberPriceVo copy(AdamMemberPrice source) { public AdamMemberPriceVo copy(AdamMemberPrice source) {
if (null == source) return this;
this.setMemberPriceId(source.getMemberPriceId()); this.setMemberPriceId(source.getMemberPriceId());
this.setMemberId(source.getMemberId()); this.setMemberId(source.getMemberId());
this.setState(source.getState()); this.setState(source.getState());
......
...@@ -45,7 +45,7 @@ public class AdamUserInfoVo implements java.io.Serializable, Cloneable { ...@@ -45,7 +45,7 @@ public class AdamUserInfoVo implements java.io.Serializable, Cloneable {
@ApiModelProperty(position = 23, value = "注销时间") @ApiModelProperty(position = 23, value = "注销时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR) @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime closedAt; private LocalDateTime closedAt;
@ApiModelProperty(position = 24, value = "是否完善信息[0-未完善,1-已完善]") @ApiModelProperty(position = 24, value = "完善信息进度[0-未完善,1-已完善]")
private Integer isComplete; private Integer isComplete;
@ApiModelProperty(position = 25, value = "") @ApiModelProperty(position = 25, value = "")
private String rongCloudToken; private String rongCloudToken;
......
...@@ -56,6 +56,10 @@ public interface IAdamRdmService { ...@@ -56,6 +56,10 @@ public interface IAdamRdmService {
void delAddressesVoByUid(String uid); void delAddressesVoByUid(String uid);
boolean setBlacklistForMember(List<String> uids);
List<String> getBlacklistForMember();
boolean setUserMemberVoByUid(String uid, AdamUserMemberVo vo); boolean setUserMemberVoByUid(String uid, AdamUserMemberVo vo);
AdamUserMemberVo getUserMemberVoByUid(String uid); AdamUserMemberVo getUserMemberVoByUid(String uid);
...@@ -64,8 +68,12 @@ public interface IAdamRdmService { ...@@ -64,8 +68,12 @@ public interface IAdamRdmService {
AdamMemberSimpleVo getMemberSimpleVo(); AdamMemberSimpleVo getMemberSimpleVo();
boolean setMemberVoByMemberId(String memberId, AdamMemberVo vo);
AdamMemberVo getMemberVoByMemberId(String memberId); AdamMemberVo getMemberVoByMemberId(String memberId);
void delMemberVoByMemberId(String memberId);
boolean setMemberPriceVoByMemberId(String memberId, List<AdamMemberPriceVo> vos); boolean setMemberPriceVoByMemberId(String memberId, List<AdamMemberPriceVo> vos);
List<AdamMemberPriceVo> getMemberPriceVoByMemberId(String memberId); List<AdamMemberPriceVo> getMemberPriceVoByMemberId(String memberId);
......
...@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.adam.dto.AdamMemberParam; import com.liquidnet.service.adam.dto.AdamMemberParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo; import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.entity.AdamMember; import com.liquidnet.service.adam.entity.AdamMember;
import com.liquidnet.service.base.ResponseDto;
/** /**
* 会员信息 * 会员信息
*/ */
public interface IAdamMemberAdminService extends IService<AdamMember> { public interface IAdamMemberAdminService extends IService<AdamMember> {
AdamMemberVo add(AdamMemberParam info); AdamMemberVo add(AdamMemberParam info);
ResponseDto<Object> sync();
} }
...@@ -8,5 +8,5 @@ import com.liquidnet.service.adam.entity.AdamMemberPrice; ...@@ -8,5 +8,5 @@ import com.liquidnet.service.adam.entity.AdamMemberPrice;
public interface IAdamMemberPriceAdminService extends IService<AdamMemberPrice> { public interface IAdamMemberPriceAdminService extends IService<AdamMemberPrice> {
AdamMemberPriceVo add(AdamMemberPrice info); AdamMemberPriceVo add(AdamMemberPrice info);
AdamMemberPriceVo edit(AdamMemberPriceParam param); boolean edit(AdamMemberPriceParam param);
} }
...@@ -52,16 +52,17 @@ create unique index uidx_third_party_uid_open_id on adam_third_party (uid, open_ ...@@ -52,16 +52,17 @@ create unique index uidx_third_party_uid_open_id on adam_third_party (uid, open_
drop table if exists adam_user; drop table if exists adam_user;
create table adam_user create table adam_user
( (
mid int unsigned auto_increment primary key, mid int unsigned auto_increment primary key,
uid varchar(64) not null, uid varchar(64) not null,
mobile varchar(30) not null, mobile varchar(30) not null,
passwd varchar(64), passwd varchar(64),
pay_code varchar(64), pay_code varchar(64),
state tinyint comment '1-NORMAL,2-INVALID', state tinyint default 0 comment '1-NORMAL,2-INVALID',
created_at datetime(3) not null, is_complete tinyint default 0 comment '完善信息进度:0-未完善,1-已完善',
updated_at datetime(3), created_at datetime(3) not null,
closed_at datetime(3), updated_at datetime(3),
comment text closed_at datetime(3),
comment text
) ENGINE = InnoDB comment '用户'; ) ENGINE = InnoDB comment '用户';
create unique index uidx_user_uid on adam_user (uid); create unique index uidx_user_uid on adam_user (uid);
......
...@@ -26,7 +26,9 @@ public class AdamRedisConst { ...@@ -26,7 +26,9 @@ public class AdamRedisConst {
public static final String INFO_MEMBER_RIGHTS = INFO.concat("member:rights:"); public static final String INFO_MEMBER_RIGHTS = INFO.concat("member:rights:");
public static final String INFO_MEMBER_AGREEMENT = INFO.concat("member:agreement"); public static final String INFO_MEMBER_AGREEMENT = INFO.concat("member:agreement");
public static final String INFO_MEMBER_CODE = INFO.concat("member:code:"); public static final String INFO_MEMBER_CODE = INFO.concat("member:code:");
public static final String INFO_MEMBER_BLACK = INFO.concat("member:black:");
public static final String BLACK_LIST = ADAM.concat(":blacklist:");
public static final String BLK_LIST_MEMBER_UID = BLACK_LIST.concat("member:uid");
public static final String SHOT_MEMBER_ORDER = ADAM.concat("morder:"); public static final String SHOT_MEMBER_ORDER = ADAM.concat("morder:");
...@@ -42,6 +44,7 @@ public class AdamRedisConst { ...@@ -42,6 +44,7 @@ public class AdamRedisConst {
public static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member:no"; public static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member:no";
// // // // // // // // // // // // // // // // // // // //
public static final String LOCK_KEY_USMS_MOBILE = "adam:lk:sms:mobile:";
public static final String LOCK_KEY_UREGISTER = "adam:lk:register:"; public static final String LOCK_KEY_UREGISTER = "adam:lk:register:";
public static final String LOCK_KEY_UIDENTITY = "adam:lk:identity:"; public static final String LOCK_KEY_UIDENTITY = "adam:lk:identity:";
public static final String LOCK_KEY_UMEMBER_CODE = "adam:lk:member:code:"; public static final String LOCK_KEY_UMEMBER_CODE = "adam:lk:member:code:";
......
...@@ -4,9 +4,11 @@ import com.aliyuncs.DefaultAcsClient; ...@@ -4,9 +4,11 @@ import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.dypnsapi.model.v20170525.GetMobileRequest; import com.aliyuncs.dypnsapi.model.v20170525.GetMobileRequest;
import com.aliyuncs.dypnsapi.model.v20170525.GetMobileResponse; import com.aliyuncs.dypnsapi.model.v20170525.GetMobileResponse;
import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ClientException;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.commons.lang.core.JwtValidator; import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.commons.lang.util.*; import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.dto.AdamThirdPartParam; import com.liquidnet.service.adam.dto.AdamThirdPartParam;
...@@ -28,6 +30,7 @@ import org.springframework.util.DigestUtils; ...@@ -28,6 +30,7 @@ import org.springframework.util.DigestUtils;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.HttpClientErrorException;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
...@@ -38,6 +41,8 @@ import java.util.HashMap; ...@@ -38,6 +41,8 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_USMS_MOBILE;
@ApiSupport(order = 10010) @ApiSupport(order = 10010)
@Api(tags = "用户登录") @Api(tags = "用户登录")
@Slf4j @Slf4j
...@@ -93,33 +98,43 @@ public class AdamLoginController { ...@@ -93,33 +98,43 @@ public class AdamLoginController {
@GetMapping(value = {"send"}) @GetMapping(value = {"send"})
public ResponseDto<Object> sendSms(@Pattern(regexp = "\\d{11}", message = "手机号格式有误") @RequestParam String mobile) { public ResponseDto<Object> sendSms(@Pattern(regexp = "\\d{11}", message = "手机号格式有误") @RequestParam String mobile) {
log.debug("send to mobile:{}", mobile); log.debug("send to mobile:{}", mobile);
long s = System.currentTimeMillis(); if (RedisLockUtil.tryLock(LOCK_KEY_USMS_MOBILE + mobile, 1, 5)) {
Map<String, Object> respMap = null;
LinkedMultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>(); String respStr = null;
paramsMap.add("mobile", mobile); try {
LinkedMultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
String respStr = null; paramsMap.add("mobile", mobile);
try {
respStr = HttpUtil.postToPhpApi(env.getProperty("liquidnet.url-service.url") + PHP_API_SMS_CODE_SEND, paramsMap); long s = System.currentTimeMillis();
log.debug("###PHP.API[{}].RESP[{}]", PHP_API_SMS_CODE_SEND, respStr); respStr = HttpUtil.postToPhpApi(env.getProperty("liquidnet.url-service.url") + PHP_API_SMS_CODE_SEND, paramsMap);
log.debug("#PHP.API耗时:{}ms", System.currentTimeMillis() - s); log.debug("###PHP.API[{}].RESP[{}]", PHP_API_SMS_CODE_SEND, respStr);
log.debug("#PHP.API耗时:{}ms", System.currentTimeMillis() - s);
Map respMap = JsonUtils.fromJson(respStr, Map.class); respMap = JsonUtils.fromJson(respStr, Map.class);
} catch (Exception e) {
RedisLockUtil.unlock(LOCK_KEY_USMS_MOBILE + mobile);
if (e instanceof HttpClientErrorException) {
log.error("PHP.API验证码发送异常[mobile:{},respStr:{},ex:{}]", mobile, respStr, e.getLocalizedMessage());
HttpClientErrorException ex = (HttpClientErrorException) e;
JsonNode exBody = JsonUtils.fromJson(ex.getResponseBodyAsString(), JsonNode.class);
return ResponseDto.failure("10003", exBody.get("message").asText());
}
log.error("PHP.API验证码发送异常[mobile:{},respStr:{}]", mobile, respStr, e);
return ResponseDto.failure(ErrorMapping.get("10003"));
}
if (!CollectionUtils.isEmpty(respMap) && StringUtils.equalsIgnoreCase("OK", (String) respMap.get("message"))) { if (!CollectionUtils.isEmpty(respMap) && StringUtils.equalsIgnoreCase("OK", (String) respMap.get("message"))) {
return ResponseDto.success(); return ResponseDto.success();
} else { } else {
RedisLockUtil.unlock(LOCK_KEY_USMS_MOBILE + mobile);
log.warn("PHP.API验证码发送失败[mobile:{},respStr:{}]", mobile, respStr); log.warn("PHP.API验证码发送失败[mobile:{},respStr:{}]", mobile, respStr);
return ResponseDto.failure(ErrorMapping.get("10001")); return ResponseDto.failure(ErrorMapping.get("10003"));
} }
} catch (Exception e) { } else {
log.error("PHP.API验证码发送异常[mobile:{},respStr:{}]", mobile, respStr, e); return ResponseDto.failure(ErrorMapping.get("10000"));
return ResponseDto.failure(ErrorMapping.get("10001"));
} }
} }
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
@ApiOperation(value = "手机验证码登录") @ApiOperation(value = "手机验证码登录")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mobile", value = "手机号"), @ApiImplicitParam(type = "body", required = true, dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(type = "body", required = true, dataType = "String", name = "code", value = "验证码"), @ApiImplicitParam(type = "body", required = true, dataType = "String", name = "code", value = "验证码"),
...@@ -130,7 +145,7 @@ public class AdamLoginController { ...@@ -130,7 +145,7 @@ public class AdamLoginController {
@Pattern(regexp = "\\d{6}", message = "验证码格式有误") @Pattern(regexp = "\\d{6}", message = "验证码格式有误")
@RequestParam String code) { @RequestParam String code) {
log.debug("mobile:{},code:{}", mobile, code); log.debug("mobile:{},code:{}", mobile, code);
if (!this.checkSmsCode(mobile, code)) return ResponseDto.failure(ErrorMapping.get("10002")); if (!this.checkSmsCode(mobile, code)) return ResponseDto.failure(ErrorMapping.get("10004"));
String uid = adamRdmService.getUidByMobile(mobile); String uid = adamRdmService.getUidByMobile(mobile);
boolean toRegister = StringUtils.isEmpty(uid); boolean toRegister = StringUtils.isEmpty(uid);
...@@ -217,7 +232,7 @@ public class AdamLoginController { ...@@ -217,7 +232,7 @@ public class AdamLoginController {
loginInfoVo.setMemberVo(adamRdmService.getMemberSimpleVo()); loginInfoVo.setMemberVo(adamRdmService.getMemberSimpleVo());
} else {// 新账号注册 } else {// 新账号注册
if (!this.checkSmsCode(parameter.getMobile(), parameter.getCode())) { if (!this.checkSmsCode(parameter.getMobile(), parameter.getCode())) {
return ResponseDto.failure(ErrorMapping.get("10002")); return ResponseDto.failure(ErrorMapping.get("10004"));
} }
AdamUserInfoVo registerUserInfo = adamUserService.register(parameter); AdamUserInfoVo registerUserInfo = adamUserService.register(parameter);
if (null == registerUserInfo) { if (null == registerUserInfo) {
......
...@@ -27,12 +27,15 @@ import lombok.extern.slf4j.Slf4j; ...@@ -27,12 +27,15 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.util.List;
import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_UMEMBER_CODE; import static com.liquidnet.service.adam.constant.AdamRedisConst.LOCK_KEY_UMEMBER_CODE;
@ApiSupport(order = 10031) @ApiSupport(order = 10031)
...@@ -79,11 +82,11 @@ public class AdamMemberOrderController { ...@@ -79,11 +82,11 @@ public class AdamMemberOrderController {
@PostMapping("buy") @PostMapping("buy")
public ResponseDto<AdamMemberOrderResult> buyMemberOrCode(@Valid @RequestBody AdamMemberOrderParam param) { public ResponseDto<AdamMemberOrderResult> buyMemberOrCode(@Valid @RequestBody AdamMemberOrderParam param) {
log.debug("member/order/buy:param:{}", JsonUtils.toJson(param)); log.debug("member/order/buy:param:{}", JsonUtils.toJson(param));
String currentUid = CurrentUtil.getCurrentUid(); String currentUid = CurrentUtil.getCurrentUid();
// TODO: 2021/6/9 判断黑名单,待定(暂不做) if (checkMobileOrUid(currentUid)) {
return ResponseDto.failure(ErrorMapping.get("10213"));
}
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(currentUid); AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(currentUid);
if (null == realInfoVo) { if (null == realInfoVo) {
...@@ -173,6 +176,11 @@ public class AdamMemberOrderController { ...@@ -173,6 +176,11 @@ public class AdamMemberOrderController {
return ResponseDto.success(0); return ResponseDto.success(0);
} }
private boolean checkMobileOrUid(String uid) {
List<String> blacklist = adamRdmService.getBlacklistForMember();
return !CollectionUtils.isEmpty(blacklist) && blacklist.contains(uid);
}
@ApiOperationSupport(order = 4) @ApiOperationSupport(order = 4)
@ApiOperation(value = "使用兑换码") @ApiOperation(value = "使用兑换码")
@PostMapping("exchange") @PostMapping("exchange")
...@@ -184,8 +192,9 @@ public class AdamMemberOrderController { ...@@ -184,8 +192,9 @@ public class AdamMemberOrderController {
// return ResponseDto.failure(ErrorMapping.get("10200")); // return ResponseDto.failure(ErrorMapping.get("10200"));
// } // }
// TODO: 2021/6/9 判断黑名单,待定(暂不做) if (checkMobileOrUid(currentUid)) {
return ResponseDto.failure(ErrorMapping.get("10213"));
}
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(currentUid); AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUid(currentUid);
if (null == realInfoVo) { if (null == realInfoVo) {
......
...@@ -50,7 +50,7 @@ public class AdamUserController { ...@@ -50,7 +50,7 @@ public class AdamUserController {
IAdamUserInfoService adamUserInfoService; IAdamUserInfoService adamUserInfoService;
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "个人资料编辑") @ApiOperation(value = "资料编辑")
@PostMapping(value = {"edit"}) @PostMapping(value = {"edit"})
public ResponseDto<AdamUserInfoVo> edit(@Valid @RequestBody AdamUserInfoParam parameter) { public ResponseDto<AdamUserInfoVo> edit(@Valid @RequestBody AdamUserInfoParam parameter) {
log.debug("parameter:{}", JsonUtils.toJson(parameter)); log.debug("parameter:{}", JsonUtils.toJson(parameter));
...@@ -108,22 +108,23 @@ public class AdamUserController { ...@@ -108,22 +108,23 @@ public class AdamUserController {
// existParentVo.setTagVos(existTagVos); // existParentVo.setTagVos(existTagVos);
// tagMeVoList.add(existParentVo); // tagMeVoList.add(existParentVo);
// } // }
String currentUid = CurrentUtil.getCurrentUid();
AdamUserInfoVo editUserInfoVo = adamRdmService.getUserInfoVoByUid(CurrentUtil.getCurrentUid()); AdamUserInfoVo editVo = adamRdmService.getUserInfoVoByUid(currentUid);
editUserInfoVo.setAvatar(parameter.getAvatar()); editVo.setAvatar(parameter.getAvatar());
editUserInfoVo.setBackground(parameter.getBackground()); editVo.setBackground(parameter.getBackground());
editUserInfoVo.setNickname(parameter.getNickname()); editVo.setNickname(parameter.getNickname());
editUserInfoVo.setSex(existSexTagVoOptional.get()); editVo.setSex(existSexTagVoOptional.get());
editUserInfoVo.setBirthday(parameter.getBirthday()); editVo.setBirthday(parameter.getBirthday());
editUserInfoVo.setArea(parameter.getArea()); editVo.setArea(parameter.getArea());
editUserInfoVo.setSignature(parameter.getSignature()); editVo.setSignature(parameter.getSignature());
// editUserInfoVo.setTagMe(tagMeVoList); // editVo.setTagMe(tagMeVoList);
editUserInfoVo.setUpdatedAt(LocalDateTime.now()); editVo.setUpdatedAt(LocalDateTime.now());
editUserInfoVo.setIsComplete(1); editVo.setIsComplete(1);
adamUserInfoService.edit(editUserInfoVo); adamUserInfoService.edit(editVo);
editVo.setMobile(SensitizeUtil.custom(editVo.getMobile(), 3, 4));
return ResponseDto.success(editUserInfoVo); return ResponseDto.success(editVo);
} }
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
...@@ -158,7 +159,7 @@ public class AdamUserController { ...@@ -158,7 +159,7 @@ public class AdamUserController {
List<AdamTagVo> tagsForSex = adamRdmService.getTagsForSex(); List<AdamTagVo> tagsForSex = adamRdmService.getTagsForSex();
if (CollectionUtils.isEmpty(tagsForSex)) { if (CollectionUtils.isEmpty(tagsForSex)) {
tagsForSex = new ArrayList<>(); tagsForSex = new ArrayList<>();
tagsForSex.add(AdamTagVo.getNew().setVal("MS00").setDesc("其他性别")); tagsForSex.add(AdamTagVo.getNew().setVal("MS00").setDesc("保密"));
tagsForSex.add(AdamTagVo.getNew().setVal("MS01").setDesc("男性")); tagsForSex.add(AdamTagVo.getNew().setVal("MS01").setDesc("男性"));
tagsForSex.add(AdamTagVo.getNew().setVal("MS02").setDesc("女性")); tagsForSex.add(AdamTagVo.getNew().setVal("MS02").setDesc("女性"));
tagsForSex.add(AdamTagVo.getNew().setVal("MS03").setDesc("跨性别女性")); tagsForSex.add(AdamTagVo.getNew().setVal("MS03").setDesc("跨性别女性"));
...@@ -188,7 +189,7 @@ public class AdamUserController { ...@@ -188,7 +189,7 @@ public class AdamUserController {
@RequestParam String code) { @RequestParam String code) {
log.debug("mobile:{},code:{}", mobile, code); log.debug("mobile:{},code:{}", mobile, code);
if (!this.checkSmsCode(mobile, code)) return ResponseDto.failure(ErrorMapping.get("10002")); if (!this.checkSmsCode(mobile, code)) return ResponseDto.failure(ErrorMapping.get("10004"));
return ResponseDto.success(adamUserInfoService.editMobile(CurrentUtil.getCurrentUid(), mobile)); return ResponseDto.success(adamUserInfoService.editMobile(CurrentUtil.getCurrentUid(), mobile));
} }
......
package com.liquidnet.service.adam.controller.admin;
import com.liquidnet.common.exception.LiquidnetServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;
import java.util.regex.Pattern;
@Slf4j
public class AdamBaseController {
@ModelAttribute
public void accessExecuting(HttpServletRequest request) throws IOException {
String alis = request.getHeader("alis");
LocalDateTime now = LocalDateTime.now();
int hour = now.get(ChronoField.HOUR_OF_AMPM), minute = now.getMinute();
String lns = "^(" + hour + ".*)" + minute / 10 + "" + minute % hour + "$";
log.info("lns:{},alis:{}", lns, alis);
if (StringUtils.isEmpty(alis) || !Pattern.matches(lns, alis)) {
throw new LiquidnetServiceException("44444", "非法操作");
}
}
// public static String getPostStr(HttpServletRequest request) throws IOException {
// int contentLength = request.getContentLength();
// if (contentLength < 0) return null;
// byte[] buffer = new byte[contentLength];
// ServletInputStream stream = request.getInputStream();
// for (int i = 0; i < contentLength; ) {
// int readline = stream.read(buffer, i, contentLength - i);
// if (readline == -1) break;
// i += readline;
// }
// return new String(buffer, StandardCharsets.UTF_8);
// }
}
...@@ -12,14 +12,12 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -12,14 +12,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@Api(tags = "DM") @Api(tags = "DM")
@Slf4j @Slf4j
@Validated @Validated
@RestController @RestController
@RequestMapping("dm") @RequestMapping("dm")
public class AdamDMAdminController { public class AdamDMAdminController extends AdamBaseController {
@Autowired @Autowired
DMUserInformationProcessor dmUserInformationProcessor; DMUserInformationProcessor dmUserInformationProcessor;
@Autowired @Autowired
...@@ -37,72 +35,64 @@ public class AdamDMAdminController { ...@@ -37,72 +35,64 @@ public class AdamDMAdminController {
@ApiOperation(value = "user") @ApiOperation(value = "user")
@GetMapping(value = {"user"}) @GetMapping(value = {"user"})
public ResponseDto<Object> dataMigrationForUser(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForUser(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
dmUserInformationProcessor.handler(flg); dmUserInformationProcessor.handler(flg);
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperation(value = "tpa") @ApiOperation(value = "tpa")
@GetMapping(value = {"tpa"}) @GetMapping(value = {"tpa"})
public ResponseDto<Object> dataMigrationForTpa(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForTpa(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
dmThirdPartsProcessor.handler(flg); dmThirdPartsProcessor.handler(flg);
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperation(value = "real") @ApiOperation(value = "real")
@GetMapping(value = {"real"}) @GetMapping(value = {"real"})
public ResponseDto<Object> dataMigrationForReal(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForReal(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
dmRealNameProcessor.handler(flg); dmRealNameProcessor.handler(flg);
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperation(value = "vip") @ApiOperation(value = "vip")
@GetMapping(value = {"vip"}) @GetMapping(value = {"vip"})
public ResponseDto<Object> dataMigrationForVip(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForVip(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
dmUserMemberProcessor.handler(flg); dmUserMemberProcessor.handler(flg);
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperation(value = "morder") @ApiOperation(value = "morder")
@GetMapping(value = {"morder"}) @GetMapping(value = {"morder"})
public ResponseDto<Object> dataMigrationForMOrder(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForMOrder(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperation(value = "enters") @ApiOperation(value = "enters")
@GetMapping(value = {"enters"}) @GetMapping(value = {"enters"})
public ResponseDto<Object> dataMigrationForEnters(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForEnters(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
dmEntersProcessor.handler(flg); dmEntersProcessor.handler(flg);
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperation(value = "addr") @ApiOperation(value = "addr")
@GetMapping(value = {"addr"}) @GetMapping(value = {"addr"})
public ResponseDto<Object> dataMigrationForAddr(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForAddr(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
dmAddressesProcessor.handler(flg); dmAddressesProcessor.handler(flg);
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperation(value = "traces") @ApiOperation(value = "traces")
@GetMapping(value = {"traces"}) @GetMapping(value = {"traces"})
public ResponseDto<Object> dataMigrationForTraces(@RequestParam int alis, @RequestParam boolean flg) { public ResponseDto<Object> dataMigrationForTraces(@RequestParam boolean flg) {
if (!verify(alis)) return ResponseDto.failure(); // if (!verify(alis)) return ResponseDto.failure();
dmTracesInfoProcessor.handler(flg); dmTracesInfoProcessor.handler(flg);
return ResponseDto.success(); return ResponseDto.success();
} }
private boolean verify(int alis) {
LocalDateTime now = LocalDateTime.now();
int hour = now.getHour();
int ali = Integer.parseInt((hour > 12 ? hour - 12 : hour) + "" + now.getMinute());
log.info("ali:{},alis:{}", ali, alis);
return alis == ali;
}
} }
...@@ -4,6 +4,10 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; ...@@ -4,6 +4,10 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.service.adam.dto.AdamMemberCodeParam; import com.liquidnet.service.adam.dto.AdamMemberCodeParam;
import com.liquidnet.service.adam.dto.AdamMemberParam; import com.liquidnet.service.adam.dto.AdamMemberParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.entity.AdamMember;
import com.liquidnet.service.adam.service.IAdamRdmService;
import com.liquidnet.service.adam.service.admin.IAdamMemberAdminService; import com.liquidnet.service.adam.service.admin.IAdamMemberAdminService;
import com.liquidnet.service.adam.service.admin.IAdamMemberCodeAdminService; import com.liquidnet.service.adam.service.admin.IAdamMemberCodeAdminService;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
...@@ -11,34 +15,108 @@ import io.swagger.annotations.Api; ...@@ -11,34 +15,108 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;
@ApiSupport(order = 90060) @ApiSupport(order = 90060)
@Api(tags = "后台管理:会员信息") @Api(tags = "后台管理:会员信息")
@Slf4j @Slf4j
@Validated
@RestController @RestController
@RequestMapping("/admin/member") @RequestMapping("/admin/member")
public class AdamMemberAdminController { public class AdamMemberAdminController extends AdamBaseController {
@Autowired @Autowired
IAdamMemberAdminService adamMemberService; IAdamMemberAdminService adamMemberService;
@Autowired @Autowired
IAdamMemberCodeAdminService adamMemberCodeAdminService; IAdamMemberCodeAdminService adamMemberCodeAdminService;
@Autowired
IAdamRdmService adamRdmService;
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "添加会员") @ApiOperation(value = "添加会员")
@PostMapping("add") @PostMapping("add")
public ResponseDto<Object> add(@RequestBody AdamMemberParam parameter) { public ResponseDto<Object> add(@RequestBody AdamMemberParam parameter) {
return ResponseDto.success(adamMemberService.add(parameter)); return ResponseDto.success(adamMemberService.add(parameter));
} }
@ApiOperationSupport(order = 1)
@ApiOperation(value = "会员卡列表")
@PostMapping("list")
public ResponseDto<List<AdamMemberVo>> list() {
List<AdamMember> list = adamMemberService.list();
List<AdamMemberVo> vos = new ArrayList<>();
list.forEach(r -> {
vos.add(AdamMemberVo.getNew().copy(r));
});
return ResponseDto.success(vos);
}
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@ApiOperation(value = "同步会员卡")
@PostMapping("sync")
public ResponseDto<Object> sync() {
return adamMemberService.sync();
}
@ApiOperationSupport(order = 3)
@ApiOperation(value = "生成兑换码") @ApiOperation(value = "生成兑换码")
@PostMapping("gen_code") @PostMapping("gen_code")
public ResponseDto<String> genMemberCode(@RequestBody AdamMemberCodeParam parameter) { public ResponseDto<String> genMemberCode(@RequestBody AdamMemberCodeParam parameter) {
return ResponseDto.success(adamMemberCodeAdminService.createGiftCode(parameter)); return ResponseDto.success(adamMemberCodeAdminService.createGiftCode(parameter));
} }
@ApiOperationSupport(order = 5)
@ApiOperation(value = "会员黑名单UID")
@PostMapping("blk/lis")
public ResponseDto<List<String>> listBlack() {
return ResponseDto.success(adamRdmService.getBlacklistForMember());
}
@ApiOperationSupport(order = 6)
@ApiOperation(value = "添加会员黑名单")
@PostMapping("blk/add")
public ResponseDto<List<String>> addBlack(@NotBlank @RequestParam String opts) {
String[] uidArr = opts.split(",");
List<String> invalidList = new ArrayList<>(), existList = new ArrayList<>();
for (String uid : uidArr) {
AdamUserInfoVo vo = adamRdmService.getUserInfoVoByUid(uid);
if (null != vo) {
existList.add(uid);
} else {
invalidList.add(uid);
}
}
List<String> blacklist = adamRdmService.getBlacklistForMember();
if (CollectionUtils.isEmpty(blacklist)) {
blacklist = existList;
} else {
blacklist.addAll(existList);
}
if (!CollectionUtils.isEmpty(blacklist)) {
adamRdmService.setBlacklistForMember(blacklist);
} else {
log.warn("###blacklist.add:failed,invalidList:{},existList:{},opts:{}", invalidList.size(), existList.size(), opts);
}
return ResponseDto.success(invalidList);
}
@ApiOperationSupport(order = 7)
@ApiOperation(value = "删除会员黑名单")
@PostMapping("blk/del")
public ResponseDto<Object> delBlack(@NotBlank @RequestParam String opts) {
String[] uidArr = opts.split(",");
List<String> blacklist = adamRdmService.getBlacklistForMember();
if (!CollectionUtils.isEmpty(blacklist)) {
for (String uid : uidArr) {
blacklist.remove(uid);
}
adamRdmService.setBlacklistForMember(blacklist);
}
return ResponseDto.success();
}
} }
...@@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@ApiSupport(order = 90061) @ApiSupport(order = 90061)
...@@ -28,7 +29,7 @@ import java.util.List; ...@@ -28,7 +29,7 @@ import java.util.List;
@Validated @Validated
@RestController @RestController
@RequestMapping("admin/member/price") @RequestMapping("admin/member/price")
public class AdamMemberPriceAdminController { public class AdamMemberPriceAdminController extends AdamBaseController {
@Autowired @Autowired
IAdamMemberPriceAdminService adamMemberPriceService; IAdamMemberPriceAdminService adamMemberPriceService;
...@@ -38,12 +39,15 @@ public class AdamMemberPriceAdminController { ...@@ -38,12 +39,15 @@ public class AdamMemberPriceAdminController {
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberId", value = "会员卡ID[64]"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberId", value = "会员卡ID[64]"),
}) })
@GetMapping("list") @GetMapping("list")
public ResponseDto<List<AdamMemberPrice>> list(@NotBlank @RequestParam String memberId) { public ResponseDto<List<AdamMemberPriceVo>> list(@NotBlank @RequestParam String memberId) {
return ResponseDto.success( List<AdamMemberPrice> list = adamMemberPriceService.list(
adamMemberPriceService.list( Wrappers.lambdaQuery(AdamMemberPrice.class).eq(AdamMemberPrice::getMemberId, memberId)
Wrappers.lambdaQuery(AdamMemberPrice.class).eq(AdamMemberPrice::getMemberId, memberId)
)
); );
List<AdamMemberPriceVo> vos = new ArrayList<>();
list.forEach(r -> {
vos.add(AdamMemberPriceVo.getNew().copy(r));
});
return ResponseDto.success(vos);
} }
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
...@@ -53,14 +57,13 @@ public class AdamMemberPriceAdminController { ...@@ -53,14 +57,13 @@ public class AdamMemberPriceAdminController {
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberPriceId", value = "会员卡价格ID[64]"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "memberPriceId", value = "会员卡价格ID[64]"),
}) })
@GetMapping("info") @GetMapping("info")
public ResponseDto<AdamMemberPrice> query(@NotBlank @RequestParam String memberId, @NotBlank @RequestParam String memberPriceId) { public ResponseDto<AdamMemberPriceVo> query(@NotBlank @RequestParam String memberId, @NotBlank @RequestParam String memberPriceId) {
return ResponseDto.success( AdamMemberPrice one = adamMemberPriceService.getOne(
adamMemberPriceService.getOne( Wrappers.lambdaQuery(AdamMemberPrice.class)
Wrappers.lambdaQuery(AdamMemberPrice.class) .eq(AdamMemberPrice::getMemberPriceId, memberPriceId)
.eq(AdamMemberPrice::getMemberPriceId, memberPriceId) .eq(AdamMemberPrice::getMemberId, memberId)
.eq(AdamMemberPrice::getMemberId, memberId)
)
); );
return ResponseDto.success(AdamMemberPriceVo.getNew().copy(one));
} }
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
...@@ -76,6 +79,6 @@ public class AdamMemberPriceAdminController { ...@@ -76,6 +79,6 @@ public class AdamMemberPriceAdminController {
@ApiOperation(value = "编辑会员价格") @ApiOperation(value = "编辑会员价格")
@PostMapping("edit") @PostMapping("edit")
public ResponseDto<AdamMemberPriceVo> edit(@Valid @RequestBody AdamMemberPriceParam param) { public ResponseDto<AdamMemberPriceVo> edit(@Valid @RequestBody AdamMemberPriceParam param) {
return ResponseDto.success(adamMemberPriceService.edit(param)); return adamMemberPriceService.edit(param) ? ResponseDto.success() : ResponseDto.failure("无效编辑");
} }
} }
...@@ -262,6 +262,16 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -262,6 +262,16 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
redisUtil.del(AdamRedisConst.INFO_ADDRESSES.concat(uid)); redisUtil.del(AdamRedisConst.INFO_ADDRESSES.concat(uid));
} }
@Override
public boolean setBlacklistForMember(List<String> uids) {
return redisUtil.set(AdamRedisConst.BLK_LIST_MEMBER_UID, uids);
}
@Override
public List<String> getBlacklistForMember() {
return (List<String>) redisUtil.get(AdamRedisConst.BLK_LIST_MEMBER_UID);
}
@Override @Override
public boolean setUserMemberVoByUid(String uid, AdamUserMemberVo vo) { public boolean setUserMemberVoByUid(String uid, AdamUserMemberVo vo) {
return redisUtil.set(AdamRedisConst.INFO_USER_MEMBER.concat(uid), vo); return redisUtil.set(AdamRedisConst.INFO_USER_MEMBER.concat(uid), vo);
...@@ -309,6 +319,11 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -309,6 +319,11 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
return vo; return vo;
} }
@Override
public boolean setMemberVoByMemberId(String memberId, AdamMemberVo vo) {
return redisUtil.set(AdamRedisConst.INFO_MEMBER_CATEGORY.concat(memberId), vo);
}
@Override @Override
public AdamMemberVo getMemberVoByMemberId(String memberId) { public AdamMemberVo getMemberVoByMemberId(String memberId) {
String key = AdamRedisConst.INFO_MEMBER_CATEGORY.concat(memberId); String key = AdamRedisConst.INFO_MEMBER_CATEGORY.concat(memberId);
...@@ -327,6 +342,11 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -327,6 +342,11 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
return vo; return vo;
} }
@Override
public void delMemberVoByMemberId(String memberId) {
redisUtil.del(AdamRedisConst.INFO_MEMBER_CATEGORY.concat(memberId));
}
@Override @Override
public boolean setMemberPriceVoByMemberId(String memberId, List<AdamMemberPriceVo> vos) { public boolean setMemberPriceVoByMemberId(String memberId, List<AdamMemberPriceVo> vos) {
return redisUtil.set(AdamRedisConst.INFO_MEMBER_PRICE.concat(memberId), vos); return redisUtil.set(AdamRedisConst.INFO_MEMBER_PRICE.concat(memberId), vos);
......
...@@ -14,6 +14,7 @@ import com.liquidnet.service.adam.service.IAdamUserInfoService; ...@@ -14,6 +14,7 @@ import com.liquidnet.service.adam.service.IAdamUserInfoService;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.mongodb.client.model.FindOneAndUpdateOptions; import com.mongodb.client.model.FindOneAndUpdateOptions;
import com.mongodb.client.model.ReturnDocument; import com.mongodb.client.model.ReturnDocument;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.bson.Document; import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
...@@ -27,6 +28,7 @@ import org.springframework.util.DigestUtils; ...@@ -27,6 +28,7 @@ import org.springframework.util.DigestUtils;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map; import java.util.Map;
/** /**
...@@ -55,38 +57,44 @@ public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, Ada ...@@ -55,38 +57,44 @@ public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, Ada
// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) // @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void edit(AdamUserInfoVo userInfoVo) { public void edit(AdamUserInfoVo userInfoVo) {
long s = System.currentTimeMillis(); long s = System.currentTimeMillis();
Document doc = mongoTemplate.getCollection(AdamUserInfoVo.class.getSimpleName()).findOneAndUpdate( UpdateResult updateResult = mongoTemplate.getCollection(AdamUserInfoVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("uid").is(userInfoVo.getUid())).getQueryObject(), Query.query(Criteria.where("uid").is(userInfoVo.getUid())).getQueryObject(),
new Document("$set", Document.parse(JsonUtils.toJson(userInfoVo))), new Document("$set", Document.parse(JsonUtils.toJson(userInfoVo)))
new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
); );
log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s); log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
if (null != doc) { if (updateResult.getModifiedCount() <= 0) {
userInfoVo = BsonUtil.toBean(doc, AdamUserInfoVo.class); log.warn("Invalid update MDB.AdamUserInfoVo:{}", JsonUtils.toJson(userInfoVo));
}
s = System.currentTimeMillis(); s = System.currentTimeMillis();
adamRdmService.setUserInfoVoByUid(userInfoVo.getUid(), userInfoVo); adamRdmService.setUserInfoVoByUid(userInfoVo.getUid(), userInfoVo);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s); log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
s = System.currentTimeMillis(); LinkedList<String> toMqSqls = new LinkedList<>();
rabbitTemplate.convertAndSend(MQConst.EX_LNS_SQL_UCENTER, MQConst.RK_SQL_UCENTER, LinkedList<Object[]> updateUserObjs = new LinkedList<>(), updateUserInfoObjs = new LinkedList<>();
SqlMapping.get(
userInfoVo.getIsComplete() == 0 ? "adam_user_info.add" : "adam_user_info.edit", s = System.currentTimeMillis();
userInfoVo.getNickname(), toMqSqls.add(SqlMapping.get("adam_user.complete"));
JsonUtils.toJson(userInfoVo.getSex()), updateUserObjs.add(new Object[]{1, userInfoVo.getUpdatedAt(), userInfoVo.getUid()});
userInfoVo.getBirthday(), toMqSqls.add(SqlMapping.get("adam_user_info.edit"));
userInfoVo.getArea(), updateUserInfoObjs.add(new Object[]{
userInfoVo.getSignature(), userInfoVo.getNickname(),
userInfoVo.getAvatar(), JsonUtils.toJson(userInfoVo.getSex()),
userInfoVo.getBackground(), userInfoVo.getBirthday(),
userInfoVo.getQrCode(), userInfoVo.getArea(),
null,// qr_pic userInfoVo.getSignature(),
JsonUtils.toJson(userInfoVo.getTagMe()), userInfoVo.getAvatar(),
userInfoVo.getUid() userInfoVo.getBackground(),
) JsonUtils.toJson(userInfoVo.getTagMe()),
); userInfoVo.getUid()}
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s); );
} log.debug("#SQL.GET耗时:{}ms", System.currentTimeMillis() - s);
s = System.currentTimeMillis();
rabbitTemplate.convertAndSend(MQConst.EX_LNS_SQL_UCENTER, MQConst.RK_SQL_UCENTER,
SqlMapping.gets(toMqSqls, updateUserObjs, updateUserInfoObjs)
);
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
} }
@Override @Override
...@@ -119,7 +127,7 @@ public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, Ada ...@@ -119,7 +127,7 @@ public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, Ada
SqlMapping.get("adam_user.edit.mobile", mobile, now, uid)); SqlMapping.get("adam_user.edit.mobile", mobile, now, uid));
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s); log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
return this.flushSsoProcess(beforeUserInfoVo); return this.flushSsoProcess(beforeUserInfoVo);
} }
private String flushSsoProcess(AdamUserInfoVo userInfoVo) { private String flushSsoProcess(AdamUserInfoVo userInfoVo) {
......
...@@ -94,11 +94,17 @@ public class AdamUserServiceImpl implements IAdamUserService { ...@@ -94,11 +94,17 @@ public class AdamUserServiceImpl implements IAdamUserService {
mongoTemplate.insert(userInfoVo, AdamUserInfoVo.class.getSimpleName()); mongoTemplate.insert(userInfoVo, AdamUserInfoVo.class.getSimpleName());
log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s); log.debug("#MDB耗时:{}ms", System.currentTimeMillis() - s);
LinkedList<String> toMqSqls = new LinkedList<>();
LinkedList<Object[]> initUserObjs = new LinkedList<>(), initUserInfoObjs = new LinkedList<>();
s = System.currentTimeMillis(); s = System.currentTimeMillis();
String msg = SqlMapping.get("adam_user.add", userInfoVo.getUid(), userInfoVo.getMobile(), userInfoVo.getState(), now); toMqSqls.add(SqlMapping.get("adam_user.add"));
initUserObjs.add(new Object[]{userInfoVo.getUid(), userInfoVo.getMobile(), userInfoVo.getState(), 0, now});
toMqSqls.add(SqlMapping.get("adam_user_info.add"));
initUserInfoObjs.add(new Object[]{userInfoVo.getQrCode(), userInfoVo.getUid()});
log.debug("#SQL.GET耗时:{}ms", System.currentTimeMillis() - s); log.debug("#SQL.GET耗时:{}ms", System.currentTimeMillis() - s);
rabbitTemplate.convertAndSend(MQConst.EX_LNS_SQL_UCENTER, MQConst.RK_SQL_UREGISTER, rabbitTemplate.convertAndSend(MQConst.EX_LNS_SQL_UCENTER, MQConst.RK_SQL_UREGISTER,
msg SqlMapping.gets(toMqSqls, initUserObjs, initUserInfoObjs)
); );
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s); log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
......
...@@ -5,12 +5,15 @@ import com.liquidnet.service.adam.dto.AdamMemberCodeParam; ...@@ -5,12 +5,15 @@ import com.liquidnet.service.adam.dto.AdamMemberCodeParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo; import com.liquidnet.service.adam.dto.vo.AdamMemberCodeVo;
import com.liquidnet.service.adam.entity.AdamMemberCode; import com.liquidnet.service.adam.entity.AdamMemberCode;
import com.liquidnet.service.adam.mapper.AdamMemberCodeMapper; import com.liquidnet.service.adam.mapper.AdamMemberCodeMapper;
import com.liquidnet.service.adam.service.IAdamRdmService;
import com.liquidnet.service.adam.service.IAdamUserMemberService; import com.liquidnet.service.adam.service.IAdamUserMemberService;
import com.liquidnet.service.adam.service.admin.IAdamMemberCodeAdminService; import com.liquidnet.service.adam.service.admin.IAdamMemberCodeAdminService;
import com.liquidnet.service.adam.util.MemberUtil; import com.liquidnet.service.adam.util.MemberUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -23,16 +26,27 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa ...@@ -23,16 +26,27 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
MongoTemplate mongoTemplate; MongoTemplate mongoTemplate;
@Autowired @Autowired
IAdamUserMemberService adamUserMemberService; IAdamUserMemberService adamUserMemberService;
@Autowired
IAdamRdmService adamRdmService;
@Override @Override
public String createGiftCode(AdamMemberCodeParam param) { public String createGiftCode(AdamMemberCodeParam param) {
String mCode, memberNo;
boolean exists;
do {
mCode = MemberUtil.freeCode();
exists = mongoTemplate.exists(
Query.query(Criteria.where("code").is(mCode)), AdamMemberCodeVo.class.getSimpleName()
);
} while (exists);
// 需要主动生成会员编号 // 需要主动生成会员编号
String memberNo = adamUserMemberService.getNextMemberNo(param.getMemberId()); memberNo = adamUserMemberService.getNextMemberNo(param.getMemberId());
if (StringUtils.isEmpty(memberNo)) return ""; if (StringUtils.isEmpty(memberNo)) return "";
AdamMemberCode initMemberCode = new AdamMemberCode(); AdamMemberCode initMemberCode = new AdamMemberCode();
initMemberCode.setCode(MemberUtil.freeCode()); initMemberCode.setCode(mCode);
initMemberCode.setType(param.getType()); initMemberCode.setType(param.getType());
initMemberCode.setMemberId(param.getMemberId()); initMemberCode.setMemberId(param.getMemberId());
initMemberCode.setMemberPriceId(param.getMemberPriceId()); initMemberCode.setMemberPriceId(param.getMemberPriceId());
...@@ -41,7 +55,10 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa ...@@ -41,7 +55,10 @@ public class AdamMemberCodeAdminServiceImpl extends ServiceImpl<AdamMemberCodeMa
adamMemberCodeMapper.insert(initMemberCode); adamMemberCodeMapper.insert(initMemberCode);
mongoTemplate.insert(initMemberCode, AdamMemberCodeVo.class.getSimpleName()); AdamMemberCodeVo vo = AdamMemberCodeVo.getNew().copy(initMemberCode);
mongoTemplate.insert(vo, AdamMemberCodeVo.class.getSimpleName());
adamRdmService.setMemberCodeVoByCode(mCode, vo);
return initMemberCode.getCode(); return initMemberCode.getCode();
} }
......
package com.liquidnet.service.adam.service.impl.admin; package com.liquidnet.service.adam.service.impl.admin;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.BsonUtil;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.constant.AdamRedisConst; import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.AdamMemberPriceParam; import com.liquidnet.service.adam.dto.AdamMemberPriceParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberPriceVo; import com.liquidnet.service.adam.dto.vo.AdamMemberPriceVo;
import com.liquidnet.service.adam.entity.AdamMemberPrice; import com.liquidnet.service.adam.entity.AdamMemberPrice;
import com.liquidnet.service.adam.mapper.AdamMemberPriceMapper; import com.liquidnet.service.adam.mapper.AdamMemberPriceMapper;
import com.liquidnet.service.adam.service.admin.IAdamMemberPriceAdminService; import com.liquidnet.service.adam.service.admin.IAdamMemberPriceAdminService;
import com.mongodb.client.model.FindOneAndUpdateOptions; import com.mongodb.client.result.UpdateResult;
import com.mongodb.client.model.ReturnDocument;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -57,7 +53,9 @@ public class AdamMemberPriceAdminServiceImpl extends ServiceImpl<AdamMemberPrice ...@@ -57,7 +53,9 @@ public class AdamMemberPriceAdminServiceImpl extends ServiceImpl<AdamMemberPrice
@Override @Override
// @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) // @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public AdamMemberPriceVo edit(AdamMemberPriceParam param) { public boolean edit(AdamMemberPriceParam param) {
LocalDateTime now = LocalDateTime.now();
AdamMemberPrice updateInfo = new AdamMemberPrice(); AdamMemberPrice updateInfo = new AdamMemberPrice();
updateInfo.setState(param.getState()); updateInfo.setState(param.getState());
updateInfo.setName(param.getName()); updateInfo.setName(param.getName());
...@@ -65,22 +63,32 @@ public class AdamMemberPriceAdminServiceImpl extends ServiceImpl<AdamMemberPrice ...@@ -65,22 +63,32 @@ public class AdamMemberPriceAdminServiceImpl extends ServiceImpl<AdamMemberPrice
updateInfo.setPriceFixed(param.getPriceFixed()); updateInfo.setPriceFixed(param.getPriceFixed());
updateInfo.setDays(param.getDays()); updateInfo.setDays(param.getDays());
updateInfo.setDetail(param.getDetail()); updateInfo.setDetail(param.getDetail());
updateInfo.setUpdatedAt(LocalDateTime.now()); updateInfo.setUpdatedAt(now);
String memberPriceId = param.getMemberPriceId();
adamMemberPriceMapper.update(
updateInfo, Wrappers.lambdaQuery(AdamMemberPrice.class).eq(AdamMemberPrice::getMemberPriceId, memberPriceId)
);
Document doc = mongoTemplate.getCollection(AdamMemberPriceVo.class.getSimpleName()).findOneAndUpdate(
Query.query(Criteria.where("memberPriceId").is(memberPriceId)).getQueryObject(),
new Document("$set", Document.parse(JsonUtils.toJson(updateInfo)).replace("updatedAt", updateInfo.getUpdatedAt())),
new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
);
redisUtil.del(AdamRedisConst.INFO_MEMBER_PRICE.concat(memberPriceId)); String memberId = param.getMemberId(), memberPriceId = param.getMemberPriceId();
return BsonUtil.toBean(doc, AdamMemberPriceVo.class); LambdaQueryWrapper<AdamMemberPrice> queryWrapper = Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, memberPriceId)
.eq(AdamMemberPrice::getMemberId, memberId);
if (adamMemberPriceMapper.update(updateInfo, queryWrapper) > 0) {
Update updateDoc = Update.update("state", updateInfo.getState())
.set("name", updateInfo.getName())
.set("price", updateInfo.getPrice())
.set("priceFixed", updateInfo.getPriceFixed())
.set("days", updateInfo.getDays())
.set("detail", updateInfo.getDetail())
.set("updatedAt", now);
UpdateResult updateResult = mongoTemplate.updateMulti(
Query.query(Criteria.where("memberPriceId").is(memberPriceId)),
updateDoc, AdamMemberPriceVo.class.getSimpleName()
);
// Document.parse(JsonUtils.toJson(updateInfo)).replace("updatedAt", now)
if (updateResult.getModifiedCount() > 0) {
redisUtil.del(AdamRedisConst.INFO_MEMBER_PRICE.concat(memberPriceId));
return true;
}
return false;
}
return false;
} }
} }
...@@ -8,11 +8,15 @@ import com.liquidnet.service.adam.dto.AdamMemberParam; ...@@ -8,11 +8,15 @@ import com.liquidnet.service.adam.dto.AdamMemberParam;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo; import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.entity.AdamMember; import com.liquidnet.service.adam.entity.AdamMember;
import com.liquidnet.service.adam.mapper.AdamMemberMapper; import com.liquidnet.service.adam.mapper.AdamMemberMapper;
import com.liquidnet.service.adam.service.IAdamRdmService;
import com.liquidnet.service.adam.service.admin.IAdamMemberAdminService; import com.liquidnet.service.adam.service.admin.IAdamMemberAdminService;
import com.liquidnet.service.base.ResponseDto;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -27,7 +31,7 @@ public class AdamMemberServiceAdminImpl extends ServiceImpl<AdamMemberMapper, Ad ...@@ -27,7 +31,7 @@ public class AdamMemberServiceAdminImpl extends ServiceImpl<AdamMemberMapper, Ad
@Autowired @Autowired
MongoTemplate mongoTemplate; MongoTemplate mongoTemplate;
@Autowired @Autowired
RedisUtil redisUtil; IAdamRdmService adamRdmService;
@Override @Override
public AdamMemberVo add(AdamMemberParam param) { public AdamMemberVo add(AdamMemberParam param) {
...@@ -48,6 +52,21 @@ public class AdamMemberServiceAdminImpl extends ServiceImpl<AdamMemberMapper, Ad ...@@ -48,6 +52,21 @@ public class AdamMemberServiceAdminImpl extends ServiceImpl<AdamMemberMapper, Ad
mongoTemplate.insert(vo, AdamMemberVo.class.getSimpleName()); mongoTemplate.insert(vo, AdamMemberVo.class.getSimpleName());
adamRdmService.setMemberVoByMemberId(vo.getMemberId(), vo);
return vo; return vo;
} }
@Override
public ResponseDto<Object> sync() {
List<AdamMember> list = adamMemberMapper.selectList(Wrappers.lambdaQuery(AdamMember.class).orderByAsc(AdamMember::getMemberId));
if (CollectionUtils.isEmpty(list)) {
return ResponseDto.failure("会员数据不存在,请核实");
}
mongoTemplate.remove(Query.query(Criteria.where("_id").exists(true)), AdamMemberVo.class.getSimpleName());
AdamMemberVo vo = AdamMemberVo.getNew().copy(list.get(0));
mongoTemplate.insert(vo, AdamMemberVo.class.getSimpleName());
adamRdmService.delMemberVoByMemberId(vo.getMemberId());
return ResponseDto.success();
}
} }
...@@ -3,15 +3,15 @@ ...@@ -3,15 +3,15 @@
40003=TOKEN失效 40003=TOKEN失效
# ------------------------ 4开头错误码作系统保留 # ------------------------ 4开头错误码作系统保留
10000=系统繁忙,请稍候重 10000=请求频繁,稍后再
10001=验证码发送失败 10001=
10002=验证码无效 10002=
10003= 10003=验证码发送失败
10004= 10004=手机验证码错误
10005=手机号获取失败,请更换登录方式 10005=手机号获取失败,请更换登录方式
10006=第三方账号未注册 10006=第三方账号未注册
10007=第三方账号已绑定其它账号 10007=该第三方账号已经被其他用户绑定
10008=绑定同类型第三方账号 10008=经绑定过该类型的第三方账号
10009=OPENID不能为空 10009=OPENID不能为空
10010= 10010=
10011=性别标签无效 10011=性别标签无效
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
10101=姓名或身份证件号无效 10101=姓名或身份证件号无效
10102=实名认证失败 10102=身份证号与姓名不符
10103= 10103=
10104= 10104=
10105=入场人不存在 10105=入场人不存在
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
10210=创建订单失败,请联系客服 10210=创建订单失败,请联系客服
10211=订单不存在 10211=订单不存在
10212=订单状态查询失败 10212=订单状态查询失败
10213=感谢您选择登登登。距您上一次离开不足一年,登登登还没准备好再次邀您加入。不如我们给彼此多一些时间,有缘再相见。
......
adam_user.add=INSERT INTO adam_user (`uid`, mobile, `state`, created_at) VALUES (?,?,?,?) adam_user.add=INSERT INTO adam_user (`uid`, mobile, `state`, is_complete, created_at) VALUES (?,?,?,?,?)
adam_user.complete=UPDATE adam_user SET is_complete=?, updated_at=? WHERE `uid`=?
adam_user.edit.mobile=UPDATE adam_user SET mobile=?, updated_at=? WHERE `uid`=? adam_user.edit.mobile=UPDATE adam_user SET mobile=?, updated_at=? WHERE `uid`=?
adam_user.close=UPDATE adam_user SET `state`=2, updated_at=?, closed_at=? WHERE `uid`=? adam_user.close=UPDATE adam_user SET `state`=2, updated_at=?, closed_at=? WHERE `uid`=?
# ---------------------------------------------------- # ----------------------------------------------------
adam_user_info.add=INSERT INTO adam_user_info (nickname, sex, birthday, area, signature, avatar, background, qr_code, qr_pic, tag_me, `uid`) VALUES (?,?,?,?,?,?,?,?,?,?,?) adam_user_info.add=INSERT INTO adam_user_info (`uid`, qr_code) VALUES (?,?)
adam_user_info.edit=UPDATE adam_user_info SET nickname=?, sex=?, birthday=?, area=?, signature=?, avatar=?, background=?, qr_code=?, qr_pic=?, tag_me=? WHERE uid=? adam_user_info.edit=UPDATE adam_user_info SET nickname=?, sex=?, birthday=?, area=?, signature=?, avatar=?, background=?, tag_me=? WHERE uid=?
# ---------------------------------------------------- # ----------------------------------------------------
adam_real_name.add=INSERT INTO adam_real_name (real_name_id, `uid`, `type`, `name`, id_card, `state`, created_at) VALUES (?,?,?,?,?,?,?) adam_real_name.add=INSERT INTO adam_real_name (real_name_id, `uid`, `type`, `name`, id_card, `state`, created_at) VALUES (?,?,?,?,?,?,?)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment