xinyb
2023-11-22 158ac54d6c427f48ae36f4f88e572653e95d9ef3
提交 | 用户 | age
75ba62 1 package com.yc.open.baiwang.service;
F 2
1df3c0 3 import com.baiwang.open.entity.ErrorResponse;
75ba62 4 import com.baiwang.open.entity.request.OutputInvoiceIssueRequest;
F 5 import com.baiwang.open.entity.request.OutputRedinvoiceAddRequest;
6 import com.baiwang.open.entity.request.node.OutputInvoiceIssueInvoiceDetail;
7 import com.baiwang.open.entity.request.node.OutputInvoiceIssuePreInvoice;
8 import com.baiwang.open.entity.request.node.OutputRedinvoiceAddObjectType;
9 import com.baiwang.open.entity.response.OutputInvoiceIssueResponse;
10 import com.baiwang.open.entity.response.OutputRedinvoiceAddResponse;
1df3c0 11 import com.baiwang.open.entity.response.node.*;
75ba62 12 import com.yc.action.grid.GridUtils;
F 13 import com.yc.exception.ApplicationException;
14 import com.yc.open.mutual.schedule.GateEntity;
15 import com.yc.service.BaseService;
16 import org.apache.commons.lang.RandomStringUtils;
17 import org.apache.commons.lang3.StringUtils;
1df3c0 18 import org.springframework.jdbc.core.BeanPropertyRowMapper;
75ba62 19 import org.springframework.stereotype.Service;
F 20 import org.springframework.transaction.annotation.Transactional;
21
22 import java.math.BigDecimal;
23 import java.time.LocalDateTime;
24 import java.time.format.DateTimeFormatter;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Map;
28
29 @Service
30 public class BaiwangImpl extends BaseService implements BaiwangIfc {
1df3c0 31     /**
F 32      * 下载发票附件使用
33      * @param doccode
34      * @return
35      */
36     @Override
37     public QueryEntiy getEinvoiceInfo(String doccode) {
38         String sql =
39                 " select  b.invoiceNo,c.vatCode as taxNo\n" +
40                         " from t150504H b \n" +
41                         " join ocompany c on c.companyid=b.companyid\n" +
42                         " where b.doccode=" + GridUtils.prossSqlParm(doccode);
43         return this.jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(QueryEntiy.class));
44     }
75ba62 45
F 46     @Override
47     public OutputInvoiceIssueRequest getEinvoiceInfo(GateEntity entity) {
48         OutputInvoiceIssueRequest request = null;
49         String sql =
50                 " 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" +
1df3c0 51                 " b.buyerTaxNo,b.buyerName,b.buyerBankName,b.buyerBankNumber,b.buyerAddress,b.buyerTelephone,b.HDMemo,b.buyerEmail,b.buyerPhone,\n" +
75ba62 52                 " 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" +
F 53                 " from t150504H b join t150504D a on a.doccode=b.DocCode" +
54                 " join ocompany c on c.companyid=b.companyid\n" +
55                 " join t110503 d on a.matcode=d.matcode\n" +
56                 " where b.doccode=" + GridUtils.prossSqlParm(entity.getDocCode())+" order by a.docitem asc";
57         List<Map<String, Object>> list = this.jdbcTemplate.queryForList(sql);
58         if (list != null && list.size() > 0) {
59             request = new OutputInvoiceIssueRequest();
60             OutputInvoiceIssuePreInvoice preInvoice = new OutputInvoiceIssuePreInvoice();
61             List<OutputInvoiceIssueInvoiceDetail> detail = new ArrayList<>();
62             int docItem = 1;//行号
63             for (Map map : list) {
64                 if (StringUtils.isBlank(GridUtils.prossRowSetDataType_String(map, "TaxCatalogCode"))) {
65                     throw new ApplicationException(String.format("%s:税收分类编码不能为空,请在110503维护好对应的分类编码", GridUtils.prossRowSetDataType_String(map, "MatName")));
66                 }
67                 if (StringUtils.isBlank(request.getTaxNo())) {
68                     //销售方税号
69                     request.setTaxNo(GridUtils.prossRowSetDataType_String(map, "vatCode"));
70                     //发票种类编码,01:全电发票(增值税专用发票) 02:全电发票(普通发票)
71                     preInvoice.setInvoiceTypeCode(GridUtils.prossRowSetDataType_String(map, "invoiceTypeCode"));
1df3c0 72                     if(!"01".equals(preInvoice.getInvoiceTypeCode())&&!"02".equals(preInvoice.getInvoiceTypeCode())){
F 73                         throw new ApplicationException("只能开具全电发票(增值税专用发票),全电发票(普通发票)");
74                     }
75ba62 75                     //全电纸质发票标志(Y是N否)
F 76                     preInvoice.setPaperInvoiceFlag(GridUtils.prossRowSetDataType_String(map, "paperInvoiceFlag"));
77                     //开票类型 0:正数发票(蓝票) 1:负数发票(红票)默认0
78                     preInvoice.setInvoiceType(GridUtils.prossRowSetDataType_String(map, "invoiceType"));
79                     //开票流水号, 唯一标志开票请求。支持数字字母下划线组合
80                     preInvoice.setSerialNo(entity.getDbid() + "_" + entity.getFormid() + "_" + entity.getDocCode() + "_" + RandomStringUtils.randomAlphanumeric(5));
81                     //购方单位税号, invoiceTypeCode=004、028、01(增值税专用发票
82                     //、增值税电子专用发票、全电发票(增值税专用发票))开具时必传
83                     preInvoice.setBuyerTaxNo(GridUtils.prossRowSetDataType_String(map, "buyerTaxNo"));
84                     //购方单位名称
85                     preInvoice.setBuyerName(GridUtils.prossRowSetDataType_String(map, "buyerName"));
86                     //购方地址及电话, 增值税专用发票开具时必填,发票类型代码为
87                     //01、02时该字段拆分为地址电话两个字段
88                     preInvoice.setBuyerAddress(GridUtils.prossRowSetDataType_String(map, "buyerAddress"));
1df3c0 89                     preInvoice.setBuyerTelphone(GridUtils.prossRowSetDataType_String(map, "buyerTelephone"));
75ba62 90                     //购方开户行及账号, 增值税专用发票开具时必填,发票类型代码为
F 91                     //01、02时该字段拆分为银行名称、账号两个字段
92                     preInvoice.setBuyerBankName(GridUtils.prossRowSetDataType_String(map, "buyerBankName"));
93                     preInvoice.setBuyerBankNumber(GridUtils.prossRowSetDataType_String(map, "buyerBankNumber"));
94                     //开票人
95                     preInvoice.setDrawer(entity.getUserName());
96                     //备注
97                     preInvoice.setRemarks(GridUtils.prossRowSetDataType_String(map, "HDMemo"));
1df3c0 98                     //客户邮箱
F 99                     preInvoice.setBuyerEmail(GridUtils.prossRowSetDataType_String(map, "buyerEmail"));
100                     //客户电话
101                     preInvoice.setBuyerPhone(GridUtils.prossRowSetDataType_String(map, "buyerPhone"));
75ba62 102                     //销方地址及电话, 增值税专用发票开具时必填,发票类型代码为
F 103                     //01、02时该字段拆分为地址电话两个字段
104                     preInvoice.setSellerAddress(GridUtils.prossRowSetDataType_String(map, "Province")
105                             + GridUtils.prossRowSetDataType_String(map, "City")
106                             + GridUtils.prossRowSetDataType_String(map, "Street"));
107                     preInvoice.setSellerTelphone(GridUtils.prossRowSetDataType_String(map, "Tel1"));
108                     //销方开户行及账号, 增值税专用发票开具时必填,发票类型代码为
109                     //01、02时该字段拆分为银行名称、账号两个字段
110                     preInvoice.setSellerBankName(GridUtils.prossRowSetDataType_String(map, "BankCode"));
111                     preInvoice.setSellerBankNumber(GridUtils.prossRowSetDataType_String(map, "BankAccount"));
112                 }
113                 //商品明细节点
114                 OutputInvoiceIssueInvoiceDetail item = new OutputInvoiceIssueInvoiceDetail();
115                 //明细行号
116                 item.setGoodsLineNo(docItem);
117                 //税收分类编码(末级节点)
118                 item.setGoodsCode(GridUtils.prossRowSetDataType_String(map, "TaxCatalogCode"));
119                 //商品名称
120                 item.setGoodsName(GridUtils.prossRowSetDataType_String(map, "MatName"));
121                 //商品数量,总长13位
122                 item.setGoodsQuantity(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "Digit")));
123                 //商品单价,总长13位
124                 item.setGoodsPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "netprice")));
125                 //金额,小数点后2位
126                 item.setGoodsTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "netmoney")));
127                 //税率
128                 item.setGoodsTaxRate(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "vatrate")));
129                 detail.add(item);
130                 docItem++;
131             }
132             preInvoice.setInvoiceDetailsList(detail);
133             request.setData(preInvoice);
134         }
135         return request;
136     }
137
138     @Override
139     public OutputRedinvoiceAddRequest getRedEinvoiceInfo(GateEntity entity) {
140         OutputRedinvoiceAddRequest request = null;
141         String sql =
1df3c0 142                 "select b.buyerName,b.buyerBankName,b.buyerBankNumber,b.buyerAddress,b.buyerTelephone,b.HDMemo,b.SumNetMoney,b.sumVatMoney,b.redInvoiceLabel,b.sumVatMoney,b.buyerTaxNo,\n" +
F 143                 " a.DocItem,a.MatName,a.Digit,a.netprice,a.netmoney,a.vatmoney,a.vatrate,a.UOM,\n" +
75ba62 144                 " c.vatCode,c.BankCode,c.BankAccount,c.Province,c.City,c.Street,c.Tel1,c.companyName,d.TaxCatalogCode,e.SPBMJC,\n" +
F 145                 " 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" +
146                 " from t150504H b join t150504D a on a.doccode=b.DocCode\n" +
147                 " join ocompany c on c.companyid=b.companyid\n" +
148                 " join t110503 d on a.matcode=d.matcode\n" +
149                 " join  t110575 e on e.BM=d.TaxCatalogCode\n " +
150                 " join t150504D f on a.refcodeitem2 = f.doccode and a.refrowid2 = f.rowid \n" +
151                 " join t150504H g on a.refcodeitem2 = g.DocCode\n" +
152                 " where b.doccode=" + GridUtils.prossSqlParm(entity.getDocCode())+" order by a.docitem asc";
153         List<Map<String, Object>> list = this.jdbcTemplate.queryForList(sql);
154         if (list != null && list.size() > 0) {
155             request = new OutputRedinvoiceAddRequest();
156             List<OutputRedinvoiceAddObjectType> detail = new ArrayList<>();
157             int docItem = 1;//行号
158             for (Map map : list) {
159                 if (StringUtils.isBlank(request.getTaxNo())) {
160                     //机构税号
161                     request.setTaxNo(GridUtils.prossRowSetDataType_String(map, "vatCode"));
162                     //红字确认单流水号,调用方传递
163                     request.setRedConfirmSerialNo(entity.getDbid() + "_" + entity.getFormid() + "_" + entity.getDocCode() + "_" + RandomStringUtils.randomAlphanumeric(5));
164                     //录入方身份 01:销方,02:购方
165                     request.setEntryIdentity("01");
166                     //销售方统一社会信用代码/纳税人识别号/身份证件号码
167                     request.setSellerTaxNo(GridUtils.prossRowSetDataType_String(map, "vatCode"));
168                     //销售方名称
169                     request.setSellerTaxName(GridUtils.prossRowSetDataType_String(map, "companyName"));
170                     //购买方名称
171                     request.setBuyerTaxName(GridUtils.prossRowSetDataType_String(map, "buyerName"));
172                     //购买方税号
173                     request.setBuyerTaxNo(GridUtils.prossRowSetDataType_String(map, "buyerTaxNo"));
174                     //全电纸质发票标志(Y是N否)
175                     request.setOriginInvoiceIsPaper(GridUtils.prossRowSetDataType_String(map, "originalPaperInvoiceCode"));
176                     //蓝字发票全电发票号码,【发票来源】为2时必填
177                     request.setOriginalInvoiceNo(GridUtils.prossRowSetDataType_String(map, "originalInvoiceNo"));
178                     //蓝字发票开票日期 yyyy-MM-dd HH:mm:ss
179                     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
180                     LocalDateTime dateTime = LocalDateTime.parse(GridUtils.prossRowSetDataType_String(map, "originInvoiceDate"), formatter);
181                     DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
182                     String outputDate = dateTime.format(outputFormatter);
183                     request.setOriginInvoiceDate(outputDate);
184                     //蓝字发票合计金额
185                     request.setOriginInvoiceTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "originInvoiceTotalPrice")));
186                     //蓝字发票合计税额
187                     request.setOriginInvoiceTotalTax(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "originInvoiceTotalTax")));
188                     //蓝字发票票种代码 01:增值税专用发票 02:普通发票 03:机动
189                     //车统一销售发票 04:二手车统一销售发票
190                     request.setOriginInvoiceType(GridUtils.prossRowSetDataType_String(map, "originInvoiceType"));
191                     //红字冲销金额
192                     request.setInvoiceTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "SumNetMoney")));
193                     //红字冲销税额
194                     request.setInvoiceTotalTax(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "sumVatMoney")));
195                     //红字发票冲红原因代码 01:开票有误 02:销货退回 03:服务中止 04:销售折让
196                     request.setRedInvoiceLabel(GridUtils.prossRowSetDataType_String(map, "redInvoiceLabel"));
1df3c0 197                     //发票来源:全电平台红冲必须要传递的字段
F 198                     // 1:增值税发票管理系统:表示此发票是通过原税控系统开具的增值税发票,红冲此类发票时,税控设备需注销后才可以申请全电的红字确认单;
199                     // 2:电子发票服务平台:表示此发票是通过电子发票服务平台开具的全电发票(包括全电纸质发票),红冲此类发票时需要传递蓝票属性为此
75ba62 200                     request.setInvoiceSource("2");
F 201                     if(StringUtils.isBlank(request.getOriginalInvoiceNo())){
202                         throw new ApplicationException("蓝字发票全电发票号码不能为空");
203                     }
204                     if(StringUtils.isBlank(request.getRedInvoiceLabel())){
205                         throw new ApplicationException("红字发票冲红原因不能为空");
206                     }
207                     if(StringUtils.isBlank(request.getInvoiceTotalPrice()+"")){
208                         throw new ApplicationException("冲销金额不能为空");
209                     }
210                     if(StringUtils.isBlank(request.getInvoiceTotalTax()+"")){
211                         throw new ApplicationException("冲销税额不能为空");
212                     }
213                 }
214                 //商品明细节点
215                 OutputRedinvoiceAddObjectType item = new OutputRedinvoiceAddObjectType();
216                 //明细行号
217                 item.setGoodsLineNo(docItem);
218                 //蓝字发票明细序号
219                 item.setOriginalInvoiceDetailNo(docItem);
220                 //税收分类编码(末级节点)
221                 item.setGoodsCode(GridUtils.prossRowSetDataType_String(map, "TaxCatalogCode"));
222                 //商品服务简称(税收分类简称)
223                 item.setGoodsSimpleName(GridUtils.prossRowSetDataType_String(map, "SPBMJC"));
224                 //项目名称(自定义商品名称)
225                 item.setProjectName(GridUtils.prossRowSetDataType_String(map, "MatName"));
226                 //商品全称( 简称自定义名称)
227                 item.setGoodsName("*"+item.getGoodsSimpleName()+"*"+item.getProjectName());
1df3c0 228                 item.setGoodsQuantity(GridUtils.prossRowSetDataType_String(map, "Digit"));
F 229                 item.setGoodsPrice(GridUtils.prossRowSetDataType_String(map, "netprice"));
75ba62 230                 //金额,小数点后2位
F 231                 item.setGoodsTotalPrice(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "netmoney")));
232                 //税额
233                 item.setGoodsTotalTax(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "vatmoney")));
234                 //税率
235                 item.setGoodsTaxRate(new BigDecimal(GridUtils.prossRowSetDataType_String(map, "vatrate")));
236                 detail.add(item);
237                 docItem++;
238             }
239             request.setRedConfirmDetailReqEntityList(detail);
240         }
241         return request;
242     }
1df3c0 243     @Transactional(rollbackFor = Exception.class)
F 244     @Override
245     public void sendLog(GateEntity entity, OutputInvoiceIssueResponse issue) {
246         OutputInvoiceIssue response = issue.getResponse();
247         String sql="set nocount on \n" +
248                 " declare @DocCode varchar(50),@FormID int=150523 ,@now datetime=getdate(),@DocDate datetime,@PeriodID varchar(50),@refCode varchar(50),@refformid int,\n" +
249                 " @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" +
250                 " @invoiceTotalTax money,@invoiceTotalPriceTax money,@invoiceCode varchar(50),@invoiceNo varchar(50),@invoiceCheckCode varchar(50),@invoiceDate varchar(50),@invoiceQrCode varchar(max),@taxControlCode varchar(50),\n" +
251                 " @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" +
252                 " @invoiceLineNature varchar(50),@goodsCode varchar(50),@goodsName varchar(150),@goodsSpecification varchar(50),@goodsUnit varchar(50),@goodsQuantity money,@goodsPrice money,@goodsTotalPrice money,@goodsTotalTax money,\n" +
253                 " @goodsTaxRate money,@priceTaxMark money,@vatSpecialManagement varchar(50),@freeTaxMark varchar(150),@preferentialMark varchar(50) \n" +
254                 " exec sp_newdoccode 150523,'SYSTEM',@DocCode output \n" +
255                 " select @DocDate = convert(datetime,convert(varchar(10),GETDATE(),120) ) \n" +
256                 " 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"+
257                 " select @PeriodId = dbo.GetPeriodID(@FormID,@CompanyID,@now)\n";
258             sql+=" select @invoiceStatus='"+(issue.isSuccess()?"success":"fail") +"',@method="+GridUtils.prossSqlParm(issue.getMethod())+",@requestId="+GridUtils.prossSqlParm(issue.getRequestId());
259             if(issue.isSuccess()) {
260                 OutputInvoiceIssueInvoiceResult result = response.getSuccess().get(0);
261                 String formattedDateTime=result.getInvoiceCode();
262                 if(StringUtils.isNotBlank(formattedDateTime)) {
263                     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
264                     LocalDateTime dateTime = LocalDateTime.parse(result.getInvoiceDate(), formatter);
265                      formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
266                 }
267                 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"+
268                        "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";
269                 for(OutputInvoiceIssuePreInvoiceDetailVO detail:result.getInvoiceDetailsList()){
270                     //明细行
271                     sql+=  " exec getXXXX @rowId output \n" +
272                             " 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"+
273                             " 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)";
274                 }
275             }else {
276                 ErrorResponse errorResponse = issue.getErrorResponse();
277                 OutputInvoiceIssueInvoice fail = response.getFail().get(0);
278                 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"+
279                   //表头
280                 " 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" ;
281                 for(com.baiwang.open.entity.response.node.OutputInvoiceIssueInvoiceDetail detail:fail.getInvoiceDetailsList()) {
282                   //明细行
283                   sql+=  " exec getXXXX @rowId output \n" +
284                           " 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"+
285                           " 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)";
286                 }
287             }
288             //过账
289          /*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" +
290                  "exec p150523Save @doccode\n" +
291         "  select @PostFormId = FormId,@DocStatusValue = DocStatus from t150523H where docCode=@docCode\n" +
292                 " select @PreDocStatus = PreDocStatus,@PostDocStatus = a.PostDocStatus from gform a where a.formid = @PostFormId \n" +
293                 " if isnull(@DocStatusValue,0) = isnull(@PreDocStatus,0)\n" +
294                 " begin \n" +
295                 "    update a set DocStatus = @PostDocStatus,PostCode=@EnterCode,PostName=@EnterName,PostDate=@now\n" +
296                 "    from t150523H a where a.DocCode = @docCode \n" +
297                 "    exec p150523Post @UserCode = @EnterCode,@UserName = @EnterName, \n" +
298                 "       @DocCode = @docCode,@FormId = @PostFormId,\n" +
299                 "       @DocStatusValue = @DocStatusValue,@ButtonType ='提交', \n" +
300                 "       @Memo=@Memo output ,@LinkDocInfo = @LinkDocInfo output   \n" +
301                 " end\n";*/
302             log.info("150523sql:"+sql);
303         this.doBaseExecute(sql);
304     }
305
306     @Transactional
75ba62 307     @Override
F 308     public void updateStatus(GateEntity entity, OutputInvoiceIssueResponse response) {
309         List<OutputInvoiceIssueInvoiceResult> success = response.getResponse().getSuccess();
310         OutputInvoiceIssueInvoiceResult result = success.get(0);
311         String sql = " set nocount on \n " +
312                 " 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" +
313                 " select @@rowcount";
314         this.jdbcTemplate.queryForObject(sql, Integer.class);
315     }
316     @Transactional
317     @Override
318     public void updateRedStatus(GateEntity entity, OutputRedinvoiceAddResponse response) {
319         List<OutputRedinvoiceAdd> success =response.getResponse();
320         OutputRedinvoiceAdd result = success.get(0);
321         String sql = " set nocount on \n " +
322                 " 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" +
323                 " select @@rowcount";
324         this.jdbcTemplate.queryForObject(sql, Integer.class);
325     }
326     @Transactional
327     @Override
328     public void updateByAttachment(GateEntity entity,String uuid, String fieldid) {
329         String sql = " set nocount on \n " +
330                 " update a set a." + fieldid + "=" + GridUtils.prossSqlParm(uuid) + "  from t150504H a where a.doccode=" + GridUtils.prossSqlParm(entity.getDocCode()) + "\n" +
331                 " select @@rowcount";
332         this.jdbcTemplate.queryForObject(sql, Integer.class);
333     }
334 }