package com.topsun.posclient.system.dao; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.InputStream; import java.math.BigDecimal; import java.net.URL; import java.net.URLConnection; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.ProgressBar; import org.eclipse.swt.widgets.Text; import com.topsun.posclient.common.AppConstants; import com.topsun.posclient.common.LoggerUtil; import com.topsun.posclient.common.POSClientApp; import com.topsun.posclient.common.ProjectUtil; import com.topsun.posclient.common.dao.BaseDao; import com.topsun.posclient.datamodel.CashierModel; import com.topsun.posclient.datamodel.Item; import com.topsun.posclient.datamodel.ItemIndex; import com.topsun.posclient.datamodel.Material; import com.topsun.posclient.datamodel.PromotionA; import com.topsun.posclient.datamodel.PromotionM; import com.topsun.posclient.datamodel.PromotionS; import com.topsun.posclient.datamodel.Shop; import com.topsun.posclient.datamodel.dto.CardRuleDTO; import com.topsun.posclient.datamodel.dto.CashierModeDTO; import com.topsun.posclient.datamodel.dto.GoldPriceDTO; import com.topsun.posclient.datamodel.dto.InvoiceDTO; import com.topsun.posclient.datamodel.dto.ItemDTO; import com.topsun.posclient.datamodel.dto.ItemIndexDTO; import com.topsun.posclient.datamodel.dto.MaterialDTO; import com.topsun.posclient.datamodel.dto.MemberDTO; import com.topsun.posclient.datamodel.dto.PointDataDTO; import com.topsun.posclient.datamodel.dto.PromotionDTO; import com.topsun.posclient.datamodel.dto.RetailDTO; import com.topsun.posclient.datamodel.dto.ShopDTO; import com.topsun.posclient.datamodel.dto.UserDTO; import com.topsun.posclient.system.MessageResources; import com.topsun.posclient.system.SyncProgress; import com.topsun.posclient.system.SystemActivator; import com.topsun.posclient.system.service.SyncDataListenerManager; import com.topsun.posclient.webservice.POSServerCaller; import com.topsun.posclient.webservice.dto.ArrayOfCashierMode; import com.topsun.posclient.webservice.dto.ArrayOfInvoice; import com.topsun.posclient.webservice.dto.ArrayOfRetail; import com.topsun.posclient.webservice.dto.ArrayOfauth; import com.topsun.posclient.webservice.dto.ArrayOfdprule_m; import com.topsun.posclient.webservice.dto.ArrayOfgoldPrice; import com.topsun.posclient.webservice.dto.ArrayOfmItem; import com.topsun.posclient.webservice.dto.ArrayOfmember; import com.topsun.posclient.webservice.dto.ArrayOfpoint; import com.topsun.posclient.webservice.dto.ArrayOfpromotion; import com.topsun.posclient.webservice.dto.ArrayOfpromotion_a; import com.topsun.posclient.webservice.dto.ArrayOfpromotion_m; import com.topsun.posclient.webservice.dto.ArrayOfpromotion_s; import com.topsun.posclient.webservice.dto.ArrayOfsyncMaterialDataResultItem; import com.topsun.posclient.webservice.dto.ArrayOfsyncShopDataResultItem; import com.topsun.posclient.webservice.dto.ArrayOftemplate; import com.topsun.posclient.webservice.dto.ArrayOfuser; import com.topsun.posclient.webservice.dto.Auth; import com.topsun.posclient.webservice.dto.CashierMode; import com.topsun.posclient.webservice.dto.GetAllCashierMode; import com.topsun.posclient.webservice.dto.GetAllCashierModeReq; import com.topsun.posclient.webservice.dto.GetAllCashierModeResponse; import com.topsun.posclient.webservice.dto.GetAllCashierModeResult; import com.topsun.posclient.webservice.dto.GetCardRuleData; import com.topsun.posclient.webservice.dto.GetCardRuleDataReq; import com.topsun.posclient.webservice.dto.GetCardRuleDataResponse; import com.topsun.posclient.webservice.dto.GetCardRuleDataResult; import com.topsun.posclient.webservice.dto.GetGoldPriceData; import com.topsun.posclient.webservice.dto.GetGoldPriceDataReq; import com.topsun.posclient.webservice.dto.GetGoldPriceDataReqCondition; import com.topsun.posclient.webservice.dto.GetGoldPriceDataResponse; import com.topsun.posclient.webservice.dto.GetGoldPriceDataResult; import com.topsun.posclient.webservice.dto.GetInvoice; import com.topsun.posclient.webservice.dto.GetInvoiceReq; import com.topsun.posclient.webservice.dto.GetInvoiceReqCondition; import com.topsun.posclient.webservice.dto.GetInvoiceResponse; import com.topsun.posclient.webservice.dto.GetInvoiceResult; import com.topsun.posclient.webservice.dto.GetMemberData; import com.topsun.posclient.webservice.dto.GetMemberDataReq; import com.topsun.posclient.webservice.dto.GetMemberDataResponse; import com.topsun.posclient.webservice.dto.GetMemberDataResult; import com.topsun.posclient.webservice.dto.GetPointData; import com.topsun.posclient.webservice.dto.GetPointDataReq; import com.topsun.posclient.webservice.dto.GetPointDataReqCondition; import com.topsun.posclient.webservice.dto.GetPointDataResponse; import com.topsun.posclient.webservice.dto.GetPointDataResult; import com.topsun.posclient.webservice.dto.GetPrintTemplate; import com.topsun.posclient.webservice.dto.GetPrintTemplateReq; import com.topsun.posclient.webservice.dto.GetPrintTemplateReqCondition; import com.topsun.posclient.webservice.dto.GetPrintTemplateResponse; import com.topsun.posclient.webservice.dto.GetPrintTemplateResult; import com.topsun.posclient.webservice.dto.GetPromotionData; import com.topsun.posclient.webservice.dto.GetPromotionDataReq; import com.topsun.posclient.webservice.dto.GetPromotionDataReqCondition; import com.topsun.posclient.webservice.dto.GetPromotionDataResponse; import com.topsun.posclient.webservice.dto.GetPromotionDataResult; import com.topsun.posclient.webservice.dto.GetUserInfo; import com.topsun.posclient.webservice.dto.GetUserInfoReq; import com.topsun.posclient.webservice.dto.GetUserInfoResponse; import com.topsun.posclient.webservice.dto.GetUserInfoResult; import com.topsun.posclient.webservice.dto.GoldPrice; import com.topsun.posclient.webservice.dto.MItem; import com.topsun.posclient.webservice.dto.Promotion; import com.topsun.posclient.webservice.dto.Promotion_a; import com.topsun.posclient.webservice.dto.Promotion_m; import com.topsun.posclient.webservice.dto.Promotion_s; import com.topsun.posclient.webservice.dto.QueryItemData; import com.topsun.posclient.webservice.dto.QueryItemDataReq; import com.topsun.posclient.webservice.dto.QueryItemDataReqCondition; import com.topsun.posclient.webservice.dto.QueryItemDataResponse; import com.topsun.posclient.webservice.dto.QueryItemDataResult; import com.topsun.posclient.webservice.dto.Retail; import com.topsun.posclient.webservice.dto.SavePartSales; import com.topsun.posclient.webservice.dto.SavePartSalesReq; import com.topsun.posclient.webservice.dto.SavePartSalesResponse; import com.topsun.posclient.webservice.dto.SyncMaterialData; import com.topsun.posclient.webservice.dto.SyncMaterialDataReq; import com.topsun.posclient.webservice.dto.SyncMaterialDataResponse; import com.topsun.posclient.webservice.dto.SyncMaterialDataResult; import com.topsun.posclient.webservice.dto.SyncMaterialDataResultItem; import com.topsun.posclient.webservice.dto.SyncShopData; import com.topsun.posclient.webservice.dto.SyncShopDataReq; import com.topsun.posclient.webservice.dto.SyncShopDataResponse; import com.topsun.posclient.webservice.dto.SyncShopDataResult; import com.topsun.posclient.webservice.dto.SyncShopDataResultItem; import com.topsun.posclient.webservice.dto.Template; import com.topsun.posclient.webservice.dto.User; /** * 数据同步处理 * * @author Lilei * */ public class SyncDataDao extends BaseDao { /** * 下载用户数据 * * @param progress * @param count * @throws Exception */ public void downloadUserData(final SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { SyncDataListenerManager.getInstance().fireChange( "---------------> " + MessageResources.message_tips_startsyncuser); try { GetUserInfoReq req = new GetUserInfoReq(); req.setUserCode(null);//userCode设置为null,同步改部门下所有用户 req.setUserCredential(POSServerCaller.getDefaultUserCredential()); req.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); GetUserInfo getUserInfo = new GetUserInfo(); getUserInfo.setGetUserInfoReq(req); GetUserInfoResponse response = POSServerCaller.getWebService(30000L).getUserInfo(getUserInfo); GetUserInfoResult result = response.getGetUserInfoResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_USER_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_USER_FILENAME_BACK); return; } ArrayOfuser userArray = result.getUsers(); if (null == userArray) { // 没有用户数据,删除旧的用户数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_USER_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_USER_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有用户数据"); return; } User[] users = userArray.getUser(); List<com.topsun.posclient.datamodel.User> userList = new ArrayList<com.topsun.posclient.datamodel.User>(); UserDTO userDTO = new UserDTO(); for (int i = 0; i < users.length; i++) { User user = users[i]; com.topsun.posclient.datamodel.User uu = new com.topsun.posclient.datamodel.User(); uu.setUserCode(user.getUserCode()); uu.setDeptId(user.getDeptId()); uu.setDeptName(user.getDeptName()); uu.setEmployeeId(user.getEmployeeId()); uu.setEmployeeName(user.getEmployeeName()); uu.setId(user.getUserId()); uu.setUserName(user.getUserName()); uu.setPassWord(user.getPassword()); uu.setHaveChangeAuth(user.getHaveChangeAuth()); com.topsun.posclient.webservice.dto.MAuth mauth = user.getMAuths(); com.topsun.posclient.datamodel.MAuth m = new com.topsun.posclient.datamodel.MAuth(); if(null != mauth){ m.setAuthGroupId(mauth.getAuthGroupID()); m.setIsDauth(mauth.getIsDAuth()); m.setIsMauth(mauth.getIsMAuth()); m.setMlimit(mauth.getMlimit()); m.setMratio(mauth.getMratio()); m.setRate(mauth.getRate()); uu.setMauth(m); } ArrayOfauth aoArray = user.getAuths(); if(null != aoArray){ Auth[] authArray = aoArray.getAuth(); List<com.topsun.posclient.datamodel.Auth> authList = new ArrayList<com.topsun.posclient.datamodel.Auth>(); for(int j=0; j<authArray.length; j++){ Auth a = authArray[j]; com.topsun.posclient.datamodel.Auth auth = new com.topsun.posclient.datamodel.Auth(); auth.setAuthGroupId(a.getAuthGroupId()); auth.setAuthGroupName(a.getAuthGroupName()); auth.setFunctionId(a.getFunctionId()); auth.setFunctionName(a.getFunctionName()); auth.setIsAuth(a.getIsAuth()); auth.setOperationId(a.getOperationId()); auth.setOperationName(a.getOperationName()); authList.add(auth); } uu.setAuths(authList); } userList.add(uu); } userDTO.setUserList(userList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(userDTO, AppConstants.DATA_USER_FILENAME_BACK, AppConstants.DATA_USER_FILENAME); } catch (Exception e) { e.printStackTrace(); LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载用户数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载用户数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> " + MessageResources.message_tips_endsyncuser, count); } }); } /** * 下载店铺数据 * * @param progress * @param count * @throws Exception */ public void downloadShopData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> " + MessageResources.message_tips_startsyncshop); try { SyncShopDataReq req = new SyncShopDataReq(); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); SyncShopData syncShopData46 = new SyncShopData(); syncShopData46.setSyncShopDataReq(req); SyncShopDataResponse response = POSServerCaller.getWebService(60000000L).syncShopData(syncShopData46); SyncShopDataResult result = response.getSyncShopDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_SHOP_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_SHOP_FILENAME_BACK); return; } ArrayOfsyncShopDataResultItem aosdr = result.getShop(); if (null == aosdr) { // 没有店铺数据,删除旧的店铺数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_SHOP_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_SHOP_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有店铺数据"); return; } SyncShopDataResultItem[] shopItems = aosdr.getSyncShopDataResultItem(); List<com.topsun.posclient.datamodel.Shop> shopList = new ArrayList<com.topsun.posclient.datamodel.Shop>(); ShopDTO shopDTO = new ShopDTO(); for (int i = 0; i < shopItems.length; i++) { SyncShopDataResultItem shopItem = shopItems[i]; Shop shop = new Shop(); shop.setId(shopItem.getShopID()); shop.setShpCode(shopItem.getShopCode()); shop.setShpName(shopItem.getShopName()); shop.setBrand(shopItem.getBrand()); shop.setCompany(shopItem.getCompany()); if(shopItem.getGffdxishu() == null ){ shop.setGffdxishu(new BigDecimal(1)); }else{ shop.setGffdxishu(shopItem.getGffdxishu()); } shopList.add(shop); } shopDTO.setShopList(shopList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(shopDTO, AppConstants.DATA_SHOP_FILENAME_BACK, AppConstants.DATA_SHOP_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载店铺数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载店铺数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> " + MessageResources.message_tips_endsyncshop, count); } }); } /** * 下载物料数据 * * @param progress * @param count * @throws Exception */ public void downloadMaterialData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange( "---------------> 开始下载物料数据"); SyncMaterialDataReq req = new SyncMaterialDataReq(); req.setUserCredential(POSServerCaller .getDefaultUserCredential()); SyncMaterialData syncMaterialData = new SyncMaterialData(); syncMaterialData.setSyncMaterialDataReq(req); try { SyncMaterialDataResponse response = POSServerCaller.getWebService(60000000L).syncMaterialData(syncMaterialData); SyncMaterialDataResult result = response.getSyncMaterialDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_MATERIAL_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_MATERIAL_FILENAME_BACK); return; } ArrayOfsyncMaterialDataResultItem aomdri = result .getMaterial(); if (null == aomdri) { // 没有物料数据,删除旧的物料数据 getLocalProcessor().deleteDataFile( AppConstants.DATA_MATERIAL_FILENAME); getLocalProcessor().deleteDataFile( AppConstants.DATA_MATERIAL_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange( "没有物料数据"); return; } SyncMaterialDataResultItem[] itemArray = aomdri .getSyncMaterialDataResultItem(); List<Material> materialList = new ArrayList<Material>(); MaterialDTO materialDTO = new MaterialDTO(); for (int i = 0; i < itemArray.length; i++) { SyncMaterialDataResultItem item = itemArray[i]; Material material = new Material(); material.setId(item.getID()); material.setMatnr(item.getMatnr()); material.setMaktx(item.getMatnrName()); material.setMatkl(item.getMATKL()); materialList.add(material); } materialDTO.setMaterialList(materialList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(materialDTO, AppConstants.DATA_MATERIAL_FILENAME_BACK, AppConstants.DATA_MATERIAL_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载物料数据失败", e); SyncDataListenerManager.getInstance() .fireChange("下载物料数据失败"); return; } SyncDataListenerManager.getInstance().fireChange( "---------------> 完成物料数据下载", count); } }); } /** * 下载促销方案数据 * * @param progress * @param count * @throws Exception */ public void downloadPromotionData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始下载促销方案数据"); GetPromotionDataReqCondition param = new GetPromotionDataReqCondition(); param.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); GetPromotionDataReq req = new GetPromotionDataReq(); req.setCondition(param); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetPromotionData getPromotionData36 = new GetPromotionData(); getPromotionData36.setGetPromotionDataReq(req); try { GetPromotionDataResponse response = POSServerCaller.getWebService(60000000L).getPromotionData(getPromotionData36); GetPromotionDataResult result = response.getGetPromotionDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_PROMOTE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_PROMOTE_FILENAME_BACK); return; } ArrayOfpromotion arrayPromotion = result.getPromotions(); if (null == arrayPromotion) { // 没有促销方案数据,删除旧的促销方案数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_PROMOTE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_PROMOTE_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有促销方案数据"); return; } Promotion[] promotionAray = arrayPromotion.getPromotion(); PromotionDTO promotionDTO = new PromotionDTO(); List<com.topsun.posclient.datamodel.Promotion> promiList = new ArrayList<com.topsun.posclient.datamodel.Promotion>(); for (int i = 0; i < promotionAray.length; i++) { Promotion p = promotionAray[i]; com.topsun.posclient.datamodel.Promotion promi = new com.topsun.posclient.datamodel.Promotion(); promi.setID(p.getId()); promi.setDocNum(p.getDocNum()); promi.setEndDate(ProjectUtil.getDate(p.getEndDate())); promi.setEndTime(p.getEndTime()); promi.setFri(p.getFridayFlg()); promi.setIsAll(p.getIsAll()); promi.setLevel(p.getLevel()); promi.setMon(p.getMondayFlg()); promi.setRate(p.getRate()); promi.setSat(p.getSaturdayFlg()); promi.setStartDate(ProjectUtil.getDate(p.getStartDate())); promi.setStartTime(p.getStartTime()); promi.setSun(p.getSundayFlg()); promi.setThu(p.getTuesdayFlg()); promi.setTitle(p.getTitle()); promi.setTur(p.getThursdayFlg()); promi.setType(p.getTypeID()); promi.setWen(p.getWednesdayFlg()); List<PromotionA> pas = new ArrayList<PromotionA>(); List<PromotionM> pms = new ArrayList<PromotionM>(); List<PromotionS> pss = new ArrayList<PromotionS>(); ArrayOfpromotion_a aopa = p.getPromotion_as(); if (null != aopa) { Promotion_a[] paArray = aopa.getPromotion_a(); for (int x = 0; x < paArray.length; x++) { Promotion_a pa = paArray[x]; PromotionA promiA = new PromotionA(); promiA.setDocNum(p.getDocNum()); promiA.setSet1(pa.getSet1()); promiA.setSet2(pa.getSet2()); pas.add(promiA); } } ArrayOfpromotion_m aopm = p.getPromotion_ms(); if (null != aopm) { Promotion_m[] pmArray = aopm.getPromotion_m(); for (int x = 0; x < pmArray.length; x++) { Promotion_m pm = pmArray[x]; PromotionM promiM = new PromotionM(); promiM.setDocNum(p.getDocNum()); promiM.setMATNR(pm.getMATNR()); promiM.setRate(pm.getRate()); promiM.setType(String.valueOf(pm.getType())); promiM.setSum(pm.getSum()); pms.add(promiM); } } ArrayOfpromotion_s aops = p.getPromotion_ss(); if (null != aops) { Promotion_s[] psArray = aops.getPromotion_s(); for (int x = 0; x < psArray.length; x++) { Promotion_s ps = psArray[x]; PromotionS promiS = new PromotionS(); promiS.setDocNum(p.getDocNum()); promiS.setGiveaway(ps.getMATNR()); pss.add(promiS); } } promi.setPromotionAList(pas); promi.setPromotionMList(pms); promi.setPromotionSList(pss); promiList.add(promi); } promotionDTO.setPromotionList(promiList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(promotionDTO, AppConstants.DATA_PROMOTE_FILENAME_BACK, AppConstants.DATA_PROMOTE_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载载促销方案数据失败", e); SyncDataListenerManager.getInstance().fireChange( "下载载促销方案数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成促销方案数据下载", count); } }); } /** * 下载单品数据 * @param progress * @param count * @throws Exception */ public void downloadItemData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> "+ MessageResources.message_tips_startsyncitem); StringBuffer barCodes = null; List<Integer> ids = new ArrayList<Integer>(); List<ItemIndex> itemIndexList = new ArrayList<ItemIndex>(); while (true) { barCodes = new StringBuffer(); // 上次同步ID记录 try { QueryItemDataReqCondition condition = new QueryItemDataReqCondition(); condition.setFlagIdList(barCodes.toString()); condition.setShpID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); QueryItemDataReq req = new QueryItemDataReq(); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); req.setCondition(condition); QueryItemData queryItemData38 = new QueryItemData(); queryItemData38.setQueryItemDataReq(req); QueryItemDataResponse response = POSServerCaller.getWebService(60000000L).queryItemData(queryItemData38); QueryItemDataResult result = response.getQueryItemDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_PATH); getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_PATH_BACK); getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_INDEX_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_INDEX_FILENAME_BACK); return; } List<Item> itemList = new ArrayList<Item>(); ItemDTO itemDTO = new ItemDTO(); ArrayOfmItem responseData = result.getMItems(); if (null == responseData) { // 没有单品数据,删除旧的单品数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_PATH); getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_PATH_BACK); getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_INDEX_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_ITEM_INDEX_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有商品数据"); return; } MItem[] itemArray = responseData.getMItem(); for (int i = 0; i < itemArray.length; i++) { Item item = new Item(); MItem sd = itemArray[i]; ids.add(sd.getId()); if (i == itemArray.length - 1) { barCodes.append(sd.getItemCode()); } else { barCodes.append(sd.getItemCode() + ","); } item.setId(sd.getId()); item.setItemCode(sd.getItemCode()); item.setItemName(sd.getItemName()); item.setDISCOUNT1(sd.getDisCount1()); item.setDISCOUNT2(sd.getDisCount2()); item.setMatkl(sd.getMatkl()); item.setMATNR(sd.getMatnr()); item.setZCSBJ(sd.getZcsbj()); item.setZDPZL(sd.getZdpzl()); item.setZDPYZL(sd.getZdpzl()); item.setZFZZZL(sd.getZfzzzl()); item.setZJSHJFS(sd.getZjshjfs()); item.setZMDDXJSJ(sd.getZmddxjsj()); item.setZMDLSBQJ(sd.getZmdlsbqj()); item.setZoneID(sd.getZoneID()); item.setZSJCS(sd.getZsc()); item.setZZZZZ(sd.getZzzzz()); item.setZYTM(sd.getZYTM()); item.setZJGF(sd.getZJGF()); item.setZJSHJFS(sd.getZjshjfs()); item.setZKJGFLS(sd.getZkjgfls()); //克工费 item.setZoneName(sd.getZoneName()); //柜台名 item.setZSFTJ(sd.getZSFTJ());//是否特价 item.setZKJYF(sd.getZKJFY());//扣减费用 itemList.add(item); } itemDTO.setItemList(itemList); ItemIndexDTO oldIndex = (ItemIndexDTO)getLocalProcessor().getObjectFromXml(getLocalProcessor().getDataFileContent(new File(ProjectUtil.getRuntimeClassPath()+AppConstants.DATA_ITEM_INDEX_FILENAME)), ItemIndexDTO.class); if(null != oldIndex && null != oldIndex.getItemIndexList() && oldIndex.getItemIndexList().size() > 0){ List<ItemIndex> oldIndexs = oldIndex.getItemIndexList(); StringBuffer oldBarCodes = new StringBuffer(); for(int i=0; i<oldIndexs.size(); i++){ oldBarCodes.append(oldIndexs.get(i).getBarCodes()); } //备份单品数据文件和索引文件 getLocalProcessor().backItemDataAndIndexFile(); } //创建新的本地单品数据文件 File dataFile = new File(ProjectUtil.getRuntimeClassPath() + getItemDataFileNameWithIndex(barCodes,AppConstants.DATA_ITEM_FILENAME_NONEXT)); FileOutputStream fos = new FileOutputStream(dataFile.getAbsolutePath()); JAXBContext context = JAXBContext.newInstance(itemDTO.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.marshal(itemDTO, fos); //创建本地索引文件 ItemIndex itemIndex = new ItemIndex(); itemIndex.setFileName(getItemDataFileNameWithIndex(barCodes,AppConstants.DATA_ITEM_FILENAME_NONEXT)); itemIndex.setBarCodes(barCodes.toString()); itemIndexList.add(itemIndex); if (result.getIsEndFlg()) { ItemIndexDTO itemIndexDTO = new ItemIndexDTO(); itemIndexDTO.setItemIndexList(itemIndexList); getLocalProcessor().createXmlFileFromObject(itemIndexDTO, AppConstants.DATA_ITEM_INDEX_FILENAME); SyncDataListenerManager.getInstance().fireChange("---------------> "+ MessageResources.message_tips_endsyncitem,count); break; } } catch (Exception e) { e.printStackTrace(); LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载商品主数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载商品主数据失败"); return; } } } }); } /** * 取得单品数据文件名称,根据最后数据的ID加一个文件索引 * * @param idFlagList * 本地同步的ID集合 * @param name * 文件名称 * @return */ private String getItemDataFileNameWithIndex(StringBuffer idFlagList, String name) { String ids = idFlagList.toString(); String[] idArray = ids.split(","); String lastId = idArray[idArray.length - 1]; return name + "#" + lastId + ".xml"; } /** * 下载结算方式数据 * * @param progress * @param count * @throws Exception */ public void downloadCashierModeData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { SyncDataListenerManager .getInstance() .fireChange( "---------------> " + MessageResources.message_tips_startsynccashiermode); try { GetAllCashierModeReq req = new GetAllCashierModeReq(); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetAllCashierMode getAllCashierMode34 = new GetAllCashierMode(); getAllCashierMode34.setGetAllCashierModeReq(req); GetAllCashierModeResponse response = POSServerCaller.getWebService(60000000L).getAllCashierMode(getAllCashierMode34); GetAllCashierModeResult result = response.getGetAllCashierModeResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_CASHIERMODE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_CASHIERMODE_FILENAME_BACK); return; } ArrayOfCashierMode cashModeA = result.getCashierModes(); if (null == cashModeA || null == cashModeA.getCashierMode()) { // 没有结算方式数据,删除旧的结算方式数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_CASHIERMODE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_CASHIERMODE_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有结算方式数据"); return; } CashierModeDTO cashierModeDTO = new CashierModeDTO(); List<CashierModel> cashModelList = new ArrayList<CashierModel>(); CashierMode[] cashModeArray = cashModeA.getCashierMode(); for (int i = 0; i < cashModeArray.length; i++) { CashierMode cm = cashModeArray[i]; CashierModel cashModel = new CashierModel(); cashModel.setID(cm.getID()); cashModel.setIsAccount(cm.getIsAccount()); cashModel.setIsPrint(cm.getIsPrint()); cashModel.setIsNoMakeup(cm.getIsNoMakeup()); cashModel.setRate(cm.getRate()); cashModel.setName(cm.getAccountMethod()); cashModel.setCode(String.valueOf(cm.getPayment())); cashModelList.add(cashModel); } cashierModeDTO.setCashierModeList(cashModelList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(cashierModeDTO, AppConstants.DATA_CASHIERMODE_FILENAME_BACK, AppConstants.DATA_CASHIERMODE_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载结算方式数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载结算方式数据失败"); return; } SyncDataListenerManager.getInstance().fireChange( "---------------> " + MessageResources.message_tips_endsynccashiermode,count); } }); } /** * 下载实时金价数据 * * @param progress * @param count * @throws Exception */ public void downloadGoldPriceData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始同步实时金价数据"); GetGoldPriceDataReqCondition conditions = new GetGoldPriceDataReqCondition(); conditions.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); GetGoldPriceDataReq req = new GetGoldPriceDataReq(); req.setCondition(conditions); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetGoldPriceData getGoldPriceData70 = new GetGoldPriceData(); getGoldPriceData70.setGetGoldPriceDataReq(req); try { GetGoldPriceDataResponse response = POSServerCaller.getWebService(60000000L).getGoldPriceData(getGoldPriceData70); GetGoldPriceDataResult result = response.getGetGoldPriceDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME_BACK); return; } ArrayOfgoldPrice aop = result.getGoldPrices(); if (null == aop) { // 没有实时金价数据,删除旧的实时金价数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有实时金价数据"); return; } GoldPrice[] gpArray = aop.getGoldPrice(); if (null == gpArray) { // 没有实时金价数据,删除旧的实时金价数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_GOLDPRICE_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有实时金价数据"); return; } GoldPriceDTO goldPriceDTO = new GoldPriceDTO(); List<com.topsun.posclient.datamodel.GoldPrice> goldPs = new ArrayList<com.topsun.posclient.datamodel.GoldPrice>(); for (int i = 0; i < gpArray.length; i++) { GoldPrice gp = gpArray[i]; com.topsun.posclient.datamodel.GoldPrice goldP = new com.topsun.posclient.datamodel.GoldPrice(); goldP.setID(gp.getId()); goldP.setMtartCode(gp.getMaraGrpCode()); goldP.setMtartName(gp.getGrpDescribe()); goldP.setPrice(gp.getPrice()); goldP.setLastSyncTime(ProjectUtil.getCurrentDateByFormat("yyyy-MM-dd hh:mm:ss")); goldPs.add(goldP); } goldPriceDTO.setGoldPriceList(goldPs); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(goldPriceDTO, AppConstants.DATA_GOLDPRICE_FILENAME_BACK, AppConstants.DATA_GOLDPRICE_FILENAME); } catch (Exception e) { e.printStackTrace(); LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载实时金价数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载实时金价数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成实时金价数据同步", count); } }); } /** * 下载打印模板 * * @param progress * @param count * @throws Exception */ public void downloadPrintTemplateData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始同步打印模板数据"); GetPrintTemplateReqCondition condition = new GetPrintTemplateReqCondition(); condition.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); GetPrintTemplateReq req = new GetPrintTemplateReq(); req.setCondition(condition); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetPrintTemplate getPrintTemplate = new GetPrintTemplate(); getPrintTemplate.setGetPrintTemplateReq(req); try { GetPrintTemplateResponse response = POSServerCaller.getWebService(60000000L).getPrintTemplate(getPrintTemplate); GetPrintTemplateResult result = response.getGetPrintTemplateResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); // getLocalProcessor().deleteDataFile(AppConstants.PRINT_TEMP_FILE); return; } ArrayOftemplate aop = result.getTemplates(); if (null == aop) { // 没有打印模板数据,删除旧的打印模板数据 // getLocalProcessor().deleteDataFile(AppConstants.PRINT_TEMP_FILE); SyncDataListenerManager.getInstance().fireChange("没有打印模板数据"); return; } Template[] gpArray = aop.getTemplate(); if (null == gpArray || gpArray.length == 0) { // 没有打印模板数据,删除旧的打印模板数据 // getLocalProcessor().deleteDataFile(AppConstants.PRINT_TEMP_FILE); SyncDataListenerManager.getInstance().fireChange("没有打印模板数据"); return; } Template temp0 = gpArray[0]; int bytesum = 0; int byteread = 0; URL url = new URL(temp0.getXmlURL()); URLConnection conn = url.openConnection(); InputStream inStream = conn.getInputStream(); FileOutputStream fs = new FileOutputStream(ProjectUtil.getRuntimeClassPath()+AppConstants.PRINT_TEMP_FILE); byte[] buffer = new byte[1204]; while ((byteread = inStream.read(buffer)) != -1) { bytesum += byteread; fs.write(buffer, 0, byteread); } fs.flush(); inStream.close(); fs.close(); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载打印模板数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载打印模板数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成打印模板数据同步", count); } }); } /** * 会员数据下载 * @param progress * @param count * @throws Exception */ public void downloadMemberData(SyncProgress progress,final int count) throws Exception{ Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始下载会员数据"); GetMemberDataReq req = new GetMemberDataReq(); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetMemberData getMemberData66 = new GetMemberData(); getMemberData66.setGetMemberDataReq(req); try { GetMemberDataResponse response = POSServerCaller.getWebService(60000000L).getMemberData(getMemberData66); GetMemberDataResult result = response.getGetMemberDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_MEMBER_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_MEMBER_FILENAME_BACK); return; } ArrayOfmember aom = result.getMembers(); if(null == aom){ // 没有会员数据,删除旧的会员数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_MEMBER_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_MEMBER_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有会员数据"); return; } MemberDTO memberDTO = new MemberDTO(); List<com.topsun.posclient.datamodel.Member> memberList = new ArrayList<com.topsun.posclient.datamodel.Member>(); com.topsun.posclient.webservice.dto.Member[] memberArray = aom.getMember(); for(int i=0; i<memberArray.length; i++){ com.topsun.posclient.webservice.dto.Member m = memberArray[i]; com.topsun.posclient.datamodel.Member member = new com.topsun.posclient.datamodel.Member(); member.setID(m.getId()); member.setBirthDay(ProjectUtil.getDate(m.getBirthDay())); member.setAge(m.getAge()); member.setCardNo(m.getCardNo()); member.setCardType(m.getCardType()); member.setEffectiveDateE(ProjectUtil.getDate(m.getEffectiveDateE())); member.setEffectiveDateS(ProjectUtil.getDate(m.getEffectiveDateS())); member.setIDCard(m.getIdCard()); member.setIssueDate(ProjectUtil.getDate(m.getIssueDate())); member.setMenberName(m.getMemberName()); member.setPoint(m.getPoints()); member.setSex(m.getSex()); member.setStatus(m.getStatus()); memberList.add(member); } memberDTO.setMemberList(memberList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(memberDTO, AppConstants.DATA_MEMBER_FILENAME_BACK, AppConstants.DATA_MEMBER_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载会员数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载会员数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成会员数据下载",count); } }); } /** * 卡类型数据下载 * @param progress * @param count * @throws Exception */ public void downloadCardRuleData(SyncProgress progress,final int count) throws Exception{ Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始下载会员卡类型数据"); GetCardRuleDataReq req = new GetCardRuleDataReq(); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); GetCardRuleData getCardRuleData50 = new GetCardRuleData(); getCardRuleData50.setGetCardRuleDataReq(req); try { GetCardRuleDataResponse response = POSServerCaller.getWebService(60000000L).getCardRuleData(getCardRuleData50); GetCardRuleDataResult result = response.getGetCardRuleDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_CARDRULE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_CARDRULE_FILENAME_BACK); return; } ArrayOfdprule_m aom = result.getDprule_ms(); if(null == aom){ // 没有会员数据,删除旧的会员数据 getLocalProcessor().deleteDataFile(AppConstants.DATA_CARDRULE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_CARDRULE_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有会员卡类型数据"); return; } CardRuleDTO cardRuleDTO = new CardRuleDTO(); List<com.topsun.posclient.datamodel.CardRule> cardRuleList = new ArrayList<com.topsun.posclient.datamodel.CardRule>(); com.topsun.posclient.webservice.dto.Dprule_m[] dpruleArray = aom.getDprule_m(); for(int i=0; i<dpruleArray.length; i++){ com.topsun.posclient.webservice.dto.Dprule_m m = dpruleArray[i]; com.topsun.posclient.datamodel.CardRule cardRule = new com.topsun.posclient.datamodel.CardRule(); cardRule.setCardTypeNM(m.getCardTypeNM()); cardRule.setDiscount(m.getDiscount()); cardRule.setGrade(m.getGrade()); cardRule.setMatnr(m.getMatnr()); cardRule.setPPointCo(m.getPPointCo()); cardRule.setTotalCo(m.getTotalCo()); cardRuleList.add(cardRule); } cardRuleDTO.setCardRuleList(cardRuleList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(cardRuleDTO, AppConstants.DATA_CARDRULE_FILENAME_BACK, AppConstants.DATA_CARDRULE_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载会员卡类型数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载会员卡类型数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成会员卡类型数据下载",count); } }); } /** * 积分消费数据下载 * @param progress * @param count * @throws Exception */ public void downloadPointData(SyncProgress progress,final int count) throws Exception{ Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始下载积分消费数据"); GetPointDataReqCondition condition = new GetPointDataReqCondition(); condition.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); GetPointDataReq req = new GetPointDataReq(); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); req.setCondition(condition); GetPointData getPointData56 = new GetPointData(); getPointData56.setGetPointDataReq(req); // try{ // XMLOutputFactory xof = XMLOutputFactory.newInstance(); // OutputStream os = new FileOutputStream(new File("D:/getPointReq.xml")); // XMLStreamWriter xmlWriter = xof.createXMLStreamWriter(os); // getPointData56.serialize(new javax.xml.namespace.QName( // "http://www.topsunit.com/rms", // "getPointDataReq", // "ns1"), xmlWriter); // }catch(Exception e){ // e.printStackTrace(); // } try { GetPointDataResponse response = POSServerCaller.getWebService(60000000L).getPointData(getPointData56); GetPointDataResult result = response.getGetPointDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_POINTDATA_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_POINTDATA_FILENAME_BACK); return; } ArrayOfpoint aom = result.getPoints(); if(null == aom){ getLocalProcessor().deleteDataFile(AppConstants.DATA_POINTDATA_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_POINTDATA_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有积分消费数据"); return; } PointDataDTO pointDataDTO = new PointDataDTO(); List<com.topsun.posclient.datamodel.PointData> pointDataList = new ArrayList<com.topsun.posclient.datamodel.PointData>(); com.topsun.posclient.webservice.dto.Point[] memberArray = aom.getPoint(); for(int i=0; i<memberArray.length; i++){ com.topsun.posclient.webservice.dto.Point m = memberArray[i]; com.topsun.posclient.datamodel.PointData pointData = new com.topsun.posclient.datamodel.PointData(); pointData.setDocNum(m.getDocNum()); pointData.setExchangeMoney(m.getExchangeMoney()); pointData.setRatio(m.getExchangeRatio()); pointData.setId(m.getId()); pointData.setStartDate(ProjectUtil.getDateString(m.getStartDate())); pointData.setEndDate(ProjectUtil.getDateString(m.getEndDate())); pointDataList.add(pointData); } pointDataDTO.setPointDataList(pointDataList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(pointDataDTO, AppConstants.DATA_POINTDATA_FILENAME_BACK, AppConstants.DATA_POINTDATA_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载积分消费数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载积分消费数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成积分消费数据下载",count); } }); } /** * 发票数据文件下载 * @param progress * @param count * @throws Exception */ public void downloadInvoiceData(SyncProgress progress,final int count) throws Exception{ Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始下载发票数据"); GetInvoiceReqCondition condition = new GetInvoiceReqCondition(); condition.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop())); condition.setPos(POSClientApp.get().getSysConfig().getPosNo()); GetInvoiceReq req = new GetInvoiceReq(); req.setUserCredential(POSServerCaller.getDefaultUserCredential()); req.setCondition(condition); GetInvoice getInvoice60 = new GetInvoice(); getInvoice60.setGetInvoiceReq(req); try { GetInvoiceResponse response = POSServerCaller.getWebService(60000000L).getInvoice(getInvoice60); GetInvoiceResult result = response.getGetInvoiceResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result.getResult().getMsg()); SyncDataListenerManager.getInstance().fireChange(result.getResult().getMsg()); getLocalProcessor().deleteDataFile(AppConstants.DATA_INVOICE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_INVOICE_FILENAME_BACK); return; } ArrayOfInvoice aoi = result.getGetInvoice(); if(null == aoi){ getLocalProcessor().deleteDataFile(AppConstants.DATA_INVOICE_FILENAME); getLocalProcessor().deleteDataFile(AppConstants.DATA_INVOICE_FILENAME_BACK); SyncDataListenerManager.getInstance().fireChange("没有发票数据"); return; } InvoiceDTO invoiceDTO = new InvoiceDTO(); List<com.topsun.posclient.datamodel.Invoice> invoiceList = new ArrayList<com.topsun.posclient.datamodel.Invoice>(); com.topsun.posclient.webservice.dto.Invoice[] invoiceArray = aoi.getInvoice(); for(int i=0; i<invoiceArray.length; i++){ com.topsun.posclient.webservice.dto.Invoice ii = invoiceArray[i]; com.topsun.posclient.datamodel.Invoice invoiceData = new com.topsun.posclient.datamodel.Invoice(); invoiceData.setFPDM(ii.getFPDM()); invoiceData.setFPH(ii.getFPH()); invoiceData.setFRGS(ii.getFRGS()); invoiceData.setID(ii.getID()); invoiceData.setPOS(ii.getPOS()); invoiceData.setShopID(ii.getShopID()); invoiceList.add(invoiceData); if(i == 0){ invoiceData.setLastFPH(null); invoiceData.setLastFPDM(null); if(invoiceArray.length > 1){ invoiceData.setNextFPH(invoiceArray[i+1].getFPH()); invoiceData.setNextFPDM(invoiceArray[i+1].getFPDM()); } }else if( i == invoiceArray.length - 1){ invoiceData.setLastFPH(invoiceArray[i-1].getFPH()); invoiceData.setLastFPDM(invoiceArray[i-1].getFPDM()); invoiceData.setNextFPH(null); invoiceData.setNextFPDM(null); }else{ invoiceData.setLastFPH(invoiceArray[i-1].getFPH()); invoiceData.setLastFPDM(invoiceArray[i-1].getFPDM()); invoiceData.setNextFPH(invoiceArray[i+1].getFPH()); invoiceData.setNextFPDM(invoiceArray[i+1].getFPDM()); } } invoiceDTO.setInvoiceList(invoiceList); // 更新本地数据文件 getLocalProcessor().updateLocalDataFile(invoiceDTO, AppConstants.DATA_INVOICE_FILENAME_BACK, AppConstants.DATA_INVOICE_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "下载发票数据失败", e); SyncDataListenerManager.getInstance().fireChange("下载发票数据失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成发票数据下载",count); } }); } /** * 上传零售数据 * * @param progress * @param count * @throws Exception */ public void uploadPartSalesData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> " + MessageResources.message_tips_startsyncsales); File file = new File(ProjectUtil.getRuntimeClassPath() + AppConstants.DATA_PARTSALES_PATH); try { File[] dataFiles = file.listFiles(); if(dataFiles.length == 2){ SyncDataListenerManager.getInstance().fireChange("本地没有零售数据"); return; } uploadPartSales(file, AppConstants.DATA_PARTSALES_HIS_PATH); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "零售数据上传失败", e); SyncDataListenerManager.getInstance().fireChange("零售数据上传失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> " + MessageResources.message_tips_endsyncsales, count); } }); } /** * 上传退换货数据 * * @param progress * @param count * @throws Exception */ public void uploadReturnedData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始上传退换货数据"); File file = new File(ProjectUtil.getRuntimeClassPath() + AppConstants.DATA_RETURNED_PATH); try { File[] dataFiles = file.listFiles(); if(dataFiles.length == 2){ SyncDataListenerManager.getInstance().fireChange("本地没有退换货数据"); return; } uploadPartSales(file, AppConstants.DATA_RETURNED_HIS_PATH); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "退货数据上传失败", e); SyncDataListenerManager.getInstance() .fireChange("退货数据上传失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成退换货数据上传", count); } }); } /** * 上传旧金数据 * @param progress * @param count * @throws Exception */ public void uploadOldGoldData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始上传旧金数据"); File file = new File(ProjectUtil.getRuntimeClassPath() + AppConstants.DATA_OLDGOLD_PATH); try { File[] dataFiles = file.listFiles(); if(dataFiles.length == 2){ SyncDataListenerManager.getInstance().fireChange("本地没有旧金数据"); return; } uploadPartSales(file, AppConstants.DATA_OLDGOLD_HIS_PATH); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "旧金数据上传失败", e); SyncDataListenerManager.getInstance() .fireChange("旧金数据上传失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成旧金数据上传", count); } }); } /** * 上传到期取货数据 * @param progress * @param count * @throws Exception */ public void uploadGoldTimeoutData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始上传到期取货数据"); File file = new File(ProjectUtil.getRuntimeClassPath() + AppConstants.DATA_GOLDTIMEOUT_PATH); try { File[] dataFiles = file.listFiles(); if(dataFiles.length == 2){ SyncDataListenerManager.getInstance().fireChange("本地没有到期取货数据"); return; } uploadPartSales(file, AppConstants.DATA_GOLDTIMEOUT_HIS_PATH); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "到期取货数据上传失败", e); SyncDataListenerManager.getInstance() .fireChange("到期取货数据上传失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成到期取货数据上传", count); } }); } /** * 上传投资预订数据 * @param progress * @param count * @throws Exception */ public void uploadGoldBookingData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始上传投资预订数据"); File file = new File(ProjectUtil.getRuntimeClassPath() + AppConstants.DATA_GOLDBOOKING_PATH); try { File[] dataFiles = file.listFiles(); if(dataFiles.length == 2){ SyncDataListenerManager.getInstance().fireChange("本地没有投资预订数据"); return; } uploadPartSales(file, AppConstants.DATA_GOLDBOOKING_HIS_PATH); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "投资预订数据上传失败", e); SyncDataListenerManager.getInstance() .fireChange("投资预订数据上传失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成投资预订数据上传", count); } }); } /** * 上传投资现货数据 * @param progress * @param count * @throws Exception */ public void uploadGoldSalesData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始上传投资现货数据"); File file = new File(ProjectUtil.getRuntimeClassPath() + AppConstants.DATA_GOLDSALES_PATH); try { File[] dataFiles = file.listFiles(); if(dataFiles.length == 2){ SyncDataListenerManager.getInstance().fireChange("本地没有投资现货数据"); return; } uploadPartSales(file, AppConstants.DATA_GOLDSALES_HIS_PATH); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "投资现货数据上传失败", e); SyncDataListenerManager.getInstance() .fireChange("投资现货数据上传失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成投资现货数据上传", count); } }); } /** * 上传投资回购数据 * @param progress * @param count * @throws Exception */ public void uploadGoldBackData(SyncProgress progress, final int count) throws Exception { Display.getDefault().asyncExec(new Runnable() { public void run() { SyncDataListenerManager.getInstance().fireChange("---------------> 开始上传投资回购数据"); File file = new File(ProjectUtil.getRuntimeClassPath() + AppConstants.DATA_GOLDBACK_PATH); try { File[] dataFiles = file.listFiles(); if(dataFiles.length == 2){ SyncDataListenerManager.getInstance().fireChange("本地没有投资回购数据"); return; } uploadPartSales(file, AppConstants.DATA_GOLDBACK_HIS_PATH); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "投资回购数据上传失败", e); SyncDataListenerManager.getInstance() .fireChange("投资回购数据上传失败"); return; } SyncDataListenerManager.getInstance().fireChange("---------------> 完成投资回购数据上传", count); } }); } /** * 上传零售信息 * @param file * @param dataPath * @throws RemoteException * @throws Exception */ private void uploadPartSales(File file, String dataPath) throws RemoteException, Exception { File[] dataFiles = file.listFiles(); for (int i = 0; i < dataFiles.length; i++) { File dataFile = dataFiles[i]; if (dataFile.isFile()) { RetailDTO dto = (RetailDTO) getLocalProcessor() .getObjectFromXml(getLocalProcessor().getDataFileContent(dataFile), RetailDTO.class); List<com.topsun.posclient.datamodel.Retail> list = dto.getRetailList(); if (null == list || list.size() <= 0) { return; } Retail[] retailArray = new Retail[list.size()]; for (int j = 0; j < list.size(); j++) { com.topsun.posclient.datamodel.Retail asi = list.get(j); Retail retail = new Retail(); retail.setSalesDate(ProjectUtil.getCalendar(asi.getSalesDate())); retail.setShopID(asi.getShopID()); retail.setCashierID(asi.getIsMember()); retail.setDocNum(asi.getDocNum()); retail.setIsReturn(asi.getIsReturn()); retail.setIsMember(asi.getIsMember()); retail.setAccountData(ProjectUtil.getCalendar(asi.getAccountData())); retail.setEnablePoint(Integer.valueOf(asi.getEnablePoint())); retail.setCardNo(asi.getCardNo()); retail.setCashierID(asi.getCashierID()); retail.setDiscount(asi.getDiscount()); retail.setDiscountAccount(asi.getDiscountAccount()); retail.setDiscountAmount_M(asi.getDiscountAmount_M()); retail.setDiscountRate(asi.getDiscountAmount_M()); retail.setDiscountToZero(asi.getDiscountToZero()); retail.setInvoceAmount(asi.getInvoceAmount()); retail.setIsReplace(asi.getIsReplace()); retail.setMemberDiscount(asi.getMemberDiscount()); retail.setReceivable(asi.getReceivable()); retail.setSalesType(asi.getSalesType()); retail.setTotals(asi.getTotals()); retail.setTotalSales(asi.getTotalSales()); retail.setUsePoint(asi.getUsePoint()); retail.setRetail_FPs(POSServerCaller.getArrayOfRetail_FP(asi.getRetailFPList())); retail.setRetail_Ms(POSServerCaller.getArrayOfRetail_M(asi.getRetailMList())); retail.setRetail_Ps(POSServerCaller.getArrayOfRetail_P(asi.getRetailPList())); retail.setRetail_OldGolds(POSServerCaller.getArrayOfRetail_OldGold(asi.getOldGoldList())); retail.setRetail_MPs(POSServerCaller.getArrayOfRetail_MP(asi.getRetailMPList())); retail.setRetail_UnSaleParts(POSServerCaller.getArrayOfRetail_UnSalePart(asi.getUnSalePartList())); retailArray[j] = retail; } ArrayOfRetail arrayOfRetail = new ArrayOfRetail(); arrayOfRetail.setRetail(retailArray); SavePartSalesReq req = new SavePartSalesReq(); req.setUserCredential(POSServerCaller .getDefaultUserCredential()); req.setRetails(arrayOfRetail); SavePartSales savePartSales12 = new SavePartSales(); savePartSales12.setSavePartSalesReq(req); SavePartSalesResponse response = POSServerCaller.getWebService(60000000L).savePartSales(savePartSales12); String flag = response.getSavePartSalesResult().getResult().getFlag(); if(flag.equals(POSServerCaller.SUCCESS)){ getLocalProcessor().moveFileToHis(dataPath, dataFiles[i]); }else{ SyncDataListenerManager.getInstance().fireChange(response.getSavePartSalesResult().getResult().getMsg()); } } } } /** * 保存到本地文件 * * @param filepath * @param fileContent * @throws Exception */ public void saveLocalFile(String filepath, String fileContent) throws Exception { File file = new File(ProjectUtil.getRuntimeClassPath() + filepath); file.deleteOnExit(); BufferedWriter output = null; try { file.createNewFile(); output = new BufferedWriter(new FileWriter(file)); output.write(fileContent); } catch (Exception e) { throw new Exception(MessageResources.message_tips_sync_failer); } finally { if (null != output) { output.close(); } } } /** * 进度显示显示线程 * * @param infoText * @param text */ public void createDisplayThread(final Text infoText, final String text) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { { String str = infoText.getText() + "\r\n"; infoText.setText(str + text); } } }); } public void setProgress(final ProgressBar bar, final int worked) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { { bar.setSelection(worked); } } }); } }