songfuqiang 2 роки тому
батько
коміт
db1c8062cf

+ 4 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/constant/AuthConstant.java

@@ -112,7 +112,10 @@ public interface AuthConstant {
 
     String VERIFY_CODE_TIME_OUT = "verifyCode_timeout_";
 
-    Long VERIFY_CODE_KEY_EXPIRE_TIME = 15 * 60L;
+    /**
+     * 忘记密码
+     */
+    Long VERIFY_CODE_KEY_EXPIRE_TIME = 30 * 60L;
 
     Long EMAIL_VERIFY_CODE_KEY_EXPIRE_TIME = 3 * 60L;
 

+ 1 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/model/member/SubSetPricing.java

@@ -13,7 +13,7 @@ public class SubSetPricing {
     private Float price;
     private Date startDate;
     private Integer status;
-    private String targetId;
+    private Integer targetId;
     private String targetType;
     private String totalPeriod;
     private Integer totalPoints;

+ 38 - 15
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java

@@ -36,6 +36,8 @@ import utils.RedisUtils;
 import utils.SMSUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 @Slf4j
@@ -313,13 +315,17 @@ public class MemberServiceImpl implements MemberService {
                 SubPricing subPricing = new SubPricing();
                 BeanUtils.copyProperties(subscription, subPricing);
                 subPricing.setPricings(pricingMap.get(subscription.getTargetId()));
+                subPricing.setStartDate(subscription.getCreatedAt());
                 subPricingList.add(subPricing);
             } else if (subscription.getTargetType().equals(CommonEnum.SubscriptionTypeEnum.SET_PRICING.value())) {
-                SubSetPricing subSetPricing = new SubSetPricing();
-                BeanUtils.copyProperties(subscription, subSetPricing);
-                subSetPricing.setSetPricings(setPricingMap.get(subscription.getTargetId()));
-                subSetPricing.setCreateDate(subscription.getCreatedAt());
-                subSetPricingList.add(subSetPricing);
+                // 不把targetId为1的显示在界面
+                if(1 != subscription.getTargetId()) {
+                    SubSetPricing subSetPricing = new SubSetPricing();
+                    BeanUtils.copyProperties(subscription, subSetPricing);
+                    subSetPricing.setSetPricings(setPricingMap.get(subscription.getTargetId()));
+                    subSetPricing.setCreateDate(subscription.getCreatedAt());
+                    subSetPricingList.add(subSetPricing);
+                }
             }
         }
         //获取会员剩余天数
@@ -331,6 +337,11 @@ public class MemberServiceImpl implements MemberService {
                 member.setSubscriberType(SubscriberTypeEnum.no.value());
                 membersMapper.updateByPrimaryKey(member);
             }
+        } else {
+            if(SubscriberTypeEnum.no.value().equals(member.getSubscriberType())) {
+                member.setSubscriberType(SubscriberTypeEnum.yes.value());
+                membersMapper.updateByPrimaryKey(member);
+            }
         }
         MemberInfoResp resp = new MemberInfoResp();
         resp.setMemberInfo(memberInfo);
