SikuServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package com.malk.siku.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.malk.server.aliwork.YDConf;
  4. import com.malk.server.aliwork.YDParam;
  5. import com.malk.server.common.McR;
  6. import com.malk.service.aliwork.YDClient;
  7. import com.malk.siku.service.SikuService;
  8. import com.malk.siku.utils.MkBxUtil;
  9. import com.malk.siku.utils.MkYpUtil;
  10. import com.malk.utils.UtilHttp;
  11. import com.malk.utils.UtilMap;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.apache.logging.log4j.util.Strings;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.io.FileOutputStream;
  17. import java.io.InputStream;
  18. import java.net.HttpURLConnection;
  19. import java.net.URL;
  20. import java.util.*;
  21. @Slf4j
  22. @Service
  23. public class SikuServiceImpl implements SikuService {
  24. @Autowired
  25. private YDClient ydClient;
  26. @Override
  27. public McR saveTradingPartner(Map map) {
  28. String formInstId = UtilMap.getString(map, "formInstId");
  29. String type = UtilMap.getString(map, "type");
  30. Map formData = ydClient.queryData(YDParam.builder()
  31. .formInstanceId(formInstId)
  32. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  33. Map partner = new HashMap();
  34. if ("客户".equals(type)){
  35. //客户
  36. partner.put("partnerName", "客户");//所属分类名称
  37. partner.put("name", UtilMap.getString(formData,"textField_mkddjwy3"));//往来单位中文名
  38. partner.put("partnerType", "客户");//往来关系,可选值为:"供应商"、"客户"、"供应商,客户"(既是供应商又是客户的情况下以中文逗号分隔(供应商在前))
  39. partner.put("partnerProperty", "公司");//往来性质,可选值为:"公司"、"个体工商户"
  40. partner.put("businessCode", UtilMap.getString(formData,"serialNumberField_mkddjwy2"));//往来单位编码,不超过50个字符
  41. partner.put("taxNumber", UtilMap.getString(formData,"textField_mkddjwys"));//税务登记号,不超过200个字符
  42. partner.put("readOnly", false);//是否只读,默认false。如果为true,那么在每刻系统中往来单位的所有信息(如权限范围、收款账户等)均无法修改。(接口更新操作不受限制)
  43. partner.put("reMark", "");//往来单位备注
  44. partner.put("enabled", true);//是否启用(true:启用;false:禁用)。若该参数为空,新增则默认为true,更新则保持系统内状态。
  45. }else {
  46. //供应商、
  47. String hzlx = UtilMap.getString(formData, "radioField_mketkvw7");
  48. partner.put("partnerName", "供应商");//所属分类名称
  49. partner.put("name", "Free".equals(hzlx) ? UtilMap.getString(formData,"textField_mkkixdd6") : UtilMap.getString(formData,"textField_mketkvv0"));//往来单位中文名
  50. partner.put("partnerType", "供应商");//往来关系,可选值为:"供应商"、"客户"、"供应商,客户"(既是供应商又是客户的情况下以中文逗号分隔(供应商在前))
  51. partner.put("partnerProperty", "Free".equals(hzlx) ? "个体工商户" : "公司");//往来性质,可选值为:"公司"、"个体工商户"
  52. partner.put("businessCode", UtilMap.getString(formData,"serialNumberField_mkddjwy2"));//往来单位编码,不超过50个字符
  53. partner.put("taxNumber", "Free".equals(hzlx) ? "" : UtilMap.getString(formData,"textField_mketkvxo"));//税务登记号,不超过200个字符
  54. partner.put("readOnly", false);//是否只读,默认false。如果为true,那么在每刻系统中往来单位的所有信息(如权限范围、收款账户等)均无法修改。(接口更新操作不受限制)
  55. partner.put("reMark", "");//往来单位备注
  56. partner.put("enabled", UtilMap.getBoolean(formData,"radioField_mketkvw8"));//是否启用(true:启用;false:禁用)。若该参数为空,新增则默认为true,更新则保持系统内状态。
  57. }
  58. Map body = new HashMap();
  59. body.put("partnerList", Arrays.asList(partner));
  60. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://ng.maycur.com/api/openapi/tradingPartner/batch/save", MkBxUtil.initTokenHeader(), null, body));
  61. log.info("Result:",result);
  62. return McR.success();
  63. }
  64. @Override
  65. public McR saveYpApplication(Map map) {
  66. String formInstId = UtilMap.getString(map, "formInstId");
  67. Map formData = ydClient.queryData(YDParam.builder()
  68. .formInstanceId(formInstId)
  69. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  70. Map application = new HashMap();
  71. application.put("formSubTypeBizCode","KPSQD");//单据编码(云票系统内维护的)
  72. application.put("bizCode", UtilMap.getString(formData,"serialNumberField_mknspz75"));//外部系统中的开票申请单业务编码。必须系统内唯一,用于判断开票申请单是否已导入。
  73. Map clientLegalEntityOaDto = new HashMap();//客户开票信息对象
  74. clientLegalEntityOaDto.put("invoiceTitle",UtilMap.getString(formData,"selectField_mkxmix7e"));//名称
  75. clientLegalEntityOaDto.put("dutyParagraph",UtilMap.getString(formData,"textField_mm2wj87l"));//税号
  76. clientLegalEntityOaDto.put("account",UtilMap.getString(formData,"textField_mm2wj87u"));//账号
  77. clientLegalEntityOaDto.put("bankBranchName",UtilMap.getString(formData,"textField_mm2wj87t"));//银行
  78. application.put("clientLegalEntityOaDto",clientLegalEntityOaDto);
  79. application.put("legalEntityBizCode",UtilMap.getString(formData,"textField_mm2wj87x"));//公司主体code(后续传税号)
  80. application.put("estimatedDate",System.currentTimeMillis());//预计开票时间
  81. String fplx = UtilMap.getString(formData, "selectField_mkdnuvem");//发票类型
  82. String estimatedInvoiceType = "";
  83. switch (fplx){
  84. case "应/免税普票":estimatedInvoiceType = "ELECTRONIC_VAT";break;//增值税普通发票(电子)
  85. case "专票":estimatedInvoiceType = "ELECTRONIC_SPACIAL_VAT";break;//增值税电子专用发票
  86. case "红冲":break;
  87. case "形式发票":break;
  88. case "收据":break;
  89. default:break;
  90. }
  91. application.put("estimatedInvoiceType",estimatedInvoiceType);//发票类型
  92. application.put("phoneNumber",UtilMap.getString(formData,"textField_mkdo0azf"));//收票人电话
  93. application.put("email",UtilMap.getString(formData,"textField_mkdo0azn"));//收票邮箱
  94. application.put("applicationComment",UtilMap.getString(formData,"textareaField_mkdo0aze"));//开票备注
  95. Map item = new HashMap();
  96. item.put("productBizCode","1001");//产品bizcode
  97. item.put("invoiceName",UtilMap.getString(formData,"textField_mkgarw4d"));//开票名称
  98. item.put("taxPercent",UtilMap.getDouble(formData,"numberField_mkgkboht"));//税率
  99. item.put("quantity",1);//数量
  100. item.put("forexName","CNY");//币种
  101. item.put("exchangeRate",1);//外汇汇率
  102. item.put("priceWithTax",UtilMap.getDouble(formData,"numberField_mkdo0azb"));//含税单价
  103. item.put("taxClassShortCode",UtilMap.getString(formData,"textField_mm49zsli"));//税收分类编码
  104. application.put("items",Arrays.asList(item));
  105. Map result = MkYpUtil.application_oa(Arrays.asList(application));
  106. return McR.success();
  107. }
  108. @Override
  109. public void invoiceWriteBack(Map map) {
  110. //获取发票信息
  111. Map calloutParams = UtilMap.getMap(map, "calloutParams");
  112. Map bizData = UtilMap.getMap(calloutParams, "bizData");
  113. String bizCode = UtilMap.getString(bizData, "bizCode");//发票号码
  114. String invoiceNumber = UtilMap.getString(bizData, "invoiceNumber");//发票号码
  115. String pdfUrl = UtilMap.getString(bizData, "pdfUrl");//pdf文件下载地址
  116. String downloadPageUrl = UtilMap.getString(bizData, "downloadPageUrl");//发票下载页面链接
  117. List<Map> detailItems = (List<Map>) UtilMap.getList(bizData, "detailItems");
  118. List<Map> documentCorrelates = UtilMap.getList(detailItems.get(0), "documentCorrelates");
  119. String lsh = UtilMap.getString(documentCorrelates.get(0), "bizCode");//开票申请单编号
  120. //回写宜搭
  121. Map formData = new HashMap();
  122. formData.put("radioField_mkxripcc","开票成功");
  123. formData.put("textField_mkxripc6",invoiceNumber);
  124. formData.put("textField_mm3aixk0",downloadPageUrl);
  125. if (Strings.isNotBlank(pdfUrl)){
  126. String fileName = invoiceNumber + ".pdf";
  127. String downloadPath = "d:\\" + fileName;
  128. downloadFile(pdfUrl,downloadPath);//下载pdf发票
  129. String downloadUri = "http://localhost:8080/api/siku/files/"+fileName+"?option=download" + fileName;
  130. String previewUri = "http://localhost:8080/api/siku/files/"+fileName+"?option=preview" + fileName;
  131. Map attachmentField = new HashMap();
  132. attachmentField.put("downloadUrl",downloadUri);
  133. attachmentField.put("name",fileName);
  134. attachmentField.put("previewUrl",previewUri);
  135. attachmentField.put("url",downloadUri);
  136. attachmentField.put("ext","pdf");
  137. formData.put("attachmentField_mkxripc5",Arrays.asList(attachmentField));
  138. }
  139. ydClient.operateData(YDParam.builder()
  140. .formInstanceId(bizCode)
  141. .searchCondition(JSONObject.toJSONString(UtilMap.map("serialNumberField_mknspz75",lsh)))
  142. .formUuid("FORM-A9A47B0365DB437F8F4C8E01B4468220K7GU")
  143. .formDataJson(JSONObject.toJSONString(formData))
  144. .build(), YDConf.FORM_OPERATION.upsert);
  145. }
  146. //文件下载到本地
  147. private void downloadFile(String downloadUri,String downloadPath){
  148. try {
  149. URL url = new URL(downloadUri);
  150. HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
  151. int responseCode = httpConn.getResponseCode();
  152. // 检查HTTP响应代码是否为200
  153. if (responseCode == HttpURLConnection.HTTP_OK) {
  154. InputStream inputStream = httpConn.getInputStream();
  155. FileOutputStream outputStream = new FileOutputStream(downloadPath);
  156. byte[] buffer = new byte[4096];
  157. int bytesRead = -1;
  158. while ((bytesRead = inputStream.read(buffer)) != -1) {
  159. outputStream.write(buffer, 0, bytesRead);
  160. }
  161. outputStream.close();
  162. inputStream.close();
  163. } else {
  164. System.out.println("无法下载文件。HTTP响应代码: " + responseCode);
  165. }
  166. httpConn.disconnect();
  167. }catch (Exception e){
  168. throw new RuntimeException(e);
  169. }
  170. }
  171. }