From 2d47f5ac48f6ee7eb0194ffb5b65ed12b3b64437 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期五, 01 十一月 2024 18:20:49 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 17 +---- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java | 19 +++-- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 30 ++++++--- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java | 7 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderInfoDto.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 32 ++++++---- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 25 +++++++- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 3 + ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml | 24 ++++++- 9 files changed, 105 insertions(+), 54 deletions(-) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java index 692caa6..0ee6f22 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TInviteUserServiceImpl.java @@ -55,21 +55,24 @@ getAppUserVipDetail.setVipId(user.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); - String vipJson = data1.getVipJson(); - TVip vip = JSON.parseObject(vipJson, TVip.class); - // 查询邀请用户获得积分配置 TIntegralRule integralRule = integralRuleClient.getSet().getData(); JSONObject jsonObject = JSONObject.parseObject(integralRule.getInviteUsersToEarnPoints()); TInviteUser inviteUser = new TInviteUser(); - inviteUser.setAppUserId(beInvitedAppUserId); - inviteUser.setBeInvitedAppUserId(appUserId); - inviteUser.setCreateTime(LocalDateTime.now()); - if(Objects.nonNull(vip) && vip.getDoubleIntegration() == 1){ - inviteUser.setAward(jsonObject.getInteger("num1")*2); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + if(Objects.nonNull(vip) && vip.getDoubleIntegration() == 1){ + inviteUser.setAward(jsonObject.getInteger("num1")*2); + }else { + inviteUser.setAward(jsonObject.getInteger("num1")); + } }else { inviteUser.setAward(jsonObject.getInteger("num1")); } + inviteUser.setAppUserId(beInvitedAppUserId); + inviteUser.setBeInvitedAppUserId(appUserId); + inviteUser.setCreateTime(LocalDateTime.now()); this.save(inviteUser); } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java index 1a0fb15..8b3b6ac 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java @@ -151,12 +151,16 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); - String vipJson = data1.getVipJson(); - TVip vip = JSON.parseObject(vipJson, TVip.class); - if(Objects.nonNull(vip) && vip.getType() == 2){ - siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + if(Objects.nonNull(vip) && vip.getType() == 2){ + siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); + }else { + siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); + } }else { - siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); + siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); } }else { siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); @@ -199,12 +203,16 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); - String vipJson = data1.getVipJson(); - TVip vip = JSON.parseObject(vipJson, TVip.class); - if(Objects.nonNull(vip) && vip.getType() == 2){ - siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); - }else{ - siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + if(Objects.nonNull(vip) && vip.getType() == 2){ + siteInfoVO.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(tAccountingStrategyDetail.getServiceCharge()).add(tAccountingStrategyDetail.getElectrovalence())); + }else{ + siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); + } + }else { + siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); } }else { siteInfoVO.setVipElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java index 4a4feea..ab5661a 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java @@ -295,7 +295,7 @@ if(orders.size() > 0){ TChargingOrder chargingOrder = orders.get(0); TChargingGun tChargingGun1 = new TChargingGun(); - if(Arrays.asList(1, 2).contains(chargingOrder.getStatus())){ + if(Arrays.asList(1, 2, 5).contains(chargingOrder.getStatus())){ tChargingGun1.setStatus(3); } if(Arrays.asList(3).contains(chargingOrder.getStatus())){ @@ -306,6 +306,11 @@ } tChargingGun1.setId(tChargingGun.getId()); chargingGunService.updateById(tChargingGun1); + }else{ + TChargingGun tChargingGun1 = new TChargingGun(); + tChargingGun1.setId(tChargingGun.getId()); + tChargingGun1.setStatus(3); + chargingGunService.updateById(tChargingGun1); } } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java index 3a4d301..079b76d 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java @@ -308,14 +308,16 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); - String vipJson = data1.getVipJson(); - TVip vip = JSON.parseObject(vipJson, TVip.class); - if(Objects.nonNull(vip) && vip.getType() == 2){ - list.forEach(item -> { - if(Objects.nonNull(vip.getDiscount())){ - item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); - } - }); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + if(Objects.nonNull(vip) && vip.getType() == 2){ + list.forEach(item -> { + if(Objects.nonNull(vip.getDiscount())){ + item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); + } + }); + } } } pageInfo.setRecords(list); @@ -405,12 +407,14 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); - String vipJson = data1.getVipJson(); - TVip vip = JSON.parseObject(vipJson, TVip.class); - if(Objects.nonNull(vip) && vip.getType() == 2){ - list.forEach(item -> { - item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); - }); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + if(Objects.nonNull(vip) && vip.getType() == 2){ + list.forEach(item -> { + item.setVipElectrovalence(vip.getDiscount().divide(new BigDecimal(10)).multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); + }); + } } } return list; diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java index ec6ab63..b5c657b 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java @@ -61,7 +61,22 @@ private AppUserVipDetailClient vipDetailClient; @Override public List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId) { - return this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId); + List<TAccountingStrategyDetailVO> tAccountingStrategyDetailVOS = this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId); + Long userId = tokenService.getLoginUserApplet().getUserId(); + TAppUser appUser = appUserClient.getUserById(userId).getData(); + for (TAccountingStrategyDetailVO tAccountingStrategyDetailVO : tAccountingStrategyDetailVOS) { + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(userId); + getAppUserVipDetail.setVipId(appUser.getVipId()); + R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); + TAppUserVipDetail data1 = appUserVipDetail.getData(); + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + TVip vip = JSON.parseObject(vipJson, TVip.class); + tAccountingStrategyDetailVO.setDiscount(vip.getDiscount().divide(new BigDecimal(10))); + } + } + return tAccountingStrategyDetailVOS; } @Override @@ -86,8 +101,11 @@ getAppUserVipDetail.setVipId(appUser.getVipId()); R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail); TAppUserVipDetail data1 = appUserVipDetail.getData(); - String vipJson = data1.getVipJson(); - TVip vip = JSON.parseObject(vipJson, TVip.class); + TVip vip = null; + if(Objects.nonNull(data1)){ + String vipJson = data1.getVipJson(); + vip = JSON.parseObject(vipJson, TVip.class); + } TAccountingStrategyDetailVO accountingStrategyDetailVO; TAccountingStrategyDetailVO accountingStrategyDetailNext; @@ -102,6 +120,7 @@ if(Objects.nonNull(vip)) { if (vip.getType() == 2) { accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(vip.getDiscount()))); + accountingStrategyDetailVO.setDiscount(vip.getDiscount().divide(new BigDecimal(10))); accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(vip.getDiscount()))); } else { if(Objects.isNull(accountingStrategy.getDiscount())){ diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index fe828dd..4a14d46 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -197,6 +197,7 @@ payOrderInfoDto.setPayTime(byId.getCreateTime()); payOrderInfoDto.setRefundAmount(byId.getRefundAmount()); payOrderInfoDto.setRechargeAmount(byId.getRechargeAmount()); + payOrderInfoDto.setFinalAmount(byId.getRechargeAmount().subtract(byId.getRefundAmount())); return R.ok(payOrderInfoDto); case 2: TShoppingOrder byId1 = shoppingOrderService.getById(orderId); @@ -209,6 +210,7 @@ payOrderInfoDto1.setPayTime(byId1.getCreateTime()); payOrderInfoDto1.setRefundAmount(byId1.getRefundAmount()); payOrderInfoDto1.setRechargeAmount(byId1.getPaymentAmount()); + payOrderInfoDto1.setFinalAmount(byId1.getPaymentAmount().subtract(byId1.getRefundAmount())); return R.ok(payOrderInfoDto1); case 3: TVipOrder byId2 = vipOrderService.getById(orderId); @@ -221,6 +223,7 @@ payOrderInfoDto2.setPayTime(byId2.getCreateTime()); payOrderInfoDto2.setRefundAmount(byId2.getRefundAmount()); payOrderInfoDto2.setRechargeAmount(byId2.getPaymentAmount()); + payOrderInfoDto2.setFinalAmount(byId2.getPaymentAmount().subtract(byId2.getRefundAmount())); return R.ok(payOrderInfoDto2); //todo luo 停车场订单 // case 4: diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderInfoDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderInfoDto.java index ae3424d..3379441 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderInfoDto.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderInfoDto.java @@ -1,5 +1,6 @@ package com.ruoyi.order.dto; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -25,6 +26,7 @@ @ApiModelProperty("退款金额") private BigDecimal refundAmount; private BigDecimal rechargeAmount; + private BigDecimal finalAmount; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index a19fda8..023fc21 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -2571,14 +2571,10 @@ if (tChargingOrder.getCouponDiscountAmount()!=null){ couponDiscount = couponDiscount.add(tChargingOrder.getCouponDiscountAmount()); } - if (tChargingOrder.getRefundStatus()!=null &&tChargingOrder.getRefundStatus() == 2){ - // 如果成功退款 那么减去退款金额 + if (tChargingOrder.getPaymentAmount()!=null){ paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); - }else{ - if (tChargingOrder.getPaymentAmount()!=null){ - paymentAmount = paymentAmount.add(tChargingOrder.getOrderAmount()); - } } + } // 三方交易手续费 三方收费*0.6% commissionAmount = sharingAmount.multiply(new BigDecimal("0.006")); @@ -2587,7 +2583,7 @@ tSettlementConfirm.setSharingAmount(sharingAmount.setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setCommissionAmount(commissionAmount.setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setElectrovalence(electrovalence.setScale(2, RoundingMode.HALF_DOWN)); - tSettlementConfirm.setServiceCharge(serviceCharge.setScale(2, RoundingMode.HALF_DOWN)); + tSettlementConfirm.setServiceCharge(serviceCharge.subtract(commissionAmount).setScale(2, RoundingMode.HALF_DOWN)); tSettlementConfirm.setOrderCommission(orderCommission); tSettlementConfirm.setVipDiscount(vipDiscount); tSettlementConfirm.setCouponDiscount(couponDiscount); @@ -2627,7 +2623,7 @@ tSettlementConfirm.setServiceRemark(dto.getServiceRemark()); tSettlementConfirm.setDistribution(dto.getDistribution()); tSettlementConfirm.setIncome(dto.getElectrovalence().add(dto.getServiceCharge())); - tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getMetering())); + tSettlementConfirm.setCost(dto.getVenue().add(dto.getClean()).add(dto.getMaintain()).add(dto.getSupplyElectronic())); tSettlementConfirm.setProfitMoney(chargingElectronic.add(serviceCharge).subtract(tSettlementConfirm.getCost())); tSettlementConfirm.setNewSettlement(subtract2.subtract(tSettlementConfirm.getCost())); @@ -3021,11 +3017,8 @@ if(null != order.getAppUserId()){ queryWrapper.eq(TChargingOrder::getAppUserId, order.getAppUserId()); } - if(null != order.getAppUserId()){ - queryWrapper.eq(TChargingOrder::getAppUserId, order.getAppUserId()); - } if(null != order.getStatusList()){ - queryWrapper.in(TChargingOrder::getAppUserId, order.getStatusList()); + queryWrapper.in(TChargingOrder::getStatus, order.getStatusList()); } if(null != order.getEndMode()){ queryWrapper.eq(TChargingOrder::getEndMode, order.getEndMode()); diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml index 4351904..610e7a8 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml @@ -61,15 +61,29 @@ WHERE `status` = 1 and del_flag = 0 and type = #{appGoodQuery.type} UNION ALL SELECT - id,name,redeem_points as redeemPoints,inventory_quantity as inventory,payment_amount as originalPrice,payment_amount as preferentiaPrice,vip_payment_amount as vipPrice,2 as goodType,cover_picture as coverPicture,0 as underlyingSales + id, + NAME, + redeem_points AS redeemPoints, + inventory_quantity AS inventory, + payment_amount AS originalPrice, + payment_amount AS preferentiaPrice, + vip_payment_amount AS vipPrice, + 2 AS goodType, + cover_picture AS coverPicture, + 0 AS underlyingSales FROM t_coupon - WHERE `status`= 1 and del_flag = 0 and ways_to_obtain != #{appGoodQuery.type} + WHERE + `status` = 1 + AND del_flag = 0 and ways_to_obtain != #{appGoodQuery.type} + AND ( + validity_period_mode != 1 + OR (validity_period_mode = 1 AND end_time >= NOW()) + ) ORDER BY CASE - - WHEN `inventory` = 0 THEN - 0 ELSE 1 + WHEN `inventory` = 0 THEN 0 + ELSE 1 END DESC, `redeemPoints` ASC </select> -- Gitblit v1.7.1