Explorar o código

增加重新支付订单

周箭河 %!s(int64=5) %!d(string=hai) anos
pai
achega
77f7de5cc4

+ 123 - 4
src/main/java/com/ym/mec/collectfee/controller/YqPayController.java

@@ -77,11 +77,17 @@ public class YqPayController extends BaseController {
         //计划招生人数有更新,更新
         orderService.getSchoolDetail(school.getSchoolId());
 
+        Order userOrder = orderService.findOrderByStatus(order.getUserId(), 2);
+        if (userOrder != null) {
+            return failed("您已支付成功,请勿重复支付");
+        }
+
         //判断用户是否已存在订单
-        Order userOrder = orderService.findOrderByStatus(order.getUserId(), 1);
+        userOrder = orderService.findOrderByStatus(order.getUserId(), 1);
         if (userOrder != null) {
-            return failed("您有待支付的订单,请稍后重试");
+            return failed(HttpStatus.CONTINUE, "您有待支付的订单,否重新支付");
         }
+
         //1、判断已报名人数
         CourseGroupInfo courseGroupInfo = CourseGroupInfoService.get(order.getCourseId());
         if (courseGroupInfo.getRegNum().compareTo(courseGroupInfo.getPlanNum()) >= 0) {
@@ -154,7 +160,7 @@ public class YqPayController extends BaseController {
 
         //获取分佣账户
         Integer branchId = 1001;//order.getBranchId();
-        Account routingAccount = accountService.getRoutingAccount(branchId,amount);
+        Account routingAccount = accountService.getRoutingAccount(branchId, amount);
 
         order.setAccount(routingAccount.getSellerNo());
         order.setUAccount(routingAccount.getId().toString());
@@ -177,6 +183,119 @@ public class YqPayController extends BaseController {
 
 
     /**
+     * 重新支付订单
+     *
+     * @param order
+     * @return
+     * @throws Exception
+     */
+    public Object rePay(@ModelAttribute @Validated Order order) throws Exception {
+        BigDecimal amount = new BigDecimal("0");
+        School school = schoolService.get(order.getClassId());
+
+        Order userOrder = orderService.findOrderByStatus(order.getUserId(), 2);
+        if (userOrder != null) {
+            return failed("您已支付成功,请勿重复支付");
+        }
+
+        //判断用户是否已存在订单
+        userOrder = orderService.findOrderByStatus(order.getUserId(), 1);
+        if (userOrder == null) {
+            return failed("您没有支付中的订单,请勿非法请求");
+        }
+
+        CourseGroupInfo courseGroupInfo = CourseGroupInfoService.get(order.getCourseId());
+
+        //课程组价格
+        BigDecimal courseFee = courseGroupInfo.getFeeAmount();
+        amount = amount.add(courseFee);
+
+        //获取乐器的价格
+        ClassPathResource classPathResource = new ClassPathResource("instruments.json"); //解析乐器数据
+
+        BigDecimal instrumentPrice = new BigDecimal("0");//乐器价格
+        String instrumentName = "";//乐器名称
+
+        String instrumentId = order.getInstrument();
+        String jsonString = IOUtils.toString(new InputStreamReader(classPathResource.getInputStream(), "UTF-8"));
+        Instrument instrument = JSONObject.parseObject(jsonString, Instrument.class);
+
+        if (order.getInstrument() != null && !order.getInstrument().isEmpty()) {
+            instrumentPrice = new BigDecimal(instrument.getInstruments().get(instrumentId).get("referencePrice"));
+            instrumentName = (String) instrument.getInstruments().get(instrumentId).get("index") + "-" +
+                    (String) instrument.getInstruments().get(instrumentId).get("name");
+        }
+
+        //2 版本为3.0( 26),不收乐器费用,收押金800放乐器费用
+        if (courseGroupInfo.getFeeType().equals(26)) {
+            instrumentPrice = new BigDecimal("800");
+        }
+        amount = amount.add(instrumentPrice);
+
+        //辅件价格
+        String adjunctIds = order.getAdjunct();
+        BigDecimal adjunctPrice = new BigDecimal("0");//辅件价格
+        String adjunctName = "";//辅件名称
+        if (adjunctIds != null && !adjunctIds.isEmpty()) {
+            String[] adjunctIdArr = adjunctIds.split(",");
+            for (String adjunctId : adjunctIdArr) {
+                adjunctPrice = adjunctPrice.add(new BigDecimal(instrument.getAuxiliaries().get(adjunctId).get("referencePrice")));
+                adjunctName += (String) instrument.getAuxiliaries().get(adjunctId).get("name") + "|";
+            }
+        }
+        amount = amount.add(adjunctPrice);
+
+        ApplyInfo applyInfo = applyInfoService.get(order.getUserId());
+
+        order.setPoName(school.getName());
+        order.setVoicyPart(courseGroupInfo.getSubName());
+        order.setGroupId(courseGroupInfo.getId());
+        order.setAmount(amount);
+        order.setRemark(instrumentName);
+        order.setTuiFee(courseFee);
+        order.setGoodsFee(instrumentPrice);
+        order.setSdName(adjunctName + "教材|琴谱");
+        order.setSdFee(adjunctPrice);
+        order.setType(1);
+        order.setUserName(applyInfo.getName());
+
+
+        String orderNo = GenerateNum.getInstance().GenerateOrderNo(); //自己系统订单号
+        order.setOrderNo(orderNo);
+        order.setCreateTime(new Date()); //订单提交时间
+        order.setStatus(1); //订单状态
+
+        //获取分佣账户
+        int accountId = Integer.parseInt(userOrder.getUAccount());
+        Account routingAccount = accountService.get(accountId);
+
+        order.setAccount(userOrder.getAccount());
+        order.setUAccount(userOrder.getUAccount());
+
+
+        //1.关闭订单
+        HashMap<String, Object> upMap = new HashMap<>();
+        upMap.put("status",0);
+        upMap.put("oldStatus",1);
+        upMap.put("id",userOrder.getId());
+        orderService.updateByIdAndStatus(upMap);
+        //2、插入订单
+        orderService.insert(order);
+        //3、修改已报名人数
+        courseGroupInfo.setRegNum(courseGroupInfo.getRegNum() + 1);
+        CourseGroupInfoService.upByIdAndVersion(courseGroupInfo);
+        //4、修改分佣账户已收金额
+        BigDecimal HasRouting = routingAccount.getHasRouting().add(order.getAmount()).subtract(userOrder.getAmount());
+        routingAccount.setHasRouting(HasRouting);
+        accountService.upByIdAndVersion(routingAccount);
+
+        Map rqMap = orderService.getPayMap(routingAccount, order, school); //获取支付map
+
+        return succeed(rqMap);
+    }
+
+
+    /**
      * 续费支付
      *
      * @return String
@@ -228,7 +347,7 @@ public class YqPayController extends BaseController {
         String orderNo = GenerateNum.getInstance().GenerateOrderNo(); //自己系统订单号
         //获取分佣账户
         Integer branchId = 1001;//order.getBranchId();
-        Account routingAccount = accountService.getRoutingAccount(branchId,amount);
+        Account routingAccount = accountService.getRoutingAccount(branchId, amount);
 
         Order order = renewalsService.addRenewalsOrder(renewals, amount, orderNo, pickCourses, routingAccount, remark);