package com.ibeetl.admin.console.api; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import com.ibeetl.admin.console.dao.PayConsoleDao; import com.ibeetl.admin.console.model.*; import com.ibeetl.admin.console.service.*; import com.ibeetl.admin.console.service.pay.utils.entity.TransfersDto; import com.ibeetl.admin.console.util.DoubleUtil; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.XzxAccountInfo; import com.ibeetl.admin.core.entity.XzxCityPartner; import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.web.JsonResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; @RestController @Api(value = "资金管理接口类") public class FundManagementApi { private static final String MODEL = "/admin/front/fund"; private final Logger log = LoggerFactory.getLogger(this.getClass()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Autowired FundManagementApiService service; @Autowired MoneyConsoleService moneyConsoleService; @Autowired CuserConsoleService cuserConsoleService; @Autowired SettingConsoleService settingConsoleService; @Autowired CorePlatformService platformService; @Autowired PayConsoleService payLogService; @Autowired XzxCityPartnerService cityPartnerService; @PostMapping(MODEL + "/queryFundManagementList.do") @ResponseBody @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 = "nickName", value = "昵称", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "status", value = "审核状态(1为待审核,2为已审核,3为审核不通过)", required = true, dataType = "String") }) public JsonResult> queryFundManagementList(@RequestBody MoneyModel moneyModel) { moneyModel.setPayType("4"); return service.queryFundManagementList(moneyModel); } @PostMapping(MODEL + "/queryPayInfoDetail.json") @ResponseBody @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 = "payOrderId", value = "金钱表ID", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "userType", value = "身份类别", required = true, dataType = "String") }) public JsonResult> queryPayInfoDetail(@RequestBody MoneyModel moneyModel) { moneyModel.setPayType("4"); return service.queryPayInfoDetailApi(moneyModel); } @PostMapping(MODEL + "/queryRechangeApiList.do") @ResponseBody @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 = "nickName", value = "昵称", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "status", value = "支付状态(0为合伙人保存充值状态,1为待支付,2为已支付,3为已审核,4为已提现,5为待审核,6审核不通过)", required = true, dataType = "String") }) public JsonResult> queryRechangeApiList(@RequestBody MoneyModel moneyModel) { Map map = service.queryRechangeApiList(moneyModel); return JsonResult.success(map); } @PostMapping(MODEL + "/queryRechangeApiDetail.json") @ResponseBody @ApiOperation(value = "资金管理-充值记录(查看详情)", notes = "test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "payOrderId", value = "充值记录Id", required = true, dataType = "String") }) public JsonResult> queryRechangeApiDetail(@RequestBody PayInfoModel payInfoModel) { Map map = service.queryRechangeApiDetail(payInfoModel); return JsonResult.success(map); } @PostMapping(MODEL + "/quotaList.do") @ResponseBody @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 = "nickName", value = "昵称", required = true, dataType = "String") }) public JsonResult> quotaList(@RequestBody MoneyModel moneyModel) { moneyModel.setPayType("7"); return service.queryFundManagementList(moneyModel); } @PostMapping(MODEL + "/quota.json") @ResponseBody @ApiOperation(value = "资金管理-额度申请(通过)", notes = "test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "payOrderId", value = "额度申请Id", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "userId", value = "用户Id", required = true, dataType = "String") }) public JsonResult quota(@RequestBody TransfersDto dto) { Map result = new HashMap<>(); MoneyModel moneyModel = new MoneyModel(); moneyModel.setPayOrderId(dto.getPayOrderId()); moneyModel = moneyConsoleService.queryMoney(moneyModel); // UserModel userModel = cuserConsoleService.queryUserById(moneyModel.getCreateUserId()); if (userModel == null) { if (moneyModel.getPayType().equals("9")) { userModel = cuserConsoleService.queryRecoveryById(moneyModel.getCreateUserId(), "4"); } else { userModel = cuserConsoleService.queryRecoveryById(moneyModel.getCreateUserId(), "2"); } } if (null != userModel) { UserAccountModel userAccountModel = cuserConsoleService.queryAccountInfo(moneyModel.getCreateUserId(), userModel.getMobilePhone()); if (userAccountModel == null) { return JsonResult.success("此用户未查询到账户信息"); } else { String money = moneyModel.getMoney(); String type = ""; if (moneyModel.getPayType().equals("9")) { type = "9"; BigDecimal money1 = new BigDecimal(userAccountModel.getFixedLimit()).subtract(new BigDecimal(userAccountModel.getOverdraftLimit())); money = DoubleUtil.roundTwo(money1.toString()); settingConsoleService.updateLimitByUserId(userAccountModel.getAccountId(), moneyModel.getMoney()); } else { type = "8"; settingConsoleService.updateOverdrawPriceByUserId(userAccountModel.getAccountId(), moneyModel.getMoney()); } //此处需要扣除合伙人的钱 String partnerId = userModel.getPartnerId(); XzxCityPartner partner = cityPartnerService.queryById(partnerId); if (partner.getPartnerType().equals("2")) { partner = cityPartnerService.queryById(partner.getPackingStation()); } UserAccountModel partnerAccount = cityPartnerService.queryPartnerAccountByUserId(partner.getUserId()); PartnerAccountModel partnerAccountModel = cityPartnerService.getPartnerAccountByUserId(partner.getUserId()); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String payOrderId = "ZF" + snowflake.nextIdStr(); cityPartnerService.insertPartnerAccountLog(partnerAccount, type, new BigDecimal(money), payOrderId, null); System.out.println("=========合伙人人原有环保币======" + partnerAccountModel.getHbb()); BigDecimal newPartnerMoney = new BigDecimal(partnerAccountModel.getHbb()).subtract(new BigDecimal(money)); if (newPartnerMoney.compareTo(BigDecimal.ZERO) == -1) { return JsonResult.failMessage("所属合伙人需要充值!余额不够分配!"); } System.out.println("=========合伙人人现有环保币======" + newPartnerMoney.toString()); partnerAccount.setMoney(newPartnerMoney.doubleValue()); partnerAccountModel.setMoney(DoubleUtil.roundTwo(newPartnerMoney.toString())); partnerAccountModel.setHbb(DoubleUtil.roundTwo(newPartnerMoney.toString())); cityPartnerService.updateAccountPartner(partnerAccount); cityPartnerService.updatePartnerAccount(partnerAccountModel); CoreUser user = platformService.getCurrentUser(); //修改申请状态 moneyModel.setStatus("2"); moneyModel.setUpdateTime(sdf.format(new Date())); moneyModel.setCreateUserId(String.valueOf(user.getId())); moneyModel.setUnpassReason(""); moneyConsoleService.updateMoney(moneyModel); //写入日志 AccountLogModel log = new AccountLogModel(); log.setAccountId(userAccountModel.getAccountId()); log.setChannelType("2"); log.setCreateTime(sdf.format(new Date())); log.setCreateUserId(userAccountModel.getUserId()); BigDecimal oldFixedLimit = new BigDecimal(String.valueOf(userAccountModel.getFixedLimit())); BigDecimal oldLimit = new BigDecimal(String.valueOf(userAccountModel.getOverdraftLimit())); if(moneyModel.getPayType().equals("9")){ log.setNewFixedLimit(oldFixedLimit.toString()); }else{ log.setNewFixedLimit(oldFixedLimit.add(new BigDecimal(moneyModel.getMoney())).toString()); } log.setNewLimit(oldLimit.add(new BigDecimal(moneyModel.getMoney())).toString()); log.setNewMoney(String.valueOf(userAccountModel.getMoney())); log.setOldFixedLimit(oldFixedLimit.toString()); log.setOldLimit(oldLimit.toString()); log.setOldMoney(String.valueOf(userAccountModel.getMoney())); log.setOrderId(dto.getPayOrderId()); //model.setOrderId(payOrderId); payLogService.insertAccountLog(log); return JsonResult.success("完成审核"); } } else { return JsonResult.success("查不到对应的申请人"); } } @PostMapping(MODEL + "/queryStorageMoneyApi.do") @ResponseBody @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 = "storageUserName", value = "入库员", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "storageUserPhone", value = "入库员手机号", required = true, dataType = "String") }) public JsonResult> queryStorageMoneyApi(@RequestBody PayStorageModel model) { Map map = service.queryStorageMoneyApi(model); return JsonResult.success(map); } @PostMapping(MODEL + "/queryStorageMoneyDetailApi.json") @ResponseBody @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 = "storageId", value = "入库Id", required = true, dataType = "String"), }) public JsonResult> queryStorageMoneyDetailApi(@RequestBody PayStorageModel model) { Map map = service.queryStorageMoneyDetailApi(model); return JsonResult.success(map); } @PostMapping(MODEL + "/quotaCancel.json") @ResponseBody @ApiOperation(value = "资金管理-额度申请(拒绝)", notes = "test: 仅0有正确返回") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "payOrderId", value = "额度申请Id", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "userId", value = "用户Id", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "unpassReason", value = "未通过原因", required = true, dataType = "String") }) public JsonResult quotaCancel(@RequestBody TransfersDto dto) { Map result = new HashMap<>(); MoneyModel moneyModel = new MoneyModel(); moneyModel.setPayOrderId(dto.getPayOrderId()); moneyModel = moneyConsoleService.queryMoney(moneyModel); moneyModel.setStatus("3"); moneyModel.setUnpassReason(dto.getUnpassReason()); moneyConsoleService.updateMoney(moneyModel); return JsonResult.success("完成审核"); } @PostMapping(MODEL + "/quotaDetail.json") @ResponseBody @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 = "userId", value = "回收员Id", required = true, dataType = "String") }) public JsonResult> quotaDetail(@RequestBody StorageUserModel storageUserModel) { Map map = service.quotaDetail(storageUserModel); return JsonResult.success(map); } @PostMapping(MODEL + "/quotaRecoveryList.do") @ResponseBody @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 = "nickName", value = "昵称", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "status", value = "审核状态(1为待审核,2为已审核,3为审核不通过)", required = true, dataType = "String") }) public JsonResult> quotaRecoveryList(@RequestBody MoneyModel moneyModel) { moneyModel.setPayType("9"); return service.queryFundManagementList(moneyModel); } }