发表于: 2017-10-30 22:11:15

1 652


一.今天完成的主要事情

1.解决了昨天遗留的问题,完成了跑批的五个功能中的第一个功能

该功能比较复杂,涉及到的表和情况也比较多,今天只是完成功能,并没有对代码进行重构,明天花时间对这段代码进行完善重构

由于功能比较复杂,所以先用文字将逻辑过程都描述出来,结果如下


//向用户付息
//第一步,遍历整个List,获取Repayment对象
//第二步,从Repayment对象中获取还款金额,userId,investmentId
//第三步,根据investmentId获取investment对象, 根据userId获取user对象
//第四步,根据investment对象获取付款银行和付款银行卡号,userProductRelationId,
//第五步,调用支付功能,向用户账户打钱
//第六步,支付完毕后返回两种状态,成功或者失败
//成功:1.根据userProductRelationId获取userProductRelation对象,修改该对象中的已分配收益和未分配收益字段
//     2.修改user对象中的累计收益字段和未读消息字段,累计收益字段加上打的钱,未读消息字段加1
//     3.更改该条记录的状态为已经还款
//     4.在交易记录表中新增一条记录,交易类型为回款,交易状态为回款成功
//     5.在消息表中新增一条记录,自动消息,消息类型为回款成功
//失败:1.修改user对象中的未读消息字段,未读消息字段加1
//     2.在交易记录表中新增一条记录,交易类型为回款,交易状态为回款失败
//     3.在消息表中新增一条记录,自动消息,消息类型为回款失败

//向用户付本金
//第一步,遍历整个List,获取Repayment对象
//第二步,从Repayment对象中获取还款金额,userId,investmentId
//第三步,根据userId获取User对象,根据investmentId获取Investment对象
//第四步,根据investment对象获取付款银行和付款银行卡号,userProductRelationId
//第五步,根据userProductRealtionId获取UserProductRelation对象
//第六步,根据userProductRelation对象中的available字段判断是否有续投(是否为-1)
//无续投: 调用支付功能,向用户打钱,支付有两种状态,成功或者失败
//        成功:1.修改userProductRelation对象中的status字段为已退出
//             2.修改user对象中的未读消息字段,未读消息字段加1,user对象中的asset字段减去付款金额
//             3.更改该条记录的状态为已经还款
//             4.在交易记录表中新增一条记录,交易类型为回款,交易状态为回款成功
//             5.在消息表中新增一条记录,自动消息,消息类型为回款成功
//        失败:1.修改user对象中的未读消息字段,未读消息字段加1
//             2.在交易记录表中新增一条记录,交易类型为回款,交易状态为回款失败
//             3.在消息表中新增一条记录,自动消息,消息类型为回款失败
//有续投: 续投无效:
//        调用支付功能,向用户打钱,支付有两种状态,成功或者失败(同无续投)
//        在消息表中新增两条记录,一条是续投失败,一条是回款失败/成功
//        续投有效:
//              1.根据该记录中的againInvestmentId字段,找到续投记录
//              2.将该条记录的状态更改为已退出,将用户对象中的是否有消息字段加1
//              3.计算并修改投资记录中起息日期,投资状态为投资中
//              4.根据续投记录计算回款计划,加入repayment表中
//              5.在投资记录表中新增一条记录
//              6.在交易记录表中新增两条记录,一条为回款成功,一条为付款成功
//              7.在消息表中新增一条记录,消息类型为续投成功

通过这段文字,基本将所有情况都罗列了出来,剩下的就是一条一条的实现

代码如下:主要逻辑功能都再该方法中实现


