From d880597d62c8c84d4eac073c531c437c51033696 Mon Sep 17 00:00:00 2001 From: fanzongzhe <285169773@qq.com> Date: Thu, 6 Apr 2023 14:27:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E7=A5=A8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../finvehicleinvoice/FinVehicleInvoice.java | 116 +++++++++ .../FinVehicleInvoiceDetailsVo.java | 61 +++++ .../FinVehicleInvoiceDto.java | 70 ++++++ .../FinVehicleInvoiceExportVo.java | 38 +++ .../FinVehicleInvoiceFeign.java | 78 ++++++ .../FinVehicleInvoiceFeignFallback.java | 83 ++++++ .../FinVehicleInvoiceQuery.java | 68 +++++ .../FinVehicleInvoiceVo.java | 74 ++++++ .../FinVehicleInvoiceMapper.java | 50 ++++ .../FinVehicleInvoiceMapper.xml | 85 +++++++ .../FinVehicleInvoiceRest.java | 238 ++++++++++++++++++ .../FinVehicleInvoiceService.java | 169 +++++++++++++ doc/databases/fin_tables.sql | 32 ++- 13 files changed, 1161 insertions(+), 1 deletion(-) create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoice.java create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDetailsVo.java create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDto.java create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceExportVo.java create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeign.java create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeignFallback.java create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceQuery.java create mode 100644 anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceVo.java create mode 100644 anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.java create mode 100644 anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.xml create mode 100644 anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceRest.java create mode 100644 anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceService.java diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoice.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoice.java new file mode 100644 index 0000000000..213a46e19d --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoice.java @@ -0,0 +1,116 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoice.java
+ * Class: com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoice
+ * Description: 车辆发票信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@ApiModel(value = "车辆发票信息", description = "车辆发票信息") +@TableName("fin_vehicle_invoice") +@Data +public class FinVehicleInvoice extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("销售申请sid") + private String Sid; + + @ApiModelProperty("版本锁") + private Integer lockVersion; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @ApiModelProperty("创建时间") + private Date createTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @ApiModelProperty("修改时间") + private Date modifyTime; + + @ApiModelProperty("是否可用:1可用,0不可用") + private Integer isEnable; + + @ApiModelProperty("开票状态:0未开票,1已开票,2作废") + private Integer state; + + @ApiModelProperty("是否删除:0未删除,1已删除") + private Integer isDelete; + + @ApiModelProperty("备注") + private String remarks; + + @ApiModelProperty("创建人sid") + private String createBySid; + + @ApiModelProperty("修改人sid") + private String updateBySid; + + @ApiModelProperty("车辆sid") + private String vehicleSid; + + @ApiModelProperty("车架号") + private String VIN; + + @ApiModelProperty("车辆类型Key") + private String vehicleTypeKey; + + @ApiModelProperty("车辆类型") + private String vehicleType; + + @ApiModelProperty("车辆金额") + private BigDecimal vehiclAmount; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @ApiModelProperty("最大发票开票日期") + private Date invoiceDate; + + @ApiModelProperty("发票号") + private String invoiceNo; + + @ApiModelProperty("发票代码") + private String invoiceCode; + + @ApiModelProperty("车辆发票金额") + private BigDecimal invoiceAmount; + + @ApiModelProperty("发票类别Key(增值税专用发票/机动车销售统一发票/增值税普通发票)") + private String invoiceTypeKey; + + @ApiModelProperty("发票类别") + private String invoiceType; + + @ApiModelProperty("开票单位") + private String invoiceTitle; + + @ApiModelProperty("移交状态:0未交接,1已交接") + private String invoiceState; + + @ApiModelProperty("客户名称") + private String customerName; + + @ApiModelProperty("开票名称") + private String invoiceName; + + @ApiModelProperty("合同编号") + private String contractNo; + + @ApiModelProperty("图片地址") + private String filePath; + +} diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDetailsVo.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDetailsVo.java new file mode 100644 index 0000000000..14172787ff --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDetailsVo.java @@ -0,0 +1,61 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author Administrator + * @description + * @date 2023/4/5 20:30 + */ +@Data +public class FinVehicleInvoiceDetailsVo implements Vo { + + @ApiModelProperty("sid") + private String sid; + + @ApiModelProperty("开票单位") + private String invoiceTitle; + + @ApiModelProperty("合同编号") + private String contractNo; + + @ApiModelProperty("客户名称") + private String customerName; + + @ApiModelProperty("车架号") + private String VIN; + + @ApiModelProperty("发票类别") + private String invoiceType; + + @ApiModelProperty("车辆发票金额") + private BigDecimal invoiceAmount; + + @ApiModelProperty("开票状态:0未开票,1已开票,2作废") + private String state; + + @ApiModelProperty("开票名称") + private String invoiceName; + + @ApiModelProperty("开票人") + private String name; + + @ApiModelProperty("开票时间") + private String createTime; + + @ApiModelProperty("发票号") + private String invoiceNo; + + @ApiModelProperty("发票代码") + private String invoiceCode; + + @ApiModelProperty("图片地址") + private String filePath; + +} diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDto.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDto.java new file mode 100644 index 0000000000..caddca0cc7 --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceDto.java @@ -0,0 +1,70 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * Project: anrui-fin(财务管理)
+ * File: LoanVehicleInvoiceDto.java
+ * Class: com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceDto
+ * Description: 车辆发票信息 数据传输对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@ApiModel(value = "车辆发票信息 数据传输对象", description = "车辆发票信息 数据传输对象") +@Data +public class FinVehicleInvoiceDto implements Dto { + + + @ApiModelProperty("开票单位") + private String invoiceTitle; + + @ApiModelProperty("合同编号") + private String contractNo; + + @ApiModelProperty("客户名称") + private String customerName; + + @ApiModelProperty("车架号") + private String VIN; + + @ApiModelProperty("发票类别") + private String invoiceType; + + @ApiModelProperty("车辆发票金额") + private BigDecimal invoiceAmount; + + @ApiModelProperty("开票状态:0未开票,1已开票,2作废") + private String state; + + @ApiModelProperty("开票名称") + private String invoiceName; + + @ApiModelProperty("开票人") + private String name; + + @ApiModelProperty("开票时间") + private String createTime; + + @ApiModelProperty("发票号") + private String invoiceNo; + + @ApiModelProperty("发票代码") + private String invoiceCode; + + @ApiModelProperty("图片地址") + private String filePath; + +} \ No newline at end of file diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceExportVo.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceExportVo.java new file mode 100644 index 0000000000..9b51dc8eb1 --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceExportVo.java @@ -0,0 +1,38 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + +import com.yxt.common.core.utils.ExportEntityMap; +import com.yxt.common.core.vo.Vo; +import lombok.Data; + +/** + * @author Administrator + * @description + * @date 2023/4/4 17:40 + */ +@Data +public class FinVehicleInvoiceExportVo implements Vo { + + + @ExportEntityMap(CnName = "序号", EnName = "rankNo") + private Integer rankNo; + @ExportEntityMap(CnName = "发票状态", EnName = "state") + private String state; + @ExportEntityMap(CnName = "交接状态", EnName = "invoiceState") + private String invoiceState; + @ExportEntityMap(CnName = "开票类型", EnName = "invoiceType") + private String invoiceType; + @ExportEntityMap(CnName = "合同编号", EnName = "contractNo") + private String contractNo; + @ExportEntityMap(CnName = "客户名称", EnName = "customerName") + private String customerName; + @ExportEntityMap(CnName = "车架号", EnName = "VIN") + private String VIN; + @ExportEntityMap(CnName = "开票名称", EnName = "invoiceName") + private String invoiceName; + @ExportEntityMap(CnName = "开票金额", EnName = "invoiceAmount") + private String invoiceAmount; + @ExportEntityMap(CnName = "开票日期", EnName = "createTime") + private String createTime; + @ExportEntityMap(CnName = "发票代码", EnName = "invoiceCode") + private String invoiceCode; +} diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeign.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeign.java new file mode 100644 index 0000000000..5ab6615af5 --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeign.java @@ -0,0 +1,78 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.List; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoiceFeign.java
+ * Class: com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceFeign
+ * Description: 车辆发票信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Api(tags = "车辆发票信息") +@FeignClient( + contextId = "anrui-fin-FinVehicleInvoice", + name = "anrui-fin", + path = "v1/finvehicleinvoice", + fallback = FinVehicleInvoiceFeignFallback.class) +public interface FinVehicleInvoiceFeign { + + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage") + public ResultBean> listPage(@RequestBody PagerQuery pq); + + @ApiOperation("根据条件查询所有数据列表") + @PostMapping("/listAll") + public ResultBean> listAll(@RequestBody FinVehicleInvoiceQuery query); + + @ApiOperation("所有数据列表") + @GetMapping("/list") + public ResultBean> list(); + + @ApiOperation("新增保存") + @PostMapping("/save") + public ResultBean save(@RequestBody FinVehicleInvoiceDto dto); + + @ApiOperation("修改保存") + @PostMapping("/update/{sid}") + public ResultBean update(@RequestBody FinVehicleInvoiceDto dto, @PathVariable("sid") String sid); + + @ApiOperation("图片上传") + @ApiImplicitParam(name = "file", value = "文件", required = true, dataType = "MultipartFile", dataTypeClass = MultipartFile.class) + @PostMapping("/pictureUpload") + public ResultBean pictureUpload(@RequestParam(value = "sid")String sid,@RequestParam(value = "file") MultipartFile file); + + @ApiOperation("删除记录") + @GetMapping("/del/{ids}") + public ResultBean del(@PathVariable("ids") String ids); + + @ApiOperation("获取一条记录") + @GetMapping("/fetch/{id}") + public ResultBean fetch(@PathVariable("id") String id); + + @ApiOperation("获取详情记录") + @GetMapping("/fetchSid/{sid}") + public ResultBean fetchBySid(@PathVariable("sid") String sid); + + @PostMapping("/exportExcel") + @ApiOperation(value = "车辆发票信息列表导出") + @ResponseBody + public void exportExcel(@RequestBody FinVehicleInvoiceQuery query); + + +} \ No newline at end of file diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeignFallback.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeignFallback.java new file mode 100644 index 0000000000..2fb434c2d6 --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceFeignFallback.java @@ -0,0 +1,83 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoiceFeignFallback.java
+ * Class: com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceFeignFallback
+ * Description: 车辆发票信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Component +public class FinVehicleInvoiceFeignFallback implements FinVehicleInvoiceFeign { + + @Override + public ResultBean> listPage(PagerQuery pq){ + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-fin/finvehicleinvoice/listPage无法访问"); + } + + @Override + public ResultBean> listAll(FinVehicleInvoiceQuery query){ + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-fin/finvehicleinvoice/listAll无法访问"); + } + + @Override + public ResultBean> list(){ + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-fin/finvehicleinvoice/list无法访问"); + } + + @Override + public ResultBean save(FinVehicleInvoiceDto dto){ + return ResultBean.fireFail().setMsg("接口anrui-fin/finvehicleinvoice/save无法访问"); + } + + @Override + public ResultBean update(FinVehicleInvoiceDto dto, String sid){ + return ResultBean.fireFail().setMsg("接口anrui-fin/finvehicleinvoice/update无法访问"); + } + + @Override + public ResultBean pictureUpload(String sid, MultipartFile file) { + return ResultBean.fireFail().setMsg("接口anrui-fin/finvehicleinvoice/pictureUpload无法访问"); + } + + @Override + public ResultBean del(String ids){ + return ResultBean.fireFail().setMsg("接口anrui-fin/finvehicleinvoice/del无法访问"); + } + + @Override + public ResultBean fetch(String id){ + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-fin/finvehicleinvoice/fetch无法访问"); + } + + @Override + public ResultBean fetchBySid(String sid){ + ResultBean rb = ResultBean.fireFail(); + return rb.setMsg("接口anrui-fin/finvehicleinvoice/fetch无法访问"); + } + + @Override + public void exportExcel(FinVehicleInvoiceQuery query) { + + } + + +} \ No newline at end of file diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceQuery.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceQuery.java new file mode 100644 index 0000000000..4b4dc75cfa --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceQuery.java @@ -0,0 +1,68 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoiceQuery.java
+ * Class: com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceQuery
+ * Description: 车辆发票信息 查询条件.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@ApiModel(value = "车辆发票信息 查询条件", description = "车辆发票信息 查询条件") +@Data +public class FinVehicleInvoiceQuery implements Query { + + + @ApiModelProperty(value = "sids", required = false) + private List sids; + + @ApiModelProperty("开票单位") + private String invoiceTitle; + + @ApiModelProperty("发票类别") + private String invoiceType; + + @ApiModelProperty("合同编号") + private String contractNo; + + @ApiModelProperty("客户名称") + private String customerName; + + @ApiModelProperty("车架号") + private String VIN; + + @ApiModelProperty("发票状态") + private String state; + + @ApiModelProperty("移交状态") + private String invoiceState; + + @ApiModelProperty("开票名称") + private String invoiceName; + + @ApiModelProperty("开票开始日期") + private String createStartTime ; + + @ApiModelProperty("开票结束日期") + private String createEndTime ; + + @ApiModelProperty("发票代码") + private String invoiceCode; + +} diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceVo.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceVo.java new file mode 100644 index 0000000000..f745c4a978 --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finvehicleinvoice/FinVehicleInvoiceVo.java @@ -0,0 +1,74 @@ +package com.yxt.anrui.fin.api.finvehicleinvoice; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoiceVo.java
+ * Class: com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceVo
+ * Description: 车辆发票信息 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@ApiModel(value = "车辆发票信息 视图数据对象", description = "车辆发票信息 视图数据对象") +@Data +public class FinVehicleInvoiceVo implements Vo { + + + @ApiModelProperty("车辆发票信息Sid") + private String Sid; + + @ApiModelProperty("发票状态") + private String state; + + @ApiModelProperty("交接状态") + private String invoiceState; + + @ApiModelProperty("开票单位") + private String invoiceTitle; + + @ApiModelProperty("开票类型") + private String invoiceType; + + @ApiModelProperty("合同编号") + private String contractNo; + + @ApiModelProperty("客户名称") + private String customerName; + + @ApiModelProperty("车架号") + private String VIN; + + @ApiModelProperty("开票名称") + private String invoiceName; + + @ApiModelProperty("开票金额") + private String invoiceAmount; + + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @ApiModelProperty("开票日期") + private Date createTime; + + @ApiModelProperty("发票代码") + private String invoiceCode; + + @ApiModelProperty("发票号") + private String invoiceNo; + + @ApiModelProperty("发票图片") + private String filePath; + +} diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.java new file mode 100644 index 0000000000..b0fbd7a8cb --- /dev/null +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.java @@ -0,0 +1,50 @@ +package com.yxt.anrui.fin.biz.finvehicleinvoice; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoice; +import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceDetailsVo; +import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceExportVo; +import com.yxt.anrui.fin.api.finvehicleinvoice.FinVehicleInvoiceVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoiceMapper.java
+ * Class: com.yxt.anrui.fin.biz.finvehicleinvoice.FinVehicleInvoiceMapper
+ * Description: 车辆发票信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Mapper +public interface FinVehicleInvoiceMapper extends BaseMapper { + + //@Update("update fin_vehicle_invoice set name=#{msg} where id=#{id}") + //IPage voPage(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); + + IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) Wrapper qw); + + List selectListAllVo(@Param(Constants.WRAPPER) Wrapper qw); + + @Select("select * from fin_vehicle_invoice where isDelete = '0'") + List selectListVo(); + + List selByExcel(@Param(Constants.WRAPPER)QueryWrapper qw); + + + Boolean updatePictureBySid(String state,String filePath,String sid); + + FinVehicleInvoiceDetailsVo getInvoiceDetailsBySid(String sid); +} \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.xml b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.xml new file mode 100644 index 0000000000..2f45cad704 --- /dev/null +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceMapper.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + Update fin_vehicle_invoice + Set + `state` = #{arg0}, + filePath = #{arg1} + Where sid = #{arg2} + + \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceRest.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceRest.java new file mode 100644 index 0000000000..9b21baf070 --- /dev/null +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceRest.java @@ -0,0 +1,238 @@ +package com.yxt.anrui.fin.biz.finvehicleinvoice; +import com.yxt.anrui.fin.api.finvehicleinvoice.*; +import com.yxt.common.base.config.component.FileUploadComponent; +import com.yxt.common.base.utils.ExportExcelUtils; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.FileUploadResult; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoiceFeignFallback.java
+ * Class: com.yxt.anrui.fin.biz.finvehicleinvoice.FinVehicleInvoiceRest
+ * Description: 车辆发票信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Api(tags = "车辆发票信息") +@RestController +@RequestMapping("v1/finvehicleinvoice") +public class FinVehicleInvoiceRest implements FinVehicleInvoiceFeign { + + @Autowired + private FinVehicleInvoiceService finVehicleInvoiceService; + + @Resource + private FileUploadComponent fileUploadComponent; + + @Autowired + private HttpServletResponse response; + + private List setVo(List list) { + for (FinVehicleInvoiceVo finVehicleInvoiceVo : list) { + if (StringUtils.isNotBlank(finVehicleInvoiceVo.getState())) { + String state = finVehicleInvoiceVo.getState(); + if (state.equals("0")) { + finVehicleInvoiceVo.setState("未开票"); + }else if (state.equals("1")) { + finVehicleInvoiceVo.setState("已开票"); + }else if (state.equals("2")) { + finVehicleInvoiceVo.setState("作废"); + } + } + if (StringUtils.isNotBlank(finVehicleInvoiceVo.getInvoiceState())) { + String invoiceState = finVehicleInvoiceVo.getInvoiceState(); + if (invoiceState.equals("0")) { + finVehicleInvoiceVo.setInvoiceState("未移交"); + } else if (invoiceState.equals("1")) { + finVehicleInvoiceVo.setInvoiceState("已移交"); + } + } + if (StringUtils.isNotBlank(finVehicleInvoiceVo.getFilePath())) { + String filePath = finVehicleInvoiceVo.getFilePath(); + String urlPrefix = fileUploadComponent.getUrlPrefix(); + filePath = urlPrefix + filePath; + finVehicleInvoiceVo.setFilePath(filePath); + } + } + return list; + } + + @Override + public ResultBean> listPage(@RequestBody PagerQuery pq){ + ResultBean rb = ResultBean.fireFail(); + PagerVo pv = finVehicleInvoiceService.listPageVo(pq); + List records = pv.getRecords(); + List finVehicleInvoiceVos = setVo(records); + pv.setRecords(finVehicleInvoiceVos); + return rb.success().setData(pv); + } + + @Override + public ResultBean> listAll(@RequestBody FinVehicleInvoiceQuery query){ + ResultBean rb = ResultBean.fireFail(); + List list = finVehicleInvoiceService.listAllVo(query); + List finVehicleInvoiceVos = setVo(list); + return rb.success().setData(finVehicleInvoiceVos); + } + + @Override + public ResultBean> list(){ + ResultBean rb = ResultBean.fireFail(); + List list = finVehicleInvoiceService.listVo(); + List finVehicleInvoiceVos = setVo(list); + return rb.success().setData(finVehicleInvoiceVos); + } + + @Override + public ResultBean save(FinVehicleInvoiceDto dto){ + ResultBean rb = ResultBean.fireFail(); + finVehicleInvoiceService.saveOrUpdateDto(dto); + return rb.success(); + } + + @Override + public ResultBean update(FinVehicleInvoiceDto dto,String sid){ + ResultBean rb = ResultBean.fireFail(); + finVehicleInvoiceService.updateBySid(dto.toMap(),sid); + return rb.success(); + } + + @Override + public ResultBean del(String ids){ + ResultBean rb = ResultBean.fireFail(); + finVehicleInvoiceService.delByIds(ids); + return rb.success(); + } + + @Override + public ResultBean fetch(String id){ + ResultBean rb = ResultBean.fireFail(); + FinVehicleInvoiceVo vo = finVehicleInvoiceService.fetchByIdVo(id); + return rb.success().setData(vo); + } + + @Override + public ResultBean fetchBySid(String sid){ + ResultBean rb = ResultBean.fireFail(); + FinVehicleInvoiceDetailsVo vo = finVehicleInvoiceService.getInvoiceDetailsBySid(sid); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + if (StringUtils.isNotBlank(vo.getState())) { + String state = vo.getState(); + if (state.equals("0")) { + vo.setState("未开票"); + }else if (state.equals("1")) { + vo.setState("已开票"); + }else if (state.equals("2")) { + vo.setState("作废"); + } + } + if (StringUtils.isNotBlank(vo.getCreateTime())) { + String createTime = vo.getCreateTime(); + try { + Date date = sdf.parse(createTime); + String createTimeBySdf = sdf.format(date); + vo.setCreateTime(createTimeBySdf); + } catch (ParseException e) { + e.printStackTrace(); + } + } + if (StringUtils.isNotBlank(vo.getFilePath())) { + String filePath = vo.getFilePath(); + String urlPrefix = fileUploadComponent.getUrlPrefix(); + filePath = urlPrefix + filePath; + vo.setFilePath(filePath); + } + return rb.success().setData(vo); + } + + @Override + public void exportExcel(FinVehicleInvoiceQuery query) { + //得到所有要导出的数据 + List invoiceExportVoList = finVehicleInvoiceService.listExcel(query); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + for (FinVehicleInvoiceExportVo invoiceExportVo : invoiceExportVoList) { + if (StringUtils.isNotBlank(invoiceExportVo.getState())) { + String state = invoiceExportVo.getState(); + if (state.equals("0")) { + invoiceExportVo.setState("未开票"); + }else if (state.equals("1")) { + invoiceExportVo.setState("已开票"); + }else if (state.equals("2")) { + invoiceExportVo.setState("作废"); + } + } + if (StringUtils.isNotBlank(invoiceExportVo.getInvoiceState())) { + String invoiceState = invoiceExportVo.getInvoiceState(); + if (invoiceState.equals("0")) { + invoiceExportVo.setInvoiceState("未移交"); + } else if (invoiceState.equals("1")) { + invoiceExportVo.setInvoiceState("已移交"); + } + } + if (StringUtils.isNotBlank(invoiceExportVo.getCreateTime())) { + String createTime = invoiceExportVo.getCreateTime(); + try { + Date date = sdf.parse(createTime); + String createTimeBySdf = sdf.format(date); + invoiceExportVo.setCreateTime(createTimeBySdf); + } catch (ParseException e) { + e.printStackTrace(); + } + } + } + //定义导出的excel名字 + String excelName = "车辆发票信息列表"; + String fileNameURL = ""; + try { + fileNameURL = URLEncoder.encode(excelName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + //导出车辆管理列表 + ExportExcelUtils.export(fileNameURL, invoiceExportVoList, FinVehicleInvoiceExportVo.class, response); + } + + @Override + public ResultBean pictureUpload(String sid,MultipartFile file) { + ResultBean rb = ResultBean.fireFail(); + if (file == null || file.isEmpty()) { + return rb.setMsg("文件为空"); + } + rb = fileUploadComponent.uploadFile(file); + FileUploadResult data = (FileUploadResult) rb.getData(); + FinVehicleInvoiceDetailsVo invoice= finVehicleInvoiceService.getInvoiceDetailsBySid(sid); + invoice.setFilePath(data.getFilePath()); + String filePath = invoice.getFilePath(); + invoice.setState("1"); + String state = invoice.getState(); + Boolean isSuccess = finVehicleInvoiceService.updatePictureBySid(state,filePath,sid); + if (isSuccess) { + return rb.success().setMsg("上传成功"); + }else { + return rb.fail().setMsg("上传失败"); + } + } +} diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceService.java new file mode 100644 index 0000000000..8acfd9f145 --- /dev/null +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finvehicleinvoice/FinVehicleInvoiceService.java @@ -0,0 +1,169 @@ +package com.yxt.anrui.fin.biz.finvehicleinvoice; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.yxt.anrui.fin.api.finvehicleinvoice.*; +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.PagerUtil; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.vo.PagerVo; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * Project: anrui-fin(财务管理)
+ * File: FinVehicleInvoiceService.java
+ * Class: com.yxt.anrui.fin.biz.finvehicleinvoice.FinVehicleInvoiceService
+ * Description: 车辆发票信息 业务逻辑.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-10-27 09:36:11
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Service +public class FinVehicleInvoiceService extends MybatisBaseService { + public PagerVo listPage(PagerQuery pq) { + FinVehicleInvoiceQuery query = pq.getParams(); + QueryWrapper qw = createQueryWrapper(query); + IPage page = PagerUtil.queryToPage(pq); + IPage pagging = baseMapper.selectPage(page, qw); + PagerVo p = PagerUtil.pageToVo(pagging, null); + return p; + } + + public List listAll(FinVehicleInvoiceQuery query) { + QueryWrapper qw = createQueryWrapper(query); + return baseMapper.selectList(qw); + } + + private QueryWrapper createQueryWrapper(FinVehicleInvoiceQuery query) { + // todo: 这里根据具体业务调整查询条件 + // 多字段Like示例:qw.and(wrapper -> wrapper.like("name", query.getName()).or().like("remark", query.getName())); + QueryWrapper qw = new QueryWrapper<>(); + + qw.eq("isDelete", "0"); + if (StringUtils.isNotBlank(query.getInvoiceTitle())) { + qw.like("invoiceTitle", query.getInvoiceTitle()); + } + if (StringUtils.isNotBlank(query.getInvoiceType())) { + qw.like("invoiceType", query.getInvoiceType()); + } + if (StringUtils.isNotBlank(query.getContractNo())) { + qw.like("contractNo", query.getContractNo()); + } + if (StringUtils.isNotBlank(query.getCustomerName())) { + qw.like("customerName", query.getCustomerName()); + } + if (StringUtils.isNotBlank(query.getVIN())) { + qw.like("VIN", query.getVIN()); + } + if (StringUtils.isNotBlank(query.getState())) { + qw.eq("state", query.getState()); + } + if (StringUtils.isNotBlank(query.getInvoiceState())) { + qw.eq("invoiceState", query.getInvoiceState()); + } + if (StringUtils.isNotBlank(query.getInvoiceName())) { + qw.like("invoiceName", query.getInvoiceName()); + } + if (StringUtils.isNotBlank(query.getInvoiceCode())) { + qw.like("invoiceCode", query.getInvoiceCode()); + } + String createStartTime = query.getCreateStartTime(); + String createEndTime = query.getCreateEndTime(); + qw.apply(org.apache.commons.lang3.StringUtils.isNotEmpty(createStartTime), "date_format (vi.createTime,'%Y-%m-%d') >= date_format('" + createStartTime + "','%Y-%m-%d')"). + apply(org.apache.commons.lang3.StringUtils.isNotEmpty(createEndTime), "date_format (vi.createTime,'%Y-%m-%d') <= date_format('" + createEndTime + "','%Y-%m-%d')" + ); + return qw; + } + + public PagerVo listPageVo(PagerQuery pq) { + FinVehicleInvoiceQuery query = pq.getParams(); + QueryWrapper qw = createQueryWrapper(query); + IPage page = PagerUtil.queryToPage(pq); + IPage pagging = baseMapper.selectPageVo(page, qw); + PagerVo p = PagerUtil.pageToVo(pagging, null); + return p; + } + + public List listAllVo(FinVehicleInvoiceQuery query) { + QueryWrapper qw = createQueryWrapper(query); + return baseMapper.selectListAllVo(qw); + } + + public List listVo() { + return baseMapper.selectListVo(); + } + + public void saveOrUpdateDto(FinVehicleInvoiceDto dto) { + FinVehicleInvoice entity = new FinVehicleInvoice(); + dto.fillEntity(entity); + this.saveOrUpdate(entity); + } + + public FinVehicleInvoiceVo fetchByIdVo(String id) { + FinVehicleInvoice entity = this.fetchById(id); + FinVehicleInvoiceVo vo = new FinVehicleInvoiceVo(); + BeanUtil.copyProperties(entity, vo); + return vo; + } + + public List listExcel(FinVehicleInvoiceQuery query) { + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("isDelete", "0"); + if (StringUtils.isNotBlank(query.getInvoiceTitle())) { + qw.like("invoiceTitle", query.getInvoiceTitle()); + } + if (StringUtils.isNotBlank(query.getInvoiceType())) { + qw.like("invoiceType", query.getInvoiceType()); + } + if (StringUtils.isNotBlank(query.getContractNo())) { + qw.like("contractNo", query.getContractNo()); + } + if (StringUtils.isNotBlank(query.getCustomerName())) { + qw.like("customerName", query.getCustomerName()); + } + if (StringUtils.isNotBlank(query.getVIN())) { + qw.like("VIN", query.getVIN()); + } + if (StringUtils.isNotBlank(query.getState())) { + qw.eq("state", query.getState()); + } + if (StringUtils.isNotBlank(query.getInvoiceState())) { + qw.eq("invoiceState", query.getInvoiceState()); + } + if (StringUtils.isNotBlank(query.getInvoiceName())) { + qw.like("invoiceName", query.getInvoiceName()); + } + if (StringUtils.isNotBlank(query.getInvoiceCode())) { + qw.like("invoiceCode", query.getInvoiceCode()); + } + String createStartTime = query.getCreateStartTime(); + String createEndTime = query.getCreateEndTime(); + qw.apply(org.apache.commons.lang3.StringUtils.isNotEmpty(createStartTime), "date_format (vi.createTime,'%Y-%m-%d') >= date_format('" + createStartTime + "','%Y-%m-%d')"). + apply(org.apache.commons.lang3.StringUtils.isNotEmpty(createEndTime), "date_format (vi.createTime,'%Y-%m-%d') <= date_format('" + createEndTime + "','%Y-%m-%d')" + ); + List invoiceExportVoList = baseMapper.selByExcel(qw); + int id = 1; + for (FinVehicleInvoiceExportVo invoiceExportVo : invoiceExportVoList) { + invoiceExportVo.setRankNo(id); + id = id + 1; + } + return invoiceExportVoList; + } + + public FinVehicleInvoiceDetailsVo getInvoiceDetailsBySid(String sid) { + FinVehicleInvoiceDetailsVo vo = baseMapper.getInvoiceDetailsBySid(sid); + return vo; + } + + public Boolean updatePictureBySid(String filePath,String state,String sid) { + return baseMapper.updatePictureBySid(filePath,state,sid); + } +} \ No newline at end of file diff --git a/doc/databases/fin_tables.sql b/doc/databases/fin_tables.sql index c9d7fb54d0..210134879d 100644 --- a/doc/databases/fin_tables.sql +++ b/doc/databases/fin_tables.sql @@ -1088,5 +1088,35 @@ CREATE TABLE `fin_paymentapply_vehicle` ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT ='付款申请车辆'; - +-- 车辆发票信息 +DROP TABLE IF EXISTS `fin_vehicle_invoice`; +CREATE TABLE `fin_vehicle_invoice` +( + `id` int(32) NOT NULL AUTO_INCREMENT COMMENT 'id', + `sid` varchar(64) NOT NULL COMMENT 'sid', + `lockVersion` int(32) DEFAULT '0' COMMENT '版本锁', + `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `modifyTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `isEnable` int(32) DEFAULT '1' COMMENT '是否可用:1可用,0不可用', + `state` int(32) DEFAULT '1' COMMENT '状态', + `isDelete` int(32) DEFAULT '0' COMMENT '是否删除:0未删除,1已删除', + `remarks` varchar(255) DEFAULT NULL COMMENT '备注', + `createBySid` varchar(64) DEFAULT NULL COMMENT '创建人sid', + `updateBySid` varchar(64) DEFAULT NULL COMMENT '修改人sid', + `vehicleSid` varchar(64) DEFAULT NULL COMMENT '车辆sid', + `VIN` varchar(20) DEFAULT NULL COMMENT '车架号', + `vehicleTypeKey` varchar(64) DEFAULT NULL COMMENT '车辆类型Key', + `vehicleType` varchar(64) DEFAULT NULL COMMENT '车辆类型', + `vehiclAmount` decimal(10, 2) DEFAULT NULL COMMENT '车辆金额', + `invoiceDate` timestamp DEFAULT NULL COMMENT '最大发票开票日期', + `invoiceNo` varchar(64) DEFAULT NULL COMMENT '发票号', + `invoiceCode` varchar(64) DEFAULT NULL COMMENT '发票代码', + `invoiceAmount` decimal(10, 2) DEFAULT NULL COMMENT '车辆发票金额', + `invoiceTypeKey` varchar(32) DEFAULT NULL COMMENT '发票类别Key(增值税专用发票/机动车销售统一发票/增值税普通发票)', + `invoiceType` varchar(64) DEFAULT NULL COMMENT '发票类别', + `invoiceTitle` varchar(64) DEFAULT NULL COMMENT '开票单位', + PRIMARY KEY (`id`), + KEY `id` (`id`) +) ENGINE = INNODB + DEFAULT CHARSET = utf8 COMMENT ='车辆发票信息';