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.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.common.init.UserCacheManager; 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 UserCacheManager userCacheManager; @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 = userCacheManager.getLoginUser(); 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 = userCacheManager.getLoginUser(); QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("vip_id", sysVipInfo.getId()); IPage page = new Page<>(pageDto.getPageNum(), pageDto.getPageSize()); IPage pageList = moneyCardUseV2Dao.selectPage(page, queryWrapper); List rows = (List) 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 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 = userCacheManager.getLoginUser(); 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 = userCacheManager.getLoginUser(); pageDto.setCompanyId(sysVipInfo.getCompanyId()); List dataList = moneyCardUseFlowDao.selectForWxInPage(pageDto); return AjaxResult.buildSuccessInstance(dataList); } }