|
@@ -13,13 +13,17 @@ import com.caimei365.user.utils.AliyunSmsUtil;
|
|
import com.caimei365.user.utils.CodeUtil;
|
|
import com.caimei365.user.utils.CodeUtil;
|
|
import com.caimei365.user.utils.Md5Util;
|
|
import com.caimei365.user.utils.Md5Util;
|
|
import com.caimei365.user.utils.ValidateUtil;
|
|
import com.caimei365.user.utils.ValidateUtil;
|
|
|
|
+import io.netty.util.internal.MathUtil;
|
|
|
|
+import lombok.Data;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestHeader;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.math.BigDecimal;
|
|
import java.text.ParseException;
|
|
import java.text.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Calendar;
|
|
import java.util.Calendar;
|
|
@@ -961,27 +965,27 @@ public class RegisterServiceImpl implements RegisterService {
|
|
*/
|
|
*/
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Override
|
|
@Override
|
|
- public ResponseJson superVipUpByBeans(SuperVipDto vipDto, HttpHeaders headers) {
|
|
|
|
- Integer userId = vipDto.getUserId();
|
|
|
|
|
|
+ public ResponseJson superVipUpByBeans(Integer userId, Integer packageId, HttpHeaders headers) {
|
|
SuperVipDto endFlag = findEnd(userId);
|
|
SuperVipDto endFlag = findEnd(userId);
|
|
|
|
+ Integer userBeans = vipMapper.findUserBeans(userId);
|
|
|
|
+ Double price = vipMapper.findUserPackage(packageId);
|
|
//过期和没买过都是生效时间重置,到期时间=现在+套餐时间
|
|
//过期和没买过都是生效时间重置,到期时间=现在+套餐时间
|
|
- if (endFlag.getVipFlag() == 0 || endFlag.getVipFlag()==-1) {
|
|
|
|
- Integer userBeans = vipMapper.findUserBeans(userId);
|
|
|
|
- Integer userPackage = vipDto.getUserPackage();
|
|
|
|
- Double price = vipMapper.findUserPackage(userPackage);
|
|
|
|
|
|
+ if (endFlag.getVipFlag() == 0 || endFlag.getVipFlag() == -1) {
|
|
//1.查用户采美豆,够就用采美豆下单,不够就返回信息
|
|
//1.查用户采美豆,够就用采美豆下单,不够就返回信息
|
|
if (Double.valueOf(userBeans) >= (price * 100)) {
|
|
if (Double.valueOf(userBeans) >= (price * 100)) {
|
|
//用户采美豆>=套餐需要的采美豆,调用采美豆支付方法
|
|
//用户采美豆>=套餐需要的采美豆,调用采美豆支付方法
|
|
//传空表示新客户
|
|
//传空表示新客户
|
|
- beanPay(vipDto, null, 0);
|
|
|
|
|
|
+ beanPay(userId, packageId, null, endFlag.getVipFlag());
|
|
|
|
+ return ResponseJson.success("支付采美豆购买成功");
|
|
|
|
+ }
|
|
|
|
+ return ResponseJson.error("用户采美豆不足,请确认后再支付", null);
|
|
|
|
+ } else {
|
|
|
|
+ if (Double.valueOf(userBeans) >= (price * 100)) {
|
|
|
|
+ //续费生效时间不变,原到期时间+套餐时间
|
|
|
|
+ beanPay(userId, packageId, endFlag.getEndTime(), endFlag.getVipFlag());
|
|
return ResponseJson.success("支付采美豆购买成功");
|
|
return ResponseJson.success("支付采美豆购买成功");
|
|
}
|
|
}
|
|
return ResponseJson.error("用户采美豆不足,请确认后再支付", null);
|
|
return ResponseJson.error("用户采美豆不足,请确认后再支付", null);
|
|
- }
|
|
|
|
- else{
|
|
|
|
- //续费生效时间不变,原到期时间+套餐时间
|
|
|
|
- beanPay(vipDto, endFlag.getEndTime(), 1);
|
|
|
|
- return ResponseJson.success("支付采美豆购买成功", null);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -999,75 +1003,101 @@ public class RegisterServiceImpl implements RegisterService {
|
|
if (endTime == null) {
|
|
if (endTime == null) {
|
|
superVipDto.setVipFlag(-1);
|
|
superVipDto.setVipFlag(-1);
|
|
superVipDto.setEndTime(superVip.getEndTime());
|
|
superVipDto.setEndTime(superVip.getEndTime());
|
|
|
|
+ } else {
|
|
|
|
+ superVipDto.setVipFlag(1);
|
|
|
|
+ superVipDto.setEndTime(endTime.getEndTime());
|
|
}
|
|
}
|
|
- superVipDto.setVipFlag(1);
|
|
|
|
- superVipDto.setEndTime(endTime.getEndTime());
|
|
|
|
}
|
|
}
|
|
return superVipDto;
|
|
return superVipDto;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 支付采美豆买会员
|
|
* 支付采美豆买会员
|
|
|
|
+ * flag=0未买过,-1过期,1有效,endTime过期时间
|
|
*
|
|
*
|
|
- * @param vipDto
|
|
|
|
|
|
+ * @param
|
|
* @param beginTime
|
|
* @param beginTime
|
|
*/
|
|
*/
|
|
- private void beanPay(SuperVipDto vipDto, Date beginTime, Integer repayFlag) {
|
|
|
|
|
|
+ private void beanPay(Integer userId, Integer packageId, Date beginTime, Integer repayFlag) {
|
|
//1.user表扣豆子
|
|
//1.user表扣豆子
|
|
- Integer userId = vipDto.getUserId();
|
|
|
|
- Integer userPackageId = vipDto.getUserPackage();
|
|
|
|
- Double price = vipMapper.findUserPackage(userPackageId);
|
|
|
|
|
|
+ Double price = vipMapper.findUserPackage(packageId);
|
|
Integer userBeans = vipMapper.findUserBeans(userId);
|
|
Integer userBeans = vipMapper.findUserBeans(userId);
|
|
- vipMapper.updateUserBeans(vipDto.getUserId(), Integer.valueOf(String.valueOf(userBeans - price * 100)));
|
|
|
|
- //采美豆消费表记录
|
|
|
|
- vipMapper.updateUserBeansHistory(userId, Integer.valueOf((int) (price * 100)));
|
|
|
|
|
|
+ Long l = Math.multiplyExact(Math.round(price), 100);
|
|
|
|
+ Long beans = Long.valueOf(userBeans);
|
|
|
|
+ Long result = Math.subtractExact(beans, l);
|
|
|
|
+ String s = result.toString();
|
|
|
|
+ vipMapper.updateUserBeans(userId, Integer.valueOf(s));
|
|
|
|
+ //采美豆消费表记录消费
|
|
|
|
+ vipMapper.addUserBeansHistory(userId, Integer.valueOf((int) (price * 100)));
|
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
if (repayFlag == 0) {
|
|
if (repayFlag == 0) {
|
|
SuperVipPo superVip = new SuperVipPo();
|
|
SuperVipPo superVip = new SuperVipPo();
|
|
beginTime = new Date();
|
|
beginTime = new Date();
|
|
|
|
+ superVip.setPrice(price);
|
|
|
|
+ superVip.setPackageId(packageId);
|
|
superVip.setBeginTime(beginTime);
|
|
superVip.setBeginTime(beginTime);
|
|
superVip.setUpdateTime(beginTime);
|
|
superVip.setUpdateTime(beginTime);
|
|
superVip.setDelFlag(0);
|
|
superVip.setDelFlag(0);
|
|
superVip.setUserId(userId);
|
|
superVip.setUserId(userId);
|
|
- Calendar cal = Calendar.getInstance();
|
|
|
|
cal.setTime(beginTime);
|
|
cal.setTime(beginTime);
|
|
- Integer userPackageTime = vipMapper.findUserPackageTime(userPackageId);
|
|
|
|
|
|
+ Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
|
|
cal.add(Calendar.MONTH, userPackageTime);
|
|
cal.add(Calendar.MONTH, userPackageTime);
|
|
- superVip.setEndTime(beginTime);
|
|
|
|
|
|
+ superVip.setEndTime(cal.getTime());
|
|
//2.超级会员表更改,重买标记是0生效时间就是now
|
|
//2.超级会员表更改,重买标记是0生效时间就是now
|
|
vipMapper.addVip(superVip);
|
|
vipMapper.addVip(superVip);
|
|
//购买记录表加数据
|
|
//购买记录表加数据
|
|
- setHistory(userId,price,userPackageId,beginTime);
|
|
|
|
- }else{
|
|
|
|
|
|
+ setHistory(superVip);
|
|
|
|
+ } else if (repayFlag == 1) {
|
|
|
|
+ //有效期内续费
|
|
SuperVipPo superVip = vipMapper.findSuperVip(userId);
|
|
SuperVipPo superVip = vipMapper.findSuperVip(userId);
|
|
superVip.setUpdateTime(new Date());
|
|
superVip.setUpdateTime(new Date());
|
|
- Calendar cal = Calendar.getInstance();
|
|
|
|
|
|
+ superVip.setPackageId(packageId);
|
|
|
|
+ superVip.setPrice(price);
|
|
//续费加时间
|
|
//续费加时间
|
|
cal.setTime(beginTime);
|
|
cal.setTime(beginTime);
|
|
- Integer userPackageTime = vipMapper.findUserPackageTime(userPackageId);
|
|
|
|
|
|
+ Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
|
|
|
|
+ cal.add(Calendar.MONTH, userPackageTime);
|
|
|
|
+ superVip.setEndTime(cal.getTime());
|
|
|
|
+ //vip表改到期时间
|
|
|
|
+ vipMapper.updateVip(superVip);
|
|
|
|
+ //购买记录表加数据
|
|
|
|
+ setHistory(superVip);
|
|
|
|
+ } else if (repayFlag == -1) {
|
|
|
|
+ //过期续费
|
|
|
|
+ SuperVipPo superVip = vipMapper.findSuperVip(userId);
|
|
|
|
+ superVip.setUpdateTime(new Date());
|
|
|
|
+ superVip.setPackageId(packageId);
|
|
|
|
+ superVip.setPrice(price);
|
|
|
|
+ //重设生效起始时间
|
|
|
|
+ beginTime=new Date();
|
|
|
|
+ superVip.setBeginTime(beginTime);
|
|
|
|
+ //到期时间现在时间+套餐时间
|
|
|
|
+ cal.setTime(beginTime);
|
|
|
|
+ Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
|
|
cal.add(Calendar.MONTH, userPackageTime);
|
|
cal.add(Calendar.MONTH, userPackageTime);
|
|
- superVip.setEndTime(beginTime);
|
|
|
|
|
|
+ superVip.setEndTime(cal.getTime());
|
|
|
|
+ //vip表改到期时间
|
|
vipMapper.updateVip(superVip);
|
|
vipMapper.updateVip(superVip);
|
|
//购买记录表加数据
|
|
//购买记录表加数据
|
|
- setHistory(userId,price,userPackageId,beginTime);
|
|
|
|
|
|
+ setHistory(superVip);
|
|
}
|
|
}
|
|
|
|
+ log.info(userId + "消费采美豆" + l + "会员到期时间至" + cal.getTime());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 修改超级会员记录表
|
|
* 修改超级会员记录表
|
|
- * @param userId
|
|
|
|
- * @param price
|
|
|
|
- * @param userPackageId
|
|
|
|
- * @param beginTime
|
|
|
|
|
|
+ *
|
|
*/
|
|
*/
|
|
- private void setHistory(Integer userId,Double price,Integer userPackageId,Date beginTime){
|
|
|
|
|
|
+ private void setHistory(SuperVipPo vip) {
|
|
VipPayHistoryPo payHistory = new VipPayHistoryPo();
|
|
VipPayHistoryPo payHistory = new VipPayHistoryPo();
|
|
- payHistory.setUserId(userId);
|
|
|
|
- payHistory.setUserBeans(price * 100);
|
|
|
|
- payHistory.setPayTime(new Date());
|
|
|
|
|
|
+ payHistory.setUserId(vip.getUserId());
|
|
|
|
+ payHistory.setUserBeans(vip.getPrice() * 100);
|
|
|
|
+ payHistory.setPayTime(vip.getUpdateTime());
|
|
payHistory.setPayWay(4);
|
|
payHistory.setPayWay(4);
|
|
- payHistory.setPackageId(userPackageId);
|
|
|
|
|
|
+ payHistory.setPackageId(vip.getPackageId());
|
|
payHistory.setPrice(0.00);
|
|
payHistory.setPrice(0.00);
|
|
- payHistory.setBeginTime(beginTime);
|
|
|
|
|
|
+ payHistory.setBeginTime(vip.getBeginTime());
|
|
|
|
+ payHistory.setEndTime(vip.getEndTime());
|
|
vipMapper.addPayHistory(payHistory);
|
|
vipMapper.addPayHistory(payHistory);
|
|
}
|
|
}
|
|
}
|
|
}
|