فهرست منبع

Merge remote-tracking branch 'origin/system_fee' into system_fee

zouxuan 4 سال پیش
والد
کامیت
5b9eb754ae

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

@@ -15,7 +15,8 @@ public enum GroupType implements BaseEnum<String, GroupType> {
 	SUBJECT_CHANGE("声部更换"),
 	MAINTENANCE("乐保"),
 	REPLACEMENT("乐器置换"),
-	DEGREE("6.1考级活动");
+	DEGREE("6.1考级活动"),
+	MEMBER("购买会员");
 
 	private String desc;
 

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

@@ -24,7 +24,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
 	MAINTENANCE("MAINTENANCE","乐保"),
 	REPLACEMENT("REPLACEMENT","乐器置换"),
-	DEGREE("DEGREE","6.1考级活动");
+	DEGREE("DEGREE","6.1考级活动"),
+	MEMBER("MEMBER", "购买会员");
 
 
 	private String code;

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PeriodEnum.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * 周期
+ */
+public enum PeriodEnum implements BaseEnum<String, PeriodEnum> {
+	DAY("日"), MONTH("月"), YEAR_HALF("半年"), YEAR("年");
+
+	private String msg;
+
+	PeriodEnum(String msg) {
+		this.msg = msg;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String getCode() {
+		return this.name();
+	}
+}

+ 27 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/MemberRankSettingService.java

@@ -1,17 +1,39 @@
 package com.ym.mec.biz.service;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.common.service.BaseService;
 
 public interface MemberRankSettingService extends BaseService<Integer, MemberRankSetting> {
 
-    void add(MemberRankSetting memberRankSetting);
+	void add(MemberRankSetting memberRankSetting);
 
-    MemberRankSetting getDetail(Integer memberRankSettingId);
+	MemberRankSetting getDetail(Integer memberRankSettingId);
 
-    void updateSetting(MemberRankSetting memberRankSetting);
-    
-    List<MemberRankSetting> queryListByIsDefault(Boolean isDefault);
+	void updateSetting(MemberRankSetting memberRankSetting);
+
+	List<MemberRankSetting> queryListByIsDefault(Boolean isDefault);
+
+	/**
+	 * 会员购买
+	 * @param userId 会员编号
+	 * @param memberRankId 会员等级编号
+	 * @param periodEnum 会员周期
+	 * @param amount 金额
+	 * @param isUseBalance 是否使用余额
+	 * @return
+	 */
+	Map buy(Integer userId, Integer memberRankId, PeriodEnum periodEnum, BigDecimal amount, boolean isUseBalance) throws Exception;
+	
+	/**
+	 * 订单回调
+	 * @param studentPaymentOrder
+	 * @return
+	 */
+	boolean orderCallback(StudentPaymentOrder studentPaymentOrder);
 }

+ 217 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -1,29 +1,73 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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.MemberRankPrivilegesDao;
 import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
+import com.ym.mec.biz.dal.entity.MemberFeeSetting;
 import com.ym.mec.biz.dal.entity.MemberRankPrivileges;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+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.GroupType;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.MemberFeeSettingService;
 import com.ym.mec.biz.service.MemberRankSettingService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentService;
+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.impl.BaseServiceImpl;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.stream.Collectors;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 
 @Service
-public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting>  implements MemberRankSettingService {
+public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
 
 	@Autowired
 	private MemberRankSettingDao memberRankSettingDao;
 	@Autowired
 	private MemberRankPrivilegesDao memberRankPrivilegesDao;
 
+	@Autowired
+	private MemberFeeSettingService memberFeeSettingService;
+
+	@Autowired
+	private StudentService studentService;
+
+	@Autowired
+	private StudentPaymentOrderService studentPaymentOrderService;
+
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
+	
+    @Autowired
+    private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+
+    @Autowired
+    private ContractService contractService;
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
 	@Override
 	public BaseDAO<Integer, MemberRankSetting> getDAO() {
 		return memberRankSettingDao;
@@ -34,22 +78,22 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 	public void add(MemberRankSetting memberRankSetting) {
 		memberRankSettingDao.insert(memberRankSetting);
 		List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
-		if(memberPrivilegesItemIdList == null || memberPrivilegesItemIdList.size() == 0){
+		if (memberPrivilegesItemIdList == null || memberPrivilegesItemIdList.size() == 0) {
 			throw new BizException("操作失败:请配置会员权益");
 		}
-		memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(),memberPrivilegesItemIdList);
+		memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
 	}
 
-    @Override
-    public MemberRankSetting getDetail(Integer memberRankSettingId) {
+	@Override
+	public MemberRankSetting getDetail(Integer memberRankSettingId) {
 		MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankSettingId);
 		List<MemberRankPrivileges> byRankSettingId = memberRankPrivilegesDao.findByRankSettingId(memberRankSettingId);
-		if(byRankSettingId != null && byRankSettingId.size() > 0){
+		if (byRankSettingId != null && byRankSettingId.size() > 0) {
 			memberRankSetting.setMemberRankPrivileges(byRankSettingId);
-			memberRankSetting.setMemberPrivilegesItemIdList(byRankSettingId.stream().map(e->e.getMemberPrivilegesId()).collect(Collectors.toList()));
+			memberRankSetting.setMemberPrivilegesItemIdList(byRankSettingId.stream().map(e -> e.getMemberPrivilegesId()).collect(Collectors.toList()));
 		}
 		return memberRankSetting;
-    }
+	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -57,8 +101,8 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 		memberRankSettingDao.update(memberRankSetting);
 		memberRankPrivilegesDao.deleteByRankSettingId(memberRankSetting.getId());
 		List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
-		if(memberPrivilegesItemIdList != null && memberPrivilegesItemIdList.size() > 0){
-			memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(),memberPrivilegesItemIdList);
+		if (memberPrivilegesItemIdList != null && memberPrivilegesItemIdList.size() > 0) {
+			memberRankPrivilegesDao.batchInsert(memberRankSetting.getId(), memberPrivilegesItemIdList);
 		}
 	}
 
@@ -66,4 +110,160 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 	public List<MemberRankSetting> queryListByIsDefault(Boolean isDefault) {
 		return memberRankSettingDao.queryListByIsDefault(isDefault);
 	}
+
+	@Override
+	public Map buy(Integer userId, Integer memberRankId, PeriodEnum periodEnum, BigDecimal amount, boolean isUseBalance) throws Exception {
+		Student student = studentService.get(userId);
+		if (student == null) {
+			throw new BizException("非法访问");
+		}
+
+		Integer organId = student.getOrganId();
+		if (organId == null) {
+			throw new BizException("学生没有分部编号");
+		}
+
+		MemberFeeSetting memberFeeSetting = memberFeeSettingService.findByRankIdAndOrganId(organId, memberRankId);
+
+		if (memberFeeSetting == null) {
+			throw new BizException("分部会员价格出现异常");
+		}
+
+		BigDecimal actualAmount = BigDecimal.ZERO;
+
+		switch (periodEnum) {
+		case DAY:
+			actualAmount = memberFeeSetting.getCurrentDayFee();
+			break;
+		case MONTH:
+			actualAmount = memberFeeSetting.getCurrentMonthFee();
+			break;
+		case YEAR_HALF:
+			actualAmount = memberFeeSetting.getCurrentHalfYearFee();
+			break;
+		case YEAR:
+			actualAmount = memberFeeSetting.getCurrentYearFee();
+			break;
+
+		default:
+			break;
+		}
+
+		// 判断金额是否正确
+		if (actualAmount.compareTo(amount) != 0) {
+			throw new BizException("非法请求");
+		}
+
+		Date date = new Date();
+
+		StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+		studentPaymentOrder.setUserId(userId);
+		studentPaymentOrder.setOrganId(organId);
+		studentPaymentOrder.setRoutingOrganId(organId);
+		studentPaymentOrder.setCreateTime(date);
+		studentPaymentOrder.setUpdateTime(date);
+		studentPaymentOrder.setExpectAmount(amount);
+		studentPaymentOrder.setActualAmount(amount);
+		studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
+		studentPaymentOrder.setStatus(DealStatusEnum.ING);
+		studentPaymentOrder.setVersion(0);
+		studentPaymentOrder.setType(OrderTypeEnum.MEMBER);
+		studentPaymentOrder.setGroupType(GroupType.MEMBER);
+		studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
+		studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
+		studentPaymentOrder.setMemo("会员购买");
+		studentPaymentOrder.setPaymentChannel("BALANCE");
+
+		if (isUseBalance) {
+			SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
+			if (userCashAccount == null) {
+				throw new BizException("用户账户找不到");
+			}
+			studentPaymentOrder.setPaymentChannel("BALANCE");
+			if (userCashAccount.getBalance().subtract(amount).doubleValue() >= 0) {
+				studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
+				studentPaymentOrder.setBalancePaymentAmount(amount);
+				studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+				sysUserCashAccountService.updateBalance(userId, amount.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "购买会员");
+			} else {
+				if (userCashAccount.getBalance().doubleValue() > 0) {
+					sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "乐团续费");
+					studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
+					studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance()));
+				}
+			}
+		}
+
+		return studentPaymentOrderService.createOrder(studentPaymentOrder, null, "BUY_MEMBER");
+	}
+
+	@Override
+	public boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
+		Date nowDate = new Date();
+        //更新订单信息
+        studentPaymentOrder.setUpdateTime(nowDate);
+        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
+        if (updateCount <= 0) {
+            throw new BizException("订单更新失败");
+        }
+
+        Integer userId = studentPaymentOrder.getUserId();
+        
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
+
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "购买会员支付失败");
+            }
+            
+            return true;
+        }
+
+        //支付成功
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
+        	
+        	//添加会员有效时长
+
+            //插入交易明细
+            BigDecimal amount = studentPaymentOrder.getActualAmount();
+            if (amount.compareTo(BigDecimal.ZERO) > 0) {
+                SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
+                //充值
+                SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
+                rechargeDetail.setAmount(amount);
+                rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
+                rechargeDetail.setComment("缴费前充值");
+                rechargeDetail.setCreateTime(nowDate);
+                rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
+                rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
+                rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+                rechargeDetail.setUpdateTime(nowDate);
+                rechargeDetail.setUserId(userId);
+                rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
+                rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+                sysUserCashAccountDetailService.insert(rechargeDetail);
+
+                //缴费
+                SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
+                paymentDetail.setAmount(amount.negate());
+                paymentDetail.setBalance(cashAccount.getBalance());
+                paymentDetail.setComment("购买会员");
+                paymentDetail.setCreateTime(nowDate);
+                paymentDetail.setStatus(DealStatusEnum.SUCCESS);
+                paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
+                paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
+                paymentDetail.setUpdateTime(nowDate);
+                paymentDetail.setUserId(userId);
+                rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                sysUserCashAccountDetailService.insert(paymentDetail);
+            }
+
+            try {
+                contractService.transferProduceContract(userId, null);
+            } catch (Exception e) {
+                logger.error("产品协议生成失败", e);
+            }
+        }
+        return true;
+	}
 }

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

