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());
}
}