Browse Source

支付宝移动端支付

guomengjiao 5 months ago
parent
commit
cb512ca4bb

+ 21 - 14
.idea/workspace.xml

@@ -29,11 +29,18 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="fc9366aa-6566-4981-8149-d75e02f8e884" name="默认的" comment="支付宝移动端支付">
+      <change afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WxPayService.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/util/WxPayUtil.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/common/src/main/java/com/jeesite/common/lang/DateUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/common/src/main/java/com/jeesite/common/lang/DateUtils.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/ResearchBriefReportControllerApi.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/ResearchBriefReportControllerApi.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserOrderControllerApi.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserOrderControllerApi.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/dao/WebsiteUserOrderDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/dao/WebsiteUserOrderDao.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/entity/ResearchBriefReport.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/entity/ResearchBriefReport.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/entity/WebsiteUserOrder.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/entity/WebsiteUserOrder.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/ResearchBriefReportService.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/ResearchBriefReportService.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/util/AlipayUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/util/AlipayUtil.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/web/ResearchBriefReportLabelController.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/web/ResearchBriefReportLabelController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/resources/mappings/modules/report/WebsiteUserOrderDao.xml" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/resources/mappings/modules/report/WebsiteUserOrderDao.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/web/src/main/resources/config/application.yml" beforeDir="false" afterPath="$PROJECT_DIR$/web/src/main/resources/config/application.yml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
@@ -96,7 +103,7 @@
     <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
     <property name="WebServerToolWindowFactoryState" value="false" />
     <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/../../yicangzongtai/api" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/../../maintenance-support/maintenance-support-java" />
     <property name="project.structure.last.edited" value="Project" />
     <property name="project.structure.proportion" value="0.15" />
     <property name="project.structure.side.proportion" value="0.25287357" />
@@ -114,11 +121,11 @@
       <recent name="D:\Git\xiangxi\bjfl_web\modules\basedata\src\main\resources\mappings\modules\basedata" />
     </key>
     <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.jeesite.modules.report.util" />
       <recent name="com.jeesite.modules.sys.utils" />
       <recent name="com.jeesite.modules.bjflapi.report" />
       <recent name="com.jeesite.modules.report.dto" />
       <recent name="com.jeesite.modules.config.web.interceptor" />
-      <recent name="com.jeesite.modules.bjflapi" />
     </key>
   </component>
   <component name="RunAnythingCache">
@@ -459,14 +466,7 @@
       <workItem from="1734579234738" duration="258000" />
       <workItem from="1734579502121" duration="1272000" />
       <workItem from="1734658594781" duration="126472000" />
-      <workItem from="1735184825354" duration="23539000" />
-    </task>
-    <task id="LOCAL-00004" summary="更新">
-      <created>1678439919642</created>
-      <option name="number" value="00004" />
-      <option name="presentableId" value="LOCAL-00004" />
-      <option name="project" value="LOCAL" />
-      <updated>1678439919642</updated>
+      <workItem from="1735184825354" duration="32164000" />
     </task>
     <task id="LOCAL-00005" summary="1">
       <created>1681120811577</created>
@@ -804,7 +804,14 @@
       <option name="project" value="LOCAL" />
       <updated>1735264259023</updated>
     </task>
-    <option name="localTasksCounter" value="53" />
+    <task id="LOCAL-00053" summary="支付宝移动端支付">
+      <created>1735271679159</created>
+      <option name="number" value="00053" />
+      <option name="presentableId" value="LOCAL-00053" />
+      <option name="project" value="LOCAL" />
+      <updated>1735271679159</updated>
+    </task>
+    <option name="localTasksCounter" value="54" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -896,7 +903,7 @@
         </line-breakpoint>
         <line-breakpoint enabled="true" type="java-line">
           <url>file://$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java</url>
-          <line>68</line>
+          <line>65</line>
           <option name="timeStamp" value="50" />
         </line-breakpoint>
       </breakpoints>

+ 4 - 5
common/src/main/java/com/jeesite/common/lang/DateUtils.java

