yonge 6 years ago
parent
commit
ade0c930f5

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

@@ -6,6 +6,7 @@ import com.ym.mec.common.dal.BaseDAO;
 public interface StudentRechargeDao extends BaseDAO<String, StudentRecharge> {
 
 
-    StudentRecharge selectByTransNo(String transNo);
+    StudentRecharge queryByTransNo(String transNo);
 	
+    StudentRecharge queryByOrderNo(String orderNo);
 }

+ 13 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRecharge.java

@@ -19,12 +19,14 @@ public class StudentRecharge {
 	
 	/** 用户编号 */
 	@ApiModelProperty(value = "用户编号",required = false)
-	private Long userId;
+	private Integer userId;
 	
 	/** 交易流水号,第三方支付机构返回的 */
 	@ApiModelProperty(value = "交易流水号",required = false)
 	private String transNo;
 	
+	private String orderNo;
+	
 	/** 1,交易中;2,成功交易;3,交易失败;4,交易关闭 */
 	@ApiModelProperty(value = "交易状态",required = false)
 	private DealStatusEnum status;
@@ -67,11 +69,11 @@ public class StudentRecharge {
 		return this.id;
 	}
 			
-	public void setUserId(Long userId){
+	public void setUserId(Integer userId){
 		this.userId = userId;
 	}
 	
-	public Long getUserId(){
+	public Integer getUserId(){
 		return this.userId;
 	}
 			
@@ -83,6 +85,14 @@ public class StudentRecharge {
 		return this.transNo;
 	}
 
+	public String getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
+
 	public DealStatusEnum getStatus() {
 		return status;
 	}

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -17,7 +17,6 @@ import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
-import org.apache.ibatis.annotations.Param;
 
 public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	/**

+ 19 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRechargeService.java

@@ -1,16 +1,28 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.RechargeDto;
+import java.math.BigDecimal;
+import java.util.Map;
+
 import com.ym.mec.biz.dal.entity.StudentRecharge;
 import com.ym.mec.common.service.BaseService;
+import com.ym.mec.thirdparty.union.NotifyMsg;
 
 public interface StudentRechargeService extends BaseService<String, StudentRecharge> {
 
-    /**
-     * 账户充值
-     * @param rechargeDto
-     */
-    Boolean recharge(RechargeDto rechargeDto);
+	/**
+	 * 账户充值
+	 * @param userId
+	 * @param bankCardNo
+	 * @param amount
+	 */
+	Map<?,?> recharge(Integer userId, String bankCardNo, BigDecimal amount);
+	
+	/**
+	 * 充值回调
+	 * @param notifyMsg
+	 * @return
+	 */
+	boolean rechargeCallback(NotifyMsg notifyMsg);
 
-    StudentRecharge selectByTransNo(String transNo);
+	StudentRecharge queryByTransNo(String transNo);
 }

+ 66 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1,13 +1,74 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-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.dao.ChargeTypeDao;
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
+import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
+import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.SchoolDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.MusicCardDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
+import com.ym.mec.biz.dal.entity.ChargeType;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.enums.*;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.School;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -18,19 +79,7 @@ import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
-
 import com.ym.mec.util.date.DateUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {

+ 99 - 30
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java

@@ -1,73 +1,142 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
 import java.util.Date;
+import java.util.Map;
 
 import javax.annotation.Resource;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.StudentRechargeDao;
 import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDetailDao;
-import com.ym.mec.biz.dal.dto.RechargeDto;
 import com.ym.mec.biz.dal.entity.StudentRecharge;
-import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+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.dal.enums.TransTypeEnum;
+import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.StudentRechargeService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.union.NotifyMsg;
 
 @Service
-public class StudentRechargeServiceImpl extends BaseServiceImpl<String, StudentRecharge>  implements StudentRechargeService {
-	
+public class StudentRechargeServiceImpl extends BaseServiceImpl<String, StudentRecharge> implements StudentRechargeService {
+
 	@Resource
 	private StudentRechargeDao studentRechargeDao;
-    @Autowired
-    private StudentRegistrationDao studentRegistrationDao;
-	
+	@Autowired
+	private StudentRegistrationDao studentRegistrationDao;
+
 	@Autowired
 	private SysUserCashAccountService sysUserCashAccountService;
 
 	@Resource
-	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+	private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+
+	@Autowired
+	private PayService payService;
+
+	@Autowired
+	private IdGeneratorService idGeneratorService;
+
 	@Override
 	public BaseDAO<String, StudentRecharge> getDAO() {
 		return studentRechargeDao;
 	}
 
 	@Override
-	public Boolean recharge(RechargeDto rechargeDto) {
+	@Transactional(rollbackFor = Exception.class)
+	public Map<?, ?> recharge(Integer userId, String bankCardNo, BigDecimal amount) {
 
-		//TODO ���õ�����֧��
-		Date now  = new Date();
+		Date now = new Date();
 
-		//��ֵ��¼
-        StudentRecharge studentRecharge = new StudentRecharge();
-        studentRecharge.setAmount(rechargeDto.getRechargeAmount());
+		SysUserCashAccount userCashAccount = sysUserCashAccountService.get(userId);
+		if (userCashAccount == null) {
+			throw new BizException("账户不存在");
+		}
+
+		if (userCashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+			throw new BizException("账户不可用");
+		}
+
+		StudentRecharge studentRecharge = new StudentRecharge();
+		studentRecharge.setAmount(amount);
 		studentRecharge.setCreateTime(now);
-		studentRecharge.setUserId(rechargeDto.getUserId().longValue());
+		studentRecharge.setUserId(userId);
+		studentRecharge.setStatus(DealStatusEnum.ING);
 		studentRecharge.setTransNo(null);
+		studentRecharge.setOrderNo(idGeneratorService.generatorId("recharge") + "");
 		studentRechargeDao.insert(studentRecharge);
-		//�˻��ʽ���ˮ
-		SysUserCashAccountDetail cashAccount = new SysUserCashAccountDetail();
-		cashAccount.setAmount(rechargeDto.getRechargeAmount());
-		cashAccount.setBalance(null);
-		cashAccount.setTransNo(null);
-		cashAccount.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
-		cashAccount.setUserId(rechargeDto.getUserId());
-		cashAccount.setCreateTime(now);
-		sysUserCashAccountDetailDao.insert(cashAccount);
-
-		//�ۼ��˻�
-		sysUserCashAccountService.updateBalance(rechargeDto.getUserId(),rechargeDto.getRechargeAmount());
+
+		try {
+			return payService.getPayMap(amount, studentRecharge.getOrderNo(), "https://pay.dayaedu.com/api/yqpay/notify", "http://dev.dayaedu.com", "测试订单",
+					"测试订单");
+		} catch (Exception e) {
+			throw new BizException("调用支付接口出错", e);
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean rechargeCallback(NotifyMsg notifyMsg) {
+
+		if (notifyMsg.getStatus().equals("TRADE_SUCCESS") || notifyMsg.getStatus().equals("TRADE_CLOSED")) {
+
+			String orderNo = notifyMsg.getMerOrderId();
+
+			StudentRecharge studentRecharge = studentRechargeDao.queryByOrderNo(orderNo);
+
+			if (studentRecharge == null) {
+				throw new BizException("充值记录不存在");
+			}
+
+			DealStatusEnum status = notifyMsg.getStatus().equals("TRADE_SUCCESS") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAilED;
+
+			String transNo = notifyMsg.getSeqId();
+
+			String paymentChannel = notifyMsg.getTargetSys();
+
+			Date paymentDate = notifyMsg.getPayTime();
+
+			studentRecharge.setPayPlatform(paymentChannel);
+			studentRecharge.setStatus(status);
+			studentRecharge.setTransNo(transNo);
+			studentRecharge.setModifyTime(paymentDate);
+
+			studentRechargeDao.update(studentRecharge);
+
+			if (status == DealStatusEnum.SUCCESS) {
+
+				TransTypeEnum transType = TransTypeEnum.FAST_PAYMENT;
+
+				if ("WXPay".equals(paymentChannel)) {
+					transType = TransTypeEnum.WECHAT;
+				} else if ("Alipay 2.0".equals(paymentChannel)) {
+					transType = TransTypeEnum.ALIPAY;
+				}
+
+				// 更新账户余额
+				// 新增交易流水
+				sysUserCashAccountDetailService.addCashAccountDetail(studentRecharge.getUserId(), studentRecharge.getAmount(), orderNo, transNo,
+						PlatformCashAccountDetailTypeEnum.RECHARGE, transType, status, "");
+			}
+
+		}
 
 		return true;
 	}
 
 	@Override
-	public StudentRecharge selectByTransNo(String transNo) {
-		return studentRechargeDao.selectByTransNo(transNo);
+	public StudentRecharge queryByTransNo(String transNo) {
+		return studentRechargeDao.queryByTransNo(transNo);
 	}
 }

+ 11 - 3
mec-biz/src/main/resources/config/mybatis/StudentRechargeMapper.xml

@@ -10,6 +10,7 @@
         <result column="id_" property="id"/>
         <result column="user_id_" property="userId"/>
         <result column="trans_no_" property="transNo"/>
+        <result column="order_no_" property="orderNo"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="amount_" property="amount"/>
         <result column="fee_user_" property="feeUser"/>
@@ -40,8 +41,8 @@
         </selectKey>
         -->
         INSERT INTO student_recharge
-        (id_,user_id_,trans_no_,status_,amount_,fee_user_,fee_platform_,pay_platform_,description_,comment_,create_time_,modify_time_)
-        VALUES(#{id},#{userId},#{transNo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{amount},#{feeUser},#{feePlatform},#{payPlatform},#{description},#{comment},now(),now())
+        (id_,user_id_,trans_no_,order_no_,status_,amount_,fee_user_,fee_platform_,pay_platform_,description_,comment_,create_time_,modify_time_)
+        VALUES(#{id},#{userId},#{transNo},#{orderNo},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{amount},#{feeUser},#{feePlatform},#{payPlatform},#{description},#{comment},now(),now())
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -75,6 +76,9 @@
             <if test="transNo != null">
                 trans_no_ = #{transNo},
             </if>
+            <if test="orderNo != null">
+                order_no_ = #{orderNo},
+            </if>
             <if test="payPlatform != null">
                 pay_platform_ = #{payPlatform},
             </if>
@@ -98,7 +102,11 @@
 		SELECT COUNT(*) FROM student_recharge
 	</select>
 
-    <select id="selectByTransNo" resultMap="StudentRecharge">
+    <select id="queryByTransNo" resultMap="StudentRecharge">
 		SELECT * FROM student_recharge WHERE  trans_no_ = #{transNo}
 	</select>
+
+    <select id="queryByOrderNo" resultMap="StudentRecharge">
+		SELECT * FROM student_recharge WHERE  order_no_ = #{orderNo}
+	</select>
 </mapper>

+ 28 - 40
mec-student/src/main/java/com/ym/mec/student/controller/RechargeController.java

@@ -1,55 +1,43 @@
 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.dto.RechargeDto;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.service.StudentRechargeService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
-import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
+import java.math.BigDecimal;
+
+import javax.annotation.Resource;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.annotation.Resource;
-
-/**
- * @version V1.0
- * @Description: 充值
- * @date Date : 2019年09月23日 16:56
- */
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.service.StudentRechargeService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.common.controller.BaseController;
 
 @RequestMapping("recharge")
 @Api(tags = "账户充值")
 @RestController
 public class RechargeController extends BaseController {
-    @Resource
-    private SysUserFeignService sysUserFeignService;
-    @Autowired
-    private StudentRechargeService rechargeService;
-
-    @Autowired
-    private SysUserCashAccountService sysUserCashAccountService;
-
-    @ApiOperation("充值")
-    @GetMapping(value = "/recharge")
-    public Object recharge(RechargeDto rechargeDto){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            return failed("获取用户信息失败");
-        }
-        SysUserCashAccount userCashAccount = sysUserCashAccountService.get(sysUser.getId());
-        if(userCashAccount == null || !userCashAccount.getStatus().equals(1)){
-            return failed("账户不存在");
-        }
-
-        if(!userCashAccount.getStatus().equals(1)){
-            return failed("账户已冻结");
-        }
-
-        return succeed(rechargeService.recharge(rechargeDto));
-    }
+	@Resource
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private StudentRechargeService rechargeService;
+
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+
+	@ApiOperation("充值")
+	@GetMapping(value = "/recharge")
+	public Object recharge(String bankCardNo, BigDecimal amount) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("获取用户信息失败");
+		}
+
+		return succeed(rechargeService.recharge(sysUser.getId(), bankCardNo, amount));
+	}
 }

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

@@ -56,7 +56,7 @@ public class StudentCashAccountDetailController extends BaseController {
         }
 
         //
-        StudentRecharge studentRecharge = studentRechargeService.selectByTransNo(transNo);
+        StudentRecharge studentRecharge = studentRechargeService.queryByTransNo(transNo);
         if(studentRecharge == null){
             return failed("交易不存在");
         }