Преглед изворни кода

【英唐电子发票-红冲】

DINGYL пре 2 година
родитељ
комит
a5738cb751

+ 9 - 0
src/main/java/com/uas/eis/controller/ERPController.java

@@ -55,4 +55,13 @@ public class ERPController {
     public Map<String, Object> getElecInvoices(String master, Integer id){
         return erpService.getElecInvoicesById(master,id);
     }
+
+    /**
+     * 红冲
+     */
+    @RequestMapping("/erp/rushRed")
+    public Map<String, Object> rushRed(String master, Integer id){
+        return erpService.rushRed(master,id);
+    }
+
 }

+ 30 - 0
src/main/java/com/uas/eis/dao/RedInvoiceReq.java

@@ -0,0 +1,30 @@
+package com.uas.eis.dao;
+
+import lombok.Data;
+
+@Data
+public class RedInvoiceReq {
+    String billId;//非必填	32	红字确认单申请号,需要保持唯一,不传的话系统自动生成一个
+    String blueInvoiceLine;//必填	pc	2	对应蓝票发票种类: bs:电子发票(增值税专用发票), pc:电子发票(普通发票),es:全电纸质发票(增值税专用发票), ec:全电纸质发票(普通发票),p:普通发票(电票),c:普通发票(纸票),s:专用发票,b:增值税电子专用发票
+    String applySource;//必填	0	2	申请方(录入方)身份: 0 销方 1 购方
+    String blueInvoiceNumber;//非必填	20230508287375668802	20	对应蓝字发票号码(蓝票是增值税发票时必传,长度为8位数字,若传20位数字则视为是蓝字数电票号码)
+    String blueInvoiceCode;//非必填	 12	对应蓝字发票代码(蓝票是增值税发票时必传)
+    String blueElecInvoiceNumber;//非必填	 20	对应蓝字数电票号码(数电普票、数电专票、数纸普票、数纸专票都需要传,蓝票是增值税发票时不传)
+    String billTime;//非必填 	填开时间(时间戳格式),默认为当前时间
+    String sellerTaxNo;//必填	91440101MA5APD8X8J	20	销方税号
+    String sellerName;//必填	广东航天信息爱信诺科技有限公司	100	销方名称,申请说明为销方申请时可为空
+    String departmentId;//非必填		-	32	部门门店id(诺诺网系统中的id)
+    String clerkId;//非必填		-	32	开票员id(诺诺网系统中的id)
+    String buyerTaxNo;//非必填	91330106MA2AYNWD8M	20	购方税号
+    String buyerName;//	必填	浙江诺诺网络科技有限公司	100	购方名称
+    String vatUsage;//非必填		-	2	蓝字发票增值税用途(预留字段可为空): 1 勾选抵扣 2 出口退税 3 代办出口退税 4 不抵扣
+    String saleTaxUsage;//非必填		-	2	蓝字发票消费税用途(预留字段可为空)
+    String accountStatus;//非必填	-	2	发票入账状态(预留字段可为空): 0 未入账 1 已入账
+    String redReason;//必填	2	冲红原因: 1销货退回 2开票有误 3服务中止 4销售折让
+    String extensionNumber;//非必填	9998	5	分机号
+    String autoInvoice;//非必填	0	2	是否自动开票,0否(不传默认0)1是;传1时,所申请的确认单变为购销双方已确认或无需确认状态时,而自动开具红票。目前该字段不生效,电票都自动开,纸票都不自动
+    String orderNo;//非必填20	若有值,则在无需确认或购销双方已确认后去自动开红票,发票的开票单号用该值
+    String phone;//非必填	20	交付手机,红票优先取该值,不传默认取原蓝票
+    String email;//非必填50	交付邮箱,红票优先取该值,不传默认取原蓝票
+    String callbackUrl;//非必填225	确认单回传地址,回调内容可联系服务人员;自动开票时,会透传到开票接口
+}

+ 2 - 0
src/main/java/com/uas/eis/service/ERPService.java

@@ -17,4 +17,6 @@ public interface ERPService {
     Map<String, Object> cancelInvoiceOrder(String master, int id);
     Map<String, Object> getElecInvoicesById(String master, Integer id);
     Map<String, Object> getElecInvoices(String appKey,String appSecret,String token,String taxnum,int ioid,String ioCode);
+    Map<String, Object> rushRed(String master, int id);
+    void queryInvoiceRedConfirm(String taxnum, String appKey, String appSecret, String token,String url,String redApplycode);
 }

+ 75 - 0
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -349,6 +349,81 @@ public class ERPServiceImpl implements ERPService {
         }
         return res;
     }
