Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

周箭河 5 tahun lalu
induk
melakukan
256fa30ddd

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -128,6 +128,17 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	VipGroupSalaryBaseInfo getVipGroupSalaryInfo(@Param("vipGroupId") Long vipGroupId);
 
 	/**
+	 * @describe 统计学生缴费笔数
+	 * @author Joburgess
+	 * @date 2019/11/16
+	 * @param classGroupId: 班级编号
+	 * @return int
+	 */
+	int countStudentPaymentNum(@Param("classGroupId") Integer classGroupId);
+
+	BigDecimal countStudentPaymentFee(@Param("classGroupId") Integer classGroupId);
+
+	/**
 	 * @Author: Joburgess
 	 * @Date: 2019/10/11
 	 * @params [vipGroupId]

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageAccountBaseInfoDto.java

@@ -12,6 +12,9 @@ public class StudentManageAccountBaseInfoDto {
 
     @ApiModelProperty(value = "账户余额",required = false)
     private BigDecimal balance;
+    
+    @ApiModelProperty(value = "课程余额",required = false)
+    private BigDecimal courseBalance;
 
     @ApiModelProperty(value = "银行名称",required = false)
     private String bankName;
@@ -27,7 +30,15 @@ public class StudentManageAccountBaseInfoDto {
         this.balance = balance;
     }
 
-    public String getBankName() {
+    public BigDecimal getCourseBalance() {
+		return courseBalance;
+	}
+
+	public void setCourseBalance(BigDecimal courseBalance) {
+		this.courseBalance = courseBalance;
+	}
+
+	public String getBankName() {
         return bankName;
     }
 

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserCashAccount.java

@@ -33,6 +33,10 @@ public class SysUserCashAccount {
 	@ApiModelProperty(value = "保证金余额",required = false)
 	private BigDecimal marginBalance;
 	
+	/** 课程余额余额 */
+	@ApiModelProperty(value = "课程余额",required = false)
+	private BigDecimal courseBalance;
+	
 	/** 账户状态(0,冻结,1,正常;-1,注销;) */
 	@ApiModelProperty(value = "账户状态",required = false)
 	private PlatformCashAccountStatusEnum status;
@@ -93,6 +97,14 @@ public class SysUserCashAccount {
 		this.marginBalance = marginBalance;
 	}
 
+	public BigDecimal getCourseBalance() {
+		return courseBalance;
+	}
+
+	public void setCourseBalance(BigDecimal courseBalance) {
+		this.courseBalance = courseBalance;
+	}
+
 	public PlatformCashAccountStatusEnum getStatus() {
 		return status;
 	}

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserCashAccountService.java

@@ -14,4 +14,11 @@ public interface SysUserCashAccountService extends BaseService<Integer, SysUserC
 	 * @return
 	 */
 	boolean updateBalance(Integer userId, BigDecimal decimal);
+
+	/**
+	 * 将课程余额转入到可用余额
+	 * @param userId
+	 * @return
+	 */
+	boolean transferCourseBalanceToBalance(Integer userId);
 }

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -9,7 +9,11 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.PlatformCashAccountStatusEnum;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -22,6 +26,9 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 	@Autowired
 	private SysUserCashAccountDao sysUserCashAccountDao;
 
+	@Autowired
+	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+
 	@Override
 	public BaseDAO<Integer, SysUserCashAccount> getDAO() {
 		return sysUserCashAccountDao;
@@ -52,4 +59,38 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
 		return true;
 	}
 
+	@Override
+	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+	public boolean transferCourseBalanceToBalance(Integer userId) {
+		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+		if (cashAccount == null) {
+			throw new BizException("用户[{}]现金账户不存在", userId);
+		}
+
+		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+			throw new BizException("账户不可用");
+		}
+
+		Date date = new Date();
+
+		SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+		detail.setAmount(cashAccount.getCourseBalance());
+		detail.setBalance(cashAccount.getBalance().add(cashAccount.getCourseBalance()));
+		detail.setComment("课程余额转账");
+		detail.setCreateTime(date);
+		detail.setStatus(DealStatusEnum.SUCCESS);
+		detail.setType(PlatformCashAccountDetailTypeEnum.FILL_ACCOUNT);
+		detail.setUpdateTime(date);
+		detail.setUserId(userId);
+
+		sysUserCashAccountDetailDao.insert(detail);
+
+		cashAccount.setBalance(cashAccount.getBalance().add(cashAccount.getCourseBalance()));
+		cashAccount.setCourseBalance(new BigDecimal(0));
+		cashAccount.setUpdateTime(date);
+
+		sysUserCashAccountDao.update(cashAccount);
+		return true;
+	}
+
 }

+ 8 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -186,6 +186,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				true,
 				true);
 
+//		if()
+
 		//如果默认课酬与实际课酬不匹配则需要审批
 		if(costInfo.get("offlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOfflineTeacherSalary())!=0||
 			costInfo.get("onlineTeacherSalary").compareTo(vipGroupApplyBaseInfoDto.getOnlineTeacherSalary())!=0){
@@ -1130,10 +1132,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     		throw new BizException("未找到指定vip课");
 		}
 
-		if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)){
-			throw new BizException("此课程还未正式开课");
-		}
-
 		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
@@ -1175,16 +1173,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroupSalaryBaseInfo.getTotalSalary())){
 			vipGroupSalaryBaseInfo.setTotalSalary(new BigDecimal(0));
 		}
+
+		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(),null);
+
 		//扣费笔数
-		vipGroupSalaryBaseInfo.setFeeDeductionNum(vipGroupDao.countVipGroupDeductionNum(queryInfo.getVipGroupId()));
+		vipGroupSalaryBaseInfo.setFeeDeductionNum(vipGroupDao.countStudentPaymentNum(classGroup.getId()));
 		//扣费总额
