luodangjia
2024-09-26 3c99ce947f25a2dcbae14e78276df77978d412ca
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -51,10 +51,8 @@
import com.ruoyi.other.api.domain.TGoods;
import com.ruoyi.order.vo.ChargingOrderListInfoVO;
import com.ruoyi.other.api.domain.TIntegralRule;
import com.ruoyi.other.api.feignClient.IntegralRuleClient;
import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.feignClient.RoleSiteClient;
import com.ruoyi.other.api.feignClient.UserSiteClient;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.feignClient.*;
import com.ruoyi.payment.api.feignClient.AliPaymentClient;
import com.ruoyi.payment.api.feignClient.WxPaymentClient;
import com.ruoyi.payment.api.model.RefundReq;
@@ -70,6 +68,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
@@ -181,6 +180,9 @@
   @Resource
   private IntegralRuleClient integralRuleClient;
   @Resource
   private VipClient vipClient;
   //计数器
   private Map<String, Integer> counter_map = new HashMap<>();
@@ -417,7 +419,7 @@
      //构建新的待支付订单
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
      TChargingOrder chargingOrder = new TChargingOrder();
      String code = "CD" + Math.random() * 1000 + sdf.format(new Date());
      String code = "CD" + Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());
      chargingOrder.setCode(code);
      chargingOrder.setOrderType(1);
      chargingOrder.setOrderClassification(1);
@@ -633,7 +635,7 @@
         TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
         chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000));
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue());
         chargingOrderRefund.setRefundAmount(rechargeAmount);
         chargingOrderRefund.setRefundStatus(1);
         chargingOrderRefund.setPayType(rechargePaymentType);
@@ -650,7 +652,7 @@
            model.setOut_trade_no(chargingOrder.getCode());
            model.setOut_refund_no(chargingOrderRefund.getRefundCode());
            model.setReason("充电失败,取消充电订单");
            model.setNotify_url("http://221.182.45.100:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund");
            model.setNotify_url("/order/t-charging-order/chargingOrderStartupFailureWxRefund");
            WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
            amount.setRefund(rechargeAmount.multiply(new BigDecimal(100)).intValue());
            amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
@@ -827,13 +829,24 @@
         String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints();
         JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints);
         Integer num1 = jsonObject.getInteger("num1");
         TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
         if(null != appUser1.getVipId()){
            TVip vip = vipClient.getInfo(appUser1.getVipId()).getData();
            Integer doubleIntegration = vip.getDoubleIntegration();
            //双倍积分
            if(1 == doubleIntegration){
               num1 *= 2;
            }
         }
         GetInviteUser query = new GetInviteUser();
         query.setAppUserId(appUser.getInviteUserId());
         query.setAppUserId(appUser1.getId());
         query.setBeInvitedAppUserId(chargingOrder.getAppUserId());
         TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData();
         if(null == inviteUser){
            inviteUser = new TInviteUser();
            inviteUser.setAppUserId(appUser.getInviteUserId());
            inviteUser.setAppUserId(appUser1.getId());
            inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId());
            inviteUser.setAward(num1);
            inviteUser.setCreateTime(LocalDateTime.now());
@@ -842,11 +855,10 @@
            inviteUser.setAward(num1);
            inviteUserClient.updateInviteUser(inviteUser);
         }
         TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
         TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
         String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         appUserIntegralChange.setCode(code);
         appUserIntegralChange.setAppUserId(appUser.getInviteUserId());
         appUserIntegralChange.setAppUserId(appUser1.getId());
         appUserIntegralChange.setChangeType(5);
         appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints());
         appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1);
@@ -894,7 +906,33 @@
      chargingOrder.setStatus(5);
      chargingOrder.setPaymentAmount(payAmount);
      this.updateById(chargingOrder);
      //添加积分
      TIntegralRule integralRule = integralRuleClient.getSet().getData();
      if(null != integralRule){
         TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
         Integer num1 = JSON.parseObject(integralRule.getChargeCredit()).getInteger("num1");
         Integer integral = payAmount.multiply(new BigDecimal(num1)).intValue();
         if(null != appUser.getVipId()){
            TVip vip = vipClient.getInfo(appUser.getVipId()).getData();
            Integer doubleIntegration = vip.getDoubleIntegration();
            //双倍积分
            if(1 == doubleIntegration){
               integral *= 2;
            }
         }
         TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
         appUserIntegralChange.setAppUserId(appUser.getId());
         appUserIntegralChange.setChangeType(2);
         appUserIntegralChange.setHistoricalIntegral(appUser.getPoints());
         appUser.setPoints(appUser.getPoints() + integral);
         appUserIntegralChange.setCurrentIntegral(appUser.getPoints());
         appUserIntegralChange.setCreateTime(LocalDateTime.now());
         appUserClient.updateAppUser(appUser);
         appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
      }
      //计算优惠券
      if(null != chargingOrder.getAppCouponId()){
         //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。
@@ -943,7 +981,7 @@
         TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
         chargingOrderRefund.setChargingOrderId(chargingOrder.getId());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000));
         chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
         chargingOrderRefund.setRefundAmount(refundAmount);
         chargingOrderRefund.setRefundStatus(1);
         chargingOrderRefund.setPayType(rechargePaymentType);
