浏览代码

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

yonge 4 年之前
父节点
当前提交
ce546b24fc

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeRegistrationDao.java

@@ -14,4 +14,7 @@ public interface DegreeRegistrationDao extends BaseDAO<Integer, DegreeRegistrati
     DegreeRegistration getLock(@Param("id") Integer id);
 
     DegreeRegistration getTotalAmount(Map<String, Object> params);
-}
+
+    DegreeRegistration getWithUserIdAndActivityTag(@Param("userId") Integer userId,
+                                                   @Param("activityTag") String activityTag);
+}

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreeRegistrationActivityDto.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.DegreeRegistration;
+
+import java.util.Map;
+
+/**
+ * @Author qnc99
+ * @Date 2020/12/3 0003
+ */
+public class DegreeRegistrationActivityDto extends DegreeRegistration {
+
+    private Map<CourseSchedule.CourseScheduleType, Integer> additionCourseInfo;
+
+    public Map<CourseSchedule.CourseScheduleType, Integer> getAdditionCourseInfo() {
+        return additionCourseInfo;
+    }
+
+    public void setAdditionCourseInfo(Map<CourseSchedule.CourseScheduleType, Integer> additionCourseInfo) {
+        this.additionCourseInfo = additionCourseInfo;
+    }
+}

+ 29 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java

