|
@@ -1,29 +1,73 @@
|
|
package com.ym.mec.biz.service.impl;
|
|
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.MemberRankPrivilegesDao;
|
|
import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
|
|
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.MemberRankPrivileges;
|
|
import com.ym.mec.biz.dal.entity.MemberRankSetting;
|
|
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.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.dal.BaseDAO;
|
|
import com.ym.mec.common.exception.BizException;
|
|
import com.ym.mec.common.exception.BizException;
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
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
|
|
@Service
|
|
-public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
|
|
|
|
|
|
+public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private MemberRankSettingDao memberRankSettingDao;
|
|
private MemberRankSettingDao memberRankSettingDao;
|
|
@Autowired
|
|
@Autowired
|
|
private MemberRankPrivilegesDao memberRankPrivilegesDao;
|
|
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
|
|
@Override
|
|
public BaseDAO<Integer, MemberRankSetting> getDAO() {
|
|
public BaseDAO<Integer, MemberRankSetting> getDAO() {
|
|
return memberRankSettingDao;
|
|
return memberRankSettingDao;
|
|
@@ -34,22 +78,22 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
public void add(MemberRankSetting memberRankSetting) {
|
|
public void add(MemberRankSetting memberRankSetting) {
|
|
memberRankSettingDao.insert(memberRankSetting);
|
|
memberRankSettingDao.insert(memberRankSetting);
|
|
List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
|
|
List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
|
|
- if(memberPrivilegesItemIdList == null || memberPrivilegesItemIdList.size() == 0){
|
|
|
|
|
|
+ if (memberPrivilegesItemIdList == null || memberPrivilegesItemIdList.size() == 0) {
|
|
throw new BizException("操作失败:请配置会员权益");
|
|
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);
|
|
MemberRankSetting memberRankSetting = memberRankSettingDao.get(memberRankSettingId);
|
|
List<MemberRankPrivileges> byRankSettingId = memberRankPrivilegesDao.findByRankSettingId(memberRankSettingId);
|
|
List<MemberRankPrivileges> byRankSettingId = memberRankPrivilegesDao.findByRankSettingId(memberRankSettingId);
|
|
- if(byRankSettingId != null && byRankSettingId.size() > 0){
|
|
|
|
|
|
+ if (byRankSettingId != null && byRankSettingId.size() > 0) {
|
|
memberRankSetting.setMemberRankPrivileges(byRankSettingId);
|
|
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;
|
|
return memberRankSetting;
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -57,8 +101,8 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
|
|
memberRankSettingDao.update(memberRankSetting);
|
|
memberRankSettingDao.update(memberRankSetting);
|
|
memberRankPrivilegesDao.deleteByRankSettingId(memberRankSetting.getId());
|
|
memberRankPrivilegesDao.deleteByRankSettingId(memberRankSetting.getId());
|
|
List<Integer> memberPrivilegesItemIdList = memberRankSetting.getMemberPrivilegesItemIdList();
|
|
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) {
|
|
public List<MemberRankSetting> queryListByIsDefault(Boolean isDefault) {
|
|
return memberRankSettingDao.queryListByIsDefault(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;
|
|
|
|
+ }
|
|
}
|
|
}
|