ferrero项目的bug与思考2
1、出现重复的code
类似Sku这样的数据(code唯一),我们从第三方获取,可以给code 添加一个唯一索引。这样防止出现重复的code
2、项目里的job
如果job执行时间不是经常变更,最简单的就是springboot的 @Scheduled 之前用的是公司产品组的job,感觉很不方便
@Scheduled(fixedRate=4000) 每隔4秒执行一次,启动时会执行 @Scheduled(cron="0 0 1 * * ?") 启动时不会执行,每天凌晨1点执行
启动类添加 @EnableScheduling
job方法为void
@Scheduled(cron="0 0 1 * * ?") public void snpooltask() {}
3、查询结果不一致
第一个查询HU+from 没有查询到结果 , 那么sn 就是默认值"",
但是 cartonCountQuery 这里查询,parentSn 就是""
就和第一个查询的条件不一样了。count出数字了
private HuSnVO getHuSnVOByHu(String hu,HuSnVM vm){ log.info("[getHuSnVOByHu]hu="+hu); HuSnVO vo = new HuSnVO(); BasicDBObject query = new BasicDBObject(); query.put("HU", hu); if (!StringUtils.isBlank(vm.getFrom())) { query.put("fromLocation", vm.getFrom()); } if (!StringUtils.isBlank(vm.getTo())) { query.put("toLocation", vm.getTo()); } String sn =""; MongoCursor<Document> cursor = mongoTemplate.getCollection("serialNumber").find(query) .skip(0).limit(1).iterator(); while (cursor.hasNext()) { JSONObject jsonObject = JSONObject.parseObject(cursor.next().toJson().toString()); sn= jsonObject.getString("sn"); String batchNo = jsonObject.getString("batchNo"); vo.setBatch(batchNo); String skuCode = jsonObject.getString("skuCode"); vo.setSkuCode(skuCode); vo.setHu(hu); vo.setTo(finalLoc); List<Sku> byCode = skuRepository.findByCode(skuCode); if(ListUtil.isNotEmpty(byCode)){ vo.setSkuName(byCode.get(0).getNameCh()); } } BasicDBObject cartonCountQuery = new BasicDBObject(); cartonCountQuery.put("parentSn", sn); if (!StringUtils.isBlank(vm.getFrom())) { cartonCountQuery.put("fromLocation", vm.getFrom()); } if (!StringUtils.isBlank(vm.getTo())) { cartonCountQuery.put("toLocation", vm.getTo()); } long count = mongoTemplate.getCollection("serialNumber").count(cartonCountQuery); vo.setCartonCount(count); return vo; }
4、测试环境从第三方数据ok,正式环境拿数据检查不够细致
测试环境对方推送orderTime 格式是这样,但是正式环境我们接受的数据是
运行将近半个月需要做其他功能时,我发发现这个问题。。。
5、连接SFTP 连接数过多
这个问题主要是两个方面1.连接以后没有关闭 2.初始化连接多,关闭的时候只关闭了部分
我的问题是重复了一行代码
sftp关闭一定要关闭sessoin 然后sftp退出