浏览代码

开票申请

yzc 1 年之前
父节点
当前提交
0bc2a9500f
共有 31 个文件被更改,包括 1130 次插入2 次删除
  1. 9 0
      hx-common/src/main/java/com/fjhx/common/enums/CodingRuleEnum.java
  2. 20 0
      hx-oa/src/main/java/com/fjhx/oa/controller/invoice/InvoiceApplyContractDetailController.java
  3. 76 0
      hx-oa/src/main/java/com/fjhx/oa/controller/invoice/InvoiceApplyController.java
  4. 20 0
      hx-oa/src/main/java/com/fjhx/oa/controller/invoice/InvoiceApplyDetailController.java
  5. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyContractDetailDto.java
  6. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyContractDetailSelectDto.java
  7. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyDetailDto.java
  8. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyDetailSelectDto.java
  9. 33 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyDto.java
  10. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplySelectDto.java
  11. 181 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/po/InvoiceApply.java
  12. 38 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/po/InvoiceApplyContractDetail.java
  13. 68 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/po/InvoiceApplyDetail.java
  14. 25 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/vo/InvoiceApplyContractDetailVo.java
  15. 17 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/vo/InvoiceApplyDetailVo.java
  16. 25 0
      hx-oa/src/main/java/com/fjhx/oa/entity/invoice/vo/InvoiceApplyVo.java
  17. 74 0
      hx-oa/src/main/java/com/fjhx/oa/flow/InvoiceApplyFlow.java
  18. 23 0
      hx-oa/src/main/java/com/fjhx/oa/mapper/invoice/InvoiceApplyContractDetailMapper.java
  19. 23 0
      hx-oa/src/main/java/com/fjhx/oa/mapper/invoice/InvoiceApplyDetailMapper.java
  20. 26 0
      hx-oa/src/main/java/com/fjhx/oa/mapper/invoice/InvoiceApplyMapper.java
  21. 23 0
      hx-oa/src/main/java/com/fjhx/oa/service/invoice/InvoiceApplyContractDetailService.java
  22. 24 0
      hx-oa/src/main/java/com/fjhx/oa/service/invoice/InvoiceApplyDetailService.java
  23. 42 0
      hx-oa/src/main/java/com/fjhx/oa/service/invoice/InvoiceApplyService.java
  24. 38 0
      hx-oa/src/main/java/com/fjhx/oa/service/invoice/impl/InvoiceApplyContractDetailServiceImpl.java
  25. 29 0
      hx-oa/src/main/java/com/fjhx/oa/service/invoice/impl/InvoiceApplyDetailServiceImpl.java
  26. 138 0
      hx-oa/src/main/java/com/fjhx/oa/service/invoice/impl/InvoiceApplyServiceImpl.java
  27. 22 0
      hx-oa/src/main/resources/mapper/invoice/InvoiceApplyContractDetailMapper.xml
  28. 9 0
      hx-oa/src/main/resources/mapper/invoice/InvoiceApplyDetailMapper.xml
  29. 45 0
      hx-oa/src/main/resources/mapper/invoice/InvoiceApplyMapper.xml
  30. 9 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java
  31. 8 2
      hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

+ 9 - 0
hx-common/src/main/java/com/fjhx/common/enums/CodingRuleEnum.java

@@ -174,6 +174,15 @@ public enum CodingRuleEnum {
             getDefaultRule(RuleTypeEnum.AUTOINCREMENT, "3")
     )),
 
+    /**
+     * 开票申请
+     */
+    INVOICE_APPLY("invoice_apply", "开票申请", Arrays.asList(
+            getDefaultRule(RuleTypeEnum.CUSTOMIZE, "IA-"),
+            getDefaultRule(RuleTypeEnum.DATE_FORMAT, "yyyyMM-"),
+            getDefaultRule(RuleTypeEnum.AUTOINCREMENT, "3")
+    )),
+
 
     ;
 

+ 20 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/invoice/InvoiceApplyContractDetailController.java

