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<PayRequestInfo> list = payRequestMapper.select(payRequestInfo);
|
if(CollUtil.isNotEmpty(list)){
|
List<PayRequestInfo> 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<PageInfo<UserInfo>> 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<UserInfo> list = payRequestMapper.selectByArea(selectByAreaDto);
|
PageInfo<UserInfo> pageInfo=new PageInfo<>(list);
|
return Result.success(pageInfo);
|
}
|
|
@ApiOperation(value = "分页查询某个用户的提现明细",notes = "id传用户id")
|
@PostMapping("/payRequest/selectDetailByUser")
|
public Result<PageInfo<PayRequestInfo>> 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<PayRequestInfo> 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<PayRequestInfo> 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<String> 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<String> 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<String> 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<Map<String, Object>> 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<String, Object> map = payRequestService.queryDetailsPresentation(model);
|
return JsonResult.success(map);
|
}
|
|
@PostMapping("/payRequest/rk/limit/list")
|
@ApiOperation(value = "入库员额度明细列表")
|
public Result<PageInfo<RkLimitDto>> rkwalletList(HttpServletRequest request, @RequestBody SimplePage simplePage) {
|
Result result = new Result();
|
String userId = getUserId(request);
|
PageInfo<RkLimitDto> 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<RkWalletDto> 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<OrderStorageInfo> 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<Map<String, Object>> queryStorageMoneyApi(@RequestBody PayStorageModel model) {
|
Map<String, Object> 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<Map<String, Object>> queryStorageMoneyDetailApi(@RequestBody PayStorageModel model) {
|
Map<String, Object> 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<Map<String, Object>> quotaDetail(@RequestBody StorageUserModel storageUserModel) {
|
Map<String, Object> map = payRequestService.quotaDetail(storageUserModel);
|
return JsonResult.success(map);
|
}
|
}
|