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.*;
|
|
/**
|
* <p>
|
* 用户生成记录 前端控制器
|
* </p>
|
*
|
* @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<PageInfo<TGeneratedRecords>> list(@RequestBody GeneratedQuery generatedQuery, HttpServletResponse response){
|
return generatedRecordsService.pageQuery(generatedQuery);
|
}
|
//详情
|
@ApiOperation(value = "详情",tags = "后台-用户生成数据")
|
@PostMapping("/detail")
|
public R<TGeneratedRecords> 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<Boolean> check() {
|
Long userId = tokenService.getLoginUser().getUserId();
|
List<TOrder> 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);
|
TOrder byId1 = 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(byId1.getCode());
|
prepayRequest.setDescription("生成工作总结");
|
prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:8081/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("生成工作总结",byId1.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<String, Object> 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<String, Object> 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();
|
}
|
|
|
|
}
|