Browse Source

【英唐电子发票】

DINGYL 2 years ago
parent
commit
7f5ef86c6f

+ 1 - 0
src/main/java/com/uas/eis/config/DonlimConfig.java

@@ -21,4 +21,5 @@ public class DonlimConfig {
 
     private String taxnum;
 
+    private boolean isProd;
 }

+ 14 - 2
src/main/java/com/uas/eis/controller/ERPController.java

@@ -19,11 +19,23 @@ public class ERPController {
     private ERPService erpService;
 
     /**
-     *开票订单对接
+     *开票订单对接-创建订单
      */
     @RequestMapping("/erp/pushInvoiceOrder")
     public ApiResult<String> pushInvoiceOrder(String master,int id){
         return erpService.pushInvoiceOrder(master,id);
     }
-
+    /**
+     *开票订单对接-订单状态查询
+     */
+    @RequestMapping("/erp/findOrderState")
+    public ApiResult<String> findOrderState(String master,int id){
+        return erpService.findOrderState(master,id);
+    }
+    /*
+    * 开票订单-提交开票(目前不启用此接口,财务去平台开票)
+    * */
+    public ApiResult<String> invoiceOrderSubmitKp(String master,int id){
+        return erpService.invoiceOrderSubmitKp(master,id);
+    }
 }

+ 0 - 3
src/main/java/com/uas/eis/dao/BaseDao.java

@@ -891,7 +891,4 @@ public class BaseDao{
 		updateByCondition(tableName, statusCodeField + "='AUDITED'," + statusField + "='已审核',"
 				+ auditdateField + "=" + DateUtil.parseDateToOracleString(Constant.YMD_HMS, new Date()) + "," + auditorField + "='"+employee.getEm_name()+"'", condition);
 	}
-	public boolean isProd(String url){
-		return url.equals("https://sandbox.nuonuocs.cn/open/v1/services")? false : true;
-	}
 }

+ 22 - 0
src/main/java/com/uas/eis/dao/BaseResp.java

