INT32 CJSKMakeInvoice::FPBL_Proc(string nsrsbh, string sksbbh, UINT32 SDate, UINT32 EDate, string &strErr) { DBG_PRINT(("FPBL_Proc Begin()")); CInvHead invHead; INT8 sqlbuf[128]; INT8 tmpBuf[128]; INT32 errcode = 0; XMLConstruct pXmlBuild; UINT32 nCount = 1; string filename(""); memset(tmpBuf, 0, sizeof(tmpBuf)); UINT8 ret = UsbDiskMount(tmpBuf); if (SUCCESS != ret) { DBG_PRINT(("挂载U盘失败")); strErr = "挂载U盘失败"; UsbDiskUnMount(); return JSK_FAILURE; } UINT32 uDate = SDate/100; DBG_PRINT(("uDate= %u",uDate)); sprintf(tmpBuf, "/mnt/%s%s%s_%s_%u_%s%s.DAT", XML_FILE_NAME_CGLPLBL,XML_FILE_NAME_KFSBM,nsrsbh.c_str(),sksbbh.c_str(),uDate,XML_FILE_NAME_ENCODE,"0001"); filename = tmpBuf; DBG_PRINT(("filename = %s", filename.c_str())); memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where KPRQ>=%u and KPRQ<=%u", SDate, EDate); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invHead.m_filter.append(sqlbuf); INT32 m_InvNum = invHead.GetRecordNum(); DBG_PRINT(("m_InvNum = %ld", m_InvNum)); if(m_InvNum > 0 ) { pXmlBuild.XMLConstructBegin("1.0", "gbk", "business"); pXmlBuild.m_RootElement->SetAttribute("id", "JSZZP"); pXmlBuild.m_RootElement->SetAttribute("comment", "卷式增普票"); pXmlBuild.m_RootElement->SetAttribute("version", "1.0"); } else { strErr = "该时间段没有开票信息!"; return JSK_FAILURE; } UINT32 date_StartNo = 0; //当天的发票起始号码 TDateTime tmpDateTime(SDate, 0); UINT32 TempDate = tmpDateTime.FormatInt(YYYYMMDD); DBG_PRINT(("TempDate = %u", TempDate)); while(TempDate <= EDate) { DBG_PRINT(("补录日期: %u", TempDate)); date_StartNo = 0; memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "WHERE KPRQ=%u order by NO limit 1", TempDate); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invHead.m_filter.append(sqlbuf); errcode = invHead.Load(); DBG_PRINT(("errcode = %u", errcode)); while (errcode == SQLITE_OK) //查到记录 { DBG_PRINT(("查询invhead表有内容!")); pXmlBuild.AddNode(pXmlBuild.m_RootElement, "body"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%u", nCount); pXmlBuild.AddAttr("no", tmpBuf); pXmlBuild.m_parentElement[1] = pXmlBuild.m_NewElement; pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "fpdm"); pXmlBuild.AddText(invHead.m_fpdm); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "fphm"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%08u", invHead.m_fphm); pXmlBuild.AddText(tmpBuf); TDateTime tmpdate(invHead.m_kprq, invHead.m_kpsj); string tmpKprq = tmpdate.FormatString(YYYYMMDD); DBG_PRINT(("tmpKprq= %s",tmpKprq.c_str())); string tmpKpsj = tmpdate.FormatString(HHMMSS); DBG_PRINT(("tmpKpsj= %s",tmpKpsj.c_str())); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "kprq"); //memset(tmpBuf, 0, sizeof(tmpBuf)); //sprintf(tmpBuf, "%08u", invHead.m_kprq); pXmlBuild.AddText(tmpKprq); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "kpsj"); // memset(tmpBuf, 0, sizeof(tmpBuf)); // sprintf(tmpBuf, "%u", invHead.m_kpsj); pXmlBuild.AddText(tmpKpsj); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "sbbh"); pXmlBuild.AddText(sksbbh); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "hjje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "-%.2lf", ((double)(invHead.m_kpje)*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "se"); memset(tmpBuf, 0, sizeof(tmpBuf)); if(invHead.m_kpse == 0) { sprintf(tmpBuf, "%.2lf", ((double)invHead.m_kpse *1.0)/SUM_EXTENSION); } else { sprintf(tmpBuf, "-%.2lf", ((double)invHead.m_kpse *1.0)/SUM_EXTENSION); } pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "jshj"); memset(tmpBuf, 0, sizeof(tmpBuf)); invHead.m_kphjje = invHead.m_kpje + invHead.m_kpse; sprintf(tmpBuf, "-%.2lf", ((double)invHead.m_kphjje *1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "hjje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)(invHead.m_kpje)*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "se"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)invHead.m_kpse *1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "jshj"); memset(tmpBuf, 0, sizeof(tmpBuf)); invHead.m_kphjje = invHead.m_kpje + invHead.m_kpse; sprintf(tmpBuf, "%.2lf", ((double)invHead.m_kphjje *1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "jym"); pXmlBuild.AddText(invHead.m_fwm); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "xfmc"); pXmlBuild.AddText(g_globalArgLib->m_corpInfo->m_Nsrmc); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "xfsh"); pXmlBuild.AddText(nsrsbh); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "gfmc"); pXmlBuild.AddText(invHead.m_fkdw); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "gfsh"); pXmlBuild.AddText(invHead.m_payerCode); string fpztbz(""); switch(invHead.m_kplx) { case JSK_NORMAL_INV: fpztbz = "0"; //正票 break; case JSK_RETURN_INV: fpztbz = "1"; //退票 break; case JSK_WASTE_INV: fpztbz = "2"; //空白废 break; case JSK_WASTE_NOR: fpztbz = "3"; //正废 break; case JSK_WASTE_RET: fpztbz = "4"; //负废 break; } //发票状态标志(0 正常票1 退票2新发票的作废发票3正常发票的作废发票4已开退票的作废发票) pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "fpbz"); pXmlBuild.AddText(fpztbz); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "skr"); pXmlBuild.AddText(invHead.m_sky); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "bz"); UINT8 baseBuf[256]; memset(baseBuf, 0, sizeof(baseBuf)); sprintf((INT8 *)baseBuf, "%s", invHead.m_backup1.c_str()); Base64_Encode_2(baseBuf, invHead.m_backup1.length()); string tmpStr = (INT8 *)baseBuf; pXmlBuild.AddText(tmpStr); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfpdm"); pXmlBuild.AddText(invHead.m_yfpdm); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfphm"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%u", invHead.m_yfphm); pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfpdm"); pXmlBuild.AddText(""); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfphm"); pXmlBuild.AddText(""); } if( (invHead.m_kplx == JSK_WASTE_NOR) || (invHead.m_kplx == JSK_WASTE_RET) || (invHead.m_kplx == JSK_WASTE_INV) ) { TDateTime zfDate(invHead.m_zfsj.c_str(), DATETIME_POS); string strZfrq = zfDate.FormatString(YYYYMMDD); DBG_PRINT(("strZfrq= %s",strZfrq.c_str())); string strZfsj=zfDate.FormatString(HHMMSS); DBG_PRINT(("strZfsj= %s",strZfsj.c_str())); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfrq"); memset(tmpBuf, 0, sizeof(tmpBuf)); //sprintf(tmpBuf, "%u", zfDate.FormatInt(YYYYMMDD)); pXmlBuild.AddText(strZfrq); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfsj"); memset(tmpBuf, 0, sizeof(tmpBuf)); //sprintf(tmpBuf, "%u", zfDate.FormatInt(HHMMSS)); pXmlBuild.AddText(strZfsj); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfrq"); pXmlBuild.AddText(""); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfsj"); pXmlBuild.AddText(""); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "qmz"); pXmlBuild.AddText(invHead.m_casign); CInvDet *pInvDet = invHead.pHead; for(int j=1; j<=invHead.m_sphsl; j++, pInvDet=pInvDet->pNext) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zb"); pXmlBuild.m_parentElement[2] = pXmlBuild.m_NewElement; pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "xh"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%u", pInvDet->m_sphxh); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "xm"); pXmlBuild.AddText(pInvDet->m_spmc); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "sl"); memset(tmpBuf, 0, sizeof(tmpBuf)); if(pInvDet->m_spsl < 0.001) { sprintf(tmpBuf, "0.00000000"); } else { sprintf(tmpBuf, "-%.3lf00000", pInvDet->m_spsl); } pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "sl"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.3lf00000", pInvDet->m_spsl); pXmlBuild.AddText(tmpBuf); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "hsdj"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.3lf00000", pInvDet->m_spdj); pXmlBuild.AddText(tmpBuf); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "hsje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "-%.2lf", ((double)pInvDet->m_spje*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "hsje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)pInvDet->m_spje*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "dj"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.3lf00000", pInvDet->m_dj); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "je"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)pInvDet->m_je*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "zsl"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", (double)pInvDet->m_sl); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "se"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)pInvDet->m_spse*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } nCount++; DBG_PRINT(("nCount = %u", nCount)); date_StartNo = invHead.m_no; sprintf(sqlbuf, "WHERE KPRQ=%u and NO>%u limit 1", TempDate, date_StartNo); invHead.m_filter.append(sqlbuf); errcode = invHead.Load(); } //-------------------------------------------------- //未找到票,查下一天 //-------------------------------------------------- if (errcode == SQLITE_DONE) { tmpDateTime ++; TempDate = tmpDateTime.FormatInt(YYYYMMDD); continue; } else { DBG_PRINT(("读数据库错误")); break; } } if( 1 != pXmlBuild.XMLConstructEnd(filename.c_str()) ) { strErr = "报存XML文件错误!"; return JSK_FAILURE; } UsbDiskUnMount(); return JSK_SUCCESS; }
INT32 CJSKMakeInvoice::FPSC_Proc(UINT8 czlx, UINT32 &fpzx, string &strInvInfo, string &strErr) { INT8 sqlbuf[128]; CInvServ invServ; CInvHead invHead; INT32 retcode = JSK_SUCCESS; INT32 errcode = 0; string tmpErr(""); // CJSKDeclareProc::DelUploadInv(); memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where UP_FLAG=0 or UP_FLAG=1 "); invServ.m_filter.append(sqlbuf); invServ.Requery(); errcode = invServ.LoadOneRecord(); DBG_PRINT(("errcode = %d", errcode)); if(errcode == SQLITE_OK) { if((invServ.m_code=="") || (invServ.m_InvNo==0)) errcode = SQLITE_DONE; } if(errcode != SQLITE_OK) { retcode = CJSKInfoFunc::GetFirstOffInvInfo(&invHead, tmpErr); if((invHead.m_fpdm=="") || (invHead.m_fphm==0)) retcode = JSK_FAILURE; if(retcode != JSK_SUCCESS) { g_globalArgLib->m_pthreadFlag = 0; g_globalArgLib->m_InvServNum = 0; retcode = JSK_COMMON_ERR_NO; strErr = "所有发票都已上传!"; return retcode; } memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u ", invHead.m_fpdm.c_str(), invHead.m_fphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invServ.m_filter.append(sqlbuf); invServ.Requery(); if(invServ.LoadOneRecord() == SQLITE_OK) { if(invServ.m_upFlag == INV_UPLOAD_FLAG2) { g_globalArgLib->m_pthreadFlag = 0; retcode = JSK_COMMON_ERR_NO; strErr = "发票上传错误,请核对!"; return retcode; } } invServ.m_code = invHead.m_fpdm; invServ.m_InvNo = invHead.m_fphm; invServ.m_fpsyh = invHead.m_fpsyh; } UINT32 invLen = 0; fpzx = 1; //发票张数 memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u ", invServ.m_code.c_str(), invServ.m_InvNo); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invHead.m_filter.append(sqlbuf); retcode = invHead.Load(); if(retcode != SQLITE_OK) { DBG_PRINT(("here query from JSK")); invHead.m_fpdm = invServ.m_code; invHead.m_fphm = invServ.m_InvNo; invHead.m_fpsyh = invServ.m_fpsyh; retcode = CJSKInfoFunc::GetInvDetailInfoNO(&invHead, g_invInfo, invLen, strErr); if(retcode != JSK_SUCCESS) { return retcode; } // if(invHead.Save() != SQLITE_OK) // { // retcode = JSK_COMMON_ERR_NO; // strErr = "发票信息保存数据库错误"; // return retcode; // } } else { DBG_PRINT(("here query from DB success")); //将invHead类转换成string类型输出 CJSKInfoFunc::MutexLock(); CJSKInfoFunc::InvDetail2Data(&invHead, g_invInfo, invLen); CJSKInfoFunc::MutexUnlock(); DBG_PRINT(("invLen = %u", invLen)); } DBG_PRINT(("invLen = %u", invLen)); AddInvDetail2Data(&invHead, g_invInfo, invLen); strInvInfo.append((INT8 *)g_invInfo); DBG_PRINT(("invLen = %u", invLen)); //更新上传标志 invServ.m_upFlag = INV_UPLOAD_FLAG1; DBG_PRINT(("sqlbuf = %s", sqlbuf)); invServ.Update(sqlbuf, &invServ.m_upFlag, NULL); return JSK_SUCCESS; }