您的位置:首页 > 其它

租房宝开发心得

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的写法

/**
* @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>



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  租房宝