+
+    @Override
+    public Map<String, Object> rushRed(String master, int id) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        Object[] obs=baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_invoice_config",new String[]{"appKey","appSecret","token","taxnum"},"username='"+master+"'");
+        String url=donlimConfig.getRoute();
+        String appKey = donlimConfig.getAppKey();
+        String appSecret = donlimConfig.getAppSecret();
+        String token =  donlimConfig.getToken();
+        String taxnum=  donlimConfig.getTaxnum();
+        if(donlimConfig.isProd()){
+            appKey =  obs[0].toString();
+            appSecret =  obs[1].toString();
+            token = obs[2].toString();// 访问令牌
+            taxnum = obs[3].toString();// 授权企业税号
+        }
+        logger.info("rushRed begin: master {} ,id {} ",master,id);
+        SpObserver.putSp(master);
+        SqlRowList rs_main = baseDao.queryForRowSet("select * from invoiceOrder left join customer on io_cucode=cu_code left join elecinvoice on io_id=ei_ioid where io_id="+id);
+        if(rs_main.next()){
+            RedInvoiceReq redInvoiceReq=new RedInvoiceReq();
+            redInvoiceReq.setBlueInvoiceLine(rs_main.getGeneralString("io_invoiceline"));//蓝票发票种类
+            redInvoiceReq.setApplySource("0");//申请方(录入方)身份: 0 销方 1 购方
+            redInvoiceReq.setSellerTaxNo(donlimConfig.getTaxnum());//销方税号
+            redInvoiceReq.setBuyerName(rs_main.getGeneralString("cu_name"));//购方名称
+            redInvoiceReq.setBuyerTaxNo(rs_main.getGeneralString("ei_taxno"));
+            redInvoiceReq.setRedReason(rs_main.getGeneralString("io_redreason"));
+            redInvoiceReq.setBlueElecInvoiceNumber(rs_main.getGeneralString("ei_allelectronicinvoicenumber"));
+            NNOpenSDK sdk = NNOpenSDK.getIntance();
+            String content =sdk.convertToUtf8(JSONArray.toJSONString(redInvoiceReq));
+            String method = "nuonuo.OpeMplatform.saveInvoiceRedConfirm"; // API方法名
+            String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
+            String resp = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
+            System.out.println(resp);
+            Map<Object, Object> res=JSONUtil.toMap(resp);
+            System.out.println(res);
+            Object code=res.get("code");
+            Object describe=res.get("describe");
+            Object result=res.get("result");
+
+            //{"code":"E0000","describe":"调用成功","result":"1135624457459470336"}
+            if(code !=null && "E0000".equals(code.toString())){//调用成功
+                queryInvoiceRedConfirm( taxnum,  appKey,  appSecret,  token, url, result.toString());
+                baseDao.execute("update elecinvoice set ei_redapplycode='"+result.toString()+"' where ei_id="+rs_main.getGeneralInt("ei_id"));
+                //baseDao.execute("update invoiceOrder set io_resstatus='' where io_id="+id);
+                baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'红字确认单申请',sysdate,'SUCCEED','',"+id+") ");
+            }else{
+                //baseDao.execute("update invoiceOrder set io_resstatus='对接失败' where io_id="+id);
+                baseDao.execute("insert into invoicedockLog(id_,code_,date_,result_,err_,keyvalue_)values(invoicedockLog_seq.nextval,'红字确认单申请',sysdate,'FAILED','("+code+")"+describe+"',"+id+") ");
+            }
+            //logger.info("pushInvoiceOrder master {} ,id {} status {} message {}",master,id,status,message);
+            map.put("success", true);
+            map.put("describe", describe);
+            return map;
+        }else{//数据无效
+            logger.info("rushRed err {对接源信息无效} ,master {} , id {} status {} message {}",master,id);
+            map.put("success", false);
+            map.put("message", "对接源信息无效");
+            return map;
+        }
+    }
+
+    @Override
+    public void queryInvoiceRedConfirm(String taxnum, String appKey, String appSecret, String token,String url,String redApplycode) {
+        NNOpenSDK sdk = NNOpenSDK.getIntance();
+        String method = "nuonuo.OpeMplatform.queryInvoiceRedConfirm"; // API方法名
+        Map<String,String> reqParam=new HashMap<>();
+        reqParam.put("identity","0");
+        reqParam.put("billId",redApplycode);
+        String content=JSONArray.toJSONString(reqParam);
+        String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
+        String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
+        System.out.println(result);
+    }
+
     private List<String> getElecInvoicesSqls(int ioid,List<FindOrderRelationInvoiceDTO> data){
         List<String> sqls = new ArrayList<String>();
         boolean syncToBillOut = baseDao.isDBSetting("BillOut","syncToBillOut");