@@ -0,0 +1,20 @@
+package com.fjhx.oa.controller.invoice;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 开票申请合同明细 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@RestController
+@RequestMapping("/invoiceApplyContractDetail")
+public class InvoiceApplyContractDetailController {
+
+
+}

+ 76 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/invoice/InvoiceApplyController.java

@@ -0,0 +1,76 @@
+package com.fjhx.oa.controller.invoice;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.invoice.dto.InvoiceApplyDto;
+import com.fjhx.oa.entity.invoice.dto.InvoiceApplySelectDto;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyVo;
+import com.fjhx.oa.service.invoice.InvoiceApplyService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+
+/**
+ * <p>
+ * 开票申请 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@RestController
+@RequestMapping("/invoiceApply")
+public class InvoiceApplyController {
+
+    @Autowired
+    private InvoiceApplyService invoiceApplyService;
+
+    /**
+     * 开票申请分页
+     */
+    @PostMapping("/page")
+    public Page<InvoiceApplyVo> page(@RequestBody InvoiceApplySelectDto dto) {
+        return invoiceApplyService.getPage(dto);
+    }
+
+    /**
+     * 开票申请明细
+     */
+    @PostMapping("/detail")
+    public InvoiceApplyVo detail(@RequestBody BaseSelectDto dto) {
+        return invoiceApplyService.detail(dto.getId());
+    }
+
+    /**
+     * 开票申请新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody InvoiceApplyDto invoiceApplyDto) {
+        invoiceApplyService.addOrEdit(invoiceApplyDto);
+    }
+
+    /**
+     * 开票申请编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody InvoiceApplyDto invoiceApplyDto) {
+        invoiceApplyService.addOrEdit(invoiceApplyDto);
+    }
+
+    /**
+     * 开票申请删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        invoiceApplyService.delete(dto.getId());
+    }
+
+    @PostMapping("/cancellation")
+    public void cancellation(@RequestBody BaseSelectDto dto) {
+        invoiceApplyService.cancellation(dto.getId());
+    }
+
+}

+ 20 - 0
hx-oa/src/main/java/com/fjhx/oa/controller/invoice/InvoiceApplyDetailController.java

@@ -0,0 +1,20 @@
+package com.fjhx.oa.controller.invoice;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 开票申请明细 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@RestController
+@RequestMapping("/invoiceApplyDetail")
+public class InvoiceApplyDetailController {
+
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyContractDetailDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.invoice.dto;
+
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyContractDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 开票申请合同明细新增编辑入参实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyContractDetailDto extends InvoiceApplyContractDetail {
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyContractDetailSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.invoice.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 开票申请合同明细列表查询入参实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyContractDetailSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyDetailDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.invoice.dto;
+
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 开票申请明细新增编辑入参实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyDetailDto extends InvoiceApplyDetail {
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyDetailSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.invoice.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 开票申请明细列表查询入参实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyDetailSelectDto extends BaseSelectDto {
+
+}

+ 33 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplyDto.java

@@ -0,0 +1,33 @@
+package com.fjhx.oa.entity.invoice.dto;
+
+import com.fjhx.file.entity.ObsFile;
+import com.fjhx.oa.entity.invoice.po.InvoiceApply;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyContractDetail;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 开票申请新增编辑入参实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyDto extends InvoiceApply {
+    List<InvoiceApplyContractDetail> invoiceApplyContractDetailList;
+    List<InvoiceApplyDetail> invoiceApplyDetailList;
+
+    //相关审批附件 附件类型10
+    private List<ObsFile> fileList;
+    //聚水潭订单界面金额截图(需有订单号和金额) 附件类型20
+    private List<ObsFile> jstOrderFileList;
+    //店铺交易截图(含店铺名称、订单编号) 附件类型30
+    private List<ObsFile> shopTradeFileList;
+    //开票员上传发票附件 附件类型40
+    private List<ObsFile> invoicerFileList;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/dto/InvoiceApplySelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.invoice.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 开票申请列表查询入参实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplySelectDto extends BaseSelectDto {
+
+}

+ 181 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/po/InvoiceApply.java

@@ -0,0 +1,181 @@
+package com.fjhx.oa.entity.invoice.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 开票申请
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+@TableName("invoice_apply")
+public class InvoiceApply extends BasePo {
+
+    /**
+     * 审批状态
+     */
+    private Integer status;
+
+    /**
+     * 流程id
+     */
+    private Long flowId;
+
+    /**
+     * 申请时间
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date applyTime;
+
+    /**
+     * 编号
+     */
+    private String code;
+
+    /**
+     * 部门id
+     */
+    private Long deptId;
+
+    /**
+     * 公司id
+     */
+    private Long companyId;
+
+    /**
+     * 申请场景
+     */
+    private String applyScenario;
+
+    /**
+     * 下单渠道
+     */
+    private String orderingChannels;
+
+    /**
+     * 要求备注
+     */
+    private String askRemark;
+
+    /**
+     * 聚水潭订单号
+     */
+    private String jstOrderCode;
+
+    /**
+     * 是否在票面备注现金
+     */
+    private Integer isCashNoted;
+
+    /**
+     * 是否匹配订单
+     */
+    private Integer isMatchOrder;
+
+    /**
+     * 收款情况
+     */
+    private String paymentSituation;
+
+    /**
+     * 税点结算
+     */
+    private String taxPointSettle;
+
+    /**
+     * 税点结算金额
+     */
+    private String taxPointSettleAmount;
+
+    /**
+     * 客户id
+     */
+    private Long customerId;
+
+    /**
+     * 开票类型
+     */
+    private String billingType;
+
+    /**
+     * 买方公司id
+     */
+    private String sellerCompanyId;
+
+    /**
+     * 买方公司名称
+     */
+    private String buyerCompanyName;
+
+    /**
+     * 卖方纳税人识别号
+     */
+    private String sellerTaxpayerCode;
+
+    /**
+     * 买方纳税人识别号
+     */
+    private String buyerTaxpayerCode;
+
+    /**
+     * 卖方地址
+     */
+    private String sellerAddress;
+
+    /**
+     * 卖方电话
+     */
+    private String sellerTel;
+
+    /**
+     * 买方地址
+     */
+    private String buyerAddress;
+
+    /**
+     * 买方电话
+     */
+    private String buyerTel;
+
+    /**
+     * 卖方开户行
+     */
+    private String sellerAccountBank;
+
+    /**
+     * 卖方账号
+     */
+    private Integer sellerAccountNumber;
+
+    /**
+     * 买方开户行
+     */
+    private String buyerAccountBank;
+
+    /**
+     * 买方账号
+     */
+    private Integer buyerAccountNumber;
+
+    /**
+     * 总金额含税
+     */
+    private BigDecimal amountIncludingTax;
+
+    /**
+     * 票面备注
+     */
+    private String ticketRemark;
+
+}

