From 78d7911139088c285abbddcb4746f3ea10a94f23 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期三, 04 九月 2024 10:45:05 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java | 21 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java | 79 +++++++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java | 2 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml | 110 +++++++++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java | 29 ++ ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml | 5 ruoyi-service/ruoyi-order/pom.xml | 12 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java | 10 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java | 41 ++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java | 83 ++++++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java | 26 ++ ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java | 11 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java | 5 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 2 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java | 10 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 83 ++++++++ ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java | 7 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java | 31 +++ 18 files changed, 561 insertions(+), 6 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java index 71dc82f..ab00b84 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java +++ b/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()); } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java index f7c1da1..f52c5d9 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java +++ b/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 */ diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java index 280b1b0..5eef671 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java +++ b/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; diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java index 6566de9..c28f9ce 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java +++ b/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; } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java new file mode 100644 index 0000000..f1bad4a --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java @@ -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; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java new file mode 100644 index 0000000..690a19c --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java @@ -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; + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java index 9c314ca..230ce8a 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java +++ b/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); + } + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java index 93d83d5..c40aeb7 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java +++ b/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") diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java index b0b15f2..ed71ef3 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java +++ b/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); } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java index 49dcc6b..5001d80 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java +++ b/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 diff --git a/ruoyi-service/ruoyi-order/pom.xml b/ruoyi-service/ruoyi-order/pom.xml index 51c211d..f5641e4 100644 --- a/ruoyi-service/ruoyi-order/pom.xml +++ b/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> diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java index 8e2cd80..5bbdf95 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java +++ b/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") diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java new file mode 100644 index 0000000..9434e69 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java @@ -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; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java index 224b5dd..9a6fdad 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java +++ b/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); + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java index d44196e..366df75 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java +++ b/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); + } 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 61431f4..fdb077d 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 @@ -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; + } } diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml index b668acb..c9db30f 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml +++ b/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> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml index d7fddbe..c7fdb2d 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml +++ b/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> -- Gitblit v1.7.1