text:
package com.ycsoft.business.component.core;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.ycsoft.beans.config.TCustColonyCfg;
import com.ycsoft.beans.config.TDeviceChangeReason;
import com.ycsoft.beans.core.common.CDoneCode;
import com.ycsoft.beans.core.common.CDoneCodeDetail;
import com.ycsoft.beans.core.cust.CCust;
import com.ycsoft.beans.core.cust.CCustDevice;
import com.ycsoft.beans.core.job.JUserStop;
import com.ycsoft.beans.core.prod.CProdOrderFee;
import com.ycsoft.beans.core.promotion.CPromFee;
import com.ycsoft.beans.core.promotion.CPromProdRefund;
import com.ycsoft.beans.core.user.CRejectRes;
import com.ycsoft.beans.core.user.CUser;
import com.ycsoft.beans.core.user.CUserBroadband;
import com.ycsoft.beans.core.user.CUserDtv;
import com.ycsoft.beans.core.user.CUserHis;
import com.ycsoft.beans.core.user.CUserPropChange;
import com.ycsoft.beans.core.user.CUserStb;
import com.ycsoft.beans.device.RModemModel;
import com.ycsoft.beans.device.RStbModel;
import com.ycsoft.beans.prod.PPromFee;
import com.ycsoft.beans.prod.PPromFeeUser;
import com.ycsoft.beans.prod.PRes;
import com.ycsoft.beans.prod.PSpkgOpenbusifee;
import com.ycsoft.beans.prod.PSpkgOpenuser;
import com.ycsoft.beans.system.SOptr;
import com.ycsoft.business.commons.abstracts.BaseBusiComponent;
import com.ycsoft.business.component.config.ExpressionUtil;
import com.ycsoft.business.dao.config.TCustColonyCfgDao;
import com.ycsoft.business.dao.config.TDeviceChangeReasonDao;
import com.ycsoft.business.dao.core.cust.CCustDao;
import com.ycsoft.business.dao.core.cust.CCustDeviceDao;
import com.ycsoft.business.dao.core.job.JUserStopDao;
import com.ycsoft.business.dao.core.prod.CProdOrderFeeDao;
import com.ycsoft.business.dao.core.promotion.CPromFeeDao;
import com.ycsoft.business.dao.core.promotion.CPromProdRefundDao;
import com.ycsoft.business.dao.core.promotion.CPromotionDao;
import com.ycsoft.business.dao.core.user.CRejectResDao;
import com.ycsoft.business.dao.core.user.CUserAtvDao;
import com.ycsoft.business.dao.core.user.CUserBroadbandDao;
import com.ycsoft.business.dao.core.user.CUserDtvDao;
import com.ycsoft.business.dao.core.user.CUserHisDao;
import com.ycsoft.business.dao.prod.PPromFeeDao;
import com.ycsoft.business.dao.prod.PPromFeeProdDao;
import com.ycsoft.business.dao.prod.PPromFeeUserDao;
import com.ycsoft.business.dao.prod.PSpkgDao;
import com.ycsoft.business.dao.prod.PSpkgOpenbusifeeDao;
import com.ycsoft.business.dao.prod.PSpkgOpenuserDao;
import com.ycsoft.business.dao.resource.device.RDeviceDao;
import com.ycsoft.business.dao.resource.device.RModemModelDao;
import com.ycsoft.business.dao.resource.device.RStbModelDao;
import com.ycsoft.business.dao.system.SOptrDao;
import com.ycsoft.business.dto.core.bill.UserBillDto;
import com.ycsoft.business.dto.core.prod.CPromotionDto;
import com.ycsoft.business.dto.core.prod.PromFeeProdDto;
import com.ycsoft.business.dto.core.user.ChangedUser;
import com.ycsoft.business.dto.core.user.UserDto;
import com.ycsoft.commons.constants.DictKey;
import com.ycsoft.commons.constants.StatusConstants;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.commons.exception.ComponentException;
import com.ycsoft.commons.exception.ServicesException;
import com.ycsoft.commons.helper.BeanHelper;
import com.ycsoft.commons.helper.CollectionHelper;
import com.ycsoft.commons.helper.DateHelper;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.commons.store.MemoryDict;
import com.ycsoft.daos.core.JDBCException;
import com.ycsoft.daos.core.Pager;
import com.ycsoft.sysmanager.dto.prod.ResGroupDto;

/**
 * 用户组件
 */
@Component
public class UserComponent extends BaseBusiComponent {
	private CUserHisDao cUserHisDao;
	private CUserAtvDao cUserAtvDao;
	private CUserDtvDao cUserDtvDao;
	private CUserBroadbandDao cUserBroadbandDao;
	private SOptrDao sOptrDao;
	private CRejectResDao cRejectResDao;
	private JUserStopDao jUserStopDao;
	private CPromotionDao cPromotionDao;
	private CCustDao cCustDao;

	private PPromFeeDao pPromFeeDao;
	private PPromFeeUserDao pPromFeeUserDao;
	private PPromFeeProdDao pPromFeeProdDao;
	private CPromProdRefundDao cPromProdRefundDao;
	private RDeviceDao rDeviceDao;
	private CPromFeeDao cPromFeeDao;
	private TCustColonyCfgDao tCustColonyCfgDao;
	private ExpressionUtil expressionUtil ;
	@Autowired
	private RStbModelDao rStbModelDao;
	@Autowired
	private RModemModelDao rModemModelDao;
	@Autowired
	private CCustDeviceDao cCustDeviceDao;
	@Autowired
	private CProdOrderFeeDao cProdOrderFeeDao;
	@Autowired
	private TDeviceChangeReasonDao tDeviceChangeReasonDao;
	@Autowired
	private PSpkgDao pSpkgDao;
	@Autowired
	private PSpkgOpenuserDao pSpkgOpenuserDao;
	@Autowired
	private PSpkgOpenbusifeeDao pSpkgOpenbusifeeDao;

	public List<TDeviceChangeReason> queryDeviceChangeReason() throws Exception{
		return tDeviceChangeReasonDao.findAll();
	}

	public Map<String,CUser> queryUserMap(String cust_id) throws Exception{
		return CollectionHelper.converToMapSingle(cUserDao.queryUserByCustId(cust_id), "user_id");
	}
	/**
	 * 创建用户
	 * @param user
	 * @return
	 * @throws Exception
	 */
	public CUser createUser(CUser user) throws Exception {
		//DTT,OTT用户没有机顶盒号、宽带用户没有MAC
		if (((user.getUser_type().equals(SystemConstants.USER_TYPE_DTT)
				|| user.getUser_type().equals(SystemConstants.USER_TYPE_OTT)) && StringHelper.isEmpty(user.getStb_id()))
				|| (user.getUser_type().equals(SystemConstants.USER_TYPE_BAND)
						&& StringHelper.isEmpty(user.getModem_mac())))
			user.setStatus(StatusConstants.INSTALL);
		else
			user.setStatus(StatusConstants.ACTIVE);
		user.setIs_rstop_fee(isStopFee());
		setBaseInfo(user);
		cUserDao.save(user);

		return user;
	}

	private void decideFreeUser(CUserDtv dtv) throws JDBCException {
		/*
		// 客户允许有2个免费副机
		List<CUser> users = queryUserByCustId(dtv.getCust_id());
		if (dtv.getTerminal_type().equals(
				SystemConstants.USER_TERMINAL_TYPE_FZD)) {
			int freenum = 0;
			for (CUser u : users) {
				if (u.getUser_type().equals(PROD_SERV_ID_DTV)
						&& "T".equals(u.getStr19()))
					freenum++;
			}
			if ( "T".equals(dtv.getStr19()) && freenum > 1)
				dtv.setStr19("F");

		} else {
			dtv.setStr19("F");
		}
		*/
	}

	public String queryLastStatus(String userId) throws Exception{
		CUserPropChange upc =  cUserPropChangeDao.queryLastStatus(userId, getOptr().getCounty_id());
		if(null == upc)
			return null;
		return upc.getOld_value();
	}

	/**
	 * 删除用户信息
	 * @param doneCode
	 * @param user
	 * @throws Exception
	 */
	public void removeUserWithHis( Integer doneCode ,CUser user) throws Exception{

		CUserHis userHis = new CUserHis();
		userHis.setDone_code(doneCode);
		BeanUtils.copyProperties(user, userHis);
		userHis.setStatus(StatusConstants.INVALID);
		userHis.setStatus_date(DateHelper.now());
//		if (user.getUser_type().equals(SystemConstants.USER_TYPE_DTV))
//			userHis.setNeed_check("T");
//		else
			userHis.setNeed_check("F");
		cUserHisDao.save(userHis);

//		if (user.getUser_type().equals(SystemConstants.USER_TYPE_ATV)){
//			CUserAtv atv = cUserAtvDao.findByKey(user.getUser_id());
//			CUserAtvHis atvHis = new CUserAtvHis();
//			BeanUtils.copyProperties(atv, atvHis);
//			atvHis.setDone_code(doneCode);
//			cUserAtvHisDao.save(atvHis);
//		} else if (user.getUser_type().equals(SystemConstants.USER_TYPE_DTV)){
//			CUserDtv dtv = cUserDtvDao.findByKey(user.getUser_id());
//			CUserDtvHis dtvHis = new CUserDtvHis();
//			BeanUtils.copyProperties(dtv, dtvHis);
//			dtvHis.setDone_code(doneCode);
//			cUserDtvHisDao.save(dtvHis);
//		} else if (user.getUser_type().equals(SystemConstants.USER_TYPE_BAND)){
//			CUserBroadband band = cUserBroadbandDao.findByKey(user.getUser_id());
//			CUserBroadbandHis bandHis = new CUserBroadbandHis();
//			BeanUtils.copyProperties(band, bandHis);
//			bandHis.setDone_code(doneCode);
//			cUserBroadbandHisDao.save(bandHis);
//		}

		removeUserWithoutHis(user.getUser_id());
	}

	public void removeUserWithoutHis(String userId) throws Exception{
		cUserDao.remove(userId);
		cUserAtvDao.remove(userId);
		cUserDtvDao.remove(userId);
		cUserBroadbandDao.remove(userId);
	}

	/**
	 * @param cardId
	 */
	public void updateUserCheckFlag(String cardId) throws Exception{
		this.cUserHisDao.updateCheckFlag(cardId);

	}

	/**
	 * 根据客户ID,获取符合条件用户的集合
	 * @param cust
	 */
	public List<CUser> queryUserByCustId(String custId) throws JDBCException {
		List<CUser> users= cUserDao.queryUserByCustId(custId);
		fillUserName(users);
		return users;
	}
	/**
	 * 查询正常和施工中的用户清单
	 * @param custId
	 * @return
	 */
	public List<CUser> queryCanSelectByCustId(String custId)throws JDBCException {
		List<CUser> users=cUserDao.queryCanSelectUserByCustId(custId);
		fillUserName(users);
		return users;
	}

