// 数电的开票 import ProTable, { ActionType } from "@ant-design/pro-table"; import { FormInstance, Button, message, Tag, Popconfirm, Modal } from "antd"; import { useEffect, useRef, useState } from "react"; import { connect } from "umi"; import { Datum } from "@/types/invoice"; import { handleGetAppToken, handleGetBILLDETAILList, handleGetBILLList, handleGetForwardJDPJInterface, handleGetInvoiceSearch, handleGetKaiPiao, handleGetPassportInfoById, handleGetSDToken, handleSynchroAPPLYAPPROVE, handleSynchroBILLInterface } from "../DigitalElectronics/service"; import moment from "moment"; import { encryptAES } from "@/utils/handleAes"; import { ProForm, ProFormSelect, ProFormTextArea } from "@ant-design/pro-components"; import InvoiceDetial from "../redReversal/components/InvoiceDetial"; interface ConnectState { user: { data: any; }; } const publicParams: any = { // // 沙盒环境 // baseUrl: 'https://cosmic-sandbox.piaozone.com/xhcamzchwbgonerr/', // user: '18620126214', // appId: 'FPY001', // appSecret: 'FPY001fpy@2023***', // accountId: '2280459335882518528', // tenantId: 'xhcamzchwbgonerr', // businessSystemCode: 'BUSINESS_YCIC', // sellerTaxpayerId: '91530112MA7MQ2JR9U', // sellerName: '云南交投集团经营开发有限公司彩云驿商业管理分公司', // 正式环境 baseUrl: 'https://cosmic.piaozone.com/ynjtjtjykf', user: '18788526867', appId: 'FPY001', appSecret: 'FPY001fpy@2023***', accountId: '2311767813217320960', tenantId: 'ynjtjtjykf', businessSystemCode: 'BUSINESS_YCIC', sellerTaxpayerId: '91530000336622209K', sellerName: '云南交投集团经营开发有限公司', } const InvoiceInquiry: React.FC<{ currentUser: any }> = (props) => { const actionRef = useRef(); const formRef = useRef(); const modalFormRef = useRef(); // 当前用户信息 const [currentUser, setCurrentUser] = useState(); // 第一个接口的token const [appToken, setAppToken] = useState() // 第二个接口的token const [accessToken, setAccessToken] = useState() // 红冲原因的悬浮框 const [showModal, setShowModal] = useState(false) // 当前选择的票据信息 const [currentRow, setCurrentRow] = useState() // 红冲悬浮框点击的加载效果 const [confirmLoading, setConfirmLoading] = useState(false) // 显示详情抽屉 const [showDetailModal, setShowDetailModal] = useState(false) const [columnsStateMap, setColumnsStateMap] = useState({ BANK_NAME: { show: false }, BANK_ACCOUNT: { show: false }, }); const columns: any = [ { title: '服务区名称', dataIndex: 'SERVERPART_NAME', width: 150, align: 'center', ellipsis: true, hideInSearch: true, }, { title: '商户名称', dataIndex: 'MERCHANTS_NAME', width: 250, align: 'center', ellipsis: true, hideInSearch: true, }, { title: '票据编号', dataIndex: 'BILL_NO', width: 180, align: 'center', ellipsis: true, hideInSearch: true, render: (_, record) => { return record?.BILL_NO ? { setCurrentRow(record) setShowDetailModal(true) }}>{record?.BILL_NO} : "" } }, { title: '流水号', dataIndex: 'SERIAL_NO', width: 180, align: 'center', ellipsis: true, hideInSearch: true, }, { title: '票据类型', dataIndex: 'BILL_TYPE', width: 100, align: 'center', valueType: "select", valueEnum: { 1000: { text: '专票', status: 'warning' }, 2000: { text: '普票', status: 'default' }, 3000: { text: '红票', status: 'error' }, } }, { title: '票据状态', dataIndex: 'BILL_STATE', width: 120, align: 'center', valueType: 'select', fieldProps: { options: [ { label: "填写中", value: 1000 }, { label: "待审核", value: 2000 }, { label: "开票中", value: 9000 }, { label: "已开票", value: 9200 }, { label: "红冲申请中", value: 9990 }, { label: "已红冲", value: 9999 } ] } // 申请填写 1000 2000 待审核 9000 开票中 9200 已开票 }, { title: '含税标识', dataIndex: 'ACCOUNTED_TYPE', width: 100, align: 'center', hideInSearch: true, render: (text: number) => ( {text === 1 ? '含税' : '不含税'} ), }, { title:
含税费用金额
, dataIndex: 'INVOICE_TAXAMOUNT', width: 120, valueType: 'digit', align: 'right', ellipsis: true, hideInSearch: true, }, { title: '开票申请人', dataIndex: 'BILL_PERSON', width: 120, align: 'center', ellipsis: true, hideInSearch: true, }, { title: '申请时间', dataIndex: 'BILL_DATE', width: 120, align: 'center', ellipsis: true, hideInSearch: true, sorter: true }, { title: '开户银行', dataIndex: 'BANK_NAME', width: 200, align: 'center', ellipsis: true, hideInSearch: true, }, { title: '银行账号', dataIndex: 'BANK_ACCOUNT', width: 200, align: 'center', ellipsis: true, hideInSearch: true, }, ] // 处理税号中的特殊字符 const cleanString = (str: string) => { return str.replace(/[\s]/g, ''); } // 红冲发票 const handleRedGoBill = async (record?: any) => { // 这个方法 比较复杂 我做一下注释 // 先拿到表单数据 里面有 红冲类型和 红冲原因 // 红冲原因是给自己的同步接口 红冲类型 是给金飘云那边的 // 然后再去查询一下 这张票在金飘云那边的数据 拿到这张票对应的蓝票id // 因为我们自己的票据信息里面 没有票据明细的内容 所以要调用自己的票据明细拿到详细的信息之后 就可以拿到这张票子里面的商品 可以传给金飘云 // 红冲 就是 重新开一张票 然后开这张票的时候带上之前需要红冲那张票的蓝票id 即可 // 红冲申请发出去之后 按照红冲的编码 用我们自己的接口 开一张新的票据记录 其他数据保持一致 编码为红冲编码 状态为 9000 开票中 // 然后还有原的票同步 状态变为 9990 红冲中 // 最后同步开票流程变为 红冲中 // 拿到表单数据 const formData: any = modalFormRef.current?.getFieldsValue() // 拿个票据明细 const billDetail = await handleGetBILLDETAILList({ SearchParameter: { BILL_ID: record?.BILL_ID }, PageIndex: 1, PageSize: 999999, SortStr: "BILLDETAIL_ID" }) // 调用金票云那里的列表接口 // 构造查询数据 const queryData = { // sellerTaxpayerId: "91530112MA7MQ2JR9U", sellerTaxpayerId: publicParams.sellerTaxpayerId, serialNo: record?.BILL_NO, }; // 将data字段进行base64加密 const dataStringOld = JSON.stringify(queryData); const encryptedDataOld = btoa(unescape(encodeURIComponent(dataStringOld))); // 构造最终请求参数 const requestParams = { businessSystemCode: "BUSINESS_YCIC", interfaceCode: "BILL.INVOICE.QUERY", requestId: Date.now().toString(), data: encryptedDataOld }; let newreq2: any = { name: "", value: encryptAES(JSON.stringify({ ReqUrl: `https://cosmic.piaozone.com/ynjtjtjykf/kapi/app/sim/openApi?access_token=${accessToken}`, Access_token: accessToken, data: JSON.stringify(requestParams) })) } let responseOld = await handleGetForwardJDPJInterface(newreq2) responseOld = JSON.parse(responseOld as any) // // 调用查询接口 (这里需要传入正确的code参数) // const responseOld = await handleGetInvoiceSearch(requestParams, accessToken); let result: any = [] if (responseOld && responseOld.success) { let res = JSON.parse(decodeURIComponent(escape(atob(responseOld.data)))) result = res[0].invoiceList } else { return } let billDetailReq: any = [] if (billDetail && billDetail.length > 0) { billDetail.forEach((item: any) => { billDetailReq.push({ amount: -item.INVOICE_AMOUNT, // 明细金额 detailId: item.BILLDETAIL_ID, // 业务系统明细id goodsName: item.ITEM_NAME,// 商品名称 lineProperty: 2, // 行性质 price: item.INVOICE_PRICE,// 单价 quantity: -item.INVOICE_COUNT,// 数量 revenueCode: item.TABLE_NAME,// 税收分类编码 taxRate: (item.DUTY_PARAGRAPH / 100).toFixed(2),// 税率 units: item.ITEM_UNIT,// 计量单位 }) }) } let obj: any = { billNo: record?.BILL_NO ? `HC-${record?.BILL_NO}` : "", // 单据编号 billDate: moment(record?.BILL_DATE).format('YYYY-MM-DD'), // 单据日期 totalAmount: -record?.INVOICE_TAXAMOUNT, // 单据金额 includeTaxFlag: record?.ACCOUNTED_TYPE,// 判断是否含税 autoInvoice: "1",// 自动开票标记 invoiceProperty: "1", invoiceType: record?.BILL_TYPE == 1000 ? '08xdp' : record?.BILL_TYPE == 2000 ? '10xdp' : '', //发票种类 buyerTaxpayerId: cleanString(record?.TAXPAYER_IDENTIFYCODE),// 购方税号 buyerName: record?.MERCHANTS_NAME, // 购买方名称 buyerProperty: "0", // 购买方性质 0-企业,1-个人,2-非企业单位 // sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死 sellerTaxpayerId: publicParams.sellerTaxpayerId, // 销方税号 写死 // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死 sellerName: publicParams.sellerName, // 销方名称 写死 sellerBankAndAccount: "", // 销方银行和账号 写死 sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传 payee: "周洁萍", // 收款人 reviewer: "杨尚涛",// 复核人 drawer: "杨木青",// 开票人 buyerAddressAndTel: `${record?.MERCHANTS_ADDRESS}、${record?.MERCHANTS_TEL}`,// 购方地址、电话 buyerBankAndAccount: `${record?.BANK_NAME}${record?.BANK_ACCOUNT}`,// 购方银行、账号 buyerRecipientPhone: record?.RECEIVE_PHONENUMBER,// 购方收票手机号 buyerRecipientMail: record?.RECEIVE_EMAIL,// 购方收件邮箱 redReason: formData?.redReasonSelect || "", autoMerge: "0", // blueinvoiceNo: '23249322851717775360', blueinvoiceNo: result[0].invoiceNumber, // originalIssueTime: record?.originalIssueTime, // blueInvoiceType: record?.blueInvoiceType, blueinvoiceCode: "", billDetail: billDetailReq } // 构造原始数据 const originalData = [obj]; // 将record作为data数组的一项 // 将data字段进行base64加密 const dataString = JSON.stringify(originalData); const encryptedData = btoa(unescape(encodeURIComponent(dataString))); // base64编码,支持中文 // 构造开票请求数据 const invoiceData = { businessSystemCode: "BUSINESS_YCIC", // 来源系统编码 interfaceCode: "BILL.PUSH", // 接口业务编码 requestId: Date.now().toString(), // 时间戳作为请求ID data: encryptedData // 加密后的data字符串 }; // const response = await handleGetKaiPiao(invoiceData, accessToken); let newreq: any = { name: "", value: encryptAES(JSON.stringify({ ReqUrl: `https://cosmic.piaozone.com/ynjtjtjykf/kapi/app/sim/openApi?access_token=${accessToken}`, Access_token: accessToken, data: JSON.stringify(invoiceData) })) } let response = await handleGetForwardJDPJInterface(newreq) response = JSON.parse(response as any) setShowModal(false) setCurrentRow(null) if (response.success) { message.success('红冲成功!') // 同步流程的 加上红冲中的状态 await handleSynchroAPPLYAPPROVEFun(3, record) let redReasonObj: any = { "1": "销货退回", "2": "开票有误", "3": "开票中止", "4": "销售折让", } // 同步旧票子 变为 红冲申请中 await handleSynchroBILL(2, { ...record, billDetail: billDetail }) // 针对这个红冲 开一张新票子 编码为新的红冲编码 状态为9000 开票中 且票据类型变为 3000 红票 BILL_TYPE await handleUpdateOldBill({ ...record, billDetail: billDetail, BILL_TYPE: 3000, BILL_STATE: 9000, BILL_NO: `HC-${record?.BILL_NO}`, BILL_DATE: moment().format('YYYY-MM-DD'), BILL_DESC: formData?.redReasonSelect ? redReasonObj[formData?.redReasonSelect] : "", BILL_ID: "", BILL_TAXAMOUNT: -record?.BILL_TAXAMOUNT, BILL_AMOUNT: -record?.BILL_AMOUNT, INVOICE_TAXAMOUNT: -record?.INVOICE_TAXAMOUNT, INVOICE_AMOUNT: -record?.INVOICE_AMOUNT, }) actionRef.current?.reload() } else { message.error(response.message) } setConfirmLoading(false) } // 开票处理函数 const handleInvoice = async (record: Datum) => { try { message.loading({ content: '正在发起开票...', key: 'invoice' }); // 检查是否有access_token if (!accessToken) { message.error({ content: '缺少访问令牌,请先刷新页面重新获取', key: 'invoice' }); return; } // 拿个票据明细 const billDetail = await handleGetBILLDETAILList({ SearchParameter: { BILL_ID: record?.BILL_ID }, PageIndex: 1, PageSize: 999999, SortStr: "BILLDETAIL_ID" }) let billDetailReq: any = [] if (billDetail && billDetail.length > 0) { billDetail.forEach((item: any) => { billDetailReq.push({ amount: item.INVOICE_AMOUNT, // 明细金额 detailId: item.BILLDETAIL_ID, // 业务系统明细id goodsName: item.ITEM_NAME,// 商品名称 lineProperty: 2, // 行性质 price: item.INVOICE_PRICE,// 单价 quantity: item.INVOICE_COUNT,// 数量 revenueCode: item.TABLE_NAME,// 税收分类编码 taxRate: (item.DUTY_PARAGRAPH / 100).toFixed(2),// 税率 units: item.ITEM_UNIT,// 计量单位 }) }) } let obj: any = { billNo: record?.BILL_NO, // 单据编号 billDate: moment(record?.BILL_DATE).format('YYYY-MM-DD'), // 单据日期 totalAmount: record?.INVOICE_TAXAMOUNT, // 单据金额 includeTaxFlag: record?.ACCOUNTED_TYPE,// 判断是否含税 autoInvoice: "1",// 自动开票标记 invoiceType: record?.BILL_TYPE == 1000 ? '08xdp' : record?.BILL_TYPE == 2000 ? '10xdp' : '', //发票种类 buyerTaxpayerId: cleanString(record?.TAXPAYER_IDENTIFYCODE),// 购方税号 buyerName: record?.MERCHANTS_NAME, // 购买方名称 buyerProperty: "0", // 购买方性质 0-企业,1-个人,2-非企业单位 // sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死 sellerTaxpayerId: publicParams.sellerTaxpayerId, // 销方税号 写死 // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死 sellerName: publicParams.sellerName, // 销方名称 写死 sellerBankAndAccount: "", // 销方银行和账号 写死 sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传 payee: "周洁萍", // 收款人 reviewer: "杨尚涛",// 复核人 drawer: "杨木青",// 开票人 buyerAddressAndTel: `${record?.MERCHANTS_ADDRESS}、${record?.MERCHANTS_TEL}`,// 购方地址、电话 buyerBankAndAccount: `${record?.BANK_NAME}${record?.BANK_ACCOUNT}`,// 购方银行、账号 buyerRecipientPhone: record?.RECEIVE_PHONENUMBER,// 购方收票手机号 buyerRecipientMail: record?.RECEIVE_EMAIL,// 购方收件邮箱 // redReason: record?.BILL_DESC, // blueinvoiceNo: record?.blueinvoiceNo, // originalIssueTime: record?.originalIssueTime, // blueInvoiceType: record?.blueInvoiceType, // blueinvoiceCode: record?.blueinvoiceCode, billDetail: billDetailReq } // 构造原始数据 const originalData = [obj]; // 将record作为data数组的一项 // 将data字段进行base64加密 const dataString = JSON.stringify(originalData); const encryptedData = btoa(unescape(encodeURIComponent(dataString))); // base64编码,支持中文 // 构造开票请求数据 const invoiceData = { businessSystemCode: "BUSINESS_YCIC", // 来源系统编码 interfaceCode: "BILL.PUSH", // 接口业务编码 requestId: Date.now().toString(), // 时间戳作为请求ID data: encryptedData // 加密后的data字符串 }; // const response = await handleGetKaiPiao(invoiceData, accessToken); let newreq: any = { name: "", value: encryptAES(JSON.stringify({ ReqUrl: `https://cosmic.piaozone.com/ynjtjtjykf/kapi/app/sim/openApi?access_token=${accessToken}`, Access_token: accessToken, data: JSON.stringify(invoiceData) })) } let response = await handleGetForwardJDPJInterface(newreq) response = JSON.parse(response as any) if (response && response.success) { let res: any = JSON.parse(decodeURIComponent(escape(atob(response.data)))); message.success({ content: `单据 ${record.BILL_NO} 开票申请已提交成功`, key: 'invoice' }); actionRef.current?.reload() // 他们的调用成功了 再调用我们自己的 同步票据信息表 的接口 handleSynchroBILL(1, record) } else { message.error({ content: `开票申请失败: ${response?.message || '未知错误'}`, key: 'invoice' }); } } catch (error) { console.error('开票错误:', error); message.error({ content: '开票申请失败,请重试', key: 'invoice' }); } }; // 退回开票 const handleReturnInvoice = async (record: any) => { let req: any = { ...record, BILL_STATE: 1000, BILL_NO: `【退】${record?.BILL_NO}` } const data = await handleSynchroBILLInterface(req) if (data.Result_Code === 100) { message.success('退回成功!'); actionRef.current?.reload() } else { message.error(data.Result_Desc) } } // 在这个页面获取token const handleGetTokenInPage = async () => { // 老 // let req: any = { // appId: publicParams.appId, // appSecret: publicParams.appSecret, // accountId: publicParams.accountId, // tenantid: publicParams.tenantId, // language: "" // // appId: "FPY001", // // appSecret: "FPY001fpy@2023***", // // accountId: "2280459335882518528", // // tenantid: "xhcamzchwbgonerr", // // language: "" // } // const token = await handleGetAppToken(req) // 新 let req: any = { ReqUrl: "https://cosmic.piaozone.com/ynjtjtjykf/api/getAppToken.do", Access_token: "", data: JSON.stringify({ appId: publicParams.appId, appSecret: publicParams.appSecret, accountId: publicParams.accountId, tenantid: publicParams.tenantId, language: "" }) } let newreq: any = { name: "", value: encryptAES(JSON.stringify(req)) } let token = await handleGetForwardJDPJInterface(newreq) let tokenData = token ? JSON.parse(token as any) : "" let appToken: any = tokenData.data.app_token // 老 // let tokenReq: any = { // // user: "18620126214", // user: publicParams.user, // apptoken: appToken, // tenantid: publicParams.tenantId, // accountId: publicParams.accountId, // usertype: "" // // apptoken: appToken, // // tenantid: "xhcamzchwbgonerr", // // accountId: "2280459335882518528", // // usertype: "" // } // const accessToken: any = await handleGetSDToken(tokenReq) // 新 let tokenReq: any = { ReqUrl: "https://cosmic.piaozone.com/ynjtjtjykf/api/login.do", Access_token: "", data: JSON.stringify({ user: publicParams.user, apptoken: appToken, tenantid: publicParams.tenantId, accountId: publicParams.accountId, usertype: "" }) } let newTokenReq: any = { name: "", value: encryptAES(JSON.stringify(tokenReq)) } let accessTokenData = await handleGetForwardJDPJInterface(newTokenReq) let accessToken = JSON.parse(accessTokenData as any) setAppToken(appToken) setAccessToken(accessToken.data.access_token) // const queryData = { // // sellerTaxpayerId: "91530112MA7MQ2JR9U", // sellerTaxpayerId: publicParams.sellerTaxpayerId, // serialNo: '202509-401206-0014', // }; // // 将data字段进行base64加密 // const dataStringOld = JSON.stringify(queryData); // const encryptedDataOld = btoa(unescape(encodeURIComponent(dataStringOld))); // // 构造最终请求参数 // const requestParams = { // businessSystemCode: "BUSINESS_YCIC", // interfaceCode: "BILL.INVOICE.QUERY", // requestId: Date.now().toString(), // data: encryptedDataOld // }; // let reqResult: any = { // ReqUrl: `https://cosmic.piaozone.com/ynjtjtjykf/kapi/app/sim/openApi?access_token=${accessToken.data.access_token}`, // Access_token: accessToken.data.access_token, // data: JSON.stringify(requestParams) // } // let responseOld = await handleGetForwardJDPJInterface(reqResult) // responseOld = JSON.parse(responseOld as any) // 老 // // 调用查询接口 (这里需要传入正确的code参数) // const responseOld = await handleGetInvoiceSearch(requestParams, accessToken.data.access_token); // let result: any = [] // if (responseOld && responseOld.success) { // let res = JSON.parse(decodeURIComponent(escape(atob(responseOld.data)))) // result = res[0].invoiceList // } else { // return // } } const handleSynchroBILL = async (type: number, obj: any) => { // type 1 开票的同步状态 即 9000 2 开票的红冲状态 即 9990 // 发票明细列表 let detailList: any = [] if (obj?.billDetail && obj?.billDetail.length > 0) { obj?.billDetail.forEach((item: any) => { detailList.push({ ITEM_NAME: item.goodsName,// 款项名称 ITEM_RULE: item.specification,// 规格型号 ITEM_UNIT: item.units,// 计量单位 INVOICE_COUNT: item.quantity,// 开票数量 INVOICE_PRICE: item.price,// 开票单价 INVOICE_AMOUNT: item.amount,// 开票金额 DUTY_PARAGRAPH: item.taxRate,// 开票税率 INVOICE_TAX: item.taxAmount,// 开票税额 INVOICE_DISCOUNT: item.discountAmount,// 折扣金额 INVOICE_DISCOUNTTAX: "",// 折扣税额 ITEM_ACTAMOUNT: "",// 款项价税合计 ITEM_DEDUCTIONAMOUNT: "",// 扣除额 ITEM_ID: "",// 关联数据表内码(多个) TABLE_NAME: "",// 数据表名称 OPERATE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'),// 操作时间 }) }) } let req: any = { ...obj, BILL_TYPE: obj.BILL_TYPE || "", // 票据类型(1000:增值税专用发票;2000:普通发票) , BILL_NO: obj?.BILL_NO || "",//票据编号 SERIAL_NO: obj?.SERIAL_NO || "",// 流水号(实际发票号码) BILL_TAXAMOUNT: obj?.BILL_TAXAMOUNT,// 含税开票金额 BILL_AMOUNT: obj?.BILL_AMOUNT,// 除税开票金额 DUTY_PARAGRAPH: obj?.DUTY_PARAGRAPH,// 开票税率 INVOICE_TAXAMOUNT: obj?.INVOICE_TAXAMOUNT,// 含税费用金额 INVOICE_AMOUNT: obj?.INVOICE_AMOUNT,// 除税费用金额 TAXTAIL_DIFFERENCE: obj?.TAXTAIL_DIFFERENCE,// 含税尾差 TAIL_DIFFERENCE: obj?.TAIL_DIFFERENCE,// 除税尾差 TAX_PRICE: obj?.TAX_PRICE,// 开票税金 SERVERPART_ID: obj?.SERVERPART_ID, SERVERPART_NAME: obj?.SERVERPART_NAME, SERVERPARTSHOP_ID: obj?.SERVERPARTSHOP_ID,// 门店内码 SERVERPARTSHOP_NAME: obj?.SERVERPARTSHOP_NAME,// 门店名称 MERCHANTS_ID: obj?.MERCHANTS_ID,// 商户内码 MERCHANTS_NAME: obj?.MERCHANTS_NAME,// 商户名称 BILL_PERSON: obj?.BILL_PERSON,// 开票人 BILL_DATE: obj?.BILL_DATE,// 开票日期 BANK_NAME: obj?.BANK_NAME,// 开户银行 BANK_ACCOUNT: obj?.BANK_ACCOUNT,// 银行账号 TAXPAYER_IDENTIFYCODE: cleanString(obj?.TAXPAYER_IDENTIFYCODE),// 统一信用代码 INTERBANK_NO: obj?.INTERBANK_NO,// 联行号 TAXPAYER_CODE: obj?.sellerTaxpayerId,// 开票方纳税人识别号 ACCOUNTED_TYPE: obj?.ACCOUNTED_TYPE,// 入账类型 ACCOUNTED_DATE: obj?.ACCOUNTED_DATE,// 入账时间 DOWNLOAD_URL: obj?.DOWNLOAD_URL,// 下载地址 RECEIVE_PHONENUMBER: obj?.RECEIVE_PHONENUMBER,// 收票方手机 RECEIVE_EMAIL: obj?.RECEIVE_EMAIL,// 收票方邮箱 BILL_STATE: type === 1 ? 9000 : type === 2 ? '9990' : '',// 票据状态 DetailList: obj?.DetailList,// 发票明细列表 } const data = await handleSynchroBILLInterface(req) } // 获取当前用户信息 const handleGetUserInfo = async (id: string) => { const req: any = { UserIdEncrypted: id } const data = await handleGetPassportInfoById(req) setCurrentUser(data) return data } // 同步操作的流程信息 审核通过 和 审核驳回 都要去调用一下 同步流程的方法 const handleSynchroAPPLYAPPROVEFun = async (type: number, obj: any) => { // type 1 审核通过 2 拒绝审核 3 红冲中 // obj 当前票据信息 const req: any = { ACTINST_NAME: type === 1 ? '审核开票申请' : type === 2 ? '驳回开票申请' : type === 3 ? "红冲发票申请" : "",// 状态名称 审核开票申请 || 驳回开票申请 APPROVE_TYPE: obj?.BILL_ID,// 票的id APPROVE_INFO: type === 1 ? '同意开票' : type === 2 ? '驳回开票' : type === 3 ? "红冲发票" : "",// 同意开票 || 驳回开票 STAFF_ID: currentUser?.ID, STAFF_NAME: currentUser?.Name, APPROVE_DATE: moment().format('YYYY-MM-DD HH:mm:ss'), APPROVE_STATE: type === 1 ? 9000 : type === 2 ? 1000 : type === 3 ? '9990' : "", APPROVE_DESC: "T_BILL" } let reqData: any = { name: "", value: encryptAES(JSON.stringify(req)) } const data = await handleSynchroAPPLYAPPROVE(reqData) } // 红冲的时候 同步原先的票子 传入红冲原因 const handleUpdateOldBill = async (record: any) => { let req: any = { ...record, } const data = await handleSynchroBILLInterface(req) } useEffect(async () => { // 先调用token 后续这个页面用得到 await handleGetTokenInPage() }, []) return (
{ return `${record?.billNo}` }} scroll={{ x: "100%", y: 'calc(100vh - 450px)' }} headerTitle={票据列表} search={{ span: 6, labelWidth: 100 }} request={async (params: any, sorter: any) => { const search = window.location.search; const addressParams = Object.fromEntries(new URLSearchParams(search).entries()); const userInfo = await handleGetUserInfo(addressParams.UserIdEncrypted) // 排序字段 const sortstr = Object.keys(sorter).map(n => { const value = sorter[n] return value ? `${n} ${value.replace('end', '')}` : '' }) // 获取票据信息表列表 const req: any = { SearchParameter: { SERVERPART_IDS: userInfo?.ServerpartIds, BILL_STATES: params?.BILL_STATE || "", BILL_TYPES: params?.BILL_TYPE || "", }, PageIndex: 1, PageSize: 999999, sortstr: sortstr.length ? sortstr.toString() : "BILL_ID desc", } const data = await handleGetBILLList(req) if (data && data.length > 0) { return { data: data, success: true } } return { data: [], success: true } // let req: any = { // appId: "FPY001", // appSecret: "FPY001fpy@2023***", // accountId: "2280459335882518528", // tenantid: "xhcamzchwbgonerr", // language: "" // } // const token = await handleGetAppToken(req) // let appToken: any = token.data.app_token // let tokenReq: any = { // user: "18620126214", // apptoken: appToken, // tenantid: "xhcamzchwbgonerr", // accountId: "2280459335882518528", // usertype: "" // } // const accessToken: any = await handleGetSDToken(tokenReq) // setAppToken(appToken) // setAccessToken(accessToken.data.access_token) // // 模拟数据 // const mockData: any = [ // // // 专票 // // { // // billNo: "SRM_202508220957", // 单据编号 // // billDate: "2025-08-22", // 单据日期 // // totalAmount: 10, // 单据金额 // // includeTaxFlag: "1",// 判断是否含税 // // autoInvoice: "1",// 自动开票标记 // // invoiceType: "10xdp", //发票种类 // // buyerName: "深圳市顺丰快运有限公司test01", // 购买方名称 // // buyerProperty: "0", // 购买方性质 // // sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死 // // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死 // // sellerBankAndAccount: "13710884704", // 销方银行和账号 写死 // // sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传 // // drawer: "测试人",// 开票人 // // buyerRecipientPhone: "18158132615",// 购方收票手机号 // // buyerRecipientMail: "",// 购方收件邮箱 // // amount: 10, // 明细金额 明细金额,含税标识includeTaxFlag=1时该金额为含税金额 // // detailId: "1194121661989796666",// 业务系统明细id 业务系统明细id,用于反写回原业务系统明细 【长度:50】 // // goodsName: "蜂胶口腔膜",// 商品名称 商品名称,与商品编码2填1,需提前在系统维护【长度:GBK92字节】 // // lineProperty: 2,// 行性质 行性质,1折扣行(折扣行必须紧跟被折扣的正常商品行),2正常商品行 // // price: 10,// 单价 单价【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,price有值则quantity必填,含税标识includeTaxFlag=1时该金额为含税金额 // // quantity: 1,// 数量 数量【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,quantity有值则price必填 // // revenueCode: "1070304990000000000",// 税收分类编码 税收分类编码,开票项补全或映射会补全税收分类编码,未走开票项补全或映射必填 // // taxRate: "0.13",// 税率 税率,【0.13,0.09,0.06等】。不传时根据开票项匹配税率 // // units: "个"// 计量单位 计量单位,【长度:GBK22字节】 // // // billDetail: [ // // // { // // // } // // // ] // // }, // // { // // billNo: "SRM_202508220966", // 单据编号 // // billDate: "2025-08-22", // 单据日期 // // totalAmount: 10, // 单据金额 // // includeTaxFlag: "1",// 判断是否含税 // // autoInvoice: "1",// 自动开票标记 // // invoiceType: "10xdp", //发票种类 // // buyerName: "深圳市顺丰快运有限公司test01", // 购买方名称 // // buyerProperty: "0", // 购买方性质 // // sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死 // // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死 // // sellerBankAndAccount: "13710884704", // 销方银行和账号 写死 // // sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传 // // drawer: "测试人",// 开票人 // // buyerRecipientPhone: "18158132615",// 购方收票手机号 // // buyerRecipientMail: "",// 购方收件邮箱 // // amount: 10, // 明细金额 明细金额,含税标识includeTaxFlag=1时该金额为含税金额 // // detailId: "1194121661989796666",// 业务系统明细id 业务系统明细id,用于反写回原业务系统明细 【长度:50】 // // goodsName: "蜂胶口腔膜",// 商品名称 商品名称,与商品编码2填1,需提前在系统维护【长度:GBK92字节】 // // lineProperty: 2,// 行性质 行性质,1折扣行(折扣行必须紧跟被折扣的正常商品行),2正常商品行 // // price: 10,// 单价 单价【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,price有值则quantity必填,含税标识includeTaxFlag=1时该金额为含税金额 // // quantity: 1,// 数量 数量【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,quantity有值则price必填 // // revenueCode: "1070304990000000000",// 税收分类编码 税收分类编码,开票项补全或映射会补全税收分类编码,未走开票项补全或映射必填 // // taxRate: "0.13",// 税率 税率,【0.13,0.09,0.06等】。不传时根据开票项匹配税率 // // units: "个"// 计量单位 计量单位,【长度:GBK22字节】 // // // billDetail: [ // // // { // // // } // // // ] // // }, // // // 普票 // // { // // billNo: "SRM_202508221427", // 单据编号 // // billDate: "2025-08-22", // 单据日期 // // totalAmount: -10, // 单据金额 // // includeTaxFlag: "1",// 判断是否含税 // // invoiceProperty: 0, // // autoMerge: 1, // // autoInvoice: 1,// 自动开票标记 // // invoiceType: "10xdp", //发票种类 // // buyerName: "深圳市顺丰快运有限公司test01", // 购买方名称 // // buyerProperty: "0", // 购买方性质 // // sellerTaxpayerId: "91530112MA7MQ2JR9U", // 销方税号 写死 // // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // 销方名称 写死 // // sellerBankAndAccount: "13710884704", // 销方银行和账号 写死 // // sellerAddressAndTel: "", // 销方地址和电话 写死 应该可以不传 // // drawer: "测试人",// 开票人 // // buyerRecipientPhone: "18158132615",// 购方收票手机号 // // buyerRecipientMail: "",// 购方收件邮箱 // // amount: -10, // 明细金额 明细金额,含税标识includeTaxFlag=1时该金额为含税金额 // // detailId: "1194121661989796666",// 业务系统明细id 业务系统明细id,用于反写回原业务系统明细 【长度:50】 // // goodsName: "蜂胶口腔膜",// 商品名称 商品名称,与商品编码2填1,需提前在系统维护【长度:GBK92字节】 // // lineProperty: 2,// 行性质 行性质,1折扣行(折扣行必须紧跟被折扣的正常商品行),2正常商品行 // // price: -10,// 单价 单价【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,price有值则quantity必填,含税标识includeTaxFlag=1时该金额为含税金额 // // quantity: 1,// 数量 数量【长度:整数位加小数位最大16位,小数位最多13,小数点占1位】,quantity有值则price必填 // // revenueCode: "1070304990000000000",// 税收分类编码 税收分类编码,开票项补全或映射会补全税收分类编码,未走开票项补全或映射必填 // // taxRate: "0.13",// 税率 税率,【0.13,0.09,0.06等】。不传时根据开票项匹配税率 // // units: "个",// 计量单位 计量单位,【长度:GBK22字节】 // // redReason: "2", // // blueInvoiceType: "026", // // originalIssueTime: "2025-08-24 15:00:00", // // blueinvoiceCode: "testBlueCode2025-08-25", // // blueinvoiceNo: "testBlueNo2025-08-25" // // // billDetail: [ // // // { // // // } // // // ] // // }, // // { // // billNo: "202508220003", // // billDate: "2025-08-22", // // autoInvoice: "1", // // includeTaxFlag: "0", // // invoiceProperty: "1", // // invoiceType: "10xdp", // // totalAmount: -8.85, // // buyerTaxpayerId: "91440300MA5G9GK78Y", // // buyerName: "深圳市顺丰快运有限公司test01", // // sellerTaxpayerId: "91530112MA7MQ2JR9U", // // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // // sellerBankAndAccount: "13710884704", // // sellerAddressAndTel: "高新技术产业园南区科技南十二路58996989", // // drawer: "王协芬", // // autoMerge: "0", // // blueinvoiceNo: "SRM_202508220966", // // redReason: "2", // // amount: -8.85, // // goodsName: "通天口服液", // // lineProperty: 2, // // price: -12, // // quantity: 5, // // revenueCode: "1070304990000000000", // // taxRate: "0.09", // // units: "盒" // // }, // // 普票 // { // billNo: "SRM_202509011376", // billDate: "2025-09-01", // autoInvoice: "1", // includeTaxFlag: "1", // invoiceProperty: "0", // invoiceType: "10xdp", // totalAmount: 10.00, // buyerTaxpayerId: "91440300MA5G9GK78Y", // buyerName: "深圳市顺丰快运有限公司test01", // sellerTaxpayerId: "91530112MA7MQ2JR9U", // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // sellerBankAndAccount: "13710884704", // sellerAddressAndTel: "高新技术产业园南区科技南十二路58996989", // drawer: "王协芬", // buyerRecipientPhone: "18158132615", // buyerRecipientMail: "", // billDetail: [ // { // amount: 5, // detailId: "11112222333344445555", // goodsName: "通天口服液", // lineProperty: 2, // price: 5, // quantity: 1, // revenueCode: "1070304990000000000", // taxRate: "0.13", // units: "盒" // }, // { // amount: 5, // detailId: "55554444333322221111", // goodsName: "通天口服液2", // lineProperty: 2, // price: 5, // quantity: 1, // revenueCode: "1070304990000000000", // taxRate: "0.13", // units: "盒" // } // ] // }, // // 专票 // { // billNo: "SRM_202509011377", // billDate: "2025-09-02", // autoInvoice: "1", // includeTaxFlag: "1", // invoiceProperty: "0", // invoiceType: "08xdp", // totalAmount: 10.00, // buyerTaxpayerId: "91440300MA5G9GK78Y", // buyerName: "深圳市顺丰快运有限公司test01", // buyerProperty: "1", // sellerTaxpayerId: "91530112MA7MQ2JR9U", // sellerName: "云南交投集团经营开发有限公司彩云驿商业管理分公司", // sellerBankAndAccount: "13710884704", // sellerAddressAndTel: "高新技术产业园南区科技南十二路58996989", // drawer: "王协芬", // buyerRecipientPhone: "18158132615", // buyerRecipientMail: "", // billDetail: [ // { // amount: 5, // detailId: "11112222333344445555", // goodsName: "通天口服液", // lineProperty: 2, // price: 5, // quantity: 1, // revenueCode: "1070304990000000000", // taxRate: "0.13", // units: "盒" // }, // { // amount: 5, // detailId: "55554444333322221111", // goodsName: "通天口服液2", // lineProperty: 2, // price: 5, // quantity: 1, // revenueCode: "1070304990000000000", // taxRate: "0.13", // units: "盒" // } // ] // } // ]; // return { // data: mockData, // success: true, // total: mockData.length // } }} columnsState={{ value: columnsStateMap, onChange: setColumnsStateMap, }} /> {/* 用来输入红冲原因的 */} { setShowModal(false) setCurrentRow(null) }} onOk={() => { modalFormRef.current?.validateFields().then(res => { if (res) { modalFormRef.current?.submit() } }) }} > { setConfirmLoading(true) handleRedGoBill(currentRow) }} > {/* */}
) } export default connect(({ user }: ConnectState) => ({ currentUser: user.data }))(InvoiceInquiry);