+ 38 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/po/InvoiceApplyContractDetail.java

@@ -0,0 +1,38 @@
+package com.fjhx.oa.entity.invoice.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 开票申请合同明细
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+@TableName("invoice_apply_contract_detail")
+public class InvoiceApplyContractDetail extends BasePo {
+
+    /**
+     * 开票id
+     */
+    private Long invoiceApplyId;
+
+    /**
+     * 合同id
+     */
+    private Long contractId;
+
+    /**
+     * 开票金额
+     */
+    private BigDecimal amount;
+
+}

+ 68 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/po/InvoiceApplyDetail.java

@@ -0,0 +1,68 @@
+package com.fjhx.oa.entity.invoice.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 开票申请明细
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+@TableName("invoice_apply_detail")
+public class InvoiceApplyDetail extends BasePo {
+
+    /**
+     * 开票id
+     */
+    private Long invoiceApplyId;
+
+    /**
+     * 物品名称
+     */
+    private String name;
+
+    /**
+     * 规格型号
+     */
+    private String spec;
+
+    /**
+     * 单位
+     */
+    private String unit;
+
+    /**
+     * 数量
+     */
+    private String quantity;
+
+    /**
+     * 单价含税
+     */
+    private BigDecimal priceIncludingTax;
+
+    /**
+     * 金额含税
+     */
+    private BigDecimal amountIncludingTax;
+
+    /**
+     * 税率
+     */
+    private String taxRate;
+
+    /**
+     * 税额
+     */
+    private BigDecimal taxAmount;
+
+}

