Commit 46da5b7e by 程裕兵

feat:bind

parent 90315e8b
......@@ -2,11 +2,13 @@ package com.jiejing.fitness.finance.api.cashier;
import com.jiejing.common.model.JsonResult;
import com.jiejing.common.model.PageVO;
import com.jiejing.fitness.finance.api.cashier.request.BindStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.request.GetStudioCashierByIdRequest;
import com.jiejing.fitness.finance.api.cashier.request.ListStudioCashierByOrderNoRequest;
import com.jiejing.fitness.finance.api.cashier.request.ListStudioCashierBySubOrderNoRequest;
import com.jiejing.fitness.finance.api.cashier.request.PageStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.request.PageStudioSettleRequest;
import com.jiejing.fitness.finance.api.cashier.request.UnbindStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierRecordVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierStatisticVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioSettleVO;
......@@ -24,6 +26,14 @@ public interface StudioCashierApi {
String TAG = "【场馆】收银管理";
@ApiOperation(value = "绑定流水", tags = {TAG})
@PostMapping(value = "/private/studioCashier/bind")
JsonResult<Void> bind(BindStudioCashierRequest request);
@ApiOperation(value = "解绑流水", tags = {TAG})
@PostMapping(value = "/private/studioCashier/unbind")
JsonResult<Void> unbind(UnbindStudioCashierRequest request);
@ApiOperation(value = "分页筛选收银流水", tags = {TAG})
@PostMapping(value = "/private/studioCashier/page")
JsonResult<PageVO<StudioCashierRecordVO>> page(PageStudioCashierRequest request);
......
......@@ -2,11 +2,13 @@ package com.jiejing.fitness.finance.api.cashier;
import com.jiejing.common.model.JsonResult;
import com.jiejing.common.model.PageVO;
import com.jiejing.fitness.finance.api.cashier.request.BindStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.request.GetStudioCashierByIdRequest;
import com.jiejing.fitness.finance.api.cashier.request.ListStudioCashierByOrderNoRequest;
import com.jiejing.fitness.finance.api.cashier.request.ListStudioCashierBySubOrderNoRequest;
import com.jiejing.fitness.finance.api.cashier.request.PageStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.request.PageStudioSettleRequest;
import com.jiejing.fitness.finance.api.cashier.request.UnbindStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierRecordVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierStatisticVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioSettleVO;
......@@ -27,6 +29,16 @@ public class StudioCashierApiFallback implements FallbackFactory<StudioCashierAp
public StudioCashierApi create(Throwable throwable) {
return new StudioCashierApi() {
@Override
public JsonResult<Void> bind(BindStudioCashierRequest request) {
return JsonResult.rpcError();
}
@Override
public JsonResult<Void> unbind(UnbindStudioCashierRequest request) {
return JsonResult.rpcError();
}
@Override
public JsonResult<PageVO<StudioCashierRecordVO>> page(PageStudioCashierRequest request) {
return JsonResult.rpcError();
}
......
package com.jiejing.fitness.finance.api.cashier.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/2/29 10:57
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "绑定流水")
public class BindStudioCashierRequest {
@ApiModelProperty(value = "收银流水ID", required = true)
@NotEmpty(message = "收银流水ID不能为空")
private List<Long> ids;
@ApiModelProperty(value = "子订单号", required = true)
@NotBlank(message = "子订单号不能为空")
private String subOrderNo;
}
......@@ -30,6 +30,12 @@ public class PageStudioCashierRequest {
@ApiModelProperty(value = "场馆订单号")
private String orderNo;
@ApiModelProperty(value = "场馆业务子订单号")
private String subOrderNo;
@ApiModelProperty(value = "是否存在子订单号, true-存在;false-不存在")
private Boolean existSubOrderNo;
@ApiModelProperty(value = "交易流水号")
private String transNo;
......
package com.jiejing.fitness.finance.api.cashier.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/2/29 10:57
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "解绑流水")
public class UnbindStudioCashierRequest {
@ApiModelProperty(value = "收银流水ID", required = true)
@NotEmpty(message = "收银流水ID不能为空")
private List<Long> ids;
}
......@@ -4,11 +4,13 @@ import com.jiejing.common.model.JsonResult;
import com.jiejing.common.model.PageVO;
import com.jiejing.common.utils.convert.BeanUtil;
import com.jiejing.fitness.finance.api.cashier.StudioCashierApi;
import com.jiejing.fitness.finance.api.cashier.request.BindStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.request.GetStudioCashierByIdRequest;
import com.jiejing.fitness.finance.api.cashier.request.ListStudioCashierByOrderNoRequest;
import com.jiejing.fitness.finance.api.cashier.request.ListStudioCashierBySubOrderNoRequest;
import com.jiejing.fitness.finance.api.cashier.request.PageStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.request.PageStudioSettleRequest;
import com.jiejing.fitness.finance.api.cashier.request.UnbindStudioCashierRequest;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierRecordVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierStatisticVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioSettleVO;
......@@ -33,6 +35,22 @@ public class StudioCashierController implements StudioCashierApi {
@Resource
private StudioCashierService studioCashierService;
@ApiOperation(value = "绑定流水", tags = {TAG})
@PostMapping(value = "/private/studioCashier/bind")
@Override
public JsonResult<Void> bind(@Valid @RequestBody BindStudioCashierRequest request) {
studioCashierService.bind(request.getIds(), request.getSubOrderNo());
return JsonResult.success();
}
@ApiOperation(value = "解绑流水", tags = {TAG})
@PostMapping(value = "/private/studioCashier/unbind")
@Override
public JsonResult<Void> unbind(@Valid @RequestBody UnbindStudioCashierRequest request) {
studioCashierService.unbind(request.getIds());
return JsonResult.success();
}
@ApiOperation(value = "分页筛选收银流水", tags = {TAG})
@PostMapping(value = "private/studioCashier/page")
@Override
......@@ -45,7 +63,8 @@ public class StudioCashierController implements StudioCashierApi {
@ApiOperation(value = "统计收银流水金额", tags = {TAG})
@PostMapping(value = "/private/studioCashier/statistic")
@Override
public JsonResult<StudioCashierStatisticVO> statistic(@Valid @RequestBody PageStudioCashierRequest request) {
public JsonResult<StudioCashierStatisticVO> statistic(
@Valid @RequestBody PageStudioCashierRequest request) {
PageStudioCashierParams params = BeanUtil.map(request, PageStudioCashierParams.class);
return JsonResult.success(studioCashierService.statistic(params));
}
......
......@@ -22,6 +22,16 @@ public class PageBrandCashierRecordQuery {
private String orderNo;
/**
* 场馆业务子订单号
*/
private String subOrderNo;
/**
* 是否存在子订单号, true-存在;false-不存在
*/
private Boolean existSubOrderNo;
/**
* 交易流水号
*/
private String transNo;
......
......@@ -29,6 +29,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import org.springframework.data.domain.Page;
......@@ -60,6 +61,18 @@ public class StudioCashierRecordRpService extends
if (StringUtil.isNotBlank(query.getOrderNo())) {
wrapper.eq(StudioCashierRecord.ORDER_NO, query.getOrderNo());
}
if (StringUtil.isNotBlank(query.getSubOrderNo())) {
wrapper.eq(StudioCashierRecord.SUB_ORDER_NO, query.getSubOrderNo());
}
if (Objects.nonNull(query.getExistSubOrderNo())) {
if (query.getExistSubOrderNo()) {
// 存在
wrapper.ne(StudioCashierRecord.SUB_ORDER_NO, "");
} else {
// 不存在
wrapper.eq(StudioCashierRecord.SUB_ORDER_NO, "");
}
}
if (StringUtil.isNotBlank(query.getTransNo())) {
wrapper.eq(StudioCashierRecord.TRANS_NO, query.getTransNo());
}
......
......@@ -15,6 +15,21 @@ import java.util.List;
public interface StudioCashierService {
/**
* 绑定收银流水
*
* @param ids 流水ID集合
* @param subOrderNo 业务子订单号
*/
void bind(List<Long> ids, String subOrderNo);
/**
* 解绑收银流水
*
* @param ids 流水ID集合
*/
void unbind(List<Long> ids);
/**
* 查询详情
*
* @param id ID
......
package com.jiejing.fitness.finance.service.cashier.impl;
import com.alibaba.fastjson.JSON;
import com.jiejing.common.exception.BizException;
import com.jiejing.common.model.PageVO;
import com.jiejing.common.utils.collection.CollectionUtil;
import com.jiejing.common.utils.convert.BeanUtil;
import com.jiejing.common.utils.text.StringUtil;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierRecordVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioCashierStatisticVO;
import com.jiejing.fitness.finance.api.cashier.vo.StudioSettleVO;
......@@ -16,11 +19,15 @@ import com.jiejing.fitness.finance.service.cashier.StudioCashierService;
import com.jiejing.fitness.finance.service.cashier.convert.CashierConvert;
import com.jiejing.fitness.finance.service.cashier.params.PageStudioCashierParams;
import com.jiejing.fitness.finance.service.cashier.params.PageStudioSettleParams;
import com.jiejing.fitness.finance.service.enums.FinanceErrorEnums;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* @author chengyubing
......@@ -36,6 +43,24 @@ public class StudioCashierServiceImpl implements StudioCashierService {
@Resource
private StudioSettleRecordRpService studioSettleRecordRpService;
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@Override
public void bind(List<Long> ids, String subOrderNo) {
List<StudioCashierRecord> records = studioCashierRecordRpService.getListByIds(ids);
if (records.stream().anyMatch(e -> StringUtil.isNotBlank(e.getSubOrderNo()))) {
throw new BizException(FinanceErrorEnums.EXIST_BIND_RECORD);
}
studioCashierRecordRpService.updateByIds(
StudioCashierRecord.builder().subOrderNo(subOrderNo).updateTime(new Date()).build(), ids);
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
@Override
public void unbind(List<Long> ids) {
studioCashierRecordRpService.updateByIds(
StudioCashierRecord.builder().subOrderNo("").updateTime(new Date()).build(), ids);
}
@Override
public StudioCashierRecordVO getById(Long id) {
StudioCashierRecord record = studioCashierRecordRpService.getById(id).orElse(null);
......
......@@ -30,6 +30,9 @@ public class PageStudioCashierParams {
@ApiModelProperty(value = "场馆业务子订单号")
private String subOrderNo;
@ApiModelProperty(value = "是否存在子订单号, true-存在;false-不存在")
private Boolean existSubOrderNo;
@ApiModelProperty(value = "交易流水号")
private String transNo;
......
......@@ -24,6 +24,7 @@ public enum FinanceErrorEnums implements BaseBizError {
MERCHANT_NOT_OPEN("未进件"),
NOT_SUPPORT_FILE_TYPE("不支持的文件类型"),
EXIST_PROCESS_APPLY("存在处理中的申请"),
EXIST_BIND_RECORD("存在已经绑定的流水"),
;
@Getter
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment