package com.xzx.gc.pay.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.common.Result; import com.xzx.gc.common.constant.CommonEnum; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.constant.OrderEnum; import com.xzx.gc.common.constant.PayEnum; import com.xzx.gc.common.dto.CommonDto; import com.xzx.gc.common.dto.SimplePage; import com.xzx.gc.common.dto.log.OperationAppLog; import com.xzx.gc.common.request.BaseController; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.entity.*; import com.xzx.gc.model.JsonResult; import com.xzx.gc.model.admin.*; import com.xzx.gc.model.pay.MoneyAuditDto; import com.xzx.gc.model.pay.RkLimitDto; import com.xzx.gc.model.pay.RkWalletDto; import com.xzx.gc.pay.dto.SelectByAreaDto; import com.xzx.gc.pay.mapper.CoreUserMapper; import com.xzx.gc.pay.mapper.OrderStorageInfoMapper; import com.xzx.gc.pay.mapper.PayRequestMapper; import com.xzx.gc.pay.service.*; import com.xzx.gc.util.SessionUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import tk.mybatis.mapper.entity.Example; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Api(tags = "充值等审核管理") @RestController @Validated @Slf4j public class PayRequestController extends BaseController { @Autowired private PayRequestMapper payRequestMapper; @Autowired private UserService userService; @Autowired private SessionUtil sessionUtil; @Autowired private OtherUserService otherUserService; @Autowired private PayRequestService payRequestService; @Autowired private CityPartnerService cityPartnerService; @Autowired private CoreUserMapper coreUserMapper; @Autowired private AccountService accountService; @Autowired private BusinessUtil businessUtil; @Autowired private OrderStorageInfoMapper orderStorageInfoMapper; @ApiOperation(value = "根据类型查看") @PostMapping("/payRequest/limit/find") public Result limitAdd(HttpServletRequest request,@RequestBody CommonDto commonDto){ Result result=new Result(); String extra = commonDto.getExtra(); Validator.validateNotEmpty(extra,"申请类型不能为空"); PayRequestInfo payRequestInfo=new PayRequestInfo(); payRequestInfo.setCreateUserId(getUserId(request)); payRequestInfo.setPayType(extra); List list = payRequestMapper.select(payRequestInfo); if(CollUtil.isNotEmpty(list)){ List list2 = list.stream().sorted(Comparator.comparing(PayRequestInfo::getCreateTime).reversed()).collect(Collectors.toList()); PayRequestInfo select=list2.get(0); if(PayEnum.待审核.getValue().equals(select.getStatus())){ result.setCode(-4); result.setMsg("您还有待审核的申请"); }else if(PayEnum.审核不通过.getValue().equals(select.getStatus())){ result.setCode(-5); result.setMsg(select.getUnpassReason()); } } return result; } @ApiOperation(value = "分页查询某个地区的用户的提现列表",notes = "查询市下面的用户则只需要传cityId") @PostMapping("/payRequest/selectByArea") public Result> selectByArea(HttpServletRequest request,@RequestBody SelectByAreaDto selectByAreaDto){ if(StrUtil.isNotBlank(selectByAreaDto.getStartDate())){ selectByAreaDto.setStartDate(selectByAreaDto.getStartDate()+" 00:00:00"); } if(StrUtil.isNotBlank(selectByAreaDto.getEndDate())){ selectByAreaDto.setEndDate(selectByAreaDto.getEndDate()+" 00:00:00"); } PageHelper.startPage(selectByAreaDto.getPageNo(),selectByAreaDto.getPageSize()); List list = payRequestMapper.selectByArea(selectByAreaDto); PageInfo pageInfo=new PageInfo<>(list); return Result.success(pageInfo); } @ApiOperation(value = "分页查询某个用户的提现明细",notes = "id传用户id") @PostMapping("/payRequest/selectDetailByUser") public Result> selectDetailByUser(HttpServletRequest request,@RequestBody SimplePage simplePage){ String userId = simplePage.getId(); PageHelper.startPage(simplePage.getPageNo(),simplePage.getPageSize()); Example example=new Example(PayRequestInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("createUserId",userId); criteria.andEqualTo("status",PayEnum.已审核完成.getValue()); criteria.andEqualTo("payType",PayEnum.提现.getValue()); example.setOrderByClause("create_time desc"); List list = payRequestMapper.selectByExample(example); if(CollUtil.isNotEmpty(list)){ for (PayRequestInfo payRequestInfo : list) { String createUserId = payRequestInfo.getCreateUserId(); UserInfo byId = userService.findById(createUserId); if(byId!=null){ payRequestInfo.setMobilePhone(byId.getMobilePhone()); payRequestInfo.setUserName(byId.getNickName()); payRequestInfo.setUserType("1"); }else{ // OtherUserInfo byId1 = otherUserService.findById(createUserId); if(byId1!=null){ payRequestInfo.setUserType("2"); payRequestInfo.setMobilePhone(byId1.getMobilePhone()); payRequestInfo.setUserName(byId1.getName()); } } } } PageInfo pageInfo=new PageInfo<>(list); return Result.success(pageInfo); } @PostMapping("/admin/front/payRequest/addPayInfoImg.json") @ApiOperation(value="添加合伙人充值汇款凭证接口", notes="test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType="query", name ="payImg", value = "凭证图片路径", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "money", value = "汇款金额", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "payType", value = "汇款用途(1)", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "payTime", value = "充值时间", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "rechargeName", value = "汇款人姓名", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "rechargePhone", value = "汇款人手机号码", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "company", value = "收款单位", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "companyAccount", value = "收款账号", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "bankName", value = "收款单位开户行", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "partnerType", value = "角色类型(1:合伙人。2:打包站)", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "status", value = "0:保存,5:上传审核", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "partnerId", value = "合伙人,打包站Id", required = true, dataType = "String") }) public JsonResult addPayInfoImg(@RequestBody PayInfoModel model, HttpServletRequest request){ String result = payRequestService.addPayInfoImg(model); if(result.equals("0")){ return JsonResult.failMessage("添加汇款记录失败!"); }else{ OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.ORDER_MODUL_NAME).operateAction("添加合伙人充值汇款凭证-"+model.getPartnerId()).build(); mqUtil.sendApp(build); return JsonResult.success(result); } } @PostMapping("/admin/front/payRequest/updatePayInfoPass.json") @ApiOperation(value="后台合伙人充值审核接口", notes="test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType="query", name ="payOrderId", value = "充值Id", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "createUserId", value = "充值用户Id", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "status", value = "支付状态(1为待支付,2为已支付,3为已审核,4为已提现,5待审核,6为审核不通过)", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "unpassReason", value = "审核不通过原因", required = true, dataType = "String") }) public JsonResult updatePayInfoPass(@RequestBody PayInfoModel model,HttpServletRequest request){ payRequestService.updatePayInfoPass(model); OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.ORDER_MODUL_NAME).operateAction("后台合伙人充值审核-"+model.getPayOrderId()).build(); mqUtil.sendApp(build); return JsonResult.success("1"); } @PostMapping( "/admin/front/payRequest/addPayRequestInfo.json") @ApiOperation(value="添加合伙人提现申请", notes="test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType="query", name ="money", value = "提现金额", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name ="bankAccountId", value = "银行账号Id", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name ="accountMoney", value = "账户余额", required = true, dataType = "String") }) public JsonResult addPayRequestInfo(@RequestBody PayRequestInfoModel model, HttpServletRequest request){ CoreUser user = sessionUtil.getCurrentUser(); if(user.getId()==1){ return JsonResult.failMessage("超管不能添加合伙人提现申请!"); } BigDecimal decimal = new BigDecimal("0"); decimal = new BigDecimal(model.getMoney()).subtract(new BigDecimal(model.getAccountMoney())); if(decimal.compareTo(BigDecimal.ZERO)==1){ return JsonResult.failMessage("账号余额不能小于提现金额"); }else{ //单笔限额小于1万元 BigDecimal flagAmount = new BigDecimal(model.getMoney()).subtract(new BigDecimal("10000")); if(flagAmount.compareTo(BigDecimal.ZERO)==1){ return JsonResult.failMessage("单笔提现额度必须小于1万元"); } CityPartner partner = cityPartnerService.queryById(user.getId().toString()); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); PayRequestInfo info = objectMapper.convertValue(model, PayRequestInfo.class); info.setAccountId(model.getBankAccountId()); info.setAccountBindId(Long.parseLong(model.getBankAccountId())); info.setCreateTime(DateUtil.now()); info.setCreateUserId(partner.getUserId()); info.setPayType("4"); info.setStatus("1"); info.setPayFlag(1); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String payOrderId = "ZF"+snowflake.nextIdStr(); info.setPayOrderId(payOrderId); if(payRequestService.insertPayRequestInfo(info)>0){ OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.ORDER_MODUL_NAME).operateAction("添加合伙人提现申请-"+model.getBankAccountId()).build(); mqUtil.sendApp(build); return JsonResult.success("保存成功"); }else{ return JsonResult.failMessage("保存失败"); } } } @PostMapping( "/admin/front/payRequest/queryDetailsPresentation.do") @ApiOperation(value="查询合伙人提现审核列表", notes="test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType="query", name = "page", value = "页码", required = true, dataType = "int"), @ApiImplicitParam(paramType="query", name = "limit", value = "每页条数", required = true, dataType = "int"), @ApiImplicitParam(paramType="query", name = "startTime", value = "开始时间", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "endTime", value = "结束时间", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "name", value = "姓名、手机号", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "payType", value = "费用类型(1:充值,2:环保金支出,3环保金收入,4提现5现金收入 6现金支出 10分享返利 11阶梯返利 12红包)", required = true, dataType = "String"), @ApiImplicitParam(paramType="query", name = "payStatus", value = "状态(1为待支付,2为已支付,3为已审核,4为已提现)", required = true, dataType = "Integer") }) public JsonResult> queryDetailsPresentation(@RequestBody PartnerPayMsgModel model){ CoreUser user = sessionUtil.getCurrentUser(); if(user.getId()==1){ //return JsonResult.success(new HashMap<>()); }else{ CoreUser user1 = coreUserMapper.queryPartnerAdmin(user.getId()); if(user1!=null){ }else{ CityPartner partner = cityPartnerService.queryById(user.getId().toString()); if(null!=partner){ model.setUserId(partner.getUserId()); } } } Map map = payRequestService.queryDetailsPresentation(model); return JsonResult.success(map); } @PostMapping("/payRequest/rk/limit/list") @ApiOperation(value = "入库员额度明细列表") public Result> rkwalletList(HttpServletRequest request, @RequestBody SimplePage simplePage) { Result result = new Result(); String userId = getUserId(request); PageInfo rkLimitDtoPageInfo = payRequestService.rkMessage(userId, simplePage); result.setData(rkLimitDtoPageInfo); return result; } @PostMapping("/payRequest/rk/limit/recovery") @ApiOperation(value = "入库员额度恢复请求") public Result rkwalletRecovery(HttpServletRequest request) { Result result = payRequestService.quotaRestore(getUserId(request)); if(result.getCode()==0){ String mobilePhone = userService.findOtherByUserId(getUserId(request),1); OperationAppLog build = OperationAppLog.builder().appPrograme(getFrontClient(request)).opreateName(mobilePhone) .methodName(Constants.PAY_MODUL_NAME).operateAction("入库员额度恢复请求-"+getUserId(request)).build(); mqUtil.sendApp(build); } return result; } @ApiOperation(value = "入库员或打包站额度申请或额度恢复审核", notes = "id是流水号 ,extra是驳回原因") @PostMapping("/payRequest/rk/limit/audit") public Result audit(HttpServletRequest request, @RequestBody MoneyAuditDto moneyAuditDto) { String payOrderId = moneyAuditDto.getId(); String extra = moneyAuditDto.getExtra(); payRequestService.audit(getUserId(request), payOrderId, extra, moneyAuditDto.getPayType(), moneyAuditDto.getAuditUserId(), moneyAuditDto.getMoney(),moneyAuditDto.getAuditUserType()); String mobilePhone = userService.findOtherByUserId(getUserId(request),1); OperationAppLog build = OperationAppLog.builder().appPrograme(getFrontClient(request)).opreateName(mobilePhone) .methodName(Constants.ORDER_MODUL_NAME).operateAction("入库员或打包站额度申请或额度恢复审核-"+payOrderId).build(); mqUtil.sendApp(build); return Result.success(); } @PostMapping("/payRequest/rk/wallet") @ApiOperation(value = "入库员钱包额度") public Result rkwallet(HttpServletRequest request) { Result result = new Result(); String userId = getUserId(request); //一共的额度 AccountInfo accountInfo1 = accountService.findByUserIdForbidden(userId); //可用的额度 BigDecimal overdraftLimit = Convert.toBigDecimal(accountInfo1.getOverdraftLimit(), Constants.MONEY_INIT); BigDecimal fixedLimit = Convert.toBigDecimal(accountInfo1.getFixedLimit(), Constants.MONEY_INIT); RkWalletDto rkWalletDto = new RkWalletDto(); rkWalletDto.setAvailableLimit(businessUtil.changeMoney(overdraftLimit)); rkWalletDto.setUsedLimit(businessUtil.changeMoney(NumberUtil.sub(fixedLimit, overdraftLimit))); //一共支出 OrderStorageInfo orderStorageInfo = new OrderStorageInfo(); orderStorageInfo.setStorageStatus(Convert.toShort(OrderEnum.已入库.getValue())); orderStorageInfo.setStorageUserId(userId); List select = orderStorageInfoMapper.select(orderStorageInfo); if (CollUtil.isNotEmpty(select)) { double sum = select.stream().mapToDouble(x -> Convert.toDouble(x.getStorageMoney())).sum(); rkWalletDto.setAllPay(businessUtil.changeMoney(Convert.toBigDecimal(sum, Constants.MONEY_INIT))); } else { rkWalletDto.setAllPay(Constants.MONEY_INIT.toString()); } result.setData(rkWalletDto); return result; } @PostMapping( "/admin/front/payRequest/queryStorageMoneyApi.do") @ApiOperation(value = "资金管理-支出明细", notes = "test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "page", value = "页码", required = false, dataType = "int"), @ApiImplicitParam(paramType = "query", name = "limit", value = "每页条数", required = false, dataType = "int"), @ApiImplicitParam(paramType = "query", name = "startTime", value = "开始时间", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "endTime", value = "结束时间", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "storageUserName", value = "入库员", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "storageUserPhone", value = "入库员手机号", required = false, dataType = "String") }) public JsonResult> queryStorageMoneyApi(@RequestBody PayStorageModel model) { Map map = payRequestService.queryStorageMoneyApi(model); return JsonResult.success(map); } @PostMapping( "/admin/front/payRequest/queryStorageMoneyDetailApi.json") @ApiOperation(value = "资金管理-支出明细详情", notes = "test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "page", value = "页码", required = false, dataType = "int"), @ApiImplicitParam(paramType = "query", name = "limit", value = "每页条数", required = false, dataType = "int"), @ApiImplicitParam(paramType = "query", name = "storageId", value = "入库Id", required = false, dataType = "String"), }) public JsonResult> queryStorageMoneyDetailApi(@RequestBody PayStorageModel model) { Map map = payRequestService.queryStorageMoneyDetailApi(model); return JsonResult.success(map); } @PostMapping( "/admin/front/payRequest/quotaDetail.json") @ApiOperation(value = "资金管理-额度申请(详情)", notes = "test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "page", value = "页码", required = false, dataType = "int"), @ApiImplicitParam(paramType = "query", name = "limit", value = "每页条数", required = false, dataType = "int"), @ApiImplicitParam(paramType = "query", name = "startTime", value = "开始时间", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "endTime", value = "结束时间", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "userId", value = "回收员Id", required = false, dataType = "String") }) public JsonResult> quotaDetail(@RequestBody StorageUserModel storageUserModel) { Map map = payRequestService.quotaDetail(storageUserModel); return JsonResult.success(map); } }