租房宝开发心得

工作记录:

第一周:为账号表添加生效时间段,只有在生效时间段内登录才能成功(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>

 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值