	/**
	 * @param custId
	 * @return
	 */
	public List<CUserStb> queryUserStbByCustId(String custId) throws JDBCException, ServicesException {
		return cUserDao.queryUserStbByCustId(custId);
	}

	/**
	 * @param userId
	 * @return
	 */
	public CUserStb queryUserStbByUserId(String userId) throws JDBCException {
		return cUserDao.queryUserStbByUserId(userId);
	}

	public List<CUser> queryUserByCustIds(String[] custIds) throws Exception{
		return cUserDao.queryUserByCustIds(custIds);
	}

	public List<CUser> queryUserHisByCustId(String custId) throws JDBCException {
		List<CUser> users= new ArrayList<CUser>();
		users.addAll(cUserAtvDao.queryAtvHisByCustId(custId));
		users.addAll(cUserDtvDao.queryDtvHisByCustId(custId));
		users.addAll(cUserBroadbandDao.queryBandHisByCustId(custId));
		fillUserName(users);
		return users;
	}

	/**
	 * 根据客户ID,获取符合条件用户的集合
	 * @param cust
	 */
	public List<UserDto> queryUser(String custId) throws Exception {
		List<UserDto> result = new ArrayList<UserDto>();
		List<CUser> users = queryUserByCustId(custId);
		List<JUserStop> stopList = jUserStopDao.findAll();
		Map<String,List<JUserStop>> stopmap = CollectionHelper.converToMap(stopList, "user_id");
		for (CUser user :users){
			UserDto userdto = new UserDto();
			BeanUtils.copyProperties(user, userdto);
			List<JUserStop> stoplist = stopmap.get(user.getUser_id());
			if(stoplist!=null){
				userdto.setStop_date(stoplist.get(0).getStop_date());
			}
			if(userdto.getUser_type().equals(SystemConstants.USER_TYPE_BAND)){
				if(StringHelper.isNotEmpty(userdto.getModem_mac())){
					RModemModel modemModel = rModemModelDao.queryByModemMac(userdto.getModem_mac());
					if(modemModel != null){
						userdto.setDevice_model(modemModel.getDevice_model());
						userdto.setDevice_model_text(modemModel.getModel_name());
					}

					CCustDevice custDevice = cCustDeviceDao.queryCustDeviceByDeviceCode(userdto.getCust_id(), userdto.getModem_mac());
					if(custDevice != null){
						userdto.setBuy_model(custDevice.getBuy_mode());
						userdto.setBuy_model_text(custDevice.getBuy_mode_text());
					}
				}
			}else{
				if(StringHelper.isNotEmpty(userdto.getStb_id())){
					RStbModel stbModel = rStbModelDao.queryByStbId(userdto.getStb_id());
					if(stbModel != null){
						userdto.setDevice_model(stbModel.getDevice_model());
						userdto.setDevice_model_text(stbModel.getModel_name());
					}

					CCustDevice custDevice = cCustDeviceDao.queryCustDeviceByDeviceCode(userdto.getCust_id(), userdto.getStb_id());
					if(custDevice != null){
						userdto.setBuy_model(custDevice.getBuy_mode());
						userdto.setBuy_model_text(custDevice.getBuy_mode_text());
					}
				}
			}
			if(!user.getUser_type().equals(SystemConstants.USER_TYPE_OTT_MOBILE)){
				if(StringHelper.isEmpty(userdto.getDevice_model()) && StringHelper.isNotEmpty(user.getStr3())){
					userdto.setDevice_model(user.getStr3());
					if(user.getUser_type().equals(SystemConstants.USER_TYPE_BAND)){
						userdto.setDevice_model_text( MemoryDict.getDictName(DictKey.MODEM_MODEL, user.getStr3()) );
					}else{
						userdto.setDevice_model_text( MemoryDict.getDictName(DictKey.STB_MODEL, user.getStr3()) );
					}
				}
				if(StringHelper.isEmpty(userdto.getBuy_model()) && StringHelper.isNotEmpty(user.getStr10())){
					userdto.setBuy_model(user.getStr10());
					userdto.setBuy_model_text( MemoryDict.getDictName(DictKey.DEVICE_BUY_MODE, user.getStr10()) );
				}
			}

			result.add(userdto);
		}
		return result;
	}

	/**
	 * 根据客户ID,获取符合条件销户用户的集合
	 * @param cust
	 */
	public List<UserDto> queryUserHis(String custId) throws JDBCException {
		List<UserDto> result = new ArrayList<UserDto>();
		List<CUser> users = queryUserHisByCustId(custId);
		for (CUser user :users){
			UserDto userdto = new UserDto();
			BeanUtils.copyProperties(user, userdto);
			result.add(userdto);
		}
		return result;
	}

	public void saveCancelOpenInteractive(String userId,Integer doneCode) throws Exception {
		/*
		CUser user = cUserDao.findByKey(userId);
		CUserDtv dtv = cUserDtvDao.findByKey(userId);
		List<CUserPropChange> changeList = new ArrayList<CUserPropChange>();

		RDevice modem = rDeviceDao.findByDeviceCode(user.getModem_mac());

		if (StringHelper.isNotEmpty(user.getModem_mac())){
			CUserPropChange change = new CUserPropChange();
			change.setColumn_name("modem_mac");
			change.setOld_value(user.getModem_mac());
			change.setNew_value("");
			setBaseInfo(change);
			change.setUser_id(userId);
			change.setDone_code(doneCode);
			change.setChange_time(DateHelper.now());
			changeList.add(change);
		}
		if (StringHelper.isNotEmpty(user.getNet_type())){
			CUserPropChange change = new CUserPropChange();
			change.setColumn_name("net_type");
			change.setOld_value(user.getNet_type());
			change.setNew_value("");
			setBaseInfo(change);
			change.setUser_id(userId);
			change.setDone_code(doneCode);
			change.setChange_time(DateHelper.now());
			changeList.add(change);
		}
		//双向用户类型
		if (StringHelper.isNotEmpty(user.getStr11())){
			CUserPropChange change = new CUserPropChange();
			change.setColumn_name("str11");
			change.setOld_value(user.getStr11());
			change.setNew_value("");
			setBaseInfo(change);
			change.setUser_id(userId);
			change.setDone_code(doneCode);
			change.setChange_time(DateHelper.now());
			changeList.add(change);
		}
		if (StringHelper.isNotEmpty(dtv.getPassword())){
			CUserPropChange change = new CUserPropChange();
			change.setColumn_name("password");
			change.setOld_value(dtv.getPassword());
			change.setNew_value("");
			setBaseInfo(change);
			change.setUser_id(userId);
			change.setDone_code(doneCode);
			change.setChange_time(DateHelper.now());
			changeList.add(change);
		}
		if (dtv.getServ_type().equals(SystemConstants.DTV_SERV_TYPE_DOUBLE)){
			CUserPropChange change = new CUserPropChange();
			change.setColumn_name("serv_type");
			change.setOld_value(dtv.getServ_type());
			change.setNew_value(SystemConstants.DTV_SERV_TYPE_SINGLE);
			setBaseInfo(change);
			change.setUser_id(userId);
			change.setDone_code(doneCode);
			change.setChange_time(DateHelper.now());
			changeList.add(change);
		}

		user.setNet_type("");
		user.setStr11("");
		if(modem!= null && SystemConstants.BOOLEAN_FALSE.equals(modem.getIs_virtual())){
			//不是虚拟设备
			user.setModem_mac("");
		}
		dtv.setPassword("");
		dtv.setServ_type(SystemConstants.DTV_SERV_TYPE_SINGLE);

		cUserDao.update(user);
		cUserDtvDao.update(dtv);
		cUserPropChangeDao.save(changeList.toArray(new CUserPropChange[changeList.size()]));
		*/
	}

	/**
	 * 返回userdto
	 * @param userId
	 * @return
	 * @throws JDBCException
	 */
	public CUser queryUserById(String userId) throws JDBCException {
		return cUserDao.findByKey(userId);
	}

	/**
	 * 根据用户ID, 查询用户异动信息
	 * @param userId
	 */
	public List<CUserPropChange> queryUserPropChange(String userId,String userType) throws Exception{
		 List<CUserPropChange> propChangelist =  cUserPropChangeDao.queryByUserId(userId,userType, getOptr().getCounty_id());
		 for(CUserPropChange upc :propChangelist){
			 upc.setBusi_name( MemoryDict.getTransData( upc.getBusi_name() ) );
			 upc.setColumn_name_text( MemoryDict.getTransData(upc.getColumn_name_text()) );
			 if (StringHelper.isNotEmpty(upc.getParam_name())){
				upc.setOld_value_text(MemoryDict.getDictName( upc.getParam_name(), upc.getOld_value()));
				upc.setNew_value_text(MemoryDict.getDictName( upc.getParam_name(), upc.getNew_value()));
			 }else {
				upc.setOld_value_text( MemoryDict.getTransData( upc.getOld_value() ));
				upc.setNew_value_text( MemoryDict.getTransData( upc.getNew_value() ));
			 }
		 }
		 return propChangelist;
	}

	public Pager<CProdOrderFee> queryOrderFeeDetail(String orderSn, Integer start, Integer limit) throws Exception {
		return cProdOrderFeeDao.queryOrderFeeDetail(orderSn, start, limit);
	}

	/**
	 * @param userId
	 * @param doneCode
	 * @return
	 */
	public List<CUserPropChange> queryPropChangeByDoneCode(String userId,Integer doneCode) throws Exception{
		return cUserPropChangeDao.queryByDoneCode(userId, doneCode,getOptr().getCounty_id());
	}

	/**
	 * 修改用户设备信息
	 * @param userId
	 */
	public void updateDevice(Integer doneCode,CUser user) throws Exception {
		CUser oldUser = cUserDao.findByKey(user.getUser_id());
		String[] propNames = {"stb_id","card_id","modem_mac", "str10"};
		List<CUserPropChange> upcList = new ArrayList<CUserPropChange>();
		for (String propName:propNames){
			String oldValue = BeanHelper.getPropertyString(oldUser, propName);
			String newValue = BeanHelper.getPropertyString(user, propName);
			oldValue = (oldValue == null) ? "" : oldValue;
			newValue = (newValue == null) ? "" : newValue;
			if (!oldValue.equals(newValue)){
				CUserPropChange upc = new CUserPropChange();
				upc.setUser_id(user.getUser_id());
				upc.setDone_code(doneCode);
				upc.setColumn_name(propName);
				upc.setOld_value(BeanHelper.getPropertyString(oldUser, propName));
				upc.setNew_value(BeanHelper.getPropertyString(user, propName));
				setBaseInfo(upc);
				upcList.add(upc);
			}
		}
		//修改用户信息
		cUserDao.update(user);
		//记录异动
		cUserPropChangeDao.save(upcList.toArray(new CUserPropChange[upcList.size()]));
	}

