소스 검색

Merge branch 'autopay-0918'

lyhzzz 1 년 전
부모
커밋
f25bc0b43f
57개의 변경된 파일1206개의 추가작업 그리고 116개의 파일을 삭제
  1. 23 1
      README.md
  2. 1 1
      src/main/java/com/fdkankan/ucenter/common/BaseController.java
  3. 2 0
      src/main/java/com/fdkankan/ucenter/common/OssPath.java
  4. 2 0
      src/main/java/com/fdkankan/ucenter/common/constants/ResultCode.java
  5. 21 0
      src/main/java/com/fdkankan/ucenter/controller/CameraTypeController.java
  6. 8 0
      src/main/java/com/fdkankan/ucenter/controller/IncrementController.java
  7. 1 0
      src/main/java/com/fdkankan/ucenter/controller/OrderController.java
  8. 24 5
      src/main/java/com/fdkankan/ucenter/controller/TestController.java
  9. 66 0
      src/main/java/com/fdkankan/ucenter/entity/CameraType.java
  10. 110 0
      src/main/java/com/fdkankan/ucenter/entity/Company.java
  11. 72 0
      src/main/java/com/fdkankan/ucenter/entity/IncrementAutoOrder.java
  12. 4 0
      src/main/java/com/fdkankan/ucenter/entity/IncrementOrder.java
  13. 9 0
      src/main/java/com/fdkankan/ucenter/entity/SceneEditInfoExt.java
  14. 3 0
      src/main/java/com/fdkankan/ucenter/entity/UserIncrement.java
  15. 1 1
      src/main/java/com/fdkankan/ucenter/generate/AutoGenerate.java
  16. 6 0
      src/main/java/com/fdkankan/ucenter/httpClient/client/PayClient.java
  17. 19 0
      src/main/java/com/fdkankan/ucenter/httpClient/param/PayAutoPayVo.java
  18. 13 1
      src/main/java/com/fdkankan/ucenter/httpClient/param/PayOrderParam.java
  19. 3 2
      src/main/java/com/fdkankan/ucenter/httpClient/service/PayService.java
  20. 2 0
      src/main/java/com/fdkankan/ucenter/httpClient/vo/PayOrderVo.java
  21. 18 0
      src/main/java/com/fdkankan/ucenter/mapper/ICameraTypeMapper.java
  22. 18 0
      src/main/java/com/fdkankan/ucenter/mapper/ICompanyMapper.java
  23. 18 0
      src/main/java/com/fdkankan/ucenter/mapper/IIncrementAutoOrderMapper.java
  24. 1 1
      src/main/java/com/fdkankan/ucenter/mapper/IUserIncrementMapper.java
  25. 109 0
      src/main/java/com/fdkankan/ucenter/mq/consumer/AutoOrderConsumer.java
  26. 8 4
      src/main/java/com/fdkankan/ucenter/mq/consumer/OrderDownConsumer.java
  27. 25 0
      src/main/java/com/fdkankan/ucenter/pay/paypal/sdk/AutoPaypalVo.java
  28. 26 8
      src/main/java/com/fdkankan/ucenter/pay/strategy/impl/IncrementOrderImpl.java
  29. 17 0
      src/main/java/com/fdkankan/ucenter/service/ICameraTypeService.java
  30. 16 0
      src/main/java/com/fdkankan/ucenter/service/ICompanyService.java
  31. 37 0
      src/main/java/com/fdkankan/ucenter/service/IIncrementAutoOrderService.java
  32. 4 0
      src/main/java/com/fdkankan/ucenter/service/IIncrementOrderService.java
  33. 7 3
      src/main/java/com/fdkankan/ucenter/service/IMailTemplateService.java
  34. 2 2
      src/main/java/com/fdkankan/ucenter/service/ISceneProService.java
  35. 8 0
      src/main/java/com/fdkankan/ucenter/service/IUserIncrementService.java
  36. 18 42
      src/main/java/com/fdkankan/ucenter/service/impl/AppSceneService.java
  37. 1 0
      src/main/java/com/fdkankan/ucenter/service/impl/CameraServiceImpl.java
  38. 27 0
      src/main/java/com/fdkankan/ucenter/service/impl/CameraTypeServiceImpl.java
  39. 21 0
      src/main/java/com/fdkankan/ucenter/service/impl/CompanyServiceImpl.java
  40. 1 1
      src/main/java/com/fdkankan/ucenter/service/impl/DownloadOrderServiceImpl.java
  41. 136 0
      src/main/java/com/fdkankan/ucenter/service/impl/IncrementAutoOrderServiceImpl.java
  42. 80 6
      src/main/java/com/fdkankan/ucenter/service/impl/IncrementOrderServiceImpl.java
  43. 81 3
      src/main/java/com/fdkankan/ucenter/service/impl/MailTemplateServiceImpl.java
  44. 7 1
      src/main/java/com/fdkankan/ucenter/service/impl/OrderServiceImpl.java
  45. 13 8
      src/main/java/com/fdkankan/ucenter/service/impl/Scene3dNumServiceImpl.java
  46. 1 1
      src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusServiceImpl.java
  47. 6 1
      src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java
  48. 61 17
      src/main/java/com/fdkankan/ucenter/service/impl/UserIncrementServiceImpl.java
  49. 26 4
      src/main/java/com/fdkankan/ucenter/task/TaskService.java
  50. 2 0
      src/main/java/com/fdkankan/ucenter/vo/request/DownNumParam.java
  51. 1 1
      src/main/java/com/fdkankan/ucenter/vo/response/AppSceneVo.java
  52. 3 0
      src/main/java/com/fdkankan/ucenter/vo/response/CameraVo.java
  53. 2 0
      src/main/java/com/fdkankan/ucenter/vo/response/UserIncrementVo.java
  54. 1 0
      src/main/resources/mapper/ucenter/CameraMapper.xml
  55. 5 0
      src/main/resources/mapper/ucenter/CameraTypeMapper.xml
  56. 5 0
      src/main/resources/mapper/ucenter/IncrementAutoOrderMapper.xml
  57. 4 2
      src/main/resources/mapper/ucenter/ScenePlusMapper.xml

+ 23 - 1
README.md

@@ -1 +1,23 @@
-v1.0.0
+#**个人中心**
+
+###**国际服paypal-auto-pay** 
+~~~~
+1. /ucenter/user/order/incrementOrder  修改
+    添加参数 autoPay 0 不开启,1开启
+
+2.GET  /ucenter/user/increment/cancelSubscription/{incrementId} 取消订阅接口
+
+3./ucenter/user/increment/findIncrementList 添加返回
+    subscriptionOrder  自动订阅订单号,有则表示开启自动订阅,无则未开
+
+4./ucenter/user/camera/listNew 添加返回
+    subscriptionOrder  自动订阅订单号,有则表示开启自动订阅,无则未开
+    
+3.数据库添加字段
+    
+    ALTER TABLE `4dkankan_v4`.`t_increment_order` 
+    ADD COLUMN `auto_pay` int NULL DEFAULT 0 COMMENT '是否开启自动订阅0否,1是' AFTER `time_zone_off`;
+
+    ALTER TABLE `4dkankan_v4`.`t_user_increment` 
+    ADD COLUMN `subscription_order` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自动订阅订单号' AFTER `agent_id`;
+~~~~

+ 1 - 1
src/main/java/com/fdkankan/ucenter/common/BaseController.java

@@ -6,9 +6,9 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.DateEditor;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.ucenter.common.constants.NacosProperty;
+import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.entity.User;
 import com.fdkankan.ucenter.service.IUserService;
-import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.util.DateUserUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;

+ 2 - 0
src/main/java/com/fdkankan/ucenter/common/OssPath.java

@@ -4,6 +4,8 @@ public class OssPath {
 
     public final static String houseTypePath = "scene_edit_data/%s/user/houseType.json";
     public final static String v3_statusPath = "data/data%s/status.json";
+    public final static String v3_scenePath = "data/data%s/scene.json";
     public final static String v4_statusPath = "scene_view_data/%s/data/status.json";
+    public final static String v4_scenePath = "scene_view_data/%s/data/scene.json";
     public final static String localStatusPath = System.getProperty("java.io.tmpdir") +"status.json";   //获取临时文件目录
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/common/constants/ResultCode.java

@@ -15,4 +15,6 @@ public class ResultCode {
     public static final String FAILURE_MSG_400005 = "获取邮件模板错误";
     public static final int FAILURE_CODE_400006  = 400006 ;
     public static final String FAILURE_MSG_400006  = "复制失败,场景资源文件不对" ;
+    public static final int FAILURE_CODE_400007  = 400007 ;
+    public static final String FAILURE_MSG_400007  = "该会员正在订阅中" ;
 }

+ 21 - 0
src/main/java/com/fdkankan/ucenter/controller/CameraTypeController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.ucenter.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@RestController
+@RequestMapping("/ucenter/cameraType")
+public class CameraTypeController {
+
+}
+

+ 8 - 0
src/main/java/com/fdkankan/ucenter/controller/IncrementController.java

@@ -1,5 +1,7 @@
 package com.fdkankan.ucenter.controller;
 
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.DateUtil;
 import com.fdkankan.common.util.JwtUtil;
 import com.fdkankan.ucenter.common.BaseController;
@@ -79,4 +81,10 @@ public class IncrementController extends BaseController {
         responseUserIncrement.setCreateStr(DateUserUtil.getDayTime(responseUserIncrement.getCreateTime()));
         return Result.success(userIncrementEntity);
     }
+
+    @GetMapping("/cancelSubscription/{incrementId}")
+    public Result cancelSubscription(@PathVariable Long incrementId){
+        userIncrementService.cancelSubscription(incrementId);
+        return Result.success();
+    }
 }

