ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

应用策略模式重构并扩展祖传if...else...

2022-01-27 14:02:29  阅读:174  来源: 互联网

标签:... smsSendFormPo 重构 batch else user smsSend xxxxx String


重构前:

public String saveMessage(SmsSendFormPo smsSendFormPo) {
		List<String> userIdList = DrinStringUtils.str2List(smsSendFormPo.getUserIds(), ",");
		String otherReceiverPhone = smsSendFormPo.getOtherReceiverPhone();
		List<String> myContactIds = DrinStringUtils.str2List(smsSendFormPo.getMyContactIds(), ",");
		StringBuilder failureMsg = new StringBuilder();
		int successNum = STATIC_ZERO_INT;
		int failureNum = STATIC_ZERO_INT;
		if (isEmptyList(userIdList) && StringUtils.isBlank(otherReceiverPhone) && isEmptyList(myContactIds)) {
			failureMsg.append("xxxxxx");
			return failureMsg.toString();
		}
		Integer batch = null;
		if(STATIC_ONE.equals(smsSendFormPo.getUpMessageFlag())){
			 batch = dao.getMaxMsgBatch();
		if (null == batch || batch == 999) {
			// xxxxx
			batch = 0;
		} else {
			// xxxxx
			batch = batch + 1;
		}
		}else{
			 batch = dao.getOtherBatch();
		if (null == batch) {
			batch = 1000;
		} else {
			batch = batch + 1;
		}
		}
		//xxxxx
		if (!isEmptyList(userIdList)) {
			Map<String,User> userMap = UserUtils.getUserMap(userIdList,"id,user_name,mobile,is_receive_msg");
			for (String userId : userIdList) {
				User user = userMap.get(userId);
				if (isNull(user.getIsReceiveMsg()) || StaticValue.STATIC_ZERO_INT==user.getIsReceiveMsg()) {
					//xxxxx
					continue;
				}
				String mobile = user.getMobile();
				String userName = user.getUserName();
				if (StringUtils.isBlank(mobile)) {
					failureMsg.append("</br>" + userName + ":用户手机号为空,短信发送失败!");
					failureNum++;
					continue;
				}
				/*if(isContainSensitiveWords(smsSendFormPo.getContent())){
					failureMsg.append("</br>" + userName + ":xxxxx");
					failureNum++;
					continue;
				}*/
				SmsSend smsSend = smsSendFormPo.toSmsSend();
				smsSend.setPhone(mobile);
				smsSend.setBatch(batch);
				smsSend.setUserId(userId);
				smsSend.setCompanyId(UserUtils.getLoginAreaId());
				dao.insertSelective(smsSend);
				successNum++;
			}
		}

		//xxxxx
		if (StringUtils.isNotBlank(otherReceiverPhone)) {
			List<String> tempList = DrinStringUtils.str2List(otherReceiverPhone, ",");
			ArrayList<String> otherReceiverPhoneList = new ArrayList<>(new HashSet<>(tempList));//xx
			//String dateNumber = DateUtils.getDate("yyyyMMddHHmm");
			for (String phone : otherReceiverPhoneList) {
				SmsSend smsSend = smsSendFormPo.toSmsSend();
				smsSend.setPhone(phone);
				
				//xxxxx
				WholeUserQuery userQuery = new WholeUserQuery();
				userQuery.setMobile(phone);
				List<WholeUser> users = userDao.findByQuery(userQuery);
				if(CollectionUtils.isNotEmpty(users)) {
				    smsSend.setUserId(users.get(STATIC_ZERO_INT).getId());
				}
				
//				smsSend.setUserId(UserUtils.getLoginUserId());
				smsSend.setCompanyId(UserUtils.getLoginAreaId());
				smsSend.setBatch(batch);
				/*if(isContainSensitiveWords(smsSendFormPo.getContent())){
					failureMsg.append("</br>" xxxxx");
					failureNum++;
					continue;
				}*/
				dao.insertSelective(smsSend);
				successNum++;
			}
		}

		//xxxxx
		if (!isEmptyList(myContactIds)) {
			Map<String, ZyUserContact> zyUserContactMap = zyUserContactDao.getMapByIds(myContactIds,null);
			for (String zyContactId : myContactIds) {
				ZyUserContact zyUserContact = zyUserContactMap.get(zyContactId);
				if (zyUserContact == null || isNull(zyUserContact.getContactPhone())) {
					//xxxxx
					continue;
				}
				String mobile = zyUserContact.getContactPhone();
				String userName = zyUserContact.getContactName();
				if (StringUtils.isBlank(mobile)) {
					failureMsg.append("</br>" + userName + "xxxxx");
					failureNum++;
					continue;
				}
				/*if(isContainSensitiveWords(smsSendFormPo.getContent())){
					failureMsg.append("</br>" + userName + "xxxxx");
					failureNum++;
					continue;
				}*/
				SmsSend smsSend = smsSendFormPo.toSmsSend();
				smsSend.setPhone(mobile);
				smsSend.setUserId(userName);
				smsSend.setCompanyId(UserUtils.getLoginAreaId());
				smsSend.setBatch(batch);
				/*if(isContainSensitiveWords(smsSendFormPo.getContent())){
					failureMsg.append("</br>" +xxxxx");
					failureNum++;
					continue;
				}*/
				dao.insertSelective(smsSend);
				successNum++;
			}
		}
		failureMsg.append("&" + successNum + "&" + failureNum);
		return failureMsg.toString();
	}

