瀏覽代碼

订单与发票抬头关系

guoshuai 1 周之前
父節點
當前提交
8668d6e054

+ 119 - 0
src/main/java/com/qmrb/system/controller/ParkingInvoiceRelationController.java

@@ -0,0 +1,119 @@
+package com.qmrb.system.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.qmrb.system.pojo.dto.ApplyInvoiceDTO;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmrb.system.common.result.PageResult;
+import com.qmrb.system.common.result.Result;
+import com.qmrb.system.common.result.ResultCode;
+import com.qmrb.system.framework.resubmit.Resubmit;
+import com.qmrb.system.service.IParkingInvoiceRelationService;
+import com.qmrb.system.pojo.form.ParkingInvoiceRelationForm;
+import com.qmrb.system.pojo.vo.ParkingInvoiceRelationVO;
+import com.qmrb.system.pojo.query.ParkingInvoiceRelationQuery;
+import com.qmrb.system.pojo.vo.Option;
+
+import cn.hutool.core.util.StrUtil;
+import org.springframework.web.bind.annotation.RestController;
+import jakarta.validation.Valid;
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表 前端控制器
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Tag(name = "停车记录与发票抬头关系表接口")
+@RestController
+@RequestMapping("/api/v1/invoice_relation")
+@CrossOrigin
+public class ParkingInvoiceRelationController{
+
+    @Autowired
+    private IParkingInvoiceRelationService parkingInvoiceRelationService;
+
+	@Operation(summary = "停车记录与发票抬头关系表分页列表", security = {@SecurityRequirement(name = "Authorization")})
+    @GetMapping("/page")
+    public PageResult<ParkingInvoiceRelationVO> getPage(
+            @ParameterObject ParkingInvoiceRelationQuery queryParams
+    ) {
+        Page<ParkingInvoiceRelationVO> result = parkingInvoiceRelationService.getPage(queryParams);
+        return PageResult.success(result);
+    }
+    
+    @Operation(summary = "新增停车记录与发票抬头关系表", security = {@SecurityRequirement(name = "Authorization")})
+    @PostMapping
+    @Resubmit
+    public Result<ParkingInvoiceRelationForm> saveForm(
+            @RequestBody @Valid ParkingInvoiceRelationForm form
+    ) {
+        ParkingInvoiceRelationForm result = parkingInvoiceRelationService.saveForm(form);
+        return Result.success(result);
+    }
+    
+    @Operation(summary = "新增订单记录与发票抬头关系表", security = {@SecurityRequirement(name = "Authorization")})
+    @PostMapping("/saveFormByOrderId")
+    @Resubmit
+    public Result<?> saveFormByOrderId(
+            @RequestBody @Valid ApplyInvoiceDTO dto
+    ) {
+        List<ParkingInvoiceRelationForm> result = parkingInvoiceRelationService.saveFormByOrderId(dto);
+        return Result.success(result);
+    }
+
+    @Operation(summary = "停车记录与发票抬头关系表表单数据", security = {@SecurityRequirement(name = "Authorization")})
+    @GetMapping("/{id}/form")
+    public Result<ParkingInvoiceRelationForm> getForm(
+            @Parameter(description = "停车记录与发票抬头关系表ID") @PathVariable Long id
+    ) {
+    	ParkingInvoiceRelationForm formData = parkingInvoiceRelationService.getFormData(id);
+        return Result.success(formData);
+    }
+
+    @Operation(summary = "修改停车记录与发票抬头关系表", security = {@SecurityRequirement(name = "Authorization")})
+    @PutMapping(value = "/{id}")
+    public Result<?> updateForm(
+            @Parameter(description = "停车记录与发票抬头关系表ID") @PathVariable Long id,
+            @RequestBody @Validated ParkingInvoiceRelationForm form) {
+    	
+        boolean result = parkingInvoiceRelationService.updateForm(id,form);
+        return Result.judge(result);
+    }
+
+    @Operation(summary = "删除停车记录与发票抬头关系表", security = {@SecurityRequirement(name = "Authorization")})
+    @DeleteMapping("/{ids}")
+    public Result<?> deleteUsers(
+            @Parameter(description = "停车记录与发票抬头关系表ID,多个以英文逗号(,)分割") @PathVariable String ids
+    ) {
+    	if(StrUtil.isBlank(ids)) {
+    		 return Result.failed(ResultCode.PARAM_ERROR, "删除的停车记录与发票抬头关系表数据为空");
+    	}
+        // 逻辑删除
+        List<Long> idList = Arrays.asList(ids.split(",")).stream()
+                .map(idStr -> Long.parseLong(idStr)).collect(Collectors.toList());
+        boolean result = parkingInvoiceRelationService.removeByIds(idList);
+        return Result.judge(result);
+    }
+
+}