@@ -989,6 +1027,7 @@
      }
   }
@@ -1584,7 +1623,7 @@
      //计算费用,处理退款
      endCharge(chargingOrder);
      //处理推荐奖励(被推荐首单奖励)
      TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
      long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId())
@@ -1594,13 +1633,24 @@
         String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints();
         JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints);
         Integer num1 = jsonObject.getInteger("num1");
         TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
         if(null != appUser1.getVipId()){
            TVip vip = vipClient.getInfo(appUser1.getVipId()).getData();
            Integer doubleIntegration = vip.getDoubleIntegration();
            //双倍积分
            if(1 == doubleIntegration){
               num1 *= 2;
            }
         }
         GetInviteUser query = new GetInviteUser();
         query.setAppUserId(appUser.getInviteUserId());
         query.setAppUserId(appUser1.getId());
         query.setBeInvitedAppUserId(chargingOrder.getAppUserId());
         TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData();
         if(null == inviteUser){
            inviteUser = new TInviteUser();
            inviteUser.setAppUserId(appUser.getInviteUserId());
            inviteUser.setAppUserId(appUser1.getId());
            inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId());
            inviteUser.setAward(num1);
            inviteUser.setCreateTime(LocalDateTime.now());
@@ -1609,20 +1659,20 @@
            inviteUser.setAward(num1);
            inviteUserClient.updateInviteUser(inviteUser);
         }
         TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData();
         TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
         String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         String code = Double.valueOf(Math.random() * 1000).intValue() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
         appUserIntegralChange.setCode(code);
         appUserIntegralChange.setAppUserId(appUser.getInviteUserId());
         appUserIntegralChange.setAppUserId(appUser1.getId());
         appUserIntegralChange.setChangeType(5);
         appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints());
         appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1);
         appUserIntegralChange.setCreateTime(LocalDateTime.now());
         appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
         appUser1.setPoints(appUser1.getPoints() + num1);
         appUserClient.updateAppUser(appUser1);
      }
   }
   /**
@@ -1705,6 +1755,8 @@
   }
   @Resource
   private TShoppingOrderService shoppingOrderService;
   @Override
   public R payRefund(PayOrderRefundDto payOrderQueryDto) {
         if (payOrderQueryDto.getType()==1){
@@ -1717,7 +1769,7 @@
            chargingOrderRefund.setRefundTime(LocalDateTime.now());
            chargingOrderRefund.setCode(tChargingOrder.getCode());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Math.random() * 1000));
            chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
            chargingOrderRefund.setRefundTitle("后台退款");
            chargingOrderRefund.setRefundContent("后台退款");
            chargingOrderRefund.setRefundReason("后台退款");
@@ -1762,10 +1814,61 @@
         }
         if (payOrderQueryDto.getType()==2){
            TShoppingOrder tChargingOrder = shoppingOrderService.getById(payOrderQueryDto.getOrderId());
            TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund();
            chargingOrderRefund.setChargingOrderId(tChargingOrder.getId());
            chargingOrderRefund.setRefundAmount(payOrderQueryDto.getRefundAmount());
            chargingOrderRefund.setRefundStatus(1);
            chargingOrderRefund.setPayType(tChargingOrder.getPaymentType());
            chargingOrderRefund.setRefundTime(LocalDateTime.now());
            chargingOrderRefund.setCode(tChargingOrder.getCode());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            chargingOrderRefund.setRefundCode("GDF" + sdf.format(new Date()) + (Double.valueOf(Math.random() * 1000).intValue()));
            chargingOrderRefund.setRefundTitle("后台退款");
            chargingOrderRefund.setRefundContent("后台退款");
            chargingOrderRefund.setRefundReason("后台退款");
            chargingOrderRefund.setRefundRemark("后台退款");
            chargingOrderRefund.setRefundTotalAmount(tChargingOrder.getRefundAmount().add(payOrderQueryDto.getRefundAmount()));
            chargingOrderRefund.setPayAmount(tChargingOrder.getPaymentAmount());
            if(1 == tChargingOrder.getPaymentType()){
               WxPaymentRefundModel model = new WxPaymentRefundModel();
               model.setOut_trade_no(tChargingOrder.getCode());
               model.setOut_refund_no(chargingOrderRefund.getRefundCode());
               model.setTransaction_id(tChargingOrder.getSerialNumber());
               model.setReason("取消订单");
               model.setNotify_url("http://221.182.45.100:9000/order/t-shopping-order/cancelShoppingOrderWxRefund");
               WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount();
               amount.setRefund(payOrderQueryDto.getRefundAmount().multiply(new BigDecimal(100)).intValue());
               amount.setTotal(tChargingOrder.getPaymentAmount().multiply(new BigDecimal(100)).intValue());
               amount.setCurrency("CNY");
               model.setAmount(amount);
               R<String> orderR = wxPaymentClient.refundOrderR(model);
               if(200 == orderR.getCode()){
                  chargingOrderRefundService.save(chargingOrderRefund);
               }
            }
            if(2 == tChargingOrder.getPaymentType()){
               RefundReq dto = new RefundReq();
               dto.setOutTradeNo(tChargingOrder.getCode());
               dto.setOutRequestNo(tChargingOrder.getCode());
               dto.setRefundAmount(payOrderQueryDto.getRefundAmount().toString());
               dto.setRefundReason("取消订单");
               RefundResp resp = aliPaymentClient.refund(dto).getData();
               if(null != resp){
                  SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE");
                  chargingOrderRefundService.save(chargingOrderRefund);
               }
            }
         }
      return null;
      return R.ok();
   }
@@ -1805,7 +1908,7 @@
      String endTime = dto.getEndTime();
      // 将这两个时间转化为localDateTime
      // 创建 DateTimeFormatter 对象,指定格式
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
      // 将字符串解析为 LocalDateTime 对象
      LocalDateTime localDateTime = LocalDateTime.parse(startTime, formatter);
@@ -1819,10 +1922,10 @@
            .eq("recharge_payment_status",2);
      switch (dto.getType()){
         case 1:
            eq.between("start_time", startTime, endTime);
            eq.between("start_time", localDateTime, localDateTime1);
            break;
         case 2:
            eq.between("end_time", startTime, endTime);
            eq.between("end_time", localDateTime, localDateTime1);
            break;
      }
      List<TChargingOrder> tChargingOrders = this.baseMapper.selectList(eq);
@@ -1907,7 +2010,7 @@
         tSettlementConfirm.setVenue(dto.getVenue());
         tSettlementConfirm.setMetering(dto.getMetering());
         tSettlementConfirm.setClean(dto.getClean());
         tSettlementConfirm.setLossElectronic(dto.getLossElectronic());
         tSettlementConfirm.setLossElectronic(dto.getMeteringElectronic().subtract(dto.getChargingElectronic()));
         tSettlementConfirm.setMaintain(dto.getMaintain());
         tSettlementConfirm.setMeteringElectronic(dto.getMeteringElectronic());
@@ -1934,14 +2037,15 @@
      List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto);
      for (TSettlementConfirm tSettlementConfirm : list) {
         tSettlementConfirm.setUid(tSettlementConfirm.getId().toString());
         Partner data = siteClient.getPartnerR(tSettlementConfirm.getPartnerId()).getData();
         List<Site> data1 = siteClient.getSiteByIds(Arrays.asList(tSettlementConfirm.getSiteId())).getData();
         if (!data1.isEmpty()){
            tSettlementConfirm.setSiteName(data1.get(0).getName());
            Partner data = siteClient.getPartnerR(data1.get(0).getPartnerId()).getData();
            if (data!=null){
               tSettlementConfirm.setPartnerName(data.getName());
            }
         }
         if (data!=null){
            tSettlementConfirm.setPartnerName(data.getName());
         }
         String format = tSettlementConfirm.getStartTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
         String format1 = tSettlementConfirm.getEndTime().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
         tSettlementConfirm.setTime(format+"至"+format1);
@@ -1949,7 +2053,7 @@
      }
      pageInfo.setRecords(list);
      return null;
      return pageInfo;
   }
   @Override
@@ -2058,7 +2162,7 @@
         for (TChargingPile datum : data) {
            bigDecimal = bigDecimal.add(datum.getRatedPower());
         }
         BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(data.size())).setScale(2, RoundingMode.HALF_DOWN);
         tSettlementConfirm.setIncome(tSettlementConfirm.getElectrovalence().add(tSettlementConfirm.getServiceCharge()));
         // todo 计算利用率 该电站充电桩本月利用率:
@@ -2134,6 +2238,71 @@
      return res;
   }
   @Override
   public List<Map<String, Object>> countBySource(List<Integer> siteIds) {
      return this.baseMapper.countBySource(siteIds);
   }
   @Override
   public List<Map<String, Object>> equipmentUserType1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentUserType1(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentUserType2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentUserType2(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapbroke1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapbroke1(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapbroke2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapbroke2(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapOut1(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapOut1(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> equipmentMapOut2(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.equipmentMapOut2(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> needElec(List<Integer> siteIds, ChargingStatisticsQueryDto statisticsQueryDto) {
      return this.baseMapper.needElec(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getHourType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getHourType(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getDateType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getDateType(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getMonthType(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getMonthType(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> getchargingCapacity(List<Integer> siteIds, ChargingDetailQueryDto statisticsQueryDto) {
      return this.baseMapper.getchargingCapacity(siteIds,statisticsQueryDto);
   }
   @Override
   public List<Map<String, Object>> countAllUserData() {
      return this.baseMapper.countAllUserData();
   }
   public static void main(String[] args) {
//      String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));
//      String format1 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm:ss"));