package com.topsun.posclient.system.service.impl; import java.util.ArrayList; import java.util.List; import org.apache.commons.codec.digest.DigestUtils; import com.topsun.posclient.common.AppConstants; import com.topsun.posclient.common.LoggerUtil; import com.topsun.posclient.common.POSClientApp; import com.topsun.posclient.common.POSException; import com.topsun.posclient.common.dao.BaseDao; import com.topsun.posclient.common.service.impl.BaseServiceImpl; import com.topsun.posclient.datamodel.Shop; import com.topsun.posclient.datamodel.User; import com.topsun.posclient.datamodel.dto.ShopDTO; import com.topsun.posclient.datamodel.dto.UserDTO; import com.topsun.posclient.system.SystemActivator; import com.topsun.posclient.system.service.ILoginService; import com.topsun.posclient.webservice.POSServerCaller; import com.topsun.posclient.webservice.dto.ArrayOfauth; import com.topsun.posclient.webservice.dto.ArrayOfsyncShopDataResultItem; import com.topsun.posclient.webservice.dto.ArrayOfuser; import com.topsun.posclient.webservice.dto.Auth; 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.HelloWorld; 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.UserCredential; /** * 登录服务实现 * * @author Dong * */ public class LoginServiceImpl extends BaseServiceImpl implements ILoginService { private BaseDao commonDao = new BaseDao(); /* * (non-Javadoc) * * @see * com.topsun.posclient.system.service.ILoginService#getUserData(java.lang * .String, java.lang.String) */ public User getUserData(String name, String password) throws POSException, Exception { User loginOpr = null; // 如果是在线就先同步一下用户数据再登陆 if (POSServerCaller.isConnected()) { GetUserInfoReq req = new GetUserInfoReq(); req.setUserCode(null);// userCode设置为null,同步改部门下所有用户 UserCredential userCredential = new UserCredential(); userCredential.setCdKey(null); userCredential.setUserName(name); userCredential.setPassWord(DigestUtils.md5Hex(password).toUpperCase()); req.setUserCredential(userCredential); req.setShopID(Integer.valueOf(POSClientApp.get().getSysConfig() .getOwnerShop())); GetUserInfo getUserInfo = new GetUserInfo(); getUserInfo.setGetUserInfoReq(req); GetUserInfoResponse response = POSServerCaller.getWebService() .getUserInfo(getUserInfo); GetUserInfoResult result = response.getGetUserInfoResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result .getResult().getMsg()); commonDao.getLocalProcessor().deleteDataFile( AppConstants.DATA_USER_FILENAME); commonDao.getLocalProcessor().deleteDataFile( AppConstants.DATA_USER_FILENAME_BACK); } ArrayOfuser userArray = result.getUsers(); if (null == userArray) { // 没有用户数据,删除旧的用户数据 commonDao.getLocalProcessor().deleteDataFile( AppConstants.DATA_USER_FILENAME); commonDao.getLocalProcessor().deleteDataFile( AppConstants.DATA_USER_FILENAME_BACK); } com.topsun.posclient.webservice.dto.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++) { com.topsun.posclient.webservice.dto.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); // 更新本地数据文件 commonDao.getLocalProcessor().updateLocalDataFile(userDTO, AppConstants.DATA_USER_FILENAME_BACK, AppConstants.DATA_USER_FILENAME); } // 离线登陆 UserDTO userDTO = null; try { userDTO = commonDao.getUserData(); } catch (Exception e) { e.printStackTrace(); } if (null == userDTO) { return null; } List<User> operators = userDTO.getUserList(); for (User o : operators) { String userCode = o.getUserCode(); String passWord = o.getPassWord(); if (null == userCode) { continue; } if (o.getUserCode().equals(name)) { if (null == passWord || o.getPassWord().equals( DigestUtils.md5Hex(password).toUpperCase())) { loginOpr = o; } } } if (null != loginOpr) { // 登录完成之后,通过sayHello尝试连接服务器 new Thread() { public void run() { HelloWorld helloWorld64 = new HelloWorld(); helloWorld64.setInputPara("Hello, POS Server"); try { POSServerCaller.getWebService() .helloWorld(helloWorld64); } catch (Exception e) { } } }.start(); // 首次登陆成功之后,初始化店铺数据 String lastUpdateTime = POSClientApp.get().getSysConfig() .getLastUpdateTime(); if (null == lastUpdateTime || "".equals(lastUpdateTime)) { SyncShopDataReq syncShopReq = new SyncShopDataReq(); syncShopReq.setUserCredential(POSServerCaller .getDefaultUserCredential()); SyncShopData syncShopData96 = new SyncShopData(); syncShopData96.setSyncShopDataReq(syncShopReq); try { SyncShopDataResponse response = POSServerCaller .getWebService().syncShopData(syncShopData96); SyncShopDataResult result = response .getSyncShopDataResult(); String flag = result.getResult().getFlag(); if (!flag.equals(POSServerCaller.SUCCESS)) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, result .getResult().getMsg()); } ArrayOfsyncShopDataResultItem aosdr = result.getShop(); if (null == aosdr) { // 没有店铺数据,删除旧的店铺数据 commonDao.getLocalProcessor().deleteDataFile( AppConstants.DATA_SHOP_FILENAME); commonDao.getLocalProcessor().deleteDataFile( AppConstants.DATA_SHOP_FILENAME_BACK); } 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()); shopList.add(shop); } shopDTO.setShopList(shopList); // 更新本地数据文件 commonDao.getLocalProcessor().updateLocalDataFile(shopDTO, AppConstants.DATA_SHOP_FILENAME_BACK, AppConstants.DATA_SHOP_FILENAME); } catch (Exception e) { LoggerUtil.logError(SystemActivator.PLUGIN_ID, "初始化店铺数据出错", e); throw new POSException("初始化店铺数据出错"); } } } // 保存登录用户信息 POSClientApp.get().saveLoginUser(loginOpr); return loginOpr; } public static void main(String[] args) { System.out.println(DigestUtils.md5Hex("000000").toUpperCase()); } }