package com.yami.trading.admin.controller.loan; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yami.trading.admin.facade.PermissionFacade; import com.yami.trading.bean.loan.SimpleLoanOrder; import com.yami.trading.bean.model.User; import com.yami.trading.common.domain.Result; import com.yami.trading.common.exception.BusinessException; import com.yami.trading.service.user.UserService; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author JORGE * @description 借贷管理 */ @RestController @CrossOrigin public class AdminLoanController { /** * 借贷服务 */ @Autowired private LoanService loanService; @Autowired UserService partyService; @Autowired private PermissionFacade permissionFacade; /** * SLF4J日志组件 */ private static final Logger logger = LoggerFactory.getLogger(AdminLoanController.class); /** * 时间格式 */ private static final DateFormat DATA_FORMATTER=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** * 借贷额度正则式 */ private static final Pattern QUOTA_REGEX=Pattern.compile("([A-Z]{2,8}):([1-9]{1}[0-9]{0,7})"); /** * 获取借贷申请单列表 * @return 申请单列表 */ @RequestMapping("normal/loanadmin!list.action") public Result listLoanOrder(HttpServletRequest request) { List children = permissionFacade.getOwnerUserIds(); String status=request.getParameter("status"); String orderNo=request.getParameter("orderNo"); String userName=request.getParameter("userName"); int pageNo= Integer.parseInt(request.getParameter("current")); int pageSize= Integer.parseInt(request.getParameter("size")); // int pageSize = 30; if(null==status || (status=status.trim()).isEmpty()) status="0"; HashMap paramMap=new HashMap(); paramMap.put("status", new Integer(status)); paramMap.put("userName", userName); paramMap.put("orderNo", orderNo); paramMap.put("pageNo", pageNo); paramMap.put("pageSize", pageSize); paramMap.put("children", children); Page page=null; try { page=loanService.pagedQuery(paramMap); }catch(Throwable e) { logger.error("list loan order occur error:", e); return Result.failed("list loan order occur error:" + e); } // ModelAndView modelAndView = new ModelAndView(); // modelAndView.addObject("pageNo", pageNo); // modelAndView.addObject("status", status); // modelAndView.addObject("pageSize", pageSize); // if(null!=page) modelAndView.addObject("page",page); // modelAndView.setViewName("simple_loan_order_list"); return Result.ok(page); } /** * 改变借贷申请单状态 * @return 申请单列表 */ @RequestMapping("normal/loanadmin!change.action") public Result changeLoanOrderState(HttpServletRequest request) { ModelAndView modelAndView = new ModelAndView(); String orderId=getParamValue(request,modelAndView,"orderId"); if(null==orderId) return Result.failed("orderId is null"); String status=getParamValue(request,modelAndView,"statusStr"); if(null==status) return Result.failed("status is null"); String reason=getParamValue(request,modelAndView,"reason"); try { loanService.updateLoanOrderState(orderId, status,reason); if(!"1".equals(status)) { //TODO // TipService tipService = ApplicationUtil.getBean(TipService.class); // tipService.deleteTip(orderId); } // modelAndView.addObject("message", "操作成功"); }catch(BusinessException e) { // modelAndView.addObject("message", e.getMessage()); logger.error("change loan order state error:", e); return Result.ok(e.getMessage()); }catch(Throwable e) { // modelAndView.addObject("message", "操作失败"); logger.error("change loan order state error:", e); return Result.ok("操作失败"); } // modelAndView.setViewName("redirect:/normal/loanadmin!list.action"); return Result.ok("操作成功"); } /** * 返回借贷申请单添加页面 * @return 添加申请单表单页面 */ @RequestMapping("normal/loanadmin!toAdd.action") public ModelAndView addBefore(HttpServletRequest request) { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("simple_loan_order_add"); try { HashMap paramMap=loanService.getLoanParams(null); if(null!=paramMap) { modelAndView.addObject("paramMap",paramMap); //todo // ApplicationUtil.getHttpSession().setAttribute("paramMap", paramMap); loanService.setParamMap(paramMap); }else { modelAndView.addObject("code", "0"); modelAndView.addObject("message", "获取借贷参数失败!"); } }catch(Throwable e) { modelAndView.addObject("code", "1"); modelAndView.addObject("message","程序错误"); logger.error("error:", e); } return modelAndView; } /** * 添加借贷申请单 * @return 添加状态 */ @RequestMapping("normal/loanadmin!add.action") public Result add(HttpServletRequest request) { // ModelAndView modelAndView = new ModelAndView(); // modelAndView.setViewName("simple_loan_order_add"); String partyId=request.getParameter("partyId"); if(null==partyId) return Result.failed("partyId is null"); String term=request.getParameter("term"); if(null==term) return Result.failed("term is null"); String state=request.getParameter("state"); if(null==state) return Result.failed("state is null"); String quota=request.getParameter("quota"); if(null==quota) return Result.failed("quota is null"); String symbol=request.getParameter("symbol"); if(null==symbol) return Result.failed("symbol is null"); String dailyRate=request.getParameter("dailyRate"); if(null==dailyRate) return Result.failed("dailyRate is null"); String repayment=request.getParameter("repayment"); if(null==repayment) return Result.failed("repayment is null"); String repayCycle=request.getParameter("repayCycle"); if(null==repayCycle) return Result.failed("repayCycle is null"); String lendingInstitution=request.getParameter("lendingInstitution"); if(null==lendingInstitution) return Result.failed("lendingInstitution is null"); /*String incomeImg=request.getParameter("incomeImg"); if(null==incomeImg || (incomeImg=incomeImg.trim()).isEmpty()) { incomeImg=null; }*/ Integer quotaInt=new Integer(quota); // if(checkInvalidQuota(modelAndView,symbol,quotaInt)) return modelAndView; // String img_idimg_1=getParamValue(request,modelAndView,"img_idimg_1"); String img_idimg_1=request.getParameter("img_idimg_1"); if(null==img_idimg_1) return Result.failed("img_idimg_1 is null"); // String img_idimg_2=getParamValue(request,modelAndView,"img_idimg_2"); String img_idimg_2=request.getParameter("img_idimg_2"); if(null==img_idimg_2) return Result.failed("img_idimg_2 is null"); // String img_idimg_3=getParamValue(request,modelAndView,"img_idimg_3"); String img_idimg_3=request.getParameter("img_idimg_3"); if(null==img_idimg_3) return Result.failed("img_idimg_3 is null"); String houseImgs=new StringBuilder(img_idimg_1).append(",").append(img_idimg_2).append(",").append(img_idimg_3).toString(); SimpleLoanOrder simpleLoanOrder=new SimpleLoanOrder(partyId,new BigDecimal(quota),symbol); simpleLoanOrder.setLendingInstitution(new Integer(lendingInstitution)); simpleLoanOrder.setRepayCycle(new Integer(repayCycle)); simpleLoanOrder.setRepayment(new Integer(repayment)); simpleLoanOrder.setDailyRate(new BigDecimal(dailyRate)); simpleLoanOrder.setState(new Integer(state)); simpleLoanOrder.setTerm(new Integer(term)); simpleLoanOrder.setHouseImgs(houseImgs); simpleLoanOrder.setCreateTime(new Date()); try { boolean flag=loanService.addLoanOrder(simpleLoanOrder); if(flag) { // modelAndView.addObject("message","借贷申请提交成功!"); }else { // modelAndView.addObject("code", "1"); // modelAndView.addObject("message","借贷申请提交失败!"); return Result.failed("1","借贷申请提交成功!"); } }catch(Throwable e) { // modelAndView.addObject("code", "1"); // modelAndView.addObject("message","程序错误"); logger.error("error:", e); return Result.failed("1","程序错误"); } return Result.ok("借贷申请提交成功!"); } /** * 返回借贷申请单修改页面 * @return 修改申请单页面 */ @RequestMapping("normal/loanadmin!toModify.action") public ModelAndView modifyBefore(HttpServletRequest request) { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("simple_loan_order_edit"); String orderNo=getParamValue(request,modelAndView,"orderNo"); if(null==orderNo) return modelAndView; try { HashMap paramMap=loanService.getLoanParams(null); if(null!=paramMap) { modelAndView.addObject("paramMap",paramMap); //todo // ApplicationUtil.getHttpSession().setAttribute("paramMap", paramMap); loanService.setParamMap(paramMap); }else { modelAndView.addObject("code", "0"); modelAndView.addObject("message", "获取借贷参数失败!"); return modelAndView; } SimpleLoanOrder loanOrder=loanService.getLoanOrder(null,orderNo); // UserService partyService = ApplicationUtil.getBean(PartyService.class); User party = partyService.cacheUserBy(loanOrder.getPartyId()); if(ObjectUtils.isNotEmpty(party)) { loanOrder.setUsername(party.getUserName()); } if(null!=loanOrder) { modelAndView.addObject("order",loanOrder); } }catch(Throwable e) { modelAndView.addObject("code", "1"); modelAndView.addObject("message","程序错误"); logger.error("error:", e); } return modelAndView; } /** * 修改借贷申请单 * @return 修改申请单状态 */ @RequestMapping("normal/loanadmin!modify.action") public Result modify(@RequestBody JSONObject request) { // ModelAndView modelAndView = new ModelAndView(); // modelAndView.setViewName("redirect:/normal/loanadmin!list.action"); String id=request.getString("orderNo"); if(null==id) return Result.failed("orderNo is null"); // String id=getParamValue(request,modelAndView,"orderNo"); // if(null==id) return modelAndView; // String term=getParamValue(request,modelAndView,"term"); // if(null==term) return modelAndView; String term=request.getString("term"); if(null==term) return Result.failed("term is null"); // String quota=getParamValue(request,modelAndView,"quota"); // if(null==quota) return modelAndView; String quota=request.getString("quota"); if(null==quota) return Result.failed("quota is null"); // String symbol=getParamValue(request,modelAndView,"symbol"); // if(null==symbol) return modelAndView; String symbol=request.getString("symbol"); if(null==symbol) return Result.failed("symbol is null"); // String dailyRate=getParamValue(request,modelAndView,"dailyRate"); // if(null==dailyRate) return modelAndView; String dailyRate=request.getString("dailyRate"); if(null==dailyRate) return Result.failed("dailyRate is null"); String repayment=request.getString("repayment"); // String repayment=getParamValue(request,modelAndView,"repayment"); if(null==repayment) { repayment = "1"; } String repayCycle=request.getString("repayCycle"); if(null==repayCycle) return Result.failed("repayCycle is null"); String createTime=request.getString("createTime"); if(null==createTime) return Result.failed("createTime is null"); // String repayCycle=getParamValue(request,modelAndView,"repayCycle"); // if(null==repayCycle) return modelAndView; // // String createTime=getParamValue(request,modelAndView,"createTime"); // if(null==createTime) return modelAndView; //String lendingInstitution=getParamValue(request,modelAndView,"lendingInstitution"); //if(null==lendingInstitution) return modelAndView; //Integer quotaInt=new Integer(quota); //if(checkInvalidQuota(modelAndView,symbol,quotaInt)) return modelAndView; // String img_idimg_1=getParamValue(request,modelAndView,"img_idimg_1"); // //if(null==img_idimg_1) return modelAndView; // String img_idimg_2=getParamValue(request,modelAndView,"img_idimg_2"); // //if(null==img_idimg_2) return modelAndView; // String img_idimg_3=getParamValue(request,modelAndView,"img_idimg_3"); // //if(null==img_idimg_3) return modelAndView; String img_idimg_1=request.getString("img_idimg_1"); if(null==img_idimg_1) return Result.failed("img_idimg_1 is null"); String img_idimg_2=request.getString("img_idimg_2"); if(null==img_idimg_2) return Result.failed("img_idimg_2 is null"); String img_idimg_3=request.getString("img_idimg_3"); if(null==img_idimg_3) return Result.failed("img_idimg_3 is null"); System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"); SimpleLoanOrder simpleLoanOrder=new SimpleLoanOrder(new BigDecimal(quota),symbol,id); simpleLoanOrder.setRepayCycle(new Integer(repayCycle)); simpleLoanOrder.setRepayment(new Integer(repayment)); simpleLoanOrder.setDailyRate(new BigDecimal(dailyRate)); simpleLoanOrder.setTerm(new Integer(term)); if(StringUtils.isNotBlank(img_idimg_3)) { String houseImgs=new StringBuilder(img_idimg_1).append(",").append(img_idimg_2).append(",").append(img_idimg_3).toString(); simpleLoanOrder.setHouseImgs(houseImgs); } System.out.println("-------------------------------"); try { simpleLoanOrder.setCreateTime(DATA_FORMATTER.parse(createTime)); } catch (ParseException e) { // modelAndView.addObject("code", "1"); // modelAndView.addObject("message",e.getMessage()); // return modelAndView; logger.error("error:", e); return Result.failed("1",e.getMessage()); } try { System.out.println("-------------------------------"); boolean flag=loanService.modLoanOrder(simpleLoanOrder); if(flag) { // modelAndView.addObject("message","借贷申请单修改成功!"); }else { // modelAndView.addObject("code", "1"); // modelAndView.addObject("message","借贷申请单修改失败!"); return Result.failed("1","借贷申请单修改失败!"); } }catch(Throwable e) { // modelAndView.addObject("code", "1"); // modelAndView.addObject("message","程序错误"); logger.error("error:", e); return Result.failed("1","程序错误"); } return Result.ok("借贷申请单修改成功!"); } /** * 删除借贷申请单 * @return 申请单列表 */ @RequestMapping("normal/loanadmin!delete.action") public Result deleteLoanOrder(HttpServletRequest request) { // ModelAndView modelAndView = new ModelAndView(); // String orderId=getParamValue(request,modelAndView,"orderId"); // if(null==orderId) return modelAndView; String orderId=request.getParameter("orderId"); if(null==orderId) return Result.failed("partyId is orderId"); try { loanService.deleteLoanOrder(orderId); // modelAndView.addObject("message", "操作成功"); }catch(BusinessException e) { // modelAndView.addObject("message", e.getMessage()); logger.error("delete loan order state error:", e); return Result.ok(e.getMessage()); }catch(Throwable e) { // modelAndView.addObject("message", "操作失败"); logger.error("delete loan order occur error:", e); return Result.ok("操作失败"); } // modelAndView.setViewName("redirect:/normal/loanadmin!list.action"); return Result.ok("操作成功"); } /** * 获取参数值 * @param request 请求对象 * @param modelAndView 结果对象 * @param paramName 参数名 * @return 参数值 */ private static final String getParamValue(HttpServletRequest request,ModelAndView modelAndView,String paramName) { String paramValue=request.getParameter(paramName); if(null==paramValue || (paramValue=paramValue.trim()).isEmpty()) { modelAndView.addObject("code", "1"); modelAndView.addObject("message",String.format("获取参数[%s]为空!",paramName)); return null; }else { return paramValue; } } /** * 校验借贷额度是否有效 * @param modelAndView 结果对象 * @param quota 借贷额度 * @return 是否无效 */ private final boolean checkInvalidQuota(ModelAndView modelAndView,String symbol,Integer quota) { HashMap paramMap=loanService.getParamMap(); // HashMap paramMap=(HashMap)ApplicationUtil.getHttpSession().getAttribute("paramMap"); if(null==paramMap) { modelAndView.addObject("code", "1"); modelAndView.addObject("message","从会话中获取借贷参数[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) { modelAndView.addObject("code", "1"); modelAndView.addObject("message","未找到额度最大值!"); 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) { modelAndView.addObject("code", "1"); modelAndView.addObject("message","未找到额度最小值!"); return true; } if(quotamaxQuota) { modelAndView.addObject("code", "1"); modelAndView.addObject("message","借贷额度不在允许范围内!"); return true; } return false; } }