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(); + } +}