添加数据

This commit is contained in:
yangjun 2024-08-07 10:46:48 +08:00
parent dfc8d1cf2f
commit 6d27e92e08
1 changed files with 261 additions and 116 deletions

View File

@ -164,137 +164,282 @@ public class UserPackageOrderServiceImpl extends ServiceImpl<UserPackageOrderDao
@Override @Override
public Result insertOrders(UserPackageOrder userPackageOrder){ public Result insertOrders(UserPackageOrder userPackageOrder){
reentrantReadWriteLock.writeLock().lock(); reentrantReadWriteLock.writeLock().lock();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
BigDecimal canCouponMoney = BigDecimal.ZERO;//当可用代金券时的金额
BigDecimal canVipMoney = BigDecimal.ZERO;//当可用vip时的金额
BigDecimal totalMoney = BigDecimal.ZERO;//总金额
List<Long> classifyIdArr = Lists.newArrayList();
List<UserPackageOrdersMapping> ordersPackageList = userPackageOrder.getOrdersPackageList();
for (UserPackageOrdersMapping ordersPackage : ordersPackageList) {
MassagePackage massagePackage = massagePackageService.getById(ordersPackage.getPackageId());
BigDecimal sum = massagePackage.getPrice().multiply(new BigDecimal(ordersPackage.getNum()));
if(massagePackage.getIsCanCoupon() == 1){
canCouponMoney = canCouponMoney.add(sum);
}
if(massagePackage.getIsCanVip() == 1){
canVipMoney = canVipMoney.add(sum);
}
totalMoney = totalMoney.add(sum);
Long classifyId = massagePackage.getClassifyId();
classifyIdArr.add(classifyId);
}
BigDecimal couponMinMoney = BigDecimal.ZERO;//所有代金券的使用额度总和
List<CouponUser> CouponUserList = Lists.newArrayList(); //先判断是否是企业预约项目
String couponIds = userPackageOrder.getCouponId(); UserPackageOrdersMapping ta = userPackageOrder.getOrdersPackageList().get(0);
if(couponIds!=null && couponIds.length()>0){ MassagePackage pacT1 = massagePackageService.getById(ta.getPackageId());
if(canCouponMoney.compareTo(BigDecimal.ZERO)==0){ if(pacT1.getType()==104) {//企业预约
return Result.error("此次购买的服务不支持优惠券!"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
} try {
String[] couponArr = couponIds.trim().split(","); BigDecimal canCouponMoney = BigDecimal.ZERO;//当可用代金券时的金额
BigDecimal couponMoney = new BigDecimal(0); BigDecimal canVipMoney = BigDecimal.ZERO;//当可用vip时的金额
int count = 0; BigDecimal totalMoney = BigDecimal.ZERO;//总金额
for(int i=0;i<couponArr.length;i++){ List<Long> classifyIdArr = Lists.newArrayList();
if(couponArr[i]!=null && !couponArr[i].equals("")){ List<UserPackageOrdersMapping> ordersPackageList = userPackageOrder.getOrdersPackageList();
Long couponId = Long.valueOf(couponArr[i]); for (UserPackageOrdersMapping ordersPackage : ordersPackageList) {
CouponUser couponUser = couponUserService.getById(couponId); MassagePackage massagePackage = massagePackageService.getById(ordersPackage.getPackageId());
if (!couponUser.getStatus().equals(0)) { //获取企业预约实际项目的金额
return Result.error("优惠券已被使用!"); QueryWrapper<MassagePackageDetail> wrapper = new QueryWrapper<>();
} wrapper.eq("main_id",massagePackage.getId());
if(couponUser.getClassifyId()!=0){ wrapper.last("limit 1");
if(!classifyIdArr.contains(couponUser.getClassifyId())){ MassagePackageDetail massagePackageDetail = massagePackageDetailDao.selectOne(wrapper);
return Result.error("优惠券不满足使用条件!"); //根据项目的金额*数量算优惠券金额
} BigDecimal sum = massagePackageDetail.getPackagePrice().multiply(new BigDecimal(ordersPackage.getNum()));
} if(massagePackage.getIsCanCoupon() == 1){
couponMinMoney = couponMinMoney.add(couponUser.getMinMoney()); canCouponMoney = canCouponMoney.add(sum);
CouponUserList.add(couponUser);
BigDecimal money= couponUser.getMoney();
couponMoney = couponMoney.add(money);
count++;
} }
if(massagePackage.getIsCanVip() == 1){
canVipMoney = canVipMoney.add(sum);
}
totalMoney = totalMoney.add(sum);
Long classifyId = massagePackage.getClassifyId();
classifyIdArr.add(classifyId);
} }
userPackageOrder.setCouponCount(count);
userPackageOrder.setCouponMoney(couponMoney);
}else{
userPackageOrder.setCouponCount(0);
userPackageOrder.setCouponMoney(BigDecimal.ZERO);
}
if(canCouponMoney.compareTo(couponMinMoney) < 0){ BigDecimal couponMinMoney = BigDecimal.ZERO;//所有代金券的使用额度总和
return Result.error("当前应付总金额不满足优惠券使用的最小额度,请重新选择优惠券!"); List<CouponUser> CouponUserList = Lists.newArrayList();
} String couponIds = userPackageOrder.getCouponId();
if(couponIds!=null && couponIds.length()>0){
//获取用户VIP的优惠信息 if(canCouponMoney.compareTo(BigDecimal.ZERO)==0){
BigDecimal vipRate = new BigDecimal(100); return Result.error("此次购买的服务不支持优惠券!");
//服务包支持vip时获取vip优惠比例 }
if(canVipMoney.compareTo(BigDecimal.ZERO)>0) { String[] couponArr = couponIds.trim().split(",");
UserVip userVip = userVipService.selectUserVipByUserId(userPackageOrder.getUserId()); BigDecimal couponMoney = new BigDecimal(0);
if (userVip != null) { int count = 0;
if (userVip.getIsVip() == 1) { for(int i=0;i<couponArr.length;i++){
//获取用户到期时间 if(couponArr[i]!=null && !couponArr[i].equals("")){
Date date = null; Long couponId = Long.valueOf(couponArr[i]);
try { CouponUser couponUser = couponUserService.getById(couponId);
date = simpleDateFormat.parse(userVip.getEndTime()); if (!couponUser.getStatus().equals(0)) {
if (date.getTime() >= System.currentTimeMillis()) { return Result.error("优惠券已被使用!");
VipDetails vipDetails = vipDetailsDao.selectOne(new QueryWrapper<VipDetails>().eq("vip_name_type", userVip.getVipNameType())); }
if (vipDetails != null) { if(couponUser.getClassifyId()!=0){
vipRate = vipDetails.getRate(); if(!classifyIdArr.contains(couponUser.getClassifyId())){
return Result.error("优惠券不满足使用条件!");
} }
} }
} catch (Exception e) { couponMinMoney = couponMinMoney.add(couponUser.getMinMoney());
e.getMessage(); CouponUserList.add(couponUser);
BigDecimal money= couponUser.getMoney();
couponMoney = couponMoney.add(money);
count++;
}
}
userPackageOrder.setCouponCount(count);
userPackageOrder.setCouponMoney(couponMoney);
}else{
userPackageOrder.setCouponCount(0);
userPackageOrder.setCouponMoney(BigDecimal.ZERO);
}
if(canCouponMoney.compareTo(couponMinMoney) < 0){
return Result.error("当前应付总金额不满足优惠券使用的最小额度,请重新选择优惠券!");
}
//获取用户VIP的优惠信息
BigDecimal vipRate = new BigDecimal(100);
//服务包支持vip时获取vip优惠比例
if(canVipMoney.compareTo(BigDecimal.ZERO)>0) {
UserVip userVip = userVipService.selectUserVipByUserId(userPackageOrder.getUserId());
if (userVip != null) {
if (userVip.getIsVip() == 1) {
//获取用户到期时间
Date date = null;
try {
date = simpleDateFormat.parse(userVip.getEndTime());
if (date.getTime() >= System.currentTimeMillis()) {
VipDetails vipDetails = vipDetailsDao.selectOne(new QueryWrapper<VipDetails>().eq("vip_name_type", userVip.getVipNameType()));
if (vipDetails != null) {
vipRate = vipDetails.getRate();
}
}
} catch (Exception e) {
e.getMessage();
}
} }
} }
} }
} userPackageOrder.setVipRate(vipRate);
userPackageOrder.setVipRate(vipRate); BigDecimal vipMoney = canVipMoney;
BigDecimal vipMoney = canVipMoney; BigDecimal unCanVipMoney = totalMoney.subtract(canVipMoney);//非会员优惠金额
BigDecimal unCanVipMoney = totalMoney.subtract(canVipMoney);//非会员优惠金额 canVipMoney = canVipMoney.multiply(userPackageOrder.getVipRate()).divide(new BigDecimal(100));//对可用vip的金额进行优惠
canVipMoney = canVipMoney.multiply(userPackageOrder.getVipRate()).divide(new BigDecimal(100));//对可用vip的金额进行优惠 canVipMoney = canVipMoney.setScale(0,BigDecimal.ROUND_UP);
canVipMoney = canVipMoney.setScale(0,BigDecimal.ROUND_UP); BigDecimal vipReductionMoney = vipMoney.subtract(canVipMoney);
BigDecimal vipReductionMoney = vipMoney.subtract(canVipMoney); userPackageOrder.setVipReductionMoney(vipReductionMoney);//会员减免金额
userPackageOrder.setVipReductionMoney(vipReductionMoney);//会员减免金额 totalMoney = canVipMoney.add(unCanVipMoney);//优惠后的总金额
totalMoney = canVipMoney.add(unCanVipMoney);//优惠后的总金额 totalMoney = totalMoney.subtract(userPackageOrder.getCouponMoney());//减去优惠券额度后的总金额
totalMoney = totalMoney.subtract(userPackageOrder.getCouponMoney());//减去优惠券额度后的总金额
userPackageOrder.setPayMoney(totalMoney); userPackageOrder.setPayMoney(totalMoney);
userPackageOrder.setCreateTime(simpleDateFormat.format(new Date())); userPackageOrder.setCreateTime(simpleDateFormat.format(new Date()));
userPackageOrder.setStatus(0); userPackageOrder.setStatus(0);
userPackageOrder.setOrdersNo(getGeneralOrder()); userPackageOrder.setOrdersNo(getGeneralOrder());
//插入订单表 //插入订单表
baseMapper.insertOrders(userPackageOrder); baseMapper.insertOrders(userPackageOrder);
Long ordersId = userPackageOrder.getOrdersId(); Long ordersId = userPackageOrder.getOrdersId();
//插入订单代金券表 //插入订单代金券表
if(CouponUserList.size()>0){ if(CouponUserList.size()>0){
for(int i=0;i<CouponUserList.size();i++){ for(int i=0;i<CouponUserList.size();i++){
CouponUser couponUser = CouponUserList.get(i); CouponUser couponUser = CouponUserList.get(i);
UserPackageOrder upo = new UserPackageOrder(); UserPackageOrder upo = new UserPackageOrder();
upo.setOrdersId(ordersId); upo.setOrdersId(ordersId);
upo.setUserCouponId(couponUser.getId()); upo.setUserCouponId(couponUser.getId());
upo.setCouponName(couponUser.getCouponName()); upo.setCouponName(couponUser.getCouponName());
upo.setCouponMoney(couponUser.getMoney()); upo.setCouponMoney(couponUser.getMoney());
baseMapper.insertCoupon(upo); baseMapper.insertCoupon(upo);
//更新用户代金券表 //更新用户代金券表
couponUserService.update(Wrappers.<CouponUser>lambdaUpdate().eq(CouponUser::getId, couponUser.getId()).set(CouponUser::getStatus, 1)); couponUserService.update(Wrappers.<CouponUser>lambdaUpdate().eq(CouponUser::getId, couponUser.getId()).set(CouponUser::getStatus, 1));
}
userPackageOrder.setCouponUserList(CouponUserList);
} }
userPackageOrder.setCouponUserList(CouponUserList);
}
//插入用户-服务包-订单-服务包与订单映射关系表 //插入用户-服务包-订单-服务包与订单映射关系表
for (UserPackageOrdersMapping ordersPackage : ordersPackageList) { for (UserPackageOrdersMapping ordersPackage : ordersPackageList) {
ordersPackage.setOrdersId(ordersId); ordersPackage.setOrdersId(ordersId);
userPackageOrdersMappingService.insert(ordersPackage); userPackageOrdersMappingService.insert(ordersPackage);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
log.error("添加订单异常" + e.getMessage(), e); log.error("添加订单异常" + e.getMessage(), e);
} finally { } finally {
reentrantReadWriteLock.writeLock().unlock(); reentrantReadWriteLock.writeLock().unlock();
}
return Result.success().put("data", userPackageOrder);
}else{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
BigDecimal canCouponMoney = BigDecimal.ZERO;//当可用代金券时的金额
BigDecimal canVipMoney = BigDecimal.ZERO;//当可用vip时的金额
BigDecimal totalMoney = BigDecimal.ZERO;//总金额
List<Long> classifyIdArr = Lists.newArrayList();
List<UserPackageOrdersMapping> ordersPackageList = userPackageOrder.getOrdersPackageList();
for (UserPackageOrdersMapping ordersPackage : ordersPackageList) {
MassagePackage massagePackage = massagePackageService.getById(ordersPackage.getPackageId());
BigDecimal sum = massagePackage.getPrice().multiply(new BigDecimal(ordersPackage.getNum()));
if(massagePackage.getIsCanCoupon() == 1){
canCouponMoney = canCouponMoney.add(sum);
}
if(massagePackage.getIsCanVip() == 1){
canVipMoney = canVipMoney.add(sum);
}
totalMoney = totalMoney.add(sum);
Long classifyId = massagePackage.getClassifyId();
classifyIdArr.add(classifyId);
}
BigDecimal couponMinMoney = BigDecimal.ZERO;//所有代金券的使用额度总和
List<CouponUser> CouponUserList = Lists.newArrayList();
String couponIds = userPackageOrder.getCouponId();
if(couponIds!=null && couponIds.length()>0){
if(canCouponMoney.compareTo(BigDecimal.ZERO)==0){
return Result.error("此次购买的服务不支持优惠券!");
}
String[] couponArr = couponIds.trim().split(",");
BigDecimal couponMoney = new BigDecimal(0);
int count = 0;
for(int i=0;i<couponArr.length;i++){
if(couponArr[i]!=null && !couponArr[i].equals("")){
Long couponId = Long.valueOf(couponArr[i]);
CouponUser couponUser = couponUserService.getById(couponId);
if (!couponUser.getStatus().equals(0)) {
return Result.error("优惠券已被使用!");
}
if(couponUser.getClassifyId()!=0){
if(!classifyIdArr.contains(couponUser.getClassifyId())){
return Result.error("优惠券不满足使用条件!");
}
}
couponMinMoney = couponMinMoney.add(couponUser.getMinMoney());
CouponUserList.add(couponUser);
BigDecimal money= couponUser.getMoney();
couponMoney = couponMoney.add(money);
count++;
}
}
userPackageOrder.setCouponCount(count);
userPackageOrder.setCouponMoney(couponMoney);
}else{
userPackageOrder.setCouponCount(0);
userPackageOrder.setCouponMoney(BigDecimal.ZERO);
}
if(canCouponMoney.compareTo(couponMinMoney) < 0){
return Result.error("当前应付总金额不满足优惠券使用的最小额度,请重新选择优惠券!");
}
//获取用户VIP的优惠信息
BigDecimal vipRate = new BigDecimal(100);
//服务包支持vip时获取vip优惠比例
if(canVipMoney.compareTo(BigDecimal.ZERO)>0) {
UserVip userVip = userVipService.selectUserVipByUserId(userPackageOrder.getUserId());
if (userVip != null) {
if (userVip.getIsVip() == 1) {
//获取用户到期时间
Date date = null;
try {
date = simpleDateFormat.parse(userVip.getEndTime());
if (date.getTime() >= System.currentTimeMillis()) {
VipDetails vipDetails = vipDetailsDao.selectOne(new QueryWrapper<VipDetails>().eq("vip_name_type", userVip.getVipNameType()));
if (vipDetails != null) {
vipRate = vipDetails.getRate();
}
}
} catch (Exception e) {
e.getMessage();
}
}
}
}
userPackageOrder.setVipRate(vipRate);
BigDecimal vipMoney = canVipMoney;
BigDecimal unCanVipMoney = totalMoney.subtract(canVipMoney);//非会员优惠金额
canVipMoney = canVipMoney.multiply(userPackageOrder.getVipRate()).divide(new BigDecimal(100));//对可用vip的金额进行优惠
canVipMoney = canVipMoney.setScale(0,BigDecimal.ROUND_UP);
BigDecimal vipReductionMoney = vipMoney.subtract(canVipMoney);
userPackageOrder.setVipReductionMoney(vipReductionMoney);//会员减免金额
totalMoney = canVipMoney.add(unCanVipMoney);//优惠后的总金额
totalMoney = totalMoney.subtract(userPackageOrder.getCouponMoney());//减去优惠券额度后的总金额
userPackageOrder.setPayMoney(totalMoney);
userPackageOrder.setCreateTime(simpleDateFormat.format(new Date()));
userPackageOrder.setStatus(0);
userPackageOrder.setOrdersNo(getGeneralOrder());
//插入订单表
baseMapper.insertOrders(userPackageOrder);
Long ordersId = userPackageOrder.getOrdersId();
//插入订单代金券表
if(CouponUserList.size()>0){
for(int i=0;i<CouponUserList.size();i++){
CouponUser couponUser = CouponUserList.get(i);
UserPackageOrder upo = new UserPackageOrder();
upo.setOrdersId(ordersId);
upo.setUserCouponId(couponUser.getId());
upo.setCouponName(couponUser.getCouponName());
upo.setCouponMoney(couponUser.getMoney());
baseMapper.insertCoupon(upo);
//更新用户代金券表
couponUserService.update(Wrappers.<CouponUser>lambdaUpdate().eq(CouponUser::getId, couponUser.getId()).set(CouponUser::getStatus, 1));
}
userPackageOrder.setCouponUserList(CouponUserList);
}
//插入用户-服务包-订单-服务包与订单映射关系表
for (UserPackageOrdersMapping ordersPackage : ordersPackageList) {
ordersPackage.setOrdersId(ordersId);
userPackageOrdersMappingService.insert(ordersPackage);
}
} catch (Exception e) {
e.printStackTrace();
log.error("添加订单异常" + e.getMessage(), e);
} finally {
reentrantReadWriteLock.writeLock().unlock();
}
return Result.success().put("data", userPackageOrder);
} }
return Result.success().put("data", userPackageOrder);
} }
@Override @Override