+ 29 - 0
src/main/java/com/qmrb/system/converter/ParkingInvoiceRelationConverter.java

@@ -0,0 +1,29 @@
+package com.qmrb.system.converter;
+
+import org.mapstruct.InheritInverseConfiguration;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmrb.system.pojo.entity.ParkingInvoiceRelation;
+import com.qmrb.system.pojo.form.ParkingInvoiceRelationForm;
+import com.qmrb.system.pojo.vo.ParkingInvoiceRelationVO;
+
+/**
+ * 停车记录与发票抬头关系表数据项对象转换器
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface ParkingInvoiceRelationConverter {
+
+    Page<ParkingInvoiceRelationVO> entity2Page(Page<ParkingInvoiceRelation> page);
+
+    ParkingInvoiceRelationForm entity2Form(ParkingInvoiceRelation entity);
+
+    @InheritInverseConfiguration(name="entity2Form")
+    ParkingInvoiceRelation form2Entity(ParkingInvoiceRelationForm form);
+    
+    ParkingInvoiceRelationVO entity2Vo(ParkingInvoiceRelation entity);
+}

+ 23 - 0
src/main/java/com/qmrb/system/mapper/ParkingInvoiceRelationMapper.java

@@ -0,0 +1,23 @@
+package com.qmrb.system.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmrb.system.pojo.entity.ParkingInvoiceRelation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmrb.system.pojo.query.ParkingInvoiceRelationQuery;
+import com.qmrb.system.pojo.vo.ParkingInvoiceRelationVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表 Mapper 接口
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Mapper
+public interface ParkingInvoiceRelationMapper extends BaseMapper<ParkingInvoiceRelation> {
+
+    Page<ParkingInvoiceRelationVO> getInvoicePage(Page<Object> objectPage,@Param("queryParams") ParkingInvoiceRelationQuery queryParams);
+}

+ 17 - 0
src/main/java/com/qmrb/system/pojo/dto/ApplyInvoiceDTO.java

@@ -0,0 +1,17 @@
+package com.qmrb.system.pojo.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ApplyInvoiceDTO {
+    /**
+     * 订单列表
+     */
+    private List<Long> orderIds;
+    /**
+     * 发票抬头id
+     */
+    private Long invoiceTitleId;
+}

+ 113 - 0
src/main/java/com/qmrb/system/pojo/entity/ParkingInvoiceRelation.java

@@ -0,0 +1,113 @@
+package com.qmrb.system.pojo.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.qmrb.system.common.base.BaseEntity;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("parking_invoice_relation")
+public class ParkingInvoiceRelation extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 关系ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 停车记录ID
+     */
+    @TableField("parking_record_id")
+    private String parkingRecordId;
+
+    /**
+     * 发票抬头ID
+     */
+    @TableField("invoice_title_id")
+    private Long invoiceTitleId;
+
+    /**
+     * 关联类型(1:个人抬头,2:企业抬头)
+     */
+    @TableField("relation_type")
+    private Integer relationType;
+
+    /**
+     * 开票金额
+     */
+    @TableField("amount")
+    private BigDecimal amount;
+
+    /**
+     * 税率(%)
+     */
+    @TableField("tax_rate")
+    private BigDecimal taxRate;
+
+    /**
+     * 税额
+     */
+    @TableField("tax_amount")
+    private BigDecimal taxAmount;
+
+    /**
+     * 状态(0:待开票,1:已开票,2:已退票)
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 申请时间
+     */
+    @TableField("apply_time")
+    private Date applyTime;
+
+    /**
+     * 申请人ID
+     */
+    @TableField("apply_user_id")
+    private Long applyUserId;
+
+    /**
+     * 开票时间
+     */
+    @TableField("invoice_time")
+    private Date invoiceTime;
+
+    /**
+     * 开票操作人ID
+     */
+    @TableField("invoice_user_id")
+    private Long invoiceUserId;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 订单ID
+     */
+    @TableField("order_id")
+    private Long orderId;
+
+
+}