	/**
	 * 设置用户名信息
	 * 模拟用户不需要设置
	 * 数字用户为终端类型
	 * 宽带用户为宽带帐号
	 * @param records
	 */
	public void fillUserName(List<CUser> records) {
		for( CUser user :records){
			user.setUser_name(getFillUserName(user));
		}
	}

	/**
	 * 根据设备号查询用户
	 * @param deviceType
	 * @param deviceCode
	 * @return
	 */
	public List<CUser> queryUserByDevice(String deviceType, String deviceCode)
			throws JDBCException, ComponentException {
		List<CUser> user = null;
		if (deviceType.equals(SystemConstants.DEVICE_TYPE_STB))
			user = cUserDao.queryUserByStbId(deviceCode);
		else if (deviceType.equals(SystemConstants.DEVICE_TYPE_CARD))
			user = cUserDao.queryUserByCardId(deviceCode);
		else if (deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM))
			user = cUserDao.queryUserByModemId(deviceCode);
		else
			throw new ComponentException("无效的设备类型" + deviceType);
		return user;
	}

	/**
	 * 更新用户设备信息
	 *
	 * @param userId
	 * @param deviceType
	 * @param deviceCode
	 * @throws JDBCException
	 * @throws ComponentException
	 */
	public void updateDevice(String userId, String deviceType, String deviceCode) throws JDBCException, ComponentException {
		if (deviceType.equals(SystemConstants.DEVICE_TYPE_STB))
			cUserDao.updateDevice(userId, "", null, null);
		else if (deviceType.equals(SystemConstants.DEVICE_TYPE_CARD))
			cUserDao.updateDevice(userId, null,"", null);
		else if (deviceType.equals(SystemConstants.DEVICE_TYPE_MODEM))
			cUserDao.updateDevice(userId, null, null,"");
		else
			throw new ComponentException("无效的设备类型" + deviceType);
	}

	/**
	 * @param userId
	 * @param doneCode
	 */
	public void removeUserPropChange(String userId, Integer doneCode) throws Exception{
		cUserPropChangeDao.removeByDoneCode( userId, doneCode,getOptr().getCounty_id());

	}

	/**
	 * 保存用户排斥的资源
	 * @param userId
	 * @param custId
	 * @param resIds
	 * @throws Exception
	 */
	public void saveRejectRes(String userId,String custId,String resIds) throws Exception {
		cRejectResDao.deleteByUserIdAndCustId(userId, custId);

		if(StringHelper.isNotEmpty(resIds)){
			String[] resIdsArr = resIds.split(",");
			List<CRejectRes> list = new ArrayList<CRejectRes>();
			for(String resId : resIdsArr){
				CRejectRes res = new CRejectRes();
				res.setUser_id(userId);
				res.setCust_id(custId);
				res.setRes_id(resId);
				list.add(res);
			}
			cRejectResDao.save(list.toArray(new CRejectRes[list.size()]));
		}
	}

	/**
	 * 获取用户id
	 */
	public String gUserId() throws Exception {
		return cUserDao.findSequence().toString();
	}

	/**
	 * 部门下的是所有操作员
	 * @param deptId
	 * @return
	 * @throws JDBCException
	 */
	public List<SOptr> getByDeptId(String deptId) throws JDBCException {
		return sOptrDao.getByDeptId(deptId);
	}

	public CUserBroadband queryBandByDeviceId(String deviceCode) throws JDBCException{
		return cUserBroadbandDao.queryBandByDeviceId(deviceCode);
	}

	public UserDto queryUserByDeviceId(String deviceId) throws JDBCException{
		List<CUser> users= new ArrayList<CUser>();
		CUser dtv = cUserDtvDao.queryDtvByDeviceId(deviceId);
		if (dtv!=null) users.add(dtv);
			CUser broadband = cUserBroadbandDao.queryBandByDeviceId(deviceId);
		if (broadband!=null) users.add(broadband);
		fillUserName(users);

		UserDto userdto = null;
		if (users.size()>0){
			userdto = new UserDto();
			BeanUtils.copyProperties(users.get(0), userdto);
		}
		return userdto;
 	}

	/**
	 * @param loginName
	 * @param countyId
	 * @return
	 */
	public CUser queryUserByLoginName(String loginName) throws Exception {
		return cUserDao.queryUserByLoginName(loginName);
	}

	/**
	 * @param userId
	 * @return
	 */
	public List<CPromotionDto> queryUserPromotion(String userId) throws Exception {
		return cPromotionDao.queryUserPromotion(userId,getOptr().getCounty_id());
	}

	public List<CPromotionDto> queryPromotionCanCancel(String userId, String prodId) throws Exception {
		List<CPromotionDto> list = new ArrayList<CPromotionDto>();
		List<CPromotionDto> result = new ArrayList<CPromotionDto>();

		/*
		list = cPromotionDao.queryPromotionCanCancel(userId,getOptr().getCounty_id());

		Date now = new Date();
		Map<String, List<CPromotionDto>> mapKeyByProdId = CollectionHelper.converToMap(list, "user_id");
		List<CPromotionDto> list2 = mapKeyByProdId.get(prodId);

		if(!CollectionHelper.isEmpty(list2)){
			CPromotionDto promotion = list2.get(0);
			if(promotion.getStatus().equals(StatusConstants.ACTIVE)){
				String promotionId = promotion.getPromotion_id();
				Map<String, List<CPromotionDto>> mapKeyByPromotion = CollectionHelper.converToMap(list, "promotion_id");
				List<CPromotionDto> list3 = mapKeyByPromotion.get(promotionId);

				for(CPromotionDto dto:list3){
					Date createDate = dto.getCreate_time();
					if(createDate.getYear() == now.getYear() && createDate.getMonth() == now.getMonth()){
						result.add(dto);
					}
				}
			}
		}
		*/
		String [] regs = new String [] {"sumPayFee(\"" + prodId + "\""
				,"ACCTITEM_"+prodId
				,"acctitem("+prodId
				,"(acctitem_id=\""+prodId+"\""
				,"payMonthsOfToday(\""+prodId+"\""};

		//查找本身是触发促销的条件的,
//		if(CollectionHelper.isEmpty(result)){
			list = cPromotionDao.queryPromotionCanCancelAsCondition(userId,prodId,getOptr().getCounty_id());
			Map<String, List<CPromotionDto>> mapKeyByRuleStr = CollectionHelper.converToMap(list, "promotion_sn");// rule_id的假名
			//数目不多,一个嵌套循环问题不大
			for(String ruleId:mapKeyByRuleStr.keySet()){
				List<CPromotionDto> list3 = mapKeyByRuleStr.get(ruleId);
				String ruleStr = null;
				if(CollectionHelper.isNotEmpty(list3)){
					ruleStr = list3.get(0).getIs_necessary();
					for(String reg:regs){
						if(ruleStr.indexOf(reg)>=0){
							result.clear();
							result.addAll(list3);
						}
					}
				}
			}
//		}

		return result;
	}

	/**
	 * @param countyId
	 * @return
	 */
	public List<ChangedUser> queryChangedUserInfo(String beginDate, String endDate,String countyId) throws JDBCException {
		List<ChangedUser> userList = new ArrayList<ChangedUser>();
		if(StringHelper.isNotEmpty(beginDate)){
			if(StringHelper.isEmpty(endDate)){
				endDate = DateHelper.formatNow();
			}
//			List<ChangedUser> addedUsers = cUserDao.queryAddedUsers(beginDate,endDate,countyId);
			List<ChangedUser> modifiedUsers = cUserDao.queryModifiedUsers(beginDate,endDate,countyId);
//			List<ChangedUser> deletedUsers = cUserDao.queryDeletedUsers(beginDate,endDate,countyId);
//			userList.addAll(addedUsers);
			userList.addAll(modifiedUsers);
//			userList.addAll(deletedUsers);
		}/*else{
			userList = cUserDao.queryChangedUserInfo(countyId);
		}*/
		return userList;
	}

	/**
	 * @param deviceId
	 * @param returnTvRecordCount
	 * @param returnVodRecordCount
	 * @return
	 */
	public List<UserBillDto> queryUserBill(String deviceId,
			Integer returnTvRecordCount, Integer returnVodRecordCount) throws Exception {
		return cUserDao.queryUserBill(deviceId,returnTvRecordCount,returnVodRecordCount,getOptr().getCounty_id());
	}

	public List<CUser> queryUserByCustNo(String custNo) throws Exception{
		CCust cust = cCustDao.queryCustFullInfo("CUST_NO", custNo, "1=1");
		List<CUser> userList = queryUserByCustId(cust.getCust_id());
		fillUserName(userList);
		return userList;
	}

	public List<CUser> queryUserByUserIds(List<String> userIds) throws Exception{
		return cUserDao.queryUserByUserIds(userIds.toArray(new String[userIds.size()]));
	}

	public List<CUser> queryAllUserByUserIds(String[] userIds) throws JDBCException {
		List<CUser> users = cUserDao.queryUserByUserIds(userIds);
		fillUserName(users);
		return users;
	}

	public List<CUser> queryAllUserHisByUserIds(String[] userIds) throws JDBCException {
		List<CUser> users = cUserHisDao.queryAllUserHisByUserIds(userIds);
		fillUserName(users);
		return users;
	}

	public void updateUserStatus(List<CUser> userList,
			List<CUserPropChange> upcList, List<CDoneCode> dcList,
			List<CDoneCodeDetail> dcdList) throws Exception {
		cUserDao.update(userList.toArray(new CUser[userList.size()]));
		cUserPropChangeDao.save(upcList.toArray(new CUserPropChange[upcList.size()]));
		cDoneCodeDao.save(dcList.toArray(new CDoneCode[dcList.size()]));
		cDoneCodeDetailDao.save(dcdList.toArray(new CDoneCodeDetail[dcdList.size()]));
	}

	/**
	 * @param doneCode
	 * @param busiCode
	 * @param oldUser
	 * @param newCustId
	 * @param newUserId
	 * @param forceAsZZD 强制将所有的设置为主终端.
	 * @throws Exception
	 */
	public void updateUser(Integer doneCode, String busiCode, CUser oldUser,
			String newCustId, String newUserId,boolean forceAsZZD) throws Exception {

//		CUser newUser = new CUser();
//		BeanUtils.copyProperties(oldUser, newUser);
//		newUser.setUser_id(newUserId);
//		newUser.setCust_id(newCustId);
//		newUser.setUser_name(forceAsZZD?"主终端":oldUser.getUser_name());
//		cUserDao.save(newUser);
//
//		List<CUserPropChange> changeList = new ArrayList<CUserPropChange>();
//		CUserPropChange change = new CUserPropChange();
//
//		String oldUserId = oldUser.getUser_id();
//		String oldCustId = oldUser.getCust_id();
//		String userType = oldUser.getUser_type();
//		if(userType.equals(SystemConstants.USER_TYPE_DTV)){
//			CUserDtv oldUserDtv = cUserDtvDao.findByKey(oldUserId);
//			CUserDtv newUserDtv = new CUserDtv();
//			BeanUtils.copyProperties(oldUserDtv, newUserDtv);
//			newUserDtv.setUser_id(newUserId);
//
//			if(!oldUserDtv.getTerminal_type().equals(SystemConstants.USER_TERMINAL_TYPE_ZZD) && forceAsZZD ){//
//				change = new CUserPropChange();
//				change.setDone_code(doneCode);
//				change.setUser_id(newUserId);
//				change.setColumn_name("terminal_type");
//				change.setOld_value(oldUserDtv.getTerminal_type());
//				change.setNew_value(SystemConstants.USER_TERMINAL_TYPE_ZZD);
//				change.setBusi_code(busiCode);
//				setBaseInfo(change);
//				changeList.add(change);
//			}
//			if(forceAsZZD){
//				newUserDtv.setTerminal_type(SystemConstants.USER_TERMINAL_TYPE_ZZD);
//			}
//			cUserDtvDao.save(newUserDtv);
//		} else if(userType.equals(SystemConstants.USER_TYPE_ATV)){
//			CUserAtv oldUserAtv = cUserAtvDao.findByKey(oldUserId);
//			CUserAtv newUserAtv = new CUserAtv();
//			BeanUtils.copyProperties(oldUserAtv, newUserAtv);
//			newUserAtv.setUser_id(newUserId);
//			newUserAtv.setTerminal_type(SystemConstants.USER_TERMINAL_TYPE_ZZD);
//			cUserAtvDao.save(newUserAtv);
//		} else if(userType.equals(SystemConstants.USER_TYPE_BAND)){
//			CUserBroadband oldUserBand = cUserBroadbandDao.findByKey(oldUserId);
//			CUserBroadband newUserBand = new CUserBroadband();
//			BeanUtils.copyProperties(oldUserBand, newUserBand);
//			newUserBand.setUser_id(newUserId);
//			cUserBroadbandDao.save(newUserBand);
//		}
//
//		change.setDone_code(doneCode);
//		change.setUser_id(newUserId);
//		change.setColumn_name("user_id");
//		change.setOld_value(oldUserId);
//		change.setNew_value(newUserId);
//		change.setBusi_code(busiCode);
//		setBaseInfo(change);
//		changeList.add(change);
//
//		change = new CUserPropChange();
//		change.setDone_code(doneCode);
//		change.setUser_id(newUserId);
//		change.setColumn_name("cust_id");
//		change.setOld_value(oldCustId);
//		change.setNew_value(newCustId);
//		change.setBusi_code(busiCode);
//		setBaseInfo(change);
//		changeList.add(change);
//
//		cUserPropChangeDao.save(changeList.toArray(new CUserPropChange[changeList.size()]));
//
//		jUserStopDao.updateByUserId(oldUserId, newUserId);
//
//		cUserDao.updateProdInclude(oldUserId, oldCustId, newUserId, newCustId);
//
//		this.removeUserWithHis(doneCode, oldUser);
	}

	public void updateUser(CUser user) throws Exception {
		cUserDao.update(user);
	}

	/**
	 * 加一点说明,以前的要求就是所有的都修改为主终端.
	 * @param doneCode
	 * @param busiCode
	 * @param oldUser
	 * @param newCustId
	 * @param newUserId
	 * @throws Exception
	 */
	public void updateUser(Integer doneCode, String busiCode, CUser oldUser,
			String newCustId, String newUserId) throws Exception {
		updateUser(doneCode, busiCode, oldUser, newCustId, newUserId,true);
	}

	public void renewUser(Integer doneCode, String userId) throws Exception {
		CUser user = cUserDao.findByKey(userId);
		CUserPropChange upc = cUserPropChangeDao.queryLastStatus(userId, getOptr().getCounty_id());
		//恢复用户状态,取最近状态异动:如果最近状态异动为报停,则新状态为报停,否则均为正常
		String newValue = (upc != null && upc.getOld_value().equals(StatusConstants.REQSTOP)) ? upc.getOld_value() : StatusConstants.ACTIVE;

		List<CUserPropChange> upcList = new ArrayList<CUserPropChange>();
		upc = new CUserPropChange();
		upc.setUser_id(userId);
		upc.setDone_code(doneCode);
		upc.setColumn_name("status");
		upc.setOld_value(user.getStatus());
		upc.setNew_value(newValue);
		setBaseInfo(upc);
		upcList.add(upc);

		Date date = new Date();
		upc = new CUserPropChange();
		upc.setUser_id(userId);
		upc.setDone_code(doneCode);
		upc.setColumn_name("status_date");
		upc.setOld_value(DateHelper.dateToStr(user.getStatus_date()));
		upc.setNew_value(DateHelper.dateToStr(date));
		setBaseInfo(upc);
		upcList.add(upc);

		editUser(doneCode, userId, upcList);
	}

	/**
	 * @param userId
	 * @return
	 */
	public String queryUserLastStatus(String userId) throws Exception {
		return cUserPropChangeDao.queryUserLastStatus(userId,getOptr().getCounty_id());
	}

	/**
	 * 查询本地区可用的套餐
	 * @return
	 */
	public List<PPromFee> querySelectablePromPay() throws Exception {
		return pPromFeeDao.querySelectablePromPay(getOptr().getCounty_id());
	}

	/**
	 * 查询套餐缴费的基本信息.
	 * @param promfeeId
	 * @return
	 * @throws Exception
	 */
	public PPromFee queryPromFeeSimpleInfo(String promfeeId) throws Exception{
		return pPromFeeDao.findByKey(promfeeId);
	}

	/**
	 * 查找上月和当月的有效套餐缴费
	 * @param userId
	 * @param prodId
	 * @return
	 * @throws JDBCException
	 */
	public List<PPromFee> queryIsPromFee(String userId,String prodId) throws JDBCException {
		return pPromFeeDao.queryIsPromFee(userId,prodId);
	}

	/**
	 * 查看该产品属进行的套餐缴费列
	 * @param userId
	 * @param prodSn
	 * @return
	 * @throws Exception
	 */
	public List<CPromProdRefund> querySelectPromFee(String userId,String prodSn) throws Exception {
		return cPromProdRefundDao.querySelectPromFee(userId,prodSn,getOptr().getCounty_id());
	}

	/**
	 * 根据套餐编号查询套餐
	 * @param promFeeId
	 * @return
	 * @throws Exception
	 */
	public List<PPromFeeUser> queryPromFeeUser(String promFeeId) throws Exception{
		return pPromFeeUserDao.queryPromFeeUser(promFeeId);
	}

	/**
	 * 根据多个套餐编号查询套餐规则用户
	 * @param promFeeIds
	 * @return
	 * @throws Exception
	 */
	public List<PPromFeeUser> queryPromFeeUser(String[] promFeeIds) throws Exception{
		return pPromFeeUserDao.queryPromFeeUser(promFeeIds);
	}

	/**
	 * 查询多个套餐信息
	 * @param promFeeIds
	 * @param custId
	 * @param countyId
	 * @return
	 * @throws Exception
	 */
	public List<CPromFee> queryPromFee(String[] promFeeIds,String custId,String countyId) throws Exception{
		return cPromFeeDao.queryPromFee(promFeeIds,custId,countyId);
	}

	/**
	 * 根据套餐编号查套餐信息
	 * @param promFeeId
	 * @return
	 * @throws Exception
	 */
	public List<PromFeeProdDto> queryPromFeeProds(String promFeeId) throws Exception{
		return pPromFeeProdDao.queryPromFeeProds(promFeeId);
	}

	/**
	 * 根据多个产品编号查询动态资源组信息
	 * @param ProdIds
	 * @return
	 * @throws Exception
	 */
	public List<ResGroupDto> queryGroupByProdIds(String[] ProdIds)throws Exception {
		return pPromFeeProdDao.queryGroupByProdIds(ProdIds);
	}

	/**
	 * 根据多个资源组编号查询资源信息
	 * @param resGroupId
	 * @return
	 * @throws Exception
	 */
	public List<PRes> queryResByGroupId(String[] resGroupId)throws Exception {
		return pPromFeeProdDao.queryResByGroupId(resGroupId);
	}
	/**
	 * 调用存储过程,批量销用户
	 * @param userIds
	 */
	public void batchLogoffUser(Integer doneCode,String remark,List<String> userIds,String isReclaimDevice,String deviceStatus) throws Exception {
		cUserDao.batchLogoffUser(doneCode,remark,userIds,isReclaimDevice,deviceStatus,getOptr());
	}

	public Pager<UserDto> queryUserInfoToCallCenter(Pager<Map<String ,Object>> p) throws Exception{
		Pager<UserDto> pager = cUserDao.queryUserInfoToCallCenter(p,getOptr().getCounty_id());
		List<UserDto> userList = pager.getRecords();
		for( UserDto user :userList){
			if("DTV".equals(user.getUser_type())){
				if (StringHelper.isEmpty(user.getUser_name()))
					user.setUser_name(MemoryDict.getDictName(DictKey.TERMINAL_TYPE,user.getTerminal_type()));
			}else if("BAND".equals(user.getUser_type())){
				user.setUser_name(user.getLogin_name());
			}else if("ATV".equals(user.getUser_type())){
				if (StringHelper.isEmpty(user.getUser_name()))
					user.setUser_name("模拟终端");
			}
		}
		return pager;
	}

	public void addUserCfg(CUser user) throws Exception{
		CCust cust = cCustDao.findByKey(user.getCust_id());
		String year = String.valueOf(DateHelper.getCurrYear());
		List<TCustColonyCfg> cfgList = tCustColonyCfgDao.queryCfg(year,true,true, cust.getCust_colony(),cust.getCust_class(), cust.getCounty_id());
		boolean key = false;
		TCustColonyCfg cfg = new TCustColonyCfg();
		for(TCustColonyCfg dto:cfgList){
			int num = tCustColonyCfgDao.queryUserNum(year, dto.getCust_colony(), dto.getCust_class(), cust.getCounty_id());
			if(dto.getUser_num() == 0 || dto.getUser_num()+1> num){
				continue;
			}else{
				key = true;
				cfg = dto;
				break;
			}
		}
		if(key){
			throw new ComponentException(year+"年份的["+cfg.getCust_colony_text()+"]["+cfg.getCust_class_text()+"]的用户开户限额:["+cfg.getUser_num()+"]已满!");
		}
	}

	public String queryMinUserId(String custId) throws Exception {
		return cUserDao.queryMinUserId(custId);
	}

	public void changeCust(String userId, String toCustId,Integer doneCode ,String busiCode) throws ServicesException{
		this.cUserDao.callChangeCust(userId, toCustId, doneCode, busiCode,this.getOptr());
	}

	public void setCUserAtvDao(CUserAtvDao userAtvDao) {
		cUserAtvDao = userAtvDao;
	}

	public void setCUserDtvDao(CUserDtvDao userDtvDao) {
		cUserDtvDao = userDtvDao;
	}

	/**
	 * @param userBroadbandDao the cUserBroadbandDao to set
	 */
	public void setCUserBroadbandDao(CUserBroadbandDao userBroadbandDao) {
		cUserBroadbandDao = userBroadbandDao;
	}

	public void setCUserHisDao(CUserHisDao userHisDao) {
		cUserHisDao = userHisDao;
	}

	public void setSOptrDao(SOptrDao optrDao) {
		sOptrDao = optrDao;
	}

	public void setCRejectResDao(CRejectResDao rejectResDao) {
		cRejectResDao = rejectResDao;
	}

	public void setJUserStopDao(JUserStopDao userStopDao){
		jUserStopDao = userStopDao;
	}

	public void setCPromotionDao(CPromotionDao promotionDao) {
		cPromotionDao = promotionDao;
	}

	public void setCCustDao(CCustDao custDao) {
		cCustDao = custDao;
	}

	public void setPPromFeeDao(PPromFeeDao pPromFeeDao) {
		this.pPromFeeDao = pPromFeeDao;
	}

	public void setPPromFeeUserDao(PPromFeeUserDao pPromFeeUserDao) {
		this.pPromFeeUserDao = pPromFeeUserDao;
	}
	public void setPPromFeeProdDao(PPromFeeProdDao pPromFeeProdDao) {
		this.pPromFeeProdDao = pPromFeeProdDao;
	}

	public void setRDeviceDao(RDeviceDao deviceDao) {
		rDeviceDao = deviceDao;
	}
	public void setCPromFeeDao(CPromFeeDao cPromFeeDao) {
		this.cPromFeeDao = cPromFeeDao;
	}

	public void setTCustColonyCfgDao(TCustColonyCfgDao custColonyCfgDao) {
		tCustColonyCfgDao = custColonyCfgDao;
	}

	public void setCPromProdRefundDao(CPromProdRefundDao promProdRefundDao) {
		cPromProdRefundDao = promProdRefundDao;
	}

	/**
	 * 查找用户数量
	 * @param custId
	 * @return
	 */
	public Integer queryUserCount(String custId) throws Exception {
		return cUserDao.queryUserCount(custId);
	}

	public TDeviceChangeReason queryChangeReasonByType(String reasonType) throws Exception {
		return tDeviceChangeReasonDao.queryChangeReasonByType(reasonType);
	}

	/**
	 * @param optr_id
	 * @return
	 */
	public SOptr queryOptrById(String optr_id) throws Exception{
		return sOptrDao.findByKey(optr_id);
	}

	public List<PSpkgOpenuser> querySpkgUser(String spkgSn) throws Exception {
		return pSpkgOpenuserDao.querySpkgUser(spkgSn);
	}

	public List<PSpkgOpenbusifee> querySpkgOpenFee(String spkgSn) throws Exception {
		return pSpkgOpenbusifeeDao.querySpkgOpenFee(spkgSn);
	}

	public void updateOpenUserDoneCode(String spkgSn, Integer doneCode) throws Exception{
		pSpkgOpenuserDao.updateOpenUserDoneCode(spkgSn, doneCode);
	}

	/**
	 * ".用户开户和批量用户开户修改
		开宽带用户时,自动生成的宽带账号。密码默认 c_cust.password
		       生成规则 第一个宽带  cust_no+01+@+域名
		                     第二个宽带  cust_no+02+@+域名
		域名提取方法跟  cust_no的序列号一致。
		OTT、OTT_MOBILE用户 账号生成规则  : 第一个OTT cust_no+61
		                                     第二个OTT cust_no+62"

	 */
	public int queryMaxNumByLoginName(String custId, String custNo, String userType) throws Exception {
		List<String> list = cUserDao.queryLoginNameByUserType(custId, userType);
		List<Integer> loginNameList = new ArrayList<Integer>();
		boolean flag = userType.equals(SystemConstants.USER_TYPE_BAND);
		for(String loginName : list){
			if(flag && loginName.indexOf("@") > 0){
				loginName = loginName.substring(0, loginName.indexOf("@"));
			}
			if(loginName.length() > custNo.length()){
				loginName = loginName.substring(custNo.length());
				String regex=".*[a-zA-Z]+.*";
				Matcher m=Pattern.compile(regex).matcher(loginName);
				if(!m.matches())
					loginNameList.add( Integer.parseInt(loginName) );
			}
		}
		if(loginNameList.size() == 0) return 0;
		return Collections.max(loginNameList);

	}

	public boolean validAccount(String name) throws Exception{
		return cUserDao.validAccount(name);
	}

	public void setExpressionUtil(ExpressionUtil expressionUtil) {
		this.expressionUtil = expressionUtil;
	}

	/**
	 * 变更用户名,需要 设备号 和新的用户名.
	 * @param user
	 * @param custId
	 * @return
	 * @throws Exception
	 */
	public int updateUserNameByDeviceCode(CUser user, String custId) throws Exception {
		return cUserDao.updateUserNameByDeviceCode(user,custId);
	}

	public List<CUser> queryAllUserAndHisByUserIds(String[] userIds) throws Exception {
		List<CUser> list = new ArrayList<CUser>();
		List<CUser> userList = cUserDao.queryUserByUserIds(userIds);
		if(userList.size()>0){
			list.addAll(userList);
		}
		if(list.size()!=userIds.length){
			List<String> userHis = new ArrayList<String>();
			List<String> userIdList = CollectionHelper.converValueToList(list, "user_id");
			for(int i = 0 ;i<userIds.length;i++){
				if(!userIdList.contains(userIds[i])){
					userHis.add(userIds[i]);
				}
			}
			if(userHis.size()>0){
				List<CUser> userHisList = cUserHisDao.queryAllUserHisByUserIds(userIds);
				if(userHisList.size()>0){
					list.addAll(userHisList);
				}
			}
		}
		return list;
	}

	public List<CUser> queryUserByTaskId(String taskId) throws Exception {
		return cUserDao.queryTaskUser(taskId);
	}

	public int countLikeLoginName(String loginNamePrefix) throws Exception {
		return cUserDao.countLikeLoginName(loginNamePrefix);
	}

}

