package com.ruoyi.web.controller.api; import cn.hutool.http.HttpException; import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.*; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.query.GeneratedQuery; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.TAppUserService; import com.ruoyi.system.service.TGeneratedRecordsService; import com.ruoyi.system.service.TOrderService; import com.ruoyi.system.service.impl.SysConfigServiceImpl; import com.ruoyi.system.vx.WeChatConfig; import com.ruoyi.system.vx.WeChatUtil; import com.ruoyi.web.controller.query.PayDto; import com.ruoyi.web.controller.tool.AlipayTradePagePay; import com.ruoyi.web.controller.tool.AlipayTradeQuery; import com.ruoyi.web.controller.tool.WordUtil; import com.wechat.pay.java.core.exception.MalformedMessageException; import com.wechat.pay.java.core.exception.ServiceException; import com.wechat.pay.java.service.partnerpayments.app.model.PrepayResponse; import com.wechat.pay.java.service.payments.nativepay.NativePayService; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Period; import java.util.*; /** *

* 用户生成记录 前端控制器 *

* * @author luodangjia * @since 2024-09-19 */ @RestController @RequestMapping("/t-generated-records") public class TGeneratedRecordsController { @Resource private TGeneratedRecordsService generatedRecordsService; @Resource private WordUtil wordUtil; @Resource private TokenService tokenService; @Resource private TOrderService orderService; @Resource private WeChatConfig weChatConfig; @Resource private NativePayService nativePayService; @Resource private SysConfigMapper sysConfigMapper; @Resource private TAppUserService appUserService; //列表 @ApiOperation(value = "查询",tags = "后台-用户生成数据") @PostMapping("/list") public R> list(@RequestBody GeneratedQuery generatedQuery, HttpServletResponse response){ return generatedRecordsService.pageQuery(generatedQuery); } //详情 @ApiOperation(value = "详情",tags = "后台-用户生成数据") @PostMapping("/detail") public R detail(Long id){ TGeneratedRecords generatedRecords = generatedRecordsService.getById(id); TAppUser appUser = appUserService.getById(generatedRecords.getUserId()); if(Objects.nonNull(appUser)){ generatedRecords.setAvatar(appUser.getAvatar()); generatedRecords.setUserPhone(appUser.getPhone()); generatedRecords.setUserName(appUser.getName()); } return R.ok(generatedRecords); } @ApiOperation(value = "检查当前用户是否付费",tags = {"web-职称工作总结"}) @PostMapping("/pay/check") public R check() { Long userId = tokenService.getLoginUser().getUserId(); List list = orderService.lambdaQuery().eq(TOrder::getGoodType, 3).eq(TOrder::getPaymentStatus,2).eq(TOrder::getUserId, userId).list(); if (list.isEmpty()){ return R.ok(false); }else { return R.ok(true); } } @ApiOperation(value = "删除",tags = "后台-用户生成数据") @PostMapping("/delete") public R delete(String id){ String[] split = id.split(","); for (String s : split) { generatedRecordsService.removeById(s); } return R.ok(); } @ApiOperation(value = "设置价格",tags = "后台-用户生成数据") @PostMapping("/price/set") public R priceset(String payMoney){ SysConfig sysConfig = sysConfigMapper.selectConfigById(6L); sysConfig.setConfigValue(payMoney); sysConfigMapper.updateConfig(sysConfig); return R.ok(); } @ApiOperation(value = "获取当前价格",tags = "后台-用户生成数据") @PostMapping("/price/get") public R priceget(){ SysConfig sysConfig = sysConfigMapper.selectConfigById(6L); return R.ok(sysConfig.getConfigValue()); } @ApiOperation(value = "生成订单",tags = {"web-职称工作总结"}) @PostMapping(value = "/create") public R buy() throws AlipayApiException { Long userId = tokenService.getLoginUser().getUserId(); SysConfig sysConfig = sysConfigMapper.selectConfigById(6L); BigDecimal payMoney = new BigDecimal(sysConfig.getConfigValue()); String code = "SC" + WeChatUtil.generateTradeNumber(); TOrder order = new TOrder(); order.setCode(code); order.setUserId(userId); order.setGoodType(3); // order.setGoodId(id); order.setOrderAmount(payMoney); order.setPaymentAmount(payMoney); order.setPaymentStatus(1); orderService.save(order); return R.ok(order.getId()); } @ApiOperation(value = "购买",tags = {"web-职称工作总结"}) @PostMapping(value = "/buy") public R buy(@RequestParam Integer type, @RequestParam Long orderId) throws AlipayApiException { TOrder byId = orderService.getById(orderId); SysConfig sysConfig = sysConfigMapper.selectConfigById(6L); BigDecimal payMoney = new BigDecimal(sysConfig.getConfigValue()); if (type == 1) { Long userId = tokenService.getLoginUser().getUserId(); com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest(); prepayRequest.setAppid(weChatConfig.appId); prepayRequest.setMchid(weChatConfig.merchantId); prepayRequest.setOutTradeNo(byId.getCode()); prepayRequest.setDescription("生成工作总结"); prepayRequest.setNotifyUrl("https://0ifzoxq2516g.guyubao.com/call-back/buy"); com.wechat.pay.java.service.payments.nativepay.model.Amount amount = new com.wechat.pay.java.service.payments.nativepay.model.Amount(); amount.setTotal(payMoney.multiply(BigDecimal.valueOf(100)).intValue()); prepayRequest.setAmount(amount); // 调用下单方法,得到应答 PrepayResponse response; try { com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse prepay = nativePayService.prepay(prepayRequest); //预支付成功,创建预支付订单 PayDto payDto = new PayDto(); payDto.setOrderId(orderId); payDto.setQrCode(prepay.getCodeUrl()); return R.ok(payDto); } catch (HttpException e) { // 发送HTTP请求失败 // log.error("发送HTTP请求失败: {}", e.getHttpRequest()); } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500 // log.error("服务返回状态异常: {}", e.getResponseBody()); } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败 // log.error("返回体类型不合法: {}", e.getMessage()); } catch (Exception e) { // log.error("预下单异常: {}", e.getMessage()); } return null; } else { String qrCode = AlipayTradePagePay.pay("生成工作总结",byId.getCode(),payMoney.toString()); //预支付成功,创建预支付订单 PayDto payDto = new PayDto(); payDto.setOrderId(orderId); payDto.setQrCode(qrCode); new Thread(new Runnable() { @Override public void run() { try { int num = 1; int wait = 0; while (num <= 10) { int min = 5000; wait += (min * num); Thread.sleep(wait); Boolean check = AlipayTradeQuery.check(byId.getCode()); if (check){ byId.setPaymentStatus(2); byId.setPaymentType(2); byId.setPayTime(LocalDateTime.now()); orderService.updateById(byId); }else { num++; } } } catch (Exception e) { e.printStackTrace(); } } }).start(); return R.ok(payDto); } } @ApiOperation(value = "生成",tags = {"后台-用户生成数据","web-职称工作总结"}) @PostMapping("/set") public R set(@RequestBody TGeneratedRecords generatedRecords,HttpServletResponse response){ Long userId = tokenService.getLoginUser().getUserId(); Map templateParam = new HashMap<>(5); templateParam.put("name", generatedRecords.getGenerateName()); templateParam.put("age", calculateAge(generatedRecords.getGenerateBirthday())); templateParam.put("generateEducation", generatedRecords.getGenerateEducation()); templateParam.put("generateUniversity", generatedRecords.getGenerateUniversity()); templateParam.put("generateUniversityMajor", generatedRecords.getGenerateUniversityMajor()); templateParam.put("workUnit", generatedRecords.getWorkUnit()); templateParam.put("workContent", generatedRecords.getWorkContent()); templateParam.put("generateUniversityComplete", generatedRecords.getGenerateUniversityComplete()); templateParam.put("level", generatedRecords.getTechnicalName()); templateParam.put("technicalName", generatedRecords.getTechnicalName()); templateParam.put("majorName", generatedRecords.getMajorName()); templateParam.put("certificate", generatedRecords.getCertificate()); templateParam.put("mainWork", generatedRecords.getMainWork()); generatedRecords.setId(null); generatedRecords.setUserId(userId); generatedRecordsService.save(generatedRecords); // wordUtil.generate(response, "/templates", "专业技术工作总结.xml", templateParam, "测试动态列表Word"); if (generatedRecords.getType()==1) { String url = wordUtil.generate("/templates", "专业技术工作总结.xml", templateParam, "专业技术工作总结", "F:\\"); return R.ok(url); }else { String url = wordUtil.generatePdf("/templates", "专业技术工作总结.xml", templateParam, "专业技术工作总结", "F:\\"); return R.ok(url); } } @ApiOperation(value = "后台生成",tags = {"后台-用户生成数据","web-职称工作总结"}) @PostMapping("/manage/set") public R manageset(@RequestBody TGeneratedRecords generatedRecords,HttpServletResponse response){ Map templateParam = new HashMap<>(5); templateParam.put("name", generatedRecords.getGenerateName()); templateParam.put("age", calculateAge(generatedRecords.getGenerateBirthday())); templateParam.put("generateEducation", generatedRecords.getGenerateEducation()); templateParam.put("generateUniversity", generatedRecords.getGenerateUniversity()); templateParam.put("generateUniversityMajor", generatedRecords.getGenerateUniversityMajor()); templateParam.put("workUnit", generatedRecords.getWorkUnit()); templateParam.put("workContent", generatedRecords.getWorkContent()); templateParam.put("generateUniversityComplete", generatedRecords.getGenerateUniversityComplete()); templateParam.put("level", generatedRecords.getLevel()); templateParam.put("technicalName", generatedRecords.getTechnicalName()); templateParam.put("majorName", generatedRecords.getMajorName()); templateParam.put("certificate", generatedRecords.getCertificate()); templateParam.put("mainWork", generatedRecords.getMainWork()); // wordUtil.generate(response, "/templates", "专业技术工作总结.xml", templateParam, "测试动态列表Word"); if (generatedRecords.getType()==1) { String url = wordUtil.generate("/templates", "专业技术工作总结.xml", templateParam, "专业技术工作总结", "F:\\"); return R.ok(url); }else { String url = wordUtil.generatePdf("/templates", "专业技术工作总结.xml", templateParam, "专业技术工作总结", "F:\\"); return R.ok(url); } } public int calculateAge(LocalDate generateBirthday) { if (generateBirthday == null) { return 0; } LocalDate now = LocalDate.now(); return Period.between(generateBirthday, now).getYears(); } }