改造后:

	@Autowired(required = false)
	List<AbstractMessageCreator> creators;

	public String saveMessage(SmsSendFormPo smsSendFormPo) {
		if (null != creators&& creators.size() > 0) {
			return "xxxxx";
		}
		StringBuilder saveResult = new StringBuilder();
		int successNum = 0;
		int failureNum = 0;
		boolean hasSupport = false;
		for (AbstractMessageCreator creator: creators) {
			SaveMessageResult saveMessage = creator.saveMessages(smsSendFormPo);
			successNum += saveMessage.getSuccessNum();
			failureNum += saveMessage.getFailureNum();
			saveMessage.appendMessages(saveResult);		
		}
		hasSupport = successNum+failureNum>0;
		saveResult.append("&" + successNum + "&" + failureNum);
		return hasSupport ? saveResult.toString() : "xxxxx";
	}
public abstract class AbstractMessageCreator {
	
	@Autowired
	protected SmsSendDao dao;

	public abstract boolean support(SmsSendFormPo smsSendFormPo);

	public abstract void saveMessage(SmsSendFormPo smsSendFormPo,Integer batch,SaveMessageResult saveMessageResult);
	
	public SaveMessageResult saveMessages(SmsSendFormPo smsSendFormPo) {
		SaveMessageResult saveMessageResult = new SaveMessageResult();
		if(support(smsSendFormPo)) {
			Integer batch = matcherBatch(smsSendFormPo);
			   saveMessage(smsSendFormPo,batch,saveMessageResult);
		}
		return saveMessageResult;
	}

	private Integer matcherBatch(SmsSendFormPo smsSendFormPo) {
		Integer batch = null;
		if (STATIC_ONE.equals(smsSendFormPo.getUpMessageFlag())) {
			batch = getMaxBatch();
		} else {
			batch = getOtherBatch();
		}
		return batch;
	}
	
	private Integer getMaxBatch() {
		Integer batch = dao.getMaxMsgBatch();
		if (null == batch || batch == 999) {
			// xxxxx
			batch = 0;
		} else {
			// xxxxx
			batch = batch + 1;
		}
		return batch;
	}
	
	private Integer getOtherBatch() {
		Integer batch = dao.getOtherBatch();
		if (null == batch) {
			batch = 1000;
		} else {
			batch = batch + 1;
		}

		return batch;
	}
}
@Order(1)
public class UserMessageCreator extends AbstractMessageCreator {

	@Override
	public boolean support(SmsSendFormPo smsSendFormPo) {
		List<String> receiveUserIds = getUserIds(smsSendFormPo);
		return null!=receiveUserIds&&receiveUserIds.size()>0;
	}

	
	@Override
	public void saveMessage(SmsSendFormPo smsSendFormPo,Integer batch,SaveMessageResult result) {
		List<String> receiveUserIds = getUserIds(smsSendFormPo);
		Map<String, User> userMap = UserUtils.getUserMap(receiveUserIds, "id,user_name,mobile,is_receive_msg");
		for (String userId : receiveUserIds) {
			User user = userMap.get(userId);
			if (isNotReceiveMsg(user)) {
				continue;
			}
			String mobile = user.getMobile();
			String userName = user.getUserName();
			if (StringUtils.isBlank(mobile)) {
				result.failure();
				result.putMessage(userName + "xxxxx");
				continue;
			}
			SmsSend smsSend = smsSendFormPo.toSmsSend();
			smsSend.setPhone(mobile);
			smsSend.setBatch(batch);
			smsSend.setUserId(userId);
			smsSend.setCompanyId(UserUtils.getLoginAreaId());
			dao.insertSelective(smsSend);
			result.success();
		}
	}

