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