Browse Source

add 6.1考级增加支付接口

周箭河 4 năm trước cách đây
mục cha
commit
3473e66348

+ 14 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreePayDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.auth.api.entity.SysUser;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
@@ -19,13 +20,13 @@ public class DegreePayDto {
     private Integer theoryLevel;
 
     @ApiModelProperty(value = "vip 1v1")
-    private boolean vip1v1;
+    private boolean vip1v1=false;
 
     @ApiModelProperty(value = "vip 1v2")
-    private Boolean vip1v2;
+    private Boolean vip1v2=false;
 
     @ApiModelProperty(value = "乐理课程")
-    private Boolean theoryCourse;
+    private Boolean theoryCourse = false;
 
     @ApiModelProperty(value = "支付金额", required = true)
     private BigDecimal amount;
@@ -36,6 +37,8 @@ public class DegreePayDto {
     @ApiModelProperty(value = "重新支付", required = true)
     private Boolean rePay = false;
 
+    private SysUser user;
+
     public Integer getSubject() {
         return subject;
     }
@@ -123,4 +126,12 @@ public class DegreePayDto {
     public void setOrganId(Integer organId) {
         this.organId = organId;
     }
+
+    public SysUser getUser() {
+        return user;
+    }
+
+    public void setUser(SysUser user) {
+        this.user = user;
+    }
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/GroupType.java

@@ -14,7 +14,8 @@ public enum GroupType implements BaseEnum<String, GroupType> {
 	OUTORDER("外部订单"),
 	SUBJECT_CHANGE("声部更换"),
 	MAINTENANCE("乐保"),
-	REPLACEMENT("乐器置换");
+	REPLACEMENT("乐器置换"),
+	DEGREE("6.1考级活动");
 
 	private String desc;
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java

@@ -23,7 +23,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	SUBJECT_CHANGE("SUBJECT_CHANGE","声部更换"),
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
 	MAINTENANCE("MAINTENANCE","乐保"),
-	REPLACEMENT("REPLACEMENT","乐器置换");
+	REPLACEMENT("REPLACEMENT","乐器置换"),
+	DEGREE("DEGREE","6.1考级活动");
 
 
 	private String code;

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayReserveService.java

@@ -3,13 +3,12 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
 import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ChildrenReserveQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
-import java.util.List;
 import java.util.Map;
 
 public interface ChildrenDayReserveService extends BaseService<Integer, ChildrenDayReserve> {
@@ -18,9 +17,10 @@ public interface ChildrenDayReserveService extends BaseService<Integer, Children
      * 填加占位
      *
      * @param user
+     * @param status
      * @return
      */
-    ChildrenDayReserve addReserve(SysUser user);
+    ChildrenDayReserve addReserve(SysUser user, YesOrNoEnum status);
 
 
     /**

+ 135 - 94
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java

@@ -6,12 +6,11 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.ChildrenReserveQueryInfo;
-import com.ym.mec.biz.service.ChildrenDayDegreeDetailService;
-import com.ym.mec.biz.service.ChildrenDayReserveService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
@@ -44,6 +43,12 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
     private StudentPaymentOrderService studentPaymentOrderService;
     @Autowired
     private SysConfigDao sysConfigDao;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
+    @Autowired
+    private PayService payService;
 
     @Override
     public BaseDAO<Integer, ChildrenDayReserve> getDAO() {
@@ -51,7 +56,7 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
     }
 
     @Override
-    public ChildrenDayReserve addReserve(SysUser user) {
+    public ChildrenDayReserve addReserve(SysUser user, YesOrNoEnum status) {
         Date nowTime = new Date();
         String startTimeStr = sysConfigDao.findConfigValue("children_day_start_time");
         Date startTime = DateUtil.stringToDate(startTimeStr);
@@ -68,11 +73,12 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
         if (hasOne != null) {
             throw new BizException("您已预报名");
         }
+        studentDao.lockUser(user.getId());
         MusicGroup studentLastMusicGroup = musicGroupDao.getStudentLastMusicGroup(user.getId());
         ChildrenDayReserve childrenDayReserve = new ChildrenDayReserve();
         childrenDayReserve.setUserId(user.getId());
         childrenDayReserve.setOrganId(user.getOrganId());
-        childrenDayReserve.setIsReserve(YesOrNoEnum.YES);
+        childrenDayReserve.setIsReserve(status);
         if (studentLastMusicGroup != null) {
             childrenDayReserve.setCooperationOrganId(studentLastMusicGroup.getCooperationOrganId());
             childrenDayReserve.setMusicGroupId(studentLastMusicGroup.getId());
@@ -170,102 +176,137 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
             throw new BizException("您已购买过VIP 1V2课程,请勿重复选择");
         }
 
-        if (degreePayDto.getVip1v2() && detailTypes.contains(5)) {
+        if (degreePayDto.getTheoryCourse() && detailTypes.contains(5)) {
             throw new BizException("您已购买过乐理考级专项训练课,请勿重复选择");
         }
-        //检查考级等级是否重复
+        //检查器乐考级等级是否重复
         if (degreePayDto.getMusicGradeLevel() != null) {
+            if (degreePayDto.getSubject() == null) {
+                throw new BizException("请选择考级声部");
+            }
+            List<ChildrenDayDegreeDetail> hasList = details.stream().filter(e -> e.getType().equals(1)).filter(e -> e.getSubjectId().equals(degreePayDto.getSubject()))
+                    .filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).collect(Collectors.toList());
+            if (hasList.size() > 0) {
+                throw new BizException("您已报考同声部同等级,请勿重复报考");
+            }
+        }
+
+        //检查乐理考级等级是否重复
+        if (degreePayDto.getTheoryLevel() != null) {
+            List<ChildrenDayDegreeDetail> hasList = details.stream().filter(e -> e.getType().equals(2))
+                    .filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).collect(Collectors.toList());
+            if (hasList.size() > 0) {
+                throw new BizException("您已报考同等级乐理,请勿重复报考");
+            }
+        }
 
+        ChildrenDayReserve userReserve = this.getUserReserve(degreePayDto.getUserId());
+
+        if (userReserve == null) {
+            this.addReserve(degreePayDto.getUser(), YesOrNoEnum.NO);
         }
+
         //获取课程的价格
         OrganizationDegreeCourseFee courseFee = organizationDegreeCourseFeeDao.getByOrganId(degreePayDto.getOrganId());
-//
-//
-//        Goods goods = goodsDao.get(replacementInstrumentActivity.getInstrumentsId());
-//        BigDecimal orderAmount = goods.getGroupPurchasePrice();
-//        BigDecimal amount = replacementPayDto.getAmount(); //扣除余额之前的金额
-//        if (amount.compareTo(orderAmount) != 0) {
-//            throw new BizException("商品价格不符");
-//        }
-//
-//        String channelType = "";
-//        Date nowDate = new Date();
-//
-//        BigDecimal balance = BigDecimal.ZERO;
-//        if (replacementPayDto.getUseBalance() && amount.compareTo(BigDecimal.ZERO) > 0) {
-//            SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
-//            if (userCashAccount == null) {
-//                throw new BizException("用户账户找不到");
-//            }
-//            if (userCashAccount.getBalance() != null && userCashAccount.getBalance().compareTo(BigDecimal.ZERO) > 0) {
-//                balance = amount.compareTo(userCashAccount.getBalance()) >= 0 ? userCashAccount.getBalance() : amount;
-//                amount = amount.subtract(balance);
-//                sysUserCashAccountService.updateBalance(userId, balance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐保购买");
-//            }
-//        }
-//
-//        CooperationOrgan cooperationOrgan = cooperationOrganDao.get(replacementInstrumentActivity.getCooperationOrganId());
-//
-//        String orderNo = idGeneratorService.generatorId("payment") + "";
-//        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
-//
-//        studentPaymentOrder.setPaymentChannel("BALANCE");
-//        studentPaymentOrder.setUserId(userId);
-//        studentPaymentOrder.setGroupType(GroupType.REPLACEMENT);
-//        studentPaymentOrder.setOrderNo(orderNo);
-//        studentPaymentOrder.setType(OrderTypeEnum.REPLACEMENT);
-//        studentPaymentOrder.setExpectAmount(orderAmount);
-//        studentPaymentOrder.setActualAmount(amount);
-//        studentPaymentOrder.setBalancePaymentAmount(balance);
-//        studentPaymentOrder.setStatus(DealStatusEnum.ING);
-//        studentPaymentOrder.setMusicGroupId(replacementInstrumentActivity.getId().toString());
-//        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
-//        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
-//        studentPaymentOrder.setOrganId(cooperationOrgan.getOrganId());
-//        studentPaymentOrder.setRoutingOrganId(cooperationOrgan.getOrganId());
-//        studentPaymentOrder.setCreateTime(nowDate);
-//        studentPaymentOrder.setUpdateTime(nowDate);
-//        studentPaymentOrderService.insert(studentPaymentOrder);
-//        //修改支付状态
-//        replacementInstrumentActivity.setPayStatus(1);
-//        replacementInstrumentActivity.setUpdateTime(nowDate);
-//        replacementInstrumentActivityDao.update(replacementInstrumentActivity);
-//
-//        studentPaymentOrder.setVersion(0);
-//        if (amount.compareTo(BigDecimal.ZERO) == 0) {
-//            studentPaymentRouteOrderService.addRouteOrder(orderNo, cooperationOrgan.getOrganId(), balance);
-//            Map<String, String> notifyMap = new HashMap<>();
-//            notifyMap.put("tradeState", "1");
-//            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
-//            notifyMap.put("channelType", channelType);
-//            notifyMap.put("orderNo", "");
-//            studentPaymentOrderService.updateOrder(notifyMap);
-//            return notifyMap;
-//        }
-//
-//        String orderSubject = "乐器置换";
-//        String receiver = "replacement";
-//
-//        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
-//
-//        Map payMap = payService.getPayMap(
-//                amount,
-//                balance,
-//                orderNo,
-//                baseApiUrl + "/api-student/studentOrder/notify",
-//                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
-//                orderSubject,
-//                orderSubject,
-//                cooperationOrgan.getOrganId(),
-//                receiver
-//        );
-//
-//        studentPaymentOrder.setOrganId(cooperationOrgan.getOrganId());
-//        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
-//        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
-//        studentPaymentOrder.setUpdateTime(nowDate);
-//        studentPaymentOrderService.update(studentPaymentOrder);
-        Map<Object, Object> payMap = new HashMap<>();
+        List<DegreeLevelFee> degreeLevelFees = degreeLevelFeeDao.getAll();
+
+        //订单总金额
+        BigDecimal orderAmount = BigDecimal.ZERO;
+
+        //器乐考级费用
+        if (degreePayDto.getMusicGradeLevel() != null) {
+            BigDecimal gradeFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).map(DegreeLevelFee::getGrade).reduce(BigDecimal.ZERO, BigDecimal::add);
+            orderAmount = orderAmount.add(gradeFee);
+        }
+
+        //乐理考级费用
+        if (degreePayDto.getTheoryLevel() != null) {
+            BigDecimal theoryLevelFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getTheoryLevel())).map(DegreeLevelFee::getTheory).reduce(BigDecimal.ZERO, BigDecimal::add);
+            orderAmount = orderAmount.add(theoryLevelFee);
+        }
+
+        //VIP 1v1 1v2费用
+        if (degreePayDto.getVip1v1()) {
+            BigDecimal vip1v1Fee = courseFee.getVip1v1();
+            orderAmount = orderAmount.add(vip1v1Fee);
+        }
+
+        //VIP 1v2费用
+        if (degreePayDto.getVip1v2()) {
+            BigDecimal vip1v2Fee = courseFee.getVip1v2();
+            orderAmount = orderAmount.add(vip1v2Fee);
+        }
+
+        //VIP 乐理课费用
+        if (degreePayDto.getTheoryCourse()) {
+            BigDecimal theoryFee = courseFee.getTheory();
+            orderAmount = orderAmount.add(theoryFee);
+        }
+
+        if (orderAmount.compareTo(degreePayDto.getAmount()) != 0) {
+            throw new BizException("价格不符,请核查");
+        }
+
+
+        String channelType = "";
+        Date nowDate = new Date();
+
+        BigDecimal balance = BigDecimal.ZERO;
+
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+
+        studentPaymentOrder.setPaymentChannel("BALANCE");
+        studentPaymentOrder.setUserId(degreePayDto.getUserId());
+        studentPaymentOrder.setGroupType(GroupType.DEGREE);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.DEGREE);
+        studentPaymentOrder.setExpectAmount(orderAmount);
+        studentPaymentOrder.setActualAmount(orderAmount);
+        studentPaymentOrder.setBalancePaymentAmount(balance);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
+        studentPaymentOrder.setOrganId(degreePayDto.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(degreePayDto.getOrganId());
+        studentPaymentOrder.setCreateTime(nowDate);
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+
+        studentPaymentOrder.setVersion(0);
+        if (orderAmount.compareTo(BigDecimal.ZERO) == 0) {
+            studentPaymentRouteOrderService.addRouteOrder(orderNo, degreePayDto.getOrganId(), balance);
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return notifyMap;
+        }
+
+        String orderSubject = "6.1考级活动";
+        String receiver = "degree";
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        Map payMap = payService.getPayMap(
+                orderAmount,
+                balance,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                orderSubject,
+                orderSubject,
+                degreePayDto.getOrganId(),
+                receiver
+        );
+
+        studentPaymentOrder.setOrganId(degreePayDto.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
         return payMap;
     }
 }

+ 3 - 8
mec-student/src/main/java/com/ym/mec/student/controller/ChildrenDayController.java

@@ -5,21 +5,15 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dto.DegreeFeeDto;
 import com.ym.mec.biz.dal.dto.DegreePayDto;
-import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
 import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
-import com.ym.mec.biz.dal.entity.ReplacementInstrumentActivity;
-import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
-import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.ChildrenDayDegreeDetailService;
 import com.ym.mec.biz.service.ChildrenDayReserveService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
-import com.ym.mec.util.idcard.IdcardValidator;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -49,7 +43,7 @@ public class ChildrenDayController extends BaseController {
         if (Objects.isNull(user)) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(childrenDayReserveService.addReserve(user));
+        return succeed(childrenDayReserveService.addReserve(user, YesOrNoEnum.YES));
     }
 
     @ApiOperation(value = "获取占位信息")
@@ -84,6 +78,7 @@ public class ChildrenDayController extends BaseController {
 
         degreePayDto.setUserId(sysUser.getId());
         degreePayDto.setOrganId(sysUser.getOrganId());
+        degreePayDto.setUser(sysUser);
         List<ChildrenDayDegreeDetail> ingDetails = childrenDayDegreeDetailService.getByUserIdAndStatus(sysUser.getId(), 1);
         if (ingDetails.size() > 0) {
             return failed(HttpStatus.CONTINUE, "您有待支付的订单");