+ 25 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/vo/InvoiceApplyContractDetailVo.java

@@ -0,0 +1,25 @@
+package com.fjhx.oa.entity.invoice.vo;
+
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyContractDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 开票申请合同明细列表查询返回值实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyContractDetailVo extends InvoiceApplyContractDetail {
+
+    private String contractCode;
+    private BigDecimal sumClaimMoney;
+    private BigDecimal contractAmount;
+    private BigDecimal invoiceAmount;
+    private BigDecimal unInvoiceAmount;
+
+}

+ 17 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/vo/InvoiceApplyDetailVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.oa.entity.invoice.vo;
+
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 开票申请明细列表查询返回值实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyDetailVo extends InvoiceApplyDetail {
+
+}

+ 25 - 0
hx-oa/src/main/java/com/fjhx/oa/entity/invoice/vo/InvoiceApplyVo.java

@@ -0,0 +1,25 @@
+package com.fjhx.oa.entity.invoice.vo;
+
+import com.fjhx.oa.entity.invoice.po.InvoiceApply;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 开票申请列表查询返回值实体
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Getter
+@Setter
+public class InvoiceApplyVo extends InvoiceApply {
+
+    List<InvoiceApplyContractDetailVo> invoiceApplyContractDetailList;
+    List<InvoiceApplyDetailVo> invoiceApplyDetailList;
+    private String createUserName;
+    private String deptName;
+    private String companyName;
+
+}

+ 74 - 0
hx-oa/src/main/java/com/fjhx/oa/flow/InvoiceApplyFlow.java

@@ -0,0 +1,74 @@
+package com.fjhx.oa.flow;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fjhx.common.enums.CodingRuleEnum;
+import com.fjhx.common.enums.FlowStatusEnum1;
+import com.fjhx.common.service.coding.CodingRuleService;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.flow.enums.FlowStatusEnum;
+import com.fjhx.oa.entity.invoice.dto.InvoiceApplyDto;
+import com.fjhx.oa.entity.invoice.po.InvoiceApply;
+import com.fjhx.oa.service.invoice.InvoiceApplyService;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+public class InvoiceApplyFlow extends FlowDelegate {
+
+    @Autowired
+    private InvoiceApplyService invoiceApplyService;
+    @Autowired
+    private CodingRuleService codingRuleService;
+
+    @Override
+    public String getFlowKey() {
+        return "invoice_apply_flow";
+    }
+
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        InvoiceApplyDto dto = submitData.toJavaObject(InvoiceApplyDto.class);
+        dto.setFlowId(flowId);
+
+        dto.setCode(codingRuleService.createCode(CodingRuleEnum.INVOICE_APPLY.getKey(), null));
+        dto.setStatus(FlowStatusEnum1.UNDER_REVIEW.getKey());
+
+        invoiceApplyService.addOrEdit(dto);
+
+        return dto.getId();
+    }
+
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        invoiceApplyService.update(q -> q
+                .eq(InvoiceApply::getId, businessId)
+                .set(InvoiceApply::getStatus, FlowStatusEnum1.PASS.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+    }
+
+    @Override
+    public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
+        start(flowId, submitData);
+    }
+
+    @Override
+    public void reject(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        invoiceApplyService.update(q -> q
+                .eq(InvoiceApply::getId, businessId)
+                .set(InvoiceApply::getStatus, FlowStatusEnum1.REJECT.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+    }
+
+    @Override
+    public void cancellation(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
+        invoiceApplyService.cancellation(businessId);
+    }
+}

+ 23 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/invoice/InvoiceApplyContractDetailMapper.java

@@ -0,0 +1,23 @@
+package com.fjhx.oa.mapper.invoice;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyContractDetail;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyContractDetailVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 开票申请合同明细 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+public interface InvoiceApplyContractDetailMapper extends BaseMapper<InvoiceApplyContractDetail> {
+
+    List<InvoiceApplyContractDetailVo> getList(@Param("ew") IWrapper wrapper);
+}

+ 23 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/invoice/InvoiceApplyDetailMapper.java

@@ -0,0 +1,23 @@
+package com.fjhx.oa.mapper.invoice;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyDetail;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyDetailVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 开票申请明细 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+public interface InvoiceApplyDetailMapper extends BaseMapper<InvoiceApplyDetail> {
+
+    List<InvoiceApplyDetailVo> getList(@Param("ew") IWrapper wrapper);
+}

+ 26 - 0
hx-oa/src/main/java/com/fjhx/oa/mapper/invoice/InvoiceApplyMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.oa.mapper.invoice;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.invoice.po.InvoiceApply;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 开票申请 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+public interface InvoiceApplyMapper extends BaseMapper<InvoiceApply> {
+
+    /**
+     * 开票申请分页
+     */
+    Page<InvoiceApplyVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<InvoiceApply> wrapper);
+
+}

