添加数据

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,6 +164,150 @@ public class UserPackageOrderServiceImpl extends ServiceImpl<UserPackageOrderDao
@Override
public Result insertOrders(UserPackageOrder userPackageOrder){
reentrantReadWriteLock.writeLock().lock();
//先判断是否是企业预约项目
UserPackageOrdersMapping ta = userPackageOrder.getOrdersPackageList().get(0);
MassagePackage pacT1 = massagePackageService.getById(ta.getPackageId());
if(pacT1.getType()==104) {//企业预约
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());
//获取企业预约实际项目的金额
QueryWrapper<MassagePackageDetail> wrapper = new QueryWrapper<>();
wrapper.eq("main_id",massagePackage.getId());
wrapper.last("limit 1");
MassagePackageDetail massagePackageDetail = massagePackageDetailDao.selectOne(wrapper);
//根据项目的金额*数量算优惠券金额
BigDecimal sum = massagePackageDetail.getPackagePrice().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);
}else{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
BigDecimal canCouponMoney = BigDecimal.ZERO;//当可用代金券时的金额
@ -296,6 +440,7 @@ public class UserPackageOrderServiceImpl extends ServiceImpl<UserPackageOrderDao
}
return Result.success().put("data", userPackageOrder);
}
}
@Override
@Transactional