redpajama_set_name: RedPajamaGithub


Low sodium olives contain 40 mg sodium compared to 120 mg of sodium in regular olives. 30 calories per serving. 40 mg of sodium (2% DV). www.mariocamachofoods.com. Home to Mario olives in the sun-drenched groves of the Mediterranean, the Camacho family has grown and prepared olives for over a hundred years. Enjoy Mario's unmistakable, delicious, bold flavor. Just pop the top and discover a little taste of olive heaven! Join the conversation! Facebook/MarioOlives. Product of Spain.
The average size of olives contained in this can are illustrated on the front panel. Olives are cholesterol free food. Kosher.
Imported Greek. Premium quality. Since 1959. Natural! Product of Greece.
Imported Greek. Premium quality since 1959. Natural! For more product information or recipe suggestions, please write to: PO Box 5065 Garden Grove, CA 92846. www.giulianopepers.com. Product of Greece.
Stuffed with minced pimiento. Product of Spain.


Our doctors have received top honors in their field and have been featured in Indianapolis Monthly Top Docs consistently for several years. We've also were named in the Faces of Indy magazine for 2016.
Our physicians are regularly honored as some of Central Indiana's best doctors in their field.


Fly Aruba Airlines (Aruba) is a new airline in the Caribbean. The upstart has leased its first aircraft, Airbus A320-212 PJ-FAA (msn 407, ex N407BV), from AerCap Holdings.
This entry was posted in Fly Aruba Airlines and tagged Fly Aruba Airlines on October 15, 2011 by Bruce Drum.


