销项发票信息按照格式下载
This commit is contained in:
		
							parent
							
								
									7a0094e0e6
								
							
						
					
					
						commit
						5d9dd3c92c
					
				|  | @ -0,0 +1,253 @@ | |||
| package nccloud.web.sscivm.ivsale.sale.action; | ||||
| 
 | ||||
| import java.io.InputStream; | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.security.InvalidKeyException; | ||||
| import java.security.NoSuchAlgorithmException; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.TreeMap; | ||||
| import javax.crypto.Mac; | ||||
| import javax.crypto.spec.SecretKeySpec; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.util.Base64; | ||||
| import java.net.URLEncoder; | ||||
| 
 | ||||
| import com.alibaba.fastjson.JSONObject; | ||||
| import com.google.gson.Gson; | ||||
| 
 | ||||
| import java.io.ByteArrayInputStream; | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import org.apache.http.client.config.CookieSpecs; | ||||
| import org.apache.http.client.config.RequestConfig; | ||||
| import org.apache.http.client.methods.HttpGet; | ||||
| import org.apache.http.client.methods.HttpPost; | ||||
| import org.apache.http.entity.StringEntity; | ||||
| import org.apache.http.impl.client.CloseableHttpClient; | ||||
| import org.apache.http.impl.client.HttpClients; | ||||
| import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; | ||||
| import org.apache.http.util.EntityUtils; | ||||
| import com.yonyou.cloud.utils.StringUtils; | ||||
| 
 | ||||
| import nc.bs.trade.business.HYSuperDMO; | ||||
| import nc.util.mmf.framework.base.MMValueCheck; | ||||
| import nc.vo.pub.BusinessException; | ||||
| import nc.vo.pubapp.pattern.exception.ExceptionUtils; | ||||
| import nc.vo.sscivm.invoice.IVMInvoiceHeadVO; | ||||
| import nc.vo.sscivm.ivsale.IVApplicationHeadVO; | ||||
| import nc.vo.sscivm.ivsale.IVApplogVO; | ||||
| import nccloud.framework.core.io.WebFile; | ||||
| import nccloud.framework.service.ServiceLocator; | ||||
| import nccloud.framework.web.action.itf.ICommonAction; | ||||
| import nccloud.framework.web.container.IRequest; | ||||
| import nccloud.itf.sscivm.ivsale.service.IVSaleQueryService; | ||||
| import nccloud.pubitf.platform.attachment.IAttachmentService; | ||||
| 
 | ||||
