package com.yc.open.baiwang.service; import com.baiwang.open.entity.ErrorResponse; import com.baiwang.open.entity.request.OutputInvoiceIssueRequest; import com.baiwang.open.entity.request.OutputRedinvoiceAddRequest; import com.baiwang.open.entity.request.node.OutputInvoiceIssueInvoiceDetail; import com.baiwang.open.entity.request.node.OutputInvoiceIssuePreInvoice; import com.baiwang.open.entity.request.node.OutputRedinvoiceAddObjectType; import com.baiwang.open.entity.response.OutputInvoiceIssueResponse; import com.baiwang.open.entity.response.OutputRedinvoiceAddResponse; import com.baiwang.open.entity.response.node.*; import com.yc.action.grid.GridUtils; import com.yc.exception.ApplicationException; import com.yc.open.mutual.schedule.GateEntity; import com.yc.service.BaseService; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; @Service public class BaiwangImpl extends BaseService implements BaiwangIfc { /** * 下载发票附件使用 * @param doccode * @return */ @Override public QueryEntiy getEinvoiceInfo(String doccode) { String sql = " select b.invoiceNo,c.vatCode as taxNo\n" + " from t150504H b \n" + " join ocompany c on c.companyid=b.companyid\n" + " where b.doccode=" + GridUtils.prossSqlParm(doccode); return this.jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(QueryEntiy.class)); } @Override public OutputInvoiceIssueRequest getEinvoiceInfo(GateEntity entity) { OutputInvoiceIssueRequest request = null; String sql = " select b.invoiceTypeCode,b.buyerTaxNo,case when isnull(b.paperInvoiceFlag,'')='' then 'N' else b.paperInvoiceFlag end as paperInvoiceFlag,isnull(b.invoiceType,0) as invoiceType,b.entername,\n" + " b.buyerTaxNo,b.buyerName,b.buyerBankName,b.buyerBankNumber,b.buyerAddress,b.buyerTelephone,b.HDMemo,b.buyerEmail,b.buyerPhone,\n" + " a.DocItem,a.MatName,a.Digit,a.netprice,a.netmoney,a.vatrate,c.vatCode,c.BankCode,c.BankAccount,c.Province,c.City,c.Street,c.Tel1,d.TaxCatalogCode\n" + " from t150504H b join t150504D a on a.doccode=b.DocCode" + " join ocompany c on c.companyid=b.companyid\n" + " join t110503 d on a.matcode=d.matcode\n" + " where b.doccode=" + GridUtils.prossSqlParm(entity.getDocCode())+" order by a.docitem asc"; List> list = this.jdbcTemplate.queryForList(sql); if (list != null && list.size() > 0) { request = new OutputInvoiceIssueRequest(); OutputInvoiceIssuePreInvoice preInvoice = new OutputInvoiceIssuePreInvoice(); List detail = new ArrayList<>(); int docItem = 1;//行号 for (Map map : list) { if (StringUtils.isBlank(GridUtils.prossRowSetDataType_String(map, "TaxCatalogCode"))) { throw new ApplicationException(String.format("%s:税收分类编码不能为空,请在110503维护好对应的分类编码", GridUtils.prossRowSetDataType_String(map, "MatName"))); } if (StringUtils.isBlank(request.getTaxNo())) { //销售方税号 request.setTaxNo(GridUtils.prossRowSetDataType_String(map, "vatCode")); //发票种类编码,01:全电发票(增值税专用发票) 02:全电发票(普通发票) preInvoice.setInvoiceTypeCode(GridUtils.prossRowSetDataType_String(map, "invoiceTypeCode")); if(!"01".equals(preInvoice.getInvoiceTypeCode())&&!"02".equals(preInvoice.getInvoiceTypeCode())){ throw new ApplicationException("只能开具全电发票(增值税专用发票),全电发票(普通发票)"); } //全电纸质发票标志(Y是N否) preInvoice.setPaperInvoiceFlag(GridUtils.prossRowSetDataType_String(map, "paperInvoiceFlag")); //开票类型 0:正数发票(蓝票) 1:负数发票(红票)默认0 preInvoice.setInvoiceType(GridUtils.prossRowSetDataType_String(map, "invoiceType")); //开票流水号, 唯一标志开票请求。支持数字字母下划线组合 preInvoice.setSerialNo(entity.getDbid() + "_" + entity.getFormid() + "_" + entity.getDocCode() + "_" + RandomStringUtils.randomAlphanumeric(5)); //购方单位税号, invoiceTypeCode=004、028、01(增值税专用发票 //、增值税电子专用发票、全电发票(增值税专用发票))开具时必传 preInvoice.setBuyerTaxNo(GridUtils.prossRowSetDataType_String(map, "buyerTaxNo")); //购方单位名称 preInvoice.setBuyerName(GridUtils.prossRowSetDataType_String(map, "buyerName")); //购方地址及电话, 增值税专用发票开具时必填,发票类型代码为 //01、02时该字段拆分为地址电话两个字段 preInvoice.setBuyerAddress(GridUtils.prossRowSetDataType_String(map, "buyerAddress")); preInvoice.setBuyerTelphone(GridUtils.prossRowSetDataType_String(map, "buyerTelephone")); //购方开户行及账号, 增值税专用发票开具时必填,发票类型代码为 //01、02时该字段拆分为银行名称、账号两个字段 preInvoice.setBuyerBankName(GridUtils.prossRowSetDataType_String(map, "buyerBankName")); preInvoice.setBuyerBankNumber(GridUtils.prossRowSetDataType_String(map, "buyerBankNumber")); //开票人 preInvoice.setDrawer(entity.getUserName()); //备注 preInvoice.setRemarks(GridUtils.prossRowSetDataType_String(map, "HDMemo")); //客户邮箱 preInvoice.setBuyerEmail(GridUtils.prossRowSetDataType_String(map, "buyerEmail")); //客户电话 preInvoice.setBuyerPhone(GridUtils.prossRowSetDataType_String(map, "buyerPhone")); //销方地址及电话, 增值税专用发票开具时必填,发票类型代码为 //01、02时该字段拆分为地址电话两个字段 preInvoice.setSellerAddress(GridUtils.prossRowSetDataType_String(map, "Province") + GridUtils.prossRowSetDataType_String(map, "City") + GridUtils.prossRowSetDataType_String(map, "Street")); preInvoice.setSellerTelphone(GridUtils.prossRowSetDataType_String(map, "Tel1")); //销方开户行及账号, 增值税专用发票开具时必填,发票类型代码为 //01、02时该字段拆分为银行名称、账号两个字段 preInvoice.setSellerBankName(GridUtils.prossRowSetDataType_String(map, "BankCode")); preInvoice.setSellerBankNumber(GridUtils.prossRowSetDataType_String(map, "BankAccount")); } //商品明细节点 OutputInvoiceIssueInvoiceDetail item = new OutputInvoiceIssueInvoiceDetail(); //明细行号 item.setGoodsLineNo(docItem); //税收分类编码(末级节点) item.setGoodsCode(GridUtils.prossRowSetDataType_String(map, "TaxCatalogCode")); //商品名称 item.setGoodsName(GridUtils.prossRowSetDataType_String(map, "MatName")); //商品数量,总长13位 item.setGoodsQuantity(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "Digit"))); //商品单价,总长13位 item.setGoodsPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "netprice"))); //金额,小数点后2位 item.setGoodsTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "netmoney"))); //税率 item.setGoodsTaxRate(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "vatrate"))); detail.add(item); docItem++; } preInvoice.setInvoiceDetailsList(detail); request.setData(preInvoice); } return request; } @Override public OutputRedinvoiceAddRequest getRedEinvoiceInfo(GateEntity entity) { OutputRedinvoiceAddRequest request = null; String sql = "select b.buyerName,b.buyerBankName,b.buyerBankNumber,b.buyerAddress,b.buyerTelephone,b.HDMemo,b.SumNetMoney,b.sumVatMoney,b.redInvoiceLabel,b.sumVatMoney,b.buyerTaxNo,\n" + " a.DocItem,a.MatName,a.Digit,a.netprice,a.netmoney,a.vatmoney,a.vatrate,a.UOM,\n" + " c.vatCode,c.BankCode,c.BankAccount,c.Province,c.City,c.Street,c.Tel1,c.companyName,d.TaxCatalogCode,e.SPBMJC,\n" + " g.SumNetMoney as originInvoiceTotalPrice,g.sumVatMoney as originInvoiceTotalTax,g.invoiceTypeCode as originInvoiceType ,case when isnull(g.paperInvoiceFlag,'')='' then 'N' else g.paperInvoiceFlag end as originalPaperInvoiceCode,isnull(g.invoiceType,0) as originInvoiceType,g.invoiceNo as originalInvoiceNo,g.invoiceDate as originInvoiceDate,f.docitem as originalInvoiceDetailNo \n" + " from t150504H b join t150504D a on a.doccode=b.DocCode\n" + " join ocompany c on c.companyid=b.companyid\n" + " join t110503 d on a.matcode=d.matcode\n" + " join t110575 e on e.BM=d.TaxCatalogCode\n " + " join t150504D f on a.refcodeitem2 = f.doccode and a.refrowid2 = f.rowid \n" + " join t150504H g on a.refcodeitem2 = g.DocCode\n" + " where b.doccode=" + GridUtils.prossSqlParm(entity.getDocCode())+" order by a.docitem asc"; List> list = this.jdbcTemplate.queryForList(sql); if (list != null && list.size() > 0) { request = new OutputRedinvoiceAddRequest(); List detail = new ArrayList<>(); int docItem = 1;//行号 for (Map map : list) { if (StringUtils.isBlank(request.getTaxNo())) { //机构税号 request.setTaxNo(GridUtils.prossRowSetDataType_String(map, "vatCode")); //红字确认单流水号,调用方传递 request.setRedConfirmSerialNo(entity.getDbid() + "_" + entity.getFormid() + "_" + entity.getDocCode() + "_" + RandomStringUtils.randomAlphanumeric(5)); //录入方身份 01:销方,02:购方 request.setEntryIdentity("01"); //销售方统一社会信用代码/纳税人识别号/身份证件号码 request.setSellerTaxNo(GridUtils.prossRowSetDataType_String(map, "vatCode")); //销售方名称 request.setSellerTaxName(GridUtils.prossRowSetDataType_String(map, "companyName")); //购买方名称 request.setBuyerTaxName(GridUtils.prossRowSetDataType_String(map, "buyerName")); //购买方税号 request.setBuyerTaxNo(GridUtils.prossRowSetDataType_String(map, "buyerTaxNo")); //全电纸质发票标志(Y是N否) request.setOriginInvoiceIsPaper(GridUtils.prossRowSetDataType_String(map, "originalPaperInvoiceCode")); //蓝字发票全电发票号码,【发票来源】为2时必填 request.setOriginalInvoiceNo(GridUtils.prossRowSetDataType_String(map, "originalInvoiceNo")); //蓝字发票开票日期 yyyy-MM-dd HH:mm:ss DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); LocalDateTime dateTime = LocalDateTime.parse(GridUtils.prossRowSetDataType_String(map, "originInvoiceDate"), formatter); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String outputDate = dateTime.format(outputFormatter); request.setOriginInvoiceDate(outputDate); //蓝字发票合计金额 request.setOriginInvoiceTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "originInvoiceTotalPrice"))); //蓝字发票合计税额 request.setOriginInvoiceTotalTax(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "originInvoiceTotalTax"))); //蓝字发票票种代码 01:增值税专用发票 02:普通发票 03:机动 //车统一销售发票 04:二手车统一销售发票 request.setOriginInvoiceType(GridUtils.prossRowSetDataType_String(map, "originInvoiceType")); //红字冲销金额 request.setInvoiceTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "SumNetMoney"))); //红字冲销税额 request.setInvoiceTotalTax(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "sumVatMoney"))); //红字发票冲红原因代码 01:开票有误 02:销货退回 03:服务中止 04:销售折让 request.setRedInvoiceLabel(GridUtils.prossRowSetDataType_String(map, "redInvoiceLabel")); //发票来源:全电平台红冲必须要传递的字段 // 1:增值税发票管理系统:表示此发票是通过原税控系统开具的增值税发票,红冲此类发票时,税控设备需注销后才可以申请全电的红字确认单; // 2:电子发票服务平台:表示此发票是通过电子发票服务平台开具的全电发票(包括全电纸质发票),红冲此类发票时需要传递蓝票属性为此 request.setInvoiceSource("2"); if(StringUtils.isBlank(request.getOriginalInvoiceNo())){ throw new ApplicationException("蓝字发票全电发票号码不能为空"); } if(StringUtils.isBlank(request.getRedInvoiceLabel())){ throw new ApplicationException("红字发票冲红原因不能为空"); } if(StringUtils.isBlank(request.getInvoiceTotalPrice()+"")){ throw new ApplicationException("冲销金额不能为空"); } if(StringUtils.isBlank(request.getInvoiceTotalTax()+"")){ throw new ApplicationException("冲销税额不能为空"); } } //商品明细节点 OutputRedinvoiceAddObjectType item = new OutputRedinvoiceAddObjectType(); //明细行号 item.setGoodsLineNo(docItem); //蓝字发票明细序号 item.setOriginalInvoiceDetailNo(docItem); //税收分类编码(末级节点) item.setGoodsCode(GridUtils.prossRowSetDataType_String(map, "TaxCatalogCode")); //商品服务简称(税收分类简称) item.setGoodsSimpleName(GridUtils.prossRowSetDataType_String(map, "SPBMJC")); //项目名称(自定义商品名称) item.setProjectName(GridUtils.prossRowSetDataType_String(map, "MatName")); //商品全称( 简称自定义名称) item.setGoodsName("*"+item.getGoodsSimpleName()+"*"+item.getProjectName()); item.setGoodsQuantity(GridUtils.prossRowSetDataType_String(map, "Digit")); item.setGoodsPrice(GridUtils.prossRowSetDataType_String(map, "netprice")); //金额,小数点后2位 item.setGoodsTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "netmoney"))); //税额 item.setGoodsTotalTax(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "vatmoney"))); //税率 item.setGoodsTaxRate(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "vatrate"))); detail.add(item); docItem++; } request.setRedConfirmDetailReqEntityList(detail); } return request; } @Transactional(rollbackFor = Exception.class) @Override public void sendLog(GateEntity entity, OutputInvoiceIssueResponse issue) { OutputInvoiceIssue response = issue.getResponse(); String sql="set nocount on \n" + " declare @DocCode varchar(50),@FormID int=150523 ,@now datetime=getdate(),@DocDate datetime,@PeriodID varchar(50),@refCode varchar(50),@refformid int,\n" + " @refFormType int=5 ,@CompanyID varchar(50),@CompanyName varchar(150),@CcCode varchar(50),@CcName varchar(150),@CltCode varchar(50),@CltName varchar(150),@invoiceStatus varchar(50),@serialNo varchar(50),@invoiceTotalPrice money,\n" + " @invoiceTotalTax money,@invoiceTotalPriceTax money,@invoiceCode varchar(50),@invoiceNo varchar(50),@invoiceCheckCode varchar(50),@invoiceDate varchar(50),@invoiceQrCode varchar(max),@taxControlCode varchar(50),\n" + " @invoiceTypeCode varchar(50),@eInvoiceUrl varchar(250),@method varchar(50),@requestId varchar(50),@code varchar(50),@message varchar(2500),@subCode varchar(50),@subMessage varchar(2500),@RowId varchar(50),@goodsLineNo varchar(50),\n" + " @invoiceLineNature varchar(50),@goodsCode varchar(50),@goodsName varchar(150),@goodsSpecification varchar(50),@goodsUnit varchar(50),@goodsQuantity money,@goodsPrice money,@goodsTotalPrice money,@goodsTotalTax money,\n" + " @goodsTaxRate money,@priceTaxMark money,@vatSpecialManagement varchar(50),@freeTaxMark varchar(150),@preferentialMark varchar(50) \n" + " exec sp_newdoccode 150523,'SYSTEM',@DocCode output \n" + " select @DocDate = convert(datetime,convert(varchar(10),GETDATE(),120) ) \n" + " select @CompanyID=CompanyID,@CompanyName=CompanyName,@CltCode=CltCode,@CltName=CltName,@ccCode=ccCode,@ccName=ccName,@refCode=DocCode,@refformid=FormID from t150504H where doccode="+GridUtils.prossSqlParm(entity.getDocCode()) +"\n"+ " select @PeriodId = dbo.GetPeriodID(@FormID,@CompanyID,@now)\n"; sql+=" select @invoiceStatus='"+(issue.isSuccess()?"success":"fail") +"',@method="+GridUtils.prossSqlParm(issue.getMethod())+",@requestId="+GridUtils.prossSqlParm(issue.getRequestId()); if(issue.isSuccess()) { OutputInvoiceIssueInvoiceResult result = response.getSuccess().get(0); String formattedDateTime=result.getInvoiceCode(); if(StringUtils.isNotBlank(formattedDateTime)) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); LocalDateTime dateTime = LocalDateTime.parse(result.getInvoiceDate(), formatter); formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } sql+= " select @invoiceCode="+GridUtils.prossSqlParm(result.getInvoiceCode())+",@invoiceNo="+GridUtils.prossSqlParm(result.getInvoiceNo())+",@invoiceCheckCode="+GridUtils.prossSqlParm(result.getInvoiceCheckCode())+",@invoiceDate="+GridUtils.prossSqlParm(formattedDateTime)+",@invoiceQrCode="+GridUtils.prossSqlParm(result.getInvoiceQrCode())+",@taxControlCode="+GridUtils.prossSqlParm(result.getTaxControlCode())+",@invoiceTypeCode="+GridUtils.prossSqlParm(result.getInvoiceTypeCode())+",@serialNo="+GridUtils.prossSqlParm(result.getSerialNo())+",@eInvoiceUrl="+GridUtils.prossSqlParm(result.getEInvoiceUrl())+",@invoiceTotalPrice="+result.getInvoiceTotalPrice()+",@invoiceTotalTax="+result.getInvoiceTotalTax()+",@invoiceTotalPriceTax="+result.getInvoiceTotalPriceTax()+" \n"+ "insert into t150523H(DocCode,FormID,DocDate,PeriodID,refCode,refformid,refFormType,CompanyID,CompanyName,CcCode,CcName,CltCode,CltName,invoiceStatus,invoiceCode,invoiceNo,invoiceCheckCode,invoiceDate,invoiceQrCode,taxControlCode,invoiceTypeCode,serialNo,eInvoiceUrl,method,requestId,invoiceTotalPrice,invoiceTotalTax,invoiceTotalPriceTax,docstatus) values(@DocCode,@FormID,@DocDate,@PeriodID,@refCode,@refformid,@refFormType,@CompanyID,@CompanyName,@CcCode,@CcName,@CltCode,@CltName,@invoiceStatus,@invoiceCode,@invoiceNo,@invoiceCheckCode,@invoiceDate,@invoiceQrCode,@taxControlCode,@invoiceTypeCode,@serialNo,@eInvoiceUrl,@method,@requestId,@invoiceTotalPrice,@invoiceTotalTax,@invoiceTotalPriceTax,100) \n"; for(OutputInvoiceIssuePreInvoiceDetailVO detail:result.getInvoiceDetailsList()){ //明细行 sql+= " exec getXXXX @rowId output \n" + " select @goodsLineNo="+detail.getGoodsLineNo()+",@goodsCode="+GridUtils.prossSqlParm(detail.getGoodsCode())+",@goodsName="+GridUtils.prossSqlParm(detail.getGoodsName())+",@goodsUnit="+GridUtils.prossSqlParm(detail.getGoodsUnit())+",@goodsQuantity="+detail.getGoodsQuantity()+",@goodsPrice="+detail.getGoodsPrice()+",@goodsTotalPrice="+detail.getGoodsTotalPrice()+",@goodsTotalTax="+detail.getGoodsTotalTax()+",@goodsTaxRate="+detail.getGoodsTaxRate()+",@priceTaxMark="+GridUtils.prossSqlParm(detail.getPriceTaxMark())+"\n"+ " insert into t150523D(DocCode,RowId,goodsLineNo,goodsCode,goodsName,goodsUnit,goodsQuantity,goodsPrice,goodsTotalPrice,goodsTotalTax,goodsTaxRate,priceTaxMark) values(@DocCode,@RowId,@goodsLineNo,@goodsCode,@goodsName,@goodsUnit,@goodsQuantity,@goodsPrice,@goodsTotalPrice,@goodsTotalTax,@goodsTaxRate,@priceTaxMark)"; } }else { ErrorResponse errorResponse = issue.getErrorResponse(); OutputInvoiceIssueInvoice fail = response.getFail().get(0); sql+=" select @code="+GridUtils.prossSqlParm(errorResponse.getCode())+",@message="+GridUtils.prossSqlParm(errorResponse.getMessage())+",@subCode="+GridUtils.prossSqlParm(errorResponse.getSubCode())+",@subMessage="+GridUtils.prossSqlParm(errorResponse.getSubMessage())+",@serialNo="+GridUtils.prossSqlParm(fail.getSerialNo())+",@invoiceTotalPrice="+fail.getInvoiceTotalPrice()+",@invoiceTotalTax="+fail.getInvoiceTotalTax()+",@invoiceTotalPriceTax="+fail.getInvoiceTotalPriceTax()+" \n"+ //表头 " insert into t150523H(DocCode,FormID,DocDate,PeriodID,refCode,refformid,refFormType,CompanyID,CompanyName,CcCode,CcName,CltCode,CltName,invoiceStatus,serialNo,invoiceTotalPrice,invoiceTotalTax,invoiceTotalPriceTax,method,requestId,code,message,subCode,subMessage,docstatus) values(@DocCode,@FormID,@DocDate,@PeriodID,@refCode,@refformid,@refFormType,@CompanyID,@CompanyName,@CcCode,@CcName,@CltCode,@CltName,@invoiceStatus,@serialNo,@invoiceTotalPrice,@invoiceTotalTax,@invoiceTotalPriceTax,@method,@requestId,@code,@message,@subCode,@subMessage,100) \n" ; for(com.baiwang.open.entity.response.node.OutputInvoiceIssueInvoiceDetail detail:fail.getInvoiceDetailsList()) { //明细行 sql+= " exec getXXXX @rowId output \n" + " select @goodsLineNo="+GridUtils.prossSqlParm(detail.getGoodsLineNo())+",@invoiceLineNature="+GridUtils.prossSqlParm(detail.getInvoiceLineNature())+",@goodsCode="+GridUtils.prossSqlParm(detail.getGoodsCode())+",@goodsName="+GridUtils.prossSqlParm(detail.getGoodsName())+",@goodsSpecification="+GridUtils.prossSqlParm(detail.getGoodsSpecification())+",@goodsUnit="+GridUtils.prossSqlParm(detail.getGoodsUnit())+",@goodsQuantity="+GridUtils.prossSqlParm(detail.getGoodsQuantity())+",@goodsPrice="+detail.getGoodsPrice()+",@goodsTotalPrice="+detail.getGoodsTotalPrice()+",@goodsTotalTax="+detail.getGoodsTotalTax()+",@goodsTaxRate="+detail.getGoodsTaxRate()+",@priceTaxMark="+GridUtils.prossSqlParm(detail.getPriceTaxMark())+",@vatSpecialManagement="+GridUtils.prossSqlParm(detail.getVatSpecialManagement())+",@freeTaxMark="+GridUtils.prossSqlParm(detail.getFreeTaxMark())+",@preferentialMark="+GridUtils.prossSqlParm(detail.getPreferentialMark())+"\n"+ " insert into t150523D(DocCode,RowId,goodsLineNo,invoiceLineNature,goodsCode,goodsName,goodsSpecification,goodsUnit,goodsQuantity,goodsPrice,goodsTotalPrice,goodsTotalTax,goodsTaxRate,priceTaxMark,vatSpecialManagement,freeTaxMark,preferentialMark) values(@DocCode,@RowId,@goodsLineNo,@invoiceLineNature,@goodsCode,@goodsName,@goodsSpecification,@goodsUnit,@goodsQuantity,@goodsPrice,@goodsTotalPrice,@goodsTotalTax,@goodsTaxRate,@priceTaxMark,@vatSpecialManagement,@freeTaxMark,@preferentialMark)"; } } //过账 /*sql+=" \n declare @PostFormId int, @DocStatusValue int,@PreDocStatus int,@PostDocStatus int,@Memo varchar(100),@LinkDocInfo varchar(100),@EnterCode varchar(50)="+GridUtils.prossSqlParm(entity.getUserCode())+",@EnterName="+GridUtils.prossSqlParm(entity.getUserName())+"\n" + "exec p150523Save @doccode\n" + " select @PostFormId = FormId,@DocStatusValue = DocStatus from t150523H where docCode=@docCode\n" + " select @PreDocStatus = PreDocStatus,@PostDocStatus = a.PostDocStatus from gform a where a.formid = @PostFormId \n" + " if isnull(@DocStatusValue,0) = isnull(@PreDocStatus,0)\n" + " begin \n" + " update a set DocStatus = @PostDocStatus,PostCode=@EnterCode,PostName=@EnterName,PostDate=@now\n" + " from t150523H a where a.DocCode = @docCode \n" + " exec p150523Post @UserCode = @EnterCode,@UserName = @EnterName, \n" + " @DocCode = @docCode,@FormId = @PostFormId,\n" + " @DocStatusValue = @DocStatusValue,@ButtonType ='提交', \n" + " @Memo=@Memo output ,@LinkDocInfo = @LinkDocInfo output \n" + " end\n";*/ log.info("150523sql:"+sql); this.doBaseExecute(sql); } @Transactional @Override public void updateStatus(GateEntity entity, OutputInvoiceIssueResponse response) { List success = response.getResponse().getSuccess(); OutputInvoiceIssueInvoiceResult result = success.get(0); String sql = " set nocount on \n " + " update a set a.BaiWang_PushStatus=1,a.BaiWang_PushDate=getdate(),a.BaiWang_PushTimes=isnull(a.BaiWang_PushTimes,0)+1,a.BaiWang_PushMsg='成功',a.serialNo=" + GridUtils.prossSqlParm(result.getSerialNo()) + ",a.invoiceNo=" + GridUtils.prossSqlParm(result.getInvoiceNo()) + ",a.invoiceDate=" + GridUtils.prossSqlParm(result.getInvoiceDate()) + " from t150504H a where a.doccode=" + GridUtils.prossSqlParm(entity.getDocCode()) + "\n" + " select @@rowcount"; this.jdbcTemplate.queryForObject(sql, Integer.class); } @Transactional @Override public void updateRedStatus(GateEntity entity, OutputRedinvoiceAddResponse response) { List success =response.getResponse(); OutputRedinvoiceAdd result = success.get(0); String sql = " set nocount on \n " + " update a set a.BaiWang_PushStatus=1,a.BaiWang_PushDate=getdate(),a.BaiWang_PushTimes=isnull(a.BaiWang_PushTimes,0)+1,a.BaiWang_PushMsg='成功',a.redinvoiceNo=" + GridUtils.prossSqlParm(result.getRedInvoiceNo()) + ",a.redConfirmUuid="+GridUtils.prossSqlParm(result.getRedConfirmUuid())+",a.redConfirmNo="+GridUtils.prossSqlParm(result.getRedConfirmNo())+",a.redConfirmSerialNo="+GridUtils.prossSqlParm(result.getRedConfirmSerialNo())+" from t150504H a where a.doccode=" + GridUtils.prossSqlParm(entity.getDocCode()) + "\n" + " select @@rowcount"; this.jdbcTemplate.queryForObject(sql, Integer.class); } @Transactional @Override public void updateByAttachment(GateEntity entity,String uuid, String fieldid) { String sql = " set nocount on \n " + " update a set a." + fieldid + "=" + GridUtils.prossSqlParm(uuid) + " from t150504H a where a.doccode=" + GridUtils.prossSqlParm(entity.getDocCode()) + "\n" + " select @@rowcount"; this.jdbcTemplate.queryForObject(sql, Integer.class); } }