Bladeren bron

报告支付

guomengjiao 5 maanden geleden
bovenliggende
commit
9383051944

+ 22 - 21
.idea/workspace.xml

@@ -28,29 +28,23 @@
     </select>
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="fc9366aa-6566-4981-8149-d75e02f8e884" name="默认的" comment="默认的">
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_alipay_sdk_alipay_sdk_java_4_40_21_ALL.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_squareup_okhttp3_okhttp_4_9_3.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_squareup_okio_okio_2_8_0.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_bouncycastle_bcprov_jdk15on_1_62.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_jetbrains_annotations_13_0.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_6_21.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_21.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__xml_apis_xml_apis_1_0_b2.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/util/AlipayUtil.java" afterDir="false" />
+    <list default="true" id="fc9366aa-6566-4981-8149-d75e02f8e884" name="默认的" comment="报告下载">
       <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/constant/Constants.java" beforeDir="false" afterPath="$PROJECT_DIR$/common/src/main/java/com/jeesite/common/constant/Constants.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/bjflapi/bjflapi.iml" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/bjflapi.iml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/bjflapi/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/AbstractController.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/AbstractController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserControllerApi.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserControllerApi.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/core/src/main/java/com/jeesite/modules/sys/utils/R.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/core/src/main/java/com/jeesite/modules/sys/utils/R.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/modules/core/src/main/java/com/jeesite/modules/sys/utils/StatusMsgEnum.java" beforeDir="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/bjflapi/src/main/java/com/jeesite/modules/bjflapi/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/jeesite-module-report.iml" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/jeesite-module-report.iml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/dao/WebsiteUserDao.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/dao/WebsiteUserDao.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/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/resources/mappings/modules/report/WebsiteUserDao.xml" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/resources/mappings/modules/report/WebsiteUserDao.xml" 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/jeesite-web.iml" beforeDir="false" afterPath="$PROJECT_DIR$/web/jeesite-web.iml" 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" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -469,7 +463,7 @@
       <workItem from="1734268366747" duration="59000" />
       <workItem from="1734579234738" duration="258000" />
       <workItem from="1734579502121" duration="1272000" />
-      <workItem from="1734658594781" duration="94117000" />
+      <workItem from="1734658594781" duration="102538000" />
     </task>
     <task id="LOCAL-00001" summary="1">
       <created>1676368709673</created>
@@ -744,7 +738,14 @@
       <option name="project" value="LOCAL" />
       <updated>1735026920662</updated>
     </task>
-    <option name="localTasksCounter" value="40" />
+    <task id="LOCAL-00040" summary="报告下载">
+      <created>1735034116817</created>
+      <option name="number" value="00040" />
+      <option name="presentableId" value="LOCAL-00040" />
+      <option name="project" value="LOCAL" />
+      <updated>1735034116817</updated>
+    </task>
+    <option name="localTasksCounter" value="41" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -799,7 +800,6 @@
     </option>
   </component>
   <component name="VcsManagerConfiguration">
-    <MESSAGE value="报告" />
     <MESSAGE value="修复图片丢失" />
     <MESSAGE value="用户信息优化" />
     <MESSAGE value="添加销量单位,价格单位" />
@@ -824,7 +824,8 @@
     <MESSAGE value="简报" />
     <MESSAGE value="按钮权限" />
     <MESSAGE value="简报下载" />
-    <option name="LAST_COMMIT_MESSAGE" value="简报下载" />
+    <MESSAGE value="报告下载" />
+    <option name="LAST_COMMIT_MESSAGE" value="报告下载" />
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>

+ 5 - 0
common/src/main/java/com/jeesite/common/constant/Constants.java

@@ -200,6 +200,11 @@ public interface Constants {
         String PAY_ERROR = "2";
     }
 