text:
RT @Listen4aChange: Just reading about #BraveGirlsWant, so awesome! cc:@feministfatale @GirlEmpowerment @drjenshewmaker @SheHeroes @DrRobyn…
RT @peggyorenstein: Exactly! MT @feministfatale: Kids' Toys: More Gendered Than Ever http://t.co/AL8oI2mokM So why? WHY???
RT @ChelseaJaya: Calling all local high school teen girls interested in practicing yoga while engaging literature & art this summer... http…
Students Petition For Victoria's Secret To Amend 'Perfect Body' Campaign | Kris Design News on Breaking: Victoria's Secret Models Love Their Bodies
Michael C. Henary on Breaking: Victoria's Secret Models Love Their Bodies
Michael C. Henary on Would Hollywood ever make "He's Out of My League?"
Kevin Monterroso on Just What Every Toddler Needs to go With Those Heels: Skinny Jeans!
adrianna heads on What's lurking in your compact? Annie Leonard will tell you.
Archives	 Archives Select Month July 2013 December 2012 November 2012 June 2012 April 2012 March 2012 January 2012 December 2011 November 2011 October 2011 September 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008
Add this to your list of unacceptable body parts: your armpits
Filed under: Body Image — Tags: Anne Hathaway, beauty norm, Body Image, Britney Spears, Candies, editing, insecurity, Jezebel, Kohls, Lady Gaga, mass media, Megan Fox, optional, photoshop — Melanie @ 8:20 pm
Rachel O:
The media, in a series of editing moves, has now deemed them unacceptable and unfit for public consumption.
I've wanted to write this piece for awhile and, in light of Britney Spears releasing unretouched photos of herself for the Candie's campaign, decided it was time. Unfortunately I wasn't very surprised by the things "enhanced" on Spears' body – the usual suspects: cellulite, tattoos, blemishes, bruises, slimming of hips, thighs, waist, etc. But lately there's been a new body part deemed unacceptable by the photo editors at magazines, record labels, etc. – armpits. That's right ladies, the area under your arm, even when clean shaven has been deemed far too hideous for general public consumption.
I first noticed the trend, while reading Jezebel, as is usually the case with these kinds of things. They posted the cover of British GQ where Anne Hathaway seems to be missing something. Her armpit isn't just hairless and smoothed by some moisturizing deodorant – it's not there at all. Just completely gone, just torso side and…arm, with nothing in between. Since then, I've come to notice it in other places as well:
Photo stills of Lady Gaga's music video Telephone:
A Kim Kardashian exercise line campaign:
A photoshoot for Harper's Bazaar with Megan Fox:
and finally a Sports Illustrated spread:
Apparently that pesky underarm area hinders exercising, dancing, posing, and uh, swimming.
Now it's just another thing that's been added to a list of things for the resident photoshopper at any magazine, PR firm, etc. to check off their list, but I think the issue is much bigger than that. Men don't have to deal with the same "image enhance everything" that is so prevalent when it comes to actresses and pop stars. For example, when Leonardo DiCaprio appeared on the cover of Esquire Magazine, all his stubble, lines, and wrinkles were left intact. For women, this new underarm thing is another flaw that someone in a board room somewhere has decided is not worthy of publication – it must be fixed. It is another issue for women to worry about – another thing for girls to look at and wonder "why don't I look like that?" and "what can I do to fix it?" These images eventually become the norm, what we think women really look like, or are supposed to.
Anyone who thinks it's not a big deal? We're living in a world where Jessica Simpson going without make-up is a big deal. And Glamour publishing a picture of a woman with a belly roll is considered a revolution. So, yeah it's a problem. We're in a publishing age, where someone in charge somewhere, looked at a Jennifer Lopez magazine cover, a Ralph Lauren ad, and an image in Maxim Mexico and said "perfect, send that to the printer!"
We need a lot less this:
And a lot more this:
© Feminist Fatale. All Rights Reserved. Powered by WordPress
Web Design by Sunfish Design