@@ -414,8 +425,8 @@ public class MemberServiceImpl implements MemberService {
         //获取会员剩余天数
         long day = getLeftDay(subSetPricingList);
         //如果会员天数小于0,修改会员状态为否
+        Members member = getCurrentUser();
         if(day == 0){
-            Members member = getCurrentUser();
             if(SubscriberTypeEnum.yes.value().equals(member.getSubscriberType())) {
                 member.setUpdatedAt(new Date());
                 member.setSubscriberType(SubscriberTypeEnum.no.value());
@@ -423,6 +434,11 @@ public class MemberServiceImpl implements MemberService {
             }
             return SubscriberTypeEnum.no.value();
         }else{
+            if(SubscriberTypeEnum.no.value().equals(member.getSubscriberType())) {
+                member.setUpdatedAt(new Date());
+                member.setSubscriberType(SubscriberTypeEnum.yes.value());
+                membersMapper.updateByPrimaryKey(member);
+            }
             return SubscriberTypeEnum.yes.value();
         }
     }
@@ -481,21 +497,26 @@ public class MemberServiceImpl implements MemberService {
      */
     public long getLeftDay(List<SubSetPricing> subSetPricingList) {
         long day = 0;
-        long num = 0;
 
         Date now = new Date();
+        BigDecimal normal = new BigDecimal(86400000);
         for (SubSetPricing setPricing : subSetPricingList) {
-            Date startDate = setPricing.getStartDate();
-            Date endDate = setPricing.getEndDate();
-            if (endDate.getTime() - now.getTime() > 0) {
-                if (startDate.getTime() - now.getTime() < 0) {
-                    num += endDate.getTime() - now.getTime();
-                } else {
-                    num += endDate.getTime() - startDate.getTime();
+            if(1 != setPricing.getTargetId()) {
+                Date startDate = setPricing.getStartDate();
+                Date endDate = setPricing.getEndDate();
+                if (endDate.getTime() - now.getTime() > 0) {
+                    if (startDate.getTime() - now.getTime() < 0) {
+                        long l = endDate.getTime() - now.getTime();
+                        BigDecimal b1 = new BigDecimal(l);
+                        day += b1.divide(normal,0,RoundingMode.UP).longValue();
+                    } else {
+                        long l = endDate.getTime() - startDate.getTime();
+                        BigDecimal b1 = new BigDecimal(l);
+                        day += b1.divide(normal,0,RoundingMode.UP).longValue();
+                    }
                 }
             }
         }
-        day = num / 24 / 60 / 60 / 1000;//除以一天的毫秒数
         return day;
     }
 
@@ -527,6 +548,8 @@ public class MemberServiceImpl implements MemberService {
                 && SubscriberTypeEnum.no.value().equals(currentUser.getSubscriberType())){
             socialAccountService.deleteByMemberId(memberId);
             membersMapper.deleteByPrimaryKey(memberId);
+        }else{
+            throw new BackendRuntimeException("不允许注销该账号,因为充过钱了!");
         }
         return memberId;
     }

+ 12 - 2
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/OrderServiceImpl.java

@@ -95,7 +95,15 @@ public class OrderServiceImpl implements OrderService {
     @Override
     public Orders findMemberUnPayedOrders(String memberId, Subscriptions subscription, String client){
         OrdersExample example = new OrdersExample();
-        example.createCriteria().andMemberIdEqualTo(memberId).andStatusEqualTo(OrdersStatusEnum.UNPAYED.value()).andPaymentEqualTo(subscription.getPayment()).andSubscriptionIdEqualTo(subscription.getId());
+        OrdersExample.Criteria criteria = example.createCriteria();
+        //如果是web端,则查询的pagePayUrl不为null;如果是安卓端,则查询的androidSign不为null。
+        if(ClientEnum.WEB.value().equals(client)) {
+            criteria.andPagePayUrlIsNotNull();
+        }else{
+            criteria.andAndroidSignIsNotNull();
+        }
+        criteria.andMemberIdEqualTo(memberId).andStatusEqualTo(OrdersStatusEnum.UNPAYED.value()).
+                andPaymentEqualTo(subscription.getPayment()).andSubscriptionIdEqualTo(subscription.getId());
         List<Orders> list  = ordersMapper.selectByExample(example);
         //订单如果不存在则插入,存在则返回
         if(CollectionUtils.isEmpty(list)) {
@@ -116,6 +124,7 @@ public class OrderServiceImpl implements OrderService {
         }else{
             //更新价格
             Orders order = selectBySubId(subscription.getId());
+            // 由于存在安卓端和web端,不能单纯的靠价格来判断是否更新,安卓端需要的是androidSign,web需要的是pagePayUrl
             if(order != null && !order.getPrice().equals(subscription.getPrice())) {
                 order.setPrice(subscription.getPrice());
                 order.setCreatedAt(new Date());
@@ -158,7 +167,7 @@ public class OrderServiceImpl implements OrderService {
         if(PaymentEnum.WXPAY.value().equals(subscription.getPayment())){
             Map<String, String> resp = wxPayService.unifiedOrder(subject, order.getTradeNo(), order.getPrice(), client);
             order.setQrcodeUrl(resp.get(WXPayConstants.CODE_URL));
-            order.setAndroidSign2(JSON.toJSONString(resp));
+            order.setAndroidSign(JSON.toJSONString(resp));
         }
         if(PaymentEnum.ALIPAY.value().equals(subscription.getPayment())){
             // 调用阿里支付下单接口,web端返回支付url,android端返回androidSign
@@ -515,6 +524,7 @@ public class OrderServiceImpl implements OrderService {
                     break;
                 }
                 String result = alipayService.query(outTradeNo);
+                log.info("支付宝回调查询结果:{}",result);
                 Map<String,Object> map = JSON.parseObject(result, Map.class);
                 Map<String,String> response = JSON.parseObject(map.get(RESPONSE).toString(), Map.class);
                 String tradeStatus = response.get(TRADE_STATUS);

+ 4 - 4
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SubscriptionServiceImpl.java

@@ -81,8 +81,8 @@ public class SubscriptionServiceImpl implements SubscriptionService {
         }else{
             WxAndroidSignVo wxAndroidSign = new WxAndroidSignVo();
 
-            String androidSign2 = order.getAndroidSign2();
-            Map map = JSON.parseObject(androidSign2, Map.class);
+            String androidSign = order.getAndroidSign();
+            Map map = JSON.parseObject(androidSign, Map.class);
             try {
                 // 调起支付接口签名返回给app端,和统一下单参数的签名不一样,因为参数不一样
                 Map<String, String> signMmap = new HashMap<>();
@@ -361,7 +361,7 @@ public class SubscriptionServiceImpl implements SubscriptionService {
         } else{
             SubscriptionsExample example = new SubscriptionsExample();
             example.createCriteria().andMemberIdEqualTo(members.getId()).andStatusEqualTo(SubscriptionStatusEnum.ACTIVED.value())
-                    .andIdNotEqualTo(subscriptions.getId()).andTargetIdEqualTo(subscriptions.getTargetId());
+                    .andIdNotEqualTo(subscriptions.getId()).andTargetIdEqualTo(subscriptions.getTargetId()).andTargetTypeEqualTo(GoodsTypeEnum.Pricing.value());
             List<Subscriptions> list = subscriptionsMapper.selectByExample(example);
             if(!CollectionUtils.isEmpty(list)){
                 lastSub = list.get(0);
@@ -380,7 +380,7 @@ public class SubscriptionServiceImpl implements SubscriptionService {
         SubscriptionsExample example = new SubscriptionsExample();
         example.createCriteria().andMemberIdEqualTo(members.getId())
                 .andStatusEqualTo(SubscriptionStatusEnum.ACTIVED.value()).andTargetTypeEqualTo(sub.getTargetType())
-                .andIdNotEqualTo(sub.getId()).andEndDateGreaterThanOrEqualTo(new Date());
+                .andIdNotEqualTo(sub.getId()).andEndDateGreaterThanOrEqualTo(new Date()).andTargetIdNotEqualTo(1);
         example.setOrderByClause("end_date DESC");
         return subscriptionsMapper.selectByExample(example);
     }

+ 1 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/WXPayServiceImpl.java

@@ -38,7 +38,7 @@ public class WXPayServiceImpl implements WXPayService {
         data.put("body", subject);
         data.put("out_trade_no", orderNo);
         //data.put("total_fee", String.valueOf(Math.round(price*100)));
-        data.put("total_fee", String.valueOf(price*100));
+        data.put("total_fee", String.valueOf(price.intValue()*100));
         //回调地址
         data.put("notify_url", notifyUrl);
         //扫码支付

+ 2 - 2
backend-core/src/main/resources/application-test-redis.properties

@@ -5,5 +5,5 @@ redis.socketTimeout=100000
 redis.maxAttempts=5
 redis.maxTotal=200
 redis.minIdle=10
-redis.nodes=81.68.234.235:6371,81.68.234.235:6372,81.68.234.235:6373,81.68.234.235:6374,81.68.234.235:6375,81.68.234.235:6376
-redis.password=1234
+redis.nodes=139.196.160.101:6371,139.196.160.101:6372,139.196.160.101:6373,139.196.160.101:6374,139.196.160.101:6375,139.196.160.101:6376
+redis.password=1qazZAQ2

+ 6 - 6
backend-core/src/main/resources/application-test.yml

@@ -67,12 +67,12 @@ ali:
     # 支付宝公钥
     publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj6ORX6PqMsu5cnWt+MW43i/odmlDK1KL791jvx/BI8mqXQ5exnTN8o3MXznbudENQSNK9NGGLJuVOQem7c9ycZyQR/MilmQtiGAKWckhJdOFXPRY9iR/uyUI50n8u/usFi0ecdF73ncARxxjKVbOfWvq3FTm3E9TvyEaFJM5VVfxEvD3bii73QLq58dxc8YpxPZ8TawtIHLPQFsu5Bpc1RsZFJ/pDR07wp86PakVQsmUx6fcCWsjBZekmhxC4D7pZmcU0R2okxZoKoVKpEROIB1BT26/1EOGj++bKbG71Rbhz3BVNP6/NVvrrZfH+orcNlHH8DeNk5Qn6WHnCUdAPQIDAQAB
     # 页面跳转同步通知页面
-    returnUrl: http://localhost:3000/members/me/expenses
-    setPricingReturnUrl: http://localhost:3000/members/me/vip
-    pricingReturnUrl: http://localhost:3000/members/me/points
+    returnUrl: http://test-pdf-pro.kdan.cn:3127/members/me/expenses
+    setPricingReturnUrl: http://test-pdf-pro.kdan.cn:3127/members/me/vip
+    pricingReturnUrl: http://test-pdf-pro.kdan.cn:3127/members/me/points
     #    returnUrl: http://192.168.10.143:8082/members/me/expenses
     # 异步跳转路径
-    notifyUrl: http://139.196.160.101:8999/17pdf-backend-core/order/alipaySyncOrder
+    notifyUrl: http://139.196.160.101:8082/17pdf-backend-core/order/alipaySyncOrder
 
     # 沙箱环境
 #    appId: 2021000121685626
@@ -84,9 +84,9 @@ ali:
 com:
   pdf:
     kit:
-      address: http://101.132.103.13:8090/server
+      address: https://api-cn-east-1.17pdf.com/server
       projectKey: 17PDF
-      secretKey: 17PDF@123
+      secretKey: secret_key_34bea3f5af15e55d15f91d31025f8d55
 
 17pdf:
   oss: