init
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
package com.ruoyi.cai.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.cai.domain.PayTotal;
|
||||
import com.ruoyi.cai.dto.admin.vo.PayTotalAdminVo;
|
||||
import com.ruoyi.cai.service.PayTotalService;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.annotation.RepeatSubmit;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.validate.AddGroup;
|
||||
import com.ruoyi.common.core.validate.EditGroup;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 支付统计
|
||||
*
|
||||
* @author 77
|
||||
* @date 2024-01-21
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/cai/payTotal")
|
||||
public class PayTotalController extends BaseController {
|
||||
|
||||
private final PayTotalService payTotalService;
|
||||
|
||||
/**
|
||||
* 查询支付统计列表
|
||||
*/
|
||||
@SaCheckPermission("cai:payTotal:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<PayTotalAdminVo> list(PayTotal bo, PageQuery pageQuery) {
|
||||
Page<PayTotalAdminVo> page = payTotalService.pageAdmin(pageQuery, bo);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付统计详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("cai:payTotal:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<PayTotal> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(payTotalService.getById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增支付统计
|
||||
*/
|
||||
@SaCheckPermission("cai:payTotal:add")
|
||||
@Log(title = "支付统计", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody PayTotal bo) {
|
||||
return toAjax(payTotalService.save(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改支付统计
|
||||
*/
|
||||
@SaCheckPermission("cai:payTotal:edit")
|
||||
@Log(title = "支付统计", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PayTotal bo) {
|
||||
return toAjax(payTotalService.updateById(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除支付统计
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("cai:payTotal:remove")
|
||||
@Log(title = "支付统计", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(payTotalService.removeBatchByIds(Arrays.asList(ids)));
|
||||
}
|
||||
}
|
||||
51
ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTotal.java
Normal file
51
ruoyi-cai/src/main/java/com/ruoyi/cai/domain/PayTotal.java
Normal file
@@ -0,0 +1,51 @@
|
||||
package com.ruoyi.cai.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.ruoyi.common.constant.DateConstant;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 支付统计对象 cai_pay_total
|
||||
*
|
||||
* @author 77
|
||||
* @date 2024-01-21
|
||||
*/
|
||||
@Data
|
||||
@TableName("cai_pay_total")
|
||||
public class PayTotal implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@TableId(value = "id",type = IdType.AUTO)
|
||||
private Long id;
|
||||
/**
|
||||
* 支付ID
|
||||
*/
|
||||
private String payId;
|
||||
/**
|
||||
* 支付平台
|
||||
*/
|
||||
private Integer payType;
|
||||
/**
|
||||
* 时间
|
||||
*/
|
||||
@DateTimeFormat(pattern = DateConstant.PATTERN_DATE)
|
||||
@JsonFormat(pattern = DateConstant.PATTERN_DATE)
|
||||
private LocalDate date;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private BigDecimal money;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.ruoyi.cai.dto.admin.vo;
|
||||
|
||||
import com.ruoyi.cai.domain.PayTotal;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PayTotalAdminVo extends PayTotal {
|
||||
private String name;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.ruoyi.cai.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.cai.domain.PayTotal;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 支付统计Mapper接口
|
||||
*
|
||||
* @author 77
|
||||
* @date 2024-01-21
|
||||
*/
|
||||
public interface PayTotalMapper extends BaseMapper<PayTotal> {
|
||||
|
||||
void incsPrice(@Param("id") Long id, @Param("price") BigDecimal price);
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.ruoyi.cai.pay;
|
||||
|
||||
import com.alipay.api.domain.AppItemDataDiffVO;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.ijpay.alipay.AliPayApiConfig;
|
||||
import com.ijpay.alipay.AliPayApiConfigKit;
|
||||
@@ -12,14 +11,14 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class PayConfigManager {
|
||||
private static final Map<Long,PayConfig> PAY_CONFIGS_MAP = new HashMap<>();
|
||||
private static final Map<Long,PayConfig> PAY_CONFIGS_MAP = new ConcurrentHashMap<>();
|
||||
@Autowired
|
||||
private PayConfigService payConfigService;
|
||||
|
||||
@@ -31,6 +30,10 @@ public class PayConfigManager {
|
||||
}
|
||||
}
|
||||
|
||||
public Collection<PayConfig> getAllPayConfig(){
|
||||
return PAY_CONFIGS_MAP.values();
|
||||
}
|
||||
|
||||
// 1支付宝2微信
|
||||
public void addPayConfig(PayConfig payConfig) {
|
||||
PAY_CONFIGS_MAP.put(payConfig.getId(),payConfig);
|
||||
@@ -96,11 +99,22 @@ public class PayConfigManager {
|
||||
}
|
||||
|
||||
public PayConfig getAliConfigByAppId(String appId) {
|
||||
this.getWxConfigByMchId(appId);
|
||||
Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
|
||||
for (PayConfig value : values) {
|
||||
if(value.getAppid() != null && value.getAppid().equals(appId)){
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public PayConfig getWxConfigByMchId(String mchId) {
|
||||
Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
|
||||
for (PayConfig value : values) {
|
||||
if(value.getWxMcid() != null && value.getWxMcid().equals(mchId)){
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.ruoyi.cai.pay;
|
||||
import com.ruoyi.cai.dto.ConsumeResp;
|
||||
import com.ruoyi.cai.manager.AwardManager;
|
||||
import com.ruoyi.cai.manager.ConsumerManager;
|
||||
import com.ruoyi.cai.service.PayTotalService;
|
||||
import com.ruoyi.cai.service.VipOrderService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -20,6 +21,8 @@ public class PayManager {
|
||||
private ConsumerManager consumerManager;
|
||||
@Autowired
|
||||
private AwardManager awardManager;
|
||||
@Autowired
|
||||
private PayTotalService payTotalService;
|
||||
|
||||
public void callBack(String orderNo){
|
||||
callBack(orderNo,null,null,null,null);
|
||||
@@ -35,14 +38,18 @@ public class PayManager {
|
||||
case VIP_ORDER_SUB:
|
||||
ConsumeResp vipResp = vipOrderService.orderSuccess(orderNo,params,appId,payTypeEnum);
|
||||
if(vipResp.isSuccess()){
|
||||
// 记录数据 TODO
|
||||
if(appId != null){
|
||||
payTotalService.incsPrice(payTypeEnum,appId,vipResp.getPrice());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RECHARGE_ORDER_SUB:
|
||||
ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo,params,appId,payTypeEnum);
|
||||
if(resp.isSuccess()){
|
||||
awardManager.giveFastPayAsync(resp.getUserId(), resp.getTraceId());
|
||||
// 记录数据 TODO
|
||||
if(appId != null){
|
||||
payTotalService.incsPrice(payTypeEnum,appId,resp.getPrice());
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.ruoyi.cai.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.cai.domain.PayTotal;
|
||||
import com.ruoyi.cai.dto.admin.vo.PayTotalAdminVo;
|
||||
import com.ruoyi.cai.pay.PayTypeEnum;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 支付统计Service接口
|
||||
*
|
||||
* @author 77
|
||||
* @date 2024-01-21
|
||||
*/
|
||||
public interface PayTotalService extends IService<PayTotal> {
|
||||
|
||||
void incsPrice(PayTypeEnum payTypeEnum, String appId, BigDecimal price);
|
||||
|
||||
Page<PayTotalAdminVo> pageAdmin(PageQuery pageQuery, PayTotal bo);
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.ruoyi.cai.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.PayConfig;
|
||||
import com.ruoyi.cai.domain.PayTotal;
|
||||
import com.ruoyi.cai.dto.admin.vo.PayTotalAdminVo;
|
||||
import com.ruoyi.cai.mapper.PayTotalMapper;
|
||||
import com.ruoyi.cai.pay.PayConfigManager;
|
||||
import com.ruoyi.cai.pay.PayTypeEnum;
|
||||
import com.ruoyi.cai.service.PayTotalService;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.utils.BeanConvertUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
/**
|
||||
* 支付统计Service业务层处理
|
||||
*
|
||||
* @author 77
|
||||
* @date 2024-01-21
|
||||
*/
|
||||
@Service
|
||||
public class PayTotalServiceImpl extends ServiceImpl<PayTotalMapper,PayTotal> implements PayTotalService {
|
||||
|
||||
@Override
|
||||
public void incsPrice(PayTypeEnum payTypeEnum, String appId, BigDecimal price) {
|
||||
PayTotal one = this.getOne(Wrappers.lambdaQuery(PayTotal.class)
|
||||
.eq(PayTotal::getPayId, appId)
|
||||
.eq(PayTotal::getDate, LocalDate.now())
|
||||
.last("limit 1"));
|
||||
if(one == null){
|
||||
ReentrantLock lock = new ReentrantLock();
|
||||
try {
|
||||
lock.lock();
|
||||
one = this.getOne(Wrappers.lambdaQuery(PayTotal.class)
|
||||
.eq(PayTotal::getPayId, appId)
|
||||
.eq(PayTotal::getDate, LocalDate.now())
|
||||
.last("limit 1"));
|
||||
if(one == null){
|
||||
one = new PayTotal();
|
||||
one.setPayId(appId);
|
||||
one.setDate(LocalDate.now());
|
||||
one.setPayType(payTypeEnum.getCode());
|
||||
one.setMoney(BigDecimal.ZERO);
|
||||
this.save(one);
|
||||
}
|
||||
}finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
baseMapper.incsPrice(one.getId(),price);
|
||||
}
|
||||
@Autowired
|
||||
private PayConfigManager payConfigManager;
|
||||
|
||||
@Override
|
||||
public Page<PayTotalAdminVo> pageAdmin(PageQuery pageQuery, PayTotal bo) {
|
||||
Page<PayTotal> page = this.page(pageQuery.build(), Wrappers.lambdaQuery(bo)
|
||||
.orderByDesc(PayTotal::getDate));
|
||||
List<PayTotal> records = page.getRecords();
|
||||
List<PayTotalAdminVo> vos = BeanConvertUtil.convertListTo(records, PayTotalAdminVo::new);
|
||||
for (PayTotalAdminVo vo : vos) {
|
||||
Collection<PayConfig> config = payConfigManager.getAllPayConfig();
|
||||
for (PayConfig payConfig : config) {
|
||||
if(PayTypeEnum.ALI.getCode().equals(vo.getPayType())){ // 阿里
|
||||
if(vo.getPayId().equals(payConfig.getAppid())){
|
||||
vo.setName(payConfig.getName());
|
||||
}
|
||||
}else if(PayTypeEnum.WX.getCode().equals(vo.getPayType())){ // wx
|
||||
if(vo.getPayId().equals(payConfig.getWxMcid())){
|
||||
vo.setName(payConfig.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Page<PayTotalAdminVo> resp = new Page<>();
|
||||
resp.setRecords(vos);
|
||||
resp.setTotal(page.getTotal());
|
||||
resp.setSize(page.getSize());
|
||||
resp.setCurrent(page.getCurrent());
|
||||
return resp;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
20
ruoyi-cai/src/main/resources/mapper/cai/PayTotalMapper.xml
Normal file
20
ruoyi-cai/src/main/resources/mapper/cai/PayTotalMapper.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.cai.mapper.PayTotalMapper">
|
||||
|
||||
<resultMap type="com.ruoyi.cai.domain.PayTotal" id="PayTotalResult">
|
||||
<result property="id" column="id"/>
|
||||
<result property="payId" column="pay_id"/>
|
||||
<result property="payType" column="pay_type"/>
|
||||
<result property="date" column="date"/>
|
||||
<result property="money" column="money"/>
|
||||
</resultMap>
|
||||
<update id="incsPrice">
|
||||
update cai_pay_total
|
||||
set money = money + #{price}
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user