+ 92 - 0
src/main/java/com/qmrb/system/pojo/form/ParkingInvoiceRelationForm.java

@@ -0,0 +1,92 @@
+package com.qmrb.system.pojo.form;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表表单
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Data
+public class ParkingInvoiceRelationForm {
+
+    /**
+     * 关系ID
+     */
+	@Schema(description = "关系ID",type="Long")
+    private Long id;
+    /**
+     * 停车记录ID
+     */
+	@Schema(description = "停车记录ID",type="String")
+    private String parkingRecordId;
+    /**
+     * 发票抬头ID
+     */
+	@Schema(description = "发票抬头ID",type="Long")
+    private Long invoiceTitleId;
+    /**
+     * 关联类型(1:个人抬头,2:企业抬头)
+     */
+	@Schema(description = "关联类型(1:个人抬头,2:企业抬头)",type="Integer")
+    private Integer relationType;
+    /**
+     * 开票金额
+     */
+	@Schema(description = "开票金额",type="BigDecimal")
+    private BigDecimal amount;
+    /**
+     * 税率(%)
+     */
+	@Schema(description = "税率(%)",type="BigDecimal")
+    private BigDecimal taxRate;
+    /**
+     * 税额
+     */
+	@Schema(description = "税额",type="BigDecimal")
+    private BigDecimal taxAmount;
+    /**
+     * 状态(0:待开票,1:已开票,2:已退票)
+     */
+	@Schema(description = "状态(0:待开票,1:已开票,2:已退票)",type="Integer")
+    private Integer status;
+    /**
+     * 申请时间
+     */
+	@Schema(description = "申请时间",type="Date")
+    private Date applyTime;
+    /**
+     * 申请人ID
+     */
+	@Schema(description = "申请人ID",type="Long")
+    private Long applyUserId;
+    /**
+     * 开票时间
+     */
+	@Schema(description = "开票时间",type="Date")
+    private Date invoiceTime;
+    /**
+     * 开票操作人ID
+     */
+	@Schema(description = "开票操作人ID",type="Long")
+    private Long invoiceUserId;
+    /**
+     * 备注
+     */
+	@Schema(description = "备注",type="String")
+    private String remark;
+    /**
+     * 订单ID
+     */
+	@Schema(description = "订单ID",type="Long")
+    private Long orderId;
+
+
+}

+ 116 - 0
src/main/java/com/qmrb/system/pojo/query/ParkingInvoiceRelationQuery.java

