散户退款接口开发

door
LI-CCONG\李聪聪 7 months ago
parent 361eb193cf
commit c7cca4b6f7

@ -6,12 +6,14 @@ import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.dto.UserDTO; import cc.yunxi.domain.dto.UserDTO;
import cc.yunxi.domain.po.Client; import cc.yunxi.domain.po.Client;
import cc.yunxi.domain.po.Product; import cc.yunxi.domain.po.Product;
import cc.yunxi.domain.po.RecycleOrder;
import cc.yunxi.domain.vo.enterprise.RechargeBalanceVO; import cc.yunxi.domain.vo.enterprise.RechargeBalanceVO;
import cc.yunxi.domain.vo.priceproduct.ProductSimpleVO; import cc.yunxi.domain.vo.priceproduct.ProductSimpleVO;
import cc.yunxi.enums.UserTypeEnum; import cc.yunxi.enums.UserTypeEnum;
import cc.yunxi.service.IClientService; import cc.yunxi.service.IClientService;
import cc.yunxi.service.IEnterpriseService; import cc.yunxi.service.IEnterpriseService;
import cc.yunxi.service.IPriceProductService; import cc.yunxi.service.IPriceProductService;
import cc.yunxi.service.IRecycleOrderService;
import cc.yunxi.utils.UserContext; import cc.yunxi.utils.UserContext;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -41,6 +43,8 @@ public class IndexController {
private final IEnterpriseService enterpriseService; private final IEnterpriseService enterpriseService;
private final IRecycleOrderService recycleOrderService;
@ApiOperation("废品类目列表") @ApiOperation("废品类目列表")
@GetMapping("/products") @GetMapping("/products")
@ -73,4 +77,12 @@ public class IndexController {
return CommonResult.success(true); return CommonResult.success(true);
} }
@ApiOperation(value = "散户退款", hidden = true)
@GetMapping(value = "/refund")
public CommonResult<Boolean> recharge(@RequestParam("orderId") String orderId) {
recycleOrderService.refundOrder(orderId);
return CommonResult.success(true);
}
} }