+ 23 - 0
hx-oa/src/main/java/com/fjhx/oa/service/invoice/InvoiceApplyContractDetailService.java

@@ -0,0 +1,23 @@
+package com.fjhx.oa.service.invoice;
+
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyContractDetail;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyContractDetailVo;
+import com.ruoyi.common.core.service.BaseService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 开票申请合同明细 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+public interface InvoiceApplyContractDetailService extends BaseService<InvoiceApplyContractDetail> {
+
+    List<InvoiceApplyContractDetailVo> getList(IWrapper wrapper);
+
+}

+ 24 - 0
hx-oa/src/main/java/com/fjhx/oa/service/invoice/InvoiceApplyDetailService.java

@@ -0,0 +1,24 @@
+package com.fjhx.oa.service.invoice;
+
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyDetail;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyDetailVo;
+import com.ruoyi.common.core.service.BaseService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 开票申请明细 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+public interface InvoiceApplyDetailService extends BaseService<InvoiceApplyDetail> {
+
+    List<InvoiceApplyDetailVo> getList(IWrapper wrapper);
+
+
+}

+ 42 - 0
hx-oa/src/main/java/com/fjhx/oa/service/invoice/InvoiceApplyService.java

@@ -0,0 +1,42 @@
+package com.fjhx.oa.service.invoice;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.oa.entity.invoice.dto.InvoiceApplyDto;
+import com.fjhx.oa.entity.invoice.dto.InvoiceApplySelectDto;
+import com.fjhx.oa.entity.invoice.po.InvoiceApply;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 开票申请 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+public interface InvoiceApplyService extends BaseService<InvoiceApply> {
+
+    /**
+     * 开票申请分页
+     */
+    Page<InvoiceApplyVo> getPage(InvoiceApplySelectDto dto);
+
+    /**
+     * 开票申请明细
+     */
+    InvoiceApplyVo detail(Long id);
+
+    /**
+     * 开票申请新增
+     */
+    void addOrEdit(InvoiceApplyDto invoiceApplyDto);
+
+    /**
+     * 开票申请删除
+     */
+    void delete(Long id);
+
+    void cancellation(Long businessId);
+}

+ 38 - 0
hx-oa/src/main/java/com/fjhx/oa/service/invoice/impl/InvoiceApplyContractDetailServiceImpl.java

@@ -0,0 +1,38 @@
+package com.fjhx.oa.service.invoice.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyContractDetail;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyContractDetailVo;
+import com.fjhx.oa.mapper.invoice.InvoiceApplyContractDetailMapper;
+import com.fjhx.oa.service.invoice.InvoiceApplyContractDetailService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 开票申请合同明细 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Service
+public class InvoiceApplyContractDetailServiceImpl extends ServiceImpl<InvoiceApplyContractDetailMapper, InvoiceApplyContractDetail> implements InvoiceApplyContractDetailService {
+
+    @Override
+    public List<InvoiceApplyContractDetailVo> getList(IWrapper wrapper) {
+        List<InvoiceApplyContractDetailVo> list = baseMapper.getList(wrapper);
+        for (InvoiceApplyContractDetailVo vo : list) {
+            //赋值未开票金额
+            BigDecimal invoiceAmount = ObjectUtil.isEmpty(vo.getInvoiceAmount()) ? BigDecimal.ZERO : vo.getInvoiceAmount();
+            BigDecimal sumClaimMoney = ObjectUtil.isEmpty(vo.getSumClaimMoney()) ? BigDecimal.ZERO : vo.getSumClaimMoney();
+            vo.setUnInvoiceAmount(sumClaimMoney.subtract(invoiceAmount));
+        }
+        return list;
+    }
+}

