Commit 8c4259df by 程裕兵

feat:cashier

parent c85790ec
......@@ -4,6 +4,7 @@ import com.jiejing.common.model.JsonResult;
import com.jiejing.common.model.PageVO;
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.vo.StudioCashierRecordVO;
import io.swagger.annotations.ApiOperation;
......@@ -32,4 +33,8 @@ public interface StudioCashierApi {
@PostMapping(value = "/private/studioCashier/listByOrderNo")
JsonResult<List<StudioCashierRecordVO>> listByOrderNo(ListStudioCashierByOrderNoRequest request);
@ApiOperation(value = "根据子订单号查询收银列表", tags = {TAG})
@PostMapping(value = "/private/studioCashier/listBySubOrderNo")
JsonResult<List<StudioCashierRecordVO>> listBySubOrderNo(ListStudioCashierBySubOrderNoRequest request);
}
......@@ -4,6 +4,7 @@ import com.jiejing.common.model.JsonResult;
import com.jiejing.common.model.PageVO;
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.vo.StudioCashierRecordVO;
import feign.hystrix.FallbackFactory;
......@@ -37,6 +38,13 @@ public class StudioCashierApiFallback implements FallbackFactory<StudioCashierAp
ListStudioCashierByOrderNoRequest request) {
return JsonResult.rpcError();
}
@Override
public JsonResult<List<StudioCashierRecordVO>> listBySubOrderNo(
ListStudioCashierBySubOrderNoRequest request) {
return JsonResult.rpcError();
}
};
}
}
package com.jiejing.fitness.finance.api.cashier.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
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 = "根据业务子订单号查询场馆收银流水Request")
public class ListStudioCashierBySubOrderNoRequest {
@ApiModelProperty(value = "子订单号", required = true)
@NotBlank(message = "子订单号不能为空")
private String subOrderNo;
}
......@@ -35,7 +35,7 @@ public class StudioCashierRecordVO {
private String orderNo;
@ApiModelProperty("业务订单类型")
private Integer orderType;
private String orderType;
@EnumMapping(enumClass = BrandCashierTransTypeEnum.class)
@ApiModelProperty("交易类型:PAY-收款;REFUND-退款;")
......
package com.jiejing.fitness.finance.api.merchant.request;
import com.alibaba.fastjson.JSONObject;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.paycenter.common.enums.merchant.SubChannelEnums;
import com.jiejing.paycenter.common.enums.pay.PaySceneEnums;
import com.jiejing.paycenter.common.enums.pay.PayTypeEnums;
......@@ -38,9 +39,13 @@ public class StudioMerchantPayRequest {
@NotBlank(message = "业务订单号不能为空")
private String orderNo;
@ApiModelProperty(name = "业务子订单号", required = true)
@NotBlank(message = "业务子订单号不能为空")
private String subOrderNo;
@ApiModelProperty(name = "业务订单类型", required = true)
@NotNull(message = "业务订单类型不能为空")
private Integer orderType;
private PayOrderTypeEnum orderType;
@ApiModelProperty(name = "支付类型", required = true)
@NotNull(message = "支付类型不能为空")
......
......@@ -6,6 +6,7 @@ import com.jiejing.common.utils.convert.BeanUtil;
import com.jiejing.fitness.finance.api.cashier.StudioCashierApi;
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.vo.StudioCashierRecordVO;
import com.jiejing.fitness.finance.service.cashier.StudioCashierService;
......@@ -52,4 +53,12 @@ public class StudioCashierController implements StudioCashierApi {
return JsonResult.success(studioCashierService.listByOrderNo(request.getOrderNo()));
}
@ApiOperation(value = "根据子订单号查询收银列表", tags = {TAG})
@PostMapping(value = "/private/studioCashier/listBySubOrderNo")
@Override
public JsonResult<List<StudioCashierRecordVO>> listBySubOrderNo(
@Valid @RequestBody ListStudioCashierBySubOrderNoRequest request) {
return JsonResult.success(studioCashierService.listBySubOrderNo(request.getSubOrderNo()));
}
}
......@@ -63,12 +63,19 @@ public class StudioCashierRecord implements Serializable {
/**
* 备注: 业务订单类型 是否允许为null: YES
*/
private Integer orderType;
private String orderType;
/**
* 备注: 业务子订单号 是否允许为null: NO
*/
private String subOrderNo;
/**
* 备注: 交易类型:PAY-收款;REFUND-退款; 默认值: 空字符串 是否允许为null: YES
*
* @see BrandCashierTransTypeEnum
*/
private BrandCashierTransTypeEnum transType;
private String transType;
/**
* 备注: 品牌ID 是否允许为null: NO
......@@ -102,8 +109,10 @@ public class StudioCashierRecord implements Serializable {
/**
* 备注: 支付子渠道:ALI-支付宝、WX-微信 默认值: 空字符串 是否允许为null: YES
*
* @see SubChannelEnums
*/
private SubChannelEnums subChannel;
private String subChannel;
/**
* 备注: 交易金额(元) 默认值: 0.00 是否允许为null: NO
......@@ -127,8 +136,10 @@ public class StudioCashierRecord implements Serializable {
/**
* 备注: 交易状态:0-支付初始态;1-支付中;2-支付失败;3-入账中(支付成功);4-入账成功;5-退款中;6-退款成功;7-退款失败 默认值: 1 是否允许为null: YES
*
* @see BrandCashierTransStateEnum
*/
private BrandCashierTransStateEnum transState;
private String transState;
/**
* 备注: 付款人姓名 是否允许为null: YES
......@@ -202,6 +213,8 @@ public class StudioCashierRecord implements Serializable {
public static final String ORDER_NO = "order_no";
public static final String SUB_ORDER_NO = "sub_order_no";
public static final String ORDER_TYPE = "order_type";
public static final String TRANS_TYPE = "trans_type";
......
......@@ -17,14 +17,14 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, trans_no, order_no, order_type, trans_type, brand_id, studio_id, studio_name, merchant_id, merchant_no, channel_no, sub_channel, trans_amount, fee_rate, fee, actual_amount, trans_state, buyer_name, buyer_phone, goods, remark, exist_related_trans, related_trans_no, third_trans_no, fail_message, trading_time, success_time, in_time, create_time, update_time
id, trans_no, order_no, sub_order_no, order_type, trans_type, brand_id, studio_id, studio_name, merchant_id, merchant_no, channel_no, sub_channel, trans_amount, fee_rate, fee, actual_amount, trans_state, buyer_name, buyer_phone, goods, remark, exist_related_trans, related_trans_no, third_trans_no, fail_message, trading_time, success_time, in_time, create_time, update_time
</sql>
<select id="sumRefundActualAmountByPayTransNo" resultType="java.math.BigDecimal">
select sum(actual_amount)
from studio_cashier_record
where related_trans_no = #{payTransNo}
and trans_state in (6, 7)
and trans_state in ('REFUNDING', 'REFUND_SUCCESS')
</select>
</mapper>
......@@ -92,4 +92,11 @@ public class StudioCashierRecordRpService extends
}
return this.findByWrapperPage(wrapper, query.getCurrent(), query.getSize());
}
public List<StudioCashierRecord> listBySubOrderNo(String subOrderNo) {
QueryWrapper<StudioCashierRecord> wrapper = new QueryWrapper<>();
wrapper.eq(StudioCashierRecord.SUB_ORDER_NO, subOrderNo);
return this.baseMapper.selectList(wrapper);
}
}
......@@ -39,7 +39,6 @@ import org.springframework.stereotype.Service;
public class StudioMerchantApplyRpService extends
MapperRepoService<Long, StudioMerchantApply, StudioMerchantApplyMapper> {
public Page<StudioMerchantApply> page(PageStudioMerchantApplyQuery params) {
QueryWrapper<StudioMerchantApply> wrapper = new QueryWrapper<>();
if (StringUtil.isNotBlank(params.getShortName())) {
......
......@@ -28,6 +28,14 @@ public interface StudioCashierService {
List<StudioCashierRecordVO> listByOrderNo(String orderNo);
/**
* 根据业务子订单号查询列表
*
* @param subOrderNo 业务子订单号
* @return 结果
*/
List<StudioCashierRecordVO> listBySubOrderNo(String subOrderNo);
/**
* 分页
*
* @param params 参数
......
......@@ -21,19 +21,19 @@ public class CashierConvert {
.transNo(record.getTransNo())
.orderNo(record.getOrderNo())
.orderType(record.getOrderType())
.transType(record.getTransType().name())
.transType(record.getTransType())
.brandId(record.getBrandId())
.studioId(record.getStudioId())
.studioName(record.getStudioName())
.merchantId(record.getMerchantId())
.merchantNo(record.getMerchantNo())
.channelNo(record.getChannelNo())
.subChannel(record.getSubChannel().name())
.subChannel(record.getSubChannel())
.transAmount(record.getTransAmount())
.feeRate(record.getFeeRate())
.fee(record.getFee())
.actualAmount(record.getActualAmount())
.transState(record.getTransState().name())
.transState(record.getTransState())
.buyerName(record.getBuyerName())
.buyerPhone(record.getBuyerPhone())
.goods(record.getGoods())
......
......@@ -42,6 +42,12 @@ public class StudioCashierServiceImpl implements StudioCashierService {
}
@Override
public List<StudioCashierRecordVO> listBySubOrderNo(String subOrderNo) {
List<StudioCashierRecord> list = studioCashierRecordRpService.listBySubOrderNo(subOrderNo);
return CashierConvert.convertList(list);
}
@Override
public PageVO<StudioCashierRecordVO> page(PageStudioCashierParams params) {
PageBrandCashierRecordQuery query = BeanUtil.map(params, PageBrandCashierRecordQuery.class);
Page<StudioCashierRecord> page = studioCashierRecordRpService.page(query);
......
......@@ -24,9 +24,12 @@ import lombok.NoArgsConstructor;
@ApiModel(description = "品牌收银流水分页Params")
public class PageStudioCashierParams {
@ApiModelProperty(value = "场馆订单号")
@ApiModelProperty(value = "场馆业务订单号")
private String orderNo;
@ApiModelProperty(value = "场馆业务子订单号")
private String subOrderNo;
@ApiModelProperty(value = "交易流水号")
private String transNo;
......
......@@ -49,11 +49,12 @@ public class PayConvert {
PayRequest request = BeanUtil.map(params, PayRequest.class);
request.setTransNo(record.getTransNo());
request.setMerchantId(record.getMerchantId());
request.setExtra(Optional.ofNullable(params.getExtra()).orElse(new JSONObject())
request.setExtra(new JSONObject()
.fluentPut("studioId", record.getStudioId())
.fluentPut("buyerName", record.getBuyerName())
.fluentPut("buyerPhone", record.getBuyerPhone())
.fluentPut("remark", record.getRemark())
.fluentPut("subOrderNo", record.getSubOrderNo())
);
request.setTransTime(record.getTradingTime());
return request;
......@@ -69,20 +70,21 @@ public class PayConvert {
.id(id)
.transNo(id.toString())
.orderNo(params.getOrderNo())
.orderType(params.getOrderType())
.transType(BrandCashierTransTypeEnum.PAY)
.subOrderNo(params.getSubOrderNo())
.orderType(params.getOrderType().getCode())
.transType(BrandCashierTransTypeEnum.PAY.getCode())
.brandId(studio.getBrandId())
.studioId(params.getStudioId())
.studioName(studio.getName())
.merchantId(merchant.getId())
.merchantNo(merchant.getMerchantNo())
.channelNo(merchant.getChannelNo())
.subChannel(params.getSubChannel())
.subChannel(params.getSubChannel().getCode())
.transAmount(params.getTransAmount())
.feeRate(feeRate)
.fee(fee)
.actualAmount(MoneyUtil.subtract(params.getTransAmount(), fee))
.transState(BrandCashierTransStateEnum.PAY_INIT)
.transState(BrandCashierTransStateEnum.PAY_INIT.getCode())
.buyerName(params.getBuyerName())
.buyerPhone(params.getBuyerPhone())
.goods(params.getGoods())
......@@ -145,7 +147,7 @@ public class PayConvert {
.id(record.getId())
.successTime(event.getFinishTime())
.channelNo(event.getChannelNo())
.transState(convertTransState(PayStateEnums.getByCode(event.getPayState())))
.transState(convertTransState(PayStateEnums.getByCode(event.getPayState())).getCode())
.failMessage(event.getFailMsg())
.thirdTransNo(event.getThirdTransNo())
.updateTime(new Date())
......@@ -179,7 +181,7 @@ public class PayConvert {
record.setActualAmount(MoneyUtil.subtract(record.getTransAmount(), record.getFee()));
record.setRemark(params.getRefundReason());
record.setStudioId(params.getStudioId());
record.setTransState(BrandCashierTransStateEnum.REFUND_INIT);
record.setTransState(BrandCashierTransStateEnum.REFUND_INIT.getCode());
record.setTradingTime(new Date());
record.setCreateTime(new Date());
record.setUpdateTime(new Date());
......@@ -195,7 +197,7 @@ public class PayConvert {
public static StudioCashierRecord convertRefund(StudioCashierRecord record, RefundVO vo) {
return StudioCashierRecord.builder()
.id(record.getId())
.transState(convertTransState(TransStateEnums.getByCode(vo.getRefundState())))
.transState(convertTransState(TransStateEnums.getByCode(vo.getRefundState())).getCode())
.failMessage(vo.getFailMessage())
.successTime(vo.getSuccessTime())
.updateTime(new Date())
......@@ -218,7 +220,7 @@ public class PayConvert {
public static StudioCashierRecord convertRefund(StudioCashierRecord record, RefundEvent event) {
return StudioCashierRecord.builder()
.id(record.getId())
.transState(convertTransState(TransStateEnums.getByCode(event.getRefundState())))
.transState(convertTransState(TransStateEnums.getByCode(event.getRefundState())).getCode())
.failMessage(event.getFailMessage())
.successTime(event.getSuccessTime())
.updateTime(new Date())
......
package com.jiejing.fitness.finance.service.pay.params;
import com.alibaba.fastjson.JSONObject;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.paycenter.common.enums.merchant.SubChannelEnums;
import com.jiejing.paycenter.common.enums.pay.PaySceneEnums;
import com.jiejing.paycenter.common.enums.pay.PayTypeEnums;
......@@ -38,9 +39,13 @@ public class StudioMerchantPayParams {
@NotBlank(message = "业务订单号不能为空")
private String orderNo;
@ApiModelProperty(name = "业务子订单号", required = true)
@NotBlank(message = "业务子订单号不能为空")
private String subOrderNo;
@ApiModelProperty(name = "业务订单类型", required = true)
@NotNull(message = "业务订单类型不能为空")
private Integer orderType;
private PayOrderTypeEnum orderType;
@ApiModelProperty(name = "支付类型", required = true)
@NotNull(message = "支付类型不能为空")
......@@ -83,7 +88,4 @@ public class StudioMerchantPayParams {
@NotNull(message = "过期时间不能为空")
private Integer timeExpire;
@ApiModelProperty(name = "业务扩展信息")
private JSONObject extra;
}
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