兩個大數字相乘

沒什麼只是.一個demo

 

 

package net.csdn.service.tag.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import love.cq.util.StringUtil;
import net.csdn.exception.ArgumentErrorException;
import net.csdn.pojo.tag.ObjTag;
import net.csdn.pojo.tag.Tag;
import net.csdn.service.tag.util.domain.MyTag;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.log.Log;
import org.nutz.log.Logs;

@IocBean
public class DocTagService {
	private static final Log log = Logs.getLog("DocTagService");
	@Inject
	private TagsManageService tagsManageService = null;

	@Inject
	private DocStoreRemoteService docStoreRemoteService;

	public boolean insert(String typeName, String jsonDate, String tagsStr) {
		if (StringUtils.isBlank(tagsStr)) {
			throw new ArgumentErrorException("tags 不可以爲空");
		}
		ObjTag objTag = null;
		JSONObject fromObject = JSONObject.fromObject(jsonDate);
		log.info(fromObject.get("id") + "	" + tagsStr);
		String[] tags = tagsStr.split(",");
		String body = StringUtil.rmHtmlTag(fromObject.getString("body"));

		// /如果正文爲空
		if (StringUtil.isBlank(body) || tags == null || tags.length == 0) {
			return false;
		}

		String tempTagStr = null;

		// 刪除這條記錄
		delete(typeName, fromObject.getInt("id"));

		for (int i = 0; i < tags.length; i++) {
			// 先查詢tags是否存在於數據庫中.如果不存在就創建一個
			tempTagStr = tags[i].toLowerCase().trim();
			if (StringUtil.isBlank(tempTagStr)) {
				continue;
			}
			Tag tag = tagsManageService.findTagByName(tempTagStr);

			if (tag == null) {
				tag = new Tag();
				tag.setName(tempTagStr);
				tagsManageService.saveTag(tag);
			}
			// 插入一條記錄到數據庫中
			objTag = new ObjTag();

			objTag.setObject_id(fromObject.getInt("id"));

			objTag.setTag_id(tag.getId());

			objTag.setCreated_at(fromObject.getLong("created_at"));

			try {
				objTag.setChannel_id(fromObject.getInt("channel_id"));
			} catch (Exception e) {
				log.info("channel get error!");
			}

			tagsManageService.saveAbstractObjTag(typeName, objTag);
		}
		return true;
	}

	public void setTagsManageService(TagsManageService tagsManageService) {
		this.tagsManageService = tagsManageService;
	}

	/**
	 * 在tag系統中刪除文章
	 * 
	 * @param typeName
	 * @param objectId
	 */
	public void delete(String typeName, Integer objectId) {
		// TODO Auto-generated method stub
		if (objectId == null) {
			throw new ArgumentErrorException("待刪除文章Id 不可以爲空");
		}
		tagsManageService.deleteDocTag(typeName, objectId);
	}

	/**
	 * 超早tag的數量
	 * 
	 * @param typeName
	 * @param objectId
	 */
	public int findTagCount(String typeName, Integer objectId) {
		// TODO Auto-generated method stub
		if (objectId == null) {
			throw new ArgumentErrorException("待刪除文章Id 不可以爲空");
		}
		return tagsManageService.findTagCount(typeName, objectId);
	}

	/**
	 * tag補錄,慎用會覆蓋用戶原本的tag
	 * 
	 * @param type
	 * @param fromId
	 * @param endId
	 * @return
	 */
	public void updateTagByDoc(String typeName, int fromId, int endId, RecommenderService rs, HashMap<String, Integer> tagMap, boolean needSuggestTag) {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		fromId = Math.max(fromId, 1);
		for (int i = fromId; i <= endId; i++) {
			if (i % 100 == 0) {
				sb.append(i);
				try {
					insertTagsAndUpdateMongo(typeName, sb.toString(), rs, tagMap, needSuggestTag);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					log.error(e + " " + sb);
				}
				sb = new StringBuilder();
			} else {
				sb.append(i + ",");
			}
		}
		// 補錄
		if (sb != null && sb.length() > 0) {
			sb.append(0);
			try {
				insertTagsAndUpdateMongo(typeName, sb.toString(), rs, tagMap, needSuggestTag);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				log.error(e + " " + sb);
			}
		}
	}

