订单管理-订单自动识别

需求:将指定格式的文本内容放入text area文本框,点击页面空白处,自动将文本内容处理到对应的表单中。

具体流程:

  1. 用户将指定格式的文本粘贴到文本框中,点击页面空白处,发起ajax请求,请求带上了该文本到后台。
  2. 后台接口获取该文本内容,进行处理,处理完成之后返回一个对象到前端

前端将获取到的对象动态赋值到表单中,完成订单自动识别

指定格式的文本  识别项:被识别的内容 回车符 

订单编号(识别项):123456789(被识别的内容)
账号(识别项):xxxxxxx(被识别的内容)
密码(识别项):yyyyyy(被识别的内容)

后台处理:

1.生成一个对象(用于返回前端,对象属性对应前端表单name,便于赋值)

2.请求数据库,获取到自动识别设置表里的识别项识别关键词(对象集合)

3.依次匹配识别项,将该识别项的关键词代入识别方法匹配,如果匹配成功,则返回该匹配到的值,将该值设置到最初生成的序列化对象中。

4.处理完成后将该对象返回前端。

// 订单自动识别方法。
public String orderIdentification(String identificationName, String identificationContent, String[] temp,
		OrderBPo orderBPo, String keywordName) {
	if (keywordName.equals(identificationName.trim())) {//如果传入的识别项和数据库获取到的识别项相同,往下执行,如果不同,直接返回null
		String subTemp = identificationContent;//定义一个临时变量存识别关键词,(现在发现没什么必要。可以略过。。)
		String keyWord[] = subTemp.split(",");//(识别关键词是一个字符串,如果有多个识别关键词,以,号隔开)拆分识别关键词
		String indentName[];

		for (int i = 0; i < temp.length; i++) {//遍历拆分后的文本内容 现在是 识别项:被识别的内容 字符串对象集合
			indentName = temp[i].split(":");//拆分 识别项:被识别的内容。 此处是以中文冒号拆分
			if (indentName.length == 1) {//如果拆分后的 识别项:被识别的内容  长度为1 则使用英文冒号重新拆分(没办法,用户肯定不知道你中文和英文冒号有啥区别)
				indentName = temp[i].split(":");
			}
			for (int k = 0; k < keyWord.length; k++) {//遍历拆分后的识别关键词集合
				if ((indentName[0].trim()).equals(keyWord[k])) {//拆分后的 识别项:被识别的内容为[识别项,被识别的内容]。所以取该集合的第一个关键词作识别,如果匹配上了,进行下一步
					if (indentName.length == 1) {//拆分后的 识别项:被识别的内容 数组长度如果为1,那就是没有被识别的内容,此时应该直接返回空字符串
						return "";
					}
					return indentName[1];//如果上面不执行,那就是有被识别的内容,此时就返回该内容
				}
			}
		}
	}
	return null;
}
public OrderBPo orderAutoIdentification(String content){
		
		AddorderServiceImpl addOrder = new AddorderServiceImpl();//new一个当前类的对象,用于调用上面的订单识别处理方法
		OrderBPo orderBPo = new OrderBPo();//生成一个订单对象,用于存储识别到的内容,返回前端
		List<OrderAutoIdentificationBPo> lists = addorderService.getOrderAutoIdentificationBPo();//获取到自动识别项和识别项对应的识别关键词的对象集合
		String temp[] = content.split("\\n");//前端传入的文本内容为 识别项:被识别的内容 回车键。  所以这边就使用回车键为关键词拆分需要识别的内容
		String resultTemp = "";//定义一个临时存储识别返回内容的变量
		for (int j = 0; j < lists.size(); j++) {//遍历自动识别项和识别项对应的识别关键词的对象集合

			resultTemp = addOrder.orderIdentification(lists.get(j).getIdentificationName(),
					lists.get(j).getIdentificationContent(), temp, orderBPo, "来源单号");//传入IdentificationName识别项(和订单对象属性相同),IdentificationContent()识别关键词,以逗号分隔开,调用识别方法
			if (null != resultTemp && !"".equals(resultTemp.trim())) {//调用识别方法的返回值如果不为null或者空字符串,说明匹配成功,将返回值设置到对象对应的属性中,
				orderBPo.setOriginOrderId(resultTemp);
				continue;//此处加一个continue,就不用再往下执行了,可以提升一点效率
			}
			resultTemp = addOrder.orderIdentification(lists.get(j).getIdentificationName(),
					lists.get(j).getIdentificationContent(), temp, orderBPo, "游戏区服");
			if (null != resultTemp && !"".equals(resultTemp.trim())) {
				orderBPo.setGameServerName(resultTemp);
				continue;
			}
			}

		}
		return orderBPo;
	}

总结:该整套自动识别流程中,有几点需要注意的地方
    1.前端传入的文本内容的格式是指定的,  识别项:被识别的内容 回车符   
    2.调用自动识别方法时,我都使用到了静态识别项,如:"来源单号" ,"游戏区服",
    这些识别项字段要和数据库的识别项字段一一对应,如果识别项有偏差,就没法识别该项内容了    
    
    该套自动识别流程中,使用到的内容
    1.自动识别的文本内容
    2.有相应识别项的属性的对象(存入匹配到的值)
    3.数据库中保存的识别项和识别关键词(识别项是固定不变的,识别关键词是识别项的别名,
    因为很多用户不能完全按照识别项的要求填入数据,所以加识别关键词去满足不同用户的需求)
    
    大家也可以通过自己的需求,修改相应的指定格式,然后在后台处理的时候根据自己指定的格式处理就好了。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值