| public class InvoiceDownloadAction implements ICommonAction { | ||||
| 
 | ||||
| 	IAttachmentService ncservice = ServiceLocator.find(IAttachmentService.class); | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Object doAction(IRequest request) { | ||||
| 
 | ||||
| 		Map<String, String[]> params_1 = request.readParameters(); | ||||
| 
 | ||||
| 		String[] pk = params_1.get("pk"); | ||||
| 		String[] invoiceTypes = params_1.get("invoiceType"); | ||||
| 		String isdoc = "z"; | ||||
| 		WebFile file = null; | ||||
| 		try { | ||||
| 			List<IVMInvoiceHeadVO> headVOList =ServiceLocator.find(IVSaleQueryService.class).queryIVMInvoiceHeadVOsByPks(new String[] {pk[0]}); | ||||
| 			IVMInvoiceHeadVO headVO = headVOList.get(0); | ||||
| 			String invoiceType = invoiceTypes[0]; | ||||
| 
 | ||||
| 
 | ||||
| 			// 获取旗舰版的token | ||||
| 			String appKey = "8c9eb1ea1ba54b3f9683a8b355f8e615"; | ||||
| 			String appSecret = "999e15c2a13ee4eab480534be4bf52fdf9032a6d"; | ||||
| 			String tokenUrl="https://c2.yonyoucloud.com/iuap-api-auth/open-auth/selfAppAuth/getAccessToken"; | ||||
| 			String getbsfileUrl="https://c2.yonyoucloud.com/iuap-api-gateway/yonbip/tax/output-tax/api/einvoice/getbsfile?access_token="; | ||||
| 
 | ||||
| 			Map<String, String> params = new HashMap<>(); | ||||
| 
 | ||||
| 			// 除签名外的其他参数 | ||||
| 			params.put("appKey", appKey); | ||||
| 			String timestamp = String.valueOf(System.currentTimeMillis()); | ||||
| 			params.put("timestamp", timestamp); | ||||
| 			// 计算签名 | ||||
| 			Map<String, String> treeMap; | ||||
| 			if (params instanceof TreeMap) { | ||||
| 				treeMap = params; | ||||
| 			} else { | ||||
| 				treeMap = new TreeMap<>(params); | ||||
| 			} | ||||
| 			StringBuilder stringBuilder = new StringBuilder(); | ||||
| 			for (Map.Entry<String, String> entry : treeMap.entrySet()) { | ||||
| 				stringBuilder.append(entry.getKey()).append(entry.getValue()); | ||||
| 			} | ||||
| 			Mac mac = Mac.getInstance("HmacSHA256"); | ||||
| 
 | ||||
| 			mac.init(new SecretKeySpec(appSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); | ||||
| 			byte[] signData = mac.doFinal(stringBuilder.toString().getBytes(StandardCharsets.UTF_8)); | ||||
| 			String base64String = Base64.getEncoder().encodeToString(signData); | ||||
| 			String signature = URLEncoder.encode(base64String, "UTF-8"); | ||||
| 			params.put("signature", signature); | ||||
| //        			String responseString = doGet( | ||||
| //        					"https://c1.yonyoucloud.com/iuap-api-auth/open-auth/selfAppAuth/getAccessToken", params); | ||||
| 			String responseString = doGet(tokenUrl, params); | ||||
| 			Gson gson = new Gson(); | ||||
| 			Map result = gson.fromJson(responseString, Map.class); | ||||
| 
 | ||||
| 			if (StringUtils.equals("00000", result.get("code").toString())) { | ||||
| 
 | ||||
| 				Map<String, Object> tokenInfo = (Map<String, Object>) result.get("data"); | ||||
| 				String access_token = (String) tokenInfo.get("access_token"); | ||||
| 				// 税务服务-调用销项发票管理-已开票-版式文件查询接口 | ||||
| 				Map<String, Object> map = new HashMap<>(); | ||||
| 				// 发票类型 1:增值税电子普通发票; 2:增值税电子专用发票; 3:增值税普通发票; 4:增值税专用发票 、增值税专用发票(机动车); 5:机动车销售统一发票; 8:增值税电子普通发票(成品油); 10:成品油普通发票; 11:成品油专用发票; 15:二手车销售统一发票; 31:数电专用发票; 32:数电普通发票; 33:数电纸质发票(增值税专用发票); 34:数电纸质发票(普通发票); | ||||
| 				map.put("fplx", headVO.getInvoice_type()); | ||||
| 				// 数电发票号码 | ||||
| 				map.put("slfphm", headVO.getFphm()); | ||||
| 				// 用友自画pdf | ||||
| 				map.put("yypdf", "0"); | ||||
| 				// 税局pdf | ||||
| 				map.put("taxpdf", "1".equals(invoiceType) ? "1" : "0"); | ||||
| 				// 税局xml | ||||
| 				map.put("taxxml", "2".equals(invoiceType) ? "1" : "0"); | ||||
| 				// 税局ofd | ||||
| 				map.put("taxofd", "3".equals(invoiceType) ? "1" : "0"); | ||||
| //        				String resString = doPost( | ||||
| //        						"https://c1.yonyoucloud.com/iuap-api-gateway/yonbip/tax/output-tax/api/einvoice/getbsfile?access_token=" + access_token, | ||||
| //        						map); | ||||
| 
 | ||||
| 				String resString = doPost(getbsfileUrl + access_token,map); | ||||
| 				gson = new Gson(); | ||||
| 
 | ||||
| 				Map resultMap = gson.fromJson(resString, Map.class); | ||||
| 				if (StringUtils.equals("200", resultMap.get("code").toString())) { | ||||
| 					Map<String, Object> infoMap = (Map<String, Object>) resultMap.get("data"); | ||||
| 					String tax = "1".equals(invoiceType) ? (String) infoMap.get("taxpdf") : "2".equals(invoiceType) ? (String) infoMap.get("taxxml") : "3".equals(invoiceType) ? (String) infoMap.get("taxofd") : ""; | ||||
| 					if (MMValueCheck.isEmpty(tax)) { | ||||
| 						throw new Exception("未查询到发票信息"); | ||||
| 					} | ||||
| 					byte[] imageBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(tax); | ||||
| 					InputStream ins = new ByteArrayInputStream(imageBytes); | ||||
| 					String Fphm = headVO.getFphm(); | ||||
| 
 | ||||
| 					//发票号码+单位名称+合同号(开票申请字段)+金额(发票上的价税合计) | ||||
| 					String filename = "1".equals(invoiceType) ? ".pdf" : "2".equals(invoiceType) ? ".xml" : "3".equals(invoiceType) ? ".ofd" : ""; | ||||
| 
 | ||||
| 
 | ||||
| 					String ctcode=""; | ||||
| 					HYSuperDMO dmo = new HYSuperDMO(); | ||||
| 					IVApplogVO[] ivApplogVO=(IVApplogVO[]) dmo.queryByWhereClause(IVApplogVO.class, "fphm='"+Fphm+"' and dr=0 "); | ||||
| 					if(ivApplogVO!=null&&ivApplogVO.length>0) { | ||||
| 						ivApplogVO[0].getLyid();//开票申请单主键 | ||||
| 						IVApplicationHeadVO ivApplicationHeadVO =(IVApplicationHeadVO) dmo.queryByPrimaryKey(IVApplicationHeadVO.class, ivApplogVO[0].getLyid()); | ||||
| 						ctcode=ivApplicationHeadVO.getDef2();//合同号 | ||||
| 					} | ||||
| 					//发票号码+单位名称+合同号(开票申请字段)+金额(发票上的价税合计)  合同号_单位名称_发票号码_金额 | ||||
| 
 | ||||
| //          					合同号_单位名称_发票号码_金额 | ||||
| 
 | ||||
| 					String name = ctcode+"_"+headVO.getGmfmc()+"_"+Fphm+"_"+String.valueOf(headVO.getJshj().toDouble()) + filename; | ||||
| 
 | ||||
| //          					String name = Fphm+"_"+headVO.getGmfmc()+"_"+ctcode+"_"+String.valueOf(headVO.getJshj().toDouble()) + filename; | ||||
| 					file = new WebFile(name, ins); | ||||
| 				} else { | ||||
| 					throw new Exception("获取发票信息失败"); | ||||
| 				} | ||||
| 
 | ||||
| 			}else { | ||||
| 				throw new Exception("获取access_token失败"); | ||||
| 			} | ||||
| //            String url = ""; | ||||
| //            IVMInvoiceHeadVO headVO = headVOList.get(0); | ||||
| // | ||||
| //            if (headVOList != null && headVOList.size() > 0) { | ||||
| //            	  url = headVO.getViewurl(); | ||||
| //            } | ||||
| //            InputStream ins = this.ncservice.download(isdoc, url, "sscivm"); | ||||
| //            String Fpdm = headVO.getFpdm(); | ||||
| //            String Fphm = headVO.getFphm(); | ||||
| //            String name = headVO.getFilename(); | ||||
| //        	String filename = ".pdf"; | ||||
| //          	if(name!=null && name.endsWith(".ofd")){ | ||||
| //             filename = ".ofd"; | ||||
| //            } | ||||
| //            file = new WebFile(Fpdm + "_" + Fphm + filename, ins); | ||||
| 		} catch (BusinessException e) { | ||||
| 			ExceptionUtils.wrappException(e); | ||||
| 		} catch (NoSuchAlgorithmException e) { | ||||
| 			// TODO Auto-generated catch block | ||||
| 			e.printStackTrace(); | ||||
| 		} catch (InvalidKeyException e) { | ||||
| 			// TODO Auto-generated catch block | ||||
| 			e.printStackTrace(); | ||||
| 		} catch (UnsupportedEncodingException e) { | ||||
| 			// TODO Auto-generated catch block | ||||
| 			e.printStackTrace(); | ||||
| 		} catch (IOException e) { | ||||
| 			// TODO Auto-generated catch block | ||||
| 			e.printStackTrace(); | ||||
| 		} catch (Exception e) { | ||||
| 			// TODO Auto-generated catch block | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		return file; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	private String doPost(String requestUrl, Map<String, Object> param) throws IOException { | ||||
| 		PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); | ||||
| 		cm.setMaxTotal(500); | ||||
| 		cm.setDefaultMaxPerRoute(50); | ||||
| 
 | ||||
| 		RequestConfig globalConfig = RequestConfig.custom().setConnectionRequestTimeout(5000) // 连接池获取连接超时 | ||||
| 				.setConnectTimeout(5000) // 连接建立超时 | ||||
| 				.setSocketTimeout(20000) // 等待响应超时 | ||||
| 				.setCookieSpec(CookieSpecs.IGNORE_COOKIES).build(); | ||||
| 
 | ||||
| 		CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm) | ||||
| 				.setDefaultRequestConfig(globalConfig).build(); | ||||
| 		HttpPost post = new HttpPost(requestUrl); | ||||
| 		post.setHeader("Content-Type", "application/json;charset=UTF-8"); | ||||
| 		post.setEntity(new StringEntity(JSONObject.toJSONString(param), "utf-8")); | ||||
| 		String responseString = httpClient.execute(post, response -> EntityUtils.toString(response.getEntity())); | ||||
| 		return responseString; | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	private String doGet(String requestUrl, Map<String, String> paramMap) throws IOException { | ||||
| 		PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); | ||||
| 		cm.setMaxTotal(500); | ||||
| 		cm.setDefaultMaxPerRoute(50); | ||||
| 
 | ||||
| 		RequestConfig globalConfig = RequestConfig.custom().setConnectionRequestTimeout(5000) // 连接池获取连接超时 | ||||
| 				.setConnectTimeout(5000) // 连接建立超时 | ||||
| 				.setSocketTimeout(20000) // 等待响应超时 | ||||
| 				.setCookieSpec(CookieSpecs.IGNORE_COOKIES).build(); | ||||
| 
 | ||||
| 		CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm) | ||||
| 				.setDefaultRequestConfig(globalConfig).build(); | ||||
| 		StringBuilder param = new StringBuilder("?"); | ||||
| 		if (paramMap != null) { | ||||
| 			for (Map.Entry<String, String> entry : paramMap.entrySet()) { | ||||
| 				param.append(entry.getKey()); | ||||
| 				param.append("="); | ||||
| 				param.append(entry.getValue()); | ||||
| 				param.append("&"); | ||||
| 			} | ||||
| 			param.deleteCharAt(param.length() - 1); | ||||
| 		} | ||||
| 		String url = requestUrl + param; | ||||
| 		HttpGet get = new HttpGet(url); | ||||
| 		String responseString = httpClient.execute(get, response -> EntityUtils.toString(response.getEntity())); | ||||
| 		get.releaseConnection(); | ||||
| 		return responseString; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue