package com.topsun.posclient.webservice;
import java.net.SocketTimeoutException;
import java.util.List;
import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import com.topsun.posclient.common.LoggerUtil;
import com.topsun.posclient.common.POSClientApp;
import com.topsun.posclient.common.POSException;
import com.topsun.posclient.common.ProjectUtil;
import com.topsun.posclient.datamodel.Item;
import com.topsun.posclient.datamodel.OldGold;
import com.topsun.posclient.datamodel.RetailFP;
import com.topsun.posclient.datamodel.RetailM;
import com.topsun.posclient.datamodel.RetailMP;
import com.topsun.posclient.datamodel.RetailP;
import com.topsun.posclient.datamodel.UnSalePart;
import com.topsun.posclient.webservice.dto.ArrayOfbackWarehouseItem;
import com.topsun.posclient.webservice.dto.ArrayOfitem;
import com.topsun.posclient.webservice.dto.ArrayOfretail_FPE;
import com.topsun.posclient.webservice.dto.ArrayOfretail_M;
import com.topsun.posclient.webservice.dto.ArrayOfretail_MP;
import com.topsun.posclient.webservice.dto.ArrayOfretail_OldGold;
import com.topsun.posclient.webservice.dto.ArrayOfretail_P;
import com.topsun.posclient.webservice.dto.ArrayOfretail_UnSalePart;
import com.topsun.posclient.webservice.dto.HelloWorld;
import com.topsun.posclient.webservice.dto.HelloWorldResponse;
import com.topsun.posclient.webservice.dto.Retail_FPE;
import com.topsun.posclient.webservice.dto.Retail_M;
import com.topsun.posclient.webservice.dto.Retail_MP;
import com.topsun.posclient.webservice.dto.Retail_OldGold;
import com.topsun.posclient.webservice.dto.Retail_P;
import com.topsun.posclient.webservice.dto.Retail_UnSalePart;
import com.topsun.posclient.webservice.dto.UserCredential;
/**
* POSServer调用
*
* @author Dong
*
*/
public class POSServerCaller {
public static final String SUCCESS = "0";//=0,表示执行成功
public static final String NO_USERNAME = "1";//=1,表示未提供用户名
public static final String NO_PASSWORD = "2";//=2,表示未提供密码
public static final String ERROR_USERNAME = "3";//=3,表示提供的用户名,无此用户
public static final String ERROR_PASSWORD = "4";//=4,表示提供的用户密码,密码错误
public static final String NO_JURISDICTION= "5"; //表示提供的用户凭据无此操作权限
public static final String OTHER_ERROR = "10";//=10,服务端返回其它错误
public static final String DOUBLEDOCNUM_ERROR = "15";//=15,服务端返回单据号重复
static ServicesStub servicesStub;
public static ServicesStub getWebService() throws Exception {
servicesStub = new ServicesStub(null, POSClientApp.get().getSysConfig().getServerIp(), POSClientApp.get().getSysConfig().getServerPort());
return servicesStub;
}
public static ServicesStub getWebService(long timeout) throws Exception {
servicesStub = new ServicesStub(null, POSClientApp.get().getSysConfig().getServerIp(), POSClientApp.get().getSysConfig().getServerPort());
Options options = servicesStub._getServiceClient().getOptions();
options.setTimeOutInMilliSeconds(timeout);
return servicesStub;
}
public static ServicesStub getWebService(String ipAddress, String port) throws Exception {
servicesStub = new ServicesStub(null, ipAddress, port);
Options options = servicesStub._getServiceClient().getOptions();
return servicesStub;
}
public static UserCredential getDefaultUserCredential(){
UserCredential userCredential = new UserCredential();
String cdKey = POSClientApp.get().getSysConfig().getCdKey();
// userCredential.setCdKey((null == cdKey || "".equals(cdKey))?null:cdKey);
userCredential.setCdKey(null);
userCredential.setUserName(POSClientApp.get().getLoginUser().getUserCode());
userCredential.setPassWord(POSClientApp.get().getLoginUser().getPassWord());
return userCredential;
}
/**
* 判断是否联机
* @return
* @throws POSException
*/
public static boolean isConnected() throws POSException {
boolean isConn = false;
HelloWorld helloWorld30 = new HelloWorld();
helloWorld30.setInputPara("conn");
try {
HelloWorldResponse response = getWebService().helloWorld(helloWorld30);
String result = response.getHelloWorldResult();
if(null != result){
isConn = true;
}else{
isConn = false;
}
}catch(SocketTimeoutException e){
LoggerUtil.logError(WsActivator.PLUGIN_ID, e.getMessage());
isConn = false;
}catch (Exception e) {
try{
AxisFault af = (AxisFault)e;
LoggerUtil.logError(WsActivator.PLUGIN_ID, af.getMessage());
isConn = false;
}catch(Exception ee){
isConn = false;
}
}
return isConn;
}
/**
* 判断是否联机
* @return
* @throws POSException
*/
public static boolean testConnect(String ipAddress, String port) throws POSException {
boolean isConn = false;
HelloWorld helloWorld30 = new HelloWorld();
helloWorld30.setInputPara("conn");
try {
HelloWorldResponse response = getWebService(ipAddress, port).helloWorld(helloWorld30);
String result = response.getHelloWorldResult();
if(null != result){
isConn = true;
}else{
isConn = false;
}
}catch(SocketTimeoutException e){
LoggerUtil.logError(WsActivator.PLUGIN_ID, e.getMessage());
isConn = false;
}catch (Exception e) {
try{
AxisFault af = (AxisFault)e;
LoggerUtil.logError(WsActivator.PLUGIN_ID, af.getMessage());
isConn = false;
}catch(Exception ee){
isConn = false;
}
}
return isConn;
}
/**
* @param itemList
* @return
*/
public static ArrayOfitem getItemArray(List<Item> itemList){
ArrayOfitem arrayOfitem = new ArrayOfitem();
com.topsun.posclient.webservice.dto.Item[] itemArray = new com.topsun.posclient.webservice.dto.Item[itemList.size()];;
for(int i=0; i<itemList.size(); i++){
Item ee = itemList.get(i);
com.topsun.posclient.webservice.dto.Item iii = new com.topsun.posclient.webservice.dto.Item();
iii.setItemId(ee.getId());
iii.setLineNum(Integer.valueOf(ee.getItemCode()));
itemArray[i] = iii;
}
arrayOfitem.setItem(itemArray);
return arrayOfitem;
}
/**
* @param itemList
* @return
*/
public static ArrayOfbackWarehouseItem getBackWarehouseItemArray(List<Item> itemList){
ArrayOfbackWarehouseItem arrayOfitem = new ArrayOfbackWarehouseItem();
com.topsun.posclient.webservice.dto.BackWarehouseItem[] itemArray = new com.topsun.posclient.webservice.dto.BackWarehouseItem[itemList.size()];;
for(int i=0; i<itemList.size(); i++){
Item ee = itemList.get(i);
com.topsun.posclient.webservice.dto.BackWarehouseItem iii = new com.topsun.posclient.webservice.dto.BackWarehouseItem();
iii.setItemID(ee.getId());
iii.setLineNum(Integer.valueOf(ee.getItemCode()));
itemArray[i] = iii;
}
arrayOfitem.setBackWarehouseItem(itemArray);
return arrayOfitem;
}
/**
* 贴近调换,旧金列表
* @param oldGoldList
* @return
*/
public static ArrayOfretail_OldGold getArrayOfRetail_OldGold(List<OldGold> oldGoldList){
ArrayOfretail_OldGold aorog = new ArrayOfretail_OldGold();
if(null == oldGoldList || oldGoldList.size() <= 0){
return aorog;
}
Retail_OldGold[] ogs = new Retail_OldGold[oldGoldList.size()];
for(int i=0; i<oldGoldList.size(); i++){
OldGold og = oldGoldList.get(i);
Retail_OldGold rog = new Retail_OldGold();
rog.setIdfCode(og.getIdfCode());
ogs[i] = rog;
}
aorog.setRetail_OldGold(ogs);
return aorog;
}
/**
* 断料数据转换
* @param unSalePartList
* @return
*/
public static ArrayOfretail_UnSalePart getArrayOfRetail_UnSalePart(List<UnSalePart> unSalePartList){
ArrayOfretail_UnSalePart aomp = new ArrayOfretail_UnSalePart();
if(null == unSalePartList || unSalePartList.size() <= 0){
return aomp;
}
Retail_UnSalePart[] ruspArray = new Retail_UnSalePart[unSalePartList.size()];
for(int i=0; i<unSalePartList.size(); i++){
UnSalePart usp = unSalePartList.get(i);
Retail_UnSalePart rusp = new Retail_UnSalePart();
rusp.setIdfCode(usp.getIdfCode());
rusp.setItemCode(usp.getItemCode());
rusp.setPalAccount(usp.getPalAccount());
rusp.setPalAmount(usp.getPalAmount());
rusp.setPalWeight(usp.getPalWeight());
rusp.setPrice_A(usp.getPrice_A());
rusp.setPrice_G(usp.getPrice_G());
rusp.setSourceCode(usp.getSourceCode());
rusp.setWeight(usp.getWeight());
rusp.setWeight_F(usp.getWeight_F());
ruspArray[i] = rusp;
}
aomp.setRetail_UnSalePart(ruspArray);
return aomp;
}
/**
* 拆分到每个商品的结算金额
* @param mpList
* @return
*/
public static ArrayOfretail_MP getArrayOfRetail_MP(List<RetailMP> mpList){
if(null == mpList || mpList.size() <= 0){
return null;
}
Retail_MP[] mps = new Retail_MP[mpList.size()];
for(int i=0; i<mpList.size(); i++){
RetailMP mp = mpList.get(i);
Retail_MP rmp = new Retail_MP();
rmp.setPayModeID(mp.getPayModeID());
rmp.setSum(mp.getSum());
rmp.setPoundage(mp.getPoundage());
rmp.setPoundageRate(mp.getPoundageRate());
rmp.setIsPrint(mp.getIsPrint());
rmp.setItemCode(mp.getItemCode());
rmp.setItemID(mp.getItemID());
mps[i] = rmp;
}
ArrayOfretail_MP aomp = new ArrayOfretail_MP();
aomp.setRetail_MP(mps);
return aomp;
}
/**
* 零售数据结算方式(零售结算方式)数据转换
* 转换成调用WebService时需要的参数数据类型
* @param pscList
* @return ArrayOfRetail_P
*/
public static ArrayOfretail_P getArrayOfRetail_P(List<RetailP> rpList){
if(null == rpList || rpList.size() <= 0){
return null;
}
Retail_P[] rps = new Retail_P[rpList.size()];
for(int i=0; i<rpList.size(); i++){
RetailP psc = rpList.get(i);
Retail_P rp = new Retail_P();
rp.setPayModeID(psc.getPayModeID());
rp.setSum(psc.getSum());
rp.setPoundage(psc.getPoundage());
rp.setPoundageRate(psc.getPoundageRate());
rp.setMakeup(psc.getMakeup());
rps[i] = rp;
}
ArrayOfretail_P aop = new ArrayOfretail_P();
aop.setRetail_P(rps);
return aop;
}
/**
* 零售数据明细(商品列表)数据转换
* 转换成调用WebService时需要的参数数据类型
* @param itemList
* @return ArrayOfRetail_M
*/
public static ArrayOfretail_M getArrayOfRetail_M(List<RetailM> retailMs){
if(null == retailMs || retailMs.size() <= 0){
return null;
}
Retail_M[] rms = new Retail_M[retailMs.size()];
for(int i=0; i<retailMs.size(); i++){
RetailM item = retailMs.get(i);
Retail_M rm = new Retail_M();
rm.setAccountType(item.getAccountType());
rm.setEmployeeID(item.getEmployeeID());
rm.setFactAmount(item.getFactAmount());
rm.setInvoceCode(item.getInvoiceCode());
rm.setInvoiceAmount(item.getInvoiceAmount());
rm.setIsReplace(item.getIsReplace());
rm.setItemCode(item.getItemCode());
rm.setItemID(item.getItemId());
rm.setItemType(item.getItemType());
rm.setMATNR(item.getMATNR());
rm.setOldAmount(item.getOldAmount());
rm.setPalAmount(item.getPalAmount());
rm.setPalWeight(item.getPalWeight());
rm.setPayAmount(item.getPayAmount());
rm.setPointAmount(item.getPointAmount());
rm.setPrice_G(item.getPrice_G());
rm.setProcessFee(item.getProcessFee());
rm.setProcessFee_S(item.getProcessFee_S());
rm.setPromotionID(item.getPromotionID());
rm.setPromotionName(item.getPromotionName());
rm.setReplaceAmount(item.getReplaceAmount());
rm.setSalesAmount(item.getSalesAmount());
rm.setSalesWeight(item.getSalesWeight());
rm.setSourceCode(item.getSourceCode());
rm.setUnSalesWeight(item.getUnSalesWeight());
rm.setWeight(item.getWeight());
rm.setMatkl(item.getMatkl());
rm.setLineNum(0);
rm.setMatkl(item.getMatkl());
rm.setSettlementPrice_G(item.getSettlementPrice_G());
rm.setSettlementPrice(item.getSettlementPrice());
rms[i] = rm;
}
ArrayOfretail_M aom = new ArrayOfretail_M();
aom.setRetail_M(rms);
return aom;
}
/**
* 本地发票数据转换成为ws接口使用发票数据
* @param retailFPs
* @return
*/
public static ArrayOfretail_FPE getArrayOfRetail_FP(List<RetailFP> retailFPs){
if(null == retailFPs || retailFPs.size() <= 0){
return null;
}
Retail_FPE[] fpArray = new Retail_FPE[retailFPs.size()];
for(int i=0; i<retailFPs.size(); i++){
RetailFP fp = retailFPs.get(i);
Retail_FPE retail_FPE = new Retail_FPE();
retail_FPE.setFPDM(fp.getFPDM());
retail_FPE.setFPH(fp.getFPH());
retail_FPE.setFPMSID(Integer.valueOf(fp.getFPMSID()));
retail_FPE.setInvoiceAmount(ProjectUtil.formatString(fp.getInvoiceAmount()));
retail_FPE.setItemCode(fp.getItemCode());
retail_FPE.setItemID(Integer.valueOf(fp.getItemID()));
retail_FPE.setKPRID(fp.getKPRID());
retail_FPE.setOldFPH(fp.getOldFPH());
retail_FPE.setPOS(fp.getPOS());
retail_FPE.setShopID(Integer.valueOf(fp.getShopID()));
retail_FPE.setType(fp.getType());
retail_FPE.setUsedDate(ProjectUtil.getCalendar(ProjectUtil.getDate(fp.getUsedDate())));
fpArray[i] = retail_FPE;
}
ArrayOfretail_FPE aofpe = new ArrayOfretail_FPE();
aofpe.setRetail_FP(fpArray);
return aofpe;
}
}