sanlin.shi hace 1 año
padre
commit
53abd64e80
Se han modificado 30 ficheros con 923 adiciones y 22 borrados
  1. 15 2
      src/main/java/cn/hanghui/outapi/platform/alipay/config/AlipayConfig.java
  2. 37 0
      src/main/java/cn/hanghui/outapi/platform/alipay/constant/AlipayOpenApiProperties.java
  3. 2 2
      src/main/java/cn/hanghui/outapi/platform/alipay/controller/AlipayFaceAuthController.java
  4. 67 0
      src/main/java/cn/hanghui/outapi/platform/alipay/controller/AlipayOpenApiController.java
  5. 59 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/po/IotvspUserInfo.java
  6. 32 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/AlipayOpenApiBaseRequest.java
  7. 17 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayGroupIdOpenApiRequest.java
  8. 31 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordCreateOpenApiRequest.java
  9. 30 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordCreateWithVidOpenApiRequest.java
  10. 44 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordInfoApiRequest.java
  11. 47 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordInfoWithVidApiRequest.java
  12. 30 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOrgUserInfoOpenMqRequest.java
  13. 24 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayUserDeleteOpenApiRequest.java
  14. 28 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayUserDeleteOpenMqRequest.java
  15. 21 0
      src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayUserStateOpenApiRequest.java
  16. 11 0
      src/main/java/cn/hanghui/outapi/platform/alipay/mapper/IotvspUserInfoMapper.java
  17. 49 0
      src/main/java/cn/hanghui/outapi/platform/alipay/service/AlipayOpenApiService.java
  18. 6 7
      src/main/java/cn/hanghui/outapi/platform/alipay/service/impl/AlipayFaceAuthServiceImpl.java
  19. 215 0
      src/main/java/cn/hanghui/outapi/platform/alipay/service/impl/AlipayOpenApiServiceImpl.java
  20. 1 0
      src/main/java/cn/hanghui/outapi/platform/common/config/WebSecurityConfig.java
  21. 37 0
      src/main/java/cn/hanghui/outapi/platform/common/controller/BaseController.java
  22. 5 0
      src/main/java/cn/hanghui/outapi/platform/common/entity/po/Account.java
  23. 1 0
      src/main/java/cn/hanghui/outapi/platform/common/service/impl/LoginServiceImpl.java
  24. 6 3
      src/main/java/cn/hanghui/outapi/platform/ldrk/controller/LdrkController.java
  25. 1 1
      src/main/java/cn/hanghui/outapi/platform/ldrk/service/LdrkService.java
  26. 35 1
      src/main/java/cn/hanghui/outapi/platform/ldrk/service/impl/LdrkServiceImpl.java
  27. 42 1
      src/main/java/cn/hanghui/outapi/platform/tenant/service/impl/SceneServiceImpl.java
  28. 12 0
      src/main/resources/application-dev.yml
  29. 14 1
      src/main/resources/application-prod.yml
  30. 4 4
      src/main/resources/application.yml

+ 15 - 2
src/main/java/cn/hanghui/outapi/platform/alipay/config/AlipayConfig.java

@@ -1,17 +1,20 @@
 package cn.hanghui.outapi.platform.alipay.config;
 
 import cn.hanghui.outapi.platform.alipay.constant.AlipayFaceAuthParam;
+import cn.hanghui.outapi.platform.alipay.constant.AlipayOpenApiProperties;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.request.AlipaySystemOauthTokenRequest;
 import com.alipay.api.response.AlipaySystemOauthTokenResponse;
 import lombok.AllArgsConstructor;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+@Data
 @Configuration
