大三了,一年一度的软件设计与编程实践到来了。javascript
继今年的软件工程实验以后第二个大实验;要求相似,多用户登陆的复杂系统,软件工程实验要求五个下午,本实验要求八个上午。java
感谢Spring Data JPA
,此框架真的是实验利器,大大提升了开发效率。git
感谢团队,感谢潘老师。要不我可能也要和个人同窗同样一块儿学Tomcat
,写Servlet
,生连JDBC
,手写SELECT
,最后把实验写黄。github
三个角色:货主、司机、管理员。npm
管理员负责维护基础信息,就是基础模块的增删改查,就是实体有点多。编程
主要的就是业务流程:api
货主在平台发起订单,司机能综合查询相关订单。框架
司机进行抢单,一个单能够被多个司机抢,而后货主选择我这批货由哪一个司机进行承运,并进行付款。ide
司机能更改运输状态,当货物到站时,货主确认后,平台将通过抽成的钱转给司机。grunt
@RepositoryRestResource(path = "Tax") public interface TaxRepository extends JpaRepository<Tax, Long> { Tax findByMinPriceLessThanAndMaxPriceGreaterThanEqual(BigDecimal priceMin, BigDecimal priceMax); }
直接在仓库接口上加注解,而后就在当前的path
上生成了增删改查、分页、排序等接口。
这个框架用是很好用,就是有一个问题,查询数据时后台不序列化id
。
id: 1 name: zhangsan age: 18
假如数据表中由这样一个实体,若是调用getAll
接口的话,返回的倒是这样的数据。
[{ name: zhangsan, age: 18 }]
没有id
在首页显示是没问题的,可是若是编辑的时候怎么办呢?
查找官方文档,实现RepositoryRestConfigurer
接口,在configureRepositoryRestConfiguration
中配置为哪一个实体暴露id
。
@Configuration public class CustomRestConfiguration implements RepositoryRestConfigurer { @Override public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { config.exposeIdsFor(GoodCategory.class) .exposeIdsFor(OrderDetail.class) .exposeIdsFor(Orders.class) .exposeIdsFor(Payment.class) .exposeIdsFor(Price.class) .exposeIdsFor(Tax.class) .exposeIdsFor(User.class) .exposeIdsFor(Vehicle.class); } }
咱们设计的是货主发起订单时的出发地与目的地都是在百度地图上选的。
因此,须要解决三个问题:
设计
和以前写定时任务不知道本初子午线同样,解决地图问题的时候,又暴露了我地理没学好的缺陷。
一直想怎么存储位置呢?后来学习了一下百度地图的开发文档发现,经纬度是最好的解决方法。
经纬度惟一地标识一个位置,咱们能够根据经纬度再去百度查这个经纬度是一个什么地点。
最后就是这么设计的,先选出经纬度,而后前台去根据当前选中的经纬度去百度要数据,这个经纬度对应的是哪一个市哪一个区那条街?同时根据起点与终点调百度的接口查询距离是多少。
private String startPlace; // 起点 private String endPlace; // 终点 private Float startLongitude; // 起点经度 private Float startLatitude; // 起点纬度 private Float endLongitude; // 终点经度 private Float endLatitude; // 终点纬度 private Float distance; // 运输距离
定位
百度地图开放平台上的DEMO
特别详细,有四种定位方式肯定当前用户在哪,咱们采用的是根据ip
的定位方式,虽然距离不太精确,但对于实验来讲足够了。
算距离
发现百度地图的api
和我想象中的有差距,点开获取两点间的距离,没想到居然是勾股定理。
司机查订单的时候,用到了团队的核心库。
想把这个YunzhiService
的实例放到个人应用上下文中。
@Configuration public class BeanConfig { @Bean public YunzhiService yunzhiService() { return new YunzhiServiceImpl(); } }
虽然不太愿意认可,可是当我帮同窗装环境的时候,npm
提示grunt
不推荐使用。新技术将至。
文档对于一个项目的参考价值来讲十分重要,我以前在Github
上看到过很多开源的项目,我看过之后以为毫无参考价值,一个文档都不写,这个项目开源对他人来讲有何意义吗?
深觉文档的价值,之后开源的每一个项目,无论代码如何,在至少保证文档齐全。至少保证我这个项目开源,对他人有意义!