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