无关风月
2024-09-04 78d7911139088c285abbddcb4746f3ea10a94f23
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile
15个文件已修改
3个文件已添加
567 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/pom.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
@@ -64,6 +64,11 @@
            }
            @Override
            public R<List<TAppUser>> selectByPhoneLike(String phone) {
                return R.fail("通过手机号模糊查询用户失败:"+throwable.getMessage());
            }
            @Override
            public R refundPoints(String param) {
                return R.fail("后台兑换订单退款回退用户积分失败:"+throwable.getMessage());
            }
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -69,6 +69,13 @@
    @GetMapping("/t-app-user/user/selectByPhone")
    R<TAppUser> selectByPhone(@RequestParam("phone") String phone);
    /**
     * 通过手机号模糊查询用户
     * @param phone
     * @return
     */
    @GetMapping("/t-app-user/user/selectByPhoneLike")
    R<List<TAppUser>> selectByPhoneLike(@RequestParam("phone") String phone);
    /**
     * 远程调用 积分兑换订单 退款回退积分
     * @return
     */
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -114,6 +115,7 @@
    private LocalDateTime createTime;
    
    @ApiModelProperty(value = "开票时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField("billing_time")
    private LocalDateTime billingTime;
    
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java
@@ -59,6 +59,14 @@
    @ApiModelProperty(value = "增值服务费税率")
    @TableField("added_service_tariff")
    private BigDecimal addedServiceTariff;
    @ApiModelProperty(value = "'电费'")
    @TableField("electrovalence")
    private BigDecimal electrovalence;
    @ApiModelProperty(value = "'服务费'")
    @TableField("service_charge")
    private BigDecimal serviceCharge;
    @ApiModelProperty(value = "'增值服务费'")
    @TableField("added_service")
    private BigDecimal addedService;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.order.api.query;
import com.ruoyi.common.core.query.TimeRangePageQuery;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "发票管理Query")
public class TOrderInvoiceQuery extends TimeRangePageQuery {
    @ApiModelProperty(value = "开票公司")
    private String invoicingCompany;
    @ApiModelProperty(value = "发票类型")
    private String invoiceType;
    @ApiModelProperty(value = "抬头类型(1=个人,2=企业)")
    private Integer invoicingObjectType;
    @ApiModelProperty(value = "发票种类(1=纸质发票,2=电子发票)")
    private Integer invoiceMaterial;
    @ApiModelProperty(value = "开票方式(1=人工,2=自动)")
    private Integer invoicingMethod;
    @ApiModelProperty(value = "申请人电话")
    private String userPhone;
    @ApiModelProperty(value = "申请人姓名")
    private String nickName;
    @ApiModelProperty(value = "公司名称")
    private String name;
    @ApiModelProperty(value = "用户id 前端忽略")
    private List<Long> userIds;
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.order.api.vo;
import com.ruoyi.order.api.model.TOrderInvoice;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@ApiModel(value = "发票管理VO")
public class TOrderInvoiceVO extends TOrderInvoice {
    @ApiModelProperty(value = "电费税率")
    private BigDecimal electricityTariff;
    @ApiModelProperty(value = "服务费税率")
    private BigDecimal serviceTariff;
    @ApiModelProperty(value = "增值服务费税率")
    private BigDecimal addedServiceTariff;
    @ApiModelProperty(value = "电费")
    private BigDecimal electrovalence;
    @ApiModelProperty(value = "服务费")
    private BigDecimal serviceCharge;
    @ApiModelProperty(value = "增值服务费")
    private BigDecimal addedService;
    @ApiModelProperty(value = "用户电话")
    private String userPhone;
}
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java
@@ -372,5 +372,16 @@
        return LocalTime.parse(time, formatter);
    }
    /**
     * localdatetime转为字符串
     *
     * @param time localdatetime
     * @return 字符串
     */
    public static String localDateTimeToString(LocalDateTime time) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return df.format(time);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -725,6 +725,16 @@
                .eq(TAppUser::getPhone,phone)
                .last("LIMIT 1")));
    }
    /**
     * 通过手机号模糊查询用户
     * @param phone
     * @return
     */
    @GetMapping("/user/selectByPhoneLike")
    public R<List<TAppUser>> selectByPhoneLike(@RequestParam("phone") String phone){
        return R.ok(appUserService.list(Wrappers.lambdaQuery(TAppUser.class)
                .eq(TAppUser::getPhone,phone)));
    }
    @ApiOperation(value = "签到", tags = {"小程序-个人中心-签到"})
    @GetMapping(value = "/user/sign")
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -92,7 +92,7 @@
    public AjaxResult<List<TAccountingStrategyDetailVO>> queryAccountingStrategyDetailByStrategyId(@RequestParam("strategyId") Integer strategyId) {
        List<TAccountingStrategyDetailVO> list = accountingStrategyDetailService.queryAccountingStrategyDetailByStrategyId(strategyId);
        list.forEach(detail -> {
            detail.setTotalPrice(detail.getElectrovalence().add(detail.getElectrovalence()));
            detail.setTotalPrice(detail.getElectrovalence().add(detail.getServiceCharge()));
        });
        return AjaxResult.ok(list);
    }
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java
@@ -2,6 +2,11 @@
import com.ruoyi.integration.api.model.AcquisitionBillingMode;
import com.ruoyi.integration.api.model.BillingModeVerify;
import com.ruoyi.integration.api.model.BillingModeVerifyReply;
import com.ruoyi.integration.iotda.enums.ServiceIdMenu;
import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce;
import com.ruoyi.integration.iotda.utils.tools.MessageUtil;
import com.ruoyi.integration.mongodb.service.BillingModeVerifyReplyService;
import com.ruoyi.integration.mongodb.service.BillingModeVerifyService;
import com.ruoyi.integration.rocket.model.BillingModeVerifyMessage;
import com.ruoyi.integration.rocket.util.EnhanceMessageHandler;
@@ -24,6 +29,10 @@
    @Autowired
    private BillingModeVerifyService billingModeVerifyService;
    @Autowired
    private IotMessageProduce iotMessageProduce;
    @Autowired
    private MessageUtil messageUtil;
    @Override
    protected void handleMessage(BillingModeVerifyMessage message) throws Exception {
@@ -34,6 +43,18 @@
        BeanUtils.copyProperties(message,billingModeVerify);
        billingModeVerifyService.create(billingModeVerify);
        // 业务处理
        BillingModeVerifyReply billingModeVerifyReply = new BillingModeVerifyReply();
        if(message.getBilling_model_code().equals("0")){
            // 首次
            billingModeVerifyReply.setCharging_pile_code(billingModeVerify.getCharging_pile_code());
            billingModeVerifyReply.setBilling_model_code("0");
            billingModeVerifyReply.setBilling_model_result(1);
            iotMessageProduce.sendMessage(billingModeVerifyReply.getCharging_pile_code(), ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply));
        }else {
            // 校验计费模版是否准确
        }
    }
    @Override