redpajama_set_name: RedPajamaCommonCrawl


Kid's parties should be fun…but they can be pretty stressful to organise. Aeroplane Jelly come to the rescue with 10 party planning tips to ensure everyone has a good time – even you!
1. Choose the party theme, decorations and games ahead of time to avoid the last minute rush.
2. Try to keep the guest list to a minimum. Your child may want to invite their entire class to their special day, but it may be challenging to watch and entertain 30 children, 8- 12 guests are just enough to make it enjoyable without too much chaos.
3. Parties for children don't have to be an all-day affair, by keeping the celebration to two to three hours starting in the afternoon allows enough time to set up before guests start to arrive.
4. If needed recruit more parents to help out on the day.
5. Make a couple of extra party bags for siblings of guests who stay unexpectedly.
6. Make sure your party doesn't clash with any other important events, such as Mother's Day, Father's Day etc.
7. Remember to have on hand candles and a lighter or matches for the cake.
8. Label prizes for each game so that you know what goes with what.
9. Keep party bags hidden until the end.
10. Hide away anything breakable or of value before the party.
What's your best kid's party planning tip?


text:
Boosteroid Supports Millions of Online Gamers
Boosteroid, Intel, and ASUS team up to build a powerful online gaming platform, letting anyone play resource-demanding games.
Boosteroid focuses on providing an easy-to-use, affordable online gaming platform.
Inspired by the success of hyperscale cloud service providers, Boosteroid wanted to build a highly scalable platform. Intel and ASUS helped Boosteroid select hardware including 2nd Gen Intel® Xeon® Scalable processors and Intel® SSDs for the data center.
Download the one-page summary
BUILT IN - ARTICLE INTRO SECOND COMPONENT
Boosteroid is an online gaming company that is seeking to grow its presence globally to meet the demand of the booming online gaming market. Today the most important business challenge for companies like Boosteroid is scaling. Boosteroid launched its online gaming service in 2019, and is already experiencing a 5X growth in customer base. The company focuses on providing an easy-to-use, affordable online gaming platform that lets anyone play any game, no matter which device they are using.
Inspired by the success of hyperscale cloud service providers, Boosteroid wanted to build a highly scalable platform. The company looked to Intel and ASUS to help develop and enhance its global solution. The ability to scale with confidence while being able to deliver the low-latency performance and operational efficiencies required by its business was key.
To address scalability and performance issues, Boosteroid is collaborating with Intel and ASUS. Intel and ASUS helped Boosteroid choose the appropriate server hardware, such as processors and solid state drives (SSDs). A team of Intel experts also helped Boosteroid use Intel® VTune™ Profiler. This enabled Boosteroid to optimize the performance of the hardware and the performance of its specially developed video capturing module providing a great cloud gaming experience.
Boosteroid's hardware platform, combined with the optimized module provides a nearly instant response to gameplay and doesn't require gamers to download any software. Customers can play the most demanding gamers, even without a top-end PC or console. The highly scalable platform will enable Boosteroid to keep up with customer growth and make new game developments available to its customers.
Scaling to Keep Pace with Market Growth
The global online gaming market is expected to grow at a compound annual growth rate (CAGR) of 10 percent through 2025, reaching a value of USD 79 billion.1 To keep pace with that rate of growth and to take advantage of new opportunities and new customers, online gaming companies must choose an infrastructure that provides high performance and that can scale quickly and affordably. When Boosteroid began forming its business model, it was looking for server hardware that met these needs.
With many servers to choose from, ASUS, Intel, and Boosteroid spent a year working to pick the right one for the business. By talking with engineers from ASUS and Intel, Boosteroid was able to crystallize its requirements and choose a server that provided high performance and power efficiency at a good price point. Selecting partners with a quality gaming reputation and strong technical support were also important considerations for Boosteroid. These choices were critical in setting the business up for fast and extensive scaling as it expands its services across Europe.
Affordable Online Gaming Server Powered by Intel and ASUS
Boosteroid's cloud gaming platform (see Figure 1) is unique in the industry because all the games are hosted on Boosteroid's high-performance, low-latency servers; users receive an interactive video stream of their gameplay over the Internet. The user's device is irrelevant to the gaming experience. What's more, customers don't have to download special browsers or software tools—all updates (both software and hardware) are carried out by the company itself. This means gamers can run high-end games from low-performance, outdated or ultraportable devices, and play wherever there's an Internet connection. But providing efficient web-based access to high-end video games requires powerful hardware that can respond instantly to gaming activity.
Figure 1. Boosteroid uses high-performance technology from ASUS and Intel to implement its high-performance, scalable online gaming platform.
Boosteroid worked closely with both Intel and ASUS to choose the right server model that provided the necessary online gaming performance. Because ASUS is known worldwide as a gaming brand and has broad adoption in the gaming community, Boosteroid was confident that ASUS could provide a server that met its needs: the ASUS* ESC4000-G4S. This server is equipped with Intel® Xeon® Gold 6248 processors and Intel® SSD D3-S4510 Series with a total of 3.84 TB of storage. The server also has 192 GB of memory, a 10 Gbps network connection, and a gaming graphics processing unit (GPU). The company originally considered using a previous-generation Intel® Xeon® Scalable processor but went with 2nd generation because of the impressive performance gains. For example, a 2nd generation Intel® Xeon® Gold processor can provide up to a 1.33X percent performance gain compared to the previous generation.2
Boosteroid uses Intel® processors based on their high performance. A sufficient margin of performance of these processors allows us to withstand an ever-growing load. And these processors are not a bottleneck in the performance of the host as a whole."— Ivan Ostretsov, chief technical officer, Boosteroid
Optimized Software Complements High-Performance Hardware
Boosteroid used Intel® VTune™ Profiler to customize its module for video capturing. The custom code enables full highdefinition (60 frames per second/1080 pixel) gaming even when the internet connection is only 14 Mbps. By reducing the internet connection quality requirements, Boosteroid makes its gaming platform available to a larger number of users. The company also uses other advanced software tools to reduce latency and jitter and provide dynamic bitrate adjustment. The latter capability means Boosteroid's network can adjust the content quality or size on-the-fly in response to varying internet connection quality.
Boosteroid, Intel, and ASUS Collaborate to Improve Platform Performance
Knowledge sharing and collaboration between Boosteroid, Intel and ASUS helped Boosteroid find the right solution for its needs. As mentioned earlier, ASUS engineers advised Boosteroid about what sort of hardware it needed to accomplish its scalability and performance goals. Intel engineers in collaboration with Boosteroid optimized the performance of the online gaming platform. Through the use of Intel® VTune™ Profiler, Boosteroid gained insight into various aspects of hardware and software performance and was able to tune and improve it. For example, based on information gathered from Intel® VTune™ Profiler, Intel engineers suggested increasing the amount of memory to improve CPU utilization. Intel® VTune™ Profiler also helped optimize performance.
Boosteroid Poised for Significant Growth
The close collaboration between Boosteroid, Intel and ASUS has set the online gaming company up for success in a fast-growing market. Boosteroid's technical solution is ready to provide cloud gaming services worldwide, because it was tested on ASUS distributed global technology hubs. The company now plans to scale rapidly, adding several hundred servers to its data centers in Europe and elsewhere. With high-performance hardware at an affordable price point, Boosteroid can attract new customers. It will soon offer a free-to-play model in addition to its affordable gaming subscriptions. Other future plans include offering loyalty programs and gaming championships, as well as virtual reality gaming. Outside of the gaming industry, the company plans to explore providing virtual desktop infrastructure (VDI) services to businesses, taking advantage of underutilized compute resources outside of peak gaming periods. The three companies are looking forward to a long-standing successful relationship that will help Boosteroid bring online gaming to the masses.
Intel engineers always help us solve issues related to the optimization of the host virtual machine settings, and share their valuable experience and knowledge. Their support helps us solve the most complicated technical challenges." —Maksym Maksymov, head of DevOps, Boosteroid
Spotlight on Boosteroid
Boosteroid is an international online gaming company with offices in Ukraine, Romania, Serbia, the United Arab Emirates, and other countries. The co-founders conceived the business in 2017, and launched initially in Eastern Europe in 2019. The company's customer base has been expanding quickly; the company expects to launch services all around Europe in September 2020. The company's game catalog includes more than 200 games, and they have more than one million user registrations with approximately 100,000 active players. Currently Boosteroid employs more than 80 people, with expectations to grow the team over time.
Spotlight on ASUS
Established in 1989 and headquartered in Taipei, ASUS is a multinational company known for creating some of the world's best motherboards and high-quality personal computers, monitors, graphics cards, routers and other technology solutions. ASUS has long-lasting relationships with other leading industry players, including Intel. As the company expanded various product lines, it developed a unique sub-brand called Republic of Gamers (ROG), a division dedicated to creating outstanding gaming gear with high performance and quality. Inspired by the In Search of Incredible brand spirit, ASUS won more than 11 awards every day in 2019 and ranks as one of Forbes' World's Best Regarded Companies and Fortune's World's Most Admired Companies. Today, ASUS employs more than 15,000 people.
Technical Components of Solution
ASUS* ESC4000-G4S. Delivers incredible 2U server performance with best-in-class memory capacity and bandwidth.
Intel® Xeon® Gold 6248 processor. Provides the necessary high performance for a desktop-as-a-service offering.
Intel® SSD D3-S4510 Series. Large-capacity drives have excellent power consumption and reliability.
Intel® VTune™ Profiler. Platform performance is enhanced through optimizations for Intel hardware.
Download the PDF ›
Explore Related Products and Solutions
Intel® Xeon® Scalable Processors
Drive actionable insight, count on hardware-based security, and deploy dynamic service delivery with Intel® Xeon® Scalable processors.
Intel® SSDs
Intel® SSDs for the data center are optimized for performance, reliability, and endurance.
Customer Stories and Case Studies
Explore the latest customer stories, case studies, and news releases highlighting data-centric innovations.
Intel Customer Spotlight
Intel Newsroom
Data Center Workloads
Learn how Intel® technologies can help provide the scalability needed for high-demand workloads and applications.
Data Center Insights
Get the latest information about Intel data center performance, flexibility, and scalability.
Cloud Service Provider Resources
Network Transformation & Communications Technology
Product and Performance Information
1https://www.globenewswire.com/news-release/2020/02/14/1985063/0/en/Online-Gaming-Market-to-grow-at-10-CAGR-to-hit-79-billion-by-2025-Global-Insights-on-Share-Size-Growth-Drivers-Value-Chain-Analysis-Investments-Plans-Key-Stakeholders-and-Business-.html.
2Geomean of est SPECrate®2017_int_base, est SPECrate®2017_fp_base, STREAM-Triad, Intel® Distribution for LINPACK Benchmark*, server-side Java*. Gold 5218 vs Gold 5118. Baseline configuration, testing by Intel on 11 December 2018: 1-node, 2x Intel® Xeon® Gold 5118 processor on Wolf Pass with 384 GB (12 X 32GB 2666 (2400)) total memory, ucode 0x200004D on RHEL7.6, 3.10.0-957.el7. x86_64, IC18u2, AVX2, HT on all (off Stream, LINPACK), Turbo on, result: est int throughput=119, est fp throughput=134, STREAM-Triad=148.6, LINPACK=822, server-side Java=67434. New configuration, testing by Intel on 7 December 2018: 1-node, 2x Intel® Xeon® Gold 5218 processor on Wolf Pass with 384 GB (12 X 32GB 2933 (2666)) total memory, ucode 0x4000013 on RHEL7.6, 3.10.0-957.el7.x86_64, IC18u2, AVX2, HT on all (off Stream, LINPACK), Turbo on, result: est int throughput=162, est fp throughput=172, STREAM-Triad=185, LINPACK=1088, server-side java=98333.


