Selaa lähdekoodia

课程余额转余额

周箭河 5 vuotta sitten
vanhempi
commit
d3690d4f46

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

@@ -47,7 +47,7 @@ public interface SysUserCashAccountService extends BaseService<Integer, SysUserC
 	 * @param userId
 	 * @return
 	 */
-	boolean transferCourseBalanceToBalance(Integer userId);
+	boolean transferCourseBalanceToBalance(Integer userId,BigDecimal money);
 
 	/**
 	 * 获取行级锁

+ 206 - 200
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java

@@ -32,205 +32,211 @@ import java.util.Map;
 @Service
 public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysUserCashAccount> implements SysUserCashAccountService {
 
-	@Autowired
-	private SysUserCashAccountDao sysUserCashAccountDao;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private SysMessageService sysMessageService;
-
-	@Autowired
-	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
-	@Autowired
-	private SysUserCoursesAccountDetailDao sysUserCoursesAccountDetailDao;
-
-	@Override
-	public BaseDAO<Integer, SysUserCashAccount> getDAO() {
-		return sysUserCashAccountDao;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public boolean updateBalance(Integer userId, BigDecimal decimal) {
-
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
-			throw new BizException("账户不可用");
-		}
-		BigDecimal balance = cashAccount.getBalance().add(decimal);
-		if (balance.doubleValue() < 0) {
-			throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
-		}
-
-		cashAccount.setBalance(balance);
-		cashAccount.setUpdateTime(new Date());
-
-		sysUserCashAccountDao.update(cashAccount);
-
-		return true;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo) {
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
-			throw new BizException("账户不可用");
-		}
-		BigDecimal balance = cashAccount.getBalance().add(decimal);
-		if (balance.doubleValue() < 0) {
-			throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
-		}
-
-		Date date = new Date();
-
-		SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
-		detail.setAmount(decimal);
-		detail.setBalance(cashAccount.getBalance().add(decimal));
-		detail.setComment(memo);
-		detail.setCreateTime(date);
-		detail.setStatus(DealStatusEnum.SUCCESS);
-		detail.setType(type);
-		detail.setUpdateTime(date);
-		detail.setUserId(userId);
-
-		sysUserCashAccountDetailDao.insert(detail);
-
-		cashAccount.setBalance(balance);
-		cashAccount.setUpdateTime(date);
-
-		sysUserCashAccountDao.update(cashAccount);
-		if(!decimal.equals(BigDecimal.ZERO)){
-			//推送余额消费信息
-			Map<Integer,String> phoneMap = new HashMap<>(1);
-			SysUser sysUser = sysUserFeignService.queryUserById(userId);
-			phoneMap.put(userId,sysUser.getPhone());
-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
-					phoneMap,null,0,null,"",decimal,balance);
-			Map<Integer,String> idMap = new HashMap<>(1);
-			idMap.put(userId,userId.toString());
-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
-					idMap,null,0,null,"",decimal,balance);
-		}
-		return true;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	public boolean updateCourseBalance(Integer userId, BigDecimal decimal, BigDecimal amount, String description) {
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		cashAccount.setCourseBalance(decimal);
-		cashAccount.setUpdateTime(new Date());
-
-		sysUserCashAccountDao.update(cashAccount);
-
-		if(amount.compareTo(BigDecimal.ZERO)!=0){
-			SysUser sysUser = sysUserFeignService.queryUserById(userId);
-			SysUserCoursesAccountDetail sysUserCoursesAccountDetail=new SysUserCoursesAccountDetail();
-			sysUserCoursesAccountDetail.setUserId(userId);
-			sysUserCoursesAccountDetail.setAmount(amount);
-			sysUserCoursesAccountDetail.setBalance(decimal);
-			sysUserCoursesAccountDetail.setDescription(description+"-"+sysUser.getId());
-			sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
-		}
-
-		return true;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	public boolean appendCourseBalance(Integer userId, BigDecimal decimal, String description) {
-		SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
-		if (cashAccount == null) {
-			throw new BizException("用户[{}]现金账户不存在", userId);
-		}
-
-		BigDecimal balance = cashAccount.getCourseBalance().add(decimal);
-		if (balance.doubleValue() < 0) {
-			throw new BizException("现金账户[{}]课程余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
-		}
-
-		Date date = new Date();
-		cashAccount.setCourseBalance(balance);
-		cashAccount.setUpdateTime(date);
-
-		sysUserCashAccountDao.update(cashAccount);
-
-		if(decimal.compareTo(BigDecimal.ZERO)!=0){
-			SysUser sysUser = sysUserFeignService.queryUserById(userId);
-			SysUserCoursesAccountDetail sysUserCoursesAccountDetail=new SysUserCoursesAccountDetail();
-			sysUserCoursesAccountDetail.setUserId(userId);
-			sysUserCoursesAccountDetail.setAmount(decimal);
-			sysUserCoursesAccountDetail.setBalance(balance);
-			sysUserCoursesAccountDetail.setDescription(description+"-"+sysUser.getId());
-			sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
-		}
-
-		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);
-
-		if(cashAccount.getCourseBalance().compareTo(BigDecimal.ZERO)!=0){
-			SysUserCoursesAccountDetail sysUserCoursesAccountDetail=new SysUserCoursesAccountDetail();
-			sysUserCoursesAccountDetail.setUserId(userId);
-			sysUserCoursesAccountDetail.setAmount(cashAccount.getCourseBalance());
-			sysUserCoursesAccountDetail.setBalance(new BigDecimal(0));
-			sysUserCoursesAccountDetail.setDescription("课程余额转账");
-			sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-			sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
-		}
-
-		return true;
-	}
-
-	@Override
-	public SysUserCashAccount getLocked(Integer userId) {
-		return sysUserCashAccountDao.getLocked(userId);
-	}
+    @Autowired
+    private SysUserCashAccountDao sysUserCashAccountDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
+    private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+    @Autowired
+    private SysUserCoursesAccountDetailDao sysUserCoursesAccountDetailDao;
+
+    @Override
+    public BaseDAO<Integer, SysUserCashAccount> getDAO() {
+        return sysUserCashAccountDao;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean updateBalance(Integer userId, BigDecimal decimal) {
+
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+            throw new BizException("账户不可用");
+        }
+        BigDecimal balance = cashAccount.getBalance().add(decimal);
+        if (balance.doubleValue() < 0) {
+            throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+        }
+
+        cashAccount.setBalance(balance);
+        cashAccount.setUpdateTime(new Date());
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+            throw new BizException("账户不可用");
+        }
+        BigDecimal balance = cashAccount.getBalance().add(decimal);
+        if (balance.doubleValue() < 0) {
+            throw new BizException("现金账户[{}]余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+        }
+
+        Date date = new Date();
+
+        SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+        detail.setAmount(decimal);
+        detail.setBalance(cashAccount.getBalance().add(decimal));
+        detail.setComment(memo);
+        detail.setCreateTime(date);
+        detail.setStatus(DealStatusEnum.SUCCESS);
+        detail.setType(type);
+        detail.setUpdateTime(date);
+        detail.setUserId(userId);
+
+        sysUserCashAccountDetailDao.insert(detail);
+
+        cashAccount.setBalance(balance);
+        cashAccount.setUpdateTime(date);
+
+        sysUserCashAccountDao.update(cashAccount);
+        if (!decimal.equals(BigDecimal.ZERO)) {
+            //推送余额消费信息
+            Map<Integer, String> phoneMap = new HashMap<>(1);
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            phoneMap.put(userId, sysUser.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
+                    phoneMap, null, 0, null, "", decimal, balance);
+            Map<Integer, String> idMap = new HashMap<>(1);
+            idMap.put(userId, userId.toString());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
+                    idMap, null, 0, null, "", decimal, balance);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public boolean updateCourseBalance(Integer userId, BigDecimal decimal, BigDecimal amount, String description) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        cashAccount.setCourseBalance(decimal);
+        cashAccount.setUpdateTime(new Date());
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        if (amount.compareTo(BigDecimal.ZERO) != 0) {
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            SysUserCoursesAccountDetail sysUserCoursesAccountDetail = new SysUserCoursesAccountDetail();
+            sysUserCoursesAccountDetail.setUserId(userId);
+            sysUserCoursesAccountDetail.setAmount(amount);
+            sysUserCoursesAccountDetail.setBalance(decimal);
+            sysUserCoursesAccountDetail.setDescription(description + "-" + sysUser.getId());
+            sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public boolean appendCourseBalance(Integer userId, BigDecimal decimal, String description) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        BigDecimal balance = cashAccount.getCourseBalance().add(decimal);
+        if (balance.doubleValue() < 0) {
+            throw new BizException("现金账户[{}]课程余额不足,可用余额剩{}元", userId, cashAccount.getBalance().doubleValue());
+        }
+
+        Date date = new Date();
+        cashAccount.setCourseBalance(balance);
+        cashAccount.setUpdateTime(date);
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        if (decimal.compareTo(BigDecimal.ZERO) != 0) {
+            SysUser sysUser = sysUserFeignService.queryUserById(userId);
+            SysUserCoursesAccountDetail sysUserCoursesAccountDetail = new SysUserCoursesAccountDetail();
+            sysUserCoursesAccountDetail.setUserId(userId);
+            sysUserCoursesAccountDetail.setAmount(decimal);
+            sysUserCoursesAccountDetail.setBalance(balance);
+            sysUserCoursesAccountDetail.setDescription(description + "-" + sysUser.getId());
+            sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean transferCourseBalanceToBalance(Integer userId, BigDecimal money) {
+        SysUserCashAccount cashAccount = sysUserCashAccountDao.getLocked(userId);
+        if (money == null || money.compareTo(BigDecimal.ZERO) <= 0) {
+            throw new BizException("充值金额必须大于0");
+        }
+        if (cashAccount == null) {
+            throw new BizException("用户[{}]现金账户不存在", userId);
+        }
+
+        if (cashAccount.getStatus() != PlatformCashAccountStatusEnum.NORMAL) {
+            throw new BizException("账户不可用");
+        }
+
+        if (money.compareTo(cashAccount.getCourseBalance()) > 0) {
+            throw new BizException("充值金额不能大于课程余额");
+        }
+
+        Date date = new Date();
+
+        SysUserCashAccountDetail detail = new SysUserCashAccountDetail();
+        detail.setAmount(money);
+        detail.setBalance(cashAccount.getBalance().add(money));
+        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(money));
+        cashAccount.setCourseBalance(cashAccount.getCourseBalance().subtract(money));
+        cashAccount.setUpdateTime(date);
+
+        sysUserCashAccountDao.update(cashAccount);
+
+        SysUserCoursesAccountDetail sysUserCoursesAccountDetail = new SysUserCoursesAccountDetail();
+        sysUserCoursesAccountDetail.setUserId(userId);
+        sysUserCoursesAccountDetail.setType(PlatformCashAccountDetailTypeEnum.FILL_ACCOUNT);
+        sysUserCoursesAccountDetail.setAmount(money.negate());
+        sysUserCoursesAccountDetail.setBalance(cashAccount.getCourseBalance().subtract(money));
+        sysUserCoursesAccountDetail.setDescription("课程余额转账");
+        sysUserCoursesAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+        sysUserCoursesAccountDetailDao.insert(sysUserCoursesAccountDetail);
+
+        return true;
+    }
+
+    @Override
+    public SysUserCashAccount getLocked(Integer userId) {
+        return sysUserCashAccountDao.getLocked(userId);
+    }
 
 }

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

@@ -47,8 +47,8 @@ public class SysUserCashAccountController extends BaseController {
 	@ApiOperation(value = "将课程余额转入到可用余额")
 	@PostMapping("/transferCourseBalanceToBalance")
 	@PreAuthorize("@pcs.hasPermissions('userCashAccount/transferCourseBalanceToBalance')")
-	public Object transferCourseBalanceToBalance(Integer userId) {
-		sysUserCashAccountService.transferCourseBalanceToBalance(userId);
+	public Object transferCourseBalanceToBalance(Integer userId,BigDecimal money) {
+		sysUserCashAccountService.transferCourseBalanceToBalance(userId,money);
 		return succeed();
 	}