+    interface orderPayMethod{
+        String WX = "wx";
+        String ZFB = "zfb";
+    }
+
     interface briefReportFileType{
         String PDF = "pdf";
         String PPT = "ppt";

+ 1 - 1
modules/bjflapi/bjflapi.iml

@@ -47,6 +47,7 @@
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4" level="project" />
     <orderEntry type="library" name="Maven: org.codehaus.woodstox:stax2-api:4.2.1" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.woodstox:woodstox-core:6.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83_noneautotype" level="project" />
     <orderEntry type="library" name="Maven: jaxen:jaxen:1.2.0" level="project" />
     <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" />
     <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
@@ -203,7 +204,6 @@
     <orderEntry type="library" name="Maven: com.auth0:java-jwt:3.11.0" level="project" />
     <orderEntry type="library" name="Maven: com.alipay.sdk:alipay-sdk-java:4.40.21.ALL" level="project" />
     <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83_noneautotype" level="project" />
     <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.62" level="project" />
     <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
     <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" />

+ 0 - 6
modules/bjflapi/pom.xml

@@ -29,12 +29,6 @@
             <artifactId>jeesite-module-researchReport</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
-
-        <dependency>
-            <groupId>com.alipay.sdk</groupId>
-            <artifactId>alipay-sdk-java</artifactId>
-            <version>4.40.21.ALL</version>
-        </dependency>
     </dependencies>
 
     <developers>

+ 7 - 2
modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/AbstractController.java

@@ -8,6 +8,7 @@
 
 package com.jeesite.modules.bjflapi;
 
+import com.jeesite.common.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.servlet.http.HttpServletRequest;
@@ -22,7 +23,11 @@ public abstract class AbstractController {
     @Autowired
     HttpServletRequest request;
 
-    protected String getUserIdByRequest() {
-        return (String) request.getAttribute("uid");
+    protected String getUserIdByRequest() throws Exception {
+        String uid = (String) request.getAttribute("uid");
+        if (StringUtils.isEmpty(uid)) {
+            throw new Exception("用户未登录");
+        }
+        return uid;
     }
 }

+ 1 - 1
modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserControllerApi.java

@@ -134,7 +134,7 @@ public class WebsiteUserControllerApi extends AbstractController {
      */
     @WebsiteAuth
     @PostMapping(value = "updatePwd")
-    public String updatePwd(WebsiteUserDto dto) {
+    public String updatePwd(WebsiteUserDto dto) throws Exception {
         String userId = getUserIdByRequest();
         WebsiteUser websiteUser = websiteUserService.get(userId);
         return updatePass(websiteUser, dto.getNewPassword(), dto.getConfirmNewPassword());

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

@@ -2,27 +2,33 @@ package com.jeesite.modules.bjflapi.report;
 
 import com.jeesite.common.constant.Constants;
 import com.jeesite.common.lang.StringUtils;
+import com.jeesite.modules.bjflapi.AbstractController;
 import com.jeesite.modules.report.entity.ResearchBriefReport;
 import com.jeesite.modules.report.entity.WebsiteUserOrder;
 import com.jeesite.modules.report.entity.WebsiteUserOrderDown;
 import com.jeesite.modules.report.service.ResearchBriefReportService;
 import com.jeesite.modules.report.service.WebsiteUserOrderDownService;
 import com.jeesite.modules.report.service.WebsiteUserOrderService;
+import com.jeesite.modules.sys.annotation.WebsiteAuth;
 import com.jeesite.modules.sys.utils.R;
 import com.jeesite.modules.sys.utils.RedisUtil;
 import io.swagger.annotations.Api;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping(value = "${adminPath}/api/report/websiteUserOrder")
 @Api(value = "WebsiteUserOrderControllerApi", tags = "网站用户订单接口")
-public class WebsiteUserOrderControllerApi {
+public class WebsiteUserOrderControllerApi extends AbstractController {
     @Resource
     private WebsiteUserOrderService websiteUserOrderService;
     @Resource
@@ -44,7 +50,7 @@ public class WebsiteUserOrderControllerApi {
         }
         //判断简报是否需要收费
         ResearchBriefReport researchBriefReport = researchBriefReportService.get(reportId);
-        if (researchBriefReport == null ) {
+        if (researchBriefReport == null) {
             return R.error("简报为空");
         }
         if (Constants.enableType.NO.equals(researchBriefReport.getUseDownPay())) {
@@ -61,13 +67,11 @@ public class WebsiteUserOrderControllerApi {
         WebsiteUserOrder orderWhere = new WebsiteUserOrder();
         orderWhere.setWebsiteUserId(uid);
         orderWhere.setResearchBriefReportId(reportId);
+        orderWhere.setPayStatus(Constants.orderPayStatus.PAY_SUCCESS);
         WebsiteUserOrder oldOrder = websiteUserOrderService.get(orderWhere);
         if (oldOrder == null) {
             return R.error(5002, "用户未支付");
         }
-        if (!Constants.orderPayStatus.PAY_SUCCESS.equals(orderWhere.getPayStatus())) {
-            return R.error("订单未付款");
-        }
         WebsiteUserOrderDown downWhere = new WebsiteUserOrderDown();
         downWhere.setWebsiteUserId(uid);
         downWhere.setWebsiteUserOrderId(oldOrder.getId());
@@ -84,9 +88,58 @@ public class WebsiteUserOrderControllerApi {
             return R.error("下载类型不存在");
         }
         if (down != null) {
+            //保存下载记录
             down.setFileName(fileName);
             websiteUserOrderDownService.save(down);
         }
         return R.ok(fileName);
     }
+
+    @WebsiteAuth
+    @PostMapping(value = "payOrder")
+    public Map<String, Object> payOrder(WebsiteUserOrder websiteUserOrder) throws Exception {
+        String userId = getUserIdByRequest();
+        String reportId = websiteUserOrder.getResearchBriefReportId();
+        if (StringUtils.isEmpty(reportId)) {
+            return R.error("简报为空");
+        }
+        String payMethod = websiteUserOrder.getPayMethod();
+        if (StringUtils.isEmpty(payMethod)) {
+            return R.error("支付方式为空");
+        }
+        if (!Constants.orderPayMethod.ZFB.equals(payMethod) && !Constants.orderPayMethod.WX.equals(payMethod)) {
+            return R.error("支付方式值无效");
+        }
+        //判断简报是否需要收费
+        ResearchBriefReport researchBriefReport = researchBriefReportService.get(reportId);
+        if (researchBriefReport == null) {
+            return R.error("简报为空");
+        }
+        if (Constants.enableType.NO.equals(researchBriefReport.getUseDownPay())) {
+            return R.error("简报不需要收费");
+        }
+        if (!websiteUserOrder.getPayPrice().equals(researchBriefReport.getUseDownPayPrice())) {
+            return R.error("支付金额与简报收费金额不一致");
+        }
+        WebsiteUserOrder orderWhere = new WebsiteUserOrder();
+        orderWhere.setWebsiteUserId(userId);
+        orderWhere.setResearchBriefReportId(reportId);
+        List<WebsiteUserOrder> orders = websiteUserOrderService.findList(orderWhere);
+        if (CollectionUtils.isNotEmpty(orders)) {
+            List<WebsiteUserOrder> filterOrders = orders.stream().filter(o -> Constants.orderPayStatus.WAIT.equals(o.getPayStatus()) || Constants.orderPayStatus.PAY_SUCCESS.equals(o.getPayStatus())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(filterOrders)) {
+                return R.error("简报存在支付订单,无法重复支付");
+            }
+        }
+        return websiteUserOrderService.saveAndPay(userId, payMethod, researchBriefReport);
+    }
+
+    /**
+     * 支付宝的异步通知,只要返回 success 支付宝便不再通知
+     */
+    @PostMapping(value = "/pay/asyncNotify")
+    public String payAsyncNotify(@RequestParam Map<String, String> paramMap) {
+        return websiteUserOrderService.payAsyncNotify(paramMap);
+    }
+
 }

+ 11 - 2
modules/report/jeesite-module-report.iml

@@ -31,7 +31,6 @@
     <orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.10.0" level="project" />
     <orderEntry type="library" name="Maven: commons-io:commons-io:2.11.0" level="project" />
     <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.4" level="project" />
-    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
     <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
     <orderEntry type="library" name="Maven: de.ruedigermoeller:fst:2.57" level="project" />
     <orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
@@ -40,7 +39,6 @@
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4" level="project" />
     <orderEntry type="library" name="Maven: org.codehaus.woodstox:stax2-api:4.2.1" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.woodstox:woodstox-core:6.3.1" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83_noneautotype" level="project" />
     <orderEntry type="library" name="Maven: jaxen:jaxen:1.2.0" level="project" />
     <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" />
     <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
@@ -197,5 +195,16 @@
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.4" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.4" level="project" />
     <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
+    <orderEntry type="library" name="Maven: com.alipay.sdk:alipay-sdk-java:4.40.21.ALL" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83_noneautotype" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.62" level="project" />
+    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
+    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.6.21" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.6.21" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
   </component>
 </module>

+ 7 - 0
modules/report/pom.xml

@@ -43,6 +43,13 @@
 			<artifactId>java-jwt</artifactId>
 			<version>3.11.0</version>
 		</dependency>
+
+		<!--ZFB-->
+		<dependency>
+			<groupId>com.alipay.sdk</groupId>
+			<artifactId>alipay-sdk-java</artifactId>
+			<version>4.40.21.ALL</version>
+		</dependency>
 	</dependencies>
 
 	<developers>

+ 2 - 1
modules/report/src/main/java/com/jeesite/modules/report/dao/WebsiteUserDao.java

@@ -3,6 +3,7 @@ package com.jeesite.modules.report.dao;
 import com.jeesite.common.dao.CrudDao;
 import com.jeesite.common.mybatis.annotation.MyBatisDao;
 import com.jeesite.modules.report.entity.WebsiteUser;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 网站用户DAO接口
@@ -12,5 +13,5 @@ import com.jeesite.modules.report.entity.WebsiteUser;
 @MyBatisDao
 public interface WebsiteUserDao extends CrudDao<WebsiteUser> {
 
-    int updatePass(WebsiteUser websiteUser);
+    int updatePass(@Param("websiteUser") WebsiteUser websiteUser);
 }

+ 3 - 1
modules/report/src/main/java/com/jeesite/modules/report/dao/WebsiteUserOrderDao.java

@@ -3,6 +3,7 @@ package com.jeesite.modules.report.dao;
 import com.jeesite.common.dao.CrudDao;
 import com.jeesite.common.mybatis.annotation.MyBatisDao;
 import com.jeesite.modules.report.entity.WebsiteUserOrder;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 简报智库订单DAO接口
@@ -11,5 +12,6 @@ import com.jeesite.modules.report.entity.WebsiteUserOrder;
  */
 @MyBatisDao
 public interface WebsiteUserOrderDao extends CrudDao<WebsiteUserOrder> {
-	
+
+    WebsiteUserOrder findByOrderNumber(@Param("orderNumber") String orderNumber);
 }

+ 63 - 2
modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java

@@ -1,7 +1,11 @@
 package com.jeesite.modules.report.service;
 
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.internal.util.AlipaySignature;
 import com.jeesite.common.constant.Constants;
 import com.jeesite.common.entity.Page;
+import com.jeesite.common.lang.DateUtils;
 import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.service.CrudService;
 import com.jeesite.modules.report.dao.ResearchBriefReportDao;
@@ -10,11 +14,18 @@ import com.jeesite.modules.report.dao.WebsiteUserOrderDownDao;
 import com.jeesite.modules.report.entity.ResearchBriefReport;
 import com.jeesite.modules.report.entity.WebsiteUserOrder;
 import com.jeesite.modules.report.entity.WebsiteUserOrderDown;
+import com.jeesite.modules.report.util.AlipayUtil;
+import com.jeesite.modules.sys.utils.R;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 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.stream.Collectors;
 
 /**
@@ -28,6 +39,10 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 	private ResearchBriefReportDao researchBriefReportDao;
 	@Resource
 	private WebsiteUserOrderDownDao websiteUserOrderDownDao;
+	@Resource
+	private AlipayUtil alipayUtil;
+
+	private static Logger logger = LoggerFactory.getLogger(WebsiteUserOrderService.class);
 	/**
 	 * 获取单条数据
 	 * @param websiteUserOrder
@@ -41,7 +56,6 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 	/**
 	 * 查询分页数据
 	 * @param websiteUserOrder 查询条件
-	 * @param websiteUserOrder.page 分页对象
 	 * @return
 	 */
 	@Override
@@ -110,5 +124,52 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 	public void delete(WebsiteUserOrder websiteUserOrder) {
 		super.delete(websiteUserOrder);
 	}
-	
+
+	public Map<String, Object> saveAndPay(String userId, String payMethod, ResearchBriefReport researchBriefReport) {
+		if (researchBriefReport == null) {
+			return R.error("简报为空");
+		}
+		WebsiteUserOrder websiteUserOrder = new WebsiteUserOrder();
+		websiteUserOrder.setOrderNumber(generateOrderNumber());
+		websiteUserOrder.setWebsiteUserId(userId);
+		websiteUserOrder.setPayStatus(Constants.orderPayStatus.WAIT);
+		websiteUserOrder.setPayMethod(payMethod);
+		websiteUserOrder.setPayPrice(researchBriefReport.getUseDownPayPrice());
+		websiteUserOrder.setResearchBriefReportId(researchBriefReport.getId());
+		//判断下订单号是否存在
+		WebsiteUserOrder findOrder = dao.findByOrderNumber(websiteUserOrder.getOrderNumber());
+		if (findOrder != null) {
+			return R.error("系统异常,请稍后重试");
+		}
+		String payResult = null;
+		if (Constants.orderPayMethod.ZFB.equals(payMethod)) {
+			try {
+				payResult = alipayUtil.pay(websiteUserOrder);
+			} catch (AlipayApiException e) {
+				return R.error(e.getErrCode() + e.getErrMsg());
+			}
+		}
+		if (StringUtils.isEmpty(payResult)) {
+			return R.error("支付调用第三方失败");
+		}
+		super.save(websiteUserOrder);
+		return R.ok(payResult);
+	}
+
+	public String generateOrderNumber() {
+		String random = String.valueOf((new Random().nextDouble() * 9000) + 1000);
+		return "WUO" + DateUtils.formatDate(new Date(), "yyyyMMddHHmmss") + random;
+	}
+
+	public String payAsyncNotify(Map<String, String> paramMap) {
+		logger.info("zfb payAsyncNotify 进来了 {}", JSONObject.toJSONString(paramMap));
+		boolean signVerified = false; //调用SDK验证签名
+		try {
+			signVerified = AlipaySignature.rsaCheckV1(paramMap, alipayUtil.alipay_public_key, alipayUtil.charset, alipayUtil.sign_type);
+		} catch (AlipayApiException e) {
+			logger.error("zfb payAsyncNotify error {}", e);
+			return "failure";
+		}
+		return "failure";
+	}
 }

+ 13 - 7
modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/util/AlipayUtil.java

@@ -1,10 +1,12 @@
-package com.jeesite.modules.bjflapi.util;
+package com.jeesite.modules.report.util;
 
+import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.domain.AlipayTradePagePayModel;
 import com.alipay.api.request.AlipayTradePagePayRequest;
+import com.alipay.api.response.AlipayTradePagePayResponse;
 import com.jeesite.modules.report.entity.WebsiteUserOrder;
 import lombok.Data;
 import org.slf4j.Logger;
@@ -41,11 +43,11 @@ public class AlipayUtil {
     /**
      * 签名方式
      */
-    private String sign_type;
+    public String sign_type;
     /**
      * 字符编码格式
      */
-    private String charset;
+    public String charset;
     /**
      * 订单超时时间
      */
@@ -78,7 +80,7 @@ public class AlipayUtil {
         // 设置订单总金额
         model.setTotalAmount(userOrder.getPayPrice().toString());
         // 设置订单标题
-        model.setSubject(userOrder.getResearchBriefReportTitle());
+        model.setSubject("简报下载支付" + model.getTotalAmount() + "元");
         // 设置产品码
         model.setProductCode("FAST_INSTANT_TRADE_PAY");
         // 设置PC扫码支付的方式
@@ -86,10 +88,14 @@ public class AlipayUtil {
         model.setTimeoutExpress(timeout);
 
         alipayRequest.setBizModel(model);
-        String result = alipayClient.pageExecute(alipayRequest).getBody();
+        AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest);
         // 收到支付宝的响应,响应一个页面,浏览器显示这个页面,就会自动到支付宝的收银台页面
-        logger.info("支付宝响应:{}", result);
-        return result;
+        logger.info("支付宝响应:{}", JSONObject.toJSONString(response));
+        if (response.isSuccess()) {
+            return response.getBody();
+        } else {
+            return null;
+        }
     }
 
     private AlipayClient getAlipayClient() {

+ 1 - 1
modules/report/src/main/resources/mappings/modules/report/WebsiteUserDao.xml

@@ -13,6 +13,6 @@
 	</select> -->
 
     <update id="updatePass">
-        update website_user set password = #{password} where id = #{id}
+        update website_user set password = #{websiteUser.password} where id = #{websiteUser.id}
     </update>
 </mapper>

+ 4 - 1
modules/report/src/main/resources/mappings/modules/report/WebsiteUserOrderDao.xml

@@ -11,5 +11,8 @@
 		</where>
 		ORDER BY ${sqlMap.order.toSql()}
 	</select> -->
-	
+
+    <select id="findByOrderNumber" resultType="com.jeesite.modules.report.entity.WebsiteUserOrder">
+        select * from website_user_order where order_number = #{orderNumber}
+    </select>
 </mapper>

+ 1 - 1
web/jeesite-web.iml

@@ -38,6 +38,7 @@
     <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
     <orderEntry type="library" name="Maven: commons-io:commons-io:2.11.0" level="project" />
     <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.4" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
     <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
     <orderEntry type="library" name="Maven: de.ruedigermoeller:fst:2.57" level="project" />
     <orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
@@ -205,7 +206,6 @@
     <orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
     <orderEntry type="library" name="Maven: com.auth0:java-jwt:3.11.0" level="project" />
     <orderEntry type="library" name="Maven: com.alipay.sdk:alipay-sdk-java:4.40.21.ALL" level="project" />
-    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
     <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.62" level="project" />
     <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
     <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.0.b2" level="project" />