@@ -0,0 +1,116 @@
+package com.qmrb.system.pojo.query;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.qmrb.system.common.base.BasePageQuery;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表查询对象
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ParkingInvoiceRelationQuery extends BasePageQuery{
+
+ 	@Schema(description="关键字")
+    private String keywords;
+
+    /**
+     * 关系ID
+     */
+	@Schema(description = "关系ID",type="Long")
+    private Long id;
+    /**
+     * 停车记录ID
+     */
+	@Schema(description = "停车记录ID",type="String")
+    private String parkingRecordId;
+
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号",type="String")
+    private String plateNumber;
+
+    /**
+     * 车牌号
+     */
+    @Schema(description = "支付时间开始",type="String")
+    private String payTimeStart;
+    
+    /**
+     * 车牌号
+     */
+    @Schema(description = "支付时间结束",type="String")
+    private String payTimeEnd;
+    /**
+     * 发票抬头ID
+     */
+	@Schema(description = "发票抬头ID",type="Long")
+    private Long invoiceTitleId;
+    /**
+     * 关联类型(1:个人抬头,2:企业抬头)
+     */
+	@Schema(description = "关联类型(1:个人抬头,2:企业抬头)",type="Integer")
+    private Integer relationType;
+    /**
+     * 开票金额
+     */
+	@Schema(description = "开票金额",type="BigDecimal")
+    private BigDecimal amount;
+    /**
+     * 税率(%)
+     */
+	@Schema(description = "税率(%)",type="BigDecimal")
+    private BigDecimal taxRate;
+    /**
+     * 税额
+     */
+	@Schema(description = "税额",type="BigDecimal")
+    private BigDecimal taxAmount;
+    /**
+     * 状态(0:待开票,1:已开票,2:已退票)
+     */
+	@Schema(description = "状态(0:待开票,1:已开票,2:已退票)",type="Integer")
+    private Integer status;
+    /**
+     * 申请时间
+     */
+	@Schema(description = "申请时间",type="Date")
+    private Date applyTime;
+    /**
+     * 申请人ID
+     */
+	@Schema(description = "申请人ID",type="Long")
+    private Long applyUserId;
+    /**
+     * 开票时间
+     */
+	@Schema(description = "开票时间",type="Date")
+    private Date invoiceTime;
+    /**
+     * 开票操作人ID
+     */
+	@Schema(description = "开票操作人ID",type="Long")
+    private Long invoiceUserId;
+    /**
+     * 备注
+     */
+	@Schema(description = "备注",type="String")
+    private String remark;
+    /**
+     * 订单ID
+     */
+	@Schema(description = "订单ID",type="Long")
+    private Long orderId;
+
+
+}

+ 97 - 0
src/main/java/com/qmrb/system/pojo/vo/ParkingInvoiceRelationVO.java

@@ -0,0 +1,97 @@
+package com.qmrb.system.pojo.vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表视图对象
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Data
+public class ParkingInvoiceRelationVO {
+
+    /**
+     * 关系ID
+     */
+	@Schema(description = "关系ID",type="Long")
+    private Long id;
+    /**
+     * 停车记录ID
+     */
+	@Schema(description = "停车记录ID",type="String")
+    private String parkingRecordId;
+    /**
+     * 发票抬头ID
+     */
+	@Schema(description = "发票抬头ID",type="Long")
+    private Long invoiceTitleId;
+    /**
+     * 关联类型(1:个人抬头,2:企业抬头)
+     */
+	@Schema(description = "关联类型(1:个人抬头,2:企业抬头)",type="Integer")
+    private Integer relationType;
+    /**
+     * 开票金额
+     */
+	@Schema(description = "开票金额",type="BigDecimal")
+    private BigDecimal amount;
+    /**
+     * 税率(%)
+     */
+	@Schema(description = "税率(%)",type="BigDecimal")
+    private BigDecimal taxRate;
+    /**
+     * 税额
+     */
+	@Schema(description = "税额",type="BigDecimal")
+    private BigDecimal taxAmount;
+    /**
+     * 状态(0:待开票,1:已开票,2:已退票)
+     */
+	@Schema(description = "状态(0:待开票,1:已开票,2:已退票)",type="Integer")
+    private Integer status;
+    /**
+     * 申请时间
+     */
+	@Schema(description = "申请时间",type="Date")
+    private Date applyTime;
+    /**
+     * 申请人ID
+     */
+	@Schema(description = "申请人ID",type="Long")
+    private Long applyUserId;
+    /**
+     * 开票时间
+     */
+	@Schema(description = "开票时间",type="Date")
+    private Date invoiceTime;
+    /**
+     * 开票操作人ID
+     */
+	@Schema(description = "开票操作人ID",type="Long")
+    private Long invoiceUserId;
+    /**
+     * 备注
+     */
+	@Schema(description = "备注",type="String")
+    private String remark;
+    /**
+     * 订单ID
+     */
+	@Schema(description = "订单ID",type="Long")
+    private Long orderId;
+
+	@Schema(description = "子分类")
+    private List<ParkingInvoiceRelationVO> children;
+
+
+}

+ 43 - 0
src/main/java/com/qmrb/system/service/IParkingInvoiceRelationService.java

