西格玛许 9 ساعت پیش
والد
کامیت
7b3122b4d9

+ 3 - 1
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/config/WxPayConfig.java

@@ -162,7 +162,9 @@ public class WxPayConfig {
 
             // 金额设置(转换为分)
             Amount amount = new Amount();
-            amount.setTotal(payPrice.multiply(new BigDecimal(100)).intValue());
+            int totalCents = payPrice.multiply(new BigDecimal(100)).intValue();
+            log.info("微信支付预下单 - 金额转换: 元={}, 分={}", payPrice, totalCents);
+            amount.setTotal(totalCents);
             request.setAmount(amount);
 
             // 支付者信息

+ 9 - 4
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/CsOrderCardController.java

@@ -94,6 +94,8 @@ public class CsOrderCardController extends BaseController {
             String nonce = request.getHeader("Wechatpay-Nonce");
             String signature = request.getHeader("Wechatpay-Signature");
 
+            log.info("收到微信支付回调 - Timestamp: {}, Nonce: {}, Signature: {}", timestamp, nonce, signature);
+
             // 读取请求体
             StringBuilder body = new StringBuilder();
             try (BufferedReader reader = new BufferedReader(
@@ -105,25 +107,28 @@ public class CsOrderCardController extends BaseController {
             }
 
             String requestBody = body.toString();
-            log.info("微信支付回调{}", requestBody);
+            log.info("微信支付回调请求体: {}", requestBody);
 
-            // 解析支付结果(这里需要实现解密,可以参考photo项目)
+            // 解析支付结果
             JSONObject data = JSON.parseObject(requestBody);
             JSONObject resource = data.getJSONObject("resource");
             String ciphertext = resource.getString("ciphertext");
             String associatedData = resource.getString("associated_data");
             String nonceStr = resource.getString("nonce");
 
-// 解密数据(需要实现AES-GCM解密)
+            // 解密数据
             String decryptedData = decryptFromWechat(ciphertext, associatedData, nonceStr);
+            log.info("微信支付回调解密结果: {}", decryptedData);
             JSONObject paymentResult = JSON.parseObject(decryptedData);
 
             String orderNo = paymentResult.getString("out_trade_no");
             String tradeState = paymentResult.getString("trade_state");
+            log.info("支付回调解析内容 - 订单号: {}, 交易状态: {}", orderNo, tradeState);
 
             if ("SUCCESS".equals(tradeState)) {
-                // 调用你的业务处理方法
                 orderCardService.handlePaySuccess(orderNo);
+            } else {
+                log.warn("支付状态不为SUCCESS: {}", tradeState);
             }
 
             // 响应微信

+ 6 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainPositionVo.java

@@ -120,6 +120,12 @@ public class MainPositionVo implements Serializable {
 
     private String companyName;
 
+    /** 经度 */
+    private BigDecimal longitude;
+
+    /** 纬度 */
+    private BigDecimal latitude;
+
     /** 岗位类型(翻译后的Label,如:全职/实习/兼职) */
     @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "postType", other = "main_position_type")
     private String postTypeLabel;

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/CsOrderCardServiceImpl.java

@@ -183,9 +183,11 @@ public class CsOrderCardServiceImpl implements ICsOrderCardService {
         mainOrder.setProductId(orderCard.getId());
         mainOrder.setTenantId(student.getTenantId());
         mainOrder.setRemark(orderCard.getOrderName());
+        log.info("创建订单 - 结算单ID: {}, 结算单价格: {}, 转换后的订单价格: {}", orderCard.getId(), orderCard.getOrderPrice(), mainOrder.getTotalAmount());
         orderMapper.insert(mainOrder);
 
         try {
+            log.info("生成微信支付参数 - OpenID: {}, 传入价格: {}, 订单号: {}", student.getOpenid(), orderCard.getOrderPrice(), mainOrder.getOrderNo());
             Map<String, String> wxPayParams = wxPayConfig.createJsapiPayParams(
                 student.getOpenid(),
                 orderCard.getOrderPrice(),

+ 2 - 1
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/CsSessionServiceImpl.java

@@ -24,6 +24,7 @@ import org.dromara.main.service.ICsSessionService;
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.mapper.SysUserMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.Arrays;
@@ -47,6 +48,7 @@ public class CsSessionServiceImpl implements ICsSessionService {
     private final Converter converter;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public CsSessionVo createOrGetSession(Integer sessionType, Long fromUserId,
                                           String fromUserName, String fromUserAvatar,
                                           String sourceId) {
@@ -58,7 +60,6 @@ public class CsSessionServiceImpl implements ICsSessionService {
         if (StringUtils.isNotBlank(sourceId)) {
             lqw.eq(CsSession::getSourceId, sourceId);
         } else {
-            // 如果没传 sourceId(比如从个人中心进),优先找 sourceId 为空的通用会话
             lqw.isNull(CsSession::getSourceId);
         }
 

+ 3 - 1
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainPositionServiceImpl.java

@@ -78,9 +78,11 @@ public class MainPositionServiceImpl extends ServiceImpl<MainPositionMapper, Mai
         MainPosition position = baseMapper.selectById(id);
         MainPositionVo vo = MapstructUtils.convert(position, MainPositionVo.class);
         if (vo != null && StringUtils.isNotBlank(vo.getTenantId())) {
-            SysTenantVo tenant = tenantMapper.selectVoOne(new LambdaQueryWrapper<org.dromara.system.domain.SysTenant>().eq(org.dromara.system.domain.SysTenant::getTenantId, vo.getTenantId()));
+            SysTenantVo tenant = tenantMapper.selectVoOne(new LambdaQueryWrapper<SysTenant>().eq(SysTenant::getTenantId, vo.getTenantId()));
             if (tenant != null) {
                 vo.setCompanyName(tenant.getCompanyName());
+                vo.setLongitude(tenant.getLongitude());
+                vo.setLatitude(tenant.getLatitude());
             } else if ("000000".equals(vo.getTenantId())) {
                 vo.setCompanyName("平台推荐");
             } else {

+ 9 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysTenant.java

@@ -128,5 +128,14 @@ public class SysTenant extends BaseEntity {
     private Long logo;
 
     private String email;
+    /**
+     * 经度
+     */
+    private BigDecimal longitude;
+
+    /**
+     * 纬度
+     */
+    private BigDecimal latitude;
 }
 

+ 11 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysTenantBo.java

@@ -10,6 +10,7 @@ import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.system.domain.SysTenant;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -130,4 +131,14 @@ public class SysTenantBo extends BaseEntity {
 
     private Long logo;
 
+    /**
+     * 经度
+     */
+    private BigDecimal longitude;
+
+    /**
+     * 纬度
+     */
+    private BigDecimal latitude;
+
 }

+ 6 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysTenantVo.java

@@ -153,5 +153,11 @@ public class SysTenantVo implements Serializable {
     private String nickName;
     private Long avatar;
 
+    /** 经度 */
+    private BigDecimal longitude;
+
+    /** 纬度 */
+    private BigDecimal latitude;
+
 
 }