...but i showed (a little) restraint and bought 2.
...and a bunny ring. it was just so weird and quirky, that i wanted to get it too.
i didn't spend more than $14, so i don't feel too guilty. but who am i kidding? i'm pretty sure if they still have the mint green and white (and silver) when i go back, i'll end up buying those too.
in other news, i did a bow swap with the awesomely talented, crochet-mastermind miss belen! she's the one i got my pretty crocheted flower headbands from, so be sure to check out her shop.
i almost didn't want to open her package at first, because it was just so pretty. she loves exchanging mail, so ask her about it if you're interested! :) she puts a lot of care into her packages.
here's the blue crocheted hair bow she sent me! isn't it beautiful? the color was much prettier in person and i can't wait to wear it! you can get a similar one from her shop here, and she has other colors available as well.
if any of you guys make bows, e-mail me if you'd like to do a bow swap! i did one with maria of lulu letty too. i like the idea of sending handmade bows to each other...it's fun seeing the different styles and fabrics others use. and they're bows. you know how obsessed i am about bows.
anyway, i'll be gone for a couple of days! i'm going with the best friend to visit her brother at Cal Poly SLO, so i'll be back on saturday (eep! i still need to finish packing for my europe trip >_< ). take care!


text:
Христиан Адольф Овербек (; 21 августа 1755, Любек — 9 марта 1821, Любек) — германский поэт, переводчик, дипломат, просветитель. Некоторое время был мэром Любека.

Биография
Родился в семье юриста. Образование получил в Катаринеуме. В 1773—1776 годах обучался на юридическом факультете Гёттингенского университета, одновременно посещал также лекции по математике, философии, истории, естествознанию. 16 октября 1776 года вступил в масонскую ложу. В 1788 году получил степень доктора права, в 1779 году получил назначение обергерихтспрокуратором в Любеке, в 1792 году — вторым синдиком в капитуле Любека. В начале 1800 года стал сенатором, в 1804 году был послом Любека в Санкт-Петербурге, в 1808—1809, 1810 и 1811 годах — послом в Париже. В период французской оккупации города благодаря своим дипломатическим связям был его казначеем. В 1814 году стал мэром Любека, получив на этом посту известность заботами о развитии образования.

Известен как автор песен, из которых многие стали народными. Сборники их: «Fritzchens Lieder» (1781); «Lieder und Gesänge» (1781), «Lehrgedichte und Lieder» (1786), «Vermischte Gedichte» (1794), «Anakreon und Sappho übersetzt» (1800). Выполнил также переводы ряда греческих и латинских од, французских драм и английских романов путешествий.

Примечания

Источники

Ссылки
 Статья  в NDB

Поэты Германии
Иллюминаты
Бургомистры Любека
Масоны Германии
Просветители Германии

redpajama_set_name: RedPajamaWikipedia


text:
Home Technology Tech Plus
Nium, Cebuana Lhuillier launch Quikz in Singapore to expand remittance capabilities for Filipino users
in Tech Plus
Quikz, Cebuana Lhuillier's flagship mobile remittance app in the US, is now available in Singapore, made possible through a partnership between Cebuana Lhuillier and Nium, a global financial technology platform based in Singapore. Quikz will be powered by Nium's trusted Remittance-as-a-service (RaaS) solution and Cebuana Lhuillier's huge network of pay-out locations in the Philippines, allowing thousands of Filipinos based in Singapore to enjoy improved convenience, security, and real-time global transactions.
For Jean Henri Lhuillier, Cebuana Lhuillier President and CEO, the expansion of Quikz in Singapore heralded the company's commitment to financial inclusion for every Filipino, regardless of their location. "Cebuana Lhuillier's core of Financial Inclusion always pushes us to provide better micro-financial services to Filipinos, wherever they may be. This new partnership with Nium strengthens our remittance services to ensure that Filipinos around the world have access to fast, reliable, and safe transactions," he shared.
Yogesh Sangle, Executive Vice President and Global Head of Consumer and SME Business at Nium, said, "With millions of Filipinos living and working overseas for their loved ones back home, the convenience and transparency in remittance processes play such an essential role – especially with continued social distancing measures and lockdowns in place. We are extremely excited that Cebuana Lhuillier, a home-grown Filipino brand, shares a common goal with Nium, and we are proud to co-establish and power this new platform through our enhanced remittance capabilities."
Cebuana Lhuillier will leverage on Nium's global network and digital capabilities, additionally, the transactions also run on RippleNet's blockchain technology, enabling users to send funds back home at a low financial exchange rate and lower fees. Recipients in the Philippines will be able to receive the money at more than 2,500 branches located across the Philippines. Visit quikzsg.com now!
Nium currently operates its Send, Spend and Receive business in over 100 countries, 65 in real-time. For more information about Nium's enterprise offerings, please visit http://www.nium.com.
The Philippines is one of the world's leading remittance markets. As of 2019, there is an estimated 12 million Filipinos who are working overseas, accounting for one-tenth of the country's population, with Singapore having one of the third highest share of overall remittances. In that same year, the Philippines saw US$33.5 billion sent back home from those working abroad. The country has made significant efforts to meet the growing demand for a remittance service that is faster, more convenient and efficient in today's cashless society.
Tags: Cebuana LhuillierNiumQuikzremittanceYogesh Sangle
byMST Tech
Globe, the leader in Mobile, has registered more than 11 million active prepaid SIMs around a month after the law...
Globe holds assisted SIM registration in 30 Puregold branches across PH
To reach more customers across the country, Globe, the leader in Mobile, is opening assisted registration in 30 branches of...
InLife Sheroes #InAko campaign wins 3 Canopus Awards in 2022 Vega Digital Awards
Insular Life's (InLife) digital campaign that challenges the Filipino women to be more financially responsible won three Canopus (Platinum) Awards...
#PursueYourGIGIL: GIGIL Agency creatives by day, musicians by night launch album
Mary, the 9 Ideas held its album launch last January 25 at the 70s Bistro Bar in Anonas, Quezon City....
Shopee, DLSU team up to educate future tech talents on e-commerce industry
The Philippines e-commerce industry continues to grow rapidly and is poised to reach a Gross Market Value of $22B by...
Enchanted Kingdom installs WiFi, powered by Globe
Enchanted Kingdom adds a dash of magic to the already enchanting experience of their guests by partnering with Globe Business...


What Should Know When Hiring Wedding Cars?
The number of wedding car services have increased over the past couple years mainly because a growing number of the population want to hire luxury wedding cars for their event. Luxury and expensive cars like the Jaguar, Bentley, BMW 7 series, Mercedes S Class and Rolls Royce are available at most rental companies across Australia. Many companies also offer convertible American wedding cars like Mustangs and Cadillacs at premium prices. However, what many people are not fully aware of is the company's rental policies. They are not sure how much these wedding cars will cost and on what basis they will be billed. So, there is a chance that they could end up paying more than they first estimated.
Many car rental companies offer couples numerous value added services like trained chauffeurs, decorated vehicles, red carpets, chilled water, sparkling wine etc. however, many of these services are not free and so most people will assume that they get these services as part of the package they are being offered. This is until they are presented with the bill. The best way to avoid this unexpected surprise is to always ask how much you're going to be charged for this service and ask the company to add it to the quote they are presenting you with.
Many wedding cars services have different policies regarding their rental vehicles. At times the same rental service will have different policies for different vehicles. For instance, some companies will offer the 1954 Rolls Royce on an hourly basis as opposed to their Mercedes which is offered on a daily basis. You should also ask the company, at what point will the time start? This is an important question because some companies will start billing you from the beginning of the day regardless of if you have received your vehicle.
When should you book your vehicle?
There are some times of the year which are considered peak times for weddings. It is during these peak times when finding and getting a vehicle can be near impossible. So, as a rule of thumb if you plan on getting married between January to April you should book 6 months in advance. If you are getting married in between May to August you can book a month or so in advance. Also December is a peak time too so plan accordingly. That being said booking your vehicle in advance means that you have more options in terms of model, color and style of the vehicle to choose from. In some instances you also get a better price.
What happens in the event that the vehicle you hire breaks down? With vintage cars this does happen and so you need to ask the wedding car company about their policy. Some companies will provide you with a replacement car while others may not or probably do so for an extra price. Ideally, you should be provided with a replacement ASAP with no extra charge. Also ask what vehicle will your car be replaced with? You should clarify this with the company prior to hiring a vehicle.
Always hire wedding cars from a licensed car operator. This will ensure that you are dealing with professionals and the car you are travelling in, in addition to the company is insured. You can also be assured of great quality services and that your rights are always protected as per Australian law.
Preparing for a wedding is stressful enough and hiring a wedding car can certainly add to the stress. However, thanks to the internet many wedding car companies have websites from where you can search and select the vehicle you think is best for your wedding. This saves you from having to visit numerous wedding car services and inspecting every car prior to booking it. The points above will also help take the stress off short listing car rental services because now you know exactly what you are looking for.
Manu is a freelance writer and seo analyst of www.dblimos.com.au/. I enjoy writing informative blog posts for wedding related Websites. My unique way of writing has helped me to provide great Articles.
« What Are Some Things To Think About When Purchasing Your New Car On The Fourth?


