提交 | 用户 | 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 |
} |