@@ -14,6 +14,8 @@ public class DegreeRegistration {
     @ApiModelProperty(value = "零星支付id",required = true)
     private Integer sporadicId;
 
+    private Integer userId;
+
     /**
      * 订单编号
      */
@@ -136,6 +138,16 @@ public class DegreeRegistration {
 
     private Integer organId;
 
+    private String activityTag;
+
+    public Boolean getRepay() {
+        return isRepay;
+    }
+
+    public void setRepay(Boolean repay) {
+        isRepay = repay;
+    }
+
     public Integer getId() {
         return id;
     }
@@ -144,6 +156,22 @@ public class DegreeRegistration {
         this.id = id;
     }
 
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getActivityTag() {
+        return activityTag;
+    }
+
+    public void setActivityTag(String activityTag) {
+        this.activityTag = activityTag;
+    }
+
     public Integer getSporadicId() {
         return sporadicId;
     }
@@ -319,4 +347,4 @@ public class DegreeRegistration {
     public void setOrganId(Integer organId) {
         this.organId = organId;
     }
-}
+}

+ 80 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroupSellPrice.java

@@ -23,6 +23,22 @@ public class PracticeGroupSellPrice {
 
     private BigDecimal twiceQuartActivityPrice;
 
+    private BigDecimal vipOneStudentTwelveCourseOriginalPriceWithNewUser;
+
+    private BigDecimal vipOneStudentTwelveCourseActivityPriceWithNewUser;
+
+    private BigDecimal vipOneStudentTwelveCourseOriginalPriceWithOldUser;
+
+    private BigDecimal vipOneStudentTwelveCourseActivityPriceWithOldUser;
+
+    private BigDecimal highOnlineTenCourseOriginalPriceWithNewUser;
+
+    private BigDecimal highOnlineTenCourseActivityPriceWithNewUser;
+
+    private BigDecimal highOnlineTenCourseOriginalPriceWithOldUser;
+
+    private BigDecimal highOnlineTenCourseActivityPriceWithOldUser;
+
     private Date createTime;
 
     private Date updateTime;
@@ -98,4 +114,68 @@ public class PracticeGroupSellPrice {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public BigDecimal getVipOneStudentTwelveCourseOriginalPriceWithNewUser() {
+        return vipOneStudentTwelveCourseOriginalPriceWithNewUser;
+    }
+
+    public void setVipOneStudentTwelveCourseOriginalPriceWithNewUser(BigDecimal vipOneStudentTwelveCourseOriginalPriceWithNewUser) {
+        this.vipOneStudentTwelveCourseOriginalPriceWithNewUser = vipOneStudentTwelveCourseOriginalPriceWithNewUser;
+    }
+
+    public BigDecimal getVipOneStudentTwelveCourseActivityPriceWithNewUser() {
+        return vipOneStudentTwelveCourseActivityPriceWithNewUser;
+    }
+
+    public void setVipOneStudentTwelveCourseActivityPriceWithNewUser(BigDecimal vipOneStudentTwelveCourseActivityPriceWithNewUser) {
+        this.vipOneStudentTwelveCourseActivityPriceWithNewUser = vipOneStudentTwelveCourseActivityPriceWithNewUser;
+    }
+
+    public BigDecimal getVipOneStudentTwelveCourseOriginalPriceWithOldUser() {
+        return vipOneStudentTwelveCourseOriginalPriceWithOldUser;
+    }
+
+    public void setVipOneStudentTwelveCourseOriginalPriceWithOldUser(BigDecimal vipOneStudentTwelveCourseOriginalPriceWithOldUser) {
+        this.vipOneStudentTwelveCourseOriginalPriceWithOldUser = vipOneStudentTwelveCourseOriginalPriceWithOldUser;
+    }
+
+    public BigDecimal getVipOneStudentTwelveCourseActivityPriceWithOldUser() {
+        return vipOneStudentTwelveCourseActivityPriceWithOldUser;
+    }
+
+    public void setVipOneStudentTwelveCourseActivityPriceWithOldUser(BigDecimal vipOneStudentTwelveCourseActivityPriceWithOldUser) {
+        this.vipOneStudentTwelveCourseActivityPriceWithOldUser = vipOneStudentTwelveCourseActivityPriceWithOldUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseOriginalPriceWithNewUser() {
+        return highOnlineTenCourseOriginalPriceWithNewUser;
+    }
+
+    public void setHighOnlineTenCourseOriginalPriceWithNewUser(BigDecimal highOnlineTenCourseOriginalPriceWithNewUser) {
+        this.highOnlineTenCourseOriginalPriceWithNewUser = highOnlineTenCourseOriginalPriceWithNewUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseActivityPriceWithNewUser() {
+        return highOnlineTenCourseActivityPriceWithNewUser;
+    }
+
+    public void setHighOnlineTenCourseActivityPriceWithNewUser(BigDecimal highOnlineTenCourseActivityPriceWithNewUser) {
+        this.highOnlineTenCourseActivityPriceWithNewUser = highOnlineTenCourseActivityPriceWithNewUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseOriginalPriceWithOldUser() {
+        return highOnlineTenCourseOriginalPriceWithOldUser;
+    }
+
+    public void setHighOnlineTenCourseOriginalPriceWithOldUser(BigDecimal highOnlineTenCourseOriginalPriceWithOldUser) {
+        this.highOnlineTenCourseOriginalPriceWithOldUser = highOnlineTenCourseOriginalPriceWithOldUser;
+    }
+
+    public BigDecimal getHighOnlineTenCourseActivityPriceWithOldUser() {
+        return highOnlineTenCourseActivityPriceWithOldUser;
+    }
+
+    public void setHighOnlineTenCourseActivityPriceWithOldUser(BigDecimal highOnlineTenCourseActivityPriceWithOldUser) {
+        this.highOnlineTenCourseActivityPriceWithOldUser = highOnlineTenCourseActivityPriceWithOldUser;
+    }
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java

@@ -39,6 +39,8 @@ public class Student extends SysUser {
 
 	private String teacherName;
 
+	private Boolean isNewUser;
+
 	public Student(Integer userId, String subjectIdList) {
 		this.userId = userId;
 		this.subjectIdList = subjectIdList;
@@ -46,6 +48,14 @@ public class Student extends SysUser {
 		this.serviceTag = 1;
 	}
 
+	public Boolean getIsNewUser() {
+		return isNewUser;
+	}
+
+	public void setIsNewUser(Boolean isNewUser) {
+		this.isNewUser = isNewUser;
+	}
+
 	public String getSubjectNames() {
 		return subjectNames;
 	}

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

@@ -23,8 +23,8 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
     TRAINING_MIX("TRAINING_MIX", "集训合奏课"),
     HIGH_ONLINE("HIGH_ONLINE", "网络基础训练课"),
     MUSIC_NETWORK("MUSIC_NETWORK", "乐团网管课"),
-    CLASSROOM("CLASSROOM", "课堂课");
-
+    CLASSROOM("CLASSROOM", "课堂课"),
+	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名");
 
     private String code;
 

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

@@ -20,7 +20,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	GOODS_SELL("GOODS_SELL","商品销售"),
 	OUTORDER("OUTORDER", "外部订单"),
 	REPAIR("REPAIR","乐器维修"),
-	SUBJECT_CHANGE("SUBJECT_CHANGE","声部更换");
+	SUBJECT_CHANGE("SUBJECT_CHANGE","声部更换"),
+	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名");
 
 
 	private String code;

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/DegreeRegistrationService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.dto.PageInfoDegree;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.entity.DegreeRegistration;
@@ -11,9 +12,11 @@ import java.util.Map;
 
 public interface DegreeRegistrationService extends BaseService<Integer, DegreeRegistration> {
 
-    Map pay(DegreeRegistration degreeRegistration) throws Exception;
+    String ACTIVITY_TAG = "DEGREE_REGISTRATION_2020_12";
 
-    Boolean updateStatus(Integer id , Integer status,String orderNo);
+    Map pay(DegreeRegistrationActivityDto degreeRegistration) throws Exception;
+
+    Boolean updateStatus(StudentPaymentOrder order);
 
     PageInfoDegree<DegreeRegistration> getPageList(DegreeQueryInfo queryInfo);
 }

+ 102 - 37
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -1,23 +1,20 @@
 package com.ym.mec.biz.service.impl;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dto.PageInfoDegree;
-import com.ym.mec.biz.dal.entity.DegreeRegistration;
-import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
@@ -53,7 +50,13 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     private PayService payService;
 
     @Autowired
-    private OrganizationDao organizationDao;
+    private PracticeGroupSellPriceDao practiceGroupSellPriceDao;
+
+    @Autowired
+    private StudentDao studentDao;
+
+    @Autowired
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 
     @Override
     public BaseDAO<Integer, DegreeRegistration> getDAO() {
@@ -61,8 +64,12 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Map pay(DegreeRegistration degreeRegistration) throws Exception {
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public Map pay(DegreeRegistrationActivityDto degreeRegistration) throws Exception {
+        Student student = studentDao.getLocked(degreeRegistration.getUserId());
+
+        DegreeRegistration degree = degreeRegistrationDao.getWithUserIdAndActivityTag(degreeRegistration.getUserId(), ACTIVITY_TAG);
+
         Date nowDate = new Date();
         //获取收费项价格
         SporadicChargeInfo chargeInfo = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
@@ -75,20 +82,11 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             throw new BizException("报考级别为“" + chargeInfo.getTitle() + "”且乐理级别是“免考”时,必须上传证书");
         }
 
-        List<Organization> organs = organizationDao.findAllOrgans();
-        Integer organId = chargeInfo.getOrganId();
-        for (Organization organ : organs) {
-            if (degreeRegistration.getCity().contains(organ.getName())) {
-                organId = organ.getId();
-                break;
-            }
-        }
-
         String orderNo = idGeneratorService.generatorId("payment") + "";
 
+        degreeRegistration.setActivityTag(ACTIVITY_TAG);
         degreeRegistration.setLevel(chargeInfo.getTitle());
         degreeRegistration.setOrderNo(orderNo);
-        degreeRegistration.setOrganId(organId);
         BigDecimal theoryMoney = BigDecimal.ZERO;
         switch (degreeRegistration.getTheoryLevel()) {
             case "一级":
@@ -109,7 +107,6 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 throw new BizException("您选择的乐理级别不存在,请核对");
         }
         degreeRegistration.setTheoryMoney(theoryMoney);
-        DegreeRegistration degree = degreeRegistrationDao.findByMobileAndSporadicId(degreeRegistration.getMobile(), degreeRegistration.getSporadicId());
         if (degree == null) {
             degreeRegistration.setMoney(chargeInfo.getAmount());
             degreeRegistration.setStatus(1);
@@ -117,7 +114,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             degreeRegistration.setUpdateTime(nowDate);
             degreeRegistrationDao.insert(degreeRegistration);
         } else if (degree.getStatus().equals(2)) {
-            throw new BizException("您本次已报名,请勿重复报名");
+            //throw new BizException("您本次已报名,请勿重复报名");
         } else {
             degreeRegistration.setId(degree.getId());
             degreeRegistration.setStatus(1);
@@ -125,13 +122,62 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             degreeRegistration.setUpdateTime(nowDate);
             degreeRegistrationDao.update(degreeRegistration);
         }
-        degreeRegistrationDao.getLock(degreeRegistration.getId());
 
+        BigDecimal additionCoursePrice = new BigDecimal("0");
+        Map<CourseSchedule.CourseScheduleType, Integer> typeCourseTime = new HashMap<>();
+        if(Objects.nonNull(degreeRegistration.getAdditionCourseInfo())){
+            Map<CourseSchedule.CourseScheduleType, Integer> additionCourseInfo = degreeRegistration.getAdditionCourseInfo();
+            PracticeGroupSellPrice practiceGroupSellPrice = practiceGroupSellPriceDao.get(degreeRegistration.getId());
+            if(Objects.isNull(practiceGroupSellPrice)){
+                throw new BizException("该分部暂未参与此活动");
+            }
+            BigDecimal practiceUnitPrice = practiceGroupSellPrice.getOnceActivityPrice(),
+                    vipUnitPrice = new BigDecimal("0"), highUnitPrice;
+            if(student.getIsNewUser()){
+                vipUnitPrice = practiceGroupSellPrice.getVipOneStudentTwelveCourseActivityPriceWithNewUser();
+                highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseOriginalPriceWithNewUser();
+                if(!additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.VIP)){
+                    additionCourseInfo.remove(CourseSchedule.CourseScheduleType.PRACTICE);
+                }
+                boolean vipMoreThan2 = additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.VIP)&&additionCourseInfo.get(CourseSchedule.CourseScheduleType.VIP)>=2;
+                if(vipMoreThan2){
+                    degreeRegistration.setMoney(BigDecimal.ZERO);
+                    highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseActivityPriceWithNewUser();
+
+                }
+                if(vipMoreThan2&&additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.HIGH)){
+                    degreeRegistration.setTheoryMoney(BigDecimal.ZERO);
+                }
+            }else{
+                highUnitPrice = practiceGroupSellPrice.getHighOnlineTenCourseActivityPriceWithOldUser();
+                if(!additionCourseInfo.containsKey(CourseSchedule.CourseScheduleType.HIGH)){
+                    additionCourseInfo.remove(CourseSchedule.CourseScheduleType.PRACTICE);
+                }
+            }
+            for (Map.Entry<CourseSchedule.CourseScheduleType, Integer> courseScheduleTypeIntegerEntry : additionCourseInfo.entrySet()) {
+                BigDecimal courseTime = new BigDecimal(courseScheduleTypeIntegerEntry.getValue());
+                switch (courseScheduleTypeIntegerEntry.getKey()){
+                    case VIP:
+                        additionCoursePrice = additionCoursePrice.add(vipUnitPrice.multiply(courseTime));
+                        typeCourseTime.put(courseScheduleTypeIntegerEntry.getKey(), courseScheduleTypeIntegerEntry.getValue()*12);
+                        break;
+                    case PRACTICE:
+                        additionCoursePrice = additionCoursePrice.add(practiceUnitPrice.multiply(courseTime));
+                        typeCourseTime.put(courseScheduleTypeIntegerEntry.getKey(), courseScheduleTypeIntegerEntry.getValue()*12);
+                        break;
+                    case HIGH:
+                        additionCoursePrice = additionCoursePrice.add(highUnitPrice.multiply(courseTime));
+                        typeCourseTime.put(courseScheduleTypeIntegerEntry.getKey(), courseScheduleTypeIntegerEntry.getValue()*10);
+                        break;
+                }
+            }
+        }
 
-        BigDecimal amount = chargeInfo.getAmount();
+        BigDecimal amount = degreeRegistration.getMoney();
         amount = amount.add(theoryMoney);
+        amount = amount.add(additionCoursePrice);
 
-        OrderTypeEnum type = OrderTypeEnum.SPORADIC;
+        OrderTypeEnum type = OrderTypeEnum.DEGREE_REGISTRATION;
 
         Integer userId = degreeRegistration.getId();
         String channelType = "";
@@ -144,8 +190,8 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         studentPaymentOrder.setActualAmount(amount);
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
         studentPaymentOrder.setMusicGroupId(degreeRegistration.getSporadicId().toString());
-        studentPaymentOrder.setOrganId(organId);
-        studentPaymentOrder.setRoutingOrganId(organId);
+        studentPaymentOrder.setOrganId(degreeRegistration.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(degreeRegistration.getOrganId());
         if (theoryMoney.compareTo(BigDecimal.ZERO) > 0) {
             studentPaymentOrder.setMemo("乐理" + degreeRegistration.getTheoryLevel() + ",费用:" + theoryMoney);
         }
@@ -162,6 +208,18 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
             return notifyMap;
         }
 
+        if(BigDecimal.ZERO.compareTo(additionCoursePrice)>0){
+            StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+            studentPaymentOrderDetail.setType(OrderDetailTypeEnum.DEGREE_REGISTRATION);
+            studentPaymentOrderDetail.setGoodsIdList(JSON.toJSONString(typeCourseTime));
+            studentPaymentOrderDetail.setPrice(additionCoursePrice);
+            studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
+            studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+            studentPaymentOrderDetail.setCreateTime(nowDate);
+            studentPaymentOrderDetail.setUpdateTime(nowDate);
+            studentPaymentOrderDetailDao.insert(studentPaymentOrderDetail);
+        }
+
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
 
         String receiver = "kjRegister";
@@ -173,11 +231,11 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 chargeInfo.getDetail(),
                 chargeInfo.getDetail(),
-                organId,
+                degreeRegistration.getOrganId(),
                 receiver
         );
 
-        studentPaymentOrder.setOrganId(organId);
+        studentPaymentOrder.setOrganId(degreeRegistration.getOrganId());
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
         studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
         studentPaymentOrder.setUpdateTime(nowDate);
@@ -186,15 +244,22 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
     }
 
     @Override
-    public Boolean updateStatus(Integer id, Integer status, String orderNo) {
-        DegreeRegistration degree = degreeRegistrationDao.getLock(id);
+    public Boolean updateStatus(StudentPaymentOrder studentPaymentOrder) {
+        DegreeRegistration degree = degreeRegistrationDao.getLock(studentPaymentOrder.getUserId());
         if (degree == null || degree.getStatus().equals(2)) {
             return true;
         }
-        StudentPaymentOrder order = studentPaymentOrderService.findOrderByOrderNo(orderNo);
-        degree.setOrderNo(orderNo);
-        degree.setTransNo(order.getTransNo());
-        degree.setStatus(status);
+        degree.setOrderNo(studentPaymentOrder.getOrderNo());
+        degree.setTransNo(studentPaymentOrder.getTransNo());
+        switch (studentPaymentOrder.getStatus()){
+            case SUCCESS:
+                degree.setStatus(2);
+                break;
+            case FAILED:
+            case CLOSE:
+                degree.setStatus(0);
+                break;
+        }
         degree.setUpdateTime(new Date());
         if (degreeRegistrationDao.update(degree) <= 0) {
             throw new BizException("更新支付状态失败");

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java

@@ -113,7 +113,7 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
             } else if (info.getChargeType().getCode() == 9) { //零星收费账户充值
                 sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值", studentPaymentOrder.getTransNo());
             } else if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
-                degreeRegistrationService.updateStatus(studentPaymentOrder.getUserId(), 2, studentPaymentOrder.getOrderNo());
+                degreeRegistrationService.updateStatus(studentPaymentOrder);
                 return true;
             } else {
                 //插入交易明细
@@ -164,7 +164,7 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
         }
         if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
             if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
-                degreeRegistrationService.updateStatus(studentPaymentOrder.getUserId(), 0, studentPaymentOrder.getOrderNo());
+                degreeRegistrationService.updateStatus(studentPaymentOrder);
                 return true;
             }
 

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -59,6 +59,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private SysUserCashAccountService sysUserCashAccountService;
     @Autowired
     private SubjectChangeService subjectChangeService;
+    @Autowired
+    private DegreeRegistrationService degreeRegistrationService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -293,6 +295,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             studentRepairService.goodsSellOrderCallback(order);
         } else if (order.getType().equals(OrderTypeEnum.SUBJECT_CHANGE)) {
             subjectChangeService.orderCallback(order);
+        } else if (order.getType().equals(OrderTypeEnum.DEGREE_REGISTRATION)) {
+            degreeRegistrationService.updateStatus(order);
         }
     }
 

+ 18 - 4
mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml

@@ -5,6 +5,7 @@
         <!--@mbg.generated-->
         <!--@Table degree_registration-->
         <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="user_id_" property="userId"/>
         <result column="sporadic_id_" jdbcType="INTEGER" property="sporadicId"/>
         <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
         <result column="order_no_" jdbcType="VARCHAR" property="orderNo"/>
@@ -25,6 +26,7 @@
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
         <result column="status_" jdbcType="TINYINT" property="status"/>
+        <result column="activity_tag_" property="activityTag"/>
     </resultMap>
 
     <select id="get" parameterType="java.lang.Integer" resultMap="DegreeRegistration">
@@ -121,22 +123,25 @@
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration"
             useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into degree_registration (sporadic_id_,organ_id_,order_no_, name_, gender_,
+        insert into degree_registration (user_id_,sporadic_id_,organ_id_,order_no_, name_, gender_,
         idcard_, city_, school_,
         subject_,level_, theory_level_,theory_money_, theory_cert_,mobile_,
         money_, memo_, create_time_,
-        update_time_, status_)
-        values (#{sporadicId,jdbcType=INTEGER},#{organId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
+        update_time_, status_, activity_tag_)
+        values (#{userId},#{sporadicId,jdbcType=INTEGER},#{organId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
         #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR},
         #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR},
         #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL},
         #{theoryCert,jdbcType=VARCHAR},#{mobile,jdbcType=VARCHAR},#{money,jdbcType=DECIMAL}, #{memo,jdbcType=VARCHAR},
-        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT})
+        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT}, #{activityTag})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
         <!--@mbg.generated-->
         update degree_registration
         <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
             <if test="organId != null">
                 organ_id_ = #{organId,jdbcType=INTEGER},
             </if>
@@ -197,6 +202,9 @@
             <if test="status != null">
                 status_ = #{status,jdbcType=INTEGER},
             </if>
+            <if test="activityTag != null">
+                activity_tag_ = #{activityTag},
+            </if>
         </set>
         where id_ = #{id,jdbcType=INTEGER}
     </update>
@@ -214,4 +222,10 @@
         WHERE id_ = #{id} FOR
         UPDATE
     </select>
+
+    <select id="getWithUserIdAndActivityTag" resultMap="DegreeRegistration">
+        select *
+        from degree_registration
+        where user_id_ = #{userId} AND activity_tag_=#{activityTag}
+    </select>
 </mapper>

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/PracticeGroupSellPriceMapper.xml

@@ -11,6 +11,14 @@
 		<result column="twice_original_price" property="twiceOriginalPrice" />
 		<result column="twice_activity_price" property="twiceActivityPrice" />
 		<result column="twice_quart_activity_price_" property="twiceQuartActivityPrice" />
+		<result column="vip_one_student_twelve_course_original_price_with_new_user" property="vipOneStudentTwelveCourseOriginalPriceWithNewUser" />
+		<result column="vip_one_student_twelve_course_activity_price_with_new_user" property="vipOneStudentTwelveCourseActivityPriceWithNewUser" />
+		<result column="vip_one_student_twelve_course_original_price_with_old_user" property="vipOneStudentTwelveCourseOriginalPriceWithOldUser" />
+		<result column="vip_one_student_twelve_course_activity_price_with_old_user" property="vipOneStudentTwelveCourseActivityPriceWithOldUser" />
+		<result column="high_online_ten_course_original_price_with_new_user" property="highOnlineTenCourseOriginalPriceWithNewUser" />
+		<result column="high_online_ten_course_activity_price_with_new_user" property="highOnlineTenCourseActivityPriceWithNewUser" />
+		<result column="high_online_ten_course_original_price_with_old_user" property="highOnlineTenCourseOriginalPriceWithOldUser" />
+		<result column="high_online_ten_course_activity_price_with_old_user" property="highOnlineTenCourseActivityPriceWithOldUser" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -14,6 +14,7 @@
         <result column="operating_temp_tag_" property="operatingTempTag"/>
         <result column="teacher_id_" property="teacherId"/>
         <result column="teacher_name_" property="teacherName"/>
+        <result column="is_new_user_" property="isNewUser"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
     </resultMap>
@@ -91,6 +92,9 @@
             <if test="teacherId != null">
                 teacher_id_=#{teacherId},
             </if>
+            <if test="isNewUser != null">
+                is_new_user_=#{isNewUser},
+            </if>
                 update_time_ = NOW()
         </set>
         WHERE user_id_ = #{userId}

+ 15 - 22
mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java

@@ -1,9 +1,11 @@
 package com.ym.mec.student.controller;
 
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
 import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dto.DegreeRegistrationActivityDto;
 import com.ym.mec.biz.dal.dto.SporadicPayDto;
 import com.ym.mec.biz.dal.entity.DegreeRegistration;
 import com.ym.mec.biz.dal.entity.Employee;
@@ -30,6 +32,7 @@ import org.springframework.web.bind.annotation.*;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @RequestMapping("degree")
 @Api(tags = "考级报名服务")
@@ -51,33 +54,27 @@ public class DegreeController extends BaseController {
     @Autowired
     private SporadicChargeInfoService sporadicChargeInfoService;
 
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "考级报名支付")
     @PostMapping("/pay")
-    public HttpResponseResult pay(DegreeRegistration degreeRegistration) throws Exception {
-        if (degreeRegistration == null ||
-                degreeRegistration.getSporadicId() == null ||
-                degreeRegistration.getName() == null ||
-                degreeRegistration.getGender() == null ||
-                degreeRegistration.getIdcard() == null ||
-                degreeRegistration.getCity() == null ||
-                degreeRegistration.getSchool() == null ||
-                degreeRegistration.getSubject() == null ||
-                degreeRegistration.getTheoryLevel() == null ||
-                degreeRegistration.getMobile() == null
-
-        ) {
-            throw new BizException("必填参数不能为空");
-        }
-        if (!CommonValidator.isMobileNo(degreeRegistration.getMobile())) {
-            throw new BizException("手机号码不正确,请核对");
+    public HttpResponseResult pay(DegreeRegistrationActivityDto degreeRegistration) throws Exception {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(user)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
         }
+        degreeRegistration.setUserId(user.getId());
 
         IdcardValidator idcardValidator = new IdcardValidator();
         if (!idcardValidator.isValidatedAllIdcard(degreeRegistration.getIdcard())) {
             throw new BizException("身份证号不正确,请核对");
         }
 
+        if(Objects.isNull(degreeRegistration.getOrganId())){
+            return failed("该分部暂未参与此活动");
+        }
+
         SporadicChargeInfo info = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
         if (info == null || info.getDelFlag().equals(1)) {
             return failed("报名信息不存在");
@@ -88,11 +85,7 @@ public class DegreeController extends BaseController {
 
         DegreeRegistration degree = degreeRegistrationDao.findByMobileAndSporadicId(degreeRegistration.getMobile(), degreeRegistration.getSporadicId());
 
-        if (degree != null && degree.getStatus().equals(2)) {
-            return failed("您本次已报名,请勿重复报名");
-        }
-
-        if (!degreeRegistration.getIsRepay() && degree != null) {
+        if (!degreeRegistration.getIsRepay() && degree != null && degree.getStatus().equals(1)) {
             Integer ingOrder = studentPaymentOrderService.findOrderByGroupType(degree.getId(), degreeRegistration.getSporadicId(), "SPORADIC", DealStatusEnum.ING);
             if (ingOrder != null && ingOrder > 0) {
                 return failed(HttpStatus.CONTINUE, "您有待支付的订单");

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -161,12 +161,12 @@ public class PracticeGroupController extends BaseController {
 
     @ApiOperation("获取陪练课预约参数——付费")
     @GetMapping(value = "/getPayPracticeApplyParams")
-    public Object getPayPracticeApplyParams(){
+    public Object getPayPracticeApplyParams(Integer organId){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(practiceGroupService.getPayPracticeApplyParams(sysUser.getId(), sysUser.getOrganId()));
+        return succeed(practiceGroupService.getPayPracticeApplyParams(sysUser.getId(), Objects.nonNull(organId)?organId:sysUser.getOrganId()));
     }
 
     @ApiOperation("获取指定教师的空闲时间——付费")