@@ -0,0 +1,22 @@
+package com.uas.eis.dao;
+
+public class BaseResp {
+    private Integer code;
+    private String message;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 19 - 0
src/main/java/com/uas/eis/dao/FindOrderStateData.java

@@ -0,0 +1,19 @@
+package com.uas.eis.dao;
+
+public class FindOrderStateData{
+    private String invoiceStatus;//订单状态(0:待处理 1:处理中 2:已处理 4:提交失败 6:部分待处理 7:无需开票)
+    private String errorMsg;//提交失败原因
+    public void setInvoiceStatus(String invoiceStatus) {
+        this.invoiceStatus = invoiceStatus;
+    }
+    public String getInvoiceStatus() {
+        return invoiceStatus;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+}

+ 13 - 0
src/main/java/com/uas/eis/dao/FindOrderStateResp.java

@@ -0,0 +1,13 @@
+package com.uas.eis.dao;
+
+public class FindOrderStateResp extends BaseResp {
+    private FindOrderStateData data;
+
+    public FindOrderStateData getData() {
+        return data;
+    }
+
+    public void setData(FindOrderStateData data) {
+        this.data = data;
+    }
+}

+ 12 - 0
src/main/java/com/uas/eis/dao/InvoiceGoodsTransportsDTO.java

@@ -0,0 +1,12 @@
+package com.uas.eis.dao;
+
+import lombok.Data;
+
+@Data
+public class InvoiceGoodsTransportsDTO {
+    String transportTool;//	运输工具种类:1 铁路运输、2 公路运输、3 水路运输、4 航空运输、5 管道运输、6 其他运输工具
+    String transportToolNum;//运输工具牌号
+    String origin;//起运地
+    String destination;//到达地
+    String goodsName;//运输货物名称
+}

+ 16 - 0
src/main/java/com/uas/eis/dao/InvoiceOrderDTO.java

@@ -0,0 +1,16 @@
+package com.uas.eis.dao;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InvoiceOrderDTO {
+    String orderType;//订单类型:1销售单,2退货单 不能为空
+    String autoInvoiceFlag;//是否自动开票(false:订单只入库; true:订单入库后自动完成开票全流程 ;只能传false或true,不传默认false)
+    String repeatCall;//订单号重复时的处理方式(0:报错 1:覆盖原订单,仅订单状态为待处理时可以覆盖;不传默认0)
+    OrderDTO orderInfo;//订单基础信息
+    List<OrderDetDTO> orderOriginalDetails;//商品列表
+    List<InvoiceGoodsTransportsDTO> invoiceGoodsTransports;//货物运输信息列表,specificFactor为4且为销售单时,以下字段必传
+
+}

+ 48 - 0
src/main/java/com/uas/eis/dao/OrderDTO.java

@@ -0,0 +1,48 @@
+package com.uas.eis.dao;
+
+import lombok.Data;
+
+@Data
+public class OrderDTO {
+    String originalOrderNo;//订单编号:支持字母、数字、英文符号 不能为空
+    String addDate;//下单时间(年月日时分秒 格式yyyy-MM-dd HH:mm:ss)若无下单时间自动添加当前时间
+    String invoiceLine;//发票种类(只能传 p:普通发票(电票) c:普通发票(纸票) s:专用发票(纸票) b:专用发票(电子) e:收购发票(电票) f:收购发票(纸质) r:普通发票(卷式) bs:数电专票(电子) pc:数电普票(电子) es:数电专票(纸质) ec:数电普票(纸质)中的 一种)
+    String specificFactor;//0普通发票(默认)、1 成品油、4 货物运输、35 矿产品
+    String saleTaxNum;//销方税号(字母+数字 6-20字符),与companyCode不能同时为空
+    String saleAddress;//销方地址,不传时去开票默认取系统内开票信息中配置的
+    String salePhone;//销方电话,不传时去开票默认取系统内开票信息中配置的
+    String saleAccount;//销方开户行及账号,不传时去开票默认取系统内开票信息中配置的
+    String buyerName;//客户名称
+    String naturalPersonFlag;//购买方(客户)自然人标记,1是、0否,为空默认0,仅票种为pc时支持传入
+    String taxNum;//购方税号或个人证件号码
+    String account;//开户行及账号
+    String address;//客户地址
+    String telephone;//客户电话
+    String phone;//交付手机,退货单开专票和数电发票时,固定取原蓝票的,可不传
+    String email;//交付邮箱,退货单开专票和数电发票时,固定取原蓝票的,可不传
+    String ccPhone;//抄送手机,多个时用英文逗号隔开,最多支持5个,必须在phone字段有值时,才支持传入
+    String ccEmail;//抄送邮箱,多个时用英文逗号隔开,最多支持5个,必须在email字段有值时,才支持传入
+    String orderRemark;//订单备注
+    String remark;//发票备注,票种为数电票时为200字符
+    String relateSaleOrderNo;//原销售订单编号(退货单选填,销售单不生效)
+    String salesperson;//销售员
+    String issuanceDate;//发货日期(年月日 yyyy-MM-dd)
+    String clerk;//开票员
+    String payee;//收款人
+    String checker;//复核人
+    String callbackUrl;//回调通知地址
+    String yfpdm;//原发票代码,退货单自动开票时,原发票代码不能为空
+    String yfphm;//原发票号码,退货单自动开票时,原发票号码不能为空
+    String deptId;//订单所属部门id,传诺诺网的部门id
+    String clerkId;//订单所属票员id,传诺诺网开票员id
+    String bField1;//自定义字段1,需开通自定义字段功能
+    String bField2;//自定义字段2
+    String bField3;//自定义字段3
+    String extensionNumber;//分机号(当autoInvoiceFlag为true时根据分机号,机器编号,终端号查找开票设备)
+    String machineCode;//机器编号(当autoInvoiceFlag为true时根据分机号,机器编号,终端号查找开票设备
+    String terminalNumber;//终端号(当autoInvoiceFlag为true时根据分机号,机器编号,终端号查找开票设备
+    String companyCode;//组织编码,saleTaxNum不传时,根据该字段匹配在诺税通工作台基础模块维护的组织编码,获得对应的销方税号;二者都传时,取saleTaxNum;有值时,topSaleTaxNum必传
+    String deptCode;//部门编码,根据该字段匹配在诺税通工作台基础模块维护的部门编码,获取订单对应的所属部门;优先取deptId
+    String userCode;//用户编码,根据该字段匹配在诺税通工作台基础模块维护的用户编码,获取订单对应的所属用户;优先取userId
+    String topSaleTaxNum;//顶级公司税号,saleTaxNum不传,且companyCode有值时,必传
+}

+ 27 - 0
src/main/java/com/uas/eis/dao/OrderDetDTO.java

@@ -0,0 +1,27 @@
+package com.uas.eis.dao;
+
+import lombok.Data;
+
+@Data
+public class OrderDetDTO {
+    String rowNo;//行编号(非序号,可与自身业务系统内唯一编号对应,订单内唯一)
+    String goodsName;//	商品名称 不能为空
+    String spec;//规格型号
+    String unit;//单位(当成品油标志为1时,需为升或吨)
+    String num;//数量,销售单传入正数,退货单传入负数 2、包含小数点最长不超过16位,超出自动截取。数量、单价必须都不填,或者都必填。当数量、单价都不填时,金额必填
+    String price;//单价,包含小数点最长不超过16位,超出自动截取。数量、单价必须都不填,或者都必填。当数量、单价都不填时,金额必填
+    String taxRate;//税率
+    String tax;//税额,若自行传入时,折扣zke有值,请传未扣除折扣前的税额,折扣减掉的税额系统自动根据税率计算
+    String taxAmount;//金额 1、不能为0 2、销售订单传入正数,退货单传入负数 3、当数量、单价都不填时,金额必填
+    String hsbz;//含税标志:(0:否,1:是) 不能为空
+    String spbm;//税收分类编码(没传,会根据商品名称和规格型号,去商品库匹配,若商品库未匹配成功,则会去税收分类编码表匹配)
+    String yhzcbs;//是否享受优惠政策:(0:否,1:是)
+    String zzstsgl;//优惠政策类型,当是否享受优惠政策为是时,优惠政策类型必填
+    String zke;//折扣金额(当该商品开折扣发票时传入;退货单时传入负数,且会用金额-折扣,跟税率重算税额后入库,建议退货单时不传,自行减掉折扣后传入)
+    String lslbs;//零税率标识1-免税 ,2-不征税, 3-其他优惠政策(普通0税率); 1、当税率为:0%,且增值税特殊管理:为“免税”, 零税率标识:需传“1” 2、当税率为:0%,且增值税特殊管理:为"不征税" 零税率标识:需传“2” 3、当税率为:0%,且增值税特殊管理:为空 零税率标识:需传“3”
+    String dField1;//商品明细自定义字段1
+    String dField2;//商品明细自定义字段2
+    String dField3;//商品明细自定义字段3
+    String dField4;//商品明细自定义字段4
+    String dField5;//商品明细自定义字段5
+}

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

@@ -10,4 +10,7 @@ import com.uas.eis.sdk.entity.ApiResult;
  */
 public interface ERPService {
     ApiResult<String> pushInvoiceOrder(String master,int id);
+    ApiResult<String> invoiceOrderSubmitKp(String master,int id);
+    ApiResult<String> findOrderState(String master,int id);
+
 }

File diff suppressed because it is too large
+ 7 - 11
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java


+ 6 - 5
src/main/resources/application-dev.yml

@@ -31,8 +31,9 @@ action:
 
 extral:
     donlim:
-        route: https://sandbox.nuonuocs.cn/open/v1/services
-        appKey : SD47646161
-        appSecret : SD681C05C3EA4408
-        token  : 3792fb46bc927024c7f6a50pwp3e6evs
-        taxnum : 339901999999142
+        route: https://sdk.nuonuo.com/open/v1/services
+        appKey : 78607195
+        appSecret : 26A860C451744A21
+        token  : 77f21f617f87135fcd97ef1ueud3dxdi
+        taxnum : 339901999999199
+        isProd : false

+ 2 - 1
src/main/resources/application-prod.yml

@@ -35,4 +35,5 @@ extral:
         appKey : 47646161
         appSecret : B6681C05C3EA4408
         token : 3792fb46bc927024c7f6a50hjkhwrkss
-        taxnum : 91440300319521190W
+        taxnum : 91440300319521190W
+        isProd : true

+ 30 - 20
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,10 +1,15 @@
 package com.uas.eis;
 
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.uas.eis.config.DonlimConfig;
 import com.uas.eis.core.config.SpObserver;
-import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.*;
 import com.uas.eis.service.ERPService;
+import com.uas.eis.utils.JSONUtil;
 import nuonuo.open.sdk.NNOpenSDK;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -13,8 +18,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.UUID;
+import java.util.*;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {UasEisApplication.class})
@@ -25,22 +29,21 @@ public class UasEisApplicationTests {
 	private ERPService erpService;
 	@Autowired
 	private DonlimConfig donlimConfig;
+
+	/**
+	 * 	开票订单对接
+	 */
 	@Test
 	public void Test() {
 		System.out.println("test");
-	/*	String taxnum = "339901999999516";//""91440300319521190W";//正式 授权企业税号
-		String appKey = "47646161";
-		String appSecret = "B6681C05C3EA4408";
-		String method = "nuonuo.OpeMplatform.queryInvoiceList"; // API方法名
-		String token = "3792fb46bc927024c7f6a50hjkhwrkss"; // 访问令牌
-		String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
-		String content = "{  \"requestType\": \"1\",  \"pageNo\": \"2\",  \"pageSize\": \"20\",  \"taxnum\": \"339901999999516\",  \"startTime\": \"2023-07-10 00:00:00\",  \"endTime\": \"2023-07-20 00:00:00\" }";
-*/
 		System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
 		Object ob=baseDao.getFieldDataByCondition("enterprise","EN_WHICHSYSTEM","1=1");
 		System.out.println(ob.toString());
-		erpService.pushInvoiceOrder("N_HUASL_SZ",0);
+		erpService.pushInvoiceOrder("N_HUASL_SZ",5);
 	}
+	/**
+	 * 	获取token
+	 */
 	@Test
 	public void Test1() {
 		/*//测试
@@ -61,19 +64,26 @@ public class UasEisApplicationTests {
 	@Test
 	public void Test2(){
 		NNOpenSDK sdk = NNOpenSDK.getIntance();
-		String taxnum ="339901999999824";//测试
-		String appKey = "SD47646161";
-		String appSecret = "SD681C05C3EA4408";
+		String taxnum ="339901999999199";////测试
+		String appKey = "78607195";
+		String appSecret = "26A860C451744A21";
 		String method = "nuonuo.OpeMplatform.queryInvoiceList"; // API方法名
-		String url = "https://sandbox.nuonuocs.cn/open/v1/services";//SDK请求地址
-		String token = "3792fb46bc927024c7f6a50pwp3e6evs";
-		String content = "{  \"requestType\": \"1\",  \"pageNo\": \"2\",  \"pageSize\": \"20\",  \"taxnum\": \"339901999999142\", " +
-						" \"startTime\": \"2023-07-10 00:00:00\",  " +
-						"\"endTime\": \"2023-07-20 00:00:00\" }";
+		String url = "https://sdk.nuonuo.com/open/v1/services";//SDK请求地址
+		String token = "77f21f617f87135fcd97ef1ueud3dxdi";
+		String content = "{  \"requestType\": \"1\",  \"pageNo\": \"2\",  \"pageSize\": \"20\",  \"taxnum\": \"339901999999199\", " +
+						" \"startTime\": \"2023-07-20 00:00:00\",  " +
+						"\"endTime\": \"2023-07-21 00:00:00\" }";
 		content=sdk.convertToUtf8(content);
 		String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
 		String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
 		System.out.println("result:");
 		System.out.println(result);
 	}
+	/**
+	 * 	请求开具发票
+	 */
+	@Test
+	public void Test3() {
+		erpService.invoiceOrderSubmitKp("N_HUASL_SZ",5);
+	}
 }

Some files were not shown because too many files changed in this diff