租房宝开发心得
2015-12-03 14:23
225 查看
工作记录:
第一周:为账号表添加生效时间段,只有在生效时间段内登录才能成功(appControl)
第二周:为历史汇款记录添加备注和交易时间字段,并且有可设置功能 (FinanceControl)
第三周:根据paymentClause生成billingplan
第四周:
(1)省份、市、地区service编写,实现省查市,市查地方。
(2) 根据appId值来返回billList,包括对principal的权限判断。(billingPlanControl)
第五周:
(1)Mongodb的学习CRUD。
(2)小区名称的模糊匹配查询,下拉列表显示,小区的创建。Control类和Service类。(GlobalCommunity.service)
(3)fix bug :模糊查询中,查询内容出现的"("的无法查询情况
第六周:
(1)阿里云oss的学习,上传下载图片,并且根据前台传入参数,生成图片缩略图访问URL.(ImageControl)
(2)schema.appendix中值的创建。(mongodb的insert和update) (SchemaService)
(3)下游租约查询(页面和control类)(leasingContract.jsp && BusinessControl)
问题:(1)时间如何查询(2)如何查询mongo文档中的内嵌文档中的数据
第七周:
(1)下游租约查询( businessContract.queryLeasingContractsBy ; service ; jsp)
(2)银行信息、图片的mysql存储(bankinfo.java bankService)
(3)新增小区,不光mysql中的GlobeCommunity存储一份,mongo中各自公司也保存一份(GlobalCommunityService CommunityControl)
第八周:
(1)小区名称的模糊匹配查询,查询时能对省市区信息更加精确查询。(GlobalCommunity.service)
(2)LeasingBusinessContract实体类的生成,五部分组成。写service,传BusinessContractNo,传出LeasingBusinessContracts
(3)唯一性ticketNumberService类的编写
第九周:
(1)LeasingBusinessContract实体类的生成,五部分组成。写service,传BusinessContractNo,传出LeasingBusinessContracts
(2)Leasing_Business_Detail.jsp字段的填写。LeasingBusinessContractControl类编写
第十周:
(1)LeasingBusinessBilling详情类
第十一周:
(1)阿里oss上传图片删除
(2)阿里oss文件的上传与删除
(3)账单初始月份应该落在当前月份附近
billingPlanHandler类(public int getActiveMonthNumber(List<BillMonthStage> billMonthStages);)
(4)账单的批量删除和关闭(删除和关闭之前要检验是否未付清);
(5)折扣信息的修改 -->联动的修改账单金额
1.用 StringUtils.isEmpty(linkedContractUuid) 代替 string==null
用 CollectionUtils.isEmpty(orders) 代替 orders==null
isEmpty 包含了 判空 和判null
2.TDD测试驱动开发,为每个方法提前编写好输入输出数据,有利于方法的构思,和快速开发。
利用EclEmma 配合测试,检查代码覆盖率,编造合适的测试用例来覆盖。
3.java lambda表达式 代替 内置函数
4.使用git pull 拉远端数据时,如果有冲突,
可以pull到一个test分支上,然后把test与本地分支合并,在提交到远端,这样远端就有了所有的数据,在从远端pull到本地。
5.一个serviceImpl的写法
6.Spring中通过@Value注解读取.properties配置内容
先在properties文件中写好key=value键值对,
在application.xml中添加引导
7.对于很多类似的代码,用java8中的Lambda表达式解决(hashmap)
8.Mongo中如果要把文档生成类,需要
否则会生成hashMap
9.对第八点的补充说明。依靠Mongo自身的强制转化,会容易出现视图类型和数据类型的混淆。正确的做法是数据库中只存数据,类型的转换单独写。被老大训了好久。。。
10.@PathVariable出现点号"."时导致路径参数截断获取不全的解决办法
在@RequestMapping的value中使用SpEL来表示,value中的{version}换成{version:.+}。
第一周:为账号表添加生效时间段,只有在生效时间段内登录才能成功(appControl)
第二周:为历史汇款记录添加备注和交易时间字段,并且有可设置功能 (FinanceControl)
第三周:根据paymentClause生成billingplan
第四周:
(1)省份、市、地区service编写,实现省查市,市查地方。
(2) 根据appId值来返回billList,包括对principal的权限判断。(billingPlanControl)
第五周:
(1)Mongodb的学习CRUD。
(2)小区名称的模糊匹配查询,下拉列表显示,小区的创建。Control类和Service类。(GlobalCommunity.service)
(3)fix bug :模糊查询中,查询内容出现的"("的无法查询情况
第六周:
(1)阿里云oss的学习,上传下载图片,并且根据前台传入参数,生成图片缩略图访问URL.(ImageControl)
(2)schema.appendix中值的创建。(mongodb的insert和update) (SchemaService)
(3)下游租约查询(页面和control类)(leasingContract.jsp && BusinessControl)
问题:(1)时间如何查询(2)如何查询mongo文档中的内嵌文档中的数据
第七周:
(1)下游租约查询( businessContract.queryLeasingContractsBy ; service ; jsp)
(2)银行信息、图片的mysql存储(bankinfo.java bankService)
(3)新增小区,不光mysql中的GlobeCommunity存储一份,mongo中各自公司也保存一份(GlobalCommunityService CommunityControl)
第八周:
(1)小区名称的模糊匹配查询,查询时能对省市区信息更加精确查询。(GlobalCommunity.service)
(2)LeasingBusinessContract实体类的生成,五部分组成。写service,传BusinessContractNo,传出LeasingBusinessContracts
(3)唯一性ticketNumberService类的编写
第九周:
(1)LeasingBusinessContract实体类的生成,五部分组成。写service,传BusinessContractNo,传出LeasingBusinessContracts
(2)Leasing_Business_Detail.jsp字段的填写。LeasingBusinessContractControl类编写
第十周:
(1)LeasingBusinessBilling详情类
第十一周:
(1)阿里oss上传图片删除
(2)阿里oss文件的上传与删除
(3)账单初始月份应该落在当前月份附近
billingPlanHandler类(public int getActiveMonthNumber(List<BillMonthStage> billMonthStages);)
(4)账单的批量删除和关闭(删除和关闭之前要检验是否未付清);
(5)折扣信息的修改 -->联动的修改账单金额
1.用 StringUtils.isEmpty(linkedContractUuid) 代替 string==null
用 CollectionUtils.isEmpty(orders) 代替 orders==null
isEmpty 包含了 判空 和判null
2.TDD测试驱动开发,为每个方法提前编写好输入输出数据,有利于方法的构思,和快速开发。
利用EclEmma 配合测试,检查代码覆盖率,编造合适的测试用例来覆盖。
3.java lambda表达式 代替 内置函数
4.使用git pull 拉远端数据时,如果有冲突,
可以pull到一个test分支上,然后把test与本地分支合并,在提交到远端,这样远端就有了所有的数据,在从远端pull到本地。
5.一个serviceImpl的写法
/** * @author Xiepf * 2015年12月9日 */ @Service("districtService") public class DistrictServiceImpl extends GenericServiceImpl<District> implements DistrictService{ @Autowired private GenericDaoSupport genericDaoSupport; @Override public List<District> getDistrictListByCityCode(String CityCode) { return genericDaoSupport.searchForList("from District district where district.cityCode = :cityCode","cityCode", CityCode); } }
6.Spring中通过@Value注解读取.properties配置内容
先在properties文件中写好key=value键值对,
在application.xml中添加引导
<util:properties id="oss" location="classpath:/oss.properties"></util:properties>就可以引用了
@Value("#{oss['IMG_ROOT_PATH']}") private String IMG_ROOT_PATH;
7.对于很多类似的代码,用java8中的Lambda表达式解决(hashmap)
private HashMap<String,Function<LeasingBusinessContractsQueryModel,Object>> criteriaTableForBusinessContractQuery= new HashMap<String,Function<LeasingBusinessContractsQueryModel,Object>>() {{ put("contractType", LeasingBusinessContractsQueryModel::getContractType); put("contractLifeCycle", LeasingBusinessContractsQueryModel::getContractLifeCycle); put("businessContractNo", LeasingBusinessContractsQueryModel::getBusinessContractNo); put("appendix.contractSourceNo", LeasingBusinessContractsQueryModel::getContractSourceNo); put("appendix.leasingUnitSubjectMatterNo", LeasingBusinessContractsQueryModel::getLeasingUnitSubjectMatterNo); put("appendix.renterName", LeasingBusinessContractsQueryModel::getRenterName); }}; private Criteria generateCriteriaForBusinessContract(LeasingBusinessContractsQueryModel parameterObject) { Criteria criteriaDefinition = Criteria.where("isDelete").is(Boolean.FALSE); Set<String > fields=criteriaTableForBusinessContractQuery.keySet(); for(String fieldName: fields) { Function<LeasingBusinessContractsQueryModel,Object> getterFunction=criteriaTableForBusinessContractQuery.get(fieldName); Object value=getterFunction.apply(parameterObject); if(value==null) continue; if(value instanceof String&&StringUtils.isEmpty((String)value)) continue; if(fieldName.equals("contractLifeCycle")) criteriaDefinition.and(fieldName).is(((ContractLifeCycle)value).ordinal()); else criteriaDefinition.and(fieldName).is(value); } Date rentalContratMaturityDateStart = parameterObject.parseStartTime(); Date rentalContratMaturityDateEnd = parameterObject.parseEndTime(); criteriaDefinition.and("issueTime"). lte(rentalContratMaturityDateEnd). andOperator(Criteria.where("issueTime"). gte(rentalContratMaturityDateStart)); return criteriaDefinition; }
8.Mongo中如果要把文档生成类,需要
"_class" : "com.zufangbao.wellsfargo.greypool.document.entity.leasingdocument.LeasingSubjectMatterForm$Img"
否则会生成hashMap
9.对第八点的补充说明。依靠Mongo自身的强制转化,会容易出现视图类型和数据类型的混淆。正确的做法是数据库中只存数据,类型的转换单独写。被老大训了好久。。。
public void setTaxInfoObject(Object obj) { if(obj == null || ((obj instanceof List)==false && (obj instanceof Map)==false))setTaxInfo(null); setTaxInfo(castData(new TypeReference<TaxInfo>(){},obj)); } public static <T> T castData(TypeReference<T> type,Object value) { if (value instanceof Map || value instanceof Collection) { String objstr = JsonUtils.toJsonString(value); T data = JSON.parseObject(objstr, type); return data; } else { return (T) value; } } public static <T> T castData(Class<T> clazz,Object value) { if (value instanceof Map || value instanceof Collection) { String objstr = JsonUtils.toJsonString(value); T data = JsonUtils.parse(objstr, clazz); return data; } else { return (T) value; } }
10.@PathVariable出现点号"."时导致路径参数截断获取不全的解决办法
在@RequestMapping的value中使用SpEL来表示,value中的{version}换成{version:.+}。
<span id="Label3"></span><pre class="prettyprint"><code class=" hljs cs"><span class="lit">@RequestMapping</span><span class="pun">(</span><span class="hljs-keyword"><span class="pln">value</span></span><span class="pun">=</span><span class="hljs-string"><span class="str">"android/download/{version:.+}"</span></span><span class="pun">,</span><span class="pln">method</span><span class="pun">=</span><span class="typ">RequestMethod</span><span class="pun">.</span><span class="pln">GET</span><span class="pun">)</span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">public</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">void</span></span><span class="pln"> </span><span class="hljs-title"><span class="pln">download</span></span><span class="pun">(</span><span class="typ">HttpSession</span><span class="pln"> session</span><span class="pun">,</span><span class="typ">HttpServletResponse</span><span class="pln"> response</span><span class="pun">,</span><span class="lit">@</span><span class="hljs-title"><span class="lit">PathVariable</span></span><span class="pun">(</span><span class="str">"version"</span><span class="pun">)</span><span class="typ">String</span><span class="pln"> version</span><span class="pun">){</span><span class="pln"> </span><span class="pun">}</span></code>
相关文章推荐
- The X New Developer’s Guide——前言
- 优化UITableView性能
- #ifndef和#define的含义
- 点击微信输入框页面放大以及页面布局等若干问题的记录
- jQuery源码学习13——Ajax
- oracle根据分隔符将字符串分割成数组函数
- JAVA静态的主函数
- html5 自定义文件上传
- java ImageIO处理图像的封装
- React Native 实现原生模块 实现拨打电话功能
- serialVersionUID作用
- PostgreSQL 硬件性能调整
- Codeforces Round #334 (Div. 2) C. Alternative Thinking
- 个人php开发工具
- 位运算学习笔记
- java 时区处理机制(0时区转换到服务器时区)
- Sublime Text 3配置php语法错误提示插件PHPCS
- hibernate常见关系的操作
- ios 热更新 无需上传AppStore 可以直接新加功能
- 唯品会荣膺2015年度最佳电商平台奖 移动端更显特卖魅力