	private boolean isNotReceiveMsg(User user) {
		return isNull(user.getIsReceiveMsg()) || StaticValue.STATIC_ZERO_INT == user.getIsReceiveMsg();
	}
	
	private List<String> getUserIds(SmsSendFormPo smsSendFormPo) {
		return str2List(smsSendFormPo.getUserIds());
	}
}
@Order(2)
public class MobileMessageCreator extends AbstractMessageCreator {
	
	@Autowired
	private WholeUserDao userDao;

	@Override
	public boolean support(SmsSendFormPo smsSendFormPo) {
		List<String> mobiles = getMobiles(smsSendFormPo);
		return null!=mobiles&&mobiles.size()>0;
	}


	@Override
	public void saveMessage(SmsSendFormPo smsSendFormPo, Integer batch, SaveMessageResult result) {
		List<String> mobiles = getMobiles(smsSendFormPo);
		for (String phone : mobiles) {
			SmsSend smsSend = smsSendFormPo.toSmsSend();
			smsSend.setPhone(phone);
			// xxxxx
			smsSend.setUserId(try2findUserId(phone));
			smsSend.setCompanyId(UserUtils.getLoginAreaId());
			smsSend.setBatch(batch);
			dao.insertSelective(smsSend);
			result.success();
		}
	}


	private String try2findUserId(String phone) {
		WholeUserQuery userQuery = new WholeUserQuery();
		userQuery.setMobile(phone);
		userQuery.setSqlFields("id,user_name");
		WholeUser user = userDao.findOne(userQuery);
		return null!=user?user.getId():null;
	}
	
	private List<String> getMobiles(SmsSendFormPo smsSendFormPo) {
		return DrinStringUtils.str2List(smsSendFormPo.getOtherReceiverPhone());
	}

}
@Order(3)
public class ContactMessageCreator extends AbstractMessageCreator{

	@Autowired
	private ZyUserContactDao zyUserContactDao;
	
	@Override
	public boolean support(SmsSendFormPo smsSendFormPo) {
		List<String> myContactIds = getContactIds(smsSendFormPo);
		return null!=myContactIds&&myContactIds.size()>0;
	}

	private List<String> getContactIds(SmsSendFormPo smsSendFormPo) {
		List<String> myContactIds = str2List(smsSendFormPo.getMyContactIds());
		return myContactIds;
	}

	@Override
	public void saveMessage(SmsSendFormPo smsSendFormPo, Integer batch, SaveMessageResult result) {
		List<String> myContactIds = getContactIds(smsSendFormPo);
		Map<String, ZyUserContact> userContactMap = zyUserContactDao.getMapByIds(myContactIds, null);
		for (String zyContactId : myContactIds) {
			ZyUserContact userContact = userContactMap .get(zyContactId);
			if (userContact == null || isNull(zyUserContact.getContactPhone())) {
				continue;
			}
			String mobile = userContact .getContactPhone();
			String userName = userContact .getContactName();
			if (StringUtils.isBlank(mobile)) {
				result.putMessage(userName + "xxxxx");
				result.failure();
				continue;
			}
			SmsSend smsSend = smsSendFormPo.toSmsSend();
			smsSend.setPhone(mobile);
			smsSend.setUserId(userName);
			smsSend.setCompanyId(UserUtils.getLoginAreaId());
			smsSend.setBatch(batch);
			dao.insertSelective(smsSend);
			result.success();
		}
	}

}
@Order(4)
public class ChaterMessageCreator extends AbstractMessageCreator{

............................
}

标签:...,smsSendFormPo,重构,batch,else,user,smsSend,xxxxx,String
来源: https://blog.csdn.net/qq_37148232/article/details/122716398

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有