Commit 5d78ec2a authored by hanfeng's avatar hanfeng

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

parents 2406200c fed9a4b8
......@@ -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>
......@@ -200,6 +204,11 @@
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
</dependencies>
......
......@@ -15,6 +15,17 @@ public class ResultCode {
public static int SUCCESS_CODE = Integer.valueOf(SystemProperty.getResultConfig("SUCCESS_CODE"));
// 操作失败
public static int FAILED_CODE = Integer.valueOf(SystemProperty.getResultConfig("FAILED_CODE"));
// 车辆预定失败,请重试
public static int BOOKED_FAILED_CODE = Integer.valueOf(SystemProperty.getResultConfig("BOOKED_FAILED_CODE"));
// 车辆预定失败,请重试
public static int ONLY_BOOK_FROM_TODAY = Integer.valueOf(SystemProperty.getResultConfig("BOOKED_FAILED_CODE"));
// 添加车辆失败,请重试
public static int ADD_VEHICLE_FAIL = Integer.valueOf(SystemProperty.getResultConfig("ADD_VEHICLE_FAIL"));
// 修改车辆失败,请重试
public static int UPDATE_VEHICLE_FAIL = Integer.valueOf(SystemProperty.getResultConfig("UPDATE_VEHICLE_FAIL"));
// 操作失败
public static int NULL_CODE = Integer.valueOf(SystemProperty.getResultConfig("NULL_CODE"));
// 操作出现异常
......
......@@ -208,4 +208,18 @@ WRONG_FORMAT_OF_ID_CARD=4005
4005=证件格式错误!
#资料不全
INCOMPLETE_DATA=4006
4006=资料不齐全!
\ No newline at end of file
4006=资料不齐全!
BOOKED_FAILED_CODE = 4007
4007=车辆预定失败,请重试!
ONLY_BOOK_FROM_TODAY = 4008
4008=预定时间不能小于当前时间
ADD_VEHICLE_FAIL = 4009
4009 = 添加车辆失败,请重试
UPDATE_VEHICLE_FAIL = 4010
4010 = 修改车辆失败,请重试
......@@ -2,8 +2,6 @@ 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;
......@@ -27,25 +25,23 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.support.DefaultServerRequest;
import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
......@@ -99,7 +95,7 @@ public class AccessGatewayFilter implements GlobalFilter {
log.info("check token and user permission....");
LinkedHashSet requiredAttribute = serverWebExchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
ServerHttpRequest request = serverWebExchange.getRequest();
setLogService(serverWebExchange, gatewayFilterChain);
// setLogService(serverWebExchange, gatewayFilterChain);
String requestUri = request.getPath().pathWithinApplication().value();
if (requiredAttribute != null) {
Iterator<URI> iterator = requiredAttribute.iterator();
......@@ -287,99 +283,105 @@ public class AccessGatewayFilter implements GlobalFilter {
}
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)) {
Mono<Object> modifiedBody = serverRequest.bodyToMono(Object.class)
.flatMap(body -> {
recordLog(exchange.getRequest(), body);
return Mono.just(body);
});
}
// 如果是表单请求
else if (MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(mediaType)) {
Mono<String> modifiedBody = serverRequest.bodyToMono(String.class)
// .log("modify_request_mono", Level.INFO)
.flatMap(body -> {
recordLog(exchange.getRequest(), body);
return Mono.just(body);
});
}
// TODO 这里未来还可以限制一些格式
// 无法兼容的请求,则不读取body,像Get请求这种
recordLog(exchange.getRequest(), "");
}
private void recordLog(ServerHttpRequest request, Object body) {
// 记录要访问的url
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());
}
// 记录头部信息
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("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());
}
}
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());
}
}
}
}
@Value("${logback.ignore-log-path}")
String[] path;
public List<String> getNotLogUri() {
return Arrays.asList(path);
}
// 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)) {
// Mono<Object> modifiedBody = serverRequest.bodyToMono(Object.class)
// .flatMap(body -> {
// recordLog(exchange.getRequest(), body);
// return Mono.just(body);
// });
//
// }
// // 如果是表单请求
// else if (MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(mediaType)) {
// Mono<String> modifiedBody = serverRequest.bodyToMono(String.class)
// // .log("modify_request_mono", Level.INFO)
// .flatMap(body -> {
// recordLog(exchange.getRequest(), body);
//
// return Mono.just(body);
// });
//
// }
// // TODO 这里未来还可以限制一些格式
//
// // 无法兼容的请求,则不读取body,像Get请求这种
// recordLog(exchange.getRequest(), "");
// }
//
// private void recordLog(ServerHttpRequest request, Object body) {
// // 记录要访问的url
// 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());
// }
// }
//
// 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());
// }
// }
// }
// }
//
// @Value("${logback.ignore-log-path}")
// String[] path;
// public List<String> getNotLogUri() {
// return Arrays.asList(path);
// }
}
......@@ -19,7 +19,6 @@ import org.springframework.http.codec.ClientCodecConfigurer;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
import org.springframework.http.codec.json.Jackson2JsonEncoder;
import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.function.BodyInserter;
import org.springframework.web.reactive.function.BodyInserters;
......@@ -31,7 +30,7 @@ import reactor.core.publisher.Mono;
import java.util.function.Consumer;
import java.util.function.Function;
@Component
//@Component
@Slf4j
public class ResponseRecordFilter implements GlobalFilter, Ordered {
......
......@@ -123,4 +123,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
criteria.andIn("userid", userIds);
mapper.deleteByExample(example);
}
@CacheClear(pre = "user{1}")
public void updateUserPositionByUserId(Integer userId, Integer positionId) {
mapper.updateUserPositionByUserId(userId,positionId);
}
}
......@@ -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);
}
}
}
......@@ -156,11 +156,11 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
AppUserRelationTemp relationTemp=new AppUserRelationTemp();
relationTemp.setUserId(pid);
relationTemp.setTempId(userid);
relationTemp.setIsDel(0);
relationTemp.setType(1);
AppUserRelationTemp relationTemp1= relationTempBiz.selectOne(relationTemp);
if(relationTemp1==null){
relationTemp.setTempId(userid);
relationTempBiz.insertSelective(relationTemp);
}
......
......@@ -18,4 +18,5 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> {
void updateUserMemberStatusByUserId(@Param("userId") Integer userId,@Param("status") Integer status);
void updateUserPositionByUserId(@Param("userId") Integer id, @Param("positionId") Integer positionId);
}
\ No newline at end of file
......@@ -9,17 +9,22 @@ 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;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.feign.OrderFeign;
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 +64,11 @@ public class AppUserController extends CommonBaseController {
@Autowired
private MyWaterBiz myWaterBiz;
@Autowired
private OrderFeign orderFeign;
@GetMapping("page")
public TableResultResponse list(@RequestParam Map<String, Object> params) {
Query query = new Query(params);
......@@ -135,6 +145,7 @@ public class AppUserController extends CommonBaseController {
UserMemberVo memberVo=userMemberBiz.getMemberInfoByUserId(userid);
if(memberVo!=null){
BeanUtils.copyProperties(userDTO,memberVo);
// userDTO.setPayCount(orderFeign.baseOrderEntityList(new BaseOrder()));
Integer level=memberVo.getMemberLevel();
BaseUserMemberLevel memberLevel=userMemberLevelBiz.getLevel(level);
if (memberLevel!=null){
......@@ -187,6 +198,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
......
package com.github.wxiaoqi.security.admin.rest;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.admin.biz.AppUserDetailBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserLoginBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserManageBiz;
import com.github.wxiaoqi.security.admin.constant.Status;
......@@ -38,6 +39,9 @@ public class AppUsersManageController extends BaseController<AppUserManageBiz,Ap
@Autowired
private AppUserLoginBiz appUserLoginBiz;
@Autowired
private AppUserDetailBiz appUserDetailBiz;
@Autowired
protected UserAuthConfig userAuthConfig;
......@@ -126,5 +130,11 @@ public class AppUsersManageController extends BaseController<AppUserManageBiz,Ap
appUserLoginBiz.deleteAppUserById(id);
return ObjectRestResponse.succ();
}
@PutMapping("/user_position")
public ObjectRestResponse<Void> setUserPositionById(@RequestParam("id") Integer id,@RequestParam("positionId") Integer positionId){
appUserDetailBiz.updateUserPositionByUserId(id,positionId);
return ObjectRestResponse.succ();
}
}
......@@ -125,4 +125,7 @@
<update id="updateUserMemberStatusByUserId">
update `app_user_detail` set `is_member`={status} where `userid`=#{userId}
</update>
<update id="updateUserPositionByUserId">
update `app_user_detail` set `position_id`=#{positionId} where `userid`=#{userId}
</update>
</mapper>
\ No newline at end of file
......@@ -138,6 +138,6 @@ public class IntegralRule{
private String btnWord;
@Transient
private Boolean integralStatus;
private Boolean integralStatus = false;
}
\ No newline at end of file
......@@ -103,10 +103,10 @@ public class IntegralRuleBiz extends BaseBiz<IntegralRuleMapper, IntegralRule> {
public void getIntegralStatus(AppUserDTO appUserDTO, IntegralRule integralRule) {
IntegralUserStatus integralUserStatus1 = integralUserStatusBiz.selectByUserAndCode(integralRule.getCode(), appUserDTO.getUserid());
if(integralUserStatus1 != null) {
integralRule.setIntegralStatus(integralUserStatus1.getIntegralStatus());
}
List<IntegralUserStatus> oldValue = integralUserStatusBiz.selectByUserAndCode(integralRule.getCode(), appUserDTO.getUserid());
if(oldValue != null && oldValue.size() > 0) {
integralRule.setIntegralStatus(oldValue.get(0).getIntegralStatus());
}
}
......
......@@ -6,37 +6,41 @@ 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 com.xxfc.platform.activity.util.IntegralToolsUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.TimeZone;
import java.util.List;
@Service
@Transactional
@Slf4j
public class IntegralUserStatusBiz extends BaseBiz<IntegralUserStatusMapper, IntegralUserStatus> {
public ObjectRestResponse save(IntegralUserStatus integralUserStatus) {
if(integralUserStatus != null) {
IntegralUserStatus oldValue = mapper.selectByUserAndCode(integralUserStatus);
if(oldValue != null) {
BeanUtil.copyProperties(integralUserStatus, oldValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
updateSelectiveById(oldValue);
List<IntegralUserStatus> oldValue = selectByUserAndCode(integralUserStatus.getIntegralRuleCode(), integralUserStatus.getUserId());
if(oldValue != null && oldValue.size() > 0) {
BeanUtil.copyProperties(integralUserStatus, oldValue.get(0), CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
updateSelectiveById(oldValue.get(0));
}
insertSelective(integralUserStatus);
}
return ObjectRestResponse.succ();
}
public IntegralUserStatus selectByUserAndCode(String code, Integer userId) {
public List<IntegralUserStatus> selectByUserAndCode(String code, Integer userId) {
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);
if(!"REGISTER".equals(code) && !"CRETIFICATION".equals(code) && !"BINDWECHAT".equals(code)) {
integralUserStatus.setStartTime(IntegralToolsUtils.getDayStart());
integralUserStatus.setEndTime(IntegralToolsUtils.getDayStart() + 24 * 60 * 60 * 1000);
}
log.info("获取用户积分状态:" + integralUserStatus.toString());
return mapper.selectByUserAndCode(integralUserStatus);
}
return null;
......
......@@ -308,6 +308,7 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> {
userCoupon.setCrtTime(Instant.now().toEpochMilli());
userCoupon.setStartTime(couponVo.getValidStartTime());
userCoupon.setExpireTime(couponVo.getValidEndTime());
userCoupon.setTickerNo(Snowflake.build()+"");
userCoupons.add(userCoupon);
}
return mapper.inserBatch(userCoupons);
......@@ -328,6 +329,7 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> {
userCoupon.setExpireTime(couponVo.getValidEndTime());
userCoupon.setCrtTime(Instant.now().toEpochMilli());
userCoupon.setUserId(phoneAndAppUserLoginMap.get(userCounponData.get(i)[0]));
userCoupon.setTickerNo(Snowflake.build()+"");
userCoupons.add(userCoupon);
}
......@@ -340,7 +342,11 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> {
IntegralUserTotal integralUserTotal=new IntegralUserTotal();
integralUserTotal.setUserId(userId);
integralUserTotal=integralUserTotalBiz.selectOne(integralUserTotal);
BeanUtils.copyProperties(integralUserTotal,userInfoDTO);
if (integralUserTotal!=null){
BeanUtils.copyProperties(integralUserTotal,userInfoDTO);
}else {
userInfoDTO.setTotalPoint(0);
}
UserCoupon userCoupon=new UserCoupon();
userCoupon.setUserId(userId);
userCoupon.setIsUse(0);
......@@ -355,4 +361,8 @@ public class UserCouponBiz extends BaseBiz<UserCouponMapper, UserCoupon> {
criteria.andIn("userId",userIds);
mapper.deleteByExample(example);
}
public void updateUserCouponStatusById(Integer id) {
mapper.updateUserCouponStatusById(id);
}
}
\ No newline at end of file
......@@ -3,8 +3,9 @@ package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.IntegralUserStatus;
import tk.mybatis.mapper.common.Mapper;
public interface IntegralUserStatusMapper extends Mapper<IntegralUserStatus> {
import java.util.List;
IntegralUserStatus selectByUserAndCode(IntegralUserStatus integralUserStatus);
public interface IntegralUserStatusMapper extends Mapper<IntegralUserStatus> {
List<IntegralUserStatus> selectByUserAndCode(IntegralUserStatus integralUserStatus);
}
\ No newline at end of file
......@@ -34,4 +34,6 @@ public interface UserCouponMapper extends Mapper<UserCoupon> , InsertListMapper<
List<UserCouponDTO> findUserCoupons(UserCouponFindDTO userCouponFindDTO);
int inserBatch(@Param("userCoupons") List<UserCoupon> userCoupons);
void updateUserCouponStatusById(@Param("id") Integer id);
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.excel.ExcelImport;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
......@@ -78,4 +76,11 @@ public class UserCouponAdminController {
}
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
@DeleteMapping("/{id}")
public ObjectRestResponse<Void> deleteUserConuponById(@PathVariable("id") Integer id) {
userCouponBiz.updateUserCouponStatusById(id);
return ObjectRestResponse.succ();
}
}
......@@ -12,7 +12,7 @@
<result column="last_time" property="lastTime" jdbcType="BIGINT" />
</resultMap>
<select id="selectByUserId" parameterType="java.lang.Integer" resultType="com.xxfc.platform.activity.entity.IntegralSignRecord">
<select id="Id" parameterType="java.lang.Integer" resultType="com.xxfc.platform.activity.entity.IntegralSignRecord">
select * from integral_sign_record
where user_id = #{userId} and isdel = 0
order by last_time
......
......@@ -10,7 +10,10 @@
<select id="selectByUserAndCode" resultType="com.xxfc.platform.activity.entity.IntegralUserStatus" parameterType="com.xxfc.platform.activity.entity.IntegralUserStatus">
select * from integral_user_status
where integral_rule_code = #{integralRuleCode} and user_id = #{userId}
and crt_time between #{startTime} and #{endTime} and integral_status =1
where integral_rule_code = #{integralRuleCode} and user_id = #{userId} and integral_status =1
<if test="startTime != null">
and crt_time between #{startTime} and #{endTime}
</if>
order by upd_time DESC
</select>
</mapper>
\ No newline at end of file
......@@ -104,9 +104,13 @@
</select>
<insert id="inserBatch">
INSERT INTO `user_coupon`(`user_id`,`coupon_id`,`start_time`,`expire_time`,`crt_time`) VALUES
INSERT INTO `user_coupon`(`user_id`,`coupon_id`,`ticker_no`,`start_time`,`expire_time`,`crt_time`) VALUES
<foreach collection="userCoupons" item="userCoupon" separator=",">
(#{userCoupon.userId},#{userCoupon.couponId},#{userCoupon.startTime},#{userCoupon.expireTime},#{userCoupon.crtTime} )
(#{userCoupon.userId},#{userCoupon.couponId},#{userCoupon.tickerNo} ,#{userCoupon.startTime},#{userCoupon.expireTime},#{userCoupon.crtTime} )
</foreach>
</insert>
<update id="updateUserCouponStatusById">
update `user_coupon` set `is_del`=1 where `id`=#{id}
</update>
</mapper>
\ No newline at end of file
......@@ -9,6 +9,7 @@ import com.xxfc.platform.app.biz.CofigBiz;
import com.xxfc.platform.app.entity.Cofig;
import com.xxfc.platform.campsite.feign.CampsiteFeign;
import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.xxfc.platform.app.rest.admin;
import com.xxfc.platform.app.biz.BuyVehicleFormBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/8/9 13:55
*/
@RestController
public class BuyVehicleFormAdminController {
@Autowired
private BuyVehicleFormBiz vehicleFormBiz;
}
package com.xxfc.platform.campsite.rest;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.vo.GoodDataVO;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.sun.org.apache.regexp.internal.RE;
import com.xxfc.platform.campsite.biz.CampsiteShopBiz;
import com.xxfc.platform.campsite.entity.CampsiteShop;
import com.xxfc.platform.campsite.vo.CampsiteShopDetailVo;
......@@ -13,11 +11,12 @@ import com.xxfc.platform.campsite.vo.CampsiteShopPageVo;
import com.xxfc.platform.campsite.vo.CampsiteShopVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @author libin
......
......@@ -50,7 +50,6 @@ public class MsgBiz {
if(appUserDTO != null) {
userId = appUserDTO.getImUserid();
}
log.info("获取消息列表: page = {}, limit = {}, type = {}", page, limit, type);
page = page == null ? 1 : page;
limit = limit == null ? 10 : limit;
Pageable pageable = PageRequest.of(--page, limit);
......@@ -88,7 +87,6 @@ public class MsgBiz {
if(appUserDTO != null) {
userId = appUserDTO.getImUserid();
}
log.info("获取消息列表: page = {}, limit = {}, type = {}", page, limit);
page = page == null ? 1 : page;
limit = limit == null ? 10 : limit;
Pageable pageable = PageRequest.of(--page, limit);
......
......@@ -5,14 +5,18 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.vo.ImiVo;
import com.github.wxiaoqi.security.common.msg.BaseResponse;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.mongodb.client.result.UpdateResult;
import com.xxfc.platform.im.model.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
......@@ -112,6 +116,22 @@ public class UserBiz {
return json.toJSONString();
}
public ObjectRestResponse updateUserInfo(String nickname) {
AppUserDTO appUserDTO = getUserInfo();
if(appUserDTO == null) {
return ObjectRestResponse.createFailedResult(500, "token失效");
}
if(StringUtils.isBlank(nickname)) {
return ObjectRestResponse.paramIsEmpty();
}
String phone = appUserDTO.getUsername();
Query query = new Query(Criteria.where("phone").is(phone));
Update update = Update.update("nickname",nickname);
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Map.class,"user");
return ObjectRestResponse.succ(updateResult);
}
/**
* 远程请求
* @param path
......
......@@ -2,6 +2,7 @@ package com.xxfc.platform.im.rest;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.msg.BaseResponse;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.im.biz.UserBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -42,4 +43,9 @@ public class UserController {
baseResponse.setMessage(result);
return baseResponse;
}
@PostMapping(value = "/update")
public ObjectRestResponse updateUserInfo(String nickname) {
return mtBiz.updateUserInfo(nickname);
}
}
package com.xxfc.platform.order.feign;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.GoodDataVO;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Created by ace on 2017/9/15.
*/
@FeignClient(name = "vehicle")
public interface OrderFeign {
@GetMapping("/baseOrder/entityList")
public ObjectRestResponse<List<BaseOrder>> baseOrderEntityList(@RequestParam("entity") Map<String, Object> entity);
}
......@@ -28,6 +28,7 @@ import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.MQSenderFeign;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
......@@ -126,17 +127,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no, UserDTO userDTO) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(3501, "订单不存在");
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
if(orderPageVo.getStatus() <= 3 && orderPageVo.getStatus() != 2 && orderPageVo.getStatus() != -1) {
return ObjectRestResponse.createFailedResult(3501, "订单不存在");
return ObjectRestResponse.createFailedResult(ResCode.ORDER_DETAIL_IS_NOT_EXIST.getCode(), ResCode.ORDER_DETAIL_IS_NOT_EXIST.getDesc());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (!companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getStartCompanyId()) && !companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getEndCompanyId())) {
return ObjectRestResponse.createFailedResult(2563, "您无权限查看此订单!");
return ObjectRestResponse.createFailedResult(ResCode.YOU_AUTH_FAIL.getCode(), ResCode.YOU_AUTH_FAIL.getDesc());
}
if(userDTO.getCompanyId() == orderPageVo.getOrderRentVehicleDetail().getEndCompanyId()) {
orderPageVo.setUserCompanyStatus(true);
......@@ -228,7 +229,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(3501, "订单不存在");
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (orderPageVo.getStatus() == 4) { //未交车
......
......@@ -86,6 +86,10 @@ public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapp
}
}
public void save(DepositRefundRecord depositRefundRecord) {
mapper.insert(depositRefundRecord);
}
public List<DepositRefundRecord> selectByCrossId(Integer cross) {
List<DepositRefundRecord> list = mapper.selectByCrossId(cross);
......@@ -149,7 +153,7 @@ public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapp
newValue.setRestAmount(depositRefundRecord.getTotalAmount().subtract(orderViolation.getPrice()));//减去违章金之后的押金
newValue.setIscomplete(false);
newValue.setId(null);
insertSelectiveRe(newValue);
mapper.insert(newValue);
depositRefundRecord.setIsshow(false);
updateSelectiveByIdRe(depositRefundRecord);
} else {
......
......@@ -19,6 +19,7 @@ import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderRefundVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.jexl2.MapContext;
import org.mockito.internal.util.collections.Sets;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -96,17 +97,23 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
}});
if(null == crosstown) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>(){{
add("退款第一部分押金失败,获取不了还车/定损记录,订单号:"+ orderMQDTO.getId());
}});
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退款第一部分押金失败,获取不了还车/定损记录,订单号:"+ orderMQDTO.getId()));
}
if(null == crosstown.getRestDeposit()
|| crosstown.getRestDeposit().subtract(illegalReserve).compareTo(BigDecimal.ZERO) < 0 ){
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("退第一笔押金剩余金额异常,异常记录为:"+ crosstown.getId()));
}
//还车扣除款 剩余的 钱,再减去违章预备金
BigDecimal refundAmont = crosstown.getRestDeposit().subtract(illegalReserve);
BigDecimal originalRefundAmount = crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve);
List<DedDetailDTO> dddList = JSONUtil.toBean(crosstown.getDedDetail(), List.class);
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
for(DedDetailDTO ddd : dddList) {
refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost();
if(null != crosstown.getDedDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toBean(crosstown.getDedDetail(), List.class);
for(DedDetailDTO ddd : dddList) {
refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost();
}
}
refundDesc += ")";
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), RefundTypeEnum.PART_DEPOSIT);
......
......@@ -2,7 +2,6 @@ package com.xxfc.platform.order.biz;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.BaseOrder;
......@@ -12,14 +11,11 @@ import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.order.pojo.order.OrderTourVerificationVO;
import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.tour.vo.TourGoodOrderFindVo;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.List;
/**
......@@ -66,10 +62,10 @@ public class OrderTourVerificationBiz{
baseOrder.setNo(no);
baseOrder=baseOrderBiz.selectOne(baseOrder);
if(baseOrder==null){
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "订单不存在");
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
if(baseOrder.getStatus()!=OrderStatusEnum.ORDER_TOSTART.getCode()){
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "订单不是已支付状态");
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_PAY.getCode(), ResCode.ORDER_IS_NOT_PAY.getDesc());
}
Integer orderId=baseOrder.getId();
Integer version=baseOrder.getVersion();
......@@ -77,7 +73,7 @@ public class OrderTourVerificationBiz{
tourDetail.setOrderId(orderId);
tourDetail=tourDetailBiz.selectOne(tourDetail);
if(tourDetail==null){
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "订单不存在");
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
Integer verificationId=tourDetail.getVerificationId();
Integer total_number=tourDetail.getTotalNumber();
......@@ -86,7 +82,8 @@ public class OrderTourVerificationBiz{
if(companyId!=null){
boolean falg=isPower(list,companyId);
if(!falg){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE, "无权限操作");
return ObjectRestResponse.createFailedResult(ResCode.YOU_AUTH_FAIL.getCode(), ResCode.YOU_AUTH_FAIL.getDesc());
}
}
}
......
......@@ -10,6 +10,7 @@ import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.user.UserInfoBiz;
import com.xxfc.platform.order.contant.enumerate.CrosstownTypeEnum;
import com.xxfc.platform.order.contant.enumerate.DepositRefundStatus;
......@@ -23,6 +24,7 @@ import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.VehicleArrivalVo;
......@@ -138,15 +140,15 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
log.info("添加的参数:orderVehicaleCrosstown = {}", orderVehicleCrosstownDto);
UserDTO userDTO = userInfoBiz.getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(508, "token is null or invalid");
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, "token is null or invalid");
}
if (orderVehicleCrosstownDto == null || orderVehicleCrosstownDto.getOrderId() == null) {
return ObjectRestResponse.createFailedResult(500, "参数为空!");
return ObjectRestResponse.paramIsEmpty();
}
orderVehicleCrosstownDto.setOrperaterId(userDTO.getId());
BaseOrder baseOrder = baseOrderBiz.selectById(orderVehicleCrosstownDto.getOrderId());
if (baseOrder == null) {
return ObjectRestResponse.createFailedResult(500, "订单不存在!");
return ObjectRestResponse.createFailedResult(ResCode.ORDER_IS_NOT_EXIST.getCode(), ResCode.ORDER_IS_NOT_EXIST.getDesc());
}
OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(baseOrder.getDetailId());
......@@ -163,7 +165,6 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
return ObjectRestResponse.createFailedResult(3501, "无收车权限");
}
}
if(baseOrder.getStatus() != -1) {
Vehicle vehicle = null;
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
......@@ -234,6 +235,9 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
orderVehicleCrosstownDto.setDeductionCost(amount);
//扣除费用
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(amount));
if(orderVehicleCrosstownDto.getRestDeposit().compareTo(getAmount()) == -1) { //剩余金额小于保证金
return ObjectRestResponse.createFailedResult(500,"押金不足,不能交车,请联系客服!");
}
//出车成功后修改订单状态
List<OrderVehicleCrosstownDto> oldValue = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (oldValue.size() == 1) {
......@@ -269,6 +273,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
//总押金-保留金
totalAmount = objectRestResponse.getData().getOrderRentVehicleDetail().getDeposit();
}
if (baseOrder.getStatus() == OrderStatusEnum.ORDER_TOSTART.getCode()) {//交车
baseOrder.setStatus(OrderStatusEnum.ORDER_WAIT.getCode());
baseOrderBiz.updateSelectiveById(baseOrder);
......@@ -281,8 +286,10 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
depositRefundRecord.setTotalAmount(totalAmount.subtract(getAmount()));
depositRefundRecord.setCrosstownId(orderVehicleCrosstown.getId());
orderDepositRefundRecordBiz.saveNormalRecord(depositRefundRecord);
//修改订单状态为已完成
baseOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode());
baseOrderBiz.updateSelectiveById(baseOrder);
//修改订单详情是否押金全部退还
orderRentVehicleDetail.setFixedLossStatus(0);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH);
......@@ -307,12 +314,12 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
depositRefundRecord.setIsshow(false);
orderDepositRefundRecordBiz.updateSelectiveByIdRe(depositRefundRecord);
newValue.setIscomplete(true); //发起退款显示
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost());
depositRefundRecord.setRestAmount(totalAmount.subtract(getAmount()).subtract(orderVehicleCrosstown.getDeductionCost()));
depositRefundRecord.setTotalAmount(totalAmount.subtract(getAmount()));
newValue.setAmount(orderVehicleCrosstown.getDeductionCost());
newValue.setRestAmount(totalAmount.subtract(getAmount()).subtract(orderVehicleCrosstown.getDeductionCost()));
newValue.setTotalAmount(totalAmount.subtract(getAmount()));
newValue.setCrosstownId(orderVehicleCrosstown.getId());
newValue.setId(null);
orderDepositRefundRecordBiz.insertSelectiveRe(newValue);
orderDepositRefundRecordBiz.save(newValue);
} else {
throw new BaseException("定损记录不存在!请联系客服");
}
......
......@@ -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());
......
......@@ -155,6 +155,14 @@ public class BaseOrderController extends CommonBaseController implements UserRes
return new ObjectRestResponse<>().data(pages);
}
@ApiOperation("根据参数查询,等于")
@RequestMapping(value = "/entityList",method = RequestMethod.GET)
@ResponseBody
public ObjectRestResponse<List<BaseOrder>> entityList(BaseOrder entity){
//查询列表数据
return ObjectRestResponse.succ(baseOrderBiz.selectList(entity));
}
@ApiOperation("订单详情")
@RequestMapping(value = "/{no}", method = RequestMethod.GET)
@IgnoreClientToken
......
......@@ -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;
......@@ -16,11 +18,16 @@ import com.xxfc.platform.order.service.OrderRentVehicleService;
import com.xxfc.platform.order.pojo.AddRentVehicleDTO;
import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import com.xxfc.platform.vehicle.pojo.CompanyDetail;
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.*;
......@@ -29,6 +36,7 @@ import springfox.documentation.annotations.ApiIgnore;
import javax.persistence.Column;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Controller
......@@ -49,10 +57,29 @@ public class OrderRentVehicleController extends CommonBaseController {
@Autowired
UserFeign userFeign;
@Autowired
VehicleFeign vehicleFeign;
@RequestMapping(value = "add",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "确认租车订单")
public ObjectRestResponse<BaseOrder> add(@RequestBody AddRentVehicleDTO vo){
if(null == vo.getEndCompanyId() || vo.getEndCompanyId().equals(0)) {
if(StrUtil.isBlank(vo.getEndAddr())) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("公司参数不正确"));
}else {
Map<String, Object> map = BeanUtil.beanToMap(new BranchCompany(){{
setName(vo.getEndAddr());
}}, false, true);
List<BranchCompany> data = vehicleFeign.branchCompanyEntityList(map).getData();
if(null == data) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("公司参数不正确"));
}else {
BranchCompany endCompany = vehicleFeign.branchCompanyEntityList(map).getData().get(0);
vo.setEndCompanyId(endCompany.getId());
}
}
}
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为空");
......
......@@ -419,6 +419,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rentVehicleBookDTO.setUserName(BaseContextHandler.getName());
rentVehicleBookDTO.setLiftCompany(detail.getStartCompanyId());
rentVehicleBookDTO.setLiftAddr(detail.getStartAddr());
rentVehicleBookDTO.setRetCompany(detail.getEndCompanyId());
if(null != detail.getAccompanyItems()) {
rentVehicleBookDTO.setSelectedAccItem(detail.getAccompanyItems().parallelStream().collect(Collectors.toMap(OrderAccompanyDTO::getId, OrderAccompanyDTO::getNum)));
}
......
......@@ -108,6 +108,8 @@ public class TourGoodDTO {
//商品标签
@ApiModelProperty(value = "商品标签")
List<GoodTagDTO> tagDTOS;
@ApiModelProperty(value = "海报背景")
private String posterBackground;
}
......@@ -130,6 +130,9 @@ public class TourGood implements Serializable {
@Column(name = "is_del")
@ApiModelProperty(value = "是否删除,0否,1是")
private Integer isDel;
@Column(name = "poster_background")
@ApiModelProperty(value = "海报背景")
private String posterBackground;
}
......@@ -62,6 +62,10 @@ public class SmsTemplateDTO {
public static final int REFUND_A = 22;
//违章押金退还
public static final int REFUND_B = 23;
//旅游内部通知(客服)
public static final int PAY_H = 24;
//取消旅游订单(客服)
public static final int CANCEL_F = 25;
......
......@@ -58,6 +58,11 @@ public class CCPRestSmsBiz{
//违章押金退还 23
public static final String TEMPLATE_ID_FINISH_B = "460773";
//旅游内部通知(客服)24
public static final String TEMPLATE_ID_PAY_H = "461421";
//取消旅游订单(客服)25
public static final String TEMPLATE_ID_CANCEL_F = "461424";
......@@ -131,6 +136,12 @@ public class CCPRestSmsBiz{
case 23 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_FINISH_B);
break;
case 24 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_H);
break;
case 25 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_CANCEL_F);
break;
}
......
......@@ -9,7 +9,7 @@ public enum ResCode {
//车辆信息相关返回码-预定信息
VEHICLE_BOOKED_INFO_ALREADY_CHANGED(101001,"车辆预定信息已更改,请刷新后继续操作"),
VEHICLE_BOOKED_INFO_ALREADY_CHANGED(101001,"车辆预定信息已更改"),
//车辆信息相关返回码-车辆信息
VEHICLE_INFO_SAME_NUM_PLATE_EXISTS(102001,"该车牌已经存在"),
......@@ -20,8 +20,8 @@ public enum ResCode {
VEHICLE_INFO_IS_BOOKED(102004,"车辆已经被预定"),
//车辆信息相关返回码-预定申请信息
VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批,请刷新后继续操作"),
VEHICLE_BOOKED_RECORD_STATUS_CHANGED(103002,"车辆预定申请状态已变更,请刷新后继续操作"),
VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批"),
VEHICLE_BOOKED_RECORD_STATUS_CHANGED(103002,"车辆预定申请状态已变更"),
VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED(103003,"请输入仪表盘内当前显示的公里数"),
VEHICLE_DEPARTURE_VEHICLE_UNEXIST(104001,"车辆不存在"),
......@@ -44,9 +44,15 @@ public enum ResCode {
VEHICLE_UPKEEP_ITEM_UNEXIST(106003, "保养项目不存在"),
VEHICLE_UPKEEP_VEHICLE_UNUPKEEP(106004, "车辆不在保养中"),
VEHICLE_IS_BOOKED_TODAY(106006, "车辆当前时段已经被预定"),
FIND_VEHICLE_PLAT_FAILE(106007, "获取车型列表失败"),
UPDATE_VEHICLE_RANK_FAIL(106008, "修改车型列表失败"),
FIND_DATA_NOT_EXIST(106005, "查询的数据不存在"),
ORDER_IS_NOT_EXIST(10000, "订单不存在"),
ORDER_DETAIL_IS_NOT_EXIST(10001, "订单详情不可查询"),
YOU_AUTH_FAIL(-2,"无权限查看此信息"),
ORDER_IS_NOT_PAY(10002, "订单未支付"),
;
/**
* 返回码
......
......@@ -152,4 +152,8 @@ public class VehicleModel implements Serializable {
@Column(name = "cover_pic")
@ApiModelProperty(value = "封面图")
private String coverPic;
@Column(name = "poster_background")
@ApiModelProperty(value = "海报背景")
private String posterBackground;
}
......@@ -85,7 +85,7 @@ public interface VehicleFeign {
* @param limit
* @return 返回
*/
@GetMapping(value = "/vehicleModel/goodList")
@GetMapping("/vehicleModel/goodList")
List<GoodDataVO> goodList(@RequestParam(value = "page") Integer page, @RequestParam("limit") Integer limit);
/**
......
......@@ -36,6 +36,12 @@ public class RentVehicleBookDTO extends PageParam {
@ApiModelProperty("提车公司")
private Integer liftCompany;
/**
* 还车分公司
*/
@ApiModelProperty("还车分公司")
private Integer retCompany;
/**
* 目的地
*/
......
......@@ -41,6 +41,12 @@ public class UsableVeicleDTO extends PageParam {
@ApiModelProperty("停靠公司")
String parkBranchCompanyId;
@ApiModelProperty("开始公司Id")
String startCompanyId;
@ApiModelProperty("结束公司Id")
String endCompanyId;
@ApiModelProperty(hidden = true)
Boolean yearNo4Where;
......
......@@ -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;
......
......@@ -82,7 +82,7 @@ public class VehicleActiveService {
}
//修改预约记录状态
if(departureVo.getBookRecordId() != null) {
updateBookRecordStatus(departureVo.getBookRecordId());
updateBookRecordStatus(departureVo.getBookRecordId(), 1);
}
VehicleDepartureLogVo vehicleDepartureLogVo = vehicleDepartureLogMapper.selectByBookRecordId(departureVo.getBookRecordId());
if(vehicleDepartureLogVo != null) {
......@@ -154,7 +154,7 @@ public class VehicleActiveService {
}
if(arrivalVo.getBookRecordId() != null) {
updateBookRecordStatus(arrivalVo.getBookRecordId());
updateBookRecordStatus(arrivalVo.getBookRecordId(), 2);
}
......@@ -192,10 +192,15 @@ public class VehicleActiveService {
}
}
public void updateBookRecordStatus(Integer bookRecordId) {
public void updateBookRecordStatus(Integer bookRecordId, Integer type) {
VehicleBookRecord vehicleBookRecord = vehicleBookRecordBiz.selectById(bookRecordId);
if(vehicleBookRecord != null) {
vehicleBookRecord.setStatus(VehicleBookRecordStatus.LIFTED.getCode());
if(type == 1) {
vehicleBookRecord.setActualStartDate(new Date());
} else {
vehicleBookRecord.setActualEndDate(new Date());
}
vehicleBookRecordBiz.updateSelectiveByIdRe(vehicleBookRecord);
} else {
throw new BaseException(ResCode.VEHICLE_BOOK_RECORD_IS_NOT_EXIST.getDesc(),
......@@ -218,7 +223,7 @@ public class VehicleActiveService {
}
if (!vehicle.getStatus().equals(VehicleStatus.NORMAL.getCode())) {
// 车辆非正常状态
throw new BaseException(ResCode.VEHICLE_UPKEEP_VEHICLE_DISABLE.getDesc(),
throw new BaseException(ResCode.VEHICLE_UPKEEP_VEHICLE_DISABLE.getDesc() + vehicle.getStatus(),
ResCode.VEHICLE_UPKEEP_VEHICLE_DISABLE.getCode());
}
Integer lastMileage=vehicleUpkeepVo.getMileage();
......
......@@ -208,7 +208,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
public RestResponse add(List<AddOrUpdateVehicleVo> addOrUpdateVehicleVoList) throws Exception{
if(addOrUpdateVehicleVoList.size()>MAX_BATCH_SIZE_VEHICLE){
throw new CustomIllegalParamException("exceed max batch size");
throw new CustomIllegalParamException("添加的车辆数量过多!");
}
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) {
......@@ -217,7 +217,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
throw new CustomIllegalParamException("Stop at branch office cannot be empty");
throw new CustomIllegalParamException("停靠公司不能为空");
}
vehicle.setId(UUID.randomUUID().toString());
......@@ -251,7 +251,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
// }
if(addOrUpdateVehicleVo.getNumberPlate() == null){
throw new CustomIllegalParamException("Without a license plate number");
throw new CustomIllegalParamException("车牌不能为空");
}
List<Vehicle> vehicles = mapper.lockByCode(addOrUpdateVehicleVo);
return vehicles;
......@@ -342,7 +342,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
if(Boolean.FALSE.equals(rsEach)){
throw new BaseException(ResultCode.FAILED_CODE);
throw new BaseException(ResultCode.VEHICLE_IS_BOOKED);
}
}
......@@ -377,7 +377,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//修改相关车辆预定记录
Boolean hasSuc = bookedVehicle(bookVehicleVo);
if(!hasSuc){
throw new BaseException(ResultCode.FAILED_CODE);
throw new BaseException(ResultCode.BOOKED_FAILED_CODE);
}
//添加随车物品
......@@ -504,11 +504,10 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
if(yearMonthAndDate.size()>3){//连续的日期最多夸3个月
throw new CustomIllegalParamException(" 只可以预约两个月内的车辆");
}
//检查车辆是否可以预定
for(Map.Entry<String,List<String>> entry:yearMonthAndDate.entrySet()){
Boolean rsEach = applyVehicle4EmployeePerMonth(bookVehicleVo.getVehicleId(),entry.getValue(),entry.getKey());
if(Boolean.FALSE.equals(rsEach)){
throw new BaseException(ResultCode.FAILED_CODE);
throw new BaseException(ResultCode.VEHICLE_IS_BOOKED);
}
}
......@@ -545,7 +544,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
//修改相关车辆预定记录
Boolean hasSuc = bookedVehicle(bookVehicleVo);
if(!hasSuc){
throw new BaseException(ResultCode.FAILED_CODE);
throw new BaseException(ResultCode.BOOKED_FAILED_CODE);
}
//添加随车物品
......@@ -1178,7 +1177,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
@Transactional
public ObjectRestResponse save(Vehicle vehicle){
if (vehicle==null) {
ObjectRestResponse.createDefaultFail();
ObjectRestResponse.paramIsEmpty();
}
String id = vehicle.getId();
......@@ -1208,7 +1207,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
log.info("获取车辆列表转换对象失败: vehicleVo = {}", vehicleVo);
}
......@@ -1262,8 +1261,6 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
}
public List<VehicleCountVo> countVehicleByParam(VehiclePlanDto vehiclePlanDto) {
return mapper.countVehicleByParam(vehiclePlanDto);
}
......@@ -1281,7 +1278,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
vehiclePlanDto.setLimit(limit);
UserDTO userDTO = getAdminUserInfo();
if(userDTO == null) {
return ObjectRestResponse.createFailedResult(235, "token失效");
return ObjectRestResponse.createFailedResult(ResultCode.RSTOKEN_EXPIRED_CODE, "token失效");
}
List<Integer> companyList = Lists.newArrayList();
List<BranchCompany> branchCompany = branchCompanyBiz.getListByUser(userDTO);
......@@ -1299,7 +1296,6 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
companyList.add(vehiclePlanDto.getParkBranchCompanyId());
}
}
log.info("用户权限公司ID: companyList = {}", companyList);
vehiclePlanDto.setCompanyIds(companyList);
Query query = new Query(vehiclePlanDto);
......@@ -1323,7 +1319,6 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> implements UserR
for(int i = 0; i < 24 - result.length(); i++) {
stringBuffer.append("0");
}
log.info(stringBuffer.toString());
}
stringBuffer.append(result);
......
......@@ -4,8 +4,10 @@ import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.google.common.collect.Maps;
import com.xxfc.platform.vehicle.common.CustomIllegalParamException;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.VehicleBookHourInfo;
import com.xxfc.platform.vehicle.mapper.VehicleBookHourInfoMapper;
import com.xxfc.platform.vehicle.pojo.VehicleBookHourInfoDto;
......@@ -42,7 +44,7 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
//判定时间是否合法
if (bookStartDate.compareTo(DateTime.now().toString(DEFAULT_DATE_TIME_FORMATTER)) < 0) {
throw new CustomIllegalParamException("you can only book from today");
throw new CustomIllegalParamException(ResultCode.getMsg(ResultCode.ONLY_BOOK_FROM_TODAY));
}
if (bookStartDate.compareTo(bookEndDate) > 0) {
throw new CustomIllegalParamException("预定开始日期不能大于结束日期!");
......@@ -100,14 +102,14 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
@CacheClear(key = "vehicle.hourInfo")
public ObjectRestResponse save(VehicleBookHourInfoDto vehicleBookHourInfoDto) {
if(vehicleBookHourInfoDto == null) {
return ObjectRestResponse.createFailedResult(502, "参数为空");
return ObjectRestResponse.paramIsEmpty();
}
List<VehicleBookHourInfo> vehicleBookHourInfos = mapper.selectByVehicleAndDate(vehicleBookHourInfoDto);
//有数据直接更新
if(vehicleBookHourInfos.size() >=1) {
for(VehicleBookHourInfo vehicleBookHourInfo : vehicleBookHourInfos) {
if(vehicleBookHourInfo.getBookedHour().equals(vehicleBookHourInfoDto.getBookedHour())) {
return ObjectRestResponse.createFailedResult(504, "当天时间段已经被预定");
return ObjectRestResponse.createFailedResult(ResCode.VEHICLE_IS_BOOKED_TODAY.getCode(), ResCode.VEHICLE_IS_BOOKED_TODAY.getDesc());
} else {
vehicleBookHourInfo.setBookedHour(vehicleBookHourInfo.getBookedHour() | vehicleBookHourInfoDto.getBookedHour());
updateSelectiveByIdRe(vehicleBookHourInfo);
......@@ -130,7 +132,7 @@ public class VehicleBookHourInfoBiz extends BaseBiz<VehicleBookHourInfoMapper, V
@CacheClear(key = "vehicle.hourInfo")
public ObjectRestResponse delete(String vehicleId, List<String> dateList) {
if(StringUtils.isBlank(vehicleId) || dateList.size() <= 0) {
return ObjectRestResponse.createFailedResult(502, "删除信息车辆Id为空");
return ObjectRestResponse.paramIsEmpty();
}
Map<String, Object> param = Maps.newHashMap();
param.put("vehicleId", vehicleId);
......
......@@ -158,10 +158,21 @@ public class VehicleBookRecordBiz extends BaseBiz<VehicleBookRecordMapper, Vehic
return RestResponse.suc();
}
}
if(vehicleBookRecordQueryVo.getLiftCompany() != null) {
if(companyList.contains(vehicleBookRecordQueryVo.getLiftCompany())) { //如果权限中有这个公司就允许查询, 否则就直接返回空
companyList.clear();
companyList.add(vehicleBookRecordQueryVo.getLiftCompany());
} else {
return RestResponse.suc();
}
}
} else {
if(vehicleBookRecordQueryVo.getCompanyId() != null) {
companyList.add(vehicleBookRecordQueryVo.getCompanyId());
}
if(vehicleBookRecordQueryVo.getLiftCompany() != null) {
companyList.add(vehicleBookRecordQueryVo.getLiftCompany());
}
}
vehicleBookRecordQueryVo.setCompanyIds(companyList);
Query query = new Query(vehicleBookRecordQueryVo);
......
......@@ -116,7 +116,7 @@ public class VehicleDepartureService extends BaseBiz<VehicleDepartureLogMapper,
return ObjectRestResponse.succ(vehicleDepartureLog);
}
}
return ObjectRestResponse.createDefaultFail();
return ObjectRestResponse.createFailedResult(ResCode.FIND_DATA_NOT_EXIST.getCode(), ResCode.FIND_DATA_NOT_EXIST.getDesc());
}
@Transactional
......
......@@ -8,7 +8,6 @@ import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.entity.VehicleDispatchInfo;
import com.xxfc.platform.vehicle.mapper.VehicleDispatchInfoMapper;
......@@ -45,7 +44,7 @@ public class VehicleDispatchInfoBiz extends BaseBiz<VehicleDispatchInfoMapper,Ve
//提交调度申请表单
public ObjectRestResponse addDisspatchInfo(VehicleDispatchInfo vehicleDispatchInfo){
if (vehicleDispatchInfo==null){
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
return ObjectRestResponse.paramIsEmpty();
}
insertSelective(vehicleDispatchInfo);
return ObjectRestResponse.succ();
......
......@@ -3,28 +3,25 @@ package com.xxfc.platform.vehicle.biz;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.GoodDataVO;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.mapper.VehicleModelMapper;
import com.xxfc.platform.vehicle.pojo.VehicleModelQueryCondition;
import com.xxfc.platform.vehicle.pojo.VehicleModelVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.mapper.VehicleModelMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 车型
......@@ -60,7 +57,7 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
} catch (Exception e) {
e.printStackTrace();
}
return ObjectRestResponse.createDefaultFail();
return ObjectRestResponse.createFailedResult(ResCode.FIND_DATA_NOT_EXIST.getCode(), ResCode.FIND_DATA_NOT_EXIST.getDesc());
}
......
......@@ -7,11 +7,10 @@ import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.RedisKey;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.entity.VehicleCata;
import com.xxfc.platform.vehicle.entity.VehiclePlatCata;
import com.xxfc.platform.vehicle.mapper.VehiclePlatCataMapper;
......@@ -20,14 +19,9 @@ import com.xxfc.platform.vehicle.pojo.CataVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.assertj.core.util.Arrays;
import org.springframework.aop.framework.AopContext;
import org.springframework.aop.framework.AopProxyUtils;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
......@@ -215,7 +209,7 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
} catch (Exception e) {
e.printStackTrace();
}
return ObjectRestResponse.createDefaultFail();
return ObjectRestResponse.createFailedResult(ResCode.FIND_VEHICLE_PLAT_FAILE.getCode(), ResCode.FIND_VEHICLE_PLAT_FAILE.getDesc());
}
......@@ -310,7 +304,7 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
public ObjectRestResponse updateAndAdd(Cascade<VehiclePlatCata> cas) {
if (cas == null || cas.getParent() == null) {
return ObjectRestResponse.createDefaultFail();
return ObjectRestResponse.paramIsEmpty();
}
//通过判断一级标签是否有id来判断是更新还是添加
......@@ -337,7 +331,7 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
VehiclePlatCata parentVPC = cas.getParent();
List<VehiclePlatCata> children = cas.getChildren();
if (children == null || parentVPC == null) {
throw new BaseException("The tag name cannot be empty!");
throw new BaseException("标签名不能为空!");
}
//设置更新时间
parentVPC.setUpdTime(System.currentTimeMillis());
......@@ -353,7 +347,7 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
.collect(Collectors.toList());
//判断有效数据是否为空
if (VehiclePlatCatas.size() == 0) {
throw new BaseException("No valid subtag!");
throw new BaseException("父标签无效");
}
//遍历
for (VehiclePlatCata VehiclePlatCata : VehiclePlatCatas) {
......@@ -385,9 +379,8 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
return ObjectRestResponse.succ();
} catch (Exception e) {
e.printStackTrace();
throw new BaseException(ResultCode.FAILED_CODE);
}
return ObjectRestResponse.createFailedResult(ResCode.UPDATE_VEHICLE_RANK_FAIL.getCode(), ResCode.UPDATE_VEHICLE_RANK_FAIL.getDesc());
}
/**
......@@ -407,7 +400,7 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
return ObjectRestResponse.succ();
} catch (Exception e) {
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
return ObjectRestResponse.createFailedResult(ResCode.UPDATE_VEHICLE_RANK_FAIL.getCode(), ResCode.UPDATE_VEHICLE_RANK_FAIL.getDesc());
}
}
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -17,8 +18,8 @@ import com.xxfc.platform.vehicle.biz.VehiclePlatCataBiz;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.VehicleCata;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.pojo.VehicleModelQueryCondition;
import com.xxfc.platform.vehicle.pojo.VModelDetailVO;
import com.xxfc.platform.vehicle.pojo.VehicleModelQueryCondition;
import com.xxfc.platform.vehicle.pojo.VehicleModelVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -32,11 +33,10 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
/**
* @author Administrator
*/
......@@ -117,7 +117,7 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
// vmqc.setStatus(SYS_TRUE);
// }
if (vmqc == null || vmqc.getPage() == null || vmqc.getLimit() == null || vmqc.getPage() < 0 || vmqc.getLimit() <= 0) {
return ObjectRestResponse.createDefaultFail();
return ObjectRestResponse.paramIsEmpty();
}
//结合车型
if (org.apache.commons.lang3.StringUtils.isNotBlank(vmqc.getCatasStr())) {
......@@ -139,7 +139,7 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
@Transactional
public ObjectRestResponse<VehicleModel> add(@RequestBody VehicleModel vm, HttpServletRequest request) {
if (vm == null) {
return ObjectRestResponse.createDefaultFail();
return ObjectRestResponse.paramIsEmpty();
}
if (StringUtils.isBlank(vm.getName())) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE, "车名不能为空");
......@@ -192,7 +192,7 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
} catch (NumberFormatException e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw new BaseException(ResultCode.FAILED_CODE);
throw new BaseException(ResultCode.ADD_VEHICLE_FAIL);
}
}
......@@ -245,7 +245,7 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
} catch (NumberFormatException e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw new BaseException(ResultCode.FAILED_CODE);
throw new BaseException(ResultCode.UPDATE_VEHICLE_FAIL);
}
}
......@@ -293,13 +293,12 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
* @param limit
* @return
*/
@ApiOperation("优质车型")
@ApiOperation("优质车型")
@GetMapping(value = "/goodList")
public List<GoodDataVO> goodList(@RequestParam("page") Integer page, @RequestParam("limit") Integer limit) {
@IgnoreUserToken
public List<GoodDataVO> goodList(@RequestParam(value = "page") Integer page, @RequestParam(value = "limit") Integer limit) {
return baseBiz.goodList(page, limit);
}
@ApiOperation("上下架")
@PutMapping(value = "/setStatus/{id}/{status}")
@Transactional
......@@ -331,7 +330,7 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
} catch (NumberFormatException e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw new BaseException(ResultCode.FAILED_CODE);
throw new BaseException(ResultCode.UPDATE_VEHICLE_FAIL);
}
}
......
......@@ -425,11 +425,14 @@
and v1.book_type = #{bookType}
</if>
<if test="companyIds != null and companyIds.size > 0">
and v1.lift_company in
and (v1.lift_company in
<foreach collection="companyIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
or v1.ret_company in
<foreach collection="companyIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>)
</if>
and v1.status between 1 and 2 and v1.book_user != -2
</where>
......
......@@ -362,73 +362,7 @@
where id = #{vehicleId} and status = #{lastStatus}
</update>
<select id="searchUsableModel" parameterType="java.util.Map"
resultMap="searchUsableModelMap">
select distinct vm.id as model_id, bc.id as company_id
<if test=" catas != null ">
,GROUP_CONCAT(vc.cata_id) as catas
</if>
<!-- yearNo4Where 标识时间参数不用于where条件,用于select部分 -->
<if test=" yearMonthAndParam !=null and yearNo4Where != null and yearNo4Where == true">
,max(
<foreach collection="yearMonthAndParam" index="yearMonth" item="andOperation" separator="and">
<include refid="yearMonthAndParamSql"></include>
</foreach>
) as hasVehicle
</if>
<if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
</if>
<include refid="searchUsableSql"/>
and vm.id is not null
and vm.status = 1
and vm.isdel = 0
and bc.id is not null
GROUP BY model_id, company_id
<if test="lon != null and lat != null">, distance</if>
<!--<if test=" yearMonthAndParam !=null and yearNo4Where != null and yearNo4Where == true">, hasVehicle</if>-->
<!-- 循环 相同父级 数据做并集, 不同父级做或集 -->
<if test=" catas != null ">
having ( 1
<foreach collection="catas" index="key" item="cataList">
&amp; (
<foreach collection="cataList" index="cIndex" item="cata">
<if test=" cIndex != 0">
|
</if>
(case when FIND_IN_SET(#{cata.id},catas) > 0 then 1 else 0 end)
</foreach>
)
</foreach>
) > 0
</if>
<if test="lon != null and lat != null">
order by
<if test=" yearMonthAndParam !=null and yearNo4Where != null and yearNo4Where == true">
hasVehicle desc,
</if>
distance asc
</if>
</select>
<select id="searchUsableVehicle" parameterType="java.util.Map"
resultType="com.xxfc.platform.vehicle.entity.Vehicle">
select v.*
<if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
</if>
<if test=" yearMonthAndParam !=null ">
,ifnull(vbi.booked_date,0) as booked_date
</if>
<include refid="searchUsableSql"/>
<if test="lon != null and lat != null">
order by
distance asc
</if>
</select>
<select id="getAllVehicle" parameterType="java.util.Map" resultMap="searchModel">
select v1.*, bc2.name subordinateBranchName, bc3.name parkCompanyName, bc4.name destinationBranchCompanyName
from vehicle v1
......@@ -564,6 +498,74 @@
</where>
</select>
<select id="searchUsableModel" parameterType="java.util.Map"
resultMap="searchUsableModelMap">
select distinct vm.id as model_id, bc.id as company_id
<if test=" catas != null ">
,GROUP_CONCAT(vc.cata_id) as catas
</if>
<!-- yearNo4Where 标识时间参数不用于where条件,用于select部分 -->
<if test=" yearMonthAndParam !=null and yearNo4Where != null and yearNo4Where == true">
,max(
<foreach collection="yearMonthAndParam" index="yearMonth" item="andOperation" separator="and">
<include refid="yearMonthAndParamSql"></include>
</foreach>
) as hasVehicle
</if>
<if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
</if>
<include refid="searchUsableSql"/>
and vm.id is not null
and vm.status = 1
and vm.isdel = 0
and bc.id is not null
GROUP BY model_id, company_id
<if test="lon != null and lat != null">, distance</if>
<!--<if test=" yearMonthAndParam !=null and yearNo4Where != null and yearNo4Where == true">, hasVehicle</if>-->
<!-- 循环 相同父级 数据做并集, 不同父级做或集 -->
<if test=" catas != null ">
having ( 1
<foreach collection="catas" index="key" item="cataList">
&amp; (
<foreach collection="cataList" index="cIndex" item="cata">
<if test=" cIndex != 0">
|
</if>
(case when FIND_IN_SET(#{cata.id},catas) > 0 then 1 else 0 end)
</foreach>
)
</foreach>
) > 0
</if>
<if test="lon != null and lat != null">
order by
<if test=" yearMonthAndParam !=null and yearNo4Where != null and yearNo4Where == true">
hasVehicle desc,
</if>
distance asc
</if>
</select>
<select id="searchUsableVehicle" parameterType="java.util.Map"
resultType="com.xxfc.platform.vehicle.entity.Vehicle">
select v.*
<if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
</if>
<if test=" yearMonthAndParam !=null ">
,ifnull(vbi.booked_date,0) as booked_date
</if>
<include refid="searchUsableSql"/>
<if test="lon != null and lat != null">
order by
distance asc
</if>
</select>
<!-- 查询可用车辆/车型 的公用 from 和 where 部分条件 -->
<sql id="searchUsableSql">
from vehicle v
......@@ -573,10 +575,19 @@
</if>
left join vehicle_model vm on v.model_id = vm.id
left join branch_company bc on v.park_branch_company_id = bc.id
<if test="startCompanyId != null and endCompanyId != null ">
left join (
<include refid="aroundBookRecord"></include>
) abr on v.`id` = abr.vehicle_id
</if>
<if test=" catas != null ">
left join vehicle_cata vc on vm.id = vc.vehicle_model_id
</if>
<where>
<!-- 若需根据预定日期条件查询,针对换为位操作 -->
<!-- yearNo4Where 标识时间参数是否用于where条件 -->
(abr.to_lift_company = null or (abr.to_lift_company = ))
<!-- 若需根据预定日期条件查询,针对换为位操作 -->
<!-- yearNo4Where 标识时间参数是否用于where条件 -->
<if test=" yearMonthAndParam !=null and yearNo4Where == null">
......@@ -585,7 +596,13 @@
<include refid="yearMonthAndParamSql"></include>
</foreach>
</if>
<if test="startCompanyId != null and endCompanyId != null ">
and (
(abr.to_lift_company = null or abr.to_lift_company = #{startCompanyId})
and
(abr.to_return_company = null or abr.to_return_company = #{endCompanyId})
)
</if>
<if test=" modelId != null ">
and v.model_id = #{modelId}
</if>
......@@ -611,4 +628,17 @@
)
</sql>
<!-- 前后被预定的情况 -->
<sql id = "aroundBookRecord">
select sevbr.*
, vbre.ret_company as to_lift_company
, vbrs.lift_company as to_return_company
from
(select vehicle_id, max(if(book_end_date &lt; #{start_date_extend}, book_end_date, null)) as max_book_end_date, min(if(book_start_date &gt; #{end_date_extend}, book_start_date, null)) as min_book_start_date from vehicle_book_record where status != 4 and status != 6 group by vehicle_id) sevbr
left join vehicle_book_record vbre
on sevbr.vehicle_id = vbre.vehicle_id and sevbr.max_book_end_date = vbre.book_end_date and vbre.status != 4 and vbre.status != 6
left join vehicle_book_record vbrs
on sevbr.vehicle_id = vbrs.vehicle_id and sevbr.min_book_start_date = vbrs.book_start_date and vbrs.status != 4 and vbrs.status != 6;
</sql>
</mapper>
\ No newline at end of file
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