+ 29 - 0
hx-oa/src/main/java/com/fjhx/oa/service/invoice/impl/InvoiceApplyDetailServiceImpl.java

@@ -0,0 +1,29 @@
+package com.fjhx.oa.service.invoice.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyDetail;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyDetailVo;
+import com.fjhx.oa.mapper.invoice.InvoiceApplyDetailMapper;
+import com.fjhx.oa.service.invoice.InvoiceApplyDetailService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 开票申请明细 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Service
+public class InvoiceApplyDetailServiceImpl extends ServiceImpl<InvoiceApplyDetailMapper, InvoiceApplyDetail> implements InvoiceApplyDetailService {
+
+    @Override
+    public List<InvoiceApplyDetailVo> getList(IWrapper wrapper) {
+        return baseMapper.getList(wrapper);
+    }
+}

+ 138 - 0
hx-oa/src/main/java/com/fjhx/oa/service/invoice/impl/InvoiceApplyServiceImpl.java

@@ -0,0 +1,138 @@
+package com.fjhx.oa.service.invoice.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.enums.FlowStatusEnum1;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.flow.entity.flow.po.FlowExample;
+import com.fjhx.flow.enums.FlowStatusEnum;
+import com.fjhx.flow.service.flow.FlowExampleService;
+import com.fjhx.oa.entity.invoice.dto.InvoiceApplyDto;
+import com.fjhx.oa.entity.invoice.dto.InvoiceApplySelectDto;
+import com.fjhx.oa.entity.invoice.po.InvoiceApply;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyContractDetail;
+import com.fjhx.oa.entity.invoice.po.InvoiceApplyDetail;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyContractDetailVo;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyDetailVo;
+import com.fjhx.oa.entity.invoice.vo.InvoiceApplyVo;
+import com.fjhx.oa.mapper.invoice.InvoiceApplyMapper;
+import com.fjhx.oa.service.invoice.InvoiceApplyContractDetailService;
+import com.fjhx.oa.service.invoice.InvoiceApplyDetailService;
+import com.fjhx.oa.service.invoice.InvoiceApplyService;
+import com.fjhx.tenant.utils.DeptUstil;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 开票申请 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-04-13
+ */
+@Service
+public class InvoiceApplyServiceImpl extends ServiceImpl<InvoiceApplyMapper, InvoiceApply> implements InvoiceApplyService {
+
+    @Autowired
+    private FlowExampleService flowExampleService;
+
+    @Autowired
+    private InvoiceApplyContractDetailService invoiceApplyContractDetailService;
+    @Autowired
+    private InvoiceApplyDetailService invoiceApplyDetailService;
+
+    @Override
+    public Page<InvoiceApplyVo> getPage(InvoiceApplySelectDto dto) {
+        IWrapper<InvoiceApply> wrapper = getWrapper();
+        wrapper.orderByDesc("ia", InvoiceApply::getId);
+        Page<InvoiceApplyVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        setInfo(page.getRecords());
+        return page;
+    }
+
+    @Override
+    public InvoiceApplyVo detail(Long id) {
+        InvoiceApply InvoiceApply = this.getById(id);
+        InvoiceApplyVo result = BeanUtil.toBean(InvoiceApply, InvoiceApplyVo.class);
+
+        setInfo(Arrays.asList(result));
+
+        List<InvoiceApplyContractDetailVo> iacd = invoiceApplyContractDetailService.getList(IWrapper.getWrapper().eq("iacd", InvoiceApplyContractDetail::getInvoiceApplyId, id));
+        result.setInvoiceApplyContractDetailList(iacd);
+
+        List<InvoiceApplyDetailVo> iad = invoiceApplyDetailService.getList(IWrapper.getWrapper().eq("iad", InvoiceApplyDetail::getInvoiceApplyId, id));
+        result.setInvoiceApplyDetailList(iad);
+
+        return result;
+    }
+
+    void setInfo(List<InvoiceApplyVo> records) {
+        if (ObjectUtil.isEmpty(records)) {
+            return;
+        }
+        UserUtil.assignmentNickName(records, InvoiceApply::getCreateUser, InvoiceApplyVo::setCreateUserName);
+        DeptUstil.assignmentNickName(records, InvoiceApply::getDeptId, InvoiceApplyVo::setDeptName);
+        DeptUstil.assignmentNickName(records, InvoiceApply::getCompanyId, InvoiceApplyVo::setCompanyName);
+    }
+
+    @DSTransactional
+    @Override
+    public void addOrEdit(InvoiceApplyDto dto) {
+        this.saveOrUpdate(dto);
+        //相关审批附件
+        ObsFileUtil.editFile(dto.getFileList(), dto.getId(), 10);
+        //聚水潭订单界面金额截图(需有订单号和金额)
+        ObsFileUtil.editFile(dto.getJstOrderFileList(), dto.getId(), 20);
+        //店铺交易截图(含店铺名称、订单编号)
+        ObsFileUtil.editFile(dto.getShopTradeFileList(), dto.getId(), 30);
+        //开票员上传发票附件
+        ObsFileUtil.editFile(dto.getInvoicerFileList(), dto.getId(), 40);
+
+        List<InvoiceApplyContractDetail> invoiceApplyContractDetailList = dto.getInvoiceApplyContractDetailList();
+        invoiceApplyContractDetailList.forEach(item -> item.setInvoiceApplyId(dto.getId()));
+        invoiceApplyContractDetailService.editLinked(invoiceApplyContractDetailList, InvoiceApplyContractDetail::getInvoiceApplyId, dto.getId());
+
+        List<InvoiceApplyDetail> invoiceApplyDetailList = dto.getInvoiceApplyDetailList();
+        invoiceApplyDetailList.forEach(item -> item.setInvoiceApplyId(dto.getId()));
+        invoiceApplyDetailService.editLinked(invoiceApplyDetailList, InvoiceApplyDetail::getInvoiceApplyId, dto.getId());
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    @Override
+    public void cancellation(Long businessId) {
+        InvoiceApply byId = getById(businessId);
+        this.update(q -> q
+                .eq(InvoiceApply::getId, businessId)
+                .set(InvoiceApply::getStatus, FlowStatusEnum1.CANCELLATION.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+
+        //销毁审批中的流程
+        flowExampleService.update(q -> q
+                .eq(FlowExample::getId, byId.getFlowId())
+                .in(FlowExample::getStatus, FlowStatusEnum.READY_START.getKey(), FlowStatusEnum.IN_PROGRESS.getKey())
+                .set(FlowExample::getStatus, FlowStatusEnum.CANCELLATION.getKey())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+                .set(BasePo::getUpdateTime, new Date())
+        );
+    }
+
+}

+ 22 - 0
hx-oa/src/main/resources/mapper/invoice/InvoiceApplyContractDetailMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.oa.mapper.invoice.InvoiceApplyContractDetailMapper">
+    <select id="getList" resultType="com.fjhx.oa.entity.invoice.vo.InvoiceApplyContractDetailVo">
+        SELECT iacd.*,
+               c.`code`                        AS contractCode,
+               (SELECT IFNULL(SUM(cc.contract_money), 0)
+                FROM claim_contract cc
+                         JOIN claim cl ON cc.claim_id = cl.id
+                WHERE cl.confirm_status = 1
+                  AND cc.contract_id = c.id)   AS sumClaimMoney,
+               c.amount                        AS contractAmount,
+               (SELECT IFNULL(sum(iacd.amount), 0)
+                FROM invoice_apply_contract_detail iacd
+                         JOIN invoice_apply ia ON iacd.invoice_apply_id = ia.id
+                WHERE ia.`status` IN (10, 30, 60)
+                  AND iacd.contract_id = c.id) AS invoiceAmount
+        FROM invoice_apply_contract_detail iacd
+                 LEFT JOIN contract c ON iacd.contract_id = c.id
+            ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 9 - 0
hx-oa/src/main/resources/mapper/invoice/InvoiceApplyDetailMapper.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.oa.mapper.invoice.InvoiceApplyDetailMapper">
+    <select id="getList" resultType="com.fjhx.oa.entity.invoice.vo.InvoiceApplyDetailVo">
+        SELECT iad.*
+        FROM invoice_apply_detail iad
+            ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 45 - 0
hx-oa/src/main/resources/mapper/invoice/InvoiceApplyMapper.xml

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.oa.mapper.invoice.InvoiceApplyMapper">
+    <select id="getPage" resultType="com.fjhx.oa.entity.invoice.vo.InvoiceApplyVo">
+        select ia.id,
+               ia.status,
+               ia.flow_id,
+               ia.apply_time,
+               ia.code,
+               ia.dept_id,
+               ia.company_id,
+               ia.apply_scenario,
+               ia.ordering_channels,
+               ia.ask_remark,
+               ia.jst_order_code,
+               ia.is_cash_noted,
+               ia.is_match_order,
+               ia.payment_situation,
+               ia.tax_point_settle,
+               ia.tax_point_settle_amount,
+               ia.customer_id,
+               ia.billing_type,
+               ia.seller_company_id,
+               ia.buyer_company_name,
+               ia.seller_taxpayer_code,
+               ia.buyer_taxpayer_code,
+               ia.seller_address,
+               ia.seller_tel,
+               ia.buyer_address,
+               ia.buyer_tel,
+               ia.seller_account_bank,
+               ia.seller_account_number,
+               ia.buyer_account_bank,
+               ia.buyer_account_number,
+               ia.amount_including_tax,
+               ia.ticket_remark,
+               ia.create_user,
+               ia.create_time,
+               ia.update_user,
+               ia.update_time
+        from invoice_apply ia
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 9 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/vo/ContractVo.java

@@ -258,5 +258,14 @@ public class ContractVo extends Contract {
 
     private List<ContractOutboundInfoVo> contractOutboundInfoList;
 
+    /**
+     * 开票金额
+     */
+    private BigDecimal invoiceAmount;
+    /**
+     * 未开票金额
+     */
+    private BigDecimal unInvoiceAmount;
+
 }
 

+ 8 - 2
hx-sale/src/main/resources/mapper/contract/ContractMapper.xml

@@ -12,7 +12,8 @@
                              0
                          ELSE 10
                          END                                   AS refundStatusNew,
-                     (t1.amount - t1.settledAmount)            as unsettledAmount
+                     (t1.amount - t1.settledAmount)            as unsettledAmount,
+                     (t1.sumClaimMoney - t1.invoiceAmount)     as unInvoiceAmount
               FROM (SELECT t1.*,
                            c.name                              customerName,
 --                            us.nick_name                      salesmanName,
@@ -33,7 +34,12 @@
                                , 0)                         AS settledAmount,
                            po.delivery_period               as prodDeliveryPeriod,
                            IFNULL(t4.deliverQuantity, 0)    as deliverQuantity,
-                           IFNULL(t4.notDeliverQuantity, 0) as notDeliverQuantity
+                           IFNULL(t4.notDeliverQuantity, 0) as notDeliverQuantity,
+                           (SELECT IFNULL(sum(iacd.amount), 0)
+                            FROM invoice_apply_contract_detail iacd
+                                     JOIN invoice_apply ia ON iacd.invoice_apply_id = ia.id
+                            WHERE ia.`status` IN (10, 30, 60)
+                              AND iacd.contract_id = c.id)  AS invoiceAmount
                     FROM contract t1
                              left join customer c on t1.buy_corporation_id = c.id
 --                              left join sys_user us on c.user_id = us.user_id