+ 1 - 0
src/main/java/com/fdkankan/ucenter/controller/OrderController.java

@@ -59,6 +59,7 @@ public class OrderController extends BaseController {
     @PostMapping("/placeOrder")
     public Result placeOrder(@RequestBody PlaceOrderParam param){
         String username = JwtUtil.getUsername(getToken());
+        param.setLang(getLang());
         param.setUserName(username);
         return Result.success(orderService.placeOrder(param));
     }

+ 24 - 5
src/main/java/com/fdkankan/ucenter/controller/TestController.java

@@ -15,6 +15,7 @@ import com.fdkankan.sms.SmsService;
 import com.fdkankan.ucenter.common.*;
 import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.service.*;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -24,12 +25,14 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpSession;
+import java.io.File;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.util.*;
 
 @RestController
+@Slf4j
 @RequestMapping("/ucenter/test")
 public class TestController extends BaseController {
     @Autowired
@@ -86,14 +89,14 @@ public class TestController extends BaseController {
         Integer[] days ={-1,0,30};
         for (Integer day : days) {
             if(day == null || day<0){
-                mailTemplateService.sendPeExMail(userName);
+                mailTemplateService.sendPeExMail(userName,"");
                 continue;
             }
             if(day > 0){
-                mailTemplateService.sendPeNoExMail(userName,day);
+                mailTemplateService.sendPeNoExMail(userName,day,"");
                 continue;
             }
-            mailTemplateService.sendPeTodayExMail(userName);
+            mailTemplateService.sendPeTodayExMail(userName,"");
         }
         return Result.success( );
     }
@@ -119,12 +122,28 @@ public class TestController extends BaseController {
     @GetMapping("/test1")
     public Result test1(@RequestParam(required = false)String userName) throws Exception {
         //luomin@cgaii.com
-
+        String path = "/mnt/4Dkankan/scene/images/imagest-eur-09XfNdBCB";
+        if(path.contains("images")){
+            String panPath = path +"/panorama";
+            File file = new File(panPath);
+            if(file.exists()){
+                File[] files = file.listFiles();
+                if(files == null || files.length == 0){
+                    return Result.success( );
+                }
+                for (File file1 : files) {
+                    String linkPath =file1.getPath() + "/capture";
+                    log.info("delLink--filePath:{},exists:{}",linkPath,new File(linkPath).exists());
+                    org.apache.commons.io.FileUtils.deleteQuietly(new File(linkPath));
+                        //FileUtil.del(linkPath);
+                }
+            }
+        }
         return Result.success( );
     }
 
     public static void main(String[] args) {
-        System.out.println(SecurityUtil.MD5("\u00155EAAMBC"));
+        System.out.println(SecurityUtil.MD5(" \u0011\u0007"));
     }
 
 }

+ 66 - 0
src/main/java/com/fdkankan/ucenter/entity/CameraType.java

@@ -0,0 +1,66 @@
+package com.fdkankan.ucenter.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Getter
+@Setter
+@TableName("t_camera_type")
+public class CameraType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 相机类型表
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 0 旧双目相机,1思维看看pro八目相机(看看),2看看lite,5指房宝,9双目转台(看见),10激光转台(深时),11激光转台(深光)
+     */
+    @TableField("camera_type")
+    private Integer cameraType;
+
+    /**
+     * 场景码前缀
+     */
+    @TableField("scene_prefix")
+    private String scenePrefix;
+
+    /**
+     * 相机WiFiname前缀
+     */
+    @TableField("wifi_name_prefix")
+    private String wifiNamePrefix;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("remark")
+    private String remark;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 110 - 0
src/main/java/com/fdkankan/ucenter/entity/Company.java

@@ -0,0 +1,110 @@
+package com.fdkankan.ucenter.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 客户企业logo信息
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Getter
+@Setter
+@ToString
+@TableName("t_company")
+public class Company implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 公司名称
+     */
+    @TableField("company_name")
+    private String companyName;
+
+    /**
+     * 顶部logo
+     */
+    @TableField("top_logo")
+    private String topLogo;
+
+    /**
+     * 地面logo
+     */
+    @TableField("floor_logo")
+    private String floorLogo;
+
+    /**
+     * 地面点位logo
+     */
+    @TableField("marker_logo")
+    private String markerLogo;
+
+    /**
+     * 二维码logo
+     */
+    @TableField("qr_logo")
+    private String qrLogo;
+
+    /**
+     * 是否显示初始logo,0隐藏,1显示
+     */
+    @TableField("show_logo")
+    private Integer showLogo;
+
+    /**
+     * 新增的相机是否注册,0否,1删
+     */
+    @TableField("camera_delete")
+    private Integer cameraDelete;
+
+    /**
+     * 数据同步类型
+     */
+    @TableField("data_sync")
+    private String dataSync;
+
+//    /**
+//     * 数据同步方式
+//     */
+//    @TableField("data_sync_action")
+//    private Integer dataSyncAction;
+
+    @TableField("calculate_flexibility")
+    private Boolean calculateFlexibility;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private Date updateTime;
+
+
+    @TableField("scene_version")
+    private String sceneVersion;
+
+    /**
+     * A正常,I删除
+     */
+    @TableField("rec_status")
+    @TableLogic("A")
+    private String recStatus;
+
+}

+ 72 - 0
src/main/java/com/fdkankan/ucenter/entity/IncrementAutoOrder.java

@@ -0,0 +1,72 @@
+package com.fdkankan.ucenter.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+@Getter
+@Setter
+@TableName("t_increment_auto_order")
+public class IncrementAutoOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 自动订阅表
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 权益类型id
+     */
+    @TableField("increment_type_id")
+    private Integer incrementTypeId;
+
+    /**
+     * 会员id
+     */
+    @TableField("user_increment_id")
+    private Long userIncrementId;
+
+    /**
+     * paypal订阅id
+     */
+    @TableField("subscription_id")
+    private String subscriptionId;
+
+    @TableField("order_sn")
+    private String orderSn;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 4 - 0
src/main/java/com/fdkankan/ucenter/entity/IncrementOrder.java

@@ -129,5 +129,9 @@ public class IncrementOrder implements Serializable {
     @TableField("time_zone_off")
     private Integer timeZoneOff;
 
+    @TableField("auto_pay")
+    private Integer autoPay;
 
+    @TableField("auto_order_id")
+    private Integer autoOrderId;
 }

+ 9 - 0
src/main/java/com/fdkankan/ucenter/entity/SceneEditInfoExt.java

@@ -65,12 +65,21 @@ public class SceneEditInfoExt implements Serializable {
     private String mosaics;
 
     /**
+     * 是否有马赛克
+     */
+    @TableField("mosaic")
+    private Integer mosaic;
+
+    /**
      * 是否有场景关联(0-否,1-是)
      */
     @TableField("links")
     private Integer links;
 
 
+    /**
+     * 分享二维码logo
+     */
     @TableField("share_logo_img")
     private String shareLogoImg;
 

+ 3 - 0
src/main/java/com/fdkankan/ucenter/entity/UserIncrement.java

@@ -107,4 +107,7 @@ public class UserIncrement implements Serializable {
     @TableField("agent_id")
     private Integer agentId;
 
+    @TableField("subscription_order")
+    private String subscriptionOrder;
+
 }

+ 1 - 1
src/main/java/com/fdkankan/ucenter/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
 
         generate(path,"ucenter", getTables(new String[]{
-                "t_case",
+                "t_increment_auto_order",
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 6 - 0
src/main/java/com/fdkankan/ucenter/httpClient/client/PayClient.java

@@ -8,6 +8,7 @@ import com.fdkankan.ucenter.httpClient.address.PayAddressSource;
 import com.fdkankan.ucenter.httpClient.param.PayOrderParam;
 import com.fdkankan.ucenter.httpClient.param.SSDownSceneParam;
 import com.fdkankan.ucenter.httpClient.param.SsBindParam;
+import org.springframework.web.bind.annotation.GetMapping;
 
 import java.util.List;
 import java.util.Map;
@@ -31,5 +32,10 @@ public interface PayClient {
     @Get("/service/pay/order/info/{orderSn}")
     ResultData queryOrder(@Var("orderSn")String orderSn);
 
+    /**
+     * paypal取消订阅
+     */
+    @Get("/service/pay/paypal/cancel/{orderSn}")
+    ResultData cancelSubscription(@Var("orderSn")String orderSn);
 
 }

+ 19 - 0
src/main/java/com/fdkankan/ucenter/httpClient/param/PayAutoPayVo.java

@@ -0,0 +1,19 @@
+package com.fdkankan.ucenter.httpClient.param;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PayAutoPayVo {
+
+    private Integer autoPay;
+    /*
+    DAY,MONTH,YEAR
+ */
+    private String autoPayTime;
+
+    private String autoStartTime;
+}

+ 13 - 1
src/main/java/com/fdkankan/ucenter/httpClient/param/PayOrderParam.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.httpClient.param;
 
+import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -13,12 +14,23 @@ public class PayOrderParam {
     private String userName;
     private String nickName;
     private List<PayGoods> goodsInfo;
+    private Integer autoPay;
+    private String autoStartTime;
+    /*
+        DAY,MONTH,YEAR
+     */
+    private String autoPayTime;
 
-    public PayOrderParam(BigDecimal orderMoney, String orderType, String userName, String nickName, List<PayGoods> goodsInfo) {
+    public PayOrderParam(BigDecimal orderMoney, String orderType, String userName, String nickName, List<PayGoods> goodsInfo,PayAutoPayVo autoPay) {
         this.orderMoney = orderMoney;
         this.orderType = orderType;
         this.userName = userName;
         this.nickName = nickName;
         this.goodsInfo = goodsInfo;
+        if(autoPay != null){
+            this.autoPay = autoPay.getAutoPay();
+            this.autoPayTime = autoPay.getAutoPayTime();
+            this.autoStartTime = autoPay.getAutoStartTime();
+        }
     }
 }

+ 3 - 2
src/main/java/com/fdkankan/ucenter/httpClient/service/PayService.java

@@ -7,6 +7,7 @@ import com.dtflys.forest.annotation.Post;
 import com.dtflys.forest.annotation.Var;
 import com.fdkankan.ucenter.common.ResultData;
 import com.fdkankan.ucenter.httpClient.client.PayClient;
+import com.fdkankan.ucenter.httpClient.param.PayAutoPayVo;
 import com.fdkankan.ucenter.httpClient.param.PayGoods;
 import com.fdkankan.ucenter.httpClient.param.PayOrderParam;
 import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
@@ -22,8 +23,8 @@ public class PayService {
     @Autowired
     PayClient payClient;
 
-    public PayOrderVo downOrder(BigDecimal money, String type, String userName, String nickName, List<PayGoods> goodsInfo){
-        PayOrderParam param = new PayOrderParam(money,type,userName,nickName,goodsInfo);
+    public PayOrderVo downOrder(BigDecimal money, String type, String userName, String nickName, List<PayGoods> goodsInfo, PayAutoPayVo autoPayVo){
+        PayOrderParam   param = new PayOrderParam(money,type,userName,nickName,goodsInfo,autoPayVo);
         ResultData resultData = payClient.downOrder(param);
         if(resultData.getCode() == 200 ){
             String orderStr = JSONObject.toJSONString(resultData.getData());

+ 2 - 0
src/main/java/com/fdkankan/ucenter/httpClient/vo/PayOrderVo.java

@@ -60,4 +60,6 @@ public class PayOrderVo {
 
     private Date payTime;
 
+    private Integer autoPay =0;
+
 }

+ 18 - 0
src/main/java/com/fdkankan/ucenter/mapper/ICameraTypeMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.ucenter.mapper;
+
+import com.fdkankan.ucenter.entity.CameraType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Mapper
+public interface ICameraTypeMapper extends BaseMapper<CameraType> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/ucenter/mapper/ICompanyMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.ucenter.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.ucenter.entity.Company;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 客户企业logo信息 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Mapper
+public interface ICompanyMapper extends BaseMapper<Company> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/ucenter/mapper/IIncrementAutoOrderMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.ucenter.mapper;
+
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+@Mapper
+public interface IIncrementAutoOrderMapper extends BaseMapper<IncrementAutoOrder> {
+
+}

+ 1 - 1
src/main/java/com/fdkankan/ucenter/mapper/IUserIncrementMapper.java

@@ -19,6 +19,6 @@ import java.util.List;
 @Mapper
 public interface IUserIncrementMapper extends BaseMapper<UserIncrement> {
 
-    @Select("SELECT * FROM `t_user_increment` WHERE DATEDIFF(increment_end_time,NOW()) = #{date} AND is_expired = #{isExpired} AND rec_status = 'A'  ")
+    @Select("SELECT * FROM `t_user_increment` WHERE DATEDIFF(increment_end_time,NOW()) = #{date} AND is_expired = #{isExpired} AND subscription_order is null and  rec_status = 'A'  ")
     List<UserIncrement> findReadyExpire(@Param("date")Integer date, @Param("isExpired")Integer isExpired);
 }

+ 109 - 0
src/main/java/com/fdkankan/ucenter/mq/consumer/AutoOrderConsumer.java

@@ -0,0 +1,109 @@
+package com.fdkankan.ucenter.mq.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
+import com.fdkankan.ucenter.pay.strategy.impl.DownloadOrderImpl;
+import com.fdkankan.ucenter.pay.strategy.impl.EntityOrderImpl;
+import com.fdkankan.ucenter.pay.strategy.impl.IncrementOrderImpl;
+import com.fdkankan.ucenter.service.*;
+import com.fdkankan.ucenter.util.DateUserUtil;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Slf4j
+@Component
+public class AutoOrderConsumer {
+
+
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    IMailTemplateService mailTemplateService;
+    @Autowired
+    IUserService userService;
+    @Autowired
+    IncrementOrderImpl incrementOrderImpl;
+    @Autowired
+    IIncrementAutoOrderService autoOrderService;
+
+
+    @RabbitListener(
+            queuesToDeclare = @Queue("${queue.pay.auto-paypal:pay-auto-paypal}")
+    )
+    public void consumerQueue(Channel channel, Message message)  {
+        try {
+            String messageId = message.getMessageProperties().getMessageId();
+            String msg = new String(message.getBody(), StandardCharsets.UTF_8);
+            log.info("autoPaypal-result-mq--messageId:{},msg:{}",messageId,msg);
+
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+
+            AutoPaypalVo order = JSONObject.parseObject(msg, AutoPaypalVo.class);
+            if(order == null){
+                return;
+            }
+            IncrementAutoOrder incrementAutoOrder = autoOrderService.getByOrderSn(order.getSubscriptionOrderSn());
+            if(incrementAutoOrder == null){
+                return;
+            }
+            if(incrementAutoOrder.getSubscriptionId() == null){
+                autoOrderService.subOrder(order.getSubscriptionOrderSn(),order.getSubscriptionId());
+            }
+
+            switch (order.getEventType()){
+                case "PAYMENT.SALE.COMPLETED" :     //每日扣款
+                    //Enum: "completed" "partially_refunded" "pending" "refunded" "denied"
+                    switch (order.getState()){
+                        case "completed" :      //扣款完成
+                            autoOrderService.paySuccess(incrementAutoOrder,order);
+                            break;
+                        case "partially_refunded" :
+                            break;
+                        case "pending" :        //等待
+                            break;
+                        case "refunded" :       //退还
+                            break;
+                        case "denied" :         //支付失败
+                            autoOrderService.payError(incrementAutoOrder,order);
+                            break;
+                    }
+                    break;
+                case "BILLING.SUBSCRIPTION.CANCELLED" :     //取消订阅
+                    autoOrderService.subscriptionCancelled(incrementAutoOrder,order);
+                    break;
+                case "BILLING.SUBSCRIPTION.PAYMENT.FAILED" :     //订阅付款失败
+                    autoOrderService.payError(incrementAutoOrder,order);
+                    break;
+                case "BILLING.SUBSCRIPTION.SUSPENDED" :     //订阅暂停
+                    List<UserIncrement> userIncrementList = userIncrementService.getByAutoOrderSn(order.getSubscriptionId());
+                    for (UserIncrement userIncrement : userIncrementList) {
+                        userIncrementService.cancelSubscription(userIncrement.getId());
+                    }
+                    break;
+                default:
+                    break;
+            }
+
+
+        }catch (Exception e){
+            log.info("order-payResult----消费失败",e);
+        }finally {
+
+        }
+
+    }
+
+}

+ 8 - 4
src/main/java/com/fdkankan/ucenter/mq/consumer/OrderDownConsumer.java

@@ -7,6 +7,7 @@ import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.pay.strategy.impl.DownloadOrderImpl;
 import com.fdkankan.ucenter.pay.strategy.impl.EntityOrderImpl;
 import com.fdkankan.ucenter.pay.strategy.impl.IncrementOrderImpl;
+import com.fdkankan.ucenter.service.IIncrementAutoOrderService;
 import com.fdkankan.ucenter.service.IIncrementOrderService;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
@@ -37,6 +38,8 @@ public class OrderDownConsumer {
     DownloadOrderImpl downloadOrder;
     @Autowired
     EntityOrderImpl entityOrder;
+    @Autowired
+    IIncrementAutoOrderService autoOrderService;
 
 
     @RabbitListener(
@@ -49,12 +52,13 @@ public class OrderDownConsumer {
             log.info("接受下单结果mq--messageId:{},msg:{}",messageId,msg);
 
             channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
-            msg = msg.substring(1, msg.length() - 1);
-
-            msg = StringEscapeUtils.unescapeJava(msg);
 
             PayOrderVo order = JSONObject.parseObject(msg, PayOrderVo.class);
-            if(order == null){
+            if(order == null ){
+                return;
+            }
+            if(order.getAutoPay() != null && order.getAutoPay() == 1){
+                autoOrderService.subOrder(order.getOrderSn(),order.getTradeNo());
                 return;
             }
             //更新订单状态

+ 25 - 0
src/main/java/com/fdkankan/ucenter/pay/paypal/sdk/AutoPaypalVo.java

@@ -0,0 +1,25 @@
+package com.fdkankan.ucenter.pay.paypal.sdk;
+
+import lombok.Data;
+
+@Data
+public class AutoPaypalVo {
+    private String orderSn;
+    /**
+     * BILLING.SUBSCRIPTION.CANCELLED
+     * PAYMENT.SALE.COMPLETED
+     */
+    private String eventType;
+    /**
+     * Enum: "completed" "partially_refunded" "pending" "refunded" "denied"
+     */
+    private String state;
+
+    private String amount;
+
+    private String tradeNo;
+
+    private String subscriptionId;
+
+    private String subscriptionOrderSn;
+}

+ 26 - 8
src/main/java/com/fdkankan/ucenter/pay/strategy/impl/IncrementOrderImpl.java

@@ -31,14 +31,24 @@ public class IncrementOrderImpl implements OrderStrategy {
     IIncrementTypeService incrementTypeService;
     @Autowired
     IAgentNewLogService agentNewLogService;
+    @Autowired
+    IIncrementAutoOrderService incrementAutoOrderService;
 
     @Override
-    public void handleOrder(String orderSn, String tradeNo, String openId, int paymentTypeName, Long spaceId) throws Exception {
+    public void handleOrder(String orderSn, String tradeNo, String openId, int paymentTypeName, Long incrementId) throws Exception {
+
         IncrementOrder responseIncrementOrder = incrementOrderService.getByOrderSnNoPay(orderSn);
         if (responseIncrementOrder == null) {
             log.error("找不到订单:" + orderSn);
             throw new Exception("找不到订单,out_trade_no错误");
         }
+        IncrementAutoOrder incrementAutoOrder = null;
+        if(responseIncrementOrder.getAutoOrderId() != null){
+            incrementAutoOrder = incrementAutoOrderService.getById(responseIncrementOrder.getAutoOrderId());
+            if(incrementAutoOrder != null && incrementAutoOrder.getUserIncrementId() !=null){
+                responseIncrementOrder.setIncrementId(incrementAutoOrder.getUserIncrementId());
+            }
+        }
         // 更新增值权益订单
         boolean result = incrementOrderService.paySuccessIncrementOrder(orderSn, tradeNo, paymentTypeName);
         if (!result){
@@ -50,9 +60,10 @@ public class IncrementOrderImpl implements OrderStrategy {
         if(incrementType == null){
             throw new Exception("更新增值权益订单失败");
         }
+        Integer expired = 0;
+        Date date =  new Date();
         if(responseIncrementOrder.getIncrementId() == null){
             //新的增值权益套餐方案
-            Date date = null;
             date = DateUserUtil.getDateTime(new Date(),incrementType,responseIncrementOrder.getMonthQy()).toDate();
 
             if(responseIncrementOrder.getCount() > 0){
@@ -63,20 +74,27 @@ public class IncrementOrderImpl implements OrderStrategy {
                     userIncrementEntity.setOrderSn(orderSn);
                     userIncrementEntity.setIncrementStartTime(DateUserUtil.getDate(new Date()));
                     userIncrementEntity.setIncrementEndTime(DateUserUtil.getDate(date));
-                    userIncrementEntity.setIsExpired(0);
+                    userIncrementEntity.setIsExpired(expired);
                     userIncrementEntity.setIncrementTypeId(responseIncrementOrder.getIncrementType());
                     userIncrementEntity.setMemberLevels(responseIncrementOrder.getMemberLevels());
-
+                    if(incrementAutoOrder!= null){
+                        userIncrementEntity.setSubscriptionOrder(incrementAutoOrder.getSubscriptionId());
+                    }
                     userIncrementService.save(userIncrementEntity);
+                    incrementAutoOrderService.setIncrementId(incrementAutoOrder,userIncrementEntity.getId());
                 }
             }
         }else {
             userIncrementEntity = userIncrementService.getById(responseIncrementOrder.getIncrementId());
-            DateTime date = DateUserUtil.getDateTime(DateUserUtil.getDate(userIncrementEntity.getIncrementEndTime()),incrementType,responseIncrementOrder.getMonthQy());
-            userIncrementEntity.setIncrementEndTime(DateUserUtil.getDate(date.toDate()));
+            date = DateUserUtil.getDateTime(DateUserUtil.getDate(userIncrementEntity.getIncrementEndTime()),incrementType,responseIncrementOrder.getMonthQy()).toDate();
+
+            userIncrementEntity.setIncrementEndTime(DateUserUtil.getDate(date));
             userIncrementEntity.setOrderSn(userIncrementEntity.getOrderSn() + "," + orderSn);
             userIncrementEntity.setUpdateTime(DateUserUtil.getDate(new Date()));
-            userIncrementEntity.setIsExpired(0);
+            userIncrementEntity.setIsExpired(expired);
+            if(incrementAutoOrder!= null){
+                userIncrementEntity.setSubscriptionOrder(incrementAutoOrder.getSubscriptionId());
+            }
             userIncrementService.updateById(userIncrementEntity);
 
             if(userIncrementEntity.getAgentId() != null){
@@ -94,7 +112,7 @@ public class IncrementOrderImpl implements OrderStrategy {
         if(userIncrementEntity != null && userIncrementEntity.getUserId()!=null){
             User userEntity = userService.getById(userIncrementEntity.getUserId());
             if(userEntity != null && incrementType.getDownloadNum() >0){
-                userEntity.setDownloadNumTotal(userEntity.getDownloadNumTotal() + responseIncrementOrder.getCount() * incrementType.getDownloadNum());
+                userEntity.setDownloadNumTotal(userEntity.getDownloadNumTotal() + (responseIncrementOrder.getMonthQy() == null?1:responseIncrementOrder.getMonthQy()) * responseIncrementOrder.getCount() * incrementType.getDownloadNum() );
                 userService.updateById(userEntity);
             }
         }

+ 17 - 0
src/main/java/com/fdkankan/ucenter/service/ICameraTypeService.java

@@ -0,0 +1,17 @@
+package com.fdkankan.ucenter.service;
+
+import com.fdkankan.ucenter.entity.CameraType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+public interface ICameraTypeService extends IService<CameraType> {
+
+    CameraType getByCameraType(Integer cameraType);
+}

+ 16 - 0
src/main/java/com/fdkankan/ucenter/service/ICompanyService.java

@@ -0,0 +1,16 @@
+package com.fdkankan.ucenter.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.ucenter.entity.Company;
+
+/**
+ * <p>
+ * 客户企业logo信息 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+public interface ICompanyService extends IService<Company> {
+
+}

+ 37 - 0
src/main/java/com/fdkankan/ucenter/service/IIncrementAutoOrderService.java

@@ -0,0 +1,37 @@
+package com.fdkankan.ucenter.service;
+
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+public interface IIncrementAutoOrderService extends IService<IncrementAutoOrder> {
+
+    void addOrder(Long userId, Integer incrementTypeId, Long incrementId, String orderSn);
+
+    IncrementAutoOrder getByIncrementId(Long incrementId);
+
+    void subOrder(String orderSn,String subscriptionId);
+
+    IncrementAutoOrder getBySubId(String subscriptionId);
+
+    void paySuccess(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) throws Exception;
+
+    void payError(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order);
+
+    void subscriptionCancelled(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order);
+
+    void setIncrementId(IncrementAutoOrder incrementAutoOrder, Long incrmentId);
+
+    void delByIncrementId(Long incrementId);
+
+    IncrementAutoOrder getByOrderSn(String orderSn);
+}

+ 4 - 0
src/main/java/com/fdkankan/ucenter/service/IIncrementOrderService.java

@@ -1,10 +1,12 @@
 package com.fdkankan.ucenter.service;
 
 import com.fdkankan.ucenter.common.PageInfo;
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
 import com.fdkankan.ucenter.entity.IncrementOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fdkankan.ucenter.entity.IncrementType;
 import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
 import com.fdkankan.ucenter.vo.request.DownNumParam;
 import com.fdkankan.ucenter.vo.request.IncrementOrderParam;
 import com.fdkankan.ucenter.vo.request.OrderParam;
@@ -36,4 +38,6 @@ public interface IIncrementOrderService extends IService<IncrementOrder> {
     boolean paySuccessIncrementOrder(String orderSn, String tradeNo, int paymentTypeName);
 
     IncrementOrder getByOrderSnNoPay(String orderSn);
+
+    void addNewOrderByOrder(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order);
 }

+ 7 - 3
src/main/java/com/fdkankan/ucenter/service/IMailTemplateService.java

@@ -31,15 +31,15 @@ public interface IMailTemplateService extends IService<MailTemplate> {
     /**
      * 发送会员权益过期邮件
      */
-    Boolean sendPeExMail(String email);
+    Boolean sendPeExMail(String email,String msgType);
     /**
      * 发送会员权益即将过期邮件
      */
-    Boolean sendPeNoExMail(String email,Integer day);
+    Boolean sendPeNoExMail(String email,Integer day,String msgType);
     /**
      * 发送会员权益今天过期
      */
-    Boolean sendPeTodayExMail(String email);
+    Boolean sendPeTodayExMail(String email,String msgType);
 
     /**
      * 发送协作邮件
@@ -47,4 +47,8 @@ public interface IMailTemplateService extends IService<MailTemplate> {
     Boolean sendSceneCooperation(List<ScenePro> proList, List<ScenePlus> plusList, String username,String lang);
 
     Boolean sendCameraCooperation(HashMap<Long, Camera> cameraMap, String username, String lang);
+
+    void sendPayErrorMail(String email,String memberLevels);
+
+    void sendSubcriptionCancelledMail(String email,String memberLevels);
 }

+ 2 - 2
src/main/java/com/fdkankan/ucenter/service/ISceneProService.java

@@ -21,7 +21,7 @@ import java.util.List;
  * pro场景表 服务类
  * </p>
  *
- * @author 
+ * @author
  * @since 2022-07-04
  */
 public interface ISceneProService extends IService<ScenePro> {
@@ -84,7 +84,7 @@ public interface ISceneProService extends IService<ScenePro> {
 
     Object getScenes(String username, RequestScene param);
 
-     void updateOssStatus(String path,Integer payStatus) ;
+    void updateOssStatus(String path,Integer payStatus) ;
 
     Integer getSceneSourceByNum(String sceneNum);
 

+ 8 - 0
src/main/java/com/fdkankan/ucenter/service/IUserIncrementService.java

@@ -46,4 +46,12 @@ public interface IUserIncrementService extends IService<UserIncrement> {
     void delByCameraId(List<Long> cameraIds);
 
     HashMap<String, List<Long>> getByOrderSnList(Set<String> orderSn);
+
+    List<UserIncrement> getByAutoOrderSn(String orderSn);
+
+    void delay(UserIncrement increment);
+
+    void cancelSubscriptions(UserIncrement increment);
+
+    void cancelSubscription(Long incrementId);
 }

+ 18 - 42
src/main/java/com/fdkankan/ucenter/service/impl/AppSceneService.java

@@ -105,57 +105,33 @@ public class AppSceneService {
         
         Page<AppSceneVo> page =  scenePlusMapper.pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
 
-        Set<Long> cameraIdSet = page.getRecords().stream().map(AppSceneVo::getCameraId).collect(Collectors.toSet());
-        List<Long> cameraIds =  new ArrayList<>(cameraIdSet);
-        HashMap<Long, Camera> cameraHashMap = cameraService.getByIds(cameraIds);
-        HashMap<Long, CameraDetail> detailHashMap = cameraDetailService.getByCameraIds(cameraIds);
+//        Set<Long> cameraIdSet = page.getRecords().stream().map(AppSceneVo::getCameraId).collect(Collectors.toSet());
+//        List<Long> cameraIds =  new ArrayList<>(cameraIdSet);
+//        HashMap<Long, Camera> cameraHashMap = cameraService.getByIds(cameraIds);
+//        HashMap<Long, CameraDetail> detailHashMap = cameraDetailService.getByCameraIds(cameraIds);
+        //账号密码登录 sceneSourceType 取值 1用户场景,2协作场景
+        //相机登录     sceneSourceType 取值皆为0
 
         for (AppSceneVo record : page.getRecords()) {
-            record.setChildName(record.getSnCode());
             if (record.getStatus() == -1) {
                 record.setStatus(0);
             } else if (record.getStatus() == 500) {
                 record.setStatus(-1);
             }
-            if(record.getCameraId() == null){
-                record.setSceneSourceType(record.getUserId().longValue() == param.getUserId() ? 1 : 2);
-            }else {
+            //虚拟场景
+            if(record.getCameraId() == null && param.getUserId() != null){
+                record.setSceneSourceType(record.getUserId().equals(param.getUserId()) ? 1 :2);
+                continue;
+            }
+            //相机场景
+            if(param.getCameraId() !=null && record.getCameraId().equals(param.getCameraId())){
                 record.setSceneSourceType(0);
-                Camera camera = cameraHashMap.get(record.getCameraId());
-                if(camera == null){
-                    continue;
-                }
-                CameraDetail cameraDetail = detailHashMap.get(camera.getId());
-                if(cameraDetail == null){
-                    continue;
-                }
-                record.setChildName(camera.getChildName());
-                record.setSnCode(camera.getSnCode());
-                if(cooperationNumList.contains(record.getNum())){
-                    record.setSceneSourceType(2);
-                    continue ;
-                }
-                //相机的userId为空,表示相机的场景
-                if (cameraDetail.getUserId() == null || param.getUserId() == null ) {
-                    record.setSceneSourceType(0);
-                    continue;
-                }
-                if (cameraDetail.getUserId().equals(param.getUserId())) {
-                    //相机用户id等于该用户id,既为用户的场景
-                    record.setSceneSourceType(1);
-                    continue;
-                }
-                if (param.getCameraId()!=null && cameraDetail.getCameraId().equals(param.getCameraId())) {
-                    if (cameraDetail.getCooperationUser() == null) {
-                        //场景相机id等于该相机id
-                        record.setSceneSourceType(0);
-                    } else if (cameraDetail.getCooperationUser().equals(param.getUserId())) {
-                        record.setSceneSourceType(2);
-                    }
-                }
-
+                continue;
+            }
+            //用户场景
+            if(param.getUserId() != null && record.getUserId() != null){
+                record.setSceneSourceType(record.getUserId().equals(param.getUserId()) ? 1 :2);
             }
-
         }
         return PageInfo.PageInfo(page);
     }

+ 1 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CameraServiceImpl.java

@@ -209,6 +209,7 @@ public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implem
                     responseCamera.setMemberLevels(userIncrement.getMemberLevels());
                     responseCamera.setSpaceEndStr(DateUserUtil.getDayTime(userIncrement.getIncrementEndTime()));
                     responseCamera.setSpaceEndTime(userIncrement.getIncrementEndTime());
+                    responseCamera.setSubscriptionOrder(userIncrement.getSubscriptionOrder());
 
                     String dayTime = userIncrement.getIncrementEndTime();
                     Integer surplusDate = Days.daysBetween(new DateTime(), new DateTime( DateUserUtil.getDate(dayTime))).getDays();

+ 27 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CameraTypeServiceImpl.java

@@ -0,0 +1,27 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.ucenter.entity.CameraType;
+import com.fdkankan.ucenter.mapper.ICameraTypeMapper;
+import com.fdkankan.ucenter.service.ICameraTypeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-12
+ */
+@Service
+public class CameraTypeServiceImpl extends ServiceImpl<ICameraTypeMapper, CameraType> implements ICameraTypeService {
+
+    @Override
+    public CameraType getByCameraType(Integer cameraType) {
+        LambdaQueryWrapper<CameraType> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CameraType::getCameraType,cameraType);
+        return this.getOne(wrapper);
+    }
+}

+ 21 - 0
src/main/java/com/fdkankan/ucenter/service/impl/CompanyServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.ucenter.entity.Company;
+import com.fdkankan.ucenter.mapper.ICompanyMapper;
+import com.fdkankan.ucenter.service.ICompanyService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 客户企业logo信息 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2021-12-24
+ */
+@Service
+public class CompanyServiceImpl extends ServiceImpl<ICompanyMapper, Company> implements ICompanyService {
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/ucenter/service/impl/DownloadOrderServiceImpl.java

@@ -120,7 +120,7 @@ public class DownloadOrderServiceImpl extends ServiceImpl<IDownloadOrderMapper,
     public DownloadOrder insertDownloadOrder(User user, DownNumParam param, BigDecimal price) {
         BigDecimal total = price.multiply(new BigDecimal(param.getCount()));
         PayGoods payGoods = new PayGoods(param.getSceneName() ,param.getCount(),param.getSceneNum(),2);
-        PayOrderVo payOrderVo = payService.downOrder(total, "downOrder",user.getUserName(),user.getNickName(), Arrays.asList(payGoods));
+        PayOrderVo payOrderVo = payService.downOrder(total, "downOrder",user.getUserName(),user.getNickName(), Arrays.asList(payGoods),null);
         if(payOrderVo == null){
             throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
         }

+ 136 - 0
src/main/java/com/fdkankan/ucenter/service/impl/IncrementAutoOrderServiceImpl.java

@@ -0,0 +1,136 @@
+package com.fdkankan.ucenter.service.impl;
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.ucenter.common.constants.ResultCode;
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
+import com.fdkankan.ucenter.entity.IncrementOrder;
+import com.fdkankan.ucenter.entity.User;
+import com.fdkankan.ucenter.entity.UserIncrement;
+import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
+import com.fdkankan.ucenter.mapper.IIncrementAutoOrderMapper;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
+import com.fdkankan.ucenter.pay.strategy.impl.IncrementOrderImpl;
+import com.fdkankan.ucenter.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-11-09
+ */
+@Service
+public class IncrementAutoOrderServiceImpl extends ServiceImpl<IIncrementAutoOrderMapper, IncrementAutoOrder> implements IIncrementAutoOrderService {
+
+    @Autowired
+    IUserIncrementService userIncrementService;
+    @Autowired
+    IIncrementOrderService incrementOrderService;
+    @Autowired
+    IncrementOrderImpl incrementOrder;
+    @Autowired
+    IMailTemplateService mailTemplateService;
+    @Autowired
+    IUserService userService;
+
+    @Override
+    public void addOrder(Long userId, Integer incrementTypeId, Long incrementId, String orderSn) {
+        IncrementAutoOrder autoOrder = new IncrementAutoOrder();
+        autoOrder.setUserId(userId);
+        autoOrder.setIncrementTypeId(incrementTypeId);
+        autoOrder.setUserIncrementId(incrementId);
+        autoOrder.setOrderSn(orderSn);
+        this.save(autoOrder);
+    }
+
+    @Override
+    public IncrementAutoOrder getByIncrementId(Long incrementId) {
+        LambdaQueryWrapper<IncrementAutoOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(IncrementAutoOrder::getUserIncrementId,incrementId);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public void subOrder(String orderSn,String subscriptionId) {
+        LambdaUpdateWrapper<IncrementAutoOrder> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(IncrementAutoOrder::getOrderSn,orderSn);
+        wrapper.set(IncrementAutoOrder::getSubscriptionId,subscriptionId);
+        this.update(wrapper);
+    }
+
+    @Override
+    public IncrementAutoOrder getBySubId(String subscriptionId) {
+        LambdaUpdateWrapper<IncrementAutoOrder> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(IncrementAutoOrder::getSubscriptionId,subscriptionId);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public void paySuccess(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) throws Exception {
+        incrementOrderService.addNewOrderByOrder(incrementAutoOrder,order);
+
+        incrementOrder.handleOrder(order.getOrderSn(),order.getTradeNo(),order.getOrderSn(),2,null);
+
+    }
+
+    @Override
+    public void payError(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) {
+        User user = userService.getById(incrementAutoOrder.getUserId());
+        if(user != null){
+            List<UserIncrement> userIncrements = userIncrementService.getByAutoOrderSn(order.getSubscriptionId());
+            if(userIncrements.size() >0){
+                mailTemplateService.sendPayErrorMail(user.getUserName(),userIncrements.get(0).getMemberLevels());
+            }
+        }
+    }
+
+    @Override
+    public void subscriptionCancelled(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) {
+        List<UserIncrement> userIncrements = userIncrementService.getByAutoOrderSn(order.getSubscriptionId());
+        for (UserIncrement increment : userIncrements) {
+            userIncrementService.cancelSubscriptions(increment);
+            User user = userService.getById(increment.getUserId());
+            if(user != null){
+                mailTemplateService.sendSubcriptionCancelledMail(user.getUserName(),increment.getMemberLevels());
+            }
+        }
+        this.removeById(incrementAutoOrder.getId());
+    }
+
+    @Override
+    public void setIncrementId(IncrementAutoOrder incrementAutoOrder, Long incrmentId) {
+        if(incrementAutoOrder != null){
+            LambdaUpdateWrapper<IncrementAutoOrder> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(IncrementAutoOrder::getId,incrementAutoOrder.getId());
+            wrapper.set(IncrementAutoOrder::getUserIncrementId,incrmentId);
+            this.update(wrapper);
+        }
+    }
+
+    @Override
+    public void delByIncrementId(Long incrementId) {
+        LambdaUpdateWrapper<IncrementAutoOrder> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(IncrementAutoOrder::getUserIncrementId,incrementId);
+        this.remove(wrapper);
+    }
+
+    @Override
+    public IncrementAutoOrder getByOrderSn(String orderSn) {
+        LambdaUpdateWrapper<IncrementAutoOrder> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(IncrementAutoOrder::getOrderSn,orderSn);
+        List<IncrementAutoOrder> list = this.list(wrapper);
+        if(list == null || list.size()<=0){
+            return null;
+        }
+        return list.get(0);
+    }
+}

+ 80 - 6
src/main/java/com/fdkankan/ucenter/service/impl/IncrementOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.amazonaws.services.simpleworkflow.flow.annotations.NoWait;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -11,14 +12,17 @@ import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.common.util.NumberUtils;
 import com.fdkankan.ucenter.common.SkuEnum;
+import com.fdkankan.ucenter.common.constants.ResultCode;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.constant.OrderConstant;
 import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.httpClient.client.PayClient;
+import com.fdkankan.ucenter.httpClient.param.PayAutoPayVo;
 import com.fdkankan.ucenter.httpClient.param.PayGoods;
 import com.fdkankan.ucenter.httpClient.service.PayService;
 import com.fdkankan.ucenter.httpClient.vo.PayOrderVo;
 import com.fdkankan.ucenter.mapper.IIncrementOrderMapper;
+import com.fdkankan.ucenter.pay.paypal.sdk.AutoPaypalVo;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fdkankan.ucenter.util.DateUserUtil;
@@ -36,6 +40,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -62,6 +67,8 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
     IGoodsSkuService goodsSkuService;
     @Autowired
     IIncrementTypeService incrementTypeService;
+    @Autowired
+    IIncrementAutoOrderService incrementAutoOrderService;
 
     @Override
     public PageInfo pageList(IncrementOrderParam param) {
@@ -169,13 +176,41 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
         if(param.getMonthQy() != null){
             total = total.multiply(new BigDecimal(param.getMonthQy()));  //高级会员月份
         }
+        if(param.getIncrementId() != null){
+            IncrementAutoOrder autoOrder2 =  incrementAutoOrderService.getByIncrementId(param.getIncrementId());
+            if(autoOrder2 != null){
+                throw new BusinessException(ResultCode.FAILURE_CODE_400007,ResultCode.FAILURE_MSG_400007);
+            }
+        }
 
         IncrementOrder incrementOrderEntity = new IncrementOrder();
+        PayAutoPayVo autoPayVo = null;
+        String autoStartTime = null;
+        String autoPayTime = null;
+        UserIncrement userIncrement = null;
+        if(param.getAutoPay() != null && param.getAutoPay() == 1){
+            if(param.getIncrementId() != null){
+                userIncrement = userIncrementService.getById(param.getIncrementId());
+                if(userIncrement != null){
+                    autoStartTime = userIncrement.getIncrementEndTime();
+                }
+            }
+        }
+        if(incrementType.getValidTimeType() == 0){
+            incrementOrderEntity.setMemberLevels("PR");
+            autoPayTime = "YEAR";
+        }
+        if(incrementType.getValidTimeType() == 1){
+            incrementOrderEntity.setMemberLevels("SE");
+            autoPayTime = "MONTH";
+        }
+        autoPayVo =new PayAutoPayVo(param.getAutoPay(),autoPayTime,autoStartTime);
         PayGoods payGoods = new PayGoods(incrementType.getName(),param.getCount(),incrementType.getValidTimeType(),param.getMonthQy());
-        PayOrderVo payOrderVo = payService.downOrder(total, "incrementOrder",user.getUserName(),user.getNickName(), Arrays.asList(payGoods));
+        PayOrderVo payOrderVo = payService.downOrder(total, "incrementOrder",user.getUserName(),user.getNickName(), Arrays.asList(payGoods),autoPayVo);
         if(payOrderVo == null){
             throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
         }
+
         incrementOrderEntity.setOrderSn(payOrderVo.getOrderSn());
         incrementOrderEntity.setAmount(total);
         incrementOrderEntity.setPayType(param.getPayType());
@@ -191,11 +226,10 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
         incrementOrderEntity.setIncrementType(incrementType.getId());
         incrementOrderEntity.setMonthQy(param.getMonthQy());
         incrementOrderEntity.setTimeZoneOff(param.getTimeZoneOff());
-        if(incrementType.getValidTimeType() == 0){
-            incrementOrderEntity.setMemberLevels("PR");
-        }
-        if(incrementType.getValidTimeType() == 1){
-            incrementOrderEntity.setMemberLevels("SE");
+        incrementOrderEntity.setAutoPay(param.getAutoPay());
+        if(param.getAutoPay() != null && param.getAutoPay()==1){
+            incrementAutoOrderService.addOrder(user.getId(),incrementType.getId(),param.getIncrementId(),incrementOrderEntity.getOrderSn());
+            return incrementOrderEntity;
         }
         this.save(incrementOrderEntity);
         return incrementOrderEntity;
@@ -233,4 +267,44 @@ public class IncrementOrderServiceImpl extends ServiceImpl<IIncrementOrderMapper
                 .eq(IncrementOrder::getOrderSn,orderSn);
         return this.update(updateWrapper);
     }
+
+    @Override
+    public void addNewOrderByOrder(IncrementAutoOrder incrementAutoOrder, AutoPaypalVo order) {
+
+        IncrementOrder incrementOrder = new IncrementOrder();
+        incrementOrder.setOrderSn(order.getOrderSn());
+        incrementOrder.setAmount(new BigDecimal(order.getAmount()));
+        incrementOrder.setPayType(2);
+        incrementOrder.setPayStatus(-1);
+        incrementOrder.setUserId(incrementAutoOrder.getUserId());
+        incrementOrder.setCount(1);
+        incrementOrder.setNumber(order.getTradeNo());
+        incrementOrder.setAbroad(1);
+        incrementOrder.setStatus(incrementAutoOrder.getUserIncrementId() == null ? 1 : 2);
+        incrementOrder.setIncrementId(incrementAutoOrder.getUserIncrementId());
+        incrementOrder.setRecStatus("A");
+        incrementOrder.setCreateTime(DateUserUtil.getDate(new Date()));
+        incrementOrder.setUpdateTime(DateUserUtil.getDate(new Date()));
+        incrementOrder.setIncrementType(incrementAutoOrder.getIncrementTypeId());
+        incrementOrder.setMonthQy(1);
+        incrementOrder.setAutoPay(1);
+        incrementOrder.setAutoOrderId(incrementAutoOrder.getId());
+        incrementOrder.setTimeZoneOff(-480);
+
+        IncrementType incrementType = incrementTypeService.getById(incrementAutoOrder.getIncrementTypeId());
+        if(incrementType != null && incrementType.getValidTimeType() == 0){
+            incrementOrder.setMemberLevels("PR");
+        }
+        if(incrementType != null && incrementType.getValidTimeType() == 1){
+            incrementOrder.setMemberLevels("SE");
+        }
+        if(incrementType != null && incrementType.getPrice() != null && StringUtils.isNotBlank(order.getAmount())){
+            BigDecimal payAmount = new BigDecimal(order.getAmount());
+            BigDecimal price = incrementType.getPrice();
+            Integer monthQy = payAmount.divide(price,2, RoundingMode.HALF_UP).intValue();
+            incrementOrder.setMonthQy(monthQy <=0 ? 1 : monthQy);
+        }
+
+        this.save(incrementOrder);
+    }
 }

+ 81 - 3
src/main/java/com/fdkankan/ucenter/service/impl/MailTemplateServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.SecurityUtil;
 import com.fdkankan.ucenter.common.constants.NacosProperty;
 import com.fdkankan.ucenter.common.constants.ResultCode;
 import com.fdkankan.ucenter.entity.*;
@@ -70,27 +71,51 @@ public class MailTemplateServiceImpl extends ServiceImpl<IMailTemplateMapper, Ma
     }
 
     @Override
-    public Boolean sendPeExMail(String email) {
+    public Boolean sendPeExMail(String email,String memberLevels) {
         MailTemplate mailTemplate = this.getTemplate(3,"en");
+        if(mailTemplate != null){
+            String msg = mailTemplate.getMsg();
+            if(StringUtils.isNotBlank(memberLevels)){
+                msg = msg.replace("{memberLevels}",getMemberLeversMsg(memberLevels));
+                msg = msg.replace("{money}",getMoney(memberLevels));
+                msg = msg.replace("{time}",getTime(memberLevels));
+            }
+            mailTemplate.setMsg(msg);
+        }
         return sendMail(email,mailTemplate,null);
     }
 
     @Override
-    public Boolean sendPeNoExMail(String email,Integer day) {
+    public Boolean sendPeNoExMail(String email,Integer day,String memberLevels) {
         MailTemplate mailTemplate = this.getTemplate(4,"en");
         if(mailTemplate != null){
             String msg = mailTemplate.getMsg();
+            if(StringUtils.isNotBlank(memberLevels)){
+                msg = msg.replace("{memberLevels}",getMemberLeversMsg(memberLevels));
+                msg = msg.replace("{money}",getMoney(memberLevels));
+                msg = msg.replace("{time}",getTime(memberLevels));
+            }
             if(day != null && day >0){
                 msg = msg.replace("{day}",day.toString());
             }
+
             mailTemplate.setMsg(msg);
         }
         return sendMail(email,mailTemplate,null);
     }
 
     @Override
-    public Boolean sendPeTodayExMail(String email) {
+    public Boolean sendPeTodayExMail(String email,String memberLevels) {
         MailTemplate mailTemplate = this.getTemplate(5,"en");
+        if(mailTemplate != null){
+            String msg = mailTemplate.getMsg();
+            if(StringUtils.isNotBlank(memberLevels)){
+                msg = msg.replace("{memberLevels}",getMemberLeversMsg(memberLevels));
+                msg = msg.replace("{money}",getMoney(memberLevels));
+                msg = msg.replace("{time}",getTime(memberLevels));
+            }
+            mailTemplate.setMsg(msg);
+        }
         return sendMail(email,mailTemplate,null);
     }
 
@@ -157,4 +182,57 @@ public class MailTemplateServiceImpl extends ServiceImpl<IMailTemplateMapper, Ma
         }
         return false;
     }
+
+    @Override
+    public void sendPayErrorMail(String email,String memberLevels) {
+        MailTemplate mailTemplate = this.getTemplate(9,"en");
+        if(mailTemplate != null){
+            String msg = mailTemplate.getMsg();
+            if(StringUtils.isNotBlank(memberLevels)){
+                msg = msg.replace("{memberLevels}",getMemberLeversMsg(memberLevels));
+                msg = msg.replace("{money}",getMoney(memberLevels));
+                msg = msg.replace("{time}",getTime(memberLevels));
+            }
+            mailTemplate.setMsg(msg);
+        }
+        sendMail(email,mailTemplate,null);
+    }
+
+    @Override
+    public void sendSubcriptionCancelledMail(String email, String memberLevels) {
+        MailTemplate mailTemplate = this.getTemplate(10,"en");
+        if(mailTemplate != null){
+            String msg = mailTemplate.getMsg();
+            if(StringUtils.isNotBlank(memberLevels)){
+                //PREMIUM/SENIOR
+                msg = msg.replace("{memberLevels}",getMemberLeversMsg(memberLevels));
+            }
+            mailTemplate.setMsg(msg);
+        }
+        sendMail(email,mailTemplate,null);
+    }
+
+    public  String getMemberLeversMsg(String memberLevels){
+        switch (memberLevels){
+            case "PR" :return "PREMIUM";
+            case "SE" :return "SENIOR";
+        }
+        return "PREMIUM/SENIOR";
+    }
+
+    public  String getTime(String memberLevels){
+        switch (memberLevels){
+            case "PR" :return "year";
+            case "SE" :return "month";
+        }
+        return "year/month";
+    }
+
+    public  String getMoney(String memberLevels){
+        switch (memberLevels){
+            case "PR" :return "$980";
+            case "SE" :return "$40";
+        }
+        return "$980/$40";
+    }
 }

+ 7 - 1
src/main/java/com/fdkankan/ucenter/service/impl/OrderServiceImpl.java

@@ -78,6 +78,8 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
     IUserIncrementService userIncrementService;
     @Autowired
     IOrderService orderService;
+    @Autowired
+    IIncrementAutoOrderService incrementAutoOrderService;
 
     @Override
     public PageInfo pageList(OrderParam param) {
@@ -178,7 +180,7 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
             goodsInfoList.add(payGoods);
         }
 
-        PayOrderVo payOrderVo = payService.downOrder(goodsAmount, "partOrder",user.getUserName(),user.getNickName(),goodsInfoList);
+        PayOrderVo payOrderVo = payService.downOrder(goodsAmount, "partOrder",user.getUserName(),user.getNickName(),goodsInfoList,null);
         if(payOrderVo == null){
             throw new BusinessException(OrderConstant.FAILURE_CODE_8005,OrderConstant.FAILURE_MSG_8005);
         }
@@ -241,6 +243,10 @@ public class OrderServiceImpl extends ServiceImpl<IOrderMapper, Order> implement
         if(incrementOrder != null && incrementOrder.getPayStatus() == 1){
             return true;
         }
+        IncrementAutoOrder autoOrder = incrementAutoOrderService.getByOrderSn(orderSn);
+        if(autoOrder != null && StringUtils.isNotBlank(autoOrder.getSubscriptionId())){
+            return true;
+        }
         return false;
     }
 

+ 13 - 8
src/main/java/com/fdkankan/ucenter/service/impl/Scene3dNumServiceImpl.java

@@ -4,11 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.RandomUtil;
 import com.fdkankan.redis.util.RedisUtil;
-import com.fdkankan.ucenter.common.CameraTypeEnum;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.common.constants.ResultCode;
+import com.fdkankan.ucenter.entity.CameraType;
 import com.fdkankan.ucenter.entity.Scene3dNum;
 import com.fdkankan.ucenter.mapper.IScene3dNumMapper;
+import com.fdkankan.ucenter.service.ICameraTypeService;
 import com.fdkankan.ucenter.service.IScene3dNumService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
@@ -34,6 +35,8 @@ public class Scene3dNumServiceImpl extends ServiceImpl<IScene3dNumMapper, Scene3
 
     @Autowired
     RedisUtil redisUtil;
+    @Autowired
+    ICameraTypeService cameraTypeService;
 
     @Override
     public String generateSceneNum(Integer cameraType) {
@@ -41,14 +44,16 @@ public class Scene3dNumServiceImpl extends ServiceImpl<IScene3dNumMapper, Scene3
         if(StringUtils.isEmpty(sceneNum)){
             throw new BusinessException(ResultCode.FAILURE_CODE_400001,ResultCode.FAILURE_MSG_400001);
         }
-        return addPrefix(sceneNum,cameraType);
-    }
-
-    private  static  String addPrefix( String num,Integer cameraType){
-        if(cameraType == null){
-            return num;
+        if(cameraType != null){
+            CameraType cameraTypeEntity = cameraTypeService.getByCameraType(cameraType);
+            if(cameraTypeEntity == null ){
+                log.info("generateSceneNum-error:cameraType{}",cameraType);
+                throw new BusinessException(-1,"相机类型不存在");
+            }
+            return cameraTypeEntity.getScenePrefix() + sceneNum;
         }
-        return CameraTypeEnum.getSceneNumPrefixByType(cameraType) + num;
+        return sceneNum;
+
     }
 
 }

+ 1 - 1
src/main/java/com/fdkankan/ucenter/service/impl/ScenePlusServiceImpl.java

@@ -70,7 +70,7 @@ public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlu
     @Autowired
     private IScenePlusExtService scenePlusExtService;
     @Autowired
-    private SceneCommonService sceneCommonService;
+    public SceneCommonService sceneCommonService;
     @Autowired
     private ISceneEditInfoService sceneEditInfoService;
     @Autowired

+ 6 - 1
src/main/java/com/fdkankan/ucenter/service/impl/SceneProServiceImpl.java

@@ -745,6 +745,9 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         this.save(scenePro);
 
         ExecutorService executor = ThreadUtil.newSingleExecutor();
+        try {
+
+
         CompletableFuture.runAsync(() -> {
 
             String oldDataSource = scenePro.getDataSource();
@@ -824,7 +827,9 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         }, executor).whenComplete((reslut, e) -> {
             log.info("copy-success-");
         });
-
+        }catch ( Exception e){
+           log.error("copyError",e);
+        }
         return scenePro.getId();
     }
     private void copyOssAndNas(String oldNum ,String newNum ,String sourcePath,String targetPath){

+ 61 - 17
src/main/java/com/fdkankan/ucenter/service/impl/UserIncrementServiceImpl.java

@@ -2,24 +2,19 @@ package com.fdkankan.ucenter.service.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.PatternUtils;
-import com.fdkankan.common.util.SecurityUtil;
-import com.fdkankan.sms.SendMailAcceUtils;
 import com.fdkankan.sms.SmsService;
-import com.fdkankan.ucenter.common.MailUtil;
 import com.fdkankan.ucenter.common.PageInfo;
 import com.fdkankan.common.util.DateUtil;
+import com.fdkankan.ucenter.common.ResultData;
 import com.fdkankan.ucenter.common.constants.NacosProperty;
 import com.fdkankan.ucenter.constant.CameraConstant;
 import com.fdkankan.ucenter.constant.LoginConstant;
-import com.fdkankan.ucenter.entity.Camera;
-import com.fdkankan.ucenter.entity.CameraDetail;
-import com.fdkankan.ucenter.entity.User;
-import com.fdkankan.ucenter.entity.UserIncrement;
+import com.fdkankan.ucenter.entity.*;
+import com.fdkankan.ucenter.httpClient.client.PayClient;
 import com.fdkankan.ucenter.mapper.IUserIncrementMapper;
 import com.fdkankan.ucenter.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -27,14 +22,11 @@ import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.vo.request.IncrementParam;
 import com.fdkankan.ucenter.vo.response.UserIncrementVo;
 import jodd.util.StringUtil;
-import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.ObjectUtils;
 
-import java.security.GeneralSecurityException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -65,6 +57,8 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
     ICameraIncrementLogService cameraIncrementLogService;
     @Autowired
     IExceedSpaceSceneService exceedSpaceSceneService;
+    @Autowired
+    IIncrementTypeService incrementTypeService;
 
     @Override
     public Long getCountByUserId(Long userId, int type) {
@@ -338,8 +332,8 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
                 }
             }
         }
-        this.sendMsg(userIdsRP,"premium");
-        this.sendMsg(userIdsSE,"senior");
+        this.sendMsg(userIdsRP,"PR");
+        this.sendMsg(userIdsSE,"SE");
     }
 
     private void sendMsg(Map<Long, Integer> userIds,String msgType) throws Exception {
@@ -358,14 +352,14 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
                 if("aws".equals(NacosProperty.uploadType)  && StringUtil.isNotBlank(userEntity.getUserName())){
                     Integer days = userIds.get(userId);
                     if(days == null || days<0){
-                        mailTemplateService.sendPeExMail(userEntity.getUserName());
+                        mailTemplateService.sendPeExMail(userEntity.getUserName(),msgType);
                         continue;
                     }
                     if(days > 0){
-                        mailTemplateService.sendPeNoExMail(userEntity.getUserName(),userIds.get(userId));
+                        mailTemplateService.sendPeNoExMail(userEntity.getUserName(),userIds.get(userId),msgType);
                         continue;
                     }
-                    mailTemplateService.sendPeTodayExMail(userEntity.getUserName());
+                    mailTemplateService.sendPeTodayExMail(userEntity.getUserName(),msgType);
 
                 }
             }
@@ -416,4 +410,54 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
 
         return map;
     }
+
+    @Override
+    public List<UserIncrement> getByAutoOrderSn(String orderSn) {
+        LambdaQueryWrapper<UserIncrement> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(UserIncrement::getSubscriptionOrder,orderSn);
+        wrapper.orderByAsc(UserIncrement::getCreateTime);
+        return this.list(wrapper);
+    }
+
+    /**
+     * 续费1单位
+     */
+    @Override
+    public void delay(UserIncrement increment) {
+        LambdaUpdateWrapper<UserIncrement> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(UserIncrement::getId,increment.getId());
+        wrapper.set(UserIncrement::getIsExpired,0);
+
+        IncrementType incrementType = incrementTypeService.getById(increment.getIncrementTypeId());
+        Date date = DateUserUtil.getDateTime(new Date(),incrementType,1).toDate();
+        wrapper.set(UserIncrement::getIncrementEndTime,date);
+        this.update(wrapper);
+    }
+
+    @Override
+    public void cancelSubscriptions(UserIncrement increment) {
+        LambdaUpdateWrapper<UserIncrement> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(UserIncrement::getId,increment.getId());
+        wrapper.set(UserIncrement::getSubscriptionOrder,null);
+        this.update(wrapper);
+    }
+
+    @Autowired
+    PayClient payClient;
+    @Autowired
+    IIncrementAutoOrderService incrementAutoOrderService;
+
+    @Override
+    public void cancelSubscription(Long incrementId) {
+        UserIncrement userIncrement = this.getById(incrementId);
+        if(userIncrement == null){
+            throw new BusinessException(ErrorCode.VALUE_NOT_EXIST);
+        }
+        ResultData resultData = payClient.cancelSubscription(userIncrement.getSubscriptionOrder());
+        if(resultData.getCode() !=200){
+            throw new BusinessException(resultData.getCode(),resultData.getMessage());
+        }
+        this.cancelSubscriptions(userIncrement);
+        incrementAutoOrderService.delByIncrementId(incrementId);
+    }
 }

+ 26 - 4
src/main/java/com/fdkankan/ucenter/task/TaskService.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.task;
 
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.common.util.DateUtil;
 import com.fdkankan.common.util.FileUtils;
 import com.fdkankan.redis.util.RedisUtil;
@@ -10,6 +11,7 @@ import com.fdkankan.ucenter.common.StatisticsUtil;
 import com.fdkankan.ucenter.common.constants.NacosProperty;
 import com.fdkankan.ucenter.common.utils.AuthLicenseUtil;
 import com.fdkankan.ucenter.constant.QrCodeFilePath;
+import com.fdkankan.ucenter.entity.IncrementAutoOrder;
 import com.fdkankan.ucenter.service.*;
 import com.fdkankan.ucenter.util.DateUserUtil;
 import com.fdkankan.ucenter.vo.response.AuthLicenseEntityVo;
@@ -20,9 +22,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.io.File;
-import java.util.Date;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 @Component
 public class TaskService {
@@ -184,5 +184,27 @@ public class TaskService {
         log.info("清除场景计算目录任务执行完成");
     }
 
-
+    /**
+     * 清除订阅信息
+     */
+    @Autowired
+    IIncrementAutoOrderService incrementAutoOrderService;
+
+    @Scheduled(cron = "${task.cron.del_subscription:0 */1 * * * ?}")
+    public void delSub(){
+        LambdaQueryWrapper<IncrementAutoOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.isNull(IncrementAutoOrder::getSubscriptionId);
+        List<IncrementAutoOrder> list = incrementAutoOrderService.list(wrapper);
+        List<Integer> delList = new ArrayList<>();
+        for (IncrementAutoOrder autoOrder : list) {
+            Long time = autoOrder.getCreateTime().getTime() + 1000 * 60 * 10;
+            if(new Date().getTime() > time){
+                delList.add(autoOrder.getId());
+            }
+        }
+        if(delList.size() >0){
+            log.info("超过十分钟未付款删除订阅信息:{}",delList.size());
+            incrementAutoOrderService.removeByIds(delList);
+        }
+    }
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/vo/request/DownNumParam.java

@@ -24,6 +24,8 @@ public class DownNumParam {
 
     private Integer timeZoneOff;
 
+    private Integer autoPay ;
+
     public Integer getIncrementType() {
         if(incrementType == null && StringUtils.isNotBlank(skuSn) && StringUtils.isNumeric(skuSn)){
             return  Integer.valueOf(skuSn);

+ 1 - 1
src/main/java/com/fdkankan/ucenter/vo/response/AppSceneVo.java

@@ -28,7 +28,7 @@ public class AppSceneVo {
     private Long sceneNum;
     private String type;
 
-    private Integer sceneSourceType;
+    private Integer sceneSourceType = 0;
     private Long userId;
 
     private String dataSource;

+ 3 - 0
src/main/java/com/fdkankan/ucenter/vo/response/CameraVo.java

@@ -61,4 +61,7 @@ public class CameraVo {
     private String memberLevels;
 
     private  ResponseUserIncrement responseUserIncrement;
+
+    private String subscriptionOrder;
+
 }

+ 2 - 0
src/main/java/com/fdkankan/ucenter/vo/response/UserIncrementVo.java

@@ -52,6 +52,8 @@ public class UserIncrementVo  {
     private String memberLevels;
     private Integer monthQy;
 
+    private String subscriptionOrder;
+
 
     public String getIncrementStartStr() {
         return DateUserUtil.getDayTime(incrementStartTime);

+ 1 - 0
src/main/resources/mapper/ucenter/CameraMapper.xml

@@ -29,6 +29,7 @@
     <select id="getCameraInfo" resultType="com.fdkankan.ucenter.vo.response.CameraAppVo">
          select * from  t_camera c
         left join t_camera_detail d on c.id = d.camera_id
+        left join t_goods g on d.goods_id = g.id
         left join t_user u on d.user_id = u.id
         where c.rec_status = 'A'
         and c.child_name = #{childName}

+ 5 - 0
src/main/resources/mapper/ucenter/CameraTypeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.ucenter.mapper.ICameraTypeMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/ucenter/IncrementAutoOrderMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.ucenter.mapper.IIncrementAutoOrderMapper">
+
+</mapper>

+ 4 - 2
src/main/resources/mapper/ucenter/ScenePlusMapper.xml

@@ -5,8 +5,9 @@
     <select id="pageList" resultType="com.fdkankan.ucenter.vo.response.AppSceneVo">
         SELECT p.id ,null as name ,0 as isFolder,null as type,null as parentId ,p.create_time,num,scene_name,scene_dec,
         p.status,pay_status,thumb,web_site,0 as is_upgrade,view_count,
-         p.camera_id,p.user_id ,p.data_source,p.scene_type,build_type
+         p.camera_id,p.user_id ,p.data_source,p.scene_type,build_type,ca.sn_code,ca.child_name
         FROM t_scene_pro p
+        left join t_camera ca on p.camera_id = ca.id
         left join `t_camera_detail` tcd on p.camera_id = tcd.camera_id
         WHERE is_upgrade = 0 and  p.rec_status = 'A'   AND ( p.status = 1 OR p.status = -2) AND p.scene_type != 99
         <include refid="commonWhere"></include>
@@ -16,8 +17,9 @@
         UNION
         SELECT p.id as id ,null as name ,0 as isFolder,null as type,null as parentId,p.create_time ,num,title as scene_name,description as scene_dec,
         scene_status as status,pay_status,thumb,web_site,1 as is_upgrade,view_count,
-        p.camera_id,p.user_id,e.data_source,p.scene_type,build_type
+        p.camera_id,p.user_id,e.data_source,p.scene_type,build_type,ca.sn_code,ca.child_name
         FROM t_scene_plus p
+        left join t_camera ca on p.camera_id = ca.id
         LEFT JOIN t_scene_plus_ext e on p.id = e.plus_id
         left join `t_camera_detail` tcd on p.camera_id = tcd.camera_id
         WHERE  p.rec_status = 'A' AND ( p.scene_status = 1 OR p.scene_status = -2) AND p.scene_type != 99