无关风月
2024-09-10 caa2b51bb4133f5a2e59eac242e744fb57f864a0
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
@@ -4,23 +4,25 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.model.TOrderInvoice;
import com.ruoyi.order.api.model.TOrderInvoiceDetail;
import com.ruoyi.order.api.model.TShoppingOrder;
import com.ruoyi.order.api.model.*;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
import com.ruoyi.order.api.vo.TOrderEvaluateVO;
import com.ruoyi.order.api.vo.TOrderInvoiceVO;
import com.ruoyi.order.dto.*;
import com.ruoyi.order.mapper.TOrderInvoiceMapper;
import com.ruoyi.order.service.TChargingOrderService;
import com.ruoyi.order.service.TOrderInvoiceDetailService;
import com.ruoyi.order.service.TOrderInvoiceService;
import com.ruoyi.order.service.TShoppingOrderService;
import com.ruoyi.order.service.*;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TGoods;
import com.ruoyi.other.api.domain.TInvoiceType;
@@ -30,6 +32,7 @@
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -75,7 +78,12 @@
   
   @Resource
   private CouponClient couponClient;
   @Resource
   private AppUserClient appUserClient;
   
   @Resource
   private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
   
   
   
@@ -90,7 +98,7 @@
   public AjaxResult addOrderInvoice(AddOrderInvoice addOrderInvoice) {
      Long userId = tokenService.getLoginUserApplet().getUserId();
      String orders = addOrderInvoice.getOrders();
      if(StringUtils.isNotEmpty(orders)){
      if(StringUtils.isEmpty(orders)){
         return AjaxResult.error("请选择有效的订单");
      }
      JSONArray parse = JSONArray.parse(orders);
@@ -117,6 +125,11 @@
      //获取开票类型
      TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData();
      for (Long orderId : orderIds) {
         List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>()
               .eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId));
         BigDecimal electrovalence = list.stream().map(TChargingOrderAccountingStrategy::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal serviceCharge = list.stream().map(TChargingOrderAccountingStrategy::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add);
         TOrderInvoiceDetail orderInvoiceDetail = new TOrderInvoiceDetail();
         orderInvoiceDetail.setOrderInvoiceId(addOrderInvoice.getId());
         orderInvoiceDetail.setInvoiceAmount(map.get(orderId));
@@ -125,6 +138,9 @@
         orderInvoiceDetail.setElectricityTariff(invoiceType.getElectricityTariff());
         orderInvoiceDetail.setServiceTariff(invoiceType.getServiceTariff());
         orderInvoiceDetail.setAddedServiceTariff(invoiceType.getAddedServiceTariff());
         orderInvoiceDetail.setElectrovalence(electrovalence);
         orderInvoiceDetail.setServiceCharge(serviceCharge);
         orderInvoiceDetail.setAddedService(serviceCharge.multiply(invoiceType.getAddedServiceTariff().divide(new BigDecimal(100))));
         orderInvoiceDetailService.save(orderInvoiceDetail);
      }
      return AjaxResult.success();
@@ -228,4 +244,74 @@
      }
      return myOrderInvoiceInfo;
   }
   @Override
   public PageInfo<TOrderInvoiceVO> pageList(TOrderInvoiceQuery query) {
      // 查询申请用户
      List<TAppUser> userList = appUserClient.selectByPhoneLike(query.getUserPhone()).getData();
      if(CollectionUtils.isEmpty(userList)){
         return new PageInfo<>();
      }
      query.setUserIds(userList.stream().map(TAppUser::getId).collect(Collectors.toList()));
      PageInfo<TOrderInvoiceVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
      List<TOrderInvoiceVO> list = this.baseMapper.pageList(query,pageInfo);
      List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList());
      List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>()
            .in(TOrderInvoiceDetail::getOrderInvoiceId, ids));
      list.forEach(e->{
         e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff());
         e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff());
         e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff());
         e.setAddedService(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get());
         e.setElectrovalence(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get());
         e.setServiceCharge(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get());
         e.setUserPhone(userList.stream().filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone());
      });
      pageInfo.setRecords(list);
      return pageInfo;
   }
   @Override
   public Map<String, Integer> statusCount(TOrderInvoiceQuery query) {
      Map<String, Integer> map = new HashMap<>();
      List<TAppUser> userList = appUserClient.selectByPhoneLike(query.getUserPhone()).getData();
      if(CollectionUtils.isEmpty(userList)){
         map.put("notAccepted",0);
         map.put("processing",0);
         map.put("finished",0);
         return map;
      }
      query.setUserIds(userList.stream().map(TAppUser::getId).collect(Collectors.toList()));
      map = this.baseMapper.statusCount(query);
      return map;
   }
   @Override
   public List<TOrderInvoiceVO> export(TOrderInvoiceQuery query) {
      // 查询申请用户
      List<TAppUser> userList = appUserClient.selectByPhoneLike(query.getUserPhone()).getData();
      if(CollectionUtils.isEmpty(userList)){
         return new ArrayList<>();
      }
      query.setUserIds(userList.stream().map(TAppUser::getId).collect(Collectors.toList()));
      PageInfo<TOrderInvoiceVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize());
      List<TOrderInvoiceVO> list = this.baseMapper.export(query);
      List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList());
      List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>()
            .in(TOrderInvoiceDetail::getOrderInvoiceId, ids));
      list.forEach(e->{
         e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff());
         e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff());
         e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff());
         e.setAddedService(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get());
         e.setElectrovalence(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get());
         e.setServiceCharge(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get());
         e.setUserPhone(userList.stream().filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone());
      });
      return list;
   }
}