@@ -42,6 +42,7 @@ import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.ChildrenDayReserveService;
 import com.ym.mec.biz.service.DegreeRegistrationService;
+import com.ym.mec.biz.service.MemberRankSettingService;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.PracticeGroupService;
@@ -116,6 +117,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private ReplacementInstrumentActivityService replacementInstrumentActivityService;
     @Autowired
     private ChildrenDayReserveService childrenDayReserveService;
+    
+    @Autowired
+    private MemberRankSettingService memberRankSettingService;
     @Autowired
     private PayService payService;
     @Autowired
@@ -477,6 +481,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             replacementInstrumentActivityService.orderCallback(order);
         }else if (order.getType().equals(OrderTypeEnum.DEGREE)) {
             childrenDayReserveService.orderCallback(order);
+        }else if (order.getType().equals(OrderTypeEnum.MEMBER)) {
+        	memberRankSettingService.orderCallback(order);
         }
     }
 

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

@@ -3,6 +3,7 @@ package com.ym.mec.student.controller;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +16,7 @@ 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.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
 import com.ym.mec.biz.service.MemberFeeSettingService;
 import com.ym.mec.biz.service.MemberRankSettingService;
 import com.ym.mec.common.controller.BaseController;
@@ -26,7 +28,7 @@ public class MemberRankController extends BaseController {
 
 	@Autowired
 	private MemberFeeSettingService memberFeeSettingService;
-	
+
 	@Autowired
 	private MemberRankSettingService memberRankSettingService;
 
@@ -51,7 +53,7 @@ public class MemberRankController extends BaseController {
 
 	@ApiOperation(value = "购买会员")
 	@PostMapping("/buy")
-	public Object buy() {
+	public Object buy(Integer memberRankId, PeriodEnum periodEnum, BigDecimal amount, boolean isUseBalance) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");

+ 6 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -118,6 +118,12 @@ public class StudentManageController extends BaseController {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
 		Student student = studentService.get(user.getId());
+		student.setUsername(user.getUsername());
+		student.setPhone(user.getPhone());
+		student.setCurrentClass(user.getCurrentClass());
+		student.setCurrentGrade(user.getCurrentGrade());
+		student.setRealName(user.getRealName());
+		student.setIdCardNo(user.getIdCardNo());
 		if (student != null) {
 			// 获取会员等级图标
 			MemberRankSetting memberRankSetting = memberRankSettingService.get(student.getMemberRankSettingId());