diff --git a/sql/dml_erp_bill_v2.sql b/sql/dml_erp_bill_v2.sql
new file mode 100644
index 0000000..cef17a3
--- /dev/null
+++ b/sql/dml_erp_bill_v2.sql
@@ -0,0 +1,75 @@
+DROP TABLE IF EXISTS `invoice_bill_order`;
+CREATE TABLE `invoice_bill_order` (
+          `id` bigint NOT NULL AUTO_INCREMENT,
+          `invoice_no` varchar(64)  NOT NULL COMMENT '发票单号',
+          `bg_url` varchar(512)  default NULL COMMENT '报关单url地址',
+          `back_refund_date` varchar(64) default null COMMENT '必须回款日期',
+          `actual_refund_date` varchar(64) default null COMMENT '实际回款日期',
+          `deduct_amount` decimal(20,6) DEFAULT NULL COMMENT '发生扣款金额',
+          `deduct_url` varchar(512)  default NULL COMMENT '扣款单url地址',
+          `actual_receivable_amount` decimal(20,6) DEFAULT NULL COMMENT '实际应收金额',
+          `actual_payed_amount1` decimal(20,6) DEFAULT NULL COMMENT '实际应付金额1',
+          `actual_payed_amount2` decimal(20,6) DEFAULT NULL COMMENT '实际应付金额2',
+          `actual_payed_amount3` decimal(20,6) DEFAULT NULL COMMENT '实际应付金额3',
+          `other_amount` decimal(20,6) DEFAULT NULL COMMENT '其他费用金额',
+          `status`    INT          NOT NULL COMMENT '总经理审核状态 0:待审核、1:审核通过,2:审核驳回',
+          `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
+          `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
+          `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
+          `modify_time`    DATETIME     DEFAULT NULL COMMENT '修改时间',
+          `modify_by`      varchar(64)  DEFAULT NULL COMMENT '修改人',
+          `version`        INT          DEFAULT NULL COMMENT '版本号--乐观锁预留字段',
+          PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应收款账单表';
+
+DROP TABLE IF EXISTS `invoice_bill_mapping`;
+CREATE TABLE `invoice_bill_mapping` (
+          `id` bigint NOT NULL AUTO_INCREMENT,
+          `invoice_no` varchar(64)  NOT NULL COMMENT '发票单号',
+          `invoice_bill_id` bigint DEFAULT '0' COMMENT 'invoice账单id',
+          `order_id` bigint DEFAULT '0' COMMENT '订单id',
+          `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
+          `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
+          `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
+          `modify_time`    DATETIME     DEFAULT NULL COMMENT '修改时间',
+          `modify_by`      varchar(64)  DEFAULT NULL COMMENT '修改人',
+          `version`        INT          DEFAULT NULL COMMENT '版本号--乐观锁预留字段',
+          PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应收款账单关联订单映射表';
+
+
+DROP TABLE IF EXISTS `produce_payment_check_bill_order`;
+CREATE TABLE `produce_payment_check_bill_order` (
+          `id` bigint NOT NULL AUTO_INCREMENT,
+          `check_no` varchar(64)  NOT NULL COMMENT '生产科对账单',
+          `invoice_url` varchar(512)  default NULL COMMENT '发票url地址',
+          `deduct_pdf_url` varchar(512)  default NULL COMMENT '扣款单url地址',
+          `payed_date` varchar(64) default null COMMENT '生产科应付款日期',
+          `deduct_dept` varchar(64) default null COMMENT '生产科扣款责任部门',
+          `deduct_amount` decimal(20,6) DEFAULT NULL COMMENT '生产科扣款金额',
+          `actual_payed_amount` decimal(20,6) DEFAULT NULL COMMENT '实际应付金额',
+          `status`    INT          NOT NULL COMMENT '总经理审核状态 0:待审核、1:审核通过,2:审核驳回',
+          `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
+          `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
+          `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
+          `modify_time`    DATETIME     DEFAULT NULL COMMENT '修改时间',
+          `modify_by`      varchar(64)  DEFAULT NULL COMMENT '修改人',
+          `version`        INT          DEFAULT NULL COMMENT '版本号--乐观锁预留字段',
+          PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产科对账单应收账单';
+
+DROP TABLE IF EXISTS `check_bill_mapping`;
+CREATE TABLE `check_bill_mapping` (
+          `id` bigint NOT NULL AUTO_INCREMENT,
+          `check_no` varchar(64)  NOT NULL COMMENT '生产科对账单号',
+          `check_bill_id` bigint DEFAULT '0' COMMENT 'check账单id',
+          `order_id` bigint DEFAULT '0' COMMENT '订单id',
+          `enable_flag`    INT          NOT NULL COMMENT '是否可用 10-可用 20-删除',
+          `create_time`    DATETIME     NOT NULL COMMENT '创建时间',
+          `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
+          `modify_time`    DATETIME     DEFAULT NULL COMMENT '修改时间',
+          `modify_by`      varchar(64)  DEFAULT NULL COMMENT '修改人',
+          `version`        INT          DEFAULT NULL COMMENT '版本号--乐观锁预留字段',
+          PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产科对账单应收账单映射表';
+
diff --git a/src/main/java/com/order/erp/controller/InvoiceBillOrderController.java b/src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
new file mode 100644
index 0000000..f1a2675
--- /dev/null
+++ b/src/main/java/com/order/erp/controller/InvoiceBillOrderController.java
@@ -0,0 +1,148 @@
+package com.order.erp.controller;
+
+import com.order.erp.common.annotation.AnonymousAccess;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.excel4j.exceptions.Excel4JException;
+import com.order.erp.common.jsr303.OperateGroup;
+import com.order.erp.domain.vo.order.*;
+import com.order.erp.service.order.InvoiceBillOrderService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)表控制层
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:34
+ */
+@RestController
+@RequestMapping("/order/erp/invoice_bill")
+public class InvoiceBillOrderController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private InvoiceBillOrderService invoiceBillOrderService;
+
+    /**
+     * 分页查询
+     *
+     * @param invoiceBillOrderQueryVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping("/list_by_page")
+    public ServerResult listByPage(@RequestBody @Validated({OperateGroup.List.class}) InvoiceBillOrderQueryVO invoiceBillOrderQueryVO) {
+        return invoiceBillOrderService.listByPage(invoiceBillOrderQueryVO);
+    }
+
+    /**
+     * 基础订单查询
+     *
+     * @param queryVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping("/list_base_order_info_by")
+    public ServerResult listBaseOrderInfoBy(@RequestBody @Validated InvoiceBaseOrderQueryVO queryVO) {
+        return invoiceBillOrderService.listBaseOrderInfoBy(queryVO);
+    }
+
+    /**
+     * 分析列表
+     *
+     * @param queryVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping("/list_analysis_by")
+    public ServerResult listAnalysisBy(@RequestBody @Validated({OperateGroup.List.class}) InvoiceBillAnalysisVO queryVO) {
+        return invoiceBillOrderService.listAnalysisBy(queryVO);
+    }
+
+    /**
+     * 导出分析列表
+     *
+     * @param queryVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping(value = "/export")
+    @ApiOperation("导出分析列表")
+    @AnonymousAccess
+    public void export(HttpServletResponse response, @RequestBody @Validated InvoiceBillAnalysisVO queryVO) throws IOException, Excel4JException {
+        invoiceBillOrderService.export(response, queryVO);
+    }
+
+    /**
+     * 创建invoice单据
+     *
+     * @param createVO 数据VO
+     * @return 新增结果
+     */
+    @PostMapping("/create")
+    public ServerResult create(@RequestBody InvoiceBillCreateVO createVO) {
+        return invoiceBillOrderService.create(createVO);
+    }
+
+    /**
+     * 获取必须回款日期
+     *
+     * @param createVO 数据VO
+     * @return 新增结果
+     */
+    @PostMapping("/get_back_refund_date")
+    public ServerResult getBackRefundDate(@RequestBody InvoiceBillCreateVO createVO) {
+        return invoiceBillOrderService.getBackRefundDate(createVO);
+    }
+
+    /**
+     * 更新扣款信息
+     *
+     * @param deductInfoVO 数据VO
+     * @return 编辑结果
+     */
+    @PostMapping("/update_deduct_info")
+    public ServerResult updateDeductInfo(@RequestBody InvoiceBillDeductInfoVO deductInfoVO) {
+        return invoiceBillOrderService.updateDeductInfo(deductInfoVO);
+    }
+
+    /**
+     * 更新其他金额信息
+     *
+     * @param amountInfoVO 数据VO
+     * @return 编辑结果
+     */
+    @PostMapping("/update_amount_info")
+    public ServerResult updateAmountInfo(@RequestBody InvoiceBillAmountInfoVO amountInfoVO) {
+        return invoiceBillOrderService.updateAmountInfo(amountInfoVO);
+    }
+
+    /**
+     * 提交审核
+     *
+     * @param commitApplyVO 数据VO
+     * @return 编辑结果
+     */
+    @PostMapping("/commit_apply")
+    public ServerResult commitApply(@RequestBody InvoiceBillCommitApplyVO commitApplyVO) {
+        return invoiceBillOrderService.commitApply(commitApplyVO);
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param invoiceBillOrderQueryVO 查询条件
+     * @return 删除是否成功
+     */
+    @PostMapping("/delete_by_id")
+    public ServerResult deleteById(@RequestBody InvoiceBillOrderQueryVO invoiceBillOrderQueryVO) {
+        return invoiceBillOrderService.deleteById(invoiceBillOrderQueryVO);
+    }
+
+}
+
diff --git a/src/main/java/com/order/erp/controller/LocalStorageController.java b/src/main/java/com/order/erp/controller/LocalStorageController.java
index af0aa39..41809ac 100644
--- a/src/main/java/com/order/erp/controller/LocalStorageController.java
+++ b/src/main/java/com/order/erp/controller/LocalStorageController.java
@@ -31,11 +31,18 @@ public class LocalStorageController {
         return localStorageService.create(name, file);
     }
 
-    @ApiOperation("上传文件到oss服务")
+    @ApiOperation("上传图片到oss服务")
     @PostMapping(value = "/upload_oss")
     @AnonymousAccess
     public ServerResult upload2oss(@RequestParam String name, @RequestParam("file") MultipartFile file) {
         return localStorageService.uploadByAliOss(name, file);
     }
 
+    @ApiOperation("上传文件到oss服务")
+    @PostMapping(value = "/upload_file_oss")
+    @AnonymousAccess
+    public ServerResult uploadFile2oss(@RequestParam String name, @RequestParam("file") MultipartFile file) {
+        return localStorageService.uploadFileByAliOss(name, file);
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java b/src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
new file mode 100644
index 0000000..60939b7
--- /dev/null
+++ b/src/main/java/com/order/erp/controller/ProducePaymentCheckBillOrderController.java
@@ -0,0 +1,87 @@
+package com.order.erp.controller;
+
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.jsr303.OperateGroup;
+import com.order.erp.domain.vo.order.ProducePaymentCheckBillOrderQueryVO;
+import com.order.erp.domain.vo.order.ProducePaymentCheckBillOrderVO;
+import com.order.erp.service.order.ProducePaymentCheckBillOrderService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 生产科对账单应收账单(ProducePaymentCheckBillOrder)表控制层
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:35
+ */
+@RestController
+@RequestMapping("/order/erp/check_bill/")
+public class ProducePaymentCheckBillOrderController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ProducePaymentCheckBillOrderService producePaymentCheckBillOrderService;
+
+    /**
+     * 分页查询
+     *
+     * @param producePaymentCheckBillOrderQueryVO 查询条件
+     * @return 查询结果
+     */
+    @PostMapping("/list")
+    public ServerResult list(@RequestBody @Validated({OperateGroup.List.class}) ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO) {
+        return producePaymentCheckBillOrderService.list(producePaymentCheckBillOrderQueryVO);
+    }
+
+    /**
+     * 通过主键查询单条数据
+     *
+     * @param producePaymentCheckBillOrderQueryVO 查询条件
+     * @return 单条数据
+     */
+    @PostMapping("/query_by_id")
+    public ServerResult queryById(@RequestBody ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO) {
+        return producePaymentCheckBillOrderService.queryById(producePaymentCheckBillOrderQueryVO);
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param producePaymentCheckBillOrderVO 数据VO
+     * @return 新增结果
+     */
+    @PostMapping("/add")
+    public ServerResult add(@RequestBody ProducePaymentCheckBillOrderVO producePaymentCheckBillOrderVO) {
+        return producePaymentCheckBillOrderService.add(producePaymentCheckBillOrderVO);
+    }
+
+    /**
+     * 编辑数据
+     *
+     * @param producePaymentCheckBillOrderVO 数据VO
+     * @return 编辑结果
+     */
+    @PostMapping("/edit")
+    public ServerResult edit(@RequestBody ProducePaymentCheckBillOrderVO producePaymentCheckBillOrderVO) {
+        return producePaymentCheckBillOrderService.edit(producePaymentCheckBillOrderVO);
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param producePaymentCheckBillOrderQueryVO 查询条件
+     * @return 删除是否成功
+     */
+    @PostMapping("/delete_by_id")
+    public ServerResult deleteById(@RequestBody ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO) {
+        return producePaymentCheckBillOrderService.deleteById(producePaymentCheckBillOrderQueryVO);
+    }
+
+}
+
diff --git a/src/main/java/com/order/erp/domain/ApplyStatusEnum.java b/src/main/java/com/order/erp/domain/ApplyStatusEnum.java
index 5a6b6ce..b539ebe 100644
--- a/src/main/java/com/order/erp/domain/ApplyStatusEnum.java
+++ b/src/main/java/com/order/erp/domain/ApplyStatusEnum.java
@@ -13,6 +13,8 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum ApplyStatusEnum {
 
+    NO_COMMIT(-1, "未提交审核"),
+
     WAIT_AUDIT(0, "待审批"),
 
     AUDIT_PASS(10, "已通过"),
diff --git a/src/main/java/com/order/erp/domain/ApplyTypeEnum.java b/src/main/java/com/order/erp/domain/ApplyTypeEnum.java
index aa0aee2..baaeb8b 100644
--- a/src/main/java/com/order/erp/domain/ApplyTypeEnum.java
+++ b/src/main/java/com/order/erp/domain/ApplyTypeEnum.java
@@ -18,6 +18,10 @@ public enum ApplyTypeEnum {
     ORDER_PROFIT_APPLY(10, "利润分析申请"),
 
     ORDER_REPORT_APPLY(20, "项目报告书申请"),
+
+    INVOICE_BILL_APPLY(30, "应收账单申请"),
+
+    CHECK_BILL_APPLY(40, "应付账单申请"),
     ;
     private Integer type;
 
diff --git a/src/main/java/com/order/erp/domain/dto/order/CheckBillMappingDO.java b/src/main/java/com/order/erp/domain/dto/order/CheckBillMappingDO.java
new file mode 100644
index 0000000..4887ce3
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/dto/order/CheckBillMappingDO.java
@@ -0,0 +1,40 @@
+package com.order.erp.domain.dto.order;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.order.erp.domain.dto.BaseDO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 生产科对账单应收账单映射表(CheckBillMapping)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:36
+ */
+@TableName("check_bill_mapping")
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class CheckBillMappingDO extends BaseDO implements Serializable {
+    private static final long serialVersionUID = 199786248752278040L;
+
+    private Long id;
+    /**
+     * 生产科对账单号
+     */
+    private String checkNo;
+    /**
+     * check账单id
+     */
+    private Long checkBillId;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+}
diff --git a/src/main/java/com/order/erp/domain/dto/order/InvoiceBillMappingDO.java b/src/main/java/com/order/erp/domain/dto/order/InvoiceBillMappingDO.java
new file mode 100644
index 0000000..5549081
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/dto/order/InvoiceBillMappingDO.java
@@ -0,0 +1,39 @@
+package com.order.erp.domain.dto.order;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.order.erp.domain.dto.BaseDO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 应收款账单关联订单映射表(InvoiceBillMapping)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:36
+ */
+@TableName("invoice_bill_mapping")
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillMappingDO extends BaseDO implements Serializable {
+
+    private Long id;
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+    /**
+     * invoice账单id
+     */
+    private Long invoiceBillId;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+}
diff --git a/src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java b/src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
new file mode 100644
index 0000000..cfede56
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/dto/order/InvoiceBillOrderDO.java
@@ -0,0 +1,77 @@
+package com.order.erp.domain.dto.order;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.order.erp.domain.dto.BaseDO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@TableName("invoice_bill_order")
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillOrderDO extends BaseDO implements Serializable {
+
+    private Long id;
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+    /**
+     * 报关单url地址
+     */
+    private String bgUrl;
+    /**
+     * 必须回款日期
+     */
+    private String backRefundDate;
+    /**
+     * 实际回款日期
+     */
+    private String actualRefundDate;
+
+    /**
+     * 发生扣款金额
+     */
+    private BigDecimal deductAmount;
+    /**
+     * 扣款单url地址
+     */
+    private String deductUrl;
+    /**
+     * 实际应收金额
+     */
+    private BigDecimal actualReceivableAmount;
+    /**
+     * 实际应付金额1
+     */
+    private BigDecimal actualPayedAmount1;
+    /**
+     * 实际应付金额2
+     */
+    private BigDecimal actualPayedAmount2;
+    /**
+     * 实际应付金额3
+     */
+    private BigDecimal actualPayedAmount3;
+    /**
+     * 其他费用金额
+     */
+    private BigDecimal otherAmount;
+    /**
+     * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
+     */
+    private Integer status;
+
+}
diff --git a/src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java b/src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
new file mode 100644
index 0000000..b792f76
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/dto/order/ProducePaymentCheckBillOrderDO.java
@@ -0,0 +1,59 @@
+package com.order.erp.domain.dto.order;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.order.erp.domain.dto.BaseDO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 生产科对账单应收账单(ProducePaymentCheckBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:35
+ */
+@TableName("produce_payment_check_bill_order")
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class ProducePaymentCheckBillOrderDO extends BaseDO implements Serializable {
+
+    private Long id;
+    /**
+     * 生产科对账单
+     */
+    private String checkNo;
+    /**
+     * 发票url地址
+     */
+    private String invoiceUrl;
+    /**
+     * 扣款单url地址
+     */
+    private String deductPdfUrl;
+    /**
+     * 生产科应付款日期
+     */
+    private String payedDate;
+    /**
+     * 生产科扣款责任部门
+     */
+    private String deductDept;
+    /**
+     * 生产科扣款金额
+     */
+    private Double deductAmount;
+    /**
+     * 实际应付金额
+     */
+    private Double actualPayedAmount;
+    /**
+     * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
+     */
+    private Integer status;
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/CheckBillMappingQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/CheckBillMappingQueryVO.java
new file mode 100644
index 0000000..4ad4dbf
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/CheckBillMappingQueryVO.java
@@ -0,0 +1,43 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.vo.BasePageVO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 生产科对账单应收账单映射表(CheckBillMapping)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:37
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class CheckBillMappingQueryVO extends BasePageVO implements Serializable {
+
+    private List<Long> ids;
+
+
+    private Long id;
+    /**
+     * 生产科对账单号
+     */
+    private String checkNo;
+    /**
+     * check账单id
+     */
+    private Long checkBillId;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+
+}
+
diff --git a/src/main/java/com/order/erp/domain/vo/order/CheckBillMappingVO.java b/src/main/java/com/order/erp/domain/vo/order/CheckBillMappingVO.java
new file mode 100644
index 0000000..835738b
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/CheckBillMappingVO.java
@@ -0,0 +1,37 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 生产科对账单应收账单映射表(CheckBillMapping)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:37
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class CheckBillMappingVO implements Serializable {
+
+    private Long id;
+    /**
+     * 生产科对账单号
+     */
+    private String checkNo;
+    /**
+     * check账单id
+     */
+    private Long checkBillId;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBaseOrderQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBaseOrderQueryVO.java
new file mode 100644
index 0000000..739b367
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBaseOrderQueryVO.java
@@ -0,0 +1,30 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.vo.BasePageVO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:34
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBaseOrderQueryVO extends BasePageVO implements Serializable {
+
+    /**
+     * 发票单号
+     */
+    @NotBlank(message = "发票单号不能为空")
+    private String invoiceNo;
+}
+
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAmountInfoVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAmountInfoVO.java
new file mode 100644
index 0000000..68b6358
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAmountInfoVO.java
@@ -0,0 +1,51 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 应收款账单 -- 其他金额信息
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillAmountInfoVO implements Serializable {
+
+    private Long id;
+
+    /**
+     * 报关单url地址
+     */
+    private String bgUrl;
+
+    /**
+     * 实际应收金额
+     */
+    private BigDecimal actualReceivableAmount;
+    /**
+     * 实际应付金额1
+     */
+    private BigDecimal actualPayedAmount1;
+    /**
+     * 实际应付金额2
+     */
+    private BigDecimal actualPayedAmount2;
+    /**
+     * 实际应付金额3
+     */
+    private BigDecimal actualPayedAmount3;
+    /**
+     * 其他费用金额
+     */
+    private BigDecimal otherAmount;
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisExportVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisExportVO.java
new file mode 100644
index 0000000..cfa178d
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisExportVO.java
@@ -0,0 +1,77 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillAnalysisExportVO implements Serializable {
+
+    private Long id;
+
+    /**
+     * 客户编码
+     */
+    private String customerCode;
+
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+
+    /**
+     * 客户总价$
+     */
+    private BigDecimal customerTotalPrice;
+
+    /**
+     * 发生扣款金额
+     */
+    private BigDecimal deductAmount;
+
+    /**
+     * 实际应收金额
+     */
+    private BigDecimal actualReceivableAmount;
+
+    /**
+     * 实际应付金额
+     */
+    private BigDecimal actualPayedAmount;
+
+    /**
+     * 实际应收 - 实际应付
+     * 其他费用金额汇总
+     */
+    private BigDecimal otherAmount;
+
+    /**
+     * 实际应收 - 实际应付 - 其他费用金额汇总
+     * 其他费用金额合计
+     */
+    private BigDecimal otherTotalAmount;
+
+    /**
+     * 必须回款日期
+     */
+    private String backRefundDate;
+
+    /**
+     * 实际回款日期
+     */
+    private String actualRefundDate;
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisResultVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisResultVO.java
new file mode 100644
index 0000000..09685b0
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisResultVO.java
@@ -0,0 +1,70 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillAnalysisResultVO implements Serializable {
+
+
+    /**
+     * 导出列表
+     */
+    private List<InvoiceBillAnalysisExportVO> exportVOS;
+
+    /**
+     * 合计数据
+     */
+
+    /**
+     * 客户总价$
+     */
+    private BigDecimal customerTotalPrice;
+
+    /**
+     * 发生扣款金额
+     */
+    private BigDecimal deductAmount;
+
+    /**
+     * 实际应收金额
+     */
+    private BigDecimal actualReceivableAmount;
+
+    /**
+     * 实际应付金额
+     */
+    private BigDecimal actualPayedAmount;
+
+    /**
+     * 实际应收 - 实际应付
+     * 其他费用金额汇总
+     */
+    private BigDecimal otherAmount;
+
+    /**
+     * 实际应收 - 实际应付 - 其他费用金额汇总
+     * 其他费用金额合计
+     */
+    private BigDecimal otherTotalAmount;
+
+    /**
+     * 合计数据
+     */
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisVO.java
new file mode 100644
index 0000000..14acdc9
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillAnalysisVO.java
@@ -0,0 +1,21 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 应收款账单 -- 分析
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillAnalysisVO extends InvoiceBillOrderQueryVO implements Serializable {
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillCommitApplyVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillCommitApplyVO.java
new file mode 100644
index 0000000..4fb1db9
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillCommitApplyVO.java
@@ -0,0 +1,24 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 应收款账单 -- 提交审核
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillCommitApplyVO implements Serializable {
+
+    private Long id;
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillCreateVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillCreateVO.java
new file mode 100644
index 0000000..085833e
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillCreateVO.java
@@ -0,0 +1,47 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillCreateVO implements Serializable {
+    private static final long serialVersionUID = 543899167451834300L;
+
+    private Long id;
+
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+
+    /**
+     * 报关单url地址
+     */
+    private String bgUrl;
+
+    /**
+     * 必须回款日期
+     */
+    private String backRefundDate;
+
+    /**
+     * 订单id集合
+     */
+    private List<Long> orderIds;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillDeductInfoVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillDeductInfoVO.java
new file mode 100644
index 0000000..4ca4deb
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillDeductInfoVO.java
@@ -0,0 +1,40 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 应收款账单 -- 扣款信息
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillDeductInfoVO implements Serializable {
+
+    private Long id;
+
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+
+    /**
+     * 发生扣款金额
+     */
+    private BigDecimal deductAmount;
+
+    /**
+     * 扣款单url地址
+     */
+    private String deductUrl;
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillMappingQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillMappingQueryVO.java
new file mode 100644
index 0000000..9d7daeb
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillMappingQueryVO.java
@@ -0,0 +1,44 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.vo.BasePageVO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 应收款账单关联订单映射表(InvoiceBillMapping)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:36
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillMappingQueryVO extends BasePageVO implements Serializable {
+    private static final long serialVersionUID = -10772282327497511L;
+
+    private List<Long> ids;
+
+
+    private Long id;
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+    /**
+     * invoice账单id
+     */
+    private Long invoiceBillId;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+
+}
+
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillMappingVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillMappingVO.java
new file mode 100644
index 0000000..b718f2d
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillMappingVO.java
@@ -0,0 +1,38 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 应收款账单关联订单映射表(InvoiceBillMapping)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:36
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillMappingVO implements Serializable {
+    private static final long serialVersionUID = -55765026730369748L;
+
+    private Long id;
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+    /**
+     * invoice账单id
+     */
+    private Long invoiceBillId;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
new file mode 100644
index 0000000..117c7fd
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
@@ -0,0 +1,71 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.vo.BasePageVO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:34
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable {
+
+    private List<Long> ids;
+
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+
+    /**
+     * 总经理审核状态 -1,未提交审核,0:待审核、1:审核通过,2:审核驳回
+     */
+    private Integer status;
+
+    /**
+     * 客户编码
+     */
+    private String customerCode;
+
+    /**
+     * 项目号
+     */
+    private String projectNo;
+
+    /**
+     * 生产科
+     */
+    private String productionDepartment;
+
+    /**
+     * 内部编号
+     */
+    private String innerNo;
+
+    /**
+     * 客户po号
+     */
+    private String customerPo;
+
+    /**
+     * 开始时间
+     */
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+}
+
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderVO.java
new file mode 100644
index 0000000..4f569b7
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderVO.java
@@ -0,0 +1,82 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceBillOrderVO implements Serializable {
+    private static final long serialVersionUID = 543899167451834300L;
+
+    private Long id;
+
+    /**
+     * 发票单号
+     */
+    private String invoiceNo;
+
+    /**
+     * 报关单url地址
+     */
+    private String bgUrl;
+
+    /**
+     * 必须回款日期
+     */
+    private String backRefundDate;
+
+    /**
+     * 发生扣款金额
+     */
+    private BigDecimal deductAmount;
+
+    /**
+     * 扣款单url地址
+     */
+    private String deductUrl;
+
+    /**
+     * 实际应收金额
+     */
+    private BigDecimal actualReceivableAmount;
+
+    /**
+     * 实际应付金额1
+     */
+    private BigDecimal actualPayedAmount1;
+
+    /**
+     * 实际应付金额2
+     */
+    private BigDecimal actualPayedAmount2;
+
+    /**
+     * 实际应付金额3
+     */
+    private BigDecimal actualPayedAmount3;
+
+    /**
+     * 其他费用金额
+     */
+    private BigDecimal otherAmount;
+
+    /**
+     * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
+     */
+    private Integer status;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceHoldTimeItemVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceHoldTimeItemVO.java
new file mode 100644
index 0000000..2770801
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceHoldTimeItemVO.java
@@ -0,0 +1,37 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.dto.order.OrderBaseInfoDO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 应收款账单 -- holdTime
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceHoldTimeItemVO implements Serializable {
+
+    /**
+     * 客户编码
+     */
+    private String customerCode;
+
+    /**
+     * 订单hold时间
+     */
+    private String holdTime;
+
+    /**
+     * 基础订单信息
+     */
+    private OrderBaseInfoDO baseInfoDO;
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/InvoiceOrderBaseItemVO.java b/src/main/java/com/order/erp/domain/vo/order/InvoiceOrderBaseItemVO.java
new file mode 100644
index 0000000..69292a2
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/InvoiceOrderBaseItemVO.java
@@ -0,0 +1,41 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:33
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class InvoiceOrderBaseItemVO implements Serializable {
+
+    private Long orderId;
+
+    /**
+     * invoice编码
+     */
+    private String invoiceCode;
+
+    /**
+     * 客户编码
+     */
+    private String customerCode;
+
+    /**
+     * 客户总价$
+     */
+    private BigDecimal customerTotalPrice;
+
+
+}
diff --git a/src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderQueryVO.java b/src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderQueryVO.java
new file mode 100644
index 0000000..3907c0d
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderQueryVO.java
@@ -0,0 +1,63 @@
+package com.order.erp.domain.vo.order;
+
+import com.order.erp.domain.vo.BasePageVO;
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 生产科对账单应收账单(ProducePaymentCheckBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:35
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class ProducePaymentCheckBillOrderQueryVO extends BasePageVO implements Serializable {
+
+    private List<Long> ids;
+
+
+    private Long id;
+    /**
+     * 生产科对账单
+     */
+    private String checkNo;
+    /**
+     * 发票url地址
+     */
+    private String invoiceUrl;
+    /**
+     * 扣款单url地址
+     */
+    private String deductPdfUrl;
+    /**
+     * 生产科应付款日期
+     */
+    private String payedDate;
+    /**
+     * 生产科扣款责任部门
+     */
+    private String deductDept;
+    /**
+     * 生产科扣款金额
+     */
+    private Double deductAmount;
+    /**
+     * 实际应付金额
+     */
+    private Double actualPayedAmount;
+    /**
+     * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
+     */
+    private Integer status;
+
+
+}
+
diff --git a/src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderVO.java b/src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderVO.java
new file mode 100644
index 0000000..d540239
--- /dev/null
+++ b/src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderVO.java
@@ -0,0 +1,58 @@
+package com.order.erp.domain.vo.order;
+
+import lombok.*;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 生产科对账单应收账单(ProducePaymentCheckBillOrder)实体类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:35
+ */
+@Data
+@AllArgsConstructor
+@ToString
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@SuperBuilder
+public class ProducePaymentCheckBillOrderVO implements Serializable {
+    private static final long serialVersionUID = 239047702576286556L;
+
+    private Long id;
+    /**
+     * 生产科对账单
+     */
+    private String checkNo;
+    /**
+     * 发票url地址
+     */
+    private String invoiceUrl;
+    /**
+     * 扣款单url地址
+     */
+    private String deductPdfUrl;
+    /**
+     * 生产科应付款日期
+     */
+    private String payedDate;
+    /**
+     * 生产科扣款责任部门
+     */
+    private String deductDept;
+    /**
+     * 生产科扣款金额
+     */
+    private Double deductAmount;
+    /**
+     * 实际应付金额
+     */
+    private Double actualPayedAmount;
+    /**
+     * 总经理审核状态 0:待审核、1:审核通过,2:审核驳回
+     */
+    private Integer status;
+
+
+}
diff --git a/src/main/java/com/order/erp/mapper/order/CheckBillMappingMapper.java b/src/main/java/com/order/erp/mapper/order/CheckBillMappingMapper.java
new file mode 100644
index 0000000..8926f4b
--- /dev/null
+++ b/src/main/java/com/order/erp/mapper/order/CheckBillMappingMapper.java
@@ -0,0 +1,16 @@
+package com.order.erp.mapper.order;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.order.erp.domain.dto.order.CheckBillMappingDO;
+
+/**
+ * 生产科对账单应收账单映射表(CheckBillMapping)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:37
+ */
+public interface CheckBillMappingMapper extends BaseMapper<CheckBillMappingDO> {
+
+
+}
+
diff --git a/src/main/java/com/order/erp/mapper/order/InvoiceBillMappingMapper.java b/src/main/java/com/order/erp/mapper/order/InvoiceBillMappingMapper.java
new file mode 100644
index 0000000..3130fe0
--- /dev/null
+++ b/src/main/java/com/order/erp/mapper/order/InvoiceBillMappingMapper.java
@@ -0,0 +1,16 @@
+package com.order.erp.mapper.order;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.order.erp.domain.dto.order.InvoiceBillMappingDO;
+
+/**
+ * 应收款账单关联订单映射表(InvoiceBillMapping)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:36
+ */
+public interface InvoiceBillMappingMapper extends BaseMapper<InvoiceBillMappingDO> {
+
+
+}
+
diff --git a/src/main/java/com/order/erp/mapper/order/InvoiceBillOrderMapper.java b/src/main/java/com/order/erp/mapper/order/InvoiceBillOrderMapper.java
new file mode 100644
index 0000000..986ea2f
--- /dev/null
+++ b/src/main/java/com/order/erp/mapper/order/InvoiceBillOrderMapper.java
@@ -0,0 +1,16 @@
+package com.order.erp.mapper.order;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.order.erp.domain.dto.order.InvoiceBillOrderDO;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:34
+ */
+public interface InvoiceBillOrderMapper extends BaseMapper<InvoiceBillOrderDO> {
+
+
+}
+
diff --git a/src/main/java/com/order/erp/mapper/order/ProducePaymentCheckBillOrderMapper.java b/src/main/java/com/order/erp/mapper/order/ProducePaymentCheckBillOrderMapper.java
new file mode 100644
index 0000000..3ffb87e
--- /dev/null
+++ b/src/main/java/com/order/erp/mapper/order/ProducePaymentCheckBillOrderMapper.java
@@ -0,0 +1,16 @@
+package com.order.erp.mapper.order;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO;
+
+/**
+ * 生产科对账单应收账单(ProducePaymentCheckBillOrder)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:35
+ */
+public interface ProducePaymentCheckBillOrderMapper extends BaseMapper<ProducePaymentCheckBillOrderDO> {
+
+
+}
+
diff --git a/src/main/java/com/order/erp/service/LocalStorageService.java b/src/main/java/com/order/erp/service/LocalStorageService.java
index 1f77421..d2cea9d 100644
--- a/src/main/java/com/order/erp/service/LocalStorageService.java
+++ b/src/main/java/com/order/erp/service/LocalStorageService.java
@@ -24,6 +24,14 @@ public interface LocalStorageService extends IService<LocalStorageDO> {
      */
     ServerResult uploadByAliOss(String name, MultipartFile file);
 
+    /**
+     *
+     * @param name
+     * @param file
+     * @return
+     */
+    ServerResult uploadFileByAliOss(String name, MultipartFile file);
+
     ServerResult create(String name, MultipartFile file);
 
     /**
diff --git a/src/main/java/com/order/erp/service/impl/LocalStorageServiceImpl.java b/src/main/java/com/order/erp/service/impl/LocalStorageServiceImpl.java
index afc35db..d91ec41 100644
--- a/src/main/java/com/order/erp/service/impl/LocalStorageServiceImpl.java
+++ b/src/main/java/com/order/erp/service/impl/LocalStorageServiceImpl.java
@@ -51,6 +51,24 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc
     private long maxSize;
 
     @Override
+    public ServerResult uploadFileByAliOss(String name, MultipartFile file) {
+        FileUtil.checkSize(maxSize, file.getSize());
+        String fileName = AliOssUtil.getUniqueFileName(name);
+        String tempFileName = "Thumbnails" + Constant.CROSS_BAR_CHARACTER + fileName;
+        ImageRespVO imageRespVO = new ImageRespVO();
+        try {
+            File tempFile = new File(path + "files" + File.separator + tempFileName);
+            if (AliOssUtil.upload(AliOssConfig.ALIYUN_BUCKET, fileName, file.getBytes())) {
+                FileUtil.del(tempFile);
+            }
+            return ServerResult.success(imageRespVO);
+        } catch (Exception e) {
+            log.error("上传文件异常:{}", e.getMessage());
+            throw new BusinessException(ServerResultCode.UPLOAD_IMAGES_ERROR);
+        }
+    }
+
+    @Override
     public ServerResult uploadByAliOss(String name, MultipartFile file) {
         FileUtil.checkSize(maxSize, file.getSize());
         String fileName = AliOssUtil.getUniqueFileName(name);
diff --git a/src/main/java/com/order/erp/service/order/CheckBillMappingService.java b/src/main/java/com/order/erp/service/order/CheckBillMappingService.java
new file mode 100644
index 0000000..8e4bf98
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/CheckBillMappingService.java
@@ -0,0 +1,57 @@
+package com.order.erp.service.order;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.dto.order.CheckBillMappingDO;
+import com.order.erp.domain.vo.order.CheckBillMappingQueryVO;
+import com.order.erp.domain.vo.order.CheckBillMappingVO;
+
+/**
+ * 生产科对账单应收账单映射表(CheckBillMapping)表服务接口
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:37
+ */
+public interface CheckBillMappingService extends IService<CheckBillMappingDO> {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param checkBillMappingQueryVO 主键
+     * @return 实例对象
+     */
+    ServerResult queryById(CheckBillMappingQueryVO checkBillMappingQueryVO);
+
+    /**
+     * 分页查询
+     *
+     * @param checkBillMappingQueryVO 筛选条件
+     * @return 查询结果
+     */
+    ServerResult list(CheckBillMappingQueryVO checkBillMappingQueryVO);
+
+    /**
+     * 新增数据
+     *
+     * @param checkBillMappingVO 数据VO
+     * @return 新增结果
+     */
+    ServerResult add(CheckBillMappingVO checkBillMappingVO);
+
+    /**
+     * 修改数据
+     *
+     * @param checkBillMappingVO 数据VO
+     * @return 编辑结果
+     */
+    ServerResult edit(CheckBillMappingVO checkBillMappingVO);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param checkBillMappingQueryVO 筛选条件
+     * @return 是否成功
+     */
+    ServerResult deleteById(CheckBillMappingQueryVO checkBillMappingQueryVO);
+
+}
diff --git a/src/main/java/com/order/erp/service/order/InvoiceBillMappingService.java b/src/main/java/com/order/erp/service/order/InvoiceBillMappingService.java
new file mode 100644
index 0000000..2ae7f28
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/InvoiceBillMappingService.java
@@ -0,0 +1,57 @@
+package com.order.erp.service.order;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.dto.order.InvoiceBillMappingDO;
+import com.order.erp.domain.vo.order.InvoiceBillMappingQueryVO;
+import com.order.erp.domain.vo.order.InvoiceBillMappingVO;
+
+/**
+ * 应收款账单关联订单映射表(InvoiceBillMapping)表服务接口
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:36
+ */
+public interface InvoiceBillMappingService extends IService<InvoiceBillMappingDO> {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param invoiceBillMappingQueryVO 主键
+     * @return 实例对象
+     */
+    ServerResult queryById(InvoiceBillMappingQueryVO invoiceBillMappingQueryVO);
+
+    /**
+     * 分页查询
+     *
+     * @param invoiceBillMappingQueryVO 筛选条件
+     * @return 查询结果
+     */
+    ServerResult list(InvoiceBillMappingQueryVO invoiceBillMappingQueryVO);
+
+    /**
+     * 新增数据
+     *
+     * @param invoiceBillMappingVO 数据VO
+     * @return 新增结果
+     */
+    ServerResult add(InvoiceBillMappingVO invoiceBillMappingVO);
+
+    /**
+     * 修改数据
+     *
+     * @param invoiceBillMappingVO 数据VO
+     * @return 编辑结果
+     */
+    ServerResult edit(InvoiceBillMappingVO invoiceBillMappingVO);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param invoiceBillMappingQueryVO 筛选条件
+     * @return 是否成功
+     */
+    ServerResult deleteById(InvoiceBillMappingQueryVO invoiceBillMappingQueryVO);
+
+}
diff --git a/src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java b/src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java
new file mode 100644
index 0000000..8c909c2
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/InvoiceBillOrderService.java
@@ -0,0 +1,92 @@
+package com.order.erp.service.order;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.dto.order.InvoiceBillOrderDO;
+import com.order.erp.domain.vo.order.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)表服务接口
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:34
+ */
+public interface InvoiceBillOrderService extends IService<InvoiceBillOrderDO> {
+
+    /**
+     * 分页查询
+     *
+     * @param invoiceBillOrderQueryVO 筛选条件
+     * @return 查询结果
+     */
+    ServerResult listByPage(InvoiceBillOrderQueryVO invoiceBillOrderQueryVO);
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    ServerResult listBaseOrderInfoBy(InvoiceBaseOrderQueryVO queryVO);
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    ServerResult listAnalysisBy(InvoiceBillAnalysisVO queryVO);
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    ServerResult export(HttpServletResponse response, InvoiceBillAnalysisVO queryVO) throws IOException;
+
+    /**
+     * 新增数据
+     *
+     * @param createVO 数据VO
+     * @return 新增结果
+     */
+    ServerResult create(InvoiceBillCreateVO createVO);
+
+    /**
+     *
+     * @param createVO
+     * @return
+     */
+    ServerResult getBackRefundDate(InvoiceBillCreateVO createVO);
+
+    /**
+     * 更新扣款信息
+     *
+     * @param deductInfoVO 数据VO
+     * @return 编辑结果
+     */
+    ServerResult updateDeductInfo(InvoiceBillDeductInfoVO deductInfoVO);
+
+    /**
+     * 更新其他金额信息
+     *
+     * @param amountInfoVO
+     * @return
+     */
+    ServerResult updateAmountInfo(InvoiceBillAmountInfoVO amountInfoVO);
+
+    /**
+     * 提交审核
+     *
+     * @param commitApplyVO
+     * @return
+     */
+    ServerResult commitApply(InvoiceBillCommitApplyVO commitApplyVO);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param invoiceBillOrderQueryVO 筛选条件
+     * @return 是否成功
+     */
+    ServerResult deleteById(InvoiceBillOrderQueryVO invoiceBillOrderQueryVO);
+
+}
diff --git a/src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java b/src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java
new file mode 100644
index 0000000..be625cf
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/ProducePaymentCheckBillOrderService.java
@@ -0,0 +1,57 @@
+package com.order.erp.service.order;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO;
+import com.order.erp.domain.vo.order.ProducePaymentCheckBillOrderQueryVO;
+import com.order.erp.domain.vo.order.ProducePaymentCheckBillOrderVO;
+
+/**
+ * 生产科对账单应收账单(ProducePaymentCheckBillOrder)表服务接口
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:35
+ */
+public interface ProducePaymentCheckBillOrderService extends IService<ProducePaymentCheckBillOrderDO> {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param producePaymentCheckBillOrderQueryVO 主键
+     * @return 实例对象
+     */
+    ServerResult queryById(ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO);
+
+    /**
+     * 分页查询
+     *
+     * @param producePaymentCheckBillOrderQueryVO 筛选条件
+     * @return 查询结果
+     */
+    ServerResult list(ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO);
+
+    /**
+     * 新增数据
+     *
+     * @param producePaymentCheckBillOrderVO 数据VO
+     * @return 新增结果
+     */
+    ServerResult add(ProducePaymentCheckBillOrderVO producePaymentCheckBillOrderVO);
+
+    /**
+     * 修改数据
+     *
+     * @param producePaymentCheckBillOrderVO 数据VO
+     * @return 编辑结果
+     */
+    ServerResult edit(ProducePaymentCheckBillOrderVO producePaymentCheckBillOrderVO);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param producePaymentCheckBillOrderQueryVO 筛选条件
+     * @return 是否成功
+     */
+    ServerResult deleteById(ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO);
+
+}
diff --git a/src/main/java/com/order/erp/service/order/impl/CheckBillMappingServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/CheckBillMappingServiceImpl.java
new file mode 100644
index 0000000..05bfeb4
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/impl/CheckBillMappingServiceImpl.java
@@ -0,0 +1,133 @@
+package com.order.erp.service.order.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.order.erp.common.constant.Constant;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.utils.PageUtils;
+import com.order.erp.domain.dto.order.CheckBillMappingDO;
+import com.order.erp.domain.vo.order.CheckBillMappingQueryVO;
+import com.order.erp.domain.vo.order.CheckBillMappingVO;
+import com.order.erp.mapper.order.CheckBillMappingMapper;
+import com.order.erp.service.order.CheckBillMappingService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 生产科对账单应收账单映射表(CheckBillMapping)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:37
+ */
+@Slf4j
+@Service
+public class CheckBillMappingServiceImpl extends ServiceImpl<CheckBillMappingMapper, CheckBillMappingDO> implements CheckBillMappingService {
+
+
+    /**
+     * 通过ID查询单条数据
+     * <p>
+     * checkBillMappingQueryVO 主键
+     *
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult queryById(CheckBillMappingQueryVO checkBillMappingQueryVO) {
+        if (Objects.isNull(checkBillMappingQueryVO.getId())) {
+            return ServerResult.fail("id 不能为空");
+        }
+        CheckBillMappingDO CheckBillMappingDo = getById(checkBillMappingQueryVO.getId());
+        if (Objects.isNull(CheckBillMappingDo)) {
+            return ServerResult.success(null);
+        }
+        return ServerResult.success(BeanUtil.copyProperties(CheckBillMappingDo, CheckBillMappingVO.class));
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param checkBillMappingQueryVO 筛选条件
+     * @return 查询结果
+     */
+    @Override
+    public ServerResult list(CheckBillMappingQueryVO checkBillMappingQueryVO) {
+
+        LambdaQueryWrapper<CheckBillMappingDO> queryWapper = new LambdaQueryWrapper<CheckBillMappingDO>()
+                .eq(CheckBillMappingDO::getEnableFlag, Constant.ENABLE_TEN)
+                .orderByDesc(CheckBillMappingDO::getId);
+        Page page = new Page<>(checkBillMappingQueryVO.getPage(), checkBillMappingQueryVO.getPageSize());
+        IPage<CheckBillMappingDO> iPage = page(page, queryWapper);
+        checkBillMappingQueryVO.setTotal(Long.valueOf(iPage.getTotal()).intValue());
+        return ServerResult.success(PageUtils.getPageReturn(null, checkBillMappingQueryVO));
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param checkBillMappingVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult add(CheckBillMappingVO checkBillMappingVO) {
+        //todo 校验
+        if (Objects.nonNull(checkBillMappingVO.getId())) {
+            checkBillMappingVO.setId(null);
+        }
+        CheckBillMappingDO checkBillMappingDo = BeanUtil.copyProperties(checkBillMappingVO, CheckBillMappingDO.class);
+
+        save(checkBillMappingDo);
+
+        return ServerResult.success();
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param checkBillMappingVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult edit(CheckBillMappingVO checkBillMappingVO) {
+        //todo 校验
+        if (Objects.isNull(checkBillMappingVO.getId())) {
+            return ServerResult.fail("id 不能为空");
+        }
+        CheckBillMappingDO checkBillMappingDo = BeanUtil.copyProperties(checkBillMappingVO, CheckBillMappingDO.class);
+
+        updateById(checkBillMappingDo);
+
+        return ServerResult.success();
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param checkBillMappingQueryVO 筛选条件
+     * @return 是否成功
+     */
+    @Override
+    public ServerResult deleteById(CheckBillMappingQueryVO checkBillMappingQueryVO) {
+        List<Long> ids = checkBillMappingQueryVO.getIds();
+        if (CollUtil.isEmpty(ids)) {
+            return ServerResult.fail("ids 参数不能为空");
+        }
+        List<CheckBillMappingDO> checkBillMappingList = listByIds(ids);
+        if (CollUtil.isEmpty(checkBillMappingList)) {
+            return ServerResult.success();
+        }
+        //todo 校验是否可以逻辑删除
+        LambdaUpdateWrapper<CheckBillMappingDO> updateWrapper = new LambdaUpdateWrapper<CheckBillMappingDO>()
+                .in(CheckBillMappingDO::getId, ids)
+                .set(CheckBillMappingDO::getEnableFlag, Constant.UNABLE_TWENTY);
+        update(updateWrapper);
+        return ServerResult.success();
+    }
+}
diff --git a/src/main/java/com/order/erp/service/order/impl/InvoiceBillMappingServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/InvoiceBillMappingServiceImpl.java
new file mode 100644
index 0000000..6258934
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/impl/InvoiceBillMappingServiceImpl.java
@@ -0,0 +1,133 @@
+package com.order.erp.service.order.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.order.erp.common.constant.Constant;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.utils.PageUtils;
+import com.order.erp.domain.dto.order.InvoiceBillMappingDO;
+import com.order.erp.domain.vo.order.InvoiceBillMappingQueryVO;
+import com.order.erp.domain.vo.order.InvoiceBillMappingVO;
+import com.order.erp.mapper.order.InvoiceBillMappingMapper;
+import com.order.erp.service.order.InvoiceBillMappingService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 应收款账单关联订单映射表(InvoiceBillMapping)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:36
+ */
+@Slf4j
+@Service
+public class InvoiceBillMappingServiceImpl extends ServiceImpl<InvoiceBillMappingMapper, InvoiceBillMappingDO> implements InvoiceBillMappingService {
+
+
+    /**
+     * 通过ID查询单条数据
+     * <p>
+     * invoiceBillMappingQueryVO 主键
+     *
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult queryById(InvoiceBillMappingQueryVO invoiceBillMappingQueryVO) {
+        if (Objects.isNull(invoiceBillMappingQueryVO.getId())) {
+            return ServerResult.fail("id 不能为空");
+        }
+        InvoiceBillMappingDO InvoiceBillMappingDo = getById(invoiceBillMappingQueryVO.getId());
+        if (Objects.isNull(InvoiceBillMappingDo)) {
+            return ServerResult.success(null);
+        }
+        return ServerResult.success(BeanUtil.copyProperties(InvoiceBillMappingDo, InvoiceBillMappingVO.class));
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param invoiceBillMappingQueryVO 筛选条件
+     * @return 查询结果
+     */
+    @Override
+    public ServerResult list(InvoiceBillMappingQueryVO invoiceBillMappingQueryVO) {
+
+        LambdaQueryWrapper<InvoiceBillMappingDO> queryWapper = new LambdaQueryWrapper<InvoiceBillMappingDO>()
+                .eq(InvoiceBillMappingDO::getEnableFlag, Constant.ENABLE_TEN)
+                .orderByDesc(InvoiceBillMappingDO::getId);
+        Page page = new Page<>(invoiceBillMappingQueryVO.getPage(), invoiceBillMappingQueryVO.getPageSize());
+        IPage<InvoiceBillMappingDO> iPage = page(page, queryWapper);
+        invoiceBillMappingQueryVO.setTotal(Long.valueOf(iPage.getTotal()).intValue());
+        return ServerResult.success(PageUtils.getPageReturn(null, invoiceBillMappingQueryVO));
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param invoiceBillMappingVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult add(InvoiceBillMappingVO invoiceBillMappingVO) {
+        //todo 校验
+        if (Objects.nonNull(invoiceBillMappingVO.getId())) {
+            invoiceBillMappingVO.setId(null);
+        }
+        InvoiceBillMappingDO invoiceBillMappingDo = BeanUtil.copyProperties(invoiceBillMappingVO, InvoiceBillMappingDO.class);
+
+        save(invoiceBillMappingDo);
+
+        return ServerResult.success();
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param invoiceBillMappingVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult edit(InvoiceBillMappingVO invoiceBillMappingVO) {
+        //todo 校验
+        if (Objects.isNull(invoiceBillMappingVO.getId())) {
+            return ServerResult.fail("id 不能为空");
+        }
+        InvoiceBillMappingDO invoiceBillMappingDo = BeanUtil.copyProperties(invoiceBillMappingVO, InvoiceBillMappingDO.class);
+
+        updateById(invoiceBillMappingDo);
+
+        return ServerResult.success();
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param invoiceBillMappingQueryVO 筛选条件
+     * @return 是否成功
+     */
+    @Override
+    public ServerResult deleteById(InvoiceBillMappingQueryVO invoiceBillMappingQueryVO) {
+        List<Long> ids = invoiceBillMappingQueryVO.getIds();
+        if (CollUtil.isEmpty(ids)) {
+            return ServerResult.fail("ids 参数不能为空");
+        }
+        List<InvoiceBillMappingDO> invoiceBillMappingList = listByIds(ids);
+        if (CollUtil.isEmpty(invoiceBillMappingList)) {
+            return ServerResult.success();
+        }
+        //todo 校验是否可以逻辑删除
+        LambdaUpdateWrapper<InvoiceBillMappingDO> updateWrapper = new LambdaUpdateWrapper<InvoiceBillMappingDO>()
+                .in(InvoiceBillMappingDO::getId, ids)
+                .set(InvoiceBillMappingDO::getEnableFlag, Constant.UNABLE_TWENTY);
+        update(updateWrapper);
+        return ServerResult.success();
+    }
+}
diff --git a/src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
new file mode 100644
index 0000000..bc89469
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
@@ -0,0 +1,712 @@
+package com.order.erp.service.order.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.stupdit1t.excel.common.PoiWorkbookType;
+import com.github.stupdit1t.excel.core.ExcelHelper;
+import com.github.stupdit1t.excel.style.CellPosition;
+import com.order.erp.common.constant.Constant;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.constant.ServerResultCode;
+import com.order.erp.common.exception.BusinessException;
+import com.order.erp.common.utils.DateUtils;
+import com.order.erp.common.utils.StringUtils;
+import com.order.erp.common.utils.TransactionHelper;
+import com.order.erp.config.DataScope;
+import com.order.erp.domain.ApplyStatusEnum;
+import com.order.erp.domain.ApplyTypeEnum;
+import com.order.erp.domain.RoleEnum;
+import com.order.erp.domain.dto.BaseDO;
+import com.order.erp.domain.dto.SystemSettingDO;
+import com.order.erp.domain.dto.order.*;
+import com.order.erp.domain.vo.order.*;
+import com.order.erp.mapper.order.InvoiceBillOrderMapper;
+import com.order.erp.service.SystemSettingService;
+import com.order.erp.service.order.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 应收款账单表(InvoiceBillOrder)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:34
+ */
+@Slf4j
+@Service
+public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMapper, InvoiceBillOrderDO> implements InvoiceBillOrderService {
+
+
+    @Resource
+    private OrderBaseInfoService orderBaseInfoService;
+
+    @Resource
+    private OrderProfitAnalysisService profitAnalysisService;
+
+    @Resource
+    private InvoiceBillMappingService invoiceBillMappingService;
+
+    @Resource
+    private OrderFieldLockApplyService orderFieldLockApplyService;
+
+    @Resource
+    private SystemSettingService systemSettingService;
+
+    @Resource
+    private DataScope dataScope;
+
+    @Resource
+    private TransactionHelper transactionHelper;
+
+
+    /**
+     * 分页查询
+     *
+     * @param queryVO 筛选条件
+     * @return 查询结果
+     */
+    @Override
+    public ServerResult listByPage(InvoiceBillOrderQueryVO queryVO) {
+        LambdaQueryWrapper<InvoiceBillOrderDO> queryWrapper = getQueryWrapper(queryVO);
+        Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
+        IPage<InvoiceBillOrderDO> iPage = page(page, queryWrapper);
+        return ServerResult.success(iPage);
+    }
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    private LambdaQueryWrapper<InvoiceBillOrderDO> getQueryWrapper(InvoiceBillOrderQueryVO queryVO) {
+        Set<Long> billOrderIds = filterBillOrderIdsBy(queryVO);
+        return new LambdaQueryWrapper<InvoiceBillOrderDO>()
+                .eq(InvoiceBillOrderDO::getEnableFlag, Constant.ENABLE_TEN)
+                .in(CollectionUtils.isNotEmpty(billOrderIds), InvoiceBillOrderDO::getId, billOrderIds)
+                .eq(StringUtils.isNotBlank(queryVO.getInvoiceNo()), InvoiceBillOrderDO::getInvoiceNo, queryVO.getInvoiceNo())
+                .eq(Objects.nonNull(queryVO.getStatus()), InvoiceBillOrderDO::getStatus, queryVO.getStatus())
+                .ge(StringUtils.isNotBlank(queryVO.getStartTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getStartTime())
+                .le(StringUtils.isNotBlank(queryVO.getEndTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getEndTime())
+                .orderByDesc(InvoiceBillOrderDO::getId);
+    }
+
+    @Override
+    public ServerResult listBaseOrderInfoBy(InvoiceBaseOrderQueryVO queryVO) {
+        List<InvoiceBillMappingDO> mappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(InvoiceBillMappingDO::getInvoiceNo, queryVO.getInvoiceNo()));
+        if (CollectionUtils.isEmpty(mappingDOS)) {
+            return ServerResult.success();
+        }
+        Set<Long> orderIds = mappingDOS.stream().map(InvoiceBillMappingDO::getOrderId).collect(Collectors.toSet());
+        return ServerResult.success(orderBaseInfoService.listByIds(orderIds));
+    }
+
+    @Override
+    public ServerResult listAnalysisBy(InvoiceBillAnalysisVO queryVO) {
+        return ServerResult.success(getAnalysisResult(queryVO));
+    }
+
+    @Override
+    public ServerResult export(HttpServletResponse response, InvoiceBillAnalysisVO queryVO) throws IOException {
+        InvoiceBillAnalysisResultVO resultVO = getAnalysisResult(queryVO);
+        if (Objects.isNull(resultVO)) {
+            throw new BusinessException("数据为空,不能导出!");
+        }
+        List<Map<String, Object>> list = buildExportMapVOS(resultVO);
+        if (CollectionUtils.isNotEmpty(list)) {
+            List<String> keys = new ArrayList<>(list.get(Constant.ZERO).keySet());
+
+            ExcelHelper.opsExport(PoiWorkbookType.XLSX)
+                    .opsSheet(list)
+                    .opsHeader().simple().texts(keys).done()
+                    .opsColumn().fields(keys).done()
+                    .height(CellPosition.CELL, 750)
+                    .done()
+                    .export(response.getOutputStream());
+        }
+        return ServerResult.success();
+    }
+
+    /**
+     * @param resultVO
+     * @return
+     */
+    private List<Map<String, Object>> buildExportMapVOS(InvoiceBillAnalysisResultVO resultVO) throws IOException {
+        List<InvoiceBillAnalysisExportVO> exportVOS = resultVO.getExportVOS();
+        List<Map<String, Object>> list = new ArrayList<>();
+        int i = 0;
+        for (InvoiceBillAnalysisExportVO exportVO : exportVOS) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("编号", i++);
+            map.put("客户编码", exportVO.getCustomerCode());
+            map.put("INVOICE编码", exportVO.getInvoiceNo());
+            map.put("客户总金额汇总", exportVO.getCustomerTotalPrice());
+            map.put("客户扣款金额汇总", exportVO.getDeductAmount());
+            map.put("实际应收金额", exportVO.getActualReceivableAmount());
+            map.put("实际收款金额汇总", exportVO.getActualPayedAmount());
+            map.put("其他费用金额汇总", exportVO.getOtherAmount());
+            map.put("其他费用合计", exportVO.getOtherTotalAmount());
+            map.put("必须回款日期", exportVO.getBackRefundDate());
+            map.put("实际回款日期", exportVO.getActualRefundDate());
+            list.add(map);
+        }
+        Map<String, Object> map = new LinkedHashMap<>();
+        map.put("编号", "合计");
+        map.put("客户编码", "");
+        map.put("INVOICE编码", "");
+        map.put("客户总金额汇总", resultVO.getCustomerTotalPrice());
+        map.put("客户扣款金额汇总", resultVO.getDeductAmount());
+        map.put("实际应收金额", resultVO.getActualReceivableAmount());
+        map.put("实际收款金额汇总", resultVO.getActualPayedAmount());
+        map.put("其他费用金额汇总", resultVO.getOtherAmount());
+        map.put("其他费用合计", resultVO.getOtherTotalAmount());
+        map.put("必须回款日期", "");
+        map.put("实际回款日期", "");
+        list.add(map);
+        return list;
+    }
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    private InvoiceBillAnalysisResultVO getAnalysisResult(InvoiceBillAnalysisVO queryVO) {
+        LambdaQueryWrapper<InvoiceBillOrderDO> queryWrapper = getQueryWrapper(queryVO);
+        List<InvoiceBillOrderDO> invoiceBillOrderDOS = list(queryWrapper);
+        if (CollectionUtils.isEmpty(invoiceBillOrderDOS)) {
+            return null;
+        }
+        Set<Long> ids = invoiceBillOrderDOS.stream().map(InvoiceBillOrderDO::getId).collect(Collectors.toSet());
+        List<InvoiceBillMappingDO> invoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillMappingDO::getInvoiceBillId, ids));
+        if (CollectionUtils.isEmpty(invoiceBillMappingDOS)) {
+            return null;
+        }
+        Map<Long, InvoiceBillMappingDO> orderBillMap = invoiceBillMappingDOS.stream().collect(Collectors.toMap(InvoiceBillMappingDO::getOrderId, Function.identity(), (x, y) -> x));
+        List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(orderBillMap);
+        Map<String, InvoiceBillOrderDO> invoiceBillOrderDOMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getInvoiceNo, Function.identity(), (x, y) -> x));
+        Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap = itemVOS.stream().collect(Collectors.groupingBy(InvoiceOrderBaseItemVO::getInvoiceCode));
+        List<InvoiceBillAnalysisExportVO> exportVOS = wrapperAnalysisExport(invoiceBillOrderDOMap, baseItemMap);
+        return wrapperAnalysisResultVO(exportVOS);
+    }
+
+    /**
+     * @param exportVOS
+     * @return
+     */
+    private InvoiceBillAnalysisResultVO wrapperAnalysisResultVO(List<InvoiceBillAnalysisExportVO> exportVOS) {
+        if (CollectionUtils.isEmpty(exportVOS)) {
+            return null;
+        }
+        InvoiceBillAnalysisResultVO resultVO = InvoiceBillAnalysisResultVO.builder().exportVOS(exportVOS).build();
+        BigDecimal customerTotalPrice = new BigDecimal(Constant.ZERO);
+        BigDecimal deductAmount = new BigDecimal(Constant.ZERO);
+        BigDecimal actualReceivableAmount = new BigDecimal(Constant.ZERO);
+        BigDecimal actualPayedAmount = new BigDecimal(Constant.ZERO);
+        BigDecimal otherAmount = new BigDecimal(Constant.ZERO);
+        BigDecimal otherTotalAmount = new BigDecimal(Constant.ZERO);
+        for (InvoiceBillAnalysisExportVO exportVO : exportVOS) {
+            if (Objects.nonNull(exportVO.getCustomerTotalPrice())) {
+                customerTotalPrice = customerTotalPrice.add(exportVO.getCustomerTotalPrice());
+            }
+            if (Objects.nonNull(exportVO.getDeductAmount())) {
+                deductAmount = deductAmount.add(exportVO.getDeductAmount());
+            }
+            if (Objects.nonNull(exportVO.getActualReceivableAmount())) {
+                actualReceivableAmount = actualReceivableAmount.add(exportVO.getActualReceivableAmount());
+            }
+            if (Objects.nonNull(exportVO.getActualPayedAmount())) {
+                actualPayedAmount = actualPayedAmount.add(exportVO.getActualPayedAmount());
+            }
+            if (Objects.nonNull(exportVO.getOtherAmount())) {
+                otherAmount = customerTotalPrice.add(exportVO.getOtherAmount());
+            }
+            if (Objects.nonNull(exportVO.getOtherTotalAmount())) {
+                otherTotalAmount = otherTotalAmount.add(exportVO.getOtherTotalAmount());
+            }
+        }
+        resultVO.setCustomerTotalPrice(customerTotalPrice);
+        resultVO.setDeductAmount(deductAmount);
+        resultVO.setActualReceivableAmount(actualReceivableAmount);
+        resultVO.setActualPayedAmount(actualPayedAmount);
+        resultVO.setOtherAmount(otherAmount);
+        resultVO.setOtherTotalAmount(otherTotalAmount);
+        return resultVO;
+    }
+
+    /**
+     * @param invoiceBillOrderDOMap
+     * @param baseItemMap
+     * @return
+     */
+    private List<InvoiceBillAnalysisExportVO> wrapperAnalysisExport(Map<String, InvoiceBillOrderDO> invoiceBillOrderDOMap, Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap) {
+        if (CollectionUtils.isEmpty(invoiceBillOrderDOMap)) {
+            return Collections.emptyList();
+        }
+        List<InvoiceBillAnalysisExportVO> results = new ArrayList<>();
+        for (Map.Entry<String, InvoiceBillOrderDO> entry : invoiceBillOrderDOMap.entrySet()) {
+            InvoiceBillOrderDO invoiceBillOrderDO = entry.getValue();
+            List<InvoiceBillAnalysisExportVO> exportVOS = transfer2analysisExportVO(invoiceBillOrderDO, baseItemMap);
+            if (CollectionUtils.isNotEmpty(exportVOS)) {
+                results.addAll(exportVOS);
+            }
+        }
+        return results;
+    }
+
+    /**
+     * @param invoiceBillOrderDO
+     * @param baseItemMap
+     * @return
+     */
+    private List<InvoiceBillAnalysisExportVO> transfer2analysisExportVO(InvoiceBillOrderDO invoiceBillOrderDO, Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap) {
+        List<InvoiceBillAnalysisExportVO> results = new ArrayList<>();
+        String invoiceNo = invoiceBillOrderDO.getInvoiceNo();
+        if (baseItemMap.containsKey(invoiceNo)) {
+            List<InvoiceOrderBaseItemVO> baseItemVOS = baseItemMap.get(invoiceNo);
+            Map<String, List<InvoiceOrderBaseItemVO>> listMap = baseItemVOS.stream().collect(Collectors.groupingBy(InvoiceOrderBaseItemVO::getCustomerCode));
+            for (Map.Entry<String, List<InvoiceOrderBaseItemVO>> entry : listMap.entrySet()) {
+                String customerCode = entry.getKey();
+                List<InvoiceOrderBaseItemVO> itemVOS = entry.getValue();
+                InvoiceBillAnalysisExportVO exportVO = buildAnalysisExportVO(invoiceBillOrderDO);
+                exportVO.setCustomerCode(customerCode);
+                if (CollectionUtils.isEmpty(itemVOS)) {
+                    exportVO.setCustomerTotalPrice(new BigDecimal(Constant.ZERO));
+                } else {
+                    BigDecimal customerTotalPrice = new BigDecimal(Constant.ZERO);
+                    for (InvoiceOrderBaseItemVO itemVO : itemVOS) {
+                        customerTotalPrice = customerTotalPrice.add(Objects.nonNull(itemVO.getCustomerTotalPrice()) ? itemVO.getCustomerTotalPrice() : new BigDecimal(Constant.ZERO));
+                    }
+                    exportVO.setCustomerTotalPrice(customerTotalPrice);
+                }
+                results.add(exportVO);
+            }
+        }
+        return results;
+    }
+
+    /**
+     * @param invoiceBillOrderDO
+     * @return
+     */
+    private InvoiceBillAnalysisExportVO buildAnalysisExportVO(InvoiceBillOrderDO invoiceBillOrderDO) {
+        InvoiceBillAnalysisExportVO exportVO = new InvoiceBillAnalysisExportVO();
+        BeanUtils.copyProperties(invoiceBillOrderDO, exportVO);
+        BigDecimal actualPayedAmount = new BigDecimal(Constant.ZERO);
+        if (Objects.nonNull(invoiceBillOrderDO.getActualPayedAmount1())) {
+            actualPayedAmount = actualPayedAmount.add(invoiceBillOrderDO.getActualPayedAmount1());
+        }
+        if (Objects.nonNull(invoiceBillOrderDO.getActualPayedAmount2())) {
+            actualPayedAmount = actualPayedAmount.add(invoiceBillOrderDO.getActualPayedAmount2());
+        }
+        if (Objects.nonNull(invoiceBillOrderDO.getActualPayedAmount3())) {
+            actualPayedAmount = actualPayedAmount.add(invoiceBillOrderDO.getActualPayedAmount3());
+        }
+        exportVO.setActualPayedAmount(actualPayedAmount);
+        BigDecimal otherAmount = (Objects.nonNull(invoiceBillOrderDO.getActualReceivableAmount()) ? invoiceBillOrderDO.getActualReceivableAmount() : new BigDecimal(Constant.ZERO))
+                .subtract(exportVO.getActualPayedAmount());
+        exportVO.setOtherAmount(otherAmount);
+        BigDecimal otherTotalAmount = (Objects.nonNull(invoiceBillOrderDO.getActualReceivableAmount()) ? invoiceBillOrderDO.getActualReceivableAmount() : new BigDecimal(Constant.ZERO))
+                .subtract(exportVO.getActualPayedAmount()).subtract(otherAmount);
+        exportVO.setOtherTotalAmount(otherTotalAmount);
+        return exportVO;
+    }
+
+    /**
+     * @param mappingDOMap
+     * @return
+     */
+    private List<InvoiceOrderBaseItemVO> getInvoiceOrderBaseItems(Map<Long, InvoiceBillMappingDO> mappingDOMap) {
+        Set<Long> orderIds = mappingDOMap.keySet();
+        List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);
+        List<OrderProfitAnalysisDO> profitAnalysisDOS = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(OrderProfitAnalysisDO::getOrderId, orderIds));
+        Map<Long, OrderBaseInfoDO> orderBaseInfoDOMap = orderBaseInfoDOList.stream().collect(Collectors.toMap(OrderBaseInfoDO::getId, Function.identity(), (x, y) -> x));
+        Map<Long, OrderProfitAnalysisDO> profitAnalysisDOMap = profitAnalysisDOS.stream().collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, Function.identity(), (x, y) -> x));
+        List<InvoiceOrderBaseItemVO> baseItemVOS = new ArrayList<>();
+        for (Map.Entry<Long, OrderBaseInfoDO> entry : orderBaseInfoDOMap.entrySet()) {
+            Long orderId = entry.getKey();
+            OrderBaseInfoDO baseInfoDO = entry.getValue();
+            InvoiceOrderBaseItemVO itemVO = InvoiceOrderBaseItemVO.builder()
+                    .orderId(orderId)
+                    .customerCode(baseInfoDO.getCustomerCode())
+                    .build();
+            if (profitAnalysisDOMap.containsKey(orderId)) {
+                OrderProfitAnalysisDO profitAnalysisDO = profitAnalysisDOMap.get(orderId);
+                itemVO.setCustomerTotalPrice(Objects.isNull(profitAnalysisDO.getCustomerTotalPrice()) ? new BigDecimal(Constant.ZERO) : new BigDecimal(profitAnalysisDO.getCustomerTotalPrice()));
+            } else {
+                itemVO.setCustomerTotalPrice(new BigDecimal(Constant.ZERO));
+            }
+
+            if (mappingDOMap.containsKey(orderId)) {
+                InvoiceBillMappingDO mappingDO = mappingDOMap.get(orderId);
+                itemVO.setInvoiceCode(mappingDO.getInvoiceNo());
+            }
+            baseItemVOS.add(itemVO);
+        }
+        return baseItemVOS;
+    }
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    private Set<Long> filterBillOrderIdsBy(InvoiceBillOrderQueryVO queryVO) {
+        List<Long> orderIds = filterOrderIdsBy(queryVO);
+        if (CollectionUtils.isEmpty(orderIds)) {
+            return null;
+        }
+        List<InvoiceBillMappingDO> mappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .in(CollectionUtils.isNotEmpty(orderIds), InvoiceBillMappingDO::getOrderId, orderIds));
+        if (CollectionUtils.isEmpty(mappingDOS)) {
+            Set<Long> ids = new HashSet<>();
+            ids.add(-1L);
+            return ids;
+        }
+        return mappingDOS.stream().map(InvoiceBillMappingDO::getInvoiceBillId).collect(Collectors.toSet());
+    }
+
+    /**
+     * @param queryVO
+     * @return
+     */
+    private List<Long> filterOrderIdsBy(InvoiceBillOrderQueryVO queryVO) {
+        Boolean flag = false;
+        if (StringUtils.isNotBlank(queryVO.getCustomerCode())) {
+            flag = flag | true;
+        }
+        if (StringUtils.isNotBlank(queryVO.getProductionDepartment())) {
+            flag = flag | true;
+        }
+        if (StringUtils.isNotBlank(queryVO.getCustomerPo())) {
+            flag = flag | true;
+        }
+        if (StringUtils.isNotBlank(queryVO.getInnerNo())) {
+            flag = flag | true;
+        }
+        if (StringUtils.isNotBlank(queryVO.getProjectNo())) {
+            flag = flag | true;
+        }
+        if (!flag) {
+            return null;
+        }
+        LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = new LambdaQueryWrapper<OrderBaseInfoDO>()
+                .eq(OrderBaseInfoDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(StringUtils.isNotBlank(queryVO.getCustomerCode()), OrderBaseInfoDO::getCustomerCode, queryVO.getCustomerCode())
+                .eq(StringUtils.isNotBlank(queryVO.getProductionDepartment()), OrderBaseInfoDO::getProductionDepartment, queryVO.getProductionDepartment())
+                .eq(StringUtils.isNotBlank(queryVO.getCustomerPo()), OrderBaseInfoDO::getCustomerPo, queryVO.getCustomerPo())
+                .eq(StringUtils.isNotBlank(queryVO.getInnerNo()), OrderBaseInfoDO::getInnerNo, queryVO.getInnerNo())
+                .eq(StringUtils.isNotBlank(queryVO.getProjectNo()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNo());
+        List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper);
+        if (CollectionUtils.isEmpty(orderBaseInfoDOList)) {
+            List<Long> orderIds = new ArrayList<>();
+            orderIds.add(-1L);
+            return orderIds;
+        }
+        return orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toList());
+    }
+
+    /**
+     * 创建invoice单据
+     *
+     * @param createVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult create(InvoiceBillCreateVO createVO) {
+        if (Objects.nonNull(createVO.getId())) {
+            createVO.setId(null);
+        }
+
+        validaBillOrder(createVO);
+
+        InvoiceBillOrderDO invoiceBillOrderDO = buildInvoiceBillOrderDO(createVO);
+
+        transactionHelper.run(() -> {
+            save(invoiceBillOrderDO);
+
+            invoiceBillMappingService.saveBatch(buildInvoiceBillMappingDOS(createVO, invoiceBillOrderDO));
+        });
+
+        return ServerResult.success();
+    }
+
+    @Override
+    public ServerResult getBackRefundDate(InvoiceBillCreateVO createVO) {
+        List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(createVO.getOrderIds());
+        if (CollectionUtils.isEmpty(orderBaseInfoDOList)) {
+            throw new BusinessException("勾选的订单信息不存在!");
+        }
+
+        InvoiceHoldTimeItemVO invoiceHoldTimeItemVO = getCustomerHoldTime(orderBaseInfoDOList);
+
+        return ServerResult.success(calculateBackRefundDate(invoiceHoldTimeItemVO));
+    }
+
+    /**
+     * @param invoiceHoldTimeItemVO
+     * @return
+     */
+    private String calculateBackRefundDate(InvoiceHoldTimeItemVO invoiceHoldTimeItemVO) {
+        Integer holdDays = getHoldTimeByCustomerCode(invoiceHoldTimeItemVO.getCustomerCode());
+        LocalDateTime holdTime = DateUtils.parse(invoiceHoldTimeItemVO.getHoldTime(), DateUtils.DATE_TIME).plusDays(holdDays);
+        return DateUtils.format(holdTime, DateUtils.DATE);
+    }
+
+    /**
+     * @param customerCode
+     * @return
+     */
+    private Integer getHoldTimeByCustomerCode(String customerCode) {
+        SystemSettingDO systemSettingDO = systemSettingService.getOne(new LambdaQueryWrapper<SystemSettingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(SystemSettingDO::getSettingCode, "customerCode").eq(SystemSettingDO::getSettingValue, customerCode)
+                .eq(SystemSettingDO::getRelationCode, "orderHodTime").last("limit 1"));
+        String holdTime = systemSettingDO.getRelationValue();
+        return StringUtils.isBlank(holdTime) ? Constant.ZERO : Integer.parseInt(holdTime);
+    }
+
+    /**
+     * @param orderBaseInfoDOList
+     * @return
+     */
+    private InvoiceHoldTimeItemVO getCustomerHoldTime(List<OrderBaseInfoDO> orderBaseInfoDOList) {
+        if (CollectionUtils.isEmpty(orderBaseInfoDOList)) {
+            return null;
+        }
+
+        Map<String, OrderBaseInfoDO> holdTimeMap = new HashMap<String, OrderBaseInfoDO>();
+        String maxHoldTime = null;
+        for (OrderBaseInfoDO baseInfoDO : orderBaseInfoDOList) {
+            if (StringUtils.isNotBlank(baseInfoDO.getOrderHodTime())) {
+                holdTimeMap.put(baseInfoDO.getOrderHodTime(), baseInfoDO);
+                if (StringUtils.isBlank(maxHoldTime)) {
+                    maxHoldTime = baseInfoDO.getOrderHodTime();
+                } else if (maxHoldTime.compareTo(baseInfoDO.getOrderHodTime()) <= 0) {
+                    maxHoldTime = baseInfoDO.getOrderHodTime();
+                }
+            }
+        }
+        if (StringUtils.isBlank(maxHoldTime)) {
+            return null;
+        }
+        InvoiceHoldTimeItemVO itemVO = new InvoiceHoldTimeItemVO();
+        if (holdTimeMap.containsKey(maxHoldTime)) {
+            OrderBaseInfoDO baseInfoDO = holdTimeMap.get(maxHoldTime);
+            itemVO.setCustomerCode(baseInfoDO.getCustomerCode());
+            itemVO.setHoldTime(maxHoldTime);
+            itemVO.setBaseInfoDO(baseInfoDO);
+        }
+        return itemVO;
+    }
+
+    /**
+     * @param createVO
+     * @return
+     */
+    private InvoiceBillOrderDO buildInvoiceBillOrderDO(InvoiceBillCreateVO createVO) {
+        return InvoiceBillOrderDO.builder()
+                .invoiceNo(createVO.getInvoiceNo())
+                .bgUrl(createVO.getBgUrl())
+                .backRefundDate(createVO.getBackRefundDate())
+                .status(ApplyStatusEnum.NO_COMMIT.getStatus())
+                .build();
+    }
+
+    /**
+     * @param createVO
+     * @param invoiceBillOrderDO
+     * @return
+     */
+    private List<InvoiceBillMappingDO> buildInvoiceBillMappingDOS(InvoiceBillCreateVO createVO, InvoiceBillOrderDO invoiceBillOrderDO) {
+        return createVO.getOrderIds().stream().map(x -> {
+            return InvoiceBillMappingDO.builder()
+                    .orderId(x)
+                    .invoiceBillId(invoiceBillOrderDO.getId())
+                    .invoiceNo(invoiceBillOrderDO.getInvoiceNo())
+                    .build();
+        }).collect(Collectors.toList());
+    }
+
+    /**
+     * @param createVO
+     */
+    private void validaBillOrder(InvoiceBillCreateVO createVO) {
+        if (CollectionUtils.isEmpty(createVO.getOrderIds())) {
+            throw new BusinessException("请勾选订单!");
+        }
+
+        List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(createVO.getOrderIds());
+        if (CollectionUtils.isEmpty(orderBaseInfoDOList)) {
+            throw new BusinessException("勾选的订单信息不存在!");
+        }
+
+        if (orderBaseInfoDOList.size() != createVO.getOrderIds().size()) {
+            throw new BusinessException("勾选的订单信息有误!");
+        }
+
+        String invoiceNo = createVO.getInvoiceNo();
+
+        List<InvoiceBillOrderDO> invoiceBillOrderDOS = list(new LambdaQueryWrapper<InvoiceBillOrderDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(InvoiceBillOrderDO::getInvoiceNo, invoiceNo));
+        if (CollectionUtils.isNotEmpty(invoiceBillOrderDOS)) {
+            throw new BusinessException("存在相同的invoice订单!");
+        }
+
+        List<InvoiceBillMappingDO> invoiceBillMappingDOList = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag,Constant.ENABLE_TEN).in(InvoiceBillMappingDO::getOrderId,createVO.getOrderIds()));
+        if (CollectionUtils.isNotEmpty(invoiceBillMappingDOList)) {
+            throw new BusinessException("该勾选的订单已经绑定其他账单了!");
+        }
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param deductInfoVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult updateDeductInfo(InvoiceBillDeductInfoVO deductInfoVO) {
+        if (Objects.isNull(deductInfoVO.getId())) {
+            throw new BusinessException("id 不能为空");
+        }
+        InvoiceBillOrderDO invoiceBillOrderDo = getById(deductInfoVO.getId());
+        if (Objects.isNull(invoiceBillOrderDo)) {
+            throw new BusinessException("应收款单据不存在");
+        }
+
+        checkCommitApply(invoiceBillOrderDo.getId());
+
+        invoiceBillOrderDo.setDeductUrl(deductInfoVO.getDeductUrl());
+        invoiceBillOrderDo.setDeductAmount(deductInfoVO.getDeductAmount());
+        updateById(invoiceBillOrderDo);
+        return ServerResult.success();
+    }
+
+    @Override
+    public ServerResult updateAmountInfo(InvoiceBillAmountInfoVO amountInfoVO) {
+        if (Objects.isNull(amountInfoVO.getId())) {
+            throw new BusinessException("id 不能为空");
+        }
+        InvoiceBillOrderDO invoiceBillOrderDo = getById(amountInfoVO.getId());
+        if (Objects.isNull(invoiceBillOrderDo)) {
+            throw new BusinessException("应收款单据不存在");
+        }
+
+        checkCommitApply(invoiceBillOrderDo.getId());
+
+        invoiceBillOrderDo.setBgUrl(amountInfoVO.getBgUrl());
+        invoiceBillOrderDo.setActualReceivableAmount(amountInfoVO.getActualReceivableAmount());
+        invoiceBillOrderDo.setActualPayedAmount1(amountInfoVO.getActualPayedAmount1());
+        invoiceBillOrderDo.setActualPayedAmount2(amountInfoVO.getActualPayedAmount2());
+        invoiceBillOrderDo.setActualPayedAmount3(amountInfoVO.getActualPayedAmount3());
+        invoiceBillOrderDo.setOtherAmount(amountInfoVO.getOtherAmount());
+        updateById(invoiceBillOrderDo);
+        return ServerResult.success();
+    }
+
+    /**
+     * @param id
+     */
+    private void checkCommitApply(Long id) {
+        OrderFieldLockApplyDO applyDO = orderFieldLockApplyService.getOne(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
+                .eq(OrderFieldLockApplyDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus())
+                .eq(OrderFieldLockApplyDO::getOrderId, id).last("limit 1"));
+        if (Objects.nonNull(applyDO)) {
+            throw new BusinessException("该账单还在审批中,请联系总经理审批后操作!");
+        }
+    }
+
+    @Override
+    public ServerResult commitApply(InvoiceBillCommitApplyVO commitApplyVO) {
+        InvoiceBillOrderDO invoiceBillOrderDO = getById(commitApplyVO.getId());
+        if (Objects.isNull(invoiceBillOrderDO)) {
+            throw new BusinessException("账单不存在!");
+        }
+        Long userId = dataScope.getLoginUserId();
+        checkApply(commitApplyVO, userId);
+
+        OrderFieldLockApplyDO applyDO = initOrderFieldLockApplyDO(invoiceBillOrderDO, userId);
+        transactionHelper.run(() -> {
+            orderFieldLockApplyService.save(applyDO);
+            invoiceBillOrderDO.setStatus(ApplyStatusEnum.WAIT_AUDIT.getStatus());
+            invoiceBillOrderDO.setActualRefundDate(DateUtils.format(LocalDateTime.now(), DateUtils.DATE));
+            updateById(invoiceBillOrderDO);
+        });
+        return ServerResult.success();
+    }
+
+    /**
+     * @param commitApplyVO
+     * @param userId
+     */
+    private void checkApply(InvoiceBillCommitApplyVO commitApplyVO, Long userId) {
+        List<OrderFieldLockApplyDO> applyDOS = orderFieldLockApplyService.list(new LambdaQueryWrapper<OrderFieldLockApplyDO>()
+                .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
+                .eq(OrderFieldLockApplyDO::getOrderId, commitApplyVO.getId())
+                .eq(OrderFieldLockApplyDO::getApplyUserId, userId)
+                .eq(OrderFieldLockApplyDO::getType, ApplyTypeEnum.INVOICE_BILL_APPLY.getType())
+                .eq(OrderFieldLockApplyDO::getStatus, ApplyStatusEnum.WAIT_AUDIT.getStatus()));
+        if (CollectionUtils.isNotEmpty(applyDOS)) {
+            throw new BusinessException(ServerResultCode.APPLY_UNLOCK_FIELD_EXIST);
+        }
+    }
+
+    /**
+     * @param invoiceBillOrderDO
+     * @param userId
+     * @return
+     */
+    private OrderFieldLockApplyDO initOrderFieldLockApplyDO(InvoiceBillOrderDO invoiceBillOrderDO, Long userId) {
+        OrderLockFieldVO lockFieldVO = new OrderLockFieldVO();
+        BeanUtils.copyProperties(invoiceBillOrderDO, lockFieldVO);
+        return OrderFieldLockApplyDO.builder()
+                .applyUserId(userId)
+                .auditUserId(null)
+                .fields(JSONObject.toJSONString(lockFieldVO))
+                .orderId(invoiceBillOrderDO.getId())
+                .type(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())
+                .remark(ApplyTypeEnum.INVOICE_BILL_APPLY.getDesc())
+                .status(ApplyStatusEnum.WAIT_AUDIT.getStatus())
+                .auditRoleCodes(RoleEnum.BUSINESS_USER.getCode() + Constant.COMMA_CHARACTER + RoleEnum.ADMIN.getCode())
+                .build();
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param invoiceBillOrderQueryVO 筛选条件
+     * @return 是否成功
+     */
+    @Override
+    public ServerResult deleteById(InvoiceBillOrderQueryVO invoiceBillOrderQueryVO) {
+        List<Long> ids = invoiceBillOrderQueryVO.getIds();
+        if (CollUtil.isEmpty(ids)) {
+            return ServerResult.fail("ids 参数不能为空");
+        }
+        List<InvoiceBillOrderDO> invoiceBillOrderList = listByIds(ids);
+        if (CollUtil.isEmpty(invoiceBillOrderList)) {
+            return ServerResult.success();
+        }
+        transactionHelper.run(() -> {
+            removeByIds(ids);
+            invoiceBillMappingService.remove(new LambdaQueryWrapper<InvoiceBillMappingDO>().in(InvoiceBillMappingDO::getInvoiceBillId, ids));
+        });
+
+        return ServerResult.success();
+    }
+}
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
index 01bfc28..92134aa 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
@@ -72,6 +72,9 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
     @Resource
     private OrderInspectionStageService inspectionStageService;
 
+    @Resource
+    private InvoiceBillOrderService invoiceBillOrderService;
+
     /**
      * 通过ID查询单条数据
      * <p>
@@ -336,7 +339,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
                 .in(CollectionUtils.isNotEmpty(orderIds), OrderFieldLockApplyDO::getOrderId, orderIds);
         if (Objects.isNull(roleSelect)) {
             queryWrapper.like(Objects.nonNull(roleEnum), OrderFieldLockApplyDO::getAuditRoleCodes, roleEnum.getCode());
-        }else {
+        } else {
             queryWrapper.eq(Objects.nonNull(roleSelect), OrderFieldLockApplyDO::getAuditRoleCodes, roleSelect.getCode());
 
         }
@@ -395,7 +398,12 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
         } else if (ApplyTypeEnum.ORDER_PROFIT_APPLY.getType().equals(applyDO.getType())) {
             orderBaseInfoDO.setOrderStatus(OrderStatusEnum.PROFIT_AUDIT_REFUSE.getStatus());
             orderBaseInfoService.updateById(orderBaseInfoDO);
+        } else if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())) {
+            InvoiceBillOrderDO invoiceBillOrderDO = JSONObject.parseObject(applyDO.getFields(), InvoiceBillOrderDO.class);
+            invoiceBillOrderDO.setStatus(ApplyStatusEnum.AUDIT_REFUSE.getStatus());
+            invoiceBillOrderService.updateById(invoiceBillOrderDO);
         }
+
         OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_REFUSE.getDesc()).build();
 
         applyService.updateById(applyDO);
@@ -516,6 +524,10 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp
             }
             orderBaseInfoDO.setOrderStatus(OrderStatusEnum.PROFIT_AUDIT_PASS.getStatus());
             orderBaseInfoService.updateById(orderBaseInfoDO);
+        } else if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(applyDO.getType())) {
+            InvoiceBillOrderDO invoiceBillOrderDO = JSONObject.parseObject(applyDO.getFields(), InvoiceBillOrderDO.class);
+            invoiceBillOrderDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus());
+            invoiceBillOrderService.updateById(invoiceBillOrderDO);
         }
 
         OrderAuditLogDO auditLogDO = OrderAuditLogDO.builder().applyId(applyDO.getId()).orderId(applyDO.getOrderId()).optType(ApplyStatusEnum.AUDIT_PASS.getDesc()).build();
diff --git a/src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
new file mode 100644
index 0000000..3bd52c6
--- /dev/null
+++ b/src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
@@ -0,0 +1,133 @@
+package com.order.erp.service.order.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.order.erp.common.constant.Constant;
+import com.order.erp.common.constant.ServerResult;
+import com.order.erp.common.utils.PageUtils;
+import com.order.erp.domain.dto.order.ProducePaymentCheckBillOrderDO;
+import com.order.erp.domain.vo.order.ProducePaymentCheckBillOrderQueryVO;
+import com.order.erp.domain.vo.order.ProducePaymentCheckBillOrderVO;
+import com.order.erp.mapper.order.ProducePaymentCheckBillOrderMapper;
+import com.order.erp.service.order.ProducePaymentCheckBillOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 生产科对账单应收账单(ProducePaymentCheckBillOrder)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-08-05 16:26:35
+ */
+@Slf4j
+@Service
+public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<ProducePaymentCheckBillOrderMapper, ProducePaymentCheckBillOrderDO> implements ProducePaymentCheckBillOrderService {
+
+
+    /**
+     * 通过ID查询单条数据
+     * <p>
+     * producePaymentCheckBillOrderQueryVO 主键
+     *
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult queryById(ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO) {
+        if (Objects.isNull(producePaymentCheckBillOrderQueryVO.getId())) {
+            return ServerResult.fail("id 不能为空");
+        }
+        ProducePaymentCheckBillOrderDO ProducePaymentCheckBillOrderDo = getById(producePaymentCheckBillOrderQueryVO.getId());
+        if (Objects.isNull(ProducePaymentCheckBillOrderDo)) {
+            return ServerResult.success(null);
+        }
+        return ServerResult.success(BeanUtil.copyProperties(ProducePaymentCheckBillOrderDo, ProducePaymentCheckBillOrderVO.class));
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param producePaymentCheckBillOrderQueryVO 筛选条件
+     * @return 查询结果
+     */
+    @Override
+    public ServerResult list(ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO) {
+
+        LambdaQueryWrapper<ProducePaymentCheckBillOrderDO> queryWapper = new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>()
+                .eq(ProducePaymentCheckBillOrderDO::getEnableFlag, Constant.ENABLE_TEN)
+                .orderByDesc(ProducePaymentCheckBillOrderDO::getId);
+        Page page = new Page<>(producePaymentCheckBillOrderQueryVO.getPage(), producePaymentCheckBillOrderQueryVO.getPageSize());
+        IPage<ProducePaymentCheckBillOrderDO> iPage = page(page, queryWapper);
+        producePaymentCheckBillOrderQueryVO.setTotal(Long.valueOf(iPage.getTotal()).intValue());
+        return ServerResult.success(PageUtils.getPageReturn(null, producePaymentCheckBillOrderQueryVO));
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param producePaymentCheckBillOrderVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult add(ProducePaymentCheckBillOrderVO producePaymentCheckBillOrderVO) {
+        //todo 校验
+        if (Objects.nonNull(producePaymentCheckBillOrderVO.getId())) {
+            producePaymentCheckBillOrderVO.setId(null);
+        }
+        ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDo = BeanUtil.copyProperties(producePaymentCheckBillOrderVO, ProducePaymentCheckBillOrderDO.class);
+
+        save(producePaymentCheckBillOrderDo);
+
+        return ServerResult.success();
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param producePaymentCheckBillOrderVO 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public ServerResult edit(ProducePaymentCheckBillOrderVO producePaymentCheckBillOrderVO) {
+        //todo 校验
+        if (Objects.isNull(producePaymentCheckBillOrderVO.getId())) {
+            return ServerResult.fail("id 不能为空");
+        }
+        ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDo = BeanUtil.copyProperties(producePaymentCheckBillOrderVO, ProducePaymentCheckBillOrderDO.class);
+
+        updateById(producePaymentCheckBillOrderDo);
+
+        return ServerResult.success();
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param producePaymentCheckBillOrderQueryVO 筛选条件
+     * @return 是否成功
+     */
+    @Override
+    public ServerResult deleteById(ProducePaymentCheckBillOrderQueryVO producePaymentCheckBillOrderQueryVO) {
+        List<Long> ids = producePaymentCheckBillOrderQueryVO.getIds();
+        if (CollUtil.isEmpty(ids)) {
+            return ServerResult.fail("ids 参数不能为空");
+        }
+        List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderList = listByIds(ids);
+        if (CollUtil.isEmpty(producePaymentCheckBillOrderList)) {
+            return ServerResult.success();
+        }
+        //todo 校验是否可以逻辑删除
+        LambdaUpdateWrapper<ProducePaymentCheckBillOrderDO> updateWrapper = new LambdaUpdateWrapper<ProducePaymentCheckBillOrderDO>()
+                .in(ProducePaymentCheckBillOrderDO::getId, ids)
+                .set(ProducePaymentCheckBillOrderDO::getEnableFlag, Constant.UNABLE_TWENTY);
+        update(updateWrapper);
+        return ServerResult.success();
+    }
+}