李白
2026-05-29 3a102b246b592e5e1dd34d6de07a8191de90a8e1
开票前基础数据设置
8个文件已修改
7个文件已添加
656 ■■■■■ 已修改文件
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PlanSubjectMatter.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Product.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ProductionPlan.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/SaleCredit.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductionPlanController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/SaleCreditMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ProductionPlanService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/SaleCreditService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductionPlanServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/SaleCreditServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/resources/mapper/SaleCreditMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java
@@ -117,4 +117,13 @@
    @Column(columnDefinition = "bigint comment '市场类型'")
    private Long className;
    @Schema(description = "出口服务属性")
    @Column(columnDefinition = "bigint comment '出口服务属性'")
    private Long exportServiceAttr;
    @Schema(description = "销售模式")
    @Column(columnDefinition = "bigint comment '销售模式'")
    private Long salesModel;
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java
@@ -21,6 +21,10 @@
@jakarta.persistence.Table(name = "contract_out_bound")//数据库创建的表明
public class ContractOutBound extends BaseModel<ContractOutBound> {
    @Schema(description = "Erp出库Id")
    @Column(columnDefinition = "bigint not null comment 'Erp出库Id'")
    private Long OutBoundId;
    @Schema(description = "关联合同ID")
    @Column(columnDefinition = "bigint not null comment '关联合同ID'")
    private Long contractId;
@@ -75,8 +79,54 @@
    @Column(columnDefinition="text comment '到货单据路径'")
    private String arrivalAttPaths;
    @Schema(description = "erp出库ID")
    @Column(columnDefinition="bigint comment 'erp出库ID'")
    private Long outBoundId;
    //以下开票相关
    @Schema(description = "销售挂账id")
    @Column(columnDefinition = "bigint default null comment '销售挂账id'")
    private Long saleCreditId;
    @Schema(description = "开票状态(0-未开票 1-开票中 2-已开票)")
    @Column(columnDefinition = "tinyint(2) default 0 comment '开票状态(0-未开票 1-开票中 2-已开票)'")
    private Integer invoiceSatus;
    @Schema(description = "总单价")
    @Column(columnDefinition = "decimal(10,0) comment '出库数量'")
    private BigDecimal totalPrice;
    @Schema(description = "总税额")
    @Column(columnDefinition = "decimal(10,0) comment '总税额'")
    private BigDecimal totalTax;
    //产品信息
    @Schema(description = "产品id")
    @Column(columnDefinition = "bigint not null comment '产品id'")
    private Long productId;
    @Schema(description = "税率(百分比,如13表示13%)")
    @Column(columnDefinition = "double default 0.00 comment '税率'")
    private Double taxRate;
    @Schema(description = "税收分类")
    @Column(columnDefinition = "VARCHAR(50) comment '税收分类'")
    private String taxClass;
    @Schema(description = "税收编码")
    @Column(columnDefinition = "VARCHAR(80) comment '税收编码'")
    private String taxCode;
    //合同标的物中信息
    @Schema(description = "标的物规格/型号")
    @Column(columnDefinition = "VARCHAR(200) comment '标的物规格/型号'")
    private String specification;
    @Schema(description = "计量单位(个/台/吨/项/套等)")
    @Column(columnDefinition = "VARCHAR(20) comment '计量单位'")
    private String unit;
    @Schema(description = "单价")
    @Column(columnDefinition = "decimal(10,2) comment '单价'")
    private BigDecimal unitPrice;
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PlanSubjectMatter.java
@@ -31,6 +31,10 @@
    @Column(columnDefinition = "VARCHAR(50) comment '产品名称'")
    private String productName;
    @Schema(description = "产品型号")
    @Column(columnDefinition = "VARCHAR(50) comment '产品型号'")
    private String productType;
    @Schema(description = "产品Erp编码")
    @Column(columnDefinition = "VARCHAR(50) comment '产品Erp编码'")
    private String erpCode;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Product.java
@@ -51,6 +51,10 @@
    @Column(columnDefinition = "VARCHAR(50) comment '税收分类'")
    private String taxClass;
    @Schema(description = "税收编码")
    @Column(columnDefinition = "VARCHAR(80) comment '税收编码'")
    private String taxCode;
    @Schema(description = "父ID")
    @Column(columnDefinition = "bigint default 0 comment '父ID'")
    private Long parentId;
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ProductionPlan.java
@@ -77,8 +77,8 @@
    @Column(columnDefinition = "tinyint(2) default 0 comment '供应属性 0-成品 1-备件 2-大修 3-其他'")
    private Integer supplyAttribute;*/
    @Schema(description = "计划状态(0-草稿 1-已生效 2-已终止 3-已过期)")
    @Column(columnDefinition = "tinyint(2) default 0 comment '计划状态'")
    @Schema(description = "计划状态(0-已失效 1-已生效)")
    @Column(columnDefinition = "tinyint(2) default 1 comment '计划状态'")
    private Integer status;
    @Schema(description = "是否推送erp(0-没有 1-推送)")
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/SaleCredit.java
New file
@@ -0,0 +1,160 @@
package com.by4cloud.platformx.business.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
import com.by4cloud.platformx.common.data.mybatis.BaseModel;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import lombok.Data;
import org.hibernate.annotations.Comment;
import java.math.BigDecimal;
import java.util.List;
/**
 * @author wjli
 * @description
 * @date 2026/4/29 10:51
 **/
@Data
@Entity
@Table(name = "sale_credit")
@Comment("销售挂账")
public class SaleCredit  extends BaseModel<SaleCredit> {
    @Schema(description = "销售编号")
    @Column(columnDefinition = "VARCHAR(64) comment '销售编号'")
    private String entrustCode;
    @Schema(description = "关联合同ID")
    @Column(columnDefinition = "bigint not null comment '关联合同ID'")
    private Long contractId;
    @Schema(description = "合同编号")
    @Column(columnDefinition = "VARCHAR(64) comment '合同编号'")
    private String contractNo;
    @Schema(description = "合同名称")
    @Column(columnDefinition = "VARCHAR(64) comment '合同名称'")
    private String contractName;
    @Schema(description = "甲方id")
    @Column(name = "party_a_id",columnDefinition = "bigint comment '甲方id'")
    private Long partyAId;
    @Schema(description = "甲方名称")
    @Column(name = "party_a",columnDefinition = "VARCHAR(100) comment '甲方名称'")
    private String partyA;
    @Schema(description = "甲方统一社会信用代码")
    @Column(name = "credit_code_a",columnDefinition = "VARCHAR(30) comment '甲方统一社会信用代码'")
    private String creditCodeA;
    @Schema(description = "甲方开户银行")
    @Column(name = "bank_name_a",columnDefinition = "VARCHAR(20) comment '甲方开户银行'")
    private String bankNameA;
    @Schema(description = "甲方银行账号")
    @Column(name = "bank_account_a",columnDefinition = "VARCHAR(50) comment '甲方银行账号'")
    private String bankAccountA;
    @Schema(description = "甲方联系电话")
    @Column(name = "contact_phone_a",columnDefinition = "VARCHAR(50) comment '甲方联系电话'")
    private String contactPhoneA;
    @Schema(description = "乙方id")
    @Column(name = "party_b_id",columnDefinition = "bigint comment '乙方id'")
    private Long partyBId;
    @Schema(description = "乙方名称")
    @Column(name = "party_b",columnDefinition = "VARCHAR(100) comment '乙方名称'")
    private String partyB;
    @Schema(description = "乙方统一社会信用代码")
    @Column(name = "credit_code_b",columnDefinition = "VARCHAR(30) comment '乙方统一社会信用代码'")
    private String creditCodeB;
    @Schema(description = "乙方开户银行")
    @Column(name = "bank_name_b",columnDefinition = "VARCHAR(20) comment '乙方开户银行'")
    private String bankNameB;
    @Schema(description = "乙方银行账号")
    @Column(name = "bank_account_b",columnDefinition = "VARCHAR(50) comment '乙方银行账号'")
    private String bankAccountB;
    @Schema(description = "乙方联系电话")
    @Column(name = "contact_phone_b",columnDefinition = "VARCHAR(50) comment '乙方联系电话'")
    private String contactPhoneB;
    @Schema(description = "挂账金额")
    @Column(columnDefinition = "decimal(10,2) comment '挂账金额'")
    private BigDecimal totalAmount;
    @Schema(description = "挂账金额总税额")
    @Column(columnDefinition = "decimal(10,2) comment '挂账金额总税额'")
    private BigDecimal totalTax;
    @Schema(description = "标的物详情")
    @Column(columnDefinition = "TEXT comment '标的物详情'")
    private String matterStr;
    @Schema(description = "对应出货单")
    @Column(columnDefinition = "varchar(300) comment '对应出货单'")
    private String outBoundIds;
    @Schema(description = "状态(0-生效 1-失效)")
    @Column(columnDefinition = "tinyint(2) default 0 comment '状态(0-生效 1-失效)'")
    private Integer status;
    @Schema(description = "状态(200)")
    @Column(columnDefinition = "tinyint(2) default 0 comment '状态(200)'")
    private Integer bipStatus;
    @Schema(description = "开票结果状态 0未提交默认 1处理中 2通过 3驳回 4开票失败")
    @javax.persistence.Column(columnDefinition="int(1) comment '排序'")
    private Integer blueResultStatus;
    @Schema(description = "开红票结果状态 0未提交默认 1处理中 2通过 3驳回 4开票失败")
    @javax.persistence.Column(columnDefinition="int(1) comment '排序'")
    private Integer redResultStatus;
    @Schema(description = "蓝票id")
    @Column(columnDefinition = "bigint default null comment '蓝票id'")
    private Long blueInvoiceResultId;
    @Schema(description = "红票id")
    @Column(columnDefinition = "bigint default null comment '红票id'")
    private Long redInvoiceResultId;
    @Schema(description = "开票详情")
    @Column(columnDefinition = "TEXT comment '开票详情'")
    private String invoiceRemark;
    @Schema(description = "蓝票地址")
    @Column(columnDefinition = "varchar(300) comment '蓝票地址'")
    private String invoicPath;
    @Schema(description = "红票地址")
    @Column(columnDefinition = "varchar(300) comment '红票地址'")
    private String invoicRedPath;
    @Schema(description = "发票url")
    @javax.persistence.Column(columnDefinition="VARCHAR(50) comment '发票url'")
    private String invoicUrl;
    @Schema(description = "红冲发票url")
    @javax.persistence.Column(columnDefinition="VARCHAR(50) comment '红冲发票url'")
    private String invoicRedUrl;
    /**
     * 出货单列表
     */
    @Transient
    @TableField(exist = false)
    private List<ContractOutBoundVo> contractOutBoundList;
}
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundVo.java
New file
@@ -0,0 +1,36 @@
package com.by4cloud.platformx.business.vo;
import com.by4cloud.platformx.business.entity.ContractOutBound;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ContractOutBoundVo extends ContractOutBound {
    //产品中信息
    @Schema(description = "产品id")
    private Long productId;
    @Schema(description = "税率(百分比,如13表示13%)")
    private Double taxRate;
    @Schema(description = "税收分类")
    private String taxClass;
    @Schema(description = "税收编码")
    private String taxCode;
    //合同标的物中信息
    @Schema(description = "标的物规格/型号")
    private String specification;
    @Schema(description = "计量单位(个/台/吨/项/套等)")
    private String unit;
    @Schema(description = "单价")
    private BigDecimal unitPrice;
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductionPlanController.java
@@ -205,4 +205,15 @@
    public List<ProductionPlan> export(ProductionPlan productionPlan,Long[] ids) {
        return productionPlanService.list(Wrappers.lambdaQuery(productionPlan).in(ArrayUtil.isNotEmpty(ids), ProductionPlan::getId, ids));
    }
    /**
     * 启动审核流程
     * @param id id
     * @return R
     */
    @Operation(summary = "通过id启动审核流程" , description = "通过id合同生效" )
    @GetMapping("/startApproval/{id}" )
    public R startApproval(@PathVariable("id" ) Long id) {
        return productionPlanService.startApproval(id);
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java
New file
@@ -0,0 +1,269 @@
package com.by4cloud.platformx.business.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.by4cloud.platformx.admin.api.entity.SysDept;
import com.by4cloud.platformx.admin.api.feign.RemoteDeptService;
import com.by4cloud.platformx.business.entity.*;
import com.by4cloud.platformx.business.service.*;
import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
import com.by4cloud.platformx.common.core.util.R;
import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
import com.by4cloud.platformx.common.log.annotation.SysLog;
import com.by4cloud.platformx.common.security.annotation.Inner;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
 * 销售挂账
 *
 * @author wjli
 * @date 2026-05-21 16:16:31
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/saleCredit" )
@Tag(description = "saleCredit" , name = "销售挂账管理" )
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class SaleCreditController {
    private final  SaleCreditService saleCreditService;
    private final ContractService contractService;
    private final BusinessCustomerService businessCustomerService;
    private final ContractOutBoundService contractOutBoundService;
    private final ProductService productService;
    private final ContractSubjectMatterService contractSubjectMatterService;
    private final RemoteDeptService remoteDeptService;
    /**
     * 分页查询
     * @param page 分页对象
     * @param saleCredit 销售挂账
     * @return
     */
    @Operation(summary = "分页查询" , description = "分页查询" )
    @GetMapping("/page" )
    @PreAuthorize("@pms.hasPermission('business_saleCredit_view')" )
    public R getSaleCreditPage(@ParameterObject Page page, @ParameterObject SaleCredit saleCredit) {
        LambdaQueryWrapper<SaleCredit> wrapper = Wrappers.lambdaQuery();
        return R.ok(saleCreditService.page(page, wrapper));
    }
    /**
     * 通过id查询销售挂账
     * @param id id
     * @return R
     */
    @Operation(summary = "通过id查询" , description = "通过id查询" )
    @GetMapping("/{id}" )
    @PreAuthorize("@pms.hasPermission('business_saleCredit_view')" )
    public R getById(@PathVariable("id" ) Long id) {
        return R.ok(saleCreditService.getById(id));
    }
    /**
     * 新增销售挂账
     * @param saleCredit 销售挂账
     * @return R
     */
    @Operation(summary = "新增销售挂账" , description = "新增销售挂账" )
    @SysLog("新增销售挂账" )
    @PostMapping
    @PreAuthorize("@pms.hasPermission('business_saleCredit_add')" )
    public R save(@RequestBody SaleCredit saleCredit) {
        return R.ok(saleCreditService.save(saleCredit));
    }
    /**
     * 新增销售挂账
     * @param saleCredit 销售挂账
     * @return R
     */
    @Operation(summary = "销售挂账生成" , description = "销售挂账生成" )
    @SysLog("销售挂账生成" )
    @PostMapping("/saveSaleCredit")
    @PreAuthorize("@pms.hasPermission('business_saleCredit_add')" )
    public R saveInvoice(@RequestBody SaleCredit saleCredit) {
        //开票中
        saleCredit.setStatus(1);
        saleCreditService.save(saleCredit);
        //标记出库单被标识
        List<ContractOutBoundVo> contractOutBoundList = saleCredit.getContractOutBoundList();
        if(contractOutBoundList==null){
            return R.failed("请选择出库单!");
        }
        if(contractOutBoundList.size()==0){
            return R.failed("请选择出库单!");
        }
        String outBoundIds = "";
        for(ContractOutBoundVo vo : contractOutBoundList){
            if(StrUtil.isEmpty(outBoundIds)){
                outBoundIds = "" + vo.getId();
            }else{
                outBoundIds += "," + vo.getId();
            }
            ContractOutBound outBound = contractOutBoundService.getById(vo.getId());
            outBound.setSaleCreditId(saleCredit.getId());
            outBound.setTotalPrice(vo.getTotalPrice());
            outBound.setTotalTax(vo.getTotalTax());
            outBound.setProductId(vo.getProductId());
            outBound.setTaxRate(vo.getTaxRate());
            outBound.setTaxClass(vo.getTaxClass());
            outBound.setTaxCode(vo.getTaxCode());
            outBound.setSpecification(vo.getSpecification());
            outBound.setUnit(vo.getUnit());
            outBound.setUnitPrice(vo.getUnitPrice());
            outBound.setInvoiceSatus(1);
            contractOutBoundService.updateById(outBound);
        }
        saleCredit.setOutBoundIds(outBoundIds);
        saleCreditService.save(saleCredit);
       return R.ok("销售挂账生成!");
    }
    /**
     * 拼接销售挂账
     * @param saleCredit 销售挂账
     * @return R
     */
    @Operation(summary = "拼接销售挂账" , description = "拼接销售挂账" )
    @SysLog("拼接销售挂账" )
    @GetMapping("/generatorInvoice")
    @PreAuthorize("@pms.hasPermission('business_saleCredit_view')" )
    @Inner(value = false)
    public R generatorInvoice(@ParameterObject SaleCredit saleCredit) {
        if(saleCredit.getContractId()==null){
            return R.failed("合同id不能为空");
        }
        Contract contract = contractService.getById(saleCredit.getContractId());
        if(contract==null){
            return R.failed("合同id错误");
        }
        saleCredit.setContractName(contract.getContractName());
        saleCredit.setContractNo(contract.getContractNo());
        BusinessCustomer partA = businessCustomerService.getById(contract.getPartyAId());
        if(partA!=null){
            saleCredit.setPartyA(partA.getCompanyName());
            saleCredit.setCreditCodeA(partA.getCreditCode());
            saleCredit.setBankAccountA(partA.getBankAccount());
            saleCredit.setBankNameA(partA.getBankName());
        }
        R<SysDept> r = remoteDeptService.getById(contract.getPartyBId());
        SysDept dept = r.getData();
        if(dept!=null){
            saleCredit.setPartyB(dept.getOrgName());
            saleCredit.setCreditCodeB(dept.getOrgCode());
            saleCredit.setBankAccountB(dept.getOrgBankAccount());
            saleCredit.setBankNameB(dept.getOrgBank());
        }
        List<ContractOutBound> outBoundList = contractOutBoundService.list(new LambdaQueryWrapper<ContractOutBound>()
                .eq(ContractOutBound::getContractId,contract.getId())
                .eq(ContractOutBound::getInvoiceSatus,0)
                .orderByAsc(ContractOutBound::getOutBoundTime)
        );
        if(outBoundList!=null){
            if(!outBoundList.isEmpty()){
                List<ContractOutBoundVo> list = new ArrayList<>();
                for(ContractOutBound outBound : outBoundList){
                    ContractOutBoundVo vo = new ContractOutBoundVo();
                    BeanUtil.copyProperties(outBound,vo);
                    Product product = productService.getOne(new LambdaQueryWrapper<Product>().eq(Product::getErpCode,outBound.getSubjectMatterCode()).last("limit 1"));
                    if(product!=null){
                        vo.setProductId(product.getId());
                        vo.setTaxClass(product.getTaxClass());
                        vo.setTaxCode(product.getTaxCode());
                        vo.setTaxRate(product.getTaxRate());
                    }
                    ContractSubjectMatter matter = contractSubjectMatterService.getOne(new LambdaQueryWrapper<ContractSubjectMatter>()
                            .eq(ContractSubjectMatter::getContractId,contract.getId())
                            .eq(ContractSubjectMatter::getMaterialCode,outBound.getSubjectMatterCode())
                            .last("limit 1")
                    );
                    if(matter!=null){
                        vo.setSpecification(matter.getSpecification());
                        vo.setUnit(matter.getUnit());
                        vo.setUnitPrice(matter.getUnitPrice());
                    }
                    list.add(vo);
                }
                saleCredit.setContractOutBoundList(list);
            }
        }
        return R.ok(saleCredit);
    }
    /**
     * 修改销售挂账
     * @param saleCredit 销售挂账
     * @return R
     */
    @Operation(summary = "修改销售挂账" , description = "修改销售挂账" )
    @SysLog("修改销售挂账" )
    @PutMapping
    @PreAuthorize("@pms.hasPermission('business_saleCredit_edit')" )
    public R updateById(@RequestBody SaleCredit saleCredit) {
        return R.ok(saleCreditService.updateById(saleCredit));
    }
    /**
     * 通过id删除销售挂账
     * @param ids id列表
     * @return R
     */
    @Operation(summary = "通过id删除销售挂账" , description = "通过id删除销售挂账" )
    @SysLog("通过id删除销售挂账" )
    @DeleteMapping
    @PreAuthorize("@pms.hasPermission('business_saleCredit_del')" )
    public R removeById(@RequestBody Long[] ids) {
        return R.ok(saleCreditService.removeBatchByIds(CollUtil.toList(ids)));
    }
    /**
     * 导出excel 表格
     * @param saleCredit 查询条件
        * @param ids 导出指定ID
     * @return excel 文件流
     */
    @ResponseExcel
    @GetMapping("/export")
    @PreAuthorize("@pms.hasPermission('business_saleCredit_export')" )
    public List<SaleCredit> export(SaleCredit saleCredit,Long[] ids) {
        return saleCreditService.list(Wrappers.lambdaQuery(saleCredit).in(ArrayUtil.isNotEmpty(ids), SaleCredit::getId, ids));
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/SaleCreditMapper.java
New file
@@ -0,0 +1,11 @@
package com.by4cloud.platformx.business.mapper;
import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
import com.by4cloud.platformx.business.entity.SaleCredit;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SaleCreditMapper extends PlatformxBaseMapper<SaleCredit> {
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ProductionPlanService.java
@@ -2,7 +2,10 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.by4cloud.platformx.business.entity.ProductionPlan;
import com.by4cloud.platformx.common.core.util.R;
public interface ProductionPlanService extends IService<ProductionPlan> {
    R startApproval(Long id);
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/SaleCreditService.java
New file
@@ -0,0 +1,8 @@
package com.by4cloud.platformx.business.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.by4cloud.platformx.business.entity.SaleCredit;
public interface SaleCreditService extends IService<SaleCredit> {
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductionPlanServiceImpl.java
@@ -1,10 +1,20 @@
package com.by4cloud.platformx.business.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.by4cloud.platformx.business.api.feign.RemoteFlowProcessService;
import com.by4cloud.platformx.business.constant.FlowNameEnum;
import com.by4cloud.platformx.business.entity.Contract;
import com.by4cloud.platformx.business.entity.ProductionPlan;
import com.by4cloud.platformx.business.mapper.ProductionPlanMapper;
import com.by4cloud.platformx.business.service.ProductionPlanService;
import com.by4cloud.platformx.common.core.util.R;
import com.by4cloud.platformx.flow.task.dto.ProcessInstanceParamDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
 * 排产计划
 *
@@ -12,5 +22,27 @@
 * @date 2026-05-07 10:27:42
 */
@Service
@RequiredArgsConstructor
public class ProductionPlanServiceImpl extends ServiceImpl<ProductionPlanMapper, ProductionPlan> implements ProductionPlanService {
    private final RemoteFlowProcessService remoteFlowProcessService;
    @Override
    public R startApproval(Long id) {
        ProductionPlan plan = baseMapper.selectById(id);
        //启动流程
        ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
        Map<String, Object> map = BeanUtil.beanToMap(plan);
        dto.setParamMap(map);
        dto.setFlowName(FlowNameEnum.排产计划审批.name());
        R r1 = remoteFlowProcessService.startProcessInstance(dto);
        if (r1.getCode() == 1) {
            return R.failed("流程启动失败");
        }
        plan.setStatus(1);
        baseMapper.updateById(plan);
        return R.ok();
    }
}
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/SaleCreditServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.by4cloud.platformx.business.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.by4cloud.platformx.business.entity.SaleCredit;
import com.by4cloud.platformx.business.mapper.SaleCreditMapper;
import com.by4cloud.platformx.business.service.SaleCreditService;
import org.springframework.stereotype.Service;
/**
 * 销售挂账
 *
 * @author wjli
 * @date 2026-05-21 16:16:31
 */
@Service
public class SaleCreditServiceImpl extends ServiceImpl<SaleCreditMapper, SaleCredit> implements SaleCreditService {
}
platformx-business-finance-biz/src/main/resources/mapper/SaleCreditMapper.xml
New file
@@ -0,0 +1,31 @@
<?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.by4cloud.platformx.business.mapper.SaleCreditMapper">
  <resultMap id="saleCreditMap" type="com.by4cloud.platformx.business.entity.SaleCredit">
        <id property="id" column="id"/>
        <result property="contractId" column="contract_id"/>
        <result property="contractNo" column="contract_no"/>
        <result property="contractName" column="contract_name"/>
        <result property="partyAId" column="party_a_id"/>
        <result property="partyA" column="party_a"/>
        <result property="creditCodeA" column="credit_code_a"/>
        <result property="bankNameA" column="bank_name_a"/>
        <result property="bankAccountA" column="bank_account_a"/>
        <result property="partyBId" column="party_b_id"/>
        <result property="partyB" column="party_b"/>
        <result property="creditCodeB" column="credit_code_b"/>
        <result property="bankNameB" column="bank_name_b"/>
        <result property="bankAccountB" column="bank_account_b"/>
        <result property="totalAmount" column="total_amount"/>
        <result property="matterStr" column="matter_str"/>
        <result property="outBoundIds" column="out_bound_ids"/>
        <result property="compId" column="comp_id"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="delFlag" column="del_flag"/>
  </resultMap>
</mapper>