	/**
	 * 插入tag
	 * 
	 * @param typeName
	 * @param ids
	 * @param rs
	 * @param tagMap
	 */
	private void insertTagsAndUpdateMongo(String typeName, String ids, RecommenderService rs, HashMap<String, Integer> tagMap, boolean needSuggestTag) {
		// TODO Auto-generated method stub

		JSONArray objs = docStoreRemoteService.findByIds(typeName, null, ids);
		JSONArray newObjs = new JSONArray();
		// 如果mongo那什麼都沒查出來就不走後面的了
		if (objs == null || objs.size() == 0) {
			return;
		}

		// 刪除所有的關聯
		tagsManageService.deleteDocTagByIds(typeName, ids);

		List<ObjTag> all = new ArrayList<ObjTag>();

		String title = null;
		String body = null;
		// 重新插入
		for (Object object : objs) {
			JSONObject job = (JSONObject) object;

			// 防止出現空hash
			if (job.size() <= 3) {
				continue;
			}

			List<MyTag> tag_suggest = null;

			try {

				StringBuilder sb = new StringBuilder();
				if (needSuggestTag) {

					try {
						title = job.getString("title");

					} catch (Exception e) {
					}

					try {
						body = job.getString("body");
					} catch (Exception e) {
					}

					tag_suggest = rs.tag_suggest(title, body, "csdn", 5);
					for (MyTag myTag : tag_suggest) {
						all.add(insertTagsAndUpdateMongo(tagMap, job, sb, myTag, typeName));
					}
				} else {
					String tag = job.getString("tag");
					if (StringUtil.isNotBlank(tag)) {
						String[] tags = tag.split(",");
						for (String string : tags) {
							if (StringUtil.isNotBlank(string)) {
								MyTag myTag = new MyTag(string.trim().toLowerCase(), 0, string.length());
								all.add(insertTagsAndUpdateMongo(tagMap, job, sb, myTag, typeName));
							}
						}
					} else {
						continue;
					}
				}
				if (StringUtil.isNotBlank(sb) && sb.length() > 1) {
					job.put("tag", sb.subSequence(0, sb.length() - 1));
					newObjs.add(job);
					log.info("insert " + job.getString("tag"));
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		try {
			// 批量保存關聯
			if (all.size() == 0) {
				log.info("not have any change to skip! " + ids.substring(0, 10));
				return;
			}

			if (needSuggestTag && newObjs.size() > 0) {
				// 批量修改mongo中的tag
				log.info("update mongo ok" + newObjs.size());
				docStoreRemoteService.update(typeName, newObjs);
			}

			StringBuilder sb = new StringBuilder("INSERT INTO ");
			sb.append(tagsManageService.getTableName(typeName));
			ObjTag objTag = null;
			sb.append(" (tag_id,object_id,created_at,channel_id) values ");
			for (int i = 0; i < all.size(); i++) {
				objTag = all.get(i);
				sb.append("(");
				sb.append(objTag.getTag_id());
				sb.append(",");
				sb.append(objTag.getObject_id());
				sb.append(",");
				sb.append(objTag.getCreated_at());
				sb.append(",");
				sb.append(objTag.getChannel_id());
				if (i == all.size() - 1) {
					sb.append(");");
				} else {
					sb.append("),");
				}
			}

			tagsManageService.execute(sb.toString());
			log.info("batchSave mysql ok" + all.size());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			log.error("batchSave mysql error" + ids);
			e.printStackTrace();
		}
	}

	private ObjTag insertTagsAndUpdateMongo(HashMap<String, Integer> tagMap, JSONObject job, StringBuilder sb, MyTag myTag, String type)
			throws InstantiationException, IllegalAccessException {
		sb.append(myTag.getName() + ",");
		Integer tagId = tagMap.get(myTag.getName());
		// 如果不在hash表中就查數據庫
		if (tagId == null) {
			Tag tag = tagsManageService.findTagByName(myTag.getName());
			// 如果爲空就插入一個
			if (tag == null) {
				tag = new Tag();
				tag.setName(myTag.getName());
				tagsManageService.saveTag(tag);
			}
			// 設置到map中
			tagMap.put(tag.getName(), tag.getId());
			tagId = tag.getId();
		}
		// 插入一條記錄到數據庫中
		ObjTag objTag = new ObjTag();

		objTag.setObject_id(job.getInt("id"));

		objTag.setTag_id(tagId);

		objTag.setCreated_at(job.getLong("created_at"));

		try {
			objTag.setChannel_id(job.getInt("channel_id"));
		} catch (Exception e) {
			objTag.setChannel_id(-1);
			log.error("channel get error!");
		}

		return objTag;
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章