-@AllArgsConstructor(onConstructor_ = @Autowired)
 public class AlipayConfig {
 
     /**
@@ -20,7 +23,8 @@ public class AlipayConfig {
      * @param alipayFaceAuthParam AlipayFaceParam
      * @return AlipayClient
      */
-    @Bean
+    @Bean(name = "alipayFaceAuthClient")
+    @Qualifier(value = "alipayFaceAuthClient")
     public AlipayClient alipayFaceAuthClient(AlipayFaceAuthParam alipayFaceAuthParam) {
         return new DefaultAlipayClient(alipayFaceAuthParam.getGateway(),
                 alipayFaceAuthParam.getAppid(),
@@ -28,6 +32,15 @@ public class AlipayConfig {
                 "json","utf8", alipayFaceAuthParam.getAlipayPublicKey(), "RSA2");
     }
 
+    @Bean(name = "alipayOpenApiClient")
+    @Qualifier(value = "alipayOpenApiClient")
+    public AlipayClient alipayOpenApiClient(AlipayOpenApiProperties alipayOpenApiProperties) {
+        return new DefaultAlipayClient(alipayOpenApiProperties.getALIPAY_SERVICE_URL(),
+                alipayOpenApiProperties.getAppId(), alipayOpenApiProperties.getAlipayPrivateKey(),
+                alipayOpenApiProperties.getFormat(),alipayOpenApiProperties.getCharset(),
+                alipayOpenApiProperties.getAlipayPublicKey(), alipayOpenApiProperties.getSignType());
+    }
+
     public static void main(String[] args) throws Exception {
         AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                 "2021003181645575",

+ 37 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/constant/AlipayOpenApiProperties.java

@@ -0,0 +1,37 @@
+package cn.hanghui.outapi.platform.alipay.constant;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * 终端人脸识别应用参数
+ */
+@Data
+@Component
+public class AlipayOpenApiProperties {
+
+    @Value("${alipay.open.api.appid}")
+    private String appId;
+
+    @Value("${alipay.open.api.private-key}")
+    private String alipayPrivateKey;
+
+    @Value("${alipay.open.api.public-key}")
+    private String alipayPublicKey;
+
+    @Value("${alipay.open.api.service-url}")
+    private String ALIPAY_SERVICE_URL;
+
+    @Value("${alipay.open.api.format}")
+    private String format;
+
+    @Value("${alipay.open.api.charset}")
+    private String charset;
+
+    @Value("${alipay.open.api.sign-type}")
+    private String signType;
+
+
+
+}

+ 2 - 2
src/main/java/cn/hanghui/outapi/platform/alipay/controller/AlipayFaceAuthController.java

@@ -15,10 +15,10 @@ import org.springframework.web.bind.annotation.*;
 @Api(tags = "支付宝人脸认证服务")
 @RestController
 @RequestMapping("alipayApi/faceAuth")
-@AllArgsConstructor(onConstructor_ = @Autowired)
 public class AlipayFaceAuthController {
 
-    private final AlipayFaceAuthService alipayFaceAuthService;
+    @Autowired
+    private AlipayFaceAuthService alipayFaceAuthService;
 
     /**
      * 获取支付宝用户信息

+ 67 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/controller/AlipayOpenApiController.java

@@ -0,0 +1,67 @@
+package cn.hanghui.outapi.platform.alipay.controller;
+
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayGroupIdOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayOperateRecordCreateWithVidOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayUserDeleteOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayUserStateOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.service.AlipayOpenApiService;
+import cn.hanghui.outapi.platform.common.entity.rest.RestResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.controller
+ * @class AlipayOpenApiController
+ * @date 2023/5/5 下午2:19
+ * @description
+ */
+@Validated
+@Api(tags = "支付宝开放接口")
+@RestController
+@RequestMapping("/alipay/api/v1/open")
+public class AlipayOpenApiController {
+
+    @Autowired
+    private AlipayOpenApiService alipayOpenApiService;
+
+    @ApiOperation(value = "查询封闭场景的机构用户库id")
+    @PostMapping("/iotvsp/groupid/query")
+    public RestResult queryOrgGroupId(@RequestBody AlipayGroupIdOpenApiRequest req) {
+        return alipayOpenApiService.queryOrgGroupId(req);
+    }
+
+    @ApiOperation(value = "录入机构用户信息(自定义vid)")
+    @PostMapping("/iotvsp/userwithvid/create")
+    public RestResult createOperateRecordWithVid(@RequestBody AlipayOperateRecordCreateWithVidOpenApiRequest req) {
+        return alipayOpenApiService.createOperateRecordWithVid(req);
+    }
+
+    @ApiOperation(value = "机构用户出库(自定义vid)")
+    @PostMapping("/iotvsp/user/delete")
+    public RestResult deleteUser(@RequestBody AlipayUserDeleteOpenApiRequest req) {
+        return alipayOpenApiService.deleteUser(req);
+    }
+
+    @ApiOperation(value = "查询机构用户在库结果")
+    @PostMapping("/iotvsp/userstate/query")
+    public RestResult queryUserState(@RequestBody AlipayUserStateOpenApiRequest req) {
+        return alipayOpenApiService.queryUserState(req);
+    }
+
+    //TODO。。。 alipay.open.iotvsp.user.create(录入机构用户信息)
+    //TODO。。。 alipay.open.iotvsp.usercreate.notify(通知机构用户入库结果)
+    //TODO。。。 alipay.open.iotvsp.userdelete.notify(通知机构用户出库结果)
+
+
+
+
+
+
+}

+ 59 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/po/IotvspUserInfo.java

@@ -0,0 +1,59 @@
+package cn.hanghui.outapi.platform.alipay.entity.po;
+
+import cn.hanghui.outapi.platform.common.entity.po.Base;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.po
+ * @class IotvspUserInfo
+ * @date 2023/5/5 下午4:29
+ * @description iotvsp用户库
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "iotvsp_user_info", autoResultMap = true)
+public class IotvspUserInfo extends Base {
+
+    /**
+     * 证件类型,IDENTITY_CARD身份证,PASS_PORT护照,STU_NUM学生学号,COMPANY_NUM工号,TAIWAN_CARD台胞证,HK_MC_CARD港澳证件
+     */
+    private String certType;
+    /**
+     * 证件号码
+     */
+    private String certNo;
+    /**
+     * 用户姓名
+     */
+    private String certName;
+    /**
+     * 手机号
+     */
+    private String phone;
+    /**
+     * 扩展信息
+     */
+    private String ext;
+
+    /**
+     * 用户id,和录入人员获取unique_id顺序一致
+     */
+    private String vid;
+
+    /**
+     * 用户入库响应回来的unique_id
+     */
+    private String uniqueId;
+
+    /**
+     * 机构编码
+     */
+    private String orgOutId;
+
+
+}

+ 32 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/AlipayOpenApiBaseRequest.java

@@ -0,0 +1,32 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayOpenApiBaseRequest
+ * @date 2023/5/5 下午2:31
+ * @description
+ */
+@Data
+public class AlipayOpenApiBaseRequest {
+
+    /**
+     * isv的商户id
+     */
+    @ApiModelProperty(value = "isv的商户id")
+    @JSONField(name = "isv_pid")
+    private String isvPid;
+    /**
+     * 机构编码
+     */
+    @ApiModelProperty(value = "机构编码")
+    @JSONField(name = "org_out_id")
+    private String orgOutId;
+
+
+
+}

+ 17 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayGroupIdOpenApiRequest.java

@@ -0,0 +1,17 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import cn.hanghui.outapi.platform.alipay.entity.rest.AlipayOpenApiBaseRequest;
+import lombok.Data;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayGroupIdOpenApiRequest
+ * @date 2023/5/5 下午2:32
+ * @description 查询机构用户库ID
+ */
+@Data
+public class AlipayGroupIdOpenApiRequest extends AlipayOpenApiBaseRequest {
+
+
+}

+ 31 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordCreateOpenApiRequest.java

@@ -0,0 +1,31 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import cn.hanghui.outapi.platform.alipay.entity.rest.AlipayOpenApiBaseRequest;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayOperateRecordCreateOpenApiRequest
+ * @date 2023/5/5 下午2:34
+ * @description 录入机构用户信息
+ */
+@Data
+public class AlipayOperateRecordCreateOpenApiRequest extends AlipayOpenApiBaseRequest {
+
+    /**
+     * 组件编码
+     */
+    @JSONField(name = "component_out_id")
+    private String componentOutId;
+    /**
+     * 用户信息
+     */
+    @JSONField(name = "user_info_list")
+    private List<AlipayOperateRecordInfoApiRequest> userInfoList;
+
+
+}

+ 30 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordCreateWithVidOpenApiRequest.java

@@ -0,0 +1,30 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import cn.hanghui.outapi.platform.alipay.entity.rest.AlipayOpenApiBaseRequest;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayOperateRecordCreateWithVidOpenApiRequest
+ * @date 2023/5/5 下午2:37
+ * @description 录入机构用户信息(自定义vid)
+ */
+@Data
+public class AlipayOperateRecordCreateWithVidOpenApiRequest extends AlipayOpenApiBaseRequest {
+
+    /**
+     * 组件编码
+     */
+    @JSONField(name = "component_out_id")
+    private String componentOutId;
+    /**
+     * 用户信息
+     */
+    @JSONField(name = "user_info_list")
+    private List<AlipayOperateRecordInfoWithVidApiRequest> userInfoList;
+
+}

+ 44 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordInfoApiRequest.java

@@ -0,0 +1,44 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayOperateRecordInfoApiRequest
+ * @date 2023/5/5 下午2:35
+ * @description 用户信息
+ */
+@Data
+public class AlipayOperateRecordInfoApiRequest {
+
+    /**
+     * 证件类型,IDENTITY_CARD身份证,PASS_PORT护照,STU_NUM学生学号,COMPANY_NUM工号,TAIWAN_CARD台胞证,HK_MC_CARD港澳证件
+     */
+    @JSONField(name = "cert_type")
+    private String certType;
+    /**
+     * 证件号码
+     */
+    @JSONField(name = "cert_no")
+    private String certNo;
+    /**
+     * 用户姓名
+     */
+    @JSONField(name = "cert_name")
+    private String certName;
+    /**
+     * 手机号
+     */
+    @JSONField(name = "phone")
+    private String phone;
+    /**
+     * 扩展信息
+     */
+    @JSONField(name = "ext")
+    private String ext;
+
+
+
+}

+ 47 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOperateRecordInfoWithVidApiRequest.java

@@ -0,0 +1,47 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayOperateRecordInfoWithVidApiRequest
+ * @date 2023/5/5 下午2:38
+ * @description 用户信息vid
+ */
+@Data
+public class AlipayOperateRecordInfoWithVidApiRequest {
+
+    /**
+     * 用户核身唯一标识
+     */
+    @JSONField(name = "vid")
+    private String vid;
+    /**
+     * 证件类型,IDENTITY_CARD身份证,PASS_PORT护照,STU_NUM学生学号,COMPANY_NUM工号,TAIWAN_CARD台胞证,HK_MC_CARD港澳证件
+     */
+    @JSONField(name = "cert_type")
+    private String certType;
+    /**
+     * 证件号码
+     */
+    @JSONField(name = "cert_no")
+    private String certNo;
+    /**
+     * 用户姓名
+     */
+    @JSONField(name = "cert_name")
+    private String certName;
+    /**
+     * 手机号
+     */
+    @JSONField(name = "phone")
+    private String phone;
+    /**
+     * 扩展信息
+     */
+    @JSONField(name = "ext")
+    private String ext;
+
+}

+ 30 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayOrgUserInfoOpenMqRequest.java

@@ -0,0 +1,30 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayOrgUserInfoOpenMqRequest
+ * @date 2023/5/5 下午2:39
+ * @description 订阅机构用户入库通知 用户信息
+ */
+@Data
+public class AlipayOrgUserInfoOpenMqRequest {
+    /**
+     * 用户id,和录入人员获取unique_id顺序一致
+     */
+    @JSONField(name = "vid")
+    private String vid;
+    /**
+     * 业务id状态,1成功2失败
+     */
+    @JSONField(name = "state")
+    private Integer state = 1;
+    /**
+     * 消息
+     */
+    @JSONField(name = "msg")
+    private String msg;
+}

+ 24 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayUserDeleteOpenApiRequest.java

@@ -0,0 +1,24 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import cn.hanghui.outapi.platform.alipay.entity.rest.AlipayOpenApiBaseRequest;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayUserDeleteOpenApiRequest
+ * @date 2023/5/5 下午2:41
+ * @description 机构用户出库
+ */
+@Data
+public class AlipayUserDeleteOpenApiRequest extends AlipayOpenApiBaseRequest {
+    /**
+     * vid列表
+     */
+    @JSONField(name = "vid_list")
+    private List<String> vidList;
+
+}

+ 28 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayUserDeleteOpenMqRequest.java

@@ -0,0 +1,28 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayUserDeleteOpenMqRequest
+ * @date 2023/5/5 下午2:40
+ * @description 订阅机构用户入库通知
+ */
+@Data
+public class AlipayUserDeleteOpenMqRequest {
+    /**
+     * 机构编码
+     */
+    @JSONField(name = "org_out_id")
+    private String orgOutId;
+    /**
+     * 用户信息
+     */
+    @JSONField(name = "user_info_list")
+    private List<AlipayOrgUserInfoOpenMqRequest> userInfoList;
+
+}

+ 21 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/entity/rest/request/AlipayUserStateOpenApiRequest.java

@@ -0,0 +1,21 @@
+package cn.hanghui.outapi.platform.alipay.entity.rest.request;
+
+import cn.hanghui.outapi.platform.alipay.entity.rest.AlipayOpenApiBaseRequest;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.entity.rest
+ * @class AlipayUserStateOpenApiRequest
+ * @date 2023/5/5 下午2:42
+ * @description 查询机构用户在库结果
+ */
+@Data
+public class AlipayUserStateOpenApiRequest extends AlipayOpenApiBaseRequest {
+    /**
+     * 用户id
+     */
+    @JSONField(name = "vid")
+    private String vid;
+}

+ 11 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/mapper/IotvspUserInfoMapper.java

@@ -0,0 +1,11 @@
+package cn.hanghui.outapi.platform.alipay.mapper;
+
+import cn.hanghui.outapi.platform.alipay.entity.po.IotvspUserInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface IotvspUserInfoMapper extends BaseMapper<IotvspUserInfo> {
+
+
+}

+ 49 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/service/AlipayOpenApiService.java

@@ -0,0 +1,49 @@
+package cn.hanghui.outapi.platform.alipay.service;
+
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayGroupIdOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayOperateRecordCreateWithVidOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayUserDeleteOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayUserStateOpenApiRequest;
+import cn.hanghui.outapi.platform.common.entity.rest.RestResult;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.service
+ * @class AlipayOpenApiService
+ * @date 2023/5/6 上午9:10
+ * @description
+ */
+public interface AlipayOpenApiService {
+
+    /**
+     * 查询封闭场景的机构用户库id
+     *
+     * @param req
+     * @return
+     */
+    RestResult queryOrgGroupId(AlipayGroupIdOpenApiRequest req);
+
+    /**
+     * 自定义vid录入机构用户信息获取操作流水id
+     *
+     * @param req
+     * @return
+     */
+    RestResult createOperateRecordWithVid(AlipayOperateRecordCreateWithVidOpenApiRequest req);
+
+    /**
+     * 机构用户出库
+     *
+     * @param req
+     * @return
+     */
+    RestResult deleteUser(AlipayUserDeleteOpenApiRequest req);
+
+    /**
+     * 查询机构用户在库结果
+     *
+     * @param request
+     * @return
+     */
+    RestResult queryUserState(AlipayUserStateOpenApiRequest request);
+}

+ 6 - 7
src/main/java/cn/hanghui/outapi/platform/alipay/service/impl/AlipayFaceAuthServiceImpl.java

@@ -5,19 +5,18 @@ import cn.hanghui.outapi.platform.alipay.entity.dto.AlipayUserInfoDto;
 import cn.hanghui.outapi.platform.alipay.entity.param.AlipayUserInfo;
 import cn.hanghui.outapi.platform.alipay.service.AlipayFaceAuthService;
 import com.alipay.api.AlipayClient;
-import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 @Service
-@AllArgsConstructor(onConstructor_ = @Autowired)
 public class AlipayFaceAuthServiceImpl implements AlipayFaceAuthService {
 
-    private final AlipayUserApi alipayUserApi;
-
-    private final AlipayClient alipayFaceAuthClient;
+    @Resource
+    private  AlipayUserApi alipayUserApi;
 
-    private final AlipayClient alipayUserClient;
+    @Resource
+    private  AlipayClient alipayFaceAuthClient;
 
     /**
      * 获取支付宝用户信息

+ 215 - 0
src/main/java/cn/hanghui/outapi/platform/alipay/service/impl/AlipayOpenApiServiceImpl.java

@@ -0,0 +1,215 @@
+package cn.hanghui.outapi.platform.alipay.service.impl;
+
+import cn.hanghui.outapi.platform.alipay.entity.po.IotvspUserInfo;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayGroupIdOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayOperateRecordCreateOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayOperateRecordCreateWithVidOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayOperateRecordInfoWithVidApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayUserDeleteOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.entity.rest.request.AlipayUserStateOpenApiRequest;
+import cn.hanghui.outapi.platform.alipay.mapper.IotvspUserInfoMapper;
+import cn.hanghui.outapi.platform.alipay.service.AlipayOpenApiService;
+import cn.hanghui.outapi.platform.common.entity.rest.RestResult;
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.request.AlipayOpenIotvspGroupidQueryRequest;
+import com.alipay.api.request.AlipayOpenIotvspUserCreateRequest;
+import com.alipay.api.request.AlipayOpenIotvspUserDeleteRequest;
+import com.alipay.api.request.AlipayOpenIotvspUserstateQueryRequest;
+import com.alipay.api.request.AlipayOpenIotvspUserwithvidCreateRequest;
+import com.alipay.api.response.AlipayOpenIotvspGroupidQueryResponse;
+import com.alipay.api.response.AlipayOpenIotvspUserCreateResponse;
+import com.alipay.api.response.AlipayOpenIotvspUserDeleteResponse;
+import com.alipay.api.response.AlipayOpenIotvspUserstateQueryResponse;
+import com.alipay.api.response.AlipayOpenIotvspUserwithvidCreateResponse;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import io.jsonwebtoken.lang.Collections;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.alipay.service.impl
+ * @class AlipayOpenApiServiceImpl
+ * @date 2023/5/6 上午9:11
+ * @description
+ */
+@Slf4j
+@Service
+public class AlipayOpenApiServiceImpl implements AlipayOpenApiService {
+
+    @Resource
+    private AlipayClient alipayOpenApiClient;
+
+    @Resource
+    private IotvspUserInfoMapper iotvspUserInfoMapper;
+
+    @Override
+    public RestResult queryOrgGroupId(AlipayGroupIdOpenApiRequest openApiRequest) {
+        log.info("--->查询封闭场景的机构用户库id传递参数:{}", JSONObject.toJSONString(openApiRequest));
+        String groupId = null;
+        AlipayOpenIotvspGroupidQueryRequest request = new AlipayOpenIotvspGroupidQueryRequest();
+        request.setBizContent(JSON.toJSONString(openApiRequest));
+        try {
+            AlipayOpenIotvspGroupidQueryResponse response = alipayOpenApiClient.execute(request);
+            log.info("--->查询封闭场景的机构用户库id响应参数:{}", JSONObject.toJSONString(response));
+            if (Objects.nonNull(response) && response.isSuccess() && StringUtils.isNotBlank(response.getGroupId())) {
+                groupId = response.getGroupId();
+            } else {
+                return RestResult.error(new StringBuffer(response.getMsg()).append(" ").append(response.getSubMsg()).toString());
+            }
+        } catch (Exception e) {
+            log.error("query org group id error.", e);
+            return RestResult.error("查询封闭场景的机构平台异常,请联系管理员");
+
+        }
+        return RestResult.ok(groupId);
+    }
+
+    @Override
+    public RestResult createOperateRecordWithVid(AlipayOperateRecordCreateWithVidOpenApiRequest openApiRequest) {
+        log.info("--->自定义vid录入机构用户信息获取操作流水id传递参数:{}", JSONObject.toJSONString(openApiRequest));
+        //处理人员
+        handleUserInfoList(openApiRequest);
+        if (Collections.isEmpty(openApiRequest.getUserInfoList())) {
+            return RestResult.error("用户都已存在");
+        }
+        String uniqueId = null;
+        AlipayOpenIotvspUserwithvidCreateRequest request = new AlipayOpenIotvspUserwithvidCreateRequest();
+        request.setBizContent(JSON.toJSONString(openApiRequest));
+        try {
+            AlipayOpenIotvspUserwithvidCreateResponse response = alipayOpenApiClient.execute(request);
+            log.info("--->自定义vid录入机构用户信息获取操作流水id响应参数:{}", JSONObject.toJSONString(openApiRequest));
+            if (Objects.nonNull(response) && response.isSuccess() && StringUtils.isNotBlank(response.getUniqueId())) {
+                uniqueId = response.getUniqueId();
+                //TODO。。。IotvspUserInfo用户信息入库
+                opIotvspUserInfo(openApiRequest, uniqueId);
+            } else {
+                return RestResult.error(new StringBuffer(response.getMsg()).append(" ").append(response.getSubMsg()).toString());
+            }
+        } catch (Exception e) {
+            log.error("create operate record with vid error.", e);
+            return RestResult.error("自定义vid录入机构用户信息机构平台异常,请联系管理员");
+        }
+        return RestResult.ok(uniqueId);
+    }
+
+    @Override
+    public RestResult deleteUser(AlipayUserDeleteOpenApiRequest openApiRequest) {
+        AlipayOpenIotvspUserDeleteRequest request = new AlipayOpenIotvspUserDeleteRequest();
+        request.setBizContent(JSON.toJSONString(openApiRequest));
+        try {
+            AlipayOpenIotvspUserDeleteResponse response = alipayOpenApiClient.execute(request);
+            if (Objects.nonNull(response) && response.isSuccess()) {
+                //TODO。。。IotvspUserInfo用户信息出库
+                delIotvspUserInfo(openApiRequest);
+                return RestResult.ok(Boolean.TRUE);
+            } else {
+                return RestResult.error(new StringBuffer(response.getMsg()).append(" ").append(response.getSubMsg()).toString());
+            }
+        } catch (Exception e) {
+            log.error("create operate record error.", e);
+            return RestResult.error("自定义vid录入机构用户信息机构平台异常,请联系管理员");
+        }
+    }
+
+    @Override
+    public RestResult queryUserState(AlipayUserStateOpenApiRequest openApiRequest) {
+        AlipayOpenIotvspUserstateQueryRequest request = new AlipayOpenIotvspUserstateQueryRequest();
+        request.setBizContent(JSON.toJSONString(openApiRequest));
+        try {
+            AlipayOpenIotvspUserstateQueryResponse response = alipayOpenApiClient.execute(request);
+            if (Objects.nonNull(response) && response.isSuccess()) {
+                if ("1".equals(response.getState())) {
+                    return RestResult.ok(Boolean.TRUE);
+                } else {
+                    return RestResult.ok(Boolean.FALSE);
+                }
+            } else {
+                return RestResult.error(new StringBuffer(response.getMsg()).append(" ").append(response.getSubMsg()).toString());
+            }
+        } catch (Exception e) {
+            log.error("query user state error.", e);
+            return RestResult.error("查询机构用户在库结果机构平台异常,请联系管理员");
+
+        }
+    }
+
+    private void delIotvspUserInfo(AlipayUserDeleteOpenApiRequest openApiRequest) {
+        List<IotvspUserInfo> dbUserInfos = iotvspUserInfoMapper.selectList(Wrappers.lambdaQuery(IotvspUserInfo.class).eq(IotvspUserInfo::getOrgOutId, openApiRequest.getOrgOutId()).in(IotvspUserInfo::getVid, openApiRequest.getVidList()).eq(IotvspUserInfo::getIsDeleted, Boolean.FALSE));
+        if (Collections.isEmpty(dbUserInfos)) {
+            return;
+        }
+
+        dbUserInfos.stream().forEach(item -> {
+            item.setIsDeleted(Boolean.TRUE);
+            iotvspUserInfoMapper.updateById(item);
+        });
+
+    }
+
+    private void opIotvspUserInfo(AlipayOperateRecordCreateWithVidOpenApiRequest openApiRequest, String uniqueId) {
+        List<AlipayOperateRecordInfoWithVidApiRequest> filterUsers = new ArrayList<>();
+
+        List<AlipayOperateRecordInfoWithVidApiRequest> userInfoList = openApiRequest.getUserInfoList();
+        List<String> vids = userInfoList.stream().map(AlipayOperateRecordInfoWithVidApiRequest::getVid).collect(Collectors.toList());
+        List<IotvspUserInfo> dbUserInfos = iotvspUserInfoMapper.selectList(Wrappers.lambdaQuery(IotvspUserInfo.class).eq(IotvspUserInfo::getOrgOutId, openApiRequest.getOrgOutId()).in(IotvspUserInfo::getVid, vids).eq(IotvspUserInfo::getIsDeleted, Boolean.FALSE));
+        if (!Collections.isEmpty(dbUserInfos)) {
+            List<String> dbVids = dbUserInfos.stream().map(IotvspUserInfo::getVid).collect(Collectors.toList());
+            filterUsers = userInfoList.stream().filter(item -> !dbVids.contains(item.getVid())).collect(Collectors.toList());
+        }
+        //入库
+        if (!Collections.isEmpty(filterUsers)) {
+            filterUsers.forEach(item -> {
+                addIotvspUserInfo(item, openApiRequest.getOrgOutId(), uniqueId);
+            });
+        }
+    }
+
+    private void handleUserInfoList(AlipayOperateRecordCreateWithVidOpenApiRequest openApiRequest) {
+        List<AlipayOperateRecordInfoWithVidApiRequest> userInfoList = openApiRequest.getUserInfoList();
+        if (Collections.isEmpty(userInfoList)) {
+            return;
+        }
+        List<String> vids = new ArrayList<>();
+        userInfoList.stream().forEach(item -> {
+            vids.add(item.getCertType() + item.getCertNo());
+            item.setVid(item.getCertType() + item.getCertNo());
+        });
+        List<IotvspUserInfo> userInfos = iotvspUserInfoMapper.selectList(Wrappers.lambdaQuery(IotvspUserInfo.class).eq(IotvspUserInfo::getOrgOutId, openApiRequest.getOrgOutId()).in(IotvspUserInfo::getVid, vids).eq(IotvspUserInfo::getIsDeleted, Boolean.FALSE));
+        if (Collections.isEmpty(userInfos)) {
+            openApiRequest.setUserInfoList(userInfoList);
+            return;
+        }
+        List<AlipayOperateRecordInfoWithVidApiRequest> filterVidUsers = new ArrayList<>();
+        List<String> dbVids = userInfos.stream().map(IotvspUserInfo::getVid).collect(Collectors.toList());
+        userInfoList.stream().forEach(item -> {
+            if (!dbVids.contains(item.getVid())) {
+                filterVidUsers.add(item);
+            }
+        });
+        openApiRequest.setUserInfoList(filterVidUsers);
+    }
+
+    private void addIotvspUserInfo(AlipayOperateRecordInfoWithVidApiRequest item, String orgOutId, String uniqueId) {
+        IotvspUserInfo userInfo = BeanUtil.copyProperties(item, IotvspUserInfo.class);
+        userInfo.setOrgOutId(orgOutId);
+        userInfo.setUniqueId(uniqueId);
+        userInfo.setCreateTime(new Date());
+        userInfo.setUpdateTime(new Date());
+        userInfo.setVersion(1);
+        userInfo.setIsDeleted(Boolean.FALSE);
+        iotvspUserInfoMapper.insert(userInfo);
+    }
+}

+ 1 - 0
src/main/java/cn/hanghui/outapi/platform/common/config/WebSecurityConfig.java

@@ -105,6 +105,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter implements W
         excludeList.add("/**/api/v1/tenant/list");
         excludeList.add("/**/api/v1/tenant/sn/deviceWhiteList");
         excludeList.add("/**/api/v1/tenant/inner/list");
+        excludeList.add("/**/alipay/api/v1/open/**");
         return ArrayUtil.toArray(excludeList, String.class);
     }
 

+ 37 - 0
src/main/java/cn/hanghui/outapi/platform/common/controller/BaseController.java

@@ -0,0 +1,37 @@
+package cn.hanghui.outapi.platform.common.controller;
+
+import cn.hanghui.outapi.platform.common.config.JwtConfig;
+import cn.hanghui.outapi.platform.common.entity.rest.RestCode;
+import cn.hanghui.outapi.platform.common.exception.CommonException;
+import cn.hutool.jwt.JWT;
+import cn.hutool.jwt.JWTPayload;
+import cn.hutool.jwt.JWTUtil;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author shisl
+ * @package cn.hanghui.outapi.platform.common.controller
+ * @class BaseController
+ * @date 2023/5/10 下午3:10
+ * @description
+ */
+public class BaseController {
+
+    /**
+     * 获取登录用户id
+     *
+     * @param request
+     * @return
+     */
+    public String getUserId(HttpServletRequest request) {
+        String token = request.getHeader(JwtConfig.JWT_HEADER);
+        try {
+            JWT jwt = JWTUtil.parseToken(token);
+            JWTPayload payload = jwt.getPayload();
+            return payload.getClaim("id").toString();
+        } catch (Exception e) {
+            throw new CommonException(RestCode.UNAUTHORIZED.getMsg());
+        }
+    }
+}

+ 5 - 0
src/main/java/cn/hanghui/outapi/platform/common/entity/po/Account.java

@@ -20,4 +20,9 @@ public class Account extends Base {
      */
     private String password;
 
+    /**
+     * 派出所 9位代码 多个用,逗号分隔
+     */
+    private String pcsCode;
+
 }

+ 1 - 0
src/main/java/cn/hanghui/outapi/platform/common/service/impl/LoginServiceImpl.java

@@ -69,6 +69,7 @@ public class LoginServiceImpl implements LoginService {
         Account tokenAccount = new Account();
         tokenAccount.setName(loginDto.getAccountName());
         tokenAccount.setPassword(loginDto.getPassword());
+        tokenAccount.setId(account.getId());
         Map<String, Object> payload = BeanUtil.beanToMap(tokenAccount);
         String token = JWTUtil.createToken(payload, JwtConfig.SECRET_KEY.getBytes());
         redisTemplate.opsForValue().set(JwtConfig.TOKEN_PREFIX + loginDto.getAccountName(), token, JwtConfig.EXPIRE_TIME, TimeUnit.SECONDS);

+ 6 - 3
src/main/java/cn/hanghui/outapi/platform/ldrk/controller/LdrkController.java

@@ -2,6 +2,7 @@ package cn.hanghui.outapi.platform.ldrk.controller;
 
 import cn.hanghui.outapi.platform.common.annotation.DecryptBySm2;
 import cn.hanghui.outapi.platform.common.annotation.DecryptParam;
+import cn.hanghui.outapi.platform.common.controller.BaseController;
 import cn.hanghui.outapi.platform.common.entity.rest.Result;
 import cn.hanghui.outapi.platform.ldrk.entity.dto.LdrkReportDto;
 import cn.hanghui.outapi.platform.ldrk.service.LdrkService;
@@ -13,11 +14,13 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+
 @Api(tags = "流动人口API服务")
 @RestController
 @RequestMapping("ldrkApi")
 @AllArgsConstructor(onConstructor_ = @Autowired)
-public class LdrkController {
+public class LdrkController extends BaseController {
 
     private final LdrkService ldrkService;
 
@@ -30,8 +33,8 @@ public class LdrkController {
     @DecryptBySm2()
     @ApiOperation("流动人口自主申报")
     @PostMapping("reportPersonInfo")
-    public Result<Void> reportPersonInfo(@DecryptParam LdrkReportDto ldrkReportDto) {
-        ldrkService.reportPersonInfo(ldrkReportDto);
+    public Result<Void> reportPersonInfo(HttpServletRequest request, @DecryptParam LdrkReportDto ldrkReportDto) {
+        ldrkService.reportPersonInfo(ldrkReportDto, Long.valueOf(getUserId(request)));
         return Result.ok();
     }
 }

+ 1 - 1
src/main/java/cn/hanghui/outapi/platform/ldrk/service/LdrkService.java

@@ -9,5 +9,5 @@ public interface LdrkService {
      *
      * @param ldrkReportDto LdrkReportDto
      */
-    void reportPersonInfo(LdrkReportDto ldrkReportDto);
+    void reportPersonInfo(LdrkReportDto ldrkReportDto, Long adminId);
 }

+ 35 - 1
src/main/java/cn/hanghui/outapi/platform/ldrk/service/impl/LdrkServiceImpl.java

@@ -1,5 +1,8 @@
 package cn.hanghui.outapi.platform.ldrk.service.impl;
 
+import cn.hanghui.outapi.platform.common.entity.po.Account;
+import cn.hanghui.outapi.platform.common.exception.CommonException;
+import cn.hanghui.outapi.platform.common.mapper.AccountMapper;
 import cn.hanghui.outapi.platform.ldrk.api.LdrkApi;
 import cn.hanghui.outapi.platform.ldrk.entity.dto.LdrkReportDto;
 import cn.hanghui.outapi.platform.ldrk.entity.param.LdrkReportParam;
@@ -9,21 +12,52 @@ import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
 @Service
 @AllArgsConstructor(onConstructor_ = @Autowired)
 public class LdrkServiceImpl implements LdrkService {
 
     private final LdrkApi ldrkApi;
 
+    @Resource
+    private AccountMapper accountMapper;
+
     /**
      * 流动人口自主申报
      *
      * @param ldrkReportDto LdrkReportDto
      */
     @Override
-    public void reportPersonInfo(LdrkReportDto ldrkReportDto) {
+    public void reportPersonInfo(LdrkReportDto ldrkReportDto, Long adminId) {
+        //校验是否有权限访问
+        if (!checkReportAuth(ldrkReportDto.getPcs(), adminId)) {
+            throw new CommonException("调用流动人口自主申报没有权限");
+        }
         LdrkReportParam ldrkReportParam = new LdrkReportParam();
         BeanUtil.copyProperties(ldrkReportDto, ldrkReportParam);
         ldrkApi.reportPersonInfo(ldrkReportParam);
     }
+
+    private boolean checkReportAuth(String pcs, Long adminId) {
+        try {
+            Account account = accountMapper.selectById(adminId);
+            if (account == null
+                    || account.getIsDeleted()
+                    || pcs == null
+                    || "".equals(pcs.trim())
+                    || account.getPcsCode() == null
+                    || "".equals(account.getPcsCode().trim())) {
+                return false;
+            }
+            List<String> pcsCodes = Arrays.asList(account.getPcsCode().trim().split(","));
+            if (pcsCodes.contains(pcs)) {
+                return true;
+            }
+        } catch (Exception e) {
+        }
+        return false;
+    }
 }

+ 42 - 1
src/main/java/cn/hanghui/outapi/platform/tenant/service/impl/SceneServiceImpl.java

@@ -3,6 +3,7 @@ package cn.hanghui.outapi.platform.tenant.service.impl;
 import cn.hanghui.outapi.platform.common.entity.rest.RestResult;
 import cn.hanghui.outapi.platform.tenant.entity.dto.SceneDto;
 import cn.hanghui.outapi.platform.tenant.entity.dto.UserLibDto;
+import cn.hanghui.outapi.platform.tenant.entity.po.Device;
 import cn.hanghui.outapi.platform.tenant.entity.po.Scene;
 import cn.hanghui.outapi.platform.tenant.entity.po.UserLib;
 import cn.hanghui.outapi.platform.tenant.mapper.SceneMapper;
@@ -11,12 +12,15 @@ import cn.hanghui.outapi.platform.tenant.service.SceneService;
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author shisl
@@ -38,7 +42,9 @@ public class SceneServiceImpl implements SceneService {
 
     @Override
     public RestResult<Boolean> addScene(SceneDto dto) {
-
+        if (checkTrade(dto)) { //校验场景参数是否存在
+            return RestResult.error("场景参数已存在");
+        }
         if (dto.getId() != null) {
             Scene scene = sceneMapper.selectById(dto.getId());
             if (scene == null || scene.getIsDeleted()) {
@@ -61,6 +67,21 @@ public class SceneServiceImpl implements SceneService {
         return RestResult.ok(Boolean.TRUE);
     }
 
+    private boolean checkTrade(SceneDto dto) {
+        List<Scene> scenes = sceneMapper.selectList(Wrappers.lambdaQuery(Scene.class).eq(Scene::getTrade, dto.getTrade()).eq(Scene::getIsDeleted, Boolean.FALSE));
+        if (scenes != null && scenes.size() > 0) {
+            if (dto.getId() == null) {
+                return Boolean.TRUE;
+            } else {
+                List<Long> ids = scenes.stream().map(Scene::getId).collect(Collectors.toList());
+                if (!ids.contains(dto.getId())) {
+                    return Boolean.TRUE;
+                }
+            }
+        }
+        return Boolean.FALSE;
+    }
+
     @Override
     public RestResult<Boolean> delScene(Long id) {
         Scene scene = sceneMapper.selectById(id);
@@ -94,6 +115,11 @@ public class SceneServiceImpl implements SceneService {
 
     @Override
     public RestResult<Boolean> addUserLib(UserLibDto dto) {
+
+        if (checkGroupId(dto)) { //校验⽤⼾库ID是否存在
+            return RestResult.error("⽤⼾库ID已存在");
+        }
+
         if (dto.getId() != null) {
             UserLib userLib = userLibMapper.selectById(dto.getId());
             if (userLib == null || userLib.getIsDeleted()) {
@@ -116,6 +142,21 @@ public class SceneServiceImpl implements SceneService {
         return RestResult.ok(Boolean.TRUE);
     }
 
+    private boolean checkGroupId(UserLibDto dto) {
+        List<UserLib> userLibs = userLibMapper.selectList(Wrappers.lambdaQuery(UserLib.class).eq(UserLib::getGroupId, dto.getGroupId()).eq(UserLib::getIsDeleted, Boolean.FALSE));
+        if (userLibs != null && userLibs.size() > 0) {
+            if (dto.getId() == null) {
+                return Boolean.TRUE;
+            } else {
+                List<Long> ids = userLibs.stream().map(UserLib::getId).collect(Collectors.toList());
+                if (!ids.contains(dto.getId())) {
+                    return Boolean.TRUE;
+                }
+            }
+        }
+        return Boolean.FALSE;
+    }
+
     @Override
     public RestResult<Boolean> delUserLib(Long id) {
         UserLib userLib = userLibMapper.selectById(id);

+ 12 - 0
src/main/resources/application-dev.yml

@@ -110,3 +110,15 @@ knife4j:
     username: admin
     ## Basic认证密码
     password: hanghui2023
+
+#alipay open api properties
+alipay:
+  open:
+    api:
+      appid: 2021003181682188
+      private-key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCIKY7/nAQdPtK5TMoqK3IT3I+LfDzsVNkmEOHdm5pnO5Tr29lyA48j5lCTw5YMiGhulOxPrLbJRlaVCCrV/J0pBmFYb9yLQ8ScG8TCrdt31DeR9S3Z7dERxrN77XpmgepwfSjLgu7Q8LvKa2FDcFRDUnJrX609Be3hDrc7pVV46zJM17UREosRMKVQVE1ClYX6cfvluHIzujTm5oBUgEtot/kyZNhngbUl3kfvflq4EXn4Na9nydJUNYE3q0CmqxHvXYpGwOtG8X3gc+nz3t5UcJzD2dLWSuzFEJ7Gsayat3k4tBSpsNV9A4JipMZFzM473S0CxK9DLrz9sgOYSO0RAgMBAAECggEAMC0kH2SAQCi+PjnhPdJpZoWfdGbc13Gd80393H71vpjiNCFxalnAB5+x2tZU/NI2wQmIIxilA8oTUF+3aEcdBCrxvmy1x8COi/13PLpu8JLxpn7tXjI6yuNXFf4MVMCaxnpCON92yA6lIxWjME1KQxekzEDp9rFmXT7rrfrtpv5r96l1O1Xsd9Jza/6EePl/+krGmHUTTvUQiPcVHgAc0guMi2IITq+LqB8crKBWtjrmgcltWm5eGBhRD+mNiUKfACKlcnzdo6zn6+ANHnCD+MXK4LrFJCa8AFB82rAqWjLGeZGPlyMxXUGyoSQDp+bOco8P6u1JRcNL1VzEe+LuEQKBgQDM/ethfTPTQuT7LSrvLLg3OSavQVEJDRqjSskEB7GDGAD9thK+DCoTJOVvw9EZfH1WV2neHG2D51Yj2qISDRl9QPH2HmTv3zXyZxd1oLaxdbmGZaHgNKCmWgtXkSxxJKLukE4ZYjkGaUL7AqzOOVTcRfX0oxOsbN2Vc3wAki7TEwKBgQCqCyovk+xo9aednOQ045Z2lyJljq4z+x7vHrPrFmNaMtumwL3QgxawzSQRq7tZctmj3Qg9LkL/Fdlj5Y1W1+wE6FdKnhD+40985HOKHN2EVpeax0JCwEUZ3s4FJ1VlCNuzBFc4FLJQ/kGRXjeYh6ZgWPBsJwUXS0rpAD8ADs7fywKBgELzyBYuS2f72EgFZ5l4lK5Mt0rUXYBETGf6/A6Z6Kt1gpVbC2IRHQjlqx5G6ZuWYmV55XUK+eXz/9l0Bi05JBMZzC1jnfoOgFMswqfDlwf8+FxiA230ImhSzpOKMea+XYzniuqVfySN6reLFx+/7+yF2SBOxxUw9WpjrqONG0gLAoGAaqON1UCjZj+I2qNlynVgCwdFHwOX5Cl8gOF0W94yeIKklbMSVw2e0UoVcK+OUs5gBw+69wNoKKj/KFLxjKDk9z7uX3E5n1/WnbB3dQodMb1MXljQCSSjMVI1Sa4dM7uWbHIwcI8qNPj/DbdUjmejw5CDVpAx9SXW2MC6wcKHonkCgYAFinJl8BNrAHUt8H9JStFgngnqVTCnhysSeZcid8PKkVzi6JUf+uY8JFTwdNb+hCWyA10RBk4Xb9o5tX6oXDFOpXnyj1vfLNPNqQ6fpDe+8ikp3gzpVlhHH1rkyVPUjjtKUc5A12cJp3H/mEru/PDg1KUOcdLRINI0s1jK9mfpig==
+      public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs3P6x9kJof7pjZq0xK6HTnX+GSDbA5O0Uba3iCOEEqjP0x0o8KztnIu9p5JlRl8+L112sTZ29KsqRRFMTp5+5nfuw0S6T5PU5H3w/N60xec/TSYF6z7hNSJSErpxOuzfTOQtHAVP8mZpBjKduUMBfBfB+SAxIodEx6QSr7seVXTqpFo53FiNLwzXpR6UURe3SeS1+2vEczMfazFoXnE+LItddOeKiOWOtlriUutjjGRzkuEhP1xTybO37j1ug6PEe53iV4+ijYJzLj6bpTNFfYjKmYJOOsD9+yKV+AuYDPxZd9ZGIQkehw7HJwdiEsjd8eKWlrx0QkqJbQ9X8gnDXwIDAQAB
+      service-url: https://openapi.alipay.com/gateway.do
+      format: json
+      charset: utf-8
+      sign-type: RSA2

+ 14 - 1
src/main/resources/application-prod.yml

@@ -93,4 +93,17 @@ out-api:
     public-key: 0424f94412d98189bedc6231f04b2747008edfe44428ac525976805d3fb76e6dcec7189a3504d4ca2618fc81c0b999dbf2ef8a625e8420a4f6f64cd3d53f86d3e6
     app-key: e69dade5b79ee888aae6b187
 swagger:
-  enabled: false
+  enabled: false
+
+#alipay open api properties
+alipay:
+  open:
+    api:
+      appid: 2021003181682188
+      private-key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCIKY7/nAQdPtK5TMoqK3IT3I+LfDzsVNkmEOHdm5pnO5Tr29lyA48j5lCTw5YMiGhulOxPrLbJRlaVCCrV/J0pBmFYb9yLQ8ScG8TCrdt31DeR9S3Z7dERxrN77XpmgepwfSjLgu7Q8LvKa2FDcFRDUnJrX609Be3hDrc7pVV46zJM17UREosRMKVQVE1ClYX6cfvluHIzujTm5oBUgEtot/kyZNhngbUl3kfvflq4EXn4Na9nydJUNYE3q0CmqxHvXYpGwOtG8X3gc+nz3t5UcJzD2dLWSuzFEJ7Gsayat3k4tBSpsNV9A4JipMZFzM473S0CxK9DLrz9sgOYSO0RAgMBAAECggEAMC0kH2SAQCi+PjnhPdJpZoWfdGbc13Gd80393H71vpjiNCFxalnAB5+x2tZU/NI2wQmIIxilA8oTUF+3aEcdBCrxvmy1x8COi/13PLpu8JLxpn7tXjI6yuNXFf4MVMCaxnpCON92yA6lIxWjME1KQxekzEDp9rFmXT7rrfrtpv5r96l1O1Xsd9Jza/6EePl/+krGmHUTTvUQiPcVHgAc0guMi2IITq+LqB8crKBWtjrmgcltWm5eGBhRD+mNiUKfACKlcnzdo6zn6+ANHnCD+MXK4LrFJCa8AFB82rAqWjLGeZGPlyMxXUGyoSQDp+bOco8P6u1JRcNL1VzEe+LuEQKBgQDM/ethfTPTQuT7LSrvLLg3OSavQVEJDRqjSskEB7GDGAD9thK+DCoTJOVvw9EZfH1WV2neHG2D51Yj2qISDRl9QPH2HmTv3zXyZxd1oLaxdbmGZaHgNKCmWgtXkSxxJKLukE4ZYjkGaUL7AqzOOVTcRfX0oxOsbN2Vc3wAki7TEwKBgQCqCyovk+xo9aednOQ045Z2lyJljq4z+x7vHrPrFmNaMtumwL3QgxawzSQRq7tZctmj3Qg9LkL/Fdlj5Y1W1+wE6FdKnhD+40985HOKHN2EVpeax0JCwEUZ3s4FJ1VlCNuzBFc4FLJQ/kGRXjeYh6ZgWPBsJwUXS0rpAD8ADs7fywKBgELzyBYuS2f72EgFZ5l4lK5Mt0rUXYBETGf6/A6Z6Kt1gpVbC2IRHQjlqx5G6ZuWYmV55XUK+eXz/9l0Bi05JBMZzC1jnfoOgFMswqfDlwf8+FxiA230ImhSzpOKMea+XYzniuqVfySN6reLFx+/7+yF2SBOxxUw9WpjrqONG0gLAoGAaqON1UCjZj+I2qNlynVgCwdFHwOX5Cl8gOF0W94yeIKklbMSVw2e0UoVcK+OUs5gBw+69wNoKKj/KFLxjKDk9z7uX3E5n1/WnbB3dQodMb1MXljQCSSjMVI1Sa4dM7uWbHIwcI8qNPj/DbdUjmejw5CDVpAx9SXW2MC6wcKHonkCgYAFinJl8BNrAHUt8H9JStFgngnqVTCnhysSeZcid8PKkVzi6JUf+uY8JFTwdNb+hCWyA10RBk4Xb9o5tX6oXDFOpXnyj1vfLNPNqQ6fpDe+8ikp3gzpVlhHH1rkyVPUjjtKUc5A12cJp3H/mEru/PDg1KUOcdLRINI0s1jK9mfpig==
+      public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs3P6x9kJof7pjZq0xK6HTnX+GSDbA5O0Uba3iCOEEqjP0x0o8KztnIu9p5JlRl8+L112sTZ29KsqRRFMTp5+5nfuw0S6T5PU5H3w/N60xec/TSYF6z7hNSJSErpxOuzfTOQtHAVP8mZpBjKduUMBfBfB+SAxIodEx6QSr7seVXTqpFo53FiNLwzXpR6UURe3SeS1+2vEczMfazFoXnE+LItddOeKiOWOtlriUutjjGRzkuEhP1xTybO37j1ug6PEe53iV4+ijYJzLj6bpTNFfYjKmYJOOsD9+yKV+AuYDPxZd9ZGIQkehw7HJwdiEsjd8eKWlrx0QkqJbQ9X8gnDXwIDAQAB
+      service-url: https://openapi.alipay.com/gateway.do
+      format: json
+      charset: utf-8
+      sign-type: RSA2
+

+ 4 - 4
src/main/resources/application.yml

@@ -1,12 +1,12 @@
 spring:
   profiles:
-    active: @profile.active@
-#    active: dev
+#    active: @profile.active@
+    active: dev
 
 server:
   servlet:
-    context-path: ${context-path:/hanghui/outapi}
-#    context-path: /hanghui-server-platform
+#    context-path: ${context-path:/hanghui/outapi}
+    context-path: /hanghui-server-platform
 
 mybatis-plus:
   mapper-locations: classpath:cn/hanghui/outapi/platform/**/mapper/**.xml