|
|
@@ -9,24 +9,31 @@ import com.zhongshu.card.client.model.school.BookInfoSearch;
|
|
|
import com.zhongshu.card.client.ret.ResultContent;
|
|
|
import com.zhongshu.card.client.ret.ResultMessage;
|
|
|
import com.zhongshu.card.client.service.payment.ExpenseFlowService;
|
|
|
+import com.zhongshu.card.client.utils.type.DataState;
|
|
|
+import com.zhongshu.card.client.utils.type.RechargeType;
|
|
|
import com.zhongshu.card.server.core.dao.org.UserCountDao;
|
|
|
import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
|
|
|
import com.zhongshu.card.server.core.dao.payment.WalletDao;
|
|
|
+import com.zhongshu.card.server.core.dao.payment.WalletRechargeDao;
|
|
|
import com.zhongshu.card.server.core.domain.org.UserAccount;
|
|
|
import com.zhongshu.card.server.core.domain.payment.ExpenseFlow;
|
|
|
import com.zhongshu.card.server.core.domain.payment.Wallet;
|
|
|
+import com.zhongshu.card.server.core.domain.payment.WalletRecharge;
|
|
|
import com.zhongshu.card.server.core.domain.school.BookInfo;
|
|
|
import com.zhongshu.card.server.core.domain.school.CardInfo;
|
|
|
import com.zhongshu.card.server.core.model.payment.ExpendParam;
|
|
|
import com.zhongshu.card.server.core.service.base.SuperService;
|
|
|
import com.zhongshu.card.server.core.util.BeanUtils;
|
|
|
+import com.zhongshu.card.server.core.util.CommonUtil;
|
|
|
import com.zhongshu.card.server.core.util.DateUtils;
|
|
|
+import com.zhongshu.card.server.core.util.NextNoUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
|
@@ -49,14 +56,21 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
|
|
|
@Autowired
|
|
|
WalletService walletService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ WalletRechargeDao walletRechargeDao;
|
|
|
+
|
|
|
/**
|
|
|
* 消费付款
|
|
|
*
|
|
|
* @param param
|
|
|
* @return
|
|
|
*/
|
|
|
+ @Transactional
|
|
|
public ResultContent expendPay(ExpendParam param) {
|
|
|
CardInfo cardInfo = param.getCardInfo();
|
|
|
+
|
|
|
+ String userId = cardInfo.getUserId();
|
|
|
+ UserAccount userAccount = userCountDao.findTopByUserId(userId);
|
|
|
// 得到钱包的金额
|
|
|
BigDecimal amount = param.getAmount();
|
|
|
ResultContent result = walletService.checkUserWallet(cardInfo.getUserId(), amount);
|
|
|
@@ -64,6 +78,76 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ // 钱包信息
|
|
|
+ Wallet wallet = walletService.getUserWalletByUserId(userId);
|
|
|
+ if (wallet.getDataState() != DataState.Enable) {
|
|
|
+ return ResultContent.buildFail(String.format("支付失败钱包", wallet.getDataState().getRemark()));
|
|
|
+ }
|
|
|
+ if (wallet.getAmount().compareTo(amount) < 0) {
|
|
|
+ return ResultContent.buildFail("余额不足");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 记录流水
|
|
|
+ ExpenseFlow expenseFlow = new ExpenseFlow();
|
|
|
+ // 设备信息
|
|
|
+ expenseFlow.setDeviceId(param.getDeviceId());
|
|
|
+ // 用户信息
|
|
|
+ expenseFlow.setUserId(cardInfo.getUserId());
|
|
|
+ // 卡片信息
|
|
|
+ expenseFlow.setCardNo(cardInfo.getCode());
|
|
|
+ expenseFlow.setCardInfo(cardInfo);
|
|
|
+ // 消费时间
|
|
|
+ if (param.getDeviceInfo() != null && param.getDeviceInfo().getDeviceType() != null) {
|
|
|
+ expenseFlow.setPayType(param.getDeviceInfo().getDeviceType().getRemark());
|
|
|
+ } else {
|
|
|
+ expenseFlow.setPayType("消费");
|
|
|
+ }
|
|
|
+
|
|
|
+ expenseFlow.setYear(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyy));
|
|
|
+ expenseFlow.setMonth(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternMM));
|
|
|
+ expenseFlow.setPaymentTime(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyySSS));
|
|
|
+ // 消费订单号
|
|
|
+ expenseFlow.setOrderNo(param.getOrder());
|
|
|
+ String paymentNo = NextNoUtil.getNextPaymentNo(null);
|
|
|
+ expenseFlow.setPaymentNo(paymentNo);
|
|
|
+ // 消费金额
|
|
|
+ expenseFlow.setPayAmount(amount);
|
|
|
+ expenseFlow.setPaymentWay(param.getPaymentType().getRemark());
|
|
|
+ // 关联参数
|
|
|
+ expenseFlow.setGoodsInfo(param.getIotParam());
|
|
|
+ expenseFlow.setPaymentStatus("支付成功");
|
|
|
+ expenseFlow.setIsPaySuccess(Boolean.TRUE);
|
|
|
+ expenseFlow.setPayRemark("支付成功");
|
|
|
+ expenseFlowDao.save(expenseFlow);
|
|
|
+
|
|
|
+ // 扣款
|
|
|
+ // 消费金额
|
|
|
+ try {
|
|
|
+ WalletRecharge walletRecharge = new WalletRecharge();
|
|
|
+ initEntityNoCheckOid(walletRecharge);
|
|
|
+ BigDecimal preAmount = wallet.getAmount();
|
|
|
+ BigDecimal afterAmount = preAmount.subtract(amount);
|
|
|
+ wallet.setAmount(afterAmount);
|
|
|
+
|
|
|
+ walletRecharge.setPreAmount(preAmount);
|
|
|
+ walletRecharge.setAmount(amount);
|
|
|
+ walletRecharge.setRechargeType(RechargeType.Expend);
|
|
|
+ walletRecharge.setAfterAmount(afterAmount);
|
|
|
+ walletRecharge.setUserId(userId);
|
|
|
+ walletRecharge.setUserAccount(userAccount);
|
|
|
+ walletRecharge.setWallet(wallet);
|
|
|
+ walletRecharge.setUserName(userAccount.getName());
|
|
|
+ walletRecharge.setPhone(userAccount.getPhone());
|
|
|
+ walletRecharge.setYear(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyy));
|
|
|
+ walletRecharge.setMonth(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternMM));
|
|
|
+ walletRecharge.setTimeStr(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyySSS));
|
|
|
+
|
|
|
+ walletDao.save(wallet);
|
|
|
+ walletRechargeDao.save(walletRecharge);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
return ResultContent.buildSuccess();
|
|
|
}
|
|
|
|