ruoyi-service/ruoyi-order/pom.xml
@@ -140,6 +140,18 @@
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.0.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>guava</artifactId>
                    <groupId>com.google.guava</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
@@ -1,18 +1,37 @@
package com.ruoyi.order.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.WebUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.order.api.model.TOrderInvoice;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
import com.ruoyi.order.api.vo.TOrderInvoiceVO;
import com.ruoyi.order.dto.AddOrderInvoice;
import com.ruoyi.order.dto.GetOrderInvoiceList;
import com.ruoyi.order.dto.MyOrderInvoiceInfo;
import com.ruoyi.order.dto.OrderInvoiceList;
import com.ruoyi.order.export.OrderInvoiceExport;
import com.ruoyi.order.service.TOrderInvoiceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -39,8 +58,68 @@
    public AjaxResult addOrderInvoice(@RequestBody AddOrderInvoice addOrderInvoice){
        return orderInvoiceService.addOrderInvoice(addOrderInvoice);
    }
    @PostMapping("/pageList")
    @ApiOperation(value = "查询开票分页列表", tags = {"管理后台-发票管理"})
    public AjaxResult<PageInfo<TOrderInvoiceVO>> pageList(@RequestBody TOrderInvoiceQuery query){
        return AjaxResult.success(orderInvoiceService.pageList(query));
    }
    @GetMapping("/uploadPdf")
    @ApiOperation(value = "上传发票", tags = {"管理后台-发票管理"})
    public AjaxResult<String> uploadPdf(@RequestParam("id") Long id,
                                        @RequestParam("invoiceUrl") String invoiceUrl){
        TOrderInvoice orderInvoice = orderInvoiceService.getById(id);
        orderInvoice.setInvoiceUrl(invoiceUrl);
        orderInvoiceService.updateById(orderInvoice);
        return AjaxResult.success();
    }
    @PostMapping("/statusCount")
    @ApiOperation(value = "查询开票状态数量", tags = {"管理后台-发票管理"})
    public AjaxResult<Map<String,Integer>> statusCount(@RequestBody TOrderInvoiceQuery query){
        return AjaxResult.success(orderInvoiceService.statusCount(query));
    }
    /**
     * 发票管理导出
     */
    @ApiOperation(value = "发票管理导出")
    @Log(title = "发票管理导出", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(@RequestBody TOrderInvoiceQuery query)
    {
        List<TOrderInvoiceVO> list = orderInvoiceService.export(query);
        List<OrderInvoiceExport> orderInvoiceExports = new ArrayList<>();
        for (TOrderInvoiceVO orderInvoiceVO : list) {
            OrderInvoiceExport orderInvoiceExport = new OrderInvoiceExport();
            BeanUtils.copyProperties(orderInvoiceVO,orderInvoiceExport);
            orderInvoiceExport.setBillingTime(DateUtils.localDateTimeToString(orderInvoiceVO.getBillingTime()));
            orderInvoiceExports.add(orderInvoiceExport);
        }
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), OrderInvoiceExport.class, orderInvoiceExports);
        HttpServletResponse response = WebUtils.response();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        ServletOutputStream outputStream = null;
        try {
            String fileName = URLEncoder.encode("发票导出.xls", "utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    @ResponseBody
    @GetMapping("/getMyOrderInvoiceList")
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java
New file
@@ -0,0 +1,79 @@
package com.ruoyi.order.export;
import cn.afterturn.easypoi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ApiModel(value = "导出发票")
public class OrderInvoiceExport implements Serializable {
    @Excel(name = "申请单编号",width = 30)
    private String code;
    @Excel(name  = "申请日期",width = 30)
    private String billingTime;
    @Excel(name  = "开票公司",width = 30)
    private String invoicingCompany;
    @Excel(name  = "发票类型",width = 30)
    private String invoiceType;
    @Excel(name  = "发票种类",replace = {"纸质发票_1","电子发票_2"},width = 30)
    private Integer invoiceMaterial;
    @Excel(name  = "开票方式",replace = {"人工_1","自动_2"},width = 30)
    private Integer invoicingMethod;
    @Excel(name  = "开票总金额",width = 30)
    private BigDecimal totalAmount;
    @Excel(name  = "服务费",width = 30)
    private BigDecimal serviceCharge;
    @Excel(name  = "服务费税率",width = 30)
    private BigDecimal serviceTariff;
    @Excel(name  = "增值服务费",width = 30)
    private BigDecimal addedService;
    @Excel(name  = "增值服务费税率",width = 30)
    private BigDecimal addedServiceTariff;
//    @Excel(name  = "开票订单类型",replace = {"充电订单_1","购物订单_2","兑换订单_3","会员订单_4"},width = 30)
//    private Integer orderType;
    @Excel(name  = "抬头类型",replace = {"个人_1","企业_2"},width = 30)
    private Integer invoicingObjectType;
    @Excel(name  = "发票抬头",width = 30)
    private String name;
    @Excel(name  = "开户银行",width = 30)
    private String depositBank;
    @Excel(name  = "银行账户",width = 30)
    private String bankAccount;
    @Excel(name  = "公司电话",width = 30)
    private String companyPhone;
    @Excel(name  = "纳税识别号",width = 30)
    private String taxIdentificationNumber;
    @Excel(name  = "公司地址",width = 30)
    private String companyAddress;
    @Excel(name  = "邮箱",width = 30)
    private String mailbox;
    @Excel(name  = "状态",replace = {"待开票_1","开票中_2","已开票_3"},width = 30)
    private Integer status;
    @Excel(name  = "用户电话",width = 30)
    private String userPhone;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java
@@ -1,8 +1,15 @@
package com.ruoyi.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.model.TOrderInvoice;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
import com.ruoyi.order.api.vo.TOrderInvoiceVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -15,4 +22,26 @@
@Mapper
public interface TOrderInvoiceMapper extends BaseMapper<TOrderInvoice> {
    /**
     * 发票分页查询
     * @param query
     * @param pageInfo
     * @return
     */
    List<TOrderInvoiceVO> pageList(@Param("query") TOrderInvoiceQuery query, @Param("pageInfo")PageInfo<TOrderInvoiceVO> pageInfo);
    /**
     * 查询开票状态数量
     * @param query
     * @return
     */
    Map<String, Integer> statusCount(@Param("query")TOrderInvoiceQuery query);
    /**
     * 导出
     * @param query
     * @return
     */
    List<TOrderInvoiceVO> export(@Param("query")TOrderInvoiceQuery query);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java
@@ -2,13 +2,17 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.model.TOrderInvoice;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
import com.ruoyi.order.api.vo.TOrderInvoiceVO;
import com.ruoyi.order.dto.AddOrderInvoice;
import com.ruoyi.order.dto.GetOrderInvoiceList;
import com.ruoyi.order.dto.MyOrderInvoiceInfo;
import com.ruoyi.order.dto.OrderInvoiceList;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -43,4 +47,26 @@
     * @return
     */
    MyOrderInvoiceInfo getMyOrderInvoiceInfo(String id);
    /**
     * 查询开票分页列表
     * @param query
     * @return
     */
    PageInfo<TOrderInvoiceVO> pageList(TOrderInvoiceQuery query);
    /**
     * 查询开票状态数量
     * @param query
     * @return
     */
    Map<String,Integer> statusCount(TOrderInvoiceQuery query);
    /**
     * 发票管理导出
     * @param query
     * @return
     */
    List<TOrderInvoiceVO> export(TOrderInvoiceQuery query);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java
@@ -4,17 +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.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;
@@ -30,6 +38,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 +84,9 @@
    
    @Resource
    private CouponClient couponClient;
    @Resource
    private AppUserClient appUserClient;
    
    
    
@@ -228,4 +239,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;
    }
}
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml
@@ -12,11 +12,14 @@
        <result column="electricity_tariff" property="electricityTariff" />
        <result column="service_tariff" property="serviceTariff" />
        <result column="added_service_tariff" property="addedServiceTariff" />
        <result column="electrovalence" property="electrovalence" />
        <result column="service_charge" property="serviceCharge" />
        <result column="added_service" property="addedService" />
    </resultMap>
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, order_invoice_id, order_type, order_id, invoice_amount, electricity_tariff, service_tariff, added_service_tariff
        id, order_invoice_id, order_type, order_id, invoice_amount, electricity_tariff, service_tariff, added_service_tariff,electrovalence,service_charge,added_service
    </sql>
</mapper>
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml
@@ -33,5 +33,115 @@
    <sql id="Base_Column_List">
        id, code, app_user_id, order_type, invoicing_company, invoice_type_id, invoice_type, invoice_material, invoicing_method, invoicing_object_type, name, tax_identification_number, company_address, company_phone, deposit_bank, bank_account, total_amount, invoice_url, mailbox, status, create_time, billing_time, billing_user_id
    </sql>
    <select id="pageList" resultType="com.ruoyi.order.api.vo.TOrderInvoiceVO">
        select toi.id, toi.code, toi.app_user_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material,
               toi.invoicing_method, toi.invoicing_object_type, toi.name, toi.tax_identification_number, toi.company_address, toi.company_phone,
               toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.status, toi.create_time, toi.billing_time,
               toi.billing_user_id
        from t_order_invoice toi
        <where>
            <if test="query.invoicingCompany != null and query.invoicingCompany != ''">
                AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%')
            </if>
            <if test="query.invoiceType != null and query.invoiceType != ''">
                AND toi.invoice_type LIKE concat('%',#{query.invoiceType},'%')
            </if>
            <if test="query.invoicingObjectType != null">
                AND toi.invoicing_object_type = #{query.invoicingObjectType}
            </if>
            <if test="query.invoiceMaterial != null">
                AND toi.invoice_material = #{query.invoiceMaterial}
            </if>
            <if test="query.invoicingMethod != null">
                AND toi.invoicing_method = #{query.invoicingMethod}
            </if>
            <if test="query.name != null and query.name != ''">
                AND toi.name LIKE concat('%',#{query.name},'%')
            </if>
            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime}
            </if>
            <if test="query.userIds != null and query.userIds.size()>0">
                AND toi.billing_user_id IN
                <foreach collection="query.userIds" close=")" open="(" item="userId" separator=",">
                    #{userId}
                </foreach>
            </if>
        </where>
        ORDER BY toi.billing_time DESC
    </select>
    <select id="statusCount" resultType="java.util.Map">
        select
            COUNT(CASE WHEN status = 1 THEN 1 END) AS `notAccepted`,
            COUNT(CASE WHEN status = 2 THEN 1 END) AS `processing`,
            COUNT(CASE WHEN status = 3 THEN 1 END) AS `finished`
        from t_order_invoice toi
        <where>
            <if test="query.invoicingCompany != null and query.invoicingCompany != ''">
                AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%')
            </if>
            <if test="query.invoiceType != null and query.invoiceType != ''">
                AND toi.invoice_type LIKE concat('%',#{query.invoiceType},'%')
            </if>
            <if test="query.invoicingObjectType != null">
                AND toi.invoicing_object_type = #{query.invoicingObjectType}
            </if>
            <if test="query.invoiceMaterial != null">
                AND toi.invoice_material = #{query.invoiceMaterial}
            </if>
            <if test="query.invoicingMethod != null">
                AND toi.invoicing_method = #{query.invoicingMethod}
            </if>
            <if test="query.name != null and query.name != ''">
                AND toi.name LIKE concat('%',#{query.name},'%')
            </if>
            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime}
            </if>
            <if test="query.userIds != null and query.userIds.size()>0">
                AND toi.billing_user_id IN
                <foreach collection="query.userIds" close=")" open="(" item="userId" separator=",">
                    #{userId}
                </foreach>
            </if>
        </where>
    </select>
    <select id="export" resultType="com.ruoyi.order.api.vo.TOrderInvoiceVO">
        select toi.id, toi.code, toi.app_user_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material,
        toi.invoicing_method, toi.invoicing_object_type, toi.name, toi.tax_identification_number, toi.company_address, toi.company_phone,
        toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.status, toi.create_time, toi.billing_time,
        toi.billing_user_id
        from t_order_invoice toi
        <where>
            <if test="query.invoicingCompany != null and query.invoicingCompany != ''">
                AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%')
            </if>
            <if test="query.invoiceType != null and query.invoiceType != ''">
                AND toi.invoice_type LIKE concat('%',#{query.invoiceType},'%')
            </if>
            <if test="query.invoicingObjectType != null">
                AND toi.invoicing_object_type = #{query.invoicingObjectType}
            </if>
            <if test="query.invoiceMaterial != null">
                AND toi.invoice_material = #{query.invoiceMaterial}
            </if>
            <if test="query.invoicingMethod != null">
                AND toi.invoicing_method = #{query.invoicingMethod}
            </if>
            <if test="query.name != null and query.name != ''">
                AND toi.name LIKE concat('%',#{query.name},'%')
            </if>
            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime}
            </if>
            <if test="query.userIds != null and query.userIds.size()>0">
                AND toi.billing_user_id IN
                <foreach collection="query.userIds" close=")" open="(" item="userId" separator=",">
                    #{userId}
                </foreach>
            </if>
        </where>
        ORDER BY toi.billing_time DESC
    </select>
</mapper>