Commit 4dfba9b0 authored by jiaorz's avatar jiaorz

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

parents f973f5f9 01701847
...@@ -166,4 +166,44 @@ public class AuthController { ...@@ -166,4 +166,44 @@ public class AuthController {
} }
/**
* 根据用户id登录 Unbelievable ! ! !
* @param userId
* @return
* @throws Exception
*/
@PostMapping(value = "/applet/uid/login")
public JSONObject appletLoginByUserId(@RequestParam("userId") Integer userId) throws Exception{
log.info(userId+"----require appletLoginByUserId...");
JSONObject data = appAuthService.appletLoginByUserId(userId);
if(data!=null&&data.getInteger("status")== ResultCode.SUCCESS_CODE){
JSONObject result=data.getJSONObject("data");
if(result==null){
data.put("status",1001);
}else {
String token=appAuthService.getToken(String.valueOf(result.get("username")),result.getInteger("userId"));
data.put("token",token);
}
}
return data;
}
@PostMapping(value = "/applet/registry")
public JSONObject registryWithApplet(
@RequestParam(value="username",defaultValue="")String username,
@RequestParam(value="nickname",defaultValue="")String nickname,
@RequestParam(value="headimgurl",defaultValue="")String headimgurl)throws Exception {
JSONObject data=appAuthService.appletRegistry(username,nickname,headimgurl);
if(data!=null&&data.getInteger("status")== ResultCode.SUCCESS_CODE){
JSONObject result=data.getJSONObject("data");
if(result==null){
data.put("status",1001);
}else {
String token=appAuthService.getToken(String.valueOf(result.get("username")),result.getInteger("userId"));
data.put("token",token);
}
}
return data;
}
} }
...@@ -6,10 +6,7 @@ import com.github.wxiaoqi.security.api.vo.user.UserInfo; ...@@ -6,10 +6,7 @@ import com.github.wxiaoqi.security.api.vo.user.UserInfo;
import com.github.wxiaoqi.security.auth.configuration.FeignConfiguration; import com.github.wxiaoqi.security.auth.configuration.FeignConfiguration;
import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationRequest; import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationRequest;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/** /**
...@@ -51,4 +48,22 @@ public interface IUserService { ...@@ -51,4 +48,22 @@ public interface IUserService {
public JSONObject reset( @RequestParam(value="username")String username, public JSONObject reset( @RequestParam(value="username")String username,
@RequestParam(value="mobilecode")String mobilecode, @RequestParam(value="mobilecode")String mobilecode,
@RequestParam(value="password")String password); @RequestParam(value="password")String password);
/**
* 小程序通过用户id登录登录
* @param userid
* @return
*/
@RequestMapping(value = "/api/app/applet/uid/login", method = RequestMethod.POST)
public JSONObject appletLogin(@RequestParam(value = "userid") Integer userid);
/**
* 小程序注册
* @param username
* @param nickname
* @param headimgurl
* @return
*/
@PostMapping("/api/app/applet/registry")
public JSONObject appletRegistry(@RequestParam(value="username")String username, @RequestParam(value="nickname")String nickname,@RequestParam(value="headimgurl")String headimgurl);
} }
...@@ -3,6 +3,7 @@ package com.github.wxiaoqi.security.auth.service; ...@@ -3,6 +3,7 @@ package com.github.wxiaoqi.security.auth.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationRequest; import com.github.wxiaoqi.security.auth.util.user.JwtAuthenticationRequest;
import org.springframework.web.bind.annotation.RequestParam;
public interface AuthService { public interface AuthService {
String login(JwtAuthenticationRequest authenticationRequest) throws Exception; String login(JwtAuthenticationRequest authenticationRequest) throws Exception;
...@@ -16,4 +17,20 @@ public interface AuthService { ...@@ -16,4 +17,20 @@ public interface AuthService {
JSONObject tlogin(String username, String password,String mobilecode,Integer type) throws Exception; JSONObject tlogin(String username, String password,String mobilecode,Integer type) throws Exception;
String getToken(String username,Integer id) throws Exception; String getToken(String username,Integer id) throws Exception;
JSONObject reset(String username, String mobilecode, String password) throws Exception; JSONObject reset(String username, String mobilecode, String password) throws Exception;
/**
* 使用用户id登录 Unbelievable ! ! !
* @param userid
* @return
*/
JSONObject appletLoginByUserId(Integer userid);
/**
* 通过小程序注册
* @param username
* @param headimgurl
* @param nickname
* @return
*/
JSONObject appletRegistry(String username,String headimgurl,String nickname);
} }
...@@ -86,4 +86,14 @@ public class AppAuthServiceImpl implements AuthService { ...@@ -86,4 +86,14 @@ public class AppAuthServiceImpl implements AuthService {
return userService.reset(username,mobilecode,password); return userService.reset(username,mobilecode,password);
} }
@Override
public JSONObject appletLoginByUserId(Integer userid) {
return userService.appletLogin(userid);
}
@Override
public JSONObject appletRegistry(String username,String headimgurl,String nickname) {
return userService.appletRegistry(username,headimgurl,nickname);
}
} }
...@@ -83,4 +83,14 @@ public class AuthServiceImpl implements AuthService { ...@@ -83,4 +83,14 @@ public class AuthServiceImpl implements AuthService {
public JSONObject reset(String username, String mobilecode, String password) throws Exception { public JSONObject reset(String username, String mobilecode, String password) throws Exception {
return userService.reset(username,mobilecode,password); return userService.reset(username,mobilecode,password);
} }
@Override
public JSONObject appletLoginByUserId(Integer userid) {
return userService.appletLogin(userid);
}
@Override
public JSONObject appletRegistry(String username,String headimgurl,String nickname) {
return userService.appletRegistry(username,headimgurl,nickname);
}
} }
...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.common.constant.RestCode; ...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.common.constant.RestCode;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* Created by ace on 2017/9/8. * Created by ace on 2017/9/8.
...@@ -57,4 +58,9 @@ public class BaseException extends RuntimeException { ...@@ -57,4 +58,9 @@ public class BaseException extends RuntimeException {
super(ResultCode.getMsg(code) + (map == null? "" : map.toString())); super(ResultCode.getMsg(code) + (map == null? "" : map.toString()));
this.status = code; this.status = code;
} }
public BaseException(int code, Set<String> set) {
super(ResultCode.getMsg(code)+ (set == null? "" : set.toString()));
this.status = code;
}
} }
package com.github.wxiaoqi.security.common.util;
import org.apache.commons.jexl2.Expression;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.MapContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.util.Map;
/**
*
* @ClassName: IntervalUtil
* @author: kangyl17909
* @date: 2018年7月3日
*/
public class IntervalUtil {
/**
* 判断data_value是否在interval区间范围内
* @author: kangyl17909
* @date: 2018年7月3日
* @param data_value 数值类型的
* @param interval 正常的数学区间,包括无穷大等,如:(1,3)、>5%、(-∞,6]、(125%,135%)U(70%,80%)
* @return true:表示data_value在区间interval范围内,false:表示data_value不在区间interval范围内
*/
public boolean isInTheInterval(String data_value,String interval) {
//将区间和data_value转化为可计算的表达式
String formula = getFormulaByAllInterval(data_value,interval,"||");
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
try {
//计算表达式
return (Boolean) jse.eval(formula);
} catch (Exception t) {
return false;
}
}
/**
* 将所有阀值区间转化为公式:如
* [75,80) =》 date_value < 80 && date_value >= 75
* (125%,135%)U(70%,80%) =》 (date_value < 1.35 && date_value > 1.25) || (date_value < 0.8 && date_value > 0.7)
* @param date_value
* @param interval 形式如:(125%,135%)U(70%,80%)
* @param connector 连接符 如:") || ("
*/
private String getFormulaByAllInterval(String date_value, String interval, String connector) {
StringBuffer buff = new StringBuffer();
for(String limit:interval.split("U")){//如:(125%,135%)U (70%,80%)
buff.append("(").append(getFormulaByInterval(date_value, limit," && ")).append(")").append(connector);
}
String allLimitInvel = buff.toString();
int index = allLimitInvel.lastIndexOf(connector);
allLimitInvel = allLimitInvel.substring(0,index);
return allLimitInvel;
}
/**
* 将整个阀值区间转化为公式:如
* 145) =》 date_value < 145
* [75,80) =》 date_value < 80 && date_value >= 75
* @param date_value
* @param interval 形式如:145)、[75,80)
* @param connector 连接符 如:&&
*/
private String getFormulaByInterval(String date_value, String interval, String connector) {
StringBuffer buff = new StringBuffer();
for(String halfInterval:interval.split(",")){//如:[75,80)、≥80
buff.append(getFormulaByHalfInterval(halfInterval, date_value)).append(connector);
}
String limitInvel = buff.toString();
int index = limitInvel.lastIndexOf(connector);
limitInvel = limitInvel.substring(0,index);
return limitInvel;
}
/**
* 将半个阀值区间转化为公式:如
* 145) =》 date_value < 145
* ≥80% =》 date_value >= 0.8
* [130 =》 date_value >= 130
* <80% =》 date_value < 0.8
* @param halfInterval 形式如:145)、≥80%、[130、<80%
* @param date_value
* @return date_value < 145
*/
private String getFormulaByHalfInterval(String halfInterval, String date_value) {
halfInterval = halfInterval.trim();
if(halfInterval.contains("∞")){//包含无穷大则不需要公式
return "1 == 1";
}
StringBuffer formula = new StringBuffer();
String data = "";
String opera = "";
if(halfInterval.matches("^([<>≤≥\\[\\(]{1}(-?\\d+.?\\d*\\%?))$")){//表示判断方向(如>)在前面 如:≥80%
opera = halfInterval.substring(0,1);
data = halfInterval.substring(1);
}else{//[130、145)
opera = halfInterval.substring(halfInterval.length()-1);
data = halfInterval.substring(0,halfInterval.length()-1);
}
double value = dealPercent(data);
formula.append(date_value).append(" ").append(opera).append(" ").append(value);
String a = formula.toString();
//转化特定字符
return a.replace("[", ">=").replace("(", ">").replace("]", "<=").replace(")", "<").replace("≤", "<=").replace("≥", ">=");
}
/**
* 去除百分号,转为小数
* @param str 可能含百分号的数字
* @return
*/
private double dealPercent(String str){
double d = 0.0;
if(str.contains("%")){
str = str.substring(0,str.length()-1);
d = Double.parseDouble(str)/100;
}else{
d = Double.parseDouble(str);
}
return d;
}
public static boolean staticIsInTheInterval(String data_value,String interval) {
return new IntervalUtil().isInTheInterval(data_value, interval);
}
public static Object evaluate(String expression, JexlContext jexlContext) {
Expression e = new JexlEngine().createExpression(expression);
return e.evaluate(jexlContext);
}
public static Object evaluate(String expression, Map<String, Object> jexlContextMap) {
Expression e = new JexlEngine().createExpression(expression);
JexlContext jexlContext = new MapContext();
jexlContextMap.forEach((k, v) -> jexlContext.set(k, v));
return e.evaluate(jexlContext);
}
public static void main(String[] args) {
IntervalUtil a = new IntervalUtil();
System.out.println(a.isInTheInterval("6", "(-∞,6]"));
}
}
...@@ -6,7 +6,9 @@ import com.github.wxiaoqi.security.common.util.SystemProperty; ...@@ -6,7 +6,9 @@ import com.github.wxiaoqi.security.common.util.SystemProperty;
public class ResultCode { public class ResultCode {
////////////////////////////参数相关/////////////////////////// ////////////////////////////参数相关///////////////////////////
//参数非法,请修改
public static int PARAM_ILLEGAL_CODE = Integer.valueOf(SystemProperty.getResultConfig("PARAM_ILLEGAL_CODE")); public static int PARAM_ILLEGAL_CODE = Integer.valueOf(SystemProperty.getResultConfig("PARAM_ILLEGAL_CODE"));
//参数时效已过时,不能使用
public static int PARAM_EXPIRE_CODE = Integer.valueOf(SystemProperty.getResultConfig("PARAM_EXPIRE_CODE")); public static int PARAM_EXPIRE_CODE = Integer.valueOf(SystemProperty.getResultConfig("PARAM_EXPIRE_CODE"));
// 操作成功 // 操作成功
......
package com.github.wxiaoqi.security.admin.constant.enumerate;
/**
* @author libin
* @version 1.0
* @description 用户来源
* @data 2019/7/3 18:31
*/
public enum UserSourceEnum {
APP(0,"APP"),
APPLET(1,"小程序"),
NEWPROMOTION(2,"新人推广");
private int code;
private String source;
UserSourceEnum(int code, String source) {
this.code = code;
this.source = source;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
}
...@@ -31,5 +31,6 @@ public class AppUserDetail { ...@@ -31,5 +31,6 @@ public class AppUserDetail {
private Long createtime; private Long createtime;
private Long updatetime; private Long updatetime;
private Integer isdel; private Integer isdel;
private Integer channel;
} }
...@@ -35,5 +35,39 @@ public class AppUserLogin { ...@@ -35,5 +35,39 @@ public class AppUserLogin {
private String idNumber; private String idNumber;
@Column(name = "certification_status") @Column(name = "certification_status")
private Integer certificationStatus; private Integer certificationStatus;
/**
* 创建ip
*/
@Column(name = "crt_host")
private String crtHost;
/**
* 更新ip
*/
@Column(name = "upd_host")
private String updHost;
/**
* 最后登录ip
*/
@Column(name = "last_host")
private String lastHost;
/**
* 最后登录时间
*/
@Column(name = "last_time")
private Long lastTime;
/**
* 省份编号
*/
@Column(name = "province_code")
private Integer provinceCode;
/**
* 市编号
*/
@Column(name = "city_code")
private Integer cityCode;
} }
...@@ -219,6 +219,11 @@ ...@@ -219,6 +219,11 @@
<version>2.0-SNAPSHOT</version> <version>2.0-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-universal-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>ace-admin</finalName> <finalName>ace-admin</finalName>
......
...@@ -8,6 +8,7 @@ import org.springframework.boot.builder.SpringApplicationBuilder; ...@@ -8,6 +8,7 @@ import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
import tk.mybatis.spring.annotation.MapperScan; import tk.mybatis.spring.annotation.MapperScan;
...@@ -22,13 +23,13 @@ import tk.mybatis.spring.annotation.MapperScan; ...@@ -22,13 +23,13 @@ import tk.mybatis.spring.annotation.MapperScan;
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableCircuitBreaker @EnableCircuitBreaker
@SpringBootApplication @SpringBootApplication
@EnableFeignClients(value = {"com.github.wxiaoqi.security","com.xxfc.platform"},defaultConfiguration = HeaderConfig.class) @EnableFeignClients(value = {"com.github.wxiaoqi.security","com.xxfc.platform"},defaultConfiguration = HeaderConfig.class)
@EnableScheduling @EnableScheduling
@EnableAceAuthClient @EnableAceAuthClient
@EnableAceCache @EnableAceCache
@EnableTransactionManagement @EnableTransactionManagement
@MapperScan("com.github.wxiaoqi.security.admin.mapper") @MapperScan("com.github.wxiaoqi.security.admin.mapper")
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
//@EnableSwagger2Doc //@EnableSwagger2Doc
public class AdminBootstrap { public class AdminBootstrap {
public static void main(String[] args) { public static void main(String[] args) {
......
...@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service; ...@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -100,7 +101,7 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> { ...@@ -100,7 +101,7 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
public AppUserLogin checkeUserLogin(String username) { public AppUserLogin checkeUserLogin(String username) {
Example example = new Example(AppUserLogin.class); Example example = new Example(AppUserLogin.class);
example.createCriteria().andEqualTo("username", username).andEqualTo("isdel", 0); example.createCriteria().andEqualTo("username", username).andEqualTo("isdel", 0).andEqualTo("status",0);
List<AppUserLogin> userLoginList = mapper.selectByExample(example); List<AppUserLogin> userLoginList = mapper.selectByExample(example);
if (userLoginList != null && userLoginList.size() != 0) { if (userLoginList != null && userLoginList.size() != 0) {
return userLoginList.get(0); return userLoginList.get(0);
...@@ -150,5 +151,12 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> { ...@@ -150,5 +151,12 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
return mapper.selectByPrimaryKey(userId); return mapper.selectByPrimaryKey(userId);
} }
/**
* 登录信息更改
* @param userId
* @param ip
*/
public void updateLoginInfo(Integer userId,String ip){
mapper.updateLoginUserInfoById(userId,ip, Instant.now().toEpochMilli());
}
} }
...@@ -7,6 +7,7 @@ import com.github.wxiaoqi.security.admin.vo.AppUserVo; ...@@ -7,6 +7,7 @@ import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.admin.vo.UserMemberVo; import com.github.wxiaoqi.security.admin.vo.UserMemberVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.BaseUserMember; import com.github.wxiaoqi.security.admin.entity.BaseUserMember;
...@@ -30,14 +31,14 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -30,14 +31,14 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
AppUserDetailBiz detailBiz; AppUserDetailBiz detailBiz;
//获取用户会员信息 //获取用户会员信息
@Cache(key = "user:member{1}") @Cache(key = "user:member{1}")
public UserMemberVo getMemberInfoByUserId(Integer userId){ public UserMemberVo getMemberInfoByUserId(Integer userId){
return mapper.getInfoByUserId(userId); return mapper.getInfoByUserId(userId);
} }
//更新会员信息 //更新会员信息
@Override @Override
@CacheClear(key = "user:member{1.userid}") @CacheClear(key = "user:member{1.userId}")
public void updateSelectiveById(BaseUserMember userMember){ super.updateSelectiveById(userMember);} public void updateSelectiveById(BaseUserMember userMember){ super.updateSelectiveById(userMember);}
...@@ -61,13 +62,23 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -61,13 +62,23 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
baseUserMember.setBuyCount(1); baseUserMember.setBuyCount(1);
insertSelective(baseUserMember); insertSelective(baseUserMember);
}else { }else {
Integer discount=userMemberVo.getDiscount()==null?0:userMemberVo.getDiscount();
Integer discount1=baseUserMember.getDiscount()==null?0:baseUserMember.getDiscount();
if(discount<discount1){
baseUserMember.setDiscount(discount);
}
Integer level=userMemberVo.getMemberLevel()==null?0:userMemberVo.getMemberLevel();
Integer level1=baseUserMember.getMemberLevel()==null?0:baseUserMember.getMemberLevel();
if(level>level1){
baseUserMember.setMemberLevel(level);
}
baseUserMember.setId(userMemberVo.getId()); baseUserMember.setId(userMemberVo.getId());
totalNumber+=userMemberVo.getTotalNumber()==null?0:userMemberVo.getTotalNumber(); totalNumber+=userMemberVo.getTotalNumber()==null?0:userMemberVo.getTotalNumber();
freeDays+=userMemberVo.getRentFreeDays()==null?0:userMemberVo.getRentFreeDays(); freeDays+=userMemberVo.getRentFreeDays()==null?0:userMemberVo.getRentFreeDays();
baseUserMember.setBuyCount(userMemberVo.getBuyCount()+1); baseUserMember.setBuyCount(userMemberVo.getBuyCount()+1);
baseUserMember.setTotalNumber(totalNumber); baseUserMember.setTotalNumber(totalNumber);
baseUserMember.setRentFreeDays(freeDays); baseUserMember.setRentFreeDays(freeDays);
updateSelectiveById(baseUserMember); getMyBiz().updateSelectiveById(baseUserMember);
} }
AppUserVo userVo= detailBiz.getUserInfoById(userId); AppUserVo userVo= detailBiz.getUserInfoById(userId);
if(userVo!=null&&(userVo.getIsMember()==null||userVo.getIsMember()==0)){ if(userVo!=null&&(userVo.getIsMember()==null||userVo.getIsMember()==0)){
...@@ -106,7 +117,7 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -106,7 +117,7 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
if(freeDays>0&&freeDays>=days){ if(freeDays>0&&freeDays>=days){
freeDays=freeDays-days; freeDays=freeDays-days;
baseUserMember.setRentFreeDays(freeDays); baseUserMember.setRentFreeDays(freeDays);
updateSelectiveById(baseUserMember); getMyBiz().updateSelectiveById(baseUserMember);
num=freeDays; num=freeDays;
} }
}else if(type==2){ }else if(type==2){
...@@ -122,17 +133,17 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -122,17 +133,17 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
Integer payCount=userMemberVo.getPayCount()==null?0:userMemberVo.getPayCount(); Integer payCount=userMemberVo.getPayCount()==null?0:userMemberVo.getPayCount();
payCount=payCount+1; payCount=payCount+1;
baseUserMember.setPayCount(payCount); baseUserMember.setPayCount(payCount);
updateSelectiveById(baseUserMember); getMyBiz().updateSelectiveById(baseUserMember);
num=freeDays; num=freeDays;
}else { }else {
/*lockDays=lockDays>0?(lockDays-days)>0?(lockDays-days):0:0; /*lockDays=lockDays>0?(lockDays-days)>0?(lockDays-days):0:0;
baseUserMember.setLockDays(lockDays); baseUserMember.setLockDays(lockDays);
updateSelectiveById(baseUserMember); getMyBiz().updateSelectiveById(baseUserMember);
num=freeDays-lockDays;*/ num=freeDays-lockDays;*/
freeDays=(freeDays+days)>0?(freeDays+days):0; freeDays=(freeDays+days)>0?(freeDays+days):0;
freeDays=freeDays>totalNumber?totalNumber:freeDays; freeDays=freeDays>totalNumber?totalNumber:freeDays;
baseUserMember.setRentFreeDays(freeDays); baseUserMember.setRentFreeDays(freeDays);
updateSelectiveById(baseUserMember); getMyBiz().updateSelectiveById(baseUserMember);
num=freeDays; num=freeDays;
} }
...@@ -140,7 +151,9 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -140,7 +151,9 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
return num; return num;
} }
private BaseUserMemberBiz getMyBiz() {
return AopContext.currentProxy() != null ? (BaseUserMemberBiz) AopContext.currentProxy() : this;
}
} }
\ No newline at end of file
...@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler; ...@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
...@@ -64,4 +65,8 @@ public class WebConfiguration implements WebMvcConfigurer { ...@@ -64,4 +65,8 @@ public class WebConfiguration implements WebMvcConfigurer {
return list; return list;
} }
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
} }
...@@ -2,9 +2,19 @@ package com.github.wxiaoqi.security.admin.mapper; ...@@ -2,9 +2,19 @@ package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserManage; import com.github.wxiaoqi.security.admin.entity.AppUserManage;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
public interface AppUserLoginMapper extends Mapper<AppUserLogin> { public interface AppUserLoginMapper extends Mapper<AppUserLogin> {
/**
* 登录信息更改 ip 登录时间
* @param userId
* @param ip
* @param lastTime
*/
@Update("update `app_user_login` set `last_host`=#{ip},`last_time`=#{lastTime} where `id`=#{userId}")
void updateLoginUserInfoById(@Param("userId") Integer userId,@Param("ip") String ip, @Param("lastTime") long lastTime);
} }
\ No newline at end of file
...@@ -171,5 +171,30 @@ public class AppUserRest { ...@@ -171,5 +171,30 @@ public class AppUserRest {
return appPermissionService.upAuthentication(userId,name,idNumber,status); return appPermissionService.upAuthentication(userId,name,idNumber,status);
} }
/**
* 通过用户id登录 unbelievable! ! !
* @param userid
* @return
*/
@PostMapping("/applet/uid/login")
public JSONObject appletLogin(@RequestParam(value = "userid") Integer userid){
return appPermissionService.appletLoginByUserId(userid);
}
@PostMapping("/applet/registry")
public JSONObject appletRegistry(
@RequestParam(value="username",defaultValue="")String username,
@RequestParam(value="nickname",defaultValue="")String nickname,
@RequestParam(value="headimgurl",defaultValue="")String headimgurl){
if(StringUtils.isBlank(headimgurl)){
headimgurl=SystemConfig.USER_HEADER_URL_DEFAULT;
}
if(StringUtils.isBlank(nickname)){
nickname=SystemConfig.USER_NIKENAME_DEFAULT+(int)((Math.random()*9+1)*100000);
}
return appPermissionService.appletRegistry(username,headimgurl,nickname);
}
} }
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
<result property="memberLevel" column="member_level"/> <result property="memberLevel" column="member_level"/>
<result property="cardLeave" column="card_leave"/> <result property="cardLeave" column="card_leave"/>
<result property="isBind" column="is_bind"/> <result property="isBind" column="is_bind"/>
<result property="payCount" column="pay_count"/>
<result property="buyCount" column="buy_count"/>
<result property="totalNumber" column="total_number"/> <result property="totalNumber" column="total_number"/>
<result property="rentFreeDays" column="rent_free_days"/> <result property="rentFreeDays" column="rent_free_days"/>
<result property="validTime" column="valid_time"/> <result property="validTime" column="valid_time"/>
......
...@@ -74,6 +74,13 @@ public class AppVersion implements Serializable { ...@@ -74,6 +74,13 @@ public class AppVersion implements Serializable {
@Column(name = "download_switch") @Column(name = "download_switch")
@ApiModelProperty(value = "下载开关(0:可下载,1:不可下载)") @ApiModelProperty(value = "下载开关(0:可下载,1:不可下载)")
private Integer downloadSwitch; private Integer downloadSwitch;
/**
* 下载开关(0:可下载,1:不可下载)
*/
@Column(name = "is_compel")
@ApiModelProperty(value = "是否强制:0-否;1-是")
private Integer isCompel;
/** /**
* 权重 * 权重
......
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum CrosstownTypeEnum {
RentVehicle(1, "交车"),
TOUR(2, "还车"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
CrosstownTypeEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
\ No newline at end of file
...@@ -8,7 +8,7 @@ public enum OrderStatusEnum { ...@@ -8,7 +8,7 @@ public enum OrderStatusEnum {
ORDER_CRT(1, "创建订单"), ORDER_CRT(1, "创建订单"),
ORDER_CANCEL(2, "取消订单"), ORDER_CANCEL(2, "取消订单"),
ORDER_UNPAY(3, "待支付"), ORDER_UNPAY(3, "待支付"),
ORDER_TOSTART(4, "待进行(待出行)"), ORDER_TOSTART(4, "待进行(待出行/租车已支付)"),
ORDER_WAIT(5, "出行中(进行中)"), ORDER_WAIT(5, "出行中(进行中)"),
ORDER_FINISH(6, "已完成"), ORDER_FINISH(6, "已完成"),
; ;
......
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum RefundStatusEnum {
NONE(0, "未退还"),
ALL(1, "已退还所有钱"),
RESIDUE_ILLEGAL(2, "已退还部分押金(保留违章预备金)"),
REFUND_DEPOSIT(3, "已退还所有押金(扣除该扣除的)"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
RefundStatusEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
\ No newline at end of file
...@@ -47,7 +47,7 @@ public class BaseOrder implements Serializable { ...@@ -47,7 +47,7 @@ public class BaseOrder implements Serializable {
* 订单类型 1--租车;2--旅游 * 订单类型 1--租车;2--旅游
*/ */
@Column(name = "type") @Column(name = "type")
@ApiModelProperty(value = "订单类型 1--租车;2--旅游") @ApiModelProperty(value = "订单类型 1--租车;2--旅游; 3--会员订单")
private Integer type; private Integer type;
/** /**
...@@ -190,12 +190,26 @@ public class BaseOrder implements Serializable { ...@@ -190,12 +190,26 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "退款时间") @ApiModelProperty(value = "退款时间")
private Long refundTime; private Long refundTime;
/**
* 退款状态
*/
@Column(name = "refund_status")
@ApiModelProperty(value = "退款的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)")
private Integer refundStatus;
/** /**
* 是否有优惠 * 是否有优惠
*/ */
@Column(name = "has_discount") @Column(name = "has_discount")
@ApiModelProperty(value = "是否有优惠") @ApiModelProperty(value = "是否有优惠 0--无优惠;1--有优惠")
private Long hasDiscount; private Integer hasDiscount;
/**
* 是否有优惠
*/
@Column(name = "has_member_right")
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
/** /**
* 是否已支付 * 是否已支付
......
...@@ -273,13 +273,6 @@ public class OrderRentVehicleDetail implements Serializable { ...@@ -273,13 +273,6 @@ public class OrderRentVehicleDetail implements Serializable {
@ApiModelProperty(value = "出发公司区域id") @ApiModelProperty(value = "出发公司区域id")
private Integer startZoneId; private Integer startZoneId;
/**
* 退还钱(押金)的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)
*/
@Column(name = "return_pay_status")
@ApiModelProperty(value = "退还钱(押金)的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)")
private Integer returnPayStatus;
/** /**
* 剩余需要退还的钱(押金) * 剩余需要退还的钱(押金)
*/ */
...@@ -294,4 +287,11 @@ public class OrderRentVehicleDetail implements Serializable { ...@@ -294,4 +287,11 @@ public class OrderRentVehicleDetail implements Serializable {
@ApiModelProperty(value = "预定记录id") @ApiModelProperty(value = "预定记录id")
private Long bookRecordId; private Long bookRecordId;
/**
* 是否购买免赔
*/
@Column(name = "damage_safe")
@ApiModelProperty(value = "是否购买免赔")
private Integer damageSafe;
} }
...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.entity; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.entity;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
import java.math.BigDecimal;
@Table(name = "order_vehicle_crosstown") @Table(name = "order_vehicle_crosstown")
@Data @Data
...@@ -99,6 +100,7 @@ public class OrderVehicaleCrosstown { ...@@ -99,6 +100,7 @@ public class OrderVehicaleCrosstown {
* 扣除项明细 json * 扣除项明细 json
* deductions: 扣除项 * deductions: 扣除项
* cost:费用 * cost:费用
* id:编号(用于顺序)
*/ */
private String dedDetail; private String dedDetail;
...@@ -110,12 +112,12 @@ public class OrderVehicaleCrosstown { ...@@ -110,12 +112,12 @@ public class OrderVehicaleCrosstown {
/** /**
* 合计扣除费用 * 合计扣除费用
*/ */
private Integer deductionCost; private BigDecimal deductionCost;
/** /**
* 剩余押金 * 剩余押金
*/ */
private Integer restDeposit; private BigDecimal restDeposit;
/** /**
* 驾驶人Id * 驾驶人Id
......
package com.xxfc.platform.order.pojo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class DedDetailDTO {
/**
* : 扣除项
*/
String deductions;
/**
* :费用
*/
BigDecimal cost;
/**
* 编号(用于顺序)
*/
Integer id;
}
...@@ -16,7 +16,6 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail ...@@ -16,7 +16,6 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
private BaseOrder order; private BaseOrder order;
private VehicleModel vehicleModel; private VehicleModel vehicleModel;
private BookVehicleVO bookVehicleVO; private BookVehicleVO bookVehicleVO;
private Integer damageSafe;
/** /**
* 是否使用出租免费天数 * 是否使用出租免费天数
*/ */
......
package com.xxfc.platform.order.pojo.order;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class UnitPriceDTO {
@ApiModelProperty(value = "旅游保险单价")
private BigDecimal insurePrice;
}
\ No newline at end of file
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import ch.qos.logback.core.rolling.TimeBasedFileNamingAndTriggeringPolicyBase;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.IntervalUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.contant.enumerate.RefundStatusEnum;
import com.xxfc.platform.order.contant.enumerate.RefundTypeEnum; import com.xxfc.platform.order.contant.enumerate.RefundTypeEnum;
import com.xxfc.platform.order.entity.*; import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.mapper.BaseOrderMapper; import com.xxfc.platform.order.mapper.BaseOrderMapper;
...@@ -22,18 +25,18 @@ import com.xxfc.platform.vehicle.common.RestResponse; ...@@ -22,18 +25,18 @@ import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.VehicleUserLicense; import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.jexl2.MapContext;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap; import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.*;
/** /**
* *
...@@ -165,6 +168,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -165,6 +168,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
* 取消订单 * 取消订单
* @param baseOrder * @param baseOrder
*/ */
@Transactional
public void cancel(BaseOrder baseOrder) { public void cancel(BaseOrder baseOrder) {
if(cancelAble.get(baseOrder.getType()).contains(baseOrder.getStatus())) { if(cancelAble.get(baseOrder.getType()).contains(baseOrder.getStatus())) {
BaseOrder updateOrder = new BaseOrder(){{ BaseOrder updateOrder = new BaseOrder(){{
...@@ -190,10 +194,14 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -190,10 +194,14 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
}}); }});
//退款流程 //退款流程
refundProcess(baseOrder, orvd); rentRefundProcess(baseOrder, orvd.getDeposit(), orvd.getStartTime(), APP_ORDER+ "_"+ RENT_REFUND);
}else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) { }else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
OrderTourDetail otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId());
}});
//退款流程
rentRefundProcess(baseOrder, otd.getStartTime(), APP_ORDER+ "_"+ TOUR_REFUND);
} }
} }
...@@ -202,7 +210,15 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -202,7 +210,15 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{ OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId()); setOrderId(baseOrder.getId());
}}); }});
//取消租车预定 //取消租车预定
//已支付,并且是待出行状态,取消预约
if(OrderStatusEnum.ORDER_TOSTART.equals(baseOrder.getType()) && SYS_TRUE.equals(baseOrder.getHasPay())){
vehicleFeign.unbookVehicle(orvd.getBookRecordId());
}else {
//未支付,拒绝之前的预约
vehicleFeign.rejectVehicleBooking(orvd.getBookRecordId());
}
//取消租车免费天数使用 //取消租车免费天数使用
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) { if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
...@@ -225,17 +241,104 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -225,17 +241,104 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
} }
} }
private void refundProcess(BaseOrder baseOrder, OrderRentVehicleDetail orvd) { /**
* 租车退款流程(不含押金的通用方法)
* @param baseOrder
* @param startTime
* @param dicParentKey
*/
private void rentRefundProcess(BaseOrder baseOrder, Long startTime, String dicParentKey){
rentRefundProcess(baseOrder, BigDecimal.ZERO, startTime, dicParentKey);
}
/**
* 租车退款流程(含押金)
* @param baseOrder
* @param depositAmont
* @param startTime
* @param dicParentKey
*/
private void rentRefundProcess(BaseOrder baseOrder, BigDecimal depositAmont, Long startTime, String dicParentKey) {
//计算退款金额 //计算退款金额
// 1、押金 + 租金(规则扣除) // 1、押金 + 租金(规则扣除)
BigDecimal refundAmont = orvd.getDeposit().add(baseOrder.getGoodsAmount()); BigDecimal refundGoodsAmount = baseOrder.getGoodsAmount();
String refundTradeNo = thirdFeign.refund(new OrderRefundVo(){{ String refundDesc = "取消订单退款:";
BigDecimal refundGoodsAmont = baseOrder.getGoodsAmount();
if(null == depositAmont) {
depositAmont = BigDecimal.ZERO;
}
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
Long timeLag = startTime - System.currentTimeMillis();
Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
Map<String, com.xxfc.platform.universal.entity.Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
Set<com.xxfc.platform.universal.entity.Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens();
for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) {
if(StrUtil.isBlank(dic.getName())) {
continue;
}
String[] names = dic.getName().split("\\|");
if(names.length < 2) {
continue;
}
//符合范围
if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
refundGoodsAmont = new BigDecimal(((Double) IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
//ga : goodsAmount
set("ga", baseOrder.getGoodsAmount());
}})).toString());
refundDesc = names[1]+ ","+ refundDesc;
break;
}
}
//退款金额
BigDecimal refundAmont = depositAmont.add(refundGoodsAmont);
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDesc, refundAmont, RefundTypeEnum.RentVehicle.getCode(), RefundStatusEnum.ALL.getCode());
}
/**
* 退款子流程
* @param baseOrder
* @param refundDesc
* @param refundAmont
* @param refundType
* @param refundStatus
*/
public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal refundAmont, Integer refundType, Integer refundStatus) {
OrderRefundVo orv = new OrderRefundVo(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue()); setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setRefundAmount(refundAmont.multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo()); setOrderNo(baseOrder.getNo());
setRefundDesc("取消订单退款:"+ refundAmont.toString()); }};
}}).getData(); orv.setRefundDesc(refundDesc+ refundAmont.toString());
orv.setRefundAmount(refundAmont.multiply(new BigDecimal("100")).intValue());
String refundTradeNo = thirdFeign.refund(orv).getData();
//记录订单退款记录
Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, refundAmont, refundTradeNo, refundType);
//更新订单的退款状态和退款时间
if(SYS_TRUE.equals(flag) && null != refundStatus) {
updateSelectiveByIdReT(new BaseOrder(){{
setRefundStatus(refundStatus);
setRefundTime(System.currentTimeMillis());
}});
}
}
/**
* 记录订单退款记录
* @param orderId
* @param refundDesc
* @param refundAmont
* @param refundTradeNo
*/
private Integer addOrderRefund(Integer orderId, String refundDesc, BigDecimal refundAmont, String refundTradeNo, Integer refundType) {
//如果返回的流水为空,则当做失败 //如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE; Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(refundTradeNo)) { if(StrUtil.isBlank(refundTradeNo)) {
...@@ -244,15 +347,18 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -244,15 +347,18 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
//创建订单退款记录 //创建订单退款记录
OrderRefund orderRefund = new OrderRefund(){{ OrderRefund orderRefund = new OrderRefund(){{
setOrderId(baseOrder.getId()); setOrderId(orderId);
setRefundAmount(refundAmont);
setRefundTime(System.currentTimeMillis()); setRefundTime(System.currentTimeMillis());
setRefundDesc("取消订单退款:"+ refundAmont.toString());
setTradeNo(refundTradeNo); setTradeNo(refundTradeNo);
setRefundType(RefundTypeEnum.RentVehicle.getCode()); setRefundType(RefundTypeEnum.RentVehicle.getCode());
}}; }};
orderRefund.setRefundAmount(refundAmont);
orderRefund.setRefundDesc(refundDesc);
orderRefund.setRefundStatus(refundStatus); orderRefund.setRefundStatus(refundStatus);
orderRefund.setRefundType(refundType);
orderRefundBiz.insertSelective(orderRefund); orderRefundBiz.insertSelective(orderRefund);
return refundStatus;
} }
/** /**
...@@ -318,4 +424,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -318,4 +424,12 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
log.error(" order has payed , orderNo:{}, tradeNo:{} ", orderNo, tradeNo); log.error(" order has payed , orderNo:{}, tradeNo:{} ", orderNo, tradeNo);
} }
} }
public BaseOrder updateSelectiveByIdReT(BaseOrder baseOrder) {
if(updateSelectiveByIdRe(baseOrder) > 0) {
return selectById(baseOrder.getId());
}else {
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
}
}
} }
\ No newline at end of file
...@@ -101,7 +101,7 @@ public class OrderTourVerificationBiz{ ...@@ -101,7 +101,7 @@ public class OrderTourVerificationBiz{
//核销列表 //核销列表
public ObjectRestResponse getVerifications(TourGoodOrderFindVo tourGoodOrderFindVo){ public ObjectRestResponse getVerifications(TourGoodOrderFindVo tourGoodOrderFindVo){
return ObjectRestResponse.succ(tourFeign.findTourGoodOrders(BeanUtil.beanToMap(tourGoodOrderFindVo))); return ObjectRestResponse.succ(tourFeign.findTourGoodOrders(tourGoodOrderFindVo));
} }
public boolean isPower(List<BranchCompany> list,Integer companyId){ public boolean isPower(List<BranchCompany> list,Integer companyId){
......
package com.xxfc.platform.order.jobhandler;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 跨平台Http任务
*
* @author xuxueli 2018-09-16 03:48:34
*/
@JobHandler(value = "httpJobHandler")
@Component
@Slf4j
public class HttpJobHandler extends IJobHandler {
@Override
public ReturnT<String> execute(String param) throws Exception {
try {
for(int i =0; i < 10; i++) {
XxlJobLogger.log("helloword");
log.info("helloword");
}
ReturnT returnT = new ReturnT();
returnT.setCode(100);
returnT.setMsg("成功");
returnT.setContent(param);
return returnT;
} catch (Exception e) {
XxlJobLogger.log(e);
return FAIL;
} finally {
;
}
}
}
\ No newline at end of file
package com.xxfc.platform.order.jobhandler;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.util.IntervalUtil;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.biz.OrderVehicalCrosstownBiz;
import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderVehicaleCrosstown;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
/**
* 跨平台Http任务
*
* @author xuxueli 2018-09-16 03:48:34
*/
@JobHandler(value = "rentDepositHandler")
@Component
@Slf4j
public class RentDepositHandler extends IJobHandler {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderVehicalCrosstownBiz crosstownBiz;
@Autowired
ThirdFeign thirdFeign;
@Override
public ReturnT<String> execute(String idLastNumInterval) throws Exception {
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ILLEGAL_RESERVE).getDetail());
try {
for(int i = 0; i < 10; i++) {
if(IntervalUtil.staticIsInTheInterval(String.valueOf(i), idLastNumInterval)) {
List<BaseOrder> lists = baseOrderBiz.selectByExample(new Example.Builder(BaseOrder.class)
//订单已完成的租车订单
.where(WeekendSqls.<BaseOrder>custom().andEqualTo(BaseOrder::getType, OrderTypeEnum.RentVehicle)
.andEqualTo(BaseOrder::getStatus, OrderStatusEnum.ORDER_FINISH)
.andLike(BaseOrder::getId, "%"+ String.valueOf(i))).build());
//处理自动退押金
for(BaseOrder baseOrder : lists) {
OrderRentVehicleDetail orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId());
}});
//未退还, 进行保留违章预备金 的退还
if(RefundStatusEnum.NONE.getCode().equals(baseOrder.getRefundStatus())) {
OrderVehicaleCrosstown crosstown = crosstownBiz.selectOne(new OrderVehicaleCrosstown(){{
setOrderId(baseOrder.getId());
setType(CrosstownTypeEnum.TOUR.getCode());
}});
BigDecimal refundAmont = crosstown.getRestDeposit().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();
}
refundDesc += ")";
//退款子流程: 订单基础,退款描述,退款金额
baseOrderBiz.refundSubProcess(baseOrder, refundDesc, refundAmont, RefundTypeEnum.RentVehicle.getCode(), RefundStatusEnum.RESIDUE_ILLEGAL.getCode());
//设置剩余
}else if(RefundStatusEnum.RESIDUE_ILLEGAL.getCode().equals(baseOrder.getRefundStatus())){
//判断是否违章
//扣违章的钱
//baseOrderBiz.refundSubProcess(baseOrder, refundDesc, refundAmont, RefundTypeEnum.RentVehicle.getCode(), RefundStatusEnum.RESIDUE_ILLEGAL.getCode());
}
// baseOrderBiz.refundSubProcess(baseOrder, refundDesc, refundAmont);
}
}
}
ReturnT returnT = new ReturnT(){{
setCode(100);
setMsg("成功");
setContent(idLastNumInterval);
}};
return returnT;
} catch (Exception e) {
XxlJobLogger.log(e);
return FAIL;
} finally {
;
}
}
}
\ No newline at end of file
...@@ -24,8 +24,11 @@ import com.xxfc.platform.order.entity.BaseOrder; ...@@ -24,8 +24,11 @@ import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.mqhandler.RabbitProduct; import com.xxfc.platform.order.mqhandler.RabbitProduct;
import com.xxfc.platform.order.pojo.order.CancelOrderDTO; import com.xxfc.platform.order.pojo.order.CancelOrderDTO;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.order.UnitPriceDTO;
import com.xxfc.platform.order.pojo.pay.RentVehicleOrderPayVO; import com.xxfc.platform.order.pojo.pay.RentVehicleOrderPayVO;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.constant.enumerate.PayChannelEnum; import com.xxfc.platform.universal.constant.enumerate.PayChannelEnum;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderPayVo; import com.xxfc.platform.universal.vo.OrderPayVo;
import com.xxfc.platform.vehicle.common.RestResponse; import com.xxfc.platform.vehicle.common.RestResponse;
...@@ -47,8 +50,11 @@ import java.math.BigDecimal; ...@@ -47,8 +50,11 @@ import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Controller @Controller
@RequestMapping("baseOrder") @RequestMapping("baseOrder")
@Api(value = "订单", tags = {"订单"}) @Api(value = "订单", tags = {"订单"})
...@@ -83,6 +89,18 @@ public class BaseOrderController extends CommonBaseController { ...@@ -83,6 +89,18 @@ public class BaseOrderController extends CommonBaseController {
String qrcodePrefix = "fcwx://order"; String qrcodePrefix = "fcwx://order";
String notifyUrl = "/baseOrder/app/unauth/notifyUrl"; String notifyUrl = "/baseOrder/app/unauth/notifyUrl";
@RequestMapping(value = "/app/unauth/getOrderUnitPrice", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "获取订单相关的单价")
@IgnoreClientToken
@IgnoreUserToken
public ObjectRestResponse<UnitPriceDTO> getOrderUnitPrice() {
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
return ObjectRestResponse.succ(new UnitPriceDTO(){{
setInsurePrice(new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.INSURE_PRICE).getDetail()));
}});
}
@RequestMapping(value = "/page", method = RequestMethod.GET) @RequestMapping(value = "/page", method = RequestMethod.GET)
@ResponseBody @ResponseBody
@ApiOperation(value = "订单列表") @ApiOperation(value = "订单列表")
...@@ -333,6 +351,13 @@ public class BaseOrderController extends CommonBaseController { ...@@ -333,6 +351,13 @@ public class BaseOrderController extends CommonBaseController {
"6--已完成") "6--已完成")
private Integer status; private Integer status;
private String multiStatus;
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
@ApiModelProperty(value = "订单类型 1--租车;2--旅游; 3--会员订单")
private Integer type;
} }
/** /**
......
...@@ -26,6 +26,8 @@ import org.springframework.stereotype.Controller; ...@@ -26,6 +26,8 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
import javax.persistence.Column;
@Controller @Controller
@RequestMapping("orderRentVehicle") @RequestMapping("orderRentVehicle")
@Api(value="租车订单",tags={"租车订单"}) @Api(value="租车订单",tags={"租车订单"})
...@@ -65,15 +67,19 @@ public class OrderRentVehicleController extends CommonBaseController { ...@@ -65,15 +67,19 @@ public class OrderRentVehicleController extends CommonBaseController {
return ObjectRestResponse.succ(orderRentVehicleBiz.listByOrderId(orderId)); return ObjectRestResponse.succ(orderRentVehicleBiz.listByOrderId(orderId));
} }
@RequestMapping(value = "/app/unauth/calculate-price",method = RequestMethod.GET) @RequestMapping(value = "/calculate-price",method = RequestMethod.GET)
@ResponseBody @ResponseBody
@ApiOperation(value = "价格计算") @ApiOperation(value = "价格计算")
@IgnoreUserToken
public ObjectRestResponse<RentVehiclePriceVO> calculatePrice(CalculatePriceVO vo){ public ObjectRestResponse<RentVehiclePriceVO> calculatePrice(CalculatePriceVO vo){
RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class); RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class);
if(StrUtil.isNotBlank(BaseContextHandler.getToken())) { if(StrUtil.isNotBlank(BaseContextHandler.getToken())) {
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData()); bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
} }
bo.setOrder(new BaseOrder(){{
setHasMemberRight(vo.getHasMemberRight());
}});
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
orderRentVehicleService.initDetailSecond(bo);
return ObjectRestResponse.succ(orderRentVehicleService.calculatePrice(bo)); return ObjectRestResponse.succ(orderRentVehicleService.calculatePrice(bo));
} }
...@@ -100,5 +106,16 @@ public class OrderRentVehicleController extends CommonBaseController { ...@@ -100,5 +106,16 @@ public class OrderRentVehicleController extends CommonBaseController {
@ApiModelProperty(value = "是否购买免赔 1--是") @ApiModelProperty(value = "是否购买免赔 1--是")
private Integer damageSafe; private Integer damageSafe;
/**
* 是否有使用会员权益
*/
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
/**
* 是否使用出租免费天数
*/
@ApiModelProperty(value = "是否使用出租免费天数")
private Integer rentFreeDay;
} }
} }
\ No newline at end of file
...@@ -13,10 +13,12 @@ import com.xxfc.platform.order.entity.BaseOrder; ...@@ -13,10 +13,12 @@ import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.mqhandler.RabbitProduct; import com.xxfc.platform.order.mqhandler.RabbitProduct;
import com.xxfc.platform.order.pojo.price.OrderPriceVO; import com.xxfc.platform.order.pojo.price.OrderPriceVO;
import com.xxfc.platform.universal.entity.Dictionary;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Map;
@Transactional @Transactional
public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends OrderDetail>{ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends OrderDetail>{
...@@ -26,6 +28,8 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -26,6 +28,8 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
@Autowired @Autowired
protected Biz detailBiz; protected Biz detailBiz;
protected Map<String, Dictionary> dictionaryMap;
@Autowired @Autowired
RabbitProduct rabbitProduct; RabbitProduct rabbitProduct;
......
...@@ -24,6 +24,7 @@ import javax.annotation.PostConstruct; ...@@ -24,6 +24,7 @@ import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
@Service @Service
@Log4j @Log4j
...@@ -69,8 +70,8 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -69,8 +70,8 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
super.initDetail(bo); super.initDetail(bo);
BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel()); BaseUserMemberLevel buml = userFeign.level(bo.getMemberLevel());
if(!bo.getMemberLevelId().equals(buml.getId())) { if(!bo.getMemberLevelId().equals(buml.getId())) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashMap<String, Object>(){{ throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>(){{
put("MemberLevelId 和 MemberLevel", "不对称"); add("MemberLevelId 和 MemberLevel不对称");
}}); }});
} }
bo.setBaseUserMemberLevel(buml); bo.setBaseUserMemberLevel(buml);
......
...@@ -20,7 +20,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; ...@@ -20,7 +20,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderTemplate; import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.order.RentVehicleBO; import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.universal.entity.Dictionary; import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.entity.VehicleBookRecord; import com.xxfc.platform.vehicle.entity.VehicleBookRecord;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
...@@ -33,8 +33,11 @@ import org.springframework.stereotype.Service; ...@@ -33,8 +33,11 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import static com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum.*; import static com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service @Service
@Log4j @Log4j
...@@ -47,6 +50,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -47,6 +50,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
private static Integer DISCOUNT_STATUS_NONE = 0; private static Integer DISCOUNT_STATUS_NONE = 0;
private static Integer DISCOUNT_STATUS_MEMBER = 1; private static Integer DISCOUNT_STATUS_MEMBER = 1;
private static Integer DISCOUNT_STATUS_FIXED = 2; private static Integer DISCOUNT_STATUS_FIXED = 2;
private static Long autoCancelTime;
@Autowired @Autowired
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
...@@ -72,23 +76,21 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -72,23 +76,21 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
@Override @Override
public void initDetail(RentVehicleBO bo) { public void initDetail(RentVehicleBO bo) {
super.initDetail(bo); super.initDetail(bo);
initDetailSecond(bo);
}
public void initDetailSecond(RentVehicleBO bo) {
initDictionary(); initDictionary();
VehicleModel vehicleModel = vehicleFeign.get(bo.getModelId()).getData(); VehicleModel vehicleModel = vehicleFeign.get(bo.getModelId()).getData();
bo.setVehicleModel(vehicleModel); bo.setVehicleModel(vehicleModel);
} }
private void initDictionary() { public void initDictionary() {
Dictionary driverPriceDic = thirdFeign.dictionaryGet(BeanUtil.beanToMap(new Dictionary(){{ dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
setType("APP_ORDER"); this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_RENT).getDetail());
setCode("DRIVER_PRICE"); this.DRIVER_PRICE = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DRIVER_PRICE).getDetail());
}}, false, true)).getData().get(0); this.DAMAGE_SAFE = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DAMAGE_SAFE).getDetail());
Dictionary damageSafeDic = thirdFeign.dictionaryGet(BeanUtil.beanToMap(new Dictionary(){{
setType("APP_ORDER");
setCode("DAMAGE_SAFE");
}}, false, true)).getData().get(0);
this.DRIVER_PRICE = new BigDecimal(driverPriceDic.getDetail());
this.DAMAGE_SAFE = new BigDecimal(damageSafeDic.getDetail());
} }
@Override @Override
...@@ -112,9 +114,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -112,9 +114,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
super.handleDetail(bo); super.handleDetail(bo);
//发送定时取消订单(30分钟) //发送定时取消订单(数据字典设置--5分钟)
//rabbitProduct.sendDelayMessage(bo.getOrder(), 1000L * 60 * 30); rabbitProduct.sendDelayMessage(bo.getOrder(), autoCancelTime);
rabbitProduct.sendDelayMessage(bo.getOrder(), 1000L * 60 * 5);
} }
@Override @Override
...@@ -134,13 +135,16 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -134,13 +135,16 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal modelAmount = BigDecimal.ZERO; BigDecimal modelAmount = BigDecimal.ZERO;
Integer vehicleDayNum = 0; Integer vehicleDayNum = 0;
Integer freeDayNum = 0; Integer freeDayNum = 0;
//当前用户 //当前用户
AppUserDTO dto = detail.getAppUserDTO(); AppUserDTO dto = detail.getAppUserDTO();
//如果用户存在,并且为会员,并且车辆有优惠价 //如果用户存在,并且为会员,并且车辆有优惠价
if(null != dto && null != detail.getRentFreeDay() && detail.getRentFreeDay() > 0 ) { if(null != dto && null != detail.getRentFreeDay() && detail.getRentFreeDay() > 0 ) {
if(dto.getRentFreeDays() <= 0) { if(null == dto.getRentFreeDays() || dto.getRentFreeDays() <= 0) {
throw new BaseException(ResultCode.PARAM_EXPIRE_CODE); throw new BaseException(ResultCode.PARAM_EXPIRE_CODE, new HashSet<String>() {{
add("免费租车天数不存在或为0");
}});
} }
if(detail.getDayNum() > dto.getRentFreeDays()) { if(detail.getDayNum() > dto.getRentFreeDays()) {
freeDayNum = dto.getRentFreeDays(); freeDayNum = dto.getRentFreeDays();
...@@ -148,6 +152,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -148,6 +152,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
freeDayNum = detail.getDayNum(); freeDayNum = detail.getDayNum();
} }
vehicleDayNum = detail.getDayNum() - freeDayNum; vehicleDayNum = detail.getDayNum() - freeDayNum;
detail.getOrder().setHasMemberRight(SYS_TRUE);
}else { }else {
vehicleDayNum = detail.getDayNum(); vehicleDayNum = detail.getDayNum();
} }
...@@ -166,18 +171,30 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -166,18 +171,30 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
switch (MemberEnum.getByCode(detail.getAppUserDTO().getMemberLevel())) { switch (MemberEnum.getByCode(detail.getAppUserDTO().getMemberLevel())) {
case NORMAL: case NORMAL:
modelAmount = handleDiscount(vehicleModel, prices, NORMAL); modelAmount = handleDiscount(vehicleModel, prices, NORMAL);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
case GOLD: case GOLD:
modelAmount = handleDiscount(vehicleModel, prices, GOLD); modelAmount = handleDiscount(vehicleModel, prices, GOLD);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
case DIAMOND: case DIAMOND:
modelAmount = handleDiscount(vehicleModel, prices, DIAMOND); modelAmount = handleDiscount(vehicleModel, prices, DIAMOND);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
} }
}else { }else {
modelAmount = vehicleModel.getPrice(); modelAmount = vehicleModel.getPrice();
} }
vehicleAmount = vehicleAmount.add(modelAmount.multiply(BigDecimal.valueOf(vehicleDayNum))); vehicleAmount = vehicleAmount.add(modelAmount.multiply(BigDecimal.valueOf(vehicleDayNum)));
//优惠券处理
//待完成
//如果有使用会员权益或者优惠券,则设置订单已优惠
if(SYS_TRUE.equals(detail.getOrder().getHasMemberRight())) {
detail.getOrder().setHasDiscount(SYS_TRUE);
}
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) { if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
//计算司机费用 //计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum()))); driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
...@@ -194,25 +211,26 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -194,25 +211,26 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
orderAmount = orderAmount.add(goodsAmount).add(vehicleModel.getDeposit()); orderAmount = orderAmount.add(goodsAmount).add(vehicleModel.getDeposit());
//生成订单明细 //生成订单明细
RentVehiclePriceVO rvp = new RentVehiclePriceVO(); RentVehiclePriceVO rvp = new RentVehiclePriceVO(){{
rvp.setOrderAmount(orderAmount); setOrderAmount(orderAmount);
rvp.setGoodsAmount(goodsAmount); setGoodsAmount(goodsAmount);
setRealAmount(orderAmount);
setDeposit(vehicleModel.getDeposit());
setDriverPrice(DRIVER_PRICE);
setDamageSafePrice(DAMAGE_SAFE);
setModelName(vehicleModel.getName());
setDayNum(detail.getDayNum());
setVehicleNum(1);
setDriverNum(1);
}};
rvp.setDriverAmount(driverAmount); rvp.setDriverAmount(driverAmount);
rvp.setVehicleAmount(vehicleAmount); rvp.setVehicleAmount(vehicleAmount);
rvp.setDamageSafeAmount(damageSafeAmount); rvp.setDamageSafeAmount(damageSafeAmount);
rvp.setRealAmount(orderAmount);
rvp.setDeposit(vehicleModel.getDeposit());
rvp.setModelAmount(modelAmount); rvp.setModelAmount(modelAmount);
rvp.setDriverPrice(DRIVER_PRICE);
rvp.setDamageSafePrice(DAMAGE_SAFE);
rvp.setModelName(vehicleModel.getName());
rvp.setDayNum(detail.getDayNum());
rvp.setVehicleDayNum(vehicleDayNum); rvp.setVehicleDayNum(vehicleDayNum);
rvp.setVehicleNum(1);
rvp.setDriverNum(1);
//设置收费明细 //设置收费明细
costDetail(rvp, handlechildren(detail, vehicleDayNum)); costDetail(rvp, handleChildren(detail, vehicleDayNum));
return rvp; return rvp;
} }
...@@ -234,7 +252,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -234,7 +252,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
return modelAmount; return modelAmount;
} }
private String handlechildren(RentVehicleBO detail, Integer vehicleDayNum) { private String handleChildren(RentVehicleBO detail, Integer vehicleDayNum) {
StringBuffer childrenStr = new StringBuffer(""); StringBuffer childrenStr = new StringBuffer("");
if(vehicleDayNum > 0) { if(vehicleDayNum > 0) {
childrenStr.append(",${tem_0101}"); childrenStr.append(",${tem_0101}");
......
...@@ -6,7 +6,9 @@ import cn.hutool.core.util.StrUtil; ...@@ -6,7 +6,9 @@ import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign; 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.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderTemplateBiz; import com.xxfc.platform.order.biz.OrderTemplateBiz;
import com.xxfc.platform.order.biz.OrderTourDetailBiz; import com.xxfc.platform.order.biz.OrderTourDetailBiz;
...@@ -22,6 +24,8 @@ import com.xxfc.platform.tour.entity.TourGoodVerification; ...@@ -22,6 +24,8 @@ import com.xxfc.platform.tour.entity.TourGoodVerification;
import com.xxfc.platform.tour.entity.TourUser; import com.xxfc.platform.tour.entity.TourUser;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.tour.vo.TourSpePriceVo; import com.xxfc.platform.tour.vo.TourSpePriceVo;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.entity.SysRegion; import com.xxfc.platform.vehicle.entity.SysRegion;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail; import com.xxfc.platform.vehicle.pojo.CompanyDetail;
...@@ -34,11 +38,12 @@ import javax.servlet.http.HttpServletRequest; ...@@ -34,11 +38,12 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service @Service
@Log4j @Log4j
...@@ -49,13 +54,13 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -49,13 +54,13 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
@Autowired @Autowired
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
private static Integer IS_CHILD = 1; private static Integer IS_CHILD = 1;
private static Integer LEVEL_DEFAULT = 0; private static Integer LEVEL_DEFAULT = 0;
private static Integer NUMBER_ZERO = 0; private static Integer NUMBER_ZERO = 0;
private static BigDecimal INSURE_PRICE = new BigDecimal("5.00"); //保险 private static BigDecimal INSURE_PRICE;
private static Long autoCancelTime;
//= new BigDecimal("5.00"); //保险
@Autowired @Autowired
OrderCostDetailBiz orderCostDetailBiz; OrderCostDetailBiz orderCostDetailBiz;
...@@ -69,6 +74,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -69,6 +74,9 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired @Autowired
public HttpServletRequest request; public HttpServletRequest request;
...@@ -84,11 +92,18 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -84,11 +92,18 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
@Override @Override
public void initDetail(TourBO bo) { public void initDetail(TourBO bo) {
super.initDetail(bo); super.initDetail(bo);
initDictionary();
TourGood tourGood = tourFeign.usableGet(bo.getGoodId()).getData(); TourGood tourGood = tourFeign.usableGet(bo.getGoodId()).getData();
bo.setTourGood(tourGood); bo.setTourGood(tourGood);
bo.setAppUserDTO(getUserInfo()); bo.setAppUserDTO(getUserInfo());
} }
public void initDictionary() {
dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
this.INSURE_PRICE = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.INSURE_PRICE).getDetail());
this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_TOUR).getDetail());
}
@Override @Override
public void handleDetail(TourBO bo) { public void handleDetail(TourBO bo) {
//设置订单状态为3 //设置订单状态为3
...@@ -117,7 +132,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -117,7 +132,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
super.handleDetail(bo); super.handleDetail(bo);
//发送定时取消订单(30分钟) //发送定时取消订单(30分钟)
rabbitProduct.sendDelayMessage(bo.getOrder(), 1000L * 60 * 30); rabbitProduct.sendDelayMessage(bo.getOrder(), autoCancelTime);
} }
@Override @Override
...@@ -156,6 +171,10 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -156,6 +171,10 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
detail.setTotalNumber(detail.getAdultNum() + detail.getChildNum()); detail.setTotalNumber(detail.getAdultNum() + detail.getChildNum());
} }
if(detail.getAdultNum() <= 0) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>(){{add("最少一个成人");}});
}
//计算旅游价格 //计算旅游价格
ObjectRestResponse<TourSpePriceVo> objectRestResponse = tourFeign.refund(new TourSpePriceDTO(){{ ObjectRestResponse<TourSpePriceVo> objectRestResponse = tourFeign.refund(new TourSpePriceDTO(){{
setChildNumber(detail.getChildNum()); setChildNumber(detail.getChildNum());
...@@ -172,7 +191,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -172,7 +191,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
insureAmount = insureAmount.add(INSURE_PRICE.multiply(new BigDecimal(String.valueOf(detail.getTotalNumber() * detail.getTourGood().getNumber())))); insureAmount = insureAmount.add(INSURE_PRICE.multiply(new BigDecimal(String.valueOf(detail.getTotalNumber() * detail.getTourGood().getNumber()))));
} }
//总价 //总价
tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getChildPrice()); tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getTotalChildPrice());
//商品价格 //商品价格
goodsAmount = goodsAmount.add(tourAmount); goodsAmount = goodsAmount.add(tourAmount);
//总价格 //总价格
...@@ -193,11 +212,11 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -193,11 +212,11 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
tpv.setTotalNumber(detail.getTotalNumber()); tpv.setTotalNumber(detail.getTotalNumber());
//设置收费明细 //设置收费明细
costDetail(tpv, handlechildren(detail)); costDetail(tpv, handleChildren(detail));
return tpv; return tpv;
} }
private String handlechildren(TourBO detail) { private String handleChildren(TourBO detail) {
StringBuffer childrenStr = new StringBuffer(""); StringBuffer childrenStr = new StringBuffer("");
if(NUMBER_ZERO < detail.getAdultNum()) { if(NUMBER_ZERO < detail.getAdultNum()) {
childrenStr.append(",${tem_0201}"); childrenStr.append(",${tem_0201}");
......
...@@ -56,6 +56,20 @@ ...@@ -56,6 +56,20 @@
<if test="no != null"> <if test="no != null">
and no = #{no} and no = #{no}
</if> </if>
<if test="type != null">
and type = #{type}
</if>
<if test="hasMemberRight != null">
and has_member_right = #{hasMemberRight}
</if>
<if test="multiStatus != null">
and
(
<foreach collection="multiStatus.split(',')" index="sIndex" item="statusEntity" separator=" or ">
status = #{statusEntity}
</foreach>
)
</if>
</where> </where>
order by crt_time desc order by crt_time desc
</select> </select>
......
...@@ -83,8 +83,8 @@ public interface TourFeign { ...@@ -83,8 +83,8 @@ public interface TourFeign {
* @param tourGoodOrderFindVo * @param tourGoodOrderFindVo
* @return * @return
*/ */
@GetMapping("/tourGood/verfication/orders") @RequestMapping(value = "/tourGood/verfication/orders", method = RequestMethod.POST)
PageDataVO<TourGoodOrderVo> findTourGoodOrders(@RequestParam("tourGoodOrderFindVo") Map<String,Object> tourGoodOrderFindVo); PageDataVO<TourGoodOrderVo> findTourGoodOrders(@RequestBody TourGoodOrderFindVo tourGoodOrderFindVo);
@ApiOperation("首页旅游列表") @ApiOperation("首页旅游列表")
@GetMapping(value = "/tourGood/app/shopList") @GetMapping(value = "/tourGood/app/shopList")
......
...@@ -66,7 +66,13 @@ public class TourGoodBiz extends BaseBiz<TourGoodMapper, TourGood> { ...@@ -66,7 +66,13 @@ public class TourGoodBiz extends BaseBiz<TourGoodMapper, TourGood> {
*/ */
public ObjectRestResponse<TourGood> getGoodList(int page, int limit , String query , Double latitude, Double longitude, Integer tagId, Double distance){ public ObjectRestResponse<TourGood> getGoodList(int page, int limit , String query , Double latitude, Double longitude, Integer tagId, Double distance){
Map<String, Object> params = initParam(page, limit, query, latitude, longitude, tagId, distance); Map<String, Object> params = initParam(page, limit, query, latitude, longitude, tagId, distance);
return new ObjectRestResponse().status(RestCode.SUCCESS.getStatus()).msg(RestCode.SUCCESS.getMsg()).data(PageDataVO.pageInfo(page, limit, () -> mapper.getGoodList(params))); PageDataVO<TourGood> dataVO=null;
if(latitude!=null&&latitude>0&&longitude!=null&&longitude>0){
dataVO=PageDataVO.pageInfo(page, limit, ()->mapper.getCoordinateList(params));
}else {
dataVO=PageDataVO.pageInfo(page, limit, ()->mapper.getGoodList(params));
}
return new ObjectRestResponse().status(RestCode.SUCCESS.getStatus()).msg(RestCode.SUCCESS.getMsg()).data(dataVO);
} }
private Map<String, Object> initParam(int page, int limit, String query, Double latitude, Double longitude, Integer tagId, Double distance) { private Map<String, Object> initParam(int page, int limit, String query, Double latitude, Double longitude, Integer tagId, Double distance) {
......
...@@ -75,6 +75,9 @@ public class TourGoodDetailBiz extends BaseBiz<TourGoodMapper, TourGood> { ...@@ -75,6 +75,9 @@ public class TourGoodDetailBiz extends BaseBiz<TourGoodMapper, TourGood> {
} }
} }
//获取banner
List<GoodBannerDTO> bannerList = bannerMapper.getBannerList(id);
detailVo.setBannerDTOS(bannerList);
//获取出行时间 //获取出行时间
List<TourDepartTimeVo> timelist = priceMapper.getAllByGoodId(id); List<TourDepartTimeVo> timelist = priceMapper.getAllByGoodId(id);
detailVo.setTourDepartTimeVo(timelist); detailVo.setTourDepartTimeVo(timelist);
......
...@@ -23,6 +23,8 @@ public interface TourGoodMapper extends Mapper<TourGood> { ...@@ -23,6 +23,8 @@ public interface TourGoodMapper extends Mapper<TourGood> {
//查询旅游路线列表 //查询旅游路线列表
public List<TourGood> getGoodList(@Param("params") Map<String,Object> map); public List<TourGood> getGoodList(@Param("params") Map<String,Object> map);
//根据经纬度查询旅游路线列表
public List<TourGood> getCoordinateList(@Param("params") Map<String,Object> map);
//获取商品列表 //获取商品列表
public List<TourGoodVo> findGoodList(@Param("params") GoodSearchDTO tourGoodDTO); public List<TourGoodVo> findGoodList(@Param("params") GoodSearchDTO tourGoodDTO);
......
...@@ -36,7 +36,7 @@ public class TourGoodController extends BaseController<TourGoodBiz, TourGood> { ...@@ -36,7 +36,7 @@ public class TourGoodController extends BaseController<TourGoodBiz, TourGood> {
public ObjectRestResponse<TourGood> getGoodList(@RequestParam(value = "page", required = true) Integer page, @RequestParam(value = "limit", required = true) Integer limit, public ObjectRestResponse<TourGood> getGoodList(@RequestParam(value = "page", required = true) Integer page, @RequestParam(value = "limit", required = true) Integer limit,
@RequestParam(value = "query", required = false) String query, @RequestParam(value = "latitude", required = false) Double latitude, @RequestParam(value = "query", required = false) String query, @RequestParam(value = "latitude", required = false) Double latitude,
@RequestParam(value = "longitude", required = false) Double longitude, @RequestParam(value = "tagId", required = false) Integer tagId, @RequestParam(value = "longitude", required = false) Double longitude, @RequestParam(value = "tagId", required = false) Integer tagId,
@RequestParam(value = "distance", defaultValue = "10.00") Double distance) { @RequestParam(value = "distance", defaultValue = "100.00") Double distance) {
return baseBiz.getGoodList(page, limit, query, latitude, longitude, tagId, distance); return baseBiz.getGoodList(page, limit, query, latitude, longitude, tagId, distance);
} }
......
...@@ -21,8 +21,8 @@ public class TourGoodVerificationController extends BaseController<TourGoodVerif ...@@ -21,8 +21,8 @@ public class TourGoodVerificationController extends BaseController<TourGoodVerif
* @return * @return
*/ */
@ApiOperation("订单列表的查询") @ApiOperation("订单列表的查询")
@GetMapping("/orders") @RequestMapping(value = "/orders", method = RequestMethod.POST)
public PageDataVO<TourGoodOrderVo> findTourGoodOrders( TourGoodOrderFindVo tourGoodOrderFindVo){ public PageDataVO<TourGoodOrderVo> findTourGoodOrders( @RequestBody TourGoodOrderFindVo tourGoodOrderFindVo){
PageDataVO<TourGoodOrderVo> tourGoodOrderPageDataVo = getBaseBiz().findTourGoodOrdersPage(tourGoodOrderFindVo); PageDataVO<TourGoodOrderVo> tourGoodOrderPageDataVo = getBaseBiz().findTourGoodOrdersPage(tourGoodOrderFindVo);
return tourGoodOrderPageDataVo; return tourGoodOrderPageDataVo;
} }
......
...@@ -51,6 +51,21 @@ ...@@ -51,6 +51,21 @@
<result property="isOutside" column="is_outside"/> <result property="isOutside" column="is_outside"/>
</resultMap> </resultMap>
<!--查询旅游路线列表-->
<select id="getCoordinateList" parameterType="java.util.Map" resultMap="tourGoodMap">
SELECT t.* from tour_good t
left join (
select good_id,
IFNULL(ROUND(( (2 * ASIN( SQRT( POW( SIN((latitude * PI() / 180.0- #{params.latitude}* PI() / 180.0)/2), 2)+COS( latitude * PI() / 180.0)*COS( #{params.longitude} * PI() / 180.0)
*POW(SIN((longitude * PI() / 180.0 - #{params.longitude}* PI() /180.0)/2),2))))*6378.137)*10000)/10000 ,0 ) AS distance
FROM tour_good_site WHERE type=2 ) gs ON t.id=gs.good_id
where t.is_del=0 AND t.status=1 and gs.distance &lt; #{params.distance}
<if test="params.query != null and params.query != ''">
and (t.`name` like CONCAT('%',#{params.query},'%') or t.introduce like CONCAT('%',#{params.query},'%'))
</if>
order by gs.distance
</select>
<!--查询旅游路线列表--> <!--查询旅游路线列表-->
<select id="getGoodList" parameterType="java.util.Map" resultMap="tourGoodMap"> <select id="getGoodList" parameterType="java.util.Map" resultMap="tourGoodMap">
SELECT * from tour_good t SELECT * from tour_good t
...@@ -58,22 +73,11 @@ ...@@ -58,22 +73,11 @@
<if test="params.query != null and params.query != ''"> <if test="params.query != null and params.query != ''">
and (t.`name` like CONCAT('%',#{params.query},'%') or t.introduce like CONCAT('%',#{params.query},'%')) and (t.`name` like CONCAT('%',#{params.query},'%') or t.introduce like CONCAT('%',#{params.query},'%'))
</if> </if>
<if test="params.latitude != null and params.latitude != '' and params.longitude != null and params.longitude != ''"> <if test="params.tagId != null and params.tagId != '' ">
and t.id in (SELECT s.good_id from ( and t.id in (SELECT tg.good_id from tour_good_tag tg
select good_id, where tg.tag_id = #{params.tagId}) and t.recommend = 1
if(ROUND(( (2 * ASIN( SQRT( POW( SIN((latitude * PI() / 180.0- #{params.latitude}* PI() / 180.0)/2), 2)+COS( latitude * PI() / 180.0)*COS( #{params.longitude} * PI() / 180.0) ORDER BY t.recommend
*POW(SIN((longitude * PI() / 180.0 - #{params.longitude}* PI() /180.0)/2),2))))*6378.137)*10000)/10000 is null ,0,ROUND(( (2 * ASIN( SQRT( POW( SIN((latitude * PI() / 180.0- #{params.latitude}* PI() / 180.0)/2), 2)+COS( latitude * PI() / 180.0)*COS(#{params.longitude} * PI() / 180.0) </if>
*POW(SIN((longitude * PI() / 180.0 - #{params.longitude}* PI() /180.0)/2),2))))*6378.137)*10000)/10000 ) AS distance
FROM tour_good_site
order by distance
) s
where s.distance &lt; #{params.distance})
</if>
<if test="params.tagId != null and params.tagId != '' ">
and t.id in (SELECT tg.good_id from tour_good_tag tg
where tg.tag_id = #{params.tagId}) and t.recommend = 1
ORDER BY t.recommend
</if>
</select> </select>
......
package com.xxfc.platform.universal.constant;
public class DictionaryKey {
/**
* 订单类型
*/
public static final String APP_ORDER ="APP_ORDER";
/**
* 租车,旅游退款
*/
public static final String RENT_REFUND ="RENT_REFUND";
public static final String TOUR_REFUND ="TOUR_REFUND";
/**
* 租车:公司司机租金、免赔费用、违章预备金
*/
public static final String DRIVER_PRICE ="DRIVER_PRICE";
public static final String DAMAGE_SAFE ="DAMAGE_SAFE";
public static final String ILLEGAL_RESERVE = "ILLEGAL_RESERVE";
/**
* 旅游:保险费用
*/
public static final String INSURE_PRICE ="INSURE_PRICE";
/**
* 自动取消订单时间:租车、旅游
*/
public static final String ACT_RENT = "ACT_RENT";
public static final String ACT_TOUR = "ACT_TOUR";
}
package com.xxfc.platform.vehicle.constant; package com.xxfc.platform.universal.constant;
public class RedisKey { public class RedisKey {
/** /**
......
package com.xxfc.platform.universal.constant;
import java.util.HashMap;
import java.util.Map;
public enum RegionType {
COUNTRY(-1,"国家"),//这一类型不存在db中,只是用于查询所有国家
REGION(0,"地区"),
PROVINCE(1,"省/直辖市"),
CITY(2,"市"),
PREFECTUR(3,"县"),
TOWN(4,"镇"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
//Maps.newHashMap();
static{
for(RegionType constantType : RegionType.values()){
codeAndDesc.put(constantType.getCode(),constantType.getDesc());
}
}
RegionType(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
package com.xxfc.platform.universal.constant;
public enum ResCode {
AUTH_FAIL(-1,"权限验证不通过"),
INVALID_REST_REQ_PARAM(100000,"rest请求参数非法");
/**
* 返回码
*/
private Integer code;
/**
* 描述
*/
private String desc;
ResCode(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.xxfc.platform.universal.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/7/3 17:51
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RegionDTO {
private Long id;
private Long parentId;
}
package com.xxfc.platform.universal.entity;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Tolerate;
@Data
@Builder(toBuilder = true)
public class SysRegion {
@Tolerate
public SysRegion() {
}
private Long id;
/**
* 所属父地区id
*/
private Long parentId;
private String name;
/**
* 地区类型 0-国家 1-省/直辖市 2-市 3 - 镇、县
*/
private Integer type;
/**
* 从左往右,第1,2位代表省代码,3、4为代表市代码,5-6位代表镇或县代码
*/
private Integer agencyId;
}
package com.xxfc.platform.universal.feign;
import com.xxfc.platform.universal.dto.RegionDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author libin
* @version 1.0
* @description 区域码 接口
* @data 2019/7/3 20:00
*/
@FeignClient(value = "xx-universal",contextId = "region")
public interface RegionFeign {
/**
* 根据城市名查询
* @param city
* @return
*/
@GetMapping("/sysRegion/region_name")
RegionDTO getRegionByCityName(@RequestParam(value = "city") String city);
}
...@@ -2,11 +2,10 @@ package com.xxfc.platform.universal.feign; ...@@ -2,11 +2,10 @@ package com.xxfc.platform.universal.feign;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.entity.Dictionary; import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.entity.OrderRefund; import com.xxfc.platform.universal.entity.OrderRefund;
import com.xxfc.platform.universal.vo.OrderPayVo; import com.xxfc.platform.universal.vo.*;
import com.xxfc.platform.universal.vo.OrderRefundVo;
import com.xxfc.platform.universal.vo.TrafficViolations;
import feign.Param; import feign.Param;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
...@@ -27,8 +26,11 @@ import java.util.Map; ...@@ -27,8 +26,11 @@ import java.util.Map;
public interface ThirdFeign { public interface ThirdFeign {
@RequestMapping(value = "/sms/app/unauth/send", method = RequestMethod.GET) @RequestMapping(value = "/sms/app/unauth/send", method = RequestMethod.GET)
public JSONObject send(@RequestParam(value = "phone") String phone); public JSONObject send(@RequestParam(value = "phone") String phone);
@RequestMapping(value = "/sms/app/unauth/sendCode", method = RequestMethod.GET)
//发送短信模板消息
public JSONObject sendCode(@RequestParam("phone") String phone, @RequestParam("code")String code, @RequestParam("templateCode")String templateCode );
@RequestMapping(value = "/file/app/unauth/uploadFiles", method = RequestMethod.POST) @RequestMapping(value = "/file/app/unauth/uploadFiles", method = RequestMethod.POST)
public JSONObject uploadFiles(@RequestParam("files") MultipartFile[] files); public JSONObject uploadFiles(@RequestParam(value = "files") MultipartFile[] files);
@RequestMapping(value = "/pay/app/wx", method = RequestMethod.POST) @RequestMapping(value = "/pay/app/wx", method = RequestMethod.POST)
public JSONObject wx(@RequestBody OrderPayVo orderPayVo); public JSONObject wx(@RequestBody OrderPayVo orderPayVo);
@RequestMapping(value = "/refund/app/wx", method = RequestMethod.POST) @RequestMapping(value = "/refund/app/wx", method = RequestMethod.POST)
...@@ -61,9 +63,18 @@ public interface ThirdFeign { ...@@ -61,9 +63,18 @@ public interface ThirdFeign {
// @GetMapping(value = "/dictionary/getParents") // @GetMapping(value = "/dictionary/getParents")
@RequestMapping(value = "/dictionary/getParents", method = RequestMethod.GET) @RequestMapping(value = "/dictionary/getParents", method = RequestMethod.GET)
public ObjectRestResponse<List<Dictionary>> dictionaryGetParent(@RequestParam String type); public ObjectRestResponse<List<Dictionary>> dictionaryGetParent(@RequestParam(value = "type") String type);
// @GetMapping(value = "/dictionary/get") // @GetMapping(value = "/dictionary/get")
@RequestMapping(value = "/dictionary/get", method = RequestMethod.GET) @RequestMapping(value = "/dictionary/get", method = RequestMethod.GET)
public ObjectRestResponse<List<Dictionary>> dictionaryGet(@RequestParam Map<String, Object> dictionary); public ObjectRestResponse<List<Dictionary>> dictionaryGet(@RequestParam(value = "dictionary") Map<String, Object> dictionary);
@RequestMapping(value = "/dictionary/getAll4Map", method = RequestMethod.GET)
public ObjectRestResponse<Map<String, Dictionary>> dictionaryGetAll4Map();
/***************************************** 违章 ********************************************/
@GetMapping("/3p/tv/getRentViolation")
public ObjectRestResponse<List<ViolationVO>> getRentViolation(@RequestParam(value = "rentViolationDTO") Map<String, Object> rentViolationDTO);
} }
package com.xxfc.platform.universal.msg;
public class CustomIllegalParamException extends RuntimeException {
public CustomIllegalParamException(String msg){
super(msg);
}
}
package com.xxfc.platform.universal.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RentViolationDTO {
String vehicleId;
Long startTime;
Long endTime;
}
package com.xxfc.platform.universal.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ViolationVO {
BigDecimal price;
}
...@@ -18,6 +18,12 @@ ...@@ -18,6 +18,12 @@
<version>2.0-SNAPSHOT</version> <version>2.0-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-vehicle-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>com.aliyun</groupId> <groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId> <artifactId>aliyun-java-sdk-core</artifactId>
......
...@@ -8,6 +8,7 @@ import org.springframework.boot.SpringApplication; ...@@ -8,6 +8,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication(scanBasePackages = { @SpringBootApplication(scanBasePackages = {
...@@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; ...@@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
}) })
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableAceAuthClient @EnableAceAuthClient
@EnableScheduling
@EnableAceCache @EnableAceCache
@EnableTransactionManagement @EnableTransactionManagement
@tk.mybatis.spring.annotation.MapperScan(basePackages = "com.xxfc.platform.universal.mapper") @tk.mybatis.spring.annotation.MapperScan(basePackages = "com.xxfc.platform.universal.mapper")
......
...@@ -12,10 +12,9 @@ import lombok.extern.slf4j.Slf4j; ...@@ -12,10 +12,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet; import java.util.function.Function;
import java.util.List; import java.util.stream.Collectors;
import java.util.Set;
@Service @Service
@Slf4j @Slf4j
...@@ -83,6 +82,11 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> { ...@@ -83,6 +82,11 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
if(StringUtils.isEmpty(type)) { if(StringUtils.isEmpty(type)) {
return ObjectRestResponse.paramIsEmpty(); return ObjectRestResponse.paramIsEmpty();
} }
List<Dictionary> dictionaryList = getParentCommon(type);
return ObjectRestResponse.succ(dictionaryList);
}
private List<Dictionary> getParentCommon(String type) {
Dictionary dictionary = new Dictionary(); Dictionary dictionary = new Dictionary();
dictionary.setType(type); dictionary.setType(type);
dictionary.setPid(0); dictionary.setPid(0);
...@@ -91,10 +95,19 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> { ...@@ -91,10 +95,19 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
Set<Dictionary> dictionaryVoList = buildTree(parent.getId()); Set<Dictionary> dictionaryVoList = buildTree(parent.getId());
parent.setChildrens(dictionaryVoList); parent.setChildrens(dictionaryVoList);
} }
return ObjectRestResponse.succ(dictionaryList); return dictionaryList;
} }
public Map<String, Dictionary> getAll4Map(){
// List<Dictionary> dictionaries = this.getParentCommon(null);
List<Dictionary> dictionaries = selectListAll();
Map<String, Dictionary> dictionaryMap = dictionaries.parallelStream().collect(Collectors.toMap(dic -> dic.getType()+ "_"+ dic.getCode()
, Function.identity(), (oldValue, newValue) -> newValue));
dictionaryMap.forEach((k,v) -> {
v.setChildrens(buildTree(v.getId()));
});
return dictionaryMap;
}
public DictionaryVo buidTree(Dictionary dictionary) { public DictionaryVo buidTree(Dictionary dictionary) {
DictionaryVo dictionaryVo = new DictionaryVo(); DictionaryVo dictionaryVo = new DictionaryVo();
......
package com.xxfc.platform.universal.biz;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.google.common.collect.Lists;
import com.xxfc.platform.universal.constant.RedisKey;
import com.xxfc.platform.universal.constant.RegionType;
import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.entity.SysRegion;
import com.xxfc.platform.universal.mapper.SysRegionMapper;
import com.xxfc.platform.universal.msg.CustomIllegalParamException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.util.List;
@Service
@Slf4j
public class SysRegionBiz extends BaseBiz<SysRegionMapper, SysRegion> {
@Autowired
private RedisTemplate customRedisTemplate;//todo redis需要改为多实例
@Autowired
@Qualifier(value = "applicationTaskExecutor")
private TaskExecutor customTaskExecutor;
/**
* 国家没有父地区,其parentId为0
*/
private static final Long PARENT_ID_NONE = 0l;
public List<SysRegion> getRegionsByCodes(List<Long> ids){
List<String> redisCacheKeys = Lists.newArrayList();
if(CollectionUtils.isEmpty(ids)){
throw new CustomIllegalParamException("empty id list");
}
for(Long id:ids){
redisCacheKeys.add(RedisKey.SYS_REGION_CACHE_PREFIX+id);
}
List<String> cachedRegionStrList = customRedisTemplate.opsForValue().multiGet(redisCacheKeys);
List<SysRegion> rs = Lists.newArrayList();
Boolean hasCache = Boolean.TRUE;
for(String cachedRegionStr:cachedRegionStrList){
if(StringUtils.isBlank(cachedRegionStr)){
hasCache = Boolean.FALSE;
continue;
}else{
rs.add(JSONObject.parseObject(cachedRegionStr,SysRegion.class));
}
}
if(!hasCache){//从db读
rs = mapper.getByIdList(ids);
}
return rs;
}
//获取相应地区类型对应在id的位数,作为对应parent查找其下地区的redis key组成部分
private String getPrefixOfAgencyId(Integer type,Long parentId){
return String.valueOf(parentId);
}
/**
* 获取对应redis中的hash的key
* @param parentId
* @return
*/
private String getCacheRedisKey(Long parentId){
//获取相应地区类型对应在agencyId的位数
return RedisKey.SYS_REGION_SONS_CACHE_PREFIX +parentId;
}
/**
* 查询对应地区之下的地区
* @param id
* @return
*/
public List<SysRegion> getSonRegion(Long id){
//从缓存中查询
String redisKey = getCacheRedisKey(id);
String sysRegionListJson = String.valueOf(customRedisTemplate.opsForValue().get(redisKey));
List<SysRegion> sysRegions = null;
if(StringUtils.isNotBlank(sysRegionListJson)){
sysRegions = JSONObject.parseArray(sysRegionListJson,SysRegion.class);
}
if(CollectionUtils.isNotEmpty(sysRegions)){
return sysRegions;
}
//不存在则异步开启刷新缓存任务
refreshCacheAsync();
//从db中查询
return getSonRegionNoCache(id);
}
public List<SysRegion> getSonRegionNoCache(Long parentId){
//从db中查询
SysRegion param = new SysRegion();
param.setParentId(parentId);
return mapper.select(param);
}
public void refreshCacheAsync(){
customTaskExecutor.execute(new Runnable() {
@Override
public void run() {
refreshCache();
}
});
}
/**
* 刷新其孩子节点到缓存,并对其孩子迭代执行此操作
* @param parentId
*/
private void refreshCacheRegionAndSon(Long parentId){
List<SysRegion> sonRegions = getSonRegionNoCache(parentId);
//把当前节点的子节点数据缓存
String redisKey = getCacheRedisKey(parentId);
customRedisTemplate.opsForValue().set(redisKey,JSON.toJSON(sonRegions).toString());
log.info("完成地区【"+parentId+"】的子地区数据缓存");
if(CollectionUtils.isEmpty(sonRegions) || sonRegions.get(0).getType().equals(RegionType.CITY.getCode())){
return;
}
for(SysRegion sonRegion:sonRegions){
//缓存每个地区
customRedisTemplate.opsForValue().set(RedisKey.SYS_REGION_CACHE_PREFIX+sonRegion.getId(),JSON.toJSON(sonRegion).toString());
refreshCacheRegionAndSon(sonRegion.getId());
}
}
/**
* 5分钟内刷新数据到缓存
*/
@Scheduled(cron = "0 */5 * * * *")//每5分钟刷新一次数据
public void refreshCache(){
String redisLockKey = RedisKey.SYS_REGION_REFRESH_LOCK +(DateTime.now().getMinuteOfDay()/5);//同一日每5分钟只刷新一次
Boolean suc = customRedisTemplate.opsForValue().setIfAbsent(redisLockKey, String.valueOf(DateTime.now().getMillis()));
if(!suc){
log.info("刷新地区数据:获取乐观锁失败,不执行任务");
return;
}
log.info("刷新地区数据任务开始");
refreshCacheRegionAndSon(PARENT_ID_NONE);
log.info("刷新常量数据任务成功");
}
/**
* 5分钟内刷新数据到缓存
*/
public List<SysRegion> selectCity(){
List<SysRegion> selectByWeekendSql = mapper.selectByExample(new Example.Builder(SysRegion.class)
.where(WeekendSqls.<SysRegion>custom().andLike(SysRegion::getId, "%00")
.andNotLike(SysRegion::getId, "%0000"))
.build());
return selectByWeekendSql;
}
/**
* 通过属性获取省
* @param type
* @return
*/
public List<SysRegion> getSysRegionByType(Integer type){
SysRegion sysRegion = new SysRegion();
sysRegion.setType(type);
return mapper.select(sysRegion);
}
public RegionDTO findRegionByCityName(String city) {
return mapper.findByCityName(city);
}
}
...@@ -6,6 +6,8 @@ import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler; ...@@ -6,6 +6,8 @@ import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
...@@ -51,4 +53,13 @@ public class WebConfiguration implements WebMvcConfigurer { ...@@ -51,4 +53,13 @@ public class WebConfiguration implements WebMvcConfigurer {
Collections.addAll(list, urls); Collections.addAll(list, urls);
return list; return list;
} }
/* @Bean(name = "customTaskExecutor")
TaskExecutor getTaskExecutor(){
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(5);// 线程池维护线程的最少数量
threadPoolTaskExecutor.setMaxPoolSize(10);// 线程池维护线程的最大数量
threadPoolTaskExecutor.setQueueCapacity(50);// 缓存队列
return threadPoolTaskExecutor;
}*/
} }
...@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map;
@RestController @RestController
@RequestMapping(value = "dictionary") @RequestMapping(value = "dictionary")
...@@ -47,4 +48,10 @@ public class DictionaryController { ...@@ -47,4 +48,10 @@ public class DictionaryController {
public ObjectRestResponse<List<Dictionary>> getParent(String type) { public ObjectRestResponse<List<Dictionary>> getParent(String type) {
return dictionaryBiz.getParent(type); return dictionaryBiz.getParent(type);
} }
@GetMapping(value = "/getAll4Map")
@ApiOperation(value = "获取所有的内容, key为 <type>_<code>")
public ObjectRestResponse<Map<String, Dictionary>> getAll4Map() {
return ObjectRestResponse.succ(dictionaryBiz.getAll4Map());
}
} }
...@@ -33,5 +33,12 @@ public class SmsController { ...@@ -33,5 +33,12 @@ public class SmsController {
public JSONObject sendSms(@RequestParam("phone") String phone) throws Exception { public JSONObject sendSms(@RequestParam("phone") String phone) throws Exception {
return smsService.smsCode(phone); return smsService.smsCode(phone);
} }
@RequestMapping(value = "/app/unauth/sendCode", method = RequestMethod.GET)
public JSONObject sendCode(
@RequestParam("phone") String phone,
@RequestParam("code")String code,
@RequestParam("templateCode")String templateCode ) throws Exception {
return smsService.smsByCode(phone,code,templateCode);
}
} }
package com.xxfc.platform.universal.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.universal.biz.SysRegionBiz;
import com.xxfc.platform.universal.constant.ResCode;
import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.entity.SysRegion;
import com.xxfc.platform.universal.msg.CustomIllegalParamException;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.util.Arrays;
import org.springframework.web.bind.annotation.*;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.util.List;
@RestController
@RequestMapping("/sysRegion")
@IgnoreClientToken
@Slf4j
public class SysRegionController extends BaseController<SysRegionBiz,SysRegion> {
/**
* 父类id获取子类对象
* @param id
* @return
*/
@IgnoreUserToken
@RequestMapping(value ="/sons/{id}",method = RequestMethod.GET)
public ObjectRestResponse<List<SysRegion>> getSonRegion(@PathVariable Long id){
return ObjectRestResponse.succ(baseBiz.getSonRegion(id));
}
/**
* 通过属性获取省
* @param type
* @return
*/
@IgnoreUserToken
@RequestMapping(value ="/getSonRegionByType/{type}",method = RequestMethod.GET)
public ObjectRestResponse<List<SysRegion>> getSysRegionByType(@PathVariable Integer type){
return ObjectRestResponse.succ(baseBiz.getSysRegionByType(type));
}
@RequestMapping(value ="",method = RequestMethod.GET)
public ObjectRestResponse<List<SysRegion>> getRegion(@RequestParam String idListJson){
try {
List<Long> ids = JSON.parseArray(idListJson,Long.class);
return ObjectRestResponse.succ(baseBiz.getRegionsByCodes(ids));
} catch (JSONException ex) {
return ObjectRestResponse.createFailedResultMsg(ResCode.INVALID_REST_REQ_PARAM.getCode());
} catch (CustomIllegalParamException ex){
return ObjectRestResponse.createFailedResultMsg(ResCode.INVALID_REST_REQ_PARAM.getCode());
}
}
/**
* 根据多个id查找省份
* @param ids
* @return
*/
@GetMapping("/getSysRegionByIds/{ids}")
public ObjectRestResponse getSysRegionByIds(@PathVariable String ids){
Example exam = Example.builder(SysRegion.class)
.where(WeekendSqls.<SysRegion>custom()
.andIn(SysRegion::getId, Arrays.asList(ids.split(",")))).build();
return ObjectRestResponse.succ( baseBiz.selectByExample(exam));
}
/**
* 通过城市名查询
* @param city
* @return
*/
@GetMapping("/region_name")
public RegionDTO getRegionByCityName(@RequestParam(value = "city") String city){
return baseBiz.findRegionByCityName(city);
}
}
...@@ -3,10 +3,16 @@ package com.xxfc.platform.universal.controller; ...@@ -3,10 +3,16 @@ package com.xxfc.platform.universal.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.universal.service.TrafficViolationsService; import com.xxfc.platform.universal.service.TrafficViolationsService;
import com.xxfc.platform.universal.vo.RentViolationDTO;
import com.xxfc.platform.universal.vo.TrafficViolations; import com.xxfc.platform.universal.vo.TrafficViolations;
import com.xxfc.platform.universal.vo.ViolationVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@RestController @RestController
@RequestMapping("3p/tv") @RequestMapping("3p/tv")
public class TrafficViolationsController { public class TrafficViolationsController {
...@@ -56,7 +62,13 @@ public class TrafficViolationsController { ...@@ -56,7 +62,13 @@ public class TrafficViolationsController {
} }
} }
@GetMapping("/getRentViolation")
public ObjectRestResponse<List<ViolationVO>> getRentViolation(RentViolationDTO rentViolationDTO) {
return ObjectRestResponse.succ(new ArrayList<ViolationVO>(){{
add(new ViolationVO(){{setPrice(new BigDecimal("100.00"));}});
add(new ViolationVO(){{setPrice(new BigDecimal("200.00"));}});
}});
}
} }
package com.xxfc.platform.universal.mapper;
import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.entity.SysRegion;
import org.springframework.data.repository.query.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
public interface SysRegionMapper extends Mapper<SysRegion> {
public List<SysRegion> getAllByPage(Map<String, Object> params);
public List<SysRegion> getByIdList(List<Long> idList);
//获取地区的编号
public Integer getNumber(@Param("name") String name);
//获取地区的编号
public Integer getNumberV2(@Param("name") String name, @Param("type") Integer type);
RegionDTO findByCityName(String city);
}
...@@ -57,6 +57,18 @@ public class SmsService { ...@@ -57,6 +57,18 @@ public class SmsService {
} }
} }
public JSONObject smsByCode(String mobile,String pwd,String templateCode){
try {
if(StringUtils.isNotBlank(mobile)){
mobile=mobile.replace(" ", "");
}
sendSmsByStr(mobile,pwd,templateCode);
return JsonResultUtil.createSuccessResult();
} catch (ClientException e) {
e.printStackTrace();
return JsonResultUtil.createDefaultFail();
}
}
public String sendSms(String mobile, String code) throws ClientException { public String sendSms(String mobile, String code) throws ClientException {
//可自助调整超时时间 //可自助调整超时时间
...@@ -93,13 +105,56 @@ public class SmsService { ...@@ -93,13 +105,56 @@ public class SmsService {
log.info("RequestId=" + sendSmsResponse.getRequestId()); log.info("RequestId=" + sendSmsResponse.getRequestId());
log.info("BizId=" + sendSmsResponse.getBizId()); log.info("BizId=" + sendSmsResponse.getBizId());
if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//请求成功 //请求成功
return code; return code;
} }
return null; return null;
} }
public boolean sendSmsByStr(String mobile, String str,String templateCode) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(mobile);
//必填:短信签名-可在短信控制台中找到
request.setSignName(SignName);
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam(TemplateParam.replace("str",str));//\"name\":\"Tom\",
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
log.info("短信接口返回的数据----------------mobile======"+mobile+"----str===="+str);
log.info("Code=" + sendSmsResponse.getCode());
log.info("Message=" + sendSmsResponse.getMessage());
log.info("RequestId=" + sendSmsResponse.getRequestId());
log.info("BizId=" + sendSmsResponse.getBizId());
if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//请求成功
return true;
}
return false;
}
/* public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException { /* public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.universal.mapper.SysRegionMapper">
<select id="getAllByPage" parameterType="java.util.Map"
resultType="com.xxfc.platform.universal.entity.SysRegion">
select `id`, parent_id, `name`, `type`, agency_id from sys_region limit #{pageStart},${pageSize}
</select>
<select id="getByIdList" parameterType="java.util.List"
resultType="com.xxfc.platform.universal.entity.SysRegion">
select `id`, parent_id, `name`, `type`, agency_id from sys_region where id in
<foreach collection="list" index="i" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
<select id="getNumber" resultType="Integer">
select `id` from sys_region where name like CONCAT('%',#{name},'%') limit 1
</select>
<select id="getNumberV2" resultType="Integer">
select `id` from sys_region where name like CONCAT('%',#{name},'%') and type=#{type} limit 1
</select>
<select id="findByCityName" resultType="com.xxfc.platform.universal.dto.RegionDTO">
select `id`,`parent_id` as `parentId` from `sys_region` where `type`=2 and `name` like concat('%',#{city} ,'%')
</select>
</mapper>
\ No newline at end of file
...@@ -12,9 +12,12 @@ public enum ResCode { ...@@ -12,9 +12,12 @@ public enum ResCode {
VEHICLE_BOOKED_INFO_ALREADY_CHANGED(101001,"车辆预定信息已更改,请刷新后继续操作"), VEHICLE_BOOKED_INFO_ALREADY_CHANGED(101001,"车辆预定信息已更改,请刷新后继续操作"),
//车辆信息相关返回码-车辆信息 //车辆信息相关返回码-车辆信息
VEHICLE_INFO_SAME_NUM_PLATE_EXISTS(102001,"该车牌车辆已经存在"), VEHICLE_INFO_SAME_NUM_PLATE_EXISTS(102001,"该车牌已经存在"),
VEHICLE_INFO_BRANCH_NOT_EXIST(102002,"分公司信息非法"), VEHICLE_INFO_BRANCH_NOT_EXIST(102002,"分公司信息非法"),
VEHICLE_INFO_CODE_EXIST(102003,"车辆编码已存在"), VEHICLE_INFO_CODE_EXIST(102003,"车辆编码已存在"),
VEHICLE_INFO_SAME_NUM_PLATE_AND_CODE_EMPTY(102004,"车辆编码和车牌号为空"),
VEHICLE_INFO_SAME_NUM_PLATE_AND_CODE_EXIST(102004,"车辆编码或车牌号已存在"),
//车辆信息相关返回码-预定申请信息 //车辆信息相关返回码-预定申请信息
VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批,请刷新后继续操作"), VEHICLE_BOOKED_RECORD_ALREADY_CHANGED(103001,"车辆预定申请已被审批,请刷新后继续操作"),
......
...@@ -127,9 +127,11 @@ public class Vehicle { ...@@ -127,9 +127,11 @@ public class Vehicle {
* 最后更新里程数 * 最后更新里程数
*/ */
private Integer mileageLastUpdate; private Integer mileageLastUpdate;
/** /**
* 停车分公司id * 停车分公司(id)
*/ */
@Column(name = "park_branch_company_id")
private Integer parkBranchCompanyId; private Integer parkBranchCompanyId;
/** /**
* 预计目的地分公司id * 预计目的地分公司id
......
...@@ -37,10 +37,16 @@ public interface VehicleFeign { ...@@ -37,10 +37,16 @@ public interface VehicleFeign {
@RequestMapping(value ="/branchCompany/app/unauth/detail/{id}",method = RequestMethod.GET) @RequestMapping(value ="/branchCompany/app/unauth/detail/{id}",method = RequestMethod.GET)
public ObjectRestResponse<CompanyDetail> getCompanyDetail(@PathVariable Integer id); public ObjectRestResponse<CompanyDetail> getCompanyDetail(@PathVariable Integer id);
@RequestMapping(value = "/unbook/4employee/{bookRecordId}", method = RequestMethod.DELETE) //拒绝预约
@RequestMapping(value = "/vehicleInfo/book/4employee/reject/{bookRecordId}", method = RequestMethod.PUT)
public RestResponse<Integer> rejectVehicleBooking(@PathVariable Long bookRecordId);
//取消预约
@RequestMapping(value = "/vehicleInfo/unbook/4employee/{bookRecordId}", method = RequestMethod.DELETE)
public RestResponse<Integer> unbookVehicle(@PathVariable Long bookRecordId); public RestResponse<Integer> unbookVehicle(@PathVariable Long bookRecordId);
@RequestMapping(value = "/book/4employee/prove/{bookRecordId}", method = RequestMethod.PUT) //通过预约
@RequestMapping(value = "/vehicleInfo/book/4employee/prove/{bookRecordId}", method = RequestMethod.PUT)
public RestResponse<Integer> proveVehicleBooking(@PathVariable Long bookRecordId); public RestResponse<Integer> proveVehicleBooking(@PathVariable Long bookRecordId);
//获取分公司列表 //获取分公司列表
......
...@@ -41,6 +41,13 @@ public class AddOrUpdateVehicleVo { ...@@ -41,6 +41,13 @@ public class AddOrUpdateVehicleVo {
@Column(name = "subordinate_branch") @Column(name = "subordinate_branch")
private Integer subordinateBranch; private Integer subordinateBranch;
/**
* 停车分公司(id)
*/
@Column(name = "park_branch_company_id")
private Integer parkBranchCompanyId;
/** /**
* 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表 * 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表
*/ */
......
...@@ -40,6 +40,24 @@ public class QueryVehicleVo { ...@@ -40,6 +40,24 @@ public class QueryVehicleVo {
*/ */
private String subBranchName; private String subBranchName;
/**
* 停靠分支机构(id)
*/
private Integer parkBranchCompanyId;
/**
* 停靠分支机构(名称)
*/
private String parkBranchCompanyName;
/**
* 目的地分支机构(id)
*/
private Integer expectDestinationBranchCompanyId;
/**
* 目的地分支机构(名称)
*/
private String expectDestinationBranchCompanyName;
/** /**
* 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表 * 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表
*/ */
......
package com.xxfc.platform.vehicle.pojo;
import lombok.Data;
import java.util.Date;
@Data
public class ResultVehicleVo {
/**
* 主键(uuid)
*/
private String id;
/**
* 车辆编号,0-没有
*/
private Integer code;
/**
* 车辆状态: 1-正常运行 2-维修 3-报废
*/
private Integer status;
/**
* 车牌号,空字符串-没有
*/
private String numberPlate;
/**
* 品牌(编码,对应关系见相关常量),0-未填写
*/
private Integer brand;
/**
* 所属分支机构(id)
*/
private Integer subordinateBranch;
/**
* 所属分支机构(名称)
*/
private String subBranchName;
/**
* 停靠分支机构(id)
*/
private Integer parkBranchCompanyId;
/**
* 停靠分支机构(名称)
*/
private String parkBranchCompanyName;
/**
* 目的地分支机构(id)
*/
private Integer expectDestinationBranchCompanyId;
/**
* 目的地分支机构(名称)
*/
private String expectDestinationBranchCompanyName;
/**
* 用途类型:租赁房车(1)、展车等,对应关系见车辆常量表
*/
private Integer useType;
/**
* 备注信息
*/
private String remark;
private Date createTime;
private Date updateTime;
/**
* 车架号
*/
private String vin;
/**
* 保险公司,见常量表
*/
private Integer insuranceCompany;
/**
* 保险单号
*/
private String insuranceNo;
/**
* 保险开始时间
*/
private Date insuranceStartDate;
/**
* 保险结束时间
*/
private Date insuranceEndDate;
/**
* 年审时间
*/
private Date annualVerificationDate;
/**
* 保养时间
*/
private Date maintenanceDate;
/**
* 保养公里
*/
private Integer mileage;
/**
* 保养里程数
*/
private Integer maintenanceMileage;
/**
* 车辆所属人-类型
*/
private Integer belongTo;
/**
* 所属人 名称
*/
private String belongToName;
/**
* 行驶证路径
*/
private String drivingLicensePath;
/**
* 发动机号
*/
private String engineNum;
/**
* 生产商
*/
private String manufacturer;
/**
* 收车时间
*/
private Date receiveTime;
}
\ No newline at end of file
...@@ -32,11 +32,11 @@ public class VehiclePageQueryVo { ...@@ -32,11 +32,11 @@ public class VehiclePageQueryVo {
*/ */
private Integer subordinateBranch; private Integer subordinateBranch;
/** /**
* 所属分支机构(id) * 所属省份(id)
*/ */
private Integer addrProvince; private Integer addrProvince;
/** /**
* 所属分支机构(id) * 所属市区(id)
*/ */
private Integer addrCity; private Integer addrCity;
......
...@@ -199,18 +199,27 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -199,18 +199,27 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
} }
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) { for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList) {
Vehicle vehicle = new Vehicle(); Vehicle vehicle = new Vehicle();
BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo); BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
throw new CustomIllegalParamException("Stop at branch office cannot be empty");
}
vehicle.setId(UUID.randomUUID().toString()); vehicle.setId(UUID.randomUUID().toString());
// 检查车牌或者编码是否已存在,已存在则返回失败 // 检查车牌或者编码是否已存在,已存在则返回失败
List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo); List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){ if(CollectionUtils.isNotEmpty(exitsVehicles)){
if(addOrUpdateVehicleVo.getCode()!= null && return RestResponse.codeAndMessage(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode(),
addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){ ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getDesc());
return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
}else{ // if(addOrUpdateVehicleVo.getCode()!= null &&
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode()); // addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
} // return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
// }else{
// return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
// }
} }
mapper.insertSelective(vehicle); mapper.insertSelective(vehicle);
} }
...@@ -223,9 +232,13 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -223,9 +232,13 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @param addOrUpdateVehicleVo * @param addOrUpdateVehicleVo
* @return 锁定成功返回 * @return 锁定成功返回
*/ */
private List<Vehicle> lockByCode(AddOrUpdateVehicleVo addOrUpdateVehicleVo){ private List<Vehicle> lockByCode(AddOrUpdateVehicleVo addOrUpdateVehicleVo)throws CustomIllegalParamException{
if(addOrUpdateVehicleVo.getCode() == null){ // if(addOrUpdateVehicleVo.getCode() == null){
return null; // return null;
// }
if(addOrUpdateVehicleVo.getNumberPlate() == null){
throw new CustomIllegalParamException("Without a license plate number");
} }
List<Vehicle> vehicles = mapper.lockByCode(addOrUpdateVehicleVo); List<Vehicle> vehicles = mapper.lockByCode(addOrUpdateVehicleVo);
return vehicles; return vehicles;
...@@ -244,7 +257,11 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -244,7 +257,11 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList){ for(AddOrUpdateVehicleVo addOrUpdateVehicleVo:addOrUpdateVehicleVoList){
Vehicle vehicle = new Vehicle(); Vehicle vehicle = new Vehicle();
BeanUtils.copyProperties(vehicle, addOrUpdateVehicleVo); BeanUtilsBean.getInstance().copyProperties(vehicle, addOrUpdateVehicleVo);
if (addOrUpdateVehicleVo.getParkBranchCompanyId()==null) {
throw new CustomIllegalParamException("Stop at branch office cannot be empty");
}
//悲观锁,检查是否已存在车牌或编码 //悲观锁,检查是否已存在车牌或编码
List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo); List<Vehicle> exitsVehicles = lockByCode(addOrUpdateVehicleVo);
if(CollectionUtils.isNotEmpty(exitsVehicles)){ if(CollectionUtils.isNotEmpty(exitsVehicles)){
...@@ -252,12 +269,15 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -252,12 +269,15 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
if(exitsVehicle.getId().equals(addOrUpdateVehicleVo.getId())){ if(exitsVehicle.getId().equals(addOrUpdateVehicleVo.getId())){
continue; continue;
} }
if(addOrUpdateVehicleVo.getCode()!= null && return RestResponse.codeAndMessage(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode(),
addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){ ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getDesc());
return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
}else{ // if(addOrUpdateVehicleVo.getCode()!= null &&
return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode()); // addOrUpdateVehicleVo.getCode().equals(exitsVehicles.get(0).getCode())){
} // return RestResponse.code(ResCode.VEHICLE_INFO_CODE_EXIST.getCode());
// }else{
// return RestResponse.code(ResCode.VEHICLE_INFO_SAME_NUM_PLATE_EXISTS.getCode());
// }
} }
} }
mapper.updateByPrimaryKeySelective(vehicle); mapper.updateByPrimaryKeySelective(vehicle);
...@@ -429,6 +449,11 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -429,6 +449,11 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
if(effected == 0){//修改失败,手动回滚 if(effected == 0){//修改失败,手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode()); return RestResponse.code(ResCode.VEHICLE_BOOKED_RECORD_ALREADY_CHANGED.getCode());
}else if(VehicleBookRecordStatus.REJECTED.getCode().equals(rsStatus)){
//拒绝,则释放bookinfo
bookVehicleVo.setUnbookStartDate(bookVehicleVo.getBookStartDate());
bookVehicleVo.setUnbookEndDate(bookVehicleVo.getBookEndDate());
Boolean hasSuc = unbookVehicle(bookVehicleVo);
} }
return RestResponse.suc(); return RestResponse.suc();
} }
...@@ -625,7 +650,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -625,7 +650,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
} }
/** /**
* 取消预定 * 取消预定(释放bookinfo)
* @return * @return
*/ */
@Transactional @Transactional
...@@ -836,7 +861,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -836,7 +861,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @return * @return
* @throws Exception * @throws Exception
*/ */
public PageDataVO<QueryVehicleVo> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception{ public PageDataVO<ResultVehicleVo> getByPage(VehiclePageQueryVo vehiclePageQueryVo) throws Exception{
Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo); Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo);
Integer pageSize = (Integer) params.get("limit"); Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize"); params.remove("pageSize");
...@@ -846,8 +871,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -846,8 +871,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
adjustBookedInfoParam(params,vehiclePageQueryVo); adjustBookedInfoParam(params,vehiclePageQueryVo);
params.get("yearMonthAndParam"); params.get("yearMonthAndParam");
PageHelper.startPage(pageNo,pageSize); PageHelper.startPage(pageNo,pageSize);
List<QueryVehicleVo> vehicles = mapper.getByPage(params); List<ResultVehicleVo> vehicles = mapper.getByPage(params);
PageInfo<QueryVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles); PageInfo<ResultVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
return PageDataVO.pageInfo(vehiclePageInfo); return PageDataVO.pageInfo(vehiclePageInfo);
} }
/** /**
...@@ -856,7 +881,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -856,7 +881,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @return * @return
* @throws Exception * @throws Exception
*/ */
public PageDataVO<QueryVehicleVo> getByPageNotAllData(VehiclePageQueryVo vehiclePageQueryVo, List<Integer> companyList) throws Exception{ public PageDataVO<ResultVehicleVo> getByPageNotAllData(VehiclePageQueryVo vehiclePageQueryVo, List<Integer> companyList) throws Exception{
Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo); Map<String, Object> params = PropertyUtils.describe(vehiclePageQueryVo);
Integer pageSize = (Integer) params.get("limit"); Integer pageSize = (Integer) params.get("limit");
params.remove("pageSize"); params.remove("pageSize");
...@@ -870,8 +895,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -870,8 +895,8 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
params.put("companyList", Arrays.asList(-1)); params.put("companyList", Arrays.asList(-1));
} }
PageHelper.startPage(pageNo,pageSize); PageHelper.startPage(pageNo,pageSize);
List<QueryVehicleVo> vehicles = mapper.getByPageNotAllData(params); List<ResultVehicleVo> vehicles = mapper.getByPageNotAllData(params);
PageInfo<QueryVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles); PageInfo<ResultVehicleVo> vehiclePageInfo = new PageInfo<>(vehicles);
return PageDataVO.pageInfo(vehiclePageInfo); return PageDataVO.pageInfo(vehiclePageInfo);
} }
......
...@@ -10,6 +10,8 @@ import org.springframework.stereotype.Service; ...@@ -10,6 +10,8 @@ import org.springframework.stereotype.Service;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.mapper.VehicleModelMapper; import com.xxfc.platform.vehicle.mapper.VehicleModelMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -45,6 +47,9 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> { ...@@ -45,6 +47,9 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
PageDataVO<VehicleModelVo> mPageDataVO = PageDataVO.pageInfo(vmqc.getPage(), PageDataVO<VehicleModelVo> mPageDataVO = PageDataVO.pageInfo(vmqc.getPage(),
vmqc.getLimit(), () -> mapper.findVehicleModelPage(vmqc)); vmqc.getLimit(), () -> mapper.findVehicleModelPage(vmqc));
// List<VehicleModelVo> vehicleModelVos = mPageDataVO.getData();
// vehicleModelVos.parallelStream().forEach(vehicleModelVo -> vehicleModelVo.setPicture(vehicleModelVo.getPicture().split(",")[0]));
return ObjectRestResponse.succ(mPageDataVO); return ObjectRestResponse.succ(mPageDataVO);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -53,13 +58,14 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> { ...@@ -53,13 +58,14 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
} }
@Transactional
public Integer insertAndGetId(VehicleModel vm) { public Integer insertAndGetId(VehicleModel vm) {
try { try {
mapper.insertSelective(vm); mapper.insertSelective(vm);
return vm.getId(); return vm.getId();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} }
return null; return null;
......
...@@ -11,9 +11,9 @@ import java.util.Map; ...@@ -11,9 +11,9 @@ import java.util.Map;
public interface VehicleMapper extends Mapper<Vehicle> { public interface VehicleMapper extends Mapper<Vehicle> {
public List<QueryVehicleVo> getByPage(Map<String, Object> params); public List<ResultVehicleVo> getByPage(Map<String, Object> params);
public List<QueryVehicleVo> getByPageNotAllData(Map<String, Object> params); public List<ResultVehicleVo> getByPageNotAllData(Map<String, Object> params);
public int updateStatusById(Map<String, Object> params); public int updateStatusById(Map<String, Object> params);
......
...@@ -42,10 +42,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -42,10 +42,7 @@ import org.springframework.web.multipart.MultipartFile;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls; import tk.mybatis.mapper.weekend.WeekendSqls;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -121,7 +118,7 @@ public class VehicleController extends BaseController<VehicleBiz> { ...@@ -121,7 +118,7 @@ public class VehicleController extends BaseController<VehicleBiz> {
} }
@RequestMapping(value = "/page", method = RequestMethod.GET) @RequestMapping(value = "/page", method = RequestMethod.GET)
public RestResponse<PageDataVO<QueryVehicleVo>> getByPage(@RequestParam String vehiclePageQueryVoJson) throws Exception { public RestResponse<PageDataVO<ResultVehicleVo>> getByPage(@RequestParam String vehiclePageQueryVoJson) throws Exception {
VehiclePageQueryVo vehiclePageQueryVo = null; VehiclePageQueryVo vehiclePageQueryVo = null;
try { try {
vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class); vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class);
...@@ -144,7 +141,7 @@ public class VehicleController extends BaseController<VehicleBiz> { ...@@ -144,7 +141,7 @@ public class VehicleController extends BaseController<VehicleBiz> {
@RequestMapping(value = "/small/page", method = RequestMethod.GET) @RequestMapping(value = "/small/page", method = RequestMethod.GET)
@IgnoreUserToken @IgnoreUserToken
public RestResponse<PageDataVO<QueryVehicleVo>> getByPageBySmall(@RequestParam String vehiclePageQueryVoJson,@RequestParam Integer uid) throws Exception { public RestResponse<PageDataVO<ResultVehicleVo>> getByPageBySmall(@RequestParam String vehiclePageQueryVoJson,@RequestParam Integer uid) throws Exception {
VehiclePageQueryVo vehiclePageQueryVo = null; VehiclePageQueryVo vehiclePageQueryVo = null;
try { try {
vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class); vehiclePageQueryVo = JSON.parseObject(vehiclePageQueryVoJson, VehiclePageQueryVo.class);
...@@ -401,8 +398,8 @@ public class VehicleController extends BaseController<VehicleBiz> { ...@@ -401,8 +398,8 @@ public class VehicleController extends BaseController<VehicleBiz> {
//查询可车辆信息 //查询可车辆信息
PageDataVO<Vehicle> pageDataVO = vehicleBiz.searchUsableVehicle(dto); PageDataVO<Vehicle> pageDataVO = vehicleBiz.searchUsableVehicle(dto);
if (pageDataVO.getData().size() <= 0) { if (pageDataVO.getData().size() <= 0) {
throw new BaseException(ResultCode.NOTEXIST_CODE, new HashMap<String, Object>(){{ throw new BaseException(ResultCode.NOTEXIST_CODE, new HashSet<String>(){{
put("可用车辆", "不存在"); add("可用车辆不存在");
}}); }});
} }
bookVehicleVo.setVehicleId(pageDataVO.getData().get(0).getId()); bookVehicleVo.setVehicleId(pageDataVO.getData().get(0).getId());
......
...@@ -104,6 +104,9 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi ...@@ -104,6 +104,9 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
// //
// } // }
// } // }
if (vmqc.getIsDel()==null) {
vmqc.setIsDel(0);
}
if (vmqc == null || vmqc.getPage() == null || vmqc.getLimit() == null || vmqc.getPage() < 0 || vmqc.getLimit() <= 0) { if (vmqc == null || vmqc.getPage() == null || vmqc.getLimit() == null || vmqc.getPage() < 0 || vmqc.getLimit() <= 0) {
......
...@@ -30,15 +30,21 @@ ...@@ -30,15 +30,21 @@
<select id="getByPage" parameterType="java.util.Map" <select id="getByPage" parameterType="java.util.Map"
resultType="com.xxfc.platform.vehicle.pojo.QueryVehicleVo"> resultType="com.xxfc.platform.vehicle.pojo.ResultVehicleVo">
SELECT r.* FROM ( SELECT r.* FROM (
select DISTINCT v.`id`, select DISTINCT v.`id`,
v.`code`, v.`code`,
v.`status`, v.`status`,
v.number_plate, v.number_plate,
v.brand, v.brand,
IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch, -- IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch,
IFNULL(bc.name,bc1.name) AS subBranchName, -- IFNULL(bc.name,bc1.name) AS subBranchName,
v.park_branch_company_id,
bc.name as parkBranchCompanyName,
v.expect_destination_branch_company_id,
bc1.name as expectDestinationBranchCompanyName,
v.subordinate_branch,
bc2.name as subBranchName,
v.use_type, v.use_type,
v.remark, v.remark,
v.create_time, v.create_time,
...@@ -66,8 +72,14 @@ ...@@ -66,8 +72,14 @@
left join left join
vehicle_book_info vbi on v.`id` = vbi.vehicle vehicle_book_info vbi on v.`id` = vbi.vehicle
</if> </if>
-- LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id
-- LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id
-- 停车分公司
LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id
-- 目的地分公司
LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id
-- 所属分公司
LEFT JOIN branch_company bc2 ON v.subordinate_branch = bc2.id
where where
v.is_del=0 v.is_del=0
<if test="mRangeDateEnd !=null"> <if test="mRangeDateEnd !=null">
...@@ -94,9 +106,9 @@ ...@@ -94,9 +106,9 @@
<if test="vin !=null and vin != ''"> <if test="vin !=null and vin != ''">
and v.vin = #{vin} and v.vin = #{vin}
</if> </if>
<if test="subordinateBranch !=null"> <!-- <if test="subordinateBranch !=null">-->
and v.subordinate_branch = #{subordinateBranch} <!-- and v.subordinate_branch = #{subordinateBranch}-->
</if> <!-- </if>-->
<if test="code !=null"> <if test="code !=null">
and v.code = #{code} and v.code = #{code}
</if> </if>
...@@ -127,11 +139,12 @@ ...@@ -127,11 +139,12 @@
</foreach> </foreach>
</if> </if>
<if test="subordinateBranch !=null "> <if test="subordinateBranch !=null ">
and ( v.park_branch_company_id = #{subordinateBranch} or v.expect_destination_branch_company_id=#{subordinateBranch} ) and ( v.park_branch_company_id = #{subordinateBranch} or
v.expect_destination_branch_company_id=#{subordinateBranch} )
</if> </if>
<if test=" addrProvince !=null or addrCity !=null or zoneId !=null "> <if test=" addrProvince !=null or addrCity !=null or zoneId !=null ">
and ( and (
<trim suffixOverrides="OR"> <trim suffixOverrides="OR">
<if test="addrProvince !=null"> <if test="addrProvince !=null">
(bc.addr_province=#{addrProvince} or bc1.addr_province=#{addrProvince}) OR (bc.addr_province=#{addrProvince} or bc1.addr_province=#{addrProvince}) OR
</if> </if>
...@@ -141,23 +154,29 @@ ...@@ -141,23 +154,29 @@
<if test="zoneId !=null"> <if test="zoneId !=null">
(bc.zone_id=#{zoneId} or bc1.zone_id=#{zoneId}) OR (bc.zone_id=#{zoneId} or bc1.zone_id=#{zoneId}) OR
</if> </if>
</trim> </trim>
) )
</if> </if>
order by v.code order by v.code
) r ORDER BY r.subBranchName ) r ORDER BY r.parkBranchCompanyName
</select> </select>
<select id="getByPageNotAllData" parameterType="java.util.Map" <select id="getByPageNotAllData" parameterType="java.util.Map"
resultType="com.xxfc.platform.vehicle.pojo.QueryVehicleVo"> resultType="com.xxfc.platform.vehicle.pojo.ResultVehicleVo">
SELECT r.* FROM ( SELECT r.* FROM (
select DISTINCT v.`id`, select DISTINCT v.`id`,
v.`code`, v.`code`,
v.`status`, v.`status`,
v.number_plate, v.number_plate,
v.brand, v.brand,
IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch, -- IFNULL(v.park_branch_company_id,v.expect_destination_branch_company_id) AS subordinate_branch,
IFNULL(bc.name,bc1.name) AS subBranchName, -- IFNULL(bc.name,bc1.name) AS subBranchName,
v.park_branch_company_id,
bc.name as parkBranchCompanyName,
v.expect_destination_branch_company_id,
bc1.name as expectDestinationBranchCompanyName,
v.subordinate_branch,
bc2.name as subBranchName,
v.use_type, v.use_type,
v.remark, v.remark,
v.create_time, v.create_time,
...@@ -185,24 +204,36 @@ ...@@ -185,24 +204,36 @@
left join left join
vehicle_book_info vbi on v.`id` = vbi.vehicle vehicle_book_info vbi on v.`id` = vbi.vehicle
</if> </if>
-- 停车分公司
LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id LEFT JOIN branch_company bc ON v.park_branch_company_id = bc.id
-- 目的地分公司
LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id LEFT JOIN branch_company bc1 ON v.expect_destination_branch_company_id = bc1.id
-- 所属分公司
LEFT JOIN branch_company bc2 ON v.subordinate_branch = bc2.id
where where
v.is_del=0 v.is_del=0
<if test="companyList != null"> <if test="companyList != null">
and ( v.park_branch_company_id in ( and ( v.park_branch_company_id in (
<trim suffixOverrides=","> <trim suffixOverrides=",">
<foreach collection="companyList" item="companyId"> <foreach collection="companyList" item="companyId">
#{companyId}, #{companyId},
</foreach> </foreach>
</trim> </trim>
) )
or v.expect_destination_branch_company_id in ( or v.expect_destination_branch_company_id in (
<trim suffixOverrides=","> <trim suffixOverrides=",">
<foreach collection="companyList" item="companyId"> <foreach collection="companyList" item="companyId">
#{companyId}, #{companyId},
</foreach> </foreach>
</trim> </trim>
)
<!-- or v.subordinate_branch in (-->
<!-- <trim suffixOverrides=",">-->
<!-- <foreach collection="companyList" item="companyId">-->
<!-- #{companyId},-->
<!-- </foreach>-->
<!-- </trim>-->
)
) )
) )
</if> </if>
...@@ -230,9 +261,9 @@ ...@@ -230,9 +261,9 @@
<if test="vin !=null and vin != ''"> <if test="vin !=null and vin != ''">
and v.vin = #{vin} and v.vin = #{vin}
</if> </if>
<if test="subordinateBranch !=null"> <!-- <if test="subordinateBranch !=null">-->
and v.subordinate_branch = #{subordinateBranch} <!-- and v.subordinate_branch = #{subordinateBranch}-->
</if> <!-- </if>-->
<if test="code !=null"> <if test="code !=null">
and v.code = #{code} and v.code = #{code}
</if> </if>
...@@ -262,7 +293,8 @@ ...@@ -262,7 +293,8 @@
</foreach> </foreach>
</if> </if>
<if test="subordinateBranch !=null "> <if test="subordinateBranch !=null ">
and ( v.park_branch_company_id = #{subordinateBranch} or v.expect_destination_branch_company_id=#{subordinateBranch} ) and ( v.park_branch_company_id = #{subordinateBranch} or
v.expect_destination_branch_company_id=#{subordinateBranch} )
</if> </if>
<if test=" addrProvince !=null or addrCity !=null or zoneId !=null "> <if test=" addrProvince !=null or addrCity !=null or zoneId !=null ">
and ( and (
...@@ -274,13 +306,13 @@ ...@@ -274,13 +306,13 @@
(bc.addr_city=#{addrProvince} or bc1.addr_city=#{addrProvince}) OR (bc.addr_city=#{addrProvince} or bc1.addr_city=#{addrProvince}) OR
</if> </if>
<if test="zoneId !=null"> <if test="zoneId !=null">
(bc.zone_id=#{zoneId} or bc1.zone_id=#{zoneId}) OR (bc.zone_id=#{zoneId} or bc1.zone_id=#{zoneId}) OR
</if> </if>
</trim> </trim>
) )
</if> </if>
order by v.code order by v.code
) r ORDER BY r.subBranchName ) r ORDER BY r.parkBranchCompanyName
</select> </select>
<select id="lockByCode" resultType="com.xxfc.platform.vehicle.entity.Vehicle" <select id="lockByCode" resultType="com.xxfc.platform.vehicle.entity.Vehicle"
...@@ -291,8 +323,11 @@ ...@@ -291,8 +323,11 @@
v.number_plate v.number_plate
from vehicle v from vehicle v
where where
`code` = #{code} number_plate=#{numberPlate}
and is_del=0
for update for update
</select> </select>
<select id="selectByNumberPlate" resultType="com.xxfc.platform.vehicle.entity.Vehicle"> <select id="selectByNumberPlate" resultType="com.xxfc.platform.vehicle.entity.Vehicle">
select * from vehicle select * from vehicle
......
...@@ -10,9 +10,11 @@ ...@@ -10,9 +10,11 @@
parent_id,name,icon,depict,rank,level,state,crt_time,upd_time,isMore,start_using parent_id,name,icon,depict,rank,level,state,crt_time,upd_time,isMore,start_using
) VALUES ) VALUES
<foreach collection ="vpclist" item="vpc" index="index" separator =","> <foreach collection ="vpclist" item="vpc" index="index" separator =",">
<if test="vpc.state == 0" >
(#{vpc.parentId},#{vpc.name},#{vpc.icon},#{vpc.depict} (#{vpc.parentId},#{vpc.name},#{vpc.icon},#{vpc.depict}
,#{vpc.rank},#{vpc.level},#{vpc.state},#{vpc.crtTime} ,#{vpc.rank},#{vpc.level},#{vpc.state},#{vpc.crtTime}
,#{vpc.updTime},#{vpc.isMore},#{vpc.startUsing}) ,#{vpc.updTime},#{vpc.isMore},#{vpc.startUsing})
</if>
</foreach> </foreach>
</insert> </insert>
......
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