-		if(vipGroupSalaryBaseInfo.getTotalSalary().intValue()>0){
-			vipGroupSalaryBaseInfo.setTotalFeeDeduction(vipGroupSalaryBaseInfo.getExpectTotalSalary().subtract(vipGroupSalaryBaseInfo.getTotalSalary()));
+		if(vipGroupSalaryBaseInfo.getFeeDeductionNum()>0){
+			vipGroupSalaryBaseInfo.setTotalFeeDeduction(vipGroupDao.countStudentPaymentFee(classGroup.getId()));
 		}else{
 			vipGroupSalaryBaseInfo.setTotalFeeDeduction(new BigDecimal(0));
 		}
-
-		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(),null);
 		BigDecimal studentNum=new BigDecimal(classGroup.getStudentNum());
 		//课程总价
 		vipGroupSalaryBaseInfo.setTotalCoursePrice(vipGroup.getTotalPrice().multiply(studentNum));

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -245,7 +245,7 @@
         course_schedule cs
         LEFT JOIN class_group cg ON cs.class_group_id_=cg.id_
         LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
-        LEFT JOIN school s ON mg.school_id_=s.id_
+        LEFT JOIN school s ON cs.schoole_id_=s.id_
         LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
         LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
         WHERE cs.id_= #{courseID} AND ta.teacher_id_=#{teacherId}

+ 2 - 0
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -27,6 +27,7 @@
 
     <resultMap id="studentManageAccountBaseInfo" type="com.ym.mec.biz.dal.dto.StudentManageAccountBaseInfoDto">
         <result property="balance" column="balance_"/>
+        <result property="courseBalance" column="course_balance_"/>
         <result property="bankName" column="bank_name_"/>
         <result property="cardNo" column="card_no_"/>
     </resultMap>
@@ -292,6 +293,7 @@
     <select id="getStudentAccountBaseInfo" resultMap="studentManageAccountBaseInfo">
         SELECT
             suca.balance_,
+            suca.course_balance_,
             subc.bank_name_,
             subc.card_no_
         FROM

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

@@ -12,6 +12,7 @@
         <result column="balance_" property="balance"/>
         <result column="frozen_amount_" property="frozenAmount"/>
         <result column="margin_balance_" property="marginBalance"/>
+        <result column="course_balance_" property="courseBalance"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time" property="updateTime"/>
@@ -61,6 +62,9 @@
             <if test="marginBalance != null">
                 margin_balance_ = #{marginBalance},
             </if>
+            <if test="courseBalance != null">
+                course_balance_ = #{courseBalance},
+            </if>
             <if test="currency != null">
                 currency_ = #{currency},
             </if>

+ 17 - 0
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -685,4 +685,21 @@
           payment_expire_date_ &lt; NOW( )
           AND status_ =1
     </select>
+
+    <select id="countStudentPaymentNum" resultType="int">
+        SELECT
+            COUNT(*)
+        FROM
+            course_schedule cs
+            LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.user_id_
+            WHERE cssp.settlement_time_ IS NOT NULL AND cs.class_group_id_=#{classGroupId}
+    </select>
+    <select id="countStudentPaymentFee" resultType="java.math.BigDecimal">
+        SELECT
+            SUM(actual_price_)
+        FROM
+            course_schedule cs
+            LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.user_id_
+            WHERE cssp.settlement_time_ IS NOT NULL AND cs.class_group_id_=#{classGroupId}
+    </select>
 </mapper>

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

@@ -319,7 +319,7 @@ public class StudentOrderController extends BaseController {
 
     }
 
-//    @Scheduled(cron = "0/30 * * * * ?")
+    @Scheduled(cron = "0/30 * * * * ?")
     public void setSuccessStatus() throws Exception {
         List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
 

+ 37 - 29
mec-web/src/main/java/com/ym/mec/web/controller/SysUserCashAccountController.java

@@ -1,46 +1,54 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.QueryInfo;
+
 @RequestMapping("userCashAccount")
 @Api(tags = "用户账户服务")
 @RestController
 public class SysUserCashAccountController extends BaseController {
 
-    @Autowired
-    private SysUserCashAccountService sysUserCashAccountService;
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-
-    @ApiOperation(value = "获取用户账户信息")
-    @GetMapping("/get")
-    @PreAuthorize("@pcs.hasPermissions('userCashAccount/get')")
-    public Object add() {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("请重新登录");
-        }
-        return succeed(sysUserCashAccountService.get(sysUser.getId()));
-    }
-
-    @ApiOperation(value = "分页查询收费类型列表")
-    @GetMapping("/queryPage")
-    @PreAuthorize("@pcs.hasPermissions('userCashAccount/queryPage')")
-    public Object queryPage(QueryInfo queryInfo) {
-        return succeed(sysUserCashAccountService.queryPage(queryInfo));
-    }
-
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "获取用户账户信息")
+	@GetMapping("/get")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/get')")
+	public Object add() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("请重新登录");
+		}
+		return succeed(sysUserCashAccountService.get(sysUser.getId()));
+	}
+
+	@ApiOperation(value = "分页查询收费类型列表")
+	@GetMapping("/queryPage")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/queryPage')")
+	public Object queryPage(QueryInfo queryInfo) {
+		return succeed(sysUserCashAccountService.queryPage(queryInfo));
+	}
+
+	@ApiOperation(value = "分页查询收费类型列表")
+	@PostMapping("/transferCourseBalanceToBalance")
+	@PreAuthorize("@pcs.hasPermissions('userCashAccount/transferCourseBalanceToBalance')")
+	public Object transferCourseBalanceToBalance(Integer userId) {
+		sysUserCashAccountService.transferCourseBalanceToBalance(userId);
+		return succeed();
+	}
 }