fs-danaus
9 天以前 18553a7798e5e9947acd13d1bfdf16c0e78c8ed1
提交 | 用户 | 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 }