瀏覽代碼

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

zouxuan 4 年之前
父節點
當前提交
87f98ff429
共有 21 個文件被更改,包括 601 次插入57 次删除
  1. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayDegreeDetailDao.java
  2. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDetailDao.java
  3. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCoursesAccountDetailDao.java
  4. 126 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreePayDto.java
  5. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayDegreeDetail.java
  6. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayReserve.java
  7. 21 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationDegreeCourseFee.java
  8. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccountDetail.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCoursesAccountDetail.java
  10. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExportUserAccountQueryInfo.java
  11. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayDegreeDetailService.java
  12. 13 3
      mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayReserveService.java
  13. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayDegreeDetailServiceImpl.java
  14. 151 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  15. 14 2
      mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeDetailDao.xml
  16. 9 5
      mec-biz/src/main/resources/config/mybatis/OrganizationDegreeCourseFeeMapper.xml
  17. 18 3
      mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml
  18. 18 3
      mec-biz/src/main/resources/config/mybatis/SysUserCoursesAccountDetailMapper.xml
  19. 36 0
      mec-student/src/main/java/com/ym/mec/student/controller/ChildrenDayController.java
  20. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/ReplacementInstrumentActivityController.java
  21. 42 12
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayDegreeDetailDao.java

