package com.poteviohealth.ym.ipos.controller.app; import com.google.common.collect.Lists; import com.poteviohealth.cgp.common.controller.BaseWebController; import com.poteviohealth.cgp.common.facade.log.OperateType; import com.poteviohealth.cgp.common.facade.log.OperationLog; import com.poteviohealth.cgp.common.filter.TokenContext; import com.poteviohealth.cgp.common.integrated.StringParams; import com.poteviohealth.cgp.common.integrated.customer.CustomerFeignClient; import com.poteviohealth.cgp.common.integrated.customer.model.GroupLeaderDTO; import com.poteviohealth.cgp.common.integrated.customer.model.GroupLeaderParams; import com.poteviohealth.cgp.common.model.CommonPage; import com.poteviohealth.cgp.common.model.VaultsResponse; import com.poteviohealth.cgp.common.utils.CgpTool; import com.poteviohealth.ym.ipos.model.split.SplitWithdraw; import com.poteviohealth.ym.ipos.model.split.back.AccountBalanceBack; import com.poteviohealth.ym.ipos.model.split.back.SettlementQueryBack; import com.poteviohealth.ym.ipos.model.split.back.WithdrawBack; import com.poteviohealth.ym.ipos.model.split.detail.AccountBalanceList; import com.poteviohealth.ym.ipos.model.split.detail.SettlementQueryDetail; import com.poteviohealth.ym.ipos.model.split.dto.SplitWithdrawDto; import com.poteviohealth.ym.ipos.model.split.dto.WithdrawDto; import com.poteviohealth.ym.ipos.service.ISplitService; import com.poteviohealth.ym.ipos.service.ISplitWithdrawService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang.StringUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.Date; import java.util.List; /** * 结算管理app * @author Qin */ @RestController @RequestMapping("/ipos/app/settlementApp") @Api(value = "SettlementAppController", tags = "结算管理app") public class SettlementAppController extends BaseWebController { @Resource private ISplitService splitService; @Resource private ISplitWithdrawService splitWithdrawService; @Resource private CustomerFeignClient customerFeignClient; @PostMapping("/merchantQuery") @ApiOperation(value = "结算查询") @OperationLog(type = OperateType.SELECT, description ="结算查询") public VaultsResponse merchantQuery(@RequestBody SettlementQueryDetail detail) { String ipos = TokenContext.cureMiniUser().getIposMerchantId(); if(StringUtils.isEmpty(ipos)){ return VaultsResponse.failed("账户未激活,请联系管理员"); } return splitService.merchantSettlementQuery(detail); } @PostMapping("/accountBalanceQuery") @ApiOperation(value = "单账户查询") @OperationLog(type = OperateType.SELECT, description ="单账户查询") public VaultsResponse accountBalanceQuery(@RequestBody StringParams params) { //TODO 暂时去掉三方支付 /* if(StringUtils.isEmpty(params.getId())){ String ipos = TokenContext.cureMiniUser().getIposMerchantId(); if(StringUtils.isEmpty(ipos)){ return VaultsResponse.failed("账户未激活,请联系管理员"); } params.setId(TokenContext.cureMiniUser().getIposMerchantId()); } return splitService.accountBalanceQuery(params.getId());*/ Integer money = splitWithdrawService.getGroupLeaderWithdrawSumPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId()); AccountBalanceBack balanceBack = new AccountBalanceBack(); List list = Lists.newArrayList(); AccountBalanceList abList = new AccountBalanceList(); abList.setAvl_amt(money); list.add(abList); balanceBack.setList(list); return VaultsResponse.success(balanceBack); } @PostMapping("/accountBalanceUse") @ApiOperation(value = "可提现金额查询") @OperationLog(type = OperateType.SELECT, description ="可提现金额查询") public VaultsResponse accountBalanceUse() { //TODO 暂时去掉三方支付 Long money = splitWithdrawService.getGroupLeaderWithdrawPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId()); return VaultsResponse.success(money<0L?0L:money); /*if(StringUtils.isEmpty(TokenContext.cureMiniUser().getIposMerchantId())){ return VaultsResponse.success(0L); } GroupLeaderParams groupLeaderParams = new GroupLeaderParams(); groupLeaderParams.setOperatorId(TokenContext.cureOperatorId()); groupLeaderParams.setGroupLeaderId(Integer.parseInt(TokenContext.cureMiniUser().getGroupLeaderId().toString())); VaultsResponse vaultsResponse = customerFeignClient.getGroupLeaderById(groupLeaderParams); GroupLeaderDTO groupLeaderDTO = vaultsResponse.getData(); VaultsResponse backVaultsResponse = splitService.accountBalanceQuery(TokenContext.cureMiniUser().getIposMerchantId()); AccountBalanceBack back = backVaultsResponse.getData(); try { Long money =Long.parseLong( back.getList().get(0).getAvl_amt().toString())-groupLeaderDTO.getRemainedAmt(); if(money<0L){ money = 0L; } return VaultsResponse.success(money); }catch (Exception e){ e.printStackTrace(); return VaultsResponse.success(0L); }*/ } @PostMapping("/withdraw") @ApiOperation(value = "取现") @OperationLog(type = OperateType.SELECT, description ="取现") public VaultsResponse withdraw(@RequestBody WithdrawDto dto) { //TODO 暂时去掉三方支付 /* if(StringUtils.isEmpty(dto.getMerchantId())){ String ipos = TokenContext.cureMiniUser().getIposMerchantId(); if(StringUtils.isEmpty(ipos)){ return VaultsResponse.failed("账户未激活,请联系管理员"); } dto.setMerchantId(TokenContext.cureMiniUser().getIposMerchantId()); } GroupLeaderParams groupLeaderParams = new GroupLeaderParams(); groupLeaderParams.setOperatorId(TokenContext.cureOperatorId()); groupLeaderParams.setGroupLeaderId(Integer.parseInt(TokenContext.cureMiniUser().getGroupLeaderId().toString())); VaultsResponse vaultsResponse = customerFeignClient.getGroupLeaderById(groupLeaderParams); GroupLeaderDTO groupLeaderDTO = vaultsResponse.getData(); *//* if(groupLeaderDTO.getRemainedAmt()>=dto.getAmount()){ DecimalFormat df = new DecimalFormat("#0.00"); return VaultsResponse.failed("留存保证金为:"+new BigDecimal(df.format(groupLeaderDTO.getRemainedAmt() / 100.0))+"元,可提现金额不足"); }*//* dto.setAmount(dto.getAmount()); return splitService.withdraw(dto);*/ Long money = splitWithdrawService.getGroupLeaderWithdrawPrice(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId()); money = money<0L?0L:money; if(!dto.getAmount().equals(money)){ return VaultsResponse.failed("可提现金额变动,请刷新"); } GroupLeaderParams groupLeaderParams = new GroupLeaderParams(); groupLeaderParams.setOperatorId(TokenContext.cureOperatorId()); groupLeaderParams.setGroupLeaderId(Integer.parseInt(TokenContext.cureMiniUser().getGroupLeaderId().toString())); VaultsResponse vaultsResponse = customerFeignClient.getGroupLeaderById(groupLeaderParams); GroupLeaderDTO groupLeaderDTO = vaultsResponse.getData(); SplitWithdraw splitWithdraw = new SplitWithdraw(); splitWithdraw.setOperatorId(TokenContext.cureOperatorId()); splitWithdraw.setWithdrawId(CgpTool.generateKey()); splitWithdraw.setWithdrawSeq(CgpTool.generateKey().toString()); splitWithdraw.setMerchantId("TZ"+TokenContext.cureMiniUser().getGroupLeaderId()); splitWithdraw.setAmount(dto.getAmount()); splitWithdraw.setTransDate(new Date()); splitWithdraw.setTransStatus("p"); splitWithdraw.setAcctStatus("p"); splitWithdraw.setName(groupLeaderDTO.getName()); splitWithdraw.setOpenid(TokenContext.cureMiniUser().getOpenId()); splitWithdrawService.save(splitWithdraw); splitWithdrawService.updateOrderGroupLeaderWithdraw(TokenContext.cureOperatorId(), TokenContext.cureMiniUser().getGroupLeaderId(),splitWithdraw.getId()); return VaultsResponse.success(); } @PostMapping("/withdrawQuery") @ApiOperation(value = "取现查询") @OperationLog(type = OperateType.SELECT, description ="取现查询") public VaultsResponse withdrawQuery(@RequestBody StringParams params) { String ipos = TokenContext.cureMiniUser().getIposMerchantId(); if(StringUtils.isEmpty(ipos)){ return VaultsResponse.failed("账户未激活,请联系管理员"); } return splitService.withdrawQuery(params.getId()); } @PostMapping("/list") @ApiOperation(value = "取现记录",notes = "list") public VaultsResponse> list(@RequestBody SplitWithdrawDto dto){ //TODO 暂时去掉三方支付 /*if(StringUtils.isEmpty(dto.getIposMerchantId())){ String ipos = TokenContext.cureMiniUser().getIposMerchantId(); if(StringUtils.isEmpty(ipos)){ return VaultsResponse.failed("账户未激活,请联系管理员"); } dto.setIposMerchantId(TokenContext.cureMiniUser().getIposMerchantId()); }*/ dto.setIposMerchantId("TZ"+TokenContext.cureMiniUser().getGroupLeaderId()); return VaultsResponse.success(splitWithdrawService.pageList(dto)); } }