@@ -0,0 +1,43 @@
+package com.qmrb.system.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmrb.system.pojo.dto.ApplyInvoiceDTO;
+import com.qmrb.system.pojo.entity.ParkingInvoiceRelation;
+import com.qmrb.system.pojo.form.ParkingInvoiceRelationForm;
+import com.qmrb.system.pojo.vo.ParkingInvoiceRelationVO;
+import com.qmrb.system.pojo.query.ParkingInvoiceRelationQuery;
+import com.qmrb.system.pojo.vo.Option;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.validation.Valid;
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表 服务类
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+public interface IParkingInvoiceRelationService extends IService<ParkingInvoiceRelation> {
+	
+	/**分页查询
+	 * */
+	public Page<ParkingInvoiceRelationVO> getPage(ParkingInvoiceRelationQuery queryParams);
+
+	/**
+	 * 保存表单
+	 * */
+	public ParkingInvoiceRelationForm saveForm(@Valid ParkingInvoiceRelationForm form);
+	
+	/**更新
+	 * */
+	public boolean updateForm(Long id, ParkingInvoiceRelationForm form);
+	
+	/**获取表单数据
+	 * */
+	public ParkingInvoiceRelationForm getFormData(Long id);
+
+	List<ParkingInvoiceRelationForm> saveFormByOrderId(ApplyInvoiceDTO dto);
+}

+ 138 - 0
src/main/java/com/qmrb/system/service/impl/ParkingInvoiceRelationServiceImpl.java