private void processForData(List<Repayment> repayments) throws ServiceException, ServiceDaoException {
//遍历整个list,获取Repayment对象
   for (Repayment repayment : repayments) {
//从Repayment对象中获取还款金额,userId,investmentId
       BigDecimal repaymentAmount = repayment.getRepaymentAmount();
Long userId = repayment.getUserId();
Long investmentId = repayment.getInvestmentId();
//根据userId和investmentId获取user对象和investment对象
       try {
User user = userService.getObjectById(userId);
Investment investment = investmentService.getObjectById(investmentId);
String cardNumber = investment.getPaymentCard();
String bankName = investment.getPaymentBank();
Long userProductRelationId = investment.getUprId();
Product product = productService.getObjectById(investment.getProductId());
UserProductRelation userProductRelation = userProductRelationService.getObjectById(
userProductRelationId);
log.info("get user, investment, cardNumebr, bankName, userProductRelation, product success!");

String messageTitle;
int tradeStatus;
if (repayment.getType() == Repayment.TYPE_INTEREST) {
log.info("现在是还利息.....");
//向用户付息,模拟调用支付接口
               Integer payResult = OtherUtil.payMethod(repaymentAmount, cardNumber, bankName);
log.info("get payResult is : " + payResult);
if (payResult == 1){
//付款成功
                   //更新userProductRelation对象
                   userProductRelation.setDistributedIncome(userProductRelation.getDistributedIncome().add(repaymentAmount));
userProductRelation.setUndistributedIncome(userProductRelation.getUndistributedIncome().subtract(repaymentAmount));
userProductRelationService.update(userProductRelation);
log.info("update userProductRelation success!");
//更新用户对象相应字段
                   user.setAccumulatedIncome(user.getAccumulatedIncome().add(repaymentAmount));
//更新该条还款记录
                   repayment.setStatus(Repayment.STATUS_ALREADY_REPAYMENT);
repaymentService.update(repayment);
log.info("update repayment success!");

tradeStatus = Trade.STATUS_SUCCESS;
messageTitle = "回款成功";
} else{
//付款失败
                   tradeStatus = Trade.STATUS_FAILURE;
messageTitle = "回款失败";
}
user.setMessageChecked(user.getMessageChecked() + 1);
//在交易记录表中新增一条记录
               Trade trade = OtherUtil.createTrade(userId, investmentId, investment.getProductId(),
repaymentAmount, tradeStatus, Trade.TYPE_REPAY);
Long tradeId = tradeService.insert(trade);
//在消息表中新增一条记录
               Message message = OtherUtil.createAutoMessage(userId, userProductRelationId, product,
messageTitle, Message.AUTOMESSAGE_REPAYMENT_FAILURE);
Long messageId = messageService.insert(message);
log.info("update trade, message success!");

} else if (repayment.getType() == Repayment.TYPE_CAPITAL) {
log.info("现在是还本金.......");
//向用户付本金
               //无续投或者续投无效
               if (userProductRelation.getAvailable()==UserProductRelation.REINVEST_NOT ||
userProductRelation.getAvailable()==UserProductRelation.REINVEST_INVALID){
//向用户付款,模拟调用支付接口
                   Integer payResult = OtherUtil.payMethod(repaymentAmount, cardNumber, bankName);
if (payResult ==1){
//更新userProductRelation对象
                       userProductRelation.setStatus(UserProductRelation.STATUS_QUITED);
userProductRelationService.update(userProductRelation);
//更新用户对象
                       user.setAsset(user.getAsset().subtract(repaymentAmount));
userService.update(user);
//更新该条还款记录
                       repayment.setStatus(Repayment.STATUS_ALREADY_REPAYMENT);
repaymentService.update(repayment);

tradeStatus = Trade.STATUS_SUCCESS;
messageTitle = "回款成功";

log.info("还本金,支付成功,执行完毕.........");

} else{

tradeStatus = Trade.STATUS_FAILURE;
messageTitle = "回款失败";
}

user.setMessageChecked(user.getMessageChecked() + 1);
//在交易记录表中新增一条记录
                   Trade trade = OtherUtil.createTrade(userId, investmentId, investment.getProductId(),
repaymentAmount, tradeStatus, Trade.TYPE_REPAY);
Long tradeId = tradeService.insert(trade);

if (userProductRelation.getAvailable()==UserProductRelation.REINVEST_INVALID){
Message extraMessage = OtherUtil.createAutoMessage(userId, userProductRelationId, product,
"续投失败", Message.AUTOMESSAGE_REINVESTMENT_FAILURE);
messageService.insert(extraMessage);
}
//在消息表中新增一条记录
                   Message message = OtherUtil.createAutoMessage(userId, userProductRelationId, product,
messageTitle, Message.AUTOMESSAGE_REPAYMENT_FAILURE);
Long messageId = messageService.insert(message);

log.info("======================================================");
} else {
//续投有效
                   //先获取续投记录
                   Long againInvestmentId = userProductRelation.getAgainInvestmentId();
UserProductRelation upr = userProductRelationService.getObjectById(againInvestmentId);
//更改原投资记录和续投记录
                   userProductRelation.setStatus(UserProductRelation.STATUS_QUITED);
upr.setStatus(UserProductRelation.STATUS_INVESTING);
upr.setAvailable(UserProductRelation.REINVEST_NOT);
upr.setAgainInvestmentId(-1L);
List<UserProductRelation> userProductRelations = new ArrayList<UserProductRelation>();
userProductRelations.add(userProductRelation);
userProductRelations.add(upr);
userProductRelationService.updateList(userProductRelations);
//计算回款计划,加入repayment表
                   List<Repayment> repaymentList = OtherUtil.getRepaymentPlanList(upr.getChargingInterestDate(),
upr.getInvestAmount(), product.getAnnualYield(), product.getFinancialPeriod(),
product.getPaymentBackWay());
repaymentService.insertList(repaymentList);
//新增一条投资记录
                   Investment investment1 = OtherUtil.getInvestmentObject(investment.getSignatureImgUrl(),
userId, product, upr.getId(), cardNumber, bankName);
investmentService.insert(investment1);
//在交易记录表中新增两条记录
                   Trade tradeRepay = OtherUtil.createTrade(userId, investmentId, investment.getProductId(),
repaymentAmount, Trade.STATUS_SUCCESS, Trade.TYPE_REPAY);
Trade tradePay = OtherUtil.createTrade(userId, investmentId, investment.getProductId(),
repaymentAmount, Trade.STATUS_SUCCESS, Trade.TYPE_PAY);
List<Trade> trades = new ArrayList<Trade>();
tradeService.insertList(trades);
//在消息表中新增一条记录
                   Message message = OtherUtil.createAutoMessage(userId, userProductRelationId, product,
"续投成功", Message.AUTOMESSAGE_REINVESTMENT_SUCCESS);
Long messageId = messageService.insert(message);

log.info("续投成功++++++++++++++++++++++++++++++++++++++++++++++");
}
} else {
log.info("Field type error!");
}
} catch (Throwable t){
t.printStackTrace();
log.error(t.getMessage());
}

}
}

这段代码可以说非常糟糕,明天会对该段代码进行重构,拆分,尽量优化,并且记录好日志文件

二.明天计划完成的主要事情

1.优化今天的代码

2.完成第二个功能

3.如果有时间,进行第三个功能

三.遇到的问题

暂无

四,收获

学会公司的etl定时任务的配置

五,项目进度情况

已经再一次延期至11月5号,这一次一定不能再延了,要完成和深圳分院的其他学员一起做真实项目了


返回列表 返回列表
评论

    分享到