| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632 |
- package xin.glue.cargocnHttpClient;
- import java.io.ByteArrayOutputStream;
- import java.io.PrintStream;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.Set;
- import org.apache.commons.lang.StringUtils;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.posdata.glue.biz.activity.PosActivity;
- import com.posdata.glue.context.PosContext;
- import com.posdata.glue.dao.PosGenericDao;
- import com.posdata.glue.dao.vo.PosParameter;
- import com.posdata.glue.dao.vo.PosRow;
- import com.posdata.glue.dao.vo.PosRowSet;
- /**
- * 货运中国--远程调用物流跟踪平台接口上传数据类
- *
- * @author KangMiao
- * @Date 2015-4-13 下午03:25:53
- *
- */
- public class WayBillClient extends PosActivity {
- /**
- * 远程测试用的地址http://dev.cargocn.net/cargocn/ws/uploadWayBill.do
- */
- private static String testUrl = "http://dev.cargocn.net/cargocn/ws/uploadWayBill.do";
- /**
- * 正式调用地址http://www.cargocn.net/cargocn/ws/uploadWayBill.do
- * 货运中国ip地址:120.26.85.206;
- */
- private static String runUrl = "http://120.26.85.206/cargocn/ws/uploadWayBill.do";
- /**
- * 中转地址http://192.168.3.3:8060/XGToCargocnServer/server/ForwardCargocn-SendRZ
- * ST:ST_1234
- */
- private static String forwardUrl = "http://192.168.3.3:8060/XGToCargocnServer/server/ForwardCargocn-SendRZ";
-
- /**
- * 调用物流跟踪平台接口方法,将订单数据通过此方法上传给物流跟踪平台系统;
- * @param pDlivDirNos运输指示号,TRNF_DTIMEs发货时间,ORD_NMs收货单位,GET_ON_PCDs发货地址,DEST_PCD_DESC收货地址,
- * COIL_WGTs钢卷实际重量(ACT_WGT),CUST_NMs合同单位,SHIP_COMP_CDs运输公司,TRANS_CAR_NOs车号
- * ,SPEC_STL_GRDs牌号,OLD_SAMPL_NOs钢卷号,SM_CFNMs产品名称
- * @return result解密后得到的返回值返回0为成功调用,所有非0均为非成功调用,目前返回值如下:
- 1000:签名验证失败
- 1001:运单对象不得为空
- 1002:发货人ID不得为空
- 1003:发货人信息加载出错
- 1004:发货人状态不正常
- 1005:订单号不得为空
- 1006:承运商不得为空
- 1007:承运商信息加载出错
- 1008:承运商没在货运中国平台开户
- 1009:运单子项不得为空
- 1010:车牌号不得为空
- 1011:车牌号信息加载出错
- 1012:车牌号没在货运中国平台注册
- 1013:该车辆在货运中国平台尚未关联司机帐号
- */
- public String cargocnClientPost(String[] pDlivDirNos, String[] TRNF_DTIMEs,
- String[] ORD_NMs, String[] DEST_PCD_DESCs,
- String[] COIL_WGTs, String[] CUST_NMs, String[] SHIP_COMP_CDs,
- String[] TRANS_CAR_NOs, String[] OLD_SAMPL_NOs,
- String[] SPEC_STL_GRDs, String[] SM_CFNMs,String[] SHIP_COMP_NMs,PosGenericDao dao) {
- int iCnt = 0;
- if (null != pDlivDirNos && 0 != pDlivDirNos.length) {
- iCnt = pDlivDirNos.length;
- } else
- return "返回结果:1001;";
- Set<String> dlivNoSet = new HashSet<String>();
- Map<String, WayBill> wayMap = new HashMap<String, WayBill>();
- //汇总处理
- for (int i = 0; i < iCnt; i++) {
- try {
- if(!dlivNoSet.contains(pDlivDirNos[i])) {
- // 主数据
- WayBill b = new WayBill();
- // 运送指示号
- b.setOrderNo(pDlivDirNos[i]);
- // 默认1销售物流, 2:采购物流 3:内部物流
- b.setOrderType("1");
- // 发运日期TRNF_DTIME
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String trnFTime = TRNF_DTIMEs[i];
- Date sendDate = null;
- if(StringUtils.isEmpty(trnFTime) || "-".equals(trnFTime))
- sendDate = Calendar.getInstance().getTime();
- else
- sendDate = sdf.parse(trnFTime);
- b.setScheduleSendDate(sendDate);
- // 发货企业代码, 物流跟踪平台给出的新钢集团代码6
- b.setShipperCompanyId(Long.valueOf(6));
-
- // 发货城市
- b.setShipperCity("新余市");
- // 发货地点 GET_ON_PCD 热轧系统默认为热卷厂
- b.setShipperAddr("热卷厂");
- // 收货单位 ORD_NMs
- String ordNm = ORD_NMs[i];
- if(StringUtils.isEmpty(ordNm)) {
- ordNm = CUST_NMs[i];
- }
- b.setReceiveCompanyName(ordNm);
- //通过到站地点从产销数据库查收货城市、收货人、电话
- PosParameter param5 = new PosParameter();
- param5.setWhereClauseParameter(0, DEST_PCD_DESCs[i]);
- PosRowSet rows5 = getDao("mesdao").find("UIJ010060_cx.select", param5);
- if(rows5.hasNext()){
- PosRow row = rows5.next();
- Object receiveCity = row.getAttribute("UNLOADDOCK"); //收货城市
- Object receiveNM = row.getAttribute("SHR"); //收货人
- Object receivePhone = row.getAttribute("SHRDH"); //收货人电话
- if(null != receiveCity)
- b.setReceiveCity(receiveCity.toString()); //收货城市
- else
- b.setReceiveCity(DEST_PCD_DESCs[i]);
- // b.setReceiveCity("新余市");
- if(null != receiveNM)
- b.setReceiveContactName(receiveNM.toString()); //收货联系人
- else
- b.setReceiveContactName("");
- if(null != receivePhone)
- b.setReceiveContactPhone(receivePhone.toString()); //收货联系人电话
- else
- b.setReceiveContactPhone("");
- }
- // 到站地点 DEST_PCD_DESC
- b.setReceiveAddr(DEST_PCD_DESCs[i]);
- // 合同单位
- b.setCustomerName(CUST_NMs[i]);
-
- // 运输公司若名字SHIP_COMP_NMs为空则用 SHIP_COMP_CDs[i] 新余中新物流有限公司
- // b.setLogisticsCompanyName("新余中新物流有限公司");
- if(StringUtils.isEmpty(SHIP_COMP_NMs[i])) {
- b.setLogisticsCompanyName(SHIP_COMP_CDs[i]);
- } else
- b.setLogisticsCompanyName(SHIP_COMP_NMs[i]);
-
- // 明细打印日期(实际发运日期)当前时间
- b.setLoadDate(Calendar.getInstance().getTime());
- // 车牌号
- b.setCarNo(TRANS_CAR_NOs[i]);
- // b.setCarNo("赣K12345");
-
- // 明细数据
- WayBillItem wbi = new WayBillItem();
- // 钢卷号或者块序号OLD_SAMPL_NOs
- wbi.setPackageNo(OLD_SAMPL_NOs[i]);
- // 钢种SPEC_STL_GRDs
- wbi.setGradeNo(SPEC_STL_GRDs[i]);
- // 产品名称SM_CFNM
- wbi.setProductName(SM_CFNMs[i]);
- // 过磅重量
- wbi.setWeight(Double.valueOf(COIL_WGTs[i])/1000);
- // 实际过磅重量
- wbi.setLoadWeight(Double.valueOf(COIL_WGTs[i])/1000);
- // 装车件数
- wbi.setNums(Integer.valueOf(1));
- // 实际装车件数
- wbi.setLoadNums(Integer.valueOf(1));
-
- ArrayList<WayBillItem> wItem = new ArrayList<WayBillItem>();
- wItem.add(wbi);
- b.setWayBillItems(wItem);
- dlivNoSet.add(pDlivDirNos[i]);
- wayMap.put(pDlivDirNos[i], b);
- } else {
- WayBill wb = wayMap.get(pDlivDirNos[i]);
- // 明细数据
- WayBillItem wbi = new WayBillItem();
- // 钢卷号或者块序号OLD_SAMPL_NOs
- wbi.setPackageNo(OLD_SAMPL_NOs[i]);
- // 钢种SPEC_STL_GRDs
- wbi.setGradeNo(SPEC_STL_GRDs[i]);
- // 产品名称SM_CFNM
- wbi.setProductName(SM_CFNMs[i]);
- // 过磅重量
- wbi.setWeight(Double.valueOf(COIL_WGTs[i])/1000);
- // 实际过磅重量
- wbi.setLoadWeight(Double.valueOf(COIL_WGTs[i])/1000);
- // 装车件数
- wbi.setNums(Integer.valueOf(1));
- // 实际装车件数
- wbi.setLoadNums(Integer.valueOf(1));
- ArrayList<WayBillItem> wItem = wb.getWayBillItems();
- wItem.add(wbi);
- }
-
- } catch (Exception e) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- e.printStackTrace(new PrintStream(baos));
- String exception = baos.toString();
- String errStr = "\n错误原因:" + exception;
- e.printStackTrace();
- return errStr;
- }
- }
- // //公钥文件路径
- // String pubPath = "/" + WayBillClient.class.getResource("/") + "cargocn_server_pub.key";
- // //私钥文件路径
- // String priPath = "/" + WayBillClient.class.getResource("/") + "cargocn_client_pri.p8";
- //String[] restr = new String[wayMap.size()];
- StringBuffer restr = new StringBuffer("共: [" + wayMap.size() + "]条,返回结果:");
- String restr0 = "发送成功!";
- for (WayBill value : wayMap.values()) {
- try {
- // 总件数
- value.setLoadTotalNums(value.getWayBillItems().size());
- // 总重量COIL_WGTs
- Double totalW = 0.0;
- for(WayBillItem item : value.getWayBillItems()){
- totalW += item.getLoadWeight();
- }
- value.setLoadTotalWeight(totalW);
- // json格式转换
- String bill = JSON.toJSONString(value);
- //System.out.println("billJSON:" + bill);
- //直接用json数据加密传输会出现中文乱码,这里转换成unicode编码
- bill = ChangeCharset.stringToUnicode(bill);
- System.out.println("unicBill:" + bill);
- // 公钥加密
- // byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(), RSAUtils.loadKeyStr("PUB"));
- String path = value.getClass().getClassLoader().getResource("cargocn_server_pub.key").getPath();
- byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(),
- RSAUtils.loadPublicKeyByFile(path));
- String cipher = Base64.encode(cipherData);
- //System.out.println("cipher:" + cipher);
- // 私钥加密
- // String signstr = RSAUtils.sign(cipher.getBytes(),RSAUtils.loadKeyStr("PRI"));
- String signstr = RSAUtils.sign(cipher.getBytes(),
- RSAUtils.loadPrivateKeyByFile(value.getClass().getClassLoader()
- .getResource("cargocn_client_pri.p8").getPath()));
- //System.out.println("signstr:" + signstr);
- // 远程接口地址
- HttpPostUtil hu = new HttpPostUtil(forwardUrl);
- // 发送请求
- String ret = hu.post(cipher, signstr);
- // 转换请求返回参数json
- // JSONObject jo = JSON.parseObject(ret);
- // restr.append("\n jo:" + jo.size());
- // String result = jo.getString("result");
- // String resultSign = jo.getString("sign");
- // // 验证签名
- //// boolean tmp = RSAUtils.verify(result.getBytes(), RSAUtils.loadKeyStr("PUB"), resultSign);
- // boolean tmp = RSAUtils.verify(result.getBytes(),
- // RSAUtils.loadPublicKeyByFile(value.getClass().getClassLoader()
- // .getResource("cargocn_server_pub.key").getPath()),resultSign);
- // restr.append("\n tmp:" + tmp);
- // if (tmp) {
- // // 解密
- //// byte[] res = RSAUtils.decryptByPrivateKey(Base64.decode(result), RSAUtils.loadKeyStr("PRI"));
- // byte[] res = RSAUtils.decryptByPrivateKey(Base64.decode(result), RSAUtils
- // .loadPrivateKeyByFile(value.getClass().getClassLoader()
- // .getResource("cargocn_client_pri.p8").getPath()));
- // String res0 = new String(res);
- System.out.println("返回值restr:" + ret);
- if( "0".equals(ret)) {
- //返回0发送成功,则修改中间表数据状态为7;
- PosParameter param = new PosParameter();
- param.setWhereClauseParameter(0, value.getOrderNo());
- dao.update("UIJ010060_cargocn.update", param);
- } else {
- restr0 = "-1";
- }
- restr.append("\n " + value.getOrderNo() + ":" + ret + ";");
- } catch (Exception e) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- e.printStackTrace(new PrintStream(baos));
- String exception = baos.toString();
- restr.append("\n异常原因:" + exception);
- e.printStackTrace();
- return restr.toString();
- }
- }
- if(!"-1".equals(restr0))
- return restr0;
-
- restr.append("\n结果值含义:0 表示发送成功,其他值都为失败");
- restr.append("\n1000:签名验证失败 1001:运单对象不得为空");
- restr.append("\n1002:发货人ID不得为空 1003:发货人信息加载出错");
- restr.append("\n1004:发货人状态不正常 1005:订单号不得为空");
- restr.append("\n1006:承运商不得为空 1007:承运商信息加载出错");
- restr.append("\n1008:承运商没在货运中国平台开户 1009:运单子项不得为空");
- restr.append("\n1010:车牌号不得为空 1011:车牌号信息加载出错");
- restr.append("\n1012:车牌号没在货运中国平台注册\n1013:该车辆在货运中国平台尚未关联司机帐号");
- return restr.toString();
- }
- public void autoQueryData() {
- PosGenericDao dao = this.getDao("mesdao");
- PosRowSet rowset = dao.find("UIJ010060_cargocn.select");
- PosRow row = null;
- Set<String> dlivNoSet = new HashSet<String>();
- Map<String, WayBill> wayMap = new HashMap<String, WayBill>();
- if (rowset != null && rowset.count() > 0) {
- try {
- while (rowset.hasNext()) {
- row = rowset.next();
- String dirNo = row.getAttribute("DLIV_DIRNO").toString();
- if(!dlivNoSet.contains(dirNo)) {
- // 主数据
- WayBill b = new WayBill();
- // 运送指示号
- b.setOrderNo(dirNo);
- // 默认1销售物流, 2:采购物流 3:内部物流
- b.setOrderType("1");
- // 发运日期TRNF_DTIME
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date sendDate = null;
- String trnFTime = row.getAttribute("TRNF_DTIME").toString();
- if(null == trnFTime || "" == trnFTime)
- sendDate = Calendar.getInstance().getTime();
- else
- sendDate = sdf.parse(trnFTime);
- b.setScheduleSendDate(sendDate);
- // 发货企业代码, 物流跟踪平台给出的新钢集团代码6
- b.setShipperCompanyId(Long.valueOf(6));
-
- // 发货城市
- String SHIPPERCITY = "新余市";
- if(null != row.getAttribute("SHIPPERCITY")) {
- SHIPPERCITY = row.getAttribute("SHIPPERCITY").toString();
- }
- b.setShipperCity(SHIPPERCITY);
- // 发货地点 GET_ON_PCD 热轧系统默认为热卷厂
- String SHIPPERADDR = "热卷厂";
- if(null != row.getAttribute("SHIPPERADDR")) {
- SHIPPERADDR = row.getAttribute("SHIPPERADDR").toString();
- }
- b.setShipperAddr(SHIPPERADDR);
- // 收货单位 ORD_NMs
- Object ordNm = row.getAttribute("CUST_NM");
- Object CUST_NMs = row.getAttribute("CUST_NM");
- if(null == ordNm) {
- ordNm = CUST_NMs;
- }
- b.setReceiveCompanyName(ordNm.toString());
- // 收货城市,mes暂无
- // Object RECEIVECITY = row.getAttribute("RECEIVECITY");
- // 到站地点 DEST_PCD_DESC
- Object DEST_PCD_DESCs = row.getAttribute("DEST_PCD_DESC");
- //通过到站地点从产销数据库查收货城市、收货人、电话
- PosParameter param5 = new PosParameter();
- param5.setWhereClauseParameter(0, DEST_PCD_DESCs.toString());
- PosRowSet rows5 = getDao("mesdao").find("UIJ010060_cx.select", param5);
- if(rows5.hasNext()){
- PosRow row5 = rows5.next();
- Object receiveCity = row5.getAttribute("UNLOADDOCK"); //收货城市
- Object receiveNM = row5.getAttribute("SHR"); //收货人
- Object receivePhone = row5.getAttribute("SHRDH"); //收货人电话
- if(null != receiveCity)
- b.setReceiveCity(receiveCity.toString()); //收货城市
- else
- b.setReceiveCity(DEST_PCD_DESCs.toString());
- // b.setReceiveCity("新余市");
- if(null != receiveNM)
- b.setReceiveContactName(receiveNM.toString()); //收货联系人
- else
- b.setReceiveContactName("");
- if(null != receivePhone)
- b.setReceiveContactPhone(receivePhone.toString()); //收货联系人电话
- else
- b.setReceiveContactPhone("");
- }
- // b.setReceiveCity("新余市");
- b.setReceiveAddr(DEST_PCD_DESCs.toString());
- // 合同单位
- b.setCustomerName(ordNm.toString());
-
- // 运输公司若名字SHIP_COMP_NMs为空则用 SHIP_COMP_CDs[i] 新余中新物流有限公司
- // b.setLogisticsCompanyName("新余中新物流有限公司");
- String SHIP_COMP_NM = "";
- if(null != row.getAttribute("SHIP_COMP_NM")) {
- SHIP_COMP_NM = row.getAttribute("SHIP_COMP_NM").toString();
- }
- b.setLogisticsCompanyName(SHIP_COMP_NM);
- // 明细打印日期(实际发运日期)当前时间
- b.setLoadDate(Calendar.getInstance().getTime());
- // 车牌号
- String TRANS_CAR_NO = row.getAttribute("TRANS_CAR_NO").toString();
- b.setCarNo(TRANS_CAR_NO);
- // b.setCarNo("赣K12345");
-
- // 明细数据
- WayBillItem wbi = new WayBillItem();
- // 钢卷号或者块序号COIL_NO
- String COIL_NO = row.getAttribute("COIL_NO").toString();
- wbi.setPackageNo(COIL_NO);
- // 钢种SPEC_STL_GRDs
- String SPEC_STL_GRD = row.getAttribute("SPEC_STL_GRD").toString();
- wbi.setGradeNo(SPEC_STL_GRD);
- // 产品名称SM_CFNM
- String SM_CFNM = "";
- if(null != row.getAttribute("SM_CFNM")) {
- SM_CFNM = row.getAttribute("SM_CFNM").toString();
- }
- wbi.setProductName(SM_CFNM);
- // 过磅重量
- String COIL_WGT = "0";
- if(null != row.getAttribute("COIL_WGT")) {
- COIL_WGT = row.getAttribute("COIL_WGT").toString();
- }
- wbi.setWeight(Double.valueOf(COIL_WGT)/1000);
- // 实际过磅重量
- wbi.setLoadWeight(Double.valueOf(COIL_WGT)/1000);
- // 装车件数
- wbi.setNums(Integer.valueOf(1));
- // 实际装车件数
- wbi.setLoadNums(Integer.valueOf(1));
-
- ArrayList<WayBillItem> wItem = new ArrayList<WayBillItem>();
- wItem.add(wbi);
- b.setWayBillItems(wItem);
- dlivNoSet.add(dirNo);
- wayMap.put(dirNo, b);
- } else {
- WayBill wb = wayMap.get(dirNo);
- // 明细数据
- WayBillItem wbi = new WayBillItem();
- // 钢卷号或者块序号COIL_NO
- String COIL_NO = row.getAttribute("COIL_NO").toString();
- wbi.setPackageNo(COIL_NO);
- // 钢种SPEC_STL_GRDs
- String SPEC_STL_GRD = row.getAttribute("SPEC_STL_GRD").toString();
- wbi.setGradeNo(SPEC_STL_GRD);
- // 产品名称SM_CFNM
- String SM_CFNM = "";
- if(null != row.getAttribute("SM_CFNM")) {
- SM_CFNM = row.getAttribute("SM_CFNM").toString();
- }
- wbi.setProductName(SM_CFNM);
- // 过磅重量
- String COIL_WGT = "0";
- if(null != row.getAttribute("COIL_WGT")) {
- COIL_WGT = row.getAttribute("COIL_WGT").toString();
- }
- wbi.setWeight(Double.valueOf(COIL_WGT)/1000);
- // 实际过磅重量
- wbi.setLoadWeight(Double.valueOf(COIL_WGT)/1000);
- // 装车件数
- wbi.setNums(Integer.valueOf(1));
- // 实际装车件数
- wbi.setLoadNums(Integer.valueOf(1));
- ArrayList<WayBillItem> wItem = wb.getWayBillItems();
- wItem.add(wbi);
- }
- }
- } catch (Exception e) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- e.printStackTrace(new PrintStream(baos));
- String exception = baos.toString();
- System.out.println(exception);
- // cro.setV_errMsg("\nError : " + exception); // CoreClientParam.ReturnInfo
- e.printStackTrace();
- }
- String state = postCommit(wayMap,dao);
- }
- }
-
- /*
- * 提交请求
- */
- public String postCommit(Map<String, WayBill> wayMap,PosGenericDao dao) {
- StringBuffer restr = new StringBuffer("Result : ");
- for (WayBill value : wayMap.values()) {
- try {
- // 总件数
- value.setLoadTotalNums(value.getWayBillItems().size());
- // 总重量COIL_WGTs
- Double totalW = 0.0;
- for(WayBillItem item : value.getWayBillItems()){
- totalW += item.getLoadWeight();
- }
- value.setLoadTotalWeight(totalW);
- // json格式转换
- String bill = JSON.toJSONString(value);
- //System.out.println("billJSON:" + bill);
- //直接用json数据加密传输会出现中文乱码,这里转换成unicode编码
- bill = ChangeCharset.stringToUnicode(bill);
- System.out.println("unicBill:" + bill);
- // 公钥加密
- String path = value.getClass().getClassLoader().getResource("cargocn_server_pub.key").getPath();
- byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(),
- RSAUtils.loadPublicKeyByFile(path));
- String cipher = Base64.encode(cipherData);
- String signstr = RSAUtils.sign(cipher.getBytes(),
- RSAUtils.loadPrivateKeyByFile(value.getClass().getClassLoader()
- .getResource("cargocn_client_pri.p8").getPath()));
- // 远程接口地址
- HttpPostUtil hu = new HttpPostUtil(forwardUrl);
- // 发送请求
- String ret = hu.post(cipher, signstr);
- if( "0" == ret) {
- //返回0发送成功,则修改数据状态为7;
- PosParameter param = new PosParameter();
- param.setWhereClauseParameter(0, value.getOrderNo());
- dao.update("UIJ010060_cargocn.update", param);
- }
- restr.append("\n " + value.getOrderNo() + " : " + ret + ";");
- } catch (Exception e) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- e.printStackTrace(new PrintStream(baos));
- String exception = baos.toString();
- restr.append("\nError : " + exception);
- e.printStackTrace();
- }
- }
- System.out.println(restr.toString());
- return restr.toString();
- }
-
-
- /*
- * 测试用
- */
- public static void main(String[] args) {
- // 主数据
- WayBill b = new WayBill();
- b.setOrderNo("20150512XY007"); // 运送指示号
- b.setOrderType("1"); // 默认1销售物流, 2:采购物流 3:内部物流
- b.setScheduleSendDate(Calendar.getInstance().getTime()); // 发运日期TRNF_DTIME
- b.setShipperCompanyId(Long.valueOf(6)); // 发货企业代码 物流跟踪平台给出的新钢集团代码
- b.setReceiveCompanyName("新余新钢集团测试数据:005"); // 收货企业 合同单位 CUST_NM
- b.setShipperCity("新余市"); // 发货城市
- b.setShipperAddr("热卷厂"); // 发货地点 GET_ON_PCD
- b.setReceiveCity("南昌市"); // 收货城市,mes暂无
- b.setReceiveAddr("新余新钢集团测试数据:005"); // 到站地点 DEST_PCD_DESC
- b.setLoadTotalNums(5); // 根据发运指示号获得多少件数
- b.setLoadTotalWeight(new Double(22)); // 根据发运指示号获得总重量COIL_WGTs
- b.setCustomerName("新余新钢集团测试数据:005"); // 合同单位
- b.setLogisticsCompanyName("新余中新物流有限公司"); // 运输公司 SHIP_COMP_CD 上海春风物流有限公司
- b.setLoadDate(Calendar.getInstance().getTime()); // 明细打印日期(实际发运日期)当前时间
- b.setCarNo("赣K12345"); // 车牌号chepai1
- // 明细数据
- WayBillItem i = new WayBillItem();
- i.setPackageNo("package123"); // 钢卷号或者块序号OLD_SAMPL_NOs
- i.setGradeNo("50-1"); // 钢种SPEC_STL_GRDs
- i.setProductName("新余新钢集团测试数据:005"); // 产品名称SM_CFNM
- i.setWeight(Double.valueOf(42)); // 过磅重量
- i.setLoadWeight(Double.valueOf(41.28)); // 实际过磅重量
- i.setNums(Integer.valueOf(1)); // 装车件数
- i.setLoadNums(Integer.valueOf(1)); // 实际装车件数
- ArrayList<WayBillItem> li = new ArrayList<WayBillItem>();
- li.add(i);
- b.setWayBillItems(li);
- // 加密 签名
- try {
- String bill = JSON.toJSONString(b);
- System.out.println("bill:" + bill);
-
- // String iso = new String(bill.getBytes("UTF-8"),"ISO-8859-1");
- // System.out.println("iso:" + iso);
- // String utf8 = new String(iso.getBytes("ISO-8859-1"),"UTF-8");
- // System.out.println("utf8:" + utf8);
-
- String unic = ChangeCharset.stringToUnicode(bill);
- System.out.println("unic:" + unic);
- String unicTo = ChangeCharset.unicodeToString(unic);
- System.out.println("unicTo:" + unicTo);
- // 公钥加密
- byte[] cipherData = RSAUtils.encryptByPublicKey(
- unic.getBytes(),
- RSAUtils.loadPublicKeyByFile(b.getClass().getClassLoader()
- .getResource("cargocn_server_pub.key").getPath()));
- // byte[] cipherData = RSAUtils.encryptByPublicKey(bill.getBytes(),
- // RSAUtils.loadKeyStr("PUB"));
- String cipher = Base64.encode(cipherData);
- System.out.println("cipher:" + cipher);
- // 私钥加密
- String signstr = RSAUtils.sign(
- cipher.getBytes(),
- RSAUtils.loadPrivateKeyByFile(b.getClass().getClassLoader()
- .getResource("cargocn_client_pri.p8").getPath()));
- // String signstr = RSAUtils.sign(cipher.getBytes(),RSAUtils.loadKeyStr("PRI"));
- System.out.println("signstr:" + signstr);
- // 远程接口地址
- HttpPostUtil hu = new HttpPostUtil(forwardUrl);
- // 发送请求
- String ret = hu.post(cipher, signstr);
- System.out.println("ret:" + ret);
- // 转换请求返回参数json
- JSONObject jo = JSON.parseObject(ret);
- String result = jo.getString("result");
- String resultSign = jo.getString("sign");
- // 验证签名
- boolean tmp = RSAUtils.verify(
- result.getBytes(),
- RSAUtils.loadPublicKeyByFile(b.getClass().getClassLoader()
- .getResource("cargocn_server_pub.key").getPath()),
- resultSign);
- // boolean tmp = RSAUtils.verify(result.getBytes(), RSAUtils.loadKeyStr("PUB"),
- // resultSign);
- if (tmp) {
- // 解密
- byte[] res = RSAUtils.decryptByPrivateKey(
- Base64.decode(result), RSAUtils
- .loadPrivateKeyByFile(b.getClass()
- .getClassLoader()
- .getResource("cargocn_client_pri.p8")
- .getPath()));
- // byte[] res = RSAUtils.decryptByPrivateKey(
- // Base64.decode(result), RSAUtils.loadKeyStr("PRI"));
- String restr = new String(res);
- System.out.println("restr:" + restr);
- String unicTo1 = ChangeCharset.unicodeToString(unic);
- System.out.println("unicTo:" + unicTo1);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- public String runActivity(PosContext arg0) {
- // TODO Auto-generated method stub
- return null;
- }
- }
|