@@ -0,0 +1,138 @@
+package com.qmrb.system.service.impl;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import com.qmrb.system.framework.security.util.SecurityUtils;
+import com.qmrb.system.pojo.dto.ApplyInvoiceDTO;
+import com.qmrb.system.pojo.entity.InvoiceTitle;
+import com.qmrb.system.pojo.entity.Order;
+import com.qmrb.system.service.IInvoiceTitleService;
+import com.qmrb.system.service.OrderService;
+import org.apache.catalina.security.SecurityUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qmrb.system.common.enums.StatusEnum;
+import com.qmrb.system.pojo.vo.Option;
+import com.qmrb.system.converter.ParkingInvoiceRelationConverter;
+import com.qmrb.system.pojo.entity.ParkingInvoiceRelation;
+import com.qmrb.system.pojo.form.ParkingInvoiceRelationForm;
+import com.qmrb.system.pojo.vo.ParkingInvoiceRelationVO;
+import com.qmrb.system.pojo.query.ParkingInvoiceRelationQuery;
+import com.qmrb.system.mapper.ParkingInvoiceRelationMapper;
+import com.qmrb.system.service.IParkingInvoiceRelationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.lang.Assert;
+import jakarta.validation.Valid;
+
+/**
+ * <p>
+ * 停车记录与发票抬头关系表 服务实现类
+ * </p>
+ *
+ * @author gs
+ * @since 2025-04-07
+ */
+@Service
+public class ParkingInvoiceRelationServiceImpl extends ServiceImpl<ParkingInvoiceRelationMapper, ParkingInvoiceRelation> implements IParkingInvoiceRelationService {
+
+	@Autowired
+	private ParkingInvoiceRelationConverter converter;
+	
+	@Autowired
+	private OrderService orderService;
+	
+	@Autowired
+	private IInvoiceTitleService invoiceTitleService;
+
+	/**分页查询
+	 * */
+	@Override
+	public Page<ParkingInvoiceRelationVO> getPage(ParkingInvoiceRelationQuery queryParams) {
+		// 查询参数
+        int pageNum = queryParams.getPageNum();
+        int pageSize = queryParams.getPageSize();
+        Integer status = queryParams.getStatus();
+        //String keywords = queryParams.getKeywords();
+
+        // 查询数据
+        Page<ParkingInvoiceRelationVO> dictItemPage = baseMapper.getInvoicePage(
+                new Page<>(pageNum, pageSize),
+				queryParams
+        );
+		
+        return dictItemPage;
+	}
+
+	/**
+	 * 保存表单
+	 * */
+	@Override
+	public ParkingInvoiceRelationForm saveForm(@Valid ParkingInvoiceRelationForm form) {
+		// 实体对象转换 form->entity
+		ParkingInvoiceRelation entity = converter.form2Entity(form);
+        // 持久化
+        this.save(entity);
+        ParkingInvoiceRelationForm result = converter.entity2Form(entity);
+        return result;
+	}
+
+	/**更新
+	 * */
+	@Override
+	public boolean updateForm(Long id, ParkingInvoiceRelationForm form) {
+		ParkingInvoiceRelation entity = converter.form2Entity(form);
+		entity.setId(id);
+        boolean result = this.updateById(entity);
+        return result;
+	}
+
+	/**获取表单数据
+	 * */
+	@Override
+	public ParkingInvoiceRelationForm getFormData(Long id) {
+		// 获取entity
+		ParkingInvoiceRelation entity = this.getById(id);
+        Assert.isTrue(entity != null, "停车记录与发票抬头关系表不存在");
+
+        // 实体转换
+        ParkingInvoiceRelationForm form = converter.entity2Form(entity);
+        return form;
+	}
+
+	@Override
+	public List<ParkingInvoiceRelationForm> saveFormByOrderId(ApplyInvoiceDTO dto) {
+		ArrayList<ParkingInvoiceRelationForm> result = new ArrayList<>();
+		ArrayList<ParkingInvoiceRelation> parkingInvoiceRelations = new ArrayList<>();
+		
+		if(CollectionUtil.isNotEmpty(dto.getOrderIds())){
+			List<Order> orders = orderService.listByIds(dto.getOrderIds());
+			InvoiceTitle invoiceTitle = invoiceTitleService.getById(dto.getInvoiceTitleId());
+			for (Order order : orders) {
+				ParkingInvoiceRelation parkingInvoiceRelation = new ParkingInvoiceRelation();
+				
+				parkingInvoiceRelation.setParkingRecordId(order.getGoodId() != null ? order.getGoodId().toString() : "");//停车记录ID
+				parkingInvoiceRelation.setInvoiceTitleId(invoiceTitle.getId());//发票抬头ID
+				parkingInvoiceRelation.setRelationType(invoiceTitle.getTitleType());//relation_type
+				parkingInvoiceRelation.setAmount(order.getAmountActuallyPaid());//开票金额
+				parkingInvoiceRelation.setStatus(0);//状态(0:待开票,1:已开票,2:已退票)
+				parkingInvoiceRelation.setApplyTime(new Date());//申请时间
+				parkingInvoiceRelation.setApplyUserId(SecurityUtils.getUserId());//申请人ID
+				parkingInvoiceRelation.setOrderId(order.getId());//订单ID
+				parkingInvoiceRelations.add(parkingInvoiceRelation);
+				ParkingInvoiceRelationForm parkingInvoiceRelationForm = converter.entity2Form(parkingInvoiceRelation);
+				result.add(parkingInvoiceRelationForm);
+			}
+			this.saveBatch(parkingInvoiceRelations);
+			
+		}
+		return result;
+	}
+
+
+}

+ 27 - 0
src/main/resources/mapper/ParkingInvoiceRelationMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.qmrb.system.mapper.ParkingInvoiceRelationMapper">
+
+    <select id="getInvoicePage" resultType="com.qmrb.system.pojo.vo.ParkingInvoiceRelationVO">
+        select 
+            po.plate_number,
+            po.amounts_payable,
+            po.pay_time,
+            pi.`status` 
+        from parking_invoice_relation pi 
+            left join pay_order po on pi.order_id = po.id 
+            LEFT JOIN invoice_title it on pi.invoice_title_id = it.id
+        <where>
+            <if test="queryParams.plateNumber != null and queryParams.plateNumber != ''">
+                po.plateNumber = #{queryParams.plateNumber}
+            </if>
+            <if test="queryParams.status != null">
+                pi.`status` = #{queryParams.status}
+            </if>
+            <if test="queryParams.payTimeStart != null and queryParams.payTimeStart != '' and queryParams.payTimeEnd != null and queryParams.payTimeEnd != ''">
+                po.pay_time between #{queryParams.payTimeStart} and #{queryParams.payTimeEnd}
+            </if>
+        </where>
+        order by pi.create_time desc
+    </select>
+</mapper>