Commit b1fe9757 authored by hezhen's avatar hezhen

Merge branch 'base-modify' of http://113.105.137.151:22280/youjj/cloud-platform into base-modify

parents e5d71f19 f223f6f3
......@@ -38,6 +38,10 @@
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
......
......@@ -93,6 +93,12 @@
<artifactId>ace-interface</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-admin-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-auth-client</artifactId>
......
......@@ -4,7 +4,6 @@ import com.github.wxiaoqi.security.api.vo.config.HeaderConfig;
import com.github.wxiaoqi.security.auth.client.EnableAceAuthClient;
import com.github.wxiaoqi.security.gate.utils.DBLog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
......@@ -17,7 +16,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringCloudApplication
@EnableDiscoveryClient
@EnableAceAuthClient
@EnableFeignClients(value = {"com.github.wxiaoqi.security.auth.client.feign","com.github.wxiaoqi.security.gate.feign"},defaultConfiguration = HeaderConfig.class)
@EnableFeignClients(value = {"com.github.wxiaoqi.security.auth.client.feign","com.github.wxiaoqi.security.gate.feign","com.github.wxiaoqi.security.admin.feign"},defaultConfiguration = HeaderConfig.class)
public class GatewayServerBootstrap {
public static void main(String[] args) {
DBLog.getInstance().start();
......
package com.github.wxiaoqi.security.gate.filter;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo;
import com.github.wxiaoqi.security.api.vo.log.LogInfo;
import com.github.wxiaoqi.security.auth.client.config.ServiceAuthConfig;
......@@ -54,7 +57,7 @@ import java.util.stream.Stream;
*/
@Configuration
@Slf4j
public class AccessGatewayFilter implements GlobalFilter{
public class AccessGatewayFilter implements GlobalFilter {
@Autowired
@Lazy
private IUserService userService;
......@@ -67,6 +70,9 @@ public class AccessGatewayFilter implements GlobalFilter{
@Lazy
private ILogService logService;
@Autowired
UserFeign userFeign;
@Value("${gate.ignore.startWith}")
private String startWith;
......@@ -113,8 +119,8 @@ public class AccessGatewayFilter implements GlobalFilter{
// IJWTInfo user = null;
// try {
// user = getJWTUser(request, mutate);
// 申请客户端密钥头
mutate.header(serviceAuthConfig.getTokenHeader(), serviceAuthUtil.getClientToken());
// 申请客户端密钥头
mutate.header(serviceAuthConfig.getTokenHeader(), serviceAuthUtil.getClientToken());
// } catch (Exception e) {
// log.info("调用免登陆接口的用户Token过期异常", e);
// }
......@@ -257,7 +263,7 @@ public class AccessGatewayFilter implements GlobalFilter{
private boolean isStartWith(String requestUri) {
boolean flag = false;
for (String s : GATE_WAY_UNAUTH.split(",")) {
if(requestUri.contains(s)) {
if (requestUri.contains(s)) {
return true;
}
}
......@@ -281,12 +287,12 @@ public class AccessGatewayFilter implements GlobalFilter{
}
public void setLogService(ServerWebExchange exchange, GatewayFilterChain chain) {
public void setLogService(ServerWebExchange exchange, GatewayFilterChain chain) {
MediaType mediaType = exchange.getRequest().getHeaders().getContentType();
ServerRequest serverRequest = new DefaultServerRequest(exchange);
// 如果是json格式,将body内容转化为object or map 都可
if (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)){
if (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)) {
Mono<Object> modifiedBody = serverRequest.bodyToMono(Object.class)
.flatMap(body -> {
recordLog(exchange.getRequest(), body);
......@@ -295,7 +301,7 @@ public class AccessGatewayFilter implements GlobalFilter{
}
// 如果是表单请求
else if(MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(mediaType)){
else if (MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(mediaType)) {
Mono<String> modifiedBody = serverRequest.bodyToMono(String.class)
// .log("modify_request_mono", Level.INFO)
.flatMap(body -> {
......@@ -310,36 +316,76 @@ public class AccessGatewayFilter implements GlobalFilter{
// 无法兼容的请求,则不读取body,像Get请求这种
recordLog(exchange.getRequest(), "");
}
private void recordLog(ServerHttpRequest request, Object body) {
// 记录要访问的url
StringBuilder builder = new StringBuilder();
log.info("=================请求uri:" + request.getURI().getRawPath());
// 记录访问的方法
HttpMethod method = request.getMethod();
if (null != method){
log.info("=================请求方法:" + method.name());
}
// 记录头部信息
builder.append(", header { ");
for (Map.Entry<String, List<String>> entry : request.getHeaders().entrySet()) {
builder.append(entry.getKey()).append(":").append(StringUtils.join(entry.getValue(), ",")).append(",");
}
log.info("=================请求头header:" + builder.toString());
// 记录参数
builder = new StringBuilder();
// 处理get的请求
if (null != method && HttpMethod.GET.matches(method.name())) {
// 记录请求的参数信息 针对GET 请求
MultiValueMap<String, String> queryParams = request.getQueryParams();
for (Map.Entry<String, List<String>> entry : queryParams.entrySet()) {
builder.append(entry.getKey()).append("=").append(StringUtils.join(entry.getValue(), ",")).append(",");
if (!getNotLogUri().contains(request.getURI().getRawPath())) {
StringBuilder builder = new StringBuilder();
log.info("=================请求uri:" + request.getURI().getRawPath());
// 记录访问的方法
HttpMethod method = request.getMethod();
if (null != method) {
log.info("=================请求方法:" + method.name());
}
request.getHeaders().add("uuid", UUID.randomUUID().toString());
// 记录头部信息
builder.append(", header { ");
for (Map.Entry<String, List<String>> entry : request.getHeaders().entrySet()) {
builder.append(entry.getKey()).append(":").append(StringUtils.join(entry.getValue(), ",")).append(",");
if("uuid".equals(entry.getKey())) {
if(entry.getValue() != null && entry.getValue().size() > 0) {
log.info("=================请求方法uuid:" + entry.getValue().get(0));
}
}
if("Authorization".equals(entry.getKey())) {
if(entry.getValue() != null && entry.getValue().size() > 0) {
getAdminUserInfo(entry.getValue().get(0));
}
}
}
log.info("=================请求头header:" + builder.toString());
// 记录参数
builder = new StringBuilder();
// 处理get的请求
if (null != method && HttpMethod.GET.matches(method.name())) {
// 记录请求的参数信息 针对GET 请求
MultiValueMap<String, String> queryParams = request.getQueryParams();
for (Map.Entry<String, List<String>> entry : queryParams.entrySet()) {
builder.append(entry.getKey()).append("=").append(StringUtils.join(entry.getValue(), ",")).append(",");
}
} else {
// 从body中读取参数
builder.append(body);
}
log.info("=================请求参数:" + builder.toString());
}
else {
// 从body中读取参数
builder.append(body);
}
private void getAdminUserInfo(String token) {
if(token !=null) {
UserDTO userDTO = userFeign.userinfoByToken(token).getData();
if(userDTO != null) {
log.info("=================后台用户名:username = {}", userDTO.getUsername());
log.info("=================后台姓名: name = {}", userDTO.getName());
} else {
AppUserDTO appUserDTO = userFeign.userDetailByToken(token).getData();
if(appUserDTO != null) {
log.info("=================APP用户名:userId = {}", appUserDTO.getUserid());
log.info("=================APP姓名: name = {}", appUserDTO.getRealname());
log.info("=================APP手机号: phone = {}", appUserDTO.getUsername());
}
}
}
log.info("=================请求参数:" + builder.toString());
}
@Value("${logback.ignore-log-path}")
String[] path;
public List<String> getNotLogUri() {
return Arrays.asList(path);
}
}
......@@ -22,7 +22,7 @@
<filter class="com.github.wxiaoqi.security.common.filter.DenyFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/sys.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件输出的文件名 -->
<MaxHistory>30</MaxHistory><!--日志文件保留天数 -->
<MaxHistory>15</MaxHistory><!--日志文件保留天数 -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
......@@ -33,7 +33,7 @@
<filter class="com.github.wxiaoqi.security.common.filter.AcceptFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件输出的文件名 -->
<MaxHistory>30</MaxHistory><!--日志文件保留天数 -->
<MaxHistory>15</MaxHistory><!--日志文件保留天数 -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
......
......@@ -7,15 +7,17 @@ import com.github.wxiaoqi.security.admin.mapper.AppUserDetailMapper;
import com.github.wxiaoqi.security.admin.rpc.service.AppPermissionService;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.ReferralCodeUtil;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.*;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -29,10 +31,6 @@ import java.util.stream.Collectors;
@Transactional(rollbackFor = Exception.class)
public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail> {
@Autowired
private AppUserLoginBiz appUserLoginBiz;
@Override
@CacheClear(pre = "user{1.userid}")
public void updateSelectiveById(AppUserDetail entity) {
......@@ -105,9 +103,6 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
}
//更新用户信息
public Map<Integer, AppUserDetail> findUserIdAndUserDetailMapByMemberIds(List<Integer> memberIds) {
Map<Integer, AppUserDetail> userIdAndAppUserDetailMap = new HashMap<>();
......
......@@ -33,6 +33,8 @@ import java.util.stream.Collectors;
@Transactional(rollbackFor = Exception.class)
public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
private static final String WX_TYPE="wx";
private static final String QQ_TYPE="q";
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
@Override
......@@ -224,4 +226,36 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
public List<Integer> findAllExistUserIds(){
return mapper.selectAllExistUserIds();
}
/**
* 检查第三方是否绑定
* @param wxOpenId
* @param wxUnionId
* @param openId
* @return
*/
public boolean checkThirdPartyBindingState(String wxOpenId, String wxUnionId, String openId) {
AppUserLogin appUserLogin = new AppUserLogin();
appUserLogin.setWxOpenid(wxOpenId);
appUserLogin.setUnionid(wxUnionId);
appUserLogin.setOpenid(openId);
return mapper.selectOne(appUserLogin) != null;
}
@CacheClear(pre = "user{2}")
public void unBindThirdPartyByType(String type,String username,Integer userId) {
AppUserLogin appUserLogin = new AppUserLogin();
appUserLogin.setId(userId);
//微信解绑
if (WX_TYPE.equals(type)){
appUserLogin.setWxOpenid("");
appUserLogin.setUnionid("");
mapper.updateByPrimaryKeySelective(appUserLogin);
}
//qq解绑
if (QQ_TYPE.equals(type)){
appUserLogin.setOpenid("");
mapper.updateByPrimaryKeySelective(appUserLogin);
}
}
}
......@@ -10,6 +10,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.task.TaskExecutor;
......@@ -146,14 +147,14 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
if (freeDays > 0 && freeDays >= days) {
freeDays = freeDays - days;
baseUserMember.setRentFreeDays(freeDays);
}
Integer payCount = userMemberVo.getPayCount() == null ? 0 : userMemberVo.getPayCount();
}
Integer payCount = userMemberVo.getPayCount() == null ? 0 : userMemberVo.getPayCount();
/* if (days > 0) {
payCount = payCount + 1;
}*/
baseUserMember.setPayCount(payCount);
getMyBiz().updateSelectiveById(baseUserMember);
num = freeDays;
baseUserMember.setPayCount(payCount);
getMyBiz().updateSelectiveById(baseUserMember);
num = freeDays;
} else if (type == 2) {
/*Integer payCount=userMemberVo.getPayCount()==null?0:userMemberVo.getPayCount();
payCount=payCount+1;
......@@ -220,15 +221,14 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
WeekendSqls.<BaseUserMember>custom()
.andEqualTo(BaseUserMember::getUserId, baseUserMemberVO.getUserId())
).build();
List<BaseUserMember> baseUserMembers = mapper.selectByExample(exa);
BaseUserMember baseUserMember = new BaseUserMember();
BeanUtilsBean.getInstance().copyProperties(baseUserMember, baseUserMemberVO);
if (baseUserMembers == null || baseUserMembers.size() == 0) {
if (baseUserMemberVO.getMemberLevel() == null || baseUserMember.getValidTime() == null) return;
if (CollectionUtils.isEmpty(baseUserMembers)) {
if (baseUserMemberVO.getMemberLevel() == null || baseUserMember.getValidTime() == null||baseUserMember.getValidTime()<0) {
throw new BaseException("设置无效!无会员等级、会员有效期或会员有效期为负数!");
}
baseUserMember.setCrtTime(System.currentTimeMillis());
baseUserMember.setIsDel(0);
baseUserMember.setPayCount(0);
......@@ -238,21 +238,13 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
baseUserMember.setBuyCount(buyCount + 1);
insertSelective(baseUserMember);
return;
} else if (baseUserMembers.size() == 1) {
if (baseUserMemberVO.getMemberLevel() == null || baseUserMember.getValidTime() == null) {
baseUserMember.setTotalNumber(0);
baseUserMember.setRentFreeDays(0);
} else {
}
baseUserMember.setUpdTime(System.currentTimeMillis());
baseUserMember.setBuyCount(baseUserMembers.get(0).getBuyCount() + 1);
baseUserMember.setId(baseUserMembers.get(0).getId());
mapper.updateByPrimaryKeySelective(baseUserMember);
} else {
throw new BaseException("Member purchase repeat!");
throw new BaseException("错误!该账号有多条会员信息!");
}
......
......@@ -9,6 +9,8 @@ import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.admin.vo.UserMemberVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.msg.TableResultResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
......@@ -18,8 +20,10 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import java.util.List;
import java.util.Map;
......@@ -59,6 +63,8 @@ public class AppUserController extends CommonBaseController {
@Autowired
private MyWaterBiz myWaterBiz;
@GetMapping("page")
public TableResultResponse list(@RequestParam Map<String, Object> params) {
Query query = new Query(params);
......@@ -187,6 +193,58 @@ public class AppUserController extends CommonBaseController {
return ObjectRestResponse.succ();
}
/**
* 第三方登录绑定
* @param wxOpenId
* @param wxUnionId
* @param openId
* @param request
* @return
*/
@PutMapping("/third_party_binding")
public ObjectRestResponse bindingThirdParty(@RequestParam(value = "wxOpenId",required = false) String wxOpenId,
@RequestParam(value="wxUnionId",required = false) String wxUnionId,
@RequestParam(value = "openId",required = false) String openId,
HttpServletRequest request){
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
String userId = infoFromToken.getId();
boolean isBinding = appUserLoginBiz.checkThirdPartyBindingState(wxOpenId,wxUnionId,openId);
if (isBinding){
return ObjectRestResponse.createFailedResult(400,"该微信已经绑定过");
}else {
AppUserLogin appUserLogin = new AppUserLogin();
appUserLogin.setId(Integer.valueOf(userId));
appUserLogin.setWxOpenid(wxOpenId);
appUserLogin.setUnionid(wxUnionId);
appUserLogin.setOpenid(openId);
appUserLoginBiz.bindOpenid(appUserLogin);
}
} catch (Exception e) {
throw new BaseException(e);
}
return ObjectRestResponse.succ();
}
/**
* 第三方登录解绑
* @param request
* @return
*/
@PutMapping("third_party_unbind")
public ObjectRestResponse unBindingThirdParty(@RequestParam("type") String type , HttpServletRequest request){
try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
appUserLoginBiz.unBindThirdPartyByType(type,infoFromToken.getUniqueName(),Integer.valueOf(infoFromToken.getId()));
} catch (Exception e) {
throw new BaseException(e);
}
return ObjectRestResponse.succ();
}
/**
* 更新用户信息
* @param username
......
......@@ -32,6 +32,19 @@ public class BaseUserMemberController extends BaseController<BaseUserMemberBiz,
// /**
// * 设置用户会员
// * @param userMemberDTO
// * @return
// */
// @PutMapping("/setUserMember")
// public ObjectRestResponse UpdateUserMember(@RequestBody BaseUserMemberVO baseUserMemberVO)
// throws Exception {
// baseBiz.UpdateUserMember(baseUserMemberVO);
// return ObjectRestResponse.succ();
// }
/**
* 设置用户会员
* @param userMemberDTO
......
......@@ -3,17 +3,16 @@ package com.github.wxiaoqi.security.admin.rpc.service;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.biz.*;
import com.github.wxiaoqi.security.admin.biz.AppUserBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserDetailBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserLoginBiz;
import com.github.wxiaoqi.security.admin.biz.ElementBiz;
import com.github.wxiaoqi.security.admin.constant.RedisKey;
import com.github.wxiaoqi.security.admin.constant.enumerate.UserSourceEnum;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDTO;
import com.github.wxiaoqi.security.admin.dto.RegisterParamDTO;
import com.github.wxiaoqi.security.admin.dto.RegisterQueueDTO;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.*;
import com.github.wxiaoqi.security.admin.entity.AppUser;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.Element;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.admin.vo.ImiVo;
import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo;
......@@ -51,7 +50,8 @@ import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import static com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant.*;
import static com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant.KEY_APPUSER_AUTH;
import static com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant.KEY_APPUSER_REGISTER;
/**
* @author keliii
......
......@@ -138,6 +138,6 @@ public class IntegralRule{
private String btnWord;
@Transient
private Boolean integralStatus;
private Boolean integralStatus = false;
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.entity.IntegralUserStatus;
import com.xxfc.platform.activity.mapper.IntegralUserStatusMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -14,6 +15,7 @@ import java.util.TimeZone;
@Service
@Transactional
@Slf4j
public class IntegralUserStatusBiz extends BaseBiz<IntegralUserStatusMapper, IntegralUserStatus> {
public ObjectRestResponse save(IntegralUserStatus integralUserStatus) {
......@@ -32,11 +34,13 @@ public class IntegralUserStatusBiz extends BaseBiz<IntegralUserStatusMapper, Int
if(!StringUtils.isAllBlank(code, userId + "")) {
long current = System.currentTimeMillis();
long startTime = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
IntegralUserStatus integralUserStatus = new IntegralUserStatus();
integralUserStatus.setIntegralRuleCode(code);
integralUserStatus.setUserId(userId);
integralUserStatus.setStartTime(startTime);
integralUserStatus.setEndTime(startTime + 24 * 60 * 60 * 1000 - 1);
log.info("获取用户积分状态:" + integralUserStatus.toString());
return mapper.selectByUserAndCode(integralUserStatus);
}
return null;
......
......@@ -243,7 +243,7 @@ public class OrderMsgBiz {
}
break;
case TOUR:
CompanyDetail startCompanyDetailTour = vehicleFeign.getCompanyDetail(orvd.getStartCompanyId()).getData();
CompanyDetail startCompanyDetailTour = vehicleFeign.getCompanyDetail(otd.getStartCompanyId()).getData();
sms2AppUser(startCompanyDetailTour, null, orvd, otd, omd, baseOrder, appUserDTO, SmsTemplateDTO.PAY_F, smsParams);
break;
case MEMBER:
......@@ -511,6 +511,11 @@ public class OrderMsgBiz {
}
private void handelSmsParamBg(BranchCompany sCompany, BranchCompany eCompany, OrderRentVehicleDetail orvd, BaseOrder baseOrder, List<String> smsParams, AppUserDTO appUserDTO, int paramHandelType) {
if(null == eCompany) {
eCompany = new BranchCompany();
eCompany.setName("");
eCompany.setVehiceServicePhone("");
}
switch (paramHandelType) {
case SmsTemplateDTO.PAY_C :
smsParams.add(appUserDTO.getRealname());
......
......@@ -84,9 +84,12 @@ public class BackStageOrderController extends CommonBaseController implements Us
if (userDTO == null) {
return ObjectRestResponse.succ(new PageDataVO<>());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
dto.setCompanyIds(companyIds);
if(dto.getType() != 3) {
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
dto.setCompanyIds(companyIds);
}
Query query = new Query(dto);
PageDataVO pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.listOrder(query.getSuper()));
List<OrderListVo> list = pageDataVO.getData();
......
......@@ -301,7 +301,10 @@ public class BaseOrderController extends CommonBaseController implements UserRes
Integer page;
@ApiModelProperty("每页限制")
Integer limit;
/**
* 会员等级
*/
Integer memberLevel;
List<Integer> companyIds;
}
......
......@@ -6,8 +6,10 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.entity.BaseOrder;
......@@ -21,6 +23,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.mockito.internal.util.collections.Sets;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
......@@ -53,6 +56,10 @@ public class OrderRentVehicleController extends CommonBaseController {
@ResponseBody
@ApiOperation(value = "确认租车订单")
public ObjectRestResponse<BaseOrder> add(@RequestBody AddRentVehicleDTO vo){
if(null == vo.getBookEndDate() || null == vo.getBookStartDate()
|| vo.getBookStartDate().equals(0) || vo.getBookEndDate().equals(0)) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("公司参数不正确"));
}
RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class);
bo.setBookVehicleVO(new BookVehicleVO(){{
setBookStartDate(vo.getBookStartDate());
......
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.user.UserInfoBiz;
......@@ -49,8 +50,9 @@ public class OrderVehicleCrosstownController {
@ApiOperation(value = "根据订单Id获取所有记录信息")
public ObjectRestResponse<List<OrderVehicleCrosstownDto>> getByOrderId(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
UserDTO userDTO = userInfoBiz.getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(508, "token is null or invalid");
AppUserDTO appUserDTO = userInfoBiz.getUserInfo();
if (userDTO == null && appUserDTO == null) {
return ObjectRestResponse.createFailedResult(508, "token is null or invalid");
}
if (orderVehicleCrosstownDto == null) {
return ObjectRestResponse.createFailedResult(500, "参数orderId为空");
......
......@@ -268,15 +268,15 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
HandleDiscountDTO handleDiscountDTO = new HandleDiscountDTO();
switch (MemberEnum.getByCode(dto.getMemberLevel())) {
case NORMAL:
handleDiscountDTO = handleDiscount(vehicleModel, prices, NORMAL);
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, NORMAL);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
case GOLD:
handleDiscountDTO = handleDiscount(vehicleModel, prices, GOLD);
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, GOLD);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
case DIAMOND:
handleDiscountDTO = handleDiscount(vehicleModel, prices, DIAMOND);
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, DIAMOND);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
}
......@@ -352,12 +352,12 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
* @param memberEnum
* @return
*/
private HandleDiscountDTO handleDiscount(VehicleModel vehicleModel, String[] prices, MemberEnum memberEnum) {
private HandleDiscountDTO handleDiscount(AppUserDTO dto, VehicleModel vehicleModel, String[] prices, MemberEnum memberEnum) {
BigDecimal modelAmount;//会员比例
BigDecimal hundred = BigDecimal.TEN;
Integer rebate = new Integer(0);
if(DISCOUNT_STATUS_MEMBER.equals(vehicleModel.getRentDiscountStatus())) {
rebate = memberEnum.getPercent();
rebate = dto.getDiscount();
BigDecimal rebatePercent = new BigDecimal(String.valueOf((rebate/100d)));
modelAmount = rebatePercent.multiply(vehicleModel.getPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
}else {
......
......@@ -115,6 +115,7 @@
from base_order b
LEFT JOIN order_rent_vehicle_detail r on r.order_id = b.id
LEFT JOIN order_tour_detail t on t.order_id = b.id
LEFT JOIN order_member_detail m on m.order_id = b.id
<where>
<if test="crtUser != null">
and b.crt_user = #{crtUser}
......@@ -128,7 +129,10 @@
<if test="type != null">
and b.type = #{type}
</if>
<if test="no != null">
<if test="memberLevel != null and memberLevel != ''">
and m.member_level = #{memberLevel}
</if>
<if test="no != null and no != '' ">
and no like CONCAT ("%", #{no}, "%")
</if>
<if test="name != null">
......@@ -179,7 +183,7 @@
<if test="status != null and status != -1">
and b.status = #{status}
</if>
<if test="no != null">
<if test="no != null and no != ''">
and no like CONCAT ("%", #{no}, "%")
</if>
<if test="startTime != null and status == 4">
......
......@@ -428,9 +428,10 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
* @param tradNo 流水号
* @param refundAmount 退款金额
* @param refundReason 退款原因
* outRequestNo 退款请求标示 用于分批退款,每笔退款标示不一样,同样标示不会重复退款
* @return
*/
public boolean alipayOrderRefund(String outTradeNo, String tradNo, Integer refundAmount, String refundReason) {
public boolean alipayOrderRefund(String outTradeNo, String tradNo, Integer refundAmount, String refundReason, String outRequestNo) {
AlipayClient alipayClient = getAlipayClient();
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
BigDecimal realAmount = new BigDecimal(refundAmount.toString()).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_UP);
......@@ -438,15 +439,16 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
"\"out_trade_no\":\"" + outTradeNo + "\"," +
"\"trade_no\":\"" + tradNo + "\"," +
"\"refund_amount\":" + realAmount + "," +
"\"out_request_no\":\"" + refundReason + "\"" +
"\"refund_reason\":\""+ refundReason + "\"," +
"\"out_request_no\":\"" + outRequestNo + "\"" +
" }");
try {
log.info("支付宝退款中:outTradeNo = {}, tradNo = {}, refundAmount = {}, refundReason = {}", outTradeNo, tradNo, refundAmount, refundReason);
AlipayTradeRefundResponse response = alipayClient.execute(request);
log.info(response.getMsg());
if (response.isSuccess()) {
return true;
} else {
log.info(response.getBody());
return false;
}
} catch (Exception e) {
......@@ -455,4 +457,9 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay> {
}
return false;
}
public static void main(String[] args) {
OrderPayBiz orderPayBiz = new OrderPayBiz();
orderPayBiz.alipayOrderRefund("20190806134440000001","2019080622001421530542309594", 3, "xxxx", "");
}
}
......@@ -91,8 +91,7 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper, OrderRefund> {
boolean flag = false;
if (orderPay.getPayWay() == 2) {
log.info("======支付宝退款中===========");
flag = payBiz.alipayOrderRefund(out_trade_no, orderPay.getSerialNumber(), refundAmount, refundDesc);
flag = payBiz.alipayOrderRefund(out_trade_no, orderPay.getSerialNumber(), refundAmount, refundDesc, out_trade_no + System.currentTimeMillis());
} else if(orderPay.getPayWay() == 1){
log.info("======微信退款中===========");
flag = WxPayRefundUtils.refund(appid, mchId, partnerKey, out_trade_no, out_refund_no, payAmount + "",
......@@ -113,6 +112,6 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper, OrderRefund> {
insertSelective(orderRefund);
return JsonResultUtil.createSuccessResultWithObj(out_refund_no);
}
return JsonResultUtil.createDefaultFail();
return JsonResultUtil.createFailedResult(40004, "退款失败!");
}
}
\ No newline at end of file
......@@ -168,4 +168,13 @@ public class VehicleModelVo extends VehicleModel implements Serializable {
@ApiModelProperty(value = "品牌")
private String brandName;
// @Column(name = "status")
// @ApiModelProperty(value = "状态 0--下架;1--上架")
// private String status;
// @Column(name = "cover_pic")
// @ApiModelProperty(value = "封面图")
// private String coverPic;
}
......@@ -110,7 +110,7 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
* @param id
* @return
*/
@Cache(key = RedisKey.BRANCH_COMPANY_CACHE)
@Cache(key = RedisKey.BRANCH_COMPANY_CACHE+ "{1}")
public CompanyDetail getDetailById(Integer id) {
BranchCompany branchCompany = this.getById(id);
CompanyDetail detail = null;
......
......@@ -1127,10 +1127,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
throw new BaseException(ResultCode.NOTEXIST_CODE);
}
//筛选出查询条件所在月份
Set<String> allYearMonth = new HashSet<>();//记录所有年月
Map<String,List<String>> yearMonthAndDate = new HashMap<>();//预定年月 - 预定日期列表
Map<String,List<String>> yearMonthAndDateNotBooked = new HashMap<>();//未预定年月 - 未预定日期列表
//筛选出查询条件所在月份 如 想预定 8月29 ~ 9月 4日
Set<String> allYearMonth = new HashSet<>();//记录所有年月 "2019-08","2019-09"
Map<String,List<String>> yearMonthAndDate = new HashMap<>();//需比较已预定的年月 - 预定日期列表 为空(拒绝 预约记录时用到)
Map<String,List<String>> yearMonthAndDateNotBooked = new HashMap<>();//需比较未预定的年月 - 未预定日期列表 "2019-08-29"...."2019-09-04",
classifyByYearMonth(notBookedDates,yearMonthAndDateNotBooked,allYearMonth);
if(allYearMonth.size()>MAX_MONTH_COUNT_BOOKED_INFO_QUERY){
throw new CustomIllegalParamException(" only 3 month can be included <bookedInfo> param.");
......
......@@ -54,7 +54,7 @@ public class VehicleCataBiz extends BaseBiz<VehicleCataMapper, VehicleCata> {
}
public void inserts(ArrayList<com.xxfc.platform.vehicle.entity.VehicleCata> vcs) {
public void inserts(ArrayList<VehicleCata> vcs) {
mapper.addCataList(vcs);
}
......
......@@ -475,7 +475,7 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
* @param isMore
* @return
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
public ObjectRestResponse setIsore(Integer id, Integer isMore) {
VehiclePlatCata vehiclePlatCata = new VehiclePlatCata();
vehiclePlatCata.setId(id);
......
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