| | |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.ruoyi.other.api.domain.Shop; |
| | | import com.ruoyi.other.api.domain.ShopBalanceStatement; |
| | | import com.ruoyi.other.api.domain.ShopWithdraw; |
| | | import com.ruoyi.other.mapper.ShopWithdrawMapper; |
| | | import com.ruoyi.other.service.ShopBalanceStatementService; |
| | | import com.ruoyi.other.service.ShopService; |
| | | import com.ruoyi.other.service.ShopWithdrawService; |
| | |
| | | import com.ruoyi.other.util.payment.model.SinglePay; |
| | | import com.ruoyi.other.util.payment.model.SinglePayCallbackResult; |
| | | import com.ruoyi.other.util.payment.model.SinglePayResult; |
| | | import com.ruoyi.other.util.payment.wx.WechatPayService; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | |
| | | @Resource |
| | | private SysUserClient sysUserClient; |
| | | @Autowired |
| | | private ShopWithdrawMapper shopWithdrawMapper; |
| | | |
| | | @Autowired |
| | | private WechatPayService wechatPayService; |
| | | |
| | | |
| | | @GetMapping("/getShopById") |
| | |
| | | @ApiParam("手机号") String phone, |
| | | @ApiParam("审核状态(0=待审核,1=审核通过,2=审核失败)")Integer auditStatus) { |
| | | //模糊查询手机号 |
| | | List<Long> collect=null; |
| | | List<Integer> shopIds=new ArrayList<>(); |
| | | if (StringUtils.isNotEmpty(phone)) { |
| | | List<AppUser> data = appUserClient.getAppUserByPhoneNoFilter(phone).getData(); |
| | | collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); |
| | | if (CollectionUtils.isEmpty(collect)) { |
| | | QueryWrapper<Shop> queryWrapper=new QueryWrapper<>(); |
| | | queryWrapper.like(StringUtils.isNotEmpty(phone),"phone", phone); |
| | | shopIds=shopService.list(queryWrapper).stream().map(Shop::getId).collect(Collectors.toList()); |
| | | if (CollectionUtils.isEmpty(shopIds)) { |
| | | return R.ok(new PageInfo<>()); |
| | | } |
| | | } |
| | | if (shopId!=null && !shopIds.contains(shopId)){ |
| | | shopIds.add(shopId); |
| | | } |
| | | |
| | | Page<ShopWithdraw> page = shopWithdrawService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<ShopWithdraw>() |
| | | .eq(shopId!=null,ShopWithdraw::getShopId,shopId) |
| | | .eq(auditStatus!=null,ShopWithdraw::getAuditStatus,auditStatus) |
| | | .in(collect!=null,ShopWithdraw::getCreateUserId,collect) |
| | | .orderByDesc(ShopWithdraw::getCreateTime) |
| | | |
| | | ); |
| | | PageInfo<ShopWithdraw> page=new PageInfo<>(pageNum,pageSize); |
| | | List<ShopWithdraw> list =shopWithdrawMapper.page(page,shopIds,auditStatus); |
| | | list.forEach(x->{ |
| | | x.setIdStr(x.getId().toString()); |
| | | }); |
| | | page.setRecords(list); |
| | | return R.ok(page); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | private void baseWithdrawalApplication(BigDecimal money, Long userId, Integer shopId) { |
| | | money=money.setScale(2, BigDecimal.ROUND_HALF_DOWN); |
| | | Shop shop = shopService.getById(shopId); |
| | | if (money.compareTo(BigDecimal.ZERO)==0){ |
| | | throw new ServiceException("提现金额必须大于零"); |
| | |
| | | Shop shop = shopService.getById(shopWithdraw1.getShopId()); |
| | | BigDecimal money = shopWithdraw1.getMoney(); |
| | | if(1 == shopWithdraw.getAuditStatus()){ |
| | | //通过 |
| | | //先检查账户余额是否充足 |
| | | AccountBalanceQueryResult accountBalanceQueryResult = TransferUtil.accountBalanceQuery(); |
| | | if(null == accountBalanceQueryResult){ |
| | | return R.fail("查询账户余额出错"); |
| | | } |
| | | Double useAbleSettAmount = accountBalanceQueryResult.getUseAbleSettAmount(); |
| | | if(useAbleSettAmount < (shopWithdraw1.getMoney().doubleValue() + 1)){ |
| | | return R.fail("账户可用余额不足,请先补充账户余额"); |
| | | } |
| | | //银行卡转账 |
| | | SinglePay singlePay = new SinglePay(); |
| | | singlePay.setTradeMerchantNo(TransferUtil.sysTradeMerchantNo); |
| | | singlePay.setMerchantOrderNo(shopWithdraw1.getId().toString()); |
| | | singlePay.setReceiverAccountNoEnc(shop.getReceiverAccountNoEnc()); |
| | | singlePay.setReceiverNameEnc(shop.getReceiverNameEnc()); |
| | | singlePay.setReceiverAccountType(shop.getReceiverAccountType()); |
| | | singlePay.setReceiverBankChannelNo(shop.getReceiverBankChannelNo()); |
| | | singlePay.setPaidAmount(shopWithdraw1.getMoney().doubleValue()); |
| | | singlePay.setPaidDesc("账户余额提现"); |
| | | singlePay.setPaidUse("208"); |
| | | singlePay.setCallbackUrl("/other/shop-withdraw/withdrawalCallback"); |
| | | SinglePayResult singlePayResult = TransferUtil.singlePay(singlePay); |
| | | if(null == singlePayResult){ |
| | | return R.fail("转账失败"); |
| | | } |
| | | shopWithdraw1.setStatus(1); |
| | | //取消商户转账,线下转账 |
| | | /* |
| | | try { |
| | | Map<String, String> map = wechatPayService.payToBankCard(shopWithdraw1.getId().toString(), |
| | | shopWithdraw1.getReceiverAccountNoEnc(),shopWithdraw1.getReceiverNameEnc(),shopWithdraw1.getReceiverBankChannelNo(),shopWithdraw1.getMoney(),shopWithdraw.getRemark()); |
| | | if (map.get("return_code").equals("SUCCESS")) { |
| | | System.out.println("转账申请成功"); |
| | | shopWithdraw1.setStatus(1); |
| | | }else { |
| | | return R.fail("转账申请失败"); |
| | | } |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | }*/ |
| | | //到账 |
| | | |
| | | shopWithdraw1.setStatus(2); |
| | | shopWithdraw1.setArrivalTime(LocalDateTime.now()); |
| | | shopWithdrawService.updateById(shopWithdraw); |
| | | //更新店铺审核中的金额,和提现金额 |
| | | shop.setWithdrawAuditMoney(shop.getWithdrawAuditMoney().subtract(shopWithdraw1.getMoney()));//审核中金额 |
| | | shop.setWithdrawMoney(shop.getWithdrawMoney().add(shopWithdraw1.getMoney()));//提现金额 |
| | | shopService.updateById(shop); |
| | | |
| | | } |
| | | if(2 == shopWithdraw.getAuditStatus()){ |
| | | //审核不通过 |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 提现审核通过后转账回调通知 |
| | | * @param singlePayCallbackResult |