From c4664502dfdaffff555b532e65b51a57ac8b29c2 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期三, 16 十月 2024 17:51:32 +0800 Subject: [PATCH] 合并代码 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 340 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 338 insertions(+), 2 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java index 2440069..38cd013 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java @@ -1,10 +1,46 @@ package com.ruoyi.order.service.impl; +import com.alibaba.fastjson2.JSON; +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.order.api.model.TOrderInvoice; +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.*; +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.TOrderInvoiceService; +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; +import com.ruoyi.other.api.feignClient.CouponClient; +import com.ruoyi.other.api.feignClient.GoodsClient; +import com.ruoyi.other.api.feignClient.InvoiceTypeClient; +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; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -16,5 +52,305 @@ */ @Service public class TOrderInvoiceServiceImpl extends ServiceImpl<TOrderInvoiceMapper, TOrderInvoice> implements TOrderInvoiceService { + + @Resource + private TokenService tokenService; + + @Resource + private TOrderInvoiceDetailService orderInvoiceDetailService; + + @Resource + private InvoiceTypeClient invoiceTypeClient; + + @Resource + private TChargingOrderService chargingOrderService; + + @Resource + private TShoppingOrderService shoppingOrderService; + + @Resource + private ChargingGunClient chargingGunClient; + + @Resource + private SiteClient siteClient; + + @Resource + private GoodsClient goodsClient; + + @Resource + private CouponClient couponClient; + @Resource + private AppUserClient appUserClient; + + @Resource + private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; + + + + + /** + * 添加开票申请 + * @param addOrderInvoice + * @return + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public AjaxResult addOrderInvoice(AddOrderInvoice addOrderInvoice) { + Long userId = tokenService.getLoginUserApplet().getUserId(); + String orders = addOrderInvoice.getOrders(); + if(StringUtils.isEmpty(orders)){ + return AjaxResult.error("请选择有效的订单"); + } + JSONArray parse = JSONArray.parse(orders); + List<Long> orderIds = new ArrayList<>(); + Map<Long, BigDecimal> map = new HashMap<>(); + for (int i = 0; i < parse.size(); i++) { + JSONObject jsonObject = parse.getJSONObject(i); + Long id = jsonObject.getLong("id"); + BigDecimal amount = jsonObject.getBigDecimal("amount"); + orderIds.add(id); + map.put(id, amount); + } + long count = orderInvoiceDetailService.count(new LambdaQueryWrapper<TOrderInvoiceDetail>().eq(TOrderInvoiceDetail::getOrderType, addOrderInvoice.getOrderType()) + .in(TOrderInvoiceDetail::getOrderId, orderIds)); + if(count > 0){ + return AjaxResult.error("不能重复申请开票,请刷新数据后重试"); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date()); + //获取开票类型 + TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData(); + addOrderInvoice.setInvoicingCompany(invoiceType.getInvoicingCompany()); + addOrderInvoice.setInvoiceType(invoiceType.getName()); + addOrderInvoice.setInvoiceMaterial(2); + addOrderInvoice.setInvoicingMethod(invoiceType.getInvoicingMethod()); + addOrderInvoice.setAppUserId(userId); + addOrderInvoice.setCode(code); + addOrderInvoice.setStatus(1); + addOrderInvoice.setCreateTime(LocalDateTime.now()); + this.save(addOrderInvoice); + 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)); + orderInvoiceDetail.setOrderType(addOrderInvoice.getOrderType()); + orderInvoiceDetail.setOrderId(orderId); + 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(); + } + + + /** + * 获取开票记录列表 + * @param query + * @return + */ + @Override + public List<OrderInvoiceList> getMyOrderInvoiceList(GetOrderInvoiceList query) { + Long userId = tokenService.getLoginUserApplet().getUserId(); + Integer pageCurr = (query.getPageCurr() - 1) * query.getPageSize(); + List<TOrderInvoice> list = this.list(new LambdaQueryWrapper<TOrderInvoice>().eq(TOrderInvoice::getAppUserId, userId) + .eq(TOrderInvoice::getStatus, query.getStatus()).orderByDesc(TOrderInvoice::getCreateTime) + .last(" limit " + pageCurr + ", " + query.getPageSize())); + List<OrderInvoiceList> pageList = new ArrayList<>(); + for (TOrderInvoice tOrderInvoice : list) { + OrderInvoiceList orderInvoiceList = new OrderInvoiceList(); + orderInvoiceList.setId(tOrderInvoice.getId().toString()); + orderInvoiceList.setOrderType(tOrderInvoice.getOrderType()); + orderInvoiceList.setTotalAmount(tOrderInvoice.getTotalAmount()); + orderInvoiceList.setName(tOrderInvoice.getName()); + orderInvoiceList.setCreateTime(tOrderInvoice.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + pageList.add(orderInvoiceList); + } + return pageList; + } + + + /** + * 获取开票申请详情 + * @param id + * @return + */ + @Override + public MyOrderInvoiceInfo getMyOrderInvoiceInfo(String id) { + TOrderInvoice orderInvoice = this.getById(id); + MyOrderInvoiceInfo myOrderInvoiceInfo = new MyOrderInvoiceInfo(); + myOrderInvoiceInfo.setId(id); + myOrderInvoiceInfo.setCode(orderInvoice.getCode()); + myOrderInvoiceInfo.setInvoiceType(orderInvoice.getInvoiceType()); + myOrderInvoiceInfo.setOrderType(orderInvoice.getOrderType()); + myOrderInvoiceInfo.setInvoicingObjectType(orderInvoice.getInvoicingObjectType()); + myOrderInvoiceInfo.setTotalAmount(orderInvoice.getTotalAmount()); + myOrderInvoiceInfo.setInvoiceUrl(orderInvoice.getInvoiceUrl()); + myOrderInvoiceInfo.setStatus(orderInvoice.getStatus()); + Integer orderType = orderInvoice.getOrderType(); + List<TOrderInvoiceDetail> list = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>().eq(TOrderInvoiceDetail::getOrderInvoiceId, id)); + List<Long> orderIds = list.stream().map(TOrderInvoiceDetail::getOrderId).collect(Collectors.toList()); + //充电订单 + if(orderType == 1){ + List<TChargingOrder> orderList = chargingOrderService.listByIds(orderIds); + List<MyChargingOrderList> chargingOrder = new ArrayList<>(); + for (TChargingOrder tChargingOrder : orderList) { + MyChargingOrderList myChargingOrderList = new MyChargingOrderList(); + myChargingOrderList.setId(tChargingOrder.getId().toString()); + myChargingOrderList.setStatus(tChargingOrder.getStatus()); + Site site = siteClient.getSiteByIds(Arrays.asList(tChargingOrder.getSiteId())).getData().get(0); + myChargingOrderList.setTitle(site.getName()); + myChargingOrderList.setChargingDegree(tChargingOrder.getChargingCapacity()); + String name = chargingGunClient.getAllName(tChargingOrder.getChargingGunId()).getData(); + myChargingOrderList.setName(name); + myChargingOrderList.setEndMode(tChargingOrder.getEndMode()); + BigDecimal payMoney = tChargingOrder.getStatus() < 4 ? tChargingOrder.getRechargeAmount() : tChargingOrder.getPaymentAmount(); + myChargingOrderList.setPayMoney(payMoney); + myChargingOrderList.setCreateTime(tChargingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + chargingOrder.add(myChargingOrderList); + } + myOrderInvoiceInfo.setChargingOrder(chargingOrder); + } + //购物订单 + if(orderType == 2){ + List<TShoppingOrder> orderList = shoppingOrderService.listByIds(orderIds); + List<MyShoppingOrderList> shoppingOrder = new ArrayList<>(); + for (TShoppingOrder tShoppingOrder : orderList) { + MyShoppingOrderList myShoppingOrderList = new MyShoppingOrderList(); + myShoppingOrderList.setId(tShoppingOrder.getId().toString()); + String name = ""; + String imgUrl = ""; + if(tShoppingOrder.getOrderType() == 1){ + TGoods goods = goodsClient.getGoodsById(tShoppingOrder.getGoodsId()).getData(); + name = goods.getName(); + imgUrl = goods.getCoverPicture(); + }else{ + TCoupon coupon = couponClient.getCouponById1(tShoppingOrder.getGoodsId()).getData(); + name = coupon.getName(); + imgUrl = coupon.getCoverPicture(); + } + myShoppingOrderList.setName(name); + myShoppingOrderList.setImgUrl(imgUrl); + myShoppingOrderList.setStatus(tShoppingOrder.getStatus()); + BigDecimal unitPrice = tShoppingOrder.getPaymentAmount().divide(new BigDecimal(tShoppingOrder.getPurchaseQuantity())).setScale(2, BigDecimal.ROUND_HALF_EVEN); + myShoppingOrderList.setUnitPrice(unitPrice); + myShoppingOrderList.setNumber(tShoppingOrder.getPurchaseQuantity()); + myShoppingOrderList.setPaymentAmount(tShoppingOrder.getPaymentAmount()); + shoppingOrder.add(myShoppingOrderList); + } + myOrderInvoiceInfo.setShoppingOrder(shoppingOrder); + } + return myOrderInvoiceInfo; + } + + @Override + public PageInfo<TOrderInvoiceVO> pageList(TOrderInvoiceQuery query) { + List<TAppUser> tAppUsers = new ArrayList<>(); + // 查询申请用户 + if (org.springframework.util.StringUtils.hasLength(query.getUserPhone())){ + tAppUsers = appUserClient.selectByPhoneLike(query.getUserPhone()).getData(); + if(CollectionUtils.isEmpty(tAppUsers)){ + return new PageInfo<>(); + } + } + query.setUserIds(tAppUsers.stream().map(TAppUser::getId).collect(Collectors.toList())); + PageInfo<TOrderInvoiceVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); + List<TOrderInvoiceVO> list = this.baseMapper.pageList(query,pageInfo); + for (TOrderInvoiceVO tOrderInvoiceVO : list) { + tOrderInvoiceVO.setUid(tOrderInvoiceVO.getId().toString()); + List<Long> collect = orderInvoiceDetailService.lambdaQuery().eq(TOrderInvoiceDetail::getOrderInvoiceId, tOrderInvoiceVO.getId()).list().stream() + .map(TOrderInvoiceDetail::getOrderId).collect(Collectors.toList()); + // 将其全部转化为String + tOrderInvoiceVO.setIds(collect.stream().map(String::valueOf).collect(Collectors.toList())); + } + // 查询这个开票的订单ids + + if (!list.isEmpty()){ + List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList()); + + List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>() + .in(TOrderInvoiceDetail::getOrderInvoiceId, ids)); + + List<TAppUser> finalTAppUsers = tAppUsers; + list.forEach(e->{ + if (e.getOrderType()!=null&&e.getOrderType()==1){ + e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff()); + }else{ + e.setServiceTariff(new BigDecimal("0")); + } + e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff()); + e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff()); + e.setAddedService(orderInvoiceDetailList.stream().filter(t->t.getAddedService()!=null).map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get()); + e.setElectrovalence(orderInvoiceDetailList.stream().filter(t->t.getElectrovalence()!=null).map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get()); + e.setServiceCharge(orderInvoiceDetailList.stream().filter(t->t.getServiceCharge()!=null).map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get()); + if (e.getBillingUserId()!=null){ + e.setUserPhone(finalTAppUsers.stream().filter(t->t.getId()!=null).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> tAppUsers = new ArrayList<>(); + + if (org.springframework.util.StringUtils.hasLength(query.getUserPhone())){ + tAppUsers = appUserClient.selectByPhoneLike(query.getUserPhone()).getData(); + if(CollectionUtils.isEmpty(tAppUsers)){ + map.put("notAccepted",0); + map.put("processing",0); + map.put("finished",0); + return map; + } + } + + query.setUserIds(tAppUsers.stream().map(TAppUser::getId).collect(Collectors.toList())); + map = this.baseMapper.statusCount(query); + return map; + } + + @Override + public List<TOrderInvoiceVO> export(TOrderInvoiceQuery query) { + List<TAppUser> tAppUsers = new ArrayList<>(); + // 查询申请用户 + if (org.springframework.util.StringUtils.hasLength(query.getUserPhone())){ + tAppUsers = appUserClient.selectByPhoneLike(query.getUserPhone()).getData(); + if(CollectionUtils.isEmpty(tAppUsers)){ + return new ArrayList<TOrderInvoiceVO>(); + } + } + query.setUserIds(tAppUsers.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<TAppUser> finalTAppUsers = tAppUsers; + 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().filter(t->t.getAddedService()!=null).map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get()); + e.setElectrovalence(orderInvoiceDetailList.stream().filter(t->t.getElectrovalence()!=null).map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get()); + e.setServiceCharge(orderInvoiceDetailList.stream().filter(t->t.getServiceCharge()!=null).map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get()); + if (e.getBillingUserId()!=null){ + e.setUserPhone(finalTAppUsers.stream().filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone()); + } + }); + return list; + } } -- Gitblit v1.7.1