@@ -2,7 +2,17 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface ChildrenDayDegreeDetailDao extends BaseDAO<Integer, ChildrenDayDegreeDetail> {
 
+    /**
+     * 获取用户某种状态的报名详情
+     *
+     * @param userId
+     * @return
+     */
+    List<ChildrenDayDegreeDetail> getByUserIdAndStatus(@Param("userId") Integer userId, @Param("status") Integer status);
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCashAccountDetailDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.page.ExportUserAccountQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 
 import org.apache.ibatis.annotations.Param;
@@ -38,5 +39,5 @@ public interface SysUserCashAccountDetailDao extends BaseDAO<Long, SysUserCashAc
     List<SysUserCashAccountDetail> queryAccountDetail(Map<String, Object> params);
     int countAccountDetails(Map<String, Object> params);
 
-    List<SysUserCashAccountDetail> exportDetail(Integer userId);
+    List<SysUserCashAccountDetail> exportDetail(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
 }

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserCoursesAccountDetailDao.java

@@ -1,12 +1,14 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.SysUserCoursesAccountDetail;
+import com.ym.mec.biz.dal.page.ExportUserAccountQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 public interface SysUserCoursesAccountDetailDao extends BaseDAO<Long, SysUserCoursesAccountDetail> {
 
 
-    List<SysUserCoursesAccountDetail> exportDetail(Integer userId);
+    List<SysUserCoursesAccountDetail> exportDetail(@Param("queryInfo") ExportUserAccountQueryInfo queryInfo);
 }

+ 126 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreePayDto.java

@@ -0,0 +1,126 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class DegreePayDto {
+    private Integer userId;
+
+    private Integer organId;
+
+    @ApiModelProperty(value = "声部")
+    private Integer subject;
+
+    @ApiModelProperty(value = "器乐考级等级")
+    private Integer musicGradeLevel;
+
+    @ApiModelProperty(value = "乐理等级")
+    private Integer theoryLevel;
+
+    @ApiModelProperty(value = "vip 1v1")
+    private boolean vip1v1;
+
+    @ApiModelProperty(value = "vip 1v2")
+    private Boolean vip1v2;
+
+    @ApiModelProperty(value = "乐理课程")
+    private Boolean theoryCourse;
+
+    @ApiModelProperty(value = "支付金额", required = true)
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "是否使用余额", required = true)
+    private Boolean useBalance = false;
+
+    @ApiModelProperty(value = "重新支付", required = true)
+    private Boolean rePay = false;
+
+    public Integer getSubject() {
+        return subject;
+    }
+
+    public void setSubject(Integer subject) {
+        this.subject = subject;
+    }
+
+    public Integer getMusicGradeLevel() {
+        return musicGradeLevel;
+    }
+
+    public void setMusicGradeLevel(Integer musicGradeLevel) {
+        this.musicGradeLevel = musicGradeLevel;
+    }
+
+    public Integer getTheoryLevel() {
+        return theoryLevel;
+    }
+
+    public void setTheoryLevel(Integer theoryLevel) {
+        this.theoryLevel = theoryLevel;
+    }
+
+    public boolean getVip1v1() {
+        return vip1v1;
+    }
+
+    public void setVip1v1(boolean vip1v1) {
+        this.vip1v1 = vip1v1;
+    }
+
+    public Boolean getVip1v2() {
+        return vip1v2;
+    }
+
+    public void setVip1v2(Boolean vip1v2) {
+        this.vip1v2 = vip1v2;
+    }
+
+    public Boolean getTheoryCourse() {
+        return theoryCourse;
+    }
+
+    public void setTheoryCourse(Boolean theoryCourse) {
+        this.theoryCourse = theoryCourse;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public Boolean getUseBalance() {
+        return useBalance;
+    }
+
+    public void setUseBalance(Boolean useBalance) {
+        this.useBalance = useBalance;
+    }
+
+    public Boolean getRePay() {
+        return rePay;
+    }
+
+    public void setRePay(Boolean rePay) {
+        this.rePay = rePay;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+}

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayDegreeDetail.java

@@ -52,6 +52,12 @@ public class ChildrenDayDegreeDetail {
     @ApiModelProperty(value="1-支付中 2-已支付 3-支付失败")
     private Integer status;
 
+    /**
+     * 关联订单id
+     */
+    @ApiModelProperty(value="关联订单号")
+    private Long orderId;
+
     @ApiModelProperty(value="")
     private Date createTime;
 
@@ -157,4 +163,12 @@ public class ChildrenDayDegreeDetail {
         sb.append("]");
         return sb.toString();
     }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayReserve.java

@@ -52,6 +52,9 @@ public class ChildrenDayReserve {
     @ApiModelProperty(value="更新时间")
     private Date updateTime;
 
+    @ApiModelProperty(value = "当前的缴费状态 0-正常 1-缴费中")
+    private Integer payStatus = 0;
+
     public Integer getId() {
         return id;
     }
@@ -133,4 +136,12 @@ public class ChildrenDayReserve {
         sb.append("]");
         return sb.toString();
     }
+
+    public Integer getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(Integer payStatus) {
+        this.payStatus = payStatus;
+    }
 }

+ 21 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationDegreeCourseFee.java

@@ -17,10 +17,16 @@ public class OrganizationDegreeCourseFee {
     private Integer organId;
 
     /**
-    * vip课价格
+    * vip 1v1课价格
     */
-    @ApiModelProperty(value="vip课价格")
-    private BigDecimal vip;
+    @ApiModelProperty(value="vip 1v1课价格")
+    private BigDecimal vip1v1;
+
+    /**
+     * vip 1v2课价格
+     */
+    @ApiModelProperty(value="vip 1v2课价格")
+    private BigDecimal vip1v2;
 
     /**
     * 乐理课价格
@@ -56,12 +62,20 @@ public class OrganizationDegreeCourseFee {
         this.organId = organId;
     }
 
-    public BigDecimal getVip() {
-        return vip;
+    public BigDecimal getVip1v1() {
+        return vip1v1;
+    }
+
+    public void setVip1v1(BigDecimal vip1v1) {
+        this.vip1v1 = vip1v1;
+    }
+
+    public BigDecimal getVip1v2() {
+        return vip1v2;
     }
 
-    public void setVip(BigDecimal vip) {
-        this.vip = vip;
+    public void setVip1v2(BigDecimal vip1v2) {
+        this.vip1v2 = vip1v2;
     }
 
     public BigDecimal getTheory() {
@@ -96,7 +110,6 @@ public class OrganizationDegreeCourseFee {
         sb.append("Hash = ").append(hashCode());
         sb.append(", id=").append(id);
         sb.append(", organId=").append(organId);
-        sb.append(", vip=").append(vip);
         sb.append(", theory=").append(theory);
         sb.append(", createTime=").append(createTime);
         sb.append(", updateTime=").append(updateTime);

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

@@ -88,6 +88,16 @@ public class SysUserCashAccountDetail {
 	@ApiModelProperty(value = "平台账户号",required = false)
 	private String platformAccountNo;
 
+	private String organName;
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
 	public String getPhone() {
 		return phone;
 	}

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

@@ -65,6 +65,16 @@ public class SysUserCoursesAccountDetail {
 	/** 平台账户号 */
 	private String platformAccountNo;
 
+	private String organName;
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
 	public String getPhone() {
 		return phone;
 	}

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExportUserAccountQueryInfo.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class ExportUserAccountQueryInfo extends QueryInfo {
+
+    private Integer userId;
+
+    private String startTime;
+
+    private String endTime;
+
+    private String organId;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+}

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayDegreeDetailService.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.service;
+
+
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+
+public interface ChildrenDayDegreeDetailService extends BaseService<Integer, ChildrenDayDegreeDetail> {
+
+    /**
+     * 获取用户报名详情
+     *
+     * @param userId
+     * @return
+     */
+    List<ChildrenDayDegreeDetail> getByUserIdAndStatus(Integer userId, Integer status);
+
+}

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

@@ -2,14 +2,16 @@ package com.ym.mec.biz.service;
 
 
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.ChildrenStatisticsDetailDto;
-import com.ym.mec.biz.dal.dto.ChildrenStatisticsDto;
-import com.ym.mec.biz.dal.dto.DegreeFeeDto;
+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.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> {
 
     /**
@@ -44,4 +46,12 @@ public interface ChildrenDayReserveService extends BaseService<Integer, Children
      * @return
      */
     PageInfo<ChildrenStatisticsDetailDto> queryStatisticsDetailPage(ChildrenReserveQueryInfo queryInfo);
+
+    /**
+     * 6.1考级活动支付
+     *
+     * @return
+     * @throws Exception
+     */
+    Map pay(DegreePayDto degreePayDto) throws Exception;
 }

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayDegreeDetailServiceImpl.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import com.ym.mec.biz.service.ChildrenDayDegreeDetailService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ChildrenDayDegreeDetailServiceImpl extends BaseServiceImpl<Integer, ChildrenDayDegreeDetail> implements ChildrenDayDegreeDetailService {
+    @Autowired
+    private ChildrenDayDegreeDetailDao childrenDayDegreeDetailDao;
+
+    @Override
+    public BaseDAO<Integer, ChildrenDayDegreeDetail> getDAO() {
+        return childrenDayDegreeDetailDao;
+    }
+
+    @Override
+    public List<ChildrenDayDegreeDetail> getByUserIdAndStatus(Integer userId,Integer status) {
+        return childrenDayDegreeDetailDao.getByUserIdAndStatus(userId, status);
+    }
+}

+ 151 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java

@@ -1,20 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ChildrenDayReserveDao;
-import com.ym.mec.biz.dal.dao.DegreeLevelFeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dto.ChildrenStatisticsDetailDto;
-import com.ym.mec.biz.dal.dto.ChildrenStatisticsDto;
-import com.ym.mec.biz.dal.dao.OrganizationDegreeCourseFeeDao;
-import com.ym.mec.biz.dal.dto.DegreeFeeDto;
-import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
-import com.ym.mec.biz.dal.entity.DegreeLevelFee;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.dao.*;
+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.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -22,13 +16,13 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, ChildrenDayReserve> implements ChildrenDayReserveService {
@@ -41,6 +35,12 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
     private DegreeLevelFeeDao degreeLevelFeeDao;
     @Autowired
     private OrganizationDegreeCourseFeeDao organizationDegreeCourseFeeDao;
+    @Autowired
+    private StudentDao studentDao;
+    @Autowired
+    private ChildrenDayDegreeDetailService childrenDayDegreeDetailService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
 
     @Override
     public BaseDAO<Integer, ChildrenDayReserve> getDAO() {
@@ -78,7 +78,7 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
         MapUtil.populateMap(params, queryInfo);
 
         List<ChildrenStatisticsDto> dataList = null;
-        int count = childrenDayReserveDao.countChildrenStatistics(params);;
+        int count = childrenDayReserveDao.countChildrenStatistics(params);
         if (count > 0) {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
@@ -108,7 +108,7 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
         MapUtil.populateMap(params, queryInfo);
 
         List<ChildrenStatisticsDetailDto> dataList = null;
-        int count = childrenDayReserveDao.countChildrenStatisticsDetail(params);;
+        int count = childrenDayReserveDao.countChildrenStatisticsDetail(params);
         if (count > 0) {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
@@ -120,4 +120,137 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map pay(DegreePayDto degreePayDto) throws Exception {
+        studentDao.lockUser(degreePayDto.getUserId());
+
+        if (degreePayDto.getTheoryLevel() != null && !degreePayDto.getTheoryCourse()) {
+            throw new BizException("参加乐理考试,请选乐理考级专项训练课");
+        }
+
+        //检查进行中的订单
+        List<ChildrenDayDegreeDetail> details = childrenDayDegreeDetailService.getByUserIdAndStatus(degreePayDto.getUserId(), 1);
+
+        //处理关闭订单
+        if (details.size() > 0 && degreePayDto.getRePay()) {
+            Long orderId = details.get(0).getOrderId();
+            StudentPaymentOrder oldOrder = studentPaymentOrderService.get(orderId);
+            if (oldOrder != null) {
+                oldOrder.setStatus(DealStatusEnum.FAILED);
+                oldOrder.setMemo("用户手动关闭");
+                studentPaymentOrderService.callOrderCallBack(oldOrder);
+            }
+        }
+
+        //检查已经购买的课程(不能重复)
+        details = childrenDayDegreeDetailService.getByUserIdAndStatus(degreePayDto.getUserId(), 2);
+        Set<Integer> detailTypes = details.stream().map(ChildrenDayDegreeDetail::getType).collect(Collectors.toSet());
+        if (degreePayDto.getVip1v1() && detailTypes.contains(3)) {
+            throw new BizException("您已购买过VIP 1V1课程,请勿重复选择");
+        }
+
+        if (degreePayDto.getVip1v2() && detailTypes.contains(4)) {
+            throw new BizException("您已购买过VIP 1V2课程,请勿重复选择");
+        }
+
+        if (degreePayDto.getVip1v2() && detailTypes.contains(5)) {
+            throw new BizException("您已购买过乐理考级专项训练课,请勿重复选择");
+        }
+        //检查考级等级是否重复
+        if (degreePayDto.getMusicGradeLevel() != null) {
+
+        }
+        //获取课程的价格
+        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<>();
+        return payMap;
+    }
 }

+ 14 - 2
mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeDetailDao.xml

@@ -11,6 +11,7 @@
         <result column="level_" property="level"/>
         <result column="price_" property="price"/>
         <result column="status_" property="status"/>
+        <result column="order_id_" property="orderId"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time" property="updateTime"/>
     </resultMap>
@@ -28,9 +29,10 @@
     <insert id="insert" keyColumn="id_" keyProperty="id"
             parameterType="com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail" useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into children_day_degree_detail (reserve_id_, user_id_, type_, subject_id_, level_, price_, status_,
+        insert into children_day_degree_detail (reserve_id_, user_id_, type_, subject_id_, level_, price_,
+        status_,order_id_,
         create_time_, update_time)
-        values (#{reserveId}, #{userId}, #{type}, #{subjectId}, #{level}, #{price}, #{status},
+        values (#{reserveId}, #{userId}, #{type}, #{subjectId}, #{level}, #{price}, #{status},#{orderId},
         #{createTime}, #{updateTime})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail">
@@ -58,6 +60,9 @@
             <if test="status != null">
                 status_ = #{status},
             </if>
+            <if test="orderId != null">
+                order_id_ = #{orderId},
+            </if>
             <if test="createTime != null">
                 create_time_ = #{createTime},
             </if>
@@ -67,4 +72,11 @@
         </set>
         where id_ = #{id}
     </update>
+
+    <select id="getByUserIdAndStatus" resultMap="ChildrenDayDegreeDetail">
+        SELECT *
+        FROM children_day_degree_detail
+        WHERE user_id_ = #{userId}
+          AND status_ = #{status}
+    </select>
 </mapper>

+ 9 - 5
mec-biz/src/main/resources/config/mybatis/OrganizationDegreeCourseFeeMapper.xml

@@ -6,7 +6,8 @@
         <!--@Table organization_degree_course_fee-->
         <id column="id_" property="id"/>
         <result column="organ_id_" property="organId"/>
-        <result column="vip_" property="vip"/>
+        <result column="vip_1v1_" property="vip1v1"/>
+        <result column="vip_1v2_" property="vip1v2"/>
         <result column="theory_" property="theory"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
@@ -25,8 +26,8 @@
     <insert id="insert" keyColumn="id_" keyProperty="id"
             parameterType="com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee" useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into organization_degree_course_fee (organ_id_, vip_, theory_, create_time_, update_time_)
-        values (#{organId}, #{vip}, #{theory}, #{createTime}, #{updateTime})
+        insert into organization_degree_course_fee (organ_id_, vip_1v1_, vip_1v2_,theory_, create_time_, update_time_)
+        values (#{organId}, #{vip1v1},#{vip1v2}, #{theory}, #{createTime}, #{updateTime})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee">
         <!--@mbg.generated-->
@@ -35,8 +36,11 @@
             <if test="organId != null">
                 organ_id_ = #{organId},
             </if>
-            <if test="vip != null">
-                vip_ = #{vip},
+            <if test="vip1v1 != null">
+                vip_1v1_ = #{vip1v1},
+            </if>
+            <if test="vip1v2 != null">
+                vip_1v12 = #{vip1v2},
             </if>
             <if test="theory != null">
                 theory_ = #{theory},

+ 18 - 3
mec-biz/src/main/resources/config/mybatis/SysUserCashAccountDetailMapper.xml

@@ -26,6 +26,7 @@
         <result column="update_time_" property="updateTime"/>
         <result column="attribute1_" property="attribute"/>
         <result column="channel_" property="channel"/>
+        <result column="organ_name_" property="organName"/>
         <result column="platform_account_no_" property="platformAccountNo"/>
     </resultMap>
 
@@ -242,12 +243,26 @@
         ) t
     </select>
     <select id="exportDetail" resultMap="SysUserCashAccountDetail">
-        SELECT su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_cash_account_detail cad
+        SELECT o.name_ organ_name_,su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_cash_account_detail cad
         LEFT JOIN sys_user su ON su.id_ = cad.user_id_
+        LEFT JOIN organization o ON o.id_ = su.organ_id_
         LEFT JOIN student s ON s.user_id_ = su.id_
         LEFT JOIN `subject` sb ON FIND_IN_SET(sb.id_,s.subject_id_list_)
-        WHERE cad.user_id_ = #{userId}
+        <where>
+            <if test="queryInfo.userId != null">
+                AND cad.user_id_ = #{queryInfo.userId}
+            </if>
+            <if test="queryInfo.organId != null">
+                AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+            </if>
+            <if test="queryInfo.startTime != null and queryInfo.startTime != ''">
+                AND cad.create_time_ >= #{queryInfo.startTime}
+            </if>
+            <if test="queryInfo.endTime != null and queryInfo.startTime != ''">
+                AND cad.create_time_ &lt;= #{queryInfo.endTime}
+            </if>
+        </where>
         GROUP BY cad.id_
-        ORDER BY cad.id_ DESC
+        ORDER BY cad.user_id_,cad.id_ DESC
     </select>
 </mapper>

+ 18 - 3
mec-biz/src/main/resources/config/mybatis/SysUserCoursesAccountDetailMapper.xml

@@ -24,6 +24,7 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="attribute1_" property="attribute1" />
 		<result column="channel_" property="channel" />
+		<result column="organ_name_" property="organName" />
 		<result column="platform_account_no_" property="platformAccountNo" />
 	</resultMap>
 	
@@ -115,12 +116,26 @@
 		<include refid="queryPageCondition" />
 	</select>
 	<select id="exportDetail" resultMap="SysUserCoursesAccountDetail">
-		SELECT su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_courses_account_detail cad
+		SELECT o.name_ organ_name_,su.username_,su.phone_,GROUP_CONCAT(sb.name_ ORDER BY sb.name_) subject_name_,cad.* FROM sys_user_courses_account_detail cad
 		LEFT JOIN sys_user su ON su.id_ = cad.user_id_
+		LEFT JOIN organization o ON o.id_ = su.organ_id_
 		LEFT JOIN student s ON s.user_id_ = su.id_
 		LEFT JOIN `subject` sb ON FIND_IN_SET(sb.id_,s.subject_id_list_)
-		WHERE cad.user_id_ = #{userId}
+		<where>
+			<if test="queryInfo.userId != null">
+				AND cad.user_id_ = #{queryInfo.userId}
+			</if>
+			<if test="queryInfo.organId != null">
+				AND FIND_IN_SET(su.organ_id_,#{queryInfo.organId})
+			</if>
+			<if test="queryInfo.startTime != null and queryInfo.startTime != ''">
+				AND cad.create_time_ >= #{queryInfo.startTime}
+			</if>
+			<if test="queryInfo.endTime != null and queryInfo.startTime != ''">
+				AND cad.create_time_ &lt;= #{queryInfo.endTime}
+			</if>
+		</where>
 		GROUP BY cad.id_
-		ORDER BY cad.id_ DESC
+		ORDER BY cad.user_id_,cad.id_ DESC
 	</select>
 </mapper>

+ 36 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ChildrenDayController.java

@@ -2,22 +2,31 @@ 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.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.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;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 @RequestMapping("childrenDay")
@@ -28,6 +37,10 @@ public class ChildrenDayController extends BaseController {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private ChildrenDayReserveService childrenDayReserveService;
+    @Autowired
+    private StudentDao studentDao;
+    @Autowired
+    private ChildrenDayDegreeDetailService childrenDayDegreeDetailService;
 
 
     @ApiOperation(value = "占位")
@@ -61,4 +74,27 @@ public class ChildrenDayController extends BaseController {
         return succeed(childrenDayReserveService.getFeeInfo(user.getOrganId()));
     }
 
+    @ApiOperation(value = "6.1考级支付")
+    @PostMapping("/pay")
+    public HttpResponseResult pay(@RequestBody DegreePayDto degreePayDto) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败,请重新登陆");
+        }
+        studentDao.lockUser(degreePayDto.getUserId());
+
+        degreePayDto.setUserId(sysUser.getId());
+        degreePayDto.setOrganId(sysUser.getOrganId());
+        List<ChildrenDayDegreeDetail> ingDetails = childrenDayDegreeDetailService.getByUserIdAndStatus(sysUser.getId(), 1);
+        if (ingDetails.size() > 0) {
+            return failed(HttpStatus.CONTINUE, "您有待支付的订单");
+        }
+
+        Map payMap = childrenDayReserveService.pay(degreePayDto);
+        if (payMap.containsKey("tradeState")) {
+            return failed(HttpStatus.CREATED, payMap, "恭喜您,支付成功!");
+        }
+        return succeed(payMap);
+    }
+
 }

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/ReplacementInstrumentActivityController.java

@@ -168,6 +168,6 @@ public class ReplacementInstrumentActivityController extends BaseController {
         if (payMap.containsKey("tradeState")) {
             return failed(HttpStatus.CREATED, payMap, "恭喜您,支付成功!");
         }
-        return succeed(replacementInstrumentActivityService.pay(replacementPayDto));
+        return succeed(payMap);
     }
 }

+ 42 - 12
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -245,8 +245,23 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "学生个人账户余额导出")
     @PostMapping("export/userCashAccountDetail")
     @PreAuthorize("@pcs.hasPermissions('export/userCashAccountDetail')")
-    public void userCashAccountDetail(HttpServletResponse response, Integer userId) throws IOException {
-       List<SysUserCashAccountDetail> cashAccountDetails = sysUserCashAccountDetailDao.exportDetail(userId);
+    public void userCashAccountDetail(HttpServletResponse response, ExportUserAccountQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+       List<SysUserCashAccountDetail> cashAccountDetails = sysUserCashAccountDetailDao.exportDetail(queryInfo);
        if(cashAccountDetails.size() < 1){
            throw new BizException("没有可导出数据");
        }
@@ -255,10 +270,10 @@ public class ExportController extends BaseController {
        }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员编号", "姓名", "电话", "声部",
-                    "交易类型", "交易金额", "交易时间", "备注"}, new String[]{
-                    "userId", "username", "phone", "subjectName",
-                    "type.msg", "amount", "createTime", "comment"}, cashAccountDetails);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部","学员编号", "姓名", "电话", "声部",
+                    "交易类型", "交易金额", "交易时间", "备注","可用余额"}, new String[]{
+                    "organName","userId", "username", "phone", "subjectName",
+                    "type.msg", "amount", "createTime", "comment","balance"}, cashAccountDetails);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");
@@ -282,8 +297,23 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "学生个人课程余额导出")
     @PostMapping("export/userCoursesAccount")
     @PreAuthorize("@pcs.hasPermissions('export/userCoursesAccount')")
-    public void userCoursesAccount(HttpServletResponse response, Integer userId) throws IOException {
-        List<SysUserCoursesAccountDetail> coursesAccountDetails = sysUserCoursesAccountDetailDao.exportDetail(userId);
+    public void userCoursesAccount(HttpServletResponse response,ExportUserAccountQueryInfo queryInfo) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            throw new BizException("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                throw new BizException("非法请求");
+            }
+        }
+        List<SysUserCoursesAccountDetail> coursesAccountDetails = sysUserCoursesAccountDetailDao.exportDetail(queryInfo);
         if(coursesAccountDetails.size() < 1){
             throw new BizException("没有可导出数据");
         }
@@ -292,10 +322,10 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员编号", "姓名", "电话", "声部",
-                    "交易类型", "交易金额", "交易时间", "备注"}, new String[]{
-                    "userId", "username", "phone", "subjectName",
-                    "type.msg", "amount", "createTime", "comment"}, coursesAccountDetails);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "姓名", "电话", "声部",
+                    "交易类型", "交易金额", "交易时间", "备注","可用余额"}, new String[]{
+                    "organName", "userId", "username", "phone", "subjectName",
+                    "type.msg", "amount", "createTime", "comment","balance"}, coursesAccountDetails);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=classGroup-" + DateUtil.getDate(new Date()) + ".xls");