Commit 397f239f authored by hanfeng's avatar hanfeng

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

# Conflicts:
#	xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/constant/RedisKey.java
#	xx-universal/xx-universal-api/src/main/java/com/xxfc/platform/universal/feign/ThirdFeign.java
parents 1164b8c8 b5c4e4c5
......@@ -192,8 +192,9 @@ public class AuthController {
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);
@RequestParam(value="headimgurl",defaultValue="")String headimgurl,
@RequestParam(value="userid",defaultValue="0")Integer userid)throws Exception {
JSONObject data=appAuthService.appletRegistry(username,nickname,headimgurl,userid);
if(data!=null&&data.getInteger("status")== ResultCode.SUCCESS_CODE){
JSONObject result=data.getJSONObject("data");
if(result==null){
......
......@@ -65,5 +65,6 @@ public interface IUserService {
* @return
*/
@PostMapping("/api/app/applet/registry")
public JSONObject appletRegistry(@RequestParam(value="username")String username, @RequestParam(value="nickname")String nickname,@RequestParam(value="headimgurl")String headimgurl);
public JSONObject appletRegistry(@RequestParam(value="username")String username, @RequestParam(value="nickname")String nickname,
@RequestParam(value="headimgurl")String headimgurl,@RequestParam(value="userid",defaultValue="0")Integer userid);
}
......@@ -32,5 +32,5 @@ public interface AuthService {
* @param nickname
* @return
*/
JSONObject appletRegistry(String username,String headimgurl,String nickname);
JSONObject appletRegistry(String username,String headimgurl,String nickname,Integer userid);
}
......@@ -92,8 +92,8 @@ public class AppAuthServiceImpl implements AuthService {
}
@Override
public JSONObject appletRegistry(String username,String headimgurl,String nickname) {
return userService.appletRegistry(username,headimgurl,nickname);
public JSONObject appletRegistry(String username,String headimgurl,String nickname,Integer userid) {
return userService.appletRegistry(username,headimgurl,nickname,userid);
}
}
......@@ -90,7 +90,7 @@ public class AuthServiceImpl implements AuthService {
}
@Override
public JSONObject appletRegistry(String username,String headimgurl,String nickname) {
return userService.appletRegistry(username,headimgurl,nickname);
public JSONObject appletRegistry(String username,String headimgurl,String nickname,Integer userid) {
return userService.appletRegistry(username,headimgurl,nickname,userid);
}
}
......@@ -117,6 +117,14 @@
<version>2.1.1</version>
</dependency>
<!-- cache -->
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-cache</artifactId>
<version>0.0.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
......
package com.ace.cache.parser.impl;
import com.ace.cache.parser.ICacheResultParser;
import com.alibaba.fastjson.JSON;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
/**
* 转map 有问题
*/
public class DefaultResultParser implements ICacheResultParser {
public DefaultResultParser() {
}
public Object parse(String value, Type type, Class<?>... origins) {
Object result = null;
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType)type;
Type rawType = parameterizedType.getRawType();
if (((Class)rawType).isAssignableFrom(List.class)) {
result = JSON.parseArray(value, (Class)parameterizedType.getActualTypeArguments()[0]);
}else if(((Class)rawType).isAssignableFrom(Map.class)) {
Map transition = JSON.parseObject(value, Map.class);
transition.forEach((k, v) -> {
transition.put(k, JSON.parseObject(v.toString(), (Class)parameterizedType.getActualTypeArguments()[1]));
});
result = transition;
}
} else if (origins == null) {
result = JSON.parseObject(value, (Class)type);
} else {
result = JSON.parseObject(value, origins[0]);
}
return result;
}
}
\ No newline at end of file
......@@ -86,4 +86,6 @@ public class BaseController<Biz extends BaseBiz,Entity> extends CommonBaseContro
//查询列表数据
return ObjectRestResponse.succ(baseBiz.selectList(entity));
}
}
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 {
private Long createtime;
private Long updatetime;
private Integer isdel;
private Integer channel;
}
......@@ -35,5 +35,39 @@ public class AppUserLogin {
private String idNumber;
@Column(name = "certification_status")
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;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户关系表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-03 16:36:44
*/
@Data
@Table(name = "app_user_relation")
public class AppUserRelation implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
/**
* 用户id
*/
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 父id
*/
@Column(name = "parent_id")
@ApiModelProperty(value = "父id")
private Integer parentId;
/**
* 绑定的来源:1-app;2-小程序
*/
@Column(name = "bind_type")
@ApiModelProperty(value = "绑定的来源:1-app;2-小程序")
private Integer bindType;
/**
* 绑定时间
*/
@Column(name = "bind_time")
@ApiModelProperty(value = "绑定时间")
private Long bindTime;
/**
* 是否永久绑定关系:0-否;1-是
*/
@Column(name = "is_forever")
@ApiModelProperty(value = "是否永久绑定关系:0-否;1-是")
private Integer isForever;
/**
* 创建时间
*/
@Column(name = "ctr_time")
@ApiModelProperty(value = "创建时间")
private Long ctrTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 是否删除:0-正常;1-删除
*/
@Column(name = "is_del")
@ApiModelProperty(value = "是否删除:0-正常;1-删除")
private Integer isDel;
}
package com.github.wxiaoqi.security.admin.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户临时关系绑定表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-03 16:36:44
*/
@Data
@Table(name = "app_user_relation_temp")
public class AppUserRelationTemp implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
/**
* 别的服务(比如小程序)用户id
*/
@Column(name = "temp_id")
@ApiModelProperty(value = "别的服务(比如小程序)用户id")
private Integer tempId;
/**
* 类型:1-小程序
*/
@Column(name = "type")
@ApiModelProperty(value = "类型:1-小程序")
private Integer type;
/**
* app用户id
*/
@Column(name = "user_id")
@ApiModelProperty(value = "app用户id")
private Integer userId;
/**
* 是否有效:0-有效;1-无效
*/
@Column(name = "is_valid")
@ApiModelProperty(value = "是否有效:0-有效;1-无效")
private Integer isValid;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 是否删除:0-正常;1-删除
*/
@Column(name = "is_del")
@ApiModelProperty(value = "是否删除:0-正常;1-删除")
private Integer isDel;
}
......@@ -219,6 +219,11 @@
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-universal-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>ace-admin</finalName>
......
......@@ -23,7 +23,6 @@ import tk.mybatis.spring.annotation.MapperScan;
@EnableDiscoveryClient
@EnableCircuitBreaker
@SpringBootApplication
@EnableFeignClients(value = {"com.github.wxiaoqi.security","com.xxfc.platform"},defaultConfiguration = HeaderConfig.class)
@EnableScheduling
@EnableAceAuthClient
......
......@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
......@@ -149,4 +150,13 @@ public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
public AppUserLogin getUserById(Integer userId){
return mapper.selectByPrimaryKey(userId);
}
/**
* 登录信息更改
* @param userId
* @param ip
*/
public void updateLoginInfo(Integer userId,String ip){
mapper.updateLoginUserInfoById(userId,ip, Instant.now().toEpochMilli());
}
}
package com.github.wxiaoqi.security.admin.biz;
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.admin.entity.AppUserRelationTemp;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import com.github.wxiaoqi.security.admin.mapper.AppUserRelationMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 用户关系表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-03 16:36:44
*/
@Service
public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRelation> {
@Autowired
AppUserRelationTempBiz relationTempBiz;
@Autowired
AppUserDetailBiz userDetailBiz;
/**
* 关系绑定
* @param userId
* @param parentId
*/
public void bindRelation(Integer userId,Integer parentId){
AppUserRelation relation=getMyBiz().getRelationByUserId(parentId);
if(relation==null){
relation=new AppUserRelation();
relation.setUserId(parentId);
insertSelective(relation);
}
relation=getMyBiz().getRelationByUserId(userId);
Long time=System.currentTimeMillis();
if(relation==null){
relation=new AppUserRelation();
relation.setUserId(userId);
relation.setParentId(parentId);
relation.setBindType(2);
relation.setBindTime(time);
insertSelective(relation);
}else {
if(relation.getParentId()==null||relation.getParentId()==0||(relation.getIsForever()!=1&&(time-relation.getBindTime())>3600)){
relation.setParentId(parentId);
relation.setBindType(2);
relation.setBindTime(time);
getMyBiz().updRelation(relation);
}
}
}
/**
* 小程序分享上下线绑定
* @param userid 当前人小程序id
* @param pid 分享人id
* @param platform_userid 当前人统一平台id
*/
public ObjectRestResponse shareParentByUserId(Integer userid, Integer pid, Integer platform_userid){
if(pid==null||pid==0||((platform_userid==null||platform_userid==0)&&(userid==0||userid==null))){
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
}
if(platform_userid==null||platform_userid==0){
upRelationTemp(pid,userid);
}else {
AppUserVo userVo=userDetailBiz.getUserInfoById(platform_userid);
if(userVo==null){
upRelationTemp(pid,userid);
}else {
bindRelation(platform_userid,pid);
}
}
return ObjectRestResponse.succ();
}
/**
* 新增临时关系
* @param pid
* @param userid
*/
public void upRelationTemp(Integer pid,Integer userid){
AppUserRelationTemp relationTemp=new AppUserRelationTemp();
relationTemp.setUserId(pid);
relationTemp.setIsDel(0);
relationTemp.setType(1);
AppUserRelationTemp relationTemp1= relationTempBiz.selectOne(relationTemp);
if(relationTemp1==null){
relationTemp.setTempId(userid);
relationTempBiz.insertSelective(relationTemp);
}
}
/**
* 小程序上下线绑定
* @param platform_userid 当前人统一平台id
* @param userid 当前人小程序id
*/
public void bindByUserId(Integer platform_userid,Integer userid){
if(platform_userid==null||platform_userid==0||userid==null||userid==0){
return;
}
AppUserRelationTemp relationTemp =new AppUserRelationTemp();
relationTemp.setTempId(userid);
relationTemp.setIsValid(0);
relationTemp.setType(1);
relationTemp.setIsDel(0);
relationTemp=relationTempBiz.selectOne(relationTemp);
if(relationTemp==null){
return;
}
Integer parentId=relationTemp.getUserId();
bindRelation(platform_userid,parentId);
}
/**
* 获取用户的上线关系
* @param userId
* @return
*/
@Cache(key="user:relation{1}")
public AppUserRelation getRelationByUserId(Integer userId){
AppUserRelation relation=new AppUserRelation();
relation.setUserId(userId);
return selectOne(relation);
}
@CacheClear(key="user:relation{1.userId}")
public int updRelation(AppUserRelation appUserRelation){
return super.updateSelectiveByIdRe(appUserRelation);
}
private AppUserRelationBiz getMyBiz() {
return AopContext.currentProxy() != null ? (AppUserRelationBiz) AopContext.currentProxy() : this;
}
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.biz;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.AppUserRelationTemp;
import com.github.wxiaoqi.security.admin.mapper.AppUserRelationTempMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 用户临时关系绑定表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-03 16:36:44
*/
@Service
public class AppUserRelationTempBiz extends BaseBiz<AppUserRelationTempMapper,AppUserRelationTemp> {
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.WebMvcConfigurer;
......@@ -64,4 +65,8 @@ public class WebConfiguration implements WebMvcConfigurer {
return list;
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
......@@ -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.AppUserManage;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import tk.mybatis.mapper.common.Mapper;
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
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户关系表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-03 16:36:44
*/
public interface AppUserRelationMapper extends Mapper<AppUserRelation> {
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserRelationTemp;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户临时关系绑定表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-03 16:36:44
*/
public interface AppUserRelationTempMapper extends Mapper<AppUserRelationTemp> {
}
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.admin.biz.AppUserRelationBiz;
import com.github.wxiaoqi.security.admin.entity.AppUserRelation;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("relation")
public class AppUserRelationController extends BaseController<AppUserRelationBiz,AppUserRelation> {
@RequestMapping(value = "app/unauth/small/share",method = RequestMethod.GET)
@ApiModelProperty("小程序分享绑定")
public ObjectRestResponse share(
@RequestParam(value = "userid",defaultValue = "0")Integer userid,
@RequestParam(value = "pid",defaultValue = "0")Integer pid,
@RequestParam(value = "platform_userid",defaultValue = "0")Integer platform_userid
){
return baseBiz.shareParentByUserId(userid,pid,platform_userid);
}
}
\ No newline at end of file
......@@ -186,14 +186,17 @@ public class AppUserRest {
public JSONObject appletRegistry(
@RequestParam(value="username",defaultValue="")String username,
@RequestParam(value="nickname",defaultValue="")String nickname,
@RequestParam(value="headimgurl",defaultValue="")String headimgurl){
@RequestParam(value="headimgurl",defaultValue="")String headimgurl,
@RequestParam(value="userid",defaultValue="0")Integer userid
){
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);
return appPermissionService.appletRegistry(username,headimgurl,nickname,userid);
}
}
......@@ -10,7 +10,7 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://10.5.52.3:3306/xxfc_tour?useUnicode=true&characterEncoding=UTF-8
url: jdbc:mysql://10.5.52.3:3306/xxfc_activity?useUnicode=true&characterEncoding=UTF-8
username: root
password: sslcloud123*()
jackson:
......
#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F
#\u5305\u540D
package=com.xxfc.platform.tour
package=com.xxfc.platform.activity
#\u4F5C\u8005
author=libin
#Email
......
package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 活动(活动列表)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Data
@Table(name = "activity_list")
public class ActivityList implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 活动名称
*/
@Column(name = "name")
@ApiModelProperty(value = "活动名称")
private String name;
/**
* 活动开始时间
*/
@Column(name = "start_time")
@ApiModelProperty(value = "活动开始时间")
private Long startTime;
/**
* 活动结束时间
*/
@Column(name = "end_time")
@ApiModelProperty(value = "活动结束时间")
private Long endTime;
/**
* 人数限制 -1--无限制
*/
@Column(name = "num_limit")
@ApiModelProperty(value = "人数限制 -1--无限制")
private Integer numLimit;
/**
* 已经参与人数
*/
@Column(name = "has_join_num")
@ApiModelProperty(value = "已经参与人数")
private Integer hasJoinNum;
/**
* 当前状态 1--显示在活动页 2--隐藏
*/
@Column(name = "status")
@ApiModelProperty(value = "当前状态 1--显示在活动页 2--隐藏")
private Integer status;
/**
* 排序
*/
@Column(name = "sort")
@ApiModelProperty(value = "排序")
private Integer sort;
/**
* 活动图片
*/
@Column(name = "picture")
@ApiModelProperty(value = "活动图片")
private Integer picture;
}
package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 推广活动(邀请有礼)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Data
@Table(name = "activity_popularize")
public class ActivityPopularize implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 名称
*/
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
/**
* 描述、详情等(看情况使用)
*/
@Column(name = "descr")
@ApiModelProperty(value = "描述、详情等(看情况使用)")
private String descr;
/**
* 奖励等 json数组格式 [{"type":1, "detail":{...}},...] //// type分类 1--现金;
*/
@Column(name = "value")
@ApiModelProperty(value = "奖励等 json数组格式 [{\"type\":1, \"detail\":{...}},...] //// type分类 1--现金;")
private String value;
/**
* 当前活动的总需进度
*/
@Column(name = "progress")
@ApiModelProperty(value = "当前活动的总需进度")
private Integer progress;
/**
* 推广活动类型 1--进度任务型
*/
@Column(name = "type")
@ApiModelProperty(value = "推广活动类型 1--进度任务型")
private Integer type;
}
package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 推广活动项,一个活动对应多个项
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Data
@Table(name = "activity_popularize_item")
public class ActivityPopularizeItem implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 名称
*/
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
/**
* 描述、详情等(看情况使用)
*/
@Column(name = "descr")
@ApiModelProperty(value = "描述、详情等(看情况使用)")
private Integer descr;
/**
* 推广活动id
*/
@Column(name = "popularize_id")
@ApiModelProperty(value = "推广活动id")
private Integer popularizeId;
/**
* 当前项代表的进度
*/
@Column(name = "progress")
@ApiModelProperty(value = "当前项代表的进度")
private Integer progress;
/**
*
*/
@Column(name = "type")
@ApiModelProperty(value = "")
private Integer type;
}
package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户参与推广活动(邀请有礼)的活动记录的记录(日志)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Data
@Table(name = "activity_popularize_log")
public class ActivityPopularizeLog implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 名称
*/
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
/**
* 描述、详情等(看情况使用)
*/
@Column(name = "descr")
@ApiModelProperty(value = "描述、详情等(看情况使用)")
private String descr;
/**
* 推广活动id
*/
@Column(name = "popularize_id")
@ApiModelProperty(value = "推广活动id")
private Integer popularizeId;
/**
* 用户id
*/
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 推广活动项id
*/
@Column(name = "item_id")
@ApiModelProperty(value = "推广活动项id ")
private Integer itemId;
}
package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 用户与推广活动(邀请有礼)的关系表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Data
@Table(name = "activity_popularize_user")
public class ActivityPopularizeUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
/**
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
/**
* 名称
*/
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
/**
* 描述、详情等(看情况使用)
*/
@Column(name = "descr")
@ApiModelProperty(value = "描述、详情等(看情况使用)")
private String descr;
/**
* 一共需要的进度
*/
@Column(name = "end_progress")
@ApiModelProperty(value = "一共需要的进度")
private Integer endProgress;
/**
* 当前进度
*/
@Column(name = "current_progress")
@ApiModelProperty(value = "当前进度")
private Integer currentProgress;
/**
* 推广活动id
*/
@Column(name = "popularize_id")
@ApiModelProperty(value = "推广活动id")
private Integer popularizeId;
/**
* 已经完成了的项
*/
@Column(name = "finish_item")
@ApiModelProperty(value = "已经完成了的项")
private String finishItem;
}
package com.xxfc.platform.activity.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityList;
import com.xxfc.platform.activity.mapper.ActivityListMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 活动(活动列表)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Service
public class ActivityListBiz extends BaseBiz<ActivityListMapper,ActivityList> {
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularize;
import com.xxfc.platform.activity.mapper.ActivityPopularizeMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 推广活动(邀请有礼)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Service
public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,ActivityPopularize> {
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem;
import com.xxfc.platform.activity.mapper.ActivityPopularizeItemMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 推广活动项,一个活动对应多个项
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Service
public class ActivityPopularizeItemBiz extends BaseBiz<ActivityPopularizeItemMapper,ActivityPopularizeItem> {
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog;
import com.xxfc.platform.activity.mapper.ActivityPopularizeLogMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 用户参与推广活动(邀请有礼)的活动记录的记录(日志)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Service
public class ActivityPopularizeLogBiz extends BaseBiz<ActivityPopularizeLogMapper,ActivityPopularizeLog> {
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularizeUser;
import com.xxfc.platform.activity.mapper.ActivityPopularizeUserMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 用户与推广活动(邀请有礼)的关系表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
@Service
public class ActivityPopularizeUserBiz extends BaseBiz<ActivityPopularizeUserMapper,ActivityPopularizeUser> {
}
\ No newline at end of file
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityList;
import tk.mybatis.mapper.common.Mapper;
/**
* 活动(活动列表)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
public interface ActivityListMapper extends Mapper<ActivityList> {
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem;
import tk.mybatis.mapper.common.Mapper;
/**
* 推广活动项,一个活动对应多个项
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
public interface ActivityPopularizeItemMapper extends Mapper<ActivityPopularizeItem> {
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户参与推广活动(邀请有礼)的活动记录的记录(日志)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
public interface ActivityPopularizeLogMapper extends Mapper<ActivityPopularizeLog> {
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPopularize;
import tk.mybatis.mapper.common.Mapper;
/**
* 推广活动(邀请有礼)
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
public interface ActivityPopularizeMapper extends Mapper<ActivityPopularize> {
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPopularizeUser;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户与推广活动(邀请有礼)的关系表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-05 15:23:04
*/
public interface ActivityPopularizeUserMapper extends Mapper<ActivityPopularizeUser> {
}
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityListBiz;
import com.xxfc.platform.activity.entity.ActivityList;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("activityList")
public class ActivityListController extends BaseController<ActivityListBiz,ActivityList> {
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityPopularizeBiz;
import com.xxfc.platform.activity.entity.ActivityPopularize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("activityPopularize")
public class ActivityPopularizeController extends BaseController<ActivityPopularizeBiz,ActivityPopularize> {
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityPopularizeItemBiz;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("activityPopularizeItem")
public class ActivityPopularizeItemController extends BaseController<ActivityPopularizeItemBiz,ActivityPopularizeItem> {
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityPopularizeLogBiz;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("activityPopularizeLog")
public class ActivityPopularizeLogController extends BaseController<ActivityPopularizeLogBiz,ActivityPopularizeLog> {
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityPopularizeUserBiz;
import com.xxfc.platform.activity.entity.ActivityPopularizeUser;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("activityPopularizeUser")
public class ActivityPopularizeUserController extends BaseController<ActivityPopularizeUserBiz,ActivityPopularizeUser> {
}
\ No newline at end of file
<?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.activity.mapper.ActivityListMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityList" id="activityListMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="name" column="name"/>
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="numLimit" column="num_limit"/>
<result property="hasJoinNum" column="has_join_num"/>
<result property="status" column="status"/>
<result property="sort" column="sort"/>
<result property="picture" column="picture"/>
</resultMap>
</mapper>
\ No newline at end of file
<?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.activity.mapper.ActivityPopularizeItemMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPopularizeItem" id="activityPopularizeItemMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="name" column="name"/>
<result property="descr" column="descr"/>
<result property="popularizeId" column="popularize_id"/>
<result property="progress" column="progress"/>
<result property="type" column="type"/>
</resultMap>
</mapper>
\ No newline at end of file
<?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.activity.mapper.ActivityPopularizeLogMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPopularizeLog" id="activityPopularizeLogMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="name" column="name"/>
<result property="descr" column="descr"/>
<result property="popularizeId" column="popularize_id"/>
<result property="userId" column="user_id"/>
<result property="itemId" column="item_id"/>
</resultMap>
</mapper>
\ No newline at end of file
<?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.activity.mapper.ActivityPopularizeMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPopularize" id="activityPopularizeMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="name" column="name"/>
<result property="descr" column="descr"/>
<result property="value" column="value"/>
<result property="progress" column="progress"/>
<result property="type" column="type"/>
</resultMap>
</mapper>
\ No newline at end of file
<?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.activity.mapper.ActivityPopularizeUserMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPopularizeUser" id="activityPopularizeUserMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="name" column="name"/>
<result property="descr" column="descr"/>
<result property="endProgress" column="end_progress"/>
<result property="currentProgress" column="current_progress"/>
<result property="popularizeId" column="popularize_id"/>
<result property="finishItem" column="finish_item"/>
</resultMap>
</mapper>
\ No newline at end of file
......@@ -2,17 +2,15 @@ package com.xxfc.platform.app.rest;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.GoodDataVO;
import com.xxfc.platform.app.biz.CofigBiz;
import com.xxfc.platform.app.entity.Cofig;
import com.xxfc.platform.campsite.feign.CampsiteFeign;
import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
......@@ -35,6 +33,11 @@ public class AppHomeController extends BaseController<CofigBiz,Cofig> {
@Autowired
TourFeign tourFeign;
@Autowired
VehicleFeign vehicleFeign;
@RequestMapping(value ="/app/unauth/goodList",method = RequestMethod.GET)
@IgnoreUserToken
public ObjectRestResponse<List<GoodDataVO>> goodList(
......@@ -47,6 +50,8 @@ public class AppHomeController extends BaseController<CofigBiz,Cofig> {
list=tourFeign.goodList(page,limit);
}else if (type==3){
list=campsiteFeign.goodList(page,limit);
}else if (type==4){
list=vehicleFeign.goodList(page,limit);
}
return new ObjectRestResponse<>().rel(true).data(list);
}
......
......@@ -65,4 +65,7 @@ public class CampsiteShopDetailDTO {
@ApiModelProperty(value = "纬度")
private Double latitude;
@ApiModelProperty(value = "电话")
private String phone;
}
......@@ -89,4 +89,7 @@ public class CampsiteShopDetailVo {
*/
@ApiModelProperty("轮播图列表")
private List<CampsiteShopCarouselDetailVo> campsiteShopCarouselDetailVos;
@ApiModelProperty(value = "電話")
private String phone;
}
......@@ -26,7 +26,6 @@ import tk.mybatis.spring.annotation.MapperScan;
@EnableScheduling
@EnableFeignClients(value = {"com.github.wxiaoqi.security.auth.client.feign", "com.github.wxiaoqi.security.admin.feign","com.xxfc.platform"},defaultConfiguration = HeaderConfig.class)
@EnableAceCache
@EnableCaching
@MapperScan(basePackages = "com.xxfc.platform.campsite.mapper")
public class CampSiteApplication {
public static void main(String[] args) {
......
......@@ -5,9 +5,12 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.Objects;
/**
* ${DESCRIPTION}
*
......@@ -19,7 +22,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
@Primary
public class RedisConfiguration {
@Bean
@Bean("customRedisTemplate")
public RedisTemplate<String, Object> customRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
......@@ -27,7 +30,7 @@ public class RedisConfiguration {
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
......
......@@ -61,5 +61,4 @@ public class CampsiteShopController extends BaseController<CampsiteShopBiz, Camp
return getBaseBiz().getAllByHome(page,limit);
}
}
\ No newline at end of file
......@@ -58,7 +58,7 @@
<!--根据id查询详情-->
<select id="findCampsiteShopDetailById" resultType="com.xxfc.platform.campsite.dto.CampsiteShopDetailDTO">
select `name` as `name`,`province_name` as `provinceName`,`city_name` as `cityName`,`address` as `address`,
select `name` as `name`,`province_name` as `provinceName`,`city_name` as `cityName`,`address` as `address`,`service_phone` as `phone`,
`content` as `content`,`configure` as `configure`,`longitude` as `longitude`,`latitude` as `latitude` from `campsite_shop` where `id`=#{id}
</select>
......
......@@ -16,7 +16,6 @@
<module>xx-common-platform</module>
<module>xx-common-platform-web</module>
<module>xx-common-platform-component</module>
<module>xx-common-demo</module>
</modules>
</project>
\ No newline at end of file
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-common-platform-component</artifactId>
<artifactId>li</artifactId>
<properties>
<swagger.version>2.9.2</swagger.version>
</properties>
......@@ -51,5 +51,12 @@
<version>${swagger.version}</version>
<scope>provided</scope>
</dependency>
<!-- cache -->
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-cache</artifactId>
<version>0.0.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.ace.cache.parser.impl;
import com.ace.cache.parser.ICacheResultParser;
import com.alibaba.fastjson.JSON;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
/**
* 转map 有问题
*/
public class DefaultResultParser implements ICacheResultParser {
public DefaultResultParser() {
}
public Object parse(String value, Type type, Class<?>... origins) {
Object result = null;
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType)type;
Type rawType = parameterizedType.getRawType();
if (((Class)rawType).isAssignableFrom(List.class)) {
result = JSON.parseArray(value, (Class)parameterizedType.getActualTypeArguments()[0]);
}else if(((Class)rawType).isAssignableFrom(Map.class)) {
Map transition = JSON.parseObject(value, Map.class);
transition.forEach((k, v) -> {
transition.put(k, JSON.parseObject(value, (Class)parameterizedType.getActualTypeArguments()[1]));
});
result = transition;
}
} else if (origins == null) {
result = JSON.parseObject(value, (Class)type);
} else {
result = JSON.parseObject(value, origins[0]);
}
return result;
}
}
\ No newline at end of file
......@@ -106,12 +106,6 @@
<artifactId>ace-auth-client</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- 引用缓存开源项目 -->
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-cache</artifactId>
<version>0.0.2</version>
</dependency>
<!-- 其他 -->
<dependency>
......
......@@ -25,12 +25,6 @@
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-common</artifactId>
<version>2.0-SNAPSHOT</version>
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>tk.mybatis</groupId>-->
<!-- <artifactId>mapper</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
......
......@@ -64,11 +64,16 @@ public class UserBiz {
if(mgt == null){
result = "系统错误";
}else{
Map<String,Object>params = new HashMap<String,Object>();
json.put("password",mgt.getPassword());
Map<String,Object> params = new HashMap<String,Object>();
params.put("userId",mgt.getId());
json.put("data",params);
result = json.toJSONString();
/*Map<String,Object>params = new HashMap<String,Object>();
params.put("userId",mgt.getUserId());
params.put("telephone",mgt.getPhone());
params.put("password",mgt.getPassword());
result = this.login(params);
result = this.login(params);*/
}
}else{
json.put("password",map.get("password").toString());
......
......@@ -566,8 +566,8 @@ public class Msg {
Msg entity = new Msg();
entity.id = ObjectId.get();
entity.userId = user.getUserId();
if(10000==user.getUserId())
entity.userId = user.getId();
if("10000" ==user.getId().toString())
entity.nickname ="客服公众号";
else
entity.nickname = user.getNickname();
......
......@@ -27,7 +27,7 @@ import lombok.Setter;
public class User {
@Id
private Integer userId;// 用户Id
private Integer id;// 用户Id
//@JSONField(serialize = false)
......@@ -188,8 +188,8 @@ public class User {
// ********************引用字段********************
public Integer getUserId() {
return userId;
public Integer getId() {
return id;
}
......@@ -209,8 +209,8 @@ public class User {
this.num = num;
}
public void setUserId(Integer userId) {
this.userId = userId;
public void setId(Integer id) {
this.id = id;
}
public String getUserKey() {
......
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
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 {
* 订单类型 1--租车;2--旅游
*/
@Column(name = "type")
@ApiModelProperty(value = "订单类型 1--租车;2--旅游")
@ApiModelProperty(value = "订单类型 1--租车;2--旅游; 3--会员订单")
private Integer type;
/**
......@@ -190,12 +190,26 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "退款时间")
private Long refundTime;
/**
* 退款状态
*/
@Column(name = "refund_status")
@ApiModelProperty(value = "退款的状态 0--未退还;1--已退还所有钱;2--已退还部分押金(保留违章预备金);3--已退还所有押金(扣除该扣除的)")
private Integer refundStatus;
/**
* 是否有优惠
*/
@Column(name = "has_discount")
@ApiModelProperty(value = "是否有优惠")
private Long hasDiscount;
@ApiModelProperty(value = "是否有优惠 0--无优惠;1--有优惠")
private Integer hasDiscount;
/**
* 是否有优惠
*/
@Column(name = "has_member_right")
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
/**
* 是否已支付
......
......@@ -273,13 +273,6 @@ public class OrderRentVehicleDetail implements Serializable {
@ApiModelProperty(value = "出发公司区域id")
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 {
@ApiModelProperty(value = "预定记录id")
private Long bookRecordId;
/**
* 是否购买免赔
*/
@Column(name = "damage_safe")
@ApiModelProperty(value = "是否购买免赔")
private Integer damageSafe;
}
......@@ -3,6 +3,7 @@ package com.xxfc.platform.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.math.BigDecimal;
@Table(name = "order_vehicle_crosstown")
@Data
......@@ -99,6 +100,7 @@ public class OrderVehicaleCrosstown {
* 扣除项明细 json
* deductions: 扣除项
* cost:费用
* id:编号(用于顺序)
*/
private String dedDetail;
......@@ -110,12 +112,12 @@ public class OrderVehicaleCrosstown {
/**
* 合计扣除费用
*/
private Integer deductionCost;
private BigDecimal deductionCost;
/**
* 剩余押金
*/
private Integer restDeposit;
private BigDecimal restDeposit;
/**
* 驾驶人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
private BaseOrder order;
private VehicleModel vehicleModel;
private BookVehicleVO bookVehicleVO;
private Integer damageSafe;
/**
* 是否使用出租免费天数
*/
......
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
......@@ -174,7 +174,7 @@ public class BaseOrderController extends CommonBaseController {
public ObjectRestResponse<List<OrderPageVO>> getTourList(QueryOrderList dto) {
if (dto.getStartTime() != null) {
if (dto.getEndTime() == null) {
dto.setEndTime(new Date().getTime());
dto.setEndTime(dto.getStartTime());
}
}
......@@ -351,6 +351,13 @@ public class BaseOrderController extends CommonBaseController {
"6--已完成")
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;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.persistence.Column;
@Controller
@RequestMapping("orderRentVehicle")
@Api(value="租车订单",tags={"租车订单"})
......@@ -65,15 +67,18 @@ public class OrderRentVehicleController extends CommonBaseController {
return ObjectRestResponse.succ(orderRentVehicleBiz.listByOrderId(orderId));
}
@RequestMapping(value = "/app/unauth/calculate-price",method = RequestMethod.GET)
@RequestMapping(value = "/calculate-price",method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "价格计算")
@IgnoreUserToken
public ObjectRestResponse<RentVehiclePriceVO> calculatePrice(CalculatePriceVO vo){
RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class);
if(StrUtil.isNotBlank(BaseContextHandler.getToken())) {
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));
}
......@@ -101,5 +106,16 @@ public class OrderRentVehicleController extends CommonBaseController {
@ApiModelProperty(value = "是否购买免赔 1--是")
private Integer damageSafe;
/**
* 是否有使用会员权益
*/
@ApiModelProperty(value = "是否有使用会员权益")
private Integer hasMemberRight;
/**
* 是否使用出租免费天数
*/
@ApiModelProperty(value = "是否使用出租免费天数")
private Integer rentFreeDay;
}
}
\ No newline at end of file
......@@ -27,6 +27,7 @@ import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.RentVehicleBookDTO;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -36,10 +37,11 @@ import java.util.HashMap;
import java.util.HashSet;
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
@Log4j
@Slf4j
public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicleBiz, RentVehicleBO> {
private static BigDecimal DRIVER_PRICE;
......@@ -86,6 +88,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
public void initDictionary() {
dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
log.info("out getAll4Map"+ System.currentTimeMillis());
this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_RENT).getDetail());
this.DRIVER_PRICE = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DRIVER_PRICE).getDetail());
this.DAMAGE_SAFE = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DAMAGE_SAFE).getDetail());
......@@ -134,6 +137,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal modelAmount = BigDecimal.ZERO;
Integer vehicleDayNum = 0;
Integer freeDayNum = 0;
//当前用户
AppUserDTO dto = detail.getAppUserDTO();
......@@ -150,6 +154,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
freeDayNum = detail.getDayNum();
}
vehicleDayNum = detail.getDayNum() - freeDayNum;
detail.getOrder().setHasMemberRight(SYS_TRUE);
}else {
vehicleDayNum = detail.getDayNum();
}
......@@ -168,18 +173,30 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
switch (MemberEnum.getByCode(detail.getAppUserDTO().getMemberLevel())) {
case NORMAL:
modelAmount = handleDiscount(vehicleModel, prices, NORMAL);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
case GOLD:
modelAmount = handleDiscount(vehicleModel, prices, GOLD);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
case DIAMOND:
modelAmount = handleDiscount(vehicleModel, prices, DIAMOND);
detail.getOrder().setHasMemberRight(SYS_TRUE);
break;
}
}else {
modelAmount = vehicleModel.getPrice();
}
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())) {
//计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
......@@ -197,9 +214,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//生成订单明细
RentVehiclePriceVO rvp = new RentVehiclePriceVO(){{
setOrderAmount(orderAmount);
setGoodsAmount(goodsAmount);
setRealAmount(orderAmount);
setDeposit(vehicleModel.getDeposit());
setDriverPrice(DRIVER_PRICE);
setDamageSafePrice(DAMAGE_SAFE);
......@@ -208,6 +222,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
setVehicleNum(1);
setDriverNum(1);
}};
rvp.setOrderAmount(orderAmount);
rvp.setGoodsAmount(goodsAmount);
rvp.setRealAmount(orderAmount);
rvp.setDriverAmount(driverAmount);
rvp.setVehicleAmount(vehicleAmount);
rvp.setDamageSafeAmount(damageSafeAmount);
......
......@@ -191,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()))));
}
//总价
tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getChildPrice());
tourAmount = tourAmount.add(tourSpePriceVo.getTotalPrice()).add(tourSpePriceVo.getTotalChildPrice());
//商品价格
goodsAmount = goodsAmount.add(tourAmount);
//总价格
......
......@@ -56,6 +56,20 @@
<if test="no != null">
and no = #{no}
</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>
order by crt_time desc
</select>
......
......@@ -6,6 +6,12 @@ public class DictionaryKey {
* 订单类型
*/
public static final String APP_ORDER ="APP_ORDER";
/**
* 支付
*/
public static final String UNIVERSAL_PAY ="UNIVERSAL_PAY";
/**
* 租车,旅游退款
*/
......@@ -13,10 +19,11 @@ public class DictionaryKey {
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";
/**
* 旅游:保险费用
......@@ -28,4 +35,9 @@ public class DictionaryKey {
*/
public static final String ACT_RENT = "ACT_RENT";
public static final String ACT_TOUR = "ACT_TOUR";
/**
* 支付价格减低
*/
public static final String PAY_DEMOTION = "PAY_DEMOTION";
}
<<<<<<< .mine
package com.xxfc.platform.universal.constant;
=======
package com.xxfc.platform.universal.constant;
>>>>>>> .theirs
public class RedisKey {
/**
......@@ -88,5 +93,11 @@ public class RedisKey {
*/
public static final String MILEAGE_LAST_DAY_PREFIX ="mileage:last_day:";
public static final String ILLEGAL_VEHICLE_ENQUIRIES ="cache:violation:";
/**
* 车辆预警,前一天检查的里程数redisKey前缀
*/
public static final String CACHE_DICTIONARY_PREFIX ="cache:dictionary:";
public static final String CACHE_DICTIONARY_ALL =CACHE_DICTIONARY_PREFIX + "all:";
public static final String CACHE_DICTIONARY_ALL_MAP =CACHE_DICTIONARY_ALL + "map:";
}
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,6 +2,7 @@ package com.xxfc.platform.universal.feign;
import com.alibaba.fastjson.JSONObject;
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.OrderRefund;
import com.xxfc.platform.universal.vo.*;
......@@ -35,27 +36,6 @@ public interface ThirdFeign {
@RequestMapping(value = "/refund/app/wx", method = RequestMethod.POST)
public ObjectRestResponse<String> refund(@RequestBody OrderRefundVo orderRefundVo);
/***************************************** 数据字典 ********************************************/
// @GetMapping(value = "/dictionary/getParents")
@RequestMapping(value = "/dictionary/getParents", method = RequestMethod.GET)
public ObjectRestResponse<List<Dictionary>> dictionaryGetParent(@RequestParam(value = "type") String type);
// @GetMapping(value = "/dictionary/get")
@RequestMapping(value = "/dictionary/get", method = RequestMethod.GET)
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);
/**
* 获取支持的城市
* @return
......@@ -78,4 +58,5 @@ public interface ThirdFeign {
ObjectRestResponse getLicensePlateType();
}
package com.xxfc.platform.universal.msg;
public class CustomIllegalParamException extends RuntimeException {
public CustomIllegalParamException(String msg){
super(msg);
}
}
......@@ -18,6 +18,12 @@
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-vehicle-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
......
......@@ -8,6 +8,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication(scanBasePackages = {
......@@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
})
@EnableDiscoveryClient
@EnableAceAuthClient
@EnableScheduling
@EnableAceCache
@EnableTransactionManagement
@tk.mybatis.spring.annotation.MapperScan(basePackages = "com.xxfc.platform.universal.mapper")
......
......@@ -2,6 +2,8 @@ package com.xxfc.platform.universal.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.google.common.collect.Lists;
......@@ -16,6 +18,8 @@ import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.xxfc.platform.universal.constant.RedisKey.*;
@Service
@Slf4j
public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
......@@ -98,6 +102,7 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
return dictionaryList;
}
@Cache(key = CACHE_DICTIONARY_ALL_MAP)
public Map<String, Dictionary> getAll4Map(){
// List<Dictionary> dictionaries = this.getParentCommon(null);
List<Dictionary> dictionaries = selectListAll();
......@@ -109,6 +114,11 @@ public class DictionaryBiz extends BaseBiz<DictionaryMapper, Dictionary> {
return dictionaryMap;
}
@CacheClear(pre = CACHE_DICTIONARY_PREFIX)
public void clear(){
;
}
public DictionaryVo buidTree(Dictionary dictionary) {
DictionaryVo dictionaryVo = new DictionaryVo();
if(dictionary.getPid() == 0) {
......
......@@ -7,18 +7,24 @@ import com.github.wxiaoqi.security.common.util.OrderUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.github.wxiaoqi.security.common.util.result.JsonResultUtil;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.vo.OrderPayVo;
import com.xxfc.platform.universal.weixin.api.WXPay;
import com.xxfc.platform.universal.weixin.util.HTTPUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xxfc.platform.universal.entity.OrderPay;
import com.xxfc.platform.universal.mapper.OrderPayMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
import java.util.Map;
import static com.xxfc.platform.universal.constant.DictionaryKey.PAY_DEMOTION;
import static com.xxfc.platform.universal.constant.DictionaryKey.UNIVERSAL_PAY;
/**
* 订单支付
......@@ -31,6 +37,8 @@ import java.util.List;
@Slf4j
public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> {
@Autowired
DictionaryBiz dictionaryBiz;
public JSONObject preparepay( OrderPayVo orderPayVo) {
if(null == orderPayVo) {
......@@ -52,7 +60,9 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> {
//报名费回调路径
//临时处理
amount = amount/100000;
Map<String, Dictionary> dictionaryMap = dictionaryBiz.getAll4Map();
Integer demotion = Integer.valueOf(dictionaryMap.get(UNIVERSAL_PAY+ "_"+ PAY_DEMOTION).getDetail());
amount = amount/demotion;
if(amount <= 0) {
amount = 1;
}
......
......@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.github.wxiaoqi.security.common.util.result.JsonResultUtil;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.entity.OrderPay;
import com.xxfc.platform.universal.entity.OrderRefund;
import com.xxfc.platform.universal.mapper.OrderRefundMapper;
......@@ -19,6 +20,10 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
import java.util.Map;
import static com.xxfc.platform.universal.constant.DictionaryKey.PAY_DEMOTION;
import static com.xxfc.platform.universal.constant.DictionaryKey.UNIVERSAL_PAY;
/**
* 订单支付退款表
......@@ -36,6 +41,9 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
@Value("${universal.cert}")
private String APICLIENT_CERT ;
@Autowired
DictionaryBiz dictionaryBiz;
//申请退款
public JSONObject refund(OrderRefundVo orderRefundVo)throws Exception{
if(orderRefundVo==null){
......@@ -50,12 +58,14 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
Integer refundAmount=orderRefundVo.getRefundAmount();
//临时处理
payAmount = payAmount/100000;
Map<String, Dictionary> dictionaryMap = dictionaryBiz.getAll4Map();
Integer demotion = Integer.valueOf(dictionaryMap.get(UNIVERSAL_PAY+ "_"+ PAY_DEMOTION).getDetail());
payAmount = payAmount/demotion;
if(payAmount <= 0) {
payAmount = 1;
}
refundAmount = refundAmount/100000;
refundAmount = refundAmount/demotion;
if(refundAmount <= 0) {
refundAmount = 1;
}
......
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;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.WebMvcConfigurer;
......@@ -51,4 +53,13 @@ public class WebConfiguration implements WebMvcConfigurer {
Collections.addAll(list, urls);
return list;
}
/* @Bean(name = "customTaskExecutor")
TaskExecutor getTaskExecutor(){
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(5);// 线程池维护线程的最少数量
threadPoolTaskExecutor.setMaxPoolSize(10);// 线程池维护线程的最大数量
threadPoolTaskExecutor.setQueueCapacity(50);// 缓存队列
return threadPoolTaskExecutor;
}*/
}
package com.xxfc.platform.universal.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.universal.biz.DictionaryBiz;
import com.xxfc.platform.universal.entity.Dictionary;
......@@ -54,4 +55,12 @@ public class DictionaryController {
public ObjectRestResponse<Map<String, Dictionary>> getAll4Map() {
return ObjectRestResponse.succ(dictionaryBiz.getAll4Map());
}
@GetMapping(value = "/app/unauth/clearCache")
@ApiOperation(value = "清除缓存")
@IgnoreUserToken
public ObjectRestResponse clearCache() {
dictionaryBiz.clear();
return ObjectRestResponse.succ();
}
}
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