Commit 1faaf47b authored by hanfeng's avatar hanfeng

解决冲突

parents 77c0cfca dc1a1ddf
package com.github.wxiaoqi.security.common.util; package com.github.wxiaoqi.security.common.util;
import java.util.UUID; import java.util.*;
/** /**
* Created by ace on 2017/9/27. * Created by ace on 2017/9/27.
...@@ -35,13 +35,40 @@ public class UUIDUtils { ...@@ -35,13 +35,40 @@ public class UUIDUtils {
public static String genCodes(int length) { public static String genCodes(int length) {
StringBuffer shortBuffer = new StringBuffer(); StringBuffer shortBuffer = new StringBuffer();
String uuid = UUID.randomUUID().toString().replace("-", ""); String uuid = UUID.randomUUID().toString().replace("-", "");
//System.out.println(uuid);
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
String str = uuid.substring(i * 4, i * 4 + 4); String str = uuid.substring(i * 4, i * 4 + 4);
int x = Integer.parseInt(str, 16); int x = Integer.parseInt(str, 16);
shortBuffer.append(chars1[x % 0x3E]); // chars1[x % 0x3B]chars[x % 0x3E]
shortBuffer.append(chars1[x % 0x3B]);
} }
return shortBuffer.toString(); return shortBuffer.toString();
} }
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
for(int i = 0; i < 100000000; i++) {
//System.out.println(UUIDUtils.genCodes(6));
String key = UUIDUtils.genCodes(8);
if(null == map.get(key)) {
map.put(key, 1);
}else {
System.out.println("重复"+ key+ ":"+ i);
map.put(key, map.get(key) + 1);
}
}
int flag = 0;
Set<Map.Entry<String, Integer>> list = map.entrySet();
for(Map.Entry<String, Integer> e : list) {
if(e.getValue() > 1) {
flag++;
System.out.println(e.getKey()+ ":"+ e.getValue());
}
}
System.out.println("flag : "+ flag);
}
} }
...@@ -61,6 +61,35 @@ public class SystemConfig { ...@@ -61,6 +61,35 @@ public class SystemConfig {
// 存放退款证书目录 // 存放退款证书目录
public static String APICLIENT_CERT = SystemProperty.getConfig("APICLIENT_CERT"); public static String APICLIENT_CERT = SystemProperty.getConfig("APICLIENT_CERT");
/**
* 支付宝支付相关配置
*/
public static final String ALIPAY_APPID = SystemProperty.getConfig("ALIPAY_APPID");
public static final String ALIPAY_PID = SystemProperty.getConfig("ALIPAY_PID");
public static final String ALIPAY_PUBLIC_KEY = SystemProperty.getConfig("ALIPAY_PUBLIC_KEY");
public static final String ALIPAY_ACOUNT = SystemProperty.getConfig("ALIPAY_ACOUNT");
public static final String ALIPAY_PRIVATE_KEY = SystemProperty.getConfig("ALIPAY_PRIVATE_KEY");
/**
* 交易创建,等待买家付款
*/
public static final String ALIPAY_WAIT_BUYER_PAY = "WAIT_BUYER_PAY";
/**
* 未付款交易超时关闭,或支付完成后全额退款
*/
public static final String ALIPAY_TRADE_CLOSED = "TRADE_CLOSED";
/**
* 交易支付成功
*/
public static final String ALIPAY_TRADE_SUCCESS = "TRADE_SUCCESS";
/**
* 交易结束,不可退款
*/
public static final String ALIPAY_TRADE_FINISHED = "TRADE_FINISHED";
public static final String ALIPAY_PAY_BASE_URL = "https://openapi.alipay.com";
public static final String ALIPAY = "alipay";
public static final String WXPAY = "wxpay";
} }
...@@ -35,3 +35,10 @@ APP_TRADE_TYPE=APP ...@@ -35,3 +35,10 @@ APP_TRADE_TYPE=APP
weixinHost=xxtest.upyuns.com weixinHost=xxtest.upyuns.com
#证书存放目录 #证书存放目录
APICLIENT_CERT=D:\\cert\\1514583081_20181017_cert.p12 APICLIENT_CERT=D:\\cert\\1514583081_20181017_cert.p12
#支付宝配置
ALIPAY_APPID=2019070965781964
ALIPAY_PID=2088531634846583
ALIPAY_PUBLIC_KEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj/EMaAD2iJP3I5M0g6pssDDe3RxF5I3ECM/Kz/btM0RiW2g5oRrHSjtGuos9l1QhQAY0SrVqa2eZdPKUB3ZqJdimQiXr3dbiMvG9UCs8vVUcrtCHCBjDllKQLiYzboxE6JLXyfII5tIXbFKiGyiEyXQnffUhQ9uGyT2EGWGecz6PLIjDdbwpxuzF2gIUzV3bPxb+0axejBxJ/3zKnWrsbyq2nvs8XrzrR2CEggNqgqsKzaacCL1yZjXzQRseSnCMtgSxR5W5afbdY0zqbUlLHUrUZ8ycCRC0ECuI9HyTbuqtdWHEZH7vIH44wEQWZPDRhMfMZvzmPUgpTWZLv5BtaQIDAQAB
ALIPAY_ACOUNT=xxfc810@163.com
ALIPAY_PRIVATE_KEY=MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC3bANag6my6pjHWqwnSCffRonvOXE6uQgNNb+V23PV55zfcuC+jIgl9BRrIf4tax5f2itfDmlOdAX6mK8WJ620SHg777Q2KlgNTa25ta3xiEfgkb01SX9VyiaLPpP2TEo5LhhRcT+cUomIufQbVbm/jS8mRQ0qBoofbMfr7n9fBSiVDx/QX07qcJTc/MGCy79H5gUiy2fTOEMhTuNtPkoU3az7jXMQ5U/33ILFAJzPCMNJvQnCYxs/y5loxxHdVqV8FnuCWGEWNViuuBtFRVRNXkrs/x99nF0V5/FHnOZzdM3SWrKCpA/52G5QQrbhZXUhMyCs9stXvH+iVUC1JJ9DAgMBAAECggEAOGRf/5MdOGHCCQCKjyUzBQVV4RPDCS/cFtughH1M9sXXyCc0i8D/FtQc9vcjg2k8lHGqBfaTT8iCEhKhOemHETd6p8rBmCmamrR4JfGCghDJMHT+PATVvlWBViwuJ3o7E6tlVJzB1tjVahDpyQGpMwhAJ77xFiueiZzTNmlEBb02ByCG95vkBV7NQT8yO9/1i3eq/tMoY7FfJP5O4LQ41RmqU9TVaAnTfuE6gs5hJboNGbmSMs2w2M0tldibmWcsQsFFPLwbUz042czSVb9J7lsGJjCtsaBeUiJ15y66W9D3587JJar9p+EyA2LNbolgrrNi2AA9KU5wEW2w8XyoOQKBgQDZamXDQZK3N5E46Hp/79o0Q99jqj9sL/HCYB4+Z8dG/Mgs43HHpgd+gHVeSOgxXS7RxsLyjCsM97ysWk7sbafvqtsnYmPU2MzumykVVpgWO6dpBcwmf2Ygk2i2W77oEqIi2IUmzkvDhw9C8A8/oh+IuoyRouPGRHpykAF+uXKVhwKBgQDX+TfQDDPniSnA9kTlW5I44glRgogA4xJtAYLtEr2fH9Pys+lkOyRqQH5wbJVj27jzJ0lffNyyMxgbZ8KRiH+3qRa8wNazwwXlXmj4DQWZedkULOpgMdU4EbbkTQRU3onEpMAZhAmVvAV1KTozs4RKi+1fFZ9V6ZOtmvapNJuXZQKBgQC7Xb0rQ3SMHwAxGfCQFwVma2O2AX883iisCaemwkrze1+Lh8uDcisdMtlzEsO/3v09XdydqHxlZY6cvgssJ+hFXGoXi+xa/yfFLcR/FixlZK2Gja99MeeyhTcFiRWB7KT8ALrnUXvrmpZlanrJrQ8eBx6jV8ySDmu0FTSkoG8GOwKBgE5toxX7CHJBPhdjlvtPOJdNhiLCaw8fZpaNIPVkg9WgIkCVkuCiFYQ8LW44EDv2E4DBOITje+V+Zne1Q1PEJNUWIzqiMJWQ8bgsg6PoXqswM2N/OBF8pzg4PplDWppTQeZWCah6aVylrbmxIgCaZSUJEUchO/5f1xAJIR+rCgF9AoGBAKJVVbrKPWshQ4cTL6VzanowjpWCRUDR22Oz3nKIdRl1FX+DTXYE4Dwl38iiNHOJptS7VjU553BUZl7HxCmSBWUmtnV78NNnRKrFVUhQhIRYBjMn1W6MD0jlBkky6yXmXkPtlqU6vU19RzGrvv6fDdBf6v4AkD8kWXiH5j4XEiQS
...@@ -22,13 +22,10 @@ import java.io.Serializable; ...@@ -22,13 +22,10 @@ import java.io.Serializable;
@Table(name = "base_user_member_export") @Table(name = "base_user_member_export")
public class BaseUserMemberExportDTO implements Serializable { public class BaseUserMemberExportDTO implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Integer id;
private String username; private String username;
private Integer memberLevel; private Integer memberLevel;
private Integer totalNumber; private Integer totalNumber;
private Integer rentFreeDays; private Integer rentFreeDays;
private Integer discount; private Integer discount;
private Integer status; private Integer status;
private Integer isDel;
} }
...@@ -53,6 +53,10 @@ public class UserMemberDTO { ...@@ -53,6 +53,10 @@ public class UserMemberDTO {
@ApiModelProperty(value = "折扣") @ApiModelProperty(value = "折扣")
private Integer discount; private Integer discount;
//购买次数
@ApiModelProperty(value = "购买次数")
private Integer buyCount;
......
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-09 10:00:42
*/
@Data
@Table(name = "app_user_position")
public class AppUserPosition implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
/**
* 角色名称
*/
@Column(name = "name")
@ApiModelProperty(value = "角色名称")
private String name;
/**
* 等级
*/
@Column(name = "level")
@ApiModelProperty(value = "等级")
private Integer level;
/**
* 每年赠送的天数
*/
@Column(name = "number")
@ApiModelProperty(value = "每年赠送的天数")
private Integer number;
/**
* 提成比例
*/
@Column(name = "extract")
@ApiModelProperty(value = "提成比例")
private Integer extract;
/**
* 状态:0-正常;1-禁用
*/
@Column(name = "status")
@ApiModelProperty(value = "状态:0-正常;1-禁用")
private Integer status;
/**
* 创建时间
*/
@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;
}
...@@ -46,6 +46,9 @@ public class AppUserDTO { ...@@ -46,6 +46,9 @@ public class AppUserDTO {
@ApiModelProperty(value = "用户职位") @ApiModelProperty(value = "用户职位")
private Integer positionId; private Integer positionId;
@ApiModelProperty(value = "用户职位名称")
private String positionName;
@ApiModelProperty(value = "用户来源:0-自来,1-用户邀请") @ApiModelProperty(value = "用户来源:0-自来,1-用户邀请")
private Integer source; private Integer source;
...@@ -69,6 +72,8 @@ public class AppUserDTO { ...@@ -69,6 +72,8 @@ public class AppUserDTO {
private Integer lockDays; private Integer lockDays;
private Integer discount; private Integer discount;
private Integer memberLevel; private Integer memberLevel;
//图标
private String icon;
private Integer memberNo; private Integer memberNo;
private Long cardLeave; private Long cardLeave;
private Integer isBind; private Integer isBind;
......
...@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.common.constant.UserConstant; ...@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.common.constant.UserConstant;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
...@@ -30,6 +31,7 @@ import java.util.stream.Collectors; ...@@ -30,6 +31,7 @@ import java.util.stream.Collectors;
public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> { public class AppUserLoginBiz extends BaseBiz<AppUserLoginMapper, AppUserLogin> {
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
@Override @Override
public void insertSelective(AppUserLogin entity) { public void insertSelective(AppUserLogin entity) {
String password = new BCryptPasswordEncoder(UserConstant.PW_ENCORDER_SALT).encode(entity.getPassword()); String password = new BCryptPasswordEncoder(UserConstant.PW_ENCORDER_SALT).encode(entity.getPassword());
......
package com.github.wxiaoqi.security.admin.biz;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.entity.AppUserPosition;
import com.github.wxiaoqi.security.admin.mapper.AppUserPositionMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 用户身份职位表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-09 10:00:42
*/
@Service
public class AppUserPositionBiz extends BaseBiz<AppUserPositionMapper,AppUserPosition> {
}
\ No newline at end of file
...@@ -77,9 +77,13 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -77,9 +77,13 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
if(freeDays==null||freeDays==0){ if(freeDays==null||freeDays==0){
freeDays=totalNumber; freeDays=totalNumber;
} }
Integer buyCount=1;
if(userMemberDTO.getBuyCount()!=null){
buyCount=userMemberDTO.getBuyCount();
}
if(userMemberVo==null){ if(userMemberVo==null){
baseUserMember.setRentFreeDays(freeDays); baseUserMember.setRentFreeDays(freeDays);
baseUserMember.setBuyCount(1); baseUserMember.setBuyCount(buyCount);
insertSelective(baseUserMember); insertSelective(baseUserMember);
}else { }else {
Integer discount=userMemberVo.getDiscount()==null?0:userMemberVo.getDiscount(); Integer discount=userMemberVo.getDiscount()==null?0:userMemberVo.getDiscount();
...@@ -95,7 +99,7 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb ...@@ -95,7 +99,7 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper,BaseUserMemb
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()+buyCount);
baseUserMember.setTotalNumber(totalNumber); baseUserMember.setTotalNumber(totalNumber);
baseUserMember.setRentFreeDays(freeDays); baseUserMember.setRentFreeDays(freeDays);
getMyBiz().updateSelectiveById(baseUserMember); getMyBiz().updateSelectiveById(baseUserMember);
......
package com.github.wxiaoqi.security.admin.biz; package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDTO;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberExport; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberExport;
import com.github.wxiaoqi.security.admin.mapper.BaseUserMemberExportMapper; import com.github.wxiaoqi.security.admin.mapper.BaseUserMemberExportMapper;
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 lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
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.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -23,6 +27,7 @@ import java.util.stream.Collectors; ...@@ -23,6 +27,7 @@ import java.util.stream.Collectors;
* @data 2019/7/8 16:19 * @data 2019/7/8 16:19
*/ */
@Service @Service
@Transactional
@Slf4j @Slf4j
public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, BaseUserMemberExport> { public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, BaseUserMemberExport> {
...@@ -37,7 +42,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -37,7 +42,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED) @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public void importUserMember(List<String[]> userMemberData){ public int importUserMember(List<String[]> userMemberData){
List<BaseUserMemberExport> baseUserMemberExports = new ArrayList<>(); List<BaseUserMemberExport> baseUserMemberExports = new ArrayList<>();
List<Integer> levels = userMemberData.stream().map(x -> x[1]).map(Integer::valueOf).collect(Collectors.toList()); List<Integer> levels = userMemberData.stream().map(x -> x[1]).map(Integer::valueOf).collect(Collectors.toList());
...@@ -59,6 +64,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -59,6 +64,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
userMemberDTO.setDiscount(levelAndDisCountMap==null?0:(levelAndDisCountMap.get(Integer.valueOf(memberLevel))==null?0:levelAndDisCountMap.get(Integer.valueOf(memberLevel)))); userMemberDTO.setDiscount(levelAndDisCountMap==null?0:(levelAndDisCountMap.get(Integer.valueOf(memberLevel))==null?0:levelAndDisCountMap.get(Integer.valueOf(memberLevel))));
userMemberDTO.setTotalNumber(Integer.valueOf(totalNumber)); userMemberDTO.setTotalNumber(Integer.valueOf(totalNumber));
userMemberDTO.setRentFreeDays(Integer.valueOf(rentFreeDays)); userMemberDTO.setRentFreeDays(Integer.valueOf(rentFreeDays));
userMemberDTO.setIsBind(1);
try { try {
baseUserMemberBiz.updUserMemberByUserId(userMemberDTO); baseUserMemberBiz.updUserMemberByUserId(userMemberDTO);
} catch (Exception e) { } catch (Exception e) {
...@@ -84,10 +90,35 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -84,10 +90,35 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
} }
InsertBatch(baseUserMemberExports); InsertBatch(baseUserMemberExports);
return baseUserMemberExports.size();
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public void InsertBatch(List<BaseUserMemberExport> baseUserMemberExports) { public void InsertBatch(List<BaseUserMemberExport> baseUserMemberExports) {
mapper.insertList(baseUserMemberExports); mapper.insertList(baseUserMemberExports);
} }
public List<BaseUserMemberExportDTO> findUserMemberExportDataByPhoneAndHashEffective(String phone){
List<BaseUserMemberExportDTO> baseUserMemberExportDTOS = new ArrayList<>();
Example example = new Example(BaseUserMemberExport.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("username",phone);
criteria.andEqualTo("status",0);
List<BaseUserMemberExport> baseUserMemberExports = mapper.selectByExample(example);
if (CollectionUtils.isNotEmpty(baseUserMemberExports)){
BaseUserMemberExportDTO baseUserMemberExportDTO;
for (BaseUserMemberExport userMemberExport : baseUserMemberExports) {
baseUserMemberExportDTO = new BaseUserMemberExportDTO();
BeanUtils.copyProperties(userMemberExport,baseUserMemberExportDTO);
baseUserMemberExportDTOS.add(baseUserMemberExportDTO);
}
}
return baseUserMemberExportDTOS;
}
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public void updateUserMemberExportDataToLoseEfficacyByPhone(String phone){
mapper.updateUserMemberExportDataToLoseEfficacyByPhone(phone);
}
} }
...@@ -30,6 +30,16 @@ public class UserMemberLevelBiz extends BaseBiz<BaseUserMemberLevelMapper,BaseUs ...@@ -30,6 +30,16 @@ public class UserMemberLevelBiz extends BaseBiz<BaseUserMemberLevelMapper,BaseUs
return mapper.selectByExample(example); return mapper.selectByExample(example);
} }
public BaseUserMemberLevel getLevel(Integer level) {
Example example=new Example(BaseUserMemberLevel.class);
example.createCriteria().andEqualTo("isdel",0).andEqualTo("level",level);
List<BaseUserMemberLevel> list=mapper.selectByExample(example);
if (list.size()>0){
return list.get(0);
}
return null;
}
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED) @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public Map<Integer,Integer> getUserMemberLevelAndDisCountMapByLevels(List<Integer> levels){ public Map<Integer,Integer> getUserMemberLevelAndDisCountMapByLevels(List<Integer> levels){
List<BaseUserMemberLevel> baseUserMemberLevels = mapper.selectUserMembersLevelByLevels(levels); List<BaseUserMemberLevel> baseUserMemberLevels = mapper.selectUserMembersLevelByLevels(levels);
......
...@@ -15,4 +15,6 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> { ...@@ -15,4 +15,6 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> {
public AppUserVo getUserInfo(@Param("userId") Integer userId); public AppUserVo getUserInfo(@Param("userId") Integer userId);
List<AppUserManageVo> selectAppUserManage(AppUserManageDTO appUserManageDTO); List<AppUserManageVo> selectAppUserManage(AppUserManageDTO appUserManageDTO);
void updateUserMemberStatusByUserId(@Param("userId") Integer userId,@Param("status") Integer status);
} }
\ No newline at end of file
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserPosition;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户身份职位表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-09 10:00:42
*/
public interface AppUserPositionMapper extends Mapper<AppUserPosition> {
}
package com.github.wxiaoqi.security.admin.mapper; package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberExport; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberExport;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.special.InsertListMapper; import tk.mybatis.mapper.common.special.InsertListMapper;
...@@ -12,4 +13,6 @@ import tk.mybatis.mapper.common.special.InsertListMapper; ...@@ -12,4 +13,6 @@ import tk.mybatis.mapper.common.special.InsertListMapper;
*/ */
public interface BaseUserMemberExportMapper extends Mapper<BaseUserMemberExport>, InsertListMapper<BaseUserMemberExport> { public interface BaseUserMemberExportMapper extends Mapper<BaseUserMemberExport>, InsertListMapper<BaseUserMemberExport> {
void updateUserMemberExportDataToLoseEfficacyByPhone(@Param("phone") String phone);
} }
package com.github.wxiaoqi.security.admin.rest; package com.github.wxiaoqi.security.admin.rest;
import com.ace.cache.annotation.Cache; import com.ace.cache.annotation.Cache;
import com.github.wxiaoqi.security.admin.biz.AppUserBiz; import com.github.wxiaoqi.security.admin.biz.*;
import com.github.wxiaoqi.security.admin.biz.AppUserDetailBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserLoginBiz;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberBiz;
import com.github.wxiaoqi.security.admin.entity.*; import com.github.wxiaoqi.security.admin.entity.*;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserGroups; import com.github.wxiaoqi.security.admin.vo.AppUserGroups;
...@@ -50,6 +47,12 @@ public class AppUserController extends CommonBaseController { ...@@ -50,6 +47,12 @@ public class AppUserController extends CommonBaseController {
@Autowired @Autowired
private BaseUserMemberBiz userMemberBiz; private BaseUserMemberBiz userMemberBiz;
@Autowired
AppUserPositionBiz positionBiz;
@Autowired
private UserMemberLevelBiz userMemberLevelBiz;
@GetMapping("page") @GetMapping("page")
public TableResultResponse list(@RequestParam Map<String, Object> params) { public TableResultResponse list(@RequestParam Map<String, Object> params) {
Query query = new Query(params); Query query = new Query(params);
...@@ -119,13 +122,24 @@ public class AppUserController extends CommonBaseController { ...@@ -119,13 +122,24 @@ public class AppUserController extends CommonBaseController {
throw new Exception(); throw new Exception();
} }
Integer id= userVo.getId(); Integer id= userVo.getId();
Integer positionId=userVo.getPositionId();
BeanUtils.copyProperties(userDTO,userVo); BeanUtils.copyProperties(userDTO,userVo);
if(userVo.getIsMember()!=null&&userVo.getIsMember()>0){ if(userVo.getIsMember()!=null&&userVo.getIsMember()>0){
//获取用户会员信息 //获取用户会员信息
UserMemberVo memberVo=userMemberBiz.getMemberInfoByUserId(userid); UserMemberVo memberVo=userMemberBiz.getMemberInfoByUserId(userid);
if(memberVo!=null){ if(memberVo!=null){
BeanUtils.copyProperties(userDTO,memberVo); BeanUtils.copyProperties(userDTO,memberVo);
Integer level=memberVo.getMemberLevel();
BaseUserMemberLevel memberLevel=userMemberLevelBiz.getLevel(level);
if (memberLevel!=null){
String icon=memberLevel.getIcon();
userDTO.setIcon(icon);
}
}
} }
AppUserPosition userPosition=positionBiz.selectById(positionId);
if (userPosition!=null&&userPosition.getLevel()>0){
userDTO.setPositionName(userPosition.getName());
} }
userDTO.setId(id); userDTO.setId(id);
return ObjectRestResponse.succ(userDTO); return ObjectRestResponse.succ(userDTO);
......
package com.github.wxiaoqi.security.admin.rest; package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.AppUserDetailBiz; import com.github.wxiaoqi.security.admin.biz.*;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberBiz; import com.github.wxiaoqi.security.admin.entity.*;
import com.github.wxiaoqi.security.admin.biz.MenuBiz;
import com.github.wxiaoqi.security.admin.biz.UserBiz;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.Group;
import com.github.wxiaoqi.security.admin.entity.Menu;
import com.github.wxiaoqi.security.admin.entity.User;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.rpc.service.PermissionService; import com.github.wxiaoqi.security.admin.rpc.service.PermissionService;
import com.github.wxiaoqi.security.admin.vo.AppUserVo; import com.github.wxiaoqi.security.admin.vo.AppUserVo;
...@@ -54,6 +48,9 @@ public class PublicController { ...@@ -54,6 +48,9 @@ public class PublicController {
@Autowired @Autowired
private UserAuthUtil userAuthUtil; private UserAuthUtil userAuthUtil;
@Autowired
AppUserPositionBiz positionBiz;
@RequestMapping(value = "/userinfo-by-token", method = RequestMethod.GET) @RequestMapping(value = "/userinfo-by-token", method = RequestMethod.GET)
public @ResponseBody public @ResponseBody
ObjectRestResponse userinfoByToken(String token) throws Exception { ObjectRestResponse userinfoByToken(String token) throws Exception {
...@@ -82,6 +79,8 @@ public class PublicController { ...@@ -82,6 +79,8 @@ public class PublicController {
if (userVo == null) { if (userVo == null) {
throw new BaseException(ResultCode.NOTEXIST_CODE); throw new BaseException(ResultCode.NOTEXIST_CODE);
} }
Integer id= userVo.getId();
Integer positionId=userVo.getPositionId();
BeanUtils.copyProperties(userDTO,userVo); BeanUtils.copyProperties(userDTO,userVo);
if(userVo.getIsMember()!=null&&userVo.getIsMember()>0){ if(userVo.getIsMember()!=null&&userVo.getIsMember()>0){
//获取用户会员信息 //获取用户会员信息
...@@ -90,6 +89,11 @@ public class PublicController { ...@@ -90,6 +89,11 @@ public class PublicController {
BeanUtils.copyProperties(userDTO,memberVo); BeanUtils.copyProperties(userDTO,memberVo);
} }
} }
AppUserPosition userPosition=positionBiz.selectById(positionId);
if (userPosition!=null&&userPosition.getLevel()>0){
userDTO.setPositionName(userPosition.getName());
}
userDTO.setId(id);
return new ObjectRestResponse<AppUserDetail>().rel(true).data(userDTO); return new ObjectRestResponse<AppUserDetail>().rel(true).data(userDTO);
} }
......
package com.github.wxiaoqi.security.admin.rest; package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.AdminBootstrap;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberBiz; import com.github.wxiaoqi.security.admin.biz.BaseUserMemberBiz;
import com.github.wxiaoqi.security.admin.biz.BaseUserMemberExportBiz; import com.github.wxiaoqi.security.admin.biz.BaseUserMemberExportBiz;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
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.excel.ExcelImport; import com.github.wxiaoqi.security.common.util.excel.ExcelImport;
import com.xxfc.platform.vehicle.common.RestResponse; import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List; import java.util.List;
/** /**
...@@ -73,7 +78,29 @@ public class UserMemberController { ...@@ -73,7 +78,29 @@ public class UserMemberController {
} }
} }
userMemberData.remove(0); userMemberData.remove(0);
baseUserMemberExportBiz.importUserMember(userMemberData); try {
return ObjectRestResponse.succ(); int effectSize = baseUserMemberExportBiz.importUserMember(userMemberData);
return ObjectRestResponse.succ(effectSize);
}catch (BaseException ex){
return ObjectRestResponse.createDefaultFail();
}
}
@GetMapping("/user/excel_model/dowload")
public ResponseEntity<byte[]> dowloadUserMemberExcelModel(HttpServletResponse response){
// 重置response
response.reset();
//设置http头信息的内容
response.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment;filename=usermember.xlsx");
InputStream inputStream = AdminBootstrap.class.getClassLoader().getResourceAsStream("file/usermember.xlsx");
try {
byte[] bytes = IOUtils.toByteArray(inputStream);
return ResponseEntity.ok(bytes);
} catch (IOException e) {
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
} }
} }
...@@ -8,6 +8,8 @@ import com.github.wxiaoqi.security.admin.biz.AppUserLoginBiz; ...@@ -8,6 +8,8 @@ import com.github.wxiaoqi.security.admin.biz.AppUserLoginBiz;
import com.github.wxiaoqi.security.admin.biz.ElementBiz; import com.github.wxiaoqi.security.admin.biz.ElementBiz;
import com.github.wxiaoqi.security.admin.constant.RedisKey; import com.github.wxiaoqi.security.admin.constant.RedisKey;
import com.github.wxiaoqi.security.admin.constant.enumerate.UserSourceEnum; import com.github.wxiaoqi.security.admin.constant.enumerate.UserSourceEnum;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberExportDTO;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.*; import com.github.wxiaoqi.security.admin.entity.*;
import com.github.wxiaoqi.security.admin.vo.AppUserVo; import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo; import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo;
...@@ -26,19 +28,19 @@ import com.xxfc.platform.universal.dto.RegionDTO; ...@@ -26,19 +28,19 @@ import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.feign.RegionFeign; import com.xxfc.platform.universal.feign.RegionFeign;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -49,6 +51,7 @@ import java.util.concurrent.TimeUnit; ...@@ -49,6 +51,7 @@ import java.util.concurrent.TimeUnit;
* @author keliii * @author keliii
*/ */
@Service @Service
@Transactional
@Slf4j @Slf4j
public class AppPermissionService { public class AppPermissionService {
...@@ -84,7 +87,11 @@ public class AppPermissionService { ...@@ -84,7 +87,11 @@ public class AppPermissionService {
@Autowired @Autowired
private RestTemplate restTemplate; private RestTemplate restTemplate;
@Autowired
private BaseUserMemberExportBiz baseUserMemberExportBiz;
@Autowired
private BaseUserMemberBiz baseUserMemberBiz;
public AppUserInfo validate(String username, String password) { public AppUserInfo validate(String username, String password) {
...@@ -194,7 +201,7 @@ public class AppPermissionService { ...@@ -194,7 +201,7 @@ public class AppPermissionService {
* @param headimgurl * @param headimgurl
* @param mobilecode * @param mobilecode
*/ */
@Transactional @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public JSONObject register(String username, String password, String headimgurl, public JSONObject register(String username, String password, String headimgurl,
String nickname, String mobilecode, String openId, String unionid, Integer type) { String nickname, String mobilecode, String openId, String unionid, Integer type) {
// 判断参数和验证码 // 判断参数和验证码
...@@ -249,31 +256,33 @@ public class AppPermissionService { ...@@ -249,31 +256,33 @@ public class AppPermissionService {
rsUserDetail.setIsdel(0); rsUserDetail.setIsdel(0);
rsUserDetail.setCrtHost(getIp()); rsUserDetail.setCrtHost(getIp());
setCreateIPInfo(rsUserDetail); setCreateIPInfo(rsUserDetail);
//生成邀请码 //生成邀请码 长度改为8 不然重复率太高
rsUserDetail.setCode(UUIDUtils.genCodes(6)); rsUserDetail.setCode(UUIDUtils.genCodes(8));
appUserDetailBiz.insertSelective(rsUserDetail); appUserDetailBiz.insertSelective(rsUserDetail);
log.error("注册:新增用户详情: " + userid); log.error("注册:新增用户详情: " + userid);
//临时会员绑定
insertUserMemberByUserIdAndPhone(userid, username);
//自动登录获取优惠卷 //自动登录获取优惠卷
authCoupn(userid); authCoupn(userid);
// 登录结果要做做统一处理 // 登录结果要做做统一处理
JSONObject data = autoLogin(userid, username, headimgurl, nickname); JSONObject data = autoLogin(userid, username, headimgurl, nickname);
// 到im注册,获取返回结果 // 到im注册,获取返回结果
Map<String,Object> map=registerIm(username,appUserLogin.getPassword(),nickname); Map<String, Object> map = registerIm(username, appUserLogin.getPassword(), nickname);
if(map!=null){ if (map != null) {
Integer imUserId=Integer.parseInt(map.get("userId").toString()); Integer imUserId = Integer.parseInt(map.get("userId").toString());
//String access_token=map.get("access_token").toString(); //String access_token=map.get("access_token").toString();
String imPassword=map.get("password").toString(); String imPassword = map.get("password").toString();
if(imUserId!=null&&imUserId>0&&StringUtils.isNotBlank(imPassword)){ if (imUserId != null && imUserId > 0 && StringUtils.isNotBlank(imPassword)) {
AppUserLogin userLogin = new AppUserLogin(); AppUserLogin userLogin = new AppUserLogin();
userLogin.setId(userid); userLogin.setId(userid);
userLogin.setImPassword(imPassword); userLogin.setImPassword(imPassword);
userLogin.setImUserid(imUserId); userLogin.setImUserid(imUserId);
userLogin.setUsername(username); userLogin.setUsername(username);
appUserLoginBiz.updateSelectiveById(userLogin); appUserLoginBiz.updateSelectiveById(userLogin);
log.info(username+"----userLogin updateSelectiveById---username====="+username+"----imPassword===="+imPassword); log.info(username + "----userLogin updateSelectiveById---username=====" + username + "----imPassword====" + imPassword);
} }
//data.put("imToken",access_token); //data.put("imToken",access_token);
data.put("imUserId",imUserId); data.put("imUserId", imUserId);
} }
if (data != null) { if (data != null) {
return JsonResultUtil.createSuccessResultWithObj(data); return JsonResultUtil.createSuccessResultWithObj(data);
...@@ -309,12 +318,12 @@ public class AppPermissionService { ...@@ -309,12 +318,12 @@ public class AppPermissionService {
//userRedisTemplate.opsForValue().set("imtoken_" + userid,imtoken_,SystemConfig.REDISTOKENTIME, TimeUnit.SECONDS); //userRedisTemplate.opsForValue().set("imtoken_" + userid,imtoken_,SystemConfig.REDISTOKENTIME, TimeUnit.SECONDS);
// 返回结果 // 返回结果
// data.put("token", token); // data.put("token", token);
data.put("username", StringUtils.isNotEmpty(username)?username:userVo.getUsername()); data.put("username", StringUtils.isNotEmpty(username) ? username : userVo.getUsername());
data.put("userId", userid); data.put("userId", userid);
data.put("imUserId", userVo.getImUserid()); data.put("imUserId", userVo.getImUserid());
//更新登录时间 和 ip //更新登录时间 和 ip
String clientIp = getIp(); String clientIp = getIp();
appUserLoginBiz.updateLoginInfo(userid,clientIp); appUserLoginBiz.updateLoginInfo(userid, clientIp);
} }
...@@ -401,6 +410,7 @@ public class AppPermissionService { ...@@ -401,6 +410,7 @@ public class AppPermissionService {
userDetail.setCrtHost(getIp()); userDetail.setCrtHost(getIp());
setCreateIPInfo(userDetail); setCreateIPInfo(userDetail);
appUserDetailBiz.insertSelective(userDetail); appUserDetailBiz.insertSelective(userDetail);
} /*else { } /*else {
userDetail.setId(userVo.getId()); userDetail.setId(userVo.getId());
userDetail.setHeadimgurl(headimgurl); userDetail.setHeadimgurl(headimgurl);
...@@ -599,9 +609,9 @@ public class AppPermissionService { ...@@ -599,9 +609,9 @@ public class AppPermissionService {
//实名认证 //实名认证
@Transactional @Transactional
public ObjectRestResponse upAuthentication(Integer userid, String name,String idNumber, Integer status) { public ObjectRestResponse upAuthentication(Integer userid, String name, String idNumber, Integer status) {
log.error("userid===="+userid+"-----name===="+name+"----idNumber==="+idNumber+"---status==="+status); log.error("userid====" + userid + "-----name====" + name + "----idNumber===" + idNumber + "---status===" + status);
if (userid == null || userid == 0 || (status == 1 && StringUtils.isBlank(idNumber)&& StringUtils.isBlank(name))) { if (userid == null || userid == 0 || (status == 1 && StringUtils.isBlank(idNumber) && StringUtils.isBlank(name))) {
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空"); return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
} }
try { try {
...@@ -613,16 +623,16 @@ public class AppPermissionService { ...@@ -613,16 +623,16 @@ public class AppPermissionService {
return ObjectRestResponse.createFailedResultWithObj(ResultCode.EXIST_CODE, "用户已认证", userVo.getIdNumber()); return ObjectRestResponse.createFailedResultWithObj(ResultCode.EXIST_CODE, "用户已认证", userVo.getIdNumber());
} }
if (status == 1) { if (status == 1) {
String username=userVo.getUsername(); String username = userVo.getUsername();
AppUserLogin user = new AppUserLogin(); AppUserLogin user = new AppUserLogin();
user.setId(userid); user.setId(userid);
user.setUsername(username); user.setUsername(username);
user.setIdNumber(idNumber); user.setIdNumber(idNumber);
user.setCertificationStatus(1); user.setCertificationStatus(1);
appUserLoginBiz.updateSelectiveById(user); appUserLoginBiz.updateSelectiveById(user);
if(StringUtils.isBlank(userVo.getRealname())){ if (StringUtils.isBlank(userVo.getRealname())) {
Integer id=userVo.getId(); Integer id = userVo.getId();
userVo=new AppUserVo(); userVo = new AppUserVo();
userVo.setId(id); userVo.setId(id);
userVo.setUserid(userid); userVo.setUserid(userid);
userVo.setRealname(name); userVo.setRealname(name);
...@@ -640,7 +650,7 @@ public class AppPermissionService { ...@@ -640,7 +650,7 @@ public class AppPermissionService {
//注册im //注册im
public Map<String, Object> registerIm(String username, String password, String nickname) { public Map<String, Object> registerIm(String username, String password, String nickname) {
log.error("------注册registerIm----username====="+username+"-----password==="+password+"---nickname==="+nickname); log.error("------注册registerIm----username=====" + username + "-----password===" + password + "---nickname===" + nickname);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("telephone", username); map.put("telephone", username);
map.put("password", password); map.put("password", password);
...@@ -649,7 +659,7 @@ public class AppPermissionService { ...@@ -649,7 +659,7 @@ public class AppPermissionService {
log.error("registerIm->response:{}", response); log.error("registerIm->response:{}", response);
if (response.getStatus() == ResultCode.SUCCESS_CODE) { if (response.getStatus() == ResultCode.SUCCESS_CODE) {
String result = response.getMessage(); String result = response.getMessage();
log.error("------im注册----result======"+result); log.error("------im注册----result======" + result);
if (StringUtils.isNotBlank(result)) { if (StringUtils.isNotBlank(result)) {
JSONObject object = JSONObject.parseObject(result); JSONObject object = JSONObject.parseObject(result);
password = object.getString("password"); password = object.getString("password");
...@@ -657,7 +667,7 @@ public class AppPermissionService { ...@@ -657,7 +667,7 @@ public class AppPermissionService {
map.put("password", password); map.put("password", password);
} }
JSONObject data = object.getJSONObject("data"); JSONObject data = object.getJSONObject("data");
log.error("------im注册----data======"+data); log.error("------im注册----data======" + data);
if (data != null) { if (data != null) {
map.put("userId", data.getString("userId")); map.put("userId", data.getString("userId"));
// map.put("access_token", data.getString("access_token")); // map.put("access_token", data.getString("access_token"));
...@@ -674,7 +684,7 @@ public class AppPermissionService { ...@@ -674,7 +684,7 @@ public class AppPermissionService {
//登录im //登录im
public String loginIm(String username, String password, Integer userId) { public String loginIm(String username, String password, Integer userId) {
log.error("------登录loginIm----username====="+username+"-----password==="+password+"---userId==="+userId); log.error("------登录loginIm----username=====" + username + "-----password===" + password + "---userId===" + userId);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("telephone", username); map.put("telephone", username);
map.put("password", password); map.put("password", password);
...@@ -684,33 +694,40 @@ public class AppPermissionService { ...@@ -684,33 +694,40 @@ public class AppPermissionService {
String access_token = ""; String access_token = "";
if (response.getStatus() == ResultCode.SUCCESS_CODE) { if (response.getStatus() == ResultCode.SUCCESS_CODE) {
String result = response.getMessage(); String result = response.getMessage();
log.error("------im登录----result======"+result); log.error("------im登录----result======" + result);
if (StringUtils.isNotBlank(result)) { if (StringUtils.isNotBlank(result)) {
JSONObject object = JSONObject.parseObject(result); JSONObject object = JSONObject.parseObject(result);
JSONObject data = object.getJSONObject("data"); JSONObject data = object.getJSONObject("data");
log.error("------im登录----data======"+data); log.error("------im登录----data======" + data);
if (data != null) { if (data != null) {
access_token = data.getString("access_token"); access_token = data.getString("access_token");
} }
} }
} }
log.error("------im登录----access_token======"+access_token); log.error("------im登录----access_token======" + access_token);
return access_token; return access_token;
} }
//自动领取新人优惠卷 //自动领取新人优惠卷
public String authCoupn(Integer userId){ public String authCoupn(Integer userId) {
try {
return activityFeign.led(userId); return activityFeign.led(userId);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} }
/** /**
* 通过用户id登录*** Unbelievable! ! ! * 通过用户id登录*** Unbelievable! ! !
*
* @param uid * @param uid
* @return * @return
*/ */
public JSONObject appletLoginByUserId(Integer uid) { public JSONObject appletLoginByUserId(Integer uid) {
JSONObject data = autoLogin(uid, null, null, null); JSONObject data = autoLogin(uid, null, null, null);
if (data.getDate("userId")!=null){ if (data.getDate("userId") != null) {
return JsonResultUtil.createSuccessResultWithObj(data); return JsonResultUtil.createSuccessResultWithObj(data);
} }
return JsonResultUtil.createFailedResult(ResultCode.NOTEXIST_CODE, "用户不存在"); return JsonResultUtil.createFailedResult(ResultCode.NOTEXIST_CODE, "用户不存在");
...@@ -726,7 +743,7 @@ public class AppPermissionService { ...@@ -726,7 +743,7 @@ public class AppPermissionService {
* @param nickname * @param nickname
*/ */
@Transactional @Transactional
public JSONObject applyRegister(String username, String password, String headimgurl,String nickname,Integer small_id) { public JSONObject applyRegister(String username, String password, String headimgurl, String nickname, Integer small_id) {
// 判断参数 // 判断参数
if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) { if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
return JsonResultUtil.createFailedResult(ResultCode.NULL_CODE, "参数为空"); return JsonResultUtil.createFailedResult(ResultCode.NULL_CODE, "参数为空");
...@@ -757,37 +774,39 @@ public class AppPermissionService { ...@@ -757,37 +774,39 @@ public class AppPermissionService {
rsUserDetail.setCreatetime(now); rsUserDetail.setCreatetime(now);
rsUserDetail.setUpdatetime(now); rsUserDetail.setUpdatetime(now);
rsUserDetail.setIsdel(0); rsUserDetail.setIsdel(0);
//生成邀请码 //生成邀请码 长度改为8 不然重复率太高
rsUserDetail.setCode(UUIDUtils.genCodes(6)); rsUserDetail.setCode(UUIDUtils.genCodes(8));
//设置来源 //设置来源
rsUserDetail.setChannel(UserSourceEnum.APPLET.getCode()); rsUserDetail.setChannel(UserSourceEnum.APPLET.getCode());
rsUserDetail.setCrtHost(getIp()); rsUserDetail.setCrtHost(getIp());
setCreateIPInfo(rsUserDetail); setCreateIPInfo(rsUserDetail);
appUserDetailBiz.insertSelective(rsUserDetail); appUserDetailBiz.insertSelective(rsUserDetail);
log.error("注册:新增用户详情: " + userid); log.error("注册:新增用户详情: " + userid);
//临时会员绑定
insertUserMemberByUserIdAndPhone(userid, username);
//上线绑定 //上线绑定
relationBiz.bindByUserId(userid,small_id); relationBiz.bindByUserId(userid, small_id);
//发送短信通知用户 //发送短信通知用户
thirdFeign.sendCode(username,password,SystemConfig.TEMPLATECODE); thirdFeign.sendCode(username, password, SystemConfig.TEMPLATECODE);
// 登录结果要做做统一处理 // 登录结果要做做统一处理
JSONObject data = autoLogin(userid, username, headimgurl, nickname); JSONObject data = autoLogin(userid, username, headimgurl, nickname);
// 到im注册,获取返回结果 // 到im注册,获取返回结果
Map<String,Object> map=registerIm(username,appUserLogin.getPassword(),nickname); Map<String, Object> map = registerIm(username, appUserLogin.getPassword(), nickname);
if(map!=null){ if (map != null) {
Integer imUserId=Integer.parseInt(map.get("userId").toString()); Integer imUserId = Integer.parseInt(map.get("userId").toString());
//String access_token=map.get("access_token").toString(); //String access_token=map.get("access_token").toString();
String imPassword=map.get("password").toString(); String imPassword = map.get("password").toString();
if(imUserId!=null&&imUserId>0&&StringUtils.isNotBlank(imPassword)){ if (imUserId != null && imUserId > 0 && StringUtils.isNotBlank(imPassword)) {
AppUserLogin userLogin = new AppUserLogin(); AppUserLogin userLogin = new AppUserLogin();
userLogin.setId(userid); userLogin.setId(userid);
userLogin.setImPassword(imPassword); userLogin.setImPassword(imPassword);
userLogin.setImUserid(imUserId); userLogin.setImUserid(imUserId);
userLogin.setUsername(username); userLogin.setUsername(username);
appUserLoginBiz.updateSelectiveById(userLogin); appUserLoginBiz.updateSelectiveById(userLogin);
log.info(username+"----userLogin updateSelectiveById---username====="+username+"----imPassword===="+imPassword); log.info(username + "----userLogin updateSelectiveById---username=====" + username + "----imPassword====" + imPassword);
} }
//data.put("imToken",access_token); //data.put("imToken",access_token);
data.put("imUserId",imUserId); data.put("imUserId", imUserId);
} }
if (data != null) { if (data != null) {
return JsonResultUtil.createSuccessResultWithObj(data); return JsonResultUtil.createSuccessResultWithObj(data);
...@@ -801,27 +820,28 @@ public class AppPermissionService { ...@@ -801,27 +820,28 @@ public class AppPermissionService {
} }
/** /**
*通过小程序注册 * 通过小程序注册
*
* @param username * @param username
* @return * @return
*/ */
public JSONObject appletRegistry(String username,String headimgurl,String nickname,Integer small_id){ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public JSONObject appletRegistry(String username, String headimgurl, String nickname, Integer small_id) {
try { try {
// 是否已存在 // 是否已存在
AppUserLogin user = appUserLoginBiz.checkeUserLogin(username); AppUserLogin user = appUserLoginBiz.checkeUserLogin(username);
JSONObject data=new JSONObject(); JSONObject data = new JSONObject();
if (null == user) { if (null == user) {
String password="12345678"; String password = "12345678";
data=applyRegister(username,password,headimgurl,nickname,small_id); data = applyRegister(username, password, headimgurl, nickname, small_id);
}else{ } else {
Integer userid=user.getId(); Integer userid = user.getId();
//上线绑定 //上线绑定
relationBiz.bindByUserId(userid,small_id); relationBiz.bindByUserId(userid, small_id);
//登录 //登录
data=appletLoginByUserId(userid); data = appletLoginByUserId(userid);
} }
return data; return data;
} catch (Exception e) { } catch (Exception e) {
...@@ -830,40 +850,76 @@ public class AppPermissionService { ...@@ -830,40 +850,76 @@ public class AppPermissionService {
} }
} }
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void insertUserMemberByUserIdAndPhone(Integer userId, String phone) throws Exception {
List<BaseUserMemberExportDTO> memberExportDTOS = baseUserMemberExportBiz.findUserMemberExportDataByPhoneAndHashEffective(phone);
if (CollectionUtils.isNotEmpty(memberExportDTOS)) {
insertUserMemberByExistUserMemberExportData(userId, memberExportDTOS);
baseUserMemberExportBiz.updateUserMemberExportDataToLoseEfficacyByPhone(phone);
}
}
private void insertUserMemberByExistUserMemberExportData(Integer userId, List<BaseUserMemberExportDTO> userMemberExportDTOS) throws Exception {
UserMemberDTO userMemberDTO;
for (BaseUserMemberExportDTO userMemberExportDTO : userMemberExportDTOS) {
userMemberDTO = new UserMemberDTO();
userMemberDTO.setUserId(userId);
userMemberDTO.setRentFreeDays(userMemberExportDTO.getRentFreeDays());
userMemberDTO.setMemberLevel(userMemberExportDTO.getMemberLevel());
userMemberDTO.setTotalNumber(userMemberExportDTO.getTotalNumber());
userMemberDTO.setDiscount(userMemberExportDTO.getDiscount());
userMemberDTO.setBuyCount(0);
userMemberDTO.setIsBind(1);
baseUserMemberBiz.updUserMemberByUserId(userMemberDTO);
}
}
/** /**
* ip地址 信息解析 * ip地址 信息解析
*
* @param appUserDetail * @param appUserDetail
*/ */
public void setCreateIPInfo(AppUserDetail appUserDetail){ public void setCreateIPInfo(AppUserDetail appUserDetail) {
String crtHost = appUserDetail.getCrtHost(); String crtHost = appUserDetail.getCrtHost();
String ipAddress = restTemplate.getForObject(String.format("%s%s", IPAddress.BASE_IP_PARSING_URL, crtHost), String.class); if (log.isDebugEnabled()) {
log.info("----setCreateIPInfo--crtHost========"+crtHost); log.debug("解析的地址:【{}】", crtHost);
}
try {
analyticalIPByWebSiteAndIPAddress(IPAddress.BASE_IP_PARSING_URL2, crtHost, appUserDetail);
} catch (Exception e) {
try {
analyticalIPByWebSiteAndIPAddress(IPAddress.BASE_IP_PARSING_URL1, crtHost, appUserDetail);
} catch (Exception ex) {
log.error("解析地址失败:【{}】", ex.getMessage());
}
}
}
private void analyticalIPByWebSiteAndIPAddress(String url, String crtHost, AppUserDetail appUserDetail) {
String ipAddress = restTemplate.getForObject(String.format("%s%s", url, crtHost), String.class);
String data = JSONObject.parseObject(ipAddress).getString(IPAddress.BASE_DATA); String data = JSONObject.parseObject(ipAddress).getString(IPAddress.BASE_DATA);
JSONObject ipJsonObject = JSONObject.parseObject(data); JSONObject ipJsonObject = JSONObject.parseObject(data);
// Integer provinceCode = ipJsonObject.getInteger(IPAddress.PROVINCE_CODE);
// Integer cityCode = ipJsonObject.getInteger(IPAddress.CITY_CODE);
//appUserLogin.setProvinceCode(provinceCode);
//appUserLogin.setCityCode(cityCode);
String cityName = ipJsonObject.getString(IPAddress.CITY_NAME); String cityName = ipJsonObject.getString(IPAddress.CITY_NAME);
RegionDTO regionDTO = regionFeign.getRegionByCityName(cityName); RegionDTO regionDTO = regionFeign.getRegionByCityName(StringUtils.isEmpty(cityName) ? "东莞" : cityName);
if (null!=regionDTO){ if (null != regionDTO) {
appUserDetail.setProvinceCode(Integer.valueOf(String.valueOf(regionDTO.getParentId()))); appUserDetail.setProvinceCode(Integer.valueOf(String.valueOf(regionDTO.getParentId())));
appUserDetail.setCityCode(Integer.valueOf(String.valueOf(regionDTO.getId()))); appUserDetail.setCityCode(Integer.valueOf(String.valueOf(regionDTO.getId())));
} }
} }
/** /**
* @author libin * @author libin
* @version 1.0.0 * @version 1.0.0
* @dec ip 解析返回的地址信息 * @dec ip 解析返回的地址信息
*/ */
private static class IPAddress{ private static class IPAddress {
public static final String BASE_IP_PARSING_URL="http://ip.taobao.com/service/getIpInfo.php?ip="; public static final String BASE_IP_PARSING_URL1 = "http://ip.taobao.com/service/getIpInfo.php?ip=";
public static final String BASE_DATA="data"; public static final String BASE_IP_PARSING_URL2 = "https://www.mxnzp.com/api/ip/aim_ip?ip=";
public static final String PROVINCE_CODE="region_id"; public static final String BASE_DATA = "data";
public static final String CITY_CODE="city_id"; public static final String CITY_NAME = "city";
public static final String CITY_NAME="city";
public static final String PROVINCE_NAME="region";
} }
} }
...@@ -113,5 +113,7 @@ ...@@ -113,5 +113,7 @@
</select> </select>
<update id="updateUserMemberStatusByUserId">
update `app_user_detail` set `is_member`={status} where `userid`=#{userId}
</update>
</mapper> </mapper>
\ No newline at end of file
...@@ -11,4 +11,8 @@ ...@@ -11,4 +11,8 @@
<result property="isDel" column="is_del"/> <result property="isDel" column="is_del"/>
<result property="status" column="status"/> <result property="status" column="status"/>
</resultMap> </resultMap>
<update id="updateUserMemberExportDataToLoseEfficacyByPhone">
update `base_user_member_export` set `status`=1 where `username`=#{phone}
</update>
</mapper> </mapper>
\ No newline at end of file
...@@ -10,7 +10,7 @@ spring: ...@@ -10,7 +10,7 @@ spring:
datasource: datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://10.5.52.3:3306/xxfc_activity?useUnicode=true&characterEncoding=UTF-8 url: jdbc:mysql://10.5.52.3:3306/xxfc_app?useUnicode=true&characterEncoding=UTF-8
username: root username: root
password: sslcloud123*() password: sslcloud123*()
jackson: jackson:
......
#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F #\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F
#\u5305\u540D #\u5305\u540D
package=com.xxfc.platform.activity package=com.xxfc.platform.app
#\u4F5C\u8005 #\u4F5C\u8005
author=libin author=zjw
#Email #Email
email=18178966185@163.com email=18178966185@163.com
#\u8868\u524D\u9519\u8BEF\u7684Unicode\u5B57\u7B26\u4E32! #\u8868\u524D\u9519\u8BEF\u7684Unicode\u5B57\u7B26\u4E32!
......
package com.xxfc.platform.app.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 购房车提交表单
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-09 19:39:47
*/
@Data
@Table(name = "buy_vehicle_form")
public class BuyVehicleForm 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;
/**
* 车型id
*/
@Column(name = "model_id")
@ApiModelProperty(value = "车型id")
private Integer modelId;
/**
* 联系人名称
*/
@Column(name = "contact_name")
@ApiModelProperty(value = "联系人名称")
private String contactName;
/**
* 联系人电话
*/
@Column(name = "contact_phone")
@ApiModelProperty(value = "联系人电话")
private String contactPhone;
/**
* 预约时间
*/
@Column(name = "book_time")
@ApiModelProperty(value = "预约时间")
private Long bookTime;
/**
* 公司id
*/
@Column(name = "company_id")
@ApiModelProperty(value = "公司id")
private Integer companyId;
/**
* 备注
*/
@Column(name = "remark")
@ApiModelProperty(value = "备注")
private String remark;
}
package com.xxfc.platform.app.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.app.entity.BuyVehicleForm;
import com.xxfc.platform.app.mapper.BuyVehicleFormMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 购房车提交表单
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-09 19:39:47
*/
@Service
public class BuyVehicleFormBiz extends BaseBiz<BuyVehicleFormMapper,BuyVehicleForm> {
}
\ No newline at end of file
package com.xxfc.platform.app.mapper;
import com.xxfc.platform.app.entity.BuyVehicleForm;
import tk.mybatis.mapper.common.Mapper;
/**
* 购房车提交表单
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-09 19:39:47
*/
public interface BuyVehicleFormMapper extends Mapper<BuyVehicleForm> {
}
package com.xxfc.platform.app.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.app.biz.BuyVehicleFormBiz;
import com.xxfc.platform.app.entity.BuyVehicleForm;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("buyVehicleForm")
public class BuyVehicleFormController extends BaseController<BuyVehicleFormBiz,BuyVehicleForm> {
}
\ 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.app.mapper.BuyVehicleFormMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.app.entity.BuyVehicleForm" id="buyVehicleFormMap">
<result property="id" column="id"/>
<result property="crtTime" column="crt_time"/>
<result property="updTime" column="upd_time"/>
<result property="name" column="name"/>
<result property="modelId" column="model_id"/>
<result property="contactName" column="contact_name"/>
<result property="contactPhone" column="contact_phone"/>
<result property="bookTime" column="book_time"/>
<result property="companyId" column="company_id"/>
<result property="remark" column="remark"/>
</resultMap>
</mapper>
\ No newline at end of file
...@@ -15,12 +15,25 @@ ...@@ -15,12 +15,25 @@
<swagger.version>2.9.2</swagger.version> <swagger.version>2.9.2</swagger.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>com.github.wxiaoqi</groupId>
<artifactId>ace-admin-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId> <artifactId>spring-cloud-starter-openfeign</artifactId>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor --> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
......
...@@ -214,4 +214,18 @@ public class BaseOrder implements Serializable { ...@@ -214,4 +214,18 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "乐观锁,修改版本号") @ApiModelProperty(value = "乐观锁,修改版本号")
@Version @Version
private Integer version; private Integer version;
/**
* 下单来源 1--app;2--小程序
*/
@ApiModelProperty(value = "下单来源 1--app;2--小程序")
@Column(name = "order_origin")
private Integer orderOrigin;
/**
* 支付来源 1--app;2--小程序
*/
@ApiModelProperty(value = "支付来源 1--app;2--小程序")
@Column(name = "pay_origin")
private Integer payOrigin;
} }
...@@ -15,4 +15,8 @@ public interface OrderDetail { ...@@ -15,4 +15,8 @@ public interface OrderDetail {
BaseOrder getOrder(); BaseOrder getOrder();
void setOrder(BaseOrder order); void setOrder(BaseOrder order);
Integer getOrderOrigin();
void setOrderOrigin(Integer orderOrigin);
} }
...@@ -94,6 +94,12 @@ public class AddRentVehicleDTO{ ...@@ -94,6 +94,12 @@ public class AddRentVehicleDTO{
@ApiModelProperty(value = "是否使用出租免费天数") @ApiModelProperty(value = "是否使用出租免费天数")
private Integer rentFreeDay; private Integer rentFreeDay;
/**
*
*/
@ApiModelProperty(value = "下单来源,1--app;2--小程序")
private Integer orderOrigin;
/** /**
* 优惠券ids * 优惠券ids
......
...@@ -18,6 +18,10 @@ import java.util.List; ...@@ -18,6 +18,10 @@ import java.util.List;
public class MemberBO extends OrderMemberDetail implements OrderDetail { public class MemberBO extends OrderMemberDetail implements OrderDetail {
private BaseOrder order; private BaseOrder order;
private BaseUserMemberLevel baseUserMemberLevel; private BaseUserMemberLevel baseUserMemberLevel;
/**
* 下单来源,1--app;2--小程序
*/
private Integer orderOrigin;
/** /**
* 优惠券* * 优惠券*
*/ */
......
...@@ -15,4 +15,13 @@ public class OrderAboutParamDTO { ...@@ -15,4 +15,13 @@ public class OrderAboutParamDTO {
@ApiModelProperty(value = "旅游订单自动取消时间(毫秒)") @ApiModelProperty(value = "旅游订单自动取消时间(毫秒)")
private Long actTour; private Long actTour;
@ApiModelProperty(value = "会员订单自动取消时间(毫秒)")
private Long actMember;
@ApiModelProperty(value = "平台司机单价")
private BigDecimal driverPrice;
@ApiModelProperty(value = "免赔费用")
private BigDecimal damageSafe;
} }
\ No newline at end of file
...@@ -7,6 +7,7 @@ import com.xxfc.platform.order.entity.inter.OrderDetail; ...@@ -7,6 +7,7 @@ import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO; import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -22,6 +23,11 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail ...@@ -22,6 +23,11 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
private Integer rentFreeDay; private Integer rentFreeDay;
private AppUserDTO appUserDTO; private AppUserDTO appUserDTO;
/**
* 下单来源,1--app;2--小程序
*/
private Integer orderOrigin;
/** /**
* 优惠券* * 优惠券*
*/ */
......
...@@ -21,6 +21,10 @@ public class TourBO extends OrderTourDetail implements OrderDetail { ...@@ -21,6 +21,10 @@ public class TourBO extends OrderTourDetail implements OrderDetail {
List<TourUser> tourUsers; List<TourUser> tourUsers;
AppUserDTO appUserDTO; AppUserDTO appUserDTO;
/**
* 下单来源,1--app;2--小程序
*/
private Integer orderOrigin;
/** /**
* 优惠券* * 优惠券*
*/ */
......
...@@ -12,7 +12,7 @@ import lombok.Data; ...@@ -12,7 +12,7 @@ import lombok.Data;
* @date 2019-05-28 16:17:42 * @date 2019-05-28 16:17:42
*/ */
@Data @Data
public class RentVehicleOrderPayVO { public class OrderPayDTO {
//订单号 //订单号
@ApiModelProperty(value = "订单号") @ApiModelProperty(value = "订单号")
private String orderNo; private String orderNo;
...@@ -24,4 +24,8 @@ public class RentVehicleOrderPayVO { ...@@ -24,4 +24,8 @@ public class RentVehicleOrderPayVO {
//来源:1-app;2-小程序 //来源:1-app;2-小程序
@ApiModelProperty(value = "来源:1-app;2-小程序") @ApiModelProperty(value = "来源:1-app;2-小程序")
private Integer type; private Integer type;
//买家第三方付款账号
@ApiModelProperty(value = "买家第三方付款账号(如:openId)")
private String buyerAccount;
} }
...@@ -366,7 +366,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -366,7 +366,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
* @param orderNo * @param orderNo
* @param tradeNo * @param tradeNo
*/ */
public void payNotifyHandle(String orderNo, String tradeNo) { public void payNotifyHandle(String orderNo, String tradeNo, Integer type) {
BaseOrder baseOrder = this.selectOne(new BaseOrder() {{ BaseOrder baseOrder = this.selectOne(new BaseOrder() {{
setNo(orderNo); setNo(orderNo);
}}); }});
...@@ -377,6 +377,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> { ...@@ -377,6 +377,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
setOutTradeNo(tradeNo); setOutTradeNo(tradeNo);
setHasPay(SYS_TRUE); setHasPay(SYS_TRUE);
setPayTime(System.currentTimeMillis()); setPayTime(System.currentTimeMillis());
setPayOrigin(type);
setVersion(baseOrder.getVersion()); setVersion(baseOrder.getVersion());
}}; }};
......
...@@ -46,7 +46,7 @@ public class RabbitConsumer { ...@@ -46,7 +46,7 @@ public class RabbitConsumer {
baseOrderBiz.cancel(baseOrder); baseOrderBiz.cancel(baseOrder);
}catch (BaseException e) { }catch (BaseException e) {
if(ResultCode.DB_OPERATION_FAIL_CODE == e.getStatus()) { if(ResultCode.DB_OPERATION_FAIL_CODE == e.getStatus()) {
log.info("取消操作被取消"); log.info("取消操作被取消;订单id:"+ baseOrder.getId());
} }
}catch (Exception e) { }catch (Exception e) {
log.error("============消费失败,尝试消息补发再次消费!=============="); log.error("============消费失败,尝试消息补发再次消费!==============");
......
...@@ -3,7 +3,6 @@ package com.xxfc.platform.order.rest; ...@@ -3,7 +3,6 @@ package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.entity.AppUser;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO; import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
...@@ -25,7 +24,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; ...@@ -25,7 +24,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.BaseOrder; 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.*; import com.xxfc.platform.order.pojo.order.*;
import com.xxfc.platform.order.pojo.pay.RentVehicleOrderPayVO; import com.xxfc.platform.order.pojo.pay.OrderPayDTO;
import com.xxfc.platform.universal.constant.DictionaryKey; import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary; import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
...@@ -111,6 +110,9 @@ public class BaseOrderController extends CommonBaseController { ...@@ -111,6 +110,9 @@ public class BaseOrderController extends CommonBaseController {
setInsurePrice(new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.INSURE_PRICE).getDetail())); setInsurePrice(new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.INSURE_PRICE).getDetail()));
setActRent(new Long(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_RENT).getDetail())); setActRent(new Long(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_RENT).getDetail()));
setActTour(new Long(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_TOUR).getDetail())); setActTour(new Long(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_TOUR).getDetail()));
setActMember(new Long(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_MEMBER).getDetail()));
setDamageSafe(new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DAMAGE_SAFE).getDetail()));
setDriverPrice(new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.DRIVER_PRICE).getDetail()));
}}); }});
} }
...@@ -234,6 +236,7 @@ public class BaseOrderController extends CommonBaseController { ...@@ -234,6 +236,7 @@ public class BaseOrderController extends CommonBaseController {
@IgnoreClientToken @IgnoreClientToken
@ResponseBody @ResponseBody
public ObjectRestResponse<OrderPageVO> get(@PathVariable String no) { public ObjectRestResponse<OrderPageVO> get(@PathVariable String no) {
log.info("no:"+ no + ",时间戳:"+ System.currentTimeMillis());
//查询列表数据 //查询列表数据
if (StringUtils.isBlank(BaseContextHandler.getUserID())) { if (StringUtils.isBlank(BaseContextHandler.getUserID())) {
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE); throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
...@@ -244,6 +247,7 @@ public class BaseOrderController extends CommonBaseController { ...@@ -244,6 +247,7 @@ public class BaseOrderController extends CommonBaseController {
if (page.getData().isEmpty()) { if (page.getData().isEmpty()) {
throw new BaseException(ResultCode.NOTEXIST_CODE); throw new BaseException(ResultCode.NOTEXIST_CODE);
} }
log.info("no:"+ no + ",时间戳:"+ System.currentTimeMillis());
return new ObjectRestResponse<>().data(page.getData().get(0)); return new ObjectRestResponse<>().data(page.getData().get(0));
} }
...@@ -303,16 +307,16 @@ public class BaseOrderController extends CommonBaseController { ...@@ -303,16 +307,16 @@ public class BaseOrderController extends CommonBaseController {
@ResponseBody @ResponseBody
@ApiOperation(value = "订单支付") @ApiOperation(value = "订单支付")
@IgnoreClientToken @IgnoreClientToken
public ObjectRestResponse pay(@RequestBody RentVehicleOrderPayVO vo) { public ObjectRestResponse pay(@RequestBody OrderPayDTO dto) {
//查询列表数据 //查询列表数据
if (StringUtils.isBlank(BaseContextHandler.getUserID())) { if (StringUtils.isBlank(BaseContextHandler.getUserID())) {
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE); throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
} }
OrderPayVo orderPayVo = BeanUtil.toBean(vo, OrderPayVo.class); OrderPayVo orderPayVo = BeanUtil.toBean(dto, OrderPayVo.class);
BaseOrder baseOrder = baseOrderBiz.selectOne(new BaseOrder() {{ BaseOrder baseOrder = baseOrderBiz.selectOne(new BaseOrder() {{
setNo(vo.getOrderNo()); setNo(dto.getOrderNo());
}}); }});
if (null == baseOrder || !OrderStatusEnum.ORDER_UNPAY.getCode().equals(baseOrder.getStatus())) { if (null == baseOrder || !OrderStatusEnum.ORDER_UNPAY.getCode().equals(baseOrder.getStatus())) {
...@@ -359,7 +363,7 @@ public class BaseOrderController extends CommonBaseController { ...@@ -359,7 +363,7 @@ public class BaseOrderController extends CommonBaseController {
public ObjectRestResponse notifyUrl(NotifyUrlDTO dto) { public ObjectRestResponse notifyUrl(NotifyUrlDTO dto) {
//判断是否成功,并且订单是未支付状态,则添加支付编号和修改状态 //判断是否成功,并且订单是未支付状态,则添加支付编号和修改状态
if (StrUtil.isNotBlank(dto.getOrderNo())) { if (StrUtil.isNotBlank(dto.getOrderNo())) {
baseOrderBiz.payNotifyHandle(dto.getOrderNo(), dto.getTradeNo()); baseOrderBiz.payNotifyHandle(dto.getOrderNo(), dto.getTradeNo(), dto.getType());
}else{ }else{
log.error(" exception notifyUrl : " + JSONUtil.toJsonStr(dto)); log.error(" exception notifyUrl : " + JSONUtil.toJsonStr(dto));
} }
...@@ -418,5 +422,9 @@ public class BaseOrderController extends CommonBaseController { ...@@ -418,5 +422,9 @@ public class BaseOrderController extends CommonBaseController {
//订单号 //订单号
@ApiModelProperty(value = "支付订单(流水)号") @ApiModelProperty(value = "支付订单(流水)号")
private String tradeNo; private String tradeNo;
//支付类型
@ApiModelProperty(value = "支付类型")
private Integer type;
} }
} }
...@@ -42,8 +42,12 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -42,8 +42,12 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
* 创建基础订单 * 创建基础订单
* @return * @return
*/ */
public BaseOrder createBaseOrder() { public BaseOrder createBaseOrder(Integer orderOrigin) {
BaseOrder baseOrder = new BaseOrder(); BaseOrder baseOrder = new BaseOrder();
//设置下单来源
baseOrder.setOrderOrigin(orderOrigin);
//设置订单号 //设置订单号
baseOrder.setNo(OrderUtil.GetOrderNumber("", OrderUtil.APP_MID)); baseOrder.setNo(OrderUtil.GetOrderNumber("", OrderUtil.APP_MID));
//设置订单类型 //设置订单类型
...@@ -64,7 +68,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -64,7 +68,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
} }
public void initDetail(Detail detail) { public void initDetail(Detail detail) {
BaseOrder order = createBaseOrder(); BaseOrder order = createBaseOrder(detail.getOrderOrigin());
detail.setOrder(order); detail.setOrder(order);
} }
......
...@@ -15,6 +15,8 @@ import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; ...@@ -15,6 +15,8 @@ import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.pojo.order.MemberBO; import com.xxfc.platform.order.pojo.order.MemberBO;
import com.xxfc.platform.order.pojo.price.OrderPriceVO; import com.xxfc.platform.order.pojo.price.OrderPriceVO;
import com.xxfc.platform.tour.feign.TourFeign; import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -26,6 +28,8 @@ import java.math.BigDecimal; ...@@ -26,6 +28,8 @@ import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service @Service
@Log4j @Log4j
public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz, MemberBO> { public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz, MemberBO> {
...@@ -36,10 +40,14 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -36,10 +40,14 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
@Autowired @Autowired
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
@Autowired
ThirdFeign thirdFeign;
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 Long autoCancelTime;
@Autowired @Autowired
OrderCostDetailBiz orderCostDetailBiz; OrderCostDetailBiz orderCostDetailBiz;
...@@ -68,6 +76,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -68,6 +76,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
@Override @Override
public void initDetail(MemberBO bo) { public void initDetail(MemberBO bo) {
super.initDetail(bo); super.initDetail(bo);
initDictionary();
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 HashSet<String>(){{ throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>(){{
...@@ -79,6 +88,11 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -79,6 +88,11 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
bo.setRebate(buml.getDiscount()); bo.setRebate(buml.getDiscount());
} }
public void initDictionary() {
dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ACT_MEMBER).getDetail());
}
@Override @Override
public void handleDetail(MemberBO bo) { public void handleDetail(MemberBO bo) {
//设置订单状态为3 //设置订单状态为3
...@@ -91,7 +105,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -91,7 +105,7 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
super.handleDetail(bo); super.handleDetail(bo);
//发送定时取消订单(30分钟) //发送定时取消订单(30分钟)
rabbitProduct.sendDelayMessage(bo.getOrder(), 1000L * 60 * 30); rabbitProduct.sendDelayMessage(bo.getOrder(), autoCancelTime);
} }
@Override @Override
......
...@@ -166,7 +166,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -166,7 +166,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData(); VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData();
//如果用户存在,并且为会员,并且车辆有优惠价 //如果用户存在,并且为会员,并且车辆有优惠价
if(null != dto && !NONE.getCode().equals(dto.getMemberLevel()) && !DISCOUNT_STATUS_NONE.equals(vehicleModel.getRentDiscountStatus())) { if(null != dto && SYS_TRUE.equals(dto.getIsMember()) && !NONE.getCode().equals(dto.getMemberLevel()) && !DISCOUNT_STATUS_NONE.equals(vehicleModel.getRentDiscountStatus())) {
String[] prices = StrUtil.isBlank(vehicleModel.getRentDiscountPrice()) String[] prices = StrUtil.isBlank(vehicleModel.getRentDiscountPrice())
?new String[]{vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString()} ?new String[]{vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString()}
:vehicleModel.getRentDiscountPrice().split(","); :vehicleModel.getRentDiscountPrice().split(",");
......
...@@ -197,7 +197,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To ...@@ -197,7 +197,7 @@ public class OrderTourService extends AbstractOrderHandle<OrderTourDetailBiz, To
//总价格 //总价格
orderAmount = orderAmount.add(goodsAmount).add(insureAmount); orderAmount = orderAmount.add(goodsAmount).add(insureAmount);
//真实价格 //真实价格
realAmount = realAmount.add(tourSpePriceVo.getRealPrice()).add(tourSpePriceVo.getRealChildPrice()); realAmount = realAmount.add(tourSpePriceVo.getRealPrice()).add(tourSpePriceVo.getRealChildPrice()).add(insureAmount);
//生成订单明细 //生成订单明细
TourPriceVO tpv = BeanUtil.toBean(tourSpePriceVo, TourPriceVO.class); TourPriceVO tpv = BeanUtil.toBean(tourSpePriceVo, TourPriceVO.class);
......
package com.xxfc.platform.order;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.entity.BaseOrder;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={OrderApplication.class})
public class InvitationTest {
@Autowired
BaseOrderBiz baseOrderBiz;
@Test
public void test() {
BaseOrder baseOrder =baseOrderBiz.selectById(93);
baseOrder.setRefundTime(System.currentTimeMillis());
baseOrder.setVersion(baseOrder.getVersion() - 1);
baseOrderBiz.updateSelectiveById(baseOrder);
log.info("success");
}
}
...@@ -35,6 +35,7 @@ public class DictionaryKey { ...@@ -35,6 +35,7 @@ public class DictionaryKey {
*/ */
public static final String ACT_RENT = "ACT_RENT"; public static final String ACT_RENT = "ACT_RENT";
public static final String ACT_TOUR = "ACT_TOUR"; public static final String ACT_TOUR = "ACT_TOUR";
public static final String ACT_MEMBER = "ACT_MEMBER";
/** /**
* 支付价格减低 * 支付价格减低
......
...@@ -78,6 +78,11 @@ ...@@ -78,6 +78,11 @@
<version>2.0-SNAPSHOT</version> <version>2.0-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.26.ALL</version>
</dependency>
<dependency> <dependency>
<groupId>antlr</groupId> <groupId>antlr</groupId>
<artifactId>antlr</artifactId> <artifactId>antlr</artifactId>
......
...@@ -2,6 +2,17 @@ package com.xxfc.platform.universal.biz; ...@@ -2,6 +2,17 @@ package com.xxfc.platform.universal.biz;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConstants;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayFundAuthOrderFreezeRequest;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayFundAuthOrderFreezeResponse;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.HTTPSUtils; import com.github.wxiaoqi.security.common.util.HTTPSUtils;
import com.github.wxiaoqi.security.common.util.OrderUtil; 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.ResultCode;
...@@ -20,6 +31,11 @@ import com.xxfc.platform.universal.entity.OrderPay; ...@@ -20,6 +31,11 @@ import com.xxfc.platform.universal.entity.OrderPay;
import com.xxfc.platform.universal.mapper.OrderPayMapper; import com.xxfc.platform.universal.mapper.OrderPayMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -40,6 +56,9 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> { ...@@ -40,6 +56,9 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> {
@Autowired @Autowired
DictionaryBiz dictionaryBiz; DictionaryBiz dictionaryBiz;
@Autowired
HttpServletRequest request;
public JSONObject preparepay( OrderPayVo orderPayVo) { public JSONObject preparepay( OrderPayVo orderPayVo) {
if(null == orderPayVo) { if(null == orderPayVo) {
log.error("-----参数为空-----------"); log.error("-----参数为空-----------");
...@@ -131,6 +150,178 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> { ...@@ -131,6 +150,178 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> {
} }
} }
/**
* 支付宝回调接口
* @return
*/
public String alipayNotify() {
//获取支付宝POST过来反馈信息
Map<String,String> params = new HashMap<>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
log.info(valueStr);
//乱码解决,这段代码在出现乱码时使用。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
String msg = JSONObject.toJSONString(params);
log.info("alipay notify message={}", msg);
// //添加回调记录
// PaymentCallbackLog callbackLog = new PaymentCallbackLog();
// callbackLog.setPayCode(rstradeNo);
// callbackLog.setPayType(SystemConstant.PayType.ALIPAY);
// callbackLog.setOrderCode(rsOrderCode);
// callbackLog.setMessage(msg);
// paymentCallbackLogRepository.save(callbackLog);
//切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
try {
boolean flag = AlipaySignature.rsaCheckV1(params, "", AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2);
if (!flag) {
log.info("alipay order rsaCheckV1 fail, result={}", msg);
return ObjectRestResponse.createDefaultFail().getMessage();
}
String rsTradeStatus = params.get("trade_status");
if (!SystemConfig.ALIPAY_TRADE_FINISHED.equals(rsTradeStatus) && !SystemConfig.ALIPAY_TRADE_SUCCESS.equals(rsTradeStatus)) {
log.info("alipay order trade_status has problem, result={}", msg);
return ObjectRestResponse.createDefaultFail().getMessage();
}
//String rsSellerId = params.get("seller_id");
//
// PaymentRecord paymentRecord = paymentRecordRepository.findOneByOrderCode(rsOrderCode);
// //验证付款信息
// if (paymentRecord == null || !paymentRecord.getAmount().toString().equals(rsAmount)
// || !aliPayConfig.getAppId().equals(rsAppId)) {
// log.info("alipay order notify fail, result={}", msg);
// return Response.FAILURE.getHeader().getMessage();
// }
// //重复回调
// if (paymentRecord.getStatus().intValue() != 1) {
// log.info("alipay order repeat notify, result={}", msg);
// return Response.SUCCESS().getHeader().getMessage();
// }
//
// paymentRecord.setPayCode(rstradeNo);
// paymentRecord.setStatus(2);
// paymentRecordRepository.save(paymentRecord);
// Map<String, Object> sendMap = DataUtils.objectToMap(paymentRecord);
// sendMap.put("amount", new BigDecimal(rsAmount).multiply(new BigDecimal(100)).intValue());
// sendMsgToOrder(JSONObject.toJSONString(sendMap));
return ObjectRestResponse.succ().getMessage();
} catch (AlipayApiException e) {
log.error("", e);
}
return ObjectRestResponse.createDefaultFail().getMessage();
}
/**
* 支付宝生成支付信息
* @param orderCode
* @param description
* @param payType
* @param amount
* @return
*/
@SuppressWarnings("rawtypes")
private ObjectRestResponse generateAliPayment(String orderCode, String description, String payType, Integer amount
) {
BigDecimal realAmount = new BigDecimal(amount.toString()).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_UP);
String notifyUrl =SystemConfig.weixinHost + "/service/payment/notify/alipay";
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(SystemConfig.ALIPAY_PAY_BASE_URL + "/gateway.do",
SystemConfig.ALIPAY_APPID, SystemConfig.ALIPAY_PRIVATE_KEY, AlipayConstants.FORMAT_JSON,
AlipayConstants.CHARSET_UTF8, SystemConfig.ALIPAY_PUBLIC_KEY, AlipayConstants.SIGN_TYPE_RSA2);
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
// //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
//model.setBody("我是测试数据");
model.setSubject(description);
model.setOutTradeNo(orderCode);
model.setTimeoutExpress("30m");
model.setTotalAmount(realAmount.toString());
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl(notifyUrl);
// AlipayFundAuthOrderFreezeRequest request = new AlipayFundAuthOrderFreezeRequest();
// String contentString = "{" +
// "\"auth_code\":\"" + orderCode + "\"," +
// "\"auth_code_type\":\"bar_code\"," +
// "\"out_order_no\":\"8077735255938023\"," +
// "\"out_request_no\":\"8077735255938032\"," +
// "\"order_title\":\"预授权冻结\"," +
// "\"amount\":0.01," +
// "\"payee_logon_id\":\"" + SystemConfig.ALIPAY_ACOUNT + "\"," +
// "\"payee_user_id\":\"" + SystemConfig.ALIPAY_PID + "\"," +
// "\"pay_timeout\":\"2d\"," +
// "\"extra_param\":\"{\\\"secondaryMerchantId\\\":\\\"17320004886\\\"}\"," +
// "\"product_code\":\"PRE_AUTH\"" ;
// log.info("content = {}", contentString);
// request.setBizContent(contentString);
// AlipayFundAuthOrderFreezeResponse response;
// try {
// response = alipayClient.execute(request);
// if(response.isSuccess()){
// System.out.println("调用成功");
// Map<String, Object> rt = new HashMap<>();
// rt.put("payType", payType);
// rt.put("payData", response.getBody());
// return ObjectRestResponse.succ(rt);
// } else {
// System.out.println("调用失败");
// }
// } catch (AlipayApiException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
log.info("alipay result={}", response.getMsg());
log.info("alipay result={}", response.getCode());
log.info("alipay result={}", response.getBody());
Map<String, Object> rt = new HashMap<>();
rt.put("payType", payType);
rt.put("payData", response.getBody());
return ObjectRestResponse.succ(rt);
} catch (AlipayApiException e) {
e.printStackTrace();
}
return ObjectRestResponse.createDefaultFail();
}
public ObjectRestResponse generatePayment(String orderCode, String description, String payType, Integer amount
) {
ObjectRestResponse objectRestResponse = ObjectRestResponse.createDefaultFail();
switch (payType) {
case SystemConfig.ALIPAY:
objectRestResponse = generateAliPayment(orderCode, description, payType, amount);
break;
default:
log.info("不支持的付款类型,payType={}", payType);
break;
}
return objectRestResponse;
}
public static void main(String[] args) { public static void main(String[] args) {
String url="https://xxtest.upyuns.com/api/order/baseOrder/app/unauth/notifyUrl?orderNo=20190603141137010007&tradeNo=20190603141137000002"; String url="https://xxtest.upyuns.com/api/order/baseOrder/app/unauth/notifyUrl?orderNo=20190603141137010007&tradeNo=20190603141137000002";
String result=""; String result="";
......
...@@ -35,6 +35,7 @@ public class OrderPayController extends BaseController<OrderPayBiz,OrderPay> { ...@@ -35,6 +35,7 @@ public class OrderPayController extends BaseController<OrderPayBiz,OrderPay> {
return baseBiz.preparepay(orderPayVo); return baseBiz.preparepay(orderPayVo);
} }
/** /**
* 支付回调 * 支付回调
* *
...@@ -80,4 +81,18 @@ public class OrderPayController extends BaseController<OrderPayBiz,OrderPay> { ...@@ -80,4 +81,18 @@ public class OrderPayController extends BaseController<OrderPayBiz,OrderPay> {
out.print("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[]]></return_msg></xml>"); out.print("<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[]]></return_msg></xml>");
} }
@PostMapping(value = "/app/notify/alipay")
@IgnoreUserToken
public String alipayNotify(){
return baseBiz.alipayNotify();
}
@PostMapping(value = "/app/generate_payment")
public Object generatePayment(@RequestParam("orderCode") String orderCode, @RequestParam("description") String description,
@RequestParam("payType") String payType, @RequestParam("amount") Integer amount) {
Object resp = baseBiz.generatePayment(orderCode, description, payType, amount);
return resp;
}
} }
\ No newline at end of file
...@@ -17,16 +17,16 @@ import java.util.List; ...@@ -17,16 +17,16 @@ import java.util.List;
@FeignClient(name = "vehicle") @FeignClient(name = "vehicle")
public interface VehicleFeign { public interface VehicleFeign {
@GetMapping(value = "/vehicleModel/{id}") @GetMapping(value = "/vehicleModel/{id}")
public ObjectRestResponse<VehicleModel> get(@PathVariable("id") int id); public ObjectRestResponse<VehicleModel> get(@PathVariable(value = "id") int id);
@GetMapping(value = "/vehicleInfo/{id}") @GetMapping(value = "/vehicleInfo/{id}")
public ObjectRestResponse<Vehicle> get(@PathVariable("id") String id); public ObjectRestResponse<Vehicle> get(@PathVariable(value = "id") String id);
@RequestMapping(value = "/vehicleInfo/findById", method = RequestMethod.GET) @RequestMapping(value = "/vehicleInfo/findById", method = RequestMethod.GET)
public RestResponse<Vehicle> findById(@RequestParam("id")String id); public RestResponse<Vehicle> findById(@RequestParam(value = "id")String id);
@RequestMapping(value = "/vehicleInfo/getByIds", method = RequestMethod.GET) @RequestMapping(value = "/vehicleInfo/getByIds", method = RequestMethod.GET)
public RestResponse< List<Vehicle>> getByIds(@RequestParam("ids") List<String> id); public RestResponse< List<Vehicle>> getByIds(@RequestParam(value = "ids") List<String> id);
//修改评分 //修改评分
@RequestMapping(value = "/vehicleModel/app/addScore", method = RequestMethod.GET) @RequestMapping(value = "/vehicleModel/app/addScore", method = RequestMethod.GET)
...@@ -36,19 +36,19 @@ public interface VehicleFeign { ...@@ -36,19 +36,19 @@ public interface VehicleFeign {
public ObjectRestResponse<VehicleBookRecord> rentApplyVehicle(@RequestBody RentVehicleBookDTO rentVehicleBookDTO); public ObjectRestResponse<VehicleBookRecord> rentApplyVehicle(@RequestBody RentVehicleBookDTO rentVehicleBookDTO);
@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(value = "id") Integer id);
//租车拒绝预约 //租车拒绝预约
@RequestMapping(value = "/vehicleInfo/rent/book/reject/{bookRecordId}", method = RequestMethod.PUT) @RequestMapping(value = "/vehicleInfo/rent/book/reject/{bookRecordId}", method = RequestMethod.PUT)
public RestResponse<Integer> rentRejectVehicleBooking(@PathVariable Long bookRecordId); public RestResponse<Integer> rentRejectVehicleBooking(@PathVariable(value = "bookRecordId") Long bookRecordId);
//取消预约 //取消预约
@RequestMapping(value = "/vehicleInfo/unbook/4employee/{bookRecordId}", method = RequestMethod.DELETE) @RequestMapping(value = "/vehicleInfo/unbook/4employee/{bookRecordId}", method = RequestMethod.DELETE)
public RestResponse<Integer> unbookVehicle(@PathVariable Long bookRecordId); public RestResponse<Integer> unbookVehicle(@PathVariable(value = "bookRecordId") Long bookRecordId);
//通过预约 //通过预约
@RequestMapping(value = "/vehicleInfo/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(value = "bookRecordId") Long bookRecordId);
//获取分公司列表 //获取分公司列表
@GetMapping("/branchCompany/all") @GetMapping("/branchCompany/all")
......
package com.xxfc.platform.vehicle.pojo; package com.xxfc.platform.vehicle.pojo;
import com.xxfc.platform.vehicle.entity.VehiclePlatCata;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List;
import java.util.Map;
/** /**
...@@ -23,5 +26,8 @@ public class VehicleModelQueryCondition { ...@@ -23,5 +26,8 @@ public class VehicleModelQueryCondition {
private String takeALieTheNumber; private String takeALieTheNumber;
@ApiModelProperty(value = "是否删除") @ApiModelProperty(value = "是否删除")
private Integer isDel; private Integer isDel;
@ApiModelProperty("分类逗号分割")
String catasStr;
@ApiModelProperty(value = "分类列表", hidden = true)
Map<Integer, List<VehiclePlatCata>> catas;
} }
...@@ -53,9 +53,6 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> { ...@@ -53,9 +53,6 @@ public class VehicleModelBiz extends BaseBiz<VehicleModelMapper, VehicleModel> {
*/ */
public ObjectRestResponse findVehicleModelPage(VehicleModelQueryCondition vmqc) { public ObjectRestResponse findVehicleModelPage(VehicleModelQueryCondition vmqc) {
try { try {
PageDataVO<VehicleModelVo> mPageDataVO = PageDataVO.pageInfo(vmqc.getPage(), PageDataVO<VehicleModelVo> mPageDataVO = PageDataVO.pageInfo(vmqc.getPage(),
vmqc.getLimit(), () -> mapper.findVehicleModelPage(vmqc)); vmqc.getLimit(), () -> mapper.findVehicleModelPage(vmqc));
......
...@@ -33,7 +33,10 @@ import tk.mybatis.mapper.entity.Example; ...@@ -33,7 +33,10 @@ 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.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -480,4 +483,20 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl ...@@ -480,4 +483,20 @@ public class VehiclePlatCataBiz extends BaseBiz<VehiclePlatCataMapper, VehiclePl
updateSelectiveById(vehiclePlatCata); updateSelectiveById(vehiclePlatCata);
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
public Map<Integer, List<VehiclePlatCata>> groupCatasByParent(String catasStr) {
List<Integer> catasIds = Pattern.compile(",").splitAsStream(catasStr).map((s) -> Integer.parseInt(s)).collect(Collectors.toList());
List<VehiclePlatCata> catas = selectByExample(new Example.Builder(VehiclePlatCata.class)
.where(WeekendSqls.<VehiclePlatCata>custom().andIn(VehiclePlatCata::getId, catasIds)).build());
Map<Integer, List<VehiclePlatCata>> vpcMap = new HashMap<Integer, List<VehiclePlatCata>>();
for (VehiclePlatCata vpc : catas) {
List<VehiclePlatCata> vpcs = vpcMap.get(vpc.getParentId());
if (null == vpcs) {
vpcs = new ArrayList<VehiclePlatCata>();
}
vpcs.add(vpc);
vpcMap.put(vpc.getParentId(), vpcs);
}
return vpcMap;
}
} }
...@@ -363,23 +363,11 @@ public class VehicleController extends BaseController<VehicleBiz> { ...@@ -363,23 +363,11 @@ public class VehicleController extends BaseController<VehicleBiz> {
//根据时间 获得 可用车辆 //根据时间 获得 可用车辆
//结合车型 //结合车型
if (StringUtils.isNotBlank(dto.getCatasStr())) { if (StringUtils.isNotBlank(dto.getCatasStr())) {
List<Integer> catasIds = Pattern.compile(",").splitAsStream(dto.getCatasStr()).map((s) -> Integer.parseInt(s)).collect(Collectors.toList()); dto.setCatas(vehiclePlatCataBiz.groupCatasByParent(dto.getCatasStr()));
List<VehiclePlatCata> catas = vehiclePlatCataBiz.selectByExample(new Example.Builder(VehiclePlatCata.class)
.where(WeekendSqls.<VehiclePlatCata>custom().andIn(VehiclePlatCata::getId, catasIds)).build());
Map<Integer, List<VehiclePlatCata>> vpcMap = new HashMap<Integer, List<VehiclePlatCata>>();
for (VehiclePlatCata vpc : catas) {
List<VehiclePlatCata> vpcs = vpcMap.get(vpc.getParentId());
if (null == vpcs) {
vpcs = new ArrayList<VehiclePlatCata>();
}
vpcs.add(vpc);
vpcMap.put(vpc.getParentId(), vpcs);
}
dto.setCatas(vpcMap);
} }
//设置显示是否有车 //设置显示是否有车
dto.setYearNo4Where(Boolean.TRUE); dto.setYearNo4Where(Boolean.TRUE);
return new ObjectRestResponse<>().data(vehicleBiz.searchUsableModel(dto)).rel(true); return ObjectRestResponse.succ(vehicleBiz.searchUsableModel(dto));
} }
/** /**
......
...@@ -107,6 +107,12 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi ...@@ -107,6 +107,12 @@ public class VehicleModelController extends BaseController<VehicleModelBiz, Vehi
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) {
return ObjectRestResponse.createDefaultFail(); return ObjectRestResponse.createDefaultFail();
} }
//结合车型
if (org.apache.commons.lang3.StringUtils.isNotBlank(vmqc.getCatasStr())) {
vmqc.setCatas(vehiclePlatCataBiz.groupCatasByParent(vmqc.getCatasStr()));
}
return vehicleModelBiz.findVehicleModelPage(vmqc); return vehicleModelBiz.findVehicleModelPage(vmqc);
} }
......
...@@ -28,6 +28,21 @@ ...@@ -28,6 +28,21 @@
<if test="takeALieTheNumber!=null and takeALieTheNumber!=''"> <if test="takeALieTheNumber!=null and takeALieTheNumber!=''">
AND EXISTS(SELECT vc2.vehicle_model_id FROM vehicle_cata vc2 WHERE vc2.cata_id=#{takeALieTheNumber} AND vmqc.id=vc2.vehicle_model_id) AND EXISTS(SELECT vc2.vehicle_model_id FROM vehicle_cata vc2 WHERE vc2.cata_id=#{takeALieTheNumber} AND vmqc.id=vc2.vehicle_model_id)
</if> </if>
<if test="catas != null">
AND ( 1
<foreach collection="catas" index="key" item="cataList">
&amp; (
<foreach collection="cataList" index="cIndex" item="cata">
<if test=" cIndex != 0">
|
</if>
(case when FIND_IN_SET(#{cata.id},vmqc.config) > 0 then 1 else 0 end)
</foreach>
)
</foreach>
) > 0
</if>
ORDER BY vmqc.id ASC ORDER BY vmqc.id ASC
</select> </select>
......
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