text:
Jack of all trades, master of one
Brian Corrigan (ARN) 09 August, 2007 16:24
Baden Wright - Managing Director Sonnet
There aren't many IT jobs Sonnet's Baden Wright hasn't done but, as he tells ARN, he has a very clear vision of the future.
Working for Brambles in a division called Enviroguard doing bioremediation. People spill stuff in the course of business and bioremediation is growing bugs in tanks of water to go and eat things like oil. They were looking for casual workers when I was leaving school and it paid really well. I did it on and off while I was at university.
How did you get into IT?
I had started a degree in building so I was messing around with auto CAD systems. I wanted to get a PC for home so I could do drawings on it and all of a sudden I found I was kind of good at configuring machines. Then I found myself doing it for everybody else in class at university and eventually swapped into IT. A double major in information systems computing gave me a fantastic grounding. My first IT job was working behind the counter for Carlingford Computers while I was at university. I was building systems and selling them, which developed into configuring networks for small businesses and it went from there.
How did you progress to where you are today?
I had spent about 18 months working in a bank doing systems management while I was at university and went straight into integration when I came out to chase the money. I worked for Grandmaster Computers in Artarmon, which became Australian Business Technologies (ABT).
They started moving into outsourcing and brought different people into the business that gave me another period of accelerated learning. I became operations manager before making a move into Telstra.
That was when Telstra was making its first moves into outsourcing and it won a gig to do the ABN Amro relocation from the NAB building on George Street [Sydney CBD] to the Renzo Piano building on Phillip Street. I signed on as the third project director and was the one who got it working. Then I moved over and did the Telstra outsourcing at Westpac, which included getting a new network up based on Cisco DPT technology.
I left Telstra for six months to do some performance management for Imperial Tobacco before moving back to do the outsourcing for Qantas. I worked on the bid team and did the transitioning of services. Once that was finished I went to Heather Tech and then AGM IT to re-hone my sales skills working with Steven Szigoszki and Frank Mulcahy.
After a stint there I decided to start my own company and had been watching this compliance stuff coming up. I started a company called Cyphertech with my business partner, Jonathon McQuade. We went into the certification market and did the Telstra Information Storage Solution (TISS). Then we did certification for about nine government departments and by this point we were very well rounded IT guys. Peter Stebbings was a mentor of mine and he would always talk to me about visible, repeatable processes.
Then Telstra went for the next round of Qantas outsourcing and I was the transition transformation executive. I became the general manager of desktop outsourcing for Kaz Group before deciding to go back to consulting. I had been looking for some time to get my own managed services business going. John [McQuade] and I decided it was the only way to get people to stick within the framework. That meant configuring devices, securing them, supplying service desk systems and everything. I joined Sonnet last September and took over the business in January.
What do you like most about your job today?
Being able to see through all the things I want to do. I can get the outcome that I want and that's really rewarding. Moving forward I want to be able to do a lot more of it. I want customers that don't feel threatened and are happy to get onboard with the systems.
What is the biggest achievement of your career to date?
The most testing time was acquiring Sonnet. Before that I would have said the ABN Amro relocation was a huge tick, and doing the Qantas outsourcing involved coordinating a massive amount of manpower, but taking over a business and running it end-to-end is totally different. When you make a decision to invest in something it is a serious decision.
What do you dislike most about the industry?
The way everything is over thought because it leads to ridiculously long sales cycles. People say they can't get good sales people anywhere but it is hardly surprising when you look at the lead time needed to do a deal and the level of pre-sales involvement and customer procrastination. That's where I see the advantages of managed services and hosted platforms because it removes that. We can provision service desk instantly once we have the user names and turn on a network management console in a week.
What is the main focus for Sonnet this year?
We want to pick up more solid managed services customers of the right size through channel partners. We would like another Jetstar or Alcatel but don't want to be out there doing the sales work. We are looking for somebody with that depth of relationship to join the dots with us and go into a proper business partnership.
What do you do away from work?
Skiing in the winter and free-diving in summer. I can hold my breath for a couple of minutes and get down to about 35m, which is kind of a long way down. I used to go spear-fishing with my dad as a kid. You start off shooting little fish and end up chasing after jewfish, big kingfish, tuna and all sorts of things in the Coral Sea. Free-diving is a very good form of relaxation because you need to lower your heart rate and get into the right mental space or you can't hold your breath for very long. It's a form of meditation. You can't be down there thinking about your cash flow. It's escapism and a few fish on the BBQ is always a good thing.
Have you had any near misses?
Yes. I started using a shark shield about four years ago, which is a device that transmits an electronic frequency to upset their receptors so they don't bite you. I'd had a small whaler shark latch onto one of my flippers and give me a bit of a shake. That was a clear enough message.
What did you want to be when you were a younger?
A builder, like my dad, because I loved the concept of getting an outcome. You start with a hole in the ground and end up with a great house.
What is your biggest ambition?
Driving this business to success, which I'm pretty blinkered about, and being happy.
All the tools you need to become the go-to technology partner for Cloud and HCI
More from Dell Technologies


Inspirational Lps Halloween Coloring Pages is free HD wallpaper. This wallpaper was upload at February 02, 2019 upload by tintuc247 in Coloring.
Description: Inspirational Lps Halloween Coloring Pages from the above 736x952 resolutions which is part of the Coloring. Download this image for free in HD resolution the choice "download button" below. If you do not find the exact resolution you are looking for, then go for a native or higher resolution.
Images Lps Coloring Pages Cat Coloring Best New Happy Halloween Coloring noblest for you from lps halloween coloring pages , lps halloween scares, lps halloween special the clown, lps halloween music, source: getcolors.co.
Images Lps Coloring Pages Cat Coloring Best New Happy Halloween Coloring most popular just for you from lps halloween coloring pages , source: getcolors.co.
Portrait 48 Unique Coloring to Print Out the best just for you from lps halloween coloring pages , source: brainstormchi.com.
Illustration Lps Coloring Pages Cat Coloring Best New Happy Halloween Coloring most popular for you from lps halloween coloring pages , lps halloween, source: getcolors.co.
Images 20 Best Littlest Pet Shop Coloring Pages images most popular specifically for you from lps halloween coloring pages , lps halloween lps pink diamond, lps halloween films, lps halloween costumes, source: pinterest.com.
Photo 50 Best JULIAS COLORING PAGES images the best just for you from lps halloween coloring pages , source: pinterest.com.
Picture 9 Best littlest pet shop coloring images the latest specifically for you from lps halloween coloring pages , source: pinterest.com.
Picture 29 Best lps poster images superior specifically for you from lps halloween coloring pages , source: pinterest.com.
Drawing 12 Best pet shop coloring pages images selected for you from lps halloween coloring pages , source: pinterest.com.
Images Super Mario Coloring Page Beautiful Mario Coloring Line most popular specifically for you from lps halloween coloring pages , lps halloween truth or dare, lps halloween films, lps halloween special the clown, source: pinterest.com.
Figure 20 Collections Haunted House Coloring Pages – Kido Coloring most popular specifically for you from lps halloween coloring pages , source: kidocoloring.com.
Figure hello kitty coloring pages halloween HeLLo KiTTiE special specifically for you from lps halloween coloring pages , lps halloween bloody mary, lps rosella halloween special, lps halloween costumes diy, source: pinterest.com.
Portrait 12 Best pet shop coloring pages images the latest specifically for you from lps halloween coloring pages , lps halloween special hide and seek, videos de lps de halloween, lps halloween costumes, source: pinterest.com.
Illustration 160 Best coloring pages images noblest just for you from lps halloween coloring pages , source: pinterest.com.
Illustration Bildergebnis für bibi und tina ausmalbilder zum drucken kostenlos most popular just for you from lps halloween coloring pages , lps halloween costumes, lps halloween 2017, lps halloween en espa ol, source: pinterest.com.
So, if you want to receive the great pictures related to (Inspirational lps halloween coloring pages), press save button to save these photos for your pc. There're ready for obtain, if you like and wish to obtain it, just click save badge on the page, and it will be directly down loaded to your laptop computer.
Lastly if you need to receive new and latest graphic related to (Luxury lps halloween coloring pages), please follow us on google plus or book mark this website, we try our best to provide daily up-date with fresh and new graphics.
We do hope you like keeping here. For many up-dates and latest news about (Lovely lps halloween coloring pages) images, please kindly follow us on twitter, path, Instagram and google plus, or you mark this page on bookmark section, We try to present you up grade periodically with fresh and new images, enjoy your browsing, and find the best for you.
Thanks for visiting our site, articleabove (Lovely lps halloween coloring pages) published by at . Nowadays we're excited to declare we have found a very interesting contentto be pointed out, that is (Awesome lps halloween coloring pages) Many people searching for details about (Unique lps halloween coloring pages) and definitely one of these is you, is not it?
Download Inspirational Lps Halloween Coloring Pages with original resolution Click Here!
15 Photos of "Inspirational Lps Halloween Coloring Pages"
Related Posts of "Inspirational Lps Halloween Coloring Pages"


A well-known robber with links to organised crime on Saturday blasted his way out of jail with explosives and took five staff hostage in northern France, officials said.
Police and helicopters were trying to track the man, who was armed, after his brazen escape from the prison in the town of Sequedin.
Local administrative officials said the prisoner used explosives to blast through an airlock security door before making his way out of the facility with five staff hostages.
A source close to the staff said the blast had caused significant damage to the interior of the prison.
The prisoner, identified by state prosecutors as Redoine Faid, quickly released four of the hostages and fled in a car with one of them. The car was later abandoned on a highway south of Lille and set on fire.
The prisoner also freed his final hostage and then got into a second vehicle which is currently been tracked by police, local officials said.
"It happened very quickly, it was clearly very well organised, we are still busy putting the facts together," a local administrative official said.


text:
/**
*============================================================================
*  The Ohio State University Research Foundation, The University of Chicago -
*  Argonne National Laboratory, Emory University, SemanticBits LLC,
*  and Ekagra Software Technologies Ltd.
*
*  Distributed under the OSI-approved BSD 3-Clause License.
*  See http://ncip.github.com/cagrid-portal/LICENSE.txt for details.
*============================================================================
**/
package gov.nih.nci.cagrid.portal.dao.catalog;

import gov.nih.nci.cagrid.portal.dao.AbstractDao;
import gov.nih.nci.cagrid.portal.domain.catalog.FavoriteOfRole;

/**
 * User: kherm
 *
 * @author kherm manav.kher@semanticbits.com
 */
public class FavoriteOfRoleDao extends AbstractDao<FavoriteOfRole> {

    public FavoriteOfRoleDao() {
    }

    /* (non-Javadoc)
    * @see gov.nih.nci.cagrid.portal.dao.AbstractDao#domainClass()
    */
    @Override
    public Class domainClass() {
        return FavoriteOfRole.class;
    }
}