@ -67,11 +67,10 @@ public class RecycleOrderController {
@ApiOperation("分页查询回收订单") @ApiOperation("分页查询回收订单")
@PostMapping("/page") @PostMapping("/page")
public CommonResult<PageDTO<? extends RecycleOrderRespVO>> queryOrderByPage(@RequestBody RecycleOrderQuery recycleOrderQuery) { public CommonResult<PageDTO<? extends RecycleOrderRespVO>> queryOrderByPage(@RequestBody RecycleOrderQuery recycleOrderQuery) {
// if (ObjectUtil.isEmpty(recycleOrderQuery.getOrderType())) { if (ObjectUtil.isEmpty(recycleOrderQuery.getOrderType())) {
//// throw new BizIllegalException("请确定要查询的订单类型"); throw new BizIllegalException("请确定要查询的订单类型");
// recycleOrderQuery.setOrderType(OrderTypeEnum.SH_ORDER); }
// } // recycleOrderQuery.setOrderType(OrderTypeEnum.SH_ORDER); // 先定死 todo
recycleOrderQuery.setOrderType(OrderTypeEnum.SH_ORDER); // 先定死 todo
// 1.解析用户上下文 // 1.解析用户上下文
UserDTO userDTO = UserContext.getUser(); UserDTO userDTO = UserContext.getUser();
recycleOrderQuery.setUserType(userDTO.getUserType()).setUserId(userDTO.getId()).setStationId(userDTO.getStationId()); recycleOrderQuery.setUserType(userDTO.getUserType()).setUserId(userDTO.getId()).setStationId(userDTO.getStationId());

@ -50,7 +50,7 @@ public class EnterpriseAccountBill {
// @TableField("bill_status_id") // @TableField("bill_status_id")
// private String billStatusId; // private String billStatusId;
@ApiModelProperty("充值(元)") @ApiModelProperty("进账(元)")
@TableField("income_amount") @TableField("income_amount")
private BigDecimal incomeAmount; private BigDecimal incomeAmount;

@ -143,7 +143,7 @@ public class RecycleOrder {
@TableField("remark") @TableField("remark")
private String remark; private String remark;
@ApiModelProperty("数据隔离1") @ApiModelProperty("企业商户id")
@TableField("company_id") @TableField("company_id")
private String companyId; private String companyId;

@ -18,7 +18,7 @@ public enum BalanceChangeTypeEnum implements BaseEnum {
CASH_OUT("2", "提现"), CASH_OUT("2", "提现"),
EXPEND("3", "消费"); REFUND("3", "退款");
@EnumValue @EnumValue
private final String code; private final String code;

@ -90,14 +90,26 @@ public interface IClientService extends IService<Client> {
* @param clientId * @param clientId
* @param amount * @param amount
* @param orderNo * @param orderNo
* @param enterpriseId
*/ */
void addBalance(String clientId, BigDecimal amount, String orderNo, String stationId); void addBalance(String clientId, BigDecimal amount, String orderNo, String enterpriseId);
/** /**
* *
* @param openId * @param openId
* @param amount
*/ */
void cashBalance(String openId, Integer amount) throws Exception; void cashBalance(String openId, Integer amount) throws Exception;
/**
* 退
* @param clientId
* @param amount
* @param orderNo
* @param enterpriseId
*/
void reduceBalance(String clientId, BigDecimal amount, String orderNo, String enterpriseId);
} }

@ -98,4 +98,10 @@ public interface IRecycleOrderService extends IService<RecycleOrder> {
*/ */
void finishOrder(@Valid RecycleOrderFinishVO orderFinishVO); void finishOrder(@Valid RecycleOrderFinishVO orderFinishVO);
/**
* 退
* @param orderId
*/
void refundOrder(String orderId);
} }

@ -170,8 +170,14 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
@Override @Override
public void addBalance(String clientId, BigDecimal amount, String orderNo, String stationId) { public void addBalance(String clientId, BigDecimal amount, String orderNo, String enterpriseId) {
this.changeBalance(clientId, amount, orderNo, stationId, BalanceChangeTypeEnum.INCOME); this.changeBalance(clientId, amount, orderNo, enterpriseId, BalanceChangeTypeEnum.INCOME);
}
@Override
public void reduceBalance(String clientId, BigDecimal amount, String orderNo, String enterpriseId) {
this.changeBalance(clientId, amount, orderNo, enterpriseId, BalanceChangeTypeEnum.REFUND);
} }
@ -257,19 +263,20 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
// 统一金额交易 // 统一金额交易
private void changeBalance(String keyId, BigDecimal amount, String orderNo, private void changeBalance(String keyId, BigDecimal amount, String orderNo,
String stationId, BalanceChangeTypeEnum changeTypeEnum) { String enterpriseId, BalanceChangeTypeEnum changeTypeEnum) {
Client client = this.getClientByKeyId(keyId); Client client = this.getClientByKeyId(keyId);
BigDecimal balance = client.getBanlance(); BigDecimal balance = client.getBanlance();
String remark; String remark;
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
amount = amount.setScale(2, RoundingMode.HALF_UP); amount = amount.setScale(2, RoundingMode.HALF_UP);
String amountStr = String.valueOf(amount); String amountStr = String.valueOf(amount);
if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入 switch (changeTypeEnum) { // 收入
case INCOME:
balance = balance.add(amount); balance = balance.add(amount);
remark = "废品回收结算,收入" + amountStr + "元"; remark = "废品回收结算,收入" + amountStr + "元";
// 更新商户资金 // 更新商户资金
Enterprise enterprise = enterpriseService.getEnterpriseByStationId(stationId); Enterprise enterprise = enterpriseService.getEnterpriseById(enterpriseId, true);
BigDecimal fund = enterprise.getFund(); BigDecimal fund = enterprise.getFund();
if (fund.compareTo(amount) < 0) { if (fund.compareTo(amount) < 0) {
throw new BizIllegalException("商户资金不足,请联系商户"); throw new BizIllegalException("商户资金不足,请联系商户");
@ -288,13 +295,41 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
accountBill.setRemark("支付给散户" + amountStr + "元"); accountBill.setRemark("支付给散户" + amountStr + "元");
accountBill.setCreatorTime(now); accountBill.setCreatorTime(now);
accountBillMapper.insert(accountBill); accountBillMapper.insert(accountBill);
break;
case REFUND:
if (balance.compareTo(amount) < 0) {
throw new BizIllegalException("余额不足");
}
balance = balance.subtract(amount);
remark = "退款给商户" + amountStr + "元";
} else { // 微信提现 // 更新商户资金
Enterprise enterprise1 = enterpriseService.getEnterpriseById(enterpriseId, true);
BigDecimal fund1 = enterprise1.getFund();
fund1 = fund1.add(amount);
enterprise1.setFund(fund1);
enterpriseService.updateById(enterprise1);
// 记录商户流水
EnterpriseAccountBill accountBill1 = new EnterpriseAccountBill();
accountBill1.setEnterpriseId(enterprise1.getId());
accountBill1.setBillNumber(CommonUtil.getIdNumber(BusinessCodeEnum.BILL.getCode()));
accountBill1.setAccountBalance(fund1);
accountBill1.setIncomeAmount(amount);
accountBill1.setOrderNumber(orderNo);
accountBill1.setRemark("散户退款到商户" + amountStr + "元");
accountBill1.setCreatorTime(now);
accountBillMapper.insert(accountBill1);
break;
case CASH_OUT: // 微信提现
if (balance.compareTo(amount) < 0) { if (balance.compareTo(amount) < 0) {
throw new BizIllegalException("余额不足"); throw new BizIllegalException("余额不足");
} }
balance = balance.subtract(amount); balance = balance.subtract(amount);
remark = "微信提现" + amountStr + "元"; remark = "微信提现" + amountStr + "元";
break;
default:
return;
} }
// 更新散户余额 // 更新散户余额
client.setBanlance(balance); client.setBanlance(balance);

@ -299,7 +299,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
this.updateById(recycleOrder); this.updateById(recycleOrder);
// 增加收入余额 异步? todo // 增加收入余额 异步? todo
clientService.addBalance(client.getId(), totalAmount, orderNo, recycler.getStationId()); clientService.addBalance(client.getId(), totalAmount, orderNo, recycler.getCompanyId());
return orderId; return orderId;
} }
@ -433,7 +433,19 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
recyclerService.totalTick(recyclerId, distance, totalAmount); recyclerService.totalTick(recyclerId, distance, totalAmount);
// 增加收入余额 异步? todo // 增加收入余额 异步? todo
clientService.addBalance(clientId, totalAmount, orderNumber, recycleStationId); clientService.addBalance(clientId, totalAmount, orderNumber, recycleOrder.getCompanyId());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void refundOrder(String orderId) {
RecycleOrder recycleOrder = this.getOrderById(orderId, false);
String companyId = recycleOrder.getCompanyId();
String clientId = recycleOrder.getClientId();
BigDecimal orderAmount = recycleOrder.getOrderAmount();
String orderNo = recycleOrder.getOrderNumber();
clientService.reduceBalance(clientId, orderAmount, orderNo, companyId);
} }

@ -99,6 +99,7 @@ nxhs:
- /api/common/shlogin - /api/common/shlogin
- /api/test/** - /api/test/**
- /api/file/download - /api/file/download
- /api/index/products
adminKey: 8bd2aa89033ead51c505e44994e42189 # 后台接口访问Key adminKey: 8bd2aa89033ead51c505e44994e42189 # 后台接口访问Key
upload: upload:
basePath: /upload/ basePath: /upload/

Loading…
Cancel
Save