@@ -4,14 +4,14 @@
  */
 package com.jeesite.common.lang;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.FastDateFormat;
+
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.util.Calendar;
 import java.util.Date;
 
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.time.FastDateFormat;
-
 /**
  * 日期工具类, 继承org.apache.commons.lang.time.DateUtils类
  * @author ThinkGem
@@ -344,9 +344,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 		}
 		return new Date[]{beginDate, endDate};
 	}
-	
+
 //	public static void main(String[] args) throws ParseException {
-//		System.out.println(getMinDistanceOfTwoDate(parseDate("2024-11-12 10:00:00"), parseDate("2024-11-12 10:30:00")) > 29);
 //	}
 	
 }

+ 6 - 6
modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/ResearchBriefReportControllerApi.java

@@ -44,9 +44,9 @@ public class ResearchBriefReportControllerApi {
      */
     @PostMapping(value = "/categoryList")
     @ApiOperation(value = "简报智库", notes = "简报智库类别")
-    public R<List<ResearchBriefReportLabel>> categoryList() {
+    public R<List<ResearchBriefReportLabel>> categoryList(String parentId) {
         // 分类
-        return R.ok(researchBriefReportService.marketTypeList());
+        return R.ok(researchBriefReportService.marketTypeList(parentId));
     }
 
     /**
@@ -81,8 +81,8 @@ public class ResearchBriefReportControllerApi {
      */
     @GetMapping(value = "/hotReports")
     @ApiOperation(value = "简报智库列表", notes = "热门报告,查询最新6个")
-    public R<List<ResearchBriefReport>> hotReports() {
-        return R.ok(researchBriefReportService.hotReports(6));
+    public R<List<ResearchBriefReport>> hotReports(String marketType) {
+        return R.ok(researchBriefReportService.hotReports(marketType, 6));
     }
 
     /**
@@ -92,7 +92,7 @@ public class ResearchBriefReportControllerApi {
      */
     @GetMapping(value = "/choicenessReports")
     @ApiOperation(value = "简报智库列表", notes = "精选简报,查询最新2个")
-    public R<List<ResearchBriefReport>> choicenessReports() {
-        return R.ok(researchBriefReportService.choicenessReports());
+    public R<List<ResearchBriefReport>> choicenessReports(String marketType) {
+        return R.ok(researchBriefReportService.choicenessReports(marketType));
     }
 }

+ 12 - 5
modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserOrderControllerApi.java

@@ -59,7 +59,7 @@ public class WebsiteUserOrderControllerApi extends AbstractController {
     }
 
     @PostMapping(value = "downFile")
-    public R<String> downFile(HttpServletRequest request, WebsiteUserOrder websiteUserOrder) {
+    public R<ResearchBriefReport> downFile(HttpServletRequest request, WebsiteUserOrder websiteUserOrder) {
         String reportId = websiteUserOrder.getResearchBriefReportId();
         if (StringUtils.isEmpty(reportId)) {
             return R.fail("简报为空");
@@ -98,12 +98,19 @@ public class WebsiteUserOrderControllerApi extends AbstractController {
         return getFileName(fileType, reportId, downWhere);
     }
 
-    private R<String> getFileName(String fileType, String reportId, WebsiteUserOrderDown down) {
+    private R<ResearchBriefReport> getFileName(String fileType, String reportId, WebsiteUserOrderDown down) {
+        ResearchBriefReport report = new ResearchBriefReport();
         String fileName;
         if (Constants.briefReportFileType.PDF.equals(fileType)) {
-            fileName = researchBriefReportService.convertFile(reportId, Constants.briefReport.BRIEFING_INFO_PDF);
+            ResearchBriefReport fileObj = researchBriefReportService.convertFile(reportId, Constants.briefReport.BRIEFING_INFO_PDF);
+            fileName = fileObj.getFileName();
+            report.setFileName(fileName);
+            report.setFilePath(fileObj.getFilePath());
         } else if (Constants.briefReportFileType.PPT.equals(fileType)) {
-            fileName = researchBriefReportService.convertFile(reportId, Constants.briefReport.BRIEFING_INFO_PPT);
+            ResearchBriefReport fileObj = researchBriefReportService.convertFile(reportId, Constants.briefReport.BRIEFING_INFO_PPT);
+            fileName = fileObj.getFileName();
+            report.setFileName(fileName);
+            report.setFilePath(fileObj.getFilePath());
         } else {
             return R.fail("下载类型不存在");
         }
@@ -112,7 +119,7 @@ public class WebsiteUserOrderControllerApi extends AbstractController {
             down.setFileName(fileName);
             websiteUserOrderDownService.save(down);
         }
-        return R.ok(fileName);
+        return R.ok(report);
     }
 
     @WebsiteAuth

+ 4 - 0
modules/report/src/main/java/com/jeesite/modules/report/dao/WebsiteUserOrderDao.java

@@ -5,6 +5,8 @@ import com.jeesite.common.mybatis.annotation.MyBatisDao;
 import com.jeesite.modules.report.entity.WebsiteUserOrder;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 简报智库订单DAO接口
  * @author gg
@@ -14,4 +16,6 @@ import org.apache.ibatis.annotations.Param;
 public interface WebsiteUserOrderDao extends CrudDao<WebsiteUserOrder> {
 
     WebsiteUserOrder findByOrderNumber(@Param("orderNumber") String orderNumber);
+
+    List<WebsiteUserOrder> findOrderList(@Param("websiteUserOrder") WebsiteUserOrder websiteUserOrder);
 }

+ 18 - 0
modules/report/src/main/java/com/jeesite/modules/report/entity/ResearchBriefReport.java

@@ -57,6 +57,8 @@ public class ResearchBriefReport extends DataEntity<ResearchBriefReport> {
 	private String pdfFileName;		// pdf文件
 	private String pptFileName;		// ppt文件
 
+	private String fileName;
+	private String filePath;
 	private String useShowPay; //是否展示收费按钮 0否 1是
 	private String notId;
 
@@ -253,4 +255,20 @@ public class ResearchBriefReport extends DataEntity<ResearchBriefReport> {
 	public void setRelevancies(List<ResearchBriefReportLabelRelevancy> relevancies) {
 		this.relevancies = relevancies;
 	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getFilePath() {
+		return filePath;
+	}
+
+	public void setFilePath(String filePath) {
+		this.filePath = filePath;
+	}
 }

+ 11 - 1
modules/report/src/main/java/com/jeesite/modules/report/entity/WebsiteUserOrder.java

@@ -10,6 +10,7 @@ import javax.validation.constraints.DecimalMin;
 import javax.validation.constraints.Size;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 简报智库订单Entity
@@ -35,7 +36,7 @@ public class WebsiteUserOrder extends DataEntity<WebsiteUserOrder> {
 	private String websiteUserId;		// 网站用户id
 	private Date payDate;		// 支付日期
 	private String payStatus;		// 状态 0-待支付 1-支付成功 2-支付失败
-	private String payMethod;		// 支付方式 1-微信 2-支付宝
+	private String payMethod;		// 支付方式
 	private BigDecimal payPrice;		// 支付单价
 	private String researchBriefReportId;		// 简报智库id
 	private String useDown;		// 是否下载过 0否 1是
@@ -44,6 +45,8 @@ public class WebsiteUserOrder extends DataEntity<WebsiteUserOrder> {
 
 	private String researchBriefReportTitle;
 
+	private List<String> payMethodList;
+
 	public WebsiteUserOrder() {
 		this(null);
 	}
@@ -148,4 +151,11 @@ public class WebsiteUserOrder extends DataEntity<WebsiteUserOrder> {
 		this.researchBriefReportTitle = researchBriefReportTitle;
 	}
 
+	public List<String> getPayMethodList() {
+		return payMethodList;
+	}
+
+	public void setPayMethodList(List<String> payMethodList) {
+		this.payMethodList = payMethodList;
+	}
 }

+ 29 - 30
modules/report/src/main/java/com/jeesite/modules/report/service/ResearchBriefReportService.java

@@ -163,17 +163,13 @@ public class ResearchBriefReportService extends CrudService<ResearchBriefReportD
 		researchBriefReportLabelRelevancyDao.deleteResearchBriefReportId(researchBriefReport.getId());
 	}
 
-	public List<ResearchBriefReportLabel> marketTypeList() {
-		//一级
+	public List<ResearchBriefReportLabel> marketTypeList(String parentId) {
+		if (StringUtils.isEmpty(parentId)) {
+			parentId = "0";
+		}
 		ResearchBriefReportLabel where = new ResearchBriefReportLabel();
-		where.setParentId("0");
-		List<ResearchBriefReportLabel> list = researchBriefReportLabelDao.findList(where);
-		//子级
-		List<ResearchBriefReportLabel> childList = researchBriefReportLabelDao.findChildList();
-		return list.stream().map(r -> {
-			r.setChildList(childList.stream().filter(rc -> rc.getParentId().equals(r.getId())).collect(Collectors.toList()));
-			return r;
-		}).collect(Collectors.toList());
+		where.setParentId(parentId);
+		return researchBriefReportLabelDao.findList(where);
 	}
 
 	public ResearchBriefReport researchBriefReportForm(ResearchBriefReport researchBriefReport, HttpServletRequest request) {
@@ -182,7 +178,9 @@ public class ResearchBriefReportService extends CrudService<ResearchBriefReportD
 			return old;
 		}
 		String reportId = old.getId();
-		old.setPreviewPdfFileName(convertFile(reportId, Constants.briefReport.BRIEFING_INFO_PREVIEW_PDF));
+		ResearchBriefReport fileObj = convertFile(reportId, Constants.briefReport.BRIEFING_INFO_PREVIEW_PDF);
+		old.setPreviewPdfFileName(fileObj.getFileName());
+		old.setFilePath(fileObj.getFilePath());
 		if (Constants.enableType.YES.equals(old.getUseDownPay())) {
 			old.setUseShowPay(Constants.enableType.YES);
 			//判断这个报告是否支付过
@@ -221,32 +219,32 @@ public class ResearchBriefReportService extends CrudService<ResearchBriefReportD
 		where.setPageSize(5);
 		where.setOrderByStr("publish_date desc");
 		List<ResearchBriefReport> list = dao.findResearchBriefReportList(where);
+		return convertImage(list);
+	}
+
+	private List<ResearchBriefReport> convertImage(List<ResearchBriefReport> list) {
 		return list.stream().map(r -> {
-			r.setImageFileName(convertFile(r.getId(), Constants.briefReport.BRIEFING_INFO_IMAGE));
+			ResearchBriefReport fileObj = convertFile(r.getId(), Constants.briefReport.BRIEFING_INFO_IMAGE);
+			r.setImageFileName(fileObj.getFileName());
+			r.setFilePath(fileObj.getFilePath());
 			return r;
 		}).collect(Collectors.toList());
 	}
 
-	public List<ResearchBriefReport> hotReports(int topNo) {
+	public List<ResearchBriefReport> hotReports(String marketType, int topNo) {
 		ResearchBriefReport where = new ResearchBriefReport();
 		where.setPageNo(1);
 		where.setPageSize(topNo);
+		where.setMarketType(marketType);
 		List<ResearchBriefReport> list = dao.findResearchBriefReportList(where);
-		return list.stream().map(r -> {
-			r.setImageFileName(convertFile(r.getId(), Constants.briefReport.BRIEFING_INFO_IMAGE));
-			return r;
-		}).collect(Collectors.toList());
+		return convertImage(list);
 	}
 
 	public Page<ResearchBriefReport> findReportPage(ResearchBriefReport researchBriefReport) {
 		int pageSize = researchBriefReport.getPageSize();
 		Page page = new Page(researchBriefReport.getPageNo(),pageSize);
 		List<ResearchBriefReport> list = dao.findResearchBriefReportList(researchBriefReport);
-		list = list.stream().map(r -> {
-			r.setImageFileName(convertFile(r.getId(), Constants.briefReport.BRIEFING_INFO_IMAGE));
-			return convertList(r);
-		}).collect(Collectors.toList());
-		page.setList(list);
+		page.setList(convertImage(list));
 		long total = dao.findResearchBriefReportCount(researchBriefReport);
 		long count = total / pageSize;
 		if(total % pageSize > 0){
@@ -256,28 +254,29 @@ public class ResearchBriefReportService extends CrudService<ResearchBriefReportD
 		return page;
 	}
 
-	public String convertFile(String bizKey, String bizType) {
+	public ResearchBriefReport convertFile(String bizKey, String bizType) {
+		ResearchBriefReport report = new ResearchBriefReport();
 		List<FileUpload> list = FileUploadUtils.findFileUpload(bizKey, bizType);
 		if (CollectionUtils.isNotEmpty(list)) {
 			FileEntity fileEntity = list.get(0).getFileEntity();
 			if (fileEntity != null) {
-				return fileEntity.getFileId() + '.' + fileEntity.getFileExtension();
+				report.setFileName(fileEntity.getFileId() + '.' + fileEntity.getFileExtension());
+				report.setFilePath(fileEntity.getFilePath());
+				return report;
 			}
 		}
-		return null;
+		return report;
 	}
 
 	public long findResearchBriefReportCount(ResearchBriefReport researchBriefReport) {
 		return dao.findResearchBriefReportCount(researchBriefReport);
 	}
 
-	public List<ResearchBriefReport> choicenessReports() {
+	public List<ResearchBriefReport> choicenessReports(String marketType) {
 		ResearchBriefReport where = new ResearchBriefReport();
 		where.setUseChoiceness(Constants.enableType.YES);
+		where.setMarketType(marketType);
 		List<ResearchBriefReport> list = dao.findList(where);
-		return list.stream().map(r -> {
-			r.setImageFileName(convertFile(r.getId(), Constants.briefReport.BRIEFING_INFO_IMAGE));
-			return r;
-		}).collect(Collectors.toList());
+		return convertImage(list);
 	}
 }

+ 3 - 6
modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java

@@ -22,10 +22,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -208,9 +205,9 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 //	@Scheduled(cron ="0 0/5 * * * ?")
 	public void zfbPayQuery() {
 		WebsiteUserOrder where = new WebsiteUserOrder();
-		where.setPayMethod(Constants.orderPayMethod.ZFB);
+		where.setPayMethodList(Arrays.asList(Constants.orderPayMethod.ZFB, Constants.orderPayMethod.ZFB_H5));
 		where.setPayStatus(Constants.orderPayStatus.WAIT);
-		List<WebsiteUserOrder> list = dao.findList(where);
+		List<WebsiteUserOrder> list = dao.findOrderList(where);
 		for (WebsiteUserOrder order : list) {
 			//查订单状态
 			try {

+ 51 - 0
modules/report/src/main/java/com/jeesite/modules/report/service/WxPayService.java

@@ -0,0 +1,51 @@
+package com.jeesite.modules.report.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.jeesite.modules.report.entity.WebsiteUserOrder;
+import com.jeesite.modules.report.util.WxPayUtil;
+import com.wechat.pay.java.service.payments.nativepay.NativePayService;
+import com.wechat.pay.java.service.payments.nativepay.model.Amount;
+import com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest;
+import com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+
+@Service
+public class WxPayService {
+    private static Logger logger = LoggerFactory.getLogger(WxPayService.class);
+//    @Resource
+//    private NativePayService nativePayService;
+    @Resource
+    private WxPayUtil wxPayUtil;
+
+    /**
+     * 发起支付请求
+     *
+     * @param userOrder 支付信息
+     * @return
+     */
+    public String pay(WebsiteUserOrder userOrder) {
+        PrepayRequest request = new PrepayRequest();
+        Amount amount = new Amount();
+        //单位为分
+        BigDecimal total = userOrder.getPayPrice().multiply(new BigDecimal("100"));
+        amount.setTotal(total.intValue());
+        request.setAmount(amount);
+        request.setAppid(wxPayUtil.appId);
+        request.setMchid(wxPayUtil.mchId);
+        request.setDescription("简报下载支付" + amount.getTotal() + "元");
+        request.setNotifyUrl(wxPayUtil.notifyUrl);
+        request.setOutTradeNo(userOrder.getOrderNumber());
+        //TODO
+        // 调用下单方法,得到应答
+//        PrepayResponse response = nativePayService.prepay(request);
+//        // 使用微信扫描 code_url 对应的二维码,即可体验Native支付
+//        logger.info("微信 pay 响应:{}", JSONObject.toJSONString(response));
+//        return response.getCodeUrl();
+        return null;
+    }
+}

+ 61 - 0
modules/report/src/main/java/com/jeesite/modules/report/util/WxPayUtil.java

@@ -0,0 +1,61 @@
+package com.jeesite.modules.report.util;
+
+import com.wechat.pay.java.core.Config;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.service.payments.nativepay.NativePayService;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+@ConfigurationProperties(prefix = "wxpay")
+@Component
+@Data
+public class WxPayUtil {
+    /**
+     * 应用ID
+     */
+    public String appId;
+    /**
+     * 商户私钥
+     */
+    public String apiKey;
+    /**
+     * 商户id
+     */
+    public String mchId;
+    /**
+     * 商户API私钥路径
+     */
+    public String privateKeyPath;
+    /**
+     * 商户证书序列号
+     */
+    public String merchantSerialNumber;
+    /**
+     * 商户APIV3密钥
+     */
+    public String apiV3Key;
+    /**
+     * 服务器[异步通知]页面路径 必须外网可以正常访问 支付宝会告诉支付成功的信息
+     */
+    public String notifyUrl;
+
+    //TODO
+//    @Bean
+//    public Config config() {
+//        Config config =
+//                new RSAAutoCertificateConfig.Builder()
+//                        .merchantId(mchId)
+//                        .privateKeyFromPath(privateKeyPath)
+//                        .merchantSerialNumber(merchantSerialNumber)
+//                        .apiV3Key(apiV3Key)
+//                        .build();
+//        return config;
+//    }
+//
+//    @Bean
+//    public NativePayService nativePayService(Config config) {
+//        return new NativePayService.Builder().config(config).build();
+//    }
+}

+ 11 - 0
modules/report/src/main/resources/mappings/modules/report/WebsiteUserOrderDao.xml

@@ -15,4 +15,15 @@
     <select id="findByOrderNumber" resultType="com.jeesite.modules.report.entity.WebsiteUserOrder">
         select * from website_user_order where order_number = #{orderNumber}
     </select>
+
+    <select id="findOrderList" resultType="com.jeesite.modules.report.entity.WebsiteUserOrder">
+        select * from website_user_order where status = '0'
+        <if test="websiteUserOrder.payStatus != null and websiteUserOrder.payStatus != ''">and pay_status = #{websiteUserOrder.payStatus}</if>
+        <if test="websiteUserOrder.payMethodList != null">
+            AND pay_method in
+            <foreach item="str" collection="websiteUserOrder.payMethodList" open="(" separator="," close=")">
+                #{str}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 18 - 1
web/src/main/resources/config/application.yml

@@ -944,4 +944,21 @@ alipay:
   # 支付宝网关
   gatewayUrl: https://openapi.alipay.com/gateway.do
   # 支付宝沙箱网关
-#  gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
+#  gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
+
+# 微信支付配置 notifyUrl:微信支付异步回调地址
+wxpay:
+  #应用id
+  appId:
+  #商户私钥key
+  apiKey:
+  #商户id
+  mchId:
+  #支付回调地址
+  notifyUrl:
+  # 商户API私钥路径
+  privateKeyPath:
+  # 商户证书序列号
+  merchantSerialNumber:
+  # 商户APIV3密钥
+  apiV3Key: