Explorar el Código

微信移动端支付

guomengjiao hace 1 año
padre
commit
3bd264e5e2

+ 31 - 24
.idea/workspace.xml

@@ -30,7 +30,14 @@
   <component name="ChangeListManager">
     <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$/web/src/main/resources/config/application.yml" beforeDir="false" afterPath="$PROJECT_DIR$/web/src/main/resources/config/application.yml" 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/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/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/ResearchBriefReportLabel.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/entity/ResearchBriefReportLabel.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/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/service/WebsiteUserService.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/resources/mappings/modules/report/ResearchBriefReportLabelDao.xml" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/resources/mappings/modules/report/ResearchBriefReportLabelDao.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -92,7 +99,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$/../../maintenance-support/maintenance-support-java" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/../../university-management-system/laboratory-curriculum-java" />
     <property name="project.structure.last.edited" value="SDKs" />
     <property name="project.structure.proportion" value="0.15" />
     <property name="project.structure.side.proportion" value="0.25287357" />
@@ -133,7 +140,7 @@
       <visibility group="运行配置" flag="true" />
     </myKeys>
   </component>
-  <component name="RunManager" selected="Application.DateUtils">
+  <component name="RunManager" selected="Spring Boot.Application">
     <configuration name="DateUtils" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
       <option name="MAIN_CLASS_NAME" value="com.jeesite.common.lang.DateUtils" />
       <module name="jeesite-common" />
@@ -220,11 +227,6 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
-    <recent_temporary>
-      <list>
-        <item itemvalue="Application.DateUtils" />
-      </list>
-    </recent_temporary>
   </component>
   <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
   <component name="TaskManager">
@@ -456,21 +458,12 @@
       <workItem from="1734579234738" duration="258000" />
       <workItem from="1734579502121" duration="1272000" />
       <workItem from="1734658594781" duration="126472000" />
-      <workItem from="1735184825354" duration="122728000" />
-    </task>
-    <task id="LOCAL-00019" summary="更新">
-      <created>1689070205980</created>
-      <option name="number" value="00019" />
-      <option name="presentableId" value="LOCAL-00019" />
-      <option name="project" value="LOCAL" />
-      <updated>1689070205980</updated>
-    </task>
-    <task id="LOCAL-00020" summary="优化">
-      <created>1693222097317</created>
-      <option name="number" value="00020" />
-      <option name="presentableId" value="LOCAL-00020" />
-      <option name="project" value="LOCAL" />
-      <updated>1693222097318</updated>
+      <workItem from="1735184825354" duration="136617000" />
+      <workItem from="1735970054948" duration="362000" />
+      <workItem from="1735970445682" duration="40000" />
+      <workItem from="1735970508892" duration="86000" />
+      <workItem from="1735970618647" duration="252000" />
+      <workItem from="1735970895886" duration="7401000" />
     </task>
     <task id="LOCAL-00021" summary="模板添加报告功能">
       <created>1695344663181</created>
@@ -801,7 +794,21 @@
       <option name="project" value="LOCAL" />
       <updated>1735886486097</updated>
     </task>
-    <option name="localTasksCounter" value="68" />
+    <task id="LOCAL-00068" summary="微信移动端支付">
+      <created>1735892597165</created>
+      <option name="number" value="00068" />
+      <option name="presentableId" value="LOCAL-00068" />
+      <option name="project" value="LOCAL" />
+      <updated>1735892597165</updated>
+    </task>
+    <task id="LOCAL-00069" summary="微信移动端支付">
+      <created>1735894473840</created>
+      <option name="number" value="00069" />
+      <option name="presentableId" value="LOCAL-00069" />
+      <option name="project" value="LOCAL" />
+      <updated>1735894473840</updated>
+    </task>
+    <option name="localTasksCounter" value="70" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">

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

@@ -82,7 +82,7 @@ public class ResearchBriefReportControllerApi {
     @GetMapping(value = "/hotReports")
     @ApiOperation(value = "简报智库列表", notes = "热门报告,查询最新6个")
     public R<List<ResearchBriefReport>> hotReports(String marketType) {
-        return R.ok(researchBriefReportService.hotReports(marketType, 6));
+        return R.ok(researchBriefReportService.hotReports(marketType, 5));
     }
 
     /**

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

@@ -83,25 +83,29 @@ public class WebsiteUserControllerApi extends AbstractController {
         //查询用户
         WebsiteUser oldUser = websiteUserService.findLoginCode(loginCode);
         if (oldUser == null) {
-            return R.fail("用户不存在,请先注册");
+            oldUser = websiteUserService.findContact(loginCode);
+            if (oldUser == null) {
+                return R.fail("用户不存在,请先注册");
+            }
         }
+        String newLogin = oldUser.getLoginCode();
         //验证密码
-        String passwordEncode = PasswordUtil.encrypt(loginCode, password, oldUser.getSalt());
+        String passwordEncode = PasswordUtil.encrypt(newLogin, password, oldUser.getSalt());
         if (!passwordEncode.equals(oldUser.getPassword())) {
             return R.fail("登录密码不正确");
         }
         //TODO 单点登录,清理登录用户的登录token
-        List<Object> tokenList = redisUtil.lGet(Constants.PREFIX_USER_TOKEN_LIST + loginCode, 0, -1);
+        List<Object> tokenList = redisUtil.lGet(Constants.PREFIX_USER_TOKEN_LIST + newLogin, 0, -1);
         tokenList.forEach(t -> redisUtil.del(Constants.PREFIX_USER_TOKEN + t));
-        redisUtil.del(Constants.PREFIX_USER_TOKEN_LIST + loginCode);
+        redisUtil.del(Constants.PREFIX_USER_TOKEN_LIST + newLogin);
 
         // 生成token
-        String token = JwtUtil.sign(loginCode, password);
+        String token = JwtUtil.sign(newLogin, password);
         // 设置token缓存有效时间
         redisUtil.set(Constants.PREFIX_USER_TOKEN + token, oldUser.getId());
         redisUtil.expire(Constants.PREFIX_USER_TOKEN + token, EXPIRE);
         //TODO 单点登录,缓存登录用户的Token
-        redisUtil.lSet(Constants.PREFIX_USER_TOKEN_LIST + loginCode, token);
+        redisUtil.lSet(Constants.PREFIX_USER_TOKEN_LIST + newLogin, token);
         Map<String, Object> map = new HashMap<>();
         map.put("user", oldUser);
         map.put("token", token);
@@ -131,6 +135,10 @@ public class WebsiteUserControllerApi extends AbstractController {
         if (oldUser != null) {
             return R.fail("用户已存在");
         }
+        oldUser = websiteUserService.findContact(websiteUser.getContact());
+        if (oldUser != null) {
+            return R.fail("手机号已存在");
+        }
         oldUser = websiteUserService.findEmail(websiteUser.getEmail());
         if (oldUser != null) {
             return R.fail("邮箱已存在");

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

@@ -30,6 +30,7 @@ import java.util.List;
 		@Column(name="use_choiceness", attrName="useChoiceness", label="是否精选 0否 1是"),
 		@Column(name="web_title", attrName="webTitle", label="网站标题",queryType = QueryType.LIKE),
 		@Column(name="report_code", attrName="reportCode", label="报告代码"),
+		@Column(name="pdf_num", attrName="pdfNum", label="完整pdf页数"),
 	}, orderBy="a.update_date DESC"
 )
 public class ResearchBriefReport extends DataEntity<ResearchBriefReport> {
@@ -46,6 +47,7 @@ public class ResearchBriefReport extends DataEntity<ResearchBriefReport> {
 	private String useChoiceness; 	//是否精选 0否 1是
 	private String webTitle;		//网站标题
 	private String reportCode;		//报告代码
+	private Integer pdfNum;		//完整pdf页数
 
 	private Date publishDateStr;	//发布日期起
 	private Date publishDateEnd;	//发布日期止
@@ -63,7 +65,7 @@ public class ResearchBriefReport extends DataEntity<ResearchBriefReport> {
 	private String useShowPay; //是否展示收费按钮 0否 1是
 	private String notId;
 
-	private String orderByStr = "update_date desc";
+	private String orderByStr = "create_date desc";
 
 	private List<ResearchBriefReportLabelRelevancy> relevancies;
 
@@ -169,6 +171,14 @@ public class ResearchBriefReport extends DataEntity<ResearchBriefReport> {
 		this.reportCode = reportCode;
 	}
 
+	public Integer getPdfNum() {
+		return pdfNum;
+	}
+
+	public void setPdfNum(Integer pdfNum) {
+		this.pdfNum = pdfNum;
+	}
+
 	public Date getPublishDateStr() {
 		return publishDateStr;
 	}

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

@@ -20,7 +20,7 @@ import java.util.List;
 		@Column(name="parent_id", attrName="parentId", label="上级id"),
 		@Column(name="level_num", attrName="levelNum", label="层次"),
 		@Column(name="sort_num", attrName="sortNum", label="排序"),
-	}, orderBy="a.update_date DESC"
+	}, orderBy="a.sort_num"
 )
 public class ResearchBriefReportLabel extends DataEntity<ResearchBriefReportLabel> {
 	

+ 10 - 0
modules/report/src/main/java/com/jeesite/modules/report/entity/WebsiteUserOrder.java

@@ -27,6 +27,7 @@ import java.util.List;
 		@Column(name="pay_method", attrName="payMethod", label="支付方式 wx、zfb、wx_h5、zfb_h5"),
 		@Column(name="pay_price", attrName="payPrice", label="支付单价"),
 		@Column(name="research_brief_report_id", attrName="researchBriefReportId", label="简报智库id"),
+		@Column(name="third_order_number", attrName="thirdOrderNumber", label="平台的订单号"),
 	}, orderBy="a.update_date DESC"
 )
 public class WebsiteUserOrder extends DataEntity<WebsiteUserOrder> {
@@ -39,6 +40,7 @@ public class WebsiteUserOrder extends DataEntity<WebsiteUserOrder> {
 	private String payMethod;		// 支付方式
 	private BigDecimal payPrice;		// 支付单价
 	private String researchBriefReportId;		// 简报智库id
+	private String thirdOrderNumber;   //平台的订单号
 	private String useDown;		// 是否下载过 0否 1是
 	private Integer downNum;		// 下载次数
 	private String fileType;
@@ -119,6 +121,14 @@ public class WebsiteUserOrder extends DataEntity<WebsiteUserOrder> {
 		this.researchBriefReportId = researchBriefReportId;
 	}
 
+	public String getThirdOrderNumber() {
+		return thirdOrderNumber;
+	}
+
+	public void setThirdOrderNumber(String thirdOrderNumber) {
+		this.thirdOrderNumber = thirdOrderNumber;
+	}
+
 	public String getUseDown() {
 		return useDown;
 	}

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

@@ -193,7 +193,7 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 			if (signVerified) {
 				// TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
 				if ("TRADE_SUCCESS".equals(trade_status) || "TRADE_FINISHED".equals(trade_status)) {
-					return payUpdate(out_trade_no, total_amount, DateUtils.parseDateByFormat(gmt_payment, "yyyy-MM-dd HH:mm:ss"));
+					return payUpdate(out_trade_no, total_amount, DateUtils.parseDateByFormat(gmt_payment, "yyyy-MM-dd HH:mm:ss"), paramMap.get("trade_no"));
 				}
 			}
 		} catch (AlipayApiException e) {
@@ -203,7 +203,7 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 		return "failure";
 	}
 
-	private String payUpdate(String out_trade_no, String total_amount, Date date) {
+	private String payUpdate(String out_trade_no, String total_amount, Date date, String thirdOrderNumber) {
 		WebsiteUserOrder where = new WebsiteUserOrder();
 		where.setOrderNumber(out_trade_no);
 		where.setPayStatus(Constants.orderPayStatus.WAIT);
@@ -217,6 +217,7 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 			}
 			websiteUserOrder.setPayStatus(Constants.orderPayStatus.PAY_SUCCESS);
 			websiteUserOrder.setPayDate(date);
+			websiteUserOrder.setThirdOrderNumber(thirdOrderNumber);
 			super.update(websiteUserOrder);
 		}
 		return "success";
@@ -239,6 +240,7 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 					if ("TRADE_SUCCESS".equals(trade_status) || "TRADE_FINISHED".equals(trade_status)) {
 						order.setPayStatus(Constants.orderPayStatus.PAY_SUCCESS);
 						order.setPayDate(DateUtils.parseDateByFormat(jo.getString("send_pay_date"), "yyyy-MM-dd HH:mm:ss"));
+						order.setThirdOrderNumber(jo.getString("trade_no"));
 						super.update(order);
 						continue;
 					} else if ("TRADE_CLOSED".equals(trade_status)) {
@@ -280,6 +282,7 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 					if ("SUCCESS".equals(transaction.getTradeState().name())) {
 						order.setPayStatus(Constants.orderPayStatus.PAY_SUCCESS);
 						order.setPayDate(DateUtils.parseDateISOByFormat(transaction.getSuccessTime()));
+						order.setThirdOrderNumber(transaction.getTransactionId());
 						super.update(order);
 						continue;
 					} else if ("CLOSED".equals(transaction.getTradeState().name())) {
@@ -334,7 +337,7 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 			Transaction.TradeStateEnum tradeState = transaction.getTradeState();
 			if (Transaction.TradeStateEnum.SUCCESS.equals(tradeState)){
 				BigDecimal amount = new BigDecimal(transaction.getAmount().getPayerTotal()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
-				return payUpdate(transaction.getOutTradeNo(), amount.toString(), DateUtils.parseDateISOByFormat(transaction.getSuccessTime()));
+				return payUpdate(transaction.getOutTradeNo(), amount.toString(), DateUtils.parseDateISOByFormat(transaction.getSuccessTime()), transaction.getTransactionId());
 			}
 		} catch (Exception e) {
 			logger.error("wxpayAsyncNotify error", e);

+ 6 - 0
modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserService.java

@@ -85,6 +85,12 @@ public class WebsiteUserService extends CrudService<WebsiteUserDao, WebsiteUser>
 		return dao.getByEntity(where);
 	}
 
+	public WebsiteUser findContact(String contact) {
+		WebsiteUser where = new WebsiteUser();
+		where.setContact(contact);
+		return dao.getByEntity(where);
+	}
+
 	public R<String> updateUser(String userId, WebsiteUser user) {
 		WebsiteUser websiteUser = get(userId);
 		if (websiteUser == null) {

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

@@ -30,7 +30,7 @@
         select * from research_brief_report_label a
         where a.status = '0'
         <include refid="whereStr02"/>
-        order by a.update_date desc
+        order by a.sort_num
         limit ${info.pageSize * (info.pageNo - 1)},${info.pageSize}
     </select>