|
@@ -13,7 +13,9 @@ import java.io.InputStreamReader;
|
|
|
import java.io.OutputStreamWriter;
|
|
|
import java.net.HttpURLConnection;
|
|
|
import java.net.URL;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -26,7 +28,6 @@ import nc.bs.framework.common.RuntimeEnv;
|
|
|
import nc.itf.uap.IUAPQueryBS;
|
|
|
import nc.jdbc.framework.processor.ArrayListProcessor;
|
|
|
import nc.jdbc.framework.processor.BeanListProcessor;
|
|
|
-import nc.jdbc.framework.processor.BeanProcessor;
|
|
|
import nc.jdbc.framework.processor.MapProcessor;
|
|
|
import nc.log.NcLog;
|
|
|
import nc.vo.bd.defdoc.DefdocVO;
|
|
@@ -38,14 +39,12 @@ import nc.itf.uap.IVOPersistence;
|
|
|
|
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
|
import org.apache.commons.httpclient.HttpClient;
|
|
|
-import org.apache.commons.httpclient.HttpException;
|
|
|
import org.apache.commons.httpclient.methods.PostMethod;
|
|
|
import org.apache.commons.httpclient.methods.RequestEntity;
|
|
|
import org.apache.commons.httpclient.methods.StringRequestEntity;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.gbase.jdbc.log.Log;
|
|
|
|
|
|
import nc.itf.bd.defdoc.IDefdocService;
|
|
|
import nc.itf.th.IThOcrService;
|
|
@@ -63,23 +62,13 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
|
|
|
private IVOPersistence IVOPersistence = (IVOPersistence) NCLocator.getInstance().lookup(IVOPersistence.class);
|
|
|
private IUAPQueryBS iuap=(IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
|
|
|
- //锁定发票使用{
|
|
|
private String aesKey = "w34xx413y2x23w4y";
|
|
|
- private String userName = "1438490100786012161";
|
|
|
- private String password = "80c8664aa7a444049b8ed49ed5095561";
|
|
|
- private String cid_ = "766941083040768000";
|
|
|
- private String userid_="1";
|
|
|
- //}
|
|
|
-
|
|
|
- //token使用{
|
|
|
-
|
|
|
- private String appId="773676128773832704";
|
|
|
- private String secret="6726dea9883f4f6bb2725ac8750d01de";
|
|
|
- private Long cid=773676128725336064l;
|
|
|
- private String userid="2108";
|
|
|
- //}
|
|
|
+ private static String appId="1438490100786012161";
|
|
|
+ private static String secret="80c8664aa7a444049b8ed49ed5095561";
|
|
|
+ private static String cid="1438490101547343873";
|
|
|
private String upurl="https://up.mypiaojia.com/api/invoiceApi/file/uploadFileSpilit";
|
|
|
private String inverurl="https://api.mypiaojia.com/api/invoiceApi/invoice/ocr";
|
|
|
+ private String person_local_valid = "https://api.mypiaojia.com/api/invoiceApi/invoice/person_local_valid";
|
|
|
//发票锁定地址
|
|
|
private String ec_comm = "https://api.mypiaojia.com/api/invoiceApi/invoice/ec_comm";
|
|
|
private String buildToken="https://api.mypiaojia.com/api/invoiceApi/token/buildToken";
|
|
@@ -92,16 +81,17 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
/**
|
|
|
* 获取token
|
|
|
*/
|
|
|
- public String getToken() throws HttpException, IOException, BusinessException {
|
|
|
+ public String getToken(String billmaker) throws Exception {
|
|
|
NcLog.info("=======获取token开始=======");
|
|
|
//redis中获取用户token
|
|
|
- String userToken = RedisTokenManager.getToken(userid);
|
|
|
+ String userToken = RedisTokenManager.getToken(billmaker);
|
|
|
//token为空
|
|
|
if(Toolkits.isEmpty(userToken)){
|
|
|
+
|
|
|
//调用OCR接口
|
|
|
- userToken=getOcrToken(appId,cid,secret,userid);
|
|
|
+ userToken=getOcrToken(appId,cid,secret,billmaker);
|
|
|
//保存到redis,设置失效时间36000秒
|
|
|
- RedisTokenManager.setTokenTTL(userid,36000, userToken);
|
|
|
+ RedisTokenManager.setTokenTTL(billmaker,36000, userToken);
|
|
|
}
|
|
|
NcLog.info("=======token======="+userToken);
|
|
|
NcLog.info("=======获取token结束=======");
|
|
@@ -126,8 +116,7 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
if(null!=data){
|
|
|
id=data.getString("id");
|
|
|
}else{
|
|
|
- String msg=json.getJSONObject("res_base").getString("message");
|
|
|
- throw new BusinessException(msg);
|
|
|
+ throw new Exception(json.toString());
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -144,16 +133,41 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
public String ocrIdentification(String token,String data) {
|
|
|
// TODO 自动生成的方法存根
|
|
|
NcLog.info("=======发票OCR识别开始=======");
|
|
|
- JSONObject json = JSONObject.parseObject(data);
|
|
|
+ JSONObject jsondata = JSONObject.parseObject(data);
|
|
|
JSONObject jsonobject = new JSONObject();
|
|
|
- jsonobject.put("image_index", json.getJSONObject("data").getString("id"));
|
|
|
- jsonobject.put("fileTypeStr", json.getJSONObject("data").getString("fileType"));
|
|
|
+ jsonobject.put("image_index", jsondata.getJSONObject("data").getString("id"));
|
|
|
+ jsonobject.put("fileTypeStr", jsondata.getJSONObject("data").getString("fileType"));
|
|
|
jsonobject.put("flag", "13");
|
|
|
jsonobject.put("is_save", "0");
|
|
|
jsonobject.put("is_sync", "1");
|
|
|
jsonobject.put("ocrMap","");
|
|
|
jsonobject.put("operate_type",0);
|
|
|
- return doPost(inverurl,token,jsonobject.toString());
|
|
|
+ String json = doPost(inverurl,token,jsonobject.toString());
|
|
|
+ NcLog.info("发票OCR识别返回json"+json);
|
|
|
+ return json;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void InvoiceCheck(String token,String fid)
|
|
|
+ throws Exception {
|
|
|
+ NcLog.info("=======发票查验识别开始=======");
|
|
|
+ JSONObject jsonobject = new JSONObject();
|
|
|
+ jsonobject.put("id", fid);
|
|
|
+ jsonobject.put("fid", fid);
|
|
|
+ jsonobject.put("ic_cut", "0");
|
|
|
+ jsonobject.put("operate_type","0");
|
|
|
+ JSONObject req_base = new JSONObject();
|
|
|
+ req_base.put("trace", fid);
|
|
|
+ req_base.put("dev", "1");
|
|
|
+ jsonobject.put("req_base",req_base);
|
|
|
+ JSONObject json = JSONObject.parseObject(doPost(person_local_valid,token,jsonobject.toString()));
|
|
|
+
|
|
|
+ NcLog.info("发票查验返回json"+json);
|
|
|
+ JSONObject data=json.getJSONObject("data");
|
|
|
+ if(data == null) {
|
|
|
+ String msg=json.getJSONObject("actionMsg").getString("message");
|
|
|
+ throw new Exception(msg);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -167,19 +181,19 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
|
|
|
|
|
|
|
|
|
- public String getOcrToken(String appId,Long cid,String secret,String userid) throws HttpException, IOException, BusinessException{
|
|
|
+ public String getOcrToken(String appId,String cid,String secret,String userid) throws Exception{
|
|
|
HttpClient httpClient = new HttpClient();
|
|
|
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
|
|
|
httpClient.getHttpConnectionManager().getParams().setSoTimeout(5000);
|
|
|
PostMethod postMethod = new PostMethod(buildToken);
|
|
|
postMethod.setRequestHeader("content-type", "application/json");
|
|
|
postMethod.setRequestHeader("appkey", appId);
|
|
|
+ Map<String,String> oamap = QueryOAUserid(userid);
|
|
|
long l = System.currentTimeMillis();
|
|
|
Map<String, Object> map = new HashMap<String, Object>();
|
|
|
map.put("role", 1);
|
|
|
- map.put("name", "dmy06");
|
|
|
- map.put("name", "dmy06");
|
|
|
- map.put("userId", userid);//OA用户体系的用户id 2108
|
|
|
+ map.put("name", oamap.get("lastname"));
|
|
|
+ map.put("userId", oamap.get("id"));//OA用户体系的用户id 2108
|
|
|
map.put("cid", cid);
|
|
|
String s1 = JSONObject.toJSONString(map);
|
|
|
String s2 = s1 + "&time=" + l + "&secret="+secret;
|
|
@@ -357,10 +371,7 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- NcLog.info("发票OCR识别返回json:"+result);
|
|
|
-
|
|
|
+ }
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -615,7 +626,6 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
+ "(select pk_defdoclist from bd_defdoclist where code='OCRTHNC' and nvl(dr,0)=0) and memo='" + name + "' ";
|
|
|
ArrayList<Object> arrayvos=null;
|
|
|
try {
|
|
|
- IUAPQueryBS iuap= (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
|
|
|
arrayvos=(ArrayList<Object>) iuap.executeQuery(sql, new BeanListProcessor(DefdocVO.class));
|
|
|
} catch (BusinessException e) {
|
|
|
// TODO 自动生成的 catch 块
|
|
@@ -679,7 +689,9 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
|
|
|
@Override
|
|
|
public void UpdateInvoiceStatus(String status, InvoiceVO[] vos) throws Exception {
|
|
|
+ NcLog.info("=======锁定发票、修改开始=======");
|
|
|
for (InvoiceVO invoiceVO : vos) {
|
|
|
+ Map<String,String> oamap = QueryOAUserid(invoiceVO.getParent().getAttributeValue("billmaker").toString());
|
|
|
//审批结果Y2代表通过 N0代表不通过 R0代表驳回T1报销中
|
|
|
InvoiceItemVO[] arrInvoiceItemVO = (InvoiceItemVO[]) invoiceVO.getChildren(InvoiceItemVO.class);
|
|
|
List<Map<Object, Object>> listMapVbdef20 = new ArrayList<Map<Object, Object>>();
|
|
@@ -705,14 +717,14 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
if(listMapVbdef20.size() > 0) {
|
|
|
JSONObject bodyJson = new JSONObject();
|
|
|
//发票云团队id
|
|
|
- bodyJson.put("cid", cid_);
|
|
|
+ bodyJson.put("cid", cid);
|
|
|
//userId报销人id(OA)
|
|
|
- bodyJson.put("userId", userid);
|
|
|
+ bodyJson.put("userId", oamap.get("id"));
|
|
|
//userId报销人id(OA)
|
|
|
bodyJson.put("flag", "3");
|
|
|
//发票云发票ID数组
|
|
|
bodyJson.put("fids", listVbdef20.toArray());
|
|
|
- UpdateInvoiceOCR(bodyJson.toString());
|
|
|
+ NcLog.info("发票锁定返回json:"+UpdateInvoiceOCR(bodyJson.toString()));
|
|
|
//0 未报销 1 报销中 2已报销
|
|
|
String sreim = "0";
|
|
|
if("Y".equals(status)) {
|
|
@@ -721,8 +733,8 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
sreim = "1";
|
|
|
}
|
|
|
JSONObject bodyJson1 = new JSONObject();
|
|
|
- bodyJson1.put("cid", cid_);
|
|
|
- bodyJson1.put("userId", userid);
|
|
|
+ bodyJson1.put("cid", cid);
|
|
|
+ bodyJson1.put("userId", oamap.get("id"));
|
|
|
bodyJson1.put("flag", "2");
|
|
|
bodyJson1.put("sreim",sreim);
|
|
|
JSONArray arrinfos = new JSONArray();
|
|
@@ -732,15 +744,15 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
bodyJson2.put("dataid", invoiceVO.getParent().getAttributeValue("pk_invoice"));
|
|
|
bodyJson2.put("number", invoiceVO.getParent().getAttributeValue("pk_invoice"));
|
|
|
bodyJson2.put("amount", "0".equals(sreim) ? "0.00" : map.get("shortname2"));
|
|
|
- bodyJson2.put("uid", userid);
|
|
|
+ bodyJson2.put("uid", oamap.get("id"));
|
|
|
bodyJson2.put("date",Long.toString(date));
|
|
|
bodyJson2.put("name", invoiceVO.getParent().getAttributeValue("pk_invoice"));
|
|
|
bodyJson2.put("fid", map.get("name5"));
|
|
|
- bodyJson2.put("cid", cid_);
|
|
|
+ bodyJson2.put("cid", cid);
|
|
|
arrinfos.add(bodyJson2);
|
|
|
}
|
|
|
bodyJson1.put("infos", arrinfos);
|
|
|
- UpdateInvoiceOCR(bodyJson1.toString());
|
|
|
+ NcLog.info("发票锁定修改返回json:"+UpdateInvoiceOCR(bodyJson1.toString()));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -750,12 +762,12 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
* @param content
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
- private void UpdateInvoiceOCR(String bodyJson) throws Exception {
|
|
|
- String content = InvoiceCloudAESUtil.startAssemble(aesKey, password, bodyJson);
|
|
|
+ private String UpdateInvoiceOCR(String bodyJson) throws Exception {
|
|
|
+ String content = InvoiceCloudAESUtil.startAssemble(aesKey, secret, bodyJson);
|
|
|
HttpClient httpClient = new HttpClient();
|
|
|
PostMethod postMethod = new PostMethod(ec_comm);
|
|
|
postMethod.setRequestHeader("content-type", "application/json");
|
|
|
- postMethod.setRequestHeader("appkey", userName);
|
|
|
+ postMethod.setRequestHeader("appkey", appId);
|
|
|
RequestEntity entity = new StringRequestEntity (content ,"application/json" ,"UTF-8");
|
|
|
postMethod.setRequestEntity(entity);
|
|
|
httpClient.executeMethod(postMethod);
|
|
@@ -765,5 +777,24 @@ public class ThOcrServiceImpl implements IThOcrService{
|
|
|
if(data == null) {
|
|
|
throw new BusinessException(responseMsg);
|
|
|
}
|
|
|
+ return json.toJSONString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private Map<String,String> QueryOAUserid(String cuserid) throws Exception {
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
+ sql.append("SELECT");
|
|
|
+ sql.append(" oa_user.id,");
|
|
|
+ sql.append(" oa_user.lastname");
|
|
|
+ sql.append(" FROM");
|
|
|
+ sql.append(" sm_user sm_user");
|
|
|
+ sql.append(" left join oa_user oa_user on sm_user.pk_psndoc = TRIM(oa_user.outkey)");
|
|
|
+ sql.append(" WHERE");
|
|
|
+ sql.append(" sm_user.cuserid = '"+cuserid+"'");
|
|
|
+ Map<String,String> map = (Map<String, String>) iuap.executeQuery(sql.toString(), new MapProcessor());
|
|
|
+ if(map == null) {
|
|
|
+ throw new Exception("获取oaid失败,请检查用户和人员是否关联!");
|
|
|
+ }
|
|
|
+ return map;
|
|
|
}
|
|
|
}
|