| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jsoup.helper.DataUtil; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.web3j.utils.Strings; |
| | |
| | | private final DappMemberNodeMapper dappMemberNodeMapper; |
| | | private final DappAKlineMapper dappAKlineMapper; |
| | | private final DappUsdtPerkEntityMapper dappUsdtPerkEntityMapper; |
| | | private final MallGoodsMapper mallGoodsMapper; |
| | | private final MallOrderInfoMapper mallOrderInfoMapper; |
| | | private final MallOrderItemMapper mallOrderItemMapper; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | |
| | | if (member == null) { |
| | | String referenceID = null; |
| | | int nodeType = 0; |
| | | // |
| | | if (!"asdf4321".equals(connectDto.getInviteId())) { |
| | | DappMemberEntity parent = dappMemberDao.selectByAddress(connectDto.getInviteId(), null); |
| | | DappMemberEntity left = dappMemberDao.selectInviteLeft(connectDto.getInviteId()); |
| | | DappMemberEntity right = dappMemberDao.selectInviteRight(connectDto.getInviteId()); |
| | | if(ObjectUtil.isEmpty(left) && ObjectUtil.isEmpty(right)){ |
| | | throw new FebsException("recommender is not exist"); |
| | | } |
| | | if(ObjectUtil.isEmpty(left)){ |
| | | nodeType = 2; |
| | | }else{ |
| | | nodeType = 1; |
| | | } |
| | | String inviteId = ObjectUtil.isEmpty(left) ? right.getInviteId() : left.getInviteId(); |
| | | DappMemberEntity parent = dappMemberDao.selectByAddress(inviteId, null); |
| | | if (parent == null) { |
| | | throw new FebsException("recommender is not exist"); |
| | | } |
| | |
| | | } else { |
| | | connectDto.setInviteId(null); |
| | | } |
| | | member = insertMember(connectDto.getAddress(), referenceID); |
| | | member = insertMember(connectDto.getAddress(), referenceID,nodeType); |
| | | } |
| | | |
| | | String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign()); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public DappMemberEntity insertMember(String address, String refererId) { |
| | | public DappMemberEntity insertMember(String address, String refererId,int nodeType) { |
| | | |
| | | return insertMember(address, refererId, "BSC", DataDictionaryEnum.MEMBER.getCode()); |
| | | return insertMember(address, refererId, "BSC", MemberLevelEnum.MEMBER.getType(),nodeType); |
| | | } |
| | | |
| | | @Override |
| | | public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType) { |
| | | public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType,int nodeType) { |
| | | DappMemberEntity member = new DappMemberEntity(); |
| | | member.setAddress(address); |
| | | member.setChainType(chainType); |
| | | member.setAccountType(accountType); |
| | | member.setActiveStatus(2); |
| | | member.setNodeType(nodeType); |
| | | |
| | | dappMemberDao.insert(member); |
| | | |
| | |
| | | // 若没有推荐人,则直接激活 |
| | | member.setActiveStatus(2); |
| | | } |
| | | |
| | | member.setInviteId(ShareCodeUtil.toSerialCode(member.getId())); |
| | | String inviteIdStr = ShareCodeUtil.toSerialCode(member.getId()); |
| | | member.setInviteId(inviteIdStr); |
| | | member.setInviteLeft(inviteIdStr+"L"); |
| | | member.setInviteRight(inviteIdStr+"R"); |
| | | member.setRefererId(refererId); |
| | | if (StrUtil.isNotBlank(refererId)) { |
| | | boolean flag = false; |
| | |
| | | return new FebsResponse().success(); |
| | | } |
| | | |
| | | @Override |
| | | public IPage<MallGoodsListVo> findMallGoodsListInPage(MallGoodsQueryDto queryDto) { |
| | | Page<MallGoodsListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize()); |
| | | return dappMemberDao.selectMallGoodsListQueryInPage(queryDto, page); |
| | | } |
| | | |
| | | @Override |
| | | public IPage<MallOrderListVo> findMallOrderListInPage(MallOrderQueryDto queryDto) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | queryDto.setMemberId(member.getId()); |
| | | Page<MallOrderListVo> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize()); |
| | | return dappMemberDao.selectMallOrderListQueryInPage(queryDto, page); |
| | | } |
| | | |
| | | @Override |
| | | public MallOrderListVo findOrderDetailsById(Long id) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | MallOrderListVo mallOrderListVo = dappMemberDao.selectMallOrderListVoById(id); |
| | | List<MallOrderItemVo> mallOrderItemVoList = dappMemberDao.selectMallOrderItemVoByOrderId(id); |
| | | mallOrderListVo.setItems(mallOrderItemVoList); |
| | | return mallOrderListVo; |
| | | } |
| | | |
| | | @Override |
| | | public MallGoodsListVo findGoodsDetailsById(Long id) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | MallGoodsListVo mallGoodsListVo = dappMemberDao.selectMallGoodsListVoById(id); |
| | | return mallGoodsListVo; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public Long createOrder(AddOrderDto addOrderDto) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | /** |
| | | * 1、商品是否上架 |
| | | * 2、用户余额是否足够 |
| | | */ |
| | | MallGoods mallGoods = mallGoodsMapper.selectById(addOrderDto.getGoodsId()); |
| | | if(ObjectUtil.isEmpty(mallGoods)){ |
| | | throw new FebsException("商品不存在"); |
| | | } |
| | | if(MallGoods.ISSALE_STATUS_DISABLED == mallGoods.getIsSale()){ |
| | | throw new FebsException("商品已下架"); |
| | | } |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId()); |
| | | if(ObjectUtil.isEmpty(dappWalletCoinEntity)){ |
| | | throw new FebsException("余额不足"); |
| | | } |
| | | BigDecimal presentPrice = new BigDecimal(mallGoods.getPresentPrice()); |
| | | BigDecimal totalAmount = presentPrice.multiply(new BigDecimal(addOrderDto.getGoodsCnt())).setScale(2,BigDecimal.ROUND_DOWN); |
| | | if(BigDecimal.ZERO.compareTo(totalAmount) >= 0){ |
| | | throw new FebsException("商品异常"); |
| | | } |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | if(totalAmount.compareTo(availableAmount) > 0){ |
| | | throw new FebsException("余额不足"); |
| | | } |
| | | /** |
| | | * 生成一条待支付的订单 |
| | | */ |
| | | |
| | | String orderNo = MallUtils.getOrderNum(); |
| | | MallOrderInfo mallOrderInfo = new MallOrderInfo(); |
| | | mallOrderInfo.setOrderNo(orderNo); |
| | | mallOrderInfo.setMemberId(member.getId()); |
| | | mallOrderInfo.setOrderTime(DateUtil.date()); |
| | | mallOrderInfo.setAmount(totalAmount); |
| | | mallOrderInfo.setStatus(MallOrderInfo.STATUS_WAIT); |
| | | mallOrderInfo.setOrderType(1); |
| | | mallOrderInfoMapper.insert(mallOrderInfo); |
| | | MallOrderItem mallOrderItem = new MallOrderItem(); |
| | | mallOrderItem.setOrderId(mallOrderInfo.getId()); |
| | | mallOrderItem.setGoodsId(addOrderDto.getGoodsId()); |
| | | mallOrderItem.setGoodsName(mallGoods.getGoodsName()); |
| | | mallOrderItem.setCnt(addOrderDto.getGoodsCnt()); |
| | | mallOrderItem.setPrice(presentPrice); |
| | | mallOrderItem.setAmount(totalAmount); |
| | | mallOrderItemMapper.insert(mallOrderItem); |
| | | return mallOrderInfo.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void cancelOrder(Long id) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id); |
| | | if (ObjectUtil.isEmpty(orderInfo)) { |
| | | throw new FebsException("订单异常"); |
| | | } |
| | | |
| | | if (MallOrderInfo.STATUS_WAIT != orderInfo.getStatus()) { |
| | | throw new FebsException("只能取消待支付的订单"); |
| | | } |
| | | |
| | | orderInfo.setStatus(MallOrderInfo.STATUS_CANCEL); |
| | | orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF); |
| | | mallOrderInfoMapper.updateById(orderInfo); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void payOrder(Long id) { |
| | | DappMemberEntity member = LoginUserUtil.getAppUser(); |
| | | MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id); |
| | | if (ObjectUtil.isEmpty(orderInfo)) { |
| | | throw new FebsException("订单异常"); |
| | | } |
| | | |
| | | if (MallOrderInfo.STATUS_WAIT != orderInfo.getStatus()) { |
| | | throw new FebsException("只能支付待支付的订单"); |
| | | } |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(member.getId()); |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | BigDecimal totalAmount = orderInfo.getAmount(); |
| | | if(totalAmount.compareTo(availableAmount) > 0){ |
| | | throw new FebsException("余额不足"); |
| | | } |
| | | orderInfo.setPayTime(DateUtil.date()); |
| | | String payOrderNo = MallUtils.getOrderNum("PAY"); |
| | | orderInfo.setPayOrderNo(payOrderNo); |
| | | orderInfo.setPayMethod("余额支付"); |
| | | orderInfo.setPayResult("成功"); |
| | | orderInfo.setStatus(MallOrderInfo.STATUS_PAY); |
| | | mallOrderInfoMapper.updateById(orderInfo); |
| | | /** |
| | | * 更新用户余额 |
| | | */ |
| | | dappWalletCoinDao.reduceTotalAndAvailableByMemberId(member.getId(),totalAmount); |
| | | DappFundFlowEntity donateScoreFlow = new DappFundFlowEntity( |
| | | member.getId(), |
| | | totalAmount.negate(), |
| | | FundFlowEnum.PAY_ORDER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | payOrderNo, |
| | | id); |
| | | |
| | | /** |
| | | * 支付成功,消费后成有效账户后可分享(有效用户可推广) |
| | | */ |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId()); |
| | | if(2 == dappMemberEntity.getActiveStatus()){ |
| | | dappMemberEntity.setActiveStatus(1); |
| | | dappMemberDao.updateById(dappMemberEntity); |
| | | } |
| | | /** |
| | | * todo 发送一条订单出的消息 |
| | | */ |
| | | chainProducer.sendSpeedPayOrderMsg(id); |
| | | chainProducer.sendAutoLevelUpMsg(member.getId()); |
| | | } |
| | | |
| | | public static List<List<String>> partitionList(List<String> originalList, int partitionSize) { |
| | | List<List<String>> partitionedList = new ArrayList<>(); |
| | | int size = originalList.size(); |