935090232@qq.com
2021-04-14 95f9ea7eb339c36cade6c67d0385c49ec2d81477
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxMoneyCardUseAction.java
New file
@@ -0,0 +1,171 @@
package com.matrix.system.shopXcx.api.action;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.matrix.component.redis.RedisUserLoginUtils;
import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.BasePageQueryDto;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.system.hive.bean.MoneyCardUse;
import com.matrix.system.hive.bean.MoneyCardUseFlow;
import com.matrix.system.hive.bean.SysVipInfo;
import com.matrix.system.hive.dao.MoneyCardUseFlowDao;
import com.matrix.system.hive.dao.MoneyCardUseV2Dao;
import com.matrix.system.hive.service.CodeService;
import com.matrix.system.shopXcx.api.dto.MoneyCardUseFlowDto;
import com.matrix.system.shopXcx.api.vo.WxMoneyCardUseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author jyy
 * @date 2021-04-09
 **/
@Api(tags = "会员储值卡")
@RestController
@RequestMapping(value = "/wxapi/moneyCardUse")
public class WxMoneyCardUseAction {
    @Autowired
    WeixinServiceUtil weixinServiceUtil;
    @Autowired
    private MoneyCardUseV2Dao moneyCardUseV2Dao;
    @Autowired
    private RedisUserLoginUtils redisUserLoginUtils;
    @Autowired
    MoneyCardUseFlowDao moneyCardUseFlowDao;
    @Autowired
    CodeService codeService;
    @ApiOperation(value = "查询会员主卡", notes = "")
    @GetMapping(value = "/getUserVipCard")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = WxMoneyCardUseVO.class)
    })
    public AjaxResult getUserVipCard() {
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("vip_id", sysVipInfo.getId());
        queryWrapper.eq("is_vip_car","Y");
        MoneyCardUse moneyCardUse = moneyCardUseV2Dao.selectOne(queryWrapper);
        WxMoneyCardUseVO vo = new WxMoneyCardUseVO();
        BeanUtils.copyProperties(moneyCardUse, vo);
        return AjaxResult.buildSuccessInstance(vo);
    }
    @ApiOperation(value = "查询会员储值卡", notes = "")
    @PostMapping(value = "/getUserMoneyCardUseList")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = WxMoneyCardUseVO.class)
    })
    public AjaxResult getUserMoneyCardUseList(@RequestBody @Validated BasePageQueryDto pageDto) {
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("vip_id", sysVipInfo.getId());
        IPage<MoneyCardUse> page = new Page<>(pageDto.getPageNum(), pageDto.getPageSize());
        IPage pageList = moneyCardUseV2Dao.selectPage(page, queryWrapper);
        List<WxMoneyCardUseVO> rows = (List<WxMoneyCardUseVO>) pageList.getRecords().stream().map(item -> {
            WxMoneyCardUseVO vo = new WxMoneyCardUseVO();
            BeanUtils.copyProperties(item, vo);
            return vo;
        }).collect(Collectors.toList());
        System.out.println(rows.get(0).getId());
        return AjaxResult.buildSuccessInstance(rows);
    }
    @ApiOperation(value = "创建储值卡充值预付单", notes = "传入参数 {rechargeAmount:10} 最少充值1元,最多2位小数 ")
    @PostMapping(value = "/createRechargeOrder")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = AjaxResult.class)
    })
    public AjaxResult createRechargeOrder(@RequestBody Map<String, String> param) throws Exception {
        String rechargeAmount = param.get("rechargeAmount");
        if (StringUtils.isBlank(rechargeAmount)) {
            return AjaxResult.buildFailInstance("请输入充值金额");
        }
        double total = new BigDecimal(rechargeAmount).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue();
        if (total < 0.02) {
            return AjaxResult.buildFailInstance("充值金额最底1元");
        }
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        moneyCardUseFlow.setVipId(sysVipInfo.getId());
        moneyCardUseFlow.setPayNo(codeService.get32LenNumberCode());
        moneyCardUseFlow.setTotal(total);
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CZ);
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
        moneyCardUseFlow.setContent("微信充值");
        BrandWCPayRequestData payData = weixinServiceUtil.createRechargeOrder("储值卡充值", moneyCardUseFlow.getPayNo(),
                (int) (moneyCardUseFlow.getTotal() * 100), sysVipInfo.getOpenId(), String.valueOf(moneyCardUseFlow.getId()));
        AjaxResult result = AjaxResult.buildSuccessInstance(payData);
        result.putInMap("orderId", moneyCardUseFlow.getId());
        return result;
    }
    @ApiOperation(value = "查询充值结果", notes = " ")
    @GetMapping(value = "/getRechargePayStatus/{orderId}")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = AjaxResult.class)
    })
    public AjaxResult getRechargePayStatus(@PathVariable Long orderId) {
        AjaxResult result =AjaxResult.buildSuccessInstance("查询成功");
        MoneyCardUseFlow moneyCardUseFlow = moneyCardUseFlowDao.selectById(orderId);
        if (moneyCardUseFlow.getCarUseId() != null) {
            result.putInMap("status", "success");
            result.putInMap("msg", "支付成功");
        } else {
            LogUtil.debug("充值等待支付中={}。。。", orderId);
            PayThreadPool.waitThread(orderId.intValue(), new Object());
            result = PayThreadPool.getThreadResult(orderId.intValue());
            LogUtil.debug("充值订单支付完成={}。。。", orderId);
        }
        return result;
    }
    @ApiOperation(value = "查询会员储值卡充值使用记录", notes = "keywords 传入会员卡ID")
    @PostMapping(value = "/getRechargeList")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = MoneyCardUseFlow.class)
    })
    public AjaxResult getRechargeList(@RequestBody @Validated MoneyCardUseFlowDto pageDto) {
        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
        pageDto.setCompanyId(sysVipInfo.getCompanyId());
        List<MoneyCardUseFlow> dataList = moneyCardUseFlowDao.selectForWxInPage(pageDto);
        return AjaxResult.buildSuccessInstance(dataList);
    }
}