package project.web.api.monitor; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import kernel.web.ApplicationUtil; import kernel.web.ResultObject; import project.monitor.loan.LoanService; import project.monitor.loan.SimpleLoanOrder; import project.user.token.TokenService; /** * 借贷API */ @CrossOrigin @RestController("/api/loan!") public class LoanController { /** * 借贷服务 */ @Autowired private LoanService loanService; /** * Token服务 */ @Autowired private TokenService tokenService; /** * SLF4J日志组件 */ private static final Logger logger = LoggerFactory.getLogger(LoanController.class); /** * 借贷额度正则式 */ private static final Pattern QUOTA_REGEX=Pattern.compile("([A-Z]{2,8}):([1-9]{1}[0-9]{0,7})"); /** * 获取借贷参数 * @param configId 配置ID * @return 配置结果 */ @RequestMapping("get.action") public ResultObject getParams(String configId) { ResultObject resultObject = new ResultObject(); try { HashMap paramMap=loanService.getLoanParams(configId); if(null==paramMap) { resultObject.setMsg("获取借贷参数失败!"); resultObject.setCode("1"); }else { ApplicationUtil.getHttpSession().setAttribute("paramMap", paramMap); resultObject.setMsg("获取借贷参数成功!"); resultObject.setData(paramMap); } }catch(Throwable e) { resultObject.setCode("1"); resultObject.setMsg("程序错误"); logger.error("error:", e); } return resultObject; } /** * 提交借贷申请 * @param request 请求对象 * @return 申请结果 */ @RequestMapping("apply.action") public ResultObject apply(HttpServletRequest request) { ResultObject resultObject = new ResultObject(); String token=request.getParameter("token"); if(null==token || (token=token.trim()).isEmpty()) { resultObject.setCode("1"); resultObject.setMsg("从请求参数中获取Token为空!"); return resultObject; } String partyId=tokenService.cacheGet(token); if(null==partyId) { resultObject.setCode("1"); resultObject.setMsg("通过Token获取partyId为空!"); return resultObject; } String term=getParamValue(request,resultObject,"term"); if(null==term) return resultObject; String quota=getParamValue(request,resultObject,"quota"); if(null==quota) return resultObject; String symbol=getParamValue(request,resultObject,"symbol"); if(null==symbol) return resultObject; String dailyRate=getParamValue(request,resultObject,"dailyRate"); if(null==dailyRate) return resultObject; String repayment=getParamValue(request,resultObject,"repayment"); if(null==repayment) return resultObject; String repayCycle=getParamValue(request,resultObject,"repayCycle"); if(null==repayCycle) return resultObject; String lendingInstitution=getParamValue(request,resultObject,"lendingInstitution"); if(null==lendingInstitution) return resultObject; String houseImgs=request.getParameter("houseImgs"); if(null==houseImgs || (houseImgs=houseImgs.trim()).isEmpty()) { houseImgs=null; } String incomeImg=request.getParameter("incomeImg"); if(null==incomeImg || (incomeImg=incomeImg.trim()).isEmpty()) { incomeImg=null; } Integer quotaInt=new Integer(quota); if(checkInvalidQuota(resultObject,symbol,quotaInt)) return resultObject; SimpleLoanOrder simpleLoanOrder=new SimpleLoanOrder(partyId,quotaInt,symbol); simpleLoanOrder.setLendingInstitution(new Integer(lendingInstitution)); simpleLoanOrder.setRepayCycle(new Integer(repayCycle)); simpleLoanOrder.setRepayment(new Integer(repayment)); simpleLoanOrder.setDailyRate(new Double(dailyRate)); simpleLoanOrder.setTerm(new Integer(term)); simpleLoanOrder.setHouseImgs(houseImgs); simpleLoanOrder.setIncomeImg(incomeImg); simpleLoanOrder.setState(1); try { boolean flag=loanService.addLoanOrder(simpleLoanOrder); if(flag) { resultObject.setMsg("借贷申请提交成功!"); }else { resultObject.setCode("1"); resultObject.setMsg("借贷申请提交失败!"); } }catch(Throwable e) { resultObject.setCode("1"); resultObject.setMsg("程序错误"); logger.error("error:", e); } return resultObject; } /** * 获取参数值 * @param request 请求对象 * @param resultObject 结果对象 * @param paramName 参数名 * @return 参数值 */ private static final String getParamValue(HttpServletRequest request,ResultObject resultObject,String paramName) { String paramValue=request.getParameter(paramName); if(null==paramValue || (paramValue=paramValue.trim()).isEmpty()) { resultObject.setCode("1"); resultObject.setMsg(String.format("获取参数[%s]为空!",paramName)); return null; }else { return paramValue; } } /** * 校验借贷额度是否有效 * @param resultObject 结果对象 * @param quota 借贷额度 * @return 是否无效 */ private static final boolean checkInvalidQuota(ResultObject resultObject,String symbol,Integer quota) { HashMap paramMap=(HashMap)ApplicationUtil.getHttpSession().getAttribute("paramMap"); if(null==paramMap) { resultObject.setCode("1"); resultObject.setMsg("从会话中获取借贷参数[paramMap]为空!"); return true; } Matcher matcher=QUOTA_REGEX.matcher((String)paramMap.get("maxQuota")); Integer maxQuota=null; while(matcher.find()) { if(symbol.equalsIgnoreCase(matcher.group(1))) { maxQuota=new Integer(matcher.group(2)); break; } } if(null==maxQuota) { resultObject.setCode("1"); resultObject.setMsg("未找到额度最大值!"); return true; } matcher=QUOTA_REGEX.matcher((String)paramMap.get("minQuota")); Integer minQuota=null; while(matcher.find()) { if(symbol.equalsIgnoreCase(matcher.group(1))) { minQuota=new Integer(matcher.group(2)); break; } } if(null==minQuota) { resultObject.setCode("1"); resultObject.setMsg("未找到额度最小值!"); return true; } if(quotamaxQuota) { resultObject.setCode("1"); resultObject.setMsg("借贷额度不在允许范围内!"); return true; } return false; } }